From d62635d4833a94fb5cf776f92c28490e84c11b45 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Sat, 20 Jun 2009 06:35:29 +0000 Subject: [PATCH] DSP_UC_Zelda.txt: Did a fresh disassembly, and transferred all the comments with a tricky little python program :-) git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3500 8ced0084-cf51-0410-be5f-012b33b47a6e --- docs/DSP/DSP_UC_Zelda.txt | 6172 ++++++++++++++++++------------------- 1 file changed, 3084 insertions(+), 3088 deletions(-) diff --git a/docs/DSP/DSP_UC_Zelda.txt b/docs/DSP/DSP_UC_Zelda.txt index 0bb019e729..e9b73b1cd3 100644 --- a/docs/DSP/DSP_UC_Zelda.txt +++ b/docs/DSP/DSP_UC_Zelda.txt @@ -1,3088 +1,3084 @@ -// Zelda UCode - CRC: 0x09CD143F - -// This is a disassembly done using an outdated disasm. Need to redisasm and transfer -// the comments. - -// 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 $AC0.M -0016 009f 1000 LRI $AC1.M, #0x1000 -0018 0080 0000 LRI $R00, #0x0000 -001a 005f LOOP $AC1.M -001b 1b1e SRRI @$R00, $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 $ACC1, #0x00ff -0038 00ff 0344 SR @0x0344, $AC1.M -003a 1479 LSR $ACC0, #0x39 -003b 0240 007e ANDI $ACC0, #0x007e -003d 00fe 0343 SR @0x0343, $AC0.M -003f 0200 0075 ADDI $ACC0, #0x0075 // offset of "JMP Table Opcodes" -0041 1c1e MRR $R00, $AC0.M -0042 170f JMPR $R00 // 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 S40 -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 $R08, $AC0.M -0061 1d3e MRR $R09, $AC0.M -0062 1d5e MRR $R10, $AC0.M -0063 1d7e MRR $R11, $AC0.M -0064 0092 00ff LRI $CR, #0x00ff -0066 02df RET - - -// ReadWholeMessage($R00) -0067 0090 0000 LRI $ACH0, #0x0000 -0069 0c00 LRIS $AC0.L, #0x00 -006a 0081 0358 LRI $R01, #0x0358 -006c 007e 0071 BLOOP $AC0.M, 0x0071 -006e 193e LRRI $AC0.M, @$R01 -006f 1b1e SRRI @$R00, $AC0.M -0070 193e LRRI $AC0.M, @$R01 -0071 1b1e SRRI @$R00, $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 $R00, #0x0380 -0097 0e04 LRIS $AC0.M, #0x04 -0098 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -009a 0081 0382 LRI $R01, #0x0382 -009c 009f 0000 LRI $AC1.M, #0x0000 -009e 0080 0280 LRI $R00, #0x0280 -00a0 02bf 0523 CALL 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len) -00a2 0081 0384 LRI $R01, #0x0384 -00a4 009f 0300 LRI $AC1.M, #0x0300 -00a6 0080 0020 LRI $R00, #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 $R00, #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 $R01, #0x034c -00c3 009f 0400 LRI $AC1.M, #0x0400 -00c5 0080 00c0 LRI $R00, #0x00c0 -00c7 02bf 0523 CALL 0x0523 // RAMtoDMEM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len) -00c9 02df RET - -// Copy something out. -00ca 0081 034c LRI $R01, #0x034c -00cc 009f 0400 LRI $AC1.M, #0x0400 -00ce 0080 0080 LRI $R00, #0x0080 -00d0 0081 034c LRI $R01, #0x034c -00d2 193e LRRI $AC0.M, @$R01 -00d3 193c LRRI $AC0.L, @$R01 -00d4 0098 0000 LRI $AX0.L, #0x0000 -00d6 7000 ADDAXL $AC0.M, $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, @$R00 -00db 191a LRRI $AX0.H, @$R00 -00dc 005f LOOP $AC1.M -00dd 64a0 MOVR.LS $AC0.M, $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 @$R03, $AC0.M -00df 1b7a SRRI @$R03, $AX0.H -00e0 02df RET - -// Decrypt???? (btw, wonder if LRRI disasm is broken). -00e1 191e LRRI $AC0.M, @$R00 -00e2 191a LRRI $AX0.H, @$R00 -00e3 007f 00e8 BLOOP $AC1.M, 0x00e8 -00e5 32b2 XORR.SL $AC0.M, $AX1.H : $AC0.M, $AX1.H -00e6 65a0 MOVR.LS $AC1.M, $AX0.H : $AX0.H, $AC0.M -00e7 33ba XORR.SLM $AC1.M, $AX1.H : $AC0.M, $AX1.H -00e8 64a1 MOVR.LS $AC0.M, $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, #0x3f -00ed 1c20 MRR $R01, $R00 -00ee 1c03 MRR $R00, $R03 -00ef 193a LRRI $AX0.H, @$R01 -00f0 9051 MUL.L $AX0.L, $AX0.H : $AX0.H, @$R01 -00f1 925b MULMVZ.L $AX0.L, $AX0.H, $AC0.M : $AX1.H, @$R03 -00f2 007f 00f7 BLOOP $AC1.M, 0x00f7 -00f4 4651 ADDR.L $AC0.M, $AX1.H : $AX0.H, @$R01 -00f5 92b2 MULMVZ.SL $AX0.L, $AX0.H, $AC0.M : $AC0.M, $AX1.H -00f6 4651 ADDR.L $AC0.M, $AX1.H : $AX0.H, @$R01 -00f7 92b2 MULMVZ.SL $AX0.L, $AX0.H, $AC0.M : $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, @$R00 -00fc 9050 MUL.L $AX0.L, $AX0.H : $AX0.H, @$R00 -00fd 9250 MULMVZ.L $AX0.L, $AX0.H, $AC0.M : $AX0.H, @$R00 -00fe 005f LOOP $AC1.M -00ff 92a0 MULMVZ.LS $AX0.L, $AX0.H, $AC0.M : $AX0.H, $AC0.M -0100 8b00 M0 -0101 02df RET - -// Clear some memory (called by op2) -0102 8100 CLR $AC0.M -0103 8900 CLR $AC1.M -0104 0e50 LRIS $AC0.M, #0x50 -0105 0080 0d00 LRI $R00, #0x0d00 -0107 005e LOOP $AC0.M -0108 1b1f SRRI @$R00, $AC1.M -0109 0080 0d60 LRI $R00, #0x0d60 -010b 005e LOOP $AC0.M -010c 1b1f SRRI @$R00, $AC1.M -010d 02bf 0e3f CALL 0x0e3f -010f 8100 CLR $AC0.M -0110 8900 CLR $AC1.M -0111 0e50 LRIS $AC0.M, #0x50 -0112 0080 0ca0 LRI $R00, #0x0ca0 -0114 005e LOOP $AC0.M -0115 1b1f SRRI @$R00, $AC1.M -0116 0080 0f40 LRI $R00, #0x0f40 -0118 005e LOOP $AC0.M -0119 1b1f SRRI @$R00, $AC1.M -011a 0080 0fa0 LRI $R00, #0x0fa0 -011c 005e LOOP $AC0.M -011d 1b1f SRRI @$R00, $AC1.M -011e 0080 0a00 LRI $R00, #0x0a00 -0120 005e LOOP $AC0.M -0121 1b1f SRRI @$R00, $AC1.M -0122 0080 09a0 LRI $R00, #0x09a0 -0124 005e LOOP $AC0.M -0125 1b1f SRRI @$R00, $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 $R00, @0x03a0 -0129 191a LRRI $AX0.H, @$R00 -012a 00df 03a1 LR $AC1.M, @0x03a1 -012c 009b 00a0 LRI $AX1.H, #0x00a0 -012e 0081 0393 LRI $R01, #0x0393 -0130 18bc LRRD $AC0.L, @$R01 -0131 b871 MULX.L $AX0.H, $AX1.H : $AC0.M, @$R01 -0132 bc00 MULXAC $AX0.H, $AX1.H, $AC0.M -0133 0080 0050 LRI $R00, #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 ANDCF $AC0.M, #0x0001 -013c 029d 0145 JNZ 0x0145 -013e 0080 0398 LRI $R00, #0x0398 -0140 0e08 LRIS $AC0.M, #0x08 -0141 00c1 03a1 LR $R01, @0x03a1 -0143 02bf 0b2e CALL 0x0b2e -0145 0f50 LRIS $AC1.M, #0x50 -0146 00c0 03a1 LR $R00, @0x03a1 -0148 00da 0394 LR $AX0.H, @0x0394 -//.. -014a 8600 TSTAXH $AX0.H -014b 0295 0152 JEQ 0x0152 -014d 1c7a MRR $R03, $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 $R00, @0x03a1 -0155 00da 0396 LR $AX0.H, @0x0396 -//.. -0157 8600 TSTAXH $AX0.H -0158 0295 015f JEQ 0x015f -015a 1c7a MRR $R03, $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 ANDCF $AC0.M, #0x0002 -0163 02dd RETNZ -//.. -0164 0080 0398 LRI $R00, #0x0398 -0166 0e08 LRIS $AC0.M, #0x08 -0167 00c1 03a1 LR $R01, @0x03a1 -0169 02bf 0b2e CALL 0x0b2e -016b 02df RET - -// Yet another mixer? this one does both 0x50 and 0x28 loops. -016c 8900 CLR $AC1.M -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 $R00, @0x03a2 -017d 0083 0390 LRI $R03, #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 JEQ 0x0191 -0187 00df 03a1 LR $AC1.M, @0x03a1 -0189 1c7f MRR $R03, $AC1.M -018a 0550 ADDIS $ACC1, #0x50 -018b 1c1f MRR $R00, $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.Ma -// end of BLOOPI 0179 -01a0 0f50 LRIS $AC1.M, #0x50 -01a1 0080 0c00 LRI $R00, #0x0c00 -01a3 0083 0e80 LRI $R03, #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 $R00, #0x0c00 -01ac 0083 0ee0 LRI $R03, #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 $R00, #0x0c78 -01b5 0083 0e80 LRI $R03, #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 $R00, #0x0c78 -01be 0083 0ee0 LRI $R03, #0x0ee0 -01c0 0098 7fff LRI $AX0.L, #0x7fff -01c2 02bf 00eb CALL 0x00eb // one of the multiply loops -01c4 8100 CLR $AC0.M -01c5 8900 CLR $AC1.M -01c6 0e50 LRIS $AC0.M, #0x50 // bufsize. looks like buf clearing -01c7 0080 0c00 LRI $R00, #0x0c00 -01c9 005e LOOP $AC0.M -01ca 1b1f SRRI @$R00, $AC1.M -01cb 0080 0c50 LRI $R00, #0x0c50 -01cd 005e LOOP $AC0.M -01ce 1b1f SRRI @$R00, $AC1.M -01cf 02df RET - - - -01d0 00c0 03a0 LR $R00, @0x03a0 -01d2 181a LRR $AX0.H, @$R00 -01d3 8100 CLR $AC0.M -01d4 181e LRR $AC0.M, @$R00 -01d5 00db 0391 LR $AX1.H, @0x0391 -01d7 7400 INCM $AC0.M -01d8 d100 CMPAXH $AC1.M, $AX0.H -01d9 0270 IF_0 -01da 8100 CLR $AC0.M -01db 1b1e SRRI @$R00, $AC0.M -01dc 00df 03a1 LR $AC1.M, @0x03a1 -01de 009b 00a0 LRI $AX1.H, #0x00a0 -01e0 0081 0393 LRI $R01, #0x0393 -01e2 18bc LRRD $AC0.L, @$R01 -01e3 b871 MULX.L $AX0.H, $AX1.H : $AC0.M, @$R01 -01e4 bc00 MULXAC $AX0.H, $AX1.H, $AC0.M -01e5 0080 0050 LRI $R00, #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 $AC1.M -01eb 0f28 LRIS $AC1.M, #0x28 -01ec 0080 0c50 LRI $R00, #0x0c50 -01ee 0083 0ea8 LRI $R03, #0x0ea8 -01f0 0098 b820 LRI $AX0.L, #0xb820 -01f2 02bf 00eb CALL 0x00eb // one of the multiply loops -01f4 8900 CLR $AC1.M -01f5 0f28 LRIS $AC1.M, #0x28 -01f6 0080 0c50 LRI $R00, #0x0c50 -01f8 0083 0f08 LRI $R03, #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 $R00, @0x03a2 -020e 0083 0390 LRI $R03, #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 JEQ 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 $R01, #0x0386 -022c 009f 03a8 LRI $AC1.M, #0x03a8 -022e 0080 0040 LRI $R00, #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, @$R00 -0234 189c LRRD $AC0.L, @$R00 -0235 4800 ADDAX $AC0.M, $AX0.L -0236 1b1e SRRI @$R00, $AC0.M -0237 1b1c SRRI @$R00, $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 $AC0.M -023a 8900 CLR $AC1.M -023b 00df 0354 LR $AC1.M, @0x0354 -023d 00de 034e LR $AC0.M, @0x034e -023f 8200 CMP -0240 0293 0239 JX3 0x0239 -0242 02df RET - -// Opcode_02() - SyncFrame -0243 0080 0388 LRI $R00, #0x0388 -0245 0081 0067 LRI $R01, #0x0067 -0247 0e02 LRIS $AC0.M, #0x02 -0248 173f CALLR $R01 // 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 $AC0.M -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 $AC0.M -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 $AC0.M -0271 8900 CLR $AC1.M -0272 00de 0354 LR $AC0.M, @0x0354 // 0x354 is obviously interesting. -0274 147c LSR $ACC0, #0x3c -0275 0200 04fc ADDI $ACC0, #0x04fc -0277 1c1e MRR $R00, $AC0.M -0278 181f LRR $AC1.M, @$R00 // Table lookup from DRAM @ 0x04fc. Something must have initialized it. -0279 00de 0354 LR $AC0.M, @0x0354 -027b 0240 000f ANDI $ACC0, #0x000f -027d 3d80 ANDC.LS $AC1.M : $AX0.L, $AC0.M -027e 03c0 8000 ANDF $AC1.M, #0x8000 -0280 029c 03bc JZR 0x03bc -0282 00d8 0354 LR $AX0.L, @0x0354 -0284 009a 0180 LRI $AX0.H, #0x0180 -0286 8100 CLR $AC0.M -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, $AC0.M -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 JEQ 0x03bc -0298 00da 0401 LR $AX0.H, @0x0401 -029a 8600 TSTAXH $AX0.H -029b 0294 03bc JNE 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 JNE 0x0dff -02a6 8100 CLR $AC0.M -02a7 00de 0480 LR $AC0.M, @0x0480 -02a9 0609 CMPIS $ACC0, #0x09 -02aa 0295 02bd JEQ 0x02bd -02ac 0605 CMPIS $ACC0, #0x05 -02ad 0295 02bd JEQ 0x02bd -02af 0608 CMPIS $ACC0, #0x08 -02b0 0295 098f JEQ 0x098f -02b2 0610 CMPIS $ACC0, #0x10 -02b3 0295 0a14 JEQ 0x0a14 -02b5 0620 CMPIS $ACC0, #0x20 -02b6 0295 0a9a JEQ 0x0a9a -02b8 0621 CMPIS $ACC0, #0x21 -02b9 0295 0aa2 JEQ 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 $AC0.M -02c0 8900 CLR $AC1.M -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, $AC0.M -02c7 1404 LSL $ACC0, #0x04 -02c8 8c00 CLR15 -02c9 1ffe MRR $AC1.M, $AC0.M -02ca 0083 0580 LRI $R03, #0x0580 -02cc 02bf 073d CALL 0x073d -02ce 029f 02d0 JMP 0x02d0 - - -02d0 0080 0580 LRI $R00, #0x0580 -02d2 0081 0520 LRI $R01, #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 JEQ 0x02e1 -02dd 0080 0520 LRI $R00, #0x0520 -02df 02bf 0c84 CALL 0x0c84 -02e1 009e 0520 LRI $AC0.M, #0x0520 -02e3 00fe 038f SR @0x038f, $AC0.M -02e5 8900 CLR $AC1.M -02e6 00df 0484 LR $AC1.M, @0x0484 -02e8 0340 001f ANDI $ACC1, #0x001f -02ea b900 TST $AC1.M -02eb 0295 0311 JEQ 0x0311 -02ed 00de 038f LR $AC0.M, @0x038f -02ef 5c00 SUB $AC0.M, $AC1.M -02f0 00fe 038f SR @0x038f, $AC0.M -02f2 1c7e MRR $R03, $AC0.M -02f3 0080 0440 LRI $R00, #0x0440 -02f5 05fe ADDIS $ACC1, #0xfe -02f6 02bf 00da CALL 0x00da // CopyMemory(LEN=$AC1.M, *R00=SRC, *R03=DEST) -02f8 0080 0490 LRI $R00, #0x0490 -02fa 00c1 038f LR $R01, @0x038f -02fc 8900 CLR $AC1.M -02fd 00df 0484 LR $AC1.M, @0x0484 -02ff 0340 001f ANDI $ACC1, #0x001f -0301 02bf 0b4d CALL 0x0b4d -0303 00de 038f LR $AC0.M, @0x038f -0305 0450 ADDIS $ACC0, #0x50 -0306 1c1e MRR $R00, $AC0.M -0307 0083 0440 LRI $R03, #0x0440 -0309 8900 CLR $AC1.M -030a 00df 0484 LR $AC1.M, @0x0484 -030c 0340 001f ANDI $ACC1, #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 $ACC0, #0x0020 -0315 0295 0333 JEQ 0x0333 -0317 0080 04a4 LRI $R00, #0x04a4 -0319 00c1 038f LR $R01, @0x038f -031b 0082 0454 LRI $R02, #0x0454 -031d 0083 04a7 LRI $R03, #0x04a7 -031f 18fa LRRD $AX0.H, @$R03 -0320 8600 TSTAXH $AX0.H -0321 0294 0331 JNE 0x0331 -0323 18fa LRRD $AX0.H, @$R03 -0324 8600 TSTAXH $AX0.H -0325 0294 0331 JNE 0x0331 -0327 18fa LRRD $AX0.H, @$R03 -0328 8600 TSTAXH $AX0.H -0329 0294 0331 JNE 0x0331 -032b 8100 CLR $AC0.M -032c 18fe LRRD $AC0.M, @$R03 -032d 0280 7fff CMPI $AC0.M, #0x7fff -032f 0295 0333 JEQ 0x0333 -0331 02bf 0b68 CALL 0x0b68 -0333 8100 CLR $AC0.M -0334 00de 042c LR $AC0.M, @0x042c -0336 b100 TST $AC0.M -0337 0295 033d JEQ 0x033d -0339 02bf 0cd3 CALL 0x0cd3 -033b 029f 03b2 JMP 0x03b2 -033d 8100 CLR $AC0.M -033e 1c9e MRR $R04, $AC0.M -033f 1cde MRR $R06, $AC0.M -0340 7400 INCM $AC0.M -0341 1cfe MRR $R07, $AC0.M -0342 8100 CLR $AC0.M -0343 00de 0407 LR $AC0.M, @0x0407 -0345 b100 TST $AC0.M -0346 0295 0355 JEQ 0x0355 -0348 00c3 038f LR $R03, @0x038f -034a 0007 DAR $R03 -034b 0080 0477 LRI $R00, #0x0477 -034d 0084 ffff LRI $R04, #0xffff -034f 0087 ffff LRI $R07, #0xffff -0351 199a LRRN $AX0.H, @$R00 -0352 6554 MOVR.LN $AC1.M, $AX0.H : $AX0.H, @$R00 -0353 005e LOOP $AC0.M -0354 65ad MOVR.LSNM $AC1.M, $AX0.H : $AX0.H, $AC1.M -0355 00da 0485 LR $AX0.H, @0x0485 -0357 8600 TSTAXH $AX0.H -0358 0295 036b JEQ 0x036b -035a 8900 CLR $AC1.M -035b 0086 0005 LRI $R06, #0x0005 -035d 0082 040a LRI $R02, #0x040a -035f 1106 0363 BLOOPI #0x06, 0x0363 -0361 18de LRRD $AC0.M, @$R02 -0362 147f LSR $ACC0, #0x3f -0363 4d36 ADD.SN $AC1.M, $AC0.M : @$R02, $AC0.M -0364 b900 TST $AC1.M -0365 0294 036b JNE 0x036b -0367 009a 0001 LRI $AX0.H, #0x0001 -0369 00fa 0401 SR @0x0401, $AX0.H -036b 8f00 S16 -036c 0086 0002 LRI $R06, #0x0002 -036e 0082 0408 LRI $R02, #0x0408 -0370 1106 039b BLOOPI #0x06, 0x039b -0372 8100 CLR $AC0.M -0373 195e LRRI $AC0.M, @$R02 -0374 1200 SBCLR #0x00 -0375 b100 TST $AC0.M -0376 0275 IF_Q -0377 1300 SBSET #0x00 -0378 1c7e MRR $R03, $AC0.M -0379 195e LRRI $AC0.M, @$R02 -037a 195f LRRI $AC1.M, @$R02 -037b 5c00 SUB $AC0.M, $AC1.M -037c 14fb ASR $ACC0, #0x7b -037d 1f5e MRR $AX0.H, $AC0.M -037e 1f1c MRR $AX0.L, $AC0.L -037f 185e LRR $AC0.M, @$R02 -0380 0240 00ff ANDI $ACC0, #0x00ff -0382 1f7e MRR $AX1.H, $AC0.M -0383 185e LRR $AC0.M, @$R02 -0384 1478 LSR $ACC0, #0x38 -0385 009c 0000 LRI $AC0.L, #0x0000 -0387 d100 CMPAXH $AC1.M, $AX0.H -0388 0295 0390 JEQ 0x0390 -038a 185e LRR $AC0.M, @$R02 -038b 0272 IF_2 -038c 7400 INCM $AC0.M -038d 0271 IF_1 -038e 7800 DECM $AC0.M -038f 1a5e SRR @$R02, $AC0.M -0390 0006 DAR $R02 -0391 00de 038f LR $AC0.M, @0x038f -0393 5600 SUBR $AC0.M, $AX1.H -0394 029d 0399 JNZ 0x0399 -0396 1c1e MRR $R00, $AC0.M -0397 02bf 0ca9 CALL 0x0ca9 -0399 0000 NOP -039a 1b5f SRRI @$R02, $AC1.M -039b 000a IAR $R02 -039c 8e00 S40 -039d 8100 CLR $AC0.M -039e 00de 0407 LR $AC0.M, @0x0407 -03a0 b100 TST $AC0.M -03a1 0295 03b2 JEQ 0x03b2 -03a3 00c3 038f LR $R03, @0x038f -03a5 0087 004f LRI $R07, #0x004f // does this have something to do with the common 0x50 buffer size? -03a7 001f CW 0x001f ; *** UNKNOWN OPCODE *** -03a8 0080 0477 LRI $R00, #0x0477 -03aa 0084 ffff LRI $R04, #0xffff -03ac 0087 ffff LRI $R07, #0xffff -03ae 19fa LRRN $AX0.H, @$R03 -03af 6557 MOVR.LN $AC1.M, $AX0.H : $AX0.H, @$R03 -03b0 005e LOOP $AC0.M -03b1 65af MOVR.SLNM $AC1.M, $AX0.H : $AC1.M, $AX0.H -03b2 00da 0406 LR $AX0.H, @0x0406 -03b4 8600 TSTAXH $AX0.H -03b5 0294 03ba JNE 0x03ba -03b7 8100 CLR $AC0.M -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 $ACC0, #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 $R00, #0x09a0 -03da 0083 0d00 LRI $R03, #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 $R00, #0x09a0 -03e3 0083 0d60 LRI $R03, #0x0d60 -03e5 0f50 LRIS $AC1.M, #0x50 -03e6 02bf 00eb CALL 0x00eb // one of the multiply loops -03e8 0083 0d00 LRI $R03, #0x0d00 -03ea 02bf 0cc1 CALL 0x0cc1 -03ec 0081 0388 LRI $R01, #0x0388 -03ee 009f 0d00 LRI $AC1.M, #0x0d00 -03f0 0080 0050 LRI $R00, #0x0050 -03f2 02bf 0530 CALL 0x0530 // DMEMtoRAM(DMEM=$AC1.M, *R01=MEMADDR, R00=Len) -03f4 0080 0fa0 LRI $R00, #0x0fa0 -03f6 0083 0d60 LRI $R03, #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 $R03, #0x0d60 -03ff 02bf 0cc1 CALL 0x0cc1 -0401 0081 038a LRI $R01, #0x038a -0403 009f 0d60 LRI $AC1.M, #0x0d60 -0405 0080 0050 LRI $R00, #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 $R00, #0x0388 -040f 02bf 0233 CALL 0x0233 -0411 0080 038a LRI $R00, #0x038a -0413 02bf 0233 CALL 0x0233 -0415 02bf 01ea CALL 0x01ea -0417 0000 NOP -0418 0000 NOP -0419 0080 002d LRI $R00, #0x002d -041b 029f 0603 JMP 0x0603 - - - -// Opcode_07() -041d 0080 0346 LRI $R00, #0x0346 -041f 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0421 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0423 0081 0346 LRI $R01, #0x0346 -0425 193e LRRI $AC0.M, @$R01 -0426 193c LRRI $AC0.L, @$R01 -0427 009f 0400 LRI $AC1.M, #0x0400 -0429 00c0 0345 LR $R00, @0x0345 -042b 02bf 0525 CALL 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -042d 0081 0348 LRI $R01, #0x0348 -042f 193e LRRI $AC0.M, @$R01 -0430 193c LRRI $AC0.L, @$R01 -0431 009f 0800 LRI $AC1.M, #0x0800 -0433 00c0 0345 LR $R00, @0x0345 -0435 02bf 0525 CALL 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -0437 0081 0346 LRI $R01, #0x0346 -0439 193e LRRI $AC0.M, @$R01 -043a 193c LRRI $AC0.L, @$R01 -043b 009f 0800 LRI $AC1.M, #0x0800 -043d 00c0 0345 LR $R00, @0x0345 -043f 02bf 0532 CALL 0x0532 // DMEMtoRAM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -0441 0081 0348 LRI $R01, #0x0348 -0443 193e LRRI $AC0.M, @$R01 -0444 193c LRRI $AC0.L, @$R01 -0445 009f 0400 LRI $AC1.M, #0x0400 -0447 00c0 0345 LR $R00, @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 $R00, #0x0346 -044f 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0451 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0453 0081 0346 LRI $R01, #0x0346 -0455 193e LRRI $AC0.M, @$R01 -0456 193c LRRI $AC0.L, @$R01 -0457 009f 0400 LRI $AC1.M, #0x0400 -0459 00c0 0345 LR $R00, @0x0345 -045b 02bf 0525 CALL 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -045d 0081 0348 LRI $R01, #0x0348 -045f 193e LRRI $AC0.M, @$R01 -0460 193c LRRI $AC0.L, @$R01 -0461 009f 0400 LRI $AC1.M, #0x0400 -0463 00c0 0345 LR $R00, @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 $R00, #0x0346 -046b 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -046d 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -046f 0081 0346 LRI $R01, #0x0346 -0471 193e LRRI $AC0.M, @$R01 -0472 193c LRRI $AC0.L, @$R01 -0473 009f 0400 LRI $AC1.M, #0x0400 -0475 00c0 0345 LR $R00, @0x0345 -0477 02bf 0555 CALL 0x0555 -0479 0081 0348 LRI $R01, #0x0348 -047b 193e LRRI $AC0.M, @$R01 -047c 193c LRRI $AC0.L, @$R01 -047d 009f 0400 LRI $AC1.M, #0x0400 -047f 00c0 0345 LR $R00, @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 $R00, #0x0346 -0487 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0489 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -048b 0081 0346 LRI $R01, #0x0346 -048d 193e LRRI $AC0.M, @$R01 -048e 193c LRRI $AC0.L, @$R01 -048f 009f 0400 LRI $AC1.M, #0x0400 -0491 00c0 0344 LR $R00, @0x0344 -0493 02bf 0525 CALL 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -0495 0081 0348 LRI $R01, #0x0348 -0497 193e LRRI $AC0.M, @$R01 -0498 193c LRRI $AC0.L, @$R01 -0499 009f 0800 LRI $AC1.M, #0x0800 -049b 00c0 0344 LR $R00, @0x0344 -049d 02bf 0525 CALL 0x0525 // RAMtoDMEM(DMEM=$AC1.M, AC0=MEMADDR, R00=Len) -049f 0080 0400 LRI $R00, #0x0400 -04a1 0083 0800 LRI $R03, #0x0800 -04a3 0084 0000 LRI $R04, #0x0000 -04a5 00da 0345 LR $AX0.H, @0x0345 -04a7 00df 0344 LR $AC1.M, @0x0344 -04a9 8f00 S16 -04aa 197b LRRI $AX1.H, @$R03 -04ab b800 MULX $AX0.H, $AX1.H -04ac 197b LRRI $AX1.H, @$R03 -04ad 007f 04b2 BLOOP $AC1.M, 0x04b2 -04af 199e LRRN $AC0.M, @$R00 -04b0 bc00 MULXAC $AX0.H, $AX1.H, $AC0.M -04b1 80b2 NX.SL : $AC0.M, $AX1.H -04b2 0000 NOP -04b3 8e00 S40 -04b4 0081 0346 LRI $R01, #0x0346 -04b6 193e LRRI $AC0.M, @$R01 -04b7 193c LRRI $AC0.L, @$R01 -04b8 009f 0400 LRI $AC1.M, #0x0400 -04ba 00c0 0344 LR $R00, @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 $AC0.M -04c3 0080 0b00 LRI $R00, #0x0b00 -04c5 10ff LOOPI #0xff -04c6 1b1e SRRI @$R00, $AC0.M -04c7 1b1e SRRI @$R00, $AC0.M -04c8 8100 CLR $AC0.M -04c9 009f 0b00 LRI $AC1.M, #0x0b00 -04cb 0080 0100 LRI $R00, #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 $AC0.M, $AC1.M -04d7 1c1e MRR $R00, $AC0.M -04d8 181e LRR $AC0.M, @$R00 -04d9 7400 INCM $AC0.M -04da 1a1e SRR @$R00, $AC0.M -04db 02bf 04ea CALL 0x04ea -04dd 8100 CLR $AC0.M -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 $AC0.M -04e4 009f 0b00 LRI $AC1.M, #0x0b00 -04e6 0080 0040 LRI $R00, #0x0040 -04e8 029f 0555 JMP 0x0555 ///oookay.. - -// -04ea 8100 CLR $AC0.M -04eb 009f 0b00 LRI $AC1.M, #0x0b00 -04ed 0080 0050 LRI $R00, #0x0050 -04ef 029f 0573 JMP 0x0573 - -// -04f1 02bf 04e1 CALL 0x04e1 -04f3 8900 CLR $AC1.M -04f4 0080 04fc LRI $R00, #0x04fc -04f6 8100 CLR $AC0.M -04f7 1104 0505 BLOOPI #0x04, 0x0505 -04f9 0000 NOP -04fa 191e LRRI $AC0.M, @$R00 -04fb 0000 NOP -04fc 1110 0503 BLOOPI #0x10, 0x0503 -04fe 02c0 0001 ANDF $AC0.M, #0x0001 -0500 027d IF_Z -0501 7500 INCM $AC1.M -0502 147f LSR $ACC0, #0x3f // 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 $AC0.M, $AC1.M -0519 1c1e MRR $R00, $AC0.M -051a 181e LRR $AC0.M, @$R00 -051b 7400 INCM $AC0.M -051c 1a1e SRR @$R00, $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, @$R01 -0524 193c LRRI $AC0.L, @$R01 -// 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, $R00 -052b 1501 LSL $ACC1, #0x01 -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, @$R01 -0531 193c LRRI $AC0.L, @$R01 -// 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 ANDCF $AC0.M, #0x0004 -0539 029c 0536 JZR 0x0536 -053b 02df RET - -// Setup DMA conroller and do a transfer. Should figure out exactly how. -053c 193e LRRI $AC0.M, @$R01 -053d 193c LRRI $AC0.L, @$R01 -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, $R00 -0548 1501 LSL $ACC1, #0x01 -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 ANDCF $AC0.M, #0x0004 -0550 029c 054c JZR 0x054c -0552 02df RET - - -0553 193e LRRI $AC0.M, @$R01 -0554 193c LRRI $AC0.L, @$R01 -0555 0240 7fff ANDI $ACC0, #0x7fff -0557 02bf 0561 CALL 0x0561 // SetupAccelerator() -0559 007a 055f BLOOP $AX0.H, 0x055f -055b 26d3 LRS $AC0.M, @0xffd3 -055c 1b3e SRRI @$R01, $AC0.M -055d 0000 NOP -055e 0000 NOP -055f 0000 NOP -0560 02df RET - -// SetupAccelerator() -0561 1c3f MRR $R01, $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, #0x3f -056d 2ed8 SRS @ACCAH, $AC0.M -056e 2cd9 SRS @ACCAL, $AC0.L -056f 1f40 MRR $AX0.H, $R00 -0570 02df RET - -// AC1.M is input which also falls into 0x0561. -0571 193e LRRI $AC0.M, @$R01 -0572 193c LRRI $AC0.L, @$R01 -0573 0090 0001 LRI $ACH0, #0x0001 -0575 02bf 0561 CALL 0x0561 // SetupAccelerator() -0577 007a 057e BLOOP $AX0.H, 0x057e -0579 193e LRRI $AC0.M, @$R01 -057a 2ed3 SRS @0xffd3, $AC0.M -057b 0000 NOP -057c 0000 NOP -057d 0000 NOP -057e 0000 NOP -057f 02df RET - - -// Opcode_04() -0580 0080 0346 LRI $R00, #0x0346 -0582 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0584 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0586 0081 0346 LRI $R01, #0x0346 -0588 00df 0349 LR $AC1.M, @0x0349 -058a 0340 ffff ANDI $ACC1, #0xffff -058c 00c0 0345 LR $R00, @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 $R00, #0x0346 -0594 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0596 02bf 0067 CALL 0x0067 // ReadWholeMessage($R00) -0598 0081 0346 LRI $R01, #0x0346 -059a 00df 0349 LR $AC1.M, @0x0349 -059c 0340 ffff ANDI $ACC1, #0xffff -059e 00c0 0345 LR $R00, @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 $ACC1, #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 S40 -05ba 00f0 03fd SR @0x03fd, $ACH0 -05bc 00fc 03ff SR @0x03ff, $AC0.L -05be f400 LSR16 $AC0.M -05bf 00fc 03fe SR @0x03fe, $AC0.L -05c1 00fa 03fa SR @0x03fa, $AX0.H -05c3 8100 CLR $AC0.M -05c4 00de fffe LR $AC0.M, @CMBH // Read mailbox -05c6 02c0 8000 ANDF $AC0.M, #0x8000 -05c8 029c 06b9 JZR 0x06b9 -05ca 00da ffff LR $AX0.H, @CMBL -05cc 8600 TSTAXH $AX0.H -05cd 0294 0692 JNE 0x0692 -05cf 00de fffe LR $AC0.M, @CMBH -05d1 02c0 8000 ANDF $AC0.M, #0x8000 -05d3 029c 05cf JZR 0x05cf -05d5 0240 000f ANDI $ACC0, #0x000f -05d7 1f5e MRR $AX0.H, $AC0.M -05d8 7400 INCM $AC0.M -05d9 0c00 LRIS $AC0.L, #0x00 -05da 1404 LSL $ACC0, #0x04 -05db 00fe 034e SR @0x034e, $AC0.M -05dd 1fda MRR $AC0.M, $AX0.H -05de 1f40 MRR $AX0.H, $R00 -05df 0200 04fc ADDI $ACC0, #0x04fc -05e1 1c1e MRR $R00, $AC0.M -05e2 00de ffff LR $AC0.M, @CMBL -05e4 1a1e SRR @$R00, $AC0.M -05e5 1c1a MRR $R00, $AX0.H -05e6 00de 03fe LR $AC0.M, @0x03fe -05e8 00dc 03ff LR $AC0.L, @0x03ff -05ea 00d0 03fd LR $ACH0, @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, $R00 -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, $R00 -0605 009e 0005 LRI $AC0.M, #0x0005 -0607 02bf 066a CALL 0x066a // SendMessageViaDSPMailBox_DCD1(AC0.M) -0609 8e00 S40 -060a 8100 CLR $AC0.M -060b 8900 CLR $AC1.M -060c 02bf 065e CALL 0x065e -060e 27ff LRS $AC1.M, @CMBL -060f 009e 05ff LRI $AC0.M, #0x05ff -0611 4c00 ADD $AC0.M, $AC1.M -0612 1c7e MRR $R03, $AC0.M -0613 0313 ILRR $AC1.M, @$R03 // Jump table lookup. -0614 1c7f MRR $R03, $AC1.M -0615 176f JMPR $R03 -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 $AC0.M -061d 8900 CLR $AC1.M -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 $AC0.M -062e 8900 CLR $AC1.M -062f 02bf 065e CALL 0x065e // wait for cpu mailbox -0631 24ff LRS $AC0.L, @CMBL -0632 1c9e MRR $R04, $AC0.M -0633 1cbc MRR $R05, $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 $R06, $AC1.M -063b 1cfd MRR $R07, $AC1.L -063c 8100 CLR $AC0.M -063d 02bf 065e CALL 0x065e // wait for cpu mailbox -063f 26ff LRS $AC0.M, @CMBL -0640 1c1e MRR $R00, $AC0.M -0641 8900 CLR $AC1.M -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 ANDCF $AC0.M, #0x0004 -064f 029c 064c JZR 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 $R00, @0x03f9 -065d 170f JMPR $R00 - -// Wait for CPU mailbox, trash ACC0. -065e 26fe LRS $AC0.M, @CMBH -065f 02c0 8000 ANDF $AC0.M, #0x8000 -0661 029c 065e JZR 0x065e -0663 02df RET - -// Wait for CPU mailbox, trash ACC1. -0664 27fe LRS $AC1.M, @CMBH -0665 03c0 8000 ANDF $AC1.M, #0x8000 -0667 029c 0664 JZR 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 ANDF $AC0.M, #0x8000 -067f 029d 067c JNZ 0x067c -0681 02df RET - -// WaitForEmptyDSPMailBox_ovAC1.M() -0682 27fc LRS $AC1.M, @DMBH -0683 03c0 8000 ANDF $AC1.M, #0x8000 -0685 029d 0682 JNZ 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, $R00 -0694 00e8 03fc SR @0x03fc, $R08 -0696 00c0 0350 LR $R00, @0x0350 -0698 0088 002f LRI $R08, #0x002f -069a 1b1a SRRI @$R00, $AX0.H -069b 00de fffe LR $AC0.M, @CMBH -069d 02c0 8000 ANDF $AC0.M, #0x8000 -069f 029c 069b JZR 0x069b -06a1 00dc ffff LR $AC0.L, @CMBL -06a3 1b1e SRRI @$R00, $AC0.M -06a4 1b1c SRRI @$R00, $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 JNE 0x069b -06ab 8100 CLR $AC0.M -06ac 00de 0352 LR $AC0.M, @0x0352 -06ae 7400 INCM $AC0.M -06af 00fe 0352 SR @0x0352, $AC0.M -06b1 00e0 0350 SR @0x0350, $R00 -06b3 00c0 03fb LR $R00, @0x03fb -06b5 00c8 03fc LR $R08, @0x03fc -06b7 029f 05e6 JMP 0x05e6 -06b9 00e0 03fb SR @0x03fb, $R00 -06bb 00e8 03fc SR @0x03fc, $R08 -06bd 00c0 0350 LR $R00, @0x0350 -06bf 0088 002f LRI $R08, #0x002f -06c1 0a00 LRIS $AX0.H, #0x00 -06c2 1b1a SRRI @$R00, $AX0.H -06c3 029f 06ab JMP 0x06ab - - -// MessageLoop() -06c5 00c0 0351 LR $R00, @0x0351 -06c7 0088 002f LRI $R08, #0x002f - -06c9 00da 0352 LR $AX0.H, @0x0352 -06cb 8600 TSTAXH $AX0.H -06cc 0295 06ed JEQ 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 $R01, #0x0356 -06d8 191e LRRI $AC0.M, @$R00 -06d9 02c0 8000 ANDF $AC0.M, #0x8000 -06db 029d 06f1 JNZ 0x06f1 -06dd 1f5e MRR $AX0.H, $AC0.M -06de 8600 TSTAXH $AX0.H -06df 0295 06f5 JEQ 0x06f5 -06e1 007a 06e6 BLOOP $AX0.H, 0x06e6 -06e3 191e LRRI $AC0.M, @$R00 -06e4 1b3e SRRI @$R01, $AC0.M -06e5 191e LRRI $AC0.M, @$R00 -06e6 1b3e SRRI @$R01, $AC0.M -06e7 00e0 0351 SR @0x0351, $R00 -06e9 0088 ffff LRI $R08, #0xffff -06eb 029f 002f JMP 0x002f // Command handler. - -06ed 0088 ffff LRI $R08, #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, $R00 -06f3 029f 06c9 JMP 0x06c9 - -// Default command, jump back to MessageLoop? -06f5 0080 06c5 LRI $R00, #0x06c5 -06f7 029f 05f0 JMP 0x05f0 // StopUCode() - - -// Tests the value at M(0x0032) -06f9 8100 CLR $AC0.M -06fa 0e10 LRIS $AC0.M, #0x10 -06fb 2232 LRS $AX0.H, @0x0032 -06fc 8600 TSTAXH $AX0.H -06fd 02d5 RETEQ -06fe 5400 SUBR $AC0.M, $AX0.H -06ff 0200 0458 ADDI $ACC0, #0x0458 -0701 1c1e MRR $R00, $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, @$R00 -0706 0291 070c JX1 0x070c -0708 191a LRRI $AX0.H, @$R00 -0709 0058 LOOP $AX0.L -070a 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -070b 6433 MOVR.S $AC0.M, $AX0.H : @$R03, $AC0.M -070c 1b7e SRRI @$R03, $AC0.M -070d 02df RET - - -// M(0x0032) must be important... -070e 02bf 06f9 CALL 0x06f9 -0710 8100 CLR $AC0.M -0711 2632 LRS $AC0.M, @0x0032 -0712 5c00 SUB $AC0.M, $AC1.M -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 $AC0.M -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 $AC0.M -072a 2689 LRS $AC0.M, @0xff89 -072b 0240 000f ANDI $ACC0, #0x000f -072d 1f5e MRR $AX0.H, $AC0.M -072e 8100 CLR $AC0.M -072f 0e10 LRIS $AC0.M, #0x10 -0730 5400 SUBR $AC0.M, $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 $AC0.M, $AX0.L -0737 0a00 LRIS $AX0.H, #0x00 -0738 2032 LRS $AX0.L, @0x0032 -0739 5800 SUBAX $AC0.M, $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 $AC0.M -0740 2604 LRS $AC0.M, @0x0004 -0741 b100 TST $AC0.M -0742 02b4 0717 CALLNE 0x0717 -0744 8100 CLR $AC0.M -0745 2601 LRS $AC0.M, @0x0001 -0746 b100 TST $AC0.M -0747 0294 07e5 JNE 0x07e5 -//.. -0749 2232 LRS $AX0.H, @0x0032 -074a c900 CMPAXH $AC0.M, $AX1.H -074b 0293 070e JX3 0x070e -074d 5500 SUBR $AC1.M, $AX0.H -074e 02bf 06f9 CALL 0x06f9 -0750 223a LRS $AX0.H, @0x003a -0751 8600 TSTAXH $AX0.H -0752 0294 0759 JNE 0x0759 -0754 8100 CLR $AC0.M -0755 263b LRS $AC0.M, @0x003b -0756 8200 CMP -0757 0291 07ab JX1 0x07ab -0759 8100 CLR $AC0.M -075a 1fdf MRR $AC0.M, $AC1.M -075b 040f ADDIS $ACC0, #0x0f -075c 147c LSR $ACC0, #0x3c -075d 1f7e MRR $AX1.H, $AC0.M -075e 0c00 LRIS $AC0.L, #0x00 -075f 1404 LSL $ACC0, #0x04 -0760 1f1e MRR $AX0.L, $AC0.M -0761 0a00 LRIS $AX0.H, #0x00 -0762 8100 CLR $AC0.M -0763 263a LRS $AC0.M, @0x003a -0764 243b LRS $AC0.L, @0x003b -0765 5800 SUBAX $AC0.M, $AX0.L -0766 0290 0771 JX0 0x0771 -0768 8100 CLR $AC0.M -0769 263b LRS $AC0.M, @0x003b -076a 5c00 SUB $AC0.M, $AC1.M -076b 2e32 SRS @0x0032, $AC0.M -076c 8100 CLR $AC0.M -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 $AC0.M, $AC1.M -0776 2e32 SRS @0x0032, $AC0.M -//.. Jump target from 076f -0777 8100 CLR $AC0.M -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 JEQ 0x07a8 // bail -077f 0a10 LRIS $AX0.H, #0x10 -0780 8100 CLR $AC0.M -0781 1fc3 MRR $AC0.M, $R03 -0782 5400 SUBR $AC0.M, $AX0.H -0783 1c7e MRR $R03, $AC0.M -0784 0080 0458 LRI $R00, #0x0458 -0786 197e LRRI $AC0.M, @$R03 -0787 197a LRRI $AX0.H, @$R03 -0788 100e LOOPI #0x0e -0789 64a2 MOVR.SL $AC0.M, $AX0.H : $AC0.M, $AX0.H -078a 1b1e SRRI @$R00, $AC0.M -078b 1b1a SRRI @$R00, $AX0.H -078c 8100 CLR $AC0.M -078d 263a LRS $AC0.M, @0x003a -078e 243b LRS $AC0.L, @0x003b -078f b100 TST $AC0.M -0790 0294 07a8 JNE 0x07a8 // bail -0792 2232 LRS $AX0.H, @0x0032 -0793 8600 TSTAXH $AX0.H -0794 0295 07a8 JEQ 0x07a8 // bail -0796 0080 0467 LRI $R00, #0x0467 -0798 8100 CLR $AC0.M -0799 268b LRS $AC0.M, @0xff8b -079a b100 TST $AC0.M -079b 0295 07a8 JEQ 0x07a8 // bail -079d 0200 000f ADDI $ACC0, #0x000f -079f 0240 000f ANDI $ACC0, #0x000f -07a1 0200 0458 ADDI $ACC0, #0x0458 -07a3 1c7e MRR $R03, $AC0.M -07a4 007a 07a7 BLOOP $AX0.H, 0x07a7 -07a6 18fe LRRD $AC0.M, @$R03 -07a7 1a9e SRRD @$R00, $AC0.M -//.. -07a8 0092 00ff LRI $CR, #0x00ff -07aa 02df RET - - - -07ab b100 TST $AC0.M -07ac 0295 07bb JEQ 0x07bb -07ae 5d00 SUB $AC1.M, $AC0.M -07af 040f ADDIS $ACC0, #0x0f -07b0 147c LSR $ACC0, #0x3c -07b1 0c00 LRIS $AC0.L, #0x00 -07b2 00e3 0363 SR @0x0363, $R03 -07b4 02bf 07eb CALL 0x07eb -07b6 00de 0363 LR $AC0.M, @0x0363 -07b8 223b LRS $AX0.H, @0x003b -07b9 4400 ADDR $AC0.M, $AX0.H -07ba 1c7e MRR $R03, $AC0.M -07bb 8100 CLR $AC0.M -07bc 2681 LRS $AC0.M, @0xff81 -07bd b100 TST $AC0.M -07be 0295 07e3 JEQ 0x07e3 // memset -07c0 2380 LRS $AX1.H, @0xff80 -07c1 2688 LRS $AC0.M, @0xff88 -07c2 2489 LRS $AC0.L, @0xff89 -07c3 1408 LSL $ACC0, #0x08 -07c4 14f4 ASR $ACC0, #0x74 -07c5 2380 LRS $AX1.H, @0xff80 -07c6 8d00 SET15 -07c7 c810 MULC.MV $AX1.H, $AC0.M : $AX0.L, $AC0.L -07c8 ae00 MULXMV $AX0.L, $AX1.H, $AC0.M -07c9 8c00 CLR15 -07ca f000 LSL16 $AC0.M -07cb 4e00 ADDP $AC0.M -07cc 238c LRS $AX1.H, @0xff8c -07cd 218d LRS $AX1.L, @0xff8d -07ce 4a00 ADDAX $AC0.M, $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, $R03 -07d7 0083 0458 LRI $R03, #0x0458 -07d9 8100 CLR $AC0.M -07da 0e01 LRIS $AC0.M, #0x01 -07db 02bf 07eb CALL 0x07eb -07dd 00c3 0363 LR $R03, @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 $AC0.M -07e6 005f LOOP $AC1.M -07e7 1b7e SRRI @$R03, $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 $AC1.M -07f7 00df 0361 LR $AC1.M, @0x0361 -07f9 2280 LRS $AX0.H, @0xff80 -07fa d000 MULC $AX0.H, $AC1.M -07fb 6f00 MOVP $AC1.M -07fc 4c00 ADD $AC0.M, $AC1.M -07fd 2e38 SRS @0x0038, $AC0.M -07fe 2c39 SRS @0x0039, $AC0.L -07ff 8100 CLR $AC0.M -0800 00de 0361 LR $AC0.M, @0x0361 -0802 007e 086b BLOOP $AC0.M, 0x086b -0804 0080 ffd3 LRI $R00, #0xffd3 -0806 0084 0000 LRI $R04, #0x0000 -0808 199e LRRN $AC0.M, @$R00 -0809 8900 CLR $AC1.M -080a 1ffe MRR $AC1.M, $AC0.M -080b 1401 LSL $ACC0, #0x01 -080c 0240 001e ANDI $ACC0, #0x001e -080e 0200 0300 ADDI $ACC0, #0x0300 -0810 1c3e MRR $R01, $AC0.M -0811 157c LSR $ACC1, #0x3c -0812 0340 000f ANDI $ACC1, #0x000f -0814 0a11 LRIS $AX0.H, #0x11 -0815 5500 SUBR $AC1.M, $AX0.H -0816 8100 CLR $AC0.M -0817 2680 LRS $AC0.M, @0xff80 -0818 0605 CMPIS $ACC0, #0x05 -0819 0295 0832 JEQ 0x0832 -081b 009a 00f0 LRI $AX0.H, #0x00f0 -081d 0b0f LRIS $AX1.H, #0x0f -081e 0082 0364 LRI $R02, #0x0364 -0820 1998 LRRN $AX0.L, @$R00 -0821 6000 MOVR $AC0.M, $AX0.L -0822 1107 0829 BLOOPI #0x07, 0x0829 -0824 3400 ANDR $AC0.M, $AX0.H -0825 1408 LSL $ACC0, #0x08 -0826 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -0827 3644 ANDR.LN $AC0.M, $AX1.H : $AX0.L, @$R00 -0828 140c LSL $ACC0, #0x0c -0829 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -082a 3400 ANDR $AC0.M, $AX0.H -082b 1408 LSL $ACC0, #0x08 -082c 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -082d 3600 ANDR $AC0.M, $AX1.H -082e 140c LSL $ACC0, #0x0c -082f 1b5e SRRI @$R02, $AC0.M -0830 029f 0852 JMP 0x0852 - - - -0832 009a c000 LRI $AX0.H, #0xc000 -0834 0082 0364 LRI $R02, #0x0364 -0836 1998 LRRN $AX0.L, @$R00 -0837 6000 MOVR $AC0.M, $AX0.L -0838 1103 0845 BLOOPI #0x03, 0x0845 -083a 1408 LSL $ACC0, #0x08 -083b 3400 ANDR $AC0.M, $AX0.H -083c 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -083d 140a LSL $ACC0, #0x0a -083e 3400 ANDR $AC0.M, $AX0.H -083f 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -0840 140c LSL $ACC0, #0x0c -0841 3400 ANDR $AC0.M, $AX0.H -0842 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -0843 140e LSL $ACC0, #0x0e -0844 3444 ANDR.LN $AC0.M, $AX0.H : $AX0.L, @$R00 -0845 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -0846 1408 LSL $ACC0, #0x08 -0847 3400 ANDR $AC0.M, $AX0.H -0848 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -0849 140a LSL $ACC0, #0x0a -084a 3400 ANDR $AC0.M, $AX0.H -084b 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -084c 140c LSL $ACC0, #0x0c -084d 3400 ANDR $AC0.M, $AX0.H -084e 6032 MOVR.S $AC0.M, $AX0.L : @$R02, $AC0.M -084f 140e LSL $ACC0, #0x0e -0850 3400 ANDR $AC0.M, $AX0.H -0851 1b5e SRRI @$R02, $AC0.M -0852 8f00 S16 -0853 1f7f MRR $AX1.H, $AC1.M -0854 2066 LRS $AX0.L, @0x0066 -0855 2767 LRS $AC1.M, @0x0067 -0856 193a LRRI $AX0.H, @$R01 -0857 1939 LRRI $AX1.L, @$R01 -0858 0080 0364 LRI $R00, #0x0364 -085a 1c80 MRR $R04, $R00 -085b a000 MULX $AX0.L, $AX1.L -085c ea70 MADDC.L $AC1.M, $AX1.L : $AC0.M, @$R00 -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, $AC0.M : $AC1.M, @$R00 -0861 1485 ASL $ACC0, #0x05 -0862 e833 MADDC.S $AC0.M, $AX1.L : @$R03, $AC0.M -0863 3b92 ORR.SL $AC1.M, $AX1.H : $AC0.M, $AX1.L -0864 a570 MULXAC.L $AX0.L, $AX1.L, $AC1.M : $AC0.M, @$R00 -0865 1585 ASL $ACC1, #0x05 -0866 ea3b MADDC.S $AC1.M, $AX1.L : @$R03, $AC1.M -0867 2f67 SRS @0x0067, $AC1.M -0868 8e00 S40 -0869 1ff8 MRR $AC1.M, $AX0.L -086a 2f66 SRS @0x0066, $AC1.M -086b 8900 CLR $AC1.M -086c 00df 0360 LR $AC1.M, @0x0360 -086e 02df RET - - -086f b100 TST $AC0.M -0870 02d5 RETEQ -0871 04fe ADDIS $ACC0, #0xfe -0872 1f1e MRR $AX0.L, $AC0.M -0873 191e LRRI $AC0.M, @$R00 -0874 0291 087a JX1 0x087a -0876 191a LRRI $AX0.H, @$R00 -0877 0058 LOOP $AX0.L -0878 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0879 6433 MOVR.S $AC0.M, $AX0.H : @$R03, $AC0.M -087a 1b7e SRRI @$R03, $AC0.M -087b 02df RET - - -// Another jump table dispatcher. Not sure what it is. -087c 8100 CLR $AC0.M -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 $R00, #0x0520 -0884 00df 0480 LR $AC1.M, @0x0480 -0886 1501 LSL $ACC1, #0x01 -0887 0340 007e ANDI $ACC1, #0x007e -0889 0300 0891 ADDI $ACC1, #0x0891 -088b 1c5f MRR $R02, $AC1.M -088c 175f CALLR $R02 -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, #0x01 -08b3 009b c000 LRI $AX1.H, #0xc000 -08b5 0099 4000 LRI $AX1.L, #0x4000 -08b7 1150 08bf BLOOPI #0x50, 0x08bf -08b9 02c0 0001 ANDF $AC0.M, #0x0001 -08bb 027c IF_R -08bc 1b1b SRRI @$R00, $AX1.H -08bd 027d IF_Z -08be 1b19 SRRI @$R00, $AX1.L -08bf 4800 ADDAX $AC0.M, $AX0.L -08c0 147f LSR $ACC0, #0x3f -08c1 02df RET - -// 88c Call target 4. -08c2 1402 LSL $ACC0, #0x02 -08c3 8900 CLR $AC1.M -08c4 1fb8 MRR $AC1.L, $AX0.L -08c5 1501 LSL $ACC1, #0x01 -08c6 009b c000 LRI $AX1.H, #0xc000 -08c8 0099 4000 LRI $AX1.L, #0x4000 -08ca 1150 08d2 BLOOPI #0x50, 0x08d2 -08cc 02c0 0003 ANDF $AC0.M, #0x0003 -08ce 027c IF_R -08cf 1b1b SRRI @$R00, $AX1.H -08d0 027d IF_Z -08d1 1b19 SRRI @$R00, $AX1.L -08d2 4c00 ADD $AC0.M, $AC1.M -08d3 147e LSR $ACC0, #0x3e -08d4 02df RET - -// 88c Call target 3. -08d5 1401 LSL $ACC0, #0x01 -08d6 0081 0ca0 LRI $R01, #0x0ca0 -08d8 009b c000 LRI $AX1.H, #0xc000 -08da 0099 4000 LRI $AX1.L, #0x4000 -08dc 8900 CLR $AC1.M -08dd 0082 0000 LRI $R02, #0x0000 -08df 1150 08ea BLOOPI #0x50, 0x08ea -08e1 02c0 0001 ANDF $AC0.M, #0x0001 -08e3 027c IF_R -08e4 1b1b SRRI @$R00, $AX1.H -08e5 027d IF_Z -08e6 1b19 SRRI @$R00, $AX1.L -08e7 183d LRR $AC1.L, @$R01 -08e8 4900 ADDAX $AC1.M, $AX0.L -08e9 1fe2 MRR $AC1.M, $R02 -08ea 4c39 ADD.S $AC0.M, $AC1.M : @$R01, $AC1.M -08eb 147f LSR $ACC0, #0x3f -08ec 02df RET - -// 88c Call target 2. -08ed 8900 CLR $AC1.M -08ee 1fb8 MRR $AC1.L, $AX0.L -08ef 157f LSR $ACC1, #0x3f -08f0 1050 LOOPI #0x50 -08f1 4c20 ADD.S $AC0.M, $AC1.M : @$R00, $AC0.L -08f2 02df RET - -// 88c Call target 12. -08f3 0082 0180 LRI $R02, #0x0180 -08f5 029f 08fd JMP 0x08fd - -// 88c Call target 13. -08f7 0082 01c0 LRI $R02, #0x01c0 -08f9 029f 08fd JMP 0x08fd - -// 88c Call target 5. -08fb 0082 0140 LRI $R02, #0x0140 -// 88c targets 12 and 13 forward here with different R02 value. -08fd 008a 003f LRI $R10, #0x003f -08ff 0086 0000 LRI $R06, #0x0000 -0901 1406 LSL $ACC0, #0x06 -0902 8900 CLR $AC1.M -0903 1fb8 MRR $AC1.L, $AX0.L -0904 1505 LSL $ACC1, #0x05 -0905 009b 003f LRI $AX1.H, #0x003f -0907 009a 0000 LRI $AX0.H, #0x0000 -0909 3600 ANDR $AC0.M, $AX1.H -090a 1cde MRR $R06, $AC0.M -090b 001a CW 0x001a ; *** UNKNOWN OPCODE *** -090c 3400 ANDR $AC0.M, $AX0.H -090d 1150 0913 BLOOPI #0x50, 0x0913 -090f 4c4a ADD.L $AC0.M, $AC1.M : $AX1.L, @$R02 -0910 3606 ANDR.DR $AC0.M, $AX1.H : $R02 -0911 1cde MRR $R06, $AC0.M -0912 340e ANDR.NR $AC0.M, $AX0.H : $R02 -0913 1b19 SRRI @$R00, $AX1.L -0914 1fc2 MRR $AC0.M, $R02 -0915 147a LSR $ACC0, #0x3a -0916 008a ffff LRI $R10, #0xffff -0918 02df RET - -// 88c Call target 7. -0919 1050 LOOPI #0x50 -091a 1b18 SRRI @$R00, $AX0.L -091b 02df RET - -// 88c Call target 8. -091c 0082 0100 LRI $R02, #0x0100 -091e 008a 003f LRI $R10, #0x003f -0920 0086 0000 LRI $R06, #0x0000 -0922 1406 LSL $ACC0, #0x06 -0923 8900 CLR $AC1.M -0924 1fb8 MRR $AC1.L, $AX0.L -0925 1505 LSL $ACC1, #0x05 -0926 009b 003f LRI $AX1.H, #0x003f -0928 009a 0000 LRI $AX0.H, #0x0000 -092a 3600 ANDR $AC0.M, $AX1.H -092b 1cde MRR $R06, $AC0.M -092c 001a CW 0x001a ; *** UNKNOWN OPCODE *** -092d 3400 ANDR $AC0.M, $AX0.H -092e 1150 0934 BLOOPI #0x50, 0x0934 -0930 4c4a ADD.L $AC0.M, $AC1.M : $AX1.L, @$R02 -0931 3606 ANDR.DR $AC0.M, $AX1.H : $R02 -0932 1cde MRR $R06, $AC0.M -0933 340e ANDR.NR $AC0.M, $AX0.H : $R02 -0934 1b19 SRRI @$R00, $AX1.L -0935 1fc2 MRR $AC0.M, $R02 -0936 147a LSR $ACC0, #0x3a -0937 008a ffff LRI $R10, #0xffff -0939 02df RET - - -// 88c Call target 11. -093a 0082 0100 LRI $R02, #0x0100 -093c 008a 003f LRI $R10, #0x003f -093e 0086 0000 LRI $R06, #0x0000 -0940 0081 0ca0 LRI $R01, #0x0ca0 -0942 1406 LSL $ACC0, #0x06 -0943 8900 CLR $AC1.M -0944 1fb8 MRR $AC1.L, $AX0.L -0945 1505 LSL $ACC1, #0x05 -0946 009b 003f LRI $AX1.H, #0x003f -0948 009a 0000 LRI $AX0.H, #0x0000 -094a 3600 ANDR $AC0.M, $AX1.H -094b 1cde MRR $R06, $AC0.M -094c 001a CW 0x001a ; *** UNKNOWN OPCODE *** -094d 3400 ANDR $AC0.M, $AX0.H -094e 1150 0959 BLOOPI #0x50, 0x0959 -0950 1939 LRRI $AX1.L, @$R01 -0951 a000 MULX $AX0.L, $AX1.L -0952 140a LSL $ACC0, #0x0a -0953 4e00 ADDP $AC0.M -0954 1476 LSR $ACC0, #0x36 -0955 4c4a ADD.L $AC0.M, $AC1.M : $AX1.L, @$R02 -0956 3606 ANDR.DR $AC0.M, $AX1.H : $R02 -0957 1cde MRR $R06, $AC0.M -0958 340e ANDR.NR $AC0.M, $AX0.H : $R02 -0959 1b19 SRRI @$R00, $AX1.L -095a 1fc2 MRR $AC0.M, $R02 -095b 147a LSR $ACC0, #0x3a -095c 008a ffff LRI $R10, #0xffff -095e 02df RET - - -// recalculate some 020-sized table? -095f 0080 01be LRI $R00, #0x01be -0961 1918 LRRI $AX0.L, @$R00 -0962 191a LRRI $AX0.H, @$R00 -0963 0080 0180 LRI $R00, #0x0180 -0965 0083 0180 LRI $R03, #0x0180 -0967 9070 MUL.L $AX0.L, $AX0.H : $AC0.M, @$R00 -0968 1ffe MRR $AC1.M, $AC0.M -0969 1120 0970 BLOOPI #0x20, 0x0970 -096b 7c00 NEG $AC0.M -096c d450 MULCAC.L $AX0.H, $AC1.M, $AC0.M : $AX0.H, @$R00 -096d 6533 MOVR.S $AC1.M, $AX0.H : @$R03, $AC0.M -096e c550 MULCAC.L $AX0.H, $AC0.M, $AC1.M : $AX0.H, @$R00 -096f 1501 LSL $ACC1, #0x01 -0970 643b MOVR.S $AC0.M, $AX0.H : @$R03, $AC1.M -0971 0080 01fe LRI $R00, #0x01fe -0973 191a LRRI $AX0.H, @$R00 -0974 1918 LRRI $AX0.L, @$R00 -0975 0080 01c0 LRI $R00, #0x01c0 -0977 0083 01c0 LRI $R03, #0x01c0 -0979 1ff8 MRR $AC1.M, $AX0.L -097a 9070 MUL.L $AX0.L, $AX0.H : $AC0.M, @$R00 -097b f800 ADDPAXZ $AC0.M, $AX0.H -097c 0240 01ff ANDI $ACC0, #0x01ff -097e 0260 2000 ORI $ACC0, #0x2000 -0980 02bf 0983 CALL 0x0983 -0982 02df RET - - - -0983 b900 TST $AC1.M -0984 0272 IF_2 -0985 7c00 NEG $AC0.M -0986 1f7e MRR $AX1.H, $AC0.M -0987 4700 ADDR $AC1.M, $AX1.H -0988 1110 098d BLOOPI #0x10, 0x098d -098a 473b ADDR.S $AC1.M, $AX1.H : @$R03, $AC1.M -098b 473b ADDR.S $AC1.M, $AX1.H : @$R03, $AC1.M -098c 473b ADDR.S $AC1.M, $AX1.H : @$R03, $AC1.M -098d 473b ADDR.S $AC1.M, $AX1.H : @$R03, $AC1.M -098e 02df RET - - - -098f 0092 0004 LRI $CR, #0x0004 -0991 2002 LRS $AX0.L, @0x0002 -0992 8100 CLR $AC0.M -0993 8900 CLR $AC1.M -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, $AC0.M -0999 1404 LSL $ACC0, #0x04 -099a 8c00 CLR15 -099b 1ffe MRR $AC1.M, $AC0.M -099c 0083 0580 LRI $R03, #0x0580 -099e 2201 LRS $AX0.H, @0x0001 -099f 8600 TSTAXH $AX0.H -09a0 0294 09b1 JNE 0x09b1 -09a2 2204 LRS $AX0.H, @0x0004 -09a3 8600 TSTAXH $AX0.H -09a4 02b4 09f9 CALLNE 0x09f9 -09a6 8100 CLR $AC0.M -09a7 2605 LRS $AC0.M, @0x0005 -09a8 b100 TST $AC0.M -09a9 0295 09be JEQ 0x09be -09ab 8100 CLR $AC0.M -09ac 2e05 SRS @0x0005, $AC0.M -09ad 2281 LRS $AX0.H, @0xff81 -09ae 8600 TSTAXH $AX0.H -09af 0294 09b8 JNE 0x09b8 -09b1 8100 CLR $AC0.M -09b2 005f LOOP $AC1.M -09b3 1b7e SRRI @$R03, $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 $AC0.M -09c8 263a LRS $AC0.M, @0x003a -09c9 b100 TST $AC0.M -09ca 0294 09d9 JNE 0x09d9 -09cc 263b LRS $AC0.M, @0x003b -09cd 5c00 SUB $AC0.M, $AC1.M -09ce 0290 09d9 JX0 0x09d9 -09d0 223b LRS $AX0.H, @0x003b -09d1 02bf 0a0a CALL 0x0a0a // weird little loop. count = ax0.h -09d3 5500 SUBR $AC1.M, $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 $AC0.M -09df 263a LRS $AC0.M, @0x003a -09e0 243b LRS $AC0.L, @0x003b -09e1 1570 LSR $ACC1, #0x30 -09e2 0a01 LRIS $AX0.H, #0x01 -09e3 0081 0405 LRI $R01, #0x0405 -09e5 5c00 SUB $AC0.M, $AC1.M -09e6 b100 TST $AC0.M -09e7 0275 IF_Q -09e8 1a3a SRR @$R01, $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 $AC0.M, $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 $AC0.M -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 $AC0.M, $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 $AC0.M, $AX1.L -0a05 2e38 SRS @0x0038, $AC0.M -0a06 2c39 SRS @0x0039, $AC0.L -0a07 8100 CLR $AC0.M -0a08 2e05 SRS @0x0005, $AC0.M -0a09 02df RET - - -// weird little loop. out[i] = in[i] << 8; ? -0a0a 0080 ffd3 LRI $R00, #0xffd3 -0a0c 0084 0000 LRI $R04, #0x0000 -0a0e 007a 0a12 BLOOP $AX0.H, 0x0a12 -0a10 199e LRRN $AC0.M, @$R00 -0a11 1488 ASL $ACC0, #0x08 -0a12 1b7e SRRI @$R03, $AC0.M -0a13 02df RET - - -0a14 0092 0004 LRI $CR, #0x0004 -0a16 2002 LRS $AX0.L, @0x0002 -0a17 8100 CLR $AC0.M -0a18 8900 CLR $AC1.M -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, $AC0.M -0a1e 1404 LSL $ACC0, #0x04 -0a1f 8c00 CLR15 -0a20 1ffe MRR $AC1.M, $AC0.M -0a21 0083 0580 LRI $R03, #0x0580 -0a23 2201 LRS $AX0.H, @0x0001 -0a24 8600 TSTAXH $AX0.H -0a25 0294 0a36 JNE 0x0a36 -0a27 2204 LRS $AX0.H, @0x0004 -0a28 8600 TSTAXH $AX0.H -0a29 02b4 0a7f CALLNE 0x0a7f -0a2b 8100 CLR $AC0.M -0a2c 2605 LRS $AC0.M, @0x0005 -0a2d b100 TST $AC0.M -0a2e 0295 0a43 JEQ 0x0a43 -0a30 8100 CLR $AC0.M // 0x0a5c jumps here. -0a31 2e05 SRS @0x0005, $AC0.M -0a32 2281 LRS $AX0.H, @0xff81 -0a33 8600 TSTAXH $AX0.H -0a34 0294 0a3d JNE 0x0a3d -0a36 8100 CLR $AC0.M -0a37 005f LOOP $AC1.M -0a38 1b7e SRRI @$R03, $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 $AC0.M -0a4d 263a LRS $AC0.M, @0x003a -0a4e b100 TST $AC0.M -0a4f 0294 0a5e JNE 0x0a5e -0a51 263b LRS $AC0.M, @0x003b -0a52 5c00 SUB $AC0.M, $AC1.M -0a53 0290 0a5e JX0 0x0a5e -0a55 223b LRS $AX0.H, @0x003b -0a56 02bf 0a91 CALL 0x0a91 -0a58 5500 SUBR $AC1.M, $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 $AC0.M -0a64 263a LRS $AC0.M, @0x003a -0a65 243b LRS $AC0.L, @0x003b -0a66 1570 LSR $ACC1, #0x30 -0a67 0a01 LRIS $AX0.H, #0x01 -0a68 0081 0405 LRI $R01, #0x0405 -0a6a 5c00 SUB $AC0.M, $AC1.M -0a6b b100 TST $AC0.M -0a6c 0275 IF_Q -0a6d 1a3a SRR @$R01, $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 $AC0.M, $AX0.L -0a75 7000 ADDAXL $AC0.M, $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 $AC0.M -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 $AC0.M, $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, #0x01 -0a89 238c LRS $AX1.H, @0xff8c -0a8a 218d LRS $AX1.L, @0xff8d -0a8b 4a00 ADDAX $AC0.M, $AX1.L -0a8c 2e38 SRS @0x0038, $AC0.M -0a8d 2c39 SRS @0x0039, $AC0.L -0a8e 8100 CLR $AC0.M -0a8f 2e05 SRS @0x0005, $AC0.M -0a90 02df RET - - - - -0a91 0080 ffd3 LRI $R00, #0xffd3 -0a93 0084 0000 LRI $R04, #0x0000 -0a95 007a 0a98 BLOOP $AX0.H, 0x0a98 -0a97 199e LRRN $AC0.M, @$R00 -0a98 1b7e SRRI @$R03, $AC0.M -0a99 02df RET - - - -0a9a 8900 CLR $AC1.M -0a9b 0f50 LRIS $AC1.M, #0x50 -0a9c 0083 0520 LRI $R03, #0x0520 -0a9e 02bf 0ab3 CALL 0x0ab3 -0aa0 029f 02d8 JMP 0x02d8 - - - -0aa2 00d8 0402 LR $AX0.L, @0x0402 -0aa4 8100 CLR $AC0.M -0aa5 8900 CLR $AC1.M -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, $AC0.M -0aab 1404 LSL $ACC0, #0x04 -0aac 1ffe MRR $AC1.M, $AC0.M -0aad 0083 0580 LRI $R03, #0x0580 -0aaf 02bf 0ab3 CALL 0x0ab3 -0ab1 029f 02d0 JMP 0x02d0 - - - -0ab3 0092 0004 LRI $CR, #0x0004 -0ab5 8100 CLR $AC0.M -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 $AC0.M, $AX0.L -0abb 0292 0ad1 JX2 0x0ad1 -0abd 8900 CLR $AC1.M -0abe 00c0 043b LR $R00, @0x043b -0ac0 02bf 0af6 CALL 0x0af6 -0ac2 8100 CLR $AC0.M -0ac3 1fd8 MRR $AC0.M, $AX0.L -0ac4 223b LRS $AX0.H, @0x003b -0ac5 5400 SUBR $AC0.M, $AX0.H -0ac6 0007 DAR $R03 -0ac7 1979 LRRI $AX1.L, @$R03 -0ac8 005e LOOP $AC0.M -0ac9 1b79 SRRI @$R03, $AX1.L -0aca 0f01 LRIS $AC1.M, #0x01 -0acb 2f01 SRS @0x0001, $AC1.M -0acc 8900 CLR $AC1.M -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 $AC0.M -0ad4 8900 CLR $AC1.M -0ad5 268a LRS $AC0.M, @0xff8a -0ad6 2734 LRS $AC1.M, @0x0034 -0ad7 5c00 SUB $AC0.M, $AC1.M -0ad8 2e36 SRS @0x0036, $AC0.M -0ad9 5000 SUBR $AC0.M, $AX0.L -0ada 0290 0af0 JX0 0x0af0 -0adc 00c0 0436 LR $R00, @0x0436 -0ade 02bf 0af6 CALL 0x0af6 -0ae0 8100 CLR $AC0.M -0ae1 1fd8 MRR $AC0.M, $AX0.L -0ae2 2236 LRS $AX0.H, @0x0036 -0ae3 5400 SUBR $AC0.M, $AX0.H -0ae4 1c1e MRR $R00, $AC0.M -0ae5 8100 CLR $AC0.M -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 $R00, $AX0.L -0af1 02bf 0af6 CALL 0x0af6 -0af3 0092 00ff LRI $CR, #0x00ff -0af5 02df RET -0af6 8100 CLR $AC0.M -0af7 1fc0 MRR $AC0.M, $R00 -0af8 b100 TST $AC0.M -0af9 02d5 RETEQ -0afa 8900 CLR $AC1.M -0afb 2734 LRS $AC1.M, @0x0034 -0afc 0340 0001 ANDI $ACC1, #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 $AC1.M -0b03 2534 LRS $AC1.L, @0x0034 -0b04 1501 LSL $ACC1, #0x01 -0b05 4c00 ADD $AC0.M, $AC1.M -0b06 5a00 SUBAX $AC0.M, $AX1.L -0b07 5a00 SUBAX $AC0.M, $AX1.L -0b08 1c20 MRR $R01, $R00 -0b09 1fe0 MRR $AC1.M, $R00 -0b0a 0502 ADDIS $ACC1, #0x02 -0b0b 1c1f MRR $R00, $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, $R01 -0b16 4700 ADDR $AC1.M, $AX1.H -0b17 2f34 SRS @0x0034, $AC1.M -0b18 0080 0b00 LRI $R00, #0x0b00 -0b1a 8900 CLR $AC1.M -0b1b 1ff9 MRR $AC1.M, $AX1.L -0b1c b900 TST $AC1.M -0b1d 0274 IF_E -0b1e 0008 IAR $R00 -0b1f 8900 CLR $AC1.M -0b20 1fe1 MRR $AC1.M, $R01 -0b21 191e LRRI $AC0.M, @$R00 -0b22 0701 CMPIS $ACC1, #0x01 -0b23 0293 0b2c JX3 0x0b2c -0b25 191a LRRI $AX0.H, @$R00 -0b26 05fe ADDIS $ACC1, #0xfe -0b27 005f LOOP $AC1.M -0b28 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0b29 1b7e SRRI @$R03, $AC0.M -0b2a 1b7a SRRI @$R03, $AX0.H -0b2b 02df RET - - - -0b2c 1b7e SRRI @$R03, $AC0.M -0b2d 02df RET - - - -0b2e 8a00 M2 -0b2f 0083 03e8 LRI $R03, #0x03e8 -0b31 191e LRRI $AC0.M, @$R00 -0b32 191a LRRI $AX0.H, @$R00 -0b33 1006 LOOPI #0x06 -0b34 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0b35 1b7e SRRI @$R03, $AC0.M -0b36 1b7a SRRI @$R03, $AX0.H -0b37 0080 03e8 LRI $R00, #0x03e8 -0b39 0088 0007 LRI $R08, #0x0007 -0b3b 1150 0b48 BLOOPI #0x50, 0x0b48 -0b3d 1c61 MRR $R03, $R01 -0b3e 84c3 CLRP.LD : $AX0.L, $AX1.L, @$R03 -0b3f f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b40 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b41 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b42 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b43 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b44 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b45 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b46 f200 MADD $AX0.L, $AX0.H -0b47 fe00 MOVPZ $AC0.M -0b48 1b3e SRRI @$R01, $AC0.M -0b49 0088 ffff LRI $R08, #0xffff -0b4b 8b00 M0 -0b4c 02df RET - - - -0b4d 8a00 M2 -0b4e 05fe ADDIS $ACC1, #0xfe -0b4f 0083 03e8 LRI $R03, #0x03e8 -0b51 191e LRRI $AC0.M, @$R00 -0b52 191a LRRI $AX0.H, @$R00 -0b53 005f LOOP $AC1.M -0b54 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0b55 1b7e SRRI @$R03, $AC0.M -0b56 1b7a SRRI @$R03, $AX0.H -0b57 0080 03e8 LRI $R00, #0x03e8 -0b59 0501 ADDIS $ACC1, #0x01 -0b5a 1d1f MRR $R08, $AC1.M -0b5b 1150 0b63 BLOOPI #0x50, 0x0b63 -0b5d 1c61 MRR $R03, $R01 -0b5e 84c3 CLRP.LD : $AX0.L, $AX1.L, @$R03 -0b5f 005f LOOP $AC1.M -0b60 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0b61 f200 MADD $AX0.L, $AX0.H -0b62 fe00 MOVPZ $AC0.M -0b63 1b3e SRRI @$R01, $AC0.M -0b64 0088 ffff LRI $R08, #0xffff -0b66 8b00 M0 -0b67 02df RET - - - -0b68 0083 03e8 LRI $R03, #0x03e8 -0b6a 191e LRRI $AC0.M, @$R00 -0b6b 191a LRRI $AX0.H, @$R00 -0b6c 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0b6d 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0b6e 1b7e SRRI @$R03, $AC0.M -0b6f 1b7a SRRI @$R03, $AX0.H -0b70 0080 03e8 LRI $R00, #0x03e8 -0b72 0088 0003 LRI $R08, #0x0003 -0b74 0085 0000 LRI $R05, #0x0000 -0b76 0087 0000 LRI $R07, #0x0000 -0b78 1fc2 MRR $AC0.M, $R02 -0b79 195b LRRI $AX1.H, @$R02 -0b7a 1959 LRRI $AX1.L, @$R02 -0b7b 195f LRRI $AC1.M, @$R02 -0b7c 195a LRRI $AX0.H, @$R02 -0b7d 1c5e MRR $R02, $AC0.M -0b7e 1fda MRR $AC0.M, $AX0.H -0b7f 1c61 MRR $R03, $R01 -0b80 8a00 M2 -0b81 8f00 S16 -0b82 191a LRRI $AX0.H, @$R00 -0b83 b850 MULX.L $AX0.H, $AX1.H : $AX0.H, @$R00 -0b84 e250 MADDX.L $AX0.H, $AX1.L : $AX0.H, @$R00 -0b85 ea50 MADDC.L $AC1.M, $AX1.L : $AX0.H, @$R00 -0b86 e8e8 MADDC.LDXM $AC0.M, $AX1.L : $AX0.L, $AX0.H, @$R01 -0b87 b650 MULXMV.L $AX0.H, $AX1.L, $AC0.M : $AX0.H, @$R00 -0b88 1127 0b93 BLOOPI #0x27, 0x0b93 -0b8a e3a8 MADDX.LSM $AX0.H, $AX1.H : $AX0.H, $AC0.M -0b8b 197e LRRI $AC0.M, @$R03 -0b8c e850 MADDC.L $AC0.M, $AX1.L : $AX0.H, @$R00 -0b8d eaf8 MADDC.LDXM $AC1.M, $AX1.L : $AX1.L, $AX1.H, @$R01 -0b8e bf50 MULXMV.L $AX0.H, $AX1.H, $AC1.M : $AX0.H, @$R00 -0b8f e2a9 MADDX.LSM $AX0.H, $AX1.L : $AX0.H, $AC1.M -0b90 197f LRRI $AC1.M, @$R03 -0b91 ea50 MADDC.L $AC1.M, $AX1.L : $AX0.H, @$R00 -0b92 e8e8 MADDC.LDXM $AC0.M, $AX1.L : $AX0.L, $AX0.H, @$R01 -0b93 b650 MULXMV.L $AX0.H, $AX1.L, $AC0.M : $AX0.H, @$R00 -0b94 e3a8 MADDX.LSM $AX0.H, $AX1.H : $AX0.H, $AC0.M -0b95 197e LRRI $AC0.M, @$R03 -0b96 e850 MADDC.L $AC0.M, $AX1.L : $AX0.H, @$R00 -0b97 eaf8 MADDC.LDXM $AC1.M, $AX1.L : $AX1.L, $AX1.H, @$R01 -0b98 bf00 MULXMV $AX0.H, $AX1.H, $AC1.M -0b99 1bff SRRN @$R03, $AC1.M -0b9a 197f LRRI $AC1.M, @$R03 -0b9b 8e00 S40 -0b9c 8b00 M0 -0b9d 0088 ffff LRI $R08, #0xffff -0b9f 1b5b SRRI @$R02, $AX1.H -0ba0 1b59 SRRI @$R02, $AX1.L -0ba1 1b5f SRRI @$R02, $AC1.M -0ba2 1b5e SRRI @$R02, $AC0.M -0ba3 02df RET - - - -0ba4 0083 03e8 LRI $R03, #0x03e8 -0ba6 191e LRRI $AC0.M, @$R00 -0ba7 191a LRRI $AX0.H, @$R00 -0ba8 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0ba9 64a0 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC0.M -0baa 1b7e SRRI @$R03, $AC0.M -0bab 1b7a SRRI @$R03, $AX0.H -0bac 0080 03e8 LRI $R00, #0x03e8 -0bae 0088 0003 LRI $R08, #0x0003 -0bb0 0085 0000 LRI $R05, #0x0000 -0bb2 0087 0000 LRI $R07, #0x0000 -0bb4 1fc2 MRR $AC0.M, $R02 -0bb5 195b LRRI $AX1.H, @$R02 -0bb6 1959 LRRI $AX1.L, @$R02 -0bb7 195f LRRI $AC1.M, @$R02 -0bb8 195a LRRI $AX0.H, @$R02 -0bb9 1c5e MRR $R02, $AC0.M -0bba 1fda MRR $AC0.M, $AX0.H -0bbb 1c61 MRR $R03, $R01 -0bbc 8a00 M2 -0bbd 8f00 S16 -0bbe 191a LRRI $AX0.H, @$R00 -0bbf b800 MULX $AX0.H, $AX1.H -0bc0 e350 MADDX.L $AX0.H, $AX1.H : $AX0.H, @$R00 -0bc1 e250 MADDX.L $AX0.H, $AX1.L : $AX0.H, @$R00 -0bc2 ea00 MADDC $AC1.M, $AX1.L -0bc3 ea50 MADDC.L $AC1.M, $AX1.L : $AX0.H, @$R00 -0bc4 e877 MADDC.LN $AC0.M, $AX1.L : $AC0.M, @$R03 -0bc5 ece8 MSUBC.LDXM $AC0.M, $AX1.L : $AX0.L, $AX0.H, @$R01 -0bc6 b200 MULXMVZ $AX0.H, $AX1.L, $AC0.M -0bc7 1127 0bd8 BLOOPI #0x27, 0x0bd8 -0bc9 e250 MADDX.L $AX0.H, $AX1.L : $AX0.H, @$R00 -0bca e3a8 MADDX.LSM $AX0.H, $AX1.H : $AX0.H, $AC0.M -0bcb 197e LRRI $AC0.M, @$R03 -0bcc e800 MADDC $AC0.M, $AX1.L -0bcd e850 MADDC.L $AC0.M, $AX1.L : $AX0.H, @$R00 -0bce ea7f MADDC.LN $AC1.M, $AX1.L : $AC1.M, @$R03 -0bcf eef8 MSUBC.LDXM $AC1.M, $AX1.L : $AX1.L, $AX1.H, @$R01 -0bd0 bb00 MULXMVZ $AX0.H, $AX1.H, $AC1.M -0bd1 e350 MADDX.L $AX0.H, $AX1.H : $AX0.H, @$R00 -0bd2 e2a9 MADDX.LSM $AX0.H, $AX1.L : $AX0.H, $AC1.M -0bd3 197f LRRI $AC1.M, @$R03 -0bd4 ea00 MADDC $AC1.M, $AX1.L -0bd5 ea50 MADDC.L $AC1.M, $AX1.L : $AX0.H, @$R00 -0bd6 e877 MADDC.LN $AC0.M, $AX1.L : $AC0.M, @$R03 -0bd7 ece8 MSUBC.LDXM $AC0.M, $AX1.L : $AX0.L, $AX0.H, @$R01 -0bd8 b200 MULXMVZ $AX0.H, $AX1.L, $AC0.M -0bd9 e250 MADDX.L $AX0.H, $AX1.L : $AX0.H, @$R00 -0bda e3a8 MADDX.LSM $AX0.H, $AX1.H : $AX0.H, $AC0.M -0bdb 197e LRRI $AC0.M, @$R03 -0bdc e800 MADDC $AC0.M, $AX1.L -0bdd e850 MADDC.L $AC0.M, $AX1.L : $AX0.H, @$R00 -0bde ea7f MADDC.LN $AC1.M, $AX1.L : $AC1.M, @$R03 -0bdf eef8 MSUBC.LDXM $AC1.M, $AX1.L : $AX1.L, $AX1.H, @$R01 -0be0 bb00 MULXMVZ $AX0.H, $AX1.H, $AC1.M -0be1 1bff SRRN @$R03, $AC1.M -0be2 197f LRRI $AC1.M, @$R03 -0be3 8e00 S40 -0be4 8b00 M0 -0be5 0088 ffff LRI $R08, #0xffff -0be7 1b5b SRRI @$R02, $AX1.H -0be8 1b59 SRRI @$R02, $AX1.L -0be9 1b5f SRRI @$R02, $AC1.M -0bea 1b5e SRRI @$R02, $AC0.M -0beb 02df RET - - - -0bec 0eff LRIS $AC0.M, #0xff -0bed 00fe 03f2 SR @0x03f2, $AC0.M -0bef 8100 CLR $AC0.M -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 $AC0.M, $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 $R00, #0x0a00 -0c0c 8100 CLR $AC0.M -0c0d 00de 03f0 LR $AC0.M, @0x03f0 -0c0f 8900 CLR $AC1.M -0c10 b100 TST $AC0.M -0c11 0275 IF_Q -0c12 0550 ADDIS $ACC1, #0x50 -0c13 00ff 03f0 SR @0x03f0, $AC1.M -0c15 0200 0a60 ADDI $ACC0, #0x0a60 -0c17 1c7e MRR $R03, $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 $ACC0, #0x0a60 -0c20 1c7e MRR $R03, $AC0.M -0c21 8100 CLR $AC0.M -0c22 8900 CLR $AC1.M -0c23 009f 00a0 LRI $AC1.M, #0x00a0 -0c25 00de 03f1 LR $AC0.M, @0x03f1 -0c27 5d00 SUB $AC1.M, $AC0.M -0c28 0e50 LRIS $AC0.M, #0x50 -0c29 0750 CMPIS $ACC1, #0x50 -0c2a 0270 IF_0 -0c2b 5d00 SUB $AC1.M, $AC0.M -0c2c 00da 03f2 LR $AX0.H, @0x03f2 -0c2e 8600 TSTAXH $AX0.H -0c2f 0290 0c4d JX0 0x0c4d -0c31 00de 03f3 LR $AC0.M, @0x03f3 -0c33 5c00 SUB $AC0.M, $AC1.M -0c34 0293 0c38 JX3 0x0c38 -0c36 029f 0c52 JMP 0x0c52 -0c38 00db 03f7 LR $AX1.H, @0x03f7 -0c3a 009e 8000 LRI $AC0.M, #0x8000 -0c3c 4600 ADDR $AC0.M, $AX1.H -0c3d 029f 0c44 JMP 0x0c44 -0c3f 00db 03f7 LR $AX1.H, @0x03f7 -0c41 009e 8000 LRI $AC0.M, #0x8000 -0c43 5600 SUBR $AC0.M, $AX1.H -0c44 00fe 03f5 SR @0x03f5, $AC0.M -0c46 1fda MRR $AC0.M, $AX0.H -0c47 7c00 NEG $AC0.M -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 $AC1.M, $AC0.M -0c50 0293 0c3f JX3 0x0c3f -0c52 8900 CLR $AC1.M -0c53 00dd 03f5 LR $AC1.L, @0x03f5 -0c55 1501 LSL $ACC1, #0x01 -0c56 8100 CLR $AC0.M -0c57 00dc 03f6 LR $AC0.L, @0x03f6 -0c59 008b 009f LRI $R11, #0x009f -0c5b 0080 0a00 LRI $R00, #0x0a00 -0c5d 0900 LRIS $AX1.L, #0x00 -0c5e 1150 0c65 BLOOPI #0x50, 0x0c65 -0c60 1878 LRR $AX0.L, @$R03 -0c61 4c00 ADD $AC0.M, $AC1.M -0c62 1cfe MRR $R07, $AC0.M -0c63 001f CW 0x001f ; *** UNKNOWN OPCODE *** -0c64 1fd9 MRR $AC0.M, $AX1.L -0c65 1b18 SRRI @$R00, $AX0.L -0c66 009f 0a60 LRI $AC1.M, #0x0a60 -0c68 1fc3 MRR $AC0.M, $R03 -0c69 5c00 SUB $AC0.M, $AC1.M -0c6a 00fe 03f1 SR @0x03f1, $AC0.M -0c6c 00fc 03f6 SR @0x03f6, $AC0.L -0c6e 008b ffff LRI $R11, #0xffff -0c70 02df RET - - - -0c71 0f50 LRIS $AC1.M, #0x50 -0c72 0080 0a00 LRI $R00, #0x0a00 -0c74 0083 0d60 LRI $R03, #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 $R00, #0x0a00 -0c7d 0083 0d00 LRI $R03, #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 S16 -0c86 8100 CLR $AC0.M -0c87 00de 0404 LR $AC0.M, @0x0404 -0c89 b100 TST $AC0.M -0c8a 0295 0c91 JEQ 0x0c91 -0c8c 8100 CLR $AC0.M -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 $R04, #0x0000 -0c98 1150 0ca1 BLOOPI #0x50, 0x0ca1 -0c9a 199e LRRN $AC0.M, @$R00 -0c9b 5c7c SUB.LN $AC0.M, $AC1.M : $AC1.M, @$R00 -0c9c c000 MULC $AX0.H, $AC0.M -0c9d 6e00 MOVP $AC0.M -0c9e 1488 ASL $ACC0, #0x08 -0c9f 4a00 ADDAX $AC0.M, $AX1.L -0ca0 1b1e SRRI @$R00, $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 S40 -0ca8 02df RET - - -0ca9 b900 TST $AC1.M -0caa 0294 0caf JNE 0x0caf -0cac 6800 MOVAX $AC0.M, $AX0.L -0cad b100 TST $AC0.M -0cae 02d5 RETEQ -//... -0caf 1c23 MRR $R01, $R03 -0cb0 197e LRRI $AC0.M, @$R03 -0cb1 191b LRRI $AX1.H, @$R00 -0cb2 d858 MULC.L $AX1.H, $AC1.M : $AX1.H, @$R00 -0cb3 1120 0cb9 BLOOPI #0x20, 0x0cb9 -0cb5 dcd3 MULCAC.LD $AX1.H, $AC1.M, $AC0.M : $AX0.L, $AX1.H, @$R03 -0cb6 6231 MOVR.S $AC0.M, $AX1.L : @$R01, $AC0.M -0cb7 dcd3 MULCAC.LD $AX1.H, $AC1.M, $AC0.M : $AX0.L, $AX1.H, @$R03 -0cb8 6231 MOVR.S $AC0.M, $AX1.L : @$R01, $AC0.M -0cb9 4900 ADDAX $AC1.M, $AX0.L -0cba 1108 0cbf BLOOPI #0x08, 0x0cbf -0cbc dcd3 MULCAC.LD $AX1.H, $AC1.M, $AC0.M : $AX0.L, $AX1.H, @$R03 -0cbd 6231 MOVR.S $AC0.M, $AX1.L : @$R01, $AC0.M -0cbe dcd3 MULCAC.LD $AX1.H, $AC1.M, $AC0.M : $AX0.L, $AX1.H, @$R03 -0cbf 6231 MOVR.S $AC0.M, $AX1.L : @$R01, $AC0.M -0cc0 02df RET - - -// Yet another multiply loop. bufsize = 0x28 -0cc1 8f00 S16 -0cc2 8d00 SET15 -0cc3 1c03 MRR $R00, $R03 -0cc4 00d9 038e LR $AX1.L, @0x038e -0cc6 0b04 LRIS $AX1.H, #0x04 -0cc7 197a LRRI $AX0.H, @$R03 -0cc8 b053 MULX.L $AX0.H, $AX1.L : $AX0.H, @$R03 -0cc9 b600 MULXMV $AX0.H, $AX1.L, $AC0.M -0cca 1128 0ccf BLOOPI #0x28, 0x0ccf -0ccc 3ad3 ORR.LD $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$R03 -0ccd b630 MULXMV.S $AX0.H, $AX1.L, $AC0.M : @$R00, $AC0.M -0cce 3ad3 ORR.LD $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$R03 -0ccf b630 MULXMV.S $AX0.H, $AX1.L, $AC0.M : @$R00, $AC0.M -0cd0 8c00 CLR15 -0cd1 8e00 S40 -0cd2 02df RET - - - -0cd3 00da 0485 LR $AX0.H, @0x0485 -0cd5 8600 TSTAXH $AX0.H -0cd6 0295 0ce5 JEQ 0x0ce5 -0cd8 8100 CLR $AC0.M -0cd9 00de 042a LR $AC0.M, @0x042a -0cdb 147f LSR $ACC0, #0x3f -0cdc 00fe 042b SR @0x042b, $AC0.M -0cde b100 TST $AC0.M -0cdf 0294 0ce5 JNE 0x0ce5 -0ce1 009a 0001 LRI $AX0.H, #0x0001 -0ce3 00fa 0401 SR @0x0401, $AX0.H -0ce5 8f00 S16 -0ce6 8100 CLR $AC0.M -0ce7 00de 0428 LR $AC0.M, @0x0428 -0ce9 1478 LSR $ACC0, #0x38 -0cea 00df 0428 LR $AC1.M, @0x0428 -0cec 0340 007f ANDI $ACC1, #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 $AC0.M -0cf7 8900 CLR $AC1.M -0cf8 009f 0200 LRI $AC1.M, #0x0200 -0cfa 1fd8 MRR $AC0.M, $AX0.L -0cfb 4c00 ADD $AC0.M, $AC1.M -0cfc 1c1e MRR $R00, $AC0.M -0cfd 1818 LRR $AX0.L, @$R00 -0cfe 1fda MRR $AC0.M, $AX0.H -0cff 4c00 ADD $AC0.M, $AC1.M -0d00 1c1e MRR $R00, $AC0.M -0d01 181a LRR $AX0.H, @$R00 -0d02 1fd9 MRR $AC0.M, $AX1.L -0d03 4c00 ADD $AC0.M, $AC1.M -0d04 1c1e MRR $R00, $AC0.M -0d05 1819 LRR $AX1.L, @$R00 -0d06 1fdb MRR $AC0.M, $AX1.H -0d07 4c00 ADD $AC0.M, $AC1.M -0d08 1c1e MRR $R00, $AC0.M -0d09 181b LRR $AX1.H, @$R00 -0d0a 0080 0b00 LRI $R00, #0x0b00 -0d0c 9800 MUL $AX1.L, $AX1.H -0d0d ae00 MULXMV $AX0.L, $AX1.H, $AC0.M -0d0e b630 MULXMV.S $AX0.H, $AX1.L, $AC0.M : @$R00, $AC0.M -0d0f 9630 MULMV.S $AX0.L, $AX0.H, $AC0.M : @$R00, $AC0.M -0d10 6e30 MOVP.S $AC0.M : @$R00, $AC0.M -0d11 1b1e SRRI @$R00, $AC0.M -0d12 0080 0b00 LRI $R00, #0x0b00 -0d14 0081 0b04 LRI $R01, #0x0b04 -0d16 00da 042a LR $AX0.H, @0x042a -0d18 02bf 0d62 CALL 0x0d62 -0d1a 0081 0b08 LRI $R01, #0x0b08 -0d1c 0080 0b04 LRI $R00, #0x0b04 -0d1e 00da 042a LR $AX0.H, @0x042a -0d20 00de 0429 LR $AC0.M, @0x0429 -0d22 c000 MULC $AX0.H, $AC0.M -0d23 6e00 MOVP $AC0.M -0d24 1481 ASL $ACC0, #0x01 -0d25 1f5e MRR $AX0.H, $AC0.M -0d26 02bf 0d62 CALL 0x0d62 -0d28 0080 0b00 LRI $R00, #0x0b00 -0d2a 0081 0b0c LRI $R01, #0x0b0c -0d2c 8100 CLR $AC0.M -0d2d 8900 CLR $AC1.M -0d2e 00de 042b LR $AC0.M, @0x042b -0d30 00df 042a LR $AC1.M, @0x042a -0d32 00fe 042a SR @0x042a, $AC0.M -0d34 5c00 SUB $AC0.M, $AC1.M -0d35 1f5e MRR $AX0.H, $AC0.M -0d36 02bf 0d6b CALL 0x0d6b -0d38 0080 0b0c LRI $R00, #0x0b0c -0d3a 0081 0b10 LRI $R01, #0x0b10 -0d3c 00da 0429 LR $AX0.H, @0x0429 -0d3e 02bf 0d62 CALL 0x0d62 -0d40 0081 0b04 LRI $R01, #0x0b04 -0d42 0082 0b0c LRI $R02, #0x0b0c -0d44 0083 0d77 LRI $R03, #0x0d77 -0d46 1108 0d5f BLOOPI #0x08, 0x0d5f // 8 iterations, = data table size below -0d48 195f LRRI $AC1.M, @$R02 -0d49 15fb ASR $ACC1, #0x7b -0d4a 1f1d MRR $AX0.L, $AC1.L -0d4b 1f5f MRR $AX0.H, $AC1.M -0d4c 193f LRRI $AC1.M, @$R01 -0d4d 00e1 0b24 SR @0x0b24, $R01 -0d4f 00e2 0b25 SR @0x0b25, $R02 -0d51 021b ILRRI $AC0.M, @$R03 // Read from data table at 0d77, increment R03 -0d52 00e3 0b26 SR @0x0b26, $R03 -0d54 1c7e MRR $R03, $AC0.M -0d55 00c0 038f LR $R00, @0x038f -0d57 02bf 0ca9 CALL 0x0ca9 -0d59 00c1 0b24 LR $R01, @0x0b24 -0d5b 00c2 0b25 LR $R02, @0x0b25 -0d5d 00c3 0b26 LR $R03, @0x0b26 -0d5f 0000 NOP // BLOOPI end -0d60 8e00 S40 -0d61 02df RET - - -// Compute something.... load @R00 store @R01 -0d62 191f LRRI $AC1.M, @$R00 -0d63 d078 MULC.L $AX0.H, $AC1.M : $AC1.M, @$R00 -0d64 d678 MULCMV.L $AX0.H, $AC1.M, $AC0.M : $AC1.M, @$R00 -0d65 d631 MULCMV.S $AX0.H, $AC1.M, $AC0.M : @$R01, $AC0.M -0d66 191f LRRI $AC1.M, @$R00 -0d67 d631 MULCMV.S $AX0.H, $AC1.M, $AC0.M : @$R01, $AC0.M -0d68 6e31 MOVP.S $AC0.M : @$R01, $AC0.M -0d69 1b3e SRRI @$R01, $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, @$R00 -0d6e a840 MULX.L $AX0.L, $AX1.H : $AX0.L, @$R00 -0d6f ae40 MULXMV.L $AX0.L, $AX1.H, $AC0.M : $AX0.L, @$R00 -0d70 ae31 MULXMV.S $AX0.L, $AX1.H, $AC0.M : @$R01, $AC0.M -0d71 1918 LRRI $AX0.L, @$R00 -0d72 ae31 MULXMV.S $AX0.L, $AX1.H, $AC0.M : @$R01, $AC0.M -0d73 6e31 MOVP.S $AC0.M : @$R01, $AC0.M -0d74 1b3e SRRI @$R01, $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, $R00 -0d82 0200 fffc ADDI $ACC0, #0xfffc -0d84 1c1e MRR $R00, $AC0.M -0d85 1c5e MRR $R02, $AC0.M -0d86 0083 043c LRI $R03, #0x043c -0d88 197e LRRI $AC0.M, @$R03 -0d89 197f LRRI $AC1.M, @$R03 -0d8a 80a2 NX.SL : $AC0.M, $AX0.H -0d8b 64a3 MOVR.SL $AC0.M, $AX0.H : $AC1.M, $AX0.H -0d8c 6530 MOVR.S $AC1.M, $AX0.H : @$R00, $AC0.M -0d8d 1b1f SRRI @$R00, $AC1.M -0d8e 1c02 MRR $R00, $R02 -0d8f 8100 CLR $AC0.M -0d90 00de 0402 LR $AC0.M, @0x0402 -0d92 00fe 0362 SR @0x0362, $AC0.M -0d94 1474 LSR $ACC0, #0x34 -0d95 1f7e MRR $AX1.H, $AC0.M -0d96 1f3c MRR $AX1.L, $AC0.L -0d97 8900 CLR $AC1.M -0d98 00dd 0430 LR $AC1.L, @0x0430 -0d9a 1504 LSL $ACC1, #0x04 -0d9b 0604 CMPIS $ACC0, #0x04 -0d9c 0290 0df3 JX0 0x0df3 -0d9e 1fdd MRR $AC0.M, $AC1.L -0d9f 0082 02b0 LRI $R02, #0x02b0 -0da1 1050 LOOPI #0x50 -0da2 4b2a ADDAX.S $AC1.M, $AX1.L : @$R02, $AC1.L -0da3 1fbe MRR $AC1.L, $AC0.M -0da4 00fe 0360 SR @0x0360, $AC0.M -0da6 8900 CLR $AC1.M -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 $R02, #0x02b0 -0daf 0083 02b0 LRI $R03, #0x02b0 -0db1 195e LRRI $AC0.M, @$R02 -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, @$R02 -0db6 35b3 ANDR.SL $AC1.M, $AX0.H : $AC1.M, $AX1.H -0db7 3772 ANDR.L $AC1.M, $AX1.H : $AC0.M, @$R02 -0db8 34bb ANDR.SLM $AC0.M, $AX0.H : $AC1.M, $AX1.H -0db9 8a00 M2 -0dba 0082 02b0 LRI $R02, #0x02b0 -0dbc 00dd 0430 LR $AC1.L, @0x0430 -0dbe 1504 LSL $ACC1, #0x04 -0dbf 1fe0 MRR $AC1.M, $R00 -0dc0 8100 CLR $AC0.M -0dc1 00de 0362 LR $AC0.M, @0x0362 -0dc3 1474 LSR $ACC0, #0x34 -0dc4 1f7e MRR $AX1.H, $AC0.M -0dc5 1f3c MRR $AX1.L, $AC0.L -0dc6 8f00 S16 -0dc7 1943 LRRI $R03, @$R02 -0dc8 4bc3 ADDAX.LD $AC1.M, $AX1.L : $AX0.L, $AX1.L, @$R03 -0dc9 90c3 MUL.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dca f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dcb f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dcc f200 MADD $AX0.L, $AX0.H -0dcd fe00 MOVPZ $AC0.M -0dce 1c1f MRR $R00, $AC1.M -0dcf 1943 LRRI $R03, @$R02 -0dd0 4bc3 ADDAX.LD $AC1.M, $AX1.L : $AX0.L, $AX1.L, @$R03 -0dd1 90c3 MUL.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dd2 114e 0dda BLOOPI #0x4e, 0x0dda -0dd4 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dd5 f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0dd6 f231 MADD.S $AX0.L, $AX0.H : @$R01, $AC0.M -0dd7 1c1f MRR $R00, $AC1.M -0dd8 1943 LRRI $R03, @$R02 -0dd9 4bc3 ADDAX.LD $AC1.M, $AX1.L : $AX0.L, $AX1.L, @$R03 -0dda 92c3 MULMVZ.LD $AX0.L, $AX0.H, $AC0.M : $AX0.L, $AX1.L, @$R03 -0ddb f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0ddc f2c3 MADD.LD $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$R03 -0ddd f231 MADD.S $AX0.L, $AX0.H : @$R01, $AC0.M -0dde fe00 MOVPZ $AC0.M -0ddf 1b3e SRRI @$R01, $AC0.M -0de0 8b00 M0 -0de1 8e00 S40 -0de2 00fe 0433 SR @0x0433, $AC0.M -0de4 1c1f MRR $R00, $AC1.M -0de5 150c LSL $ACC1, #0x0c -0de6 0340 0fff ANDI $ACC1, #0x0fff -0de8 00ff 0430 SR @0x0430, $AC1.M -0dea 0083 043c LRI $R03, #0x043c -0dec 191e LRRI $AC0.M, @$R00 -0ded 191f LRRI $AC1.M, @$R00 -0dee 80a0 NX.LS : $AX0.H, $AC0.M -0def 64a1 MOVR.LS $AC0.M, $AX0.H : $AX0.H, $AC1.M -0df0 6533 MOVR.S $AC1.M, $AX0.H : @$R03, $AC0.M -0df1 1b7f SRRI @$R03, $AC1.M -0df2 02df RET - - - -// bufsize = 0x28 -0df3 1fe0 MRR $AC1.M, $R00 -0df4 1c1f MRR $R00, $AC1.M -0df5 1128 0dfc BLOOPI #0x28, 0x0dfc -0df7 4b70 ADDAX.L $AC1.M, $AX1.L : $AC0.M, @$R00 -0df8 1b3e SRRI @$R01, $AC0.M -0df9 1c1f MRR $R00, $AC1.M -0dfa 4b70 ADDAX.L $AC1.M, $AX1.L : $AC0.M, @$R00 -0dfb 1b3e SRRI @$R01, $AC0.M -0dfc 1c1f MRR $R00, $AC1.M -0dfd 029f 0de2 JMP 0x0de2 -0dff 0083 0520 LRI $R03, #0x0520 -0e01 00de 0433 LR $AC0.M, @0x0433 -0e03 1050 LOOPI #0x50 -0e04 1b7e SRRI @$R03, $AC0.M -0e05 029f 02d8 JMP 0x02d8 -0e07 1c20 MRR $R01, $R00 -0e08 185f LRR $AC1.M, @$R02 -0e09 1f7f MRR $AX1.H, $AC1.M -0e0a 193a LRRI $AX0.H, @$R01 -0e0b 6400 MOVR $AC0.M, $AX0.H -0e0c 0078 0e11 BLOOP $AX0.L, 0x0e11 -0e0e 5659 SUBR.L $AC0.M, $AX1.H : $AX1.H, @$R01 -0e0f 6730 MOVR.S $AC1.M, $AX1.H : @$R00, $AC0.M -0e10 5551 SUBR.L $AC1.M, $AX0.H : $AX0.H, @$R01 -0e11 6438 MOVR.S $AC0.M, $AX0.H : @$R00, $AC1.M -0e12 1a5b SRR @$R02, $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 $R00, #0x04ec -0e38 1004 LOOPI #0x04 -0e39 1b18 SRRI @$R00, $AX0.L -0e3a 0080 04f4 LRI $R00, #0x04f4 -0e3c 1004 LOOPI #0x04 -0e3d 1b18 SRRI @$R00, $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 $R00, #0x0f40 -0e41 0083 0b00 LRI $R03, #0x0b00 -0e43 8900 CLR $AC1.M -0e44 0f50 LRIS $AC1.M, #0x50 -0e45 0098 6784 LRI $AX0.L, #0x6784 -0e47 02bf 00fa CALL 0x00fa // multiply loop -0e49 0080 04e8 LRI $R00, #0x04e8 -0e4b 0082 04ec LRI $R02, #0x04ec -0e4d 0081 0b00 LRI $R01, #0x0b00 -0e4f 02bf 0ba4 CALL 0x0ba4 // complex multiply loop -0e51 8900 CLR $AC1.M -0e52 0f50 LRIS $AC1.M, #0x50 -0e53 0080 0b00 LRI $R00, #0x0b00 -0e55 0083 0d00 LRI $R03, #0x0d00 -0e57 0098 7fff LRI $AX0.L, #0x7fff -0e59 02bf 00eb CALL 0x00eb // one of the multiply loops -0e5b 8900 CLR $AC1.M -0e5c 0f50 LRIS $AC1.M, #0x50 -0e5d 0080 0b00 LRI $R00, #0x0b00 -0e5f 0083 0d60 LRI $R03, #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 $R00, #0x0ca0 -0e67 0083 0b00 LRI $R03, #0x0b00 -0e69 8900 CLR $AC1.M -0e6a 0f50 LRIS $AC1.M, #0x50 -0e6b 0098 6784 LRI $AX0.L, #0x6784 -0e6d 02bf 00fa CALL 0x00fa // multiply loop -0e6f 0080 04e8 LRI $R00, #0x04e8 -0e71 0082 04f4 LRI $R02, #0x04f4 -0e73 0081 0b00 LRI $R01, #0x0b00 -0e75 02bf 0ba4 CALL 0x0ba4 // complex multiply loop -0e77 8900 CLR $AC1.M -0e78 0f50 LRIS $AC1.M, #0x50 -0e79 0080 0b00 LRI $R00, #0x0b00 -0e7b 0083 0d00 LRI $R03, #0x0d00 -0e7d 0098 47e0 LRI $AX0.L, #0x47e0 -0e7f 02bf 00eb CALL 0x00eb // one of the multiply loops -0e81 8900 CLR $AC1.M -0e82 0f50 LRIS $AC1.M, #0x50 -0e83 0080 0b00 LRI $R00, #0x0b00 -0e85 0083 0d60 LRI $R03, #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 +// 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