dolphin/docs/DSP/DSP_UC_AXWii.txt

3340 lines
134 KiB
Plaintext

// 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 = <nothing interesting>
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 <PROD> 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 <PROD> 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 // <PROD> = 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 += <PROD>; <PROD> = 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 += <PROD>; <PROD> = 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 += <PROD>; <PROD> = 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 = <PROD>;
0be6 4f12 addp'mv $ACC1 : $AX0.L, $AC0.M // acc1 += <PROD>; 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