// Memory map: // 0x0C00: current AXList // Voice PB structure: // the current PB is stored at 0x02D0 // offsets and sizes are counted in words // // Offset Size Desription // 0x000 2 Address of the next PB // 0x002 2 Address of this PB // 0x004 1 Sample rate converter (0-2) // 0x005 1 Coef select (0-2: 0x1000, 0x1200, 0x1400) // 0x006 2 Selects entries in 4 tables (19 bits used) // 0x008 1 Play/stop flag (1=play, 0=stop) // 0x022 1 Initial time delay enable // 0x023 2 Initial time delay data 0000 0000 nop 0001 0000 nop // Exception jump table 0002 029f 0f3c jmp 0x0f3c 0004 029f 0f48 jmp 0x0f48 0006 029f 0f4d jmp 0x0f4d 0008 029f 0f5c jmp 0x0f5c 000a 029f 0f61 jmp 0x0f61 000c 029f 0f8d jmp 0x0f8d 000e 029f 0f92 jmp 0x0f92 // Entry point void 0010_Entry() { 0010 1302 sbset #0x02 0011 1303 sbset #0x03 0012 1204 sbclr #0x04 0013 1305 sbset #0x05 0014 1306 sbset #0x06 0015 8e00 set16 0016 8c00 clr15 0017 8b00 m0 0018 0092 00ff lri $CR, #0x00ff 001a 009e 8000 lri $AC0.M, #0x8000 001c 00fe 0ce5 sr @0x0ce5, $AC0.M 001e 009e 8000 lri $AC0.M, #0x8000 0020 00fe 0ce6 sr @0x0ce6, $AC0.M 0022 00fe 0ce7 sr @0x0ce7, $AC0.M 0024 00fe 0ce8 sr @0x0ce8, $AC0.M 0026 8100 clr $ACC0 0027 00fe 0ce9 sr @0x0ce9, $AC0.M 0029 8900 clr $ACC1 002a 16fc dcd1 si @DMBH, #0xdcd1 002c 16fd 0000 si @DMBL, #0x0000 002e 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10000 and trigger an IRQ 0030 26fc lrs $AC0.M, @DMBH 0031 02a0 8000 andf $AC0.M, #0x8000 0033 029c 0030 jlnz 0x0030 // wait until the mail is received by CPU 0035 029f 004c jmp 0x004c // enter the main loop } void 0037_Unk_Restart() { 0037 1302 sbset #0x02 0038 1303 sbset #0x03 0039 1204 sbclr #0x04 003a 1305 sbset #0x05 003b 1306 sbset #0x06 003c 8e00 set16 003d 8c00 clr15 003e 8b00 m0 003f 0092 00ff lri $CR, #0x00ff 0041 16fc dcd1 si @DMBH, #0xdcd1 0043 16fd 0001 si @DMBL, #0x0001 0045 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10001 and trigger an IRQ 0047 26fc lrs $AC0.M, @DMBH 0048 02a0 8000 andf $AC0.M, #0x8000 004a 029c 0047 jlnz 0x0047 // wait until the mail is received by CPU // main loop 004c 8e00 set16 004d 8100 clr $ACC0 004e 8900 clr $ACC1 004f 009f babe lri $AC1.M, #0xbabe 0051 26fe lrs $AC0.M, @CMBH 0052 02c0 8000 andcf $AC0.M, #0x8000 0054 029c 0051 jlnz 0x0051 // wait until we get a new mail from CPU 0056 8200 cmp 0057 0294 0051 jnz 0x0051 // discard it if it's not a 0xBABE---- (AXList begin) 0059 23ff lrs $AX1.H, @CMBL // AX1.H = low part of 0xBABE---- mail = length of list in bytes 005a 8100 clr $ACC0 005b 26fe lrs $AC0.M, @CMBH 005c 02c0 8000 andcf $AC0.M, #0x8000 005e 029c 005b jlnz 0x005b // wait until the next mail 0060 27ff lrs $AC1.M, @CMBL 0061 0240 7fff andi $AC0.M, #0x7fff // AC0.M = address high part, AC1.M = address low part 0063 2ece srs @DSMAH, $AC0.M 0064 2fcf srs @DSMAL, $AC1.M 0065 16cd 0c00 si @DSPA, #0x0c00 0067 8100 clr $ACC0 0068 2ec9 srs @DSCR, $AC0.M 0069 1ffb mrr $AC1.M, $AX1.H // Transfer the AXList (DMA) 006a 2fcb srs @DSBL, $AC1.M // DMA transfer from main memory (addr = second mail) to 0x0C00, len = low part of first mail 006b 02bf 0084 call 0084_WaitForDMACompletion() 006d 0080 0c00 lri $AR0, #0x0c00 // AR0 = 0x0C00 } // continues into next function void 006f_MailHandler() { 006f 8e00 set16 0070 8100 clr $ACC0 0071 8970 clr'l $ACC1 : $AC0.M, @$AR0 0072 b100 tst $ACC0 0073 0291 0080 jl 0x0080 0075 0a0e lris $AX0.H, #0x0e 0076 c100 cmpar $ACC0, $AX0.H 0077 0292 0080 jg 0x0080 // die if command number is higher than 0xE 0079 009f 0d04 lri $AC1.M, #0x0d04 007b 4c00 add $ACC0, $ACC1 007c 1c7e mrr $AR3, $AC0.M 007d 0213 ilrr $AC0.M, @$AR3 007e 1c7e mrr $AR3, $AC0.M // func at [0x0D04 + cmd_num] 007f 176f jmpr $AR3 // Jump to command func: AR0 = 0x0C01. Okay. AC0.M = AC1.M = 0x0D04. Not interesting either. } void 0080_Die() { 0080 16fc baad si @DMBH, #0xbaad 0082 2efd srs @DMBL, $AC0.M 0083 0021 halt } void 0084_WaitForDMACompletion() { 0084 26c9 lrs $AC0.M, @DSCR 0085 02a0 0004 andf $AC0.M, #0x0004 0087 029c 0084 jlnz 0x0084 0089 02df ret } void 008a_Cmd_0() { 008a 8100 clr $ACC0 008b 8970 clr'l $ACC1 : $AC0.M, @$AR0 008c 8e78 set16'l : $AC1.M, @$AR0 008d 2ece srs @DSMAH, $AC0.M 008e 2fcf srs @DSMAL, $AC1.M 008f 16cd 0d08 si @DSPA, #0x0d08 0091 16c9 0000 si @DSCR, #0x0000 0093 16cb 0078 si @DSBL, #0x0078 0095 0081 0d08 lri $AR1, #0x0d08 0097 0082 0000 lri $AR2, #0x0000 0099 009b 005f lri $AX1.H, #0x005f 009b 009a 00c0 lri $AX0.H, #0x00c0 009d 8100 clr $ACC0 009e 8900 clr $ACC1 009f 8f00 set40 00a0 02bf 0084 call 0084_WaitForDMACompletion() 00a2 193e lrri $AC0.M, @$AR1 00a3 193c lrri $AC0.L, @$AR1 00a4 b179 tst'l $ACC0 : $AC1.M, @$AR1 00a5 0294 00ab jnz 0x00ab 00a7 005a loop $AX0.H 00a8 1b5e srri @$AR2, $AC0.M 00a9 029f 00b3 jmp 0x00b3 00ab 9900 asr16 $ACC1 00ac 1b5e srri @$AR2, $AC0.M 00ad 1b5c srri @$AR2, $AC0.L 00ae 007b 00b2 bloop $AX1.H, 0x00b2 00b0 4c00 add $ACC0, $ACC1 00b1 1b5e srri @$AR2, $AC0.M 00b2 1b5c srri @$AR2, $AC0.L 00b3 0082 00c0 lri $AR2, #0x00c0 00b5 193e lrri $AC0.M, @$AR1 00b6 193c lrri $AC0.L, @$AR1 00b7 b179 tst'l $ACC0 : $AC1.M, @$AR1 00b8 0294 00be jnz 0x00be 00ba 005a loop $AX0.H 00bb 1b5e srri @$AR2, $AC0.M 00bc 029f 00c6 jmp 0x00c6 00be 9900 asr16 $ACC1 00bf 1b5e srri @$AR2, $AC0.M 00c0 1b5c srri @$AR2, $AC0.L 00c1 007b 00c5 bloop $AX1.H, 0x00c5 00c3 4c00 add $ACC0, $ACC1 00c4 1b5e srri @$AR2, $AC0.M 00c5 1b5c srri @$AR2, $AC0.L 00c6 0082 0180 lri $AR2, #0x0180 00c8 193e lrri $AC0.M, @$AR1 00c9 193c lrri $AC0.L, @$AR1 00ca b179 tst'l $ACC0 : $AC1.M, @$AR1 00cb 0294 00d1 jnz 0x00d1 00cd 005a loop $AX0.H 00ce 1b5e srri @$AR2, $AC0.M 00cf 029f 00d9 jmp 0x00d9 00d1 9900 asr16 $ACC1 00d2 1b5e srri @$AR2, $AC0.M 00d3 1b5c srri @$AR2, $AC0.L 00d4 007b 00d8 bloop $AX1.H, 0x00d8 00d6 4c00 add $ACC0, $ACC1 00d7 1b5e srri @$AR2, $AC0.M 00d8 1b5c srri @$AR2, $AC0.L 00d9 0082 0400 lri $AR2, #0x0400 00db 193e lrri $AC0.M, @$AR1 00dc 193c lrri $AC0.L, @$AR1 00dd b179 tst'l $ACC0 : $AC1.M, @$AR1 00de 0294 00e4 jnz 0x00e4 00e0 005a loop $AX0.H 00e1 1b5e srri @$AR2, $AC0.M 00e2 029f 00ec jmp 0x00ec 00e4 9900 asr16 $ACC1 00e5 1b5e srri @$AR2, $AC0.M 00e6 1b5c srri @$AR2, $AC0.L 00e7 007b 00eb bloop $AX1.H, 0x00eb 00e9 4c00 add $ACC0, $ACC1 00ea 1b5e srri @$AR2, $AC0.M 00eb 1b5c srri @$AR2, $AC0.L 00ec 0082 04c0 lri $AR2, #0x04c0 00ee 193e lrri $AC0.M, @$AR1 00ef 193c lrri $AC0.L, @$AR1 00f0 b179 tst'l $ACC0 : $AC1.M, @$AR1 00f1 0294 00f7 jnz 0x00f7 00f3 005a loop $AX0.H 00f4 1b5e srri @$AR2, $AC0.M 00f5 029f 00ff jmp 0x00ff 00f7 9900 asr16 $ACC1 00f8 1b5e srri @$AR2, $AC0.M 00f9 1b5c srri @$AR2, $AC0.L 00fa 007b 00fe bloop $AX1.H, 0x00fe 00fc 4c00 add $ACC0, $ACC1 00fd 1b5e srri @$AR2, $AC0.M 00fe 1b5c srri @$AR2, $AC0.L 00ff 0082 0580 lri $AR2, #0x0580 0101 193e lrri $AC0.M, @$AR1 0102 193c lrri $AC0.L, @$AR1 0103 b179 tst'l $ACC0 : $AC1.M, @$AR1 0104 0294 010a jnz 0x010a 0106 005a loop $AX0.H 0107 1b5e srri @$AR2, $AC0.M 0108 029f 0112 jmp 0x0112 010a 9900 asr16 $ACC1 010b 1b5e srri @$AR2, $AC0.M 010c 1b5c srri @$AR2, $AC0.L 010d 007b 0111 bloop $AX1.H, 0x0111 010f 4c00 add $ACC0, $ACC1 0110 1b5e srri @$AR2, $AC0.M 0111 1b5c srri @$AR2, $AC0.L 0112 0082 0640 lri $AR2, #0x0640 0114 193e lrri $AC0.M, @$AR1 0115 193c lrri $AC0.L, @$AR1 0116 b179 tst'l $ACC0 : $AC1.M, @$AR1 0117 0294 011d jnz 0x011d 0119 005a loop $AX0.H 011a 1b5e srri @$AR2, $AC0.M 011b 029f 0125 jmp 0x0125 011d 9900 asr16 $ACC1 011e 1b5e srri @$AR2, $AC0.M 011f 1b5c srri @$AR2, $AC0.L 0120 007b 0124 bloop $AX1.H, 0x0124 0122 4c00 add $ACC0, $ACC1 0123 1b5e srri @$AR2, $AC0.M 0124 1b5c srri @$AR2, $AC0.L 0125 0082 0700 lri $AR2, #0x0700 0127 193e lrri $AC0.M, @$AR1 0128 193c lrri $AC0.L, @$AR1 0129 b179 tst'l $ACC0 : $AC1.M, @$AR1 012a 0294 0130 jnz 0x0130 012c 005a loop $AX0.H 012d 1b5e srri @$AR2, $AC0.M 012e 029f 0138 jmp 0x0138 0130 9900 asr16 $ACC1 0131 1b5e srri @$AR2, $AC0.M 0132 1b5c srri @$AR2, $AC0.L 0133 007b 0137 bloop $AX1.H, 0x0137 0135 4c00 add $ACC0, $ACC1 0136 1b5e srri @$AR2, $AC0.M 0137 1b5c srri @$AR2, $AC0.L 0138 0082 07c0 lri $AR2, #0x07c0 013a 193e lrri $AC0.M, @$AR1 013b 193c lrri $AC0.L, @$AR1 013c b179 tst'l $ACC0 : $AC1.M, @$AR1 013d 0294 0143 jnz 0x0143 013f 005a loop $AX0.H 0140 1b5e srri @$AR2, $AC0.M 0141 029f 014b jmp 0x014b 0143 9900 asr16 $ACC1 0144 1b5e srri @$AR2, $AC0.M 0145 1b5c srri @$AR2, $AC0.L 0146 007b 014a bloop $AX1.H, 0x014a 0148 4c00 add $ACC0, $ACC1 0149 1b5e srri @$AR2, $AC0.M 014a 1b5c srri @$AR2, $AC0.L 014b 0082 0880 lri $AR2, #0x0880 014d 193e lrri $AC0.M, @$AR1 014e 193c lrri $AC0.L, @$AR1 014f b179 tst'l $ACC0 : $AC1.M, @$AR1 0150 0294 0156 jnz 0x0156 0152 005a loop $AX0.H 0153 1b5e srri @$AR2, $AC0.M 0154 029f 015e jmp 0x015e 0156 9900 asr16 $ACC1 0157 1b5e srri @$AR2, $AC0.M 0158 1b5c srri @$AR2, $AC0.L 0159 007b 015d bloop $AX1.H, 0x015d 015b 4c00 add $ACC0, $ACC1 015c 1b5e srri @$AR2, $AC0.M 015d 1b5c srri @$AR2, $AC0.L 015e 0082 0940 lri $AR2, #0x0940 0160 193e lrri $AC0.M, @$AR1 0161 193c lrri $AC0.L, @$AR1 0162 b179 tst'l $ACC0 : $AC1.M, @$AR1 0163 0294 0169 jnz 0x0169 0165 005a loop $AX0.H 0166 1b5e srri @$AR2, $AC0.M 0167 029f 0171 jmp 0x0171 0169 9900 asr16 $ACC1 016a 1b5e srri @$AR2, $AC0.M 016b 1b5c srri @$AR2, $AC0.L 016c 007b 0170 bloop $AX1.H, 0x0170 016e 4c00 add $ACC0, $ACC1 016f 1b5e srri @$AR2, $AC0.M 0170 1b5c srri @$AR2, $AC0.L 0171 0082 0a00 lri $AR2, #0x0a00 0173 193e lrri $AC0.M, @$AR1 0174 193c lrri $AC0.L, @$AR1 0175 b179 tst'l $ACC0 : $AC1.M, @$AR1 0176 0294 017c jnz 0x017c 0178 005a loop $AX0.H 0179 1b5e srri @$AR2, $AC0.M 017a 029f 0184 jmp 0x0184 017c 9900 asr16 $ACC1 017d 1b5e srri @$AR2, $AC0.M 017e 1b5c srri @$AR2, $AC0.L 017f 007b 0183 bloop $AX1.H, 0x0183 0181 4c00 add $ACC0, $ACC1 0182 1b5e srri @$AR2, $AC0.M 0183 1b5c srri @$AR2, $AC0.L 0184 009b 0011 lri $AX1.H, #0x0011 0186 009a 0024 lri $AX0.H, #0x0024 0188 0082 0240 lri $AR2, #0x0240 018a 193e lrri $AC0.M, @$AR1 018b 193c lrri $AC0.L, @$AR1 018c b179 tst'l $ACC0 : $AC1.M, @$AR1 018d 0294 0193 jnz 0x0193 018f 005a loop $AX0.H 0190 1b5e srri @$AR2, $AC0.M 0191 029f 019b jmp 0x019b 0193 9900 asr16 $ACC1 0194 1b5e srri @$AR2, $AC0.M 0195 1b5c srri @$AR2, $AC0.L 0196 007b 019a bloop $AX1.H, 0x019a 0198 4c00 add $ACC0, $ACC1 0199 1b5e srri @$AR2, $AC0.M 019a 1b5c srri @$AR2, $AC0.L 019b 0082 0ac0 lri $AR2, #0x0ac0 019d 193e lrri $AC0.M, @$AR1 019e 193c lrri $AC0.L, @$AR1 019f b179 tst'l $ACC0 : $AC1.M, @$AR1 01a0 0294 01a6 jnz 0x01a6 01a2 005a loop $AX0.H 01a3 1b5e srri @$AR2, $AC0.M 01a4 029f 01ae jmp 0x01ae 01a6 9900 asr16 $ACC1 01a7 1b5e srri @$AR2, $AC0.M 01a8 1b5c srri @$AR2, $AC0.L 01a9 007b 01ad bloop $AX1.H, 0x01ad 01ab 4c00 add $ACC0, $ACC1 01ac 1b5e srri @$AR2, $AC0.M 01ad 1b5c srri @$AR2, $AC0.L 01ae 0082 0264 lri $AR2, #0x0264 01b0 193e lrri $AC0.M, @$AR1 01b1 193c lrri $AC0.L, @$AR1 01b2 b179 tst'l $ACC0 : $AC1.M, @$AR1 01b3 0294 01b9 jnz 0x01b9 01b5 005a loop $AX0.H 01b6 1b5e srri @$AR2, $AC0.M 01b7 029f 01c1 jmp 0x01c1 01b9 9900 asr16 $ACC1 01ba 1b5e srri @$AR2, $AC0.M 01bb 1b5c srri @$AR2, $AC0.L 01bc 007b 01c0 bloop $AX1.H, 0x01c0 01be 4c00 add $ACC0, $ACC1 01bf 1b5e srri @$AR2, $AC0.M 01c0 1b5c srri @$AR2, $AC0.L 01c1 0082 0ae4 lri $AR2, #0x0ae4 01c3 193e lrri $AC0.M, @$AR1 01c4 193c lrri $AC0.L, @$AR1 01c5 b179 tst'l $ACC0 : $AC1.M, @$AR1 01c6 0294 01cc jnz 0x01cc 01c8 005a loop $AX0.H 01c9 1b5e srri @$AR2, $AC0.M 01ca 029f 01d4 jmp 0x01d4 01cc 9900 asr16 $ACC1 01cd 1b5e srri @$AR2, $AC0.M 01ce 1b5c srri @$AR2, $AC0.L 01cf 007b 01d3 bloop $AX1.H, 0x01d3 01d1 4c00 add $ACC0, $ACC1 01d2 1b5e srri @$AR2, $AC0.M 01d3 1b5c srri @$AR2, $AC0.L 01d4 0082 0288 lri $AR2, #0x0288 01d6 193e lrri $AC0.M, @$AR1 01d7 193c lrri $AC0.L, @$AR1 01d8 b179 tst'l $ACC0 : $AC1.M, @$AR1 01d9 0294 01df jnz 0x01df 01db 005a loop $AX0.H 01dc 1b5e srri @$AR2, $AC0.M 01dd 029f 01e7 jmp 0x01e7 01df 9900 asr16 $ACC1 01e0 1b5e srri @$AR2, $AC0.M 01e1 1b5c srri @$AR2, $AC0.L 01e2 007b 01e6 bloop $AX1.H, 0x01e6 01e4 4c00 add $ACC0, $ACC1 01e5 1b5e srri @$AR2, $AC0.M 01e6 1b5c srri @$AR2, $AC0.L 01e7 0082 0b08 lri $AR2, #0x0b08 01e9 193e lrri $AC0.M, @$AR1 01ea 193c lrri $AC0.L, @$AR1 01eb b179 tst'l $ACC0 : $AC1.M, @$AR1 01ec 0294 01f2 jnz 0x01f2 01ee 005a loop $AX0.H 01ef 1b5e srri @$AR2, $AC0.M 01f0 029f 01fa jmp 0x01fa 01f2 9900 asr16 $ACC1 01f3 1b5e srri @$AR2, $AC0.M 01f4 1b5c srri @$AR2, $AC0.L 01f5 007b 01f9 bloop $AX1.H, 0x01f9 01f7 4c00 add $ACC0, $ACC1 01f8 1b5e srri @$AR2, $AC0.M 01f9 1b5c srri @$AR2, $AC0.L 01fa 0082 02ac lri $AR2, #0x02ac 01fc 193e lrri $AC0.M, @$AR1 01fd 193c lrri $AC0.L, @$AR1 01fe b179 tst'l $ACC0 : $AC1.M, @$AR1 01ff 0294 0205 jnz 0x0205 0201 005a loop $AX0.H 0202 1b5e srri @$AR2, $AC0.M 0203 029f 020d jmp 0x020d 0205 9900 asr16 $ACC1 0206 1b5e srri @$AR2, $AC0.M 0207 1b5c srri @$AR2, $AC0.L 0208 007b 020c bloop $AX1.H, 0x020c 020a 4c00 add $ACC0, $ACC1 020b 1b5e srri @$AR2, $AC0.M 020c 1b5c srri @$AR2, $AC0.L 020d 0082 0b2c lri $AR2, #0x0b2c 020f 193e lrri $AC0.M, @$AR1 0210 193c lrri $AC0.L, @$AR1 0211 b179 tst'l $ACC0 : $AC1.M, @$AR1 0212 0294 0218 jnz 0x0218 0214 005a loop $AX0.H 0215 1b5e srri @$AR2, $AC0.M 0216 029f 0220 jmp 0x0220 0218 9900 asr16 $ACC1 0219 1b5e srri @$AR2, $AC0.M 021a 1b5c srri @$AR2, $AC0.L 021b 007b 021f bloop $AX1.H, 0x021f 021d 4c00 add $ACC0, $ACC1 021e 1b5e srri @$AR2, $AC0.M 021f 1b5c srri @$AR2, $AC0.L 0220 029f 006f jmp 006f_MailHandler() } void 0222_Cmd_1() { 0222 8100 clr $ACC0 0223 8970 clr'l $ACC1 : $AC0.M, @$AR0 0224 8e60 set16'l : $AC0.L, @$AR0 0225 2ece srs @DSMAH, $AC0.M 0226 2ccf srs @DSMAL, $AC0.L 0227 16cd 0d08 si @DSPA, #0x0d08 0229 16c9 0000 si @DSCR, #0x0000 022b 16cb 0180 si @DSBL, #0x0180 022d 1cc0 mrr $IX2, $AR0 022e 0080 0000 lri $AR0, #0x0000 0230 0083 00c0 lri $AR3, #0x00c0 0232 0081 0d08 lri $AR1, #0x0d08 0234 0084 ffff lri $IX0, #0xffff 0236 1ce4 mrr $IX3, $IX0 0237 02bf 0084 call 0084_WaitForDMACompletion() 0239 8f00 set40 023a 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 023b 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 023c 6800 movax $ACC0, $AX0.L 023d 4a00 addax $ACC0, $AX1.L 023e 191b lrri $AX1.H, @$AR0 023f 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M 0240 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L 0241 115f 0249 bloopi #0x5f, 0x0249 0243 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0244 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 0245 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M 0246 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L 0247 191b lrri $AX1.H, @$AR0 0248 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M 0249 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L 024a 1b1f srri @$AR0, $AC1.M 024b 1b1d srri @$AR0, $AC1.L 024c 1c06 mrr $AR0, $IX2 024d 029f 006f jmp 006f_MailHandler() } void 024f_Cmd_2() { 024f 8100 clr $ACC0 0250 8970 clr'l $ACC1 : $AC0.M, @$AR0 0251 8e60 set16'l : $AC0.L, @$AR0 0252 2ece srs @DSMAH, $AC0.M 0253 2ccf srs @DSMAL, $AC0.L 0254 16cd 0d08 si @DSPA, #0x0d08 0256 16c9 0000 si @DSCR, #0x0000 0258 16cb 0180 si @DSBL, #0x0180 025a 1cc0 mrr $IX2, $AR0 025b 0080 0000 lri $AR0, #0x0000 025d 0083 00c0 lri $AR3, #0x00c0 025f 0081 0d08 lri $AR1, #0x0d08 0261 0084 ffff lri $IX0, #0xffff 0263 1ce4 mrr $IX3, $IX0 0264 02bf 0084 call 0084_WaitForDMACompletion() 0266 8f00 set40 0267 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0268 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 0269 6800 movax $ACC0, $AX0.L 026a 4a00 addax $ACC0, $AX1.L 026b 191b lrri $AX1.H, @$AR0 026c 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M 026d 7d00 neg $ACC1 026e 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L 026f 115f 0278 bloopi #0x5f, 0x0278 0271 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0272 80c9 nx'ldm : $AX0.L, $AX1.L, @$AR1 0273 6838 movax's $ACC0, $AX0.L : @$AR0, $AC1.M 0274 4a28 addax's $ACC0, $AX1.L : @$AR0, $AC1.L 0275 191b lrri $AX1.H, @$AR0 0276 6994 movax'lsn $ACC1, $AX0.L : $AX1.L, $AC0.M 0277 7d00 neg $ACC1 0278 4b23 addax's $ACC1, $AX1.L : @$AR3, $AC0.L 0279 1b1f srri @$AR0, $AC1.M 027a 1b1d srri @$AR0, $AC1.L 027b 1c06 mrr $AR0, $IX2 027c 029f 006f jmp 006f_MailHandler() } // Command 0x4 - Mixer // Parameters: AR0 -> 0x0C01 // AXList data: command (2), PBs address (4) // Stores 0x140 bytes of data from the PBs address to 0x02D0. Suspicious. void 027e_Cmd_4_SetPBsAddress() { 027e 8100 clr $ACC0 // ACC0 = 0, ACC1 = 0 027f 8970 clr'l $ACC1 : $AC0.M, @$AR0 // ACC0 = mem32[0x0C01] (the new PBs address is there) 0280 8e60 set16'l : $AC0.L, @$AR0 // 0281 00e0 0cd2 sr @0x0cd2, $AR0 // mem16[0x0CD2] = 0x0C03; // Mixing loop - stops when the pointer to the next PB in the current PB is NULL 0283 2ece srs @DSMAH, $AC0.M 0284 2ccf srs @DSMAL, $AC0.L 0285 16cd 02d0 si @DSPA, #0x02d0 0287 16c9 0000 si @DSCR, #0x0000 0289 16cb 0140 si @DSBL, #0x0140 // transfer 0x140 bytes from the current PB address to 0x02D0. aka Transfer the current PB 028b 02bf 0084 call 0084_WaitForDMACompletion() // Load some values to memory [0x0CDX / 0x0CEX] 028d 8100 clr $ACC0 028e 8900 clr $ACC1 028f 00de 02d4 lr $AC0.M, @0x02d4 // 0291 009f 0db7 lri $AC1.M, #0x0db7 0293 4c00 add $ACC0, $ACC1 // mem16[0x02D4] + 0xDB7; 0294 1c7e mrr $AR3, $AC0.M 0295 0213 ilrr $AC0.M, @$AR3 // Sample rate converter 0296 00fe 0cdf sr @0x0cdf, $AC0.M // mem16[0x0CDF] = iram16[0x0DB7 + mem16[0x02D4]]; 0298 00de 02d5 lr $AC0.M, @0x02d5 029a 009f 0dba lri $AC1.M, #0x0dba 029c 4c00 add $ACC0, $ACC1 029d 1c7e mrr $AR3, $AC0.M 029e 0213 ilrr $AC0.M, @$AR3 // Coef select 029f 00fe 0ce0 sr @0x0ce0, $AC0.M // mem16[0x0CE0] = iram16[0x0DBA + mem16[0x02D5]]; 02a1 009a 001f lri $AX0.H, #0x001f 02a3 00de 02d7 lr $AC0.M, @0x02d7 02a5 009f 0d13 lri $AC1.M, #0x0d13 02a7 3400 andr $AC0.M, $AX0.H 02a8 4c00 add $ACC0, $ACC1 02a9 1c7e mrr $AR3, $AC0.M 02aa 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table 02ab 00fe 0cd3 sr @0x0cd3, $AC0.M // mem16[0x0CD3] = iram16[0x0D13 + (mem16[0x02D7] & 0x001F)]; (5 bits) 02ad 00de 02d6 lr $AC0.M, @0x02d6 02af 009f 0d33 lri $AC1.M, #0x0d33 02b1 3400 andr $AC0.M, $AX0.H 02b2 4c00 add $ACC0, $ACC1 02b3 1c7e mrr $AR3, $AC0.M 02b4 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table 02b5 00fe 0cd4 sr @0x0cd4, $AC0.M // mem16[0x0CD4] = iram16[0x0D33 + (mem16[0x02D6] & 0x001F)]; (5 bits) 02b7 00de 02d6 lr $AC0.M, @0x02d6 02b9 009f 0d53 lri $AC1.M, #0x0d53 02bb 14fb asr $ACC0, #-5 02bc 3400 andr $AC0.M, $AX0.H 02bd 4c00 add $ACC0, $ACC1 02be 1c7e mrr $AR3, $AC0.M 02bf 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table 02c0 00fe 0cd5 sr @0x0cd5, $AC0.M // mem16[0x0CD5] = iram16[0x0D53 + ((mem16[0x02D6] >> 5) & 0x001F)]; (5 bits) 02c2 00de 02d6 lr $AC0.M, @0x02d6 02c4 009f 0d73 lri $AC1.M, #0x0d73 02c6 14f6 asr $ACC0, #-10 02c7 4c00 add $ACC0, $ACC1 02c8 1c7e mrr $AR3, $AC0.M 02c9 0213 ilrr $AC0.M, @$AR3 // probably a volume coef table 02ca 00fe 0cd6 sr @0x0cd6, $AC0.M // mem16[0x0CD6] = iram16[0x0D73 + (mem16[0x02D6] >> 10)]; (6 bits) 02cc 8100 clr $ACC0 02cd 00de 033c lr $AC0.M, @0x033c 02cf 009a 0003 lri $AX0.H, #0x0003 02d1 009b 0db3 lri $AX1.H, #0x0db3 02d3 1ffe mrr $AC1.M, $AC0.M 02d4 3500 andr $AC1.M, $AX0.H 02d5 4700 addr $ACC1, $AX1.H 02d6 1c7f mrr $AR3, $AC1.M 02d7 0313 ilrr $AC1.M, @$AR3 02d8 00ff 0cd7 sr @0x0cd7, $AC1.M // mem16[0x0CD7] = iram16[0x0DB3 + (mem16[0x033C] & 0x0003)]; 02da 147e lsr $ACC0, #-2 02db 1ffe mrr $AC1.M, $AC0.M 02dc 3500 andr $AC1.M, $AX0.H 02dd 4700 addr $ACC1, $AX1.H 02de 1c7f mrr $AR3, $AC1.M 02df 0313 ilrr $AC1.M, @$AR3 02e0 00ff 0cd8 sr @0x0cd8, $AC1.M // mem16[0x0CD8] = iram16[0x0DB3 + ((mem16[0x033C] >> 2) & 0x0003)]; 02e2 147e lsr $ACC0, #-2 02e3 1ffe mrr $AC1.M, $AC0.M 02e4 3500 andr $AC1.M, $AX0.H 02e5 4700 addr $ACC1, $AX1.H 02e6 1c7f mrr $AR3, $AC1.M 02e7 0313 ilrr $AC1.M, @$AR3 02e8 00ff 0cd9 sr @0x0cd9, $AC1.M // mem16[0x0CD9] = iram16[0x0DB3 + ((mem16[0x033C] >> 4) & 0x0003)]; 02ea 147e lsr $ACC0, #-2 02eb 1ffe mrr $AC1.M, $AC0.M 02ec 3500 andr $AC1.M, $AX0.H 02ed 4700 addr $ACC1, $AX1.H 02ee 1c7f mrr $AR3, $AC1.M 02ef 0313 ilrr $AC1.M, @$AR3 02f0 00ff 0cda sr @0x0cda, $AC1.M // mem16[0x0CDA] = iram16[0x0DB3 + ((mem16[0x033C] >> 6) & 0x0003)]; 02f2 147e lsr $ACC0, #-2 02f3 1ffe mrr $AC1.M, $AC0.M 02f4 3500 andr $AC1.M, $AX0.H 02f5 4700 addr $ACC1, $AX1.H 02f6 1c7f mrr $AR3, $AC1.M 02f7 0313 ilrr $AC1.M, @$AR3 02f8 00ff 0cdb sr @0x0cdb, $AC1.M // mem16[0x0CDB] = iram16[0x0DB3 + ((mem16[0x033C] >> 8) & 0x0003)]; 02fa 147e lsr $ACC0, #-2 02fb 1ffe mrr $AC1.M, $AC0.M 02fc 3500 andr $AC1.M, $AX0.H 02fd 4700 addr $ACC1, $AX1.H 02fe 1c7f mrr $AR3, $AC1.M 02ff 0313 ilrr $AC1.M, @$AR3 0300 00ff 0cdc sr @0x0cdc, $AC1.M // mem16[0x0CDC] = iram16[0x0DB3 + ((mem16[0x033C] >> 10) & 0x0003)]; 0302 147e lsr $ACC0, #-2 0303 1ffe mrr $AC1.M, $AC0.M 0304 3500 andr $AC1.M, $AX0.H 0305 4700 addr $ACC1, $AX1.H 0306 1c7f mrr $AR3, $AC1.M 0307 0313 ilrr $AC1.M, @$AR3 0308 00ff 0cdd sr @0x0cdd, $AC1.M // mem16[0x0CDD] = iram16[0x0DB3 + ((mem16[0x033C] >> 12) & 0x0003)]; 030a 147e lsr $ACC0, #-2 030b 1ffe mrr $AC1.M, $AC0.M 030c 3500 andr $AC1.M, $AX0.H 030d 4700 addr $ACC1, $AX1.H 030e 1c7f mrr $AR3, $AC1.M 030f 0313 ilrr $AC1.M, @$AR3 0310 00ff 0cde sr @0x0cde, $AC1.M // mem16[0x0CDE] = iram16[0x0DB3 + (mem16[0x033C] >> 14)]; 0312 8100 clr $ACC0 0313 00de 02f2 lr $AC0.M, @0x02f2 0315 b100 tst $ACC0 0316 0295 0339 jz 0x0339 // Initial time delay - aka echo aka reverb // The buffer is 64 bytes // That thing may be hard to implement in HLE because the HLE sound buffer size is variable if (mem16[0x02F2] != 0) { 0318 8900 clr $ACC1 0319 00df 02f5 lr $AC1.M, @0x02f5 031b 0300 0c40 addi $AC1.M, #0x0c40 031d 00ff 0ce2 sr @0x0ce2, $AC1.M 031f 00df 02f6 lr $AC1.M, @0x02f6 0321 0300 0c40 addi $AC1.M, #0x0c40 0323 00ff 0ce3 sr @0x0ce3, $AC1.M 0325 009f 0c60 lri $AC1.M, #0x0c60 0327 00ff 0ce1 sr @0x0ce1, $AC1.M 0329 00de 02f3 lr $AC0.M, @0x02f3 032b 2ece srs @DSMAH, $AC0.M 032c 00de 02f4 lr $AC0.M, @0x02f4 032e 2ecf srs @DSMAL, $AC0.M 032f 16cd 0c40 si @DSPA, #0x0c40 0331 16c9 0000 si @DSCR, #0x0000 0333 16cb 0040 si @DSBL, #0x0040 0335 02bf 0084 call 0084_WaitForDMACompletion() // so yet another DMA... from mem32[0x02F3] to 0x0C40, 64 bytes 0337 029f 0341 jmp 0x0341 } else { 0339 009f 0c60 lri $AC1.M, #0x0c60 033b 00ff 0ce2 sr @0x0ce2, $AC1.M 033d 00ff 0ce3 sr @0x0ce3, $AC1.M 033f 00ff 0ce1 sr @0x0ce1, $AC1.M } 0341 8c00 clr15 0342 8b00 m0 0343 8100 clr $ACC0 0344 00de 02d8 lr $AC0.M, @0x02d8 0346 0601 cmpis $ACC0, #0x01 0347 0294 046a jnz 0x046a if (mem16[0x02D8] == 1) // if the voice is playing { 0349 00c3 0cdf lr $AR3, @0x0cdf 034b 177f callr $AR3 // call the sample rate converter 034c 8a00 m2 // MULTIPLICATION x2 MODE ENABLED! 034d 8100 clr $ACC0 034e 8900 clr $ACC1 034f 00de 0306 lr $AC0.M, @0x0306 // pb[0x36] 0351 00df 0305 lr $AC1.M, @0x0305 // pb[0x35] 0353 1f1f mrr $AX0.L, $AC1.M 0354 4d00 add $ACC1, $ACC0 0355 1481 asl $ACC0, #1 0356 8d1e set15'mv : $AX1.H, $AC0.M 0357 1fd8 mrr $AC0.M, $AX0.L 0358 0098 8000 lri $AX0.L, #0x8000 035a 0080 0d08 lri $AR0, #0x0d08 035c a830 mulx's $AX0.L, $AX1.H : @$AR0, $AC0.M 035d 112f 0360 bloopi #0x2f, 0x0360 035f ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M 0360 ad30 mulxac's $AX0.L, $AX1.H, $ACC1 : @$AR0, $AC0.M 0361 ac38 mulxac's $AX0.L, $AX1.H, $ACC0 : @$AR0, $AC1.M 0362 00fe 0305 sr @0x0305, $AC0.M 0364 8f00 set40 0365 0080 0d08 lri $AR0, #0x0d08 0367 00c1 0ce1 lr $AR1, @0x0ce1 0369 1c61 mrr $AR3, $AR1 036a 193a lrri $AX0.H, @$AR1 036b 1919 lrri $AX1.L, @$AR0 036c b051 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR1 036d 1919 lrri $AX1.L, @$AR0 036e 115e 0371 bloopi #0x5e, 0x0371 0370 b651 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR1 0371 8090 nx'ls : $AX1.L, $AC0.M 0372 b600 mulxmv $AX0.H, $AX1.L, $ACC0 0373 6e33 movp's $ACC0 : @$AR3, $AC0.M 0374 1b7e srri @$AR3, $AC0.M 0375 00de 032d lr $AC0.M, @0x032d 0377 b100 tst $ACC0 0378 0295 0381 jz 0x0381 037a 00c0 0ce1 lr $AR0, @0x0ce1 037c 1c20 mrr $AR1, $AR0 037d 0083 032e lri $AR3, #0x032e 037f 02bf 06ab call 0x06ab 0381 00de 0331 lr $AC0.M, @0x0331 0383 b100 tst $ACC0 0384 0295 038d jz 0x038d 0386 0080 0332 lri $AR0, #0x0332 0388 00c1 0ce1 lr $AR1, @0x0ce1 038a 1c41 mrr $AR2, $AR1 038b 02bf 06c3 call 06c3_Unknown() 038d 0080 02f9 lri $AR0, #0x02f9 038f 8100 clr $ACC0 0390 100c loopi #0x0c 0391 1b1e srri @$AR0, $AC0.M // zero out the updates field 0392 0080 034d lri $AR0, #0x034d 0394 1008 loopi #0x08 0395 1b1e srri @$AR0, $AC0.M 0396 00c3 0cd3 lr $AR3, @0x0cd3 // perform volume stuff 0398 177f callr $AR3 // what a complicated volume control! 0399 00c3 0cd4 lr $AR3, @0x0cd4 039b 177f callr $AR3 039c 00c3 0cd5 lr $AR3, @0x0cd5 039e 177f callr $AR3 039f 00c3 0cd6 lr $AR3, @0x0cd6 03a1 177f callr $AR3 03a2 00de 033b lr $AC0.M, @0x033b 03a4 b100 tst $ACC0 03a5 0295 0447 jz 0x0447 if (mem16[0x033B] != 0) { 03a7 00de 035a lr $AC0.M, @0x035a 03a9 b100 tst $ACC0 03aa 0295 03c4 jz 0x03c4 if (mem16[0x035A] != 0) { 03ac 0a02 lris $AX0.H, #0x02 03ad c100 cmpar $ACC0, $AX0.H 03ae 0294 03ba jnz 0x03ba 03b0 0080 035b lri $AR0, #0x035b 03b2 00c1 0ce1 lr $AR1, @0x0ce1 03b4 0082 0d0c lri $AR2, #0x0d0c 03b6 02bf 06c3 call 06c3_Unknown() 03b8 029f 03cc jmp 0x03cc 03ba 0080 0d0c lri $AR0, #0x0d0c 03bc 00c1 0ce1 lr $AR1, @0x0ce1 03be 0083 035b lri $AR3, #0x035b 03c0 02bf 06ab call 0x06ab 03c2 029f 03cc jmp 0x03cc } else { 03c4 0080 0d0c lri $AR0, #0x0d0c 03c6 00c1 0ce1 lr $AR1, @0x0ce1 03c8 1160 03cb bloopi #0x60, 0x03cb 03ca 193f lrri $AC1.M, @$AR1 03cb 1b1f srri @$AR0, $AC1.M } 03cc 0082 0355 lri $AR2, #0x0355 03ce 8c00 clr15 03cf 8100 clr $ACC0 03d0 195c lrri $AC0.L, @$AR2 03d1 009b 0005 lri $AX1.H, #0x0005 03d3 0099 5555 lri $AX1.L, #0x5555 03d5 0080 0d08 lri $AR0, #0x0d08 03d7 1104 03da bloopi #0x04, 0x03da 03d9 195f lrri $AC1.M, @$AR2 03da 1b1f srri @$AR0, $AC1.M 03db 0081 0cc0 lri $AR1, #0x0cc0 03dd 0084 0d08 lri $IX0, #0x0d08 03df 0087 1000 lri $IX3, #0x1000 03e1 1112 03f2 bloopi #0x12, 0x03f2 03e3 4a00 addax $ACC0, $AX1.L 03e4 1c1e mrr $AR0, $AC0.M 03e5 0010 addarn $AR0, $IX0 03e6 8900 clr $ACC1 03e7 1fbc mrr $AC1.L, $AC0.L 03e8 1577 lsr $ACC1, #-9 03e9 1512 lsl $ACC1, #18 03ea 1c7f mrr $AR3, $AC1.M 03eb 001f addarn $AR3, $IX3 03ec 80c3 nx'ld : $AX0.L, $AX1.L, @$AR3 03ed 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 03ee 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 03ef 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 03f0 9500 mulac $AX0.L, $AX0.H, $ACC1 03f1 4f00 addp $ACC1 03f2 1b3f srri @$AR1, $AC1.M 03f3 0004 dar $AR0 03f4 0006 dar $AR2 03f5 189f lrrd $AC1.M, @$AR0 03f6 1adf srrd @$AR2, $AC1.M 03f7 189f lrrd $AC1.M, @$AR0 03f8 1adf srrd @$AR2, $AC1.M 03f9 189f lrrd $AC1.M, @$AR0 03fa 1adf srrd @$AR2, $AC1.M 03fb 189f lrrd $AC1.M, @$AR0 03fc 1adf srrd @$AR2, $AC1.M 03fd 1adc srrd @$AR2, $AC0.L 03fe 8d00 set15 03ff 0081 033d lri $AR1, #0x033d 0401 0082 0240 lri $AR2, #0x0240 0403 00c3 0cd7 lr $AR3, @0x0cd7 0405 177f callr $AR3 0406 00f8 034d sr @0x034d, $AX0.L 0408 0081 033f lri $AR1, #0x033f 040a 0082 0ac0 lri $AR2, #0x0ac0 040c 00c3 0cd8 lr $AR3, @0x0cd8 040e 177f callr $AR3 040f 00f8 0351 sr @0x0351, $AX0.L 0411 0081 0341 lri $AR1, #0x0341 0413 0082 0264 lri $AR2, #0x0264 0415 00c3 0cd9 lr $AR3, @0x0cd9 0417 177f callr $AR3 0418 00f8 034e sr @0x034e, $AX0.L 041a 0081 0343 lri $AR1, #0x0343 041c 0082 0ae4 lri $AR2, #0x0ae4 041e 00c3 0cda lr $AR3, @0x0cda 0420 177f callr $AR3 0421 00f8 0352 sr @0x0352, $AX0.L 0423 0081 0345 lri $AR1, #0x0345 0425 0082 0288 lri $AR2, #0x0288 0427 00c3 0cdb lr $AR3, @0x0cdb 0429 177f callr $AR3 042a 00f8 034f sr @0x034f, $AX0.L 042c 0081 0347 lri $AR1, #0x0347 042e 0082 0b08 lri $AR2, #0x0b08 0430 00c3 0cdc lr $AR3, @0x0cdc 0432 177f callr $AR3 0433 00f8 0353 sr @0x0353, $AX0.L 0435 0081 0349 lri $AR1, #0x0349 0437 0082 02ac lri $AR2, #0x02ac 0439 00c3 0cdd lr $AR3, @0x0cdd 043b 177f callr $AR3 043c 00f8 0350 sr @0x0350, $AX0.L 043e 0081 034b lri $AR1, #0x034b 0440 0082 0b2c lri $AR2, #0x0b2c 0442 00c3 0cde lr $AR3, @0x0cde 0444 177f callr $AR3 0445 00f8 0354 sr @0x0354, $AX0.L } 0447 00de 02f2 lr $AC0.M, @0x02f2 0449 b100 tst $ACC0 044a 0295 046a jz 0x046a 044c 00de 02f5 lr $AC0.M, @0x02f5 044e 00df 02f7 lr $AC1.M, @0x02f7 0450 8200 cmp 0451 0293 0456 jle 0x0456 0453 7800 decm $AC0.M 0454 029f 0459 jmp 0x0459 0456 0295 0459 jz 0x0459 0458 7400 incm $AC0.M 0459 00fe 02f5 sr @0x02f5, $AC0.M 045b 00de 02f6 lr $AC0.M, @0x02f6 045d 00df 02f8 lr $AC1.M, @0x02f8 045f 8200 cmp 0460 0293 0465 jle 0x0465 0462 7800 decm $AC0.M 0463 029f 0468 jmp 0x0468 0465 0295 0468 jz 0x0468 0467 7400 incm $AC0.M 0468 00fe 02f6 sr @0x02f6, $AC0.M 046a 8e00 set16 } 046b 8100 clr $ACC0 046c 00de 02f2 lr $AC0.M, @0x02f2 046e b100 tst $ACC0 046f 0295 047f jz 0x047f 0471 00de 02f3 lr $AC0.M, @0x02f3 0473 00dc 02f4 lr $AC0.L, @0x02f4 0475 2ece srs @DSMAH, $AC0.M 0476 2ccf srs @DSMAL, $AC0.L 0477 16cd 0ca0 si @DSPA, #0x0ca0 0479 16c9 0001 si @DSCR, #0x0001 047b 16cb 0040 si @DSBL, #0x0040 047d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x0CA0 to mem32[0x02F3], 64 bytes 047f 8100 clr $ACC0 0480 8900 clr $ACC1 0481 00de 02d2 lr $AC0.M, @0x02d2 0483 00df 02d3 lr $AC1.M, @0x02d3 0485 2ece srs @DSMAH, $AC0.M 0486 2fcf srs @DSMAL, $AC1.M 0487 16cd 02d0 si @DSPA, #0x02d0 0489 16c9 0001 si @DSCR, #0x0001 048b 16cb 0140 si @DSBL, #0x0140 048d 02bf 0084 call 0084_WaitForDMACompletion() // from 0x02D0 to mem32[0x02D2], 0x140 bytes 048f 8100 clr $ACC0 0490 00de 02d0 lr $AC0.M, @0x02d0 0492 00dc 02d1 lr $AC0.L, @0x02d1 0494 b100 tst $ACC0 0495 0294 0283 jnz 0x0283 // if (mem32[0x02D0] != 0) do the whole thing again; 0497 00c0 0cd2 lr $AR0, @0x0cd2 // restore AR0; 0499 029f 006f jmp 006f_MailHandler() } void 049b_Cmd_5() { 049b 8e00 set16 049c 00c4 0ce6 lr $IX0, @0x0ce6 049e 1905 lrri $IX1, @$AR0 049f 00e5 0ce6 sr @0x0ce6, $IX1 04a1 0086 0400 lri $IX2, #0x0400 04a3 8100 clr $ACC0 04a4 8970 clr'l $ACC1 : $AC0.M, @$AR0 04a5 191c lrri $AC0.L, @$AR0 04a6 2ece srs @DSMAH, $AC0.M 04a7 2ccf srs @DSMAL, $AC0.L 04a8 1fc6 mrr $AC0.M, $IX2 04a9 2ecd srs @DSPA, $AC0.M 04aa 16c9 0001 si @DSCR, #0x0001 04ac 16cb 0480 si @DSBL, #0x0480 04ae 02bf 0084 call 0084_WaitForDMACompletion() 04b0 02bf 04e6 call 0x04e6 04b2 029f 006f jmp 006f_MailHandler() } void 04b4_Cmd_6() { 04b4 8e00 set16 04b5 00c4 0ce7 lr $IX0, @0x0ce7 04b7 1905 lrri $IX1, @$AR0 04b8 00e5 0ce7 sr @0x0ce7, $IX1 04ba 0086 0640 lri $IX2, #0x0640 04bc 8100 clr $ACC0 04bd 8970 clr'l $ACC1 : $AC0.M, @$AR0 04be 191c lrri $AC0.L, @$AR0 04bf 2ece srs @DSMAH, $AC0.M 04c0 2ccf srs @DSMAL, $AC0.L 04c1 1fc6 mrr $AC0.M, $IX2 04c2 2ecd srs @DSPA, $AC0.M 04c3 16c9 0001 si @DSCR, #0x0001 04c5 16cb 0480 si @DSBL, #0x0480 04c7 02bf 0084 call 0084_WaitForDMACompletion() 04c9 02bf 04e6 call 0x04e6 04cb 029f 006f jmp 006f_MailHandler() } // Command #7 - Set output buffer address // AXList data: // - command (2) // - something (2) // - Left/Right(?) output buffer address (4) // - Right/Left(?) output buffer address (4) // void 04cd_Cmd_7() { 04cd 8e00 set16 04ce 00c4 0ce8 lr $IX0, @0x0ce8 04d0 1905 lrri $IX1, @$AR0 04d1 00e5 0ce8 sr @0x0ce8, $IX1 // mem16[0x0CE8] = mem16[0x0C01]; 04d3 0086 0880 lri $IX2, #0x0880 04d5 8100 clr $ACC0 04d6 8970 clr'l $ACC1 : $AC0.M, @$AR0 04d7 191c lrri $AC0.L, @$AR0 04d8 2ece srs @DSMAH, $AC0.M 04d9 2ccf srs @DSMAL, $AC0.L 04da 1fc6 mrr $AC0.M, $IX2 04db 2ecd srs @DSPA, $AC0.M 04dc 16c9 0001 si @DSCR, #0x0001 04de 16cb 0480 si @DSBL, #0x0480 // dma from 0x0880 to mem32[0x0C02], 1152 bytes. 04e0 02bf 0084 call 0084_WaitForDMACompletion() 04e2 02bf 04e6 call 0x04e6 04e4 029f 006f jmp 006f_MailHandler() } void 04e6_Unk() { 04e6 8b00 m0 04e7 8100 clr $ACC0 04e8 1fc4 mrr $AC0.M, $IX0 04e9 1fe5 mrr $AC1.M, $IX1 04ea 5d00 sub $ACC1, $ACC0 04eb 009a 02ab lri $AX0.H, #0x02ab 04ed 009b 02aa lri $AX1.H, #0x02aa 04ef 0081 0d08 lri $AR1, #0x0d08 04f1 d000 mulc $AC1.M, $AX0.H 04f2 d400 mulcac $AC1.M, $AX0.H, $ACC0 04f3 111f 04f7 bloopi #0x1f, 0x04f7 04f5 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 04f6 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 04f7 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 04f8 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 04f9 4e31 addp's $ACC0 : @$AR1, $AC0.M 04fa 1b25 srri @$AR1, $IX1 04fb 8e00 set16 04fc 191f lrri $AC1.M, @$AR0 04fd 191d lrri $AC1.L, @$AR0 04fe 2fce srs @DSMAH, $AC1.M 04ff 2dcf srs @DSMAL, $AC1.L 0500 8900 clr $ACC1 0501 1fa6 mrr $AC1.L, $IX2 0502 2dcd srs @DSPA, $AC1.L 0503 16c9 0000 si @DSCR, #0x0000 0505 16cb 0480 si @DSBL, #0x0480 0507 02bf 0084 call 0084_WaitForDMACompletion() 0509 00e0 0cd2 sr @0x0cd2, $AR0 050b 8f00 set40 050c 8d00 set15 050d 8a00 m2 050e 0080 0d08 lri $AR0, #0x0d08 0510 0081 0000 lri $AR1, #0x0000 0512 1c41 mrr $AR2, $AR1 0513 1c66 mrr $AR3, $IX2 0514 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0515 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0516 a000 mulx $AX0.L, $AX1.L 0517 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0518 9141 asr16'l $ACC0 : $AX0.L, @$AR1 0519 4e00 addp $ACC0 051a 4800 addax $ACC0, $AX0.L 051b 112f 052a bloopi #0x2f, 0x052a 051d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 051e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 051f a000 mulx $AX0.L, $AX1.L 0520 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0521 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0522 4f32 addp's $ACC1 : @$AR2, $AC0.M 0523 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0524 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0525 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0526 a000 mulx $AX0.L, $AX1.L 0527 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0528 9141 asr16'l $ACC0 : $AX0.L, @$AR1 0529 4e3a addp's $ACC0 : @$AR2, $AC1.M 052a 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L 052b 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 052c 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 052d a000 mulx $AX0.L, $AX1.L 052e af00 mulxmv $AX0.L, $AX1.H, $ACC1 052f 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0530 4f32 addp's $ACC1 : @$AR2, $AC0.M 0531 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0532 1b5f srri @$AR2, $AC1.M 0533 1b5d srri @$AR2, $AC1.L 0534 0080 0d08 lri $AR0, #0x0d08 0536 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0537 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0538 a000 mulx $AX0.L, $AX1.L 0539 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 053a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 053b 4e00 addp $ACC0 053c 4800 addax $ACC0, $AX0.L 053d 112f 054c bloopi #0x2f, 0x054c 053f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0540 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0541 a000 mulx $AX0.L, $AX1.L 0542 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0543 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0544 4f32 addp's $ACC1 : @$AR2, $AC0.M 0545 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0546 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0547 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0548 a000 mulx $AX0.L, $AX1.L 0549 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 054a 9141 asr16'l $ACC0 : $AX0.L, @$AR1 054b 4e3a addp's $ACC0 : @$AR2, $AC1.M 054c 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L 054d 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 054e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 054f a000 mulx $AX0.L, $AX1.L 0550 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0551 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0552 4f32 addp's $ACC1 : @$AR2, $AC0.M 0553 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0554 1b5f srri @$AR2, $AC1.M 0555 1b5d srri @$AR2, $AC1.L 0556 0080 0d08 lri $AR0, #0x0d08 0558 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0559 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 055a a000 mulx $AX0.L, $AX1.L 055b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 055c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 055d 4e00 addp $ACC0 055e 4800 addax $ACC0, $AX0.L 055f 112f 056e bloopi #0x2f, 0x056e 0561 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0562 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0563 a000 mulx $AX0.L, $AX1.L 0564 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0565 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0566 4f32 addp's $ACC1 : @$AR2, $AC0.M 0567 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0568 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0569 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 056a a000 mulx $AX0.L, $AX1.L 056b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 056c 9141 asr16'l $ACC0 : $AX0.L, @$AR1 056d 4e3a addp's $ACC0 : @$AR2, $AC1.M 056e 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L 056f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0570 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0571 a000 mulx $AX0.L, $AX1.L 0572 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0573 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0574 4f32 addp's $ACC1 : @$AR2, $AC0.M 0575 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0576 1b5f srri @$AR2, $AC1.M 0577 1b5d srri @$AR2, $AC1.L 0578 00c0 0cd2 lr $AR0, @0x0cd2 057a 02df ret } void 057b_Cmd_A() { 057b 8d00 set15 057c 8f00 set40 057d 8a00 m2 057e 8900 clr $ACC1 057f 8168 clr'l $ACC0 : $AC1.L, @$AR0 0580 0098 0000 lri $AX0.L, #0x0000 0582 0099 0001 lri $AX1.L, #0x0001 0584 0081 0000 lri $AR1, #0x0000 0586 193e lrri $AC0.M, @$AR1 0587 193c lrri $AC0.L, @$AR1 0588 1160 0593 bloopi #0x60, 0x0593 058a a100 tstaxl $ACC0 058b 8271 cmp'l : $AC0.M, @$AR1 058c 0277 ifc 058d 1f19 mrr $AX0.L, $AX1.L 058e 193c lrri $AC0.L, @$AR1 058f a100 tstaxl $ACC0 0590 8271 cmp'l : $AC0.M, @$AR1 0591 0277 ifc 0592 1f19 mrr $AX0.L, $AX1.L 0593 193c lrri $AC0.L, @$AR1 0594 1fd8 mrr $AC0.M, $AX0.L 0595 b100 tst $ACC0 0596 0294 05c0 jnz 0x05c0 0598 00de 0ce4 lr $AC0.M, @0x0ce4 059a b100 tst $ACC0 059b 0294 05a2 jnz 0x05a2 059d 191c lrri $AC0.L, @$AR0 059e 191c lrri $AC0.L, @$AR0 059f 191c lrri $AC0.L, @$AR0 05a0 029f 006f jmp 006f_MailHandler() 05a2 8b00 m0 05a3 7a00 dec $ACC0 05a4 00fe 0ce4 sr @0x0ce4, $AC0.M 05a6 8400 clrp 05a7 0099 00c0 lri $AX1.L, #0x00c0 05a9 1f1e mrr $AX0.L, $AC0.M 05aa a000 mulx $AX0.L, $AX1.L 05ab 191e lrri $AC0.M, @$AR0 05ac 191e lrri $AC0.M, @$AR0 05ad 191c lrri $AC0.L, @$AR0 05ae 00e0 0cd2 sr @0x0cd2, $AR0 05b0 009a 0000 lri $AX0.H, #0x0000 05b2 0098 0840 lri $AX0.L, #0x0840 05b4 4e00 addp $ACC0 05b5 4800 addax $ACC0, $AX0.L 05b6 2ece srs @DSMAH, $AC0.M 05b7 2ccf srs @DSMAL, $AC0.L 05b8 16cd 0d08 si @DSPA, #0x0d08 05ba 16c9 0000 si @DSCR, #0x0000 05bc 16cb 00c0 si @DSBL, #0x00c0 05be 029f 05d6 jmp 0x05d6 05c0 8b00 m0 05c1 00d8 0ce4 lr $AX0.L, @0x0ce4 05c3 0099 00c0 lri $AX1.L, #0x00c0 05c5 a000 mulx $AX0.L, $AX1.L 05c6 191e lrri $AC0.M, @$AR0 05c7 00fe 0ce4 sr @0x0ce4, $AC0.M 05c9 191e lrri $AC0.M, @$AR0 05ca 191c lrri $AC0.L, @$AR0 05cb 00e0 0cd2 sr @0x0cd2, $AR0 05cd 4e00 addp $ACC0 05ce 2ece srs @DSMAH, $AC0.M 05cf 2ccf srs @DSMAL, $AC0.L 05d0 16cd 0d08 si @DSPA, #0x0d08 05d2 16c9 0000 si @DSCR, #0x0000 05d4 16cb 00c0 si @DSBL, #0x00c0 05d6 02bf 0084 call 0084_WaitForDMACompletion() 05d8 8a48 m2'l : $AX1.L, @$AR0 05d9 0083 0d08 lri $AR3, #0x0d08 05db 0080 0000 lri $AR0, #0x0000 05dd 0081 0000 lri $AR1, #0x0000 05df 1979 lrri $AX1.L, @$AR3 05e0 193a lrri $AX0.H, @$AR1 05e1 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 05e2 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 05e3 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 05e4 b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 05e5 9100 asr16 $ACC0 05e6 1130 05ef bloopi #0x30, 0x05ef 05e8 a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L 05e9 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 05ea b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L 05eb 9941 asr16'l $ACC1 : $AX0.L, @$AR1 05ec a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L 05ed f051 lsl16'l $ACC0 : $AX0.H, @$AR1 05ee b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L 05ef 9141 asr16'l $ACC0 : $AX0.L, @$AR1 05f0 0083 0d08 lri $AR3, #0x0d08 05f2 0080 00c0 lri $AR0, #0x00c0 05f4 0081 00c0 lri $AR1, #0x00c0 05f6 1979 lrri $AX1.L, @$AR3 05f7 193a lrri $AX0.H, @$AR1 05f8 b041 mulx'l $AX0.H, $AX1.L : $AX0.L, @$AR1 05f9 a64b mulxmv'l $AX0.L, $AX1.L, $ACC0 : $AX1.L, @$AR3 05fa f051 lsl16'l $ACC0 : $AX0.H, @$AR1 05fb b441 mulxac'l $AX0.H, $AX1.L, $ACC0 : $AX0.L, @$AR1 05fc 9100 asr16 $ACC0 05fd 1130 0606 bloopi #0x30, 0x0606 05ff a792 mulxmv'sl $AX0.L, $AX1.L, $ACC1 : $AC0.M, $AX1.L 0600 f151 lsl16'l $ACC1 : $AX0.H, @$AR1 0601 b520 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR0, $AC0.L 0602 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0603 a693 mulxmv'sl $AX0.L, $AX1.L, $ACC0 : $AC1.M, $AX1.L 0604 f051 lsl16'l $ACC0 : $AX0.H, @$AR1 0605 b428 mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC1.L 0606 9141 asr16'l $ACC0 : $AX0.L, @$AR1 0607 00c0 0cd2 lr $AR0, @0x0cd2 0609 029f 006f jmp 006f_MailHandler() } void 060b_Cmd_B() { 060b 8e48 set16'l : $AX1.L, @$AR0 060c 8b70 m0'l : $AC0.M, @$AR0 060d 8960 clr'l $ACC1 : $AC0.L, @$AR0 060e 00e0 0cd2 sr @0x0cd2, $AR0 0610 2ece srs @DSMAH, $AC0.M 0611 2ccf srs @DSMAL, $AC0.L 0612 16cd 0180 si @DSPA, #0x0180 0614 16c9 0001 si @DSCR, #0x0001 0616 16cb 0180 si @DSBL, #0x0180 0618 8100 clr $ACC0 0619 00de 0ce5 lr $AC0.M, @0x0ce5 061b 1ff9 mrr $AC1.M, $AX1.L 061c 5d00 sub $ACC1, $ACC0 061d 00f9 0ce5 sr @0x0ce5, $AX1.L 061f 009a 02ab lri $AX0.H, #0x02ab 0621 009b 02aa lri $AX1.H, #0x02aa 0623 0081 0d08 lri $AR1, #0x0d08 0625 d000 mulc $AC1.M, $AX0.H 0626 d400 mulcac $AC1.M, $AX0.H, $ACC0 0627 111f 062b bloopi #0x1f, 0x062b 0629 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 062a d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 062b d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 062c dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 062d 4e31 addp's $ACC0 : @$AR1, $AC0.M 062e 1b39 srri @$AR1, $AX1.L 062f 02bf 0084 call 0084_WaitForDMACompletion() 0631 8f00 set40 0632 8d00 set15 0633 8a00 m2 0634 0080 0d08 lri $AR0, #0x0d08 0636 0081 0400 lri $AR1, #0x0400 0638 0083 0000 lri $AR3, #0x0000 063a 0082 00c0 lri $AR2, #0x00c0 063c 1918 lrri $AX0.L, @$AR0 063d 195b lrri $AX1.H, @$AR2 063e 1959 lrri $AX1.L, @$AR2 063f a000 mulx $AX0.L, $AX1.L 0640 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0641 9100 asr16 $ACC0 0642 4e5b addp'l $ACC0 : $AX1.H, @$AR3 0643 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 0644 115f 064f bloopi #0x5f, 0x064f 0646 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 0647 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0648 9140 asr16'l $ACC0 : $AX0.L, @$AR0 0649 4e5a addp'l $ACC0 : $AX1.H, @$AR2 064a f04a lsl16'l $ACC0 : $AX1.L, @$AR2 064b a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 064c ae00 mulxmv $AX0.L, $AX1.H, $ACC0 064d 9100 asr16 $ACC0 064e 4e5b addp'l $ACC0 : $AX1.H, @$AR3 064f f04b lsl16'l $ACC0 : $AX1.L, @$AR3 0650 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 0651 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0652 9100 asr16 $ACC0 0653 4e00 addp $ACC0 0654 f000 lsl16 $ACC0 0655 1b3e srri @$AR1, $AC0.M 0656 8e00 set16 0657 00c0 0cd2 lr $AR0, @0x0cd2 0659 191e lrri $AC0.M, @$AR0 065a 191c lrri $AC0.L, @$AR0 065b 2ece srs @DSMAH, $AC0.M 065c 2ccf srs @DSMAL, $AC0.L 065d 16cd 0400 si @DSPA, #0x0400 065f 16c9 0001 si @DSCR, #0x0001 0661 16cb 0180 si @DSBL, #0x0180 0663 02bf 0084 call 0084_WaitForDMACompletion() 0665 16fc dcd1 si @DMBH, #0xdcd1 <--------------!!! 0667 16fd 0004 si @DMBL, #0x0004 <--------------!!! 0669 16fb 0001 si @DIRQ, #0x0001 <--------------!!! 066b 26fc lrs $AC0.M, @DMBH 066c 02a0 8000 andf $AC0.M, #0x8000 066e 029c 066b jlnz 0x066b 0670 029f 006f jmp 006f_MailHandler() } // Command 0xE - AXList end void 0672_Cmd_E() { 0672 16fc dcd1 si @DMBH, #0xdcd1 0674 16fd 0002 si @DMBL, #0x0002 0676 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10002 and trigger an IRQ 0678 029f 0f9b jmp 0x0f9b 067a 029f 004c jmp 0x004c } void 067c_Cmd_D() { 067c 8c00 clr15 067d 8a00 m2 067e 8f00 set40 067f 0081 0ac0 lri $AR1, #0x0ac0 0681 0082 0240 lri $AR2, #0x0240 0683 1fa1 mrr $AC1.L, $AR1 0684 1112 0689 bloopi #0x12, 0x0689 0686 195e lrri $AC0.M, @$AR2 0687 195c lrri $AC0.L, @$AR2 0688 f000 lsl16 $ACC0 0689 1b3e srri @$AR1, $AC0.M 068a 191e lrri $AC0.M, @$AR0 068b 191c lrri $AC0.L, @$AR0 068c 2ece srs @DSMAH, $AC0.M 068d 2ccf srs @DSMAL, $AC0.L 068e 2dcd srs @DSPA, $AC1.L 068f 1103 06a2 bloopi #0x03, 0x06a2 0691 16c9 0001 si @DSCR, #0x0001 0693 16cb 0024 si @DSBL, #0x0024 0695 1fa1 mrr $AC1.L, $AR1 0696 1112 069b bloopi #0x12, 0x069b 0698 195e lrri $AC0.M, @$AR2 0699 195c lrri $AC0.L, @$AR2 069a f000 lsl16 $ACC0 069b 1b3e srri @$AR1, $AC0.M 069c 02bf 0084 call 0084_WaitForDMACompletion() 069e 191e lrri $AC0.M, @$AR0 069f 191c lrri $AC0.L, @$AR0 06a0 2ece srs @DSMAH, $AC0.M 06a1 2ccf srs @DSMAL, $AC0.L 06a2 2dcd srs @DSPA, $AC1.L 06a3 16c9 0001 si @DSCR, #0x0001 06a5 16cb 0024 si @DSBL, #0x0024 06a7 02bf 0084 call 0084_WaitForDMACompletion() 06a9 029f 006f jmp 006f_MailHandler() } void 06ab_unknown() { 06ab 0087 ffff lri $IX3, #0xffff 06ad 1c83 mrr $IX0, $AR3 06ae 197e lrri $AC0.M, @$AR3 06af 80e1 nx'ld : $AX0.H, $AX1.L, @$AR1 06b0 b04f mulx'ln $AX0.H, $AX1.L : $AX1.L, @$AR3 06b1 1f5e mrr $AX0.H, $AC0.M 06b2 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 06b3 b64f mulxmv'ln $AX0.H, $AX1.L, $ACC0 : $AX1.L, @$AR3 06b4 1f5e mrr $AX0.H, $AC0.M 06b5 e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 06b6 112f 06bd bloopi #0x2f, 0x06bd 06b8 b79a mulxmv'slm $AX0.H, $AX1.L, $ACC1 : $AC0.M, $AX1.L 06b9 1f5f mrr $AX0.H, $AC1.M 06ba e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 06bb b69b mulxmv'slm $AX0.H, $AX1.L, $ACC0 : $AC1.M, $AX1.L 06bc 1f5e mrr $AX0.H, $AC0.M 06bd e2e1 maddx'ld $AX0.H, $AX1.L : $AX0.H, $AX1.L, @$AR1 06be 6f30 movp's $ACC1 : @$AR0, $AC0.M 06bf 1b1f srri @$AR0, $AC1.M 06c0 1c64 mrr $AR3, $IX0 06c1 1b7f srri @$AR3, $AC1.M 06c2 02df ret } void 06c3_Unknown() { 06c3 8c00 clr15 06c4 8b00 m0 06c5 1ca0 mrr $IX1, $AR0 06c6 0083 0370 lri $AR3, #0x0370 06c8 191a lrri $AX0.H, @$AR0 06c9 1918 lrri $AX0.L, @$AR0 06ca 1b7a srri @$AR3, $AX0.H 06cb 1b78 srri @$AR3, $AX0.L 06cc 1919 lrri $AX1.L, @$AR0 06cd 191b lrri $AX1.H, @$AR0 06ce 0083 0d03 lri $AR3, #0x0d03 06d0 1105 06d3 bloopi #0x05, 0x06d3 06d2 191a lrri $AX0.H, @$AR0 06d3 1b7a srri @$AR3, $AX0.H 06d4 0080 0d03 lri $AR0, #0x0d03 06d6 0088 0004 lri $WR0, #0x0004 06d8 0083 0370 lri $AR3, #0x0370 06da 008b 0001 lri $WR3, #0x0001 06dc 0087 0000 lri $IX3, #0x0000 06de 193f lrri $AC1.M, @$AR1 06df 191a lrri $AX0.H, @$AR0 06e0 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 06e1 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 06e2 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M 06e3 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 06e4 e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 06e5 6e50 movp'l $ACC0 : $AX0.H, @$AR0 06e6 1482 asl $ACC0, #2 06e7 fc00 clrl $AC1.L 06e8 1f7e mrr $AX1.H, $AC0.M 06e9 1b5e srri @$AR2, $AC0.M 06ea 112f 06ff bloopi #0x2f, 0x06ff 06ec d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 06ed f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 06ee f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M 06ef e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 06f0 e279 maddx'l $AX0.H, $AX1.L : $AC1.M, @$AR1 06f1 6e50 movp'l $ACC0 : $AX0.H, @$AR0 06f2 1482 asl $ACC0, #2 06f3 fc00 clrl $AC1.L 06f4 1f3e mrr $AX1.L, $AC0.M 06f5 1b5e srri @$AR2, $AC0.M 06f6 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 06f7 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 06f8 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M 06f9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0 06fa e379 maddx'l $AX0.H, $AX1.H : $AC1.M, @$AR1 06fb 6e50 movp'l $ACC0 : $AX0.H, @$AR0 06fc 1482 asl $ACC0, #2 06fd fc00 clrl $AC1.L 06fe 1f7e mrr $AX1.H, $AC0.M 06ff 1b5e srri @$AR2, $AC0.M 0700 d0c3 mulc'ld $AC1.M, $AX0.H : $AX0.L, $AX1.L, @$AR3 0701 f2cb madd'ldm $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 0702 f2a9 madd'lsm $AX0.L, $AX0.H : $AX0.H, $AC1.M 0703 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0 0704 e200 maddx $AX0.H, $AX1.L 0705 6e00 movp $ACC0 0706 1482 asl $ACC0, #2 0707 fc00 clrl $AC1.L 0708 1f3e mrr $AX1.L, $AC0.M 0709 1b5e srri @$AR2, $AC0.M 070a 0088 ffff lri $WR0, #0xffff 070c 008b ffff lri $WR3, #0xffff 070e 1c05 mrr $AR0, $IX1 070f 0083 0370 lri $AR3, #0x0370 0711 197a lrri $AX0.H, @$AR3 0712 1978 lrri $AX0.L, @$AR3 0713 1b1a srri @$AR0, $AX0.H 0714 1b18 srri @$AR0, $AX0.L 0715 1b19 srri @$AR0, $AX1.L 0716 1b1b srri @$AR0, $AX1.H 0717 8d00 set15 0718 8a00 m2 0719 02df ret } // Sample rate converter #0 - None // 071a 02bf 07e6 call 0x07e6_SetupAccelerator() 071c 8c00 clr15 071d 8a00 m2 071e 8f00 set40 // Read ratio 071f 195b lrri $AX1.H, @$AR2 0720 1959 lrri $AX1.L, @$AR2 0721 8100 clr $ACC0 // Read cur_addr fractional part 0722 195c lrri $AC0.L, @$AR2 0723 0080 0d08 lri $AR0, #0x0d08 0725 0088 0003 lri $WR0, #0x0003 // Read the last samples, copy them to 0x0D08 0727 195f lrri $AC1.M, @$AR2 0728 1b1f srri @$AR0, $AC1.M 0729 195f lrri $AC1.M, @$AR2 072a 1b1f srri @$AR0, $AC1.M 072b 195f lrri $AC1.M, @$AR2 072c 1b1f srri @$AR0, $AC1.M 072d 195f lrri $AC1.M, @$AR2 072e 1b1f srri @$AR0, $AC1.M 072f 0081 0c60 lri $AR1, #0x0c60 0731 0082 ffdd lri $AR2, #0xffdd 0733 00c7 0ce0 lr $IX3, @0x0ce0 0735 4a00 addax $ACC0, $AX1.L 0736 1160 074a bloopi #0x60, 0x074a 0738 8912 clr'mv $ACC1 : $AX0.L, $AC0.M 0739 1fbc mrr $AC1.L, $AC0.L 073a 1577 lsr $ACC1, #-9 073b 1512 lsl $ACC1, #18 073c 1c7f mrr $AR3, $AC1.M 073d 001f addarn $AR3, $IX3 073e 0078 0743 bloop $AX0.L, 0x0743 0740 185a lrr $AX0.H, @$AR2 0741 1b1a srri @$AR0, $AX0.H 0742 5000 subr $ACC0, $AX0.L 0743 1f1d mrr $AX0.L, $AC1.L 0744 4ac3 addax'ld $ACC0, $AX1.L : $AX0.L, $AX1.L, @$AR3 0745 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3 0746 97c3 mulmv'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 0747 95c3 mulac'ld $AX0.L, $AX0.H, $ACC1 : $AX0.L, $AX1.L, @$AR3 0748 9500 mulac $AX0.L, $AX0.H, $ACC1 0749 4f00 addp $ACC1 074a 1b3f srri @$AR1, $AC1.M 074b 5a00 subax $ACC0, $AX1.L 074c 0004 dar $AR0 074d 0082 0329 lri $AR2, #0x0329 074f 189f lrrd $AC1.M, @$AR0 0750 1adf srrd @$AR2, $AC1.M 0751 189f lrrd $AC1.M, @$AR0 0752 1adf srrd @$AR2, $AC1.M 0753 189f lrrd $AC1.M, @$AR0 0754 1adf srrd @$AR2, $AC1.M 0755 189f lrrd $AC1.M, @$AR0 0756 1adf srrd @$AR2, $AC1.M 0757 0088 ffff lri $WR0, #0xffff 0759 1adc srrd @$AR2, $AC0.L 075a 0082 0322 lri $AR2, #0x0322 075c 27dc lrs $AC1.M, @yn2 075d 1adf srrd @$AR2, $AC1.M 075e 27db lrs $AC1.M, @yn1 075f 1adf srrd @$AR2, $AC1.M 0760 27da lrs $AC1.M, @pred_scale 0761 1adf srrd @$AR2, $AC1.M 0762 0082 030e lri $AR2, #0x030e 0764 27d9 lrs $AC1.M, @ACCAL 0765 1adf srrd @$AR2, $AC1.M 0766 27d8 lrs $AC1.M, @ACCAH 0767 1adf srrd @$AR2, $AC1.M 0768 8e00 set16 0769 8b00 m0 076a 02df ret // Sample rate converter #1 - ? // 076b 02bf 07e6 call 0x07e6_SetupAccelerator() 076d 8d00 set15 076e 8b00 m0 076f 8f00 set40 0770 195b lrri $AX1.H, @$AR2 0771 1945 lrri $IX1, @$AR2 0772 8100 clr $ACC0 0773 195c lrri $AC0.L, @$AR2 0774 0080 0d08 lri $AR0, #0x0d08 0776 0088 0003 lri $WR0, #0x0003 0778 0084 0003 lri $IX0, #0x0003 077a 195f lrri $AC1.M, @$AR2 077b 1b1f srri @$AR0, $AC1.M 077c 195f lrri $AC1.M, @$AR2 077d 1b1f srri @$AR0, $AC1.M 077e 195f lrri $AC1.M, @$AR2 077f 1b1f srri @$AR0, $AC1.M 0780 195f lrri $AC1.M, @$AR2 0781 1b1f srri @$AR0, $AC1.M 0782 0081 0c60 lri $AR1, #0x0c60 0784 0082 ffdd lri $AR2, #0xffdd 0786 1f25 mrr $AX1.L, $IX1 0787 4a00 addax $ACC0, $AX1.L 0788 1160 079f bloopi #0x60, 0x079f 078a 8912 clr'mv $ACC1 : $AX0.L, $AC0.M 078b 0078 0790 bloop $AX0.L, 0x0790 078d 185a lrr $AX0.H, @$AR2 078e 1b1a srri @$AR0, $AX0.H 078f 5000 subr $ACC0, $AX0.L 0790 1f1f mrr $AX0.L, $AC1.M 0791 7c00 neg $ACC0 0792 b114 tst'mv $ACC0 : $AX1.L, $AC0.L 0793 0294 0799 jnz 0x0799 0795 191f lrri $AC1.M, @$AR0 0796 0010 addarn $AR0, $IX0 0797 029f 079e jmp 0x079e 0799 7c50 neg'l $ACC0 : $AX0.H, @$AR0 079a b014 mulx'mv $AX0.H, $AX1.L : $AX1.L, $AC0.L 079b 199a lrrn $AX0.H, @$AR0 079c b700 mulxmv $AX0.H, $AX1.L, $ACC1 079d 4f00 addp $ACC1 079e 1f25 mrr $AX1.L, $IX1 079f 4a39 addax's $ACC0, $AX1.L : @$AR1, $AC1.M 07a0 5a00 subax $ACC0, $AX1.L 07a1 0004 dar $AR0 07a2 0082 0329 lri $AR2, #0x0329 07a4 189f lrrd $AC1.M, @$AR0 07a5 1adf srrd @$AR2, $AC1.M 07a6 189f lrrd $AC1.M, @$AR0 07a7 1adf srrd @$AR2, $AC1.M 07a8 189f lrrd $AC1.M, @$AR0 07a9 1adf srrd @$AR2, $AC1.M 07aa 189f lrrd $AC1.M, @$AR0 07ab 1adf srrd @$AR2, $AC1.M 07ac 0088 ffff lri $WR0, #0xffff 07ae 1adc srrd @$AR2, $AC0.L 07af 0082 0322 lri $AR2, #0x0322 07b1 27dc lrs $AC1.M, @yn2 07b2 1adf srrd @$AR2, $AC1.M 07b3 27db lrs $AC1.M, @yn1 07b4 1adf srrd @$AR2, $AC1.M 07b5 27da lrs $AC1.M, @pred_scale 07b6 1adf srrd @$AR2, $AC1.M 07b7 0082 030e lri $AR2, #0x030e 07b9 27d9 lrs $AC1.M, @ACCAL 07ba 1adf srrd @$AR2, $AC1.M 07bb 27d8 lrs $AC1.M, @ACCAH 07bc 1adf srrd @$AR2, $AC1.M 07bd 8e00 set16 07be 8c00 clr15 07bf 02df ret // Sample rate converter #2 - No sample rate conversion // Just copies 96 bytes of data to the output buffer // 07c0 02bf 07e6 call 0x07e6_SetupAccelerator() 07c2 0080 0c60 lri $AR0, #0x0c60 07c4 0082 ffdd lri $AR2, #0xffdd // 0xFFDD: ACDAT 07c6 1160 07cb bloopi #0x60, 0x07cb 07c8 1844 lrr $IX0, @$AR2 // Load a sample from accelerator 07c9 1b04 srri @$AR0, $IX0 // and store it to 0x0C60+ 07ca 0000 nop 07cb 0000 nop 07cc 0004 dar $AR0 // Save the 4 last samples in the PB 07cd 0082 0329 lri $AR2, #0x0329 07cf 189f lrrd $AC1.M, @$AR0 07d0 1adf srrd @$AR2, $AC1.M 07d1 189f lrrd $AC1.M, @$AR0 07d2 1adf srrd @$AR2, $AC1.M 07d3 189f lrrd $AC1.M, @$AR0 07d4 1adf srrd @$AR2, $AC1.M 07d5 189f lrrd $AC1.M, @$AR0 07d6 1adf srrd @$AR2, $AC1.M // Save the accelerator regs in the PB 07d7 0082 0322 lri $AR2, #0x0322 // YN1 and YN2 07d9 27dc lrs $AC1.M, @yn2 07da 1adf srrd @$AR2, $AC1.M 07db 27db lrs $AC1.M, @yn1 07dc 1adf srrd @$AR2, $AC1.M // Pred scale 07dd 27da lrs $AC1.M, @pred_scale 07de 1adf srrd @$AR2, $AC1.M 07df 0082 030e lri $AR2, #0x030e // Current address 07e1 27d9 lrs $AC1.M, @ACCAL 07e2 1adf srrd @$AR2, $AC1.M 07e3 27d8 lrs $AC1.M, @ACCAH 07e4 1adf srrd @$AR2, $AC1.M 07e5 02df ret // Called by the three sample rate converters above. // Sets up the accelerator so that it can be used to // read the audio data. // The accelerator area is set to be the same length // as the sound data being played, so that looping // will be handled by exception vector #5 (ACCOV). // Parameters: None // Return: AR0 = 0x0328 // 07e6_SetupAccelerator() { // Set the accelerator regs from the PB 07e6 0082 0308 lri $AR2, #0x0308 // Sample format 07e8 195e lrri $AC0.M, @$AR2 07e9 2ed1 srs @SampleFormat, $AC0.M // Start address 07ea 195e lrri $AC0.M, @$AR2 07eb 2ed4 srs @ACSAH, $AC0.M 07ec 195e lrri $AC0.M, @$AR2 07ed 2ed5 srs @ACSAL, $AC0.M // End address 07ee 195e lrri $AC0.M, @$AR2 07ef 2ed6 srs @ACEAH, $AC0.M 07f0 195e lrri $AC0.M, @$AR2 07f1 2ed7 srs @ACEAL, $AC0.M // Current address 07f2 195e lrri $AC0.M, @$AR2 07f3 2ed8 srs @ACCAH, $AC0.M 07f4 195e lrri $AC0.M, @$AR2 07f5 2ed9 srs @ACCAL, $AC0.M // 16 coefs 07f6 195e lrri $AC0.M, @$AR2 07f7 2ea0 srs @COEF_A1_0, $AC0.M 07f8 195e lrri $AC0.M, @$AR2 07f9 2ea1 srs @COEF_A2_0, $AC0.M 07fa 195e lrri $AC0.M, @$AR2 07fb 2ea2 srs @COEF_A1_1, $AC0.M 07fc 195e lrri $AC0.M, @$AR2 07fd 2ea3 srs @COEF_A2_1, $AC0.M 07fe 195e lrri $AC0.M, @$AR2 07ff 2ea4 srs @COEF_A1_2, $AC0.M 0800 195e lrri $AC0.M, @$AR2 0801 2ea5 srs @COEF_A2_2, $AC0.M 0802 195e lrri $AC0.M, @$AR2 0803 2ea6 srs @COEF_A1_3, $AC0.M 0804 195e lrri $AC0.M, @$AR2 0805 2ea7 srs @COEF_A2_3, $AC0.M 0806 195e lrri $AC0.M, @$AR2 0807 2ea8 srs @COEF_A1_4, $AC0.M 0808 195e lrri $AC0.M, @$AR2 0809 2ea9 srs @COEF_A2_4, $AC0.M 080a 195e lrri $AC0.M, @$AR2 080b 2eaa srs @COEF_A1_5, $AC0.M 080c 195e lrri $AC0.M, @$AR2 080d 2eab srs @COEF_A2_5, $AC0.M 080e 195e lrri $AC0.M, @$AR2 080f 2eac srs @COEF_A1_6, $AC0.M 0810 195e lrri $AC0.M, @$AR2 0811 2ead srs @COEF_A2_6, $AC0.M 0812 195e lrri $AC0.M, @$AR2 0813 2eae srs @COEF_A1_7, $AC0.M 0814 195e lrri $AC0.M, @$AR2 0815 2eaf srs @COEF_A2_7, $AC0.M // Gain 0816 195e lrri $AC0.M, @$AR2 0817 2ede srs @GAIN, $AC0.M // Pred scale 0818 195e lrri $AC0.M, @$AR2 0819 2eda srs @pred_scale, $AC0.M // YN1 and YN2 081a 195e lrri $AC0.M, @$AR2 081b 2edb srs @yn1, $AC0.M 081c 195e lrri $AC0.M, @$AR2 081d 2edc srs @yn2, $AC0.M 081e 02df ret } // Volume_0_0 081f 02df ret // Volume_0_1 0820 00c0 0ce2 lr $AR0, @0x0ce2 0822 0081 02da lri $AR1, #0x02da 0824 0082 0000 lri $AR2, #0x0000 0826 1c62 mrr $AR3, $AR2 0827 02bf 0bd1 call 0bd1_ApplyVolume1(mem16[0x0ce2], 0x02da, 0x0000, 0x0000) 0829 00f8 02f9 sr @0x02f9, $AX0.L // uh? the last is saved in updates field? 082b 02df ret 082c 00c0 0ce3 lr $AR0, @0x0ce3 082e 0081 02dc lri $AR1, #0x02dc 0830 0082 00c0 lri $AR2, #0x00c0 0832 1c62 mrr $AR3, $AR2 0833 02bf 0bd1 call 0bd1_Unknown() 0835 00f8 02fd sr @0x02fd, $AX0.L 0837 02df ret 0838 00c0 0ce2 lr $AR0, @0x0ce2 083a 0081 02da lri $AR1, #0x02da 083c 0082 0000 lri $AR2, #0x0000 083e 1c62 mrr $AR3, $AR2 083f 00c4 0ce3 lr $IX0, @0x0ce3 0841 0085 00c0 lri $IX1, #0x00c0 0843 02bf 0beb call 0x0beb 0845 00f8 02f9 sr @0x02f9, $AX0.L 0847 00fb 02fd sr @0x02fd, $AX1.H 0849 02df ret 084a 00c0 0ce2 lr $AR0, @0x0ce2 084c 0081 02da lri $AR1, #0x02da 084e 0082 0000 lri $AR2, #0x0000 0850 0083 0d08 lri $AR3, #0x0d08 0852 00c4 0ce3 lr $IX0, @0x0ce3 0854 0085 00c0 lri $IX1, #0x00c0 0856 02bf 0c51 call 0x0c51 0858 00f8 02f9 sr @0x02f9, $AX0.L 085a 00fb 02fd sr @0x02fd, $AX1.H 085c 02df ret 085d 00c0 0ce1 lr $AR0, @0x0ce1 085f 0081 02ea lri $AR1, #0x02ea 0861 0082 0180 lri $AR2, #0x0180 0863 1c62 mrr $AR3, $AR2 0864 02bf 0bd1 call 0bd1_Unknown() 0866 00f8 0301 sr @0x0301, $AX0.L 0868 02df ret 0869 00c0 0ce1 lr $AR0, @0x0ce1 086b 0081 02ea lri $AR1, #0x02ea 086d 0082 0180 lri $AR2, #0x0180 086f 1c62 mrr $AR3, $AR2 0870 02bf 0bd1 call 0bd1_Unknown() 0872 00f8 0301 sr @0x0301, $AX0.L 0874 029f 0820 jmp 0x0820 0876 00c0 0ce1 lr $AR0, @0x0ce1 0878 0081 02ea lri $AR1, #0x02ea 087a 0082 0180 lri $AR2, #0x0180 087c 1c62 mrr $AR3, $AR2 087d 02bf 0bd1 call 0bd1_Unknown() 087f 00f8 0301 sr @0x0301, $AX0.L 0881 029f 082c jmp 0x082c 0883 00c0 0ce1 lr $AR0, @0x0ce1 0885 0081 02ea lri $AR1, #0x02ea 0887 0082 0180 lri $AR2, #0x0180 0889 1c62 mrr $AR3, $AR2 088a 02bf 0bd1 call 0bd1_Unknown() 088c 00f8 0301 sr @0x0301, $AX0.L 088e 029f 0838 jmp 0x0838 0890 00c0 0ce1 lr $AR0, @0x0ce1 0892 0081 02ea lri $AR1, #0x02ea 0894 0082 0180 lri $AR2, #0x0180 0896 1c62 mrr $AR3, $AR2 0897 02bf 0bd1 call 0bd1_Unknown() 0899 00f8 0301 sr @0x0301, $AX0.L 089b 029f 084a jmp 0x084a 089d 00c0 0ce1 lr $AR0, @0x0ce1 089f 0081 02ea lri $AR1, #0x02ea 08a1 0082 0180 lri $AR2, #0x0180 08a3 0083 0d08 lri $AR3, #0x0d08 08a5 02bf 0c21 call 0c21_Unknown() 08a7 00f8 0301 sr @0x0301, $AX0.L 08a9 02df ret 08aa 00c0 0ce1 lr $AR0, @0x0ce1 08ac 0081 02ea lri $AR1, #0x02ea 08ae 0082 0180 lri $AR2, #0x0180 08b0 0083 0d08 lri $AR3, #0x0d08 08b2 02bf 0c21 call 0c21_Unknown() 08b4 00f8 0301 sr @0x0301, $AX0.L 08b6 029f 0820 jmp 0x0820 08b8 00c0 0ce1 lr $AR0, @0x0ce1 08ba 0081 02ea lri $AR1, #0x02ea 08bc 0082 0180 lri $AR2, #0x0180 08be 0083 0d08 lri $AR3, #0x0d08 08c0 02bf 0c21 call 0c21_Unknown() 08c2 00f8 0301 sr @0x0301, $AX0.L 08c4 029f 082c jmp 0x082c 08c6 00c0 0ce1 lr $AR0, @0x0ce1 08c8 0081 02ea lri $AR1, #0x02ea 08ca 0082 0180 lri $AR2, #0x0180 08cc 0083 0d08 lri $AR3, #0x0d08 08ce 02bf 0c21 call 0c21_Unknown() 08d0 00f8 0301 sr @0x0301, $AX0.L 08d2 029f 0838 jmp 0x0838 08d4 00c0 0ce1 lr $AR0, @0x0ce1 08d6 0081 02ea lri $AR1, #0x02ea 08d8 0082 0180 lri $AR2, #0x0180 08da 0083 0d08 lri $AR3, #0x0d08 08dc 02bf 0c21 call 0c21_Unknown() 08de 00f8 0301 sr @0x0301, $AX0.L 08e0 029f 084a jmp 0x084a 08e2 00c0 0ce2 lr $AR0, @0x0ce2 08e4 0081 02de lri $AR1, #0x02de 08e6 0082 0400 lri $AR2, #0x0400 08e8 1c62 mrr $AR3, $AR2 08e9 02bf 0bd1 call 0bd1_Unknown() 08eb 00f8 02fa sr @0x02fa, $AX0.L 08ed 02df ret 08ee 00c0 0ce3 lr $AR0, @0x0ce3 08f0 0081 02e0 lri $AR1, #0x02e0 08f2 0082 04c0 lri $AR2, #0x04c0 08f4 1c62 mrr $AR3, $AR2 08f5 02bf 0bd1 call 0bd1_Unknown() 08f7 00f8 02fe sr @0x02fe, $AX0.L 08f9 02df ret 08fa 00c0 0ce2 lr $AR0, @0x0ce2 08fc 0081 02de lri $AR1, #0x02de 08fe 0082 0400 lri $AR2, #0x0400 0900 1c62 mrr $AR3, $AR2 0901 00c4 0ce3 lr $IX0, @0x0ce3 0903 0085 04c0 lri $IX1, #0x04c0 0905 02bf 0beb call 0x0beb 0907 00f8 02fa sr @0x02fa, $AX0.L 0909 00fb 02fe sr @0x02fe, $AX1.H 090b 02df ret 090c 00c0 0ce2 lr $AR0, @0x0ce2 090e 0081 02de lri $AR1, #0x02de 0910 0082 0400 lri $AR2, #0x0400 0912 0083 0d08 lri $AR3, #0x0d08 0914 00c4 0ce3 lr $IX0, @0x0ce3 0916 0085 04c0 lri $IX1, #0x04c0 0918 02bf 0c51 call 0x0c51 091a 00f8 02fa sr @0x02fa, $AX0.L 091c 00fb 02fe sr @0x02fe, $AX1.H 091e 02df ret 091f 00c0 0ce1 lr $AR0, @0x0ce1 0921 0081 02ec lri $AR1, #0x02ec 0923 0082 0580 lri $AR2, #0x0580 0925 1c62 mrr $AR3, $AR2 0926 02bf 0bd1 call 0bd1_Unknown() 0928 00f8 0302 sr @0x0302, $AX0.L 092a 02df ret 092b 00c0 0ce1 lr $AR0, @0x0ce1 092d 0081 02ec lri $AR1, #0x02ec 092f 0082 0580 lri $AR2, #0x0580 0931 1c62 mrr $AR3, $AR2 0932 02bf 0bd1 call 0bd1_Unknown() 0934 00f8 0302 sr @0x0302, $AX0.L 0936 029f 08e2 jmp 0x08e2 0938 00c0 0ce1 lr $AR0, @0x0ce1 093a 0081 02ec lri $AR1, #0x02ec 093c 0082 0580 lri $AR2, #0x0580 093e 1c62 mrr $AR3, $AR2 093f 02bf 0bd1 call 0bd1_Unknown() 0941 00f8 0302 sr @0x0302, $AX0.L 0943 029f 08ee jmp 0x08ee 0945 00c0 0ce1 lr $AR0, @0x0ce1 0947 0081 02ec lri $AR1, #0x02ec 0949 0082 0580 lri $AR2, #0x0580 094b 1c62 mrr $AR3, $AR2 094c 02bf 0bd1 call 0bd1_Unknown() 094e 00f8 0302 sr @0x0302, $AX0.L 0950 029f 08fa jmp 0x08fa 0952 00c0 0ce1 lr $AR0, @0x0ce1 0954 0081 02ec lri $AR1, #0x02ec 0956 0082 0580 lri $AR2, #0x0580 0958 1c62 mrr $AR3, $AR2 0959 02bf 0bd1 call 0bd1_Unknown() 095b 00f8 0302 sr @0x0302, $AX0.L 095d 029f 090c jmp 0x090c 095f 00c0 0ce1 lr $AR0, @0x0ce1 0961 0081 02ec lri $AR1, #0x02ec 0963 0082 0580 lri $AR2, #0x0580 0965 0083 0d08 lri $AR3, #0x0d08 0967 02bf 0c21 call 0c21_Unknown() 0969 00f8 0302 sr @0x0302, $AX0.L 096b 02df ret 096c 00c0 0ce1 lr $AR0, @0x0ce1 096e 0081 02ec lri $AR1, #0x02ec 0970 0082 0580 lri $AR2, #0x0580 0972 0083 0d08 lri $AR3, #0x0d08 0974 02bf 0c21 call 0c21_Unknown() 0976 00f8 0302 sr @0x0302, $AX0.L 0978 029f 08e2 jmp 0x08e2 097a 00c0 0ce1 lr $AR0, @0x0ce1 097c 0081 02ec lri $AR1, #0x02ec 097e 0082 0580 lri $AR2, #0x0580 0980 0083 0d08 lri $AR3, #0x0d08 0982 02bf 0c21 call 0c21_Unknown() 0984 00f8 0302 sr @0x0302, $AX0.L 0986 029f 08ee jmp 0x08ee 0988 00c0 0ce1 lr $AR0, @0x0ce1 098a 0081 02ec lri $AR1, #0x02ec 098c 0082 0580 lri $AR2, #0x0580 098e 0083 0d08 lri $AR3, #0x0d08 0990 02bf 0c21 call 0c21_Unknown() 0992 00f8 0302 sr @0x0302, $AX0.L 0994 029f 08fa jmp 0x08fa 0996 00c0 0ce1 lr $AR0, @0x0ce1 0998 0081 02ec lri $AR1, #0x02ec 099a 0082 0580 lri $AR2, #0x0580 099c 0083 0d08 lri $AR3, #0x0d08 099e 02bf 0c21 call 0c21_Unknown() 09a0 00f8 0302 sr @0x0302, $AX0.L 09a2 029f 090c jmp 0x090c 09a4 00c0 0ce2 lr $AR0, @0x0ce2 09a6 0081 02e2 lri $AR1, #0x02e2 09a8 0082 0640 lri $AR2, #0x0640 09aa 1c62 mrr $AR3, $AR2 09ab 02bf 0bd1 call 0bd1_Unknown() 09ad 00f8 02fb sr @0x02fb, $AX0.L 09af 02df ret 09b0 00c0 0ce3 lr $AR0, @0x0ce3 09b2 0081 02e4 lri $AR1, #0x02e4 09b4 0082 0700 lri $AR2, #0x0700 09b6 1c62 mrr $AR3, $AR2 09b7 02bf 0bd1 call 0bd1_Unknown() 09b9 00f8 02ff sr @0x02ff, $AX0.L 09bb 02df ret 09bc 00c0 0ce2 lr $AR0, @0x0ce2 09be 0081 02e2 lri $AR1, #0x02e2 09c0 0082 0640 lri $AR2, #0x0640 09c2 1c62 mrr $AR3, $AR2 09c3 00c4 0ce3 lr $IX0, @0x0ce3 09c5 0085 0700 lri $IX1, #0x0700 09c7 02bf 0beb call 0x0beb 09c9 00f8 02fb sr @0x02fb, $AX0.L 09cb 00fb 02ff sr @0x02ff, $AX1.H 09cd 02df ret 09ce 00c0 0ce2 lr $AR0, @0x0ce2 09d0 0081 02e2 lri $AR1, #0x02e2 09d2 0082 0640 lri $AR2, #0x0640 09d4 0083 0d08 lri $AR3, #0x0d08 09d6 00c4 0ce3 lr $IX0, @0x0ce3 09d8 0085 0700 lri $IX1, #0x0700 09da 02bf 0c51 call 0x0c51 09dc 00f8 02fb sr @0x02fb, $AX0.L 09de 00fb 02ff sr @0x02ff, $AX1.H 09e0 02df ret 09e1 00c0 0ce1 lr $AR0, @0x0ce1 09e3 0081 02ee lri $AR1, #0x02ee 09e5 0082 07c0 lri $AR2, #0x07c0 09e7 1c62 mrr $AR3, $AR2 09e8 02bf 0bd1 call 0bd1_Unknown() 09ea 00f8 0303 sr @0x0303, $AX0.L 09ec 02df ret 09ed 00c0 0ce1 lr $AR0, @0x0ce1 09ef 0081 02ee lri $AR1, #0x02ee 09f1 0082 07c0 lri $AR2, #0x07c0 09f3 1c62 mrr $AR3, $AR2 09f4 02bf 0bd1 call 0bd1_Unknown() 09f6 00f8 0303 sr @0x0303, $AX0.L 09f8 029f 09a4 jmp 0x09a4 09fa 00c0 0ce1 lr $AR0, @0x0ce1 09fc 0081 02ee lri $AR1, #0x02ee 09fe 0082 07c0 lri $AR2, #0x07c0 0a00 1c62 mrr $AR3, $AR2 0a01 02bf 0bd1 call 0bd1_Unknown() 0a03 00f8 0303 sr @0x0303, $AX0.L 0a05 029f 09b0 jmp 0x09b0 0a07 00c0 0ce1 lr $AR0, @0x0ce1 0a09 0081 02ee lri $AR1, #0x02ee 0a0b 0082 07c0 lri $AR2, #0x07c0 0a0d 1c62 mrr $AR3, $AR2 0a0e 02bf 0bd1 call 0bd1_Unknown() 0a10 00f8 0303 sr @0x0303, $AX0.L 0a12 029f 09bc jmp 0x09bc 0a14 00c0 0ce1 lr $AR0, @0x0ce1 0a16 0081 02ee lri $AR1, #0x02ee 0a18 0082 07c0 lri $AR2, #0x07c0 0a1a 1c62 mrr $AR3, $AR2 0a1b 02bf 0bd1 call 0bd1_Unknown() 0a1d 00f8 0303 sr @0x0303, $AX0.L 0a1f 029f 09ce jmp 0x09ce 0a21 00c0 0ce1 lr $AR0, @0x0ce1 0a23 0081 02ee lri $AR1, #0x02ee 0a25 0082 07c0 lri $AR2, #0x07c0 0a27 0083 0d08 lri $AR3, #0x0d08 0a29 02bf 0c21 call 0c21_Unknown() 0a2b 00f8 0303 sr @0x0303, $AX0.L 0a2d 02df ret 0a2e 00c0 0ce1 lr $AR0, @0x0ce1 0a30 0081 02ee lri $AR1, #0x02ee 0a32 0082 07c0 lri $AR2, #0x07c0 0a34 0083 0d08 lri $AR3, #0x0d08 0a36 02bf 0c21 call 0c21_Unknown() 0a38 00f8 0303 sr @0x0303, $AX0.L 0a3a 029f 09a4 jmp 0x09a4 0a3c 00c0 0ce1 lr $AR0, @0x0ce1 0a3e 0081 02ee lri $AR1, #0x02ee 0a40 0082 07c0 lri $AR2, #0x07c0 0a42 0083 0d08 lri $AR3, #0x0d08 0a44 02bf 0c21 call 0c21_Unknown() 0a46 00f8 0303 sr @0x0303, $AX0.L 0a48 029f 09b0 jmp 0x09b0 0a4a 00c0 0ce1 lr $AR0, @0x0ce1 0a4c 0081 02ee lri $AR1, #0x02ee 0a4e 0082 07c0 lri $AR2, #0x07c0 0a50 0083 0d08 lri $AR3, #0x0d08 0a52 02bf 0c21 call 0c21_Unknown() 0a54 00f8 0303 sr @0x0303, $AX0.L 0a56 029f 09bc jmp 0x09bc 0a58 00c0 0ce1 lr $AR0, @0x0ce1 0a5a 0081 02ee lri $AR1, #0x02ee 0a5c 0082 07c0 lri $AR2, #0x07c0 0a5e 0083 0d08 lri $AR3, #0x0d08 0a60 02bf 0c21 call 0c21_Unknown() 0a62 00f8 0303 sr @0x0303, $AX0.L 0a64 029f 09ce jmp 0x09ce 0a66 00c0 0ce2 lr $AR0, @0x0ce2 0a68 0081 02e6 lri $AR1, #0x02e6 0a6a 0082 0880 lri $AR2, #0x0880 0a6c 1c62 mrr $AR3, $AR2 0a6d 02bf 0bd1 call 0bd1_Unknown() 0a6f 00f8 02fc sr @0x02fc, $AX0.L 0a71 02df ret 0a72 00c0 0ce3 lr $AR0, @0x0ce3 0a74 0081 02e8 lri $AR1, #0x02e8 0a76 0082 0940 lri $AR2, #0x0940 0a78 1c62 mrr $AR3, $AR2 0a79 02bf 0bd1 call 0bd1_Unknown() 0a7b 00f8 0300 sr @0x0300, $AX0.L 0a7d 02df ret 0a7e 00c0 0ce2 lr $AR0, @0x0ce2 0a80 0081 02e6 lri $AR1, #0x02e6 0a82 0082 0880 lri $AR2, #0x0880 0a84 1c62 mrr $AR3, $AR2 0a85 00c4 0ce3 lr $IX0, @0x0ce3 0a87 0085 0940 lri $IX1, #0x0940 0a89 02bf 0beb call 0x0beb 0a8b 00f8 02fc sr @0x02fc, $AX0.L 0a8d 00fb 0300 sr @0x0300, $AX1.H 0a8f 02df ret 0a90 00c0 0ce2 lr $AR0, @0x0ce2 0a92 0081 02e6 lri $AR1, #0x02e6 0a94 0082 0880 lri $AR2, #0x0880 0a96 0083 0d08 lri $AR3, #0x0d08 0a98 00c4 0ce3 lr $IX0, @0x0ce3 0a9a 0085 0940 lri $IX1, #0x0940 0a9c 02bf 0c51 call 0x0c51 0a9e 00f8 02fc sr @0x02fc, $AX0.L 0aa0 00fb 0300 sr @0x0300, $AX1.H 0aa2 02df ret 0aa3 00c0 0ce1 lr $AR0, @0x0ce1 0aa5 0081 02f0 lri $AR1, #0x02f0 0aa7 0082 0a00 lri $AR2, #0x0a00 0aa9 1c62 mrr $AR3, $AR2 0aaa 02bf 0bd1 call 0bd1_Unknown() 0aac 00f8 0304 sr @0x0304, $AX0.L 0aae 02df ret 0aaf 00c0 0ce1 lr $AR0, @0x0ce1 0ab1 0081 02f0 lri $AR1, #0x02f0 0ab3 0082 0a00 lri $AR2, #0x0a00 0ab5 1c62 mrr $AR3, $AR2 0ab6 02bf 0bd1 call 0bd1_Unknown() 0ab8 00f8 0304 sr @0x0304, $AX0.L 0aba 029f 0a66 jmp 0x0a66 0abc 00c0 0ce1 lr $AR0, @0x0ce1 0abe 0081 02f0 lri $AR1, #0x02f0 0ac0 0082 0a00 lri $AR2, #0x0a00 0ac2 1c62 mrr $AR3, $AR2 0ac3 02bf 0bd1 call 0bd1_Unknown() 0ac5 00f8 0304 sr @0x0304, $AX0.L 0ac7 029f 0a72 jmp 0x0a72 0ac9 00c0 0ce1 lr $AR0, @0x0ce1 0acb 0081 02f0 lri $AR1, #0x02f0 0acd 0082 0a00 lri $AR2, #0x0a00 0acf 1c62 mrr $AR3, $AR2 0ad0 02bf 0bd1 call 0bd1_Unknown() 0ad2 00f8 0304 sr @0x0304, $AX0.L 0ad4 029f 0a7e jmp 0x0a7e 0ad6 00c0 0ce1 lr $AR0, @0x0ce1 0ad8 0081 02f0 lri $AR1, #0x02f0 0ada 0082 0a00 lri $AR2, #0x0a00 0adc 1c62 mrr $AR3, $AR2 0add 02bf 0bd1 call 0bd1_Unknown() 0adf 00f8 0304 sr @0x0304, $AX0.L 0ae1 029f 0a90 jmp 0x0a90 0ae3 00c0 0ce1 lr $AR0, @0x0ce1 0ae5 0081 02f0 lri $AR1, #0x02f0 0ae7 0082 0a00 lri $AR2, #0x0a00 0ae9 0083 0d08 lri $AR3, #0x0d08 0aeb 02bf 0c21 call 0c21_Unknown() 0aed 00f8 0304 sr @0x0304, $AX0.L 0aef 02df ret 0af0 00c0 0ce1 lr $AR0, @0x0ce1 0af2 0081 02f0 lri $AR1, #0x02f0 0af4 0082 0a00 lri $AR2, #0x0a00 0af6 0083 0d08 lri $AR3, #0x0d08 0af8 02bf 0c21 call 0c21_Unknown() 0afa 00f8 0304 sr @0x0304, $AX0.L 0afc 029f 0a66 jmp 0x0a66 0afe 00c0 0ce1 lr $AR0, @0x0ce1 0b00 0081 02f0 lri $AR1, #0x02f0 0b02 0082 0a00 lri $AR2, #0x0a00 0b04 0083 0d08 lri $AR3, #0x0d08 0b06 02bf 0c21 call 0c21_Unknown() 0b08 00f8 0304 sr @0x0304, $AX0.L 0b0a 029f 0a72 jmp 0x0a72 0b0c 00c0 0ce1 lr $AR0, @0x0ce1 0b0e 0081 02f0 lri $AR1, #0x02f0 0b10 0082 0a00 lri $AR2, #0x0a00 0b12 0083 0d08 lri $AR3, #0x0d08 0b14 02bf 0c21 call 0c21_Unknown() 0b16 00f8 0304 sr @0x0304, $AX0.L 0b18 029f 0a7e jmp 0x0a7e 0b1a 00c0 0ce1 lr $AR0, @0x0ce1 0b1c 0081 02f0 lri $AR1, #0x02f0 0b1e 0082 0a00 lri $AR2, #0x0a00 0b20 0083 0d08 lri $AR3, #0x0d08 0b22 02bf 0c21 call 0c21_Unknown() 0b24 00f8 0304 sr @0x0304, $AX0.L 0b26 029f 0a90 jmp 0x0a90 0b28 00c0 0ce1 lr $AR0, @0x0ce1 0b2a 0081 02e6 lri $AR1, #0x02e6 0b2c 0082 0880 lri $AR2, #0x0880 0b2e 1c62 mrr $AR3, $AR2 0b2f 02bf 0bd1 call 0bd1_Unknown() 0b31 00f8 02fc sr @0x02fc, $AX0.L 0b33 02df ret 0b34 00c0 0ce1 lr $AR0, @0x0ce1 0b36 0081 02e8 lri $AR1, #0x02e8 0b38 0082 0940 lri $AR2, #0x0940 0b3a 1c62 mrr $AR3, $AR2 0b3b 02bf 0bd1 call 0bd1_Unknown() 0b3d 00f8 0300 sr @0x0300, $AX0.L 0b3f 02df ret 0b40 00c0 0ce1 lr $AR0, @0x0ce1 0b42 0081 02e6 lri $AR1, #0x02e6 0b44 0082 0880 lri $AR2, #0x0880 0b46 1c62 mrr $AR3, $AR2 0b47 00c4 0ce1 lr $IX0, @0x0ce1 0b49 0085 0940 lri $IX1, #0x0940 0b4b 02bf 0beb call 0x0beb 0b4d 00f8 02fc sr @0x02fc, $AX0.L 0b4f 00fb 0300 sr @0x0300, $AX1.H 0b51 02df ret void 0b52_Maybe_Mixer() { 0b52 00c0 0ce1 lr $AR0, @0x0ce1 0b54 0081 02e6 lri $AR1, #0x02e6 0b56 0082 0880 lri $AR2, #0x0880 0b58 0083 0d08 lri $AR3, #0x0d08 0b5a 00c4 0ce1 lr $IX0, @0x0ce1 0b5c 0085 0940 lri $IX1, #0x0940 0b5e 02bf 0c51 call 0x0c51 0b60 00f8 02fc sr @0x02fc, $AX0.L 0b62 00fb 0300 sr @0x0300, $AX1.H 0b64 02df ret 0b65 00c0 0ce1 lr $AR0, @0x0ce1 0b67 0081 02f0 lri $AR1, #0x02f0 0b69 0082 0a00 lri $AR2, #0x0a00 0b6b 1c62 mrr $AR3, $AR2 0b6c 02bf 0bd1 call 0bd1_Unknown() 0b6e 00f8 0304 sr @0x0304, $AX0.L 0b70 029f 0b28 jmp 0x0b28 0b72 00c0 0ce1 lr $AR0, @0x0ce1 0b74 0081 02f0 lri $AR1, #0x02f0 0b76 0082 0a00 lri $AR2, #0x0a00 0b78 1c62 mrr $AR3, $AR2 0b79 02bf 0bd1 call 0bd1_Unknown() 0b7b 00f8 0304 sr @0x0304, $AX0.L 0b7d 029f 0b34 jmp 0x0b34 0b7f 00c0 0ce1 lr $AR0, @0x0ce1 0b81 0081 02f0 lri $AR1, #0x02f0 0b83 0082 0a00 lri $AR2, #0x0a00 0b85 1c62 mrr $AR3, $AR2 0b86 02bf 0bd1 call 0bd1_Unknown() 0b88 00f8 0304 sr @0x0304, $AX0.L 0b8a 029f 0b40 jmp 0x0b40 0b8c 00c0 0ce1 lr $AR0, @0x0ce1 0b8e 0081 02f0 lri $AR1, #0x02f0 0b90 0082 0a00 lri $AR2, #0x0a00 0b92 1c62 mrr $AR3, $AR2 0b93 02bf 0bd1 call 0bd1_Unknown() 0b95 00f8 0304 sr @0x0304, $AX0.L 0b97 029f 0b52 jmp 0x0b52 0b99 00c0 0ce1 lr $AR0, @0x0ce1 0b9b 0081 02f0 lri $AR1, #0x02f0 0b9d 0082 0a00 lri $AR2, #0x0a00 0b9f 0083 0d08 lri $AR3, #0x0d08 0ba1 02bf 0c21 call 0c21_Unknown() 0ba3 00f8 0304 sr @0x0304, $AX0.L 0ba5 029f 0b28 jmp 0x0b28 0ba7 00c0 0ce1 lr $AR0, @0x0ce1 0ba9 0081 02f0 lri $AR1, #0x02f0 0bab 0082 0a00 lri $AR2, #0x0a00 0bad 0083 0d08 lri $AR3, #0x0d08 0baf 02bf 0c21 call 0c21_Unknown() 0bb1 00f8 0304 sr @0x0304, $AX0.L 0bb3 029f 0b34 jmp 0x0b34 0bb5 00c0 0ce1 lr $AR0, @0x0ce1 0bb7 0081 02f0 lri $AR1, #0x02f0 0bb9 0082 0a00 lri $AR2, #0x0a00 0bbb 0083 0d08 lri $AR3, #0x0d08 0bbd 02bf 0c21 call 0c21_Unknown() 0bbf 00f8 0304 sr @0x0304, $AX0.L 0bc1 029f 0b40 jmp 0x0b40 0bc3 00c0 0ce1 lr $AR0, @0x0ce1 0bc5 0081 02f0 lri $AR1, #0x02f0 0bc7 0082 0a00 lri $AR2, #0x0a00 0bc9 0083 0d08 lri $AR3, #0x0d08 0bcb 02bf 0c21 call 0c21_Unknown() 0bcd 00f8 0304 sr @0x0304, $AX0.L 0bcf 029f 0b52 jmp 0x0b52 } // Volume // AR0: factor table? // AR1: factor // AR2: input // AR3: output // returns: last in AX0.L (16 highest bits) // // basically: // for (i = 0; i < 96; i++) // out[i] = ((in[i*2+1] << 16) + (ar0[i] * factor)) >> 16; // // so that you don't bang your head against your keyboard trying to figure // out those awful pipelined loops (I had to get myself a new head to finish // this one). :P // void 0bd1_ApplyVolume1() { 0bd1 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] 0bd2 1939 lrri $AX1.L, @$AR1 // ax1.l = mem[ar1++] 0bd3 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 // = ax0.h * ax1.l; ac0.m = mem[ar2++] 0bd4 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++] 0bd5 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 // acc0 <<= 16; ac1.m = mem[ar2++] 0bd6 191a lrri $AX0.H, @$AR0 // ax0.h = mem[ar0++] 0bd7 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 // acc0 += ; = ax0.h * ax1.l; ac1.l = mem[ar2++] 0bd8 9100 asr16 $ACC0 // acc0 >>= 16 0bd9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m 0bda 112f 0be3 bloopi #0x2f, 0x0be3 // for (i = 0; i < 0x2f; i++) 0bdc b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L // acc1 += ; = ax0.h * ax1.l; mem[ar3++] = ac0.l; 0bdd 9972 asr16'l $ACC1 : $AC0.M, @$AR2 // acc1 >>= 16; ac0.m = mem[ar2++] 0bde 195c lrri $AC0.L, @$AR2 // ac0.l = mem[ar2++]; 0bdf f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M // acc0 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac1.m 0be0 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L // acc0 += ; = ax0.h * ax1.l; mem[ar3++] = ac1.l; 0be1 917a asr16'l $ACC0 : $AC1.M, @$AR2 // acc0 >>= 16; ac1.m = mem[ar2++] 0be2 195d lrri $AC1.L, @$AR2 // ac1.l = mem[ar2++]; 0be3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M // acc1 <<= 16; ax0.h = mem[ar0++]; mem[ar3++] = ac0.m 0be4 1b7c srri @$AR3, $AC0.L // mem[ar3++] = ac0.l; 0be5 6e00 movp $ACC0 // acc0 = ; 0be6 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M // acc1 += ; ax0.l = ac0.m; 0be7 9900 asr16 $ACC1 // acc1 >>= 16; 0be8 1b7f srri @$AR3, $AC1.M // mem[ar3++] = ac1.m; 0be9 812b clr's $ACC0 : @$AR3, $AC1.L // acc0 = 0; mem[ar3++] = ac1.l; 0bea 02df ret } 0beb 191a lrri $AX0.H, @$AR0 0bec 1939 lrri $AX1.L, @$AR1 0bed b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 0bee 195c lrri $AC0.L, @$AR2 0bef f07a lsl16'l $ACC0 : $AC1.M, @$AR2 0bf0 191a lrri $AX0.H, @$AR0 0bf1 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 0bf2 9100 asr16 $ACC0 0bf3 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0bf4 112f 0bfd bloopi #0x2f, 0x0bfd 0bf6 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0bf7 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0bf8 195c lrri $AC0.L, @$AR2 0bf9 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0bfa b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0bfb 917a asr16'l $ACC0 : $AC1.M, @$AR2 0bfc 195d lrri $AC1.L, @$AR2 0bfd f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0bfe 1b7c srri @$AR3, $AC0.L 0bff 6e00 movp $ACC0 0c00 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M 0c01 9909 asr16'ir $ACC1 : $AR1 0c02 1b7f srri @$AR3, $AC1.M 0c03 1b7d srri @$AR3, $AC1.L 0c04 1c04 mrr $AR0, $IX0 0c05 1c45 mrr $AR2, $IX1 0c06 1c62 mrr $AR3, $AR2 0c07 191a lrri $AX0.H, @$AR0 0c08 1939 lrri $AX1.L, @$AR1 0c09 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 0c0a 195c lrri $AC0.L, @$AR2 0c0b f07a lsl16'l $ACC0 : $AC1.M, @$AR2 0c0c 191a lrri $AX0.H, @$AR0 0c0d b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 0c0e 9100 asr16 $ACC0 0c0f f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c10 112f 0c19 bloopi #0x2f, 0x0c19 0c12 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0c13 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0c14 195c lrri $AC0.L, @$AR2 0c15 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0c16 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0c17 917a asr16'l $ACC0 : $AC1.M, @$AR2 0c18 195d lrri $AC1.L, @$AR2 0c19 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c1a 1b7c srri @$AR3, $AC0.L 0c1b 6e00 movp $ACC0 0c1c 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M 0c1d 9900 asr16 $ACC1 0c1e 1b7f srri @$AR3, $AC1.M 0c1f 1b7d srri @$AR3, $AC1.L 0c20 02df ret void 0c21_Unknown() { 0c21 1ce3 mrr $IX3, $AR3 0c22 8e00 set16 0c23 8100 clr $ACC0 0c24 8971 clr'l $ACC1 : $AC0.M, @$AR1 0c25 18bf lrrd $AC1.M, @$AR1 0c26 1b7e srri @$AR3, $AC0.M 0c27 4c00 add $ACC0, $ACC1 0c28 1b7e srri @$AR3, $AC0.M 0c29 112f 0c2e bloopi #0x2f, 0x0c2e 0c2b 4c00 add $ACC0, $ACC1 0c2c 1b7e srri @$AR3, $AC0.M 0c2d 4c00 add $ACC0, $ACC1 0c2e 1b7e srri @$AR3, $AC0.M 0c2f 4c00 add $ACC0, $ACC1 0c30 1b3e srri @$AR1, $AC0.M 0c31 1c27 mrr $AR1, $IX3 0c32 1c62 mrr $AR3, $AR2 0c33 8f50 set40'l : $AX0.H, @$AR0 0c34 1939 lrri $AX1.L, @$AR1 0c35 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 0c36 195c lrri $AC0.L, @$AR2 0c37 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 0c38 191a lrri $AX0.H, @$AR0 0c39 1939 lrri $AX1.L, @$AR1 0c3a b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 0c3b 9100 asr16 $ACC0 0c3c f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c3d 1939 lrri $AX1.L, @$AR1 0c3e 112f 0c49 bloopi #0x2f, 0x0c49 0c40 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0c41 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0c42 195c lrri $AC0.L, @$AR2 0c43 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0c44 1939 lrri $AX1.L, @$AR1 0c45 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0c46 917a asr16'l $ACC0 : $AC1.M, @$AR2 0c47 195d lrri $AC1.L, @$AR2 0c48 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c49 1939 lrri $AX1.L, @$AR1 0c4a 1b7c srri @$AR3, $AC0.L 0c4b 6e00 movp $ACC0 0c4c 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M 0c4d 9900 asr16 $ACC1 0c4e 1b7f srri @$AR3, $AC1.M 0c4f 1b7d srri @$AR3, $AC1.L 0c50 02df ret 0c51 1ce3 mrr $IX3, $AR3 0c52 8e00 set16 0c53 8100 clr $ACC0 0c54 8971 clr'l $ACC1 : $AC0.M, @$AR1 0c55 18bf lrrd $AC1.M, @$AR1 0c56 1b7e srri @$AR3, $AC0.M 0c57 4c00 add $ACC0, $ACC1 0c58 1b7e srri @$AR3, $AC0.M 0c59 112f 0c5e bloopi #0x2f, 0x0c5e 0c5b 4c00 add $ACC0, $ACC1 0c5c 1b7e srri @$AR3, $AC0.M 0c5d 4c00 add $ACC0, $ACC1 0c5e 1b7e srri @$AR3, $AC0.M 0c5f 4c00 add $ACC0, $ACC1 0c60 1b3e srri @$AR1, $AC0.M 0c61 0009 iar $AR1 0c62 8100 clr $ACC0 0c63 8971 clr'l $ACC1 : $AC0.M, @$AR1 0c64 18bf lrrd $AC1.M, @$AR1 0c65 1b7e srri @$AR3, $AC0.M 0c66 4c00 add $ACC0, $ACC1 0c67 1b7e srri @$AR3, $AC0.M 0c68 112f 0c6d bloopi #0x2f, 0x0c6d 0c6a 4c00 add $ACC0, $ACC1 0c6b 1b7e srri @$AR3, $AC0.M 0c6c 4c00 add $ACC0, $ACC1 0c6d 1b7e srri @$AR3, $AC0.M 0c6e 4c00 add $ACC0, $ACC1 0c6f 1b3e srri @$AR1, $AC0.M 0c70 1c27 mrr $AR1, $IX3 0c71 1c62 mrr $AR3, $AR2 0c72 8f50 set40'l : $AX0.H, @$AR0 0c73 1939 lrri $AX1.L, @$AR1 0c74 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 0c75 195c lrri $AC0.L, @$AR2 0c76 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 0c77 191a lrri $AX0.H, @$AR0 0c78 1939 lrri $AX1.L, @$AR1 0c79 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 0c7a 9100 asr16 $ACC0 0c7b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c7c 1939 lrri $AX1.L, @$AR1 0c7d 112f 0c88 bloopi #0x2f, 0x0c88 0c7f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0c80 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0c81 195c lrri $AC0.L, @$AR2 0c82 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0c83 1939 lrri $AX1.L, @$AR1 0c84 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0c85 917a asr16'l $ACC0 : $AC1.M, @$AR2 0c86 195d lrri $AC1.L, @$AR2 0c87 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c88 1939 lrri $AX1.L, @$AR1 0c89 1b7c srri @$AR3, $AC0.L 0c8a 6e00 movp $ACC0 0c8b 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M 0c8c 9905 asr16'dr $ACC1 : $AR1 0c8d 1b7f srri @$AR3, $AC1.M 0c8e 1b7d srri @$AR3, $AC1.L 0c8f 1c04 mrr $AR0, $IX0 0c90 1c45 mrr $AR2, $IX1 0c91 1c62 mrr $AR3, $AR2 0c92 191a lrri $AX0.H, @$AR0 0c93 1939 lrri $AX1.L, @$AR1 0c94 b072 mulx'l $AX0.H, $AX1.L : $AC0.M, @$AR2 0c95 195c lrri $AC0.L, @$AR2 0c96 f07a lsl16'l $ACC0 : $AC1.M, @$AR2 0c97 191a lrri $AX0.H, @$AR0 0c98 1939 lrri $AX1.L, @$AR1 0c99 b46a mulxac'l $AX0.H, $AX1.L, $ACC0 : $AC1.L, @$AR2 0c9a 9100 asr16 $ACC0 0c9b f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0c9c 1939 lrri $AX1.L, @$AR1 0c9d 112f 0ca8 bloopi #0x2f, 0x0ca8 0c9f b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0ca0 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0ca1 195c lrri $AC0.L, @$AR2 0ca2 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0ca3 1939 lrri $AX1.L, @$AR1 0ca4 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0ca5 917a asr16'l $ACC0 : $AC1.M, @$AR2 0ca6 195d lrri $AC1.L, @$AR2 0ca7 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0ca8 1939 lrri $AX1.L, @$AR1 0ca9 1b7c srri @$AR3, $AC0.L 0caa 6e00 movp $ACC0 0cab 4f1e addp'mv $ACC1 : $AX1.H, $AC0.M 0cac 9900 asr16 $ACC1 0cad 1b7f srri @$AR3, $AC1.M 0cae 1b7d srri @$AR3, $AC1.L 0caf 02df ret 0cb0 0098 0000 lri $AX0.L, #0x0000 0cb2 02df ret } 0cb3 0080 0cc0 lri $AR0, #0x0cc0 0cb5 1c62 mrr $AR3, $AR2 0cb6 1939 lrri $AX1.L, @$AR1 0cb7 191a lrri $AX0.H, @$AR0 0cb8 b000 mulx $AX0.H, $AX1.L 0cb9 195e lrri $AC0.M, @$AR2 0cba 195c lrri $AC0.L, @$AR2 0cbb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 0cbc b400 mulxac $AX0.H, $AX1.L, $ACC0 0cbd 917a asr16'l $ACC0 : $AC1.M, @$AR2 0cbe 195d lrri $AC1.L, @$AR2 0cbf f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0cc0 1108 0cc9 bloopi #0x08, 0x0cc9 0cc2 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0cc3 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0cc4 195c lrri $AC0.L, @$AR2 0cc5 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0cc6 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0cc7 917a asr16'l $ACC0 : $AC1.M, @$AR2 0cc8 195d lrri $AC1.L, @$AR2 0cc9 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0cca 4f23 addp's $ACC1 : @$AR3, $AC0.L 0ccb 9900 asr16 $ACC1 0ccc 1b7f srri @$AR3, $AC1.M 0ccd 6e2b movp's $ACC0 : @$AR3, $AC1.L 0cce 1f1e mrr $AX0.L, $AC0.M 0ccf 02df ret 0cd0 0080 0cc0 lri $AR0, #0x0cc0 0cd2 0083 0d08 lri $AR3, #0x0d08 0cd4 1ce3 mrr $IX3, $AR3 0cd5 8e00 set16 0cd6 8100 clr $ACC0 0cd7 8971 clr'l $ACC1 : $AC0.M, @$AR1 0cd8 18bf lrrd $AC1.M, @$AR1 0cd9 1b7e srri @$AR3, $AC0.M 0cda 4c00 add $ACC0, $ACC1 0cdb 1b7e srri @$AR3, $AC0.M 0cdc 1108 0ce1 bloopi #0x08, 0x0ce1 0cde 4c00 add $ACC0, $ACC1 0cdf 1b7e srri @$AR3, $AC0.M 0ce0 4c00 add $ACC0, $ACC1 0ce1 1b7e srri @$AR3, $AC0.M 0ce2 4c00 add $ACC0, $ACC1 0ce3 1b3e srri @$AR1, $AC0.M 0ce4 1c27 mrr $AR1, $IX3 0ce5 1c62 mrr $AR3, $AR2 0ce6 8f50 set40'l : $AX0.H, @$AR0 0ce7 1939 lrri $AX1.L, @$AR1 0ce8 b000 mulx $AX0.H, $AX1.L 0ce9 195e lrri $AC0.M, @$AR2 0cea 195c lrri $AC0.L, @$AR2 0ceb f050 lsl16'l $ACC0 : $AX0.H, @$AR0 0cec 1939 lrri $AX1.L, @$AR1 0ced b400 mulxac $AX0.H, $AX1.L, $ACC0 0cee 917a asr16'l $ACC0 : $AC1.M, @$AR2 0cef 195d lrri $AC1.L, @$AR2 0cf0 f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0cf1 1939 lrri $AX1.L, @$AR1 0cf2 1108 0cfd bloopi #0x08, 0x0cfd 0cf4 b523 mulxac's $AX0.H, $AX1.L, $ACC1 : @$AR3, $AC0.L 0cf5 9972 asr16'l $ACC1 : $AC0.M, @$AR2 0cf6 195c lrri $AC0.L, @$AR2 0cf7 f0a1 lsl16'ls $ACC0 : $AX0.H, $AC1.M 0cf8 1939 lrri $AX1.L, @$AR1 0cf9 b42b mulxac's $AX0.H, $AX1.L, $ACC0 : @$AR3, $AC1.L 0cfa 917a asr16'l $ACC0 : $AC1.M, @$AR2 0cfb 195d lrri $AC1.L, @$AR2 0cfc f1a0 lsl16'ls $ACC1 : $AX0.H, $AC0.M 0cfd 1939 lrri $AX1.L, @$AR1 0cfe 4f23 addp's $ACC1 : @$AR3, $AC0.L 0cff 9900 asr16 $ACC1 0d00 1b7f srri @$AR3, $AC1.M 0d01 6e2b movp's $ACC0 : @$AR3, $AC1.L 0d02 1f1e mrr $AX0.L, $AC0.M 0d03 02df ret // Command jump table 0d04 008a // 0x0 - ??? 0d05 0222 // 0x1 - ??? 0d06 024f // 0x2 - ??? 0d07 0e83 // 0x3 - ??? 0d08 027e // 0x4 - set PBs address 0d09 049b // 0x5 - ??? 0d0a 04b4 // 0x6 - ??? 0d0b 04cd // 0x7 - set output buffers 0d0c 0dbd // 0x8 - ??? 0d0d 0ddf // 0x9 - ??? 0d0e 057b // 0xA - set compressor table 0d0f 060b // 0xB - ??? 0d10 0ec6 // 0xC - ??? 0d11 067c // 0xD - ??? 0d12 0672 // 0xE - The End // Table #1 - entry selected by PB[0x007] bits 0-4 0d13 081f lris $AX0.L, #0x1f // 0: Do nothing 0d14 0820 lris $AX0.L, #0x20 0d15 082c lris $AX0.L, #0x2c 0d16 0838 lris $AX0.L, #0x38 0d17 084a lris $AX0.L, #0x4a 0d18 084a lris $AX0.L, #0x4a 0d19 084a lris $AX0.L, #0x4a 0d1a 084a lris $AX0.L, #0x4a 0d1b 085d lris $AX0.L, #0x5d 0d1c 0869 lris $AX0.L, #0x69 0d1d 0876 lris $AX0.L, #0x76 0d1e 0883 lris $AX0.L, #0x83 0d1f 0890 lris $AX0.L, #0x90 0d20 0890 lris $AX0.L, #0x90 0d21 0890 lris $AX0.L, #0x90 0d22 0890 lris $AX0.L, #0x90 0d23 089d lris $AX0.L, #0x9d 0d24 08aa lris $AX0.L, #0xaa 0d25 08b8 lris $AX0.L, #0xb8 0d26 08c6 lris $AX0.L, #0xc6 0d27 08d4 lris $AX0.L, #0xd4 0d28 08d4 lris $AX0.L, #0xd4 0d29 08d4 lris $AX0.L, #0xd4 0d2a 08d4 lris $AX0.L, #0xd4 0d2b 089d lris $AX0.L, #0x9d 0d2c 08aa lris $AX0.L, #0xaa 0d2d 08b8 lris $AX0.L, #0xb8 0d2e 08c6 lris $AX0.L, #0xc6 0d2f 08d4 lris $AX0.L, #0xd4 0d30 08d4 lris $AX0.L, #0xd4 0d31 08d4 lris $AX0.L, #0xd4 0d32 08d4 lris $AX0.L, #0xd4 // Table #2 - entry selected by PB[0x006] bits 0-4 0d33 081f lris $AX0.L, #0x1f // 0: Do nothing 0d34 08e2 lris $AX0.L, #0xe2 0d35 08ee lris $AX0.L, #0xee 0d36 08fa lris $AX0.L, #0xfa 0d37 090c lris $AX1.L, #0x0c 0d38 090c lris $AX1.L, #0x0c 0d39 090c lris $AX1.L, #0x0c 0d3a 090c lris $AX1.L, #0x0c 0d3b 091f lris $AX1.L, #0x1f 0d3c 092b lris $AX1.L, #0x2b 0d3d 0938 lris $AX1.L, #0x38 0d3e 0945 lris $AX1.L, #0x45 0d3f 0952 lris $AX1.L, #0x52 0d40 0952 lris $AX1.L, #0x52 0d41 0952 lris $AX1.L, #0x52 0d42 0952 lris $AX1.L, #0x52 0d43 095f lris $AX1.L, #0x5f 0d44 096c lris $AX1.L, #0x6c 0d45 097a lris $AX1.L, #0x7a 0d46 0988 lris $AX1.L, #0x88 0d47 0996 lris $AX1.L, #0x96 0d48 0996 lris $AX1.L, #0x96 0d49 0996 lris $AX1.L, #0x96 0d4a 0996 lris $AX1.L, #0x96 0d4b 095f lris $AX1.L, #0x5f 0d4c 096c lris $AX1.L, #0x6c 0d4d 097a lris $AX1.L, #0x7a 0d4e 0988 lris $AX1.L, #0x88 0d4f 0996 lris $AX1.L, #0x96 0d50 0996 lris $AX1.L, #0x96 0d51 0996 lris $AX1.L, #0x96 0d52 0996 lris $AX1.L, #0x96 // Table #3 - entry selected by PB[0x006] bits 5-9 0d53 081f lris $AX0.L, #0x1f // 0: Do nothing 0d54 09a4 lris $AX1.L, #0xa4 0d55 09b0 lris $AX1.L, #0xb0 0d56 09bc lris $AX1.L, #0xbc 0d57 09ce lris $AX1.L, #0xce 0d58 09ce lris $AX1.L, #0xce 0d59 09ce lris $AX1.L, #0xce 0d5a 09ce lris $AX1.L, #0xce 0d5b 09e1 lris $AX1.L, #0xe1 0d5c 09ed lris $AX1.L, #0xed 0d5d 09fa lris $AX1.L, #0xfa 0d5e 0a07 lris $AX0.H, #0x07 0d5f 0a14 lris $AX0.H, #0x14 0d60 0a14 lris $AX0.H, #0x14 0d61 0a14 lris $AX0.H, #0x14 0d62 0a14 lris $AX0.H, #0x14 0d63 0a21 lris $AX0.H, #0x21 0d64 0a2e lris $AX0.H, #0x2e 0d65 0a3c lris $AX0.H, #0x3c 0d66 0a4a lris $AX0.H, #0x4a 0d67 0a58 lris $AX0.H, #0x58 0d68 0a58 lris $AX0.H, #0x58 0d69 0a58 lris $AX0.H, #0x58 0d6a 0a58 lris $AX0.H, #0x58 0d6b 0a21 lris $AX0.H, #0x21 0d6c 0a2e lris $AX0.H, #0x2e 0d6d 0a3c lris $AX0.H, #0x3c 0d6e 0a4a lris $AX0.H, #0x4a 0d6f 0a58 lris $AX0.H, #0x58 0d70 0a58 lris $AX0.H, #0x58 0d71 0a58 lris $AX0.H, #0x58 0d72 0a58 lris $AX0.H, #0x58 // Table #4 - entry selected by PB[0x006] bits 10-15 // (twice longer than the three previous ones!) 0d73 081f lris $AX0.L, #0x1f // 0: Do nothing 0d74 0a66 lris $AX0.H, #0x66 0d75 0a72 lris $AX0.H, #0x72 0d76 0a7e lris $AX0.H, #0x7e 0d77 0a90 lris $AX0.H, #0x90 0d78 0a90 lris $AX0.H, #0x90 0d79 0a90 lris $AX0.H, #0x90 0d7a 0a90 lris $AX0.H, #0x90 0d7b 0aa3 lris $AX0.H, #0xa3 0d7c 0aaf lris $AX0.H, #0xaf 0d7d 0abc lris $AX0.H, #0xbc 0d7e 0ac9 lris $AX0.H, #0xc9 0d7f 0ad6 lris $AX0.H, #0xd6 0d80 0ad6 lris $AX0.H, #0xd6 0d81 0ad6 lris $AX0.H, #0xd6 0d82 0ad6 lris $AX0.H, #0xd6 0d83 0ae3 lris $AX0.H, #0xe3 0d84 0af0 lris $AX0.H, #0xf0 0d85 0afe lris $AX0.H, #0xfe 0d86 0b0c lris $AX1.H, #0x0c 0d87 0b1a lris $AX1.H, #0x1a 0d88 0b1a lris $AX1.H, #0x1a 0d89 0b1a lris $AX1.H, #0x1a 0d8a 0b1a lris $AX1.H, #0x1a 0d8b 0ae3 lris $AX0.H, #0xe3 0d8c 0af0 lris $AX0.H, #0xf0 0d8d 0afe lris $AX0.H, #0xfe 0d8e 0b0c lris $AX1.H, #0x0c 0d8f 0b1a lris $AX1.H, #0x1a 0d90 0b1a lris $AX1.H, #0x1a 0d91 0b1a lris $AX1.H, #0x1a 0d92 0b1a lris $AX1.H, #0x1a 0d93 081f lris $AX0.L, #0x1f 0d94 0b28 lris $AX1.H, #0x28 0d95 0b34 lris $AX1.H, #0x34 0d96 0b40 lris $AX1.H, #0x40 0d97 0b52 lris $AX1.H, #0x52 0d98 0b52 lris $AX1.H, #0x52 0d99 0b52 lris $AX1.H, #0x52 0d9a 0b52 lris $AX1.H, #0x52 0d9b 0aa3 lris $AX0.H, #0xa3 0d9c 0b65 lris $AX1.H, #0x65 0d9d 0b72 lris $AX1.H, #0x72 0d9e 0b7f lris $AX1.H, #0x7f 0d9f 0b8c lris $AX1.H, #0x8c 0da0 0b8c lris $AX1.H, #0x8c 0da1 0b8c lris $AX1.H, #0x8c 0da2 0b8c lris $AX1.H, #0x8c 0da3 0ae3 lris $AX0.H, #0xe3 0da4 0b99 lris $AX1.H, #0x99 0da5 0ba7 lris $AX1.H, #0xa7 0da6 0bb5 lris $AX1.H, #0xb5 0da7 0bc3 lris $AX1.H, #0xc3 0da8 0bc3 lris $AX1.H, #0xc3 0da9 0bc3 lris $AX1.H, #0xc3 0daa 0bc3 lris $AX1.H, #0xc3 0dab 0ae3 lris $AX0.H, #0xe3 0dac 0b99 lris $AX1.H, #0x99 0dad 0ba7 lris $AX1.H, #0xa7 0dae 0bb5 lris $AX1.H, #0xb5 0daf 0bc3 lris $AX1.H, #0xc3 0db0 0bc3 lris $AX1.H, #0xc3 0db1 0bc3 lris $AX1.H, #0xc3 0db2 0bc3 lris $AX1.H, #0xc3 0db3 0cb0 lris $AC0.L, #0xb0 0db4 0cb3 lris $AC0.L, #0xb3 0db5 0cd0 lris $AC0.L, #0xd0 0db6 0cd0 lris $AC0.L, #0xd0 // Jump table for sample rate converters 0db7 071a cmpis $ACC1, #0x1a // none 0db8 076b cmpis $ACC1, #0x6b // ? 0db9 07c0 cmpis $ACC1, #0xc0 // linear // Table for coef_select // addresses into COEF ROM 0dba 1000 loopi #0x00 0dbb 1200 sbclr #0x00 0dbc 1400 lsl $ACC0, #0 void 0dbd_Cmd_8() { 0dbd 8e00 set16 0dbe 00c4 0ce6 lr $IX0, @0x0ce6 0dc0 1905 lrri $IX1, @$AR0 0dc1 00e5 0ce6 sr @0x0ce6, $IX1 0dc3 0086 0400 lri $IX2, #0x0400 0dc5 191e lrri $AC0.M, @$AR0 0dc6 191c lrri $AC0.L, @$AR0 0dc7 2ece srs @DSMAH, $AC0.M 0dc8 2ccf srs @DSMAL, $AC0.L 0dc9 16cd 0400 si @DSPA, #0x0400 0dcb 16c9 0001 si @DSCR, #0x0001 0dcd 16cb 0480 si @DSBL, #0x0480 0dcf 02bf 0084 call 0084_WaitForDMACompletion() 0dd1 191e lrri $AC0.M, @$AR0 0dd2 191c lrri $AC0.L, @$AR0 0dd3 2ece srs @DSMAH, $AC0.M 0dd4 2ccf srs @DSMAL, $AC0.L 0dd5 16cd 0940 si @DSPA, #0x0940 0dd7 16c9 0001 si @DSCR, #0x0001 0dd9 16cb 0180 si @DSBL, #0x0180 0ddb 02bf 0084 call 0084_WaitForDMACompletion() 0ddd 029f 0e01 jmp 0e01_Unk() } void 0ddf_Cmd_9() { 0ddf 8e00 set16 0de0 00c4 0ce7 lr $IX0, @0x0ce7 0de2 1905 lrri $IX1, @$AR0 0de3 00e5 0ce7 sr @0x0ce7, $IX1 0de5 0086 0640 lri $IX2, #0x0640 0de7 191e lrri $AC0.M, @$AR0 0de8 191c lrri $AC0.L, @$AR0 0de9 2ece srs @DSMAH, $AC0.M 0dea 2ccf srs @DSMAL, $AC0.L 0deb 16cd 0640 si @DSPA, #0x0640 0ded 16c9 0001 si @DSCR, #0x0001 0def 16cb 0480 si @DSBL, #0x0480 0df1 02bf 0084 call 0084_WaitForDMACompletion() 0df3 191e lrri $AC0.M, @$AR0 0df4 191c lrri $AC0.L, @$AR0 0df5 2ece srs @DSMAH, $AC0.M 0df6 2ccf srs @DSMAL, $AC0.L 0df7 16cd 0a00 si @DSPA, #0x0a00 0df9 16c9 0001 si @DSCR, #0x0001 0dfb 16cb 0180 si @DSBL, #0x0180 0dfd 02bf 0084 call 0084_WaitForDMACompletion() 0dff 029f 0e01 jmp 0e01_Unk() } void 0e01_Unk() { 0e01 8b00 m0 0e02 8100 clr $ACC0 0e03 8900 clr $ACC1 0e04 1fc4 mrr $AC0.M, $IX0 0e05 1fe5 mrr $AC1.M, $IX1 0e06 5d00 sub $ACC1, $ACC0 0e07 009a 02ab lri $AX0.H, #0x02ab 0e09 009b 02aa lri $AX1.H, #0x02aa 0e0b 0081 0d08 lri $AR1, #0x0d08 0e0d d000 mulc $AC1.M, $AX0.H 0e0e d400 mulcac $AC1.M, $AX0.H, $ACC0 0e0f 111f 0e13 bloopi #0x1f, 0x0e13 0e11 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 0e12 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 0e13 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 0e14 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 0e15 4e31 addp's $ACC0 : @$AR1, $AC0.M 0e16 1b25 srri @$AR1, $IX1 0e17 191e lrri $AC0.M, @$AR0 0e18 191c lrri $AC0.L, @$AR0 0e19 2ece srs @DSMAH, $AC0.M 0e1a 2ccf srs @DSMAL, $AC0.L 0e1b 00e6 ffcd sr @DSPA, $IX2 0e1d 16c9 0000 si @DSCR, #0x0000 0e1f 16cb 0180 si @DSBL, #0x0180 0e21 0081 0000 lri $AR1, #0x0000 0e23 1c41 mrr $AR2, $AR1 0e24 02bf 0084 call 0084_WaitForDMACompletion() 0e26 02bf 0e57 call 0x0e57 0e28 191e lrri $AC0.M, @$AR0 0e29 191c lrri $AC0.L, @$AR0 0e2a 2ece srs @DSMAH, $AC0.M 0e2b 2ccf srs @DSMAL, $AC0.L 0e2c 00e6 ffcd sr @DSPA, $IX2 0e2e 16c9 0000 si @DSCR, #0x0000 0e30 16cb 0180 si @DSBL, #0x0180 0e32 02bf 0084 call 0084_WaitForDMACompletion() 0e34 02bf 0e57 call 0x0e57 0e36 191e lrri $AC0.M, @$AR0 0e37 191c lrri $AC0.L, @$AR0 0e38 2ece srs @DSMAH, $AC0.M 0e39 2ccf srs @DSMAL, $AC0.L 0e3a 00e6 ffcd sr @DSPA, $IX2 0e3c 16c9 0000 si @DSCR, #0x0000 0e3e 16cb 0180 si @DSBL, #0x0180 0e40 02bf 0084 call 0084_WaitForDMACompletion() 0e42 02bf 0e57 call 0x0e57 0e44 191e lrri $AC0.M, @$AR0 0e45 191c lrri $AC0.L, @$AR0 0e46 2ece srs @DSMAH, $AC0.M 0e47 2ccf srs @DSMAL, $AC0.L 0e48 00e6 ffcd sr @DSPA, $IX2 0e4a 16c9 0000 si @DSCR, #0x0000 0e4c 16cb 0180 si @DSBL, #0x0180 0e4e 0081 0880 lri $AR1, #0x0880 0e50 1c41 mrr $AR2, $AR1 0e51 02bf 0084 call 0084_WaitForDMACompletion() 0e53 02bf 0e57 call 0x0e57 0e55 029f 006f jmp 006f_MailHandler() } 0e57 8f00 set40 0e58 8d00 set15 0e59 8a00 m2 0e5a 00e0 0cd2 sr @0x0cd2, $AR0 0e5c 0080 0d08 lri $AR0, #0x0d08 0e5e 1c66 mrr $AR3, $IX2 0e5f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0e60 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e61 a000 mulx $AX0.L, $AX1.L 0e62 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0e63 9141 asr16'l $ACC0 : $AX0.L, @$AR1 0e64 4e00 addp $ACC0 0e65 4800 addax $ACC0, $AX0.L 0e66 112f 0e75 bloopi #0x2f, 0x0e75 0e68 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0e69 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e6a a000 mulx $AX0.L, $AX1.L 0e6b af00 mulxmv $AX0.L, $AX1.H, $ACC1 0e6c 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0e6d 4f32 addp's $ACC1 : @$AR2, $AC0.M 0e6e 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0e6f 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0e70 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e71 a000 mulx $AX0.L, $AX1.L 0e72 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0e73 9141 asr16'l $ACC0 : $AX0.L, @$AR1 0e74 4e3a addp's $ACC0 : @$AR2, $AC1.M 0e75 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L 0e76 80f1 nx'ld : $AX0.H, $AX1.H, @$AR1 0e77 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e78 a000 mulx $AX0.L, $AX1.L 0e79 af00 mulxmv $AX0.L, $AX1.H, $ACC1 0e7a 9941 asr16'l $ACC1 : $AX0.L, @$AR1 0e7b 4f32 addp's $ACC1 : @$AR2, $AC0.M 0e7c 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0e7d 1b5f srri @$AR2, $AC1.M 0e7e 1b5d srri @$AR2, $AC1.L 0e7f 00c0 0cd2 lr $AR0, @0x0cd2 0e81 8e00 set16 0e82 02df ret void 0e83_Cmd_3() { 0e83 8e00 set16 0e84 191f lrri $AC1.M, @$AR0 0e85 191d lrri $AC1.L, @$AR0 0e86 2fce srs @DSMAH, $AC1.M 0e87 2dcf srs @DSMAL, $AC1.L 0e88 16cd 0d08 si @DSPA, #0x0d08 0e8a 16c9 0000 si @DSCR, #0x0000 0e8c 16cb 0300 si @DSBL, #0x0300 0e8e 02bf 0084 call 0084_WaitForDMACompletion() 0e90 1c80 mrr $IX0, $AR0 0e91 8f00 set40 0e92 0080 0d08 lri $AR0, #0x0d08 0e94 0083 0000 lri $AR3, #0x0000 0e96 1c43 mrr $AR2, $AR3 0e97 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0e98 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e99 6a00 movax $ACC0, $AX1.L 0e9a 4800 addax $ACC0, $AX0.L 0e9b 112f 0ea4 bloopi #0x2f, 0x0ea4 0e9d 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0e9e 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0e9f 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M 0ea0 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0ea1 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0ea2 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0ea3 6a3a movax's $ACC0, $AX1.L : @$AR2, $AC1.M 0ea4 482a addax's $ACC0, $AX0.L : @$AR2, $AC1.L 0ea5 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0ea6 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0ea7 6b32 movax's $ACC1, $AX1.L : @$AR2, $AC0.M 0ea8 4922 addax's $ACC1, $AX0.L : @$AR2, $AC0.L 0ea9 1b5f srri @$AR2, $AC1.M 0eaa 1b5d srri @$AR2, $AC1.L 0eab 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0eac 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0ead 6800 movax $ACC0, $AX0.L 0eae 7c00 neg $ACC0 0eaf 4a00 addax $ACC0, $AX1.L 0eb0 112f 0ebb bloopi #0x2f, 0x0ebb 0eb2 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0eb3 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0eb4 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M 0eb5 7d00 neg $ACC1 0eb6 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L 0eb7 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0eb8 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0eb9 683a movax's $ACC0, $AX0.L : @$AR2, $AC1.M 0eba 7c00 neg $ACC0 0ebb 4a2a addax's $ACC0, $AX1.L : @$AR2, $AC1.L 0ebc 80f0 nx'ld : $AX0.H, $AX1.H, @$AR0 0ebd 80c0 nx'ld : $AX0.L, $AX1.L, @$AR0 0ebe 6932 movax's $ACC1, $AX0.L : @$AR2, $AC0.M 0ebf 7d00 neg $ACC1 0ec0 4b22 addax's $ACC1, $AX1.L : @$AR2, $AC0.L 0ec1 1b5f srri @$AR2, $AC1.M 0ec2 1b5d srri @$AR2, $AC1.L 0ec3 1c04 mrr $AR0, $IX0 0ec4 029f 006f jmp 006f_MailHandler() } void 0ec6_Cmd_C() { 0ec6 8e48 set16'l : $AX1.L, @$AR0 0ec7 8b78 m0'l : $AC1.M, @$AR0 0ec8 8168 clr'l $ACC0 : $AC1.L, @$AR0 0ec9 00e0 0cd2 sr @0x0cd2, $AR0 0ecb 2fce srs @DSMAH, $AC1.M 0ecc 2dcf srs @DSMAL, $AC1.L 0ecd 16cd 0180 si @DSPA, #0x0180 0ecf 16c9 0001 si @DSCR, #0x0001 0ed1 16cb 0180 si @DSBL, #0x0180 0ed3 02bf 0084 call 0084_WaitForDMACompletion() 0ed5 8100 clr $ACC0 0ed6 009c 0180 lri $AC0.L, #0x0180 0ed8 4d00 add $ACC1, $ACC0 0ed9 2fce srs @DSMAH, $AC1.M 0eda 2dcf srs @DSMAL, $AC1.L 0edb 16cd 0880 si @DSPA, #0x0880 0edd 16c9 0001 si @DSCR, #0x0001 0edf 16cb 0180 si @DSBL, #0x0180 0ee1 8100 clr $ACC0 0ee2 8900 clr $ACC1 0ee3 00de 0ce5 lr $AC0.M, @0x0ce5 0ee5 1ff9 mrr $AC1.M, $AX1.L 0ee6 5d00 sub $ACC1, $ACC0 0ee7 00f9 0ce5 sr @0x0ce5, $AX1.L 0ee9 009a 02ab lri $AX0.H, #0x02ab 0eeb 009b 02aa lri $AX1.H, #0x02aa 0eed 0081 0d08 lri $AR1, #0x0d08 0eef d000 mulc $AC1.M, $AX0.H 0ef0 d400 mulcac $AC1.M, $AX0.H, $ACC0 0ef1 111f 0ef5 bloopi #0x1f, 0x0ef5 0ef3 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 0ef4 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 0ef5 d431 mulcac's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M 0ef6 dc31 mulcac's $AC1.M, $AX1.H, $ACC0 : @$AR1, $AC0.M 0ef7 4e31 addp's $ACC0 : @$AR1, $AC0.M 0ef8 1b39 srri @$AR1, $AX1.L 0ef9 02bf 0084 call 0084_WaitForDMACompletion() 0efb 8f00 set40 0efc 8d00 set15 0efd 8a00 m2 0efe 0080 0d08 lri $AR0, #0x0d08 0f00 0081 0400 lri $AR1, #0x0400 0f02 0083 0000 lri $AR3, #0x0000 0f04 0082 00c0 lri $AR2, #0x00c0 0f06 1918 lrri $AX0.L, @$AR0 0f07 195b lrri $AX1.H, @$AR2 0f08 1959 lrri $AX1.L, @$AR2 0f09 a000 mulx $AX0.L, $AX1.L 0f0a ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0f0b 9100 asr16 $ACC0 0f0c 4e5b addp'l $ACC0 : $AX1.H, @$AR3 0f0d f04b lsl16'l $ACC0 : $AX1.L, @$AR3 0f0e 115f 0f19 bloopi #0x5f, 0x0f19 0f10 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 0f11 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0f12 9140 asr16'l $ACC0 : $AX0.L, @$AR0 0f13 4e5a addp'l $ACC0 : $AX1.H, @$AR2 0f14 f04a lsl16'l $ACC0 : $AX1.L, @$AR2 0f15 a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 0f16 ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0f17 9100 asr16 $ACC0 0f18 4e5b addp'l $ACC0 : $AX1.H, @$AR3 0f19 f04b lsl16'l $ACC0 : $AX1.L, @$AR3 0f1a a031 mulx's $AX0.L, $AX1.L : @$AR1, $AC0.M 0f1b ae00 mulxmv $AX0.L, $AX1.H, $ACC0 0f1c 9100 asr16 $ACC0 0f1d 4e00 addp $ACC0 0f1e f000 lsl16 $ACC0 0f1f 1b3e srri @$AR1, $AC0.M 0f20 8e00 set16 0f21 00c0 0cd2 lr $AR0, @0x0cd2 0f23 191e lrri $AC0.M, @$AR0 0f24 191c lrri $AC0.L, @$AR0 0f25 2ece srs @DSMAH, $AC0.M 0f26 2ccf srs @DSMAL, $AC0.L 0f27 16cd 0400 si @DSPA, #0x0400 0f29 16c9 0001 si @DSCR, #0x0001 0f2b 16cb 0180 si @DSBL, #0x0180 0f2d 02bf 0084 call 0084_WaitForDMACompletion() 0f2f 16fc dcd1 si @DMBH, #0xdcd1 <-------------- !!! 0f31 16fd 0004 si @DMBL, #0x0004 <-------------- !!! 0f33 16fb 0001 si @DIRQ, #0x0001 <-------------- !!! 0f35 26fc lrs $AC0.M, @DMBH 0f36 02a0 8000 andf $AC0.M, #0x8000 0f38 029c 0f35 jlnz 0x0f35 0f3a 029f 006f jmp 006f_MailHandler() } void 0f3c_Int1_Handler() { 0f3c 8e00 set16 0f3d 1fcc mrr $AC0.M, $ST0 0f3e 1d9e mrr $ST0, $AC0.M 0f3f 16fc ecc0 si @DMBH, #0xecc0 0f41 2efd srs @DMBL, $AC0.M 0f42 26fc lrs $AC0.M, @DMBH 0f43 02a0 8000 andf $AC0.M, #0x8000 0f45 029c 0f42 jlnz 0x0f42 0f47 02ff rti } void 0f48_Int2_Handler() { 0f48 0000 nop 0f49 0000 nop 0f4a 0000 nop 0f4b 0000 nop 0f4c 02ff rti } void 0f4d_Int3_Handler() { 0f4d 8e00 set16 0f4e 1dbc mrr $ST1, $AC0.L 0f4f 1dbe mrr $ST1, $AC0.M 0f50 8100 clr $ACC0 0f51 00de 0307 lr $AC0.M, @0x0307 0f53 0601 cmpis $ACC0, #0x01 0f54 0295 0f59 jz 0x0f59 0f56 0e00 lris $AC0.M, #0x00 0f57 00fe 02d8 sr @0x02d8, $AC0.M 0f59 1fcd mrr $AC0.M, $ST1 0f5a 1f8d mrr $AC0.L, $ST1 0f5b 02ff rti } void 0f5c_Int4_Handler() { 0f5c 0000 nop 0f5d 0000 nop 0f5e 0000 nop 0f5f 0000 nop 0f60 02ff rti } // Handles ACCOV exception // ACCOV exception will be triggered when a sound being played // reaches end and needs to be reloaded or stopped. // void 0f61_Int5_Handler() { 0f61 8e00 set16 0f62 1dbc mrr $ST1, $AC0.L 0f63 1dbe mrr $ST1, $AC0.M 0f64 8100 clr $ACC0 0f65 00de 0307 lr $AC0.M, @0x0307 0f67 0601 cmpis $ACC0, #0x01 0f68 0295 0f72 jz 0x0f72 // if (mem16[0x0307] == 1) handle looping; 0f6a 0e00 lris $AC0.M, #0x00 0f6b 00fe 02d8 sr @0x02d8, $AC0.M // else stop the sound; 0f6d 0082 0ce9 lri $AR2, #0x0ce9 0f6f 1fcd mrr $AC0.M, $ST1 0f70 1f8d mrr $AC0.L, $ST1 0f71 02ff rti // Looping handling 0f72 00de 02d9 lr $AC0.M, @0x02d9 0f74 0601 cmpis $ACC0, #0x01 0f75 0295 0f83 jz 0x0f83 // if (mem16[0x02D9] == 1) handle stream; // reload pred scale, yn1 and yn2 from the PB // the address will be automatically reloaded by the accelerator 0f77 00de 032a lr $AC0.M, @0x032a 0f79 2eda srs @pred_scale, $AC0.M 0f7a 00de 032b lr $AC0.M, @0x032b 0f7c 2edb srs @yn1, $AC0.M 0f7d 00de 032c lr $AC0.M, @0x032c 0f7f 2edc srs @yn2, $AC0.M 0f80 1fcd mrr $AC0.M, $ST1 0f81 1f8d mrr $AC0.L, $ST1 0f82 02ff rti // Stream handling // reload pred_scale from the PB 0f83 00de 032a lr $AC0.M, @0x032a 0f85 2eda srs @pred_scale, $AC0.M // ??? - reload the yn1 and yn2 from... themselves 0f86 26db lrs $AC0.M, @yn1 0f87 2edb srs @yn1, $AC0.M 0f88 26dc lrs $AC0.M, @yn2 0f89 2edc srs @yn2, $AC0.M 0f8a 1fcd mrr $AC0.M, $ST1 0f8b 1f8d mrr $AC0.L, $ST1 0f8c 02ff rti } void 0f8d_Int6_Handler() { 0f8d 0000 nop 0f8e 0000 nop 0f8f 0000 nop 0f90 0000 nop 0f91 02ff rti } void 0f92_Int7_Handler() { 0f92 0000 nop 0f93 0000 nop 0f94 0000 nop 0f95 0000 nop 0f96 02ff rti } // action jump table 0f97 0fa9 // Action 0 - restart 0f98 0fac // Action 1 - dump DRAM and jump into iROM where new IRAM and DRAM can be uploaded 0f99 0fe4 // Action 2 - soft reset 0f9a 0fe7 // Action 3 - jump back to main loop // called at AXList end; wait for a last mail and take an action // Note: the same thing can be found in Zelda ucode. It's called after DsyncFrame. // Probably debugging stuff. { 0f9b 8e00 set16 0f9c 8100 clr $ACC0 0f9d 8900 clr $ACC1 0f9e 02bf 0fea call 0x0fea // wait for the mail; the high part is likely 0xCDD1 as for Zelda 0fa0 27ff lrs $AC1.M, @CMBL // the low part of the mail tells the action to take 0fa1 009e 0f97 lri $AC0.M, #0x0f97 0fa3 4c00 add $ACC0, $ACC1 0fa4 1c7e mrr $AR3, $AC0.M 0fa5 0313 ilrr $AC1.M, @$AR3 0fa6 1c7f mrr $AR3, $AC1.M 0fa7 176f jmpr $AR3 // take the action! 0fa8 0021 halt } //ACTION 0 (0xCDD10000) { 0fa9 029f 0037 jmp 0037_Unk_Restart() 0fab 0021 halt } //ACTION 1 (0xCDD10001) { 0fac 8100 clr $ACC0 0fad 8900 clr $ACC1 0fae 02bf 0fea call 0x0fea 0fb0 24ff lrs $AC0.L, @CMBL 0fb1 02bf 0ff0 call 0x0ff0 0fb3 25ff lrs $AC1.L, @CMBL 0fb4 02bf 0ff0 call 0x0ff0 0fb6 27ff lrs $AC1.M, @CMBL 0fb7 2ece srs @DSMAH, $AC0.M 0fb8 2ccf srs @DSMAL, $AC0.L 0fb9 16c9 0001 si @DSCR, #0x0001 // DMEM->CPU 0fbb 2fcd srs @DSPA, $AC1.M 0fbc 2dcb srs @DSBL, $AC1.L 0fbd 8100 clr $ACC0 0fbe 8900 clr $ACC1 0fbf 02bf 0fea call 0x0fea //prepare addr-s/length/dsp-PC for new IRAM/DRAM 0fc1 24ff lrs $AC0.L, @CMBL 0fc2 1c9e mrr $IX0, $AC0.M 0fc3 1cbc mrr $IX1, $AC0.L 0fc4 02bf 0ff0 call 0x0ff0 0fc6 25ff lrs $AC1.L, @CMBL 0fc7 02bf 0ff0 call 0x0ff0 0fc9 27ff lrs $AC1.M, @CMBL 0fca 1cdf mrr $IX2, $AC1.M 0fcb 1cfd mrr $IX3, $AC1.L 0fcc 8100 clr $ACC0 0fcd 02bf 0fea call 0x0fea 0fcf 26ff lrs $AC0.M, @CMBL 0fd0 1c1e mrr $AR0, $AC0.M 0fd1 8900 clr $ACC1 0fd2 02bf 0ff0 call 0x0ff0 0fd4 20ff lrs $AX0.L, @CMBL 0fd5 1f5f mrr $AX0.H, $AC1.M 0fd6 02bf 0fea call 0x0fea 0fd8 21ff lrs $AX1.L, @CMBL 0fd9 02bf 0fea call 0x0fea 0fdb 23ff lrs $AX1.H, @CMBL // 0fdc 26c9 lrs $AC0.M, @DSCR 0fdd 02a0 0004 andf $AC0.M, #0x0004 0fdf 029c 0fdc jlnz 0x0fdc 0fe1 029f 80b5 jmp 0x80b5 // 80b5_BootUcode() 0fe3 0021 halt } //ACTION 2 (0xCDD10002) { 0fe4 029f 8000 jmp 0x8000 0fe6 0021 halt } //ACTION 3 (0xCDD10003) { 0fe7 029f 004c jmp 0x004c 0fe9 0021 halt } { 0fea 26fe lrs $AC0.M, @CMBH 0feb 02c0 8000 andcf $AC0.M, #0x8000 0fed 029c 0fea jlnz 0x0fea 0fef 02df ret } { 0ff0 27fe lrs $AC1.M, @CMBH 0ff1 03c0 8000 andcf $AC1.M, #0x8000 0ff3 029c 0ff0 jlnz 0x0ff0 0ff5 02df ret } 0ff6 0000 nop 0ff7 0000 nop 0ff8 0000 nop 0ff9 0000 nop 0ffa 0000 nop 0ffb 0000 nop 0ffc 0000 nop 0ffd 0000 nop 0ffe 0000 nop 0fff 0000 nop