2009-06-20 06:35:29 +00:00
// Zelda UCode - CRC: 0x09CD143F
// This is a very complex little ucode. Quite a bit more so than AX.
// It also seems to use features of the DSP that AX neglects (the reverse is true as well,
// this ucode doesn't seem to use the hardware ADPCM feature at all, instead opting to
// decode a different ADPCM format manually).
// The value 0x50 is VERY common as a loop size. Many, especially intermediate/output
// sample buffers seem to be of this size. Half that size, 0x28, is also seen.
// MemMap
// 0x0400 to 0x04C0 - Some kind of CommandoBlock
// exception vector
0000 029f 0012 jmp 0x0012
0002 0000 nop
0003 0000 nop
0004 02ff rti
0005 0000 nop
0006 02ff rti
0007 0000 nop
0008 02ff rti
0009 0000 nop
000a 02ff rti
000b 0000 nop
000c 02ff rti
000d 0000 nop
000e 029f 05b8 jmp 0x05b8
0010 029f 004e jmp 0x004e
// Handler for 0000 exception (reset?)
0012 1205 sbclr #0x05 // interesting, what is this flag? must be important.
0013 02bf 0057 call 0x0057 // InitHardware()
// clear memory
0015 8100 clr $ACC0
0016 009f 1000 lri $AC1.M, #0x1000
0018 0080 0000 lri $AR0, #0x0000
001a 005f loop $AC1.M
001b 1b1e srri @$AR0, $AC0.M
001c 02bf 0688 call 0x0688 // InitGlobalsVars()
001e 02bf 04c0 call 0x04c0
0020 02bf 0e14 call 0x0e14 // Init some kind of table
0022 0e00 lris $AC0.M, #0x00
0023 02bf 066a call 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M)
0025 009e 1111 lri $AC0.M, #0x1111
0027 02bf 0674 call 0x0674 // SendMessageViaDSPMailBox_F355(AC0.M)
0029 0e00 lris $AC0.M, #0x00
002a 00fe 034e sr @0x034e, $AC0.M
002c 1305 sbset #0x05
002d 029f 06c5 jmp 0x06c5 -> jump to MessageLoop()
// CommandHandler()
002f 00df 0357 lr $AC1.M, @0x0357
0031 00ff 0345 sr @0x0345, $AC1.M
0033 00de 0356 lr $AC0.M, @0x0356
0035 1ffe mrr $AC1.M, $AC0.M
0036 0340 00ff andi $AC1.M, #0x00ff
0038 00ff 0344 sr @0x0344, $AC1.M
003a 1479 lsr $ACC0, #-7
003b 0240 007e andi $AC0.M, #0x007e
003d 00fe 0343 sr @0x0343, $AC0.M
003f 0200 0075 addi $AC0.M, #0x0075 // offset of "JMP Table Opcodes"
0041 1c1e mrr $AR0, $AC0.M
0042 170f jmpr $AR0 // JMP to OpcodeHandler
0043 0092 00ff lri $CR, #0x00ff
0045 0e04 lris $AC0.M, #0x04
0046 02bf 066a call 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M)
0048 00de 0356 lr $AC0.M, @0x0356
004a 02bf 0674 call 0x0674 // SendMessageViaDSPMailBox_F355(AC0.M)
004c 029f 002d jmp 0x002d
// task start vector (0x0010) jumps here immediately.
004e 1205 sbclr #0x05
004f 02bf 0057 call 0x0057 // InitHardware()
0051 0e01 lris $AC0.M, #0x01
0052 02bf 066a call 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M)
0054 1305 sbset #0x05
0055 029f 002d jmp 0x002d
// InitHardware()
0057 1202 sbclr #0x02
0058 1203 sbclr #0x03
0059 1204 sbclr #0x04
005a 1306 sbset #0x06
005b 8e00 set16
005c 8c00 clr15
005d 8b00 m0
// Initialize the loop index registers to #ffff to neutralize them.
005e 009e ffff lri $AC0.M, #0xffff
0060 1d1e mrr $WR0, $AC0.M
0061 1d3e mrr $WR1, $AC0.M
0062 1d5e mrr $WR2, $AC0.M
0063 1d7e mrr $WR3, $AC0.M
0064 0092 00ff lri $CR, #0x00ff
0066 02df ret
// ReadWholeMessage($R00)
0067 0090 0000 lri $AC0.H, #0x0000
0069 0c00 lris $AC0.L, #0x00
006a 0081 0358 lri $AR1, #0x0358
006c 007e 0071 bloop $AC0.M, 0x0071
006e 193e lrri $AC0.M, @$AR1
006f 1b1e srri @$AR0, $AC0.M
0070 193e lrri $AC0.M, @$AR1
0071 1b1e srri @$AR0, $AC0.M
0072 02df ret
// Opcode_03() -> direct return
0073 029f 0043 jmp 0x0043
// JMP Table Opcodes
0075 029f 0043 jmp 0x0043 // dummy handler -> direct return
0077 029f 0095 jmp 0x0095
0079 029f 0243 jmp 0x0243
007b 029f 0073 jmp 0x0073
007d 029f 0580 jmp 0x0580
007f 029f 0592 jmp 0x0592
0081 029f 0469 jmp 0x0469
0083 029f 041d jmp 0x041d
0085 029f 0485 jmp 0x0485
0087 029f 044d jmp 0x044d
0089 029f 0043 jmp 0x0043 // dummy handler -> direct return
008b 029f 0043 jmp 0x0043 // dummy handler -> direct return
008d 029f 0043 jmp 0x0043 // dummy handler -> direct return
008f 029f 00b2 jmp 0x00b2
0091 029f 0043 jmp 0x0043 // dummy handler -> direct return
0093 029f 0043 jmp 0x0043 // dummy handler -> direct return
// Opcode_01() - DsetupTable()
0095 0080 0380 lri $AR0, #0x0380
0097 0e04 lris $AC0.M, #0x04
0098 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
009a 0081 0382 lri $AR1, #0x0382
009c 009f 0000 lri $AC1.M, #0x0000
009e 0080 0280 lri $AR0, #0x0280
00a0 02bf 0523 call 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
00a2 0081 0384 lri $AR1, #0x0384
00a4 009f 0300 lri $AC1.M, #0x0300
00a6 0080 0020 lri $AR0, #0x0020
00a8 02bf 0523 call 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
00aa 00de 0345 lr $AC0.M, @0x0345
00ac 00fe 0342 sr @0x0342, $AC0.M
00ae 02bf 0bec call 0x0bec
00b0 029f 0043 jmp 0x0043
// Opcode_0D() - DsetDolbyDelay
00b2 0080 0374 lri $AR0, #0x0374
00b4 0e01 lris $AC0.M, #0x01
00b5 00fe 0377 sr @0x0377, $AC0.M
00b7 00fe 037c sr @0x037c, $AC0.M
00b9 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
00bb 00de 0345 lr $AC0.M, @0x0345
00bd 00fe 0376 sr @0x0376, $AC0.M
00bf 029f 0043 jmp 0x0043
// Load some kind of command block with size C0
00c1 0081 034c lri $AR1, #0x034c
00c3 009f 0400 lri $AC1.M, #0x0400
00c5 0080 00c0 lri $AR0, #0x00c0
00c7 02bf 0523 call 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
00c9 02df ret
// Copy something out.
00ca 0081 034c lri $AR1, #0x034c
00cc 009f 0400 lri $AC1.M, #0x0400
00ce 0080 0080 lri $AR0, #0x0080
00d0 0081 034c lri $AR1, #0x034c
00d2 193e lrri $AC0.M, @$AR1
00d3 193c lrri $AC0.L, @$AR1
00d4 0098 0000 lri $AX0.L, #0x0000
00d6 7000 addaxl $ACC0, $AX0.L
00d7 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
00d9 02df ret
// CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
// Hm, is it really? The MOVR loop doesn't involve R03.
00da 191e lrri $AC0.M, @$AR0
00db 191a lrri $AX0.H, @$AR0
00dc 005f loop $AC1.M
00dd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M // ??? Does the .LS makes any sense? shouldnt it be just a load? um yeah it makes sense, that's a LOOP, not a BLOOP. wonder about the SRRIs though.
00de 1b7e srri @$AR3, $AC0.M
00df 1b7a srri @$AR3, $AX0.H
00e0 02df ret
// Decrypt???? (btw, wonder if LRRI disasm is broken).
00e1 191e lrri $AC0.M, @$AR0
00e2 191a lrri $AX0.H, @$AR0
00e3 007f 00e8 bloop $AC1.M, 0x00e8
00e5 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H
00e6 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M
00e7 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H
00e8 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M
00e9 0000 nop
00ea 02df ret
// Multiply loop of some kind...
// Reads from arrays pointed to by R00, R03
// Writes to array pointed to by R00, i think - extensions are unclear.
// TODO: Figure out what LSR $ACC1, #0x3f means .. just a clear?
// Loop count in AC1.M.
00eb 8a00 m2
00ec 157f lsr $ACC1, #-1
00ed 1c20 mrr $AR1, $AR0
00ee 1c03 mrr $AR0, $AR3
00ef 193a lrri $AX0.H, @$AR1
00f0 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1
00f1 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3
00f2 007f 00f7 bloop $AC1.M, 0x00f7
00f4 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1
00f5 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H
00f6 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1
00f7 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H
00f8 8b00 m0
00f9 02df ret
// Another multiply loop of some kind ....
// Loop count in AC1.M.
00fa 8a00 m2
00fb 191a lrri $AX0.H, @$AR0
00fc 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0
00fd 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0
00fe 005f loop $AC1.M
00ff 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M
0100 8b00 m0
0101 02df ret
// Clear some memory (called by op2)
0102 8100 clr $ACC0
0103 8900 clr $ACC1
0104 0e50 lris $AC0.M, #0x50
0105 0080 0d00 lri $AR0, #0x0d00
0107 005e loop $AC0.M
0108 1b1f srri @$AR0, $AC1.M
0109 0080 0d60 lri $AR0, #0x0d60
010b 005e loop $AC0.M
010c 1b1f srri @$AR0, $AC1.M
010d 02bf 0e3f call 0x0e3f
010f 8100 clr $ACC0
0110 8900 clr $ACC1
0111 0e50 lris $AC0.M, #0x50
0112 0080 0ca0 lri $AR0, #0x0ca0
0114 005e loop $AC0.M
0115 1b1f srri @$AR0, $AC1.M
0116 0080 0f40 lri $AR0, #0x0f40
0118 005e loop $AC0.M
0119 1b1f srri @$AR0, $AC1.M
011a 0080 0fa0 lri $AR0, #0x0fa0
011c 005e loop $AC0.M
011d 1b1f srri @$AR0, $AC1.M
011e 0080 0a00 lri $AR0, #0x0a00
0120 005e loop $AC0.M
0121 1b1f srri @$AR0, $AC1.M
0122 0080 09a0 lri $AR0, #0x09a0
0124 005e loop $AC0.M
0125 1b1f srri @$AR0, $AC1.M
0126 02df ret
// A function with multiplies that doesn't change the mode?
// Looks like a stereo mixer or something
0127 00c0 03a0 lr $AR0, @0x03a0
0129 191a lrri $AX0.H, @$AR0
012a 00df 03a1 lr $AC1.M, @0x03a1
012c 009b 00a0 lri $AX1.H, #0x00a0
012e 0081 0393 lri $AR1, #0x0393
0130 18bc lrrd $AC0.L, @$AR1
0131 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1
0132 bc00 mulxac $AX0.H, $AX1.H, $ACC0
0133 0080 0050 lri $AR0, #0x0050
0135 0508 addis $ACC1, #0x08
0136 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0138 00de 0390 lr $AC0.M, @0x0390
013a 02a0 0001 andf $AC0.M, #0x0001
013c 029d 0145 jlz 0x0145
013e 0080 0398 lri $AR0, #0x0398
0140 0e08 lris $AC0.M, #0x08
0141 00c1 03a1 lr $AR1, @0x03a1
0143 02bf 0b2e call 0x0b2e
0145 0f50 lris $AC1.M, #0x50
0146 00c0 03a1 lr $AR0, @0x03a1
0148 00da 0394 lr $AX0.H, @0x0394
//..
014a 8600 tstaxh $AX0.H
014b 0295 0152 jz 0x0152
014d 1c7a mrr $AR3, $AX0.H
014e 00d8 0395 lr $AX0.L, @0x0395
0150 02bf 00eb call 0x00eb // one of the multiply loops
0152 0f50 lris $AC1.M, #0x50
0153 00c0 03a1 lr $AR0, @0x03a1
0155 00da 0396 lr $AX0.H, @0x0396
//..
0157 8600 tstaxh $AX0.H
0158 0295 015f jz 0x015f
015a 1c7a mrr $AR3, $AX0.H
015b 00d8 0397 lr $AX0.L, @0x0397
015d 02bf 00eb call 0x00eb // one of the multiply loops
015f 00de 0390 lr $AC0.M, @0x0390
0161 02a0 0002 andf $AC0.M, #0x0002
0163 02dd retlz
//..
0164 0080 0398 lri $AR0, #0x0398
0166 0e08 lris $AC0.M, #0x08
0167 00c1 03a1 lr $AR1, @0x03a1
0169 02bf 0b2e call 0x0b2e
016b 02df ret
// Yet another mixer? this one does both 0x50 and 0x28 loops.
016c 8900 clr $ACC1
016d 009f 0dc0 lri $AC1.M, #0x0dc0
016f 00ff 03a1 sr @0x03a1, $AC1.M
0171 009f 03a8 lri $AC1.M, #0x03a8
0173 00ff 03a2 sr @0x03a2, $AC1.M
0175 009f 03a4 lri $AC1.M, #0x03a4
0177 00ff 03a0 sr @0x03a0, $AC1.M
0179 1104 019f bloopi #0x04, 0x019f // scary bloopi - end of instruction!
017b 00c0 03a2 lr $AR0, @0x03a2
017d 0083 0390 lri $AR3, #0x0390
017f 0f0e lris $AC1.M, #0x0e
0180 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
0182 00da 0390 lr $AX0.H, @0x0390
0184 8600 tstaxh $AX0.H
0185 0295 0191 jz 0x0191
0187 00df 03a1 lr $AC1.M, @0x03a1
0189 1c7f mrr $AR3, $AC1.M
018a 0550 addis $ACC1, #0x50
018b 1c1f mrr $AR0, $AC1.M
018c 0f06 lris $AC1.M, #0x06
018d 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
018f 02bf 0127 call 0x0127
//..
0191 00de 03a2 lr $AC0.M, @0x03a2
0193 0410 addis $ACC0, #0x10
0194 00fe 03a2 sr @0x03a2, $AC0.M
0196 00de 03a1 lr $AC0.M, @0x03a1
0198 0460 addis $ACC0, #0x60
0199 00fe 03a1 sr @0x03a1, $AC0.M
019b 00de 03a0 lr $AC0.M, @0x03a0
019d 7400 incm $AC0.M
019e 00fe 03a0 sr @0x03a0, $AC0.M
// end of BLOOPI 0179
01a0 0f50 lris $AC1.M, #0x50
01a1 0080 0c00 lri $AR0, #0x0c00
01a3 0083 0e80 lri $AR3, #0x0e80
01a5 0098 7fff lri $AX0.L, #0x7fff
01a7 02bf 00eb call 0x00eb // one of the multiply loops
01a9 0f50 lris $AC1.M, #0x50
01aa 0080 0c00 lri $AR0, #0x0c00
01ac 0083 0ee0 lri $AR3, #0x0ee0
01ae 0098 b820 lri $AX0.L, #0xb820
01b0 02bf 00eb call 0x00eb // one of the multiply loops
01b2 0f28 lris $AC1.M, #0x28 // half size!
01b3 0080 0c78 lri $AR0, #0x0c78
01b5 0083 0e80 lri $AR3, #0x0e80
01b7 0098 b820 lri $AX0.L, #0xb820
01b9 02bf 00eb call 0x00eb // one of the multiply loops
01bb 0f28 lris $AC1.M, #0x28 // half size!
01bc 0080 0c78 lri $AR0, #0x0c78
01be 0083 0ee0 lri $AR3, #0x0ee0
01c0 0098 7fff lri $AX0.L, #0x7fff
01c2 02bf 00eb call 0x00eb // one of the multiply loops
01c4 8100 clr $ACC0
01c5 8900 clr $ACC1
01c6 0e50 lris $AC0.M, #0x50 // bufsize. looks like buf clearing
01c7 0080 0c00 lri $AR0, #0x0c00
01c9 005e loop $AC0.M
01ca 1b1f srri @$AR0, $AC1.M
01cb 0080 0c50 lri $AR0, #0x0c50
01cd 005e loop $AC0.M
01ce 1b1f srri @$AR0, $AC1.M
01cf 02df ret
01d0 00c0 03a0 lr $AR0, @0x03a0
01d2 181a lrr $AX0.H, @$AR0
01d3 8100 clr $ACC0
01d4 181e lrr $AC0.M, @$AR0
01d5 00db 0391 lr $AX1.H, @0x0391
01d7 7400 incm $AC0.M
01d8 d100 cmpar $ACC1, $AX0.H
01d9 0270 ifns
01da 8100 clr $ACC0
01db 1b1e srri @$AR0, $AC0.M
01dc 00df 03a1 lr $AC1.M, @0x03a1
01de 009b 00a0 lri $AX1.H, #0x00a0
01e0 0081 0393 lri $AR1, #0x0393
01e2 18bc lrrd $AC0.L, @$AR1
01e3 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1
01e4 bc00 mulxac $AX0.H, $AX1.H, $ACC0
01e5 0080 0050 lri $AR0, #0x0050
01e7 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
01e9 02df ret
// Another zany mixer... this time on half-length buffers (0x28 instead of 0x50)?
01ea 8900 clr $ACC1
01eb 0f28 lris $AC1.M, #0x28
01ec 0080 0c50 lri $AR0, #0x0c50
01ee 0083 0ea8 lri $AR3, #0x0ea8
01f0 0098 b820 lri $AX0.L, #0xb820
01f2 02bf 00eb call 0x00eb // one of the multiply loops
01f4 8900 clr $ACC1
01f5 0f28 lris $AC1.M, #0x28
01f6 0080 0c50 lri $AR0, #0x0c50
01f8 0083 0f08 lri $AR3, #0x0f08
01fa 0098 7fff lri $AX0.L, #0x7fff
01fc 02bf 00eb call 0x00eb // one of the multiply loops
01fe 009f 0dc0 lri $AC1.M, #0x0dc0
0200 00ff 03a1 sr @0x03a1, $AC1.M
0202 009f 03a8 lri $AC1.M, #0x03a8
0204 00ff 03a2 sr @0x03a2, $AC1.M
0206 009f 03a4 lri $AC1.M, #0x03a4
0208 00ff 03a0 sr @0x03a0, $AC1.M
020a 1104 0228 bloopi #0x04, 0x0228
020c 00c0 03a2 lr $AR0, @0x03a2
020e 0083 0390 lri $AR3, #0x0390
0210 0f0e lris $AC1.M, #0x0e
0211 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
0213 00da 0390 lr $AX0.H, @0x0390
0215 8600 tstaxh $AX0.H
0216 0295 021a jz 0x021a
0218 02bf 01d0 call 0x01d0
021a 00de 03a2 lr $AC0.M, @0x03a2
021c 0410 addis $ACC0, #0x10
021d 00fe 03a2 sr @0x03a2, $AC0.M
021f 00de 03a1 lr $AC0.M, @0x03a1
0221 0460 addis $ACC0, #0x60
0222 00fe 03a1 sr @0x03a1, $AC0.M
0224 00de 03a0 lr $AC0.M, @0x03a0
0226 7400 incm $AC0.M
0227 00fe 03a0 sr @0x03a0, $AC0.M
0229 02df ret
022a 0081 0386 lri $AR1, #0x0386
022c 009f 03a8 lri $AC1.M, #0x03a8
022e 0080 0040 lri $AR0, #0x0040
0230 02bf 0523 call 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
0232 02df ret
// Load 32-bit value, add AX0 to it, store it back. Trash ACC0.
0233 191e lrri $AC0.M, @$AR0
0234 189c lrrd $AC0.L, @$AR0
0235 4800 addax $ACC0, $AX0.L
0236 1b1e srri @$AR0, $AC0.M
0237 1b1c srri @$AR0, $AC0.L
0238 02df ret
// This looks like some sort of crazy wait loop, waiting for one value to equal the other.
// Must be interrupt-driven?
0239 8100 clr $ACC0
023a 8900 clr $ACC1
023b 00df 0354 lr $AC1.M, @0x0354
023d 00de 034e lr $AC0.M, @0x034e
023f 8200 cmp
0240 0293 0239 jle 0x0239
0242 02df ret
// Opcode_02() - SyncFrame
0243 0080 0388 lri $AR0, #0x0388
0245 0081 0067 lri $AR1, #0x0067
0247 0e02 lris $AC0.M, #0x02
0248 173f callr $AR1 // Strange call - seems to always go to 0067 .. unless we can get here in another way than from above.
0249 00de 0344 lr $AC0.M, @0x0344
024b 00fe 0341 sr @0x0341, $AC0.M
024d 00de 0345 lr $AC0.M, @0x0345
024f 00fe 038e sr @0x038e, $AC0.M
0251 8100 clr $ACC0
0252 00fe 0355 sr @0x0355, $AC0.M
0254 02bf 022a call 0x022a
0256 02bf 05a4 call 0x05a4 // ClearAccelerator()
0258 00de 0341 lr $AC0.M, @0x0341
025a 007e 0418 bloop $AC0.M, 0x0418
025c 02bf 0102 call 0x0102 // Clear some memory areas...
025e 02bf 016c call 0x016c // mix in background music? or something? dunno
0260 02bf 095f call 0x095f // recalc some table?
0262 00de 0355 lr $AC0.M, @0x0355 // Increase counter at 0x0355
0264 7400 incm $AC0.M
0265 00fe 0355 sr @0x0355, $AC0.M
0267 8100 clr $ACC0
0268 00fe 0354 sr @0x0354, $AC0.M // Zero counter at 0x0354
026a 00de 0342 lr $AC0.M, @0x0342 // Read 0x0342, that number of times, process the loop.
026c 007e 03c0 bloop $AC0.M, 0x03c0 // Strange loop - goes outside this function...
026e 02bf 0239 call 0x0239 // This one waits for interrupts.
0270 8100 clr $ACC0
0271 8900 clr $ACC1
0272 00de 0354 lr $AC0.M, @0x0354 // 0x354 is obviously interesting.
0274 147c lsr $ACC0, #-4
0275 0200 04fc addi $AC0.M, #0x04fc
0277 1c1e mrr $AR0, $AC0.M
0278 181f lrr $AC1.M, @$AR0 // Table lookup from DRAM @ 0x04fc. Something must have initialized it.
0279 00de 0354 lr $AC0.M, @0x0354
027b 0240 000f andi $AC0.M, #0x000f
027d 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M
027e 03c0 8000 andcf $AC1.M, #0x8000
0280 029c 03bc jlnz 0x03bc
0282 00d8 0354 lr $AX0.L, @0x0354
0284 009a 0180 lri $AX0.H, #0x0180
0286 8100 clr $ACC0
0287 00de 0380 lr $AC0.M, @0x0380
0289 00dc 0381 lr $AC0.L, @0x0381
028b 9000 mul $AX0.L, $AX0.H
028c 9400 mulac $AX0.L, $AX0.H, $ACC0
028d 00fe 034c sr @0x034c, $AC0.M
028f 00fc 034d sr @0x034d, $AC0.L
0291 02bf 00c1 call 0x00c1
0293 00da 0400 lr $AX0.H, @0x0400
0295 8600 tstaxh $AX0.H
0296 0295 03bc jz 0x03bc
0298 00da 0401 lr $AX0.H, @0x0401
029a 8600 tstaxh $AX0.H
029b 0294 03bc jnz 0x03bc
029d 00da 0433 lr $AX0.H, @0x0433
029f 00fa 03f8 sr @0x03f8, $AX0.H
02a1 00da 0406 lr $AX0.H, @0x0406
02a3 8600 tstaxh $AX0.H
02a4 0294 0dff jnz 0x0dff
02a6 8100 clr $ACC0
02a7 00de 0480 lr $AC0.M, @0x0480
02a9 0609 cmpis $ACC0, #0x09
02aa 0295 02bd jz 0x02bd
02ac 0605 cmpis $ACC0, #0x05
02ad 0295 02bd jz 0x02bd
02af 0608 cmpis $ACC0, #0x08
02b0 0295 098f jz 0x098f
02b2 0610 cmpis $ACC0, #0x10
02b3 0295 0a14 jz 0x0a14
02b5 0620 cmpis $ACC0, #0x20
02b6 0295 0a9a jz 0x0a9a
02b8 0621 cmpis $ACC0, #0x21
02b9 0295 0aa2 jz 0x0aa2
02bb 029f 087c jmp 0x087c
// Choose from one of several 0x50 size buffers and do something?
02bd 00d8 0402 lr $AX0.L, @0x0402
02bf 8100 clr $ACC0
02c0 8900 clr $ACC1
02c1 00dc 0430 lr $AC0.L, @0x0430
02c3 8d00 set15
02c4 0950 lris $AX1.L, #0x50
02c5 a000 mulx $AX0.L, $AX1.L
02c6 a400 mulxac $AX0.L, $AX1.L, $ACC0
02c7 1404 lsl $ACC0, #4
02c8 8c00 clr15
02c9 1ffe mrr $AC1.M, $AC0.M
02ca 0083 0580 lri $AR3, #0x0580
02cc 02bf 073d call 0x073d
02ce 029f 02d0 jmp 0x02d0
02d0 0080 0580 lri $AR0, #0x0580
02d2 0081 0520 lri $AR1, #0x0520
02d4 0099 0000 lri $AX1.L, #0x0000
02d6 02bf 0d7f call 0x0d7f
02d8 00da 04a8 lr $AX0.H, @0x04a8
02da 8600 tstaxh $AX0.H
02db 0295 02e1 jz 0x02e1
02dd 0080 0520 lri $AR0, #0x0520
02df 02bf 0c84 call 0x0c84
02e1 009e 0520 lri $AC0.M, #0x0520
02e3 00fe 038f sr @0x038f, $AC0.M
02e5 8900 clr $ACC1
02e6 00df 0484 lr $AC1.M, @0x0484
02e8 0340 001f andi $AC1.M, #0x001f
02ea b900 tst $ACC1
02eb 0295 0311 jz 0x0311
02ed 00de 038f lr $AC0.M, @0x038f
02ef 5c00 sub $ACC0, $AC1.L
02f0 00fe 038f sr @0x038f, $AC0.M
02f2 1c7e mrr $AR3, $AC0.M
02f3 0080 0440 lri $AR0, #0x0440
02f5 05fe addis $ACC1, #0xfe
02f6 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
02f8 0080 0490 lri $AR0, #0x0490
02fa 00c1 038f lr $AR1, @0x038f
02fc 8900 clr $ACC1
02fd 00df 0484 lr $AC1.M, @0x0484
02ff 0340 001f andi $AC1.M, #0x001f
0301 02bf 0b4d call 0x0b4d
0303 00de 038f lr $AC0.M, @0x038f
0305 0450 addis $ACC0, #0x50
0306 1c1e mrr $AR0, $AC0.M
0307 0083 0440 lri $AR3, #0x0440
0309 8900 clr $ACC1
030a 00df 0484 lr $AC1.M, @0x0484
030c 0340 001f andi $AC1.M, #0x001f
030e 05fe addis $ACC1, #0xfe
030f 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
0311 00de 0484 lr $AC0.M, @0x0484
0313 0240 0020 andi $AC0.M, #0x0020
0315 0295 0333 jz 0x0333
0317 0080 04a4 lri $AR0, #0x04a4
0319 00c1 038f lr $AR1, @0x038f
031b 0082 0454 lri $AR2, #0x0454
031d 0083 04a7 lri $AR3, #0x04a7
031f 18fa lrrd $AX0.H, @$AR3
0320 8600 tstaxh $AX0.H
0321 0294 0331 jnz 0x0331
0323 18fa lrrd $AX0.H, @$AR3
0324 8600 tstaxh $AX0.H
0325 0294 0331 jnz 0x0331
0327 18fa lrrd $AX0.H, @$AR3
0328 8600 tstaxh $AX0.H
0329 0294 0331 jnz 0x0331
032b 8100 clr $ACC0
032c 18fe lrrd $AC0.M, @$AR3
032d 0280 7fff cmpi $AC0.M, #0x7fff
032f 0295 0333 jz 0x0333
0331 02bf 0b68 call 0x0b68
0333 8100 clr $ACC0
0334 00de 042c lr $AC0.M, @0x042c
0336 b100 tst $ACC0
0337 0295 033d jz 0x033d
0339 02bf 0cd3 call 0x0cd3
033b 029f 03b2 jmp 0x03b2
033d 8100 clr $ACC0
033e 1c9e mrr $IX0, $AC0.M
033f 1cde mrr $IX2, $AC0.M
0340 7400 incm $AC0.M
0341 1cfe mrr $IX3, $AC0.M
0342 8100 clr $ACC0
0343 00de 0407 lr $AC0.M, @0x0407
0345 b100 tst $ACC0
0346 0295 0355 jz 0x0355
0348 00c3 038f lr $AR3, @0x038f
034a 0007 dar $AR3
034b 0080 0477 lri $AR0, #0x0477
034d 0084 ffff lri $IX0, #0xffff
034f 0087 ffff lri $IX3, #0xffff
0351 199a lrrn $AX0.H, @$AR0
0352 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0
0353 005e loop $AC0.M
0354 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M
0355 00da 0485 lr $AX0.H, @0x0485
0357 8600 tstaxh $AX0.H
0358 0295 036b jz 0x036b
035a 8900 clr $ACC1
035b 0086 0005 lri $IX2, #0x0005
035d 0082 040a lri $AR2, #0x040a
035f 1106 0363 bloopi #0x06, 0x0363
0361 18de lrrd $AC0.M, @$AR2
0362 147f lsr $ACC0, #-1
0363 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M
0364 b900 tst $ACC1
0365 0294 036b jnz 0x036b
0367 009a 0001 lri $AX0.H, #0x0001
0369 00fa 0401 sr @0x0401, $AX0.H
036b 8f00 set40
036c 0086 0002 lri $IX2, #0x0002
036e 0082 0408 lri $AR2, #0x0408
0370 1106 039b bloopi #0x06, 0x039b
0372 8100 clr $ACC0
0373 195e lrri $AC0.M, @$AR2
0374 1200 sbclr #0x00
0375 b100 tst $ACC0
0376 0275 ifz
0377 1300 sbset #0x00
0378 1c7e mrr $AR3, $AC0.M
0379 195e lrri $AC0.M, @$AR2
037a 195f lrri $AC1.M, @$AR2
037b 5c00 sub $ACC0, $AC1.L
037c 14fb asr $ACC0, #-5
037d 1f5e mrr $AX0.H, $AC0.M
037e 1f1c mrr $AX0.L, $AC0.L
037f 185e lrr $AC0.M, @$AR2
0380 0240 00ff andi $AC0.M, #0x00ff
0382 1f7e mrr $AX1.H, $AC0.M
0383 185e lrr $AC0.M, @$AR2
0384 1478 lsr $ACC0, #-8
0385 009c 0000 lri $AC0.L, #0x0000
0387 d100 cmpar $ACC1, $AX0.H
0388 0295 0390 jz 0x0390
038a 185e lrr $AC0.M, @$AR2
038b 0272 ifg
038c 7400 incm $AC0.M
038d 0271 ifs
038e 7800 decm $AC0.M
038f 1a5e srr @$AR2, $AC0.M
0390 0006 dar $AR2
0391 00de 038f lr $AC0.M, @0x038f
0393 5600 subr $ACC0, $AX1.H
0394 029d 0399 jlz 0x0399
0396 1c1e mrr $AR0, $AC0.M
0397 02bf 0ca9 call 0x0ca9
0399 0000 nop
039a 1b5f srri @$AR2, $AC1.M
039b 000a iar $AR2
039c 8e00 set16
039d 8100 clr $ACC0
039e 00de 0407 lr $AC0.M, @0x0407
03a0 b100 tst $ACC0
03a1 0295 03b2 jz 0x03b2
03a3 00c3 038f lr $AR3, @0x038f
03a5 0087 004f lri $IX3, #0x004f // does this have something to do with the common 0x50 buffer size?
03a7 001f addarn $AR3, $IX3
03a8 0080 0477 lri $AR0, #0x0477
03aa 0084 ffff lri $IX0, #0xffff
03ac 0087 ffff lri $IX3, #0xffff
03ae 19fa lrrn $AX0.H, @$AR3
03af 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3
03b0 005e loop $AC0.M
03b1 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H
03b2 00da 0406 lr $AX0.H, @0x0406
03b4 8600 tstaxh $AX0.H
03b5 0294 03ba jnz 0x03ba
03b7 8100 clr $ACC0
03b8 00fe 0404 sr @0x0404, $AC0.M
03ba 02bf 00ca call 0x00ca
03bc 00de 0354 lr $AC0.M, @0x0354
03be 7400 incm $AC0.M
03bf 00fe 0354 sr @0x0354, $AC0.M
03c1 0e00 lris $AC0.M, #0x00
03c2 00fe 034e sr @0x034e, $AC0.M
03c4 0e04 lris $AC0.M, #0x04
03c5 02bf 066a call 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M)
03c7 00de 0355 lr $AC0.M, @0x0355
03c9 0260 ff00 ori $AC0.M, #0xff00
03cb 02bf 0674 call 0x0674 // SendMessageViaDSPMailBox_F355(AC0.M)
03cd 02bf 0c0a call 0x0c0a
03cf 02bf 0c1c call 0x0c1c
03d1 02bf 0c71 call 0x0c71
03d3 00de 0341 lr $AC0.M, @0x0341
03d5 7800 decm $AC0.M
03d6 00fe 0341 sr @0x0341, $AC0.M
03d8 0080 09a0 lri $AR0, #0x09a0
03da 0083 0d00 lri $AR3, #0x0d00
03dc 0f50 lris $AC1.M, #0x50
03dd 0098 5a82 lri $AX0.L, #0x5a82
03df 02bf 00eb call 0x00eb // one of the multiply loops
03e1 0080 09a0 lri $AR0, #0x09a0
03e3 0083 0d60 lri $AR3, #0x0d60
03e5 0f50 lris $AC1.M, #0x50
03e6 02bf 00eb call 0x00eb // one of the multiply loops
03e8 0083 0d00 lri $AR3, #0x0d00
03ea 02bf 0cc1 call 0x0cc1
03ec 0081 0388 lri $AR1, #0x0388
03ee 009f 0d00 lri $AC1.M, #0x0d00
03f0 0080 0050 lri $AR0, #0x0050
03f2 02bf 0530 call 0x0530 // DMEMtoRAM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
03f4 0080 0fa0 lri $AR0, #0x0fa0
03f6 0083 0d60 lri $AR3, #0x0d60
03f8 0f50 lris $AC1.M, #0x50
03f9 0098 8000 lri $AX0.L, #0x8000
03fb 02bf 00eb call 0x00eb // one of the multiply loops
03fd 0083 0d60 lri $AR3, #0x0d60
03ff 02bf 0cc1 call 0x0cc1
0401 0081 038a lri $AR1, #0x038a
0403 009f 0d60 lri $AC1.M, #0x0d60
0405 0080 0050 lri $AR0, #0x0050
0407 02bf 0530 call 0x0530 // DMEMtoRAM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
0409 009a 0000 lri $AX0.H, #0x0000
040b 0098 00a0 lri $AX0.L, #0x00a0
040d 0080 0388 lri $AR0, #0x0388
040f 02bf 0233 call 0x0233
0411 0080 038a lri $AR0, #0x038a
0413 02bf 0233 call 0x0233
0415 02bf 01ea call 0x01ea
0417 0000 nop
0418 0000 nop
0419 0080 002d lri $AR0, #0x002d
041b 029f 0603 jmp 0x0603
// Opcode_07()
041d 0080 0346 lri $AR0, #0x0346
041f 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0421 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0423 0081 0346 lri $AR1, #0x0346
0425 193e lrri $AC0.M, @$AR1
0426 193c lrri $AC0.L, @$AR1
0427 009f 0400 lri $AC1.M, #0x0400
0429 00c0 0345 lr $AR0, @0x0345
042b 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
042d 0081 0348 lri $AR1, #0x0348
042f 193e lrri $AC0.M, @$AR1
0430 193c lrri $AC0.L, @$AR1
0431 009f 0800 lri $AC1.M, #0x0800
0433 00c0 0345 lr $AR0, @0x0345
0435 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0437 0081 0346 lri $AR1, #0x0346
0439 193e lrri $AC0.M, @$AR1
043a 193c lrri $AC0.L, @$AR1
043b 009f 0800 lri $AC1.M, #0x0800
043d 00c0 0345 lr $AR0, @0x0345
043f 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0441 0081 0348 lri $AR1, #0x0348
0443 193e lrri $AC0.M, @$AR1
0444 193c lrri $AC0.L, @$AR1
0445 009f 0400 lri $AC1.M, #0x0400
0447 00c0 0345 lr $AR0, @0x0345
0449 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
044b 029f 0043 jmp 0x0043
// Opcode_09()
044d 0080 0346 lri $AR0, #0x0346
044f 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0451 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0453 0081 0346 lri $AR1, #0x0346
0455 193e lrri $AC0.M, @$AR1
0456 193c lrri $AC0.L, @$AR1
0457 009f 0400 lri $AC1.M, #0x0400
0459 00c0 0345 lr $AR0, @0x0345
045b 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
045d 0081 0348 lri $AR1, #0x0348
045f 193e lrri $AC0.M, @$AR1
0460 193c lrri $AC0.L, @$AR1
0461 009f 0400 lri $AC1.M, #0x0400
0463 00c0 0345 lr $AR0, @0x0345
0465 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0467 029f 0043 jmp 0x0043
// Opcode_06()
0469 0080 0346 lri $AR0, #0x0346
046b 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
046d 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
046f 0081 0346 lri $AR1, #0x0346
0471 193e lrri $AC0.M, @$AR1
0472 193c lrri $AC0.L, @$AR1
0473 009f 0400 lri $AC1.M, #0x0400
0475 00c0 0345 lr $AR0, @0x0345
0477 02bf 0555 call 0x0555
0479 0081 0348 lri $AR1, #0x0348
047b 193e lrri $AC0.M, @$AR1
047c 193c lrri $AC0.L, @$AR1
047d 009f 0400 lri $AC1.M, #0x0400
047f 00c0 0345 lr $AR0, @0x0345
0481 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0483 029f 0043 jmp 0x0043
// Opcode_08() - Mixer
0485 0080 0346 lri $AR0, #0x0346
0487 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0489 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
048b 0081 0346 lri $AR1, #0x0346
048d 193e lrri $AC0.M, @$AR1
048e 193c lrri $AC0.L, @$AR1
048f 009f 0400 lri $AC1.M, #0x0400
0491 00c0 0344 lr $AR0, @0x0344
0493 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0495 0081 0348 lri $AR1, #0x0348
0497 193e lrri $AC0.M, @$AR1
0498 193c lrri $AC0.L, @$AR1
0499 009f 0800 lri $AC1.M, #0x0800
049b 00c0 0344 lr $AR0, @0x0344
049d 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
049f 0080 0400 lri $AR0, #0x0400
04a1 0083 0800 lri $AR3, #0x0800
04a3 0084 0000 lri $IX0, #0x0000
04a5 00da 0345 lr $AX0.H, @0x0345
04a7 00df 0344 lr $AC1.M, @0x0344
04a9 8f00 set40
04aa 197b lrri $AX1.H, @$AR3
04ab b800 mulx $AX0.H, $AX1.H
04ac 197b lrri $AX1.H, @$AR3
04ad 007f 04b2 bloop $AC1.M, 0x04b2
04af 199e lrrn $AC0.M, @$AR0
04b0 bc00 mulxac $AX0.H, $AX1.H, $ACC0
04b1 80b2 nx'sl : $AC0.M, $AX1.H
04b2 0000 nop
04b3 8e00 set16
04b4 0081 0346 lri $AR1, #0x0346
04b6 193e lrri $AC0.M, @$AR1
04b7 193c lrri $AC0.L, @$AR1
04b8 009f 0400 lri $AC1.M, #0x0400
04ba 00c0 0344 lr $AR0, @0x0344
04bc 02bf 0532 call 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
04be 029f 0043 jmp 0x0043
// dunno... is called by InitCode()
04c0 0092 00ff lri $CR, #0x00ff
04c2 8100 clr $ACC0
04c3 0080 0b00 lri $AR0, #0x0b00
04c5 10ff loopi #0xff
04c6 1b1e srri @$AR0, $AC0.M
04c7 1b1e srri @$AR0, $AC0.M
04c8 8100 clr $ACC0
04c9 009f 0b00 lri $AC1.M, #0x0b00
04cb 0080 0100 lri $AR0, #0x0100
04cd 02bf 0573 call 0x0573
04cf 02df ret
//
04d0 02bf 04e1 call 0x04e1
04d2 00df 04fb lr $AC1.M, @0x04fb
04d4 009e 0b00 lri $AC0.M, #0x0b00
04d6 4c00 add $ACC0, $AC1.L
04d7 1c1e mrr $AR0, $AC0.M
04d8 181e lrr $AC0.M, @$AR0
04d9 7400 incm $AC0.M
04da 1a1e srr @$AR0, $AC0.M
04db 02bf 04ea call 0x04ea
04dd 8100 clr $ACC0
04de 00fe 04fb sr @0x04fb, $AC0.M
04e0 02df ret
// This is called by the thing above.
04e1 0092 00ff lri $CR, #0x00ff
04e3 8100 clr $ACC0
04e4 009f 0b00 lri $AC1.M, #0x0b00
04e6 0080 0040 lri $AR0, #0x0040
04e8 029f 0555 jmp 0x0555 ///oookay..
//
04ea 8100 clr $ACC0
04eb 009f 0b00 lri $AC1.M, #0x0b00
04ed 0080 0050 lri $AR0, #0x0050
04ef 029f 0573 jmp 0x0573
//
04f1 02bf 04e1 call 0x04e1
04f3 8900 clr $ACC1
04f4 0080 04fc lri $AR0, #0x04fc
04f6 8100 clr $ACC0
04f7 1104 0505 bloopi #0x04, 0x0505
04f9 0000 nop
04fa 191e lrri $AC0.M, @$AR0
04fb 0000 nop
04fc 1110 0503 bloopi #0x10, 0x0503
04fe 02c0 0001 andcf $AC0.M, #0x0001
0500 027d iflz
0501 7500 incm $AC1.M
0502 147f lsr $ACC0, #-1 // Another bizarre super shift.
0503 0000 nop // Do these shifts have latency?
0504 0000 nop
0505 0000 nop
0506 00de 04fc lr $AC0.M, @0x04fc
0508 00fe 0b48 sr @0x0b48, $AC0.M
050a 00de 04fd lr $AC0.M, @0x04fd
050c 00fe 0b49 sr @0x0b49, $AC0.M
050e 00de 04fe lr $AC0.M, @0x04fe
0510 00fe 0b4a sr @0x0b4a, $AC0.M
0512 00de 04ff lr $AC0.M, @0x04ff
0514 00fe 0b4b sr @0x0b4b, $AC0.M
0516 009e 0b00 lri $AC0.M, #0x0b00
0518 4c00 add $ACC0, $AC1.L
0519 1c1e mrr $AR0, $AC0.M
051a 181e lrr $AC0.M, @$AR0
051b 7400 incm $AC0.M
051c 1a1e srr @$AR0, $AC0.M
051d 02bf 04ea call 0x04ea
051f 02df ret
0520 02bf 04ea call 0x04ea
0522 02df ret
// RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
0523 193e lrri $AC0.M, @$AR1
0524 193c lrri $AC0.L, @$AR1
// RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0525 2fcd srs @DSPA, $AC1.M
0526 0f00 lris $AC1.M, #0x00
0527 2fc9 srs @DSCR, $AC1.M
0528 2ece srs @DSMAH, $AC0.M
0529 2ccf srs @DSMAL, $AC0.L
052a 1fe0 mrr $AC1.M, $AR0
052b 1501 lsl $ACC1, #1
052c 2fcb srs @DSBL, $AC1.M
052d 02bf 0536 call 0x0536 // WaitForDMATransfer()
052f 02df ret
// DMEMtoRAM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
0530 193e lrri $AC0.M, @$AR1
0531 193c lrri $AC0.L, @$AR1
// DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0532 2fcd srs @DSPA, $AC1.M
0533 0f01 lris $AC1.M, #0x01
0534 029f 0527 jmp 0x0527
// WaitForDMATransfer()
0536 26c9 lrs $AC0.M, @DSCR
0537 02a0 0004 andf $AC0.M, #0x0004
0539 029c 0536 jlnz 0x0536
053b 02df ret
// Setup DMA conroller and do a transfer. Should figure out exactly how.
053c 193e lrri $AC0.M, @$AR1
053d 193c lrri $AC0.L, @$AR1
053e 00ff ffcd sr @DSPA, $AC1.M
0540 0f00 lris $AC1.M, #0x00
0541 00ff ffc9 sr @DSCR, $AC1.M
0543 00fe ffce sr @DSMAH, $AC0.M
0545 00fc ffcf sr @DSMAL, $AC0.L
0547 1fe0 mrr $AC1.M, $AR0
0548 1501 lsl $ACC1, #1
0549 00ff ffcb sr @DSBL, $AC1.M
054b 02df ret
// An identical copy of WaitForDMATransfer from 0536
054c 00de ffc9 lr $AC0.M, @DSCR
054e 02a0 0004 andf $AC0.M, #0x0004
0550 029c 054c jlnz 0x054c
0552 02df ret
0553 193e lrri $AC0.M, @$AR1
0554 193c lrri $AC0.L, @$AR1
0555 0240 7fff andi $AC0.M, #0x7fff
0557 02bf 0561 call 0x0561 // SetupAccelerator()
0559 007a 055f bloop $AX0.H, 0x055f
055b 26d3 lrs $AC0.M, @Unk Zelda
055c 1b3e srri @$AR1, $AC0.M
055d 0000 nop
055e 0000 nop
055f 0000 nop
0560 02df ret
// SetupAccelerator()
0561 1c3f mrr $AR1, $AC1.M
0562 0f0a lris $AC1.M, #0x0a
0563 2fd1 srs @SampleFormat, $AC1.M
0564 1f5e mrr $AX0.H, $AC0.M
0565 1f1c mrr $AX0.L, $AC0.L
0566 009e ffff lri $AC0.M, #0xffff
0568 2ed6 srs @ACEAH, $AC0.M
0569 2ed7 srs @ACEAL, $AC0.M
056a 1fda mrr $AC0.M, $AX0.H
056b 1f98 mrr $AC0.L, $AX0.L
056c 147f lsr $ACC0, #-1
056d 2ed8 srs @ACCAH, $AC0.M
056e 2cd9 srs @ACCAL, $AC0.L
056f 1f40 mrr $AX0.H, $AR0
0570 02df ret
// AC1.M is input which also falls into 0x0561.
0571 193e lrri $AC0.M, @$AR1
0572 193c lrri $AC0.L, @$AR1
0573 0090 0001 lri $AC0.H, #0x0001
0575 02bf 0561 call 0x0561 // SetupAccelerator()
0577 007a 057e bloop $AX0.H, 0x057e
0579 193e lrri $AC0.M, @$AR1
057a 2ed3 srs @Unk Zelda, $AC0.M
057b 0000 nop
057c 0000 nop
057d 0000 nop
057e 0000 nop
057f 02df ret
// Opcode_04()
0580 0080 0346 lri $AR0, #0x0346
0582 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0584 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0586 0081 0346 lri $AR1, #0x0346
0588 00df 0349 lr $AC1.M, @0x0349
058a 0340 ffff andi $AC1.M, #0xffff
058c 00c0 0345 lr $AR0, @0x0345
058e 02bf 0523 call 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
0590 029f 0043 jmp 0x0043
// Opcode_05()
0592 0080 0346 lri $AR0, #0x0346
0594 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0596 02bf 0067 call 0x0067 // ReadWholeMessage($R00)
0598 0081 0346 lri $AR1, #0x0346
059a 00df 0349 lr $AC1.M, @0x0349
059c 0340 ffff andi $AC1.M, #0xffff
059e 00c0 0345 lr $AR0, @0x0345
05a0 02bf 0530 call 0x0530 // DMEMtoRAM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len)
05a2 029f 0043 jmp 0x0043
// ClearAccelerator()
05a4 0092 00ff lri $CR, #0x00ff
05a6 009e ffff lri $AC0.M, #0xffff
05a8 2ed4 srs @ACSAH, $AC0.M
05a9 2ed5 srs @ACSAL, $AC0.M
05aa 2ed6 srs @ACEAH, $AC0.M
05ab 2ed7 srs @ACEAL, $AC0.M
05ac 02df ret
// Set up accelerator to a sample format and point to a read location
05ad 00ff ffd1 sr @SampleFormat, $AC1.M
05af 0340 0003 andi $AC1.M, #0x0003
05b1 7900 decm $AC1.M
05b2 02ca cw 0x02ca ; *** UNKNOWN OPCODE ***
05b3 00fe ffd8 sr @ACCAH, $AC0.M
05b5 00fc ffd9 sr @ACCAL, $AC0.L
05b7 02df ret
// Is this statement really true? :
// Exception Handler (lvl 7) is called on new mails
05b8 1205 sbclr #0x05
05b9 8e00 set16
05ba 00f0 03fd sr @0x03fd, $AC0.H
05bc 00fc 03ff sr @0x03ff, $AC0.L
05be f400 lsr16 $ACC0
05bf 00fc 03fe sr @0x03fe, $AC0.L
05c1 00fa 03fa sr @0x03fa, $AX0.H
05c3 8100 clr $ACC0
05c4 00de fffe lr $AC0.M, @CMBH // Read mailbox
05c6 02c0 8000 andcf $AC0.M, #0x8000
05c8 029c 06b9 jlnz 0x06b9
05ca 00da ffff lr $AX0.H, @CMBL
05cc 8600 tstaxh $AX0.H
05cd 0294 0692 jnz 0x0692
05cf 00de fffe lr $AC0.M, @CMBH
05d1 02c0 8000 andcf $AC0.M, #0x8000
05d3 029c 05cf jlnz 0x05cf
05d5 0240 000f andi $AC0.M, #0x000f
05d7 1f5e mrr $AX0.H, $AC0.M
05d8 7400 incm $AC0.M
05d9 0c00 lris $AC0.L, #0x00
05da 1404 lsl $ACC0, #4
05db 00fe 034e sr @0x034e, $AC0.M
05dd 1fda mrr $AC0.M, $AX0.H
05de 1f40 mrr $AX0.H, $AR0
05df 0200 04fc addi $AC0.M, #0x04fc
05e1 1c1e mrr $AR0, $AC0.M
05e2 00de ffff lr $AC0.M, @CMBL
05e4 1a1e srr @$AR0, $AC0.M
05e5 1c1a mrr $AR0, $AX0.H
05e6 00de 03fe lr $AC0.M, @0x03fe
05e8 00dc 03ff lr $AC0.L, @0x03ff
05ea 00d0 03fd lr $AC0.H, @0x03fd
05ec 00da 03fa lr $AX0.H, @0x03fa
05ee 1305 sbset #0x05
05ef 02ff rti
// StopUCode()
05f0 009a 0002 lri $AX0.H, #0x0002
05f2 00fa 03a3 sr @0x03a3, $AX0.H
05f4 00e0 03f9 sr @0x03f9, $AR0
05f6 02bf 067c call 0x067c // WaitForEmptyDSPMailBox_ovAC0.M()
05f8 16fc dcd1 si @DMBH, #0xdcd1
05fa 16fd 0002 si @DMBL, #0x0002
05fc 16fb 0001 si @DIRQ, #0x0001
05fe 0021 halt
// Looks like data more than it looks like code... yep, see 613.
05ff 0617 cmpis $ACC0, #0x17
0600 0618 cmpis $ACC0, #0x18
0601 0658 cmpis $ACC0, #0x58
0602 065b cmpis $ACC0, #0x5b
// Store a jump destination to RAM. Then get some data from the CPU. This data controls whether
// we will halt, reset, boot task or jump to function.
// This could very well be debug code.
0603 00e0 03f9 sr @0x03f9, $AR0
0605 009e 0005 lri $AC0.M, #0x0005
0607 02bf 066a call 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M)
0609 8e00 set16
060a 8100 clr $ACC0
060b 8900 clr $ACC1
060c 02bf 065e call 0x065e
060e 27ff lrs $AC1.M, @CMBL
060f 009e 05ff lri $AC0.M, #0x05ff
0611 4c00 add $ACC0, $AC1.L
0612 1c7e mrr $AR3, $AC0.M
0613 0313 ilrr $AC1.M, @$AR3 // Jump table lookup.
0614 1c7f mrr $AR3, $AC1.M
0615 176f jmpr $AR3
0616 0021 halt
// Jump table alt 0. A bit too simple :p
0617 0021 halt
// Jump table alt 1. Seems to simply receive a big list of register initialization
// values from the CPU.
// Ends by jumping into the rom - boot task?
// ATTENTION - sets up R06 and R07.
0618 009a 0002 lri $AX0.H, #0x0002
061a 00fa 03a3 sr @0x03a3, $AX0.H
061c 8100 clr $ACC0
061d 8900 clr $ACC1
061e 02bf 065e call 0x065e // wait for cpu mailbox
0620 24ff lrs $AC0.L, @CMBL
0621 02bf 0664 call 0x0664 // wait for cpu mailbox
0623 25ff lrs $AC1.L, @CMBL
0624 02bf 0664 call 0x0664 // wait for cpu mailbox
0626 27ff lrs $AC1.M, @CMBL
0627 2ece srs @DSMAH, $AC0.M
0628 2ccf srs @DSMAL, $AC0.L
0629 16c9 0001 si @DSCR, #0x0001
062b 2fcd srs @DSPA, $AC1.M
062c 2dcb srs @DSBL, $AC1.L
062d 8100 clr $ACC0
062e 8900 clr $ACC1
062f 02bf 065e call 0x065e // wait for cpu mailbox
0631 24ff lrs $AC0.L, @CMBL
0632 1c9e mrr $IX0, $AC0.M
0633 1cbc mrr $IX1, $AC0.L
0634 02bf 0664 call 0x0664 // wait for cpu mailbox
0636 25ff lrs $AC1.L, @CMBL
0637 02bf 0664 call 0x0664 // wait for cpu mailbox
0639 27ff lrs $AC1.M, @CMBL
063a 1cdf mrr $IX2, $AC1.M
063b 1cfd mrr $IX3, $AC1.L
063c 8100 clr $ACC0
063d 02bf 065e call 0x065e // wait for cpu mailbox
063f 26ff lrs $AC0.M, @CMBL
0640 1c1e mrr $AR0, $AC0.M
0641 8900 clr $ACC1
0642 02bf 0664 call 0x0664 // wait for cpu mailbox
0644 20ff lrs $AX0.L, @CMBL
0645 1f5f mrr $AX0.H, $AC1.M
0646 02bf 065e call 0x065e // wait for cpu mailbox
0648 21ff lrs $AX1.L, @CMBL
0649 02bf 065e call 0x065e // wait for cpu mailbox
064b 23ff lrs $AX1.H, @CMBL
064c 26c9 lrs $AC0.M, @DSCR
064d 02a0 0004 andf $AC0.M, #0x0004
064f 029c 064c jlnz 0x064c
// Clear some bits in SR.
0651 1206 sbclr #0x06
0652 1203 sbclr #0x03
0653 1204 sbclr #0x04
0654 1205 sbclr #0x05
// Jump into the ROM. (!) Boot task?
0655 029f 80b5 jmp 0x80b5
0657 0021 halt
// Jump table alt 2. (reset DSP?)
0658 029f 8000 jmp 0x8000
065a 0021 halt
// Jump table alt 3. Loads another jump destination and jumps there.
065b 00c0 03f9 lr $AR0, @0x03f9
065d 170f jmpr $AR0
// Wait for CPU mailbox, trash ACC0.
065e 26fe lrs $AC0.M, @CMBH
065f 02c0 8000 andcf $AC0.M, #0x8000
0661 029c 065e jlnz 0x065e
0663 02df ret
// Wait for CPU mailbox, trash ACC1.
0664 27fe lrs $AC1.M, @CMBH
0665 03c0 8000 andcf $AC1.M, #0x8000
0667 029c 0664 jlnz 0x0664
0669 02df ret
// SendMessageViaDSPMailBox_DCD1(AC0.M)
066a 02bf 0682 call 0x0682 // WaitForEmptyDSPMailBox_ovAC1.M()
066c 16fc dcd1 si @DMBH, #0xdcd1
066e 2efd srs @DMBL, $AC0.M
066f 16fb 0001 si @DIRQ, #0x0001
0671 02bf 0682 call 0x0682 // WaitForEmptyDSPMailBox_ovAC1.M()
0673 02df ret
// SendMessageViaDSPMailBox_F355(AC0.M)
0674 02bf 0682 call 0x0682 // WaitForEmptyDSPMailBox_ovAC1.M()
0676 16fc f355 si @DMBH, #0xf355
0678 2efd srs @DMBL, $AC0.M
0679 02bf 0682 call 0x0682 // WaitForEmptyDSPMailBox_ovAC1.M()
067b 02df ret
// WaitForEmptyDSPMailBox_ovAC0.M()
067c 26fc lrs $AC0.M, @DMBH
067d 02c0 8000 andcf $AC0.M, #0x8000
067f 029d 067c jlz 0x067c
0681 02df ret
// WaitForEmptyDSPMailBox_ovAC1.M()
0682 27fc lrs $AC1.M, @DMBH
0683 03c0 8000 andcf $AC1.M, #0x8000
0685 029d 0682 jlz 0x0682
0687 02df ret
// InitGlobalsVars()
0688 009a 0280 lri $AX0.H, #0x0280
068a 00fa 0350 sr @0x0350, $AX0.H
068c 00fa 0351 sr @0x0351, $AX0.H
068e 0a00 lris $AX0.H, #0x00
068f 00fa 0352 sr @0x0352, $AX0.H
0691 02df ret
// Huh, the 7 exception handler sends us here?
// Uses loop indexing (R08)
0692 00e0 03fb sr @0x03fb, $AR0
0694 00e8 03fc sr @0x03fc, $WR0
0696 00c0 0350 lr $AR0, @0x0350
0698 0088 002f lri $WR0, #0x002f
069a 1b1a srri @$AR0, $AX0.H
069b 00de fffe lr $AC0.M, @CMBH
069d 02c0 8000 andcf $AC0.M, #0x8000
069f 029c 069b jlnz 0x069b
06a1 00dc ffff lr $AC0.L, @CMBL
06a3 1b1e srri @$AR0, $AC0.M
06a4 1b1c srri @$AR0, $AC0.L
06a5 1fda mrr $AC0.M, $AX0.H
06a6 7800 decm $AC0.M
06a7 1f5e mrr $AX0.H, $AC0.M
06a8 8600 tstaxh $AX0.H
06a9 0294 069b jnz 0x069b
06ab 8100 clr $ACC0
06ac 00de 0352 lr $AC0.M, @0x0352
06ae 7400 incm $AC0.M
06af 00fe 0352 sr @0x0352, $AC0.M
06b1 00e0 0350 sr @0x0350, $AR0
06b3 00c0 03fb lr $AR0, @0x03fb
06b5 00c8 03fc lr $WR0, @0x03fc
06b7 029f 05e6 jmp 0x05e6
06b9 00e0 03fb sr @0x03fb, $AR0
06bb 00e8 03fc sr @0x03fc, $WR0
06bd 00c0 0350 lr $AR0, @0x0350
06bf 0088 002f lri $WR0, #0x002f
06c1 0a00 lris $AX0.H, #0x00
06c2 1b1a srri @$AR0, $AX0.H
06c3 029f 06ab jmp 0x06ab
// MessageLoop()
06c5 00c0 0351 lr $AR0, @0x0351
06c7 0088 002f lri $WR0, #0x002f
06c9 00da 0352 lr $AX0.H, @0x0352
06cb 8600 tstaxh $AX0.H
06cc 0295 06ed jz 0x06ed
06ce 1205 sbclr #0x05
06cf 00da 0352 lr $AX0.H, @0x0352
06d1 1fda mrr $AC0.M, $AX0.H
06d2 7800 decm $AC0.M
06d3 00fe 0352 sr @0x0352, $AC0.M
06d5 1305 sbset #0x05
06d6 0081 0356 lri $AR1, #0x0356
06d8 191e lrri $AC0.M, @$AR0
06d9 02c0 8000 andcf $AC0.M, #0x8000
06db 029d 06f1 jlz 0x06f1
06dd 1f5e mrr $AX0.H, $AC0.M
06de 8600 tstaxh $AX0.H
06df 0295 06f5 jz 0x06f5
06e1 007a 06e6 bloop $AX0.H, 0x06e6
06e3 191e lrri $AC0.M, @$AR0
06e4 1b3e srri @$AR1, $AC0.M
06e5 191e lrri $AC0.M, @$AR0
06e6 1b3e srri @$AR1, $AC0.M
06e7 00e0 0351 sr @0x0351, $AR0
06e9 0088 ffff lri $WR0, #0xffff
06eb 029f 002f jmp 0x002f // Command handler.
06ed 0088 ffff lri $WR0, #0xffff
06ef 029f 002d jmp 0x002d // Just jumps back to MessageLoop
// Store the current command, jump back to MessageLoop+2.
06f1 00e0 0351 sr @0x0351, $AR0
06f3 029f 06c9 jmp 0x06c9
// Default command, jump back to MessageLoop?
06f5 0080 06c5 lri $AR0, #0x06c5
06f7 029f 05f0 jmp 0x05f0 // StopUCode()
// Tests the value at M(0x0032)
06f9 8100 clr $ACC0
06fa 0e10 lris $AC0.M, #0x10
06fb 2232 lrs $AX0.H, @0x0032
06fc 8600 tstaxh $AX0.H
06fd 02d5 retz
06fe 5400 subr $ACC0, $AX0.H
06ff 0200 0458 addi $AC0.M, #0x0458
0701 1c1e mrr $AR0, $AC0.M
0702 1fda mrr $AC0.M, $AX0.H
0703 04fe addis $ACC0, #0xfe
0704 1f1e mrr $AX0.L, $AC0.M
0705 191e lrri $AC0.M, @$AR0
0706 0291 070c js 0x070c
0708 191a lrri $AX0.H, @$AR0
0709 0058 loop $AX0.L
070a 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
070b 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M
070c 1b7e srri @$AR3, $AC0.M
070d 02df ret
// M(0x0032) must be important...
070e 02bf 06f9 call 0x06f9
0710 8100 clr $ACC0
0711 2632 lrs $AC0.M, @0x0032
0712 5c00 sub $ACC0, $AC1.L
0713 2e32 srs @0x0032, $AC0.M
0714 0092 00ff lri $CR, #0x00ff
0716 02df ret
// Copies some values from hardware to dram.
0717 00de 04fb lr $AC0.M, @0x04fb
0719 7400 incm $AC0.M
071a 00fe 04fb sr @0x04fb, $AC0.M
071c 8100 clr $ACC0
071d 2e32 srs @0x0032, $AC0.M
071e 2e66 srs @0x0066, $AC0.M
071f 2e67 srs @0x0067, $AC0.M
0720 268a lrs $AC0.M, @0xff8a // What HW is this?
0721 248b lrs $AC0.L, @0xff8b
0722 2e3a srs @0x003a, $AC0.M
0723 2c3b srs @0x003b, $AC0.L
0724 268c lrs $AC0.M, @0xff8c
0725 248d lrs $AC0.L, @0xff8d
0726 2e38 srs @0x0038, $AC0.M
0727 2c39 srs @0x0039, $AC0.L
0728 02df ret
0729 8100 clr $ACC0
072a 2689 lrs $AC0.M, @0xff89
072b 0240 000f andi $AC0.M, #0x000f
072d 1f5e mrr $AX0.H, $AC0.M
072e 8100 clr $ACC0
072f 0e10 lris $AC0.M, #0x10
0730 5400 subr $ACC0, $AX0.H
0731 2e32 srs @0x0032, $AC0.M
0732 268a lrs $AC0.M, @0xff8a
0733 248b lrs $AC0.L, @0xff8b
0734 2288 lrs $AX0.H, @0xff88
0735 2089 lrs $AX0.L, @0xff89
0736 5800 subax $ACC0, $AX0.L
0737 0a00 lris $AX0.H, #0x00
0738 2032 lrs $AX0.L, @0x0032
0739 5800 subax $ACC0, $AX0.L
073a 2e3a srs @0x003a, $AC0.M
073b 2c3b srs @0x003b, $AC0.L
073c 02df ret
// Call, or not, 0x717 with some params.
// CR loading is .. suspicious :P
073d 0092 0004 lri $CR, #0x0004
073f 8100 clr $ACC0
0740 2604 lrs $AC0.M, @0x0004
0741 b100 tst $ACC0
0742 02b4 0717 callne 0x0717
0744 8100 clr $ACC0
0745 2601 lrs $AC0.M, @0x0001
0746 b100 tst $ACC0
0747 0294 07e5 jnz 0x07e5
//..
0749 2232 lrs $AX0.H, @0x0032
074a c900 cmpar $ACC0, $AX1.H
074b 0293 070e jle 0x070e
074d 5500 subr $ACC1, $AX0.H
074e 02bf 06f9 call 0x06f9
0750 223a lrs $AX0.H, @0x003a
0751 8600 tstaxh $AX0.H
0752 0294 0759 jnz 0x0759
0754 8100 clr $ACC0
0755 263b lrs $AC0.M, @0x003b
0756 8200 cmp
0757 0291 07ab js 0x07ab
0759 8100 clr $ACC0
075a 1fdf mrr $AC0.M, $AC1.M
075b 040f addis $ACC0, #0x0f
075c 147c lsr $ACC0, #-4
075d 1f7e mrr $AX1.H, $AC0.M
075e 0c00 lris $AC0.L, #0x00
075f 1404 lsl $ACC0, #4
0760 1f1e mrr $AX0.L, $AC0.M
0761 0a00 lris $AX0.H, #0x00
0762 8100 clr $ACC0
0763 263a lrs $AC0.M, @0x003a
0764 243b lrs $AC0.L, @0x003b
0765 5800 subax $ACC0, $AX0.L
0766 0290 0771 jns 0x0771
0768 8100 clr $ACC0
0769 263b lrs $AC0.M, @0x003b
076a 5c00 sub $ACC0, $AC1.L
076b 2e32 srs @0x0032, $AC0.M
076c 8100 clr $ACC0
076d 2e3a srs @0x003a, $AC0.M
076e 2e3b srs @0x003b, $AC0.M
076f 029f 0777 jmp 0x0777
//.. Jump target from 0766
0771 2e3a srs @0x003a, $AC0.M
0772 2c3b srs @0x003b, $AC0.L
0773 0c00 lris $AC0.L, #0x00
0774 1fd8 mrr $AC0.M, $AX0.L
0775 5c00 sub $ACC0, $AC1.L
0776 2e32 srs @0x0032, $AC0.M
//.. Jump target from 076f
0777 8100 clr $ACC0
0778 1fdb mrr $AC0.M, $AX1.H
0779 02bf 07eb call 0x07eb
077b 2232 lrs $AX0.H, @0x0032
077c 8600 tstaxh $AX0.H
077d 0295 07a8 jz 0x07a8 // bail
077f 0a10 lris $AX0.H, #0x10
0780 8100 clr $ACC0
0781 1fc3 mrr $AC0.M, $AR3
0782 5400 subr $ACC0, $AX0.H
0783 1c7e mrr $AR3, $AC0.M
0784 0080 0458 lri $AR0, #0x0458
0786 197e lrri $AC0.M, @$AR3
0787 197a lrri $AX0.H, @$AR3
0788 100e loopi #0x0e
0789 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H
078a 1b1e srri @$AR0, $AC0.M
078b 1b1a srri @$AR0, $AX0.H
078c 8100 clr $ACC0
078d 263a lrs $AC0.M, @0x003a
078e 243b lrs $AC0.L, @0x003b
078f b100 tst $ACC0
0790 0294 07a8 jnz 0x07a8 // bail
0792 2232 lrs $AX0.H, @0x0032
0793 8600 tstaxh $AX0.H
0794 0295 07a8 jz 0x07a8 // bail
0796 0080 0467 lri $AR0, #0x0467
0798 8100 clr $ACC0
0799 268b lrs $AC0.M, @0xff8b
079a b100 tst $ACC0
079b 0295 07a8 jz 0x07a8 // bail
079d 0200 000f addi $AC0.M, #0x000f
079f 0240 000f andi $AC0.M, #0x000f
07a1 0200 0458 addi $AC0.M, #0x0458
07a3 1c7e mrr $AR3, $AC0.M
07a4 007a 07a7 bloop $AX0.H, 0x07a7
07a6 18fe lrrd $AC0.M, @$AR3
07a7 1a9e srrd @$AR0, $AC0.M
//..
07a8 0092 00ff lri $CR, #0x00ff
07aa 02df ret
07ab b100 tst $ACC0
07ac 0295 07bb jz 0x07bb
07ae 5d00 sub $ACC1, $AC0.L
07af 040f addis $ACC0, #0x0f
07b0 147c lsr $ACC0, #-4
07b1 0c00 lris $AC0.L, #0x00
07b2 00e3 0363 sr @0x0363, $AR3
07b4 02bf 07eb call 0x07eb
07b6 00de 0363 lr $AC0.M, @0x0363
07b8 223b lrs $AX0.H, @0x003b
07b9 4400 addr $ACC0, $AX0.H
07ba 1c7e mrr $AR3, $AC0.M
07bb 8100 clr $ACC0
07bc 2681 lrs $AC0.M, @0xff81
07bd b100 tst $ACC0
07be 0295 07e3 jz 0x07e3 // memset
07c0 2380 lrs $AX1.H, @0xff80
07c1 2688 lrs $AC0.M, @0xff88
07c2 2489 lrs $AC0.L, @0xff89
07c3 1408 lsl $ACC0, #8
07c4 14f4 asr $ACC0, #-12
07c5 2380 lrs $AX1.H, @0xff80
07c6 8d00 set15
07c7 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L
07c8 ae00 mulxmv $AX0.L, $AX1.H, $ACC0
07c9 8c00 clr15
07ca f000 lsl16 $ACC0
07cb 4e00 addp $ACC0
07cc 238c lrs $AX1.H, @0xff8c
07cd 218d lrs $AX1.L, @0xff8d
07ce 4a00 addax $ACC0, $AX1.L
07cf 2e38 srs @0x0038, $AC0.M
07d0 2c39 srs @0x0039, $AC0.L
07d1 2682 lrs $AC0.M, @0xff82
07d2 2e67 srs @0x0067, $AC0.M
07d3 2683 lrs $AC0.M, @0xff83
07d4 2e66 srs @0x0066, $AC0.M
07d5 00e3 0363 sr @0x0363, $AR3
07d7 0083 0458 lri $AR3, #0x0458
07d9 8100 clr $ACC0
07da 0e01 lris $AC0.M, #0x01
07db 02bf 07eb call 0x07eb
07dd 00c3 0363 lr $AR3, @0x0363
07df 02bf 0729 call 0x0729
07e1 029f 0749 jmp 0x0749
// loop count = AC1.M
// strange - stores the value 1 at [1].
// then just memset 0 and a CR=0xff.
07e3 0e01 lris $AC0.M, #0x01
07e4 2e01 srs @0x0001, $AC0.M
07e5 8100 clr $ACC0
07e6 005f loop $AC1.M
07e7 1b7e srri @$AR3, $AC0.M
07e8 0092 00ff lri $CR, #0x00ff
07ea 02df ret
07eb 00ff 0360 sr @0x0360, $AC1.M
07ed 00fe 0361 sr @0x0361, $AC0.M
07ef 2638 lrs $AC0.M, @0x0038
07f0 2439 lrs $AC0.L, @0x0039
07f1 0f05 lris $AC1.M, #0x05
07f2 02bf 05ad call 0x05ad
07f4 2638 lrs $AC0.M, @0x0038
07f5 2439 lrs $AC0.L, @0x0039
07f6 8900 clr $ACC1
07f7 00df 0361 lr $AC1.M, @0x0361
07f9 2280 lrs $AX0.H, @0xff80
07fa d000 mulc $AC1.M, $AX0.H
07fb 6f00 movp $ACC1
07fc 4c00 add $ACC0, $AC1.L
07fd 2e38 srs @0x0038, $AC0.M
07fe 2c39 srs @0x0039, $AC0.L
07ff 8100 clr $ACC0
0800 00de 0361 lr $AC0.M, @0x0361
0802 007e 086b bloop $AC0.M, 0x086b
0804 0080 ffd3 lri $AR0, #0xffd3
0806 0084 0000 lri $IX0, #0x0000
0808 199e lrrn $AC0.M, @$AR0
0809 8900 clr $ACC1
080a 1ffe mrr $AC1.M, $AC0.M
080b 1401 lsl $ACC0, #1
080c 0240 001e andi $AC0.M, #0x001e
080e 0200 0300 addi $AC0.M, #0x0300
0810 1c3e mrr $AR1, $AC0.M
0811 157c lsr $ACC1, #-4
0812 0340 000f andi $AC1.M, #0x000f
0814 0a11 lris $AX0.H, #0x11
0815 5500 subr $ACC1, $AX0.H
0816 8100 clr $ACC0
0817 2680 lrs $AC0.M, @0xff80
0818 0605 cmpis $ACC0, #0x05
0819 0295 0832 jz 0x0832
081b 009a 00f0 lri $AX0.H, #0x00f0
081d 0b0f lris $AX1.H, #0x0f
081e 0082 0364 lri $AR2, #0x0364
0820 1998 lrrn $AX0.L, @$AR0
0821 6000 movr $ACC0, $AX0.L
0822 1107 0829 bloopi #0x07, 0x0829
0824 3400 andr $AC0.M, $AX0.H
0825 1408 lsl $ACC0, #8
0826 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
0827 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0
0828 140c lsl $ACC0, #12
0829 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
082a 3400 andr $AC0.M, $AX0.H
082b 1408 lsl $ACC0, #8
082c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
082d 3600 andr $AC0.M, $AX1.H
082e 140c lsl $ACC0, #12
082f 1b5e srri @$AR2, $AC0.M
0830 029f 0852 jmp 0x0852
0832 009a c000 lri $AX0.H, #0xc000
0834 0082 0364 lri $AR2, #0x0364
0836 1998 lrrn $AX0.L, @$AR0
0837 6000 movr $ACC0, $AX0.L
0838 1103 0845 bloopi #0x03, 0x0845
083a 1408 lsl $ACC0, #8
083b 3400 andr $AC0.M, $AX0.H
083c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
083d 140a lsl $ACC0, #10
083e 3400 andr $AC0.M, $AX0.H
083f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
0840 140c lsl $ACC0, #12
0841 3400 andr $AC0.M, $AX0.H
0842 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
0843 140e lsl $ACC0, #14
0844 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0
0845 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
0846 1408 lsl $ACC0, #8
0847 3400 andr $AC0.M, $AX0.H
0848 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
0849 140a lsl $ACC0, #10
084a 3400 andr $AC0.M, $AX0.H
084b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
084c 140c lsl $ACC0, #12
084d 3400 andr $AC0.M, $AX0.H
084e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
084f 140e lsl $ACC0, #14
0850 3400 andr $AC0.M, $AX0.H
0851 1b5e srri @$AR2, $AC0.M
0852 8f00 set40
0853 1f7f mrr $AX1.H, $AC1.M
0854 2066 lrs $AX0.L, @0x0066
0855 2767 lrs $AC1.M, @0x0067
0856 193a lrri $AX0.H, @$AR1
0857 1939 lrri $AX1.L, @$AR1
0858 0080 0364 lri $AR0, #0x0364
085a 1c80 mrr $IX0, $AR0
085b a000 mulx $AX0.L, $AX1.L
085c ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0
085d 1108 0866 bloopi #0x08, 0x0866
085f 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L
0860 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0
0861 1485 asl $ACC0, #5
0862 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M
0863 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L
0864 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0
0865 1585 asl $ACC1, #5
0866 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M
0867 2f67 srs @0x0067, $AC1.M
0868 8e00 set16
0869 1ff8 mrr $AC1.M, $AX0.L
086a 2f66 srs @0x0066, $AC1.M
086b 8900 clr $ACC1
086c 00df 0360 lr $AC1.M, @0x0360
086e 02df ret
086f b100 tst $ACC0
0870 02d5 retz
0871 04fe addis $ACC0, #0xfe
0872 1f1e mrr $AX0.L, $AC0.M
0873 191e lrri $AC0.M, @$AR0
0874 0291 087a js 0x087a
0876 191a lrri $AX0.H, @$AR0
0877 0058 loop $AX0.L
0878 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0879 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M
087a 1b7e srri @$AR3, $AC0.M
087b 02df ret
// Another jump table dispatcher. Not sure what it is.
087c 8100 clr $ACC0
087d 1f5e mrr $AX0.H, $AC0.M
087e 00d8 0402 lr $AX0.L, @0x0402
0880 00dc 0430 lr $AC0.L, @0x0430
0882 0080 0520 lri $AR0, #0x0520
0884 00df 0480 lr $AC1.M, @0x0480
0886 1501 lsl $ACC1, #1
0887 0340 007e andi $AC1.M, #0x007e
0889 0300 0891 addi $AC1.M, #0x0891
088b 1c5f mrr $AR2, $AC1.M
088c 175f callr $AR2
088d 00fc 0430 sr @0x0430, $AC0.L
088f 029f 02d8 jmp 0x02d8 // 0
0891 029f 08b2 jmp 0x08b2 // 1
0893 029f 08ed jmp 0x08ed // 2
0895 029f 08d5 jmp 0x08d5 // 3
0897 029f 08c2 jmp 0x08c2 // 4
0899 029f 08fb jmp 0x08fb // 5
089b 029f 08b1 jmp 0x08b1 // 6
089d 029f 0919 jmp 0x0919 // 7
089f 029f 091c jmp 0x091c // 8
08a1 029f 08b1 jmp 0x08b1 // 9
08a3 029f 08b1 jmp 0x08b1 // 10
08a5 029f 093a jmp 0x093a // 11
08a7 029f 08f3 jmp 0x08f3 // 12
08a9 029f 08f7 jmp 0x08f7 // 13
08ab 029f 08b1 jmp 0x08b1 // 14
08ad 029f 08b1 jmp 0x08b1 // 15
08af 029f 08b1 jmp 0x08b1 // 16 (huh? one too much)
// 88c Call targets 6, 9, 10, 14, 15, 16. (Nop)
08b1 02df ret
// Could this stuff be some zany audio decompression?
// CT1 seems to unpack the bits of ac0 and write either
// 0xc000 or 0x4000 to the output depending on 1 bit of acc0.
// CT4 does the same but depends on 2 bits of acc0.
// CT3 is similar but also seems to accumulate some value.
// CT2 just stores a ramp.
// Not sure what CT5 does.
// CT12 and CT13 are variants of CT5.
// CT7 is just a memset.
//
// 88c Call target 1.
08b2 1401 lsl $ACC0, #1
08b3 009b c000 lri $AX1.H, #0xc000
08b5 0099 4000 lri $AX1.L, #0x4000
08b7 1150 08bf bloopi #0x50, 0x08bf
08b9 02c0 0001 andcf $AC0.M, #0x0001
08bb 027c iflnz
08bc 1b1b srri @$AR0, $AX1.H
08bd 027d iflz
08be 1b19 srri @$AR0, $AX1.L
08bf 4800 addax $ACC0, $AX0.L
08c0 147f lsr $ACC0, #-1
08c1 02df ret
// 88c Call target 4.
08c2 1402 lsl $ACC0, #2
08c3 8900 clr $ACC1
08c4 1fb8 mrr $AC1.L, $AX0.L
08c5 1501 lsl $ACC1, #1
08c6 009b c000 lri $AX1.H, #0xc000
08c8 0099 4000 lri $AX1.L, #0x4000
08ca 1150 08d2 bloopi #0x50, 0x08d2
08cc 02c0 0003 andcf $AC0.M, #0x0003
08ce 027c iflnz
08cf 1b1b srri @$AR0, $AX1.H
08d0 027d iflz
08d1 1b19 srri @$AR0, $AX1.L
08d2 4c00 add $ACC0, $AC1.L
08d3 147e lsr $ACC0, #-2
08d4 02df ret
// 88c Call target 3.
08d5 1401 lsl $ACC0, #1
08d6 0081 0ca0 lri $AR1, #0x0ca0
08d8 009b c000 lri $AX1.H, #0xc000
08da 0099 4000 lri $AX1.L, #0x4000
08dc 8900 clr $ACC1
08dd 0082 0000 lri $AR2, #0x0000
08df 1150 08ea bloopi #0x50, 0x08ea
08e1 02c0 0001 andcf $AC0.M, #0x0001
08e3 027c iflnz
08e4 1b1b srri @$AR0, $AX1.H
08e5 027d iflz
08e6 1b19 srri @$AR0, $AX1.L
08e7 183d lrr $AC1.L, @$AR1
08e8 4900 addax $ACC1, $AX0.L
08e9 1fe2 mrr $AC1.M, $AR2
08ea 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M
08eb 147f lsr $ACC0, #-1
08ec 02df ret
// 88c Call target 2.
08ed 8900 clr $ACC1
08ee 1fb8 mrr $AC1.L, $AX0.L
08ef 157f lsr $ACC1, #-1
08f0 1050 loopi #0x50
08f1 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L
08f2 02df ret
// 88c Call target 12.
08f3 0082 0180 lri $AR2, #0x0180
08f5 029f 08fd jmp 0x08fd
// 88c Call target 13.
08f7 0082 01c0 lri $AR2, #0x01c0
08f9 029f 08fd jmp 0x08fd
// 88c Call target 5.
08fb 0082 0140 lri $AR2, #0x0140
// 88c targets 12 and 13 forward here with different R02 value.
08fd 008a 003f lri $WR2, #0x003f
08ff 0086 0000 lri $IX2, #0x0000
0901 1406 lsl $ACC0, #6
0902 8900 clr $ACC1
0903 1fb8 mrr $AC1.L, $AX0.L
0904 1505 lsl $ACC1, #5
0905 009b 003f lri $AX1.H, #0x003f
0907 009a 0000 lri $AX0.H, #0x0000
0909 3600 andr $AC0.M, $AX1.H
090a 1cde mrr $IX2, $AC0.M
090b 001a addarn $AR2, $IX2
090c 3400 andr $AC0.M, $AX0.H
090d 1150 0913 bloopi #0x50, 0x0913
090f 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
0910 3606 andr'dr $AC0.M, $AX1.H : $AR2
0911 1cde mrr $IX2, $AC0.M
0912 340e andr'nr $AC0.M, $AX0.H : $AR2
0913 1b19 srri @$AR0, $AX1.L
0914 1fc2 mrr $AC0.M, $AR2
0915 147a lsr $ACC0, #-6
0916 008a ffff lri $WR2, #0xffff
0918 02df ret
// 88c Call target 7.
0919 1050 loopi #0x50
091a 1b18 srri @$AR0, $AX0.L
091b 02df ret
// 88c Call target 8.
091c 0082 0100 lri $AR2, #0x0100
091e 008a 003f lri $WR2, #0x003f
0920 0086 0000 lri $IX2, #0x0000
0922 1406 lsl $ACC0, #6
0923 8900 clr $ACC1
0924 1fb8 mrr $AC1.L, $AX0.L
0925 1505 lsl $ACC1, #5
0926 009b 003f lri $AX1.H, #0x003f
0928 009a 0000 lri $AX0.H, #0x0000
092a 3600 andr $AC0.M, $AX1.H
092b 1cde mrr $IX2, $AC0.M
092c 001a addarn $AR2, $IX2
092d 3400 andr $AC0.M, $AX0.H
092e 1150 0934 bloopi #0x50, 0x0934
0930 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
0931 3606 andr'dr $AC0.M, $AX1.H : $AR2
0932 1cde mrr $IX2, $AC0.M
0933 340e andr'nr $AC0.M, $AX0.H : $AR2
0934 1b19 srri @$AR0, $AX1.L
0935 1fc2 mrr $AC0.M, $AR2
0936 147a lsr $ACC0, #-6
0937 008a ffff lri $WR2, #0xffff
0939 02df ret
// 88c Call target 11.
093a 0082 0100 lri $AR2, #0x0100
093c 008a 003f lri $WR2, #0x003f
093e 0086 0000 lri $IX2, #0x0000
0940 0081 0ca0 lri $AR1, #0x0ca0
0942 1406 lsl $ACC0, #6
0943 8900 clr $ACC1
0944 1fb8 mrr $AC1.L, $AX0.L
0945 1505 lsl $ACC1, #5
0946 009b 003f lri $AX1.H, #0x003f
0948 009a 0000 lri $AX0.H, #0x0000
094a 3600 andr $AC0.M, $AX1.H
094b 1cde mrr $IX2, $AC0.M
094c 001a addarn $AR2, $IX2
094d 3400 andr $AC0.M, $AX0.H
094e 1150 0959 bloopi #0x50, 0x0959
0950 1939 lrri $AX1.L, @$AR1
0951 a000 mulx $AX0.L, $AX1.L
0952 140a lsl $ACC0, #10
0953 4e00 addp $ACC0
0954 1476 lsr $ACC0, #-10
0955 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
0956 3606 andr'dr $AC0.M, $AX1.H : $AR2
0957 1cde mrr $IX2, $AC0.M
0958 340e andr'nr $AC0.M, $AX0.H : $AR2
0959 1b19 srri @$AR0, $AX1.L
095a 1fc2 mrr $AC0.M, $AR2
095b 147a lsr $ACC0, #-6
095c 008a ffff lri $WR2, #0xffff
095e 02df ret
// recalculate some 020-sized table?
095f 0080 01be lri $AR0, #0x01be
0961 1918 lrri $AX0.L, @$AR0
0962 191a lrri $AX0.H, @$AR0
0963 0080 0180 lri $AR0, #0x0180
0965 0083 0180 lri $AR3, #0x0180
0967 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0
0968 1ffe mrr $AC1.M, $AC0.M
0969 1120 0970 bloopi #0x20, 0x0970
096b 7c00 neg $ACC0
096c d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0
096d 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M
096e c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0
096f 1501 lsl $ACC1, #1
0970 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M
0971 0080 01fe lri $AR0, #0x01fe
0973 191a lrri $AX0.H, @$AR0
0974 1918 lrri $AX0.L, @$AR0
0975 0080 01c0 lri $AR0, #0x01c0
0977 0083 01c0 lri $AR3, #0x01c0
0979 1ff8 mrr $AC1.M, $AX0.L
097a 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0
097b f800 addpaxz $ACC0, $AX0.H
097c 0240 01ff andi $AC0.M, #0x01ff
097e 0260 2000 ori $AC0.M, #0x2000
0980 02bf 0983 call 0x0983
0982 02df ret
0983 b900 tst $ACC1
0984 0272 ifg
0985 7c00 neg $ACC0
0986 1f7e mrr $AX1.H, $AC0.M
0987 4700 addr $ACC1, $AX1.H
0988 1110 098d bloopi #0x10, 0x098d
098a 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
098b 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
098c 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
098d 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
098e 02df ret
098f 0092 0004 lri $CR, #0x0004
0991 2002 lrs $AX0.L, @0x0002
0992 8100 clr $ACC0
0993 8900 clr $ACC1
0994 2430 lrs $AC0.L, @0x0030
0995 8d00 set15
0996 0950 lris $AX1.L, #0x50
0997 a000 mulx $AX0.L, $AX1.L
0998 a400 mulxac $AX0.L, $AX1.L, $ACC0
0999 1404 lsl $ACC0, #4
099a 8c00 clr15
099b 1ffe mrr $AC1.M, $AC0.M
099c 0083 0580 lri $AR3, #0x0580
099e 2201 lrs $AX0.H, @0x0001
099f 8600 tstaxh $AX0.H
09a0 0294 09b1 jnz 0x09b1
09a2 2204 lrs $AX0.H, @0x0004
09a3 8600 tstaxh $AX0.H
09a4 02b4 09f9 callne 0x09f9
09a6 8100 clr $ACC0
09a7 2605 lrs $AC0.M, @0x0005
09a8 b100 tst $ACC0
09a9 0295 09be jz 0x09be
09ab 8100 clr $ACC0
09ac 2e05 srs @0x0005, $AC0.M
09ad 2281 lrs $AX0.H, @0xff81
09ae 8600 tstaxh $AX0.H
09af 0294 09b8 jnz 0x09b8
09b1 8100 clr $ACC0
09b2 005f loop $AC1.M
09b3 1b7e srri @$AR3, $AC0.M
09b4 7400 incm $AC0.M
09b5 2e01 srs @0x0001, $AC0.M
09b6 029f 09f2 jmp 0x09f2
// called from 9af above.
09b8 2688 lrs $AC0.M, @0xff88
09b9 2489 lrs $AC0.L, @0xff89
09ba 2e34 srs @0x0034, $AC0.M
09bb 2c35 srs @0x0035, $AC0.L
09bc 02bf 09f9 call 0x09f9
09be 00ff 0360 sr @0x0360, $AC1.M
09c0 2638 lrs $AC0.M, @0x0038
09c1 2439 lrs $AC0.L, @0x0039
09c2 0f05 lris $AC1.M, #0x05
09c3 02bf 05ad call 0x05ad
09c5 00df 0360 lr $AC1.M, @0x0360
09c7 8100 clr $ACC0
09c8 263a lrs $AC0.M, @0x003a
09c9 b100 tst $ACC0
09ca 0294 09d9 jnz 0x09d9
09cc 263b lrs $AC0.M, @0x003b
09cd 5c00 sub $ACC0, $AC1.L
09ce 0290 09d9 jns 0x09d9
09d0 223b lrs $AX0.H, @0x003b
09d1 02bf 0a0a call 0x0a0a // weird little loop. count = ax0.h
09d3 5500 subr $ACC1, $AX0.H
09d4 0a01 lris $AX0.H, #0x01
09d5 00fa 0405 sr @0x0405, $AX0.H
09d7 029f 09ab jmp 0x09ab
09d9 1f5f mrr $AX0.H, $AC1.M
09da 02bf 0a0a call 0x0a0a // weird little loop. count = ax0.h
09dc 00fa 0362 sr @0x0362, $AX0.H
09de 8100 clr $ACC0
09df 263a lrs $AC0.M, @0x003a
09e0 243b lrs $AC0.L, @0x003b
09e1 1570 lsr $ACC1, #-16
09e2 0a01 lris $AX0.H, #0x01
09e3 0081 0405 lri $AR1, #0x0405
09e5 5c00 sub $ACC0, $AC1.L
09e6 b100 tst $ACC0
09e7 0275 ifz
09e8 1a3a srr @$AR1, $AX0.H
09e9 2e3a srs @0x003a, $AC0.M
09ea 2c3b srs @0x003b, $AC0.L
09eb 2638 lrs $AC0.M, @0x0038
09ec 2439 lrs $AC0.L, @0x0039
09ed 00d8 0362 lr $AX0.L, @0x0362
09ef 7000 addaxl $ACC0, $AX0.L
09f0 2c39 srs @0x0039, $AC0.L
09f1 2e38 srs @0x0038, $AC0.M
09f2 0092 00ff lri $CR, #0x00ff
09f4 029f 02d0 jmp 0x02d0
// Nobody every calls 9f6... probably 3 lines of dead code.
09f6 8100 clr $ACC0
09f7 2e34 srs @0x0034, $AC0.M
09f8 2e35 srs @0x0035, $AC0.M
//.. entry point here from 9a4, 9bc. Looks kind of like a 32-bit butterfly computation?
09f9 2334 lrs $AX1.H, @0x0034
09fa 2135 lrs $AX1.L, @0x0035
09fb 268a lrs $AC0.M, @0xff8a
09fc 248b lrs $AC0.L, @0xff8b
09fd 5a00 subax $ACC0, $AX1.L
09fe 2e3a srs @0x003a, $AC0.M
09ff 2c3b srs @0x003b, $AC0.L
0a00 2634 lrs $AC0.M, @0x0034
0a01 2435 lrs $AC0.L, @0x0035
0a02 238c lrs $AX1.H, @0xff8c
0a03 218d lrs $AX1.L, @0xff8d
0a04 4a00 addax $ACC0, $AX1.L
0a05 2e38 srs @0x0038, $AC0.M
0a06 2c39 srs @0x0039, $AC0.L
0a07 8100 clr $ACC0
0a08 2e05 srs @0x0005, $AC0.M
0a09 02df ret
// weird little loop. out[i] = in[i] << 8; ?
0a0a 0080 ffd3 lri $AR0, #0xffd3
0a0c 0084 0000 lri $IX0, #0x0000
0a0e 007a 0a12 bloop $AX0.H, 0x0a12
0a10 199e lrrn $AC0.M, @$AR0
0a11 1488 asl $ACC0, #8
0a12 1b7e srri @$AR3, $AC0.M
0a13 02df ret
0a14 0092 0004 lri $CR, #0x0004
0a16 2002 lrs $AX0.L, @0x0002
0a17 8100 clr $ACC0
0a18 8900 clr $ACC1
0a19 2430 lrs $AC0.L, @0x0030
0a1a 8d00 set15
0a1b 0950 lris $AX1.L, #0x50
0a1c a000 mulx $AX0.L, $AX1.L
0a1d a400 mulxac $AX0.L, $AX1.L, $ACC0
0a1e 1404 lsl $ACC0, #4
0a1f 8c00 clr15
0a20 1ffe mrr $AC1.M, $AC0.M
0a21 0083 0580 lri $AR3, #0x0580
0a23 2201 lrs $AX0.H, @0x0001
0a24 8600 tstaxh $AX0.H
0a25 0294 0a36 jnz 0x0a36
0a27 2204 lrs $AX0.H, @0x0004
0a28 8600 tstaxh $AX0.H
0a29 02b4 0a7f callne 0x0a7f
0a2b 8100 clr $ACC0
0a2c 2605 lrs $AC0.M, @0x0005
0a2d b100 tst $ACC0
0a2e 0295 0a43 jz 0x0a43
0a30 8100 clr $ACC0 // 0x0a5c jumps here.
0a31 2e05 srs @0x0005, $AC0.M
0a32 2281 lrs $AX0.H, @0xff81
0a33 8600 tstaxh $AX0.H
0a34 0294 0a3d jnz 0x0a3d
0a36 8100 clr $ACC0
0a37 005f loop $AC1.M
0a38 1b7e srri @$AR3, $AC0.M
0a39 7400 incm $AC0.M
0a3a 2e01 srs @0x0001, $AC0.M
0a3b 029f 0a78 jmp 0x0a78
// VERY similar to 9b8, just a different call.
0a3d 2688 lrs $AC0.M, @0xff88
0a3e 2489 lrs $AC0.L, @0xff89
0a3f 2e34 srs @0x0034, $AC0.M
0a40 2c35 srs @0x0035, $AC0.L
0a41 02bf 0a7f call 0x0a7f
0a43 00ff 0360 sr @0x0360, $AC1.M
0a45 2638 lrs $AC0.M, @0x0038
0a46 2439 lrs $AC0.L, @0x0039
0a47 0f06 lris $AC1.M, #0x06
0a48 02bf 05ad call 0x05ad
0a4a 00df 0360 lr $AC1.M, @0x0360
0a4c 8100 clr $ACC0
0a4d 263a lrs $AC0.M, @0x003a
0a4e b100 tst $ACC0
0a4f 0294 0a5e jnz 0x0a5e
0a51 263b lrs $AC0.M, @0x003b
0a52 5c00 sub $ACC0, $AC1.L
0a53 0290 0a5e jns 0x0a5e
0a55 223b lrs $AX0.H, @0x003b
0a56 02bf 0a91 call 0x0a91
0a58 5500 subr $ACC1, $AX0.H
0a59 0a01 lris $AX0.H, #0x01
0a5a 00fa 0405 sr @0x0405, $AX0.H
0a5c 029f 0a30 jmp 0x0a30
// Identical to 9d9 except an extra ADDAXL.
0a5e 1f5f mrr $AX0.H, $AC1.M
0a5f 02bf 0a91 call 0x0a91
0a61 00fa 0362 sr @0x0362, $AX0.H
0a63 8100 clr $ACC0
0a64 263a lrs $AC0.M, @0x003a
0a65 243b lrs $AC0.L, @0x003b
0a66 1570 lsr $ACC1, #-16
0a67 0a01 lris $AX0.H, #0x01
0a68 0081 0405 lri $AR1, #0x0405
0a6a 5c00 sub $ACC0, $AC1.L
0a6b b100 tst $ACC0
0a6c 0275 ifz
0a6d 1a3a srr @$AR1, $AX0.H
0a6e 2e3a srs @0x003a, $AC0.M
0a6f 2c3b srs @0x003b, $AC0.L
0a70 2638 lrs $AC0.M, @0x0038
0a71 2439 lrs $AC0.L, @0x0039
0a72 00d8 0362 lr $AX0.L, @0x0362
0a74 7000 addaxl $ACC0, $AX0.L
0a75 7000 addaxl $ACC0, $AX0.L
0a76 2c39 srs @0x0039, $AC0.L
0a77 2e38 srs @0x0038, $AC0.M
0a78 0092 00ff lri $CR, #0x00ff
0a7a 029f 02d0 jmp 0x02d0
0a7c 8100 clr $ACC0
0a7d 2e34 srs @0x0034, $AC0.M
0a7e 2e35 srs @0x0035, $AC0.M
0a7f 2334 lrs $AX1.H, @0x0034
0a80 2135 lrs $AX1.L, @0x0035
0a81 268a lrs $AC0.M, @0xff8a
0a82 248b lrs $AC0.L, @0xff8b
0a83 5a00 subax $ACC0, $AX1.L
0a84 2e3a srs @0x003a, $AC0.M
0a85 2c3b srs @0x003b, $AC0.L
0a86 2634 lrs $AC0.M, @0x0034
0a87 2435 lrs $AC0.L, @0x0035
0a88 1401 lsl $ACC0, #1
0a89 238c lrs $AX1.H, @0xff8c
0a8a 218d lrs $AX1.L, @0xff8d
0a8b 4a00 addax $ACC0, $AX1.L
0a8c 2e38 srs @0x0038, $AC0.M
0a8d 2c39 srs @0x0039, $AC0.L
0a8e 8100 clr $ACC0
0a8f 2e05 srs @0x0005, $AC0.M
0a90 02df ret
0a91 0080 ffd3 lri $AR0, #0xffd3
0a93 0084 0000 lri $IX0, #0x0000
0a95 007a 0a98 bloop $AX0.H, 0x0a98
0a97 199e lrrn $AC0.M, @$AR0
0a98 1b7e srri @$AR3, $AC0.M
0a99 02df ret
0a9a 8900 clr $ACC1
0a9b 0f50 lris $AC1.M, #0x50
0a9c 0083 0520 lri $AR3, #0x0520
0a9e 02bf 0ab3 call 0x0ab3
0aa0 029f 02d8 jmp 0x02d8
0aa2 00d8 0402 lr $AX0.L, @0x0402
0aa4 8100 clr $ACC0
0aa5 8900 clr $ACC1
0aa6 00dc 0430 lr $AC0.L, @0x0430
0aa8 0a50 lris $AX0.H, #0x50
0aa9 9000 mul $AX0.L, $AX0.H
0aaa 9400 mulac $AX0.L, $AX0.H, $ACC0
0aab 1404 lsl $ACC0, #4
0aac 1ffe mrr $AC1.M, $AC0.M
0aad 0083 0580 lri $AR3, #0x0580
0aaf 02bf 0ab3 call 0x0ab3
0ab1 029f 02d0 jmp 0x02d0
0ab3 0092 0004 lri $CR, #0x0004
0ab5 8100 clr $ACC0
0ab6 263a lrs $AC0.M, @0x003a
0ab7 243b lrs $AC0.L, @0x003b
0ab8 1f1f mrr $AX0.L, $AC1.M
0ab9 0a00 lris $AX0.H, #0x00
0aba 5800 subax $ACC0, $AX0.L
0abb 0292 0ad1 jg 0x0ad1
0abd 8900 clr $ACC1
0abe 00c0 043b lr $AR0, @0x043b
0ac0 02bf 0af6 call 0x0af6
0ac2 8100 clr $ACC0
0ac3 1fd8 mrr $AC0.M, $AX0.L
0ac4 223b lrs $AX0.H, @0x003b
0ac5 5400 subr $ACC0, $AX0.H
0ac6 0007 dar $AR3
0ac7 1979 lrri $AX1.L, @$AR3
0ac8 005e loop $AC0.M
0ac9 1b79 srri @$AR3, $AX1.L
0aca 0f01 lris $AC1.M, #0x01
0acb 2f01 srs @0x0001, $AC1.M
0acc 8900 clr $ACC1
0acd 2f3b srs @0x003b, $AC1.M
0ace 0092 00ff lri $CR, #0x00ff
0ad0 02df ret
0ad1 2e3a srs @0x003a, $AC0.M
0ad2 2c3b srs @0x003b, $AC0.L
0ad3 8100 clr $ACC0
0ad4 8900 clr $ACC1
0ad5 268a lrs $AC0.M, @0xff8a
0ad6 2734 lrs $AC1.M, @0x0034
0ad7 5c00 sub $ACC0, $AC1.L
0ad8 2e36 srs @0x0036, $AC0.M
0ad9 5000 subr $ACC0, $AX0.L
0ada 0290 0af0 jns 0x0af0
0adc 00c0 0436 lr $AR0, @0x0436
0ade 02bf 0af6 call 0x0af6
0ae0 8100 clr $ACC0
0ae1 1fd8 mrr $AC0.M, $AX0.L
0ae2 2236 lrs $AX0.H, @0x0036
0ae3 5400 subr $ACC0, $AX0.H
0ae4 1c1e mrr $AR0, $AC0.M
0ae5 8100 clr $ACC0
0ae6 2e34 srs @0x0034, $AC0.M
0ae7 2688 lrs $AC0.M, @0xff88
0ae8 2489 lrs $AC0.L, @0xff89
0ae9 2e8c srs @0xff8c, $AC0.M
0aea 2c8d srs @0xff8d, $AC0.L
0aeb 02bf 0af6 call 0x0af6
0aed 0092 00ff lri $CR, #0x00ff
0aef 02df ret
0af0 1c18 mrr $AR0, $AX0.L
0af1 02bf 0af6 call 0x0af6
0af3 0092 00ff lri $CR, #0x00ff
0af5 02df ret
0af6 8100 clr $ACC0
0af7 1fc0 mrr $AC0.M, $AR0
0af8 b100 tst $ACC0
0af9 02d5 retz
0afa 8900 clr $ACC1
0afb 2734 lrs $AC1.M, @0x0034
0afc 0340 0001 andi $AC1.M, #0x0001
0afe 0b00 lris $AX1.H, #0x00
0aff 1f3f mrr $AX1.L, $AC1.M
0b00 268c lrs $AC0.M, @0xff8c
0b01 248d lrs $AC0.L, @0xff8d
0b02 8900 clr $ACC1
0b03 2534 lrs $AC1.L, @0x0034
0b04 1501 lsl $ACC1, #1
0b05 4c00 add $ACC0, $AC1.L
0b06 5a00 subax $ACC0, $AX1.L
0b07 5a00 subax $ACC0, $AX1.L
0b08 1c20 mrr $AR1, $AR0
0b09 1fe0 mrr $AC1.M, $AR0
0b0a 0502 addis $ACC1, #0x02
0b0b 1c1f mrr $AR0, $AC1.M
0b0c 009f 0b00 lri $AC1.M, #0x0b00
0b0e 0092 00ff lri $CR, #0x00ff
0b10 02bf 0525 call 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len)
0b12 0092 0004 lri $CR, #0x0004
0b14 2734 lrs $AC1.M, @0x0034
0b15 1f61 mrr $AX1.H, $AR1
0b16 4700 addr $ACC1, $AX1.H
0b17 2f34 srs @0x0034, $AC1.M
0b18 0080 0b00 lri $AR0, #0x0b00
0b1a 8900 clr $ACC1
0b1b 1ff9 mrr $AC1.M, $AX1.L
0b1c b900 tst $ACC1
0b1d 0274 ifnz
0b1e 0008 iar $AR0
0b1f 8900 clr $ACC1
0b20 1fe1 mrr $AC1.M, $AR1
0b21 191e lrri $AC0.M, @$AR0
0b22 0701 cmpis $ACC1, #0x01
0b23 0293 0b2c jle 0x0b2c
0b25 191a lrri $AX0.H, @$AR0
0b26 05fe addis $ACC1, #0xfe
0b27 005f loop $AC1.M
0b28 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0b29 1b7e srri @$AR3, $AC0.M
0b2a 1b7a srri @$AR3, $AX0.H
0b2b 02df ret
0b2c 1b7e srri @$AR3, $AC0.M
0b2d 02df ret
0b2e 8a00 m2
0b2f 0083 03e8 lri $AR3, #0x03e8
0b31 191e lrri $AC0.M, @$AR0
0b32 191a lrri $AX0.H, @$AR0
0b33 1006 loopi #0x06
0b34 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0b35 1b7e srri @$AR3, $AC0.M
0b36 1b7a srri @$AR3, $AX0.H
0b37 0080 03e8 lri $AR0, #0x03e8
0b39 0088 0007 lri $WR0, #0x0007
0b3b 1150 0b48 bloopi #0x50, 0x0b48
0b3d 1c61 mrr $AR3, $AR1
0b3e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3
0b3f f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b40 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b41 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b42 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b43 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b44 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b45 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b46 f200 madd $AX0.L, $AX0.H
0b47 fe00 movpz $ACC0
0b48 1b3e srri @$AR1, $AC0.M
0b49 0088 ffff lri $WR0, #0xffff
0b4b 8b00 m0
0b4c 02df ret
0b4d 8a00 m2
0b4e 05fe addis $ACC1, #0xfe
0b4f 0083 03e8 lri $AR3, #0x03e8
0b51 191e lrri $AC0.M, @$AR0
0b52 191a lrri $AX0.H, @$AR0
0b53 005f loop $AC1.M
0b54 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0b55 1b7e srri @$AR3, $AC0.M
0b56 1b7a srri @$AR3, $AX0.H
0b57 0080 03e8 lri $AR0, #0x03e8
0b59 0501 addis $ACC1, #0x01
0b5a 1d1f mrr $WR0, $AC1.M
0b5b 1150 0b63 bloopi #0x50, 0x0b63
0b5d 1c61 mrr $AR3, $AR1
0b5e 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3
0b5f 005f loop $AC1.M
0b60 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0b61 f200 madd $AX0.L, $AX0.H
0b62 fe00 movpz $ACC0
0b63 1b3e srri @$AR1, $AC0.M
0b64 0088 ffff lri $WR0, #0xffff
0b66 8b00 m0
0b67 02df ret
0b68 0083 03e8 lri $AR3, #0x03e8
0b6a 191e lrri $AC0.M, @$AR0
0b6b 191a lrri $AX0.H, @$AR0
0b6c 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0b6d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0b6e 1b7e srri @$AR3, $AC0.M
0b6f 1b7a srri @$AR3, $AX0.H
0b70 0080 03e8 lri $AR0, #0x03e8
0b72 0088 0003 lri $WR0, #0x0003
0b74 0085 0000 lri $IX1, #0x0000
0b76 0087 0000 lri $IX3, #0x0000
0b78 1fc2 mrr $AC0.M, $AR2
0b79 195b lrri $AX1.H, @$AR2
0b7a 1959 lrri $AX1.L, @$AR2
0b7b 195f lrri $AC1.M, @$AR2
0b7c 195a lrri $AX0.H, @$AR2
0b7d 1c5e mrr $AR2, $AC0.M
0b7e 1fda mrr $AC0.M, $AX0.H
0b7f 1c61 mrr $AR3, $AR1
0b80 8a00 m2
0b81 8f00 set40
0b82 191a lrri $AX0.H, @$AR0
0b83 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
0b84 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
0b85 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
0b86 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
0b87 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0
0b88 1127 0b93 bloopi #0x27, 0x0b93
0b8a e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
0b8b 197e lrri $AC0.M, @$AR3
0b8c e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
0b8d eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
0b8e bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0
0b8f e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M
0b90 197f lrri $AC1.M, @$AR3
0b91 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
0b92 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
0b93 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0
0b94 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
0b95 197e lrri $AC0.M, @$AR3
0b96 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
0b97 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
0b98 bf00 mulxmv $AX0.H, $AX1.H, $ACC1
0b99 1bff srrn @$AR3, $AC1.M
0b9a 197f lrri $AC1.M, @$AR3
0b9b 8e00 set16
0b9c 8b00 m0
0b9d 0088 ffff lri $WR0, #0xffff
0b9f 1b5b srri @$AR2, $AX1.H
0ba0 1b59 srri @$AR2, $AX1.L
0ba1 1b5f srri @$AR2, $AC1.M
0ba2 1b5e srri @$AR2, $AC0.M
0ba3 02df ret
0ba4 0083 03e8 lri $AR3, #0x03e8
0ba6 191e lrri $AC0.M, @$AR0
0ba7 191a lrri $AX0.H, @$AR0
0ba8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0ba9 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
0baa 1b7e srri @$AR3, $AC0.M
0bab 1b7a srri @$AR3, $AX0.H
0bac 0080 03e8 lri $AR0, #0x03e8
0bae 0088 0003 lri $WR0, #0x0003
0bb0 0085 0000 lri $IX1, #0x0000
0bb2 0087 0000 lri $IX3, #0x0000
0bb4 1fc2 mrr $AC0.M, $AR2
0bb5 195b lrri $AX1.H, @$AR2
0bb6 1959 lrri $AX1.L, @$AR2
0bb7 195f lrri $AC1.M, @$AR2
0bb8 195a lrri $AX0.H, @$AR2
0bb9 1c5e mrr $AR2, $AC0.M
0bba 1fda mrr $AC0.M, $AX0.H
0bbb 1c61 mrr $AR3, $AR1
0bbc 8a00 m2
0bbd 8f00 set40
0bbe 191a lrri $AX0.H, @$AR0
0bbf b800 mulx $AX0.H, $AX1.H
0bc0 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
0bc1 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
0bc2 ea00 maddc $AC1.M, $AX1.L
0bc3 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
0bc4 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3
0bc5 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
0bc6 b200 mulxmvz $AX0.H, $AX1.L, $ACC0
0bc7 1127 0bd8 bloopi #0x27, 0x0bd8
0bc9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
0bca e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
0bcb 197e lrri $AC0.M, @$AR3
0bcc e800 maddc $AC0.M, $AX1.L
0bcd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
0bce ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3
0bcf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
0bd0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1
0bd1 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
0bd2 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M
0bd3 197f lrri $AC1.M, @$AR3
0bd4 ea00 maddc $AC1.M, $AX1.L
0bd5 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
0bd6 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3
0bd7 ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
0bd8 b200 mulxmvz $AX0.H, $AX1.L, $ACC0
0bd9 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
0bda e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
0bdb 197e lrri $AC0.M, @$AR3
0bdc e800 maddc $AC0.M, $AX1.L
0bdd e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
0bde ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3
0bdf eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
0be0 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1
0be1 1bff srrn @$AR3, $AC1.M
0be2 197f lrri $AC1.M, @$AR3
0be3 8e00 set16
0be4 8b00 m0
0be5 0088 ffff lri $WR0, #0xffff
0be7 1b5b srri @$AR2, $AX1.H
0be8 1b59 srri @$AR2, $AX1.L
0be9 1b5f srri @$AR2, $AC1.M
0bea 1b5e srri @$AR2, $AC0.M
0beb 02df ret
0bec 0eff lris $AC0.M, #0xff
0bed 00fe 03f2 sr @0x03f2, $AC0.M
0bef 8100 clr $ACC0
0bf0 00fe 03f0 sr @0x03f0, $AC0.M
0bf2 00fe 03f6 sr @0x03f6, $AC0.M
0bf4 009e 0100 lri $AC0.M, #0x0100
0bf6 00fe 03f7 sr @0x03f7, $AC0.M
0bf8 00da 03f7 lr $AX0.H, @0x03f7
0bfa 009e 8000 lri $AC0.M, #0x8000
0bfc 5400 subr $ACC0, $AX0.H
0bfd 00fe 03f5 sr @0x03f5, $AC0.M
0bff 0e30 lris $AC0.M, #0x30
0c00 00fe 03f3 sr @0x03f3, $AC0.M
0c02 0e10 lris $AC0.M, #0x10
0c03 00fe 03f4 sr @0x03f4, $AC0.M
0c05 009e 0096 lri $AC0.M, #0x0096
0c07 00fe 03f1 sr @0x03f1, $AC0.M
0c09 02df ret
0c0a 0080 0a00 lri $AR0, #0x0a00
0c0c 8100 clr $ACC0
0c0d 00de 03f0 lr $AC0.M, @0x03f0
0c0f 8900 clr $ACC1
0c10 b100 tst $ACC0
0c11 0275 ifz
0c12 0550 addis $ACC1, #0x50
0c13 00ff 03f0 sr @0x03f0, $AC1.M
0c15 0200 0a60 addi $AC0.M, #0x0a60
0c17 1c7e mrr $AR3, $AC0.M
0c18 0f4e lris $AC1.M, #0x4e
0c19 02bf 00da call 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST)
0c1b 02df ret
0c1c 00de 03f1 lr $AC0.M, @0x03f1
0c1e 0200 0a60 addi $AC0.M, #0x0a60
0c20 1c7e mrr $AR3, $AC0.M
0c21 8100 clr $ACC0
0c22 8900 clr $ACC1
0c23 009f 00a0 lri $AC1.M, #0x00a0
0c25 00de 03f1 lr $AC0.M, @0x03f1
0c27 5d00 sub $ACC1, $AC0.L
0c28 0e50 lris $AC0.M, #0x50
0c29 0750 cmpis $ACC1, #0x50
0c2a 0270 ifns
0c2b 5d00 sub $ACC1, $AC0.L
0c2c 00da 03f2 lr $AX0.H, @0x03f2
0c2e 8600 tstaxh $AX0.H
0c2f 0290 0c4d jns 0x0c4d
0c31 00de 03f3 lr $AC0.M, @0x03f3
0c33 5c00 sub $ACC0, $AC1.L
0c34 0293 0c38 jle 0x0c38
0c36 029f 0c52 jmp 0x0c52
0c38 00db 03f7 lr $AX1.H, @0x03f7
0c3a 009e 8000 lri $AC0.M, #0x8000
0c3c 4600 addr $ACC0, $AX1.H
0c3d 029f 0c44 jmp 0x0c44
0c3f 00db 03f7 lr $AX1.H, @0x03f7
0c41 009e 8000 lri $AC0.M, #0x8000
0c43 5600 subr $ACC0, $AX1.H
0c44 00fe 03f5 sr @0x03f5, $AC0.M
0c46 1fda mrr $AC0.M, $AX0.H
0c47 7c00 neg $ACC0
0c48 1f5e mrr $AX0.H, $AC0.M
0c49 00fe 03f2 sr @0x03f2, $AC0.M
0c4b 029f 0c52 jmp 0x0c52
0c4d 00de 03f4 lr $AC0.M, @0x03f4
0c4f 5d00 sub $ACC1, $AC0.L
0c50 0293 0c3f jle 0x0c3f
0c52 8900 clr $ACC1
0c53 00dd 03f5 lr $AC1.L, @0x03f5
0c55 1501 lsl $ACC1, #1
0c56 8100 clr $ACC0
0c57 00dc 03f6 lr $AC0.L, @0x03f6
0c59 008b 009f lri $WR3, #0x009f
0c5b 0080 0a00 lri $AR0, #0x0a00
0c5d 0900 lris $AX1.L, #0x00
0c5e 1150 0c65 bloopi #0x50, 0x0c65
0c60 1878 lrr $AX0.L, @$AR3
0c61 4c00 add $ACC0, $AC1.L
0c62 1cfe mrr $IX3, $AC0.M
0c63 001f addarn $AR3, $IX3
0c64 1fd9 mrr $AC0.M, $AX1.L
0c65 1b18 srri @$AR0, $AX0.L
0c66 009f 0a60 lri $AC1.M, #0x0a60
0c68 1fc3 mrr $AC0.M, $AR3
0c69 5c00 sub $ACC0, $AC1.L
0c6a 00fe 03f1 sr @0x03f1, $AC0.M
0c6c 00fc 03f6 sr @0x03f6, $AC0.L
0c6e 008b ffff lri $WR3, #0xffff
0c70 02df ret
0c71 0f50 lris $AC1.M, #0x50
0c72 0080 0a00 lri $AR0, #0x0a00
0c74 0083 0d60 lri $AR3, #0x0d60
0c76 0098 3fff lri $AX0.L, #0x3fff
0c78 02bf 00eb call 0x00eb // one of the multiply loops
0c7a 0f50 lris $AC1.M, #0x50
0c7b 0080 0a00 lri $AR0, #0x0a00
0c7d 0083 0d00 lri $AR3, #0x0d00
0c7f 0098 3fff lri $AX0.L, #0x3fff
0c81 02bf 00eb call 0x00eb // one of the multiply loops
0c83 02df ret
0c84 8a00 m2
0c85 8f00 set40
0c86 8100 clr $ACC0
0c87 00de 0404 lr $AC0.M, @0x0404
0c89 b100 tst $ACC0
0c8a 0295 0c91 jz 0x0c91
0c8c 8100 clr $ACC0
0c8d 00fe 0478 sr @0x0478, $AC0.M
0c8f 00fe 0479 sr @0x0479, $AC0.M
0c91 00df 0479 lr $AC1.M, @0x0479
0c93 00db 0478 lr $AX1.H, @0x0478
0c95 0900 lris $AX1.L, #0x00
0c96 0084 0000 lri $IX0, #0x0000
0c98 1150 0ca1 bloopi #0x50, 0x0ca1
0c9a 199e lrrn $AC0.M, @$AR0
0c9b 5c7c sub'ln $ACC0, $AC1.L : $AC1.M, @$AR0
0c9c c000 mulc $AC0.M, $AX0.H
0c9d 6e00 movp $ACC0
0c9e 1488 asl $ACC0, #8
0c9f 4a00 addax $ACC0, $AX1.L
0ca0 1b1e srri @$AR0, $AC0.M
0ca1 1f7e mrr $AX1.H, $AC0.M
0ca2 00fb 0478 sr @0x0478, $AX1.H
0ca4 00ff 0479 sr @0x0479, $AC1.M
0ca6 8b00 m0
0ca7 8e00 set16
0ca8 02df ret
0ca9 b900 tst $ACC1
0caa 0294 0caf jnz 0x0caf
0cac 6800 movax $ACC0, $AX0.L
0cad b100 tst $ACC0
0cae 02d5 retz
//...
0caf 1c23 mrr $AR1, $AR3
0cb0 197e lrri $AC0.M, @$AR3
0cb1 191b lrri $AX1.H, @$AR0
0cb2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0
0cb3 1120 0cb9 bloopi #0x20, 0x0cb9
0cb5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
0cb6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
0cb7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
0cb8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
0cb9 4900 addax $ACC1, $AX0.L
0cba 1108 0cbf bloopi #0x08, 0x0cbf
0cbc dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
0cbd 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
0cbe dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
0cbf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
0cc0 02df ret
// Yet another multiply loop. bufsize = 0x28
0cc1 8f00 set40
0cc2 8d00 set15
0cc3 1c03 mrr $AR0, $AR3
0cc4 00d9 038e lr $AX1.L, @0x038e
0cc6 0b04 lris $AX1.H, #0x04
0cc7 197a lrri $AX0.H, @$AR3
0cc8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3
0cc9 b600 mulxmv $AX0.H, $AX1.L, $ACC0
0cca 1128 0ccf bloopi #0x28, 0x0ccf
0ccc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3
0ccd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
0cce 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3
0ccf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
0cd0 8c00 clr15
0cd1 8e00 set16
0cd2 02df ret
0cd3 00da 0485 lr $AX0.H, @0x0485
0cd5 8600 tstaxh $AX0.H
0cd6 0295 0ce5 jz 0x0ce5
0cd8 8100 clr $ACC0
0cd9 00de 042a lr $AC0.M, @0x042a
0cdb 147f lsr $ACC0, #-1
0cdc 00fe 042b sr @0x042b, $AC0.M
0cde b100 tst $ACC0
0cdf 0294 0ce5 jnz 0x0ce5
0ce1 009a 0001 lri $AX0.H, #0x0001
0ce3 00fa 0401 sr @0x0401, $AX0.H
0ce5 8f00 set40
0ce6 8100 clr $ACC0
0ce7 00de 0428 lr $AC0.M, @0x0428
0ce9 1478 lsr $ACC0, #-8
0cea 00df 0428 lr $AC1.M, @0x0428
0cec 0340 007f andi $AC1.M, #0x007f
0cee 1f1e mrr $AX0.L, $AC0.M
0cef 1f5f mrr $AX0.H, $AC1.M
0cf0 0220 007f xori $ACC0, #0x007f
0cf2 1f3e mrr $AX1.L, $AC0.M
0cf3 0320 007f xori $ACC1, #0x007f
0cf5 1f7f mrr $AX1.H, $AC1.M
0cf6 8100 clr $ACC0
0cf7 8900 clr $ACC1
0cf8 009f 0200 lri $AC1.M, #0x0200
0cfa 1fd8 mrr $AC0.M, $AX0.L
0cfb 4c00 add $ACC0, $AC1.L
0cfc 1c1e mrr $AR0, $AC0.M
0cfd 1818 lrr $AX0.L, @$AR0
0cfe 1fda mrr $AC0.M, $AX0.H
0cff 4c00 add $ACC0, $AC1.L
0d00 1c1e mrr $AR0, $AC0.M
0d01 181a lrr $AX0.H, @$AR0
0d02 1fd9 mrr $AC0.M, $AX1.L
0d03 4c00 add $ACC0, $AC1.L
0d04 1c1e mrr $AR0, $AC0.M
0d05 1819 lrr $AX1.L, @$AR0
0d06 1fdb mrr $AC0.M, $AX1.H
0d07 4c00 add $ACC0, $AC1.L
0d08 1c1e mrr $AR0, $AC0.M
0d09 181b lrr $AX1.H, @$AR0
0d0a 0080 0b00 lri $AR0, #0x0b00
0d0c 9800 mul $AX1.L, $AX1.H
0d0d ae00 mulxmv $AX0.L, $AX1.H, $ACC0
0d0e b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
0d0f 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M
0d10 6e30 movp's $ACC0 : @$AR0, $AC0.M
0d11 1b1e srri @$AR0, $AC0.M
0d12 0080 0b00 lri $AR0, #0x0b00
0d14 0081 0b04 lri $AR1, #0x0b04
0d16 00da 042a lr $AX0.H, @0x042a
0d18 02bf 0d62 call 0x0d62
0d1a 0081 0b08 lri $AR1, #0x0b08
0d1c 0080 0b04 lri $AR0, #0x0b04
0d1e 00da 042a lr $AX0.H, @0x042a
0d20 00de 0429 lr $AC0.M, @0x0429
0d22 c000 mulc $AC0.M, $AX0.H
0d23 6e00 movp $ACC0
0d24 1481 asl $ACC0, #1
0d25 1f5e mrr $AX0.H, $AC0.M
0d26 02bf 0d62 call 0x0d62
0d28 0080 0b00 lri $AR0, #0x0b00
0d2a 0081 0b0c lri $AR1, #0x0b0c
0d2c 8100 clr $ACC0
0d2d 8900 clr $ACC1
0d2e 00de 042b lr $AC0.M, @0x042b
0d30 00df 042a lr $AC1.M, @0x042a
0d32 00fe 042a sr @0x042a, $AC0.M
0d34 5c00 sub $ACC0, $AC1.L
0d35 1f5e mrr $AX0.H, $AC0.M
0d36 02bf 0d6b call 0x0d6b
0d38 0080 0b0c lri $AR0, #0x0b0c
0d3a 0081 0b10 lri $AR1, #0x0b10
0d3c 00da 0429 lr $AX0.H, @0x0429
0d3e 02bf 0d62 call 0x0d62
0d40 0081 0b04 lri $AR1, #0x0b04
0d42 0082 0b0c lri $AR2, #0x0b0c
0d44 0083 0d77 lri $AR3, #0x0d77
0d46 1108 0d5f bloopi #0x08, 0x0d5f // 8 iterations, = data table size below
0d48 195f lrri $AC1.M, @$AR2
0d49 15fb asr $ACC1, #-5
0d4a 1f1d mrr $AX0.L, $AC1.L
0d4b 1f5f mrr $AX0.H, $AC1.M
0d4c 193f lrri $AC1.M, @$AR1
0d4d 00e1 0b24 sr @0x0b24, $AR1
0d4f 00e2 0b25 sr @0x0b25, $AR2
0d51 021b ilrri $AC0.M, @$AR3 // Read from data table at 0d77, increment R03
0d52 00e3 0b26 sr @0x0b26, $AR3
0d54 1c7e mrr $AR3, $AC0.M
0d55 00c0 038f lr $AR0, @0x038f
0d57 02bf 0ca9 call 0x0ca9
0d59 00c1 0b24 lr $AR1, @0x0b24
0d5b 00c2 0b25 lr $AR2, @0x0b25
0d5d 00c3 0b26 lr $AR3, @0x0b26
0d5f 0000 nop // BLOOPI end
0d60 8e00 set16
0d61 02df ret
// Compute something.... load @R00 store @R01
0d62 191f lrri $AC1.M, @$AR0
0d63 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0
0d64 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0
0d65 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M
0d66 191f lrri $AC1.M, @$AR0
0d67 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M
0d68 6e31 movp's $ACC0 : @$AR1, $AC0.M
0d69 1b3e srri @$AR1, $AC0.M
0d6a 02df ret
// Compute something... load @R00 store @R01
// Similar to 0d62 but different register usage.
// Surrounded with SET15/CLR15.
0d6b 8d00 set15
0d6c 1f7e mrr $AX1.H, $AC0.M
0d6d 1918 lrri $AX0.L, @$AR0
0d6e a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0
0d6f ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0
0d70 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M
0d71 1918 lrri $AX0.L, @$AR0
0d72 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M
0d73 6e31 movp's $ACC0 : @$AR1, $AC0.M
0d74 1b3e srri @$AR1, $AC0.M
0d75 8c00 clr15
0d76 02df ret
// This would appear to be a data table.
0d77 0d00 lris $AC1.L, #0x00
0d78 0d60 lris $AC1.L, #0x60
0d79 0f40 lris $AC1.M, #0x40
0d7a 0ca0 lris $AC0.L, #0xa0
0d7b 0e80 lris $AC0.M, #0x80
0d7c 0ee0 lris $AC0.M, #0xe0
0d7d 0c00 lris $AC0.L, #0x00
0d7e 0c50 lris $AC0.L, #0x50
// Function starts here? 0x28 bufsize.
0d7f 00f9 0361 sr @0x0361, $AX1.L
0d81 1fc0 mrr $AC0.M, $AR0
0d82 0200 fffc addi $AC0.M, #0xfffc
0d84 1c1e mrr $AR0, $AC0.M
0d85 1c5e mrr $AR2, $AC0.M
0d86 0083 043c lri $AR3, #0x043c
0d88 197e lrri $AC0.M, @$AR3
0d89 197f lrri $AC1.M, @$AR3
0d8a 80a2 nx'sl : $AC0.M, $AX0.H
0d8b 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H
0d8c 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M
0d8d 1b1f srri @$AR0, $AC1.M
0d8e 1c02 mrr $AR0, $AR2
0d8f 8100 clr $ACC0
0d90 00de 0402 lr $AC0.M, @0x0402
0d92 00fe 0362 sr @0x0362, $AC0.M
0d94 1474 lsr $ACC0, #-12
0d95 1f7e mrr $AX1.H, $AC0.M
0d96 1f3c mrr $AX1.L, $AC0.L
0d97 8900 clr $ACC1
0d98 00dd 0430 lr $AC1.L, @0x0430
0d9a 1504 lsl $ACC1, #4
0d9b 0604 cmpis $ACC0, #0x04
0d9c 0290 0df3 jns 0x0df3
0d9e 1fdd mrr $AC0.M, $AC1.L
0d9f 0082 02b0 lri $AR2, #0x02b0
0da1 1050 loopi #0x50
0da2 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L
0da3 1fbe mrr $AC1.L, $AC0.M
0da4 00fe 0360 sr @0x0360, $AC0.M
0da6 8900 clr $ACC1
0da7 1fbe mrr $AC1.L, $AC0.M
0da8 0af8 lris $AX0.H, #0xf8
0da9 009b 00fc lri $AX1.H, #0x00fc
0dab 00d8 0361 lr $AX0.L, @0x0361
0dad 0082 02b0 lri $AR2, #0x02b0
0daf 0083 02b0 lri $AR3, #0x02b0
0db1 195e lrri $AC0.M, @$AR2
0db2 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M
0db3 1128 0db8 bloopi #0x28, 0x0db8
0db5 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2
0db6 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H
0db7 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2
0db8 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H
0db9 8a00 m2
0dba 0082 02b0 lri $AR2, #0x02b0
0dbc 00dd 0430 lr $AC1.L, @0x0430
0dbe 1504 lsl $ACC1, #4
0dbf 1fe0 mrr $AC1.M, $AR0
0dc0 8100 clr $ACC0
0dc1 00de 0362 lr $AC0.M, @0x0362
0dc3 1474 lsr $ACC0, #-12
0dc4 1f7e mrr $AX1.H, $AC0.M
0dc5 1f3c mrr $AX1.L, $AC0.L
0dc6 8f00 set40
0dc7 1943 lrri $AR3, @$AR2
0dc8 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
0dc9 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dcb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dcc f200 madd $AX0.L, $AX0.H
0dcd fe00 movpz $ACC0
0dce 1c1f mrr $AR0, $AC1.M
0dcf 1943 lrri $AR3, @$AR2
0dd0 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
0dd1 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dd2 114e 0dda bloopi #0x4e, 0x0dda
0dd4 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dd5 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0dd6 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M
0dd7 1c1f mrr $AR0, $AC1.M
0dd8 1943 lrri $AR3, @$AR2
0dd9 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
0dda 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3
0ddb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0ddc f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
0ddd f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M
0dde fe00 movpz $ACC0
0ddf 1b3e srri @$AR1, $AC0.M
0de0 8b00 m0
0de1 8e00 set16
0de2 00fe 0433 sr @0x0433, $AC0.M
0de4 1c1f mrr $AR0, $AC1.M
0de5 150c lsl $ACC1, #12
0de6 0340 0fff andi $AC1.M, #0x0fff
0de8 00ff 0430 sr @0x0430, $AC1.M
0dea 0083 043c lri $AR3, #0x043c
0dec 191e lrri $AC0.M, @$AR0
0ded 191f lrri $AC1.M, @$AR0
0dee 80a0 nx'ls : $AX0.H, $AC0.M
0def 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M
0df0 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M
0df1 1b7f srri @$AR3, $AC1.M
0df2 02df ret
// bufsize = 0x28
0df3 1fe0 mrr $AC1.M, $AR0
0df4 1c1f mrr $AR0, $AC1.M
0df5 1128 0dfc bloopi #0x28, 0x0dfc
0df7 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0
0df8 1b3e srri @$AR1, $AC0.M
0df9 1c1f mrr $AR0, $AC1.M
0dfa 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0
0dfb 1b3e srri @$AR1, $AC0.M
0dfc 1c1f mrr $AR0, $AC1.M
0dfd 029f 0de2 jmp 0x0de2
0dff 0083 0520 lri $AR3, #0x0520
0e01 00de 0433 lr $AC0.M, @0x0433
0e03 1050 loopi #0x50
0e04 1b7e srri @$AR3, $AC0.M
0e05 029f 02d8 jmp 0x02d8
0e07 1c20 mrr $AR1, $AR0
0e08 185f lrr $AC1.M, @$AR2
0e09 1f7f mrr $AX1.H, $AC1.M
0e0a 193a lrri $AX0.H, @$AR1
0e0b 6400 movr $ACC0, $AX0.H
0e0c 0078 0e11 bloop $AX0.L, 0x0e11
0e0e 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1
0e0f 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M
0e10 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1
0e11 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M
0e12 1a5b srr @$AR2, $AX1.H
0e13 02df ret
// called by init code
{
a_04e8[0]=0x8240;
a_04e8[1]=0x7fff;
a_04e8[2]=0x7dbf;
a_04e8[3]=0x843f;
a_04f0[0]=0xb23b;
a_04f0[1]=0x7fff;
a_04f0[2]=0x4dc4;
a_04f0[3]=0xd808;
a_04ec[0]=a_04ec[1]=a_04ec[2]=a_04ec[3]=0;
a_04f4[0]=a_04f4[1]=a_04f4[2]=a_04f4[3]=0;
}
0e14 0098 8240 lri $AX0.L, #0x8240
0e16 00f8 04e8 sr @0x04e8, $AX0.L
0e18 0098 7fff lri $AX0.L, #0x7fff
0e1a 00f8 04e9 sr @0x04e9, $AX0.L
0e1c 0098 7dbf lri $AX0.L, #0x7dbf
0e1e 00f8 04ea sr @0x04ea, $AX0.L
0e20 0098 843f lri $AX0.L, #0x843f
0e22 00f8 04eb sr @0x04eb, $AX0.L
0e24 0098 b23b lri $AX0.L, #0xb23b
0e26 00f8 04f0 sr @0x04f0, $AX0.L
0e28 0098 7fff lri $AX0.L, #0x7fff
0e2a 00f8 04f1 sr @0x04f1, $AX0.L
0e2c 0098 4dc4 lri $AX0.L, #0x4dc4
0e2e 00f8 04f2 sr @0x04f2, $AX0.L
0e30 0098 d808 lri $AX0.L, #0xd808
0e32 00f8 04f3 sr @0x04f3, $AX0.L
0e34 0098 0000 lri $AX0.L, #0x0000
0e36 0080 04ec lri $AR0, #0x04ec
0e38 1004 loopi #0x04
0e39 1b18 srri @$AR0, $AX0.L
0e3a 0080 04f4 lri $AR0, #0x04f4
0e3c 1004 loopi #0x04
0e3d 1b18 srri @$AR0, $AX0.L
0e3e 02df ret
// Main Stereo (or dolby) Mixer?
// Is the source sample at 0x0b00?
// 0x50 seems to be a buffer size. Strange one.
0e3f 0080 0f40 lri $AR0, #0x0f40
0e41 0083 0b00 lri $AR3, #0x0b00
0e43 8900 clr $ACC1
0e44 0f50 lris $AC1.M, #0x50
0e45 0098 6784 lri $AX0.L, #0x6784
0e47 02bf 00fa call 0x00fa // multiply loop
0e49 0080 04e8 lri $AR0, #0x04e8
0e4b 0082 04ec lri $AR2, #0x04ec
0e4d 0081 0b00 lri $AR1, #0x0b00
0e4f 02bf 0ba4 call 0x0ba4 // complex multiply loop
0e51 8900 clr $ACC1
0e52 0f50 lris $AC1.M, #0x50
0e53 0080 0b00 lri $AR0, #0x0b00
0e55 0083 0d00 lri $AR3, #0x0d00
0e57 0098 7fff lri $AX0.L, #0x7fff
0e59 02bf 00eb call 0x00eb // one of the multiply loops
0e5b 8900 clr $ACC1
0e5c 0f50 lris $AC1.M, #0x50
0e5d 0080 0b00 lri $AR0, #0x0b00
0e5f 0083 0d60 lri $AR3, #0x0d60
0e61 0098 b820 lri $AX0.L, #0xb820
0e63 02bf 00eb call 0x00eb // one of the multiply loops
// Stereo mixer? (cont'd, other channel starts here?)
0e65 0080 0ca0 lri $AR0, #0x0ca0
0e67 0083 0b00 lri $AR3, #0x0b00
0e69 8900 clr $ACC1
0e6a 0f50 lris $AC1.M, #0x50
0e6b 0098 6784 lri $AX0.L, #0x6784
0e6d 02bf 00fa call 0x00fa // multiply loop
0e6f 0080 04e8 lri $AR0, #0x04e8
0e71 0082 04f4 lri $AR2, #0x04f4
0e73 0081 0b00 lri $AR1, #0x0b00
0e75 02bf 0ba4 call 0x0ba4 // complex multiply loop
0e77 8900 clr $ACC1
0e78 0f50 lris $AC1.M, #0x50
0e79 0080 0b00 lri $AR0, #0x0b00
0e7b 0083 0d00 lri $AR3, #0x0d00
0e7d 0098 47e0 lri $AX0.L, #0x47e0
0e7f 02bf 00eb call 0x00eb // one of the multiply loops
0e81 8900 clr $ACC1
0e82 0f50 lris $AC1.M, #0x50
0e83 0080 0b00 lri $AR0, #0x0b00
0e85 0083 0d60 lri $AR3, #0x0d60
0e87 0098 8001 lri $AX0.L, #0x8001
0e89 02bf 00eb call 0x00eb // one of the multiply loops
0e8b 02df ret
0e8c 0000 nop
0e8d 0000 nop
0e8e 0000 nop
0e8f 0000 nop