3174 lines
131 KiB
Plaintext
3174 lines
131 KiB
Plaintext
|
// Memory map:
|
||
|
//
|
||
|
// 0x0D00: final right buffer #1
|
||
|
// 0x0D60: final left buffer #1
|
||
|
// 0x0F40: final right buffer #2
|
||
|
// 0x0CA0: final left buffer #2
|
||
|
|
||
|
0000 029f 0012 jmp 0x0012 // Reset()
|
||
|
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 06e9 jmp 0x06e9 // Exception_0E()
|
||
|
|
||
|
0010 029f 004c jmp 0x004c // TaskStart()
|
||
|
|
||
|
// Reset()
|
||
|
0012 1205 sbclr #0x05
|
||
|
0013 02bf 0055 call 0x0055
|
||
|
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 07b9 call 0x07b9 // InitGlobalVars()
|
||
|
001e 02bf 0f0a call 0x0f0a // InitUnkTable()
|
||
|
0020 0e00 lris $AC0.M, #0x00
|
||
|
0021 02bf 079b call 0x079b // SendMail_DCD1(0x0000)
|
||
|
0023 009e 1111 lri $AC0.M, #0x1111
|
||
|
0025 02bf 07a5 call 0x07a5 // sendMail_F355(0x1111)
|
||
|
0027 0e00 lris $AC0.M, #0x00
|
||
|
0028 00fe 034e sr @0x034e, $AC0.M
|
||
|
002a 1305 sbset #0x05
|
||
|
002b 029f 07f6 jmp 0x07f6 // jump to MessageLoop()
|
||
|
|
||
|
// OpcodeHandler()
|
||
|
002d 00df 0357 lr $AC1.M, @0x0357
|
||
|
002f 00ff 0345 sr @0x0345, $AC1.M
|
||
|
0031 00de 0356 lr $AC0.M, @0x0356
|
||
|
0033 1ffe mrr $AC1.M, $AC0.M
|
||
|
0034 0340 00ff andi $AC1.M, #0x00ff
|
||
|
0036 00ff 0344 sr @0x0344, $AC1.M
|
||
|
0038 1479 lsr $ACC0, #-7
|
||
|
0039 0240 007e andi $AC0.M, #0x007e
|
||
|
003b 00fe 0343 sr @0x0343, $AC0.M
|
||
|
003d 0200 0073 addi $AC0.M, #0x0073 // Opcode jump table address (0x0073)
|
||
|
003f 1c1e mrr $AR0, $AC0.M
|
||
|
0040 170f jmpr $AR0 // jump to opcode handler
|
||
|
0041 0092 00ff lri $CR, #0x00ff // Return address from opcode handler
|
||
|
0043 0e04 lris $AC0.M, #0x04
|
||
|
0044 02bf 079b call 0x079b // SendMail_DCD1(0x0004)
|
||
|
0046 00de 0356 lr $AC0.M, @0x0356
|
||
|
0048 02bf 07a5 call 0x07a5 // SendMail_F355(mail_high_part)
|
||
|
004a 029f 002b jmp 0x002b // jump back to MessageLoop()
|
||
|
|
||
|
// TaskStart()
|
||
|
004c 1205 sbclr #0x05
|
||
|
004d 02bf 0055 call 0x0055
|
||
|
004f 0e01 lris $AC0.M, #0x01
|
||
|
0050 02bf 079b call 0x079b // SendMail_DCD1(0x0001)
|
||
|
0052 1305 sbset #0x05
|
||
|
0053 029f 002b jmp 0x002b // jump back to MessageLoop()
|
||
|
|
||
|
//
|
||
|
0055 1202 sbclr #0x02
|
||
|
0056 1203 sbclr #0x03
|
||
|
0057 1204 sbclr #0x04
|
||
|
0058 1306 sbset #0x06
|
||
|
0059 8e00 set16
|
||
|
005a 8c00 clr15
|
||
|
005b 8b00 m0
|
||
|
005c 009e ffff lri $AC0.M, #0xffff
|
||
|
005e 1d1e mrr $WR0, $AC0.M
|
||
|
005f 1d3e mrr $WR1, $AC0.M
|
||
|
0060 1d5e mrr $WR2, $AC0.M
|
||
|
0061 1d7e mrr $WR3, $AC0.M
|
||
|
0062 0092 00ff lri $CR, #0x00ff
|
||
|
0064 02df ret
|
||
|
|
||
|
// ReadWholeMessage()
|
||
|
0065 0081 0358 lri $AR1, #0x0358
|
||
|
0067 0090 0000 lri $AC0.H, #0x0000
|
||
|
0069 0c00 lris $AC0.L, #0x00
|
||
|
006a 007e 006f bloop $AC0.M, 0x006f
|
||
|
006c 193e lrri $AC0.M, @$AR1
|
||
|
006d 1b1e srri @$AR0, $AC0.M
|
||
|
006e 193e lrri $AC0.M, @$AR1
|
||
|
006f 1b1e srri @$AR0, $AC0.M
|
||
|
0070 02df ret
|
||
|
|
||
|
// Opcode_03() (dummy)
|
||
|
0071 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode jump table (16 opcodes available)
|
||
|
0073 029f 0041 jmp 0x0041 // 0 (dummy)
|
||
|
0075 029f 0093 jmp 0x0093 // 1 (DsetupTable)
|
||
|
0077 029f 029d jmp 0x029d // 2 (SyncFrame)
|
||
|
0079 029f 0071 jmp 0x0071 // 3 (dummy)
|
||
|
007b 029f 0616 jmp 0x0616 // 4 ()
|
||
|
007d 029f 0628 jmp 0x0628 // 5 ()
|
||
|
007f 029f 0041 jmp 0x0041 // 6 (dummy)
|
||
|
0081 029f 055f jmp 0x055f // 7 ()
|
||
|
0083 029f 05ab jmp 0x05ab // 8 ()
|
||
|
0085 029f 058f jmp 0x058f // 9 ()
|
||
|
0087 029f 0041 jmp 0x0041 // A (dummy)
|
||
|
0089 029f 0041 jmp 0x0041 // B (dummy)
|
||
|
008b 029f 0041 jmp 0x0041 // C (dummy)
|
||
|
008d 029f 00bd jmp 0x00bd // D (DsetDolbyDelay)
|
||
|
008f 029f 00b0 jmp 0x00b0 // E ()
|
||
|
0091 029f 0041 jmp 0x0041 // F (dummy)
|
||
|
|
||
|
// Opcode_01() - DsetupTable
|
||
|
// Message body: 5 mails
|
||
|
// Mail 1: bit0-15 = max (see inner loop of SyncFrame), bit16-32 = 0, bit24-30 = command (0x01)
|
||
|
// Mail 2: Address in main memory of parameter blocks used during mixing; there are X blocks of 384 bytes (192 words) each
|
||
|
// Mail 3: Address in main memory of something (640 words copied to 0x0000)
|
||
|
// Mail 4: Address in main memory of something (32 words copied to 0x0300)
|
||
|
// Mail 5: Address in main memory of other parameter blocks; there are 4 blocks (or more?) of 32 bytes (16 words) each
|
||
|
// Stores the mail body to 0x0380.
|
||
|
0093 0080 0380 lri $AR0, #0x0380
|
||
|
0095 0e04 lris $AC0.M, #0x04
|
||
|
0096 02bf 0065 call 0x0065
|
||
|
0098 0081 0382 lri $AR1, #0x0382
|
||
|
009a 009f 0000 lri $AC1.M, #0x0000
|
||
|
009c 0080 0280 lri $AR0, #0x0280
|
||
|
009e 02bf 05e6 call 0x05e6 // DmaCopy(0x0000, Dword[0x0382], 0x280)
|
||
|
00a0 0081 0384 lri $AR1, #0x0384
|
||
|
00a2 009f 0300 lri $AC1.M, #0x0300
|
||
|
00a4 0080 0020 lri $AR0, #0x0020
|
||
|
00a6 02bf 05e6 call 0x05e6 // DmaCopy(0x0300, Dword[0x0384], 32)
|
||
|
00a8 00de 0345 lr $AC0.M, @0x0345
|
||
|
00aa 00fe 0342 sr @0x0342, $AC0.M
|
||
|
00ac 02bf 0d01 call 0x0d01
|
||
|
00ae 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode_0E()
|
||
|
00b0 0080 037d lri $AR0, #0x037d
|
||
|
00b2 0e01 lris $AC0.M, #0x01
|
||
|
00b3 02bf 0065 call 0x0065
|
||
|
00b5 00de 037d lr $AC0.M, @0x037d
|
||
|
00b7 0240 7fff andi $AC0.M, #0x7fff
|
||
|
00b9 00fe 037d sr @0x037d, $AC0.M
|
||
|
00bb 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode_0D() - DsetDolbyDelay
|
||
|
00bd 0080 0374 lri $AR0, #0x0374
|
||
|
00bf 0e01 lris $AC0.M, #0x01
|
||
|
00c0 00fe 0377 sr @0x0377, $AC0.M
|
||
|
00c2 00fe 037c sr @0x037c, $AC0.M
|
||
|
00c4 02bf 0065 call 0x0065
|
||
|
00c6 00de 0345 lr $AC0.M, @0x0345
|
||
|
00c8 00fe 0376 sr @0x0376, $AC0.M
|
||
|
00ca 029f 0041 jmp 0x0041
|
||
|
|
||
|
// read PB
|
||
|
00cc 0081 034c lri $AR1, #0x034c
|
||
|
00ce 009f 0400 lri $AC1.M, #0x0400
|
||
|
00d0 0080 00c0 lri $AR0, #0x00c0
|
||
|
00d2 02bf 05e6 call 0x05e6 // DmaCopy(0x0400, Dword[0x034C], 192)
|
||
|
00d4 02df ret
|
||
|
|
||
|
// writeback PB
|
||
|
00d5 0081 034c lri $AR1, #0x034c
|
||
|
00d7 009f 0400 lri $AC1.M, #0x0400
|
||
|
00d9 0080 0080 lri $AR0, #0x0080
|
||
|
00db 0081 034c lri $AR1, #0x034c
|
||
|
00dd 193e lrri $AC0.M, @$AR1
|
||
|
00de 193c lrri $AC0.L, @$AR1
|
||
|
00df 0098 0000 lri $AX0.L, #0x0000
|
||
|
00e1 7000 addaxl $ACC0, $AX0.L
|
||
|
00e2 02bf 05f5 call 0x05f5 // DmaCopy(Dword[0x034C], 0x0400, 128)
|
||
|
00e4 02df ret
|
||
|
|
||
|
//
|
||
|
00e5 191e lrri $AC0.M, @$AR0
|
||
|
00e6 191a lrri $AX0.H, @$AR0
|
||
|
00e7 005f loop $AC1.M
|
||
|
00e8 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
00e9 1b7e srri @$AR3, $AC0.M
|
||
|
00ea 1b7a srri @$AR3, $AX0.H
|
||
|
00eb 02df ret
|
||
|
|
||
|
// memcpy(destination, source, length)
|
||
|
// AR0 = source address
|
||
|
// AR3 = destination address
|
||
|
// AC1.M = length in dwords
|
||
|
00ec 0000 nop
|
||
|
00ed 007f 00f2 bloop $AC1.M, 0x00f2
|
||
|
00ef 191e lrri $AC0.M, @$AR0
|
||
|
00f0 1b7e srri @$AR3, $AC0.M
|
||
|
00f1 191e lrri $AC0.M, @$AR0
|
||
|
00f2 1b7e srri @$AR3, $AC0.M
|
||
|
00f3 0000 nop
|
||
|
00f4 02df ret
|
||
|
|
||
|
//
|
||
|
00f5 191e lrri $AC0.M, @$AR0
|
||
|
00f6 191a lrri $AX0.H, @$AR0
|
||
|
00f7 007f 00fc bloop $AC1.M, 0x00fc
|
||
|
00f9 32b2 xorr'sl $AC0.M, $AX1.H : $AC0.M, $AX1.H
|
||
|
00fa 65a0 movr'ls $ACC1, $AX0.H : $AX0.H, $AC0.M
|
||
|
00fb 33ba xorr'slm $AC1.M, $AX1.H : $AC0.M, $AX1.H
|
||
|
00fc 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M
|
||
|
00fd 0000 nop
|
||
|
00fe 02df ret
|
||
|
|
||
|
// multiply routine
|
||
|
// AC1.M = size in words
|
||
|
// AR0 = source addres
|
||
|
// AR3 = destination address
|
||
|
00ff 8a00 m2 // multiply result by 2
|
||
|
0100 157f lsr $ACC1, #-1 // size >>= 1 (process buffers per dwords)
|
||
|
0101 1c20 mrr $AR1, $AR0 // AR1 = AR0
|
||
|
0102 1c03 mrr $AR0, $AR3 // AR0 = AR3
|
||
|
0103 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++;
|
||
|
0104 9051 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR1 // prod = AX0.L * AX0.H; AX0.H = Mem[AR1]; AR1++;
|
||
|
0105 925b mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX1.H, @$AR3 // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; AX1.H = Mem[AR3]; AR3++;
|
||
|
|
||
|
0106 007f 010b bloop $AC1.M, 0x010b
|
||
|
0108 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1 // ACC0 += AX1.H; AX0.H = Mem[AR1]; AR1++;
|
||
|
0109 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H // AC0.M = prod; AC0.L = 0; prod = AX0.L * AX0.H; ...
|
||
|
010a 4651 addr'l $ACC0, $AX1.H : $AX0.H, @$AR1
|
||
|
010b 92b2 mulmvz'sl $AX0.L, $AX0.H, $ACC0 : $AC0.M, $AX1.H
|
||
|
|
||
|
010c 8b00 m0 // don't multiply result
|
||
|
010d 02df ret
|
||
|
|
||
|
//
|
||
|
010e 8a00 m2
|
||
|
010f 191a lrri $AX0.H, @$AR0
|
||
|
0110 9050 mul'l $AX0.L, $AX0.H : $AX0.H, @$AR0
|
||
|
0111 9250 mulmvz'l $AX0.L, $AX0.H, $ACC0 : $AX0.H, @$AR0
|
||
|
0112 005f loop $AC1.M
|
||
|
0113 92a0 mulmvz'ls $AX0.L, $AX0.H, $ACC0 : $AX0.H, $AC0.M
|
||
|
0114 8b00 m0
|
||
|
0115 02df ret
|
||
|
|
||
|
// ClearBuffers()
|
||
|
// clears:
|
||
|
// - 80 words at 0x0D00 (right buffer #1)
|
||
|
// - 80 words at 0x0D60 (left buffer #1)
|
||
|
// - 80 words at 0x0CA0 (left buffer #2)
|
||
|
// - 80 words at 0x0F40 (right buffer #2)
|
||
|
// - 80 words at 0x0FA0
|
||
|
// - 80 words at 0x0A00
|
||
|
// - 80 words at 0x09A0
|
||
|
// - 80 words at 0x0DC8
|
||
|
// - 80 words at 0x0E28
|
||
|
// - 80 words at 0x0E88
|
||
|
// - 80 words at 0x0EE8
|
||
|
// copies:
|
||
|
// - 8 words from 0x0E10 to 0x0DC0
|
||
|
// - 8 words from 0x0E70 to 0x0E20
|
||
|
// - 8 words from 0x0ED0 to 0x0E80
|
||
|
// - 8 words from 0x0F30 to 0x0EE0
|
||
|
0116 8100 clr $ACC0
|
||
|
0117 8900 clr $ACC1
|
||
|
0118 0e50 lris $AC0.M, #0x50
|
||
|
0119 0080 0d00 lri $AR0, #0x0d00
|
||
|
011b 005e loop $AC0.M
|
||
|
011c 1b1f srri @$AR0, $AC1.M
|
||
|
011d 0080 0d60 lri $AR0, #0x0d60
|
||
|
011f 005e loop $AC0.M
|
||
|
0120 1b1f srri @$AR0, $AC1.M
|
||
|
0121 00da 0374 lr $AX0.H, @0x0374
|
||
|
0123 8600 tstaxh $AX0.H
|
||
|
0124 02b5 0f35 callz 0x0f35 // call this mixer if right buffer address is 0??? uh???
|
||
|
0126 8100 clr $ACC0
|
||
|
0127 8900 clr $ACC1
|
||
|
0128 0e50 lris $AC0.M, #0x50
|
||
|
0129 0080 0ca0 lri $AR0, #0x0ca0
|
||
|
012b 005e loop $AC0.M
|
||
|
012c 1b1f srri @$AR0, $AC1.M
|
||
|
012d 0080 0f40 lri $AR0, #0x0f40
|
||
|
012f 005e loop $AC0.M
|
||
|
0130 1b1f srri @$AR0, $AC1.M
|
||
|
0131 0080 0fa0 lri $AR0, #0x0fa0
|
||
|
0133 005e loop $AC0.M
|
||
|
0134 1b1f srri @$AR0, $AC1.M
|
||
|
0135 0080 0a00 lri $AR0, #0x0a00
|
||
|
0137 005e loop $AC0.M
|
||
|
0138 1b1f srri @$AR0, $AC1.M
|
||
|
0139 0080 09a0 lri $AR0, #0x09a0
|
||
|
013b 005e loop $AC0.M
|
||
|
013c 1b1f srri @$AR0, $AC1.M
|
||
|
013d 0f04 lris $AC1.M, #0x04
|
||
|
013e 0080 0e10 lri $AR0, #0x0e10
|
||
|
0140 0083 0dc0 lri $AR3, #0x0dc0
|
||
|
0142 02bf 00ec call 0x00ec // memcpy(0x0DC0, 0x0E10, 4);
|
||
|
0144 0080 0e70 lri $AR0, #0x0e70
|
||
|
0146 0083 0e20 lri $AR3, #0x0e20
|
||
|
0148 02bf 00ec call 0x00ec // memcpy(0x0E20, 0x0E70, 4);
|
||
|
014a 0080 0ed0 lri $AR0, #0x0ed0
|
||
|
014c 0083 0e80 lri $AR3, #0x0e80
|
||
|
014e 02bf 00ec call 0x00ec // memcpy(0x0E80, 0x0ED0, 4);
|
||
|
0150 0080 0f30 lri $AR0, #0x0f30
|
||
|
0152 0083 0ee0 lri $AR3, #0x0ee0
|
||
|
0154 02bf 00ec call 0x00ec // memcpy(0x0EE0, 0x0F30, 4);
|
||
|
0156 8100 clr $ACC0
|
||
|
0157 0e50 lris $AC0.M, #0x50
|
||
|
0158 8900 clr $ACC1
|
||
|
0159 0080 0dc8 lri $AR0, #0x0dc8
|
||
|
015b 005e loop $AC0.M
|
||
|
015c 1b1f srri @$AR0, $AC1.M
|
||
|
015d 0080 0e28 lri $AR0, #0x0e28
|
||
|
015f 005e loop $AC0.M
|
||
|
0160 1b1f srri @$AR0, $AC1.M
|
||
|
0161 0080 0e88 lri $AR0, #0x0e88
|
||
|
0163 005e loop $AC0.M
|
||
|
0164 1b1f srri @$AR0, $AC1.M
|
||
|
0165 0080 0ee8 lri $AR0, #0x0ee8
|
||
|
0167 005e loop $AC0.M
|
||
|
0168 1b1f srri @$AR0, $AC1.M
|
||
|
0169 02df ret
|
||
|
|
||
|
//
|
||
|
016a 009f 0580 lri $AC1.M, #0x0580
|
||
|
016c 009b 00a0 lri $AX1.H, #0x00a0
|
||
|
016e 0081 0393 lri $AR1, #0x0393
|
||
|
0170 18bc lrrd $AC0.L, @$AR1 // AC0.L = Mem[0x0393];
|
||
|
0171 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1 // AC0.M = Mem[0x0392];
|
||
|
0172 bc00 mulxac $AX0.H, $AX1.H, $ACC0 // ACC0 += (AX0.H * AX1.H); (Mem[0x03A4] * 160)
|
||
|
0173 0080 0050 lri $AR0, #0x0050
|
||
|
0175 02bf 05e8 call 0x05e8 // DmaCopy(0x0580, ((Dword[0x0392 << 16) | Dword[0x0393]) + (Mem[0x03A4] * 160), 80);
|
||
|
0177 02df ret
|
||
|
|
||
|
//
|
||
|
0178 00df 03a1 lr $AC1.M, @0x03a1
|
||
|
017a 0508 addis $ACC1, #0x08
|
||
|
017b 0080 0580 lri $AR0, #0x0580
|
||
|
017d 1c7f mrr $AR3, $AC1.M
|
||
|
017e 0098 7fff lri $AX0.L, #0x7fff
|
||
|
0180 8900 clr $ACC1
|
||
|
0181 0f50 lris $AC1.M, #0x50
|
||
|
0182 02bf 00ff call 0x00ff // mult routine
|
||
|
0184 02df ret
|
||
|
|
||
|
// mix?
|
||
|
0185 00c0 03a0 lr $AR0, @0x03a0
|
||
|
0187 191a lrri $AX0.H, @$AR0 // AX0.H = Mem[0x03A4];
|
||
|
0188 02bf 016a call 0x016a // get music?
|
||
|
018a 02bf 0178 call 0x0178
|
||
|
018c 8100 clr $ACC0
|
||
|
018d 8900 clr $ACC1
|
||
|
018e 00de 0390 lr $AC0.M, @0x0390 // First word of PB: status; 1 = playing, 0 = not playing
|
||
|
0190 02a0 0001 andf $AC0.M, #0x0001
|
||
|
0192 029d 019b jlz 0x019b
|
||
|
0194 0080 0398 lri $AR0, #0x0398 //
|
||
|
0196 0e08 lris $AC0.M, #0x08
|
||
|
0197 00c1 03a1 lr $AR1, @0x03a1
|
||
|
0199 02bf 0c43 call 0x0c43 // ???
|
||
|
019b 0f50 lris $AC1.M, #0x50
|
||
|
019c 00c0 03a1 lr $AR0, @0x03a1
|
||
|
019e 00da 0394 lr $AX0.H, @0x0394 //
|
||
|
01a0 8600 tstaxh $AX0.H
|
||
|
01a1 0295 01a8 jz 0x01a8
|
||
|
01a3 1c7a mrr $AR3, $AX0.H
|
||
|
01a4 00d8 0395 lr $AX0.L, @0x0395
|
||
|
01a6 02bf 00ff call 0x00ff // mult routine
|
||
|
01a8 0f50 lris $AC1.M, #0x50
|
||
|
01a9 00c0 03a1 lr $AR0, @0x03a1
|
||
|
01ab 00da 0396 lr $AX0.H, @0x0396
|
||
|
01ad 8600 tstaxh $AX0.H
|
||
|
01ae 0295 01b5 jz 0x01b5
|
||
|
01b0 1c7a mrr $AR3, $AX0.H
|
||
|
01b1 00d8 0397 lr $AX0.L, @0x0397
|
||
|
01b3 02bf 00ff call 0x00ff
|
||
|
01b5 00de 0390 lr $AC0.M, @0x0390
|
||
|
01b7 02a0 0002 andf $AC0.M, #0x0002
|
||
|
01b9 02dd retlz
|
||
|
01ba 0080 0398 lri $AR0, #0x0398
|
||
|
01bc 0e08 lris $AC0.M, #0x08
|
||
|
01bd 00c1 03a1 lr $AR1, @0x03a1
|
||
|
01bf 02bf 0c43 call 0x0c43
|
||
|
01c1 02df ret
|
||
|
|
||
|
// mix background music? called by cmd 02 (SyncFrame)
|
||
|
// uses the 4 first PBs
|
||
|
// so these PBs would be for background music?
|
||
|
01c2 8900 clr $ACC1
|
||
|
01c3 009f 0dc0 lri $AC1.M, #0x0dc0
|
||
|
01c5 00ff 03a1 sr @0x03a1, $AC1.M
|
||
|
01c7 009f 03a8 lri $AC1.M, #0x03a8
|
||
|
01c9 00ff 03a2 sr @0x03a2, $AC1.M
|
||
|
01cb 009f 03a4 lri $AC1.M, #0x03a4
|
||
|
01cd 00ff 03a0 sr @0x03a0, $AC1.M
|
||
|
|
||
|
01cf 1104 01ef bloopi #0x04, 0x01ef // Perform mixing for 4 PBs
|
||
|
01d1 00c0 03a2 lr $AR0, @0x03a2 // Inited to 0x03A8
|
||
|
01d3 0083 0390 lri $AR3, #0x0390
|
||
|
01d5 8900 clr $ACC1
|
||
|
01d6 0f08 lris $AC1.M, #0x08
|
||
|
01d7 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8); Copy the current PB to 0x0390
|
||
|
01d9 00da 0390 lr $AX0.H, @0x0390
|
||
|
01db 8600 tstaxh $AX0.H
|
||
|
01dc 0295 01e0 jz 0x01e0 // skip the call below if [0x0390] is nonzero? ([0x0390] = first word of PB, probably start/stop flag?)
|
||
|
01de 02bf 0185 call 0x0185 // mix?
|
||
|
01e0 8100 clr $ACC0
|
||
|
01e1 00de 03a2 lr $AC0.M, @0x03a2
|
||
|
01e3 0410 addis $ACC0, #0x10 // Increment address to next PB
|
||
|
01e4 00fe 03a2 sr @0x03a2, $AC0.M
|
||
|
01e6 00de 03a1 lr $AC0.M, @0x03a1
|
||
|
01e8 0460 addis $ACC0, #0x60 // Increment another value (buffer address???)
|
||
|
01e9 00fe 03a1 sr @0x03a1, $AC0.M
|
||
|
01eb 00de 03a0 lr $AC0.M, @0x03a0
|
||
|
01ed 7400 incm $AC0.M // Increment another value (address of something)
|
||
|
01ee 00fe 03a0 sr @0x03a0, $AC0.M
|
||
|
|
||
|
01f0 00da 0374 lr $AX0.H, @0x0374
|
||
|
01f2 8600 tstaxh $AX0.H
|
||
|
01f3 0294 0219 jnz 0x0219
|
||
|
01f5 0f50 lris $AC1.M, #0x50
|
||
|
01f6 0080 0be0 lri $AR0, #0x0be0
|
||
|
01f8 0083 0e80 lri $AR3, #0x0e80
|
||
|
01fa 0098 7fff lri $AX0.L, #0x7fff // +32767
|
||
|
01fc 02bf 00ff call 0x00ff // mult routine
|
||
|
01fe 0f50 lris $AC1.M, #0x50
|
||
|
01ff 0080 0be0 lri $AR0, #0x0be0
|
||
|
0201 0083 0ee0 lri $AR3, #0x0ee0
|
||
|
0203 0098 b820 lri $AX0.L, #0xb820 // -18400
|
||
|
0205 02bf 00ff call 0x00ff // mult routine
|
||
|
0207 0f28 lris $AC1.M, #0x28
|
||
|
0208 0080 0c68 lri $AR0, #0x0c68
|
||
|
020a 0083 0e80 lri $AR3, #0x0e80
|
||
|
020c 0098 b820 lri $AX0.L, #0xb820 // -18400
|
||
|
020e 02bf 00ff call 0x00ff // mult routine
|
||
|
0210 0f28 lris $AC1.M, #0x28
|
||
|
0211 0080 0c68 lri $AR0, #0x0c68
|
||
|
0213 0083 0ee0 lri $AR3, #0x0ee0
|
||
|
0215 0098 7fff lri $AX0.L, #0x7fff // +32767
|
||
|
0217 02bf 00ff call 0x00ff // mult routine
|
||
|
// clear buffers at 0x0BE0 and 0x0C40 (80 words(160 bytes) each)
|
||
|
0219 8100 clr $ACC0
|
||
|
021a 8900 clr $ACC1
|
||
|
021b 0e50 lris $AC0.M, #0x50
|
||
|
021c 0080 0be0 lri $AR0, #0x0be0
|
||
|
021e 005e loop $AC0.M
|
||
|
021f 1b1f srri @$AR0, $AC1.M
|
||
|
0220 0080 0c40 lri $AR0, #0x0c40
|
||
|
0222 005e loop $AC0.M
|
||
|
0223 1b1f srri @$AR0, $AC1.M
|
||
|
0224 02df ret
|
||
|
|
||
|
//
|
||
|
0225 00c0 03a0 lr $AR0, @0x03a0
|
||
|
0227 181a lrr $AX0.H, @$AR0
|
||
|
0228 8100 clr $ACC0
|
||
|
0229 181e lrr $AC0.M, @$AR0
|
||
|
022a 00db 0391 lr $AX1.H, @0x0391
|
||
|
022c 7400 incm $AC0.M
|
||
|
022d d100 cmpar $ACC1, $AX0.H
|
||
|
022e 0270 ifns
|
||
|
022f 8100 clr $ACC0
|
||
|
0230 1b1e srri @$AR0, $AC0.M
|
||
|
0231 00df 03a1 lr $AC1.M, @0x03a1
|
||
|
0233 009b 00a0 lri $AX1.H, #0x00a0
|
||
|
0235 0081 0393 lri $AR1, #0x0393
|
||
|
0237 18bc lrrd $AC0.L, @$AR1
|
||
|
0238 b871 mulx'l $AX0.H, $AX1.H : $AC0.M, @$AR1
|
||
|
0239 bc00 mulxac $AX0.H, $AX1.H, $ACC0
|
||
|
023a 0080 0050 lri $AR0, #0x0050
|
||
|
023c 02bf 05f5 call 0x05f5 // DmaCopy((Mem[0x0392] << 16 | Mem[0x0393]), Mem[0x03A1], 80);
|
||
|
023e 02df ret
|
||
|
|
||
|
// another mixer?
|
||
|
023f 00da 0374 lr $AX0.H, @0x0374
|
||
|
0241 8600 tstaxh $AX0.H
|
||
|
0242 0294 0258 jnz 0x0258
|
||
|
0244 8900 clr $ACC1
|
||
|
0245 0f28 lris $AC1.M, #0x28
|
||
|
0246 0080 0c40 lri $AR0, #0x0c40
|
||
|
0248 0083 0ea8 lri $AR3, #0x0ea8
|
||
|
024a 0098 b820 lri $AX0.L, #0xb820
|
||
|
024c 02bf 00ff call 0x00ff
|
||
|
024e 8900 clr $ACC1
|
||
|
024f 0f28 lris $AC1.M, #0x28
|
||
|
0250 0080 0c40 lri $AR0, #0x0c40
|
||
|
0252 0083 0f08 lri $AR3, #0x0f08
|
||
|
0254 0098 7fff lri $AX0.L, #0x7fff
|
||
|
0256 02bf 00ff call 0x00ff
|
||
|
0258 009f 0dc0 lri $AC1.M, #0x0dc0
|
||
|
025a 00ff 03a1 sr @0x03a1, $AC1.M
|
||
|
025c 009f 03a8 lri $AC1.M, #0x03a8
|
||
|
025e 00ff 03a2 sr @0x03a2, $AC1.M
|
||
|
0260 009f 03a4 lri $AC1.M, #0x03a4
|
||
|
0262 00ff 03a0 sr @0x03a0, $AC1.M
|
||
|
|
||
|
0264 1104 0282 bloopi #0x04, 0x0282
|
||
|
0266 00c0 03a2 lr $AR0, @0x03a2
|
||
|
0268 0083 0390 lri $AR3, #0x0390
|
||
|
026a 0f08 lris $AC1.M, #0x08
|
||
|
026b 02bf 00ec call 0x00ec // memcpy(0x0390, Mem[0x03A2], 8);
|
||
|
026d 00da 0390 lr $AX0.H, @0x0390
|
||
|
026f 8600 tstaxh $AX0.H
|
||
|
0270 0295 0274 jz 0x0274
|
||
|
0272 02bf 0225 call 0x0225
|
||
|
0274 00de 03a2 lr $AC0.M, @0x03a2
|
||
|
0276 0410 addis $ACC0, #0x10
|
||
|
0277 00fe 03a2 sr @0x03a2, $AC0.M
|
||
|
0279 00de 03a1 lr $AC0.M, @0x03a1
|
||
|
027b 0460 addis $ACC0, #0x60
|
||
|
027c 00fe 03a1 sr @0x03a1, $AC0.M
|
||
|
027e 00de 03a0 lr $AC0.M, @0x03a0
|
||
|
0280 7400 incm $AC0.M
|
||
|
0281 00fe 03a0 sr @0x03a0, $AC0.M
|
||
|
|
||
|
0283 02df ret
|
||
|
|
||
|
// CopyPBs()
|
||
|
// Copies some main memory region to 0x03A8
|
||
|
// The memory region contains what seems to be PBs...
|
||
|
// Each PB is 32 bytes (16 words) long
|
||
|
// The transfer copies 64 words, ie 4 PBs.
|
||
|
// There may be more PBs, though. Dunno...
|
||
|
0284 0081 0386 lri $AR1, #0x0386 // address of PBs, set by DsetupTable
|
||
|
0286 009f 03a8 lri $AC1.M, #0x03a8
|
||
|
0288 0080 0040 lri $AR0, #0x0040
|
||
|
028a 02bf 05e6 call 0x05e6 // DmaCopy(0x03A8, Dword[0x0386], 64)
|
||
|
028c 02df ret
|
||
|
|
||
|
// Helper
|
||
|
// Increment the 32-bit value at AR0 by the value
|
||
|
// in AX0.L.
|
||
|
028d 191e lrri $AC0.M, @$AR0
|
||
|
028e 189c lrrd $AC0.L, @$AR0
|
||
|
028f 4800 addax $ACC0, $AX0.L
|
||
|
0290 1b1e srri @$AR0, $AC0.M
|
||
|
0291 1b1c srri @$AR0, $AC0.L
|
||
|
0292 02df ret
|
||
|
|
||
|
// WaitForNextSyncMessage()
|
||
|
// Note: the wait loop continues until two values become non-equal.
|
||
|
// One of these values is set when sync mails are received.
|
||
|
// These mails, as well as 'regular' mails, are processed by the
|
||
|
// exception 7 handler. That's why that wait loop never checks for
|
||
|
// new mails.
|
||
|
0293 8100 clr $ACC0
|
||
|
0294 8900 clr $ACC1
|
||
|
0295 00df 0354 lr $AC1.M, @0x0354
|
||
|
0297 00de 034e lr $AC0.M, @0x034e
|
||
|
0299 8200 cmp
|
||
|
029a 0293 0293 jle 0x0293
|
||
|
029c 02df ret
|
||
|
|
||
|
// Opcode_02() - SyncFrame
|
||
|
// Message body: 5 mails
|
||
|
// Mail 1: bit0-15 = some number, bit16-32 = number of buffers to fill, bit24-30 = command (0x02)
|
||
|
// Mail 2: Address of right buffers in main memory (each buffer is 160 bytes long)
|
||
|
// Mail 3: Address of left buffers in main memory (each buffer is 160 bytes long)
|
||
|
// Mail 4: unused (zero)
|
||
|
// Mail 5: unused (zero)
|
||
|
// Stores the message body to 0x0388 and 0x0374.
|
||
|
// Performs mixing synchronously with the game.
|
||
|
029d 0080 0388 lri $AR0, #0x0388
|
||
|
029f 0081 0065 lri $AR1, #0x0065
|
||
|
02a1 0e02 lris $AC0.M, #0x02 // Copy only 2 mails. The 2 last mails are unused.
|
||
|
02a2 173f callr $AR1 // Copy message body to 0x0388
|
||
|
02a3 02bf 0476 call 0x0476 // Copy message body to 0x0374
|
||
|
02a5 00de 0344 lr $AC0.M, @0x0344
|
||
|
02a7 00fe 0341 sr @0x0341, $AC0.M
|
||
|
02a9 00de 0345 lr $AC0.M, @0x0345
|
||
|
02ab 00fe 038e sr @0x038e, $AC0.M // Mem[0x038E] = Mem[0x0345] (set by DsetupTable)
|
||
|
02ad 8100 clr $ACC0
|
||
|
02ae 00fe 0355 sr @0x0355, $AC0.M
|
||
|
02b0 02bf 0284 call 0x0284 // Copy 4 PBs to 0x03A8
|
||
|
02b2 0092 00ff lri $CR, #0x00ff
|
||
|
02b4 00de 0341 lr $AC0.M, @0x0341
|
||
|
|
||
|
02b6 007e 0471 bloop $AC0.M, 0x0471 // Outer loop: for(i = 0; i < number_of_buffers; i++)
|
||
|
02b8 02bf 0116 call 0x0116 // ClearBuffers()
|
||
|
02ba 02bf 01c2 call 0x01c2 // ??? mix background music? echo processing?
|
||
|
02bc 02bf 04e2 call 0x04e2 // ??? again a mixer?
|
||
|
02be 02bf 0a91 call 0x0a91 // ??? multiplications
|
||
|
02c0 00de 0355 lr $AC0.M, @0x0355
|
||
|
02c2 7400 incm $AC0.M // increment some counter
|
||
|
02c3 00fe 0355 sr @0x0355, $AC0.M
|
||
|
02c5 8100 clr $ACC0
|
||
|
02c6 00fe 0354 sr @0x0354, $AC0.M // reset some counter
|
||
|
02c8 00de 0342 lr $AC0.M, @0x0342
|
||
|
|
||
|
02ca 007e 0415 bloop $AC0.M, 0x0415 // Inner loop: for(j = 0; j < max (usually 64; set by DsetupTable); j++)
|
||
|
02cc 02bf 0293 call 0x0293 // WaitForNextSyncMessage()
|
||
|
02ce 8100 clr $ACC0
|
||
|
02cf 8900 clr $ACC1
|
||
|
02d0 00de 0354 lr $AC0.M, @0x0354
|
||
|
02d2 147c lsr $ACC0, #-4
|
||
|
02d3 0200 04fc addi $AC0.M, #0x04fc
|
||
|
02d5 1c1e mrr $AR0, $AC0.M
|
||
|
02d6 181f lrr $AC1.M, @$AR0
|
||
|
02d7 00de 0354 lr $AC0.M, @0x0354
|
||
|
02d9 0240 000f andi $AC0.M, #0x000f
|
||
|
02db 3d80 andc'ls $AC1.M : $AX0.L, $AC0.M
|
||
|
02dc 03c0 8000 andcf $AC1.M, #0x8000
|
||
|
02de 029c 0411 jlnz 0x0411 // skip if (AC1.M & 0x8000) != 0x8000
|
||
|
02e0 00d8 0354 lr $AX0.L, @0x0354
|
||
|
02e2 009a 0180 lri $AX0.H, #0x0180
|
||
|
02e4 8100 clr $ACC0
|
||
|
02e5 00de 0380 lr $AC0.M, @0x0380
|
||
|
02e7 00dc 0381 lr $AC0.L, @0x0381
|
||
|
02e9 9000 mul $AX0.L, $AX0.H
|
||
|
02ea 9400 mulac $AX0.L, $AX0.H, $ACC0 // ACC0 += (j * 384);
|
||
|
02eb 00fe 034c sr @0x034c, $AC0.M
|
||
|
02ed 00fc 034d sr @0x034d, $AC0.L
|
||
|
02ef 02bf 00cc call 0x00cc // read PB; dma transfer from (Dword[0x0380] + (j*384)) to 0x0400, 192 words
|
||
|
02f1 00da 0400 lr $AX0.H, @0x0400
|
||
|
02f3 8600 tstaxh $AX0.H
|
||
|
02f4 0295 0411 jz 0x0411 // skip if Mem[0x0400] is zero
|
||
|
02f6 00da 0401 lr $AX0.H, @0x0401
|
||
|
02f8 8600 tstaxh $AX0.H
|
||
|
02f9 0294 0411 jnz 0x0411 // skip if Mem[0x0401] is nonzero
|
||
|
02fb 00da 0433 lr $AX0.H, @0x0433
|
||
|
02fd 00fa 03f8 sr @0x03f8, $AX0.H // Mem[0x03F8] = Mem[0x0433]
|
||
|
02ff 00da 0406 lr $AX0.H, @0x0406
|
||
|
0301 8600 tstaxh $AX0.H
|
||
|
0302 0294 0ef5 jnz 0x0ef5 // jump to 0x0EF5 if Mem[0x0406] is nonzero
|
||
|
0304 8100 clr $ACC0
|
||
|
0305 00de 0480 lr $AC0.M, @0x0480 // switch (Mem[0x0480]) ; sound format?
|
||
|
0307 0609 cmpis $ACC0, #0x09 // case 0x09: (smg)
|
||
|
0308 0295 031b jz 0x031b
|
||
|
030a 0605 cmpis $ACC0, #0x05 // case 0x05:
|
||
|
030b 0295 031b jz 0x031b
|
||
|
030d 0608 cmpis $ACC0, #0x08 // case 0x08:
|
||
|
030e 0295 0ac1 jz 0x0ac1
|
||
|
0310 0610 cmpis $ACC0, #0x10 // case 0x10: (smg)
|
||
|
0311 0295 0b3e jz 0x0b3e
|
||
|
0313 0620 cmpis $ACC0, #0x20 // case 0x20:
|
||
|
0314 0295 0baf jz 0x0baf
|
||
|
0316 0621 cmpis $ACC0, #0x21 // case 0x21:
|
||
|
0317 0295 0bb7 jz 0x0bb7
|
||
|
0319 029f 09ae jmp 0x09ae // default:
|
||
|
// sound types 9 and 5
|
||
|
// no compression?
|
||
|
031b 00d8 0402 lr $AX0.L, @0x0402 // 0x0D71
|
||
|
031d 8100 clr $ACC0
|
||
|
031e 8900 clr $ACC1
|
||
|
031f 00dc 0430 lr $AC0.L, @0x0430 // 0x0000
|
||
|
0321 8d00 set15
|
||
|
0322 0950 lris $AX1.L, #0x50
|
||
|
0323 a000 mulx $AX0.L, $AX1.L
|
||
|
0324 a400 mulxac $AX0.L, $AX1.L, $ACC0
|
||
|
0325 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0430] + (Mem[0x0402] * 80)) << 4; (AC0.L = 0x3500; AC0.M = 0x0043; AC0.H = 0x00;)
|
||
|
0326 8c00 clr15
|
||
|
0327 1ffe mrr $AC1.M, $AC0.M // AC1.M = 0x0043;
|
||
|
0328 0083 0580 lri $AR3, #0x0580 // AR3 = 0x0580;
|
||
|
032a 02bf 086e call 0x086e
|
||
|
032c 029f 032e jmp 0x032e
|
||
|
|
||
|
032e 0080 0580 lri $AR0, #0x0580
|
||
|
0330 0081 0520 lri $AR1, #0x0520
|
||
|
0332 0099 0000 lri $AX1.L, #0x0000
|
||
|
0334 02bf 0e75 call 0x0e75 // store ramp
|
||
|
|
||
|
0336 009e 0520 lri $AC0.M, #0x0520
|
||
|
0338 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] = 0x0520;
|
||
|
033a 8900 clr $ACC1
|
||
|
033b 00df 0484 lr $AC1.M, @0x0484
|
||
|
033d 0340 001f andi $AC1.M, #0x001f
|
||
|
033f b900 tst $ACC1
|
||
|
0340 0295 0366 jz 0x0366
|
||
|
0342 00de 038f lr $AC0.M, @0x038f
|
||
|
0344 5c00 sub $ACC0, $AC1.L
|
||
|
0345 00fe 038f sr @0x038f, $AC0.M // Mem[0x038F] -= AC1.L; uh?
|
||
|
0347 1c7e mrr $AR3, $AC0.M
|
||
|
0348 0080 0440 lri $AR0, #0x0440
|
||
|
034a 05fe addis $ACC1, #0xfe
|
||
|
034b 02bf 00e5 call 0x00e5 // ???
|
||
|
034d 0080 0490 lri $AR0, #0x0490
|
||
|
034f 00c1 038f lr $AR1, @0x038f
|
||
|
0351 8900 clr $ACC1
|
||
|
0352 00df 0484 lr $AC1.M, @0x0484
|
||
|
0354 0340 001f andi $AC1.M, #0x001f
|
||
|
0356 02bf 0c62 call 0x0c62 // ???
|
||
|
0358 00de 038f lr $AC0.M, @0x038f
|
||
|
035a 0450 addis $ACC0, #0x50
|
||
|
035b 1c1e mrr $AR0, $AC0.M
|
||
|
035c 0083 0440 lri $AR3, #0x0440
|
||
|
035e 8900 clr $ACC1
|
||
|
035f 00df 0484 lr $AC1.M, @0x0484
|
||
|
0361 0340 001f andi $AC1.M, #0x001f
|
||
|
0363 05fe addis $ACC1, #0xfe
|
||
|
0364 02bf 00e5 call 0x00e5 // ???
|
||
|
|
||
|
0366 00de 0484 lr $AC0.M, @0x0484
|
||
|
0368 0240 0020 andi $AC0.M, #0x0020
|
||
|
036a 0295 0388 jz 0x0388
|
||
|
036c 0080 04a4 lri $AR0, #0x04a4
|
||
|
036e 00c1 038f lr $AR1, @0x038f
|
||
|
0370 0082 0454 lri $AR2, #0x0454
|
||
|
0372 0083 04a7 lri $AR3, #0x04a7
|
||
|
0374 18fa lrrd $AX0.H, @$AR3
|
||
|
0375 8600 tstaxh $AX0.H
|
||
|
0376 0294 0386 jnz 0x0386
|
||
|
0378 18fa lrrd $AX0.H, @$AR3
|
||
|
0379 8600 tstaxh $AX0.H
|
||
|
037a 0294 0386 jnz 0x0386
|
||
|
037c 18fa lrrd $AX0.H, @$AR3
|
||
|
037d 8600 tstaxh $AX0.H
|
||
|
037e 0294 0386 jnz 0x0386
|
||
|
0380 8100 clr $ACC0
|
||
|
0381 18fe lrrd $AC0.M, @$AR3
|
||
|
0382 0280 7fff cmpi $AC0.M, #0x7fff
|
||
|
0384 0295 0388 jz 0x0388
|
||
|
0386 02bf 0c7d call 0x0c7d // ???
|
||
|
|
||
|
0388 8100 clr $ACC0
|
||
|
0389 00de 042c lr $AC0.M, @0x042c // 0x0001
|
||
|
038b b100 tst $ACC0
|
||
|
038c 0295 0392 jz 0x0392
|
||
|
038e 02bf 0dc3 call 0x0dc3 // ???
|
||
|
0390 029f 0407 jmp 0x0407
|
||
|
|
||
|
0392 8100 clr $ACC0
|
||
|
0393 1c9e mrr $IX0, $AC0.M
|
||
|
0394 1cde mrr $IX2, $AC0.M
|
||
|
0395 7400 incm $AC0.M
|
||
|
0396 1cfe mrr $IX3, $AC0.M
|
||
|
0397 8100 clr $ACC0
|
||
|
0398 00de 0407 lr $AC0.M, @0x0407
|
||
|
039a b100 tst $ACC0
|
||
|
039b 0295 03aa jz 0x03aa
|
||
|
039d 00c3 038f lr $AR3, @0x038f
|
||
|
039f 0007 dar $AR3
|
||
|
03a0 0080 0477 lri $AR0, #0x0477
|
||
|
03a2 0084 ffff lri $IX0, #0xffff
|
||
|
03a4 0087 ffff lri $IX3, #0xffff
|
||
|
03a6 199a lrrn $AX0.H, @$AR0
|
||
|
03a7 6554 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR0
|
||
|
03a8 005e loop $AC0.M
|
||
|
03a9 65ad movr'lsnm $ACC1, $AX0.H : $AX0.H, $AC1.M
|
||
|
03aa 00da 0485 lr $AX0.H, @0x0485
|
||
|
03ac 8600 tstaxh $AX0.H
|
||
|
03ad 0295 03c0 jz 0x03c0
|
||
|
03af 8900 clr $ACC1
|
||
|
03b0 0086 0005 lri $IX2, #0x0005
|
||
|
03b2 0082 040a lri $AR2, #0x040a
|
||
|
|
||
|
03b4 1106 03b8 bloopi #0x06, 0x03b8
|
||
|
03b6 18de lrrd $AC0.M, @$AR2
|
||
|
03b7 147f lsr $ACC0, #-1
|
||
|
03b8 4d36 add'sn $ACC1, $AC0.L : @$AR2, $AC0.M
|
||
|
|
||
|
03b9 b900 tst $ACC1
|
||
|
03ba 0294 03c0 jnz 0x03c0
|
||
|
03bc 009a 0001 lri $AX0.H, #0x0001
|
||
|
03be 00fa 0401 sr @0x0401, $AX0.H // Key Off
|
||
|
03c0 8f00 set40
|
||
|
03c1 0086 0002 lri $IX2, #0x0002
|
||
|
03c3 0082 0408 lri $AR2, #0x0408
|
||
|
|
||
|
03c5 1106 03f0 bloopi #0x06, 0x03f0
|
||
|
03c7 8100 clr $ACC0
|
||
|
03c8 195e lrri $AC0.M, @$AR2
|
||
|
03c9 1200 sbclr #0x00
|
||
|
03ca b100 tst $ACC0
|
||
|
03cb 0275 ifz
|
||
|
03cc 1300 sbset #0x00
|
||
|
03cd 1c7e mrr $AR3, $AC0.M
|
||
|
03ce 195e lrri $AC0.M, @$AR2
|
||
|
03cf 195f lrri $AC1.M, @$AR2
|
||
|
03d0 5c00 sub $ACC0, $AC1.L
|
||
|
03d1 14fb asr $ACC0, #-5
|
||
|
03d2 1f5e mrr $AX0.H, $AC0.M
|
||
|
03d3 1f1c mrr $AX0.L, $AC0.L
|
||
|
03d4 185e lrr $AC0.M, @$AR2
|
||
|
03d5 0240 00ff andi $AC0.M, #0x00ff
|
||
|
03d7 1f7e mrr $AX1.H, $AC0.M
|
||
|
03d8 185e lrr $AC0.M, @$AR2
|
||
|
03d9 1478 lsr $ACC0, #-8
|
||
|
03da 009c 0000 lri $AC0.L, #0x0000
|
||
|
03dc d100 cmpar $ACC1, $AX0.H
|
||
|
03dd 0295 03e5 jz 0x03e5
|
||
|
03df 185e lrr $AC0.M, @$AR2
|
||
|
03e0 0272 ifg
|
||
|
03e1 7400 incm $AC0.M
|
||
|
03e2 0271 ifs
|
||
|
03e3 7800 decm $AC0.M
|
||
|
03e4 1a5e srr @$AR2, $AC0.M
|
||
|
03e5 0006 dar $AR2
|
||
|
03e6 00de 038f lr $AC0.M, @0x038f
|
||
|
03e8 5600 subr $ACC0, $AX1.H
|
||
|
03e9 029d 03ee jlz 0x03ee
|
||
|
03eb 1c1e mrr $AR0, $AC0.M
|
||
|
03ec 02bf 0d99 call 0x0d99 // ???
|
||
|
03ee 0000 nop
|
||
|
03ef 1b5f srri @$AR2, $AC1.M
|
||
|
03f0 000a iar $AR2
|
||
|
|
||
|
03f1 8e00 set16
|
||
|
03f2 8100 clr $ACC0
|
||
|
03f3 00de 0407 lr $AC0.M, @0x0407
|
||
|
03f5 b100 tst $ACC0
|
||
|
03f6 0295 0407 jz 0x0407
|
||
|
03f8 00c3 038f lr $AR3, @0x038f
|
||
|
03fa 0087 004f lri $IX3, #0x004f
|
||
|
03fc 001f addarn $AR3, $IX3
|
||
|
03fd 0080 0477 lri $AR0, #0x0477
|
||
|
03ff 0084 ffff lri $IX0, #0xffff
|
||
|
0401 0087 ffff lri $IX3, #0xffff
|
||
|
0403 19fa lrrn $AX0.H, @$AR3
|
||
|
0404 6557 movr'ln $ACC1, $AX0.H : $AX0.H, @$AR3
|
||
|
0405 005e loop $AC0.M
|
||
|
0406 65af movr'slnm $ACC1, $AX0.H : $AC1.M, $AX0.H
|
||
|
|
||
|
0407 00da 0406 lr $AX0.H, @0x0406
|
||
|
0409 8600 tstaxh $AX0.H
|
||
|
040a 0294 040f jnz 0x040f // skip zeroing of Mem[0x0404] if Mem[0x0406] is nonzero
|
||
|
040c 8100 clr $ACC0
|
||
|
040d 00fe 0404 sr @0x0404, $AC0.M // Mem[0x0404] = 0x0000;
|
||
|
040f 02bf 00d5 call 0x00d5 // write back PB
|
||
|
0411 00de 0354 lr $AC0.M, @0x0354
|
||
|
0413 7400 incm $AC0.M // increment some counter
|
||
|
0414 00fe 0354 sr @0x0354, $AC0.M
|
||
|
// end of inner loop
|
||
|
0416 0e00 lris $AC0.M, #0x00
|
||
|
0417 00fe 034e sr @0x034e, $AC0.M
|
||
|
0419 0e04 lris $AC0.M, #0x04
|
||
|
041a 02bf 079b call 0x079b // SendMail_DCD1(0x0004)
|
||
|
041c 00de 0355 lr $AC0.M, @0x0355
|
||
|
041e 0260 ff00 ori $AC0.M, #0xff00
|
||
|
0420 02bf 07a5 call 0x07a5 // SendMail_F355(0xFF00 | Mem[0x0355])
|
||
|
0422 02bf 0d1f call 0x0d1f // ???
|
||
|
0424 02bf 0d31 call 0x0d31 // ???
|
||
|
0426 02bf 0d86 call 0x0d86 // perform mults on buffer #1
|
||
|
0428 00de 0341 lr $AC0.M, @0x0341
|
||
|
042a 7800 decm $AC0.M // decrement some counter
|
||
|
042b 00fe 0341 sr @0x0341, $AC0.M
|
||
|
042d 0080 09a0 lri $AR0, #0x09a0
|
||
|
042f 0083 0d00 lri $AR3, #0x0d00
|
||
|
0431 0f50 lris $AC1.M, #0x50
|
||
|
0432 0098 5a82 lri $AX0.L, #0x5a82
|
||
|
0434 02bf 00ff call 0x00ff // operations on right buffer
|
||
|
0436 0080 09a0 lri $AR0, #0x09a0
|
||
|
0438 0083 0d60 lri $AR3, #0x0d60
|
||
|
043a 0f50 lris $AC1.M, #0x50
|
||
|
043b 02bf 00ff call 0x00ff // operations on left buffer
|
||
|
043d 0083 0d00 lri $AR3, #0x0d00
|
||
|
043f 02bf 0db1 call 0x0db1 // operations on right buffer
|
||
|
0441 0081 0388 lri $AR1, #0x0388
|
||
|
0443 009f 0d00 lri $AC1.M, #0x0d00
|
||
|
0445 0080 0050 lri $AR0, #0x0050
|
||
|
0447 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0388], 0x0D00, 80); Copy the final right buffer to main memory
|
||
|
0449 0080 0fa0 lri $AR0, #0x0fa0
|
||
|
044b 0083 0d60 lri $AR3, #0x0d60
|
||
|
044d 0f50 lris $AC1.M, #0x50
|
||
|
044e 0098 8000 lri $AX0.L, #0x8000
|
||
|
0450 02bf 00ff call 0x00ff // operations on left buffer (uh? again?)
|
||
|
0452 0083 0d60 lri $AR3, #0x0d60
|
||
|
0454 02bf 0db1 call 0x0db1 // operations on left buffer
|
||
|
0456 0081 038a lri $AR1, #0x038a
|
||
|
0458 009f 0d60 lri $AC1.M, #0x0d60
|
||
|
045a 0080 0050 lri $AR0, #0x0050
|
||
|
045c 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x038A], 0x0D60, 80); Copy the final left buffer to main memory
|
||
|
045e 009a 0000 lri $AX0.H, #0x0000
|
||
|
0460 0098 00a0 lri $AX0.L, #0x00a0
|
||
|
0462 0080 0388 lri $AR0, #0x0388
|
||
|
0464 02bf 028d call 0x028d // Increment right buffer address
|
||
|
0466 0080 038a lri $AR0, #0x038a
|
||
|
0468 02bf 028d call 0x028d // Increment left buffer address
|
||
|
046a 02bf 023f call 0x023f // call that other mixer
|
||
|
046c 02bf 04b1 call 0x04b1
|
||
|
046e 02bf 0488 call 0x0488 // copy other buffers to main memory
|
||
|
0470 0000 nop
|
||
|
0471 0000 nop
|
||
|
// end of outer loop
|
||
|
0472 0080 002b lri $AR0, #0x002b
|
||
|
0474 029f 0734 jmp 0x0734
|
||
|
|
||
|
// copy the message body to 0x0374
|
||
|
0476 0080 0374 lri $AR0, #0x0374
|
||
|
0478 0e02 lris $AC0.M, #0x02
|
||
|
0479 02bf 0067 call 0x0067
|
||
|
047b 00de 0374 lr $AC0.M, @0x0374
|
||
|
047d 0240 7fff andi $AC0.M, #0x7fff
|
||
|
047f 00fe 0374 sr @0x0374, $AC0.M
|
||
|
0481 00de 0376 lr $AC0.M, @0x0376
|
||
|
0483 0240 7fff andi $AC0.M, #0x7fff
|
||
|
0485 00fe 0376 sr @0x0376, $AC0.M
|
||
|
0487 02df ret
|
||
|
|
||
|
// copy other buffers to main memory
|
||
|
// that's probably why the mail body of cmd 0x02 is copied
|
||
|
// to two locations...
|
||
|
0488 00da 0374 lr $AX0.H, @0x0374
|
||
|
048a 8600 tstaxh $AX0.H // Return immediately if right buffer address is zero
|
||
|
048b 02d5 retz // But what happens if the left buffer address is zero?
|
||
|
048c 0083 0f40 lri $AR3, #0x0f40
|
||
|
048e 02bf 0db1 call 0x0db1 // copy right buffer
|
||
|
0490 0083 0ca0 lri $AR3, #0x0ca0
|
||
|
0492 02bf 0db1 call 0x0db1 // copy left buffer
|
||
|
0494 0081 0374 lri $AR1, #0x0374
|
||
|
0496 009f 0f40 lri $AC1.M, #0x0f40
|
||
|
0498 0080 0050 lri $AR0, #0x0050
|
||
|
049a 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0374], 0x0F40, 80); Right buffer
|
||
|
049c 0081 0376 lri $AR1, #0x0376
|
||
|
049e 009f 0ca0 lri $AC1.M, #0x0ca0
|
||
|
04a0 0080 0050 lri $AR0, #0x0050
|
||
|
04a2 02bf 05f3 call 0x05f3 // DmaCopy(Dword[0x0376], 0x0CA0, 80); Left buffer
|
||
|
04a4 009a 0000 lri $AX0.H, #0x0000
|
||
|
04a6 0098 00a0 lri $AX0.L, #0x00a0
|
||
|
04a8 0080 0374 lri $AR0, #0x0374
|
||
|
04aa 02bf 028d call 0x028d // Increment right buffer address
|
||
|
04ac 0080 0376 lri $AR0, #0x0376
|
||
|
04ae 02bf 028d call 0x028d // Increment left buffer address
|
||
|
04b0 02df ret
|
||
|
|
||
|
//
|
||
|
04b1 00da 0374 lr $AX0.H, @0x0374
|
||
|
04b3 8600 tstaxh $AX0.H
|
||
|
04b4 02d5 retz
|
||
|
04b5 009f 0be0 lri $AC1.M, #0x0be0
|
||
|
04b7 00ff 03a1 sr @0x03a1, $AC1.M
|
||
|
04b9 00df 03ca lr $AC1.M, @0x03ca
|
||
|
04bb 00ff 0392 sr @0x0392, $AC1.M
|
||
|
04bd 00df 03cb lr $AC1.M, @0x03cb
|
||
|
04bf 00ff 0393 sr @0x0393, $AC1.M
|
||
|
04c1 009f 03a6 lri $AC1.M, #0x03a6
|
||
|
04c3 00ff 03a0 sr @0x03a0, $AC1.M
|
||
|
04c5 00df 03c9 lr $AC1.M, @0x03c9
|
||
|
04c7 00ff 0391 sr @0x0391, $AC1.M
|
||
|
04c9 02bf 0225 call 0x0225
|
||
|
04cb 009f 0c40 lri $AC1.M, #0x0c40
|
||
|
04cd 00ff 03a1 sr @0x03a1, $AC1.M
|
||
|
04cf 00df 03da lr $AC1.M, @0x03da
|
||
|
04d1 00ff 0392 sr @0x0392, $AC1.M
|
||
|
04d3 00df 03db lr $AC1.M, @0x03db
|
||
|
04d5 00ff 0393 sr @0x0393, $AC1.M
|
||
|
04d7 009f 03a7 lri $AC1.M, #0x03a7
|
||
|
04d9 00ff 03a0 sr @0x03a0, $AC1.M
|
||
|
04db 00df 03d9 lr $AC1.M, @0x03d9
|
||
|
04dd 00ff 0391 sr @0x0391, $AC1.M
|
||
|
04df 02bf 0225 call 0x0225
|
||
|
04e1 02df ret
|
||
|
|
||
|
// mixer?
|
||
|
04e2 00da 0374 lr $AX0.H, @0x0374 // Check if right buffer address is zero
|
||
|
04e4 8600 tstaxh $AX0.H
|
||
|
04e5 02d5 retz
|
||
|
04e6 00da 03d8 lr $AX0.H, @0x03d8 // uh?
|
||
|
04e8 8600 tstaxh $AX0.H
|
||
|
04e9 02d5 retz
|
||
|
04ea 0083 0be0 lri $AR3, #0x0be0
|
||
|
04ec 0080 0c30 lri $AR0, #0x0c30
|
||
|
04ee 0f04 lris $AC1.M, #0x04
|
||
|
04ef 02bf 00ec call 0x00ec // memcpy(0x0BE0, 0x0C30, 4);
|
||
|
04f1 0083 0c40 lri $AR3, #0x0c40
|
||
|
04f3 0080 0c90 lri $AR0, #0x0c90
|
||
|
04f5 0f04 lris $AC1.M, #0x04
|
||
|
04f6 02bf 00ec call 0x00ec // memcpy(0x0C40, 0x0C90, 4);
|
||
|
04f8 00df 03ca lr $AC1.M, @0x03ca
|
||
|
04fa 00ff 0392 sr @0x0392, $AC1.M
|
||
|
04fc 00df 03cb lr $AC1.M, @0x03cb
|
||
|
04fe 00ff 0393 sr @0x0393, $AC1.M
|
||
|
0500 00df 03a6 lr $AC1.M, @0x03a6
|
||
|
0502 7500 incm $AC1.M
|
||
|
0503 1f5f mrr $AX0.H, $AC1.M
|
||
|
0504 009f 0be8 lri $AC1.M, #0x0be8
|
||
|
0506 02bf 016c call 0x016c
|
||
|
0508 00df 03da lr $AC1.M, @0x03da
|
||
|
050a 00ff 0392 sr @0x0392, $AC1.M
|
||
|
050c 00df 03db lr $AC1.M, @0x03db
|
||
|
050e 00ff 0393 sr @0x0393, $AC1.M
|
||
|
0510 00df 03a7 lr $AC1.M, @0x03a7
|
||
|
0512 7500 incm $AC1.M
|
||
|
0513 1f5f mrr $AX0.H, $AC1.M
|
||
|
0514 009f 0c48 lri $AC1.M, #0x0c48
|
||
|
0516 02bf 016c call 0x016c
|
||
|
0518 00de 03c8 lr $AC0.M, @0x03c8
|
||
|
051a 02a0 0001 andf $AC0.M, #0x0001
|
||
|
051c 029d 0525 jlz 0x0525
|
||
|
051e 0080 03d0 lri $AR0, #0x03d0
|
||
|
0520 0e08 lris $AC0.M, #0x08
|
||
|
0521 0081 0be0 lri $AR1, #0x0be0
|
||
|
0523 02bf 0c43 call 0x0c43
|
||
|
0525 00de 03d8 lr $AC0.M, @0x03d8
|
||
|
0527 02a0 0001 andf $AC0.M, #0x0001
|
||
|
0529 029d 0532 jlz 0x0532
|
||
|
052b 0080 03e0 lri $AR0, #0x03e0
|
||
|
052d 0e08 lris $AC0.M, #0x08
|
||
|
052e 0081 0c40 lri $AR1, #0x0c40
|
||
|
0530 02bf 0c43 call 0x0c43
|
||
|
0532 0f50 lris $AC1.M, #0x50
|
||
|
0533 0080 0be0 lri $AR0, #0x0be0
|
||
|
0535 0083 0f40 lri $AR3, #0x0f40
|
||
|
0537 00d8 03cd lr $AX0.L, @0x03cd
|
||
|
0539 02bf 00ff call 0x00ff
|
||
|
053b 0f50 lris $AC1.M, #0x50
|
||
|
053c 0080 0c40 lri $AR0, #0x0c40
|
||
|
053e 0083 0ca0 lri $AR3, #0x0ca0
|
||
|
0540 00d8 03df lr $AX0.L, @0x03df
|
||
|
0542 02bf 00ff call 0x00ff
|
||
|
0544 00de 03c8 lr $AC0.M, @0x03c8
|
||
|
0546 02a0 0002 andf $AC0.M, #0x0002
|
||
|
0548 029d 0551 jlz 0x0551
|
||
|
054a 0080 03d0 lri $AR0, #0x03d0
|
||
|
054c 0e08 lris $AC0.M, #0x08
|
||
|
054d 0081 0be0 lri $AR1, #0x0be0
|
||
|
054f 02bf 0c43 call 0x0c43
|
||
|
0551 00de 03d8 lr $AC0.M, @0x03d8
|
||
|
0553 02a0 0002 andf $AC0.M, #0x0002
|
||
|
0555 029d 055e jlz 0x055e
|
||
|
0557 0080 03e0 lri $AR0, #0x03e0
|
||
|
0559 0e08 lris $AC0.M, #0x08
|
||
|
055a 0081 0c40 lri $AR1, #0x0c40
|
||
|
055c 02bf 0c43 call 0x0c43
|
||
|
055e 02df ret
|
||
|
|
||
|
// Opcode_07() -
|
||
|
055f 0080 0346 lri $AR0, #0x0346
|
||
|
0561 02bf 0065 call 0x0065
|
||
|
0563 02bf 0065 call 0x0065
|
||
|
0565 0081 0346 lri $AR1, #0x0346
|
||
|
0567 193e lrri $AC0.M, @$AR1
|
||
|
0568 193c lrri $AC0.L, @$AR1
|
||
|
0569 009f 0400 lri $AC1.M, #0x0400
|
||
|
056b 00c0 0345 lr $AR0, @0x0345
|
||
|
056d 02bf 05e8 call 0x05e8
|
||
|
056f 0081 0348 lri $AR1, #0x0348
|
||
|
0571 193e lrri $AC0.M, @$AR1
|
||
|
0572 193c lrri $AC0.L, @$AR1
|
||
|
0573 009f 0800 lri $AC1.M, #0x0800
|
||
|
0575 00c0 0345 lr $AR0, @0x0345
|
||
|
0577 02bf 05e8 call 0x05e8
|
||
|
0579 0081 0346 lri $AR1, #0x0346
|
||
|
057b 193e lrri $AC0.M, @$AR1
|
||
|
057c 193c lrri $AC0.L, @$AR1
|
||
|
057d 009f 0800 lri $AC1.M, #0x0800
|
||
|
057f 00c0 0345 lr $AR0, @0x0345
|
||
|
0581 02bf 05f5 call 0x05f5
|
||
|
0583 0081 0348 lri $AR1, #0x0348
|
||
|
0585 193e lrri $AC0.M, @$AR1
|
||
|
0586 193c lrri $AC0.L, @$AR1
|
||
|
0587 009f 0400 lri $AC1.M, #0x0400
|
||
|
0589 00c0 0345 lr $AR0, @0x0345
|
||
|
058b 02bf 05f5 call 0x05f5
|
||
|
058d 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode_09() -
|
||
|
058f 0080 0346 lri $AR0, #0x0346
|
||
|
0591 02bf 0065 call 0x0065
|
||
|
0593 02bf 0065 call 0x0065
|
||
|
0595 0081 0346 lri $AR1, #0x0346
|
||
|
0597 193e lrri $AC0.M, @$AR1
|
||
|
0598 193c lrri $AC0.L, @$AR1
|
||
|
0599 009f 0400 lri $AC1.M, #0x0400
|
||
|
059b 00c0 0345 lr $AR0, @0x0345
|
||
|
059d 02bf 05e8 call 0x05e8
|
||
|
059f 0081 0348 lri $AR1, #0x0348
|
||
|
05a1 193e lrri $AC0.M, @$AR1
|
||
|
05a2 193c lrri $AC0.L, @$AR1
|
||
|
05a3 009f 0400 lri $AC1.M, #0x0400
|
||
|
05a5 00c0 0345 lr $AR0, @0x0345
|
||
|
05a7 02bf 05f5 call 0x05f5
|
||
|
05a9 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode_08() -
|
||
|
05ab 0080 0346 lri $AR0, #0x0346
|
||
|
05ad 02bf 0065 call 0x0065
|
||
|
05af 02bf 0065 call 0x0065
|
||
|
05b1 0081 0346 lri $AR1, #0x0346
|
||
|
05b3 193e lrri $AC0.M, @$AR1
|
||
|
05b4 193c lrri $AC0.L, @$AR1
|
||
|
05b5 009f 0400 lri $AC1.M, #0x0400
|
||
|
05b7 00c0 0344 lr $AR0, @0x0344
|
||
|
05b9 02bf 05e8 call 0x05e8
|
||
|
05bb 0081 0348 lri $AR1, #0x0348
|
||
|
05bd 193e lrri $AC0.M, @$AR1
|
||
|
05be 193c lrri $AC0.L, @$AR1
|
||
|
05bf 009f 0800 lri $AC1.M, #0x0800
|
||
|
05c1 00c0 0344 lr $AR0, @0x0344
|
||
|
05c3 02bf 05e8 call 0x05e8
|
||
|
05c5 0080 0400 lri $AR0, #0x0400
|
||
|
05c7 0083 0800 lri $AR3, #0x0800
|
||
|
05c9 0084 0000 lri $IX0, #0x0000
|
||
|
05cb 00da 0345 lr $AX0.H, @0x0345
|
||
|
05cd 00df 0344 lr $AC1.M, @0x0344
|
||
|
05cf 8f00 set40
|
||
|
05d0 197b lrri $AX1.H, @$AR3
|
||
|
05d1 b800 mulx $AX0.H, $AX1.H
|
||
|
05d2 197b lrri $AX1.H, @$AR3
|
||
|
05d3 007f 05d8 bloop $AC1.M, 0x05d8
|
||
|
05d5 199e lrrn $AC0.M, @$AR0
|
||
|
05d6 bc00 mulxac $AX0.H, $AX1.H, $ACC0
|
||
|
05d7 80b2 nx'sl : $AC0.M, $AX1.H
|
||
|
05d8 0000 nop
|
||
|
05d9 8e00 set16
|
||
|
05da 0081 0346 lri $AR1, #0x0346
|
||
|
05dc 193e lrri $AC0.M, @$AR1
|
||
|
05dd 193c lrri $AC0.L, @$AR1
|
||
|
05de 009f 0400 lri $AC1.M, #0x0400
|
||
|
05e0 00c0 0344 lr $AR0, @0x0344
|
||
|
05e2 02bf 05f5 call 0x05f5
|
||
|
05e4 029f 0041 jmp 0x0041
|
||
|
|
||
|
// DmaCopy(destination, source, len)
|
||
|
// AR1 = source: pointer to the main memory (32-bit) address
|
||
|
// AC1.M = destination: DSP memory address
|
||
|
// AR0 = len: length in words
|
||
|
05e6 193e lrri $AC0.M, @$AR1
|
||
|
05e7 193c lrri $AC0.L, @$AR1
|
||
|
05e8 2fcd srs @DSPA, $AC1.M
|
||
|
05e9 0f00 lris $AC1.M, #0x00
|
||
|
05ea 2fc9 srs @DSCR, $AC1.M
|
||
|
05eb 2ece srs @DSMAH, $AC0.M
|
||
|
05ec 2ccf srs @DSMAL, $AC0.L
|
||
|
05ed 1fe0 mrr $AC1.M, $AR0
|
||
|
05ee 1501 lsl $ACC1, #1
|
||
|
05ef 2fcb srs @DSBL, $AC1.M
|
||
|
05f0 02bf 05f9 call 0x05f9
|
||
|
05f2 02df ret
|
||
|
|
||
|
// DmaCopy(destination, source, len)
|
||
|
// AR1 = destination: pointer to the main memory (32-bit) address
|
||
|
// AC1.M = source: DSP memory address
|
||
|
// AR0 = len: length in words
|
||
|
05f3 193e lrri $AC0.M, @$AR1
|
||
|
05f4 193c lrri $AC0.L, @$AR1
|
||
|
05f5 2fcd srs @DSPA, $AC1.M
|
||
|
05f6 0f01 lris $AC1.M, #0x01
|
||
|
05f7 029f 05ea jmp 0x05ea
|
||
|
|
||
|
// wait for dma completion?
|
||
|
05f9 26c9 lrs $AC0.M, @DSCR
|
||
|
05fa 02a0 0004 andf $AC0.M, #0x0004
|
||
|
05fc 029c 05f9 jlnz 0x05f9
|
||
|
05fe 02df ret
|
||
|
|
||
|
// unused dma routine
|
||
|
05ff 193e lrri $AC0.M, @$AR1
|
||
|
0600 193c lrri $AC0.L, @$AR1
|
||
|
0601 00ff ffcd sr @DSPA, $AC1.M
|
||
|
0603 0f00 lris $AC1.M, #0x00
|
||
|
0604 00ff ffc9 sr @DSCR, $AC1.M
|
||
|
0606 00fe ffce sr @DSMAH, $AC0.M
|
||
|
0608 00fc ffcf sr @DSMAL, $AC0.L
|
||
|
060a 1fe0 mrr $AC1.M, $AR0
|
||
|
060b 1501 lsl $ACC1, #1
|
||
|
060c 00ff ffcb sr @DSBL, $AC1.M
|
||
|
060e 02df ret
|
||
|
|
||
|
//
|
||
|
060f 00de ffc9 lr $AC0.M, @DSCR
|
||
|
0611 02a0 0004 andf $AC0.M, #0x0004
|
||
|
0613 029c 060f jlnz 0x060f
|
||
|
0615 02df ret
|
||
|
|
||
|
// Opcode_04() -
|
||
|
0616 0080 0346 lri $AR0, #0x0346
|
||
|
0618 02bf 0065 call 0x0065
|
||
|
061a 02bf 0065 call 0x0065 // wtf?
|
||
|
061c 0081 0346 lri $AR1, #0x0346
|
||
|
061e 00df 0349 lr $AC1.M, @0x0349
|
||
|
0620 0340 ffff andi $AC1.M, #0xffff
|
||
|
0622 00c0 0345 lr $AR0, @0x0345
|
||
|
0624 02bf 05e6 call 0x05e6 // DmaCopy(0x0349, Dword[0x0346], Mem[0x0345])
|
||
|
0626 029f 0041 jmp 0x0041
|
||
|
|
||
|
// Opcode_05() -
|
||
|
0628 0080 0346 lri $AR0, #0x0346
|
||
|
062a 02bf 0065 call 0x0065
|
||
|
062c 02bf 0065 call 0x0065 // wtf?
|
||
|
062e 0081 0346 lri $AR1, #0x0346
|
||
|
0630 00df 0349 lr $AC1.M, @0x0349
|
||
|
0632 0340 ffff andi $AC1.M, #0xffff
|
||
|
0634 00c0 0345 lr $AR0, @0x0345
|
||
|
0636 02bf 05f3 call 0x05f3
|
||
|
0638 029f 0041 jmp 0x0041
|
||
|
|
||
|
// ReadSoundData(addr)
|
||
|
// AC0.M:AC0.L = main memory address
|
||
|
// read 128 samples of PCM8 sound from main memory to DSP memory at 0x0B00
|
||
|
063a 1ffc mrr $AC1.M, $AC0.L
|
||
|
063b 0340 001f andi $AC1.M, #0x001f
|
||
|
063d 00ff 037f sr @0x037f, $AC1.M
|
||
|
063f 1ffc mrr $AC1.M, $AC0.L
|
||
|
0640 0340 ffe0 andi $AC1.M, #0xffe0
|
||
|
0642 1f9f mrr $AC0.L, $AC1.M
|
||
|
0643 00df 037d lr $AC1.M, @0x037d
|
||
|
0645 00dd 037e lr $AC1.L, @0x037e
|
||
|
0647 4c00 add $ACC0, $AC1.L
|
||
|
0648 00fe ffce sr @DSMAH, $AC0.M
|
||
|
064a 00fc ffcf sr @DSMAL, $AC0.L
|
||
|
064c 0f00 lris $AC1.M, #0x00
|
||
|
064d 00ff ffc9 sr @DSCR, $AC1.M
|
||
|
064f 009f 0b20 lri $AC1.M, #0x0b20
|
||
|
0651 00ff ffcd sr @DSPA, $AC1.M
|
||
|
0653 0f40 lris $AC1.M, #0x40
|
||
|
0654 00ff ffcb sr @DSBL, $AC1.M
|
||
|
0656 00de ffc9 lr $AC0.M, @DSCR
|
||
|
0658 02a0 0004 andf $AC0.M, #0x0004
|
||
|
065a 029c 0656 jlnz 0x0656
|
||
|
065c 1fe1 mrr $AC1.M, $AR1
|
||
|
065d 0081 0b00 lri $AR1, #0x0b00 // Dst = 0x0B00;
|
||
|
065f 0080 0b20 lri $AR0, #0x0b20 // Src = 0x0B20;
|
||
|
// for(i = 0; i < 32; i++)
|
||
|
0661 1120 066a bloopi #0x20, 0x066a
|
||
|
0663 8100 clr $ACC0
|
||
|
0664 191e lrri $AC0.M, @$AR0
|
||
|
0665 1478 lsr $ACC0, #-8
|
||
|
0666 1b3e srri @$AR1, $AC0.M // Dst[i*2] = Src[i] >> 8;
|
||
|
0667 1408 lsl $ACC0, #8
|
||
|
0668 0240 00ff andi $AC0.M, #0x00ff
|
||
|
066a 1b3e srri @$AR1, $AC0.M // Dst[i*2 + 1] = Src[i] & 0xFF;
|
||
|
|
||
|
066b 1c3f mrr $AR1, $AC1.M // Keep AR1 value to 0x0B00
|
||
|
066c 029f 092b jmp 0x092b
|
||
|
066e 02df ret
|
||
|
|
||
|
// dma?
|
||
|
066f 1fc3 mrr $AC0.M, $AR3
|
||
|
0670 043f addis $ACC0, #0x3f
|
||
|
0671 0240 fff0 andi $AC0.M, #0xfff0
|
||
|
0673 00fe ffcd sr @DSPA, $AC0.M
|
||
|
0675 1c1a mrr $AR0, $AX0.H
|
||
|
0676 00da 037f lr $AX0.H, @0x037f
|
||
|
0678 4400 addr $ACC0, $AX0.H
|
||
|
0679 1f40 mrr $AX0.H, $AR0
|
||
|
067a 1c1e mrr $AR0, $AC0.M
|
||
|
067b 1fda mrr $AC0.M, $AX0.H
|
||
|
067c 041f addis $ACC0, #0x1f
|
||
|
067d 0240 fff0 andi $AC0.M, #0xfff0
|
||
|
067f 1401 lsl $ACC0, #1
|
||
|
0680 00fe ffcb sr @DSBL, $AC0.M
|
||
|
0682 00de ffc9 lr $AC0.M, @DSCR
|
||
|
0684 02a0 0004 andf $AC0.M, #0x0004
|
||
|
0686 029c 0682 jlnz 0x0682
|
||
|
0688 007a 068b bloop $AX0.H, 0x068b
|
||
|
068a 191e lrri $AC0.M, @$AR0
|
||
|
068b 1b7e srri @$AR3, $AC0.M
|
||
|
068c 02df ret
|
||
|
|
||
|
// setup DSMAH, DSMAL and DSCR (RAM -> DSP memory)
|
||
|
068d 8900 clr $ACC1
|
||
|
068e 1ffc mrr $AC1.M, $AC0.L
|
||
|
068f 0340 001f andi $AC1.M, #0x001f
|
||
|
0691 00ff 037f sr @0x037f, $AC1.M
|
||
|
0693 1ffc mrr $AC1.M, $AC0.L
|
||
|
0694 0340 ffe0 andi $AC1.M, #0xffe0 // addr &= 0xFFFFFFE0;
|
||
|
0696 1f9f mrr $AC0.L, $AC1.M
|
||
|
0697 00df 037d lr $AC1.M, @0x037d // 0x1000
|
||
|
0699 00dd 037e lr $AC1.L, @0x037e // 0x0800
|
||
|
069b 4c00 add $ACC0, $AC1.L // addr += 0x10000800;
|
||
|
069c 00fe ffce sr @DSMAH, $AC0.M
|
||
|
069e 00fc ffcf sr @DSMAL, $AC0.L
|
||
|
06a0 0f00 lris $AC1.M, #0x00
|
||
|
06a1 00ff ffc9 sr @DSCR, $AC1.M
|
||
|
06a3 02df ret
|
||
|
|
||
|
// setup DSPA and DSBL (and thus complete DMA transfer)
|
||
|
// memory transferred is stored (temporarily) to 0x0780
|
||
|
// then it's copied to the address specified by AR3
|
||
|
06a4 00df 037f lr $AC1.M, @0x037f
|
||
|
06a6 157f lsr $ACC1, #-1
|
||
|
06a7 00ff 037f sr @0x037f, $AC1.M
|
||
|
06a9 02df ret
|
||
|
06aa 8600 tstaxh $AX0.H
|
||
|
06ab 02d5 retz
|
||
|
06ac 1f1a mrr $AX0.L, $AX0.H
|
||
|
06ad 009e 0780 lri $AC0.M, #0x0780
|
||
|
06af 00fe ffcd sr @DSPA, $AC0.M
|
||
|
06b1 1fda mrr $AC0.M, $AX0.H
|
||
|
06b2 043f addis $ACC0, #0x3f
|
||
|
06b3 0240 ffe0 andi $AC0.M, #0xffe0
|
||
|
06b5 00fe ffcb sr @DSBL, $AC0.M
|
||
|
06b7 00de ffc9 lr $AC0.M, @DSCR
|
||
|
06b9 02a0 0004 andf $AC0.M, #0x0004
|
||
|
06bb 029c 06b7 jlnz 0x06b7
|
||
|
06bd 8100 clr $ACC0
|
||
|
06be 00de 037f lr $AC0.M, @0x037f
|
||
|
06c0 147f lsr $ACC0, #-1
|
||
|
06c1 0200 0780 addi $AC0.M, #0x0780
|
||
|
06c3 1c1e mrr $AR0, $AC0.M
|
||
|
06c4 00de 037f lr $AC0.M, @0x037f
|
||
|
06c6 02a0 0001 andf $AC0.M, #0x0001
|
||
|
06c8 029d 06d1 jlz 0x06d1
|
||
|
06ca 8100 clr $ACC0
|
||
|
06cb 191e lrri $AC0.M, @$AR0
|
||
|
06cc 1488 asl $ACC0, #8
|
||
|
06cd 1b7e srri @$AR3, $AC0.M
|
||
|
06ce 1fda mrr $AC0.M, $AX0.H
|
||
|
06cf 7800 decm $AC0.M
|
||
|
06d0 1f5e mrr $AX0.H, $AC0.M
|
||
|
06d1 8100 clr $ACC0
|
||
|
06d2 1fda mrr $AC0.M, $AX0.H
|
||
|
06d3 147f lsr $ACC0, #-1
|
||
|
|
||
|
06d4 007e 06dd bloop $AC0.M, 0x06dd
|
||
|
06d6 8100 clr $ACC0
|
||
|
06d7 181e lrr $AC0.M, @$AR0
|
||
|
06d8 0240 ff00 andi $AC0.M, #0xff00
|
||
|
06da 1b7e srri @$AR3, $AC0.M
|
||
|
06db 191e lrri $AC0.M, @$AR0
|
||
|
06dc 1488 asl $ACC0, #8
|
||
|
06dd 1b7e srri @$AR3, $AC0.M
|
||
|
|
||
|
06de 1fda mrr $AC0.M, $AX0.H
|
||
|
06df 1f58 mrr $AX0.H, $AX0.L
|
||
|
06e0 02a0 0001 andf $AC0.M, #0x0001
|
||
|
06e2 02dd retlz
|
||
|
06e3 8100 clr $ACC0
|
||
|
06e4 181e lrr $AC0.M, @$AR0
|
||
|
06e5 0240 ff00 andi $AC0.M, #0xff00
|
||
|
06e7 1b7e srri @$AR3, $AC0.M
|
||
|
06e8 02df ret
|
||
|
|
||
|
// Exception_0E()
|
||
|
06e9 1205 sbclr #0x05
|
||
|
06ea 8e00 set16
|
||
|
06eb 00f0 03fd sr @0x03fd, $AC0.H
|
||
|
06ed 00fc 03ff sr @0x03ff, $AC0.L
|
||
|
06ef f400 lsr16 $ACC0
|
||
|
06f0 00fc 03fe sr @0x03fe, $AC0.L
|
||
|
06f2 00fa 03fa sr @0x03fa, $AX0.H
|
||
|
06f4 8100 clr $ACC0
|
||
|
06f5 00de fffe lr $AC0.M, @CMBH // check for new mail
|
||
|
06f7 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
06f9 029c 07ea jlnz 0x07ea // If we received no mail
|
||
|
06fb 00da ffff lr $AX0.H, @CMBL
|
||
|
06fd 8600 tstaxh $AX0.H
|
||
|
06fe 0294 07c3 jnz 0x07c3 // If we received a mail beginning a list, WaitForNextMails()
|
||
|
|
||
|
0700 00de fffe lr $AC0.M, @CMBH // if we received an empty mail, wait for the next mail
|
||
|
0702 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
0704 029c 0700 jlnz 0x0700
|
||
|
0706 0240 000f andi $AC0.M, #0x000f // get the number in the high part of the mail
|
||
|
0708 1f5e mrr $AX0.H, $AC0.M
|
||
|
0709 7400 incm $AC0.M // number++;
|
||
|
070a 0c00 lris $AC0.L, #0x00
|
||
|
070b 1404 lsl $ACC0, #4 // number <<= 4;
|
||
|
070c 00fe 034e sr @0x034e, $AC0.M
|
||
|
070e 1fda mrr $AC0.M, $AX0.H
|
||
|
070f 1f40 mrr $AX0.H, $AR0
|
||
|
0710 0200 04fc addi $AC0.M, #0x04fc
|
||
|
0712 1c1e mrr $AR0, $AC0.M
|
||
|
0713 00de ffff lr $AC0.M, @CMBL
|
||
|
0715 1a1e srr @$AR0, $AC0.M
|
||
|
0716 1c1a mrr $AR0, $AX0.H
|
||
|
|
||
|
0717 00de 03fe lr $AC0.M, @0x03fe
|
||
|
0719 00dc 03ff lr $AC0.L, @0x03ff
|
||
|
071b 00d0 03fd lr $AC0.H, @0x03fd
|
||
|
071d 00da 03fa lr $AX0.H, @0x03fa
|
||
|
071f 1305 sbset #0x05
|
||
|
0720 02ff rti
|
||
|
|
||
|
// DoYield()
|
||
|
0721 009a 0002 lri $AX0.H, #0x0002
|
||
|
0723 00fa 03a3 sr @0x03a3, $AX0.H
|
||
|
0725 00e0 03f9 sr @0x03f9, $AR0
|
||
|
0727 02bf 07ad call 0x07ad
|
||
|
0729 16fc dcd1 si @DMBH, #0xdcd1
|
||
|
072b 16fd 0002 si @DMBL, #0x0002
|
||
|
072d 16fb 0001 si @DIRQ, #0x0001
|
||
|
072f 0021 halt
|
||
|
|
||
|
// Function jump table
|
||
|
0730 0748 cmpis $ACC1, #0x48 // Function 0: halt
|
||
|
0731 0749 cmpis $ACC1, #0x49 // Function 1: dump memory? and halt
|
||
|
0732 0789 cmpis $ACC1, #0x89 // Function 2: jump to 0x8000 and halt
|
||
|
0733 078c cmpis $ACC1, #0x8c // Function 3: return to MessageLoop()
|
||
|
|
||
|
// Execute function according to mail received (0xCDD1000X)
|
||
|
// Warning: any function number above 3 will likely crash
|
||
|
// as no range check is performed.
|
||
|
// AR0 = 0x002B
|
||
|
0734 00e0 03f9 sr @0x03f9, $AR0
|
||
|
0736 009e 0005 lri $AC0.M, #0x0005
|
||
|
0738 02bf 079b call 0x079b // SendMail_DCD1(0x0005)
|
||
|
073a 8e00 set16
|
||
|
073b 8100 clr $ACC0
|
||
|
073c 8900 clr $ACC1
|
||
|
073d 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
073f 27ff lrs $AC1.M, @CMBL
|
||
|
0740 009e 0730 lri $AC0.M, #0x0730
|
||
|
0742 4c00 add $ACC0, $AC1.L
|
||
|
0743 1c7e mrr $AR3, $AC0.M
|
||
|
0744 0313 ilrr $AC1.M, @$AR3
|
||
|
0745 1c7f mrr $AR3, $AC1.M
|
||
|
0746 176f jmpr $AR3
|
||
|
0747 0021 halt
|
||
|
// Function 0
|
||
|
0748 0021 halt
|
||
|
// Function 1
|
||
|
0749 009a 0002 lri $AX0.H, #0x0002
|
||
|
074b 00fa 03a3 sr @0x03a3, $AX0.H
|
||
|
074d 8100 clr $ACC0
|
||
|
074e 8900 clr $ACC1
|
||
|
074f 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
0751 24ff lrs $AC0.L, @CMBL
|
||
|
0752 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1()
|
||
|
0754 25ff lrs $AC1.L, @CMBL
|
||
|
0755 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1()
|
||
|
0757 27ff lrs $AC1.M, @CMBL
|
||
|
0758 2ece srs @DSMAH, $AC0.M
|
||
|
0759 2ccf srs @DSMAL, $AC0.L
|
||
|
075a 16c9 0001 si @DSCR, #0x0001
|
||
|
075c 2fcd srs @DSPA, $AC1.M
|
||
|
075d 2dcb srs @DSBL, $AC1.L
|
||
|
075e 8100 clr $ACC0
|
||
|
075f 8900 clr $ACC1
|
||
|
0760 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
0762 24ff lrs $AC0.L, @CMBL
|
||
|
0763 1c9e mrr $IX0, $AC0.M
|
||
|
0764 1cbc mrr $IX1, $AC0.L
|
||
|
0765 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1()
|
||
|
0767 25ff lrs $AC1.L, @CMBL
|
||
|
0768 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1()
|
||
|
076a 27ff lrs $AC1.M, @CMBL
|
||
|
076b 1cdf mrr $IX2, $AC1.M
|
||
|
076c 1cfd mrr $IX3, $AC1.L
|
||
|
076d 8100 clr $ACC0
|
||
|
076e 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
0770 26ff lrs $AC0.M, @CMBL
|
||
|
0771 1c1e mrr $AR0, $AC0.M
|
||
|
0772 8900 clr $ACC1
|
||
|
0773 02bf 0795 call 0x0795 // WaitUntilCPUMailboxIsFull_AC1()
|
||
|
0775 20ff lrs $AX0.L, @CMBL
|
||
|
0776 1f5f mrr $AX0.H, $AC1.M
|
||
|
0777 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
0779 21ff lrs $AX1.L, @CMBL
|
||
|
077a 02bf 078f call 0x078f // WaitUntilCPUMailboxIsFull_AC0()
|
||
|
077c 23ff lrs $AX1.H, @CMBL
|
||
|
077d 26c9 lrs $AC0.M, @DSCR
|
||
|
077e 02a0 0004 andf $AC0.M, #0x0004
|
||
|
0780 029c 077d jlnz 0x077d
|
||
|
0782 1206 sbclr #0x06
|
||
|
0783 1203 sbclr #0x03
|
||
|
0784 1204 sbclr #0x04
|
||
|
0785 1205 sbclr #0x05
|
||
|
0786 029f 80b5 jmp 0x80b5
|
||
|
0788 0021 halt
|
||
|
// Function 2
|
||
|
0789 029f 8000 jmp 0x8000
|
||
|
078b 0021 halt
|
||
|
// Function 3
|
||
|
078c 00c0 03f9 lr $AR0, @0x03f9
|
||
|
078e 170f jmpr $AR0
|
||
|
|
||
|
// WaitUntilCPUMailboxIsFull_AC0()
|
||
|
078f 26fe lrs $AC0.M, @CMBH
|
||
|
0790 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
0792 029c 078f jlnz 0x078f
|
||
|
0794 02df ret
|
||
|
|
||
|
// WaitUntilCPUMailboxIsFull_AC1()
|
||
|
0795 27fe lrs $AC1.M, @CMBH
|
||
|
0796 03c0 8000 andcf $AC1.M, #0x8000
|
||
|
0798 029c 0795 jlnz 0x0795
|
||
|
079a 02df ret
|
||
|
|
||
|
// SendMail_DCD1() // seems to additionally trigger an IRQ
|
||
|
079b 02bf 07b3 call 0x07b3
|
||
|
079d 16fc dcd1 si @DMBH, #0xdcd1
|
||
|
079f 2efd srs @DMBL, $AC0.M
|
||
|
07a0 16fb 0001 si @DIRQ, #0x0001
|
||
|
07a2 02bf 07b3 call 0x07b3
|
||
|
07a4 02df ret
|
||
|
|
||
|
// SendMail_F355()
|
||
|
07a5 02bf 07b3 call 0x07b3
|
||
|
07a7 16fc f355 si @DMBH, #0xf355
|
||
|
07a9 2efd srs @DMBL, $AC0.M
|
||
|
07aa 02bf 07b3 call 0x07b3
|
||
|
07ac 02df ret
|
||
|
|
||
|
// WaitUntilMailboxIsReady_AC0()
|
||
|
07ad 26fc lrs $AC0.M, @DMBH
|
||
|
07ae 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
07b0 029d 07ad jlz 0x07ad
|
||
|
07b2 02df ret
|
||
|
|
||
|
// WaitUntilMailboxIsReady_AC1()
|
||
|
07b3 27fc lrs $AC1.M, @DMBH
|
||
|
07b4 03c0 8000 andcf $AC1.M, #0x8000
|
||
|
07b6 029d 07b3 jlz 0x07b3
|
||
|
07b8 02df ret
|
||
|
|
||
|
// InitGlobalVars()
|
||
|
07b9 009a 0280 lri $AX0.H, #0x0280
|
||
|
07bb 00fa 0350 sr @0x0350, $AX0.H
|
||
|
07bd 00fa 0351 sr @0x0351, $AX0.H
|
||
|
07bf 0a00 lris $AX0.H, #0x00
|
||
|
07c0 00fa 0352 sr @0x0352, $AX0.H
|
||
|
07c2 02df ret
|
||
|
|
||
|
// WaitForNextMails()
|
||
|
// AX0.H: low part of current mail (num of mails to wait for)
|
||
|
07c3 00e0 03fb sr @0x03fb, $AR0
|
||
|
07c5 00e8 03fc sr @0x03fc, $WR0
|
||
|
07c7 00c0 0350 lr $AR0, @0x0350
|
||
|
07c9 0088 002f lri $WR0, #0x002f
|
||
|
07cb 1b1a srri @$AR0, $AX0.H
|
||
|
07cc 00de fffe lr $AC0.M, @CMBH
|
||
|
07ce 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
07d0 029c 07cc jlnz 0x07cc
|
||
|
07d2 00dc ffff lr $AC0.L, @CMBL
|
||
|
07d4 1b1e srri @$AR0, $AC0.M
|
||
|
07d5 1b1c srri @$AR0, $AC0.L
|
||
|
07d6 1fda mrr $AC0.M, $AX0.H
|
||
|
07d7 7800 decm $AC0.M
|
||
|
07d8 1f5e mrr $AX0.H, $AC0.M
|
||
|
07d9 8600 tstaxh $AX0.H
|
||
|
07da 0294 07cc jnz 0x07cc
|
||
|
|
||
|
07dc 8100 clr $ACC0
|
||
|
07dd 00de 0352 lr $AC0.M, @0x0352
|
||
|
07df 7400 incm $AC0.M
|
||
|
07e0 00fe 0352 sr @0x0352, $AC0.M
|
||
|
07e2 00e0 0350 sr @0x0350, $AR0
|
||
|
07e4 00c0 03fb lr $AR0, @0x03fb
|
||
|
07e6 00c8 03fc lr $WR0, @0x03fc
|
||
|
07e8 029f 0717 jmp 0x0717
|
||
|
|
||
|
// noMail()
|
||
|
07ea 00e0 03fb sr @0x03fb, $AR0
|
||
|
07ec 00e8 03fc sr @0x03fc, $WR0
|
||
|
07ee 00c0 0350 lr $AR0, @0x0350
|
||
|
07f0 0088 002f lri $WR0, #0x002f
|
||
|
07f2 0a00 lris $AX0.H, #0x00
|
||
|
07f3 1b1a srri @$AR0, $AX0.H
|
||
|
07f4 029f 07dc jmp 0x07dc
|
||
|
|
||
|
// MessageLoop()
|
||
|
07f6 00c0 0351 lr $AR0, @0x0351
|
||
|
07f8 0088 002f lri $WR0, #0x002f
|
||
|
07fa 00da 0352 lr $AX0.H, @0x0352
|
||
|
07fc 8600 tstaxh $AX0.H
|
||
|
07fd 0295 081e jz 0x081e // jump back to MessageLoop
|
||
|
07ff 1205 sbclr #0x05
|
||
|
0800 00da 0352 lr $AX0.H, @0x0352
|
||
|
0802 1fda mrr $AC0.M, $AX0.H
|
||
|
0803 7800 decm $AC0.M
|
||
|
0804 00fe 0352 sr @0x0352, $AC0.M
|
||
|
0806 1305 sbset #0x05
|
||
|
0807 0081 0356 lri $AR1, #0x0356
|
||
|
0809 191e lrri $AC0.M, @$AR0
|
||
|
080a 02c0 8000 andcf $AC0.M, #0x8000
|
||
|
080c 029d 0822 jlz 0x0822 // ???
|
||
|
080e 1f5e mrr $AX0.H, $AC0.M
|
||
|
080f 8600 tstaxh $AX0.H
|
||
|
0810 0295 0826 jz 0x0826 // Yield()
|
||
|
0812 007a 0817 bloop $AX0.H, 0x0817
|
||
|
0814 191e lrri $AC0.M, @$AR0
|
||
|
0815 1b3e srri @$AR1, $AC0.M
|
||
|
0816 191e lrri $AC0.M, @$AR0
|
||
|
0817 1b3e srri @$AR1, $AC0.M
|
||
|
0818 00e0 0351 sr @0x0351, $AR0
|
||
|
081a 0088 ffff lri $WR0, #0xffff
|
||
|
081c 029f 002d jmp 0x002d // jump to OpcodeHandler()
|
||
|
081e 0088 ffff lri $WR0, #0xffff
|
||
|
0820 029f 002b jmp 0x002b // jump back to MessageLoop()
|
||
|
|
||
|
//
|
||
|
0822 00e0 0351 sr @0x0351, $AR0
|
||
|
0824 029f 07fa jmp 0x07fa
|
||
|
|
||
|
// Yield()
|
||
|
0826 0080 07f6 lri $AR0, #0x07f6
|
||
|
0828 029f 0721 jmp 0x0721 // DoYield() (halts)
|
||
|
|
||
|
// interesting - writes value(s) to output
|
||
|
082a 8100 clr $ACC0
|
||
|
082b 0e10 lris $AC0.M, #0x10
|
||
|
082c 2232 lrs $AX0.H, @0x0032
|
||
|
082d 8600 tstaxh $AX0.H
|
||
|
082e 02d5 retz
|
||
|
082f 5400 subr $ACC0, $AX0.H
|
||
|
0830 0200 0458 addi $AC0.M, #0x0458 // source addr = (0x10 - Mem[0x0032]) + 0x0458
|
||
|
0832 1c1e mrr $AR0, $AC0.M
|
||
|
0833 1fda mrr $AC0.M, $AX0.H
|
||
|
0834 04fe addis $ACC0, #0xfe
|
||
|
0835 1f1e mrr $AX0.L, $AC0.M // AX0.L = Mem[0x0032] - 2;
|
||
|
0836 191e lrri $AC0.M, @$AR0
|
||
|
0837 0291 083d js 0x083d
|
||
|
0839 191a lrri $AX0.H, @$AR0
|
||
|
|
||
|
083a 0058 loop $AX0.L
|
||
|
083b 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
|
||
|
083c 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M
|
||
|
083d 1b7e srri @$AR3, $AC0.M // store value to output
|
||
|
083e 02df ret
|
||
|
|
||
|
//
|
||
|
083f 02bf 082a call 0x082a
|
||
|
0841 8100 clr $ACC0
|
||
|
0842 2632 lrs $AC0.M, @0x0032
|
||
|
0843 5c00 sub $ACC0, $AC1.L
|
||
|
0844 2e32 srs @0x0032, $AC0.M
|
||
|
0845 0092 00ff lri $CR, #0x00ff
|
||
|
0847 02df ret
|
||
|
|
||
|
// increment one value, then zero out other values
|
||
|
0848 00de 04fb lr $AC0.M, @0x04fb
|
||
|
084a 7400 incm $AC0.M
|
||
|
084b 00fe 04fb sr @0x04fb, $AC0.M
|
||
|
084d 8100 clr $ACC0
|
||
|
084e 2e32 srs @0x0032, $AC0.M
|
||
|
084f 2e66 srs @0x0066, $AC0.M
|
||
|
0850 2e67 srs @0x0067, $AC0.M
|
||
|
0851 268a lrs $AC0.M, @0xff8a
|
||
|
0852 248b lrs $AC0.L, @0xff8b
|
||
|
0853 2e3a srs @0x003a, $AC0.M
|
||
|
0854 2c3b srs @0x003b, $AC0.L
|
||
|
0855 268c lrs $AC0.M, @0xff8c
|
||
|
0856 248d lrs $AC0.L, @0xff8d
|
||
|
0857 2e38 srs @0x0038, $AC0.M
|
||
|
0858 2c39 srs @0x0039, $AC0.L
|
||
|
0859 02df ret
|
||
|
|
||
|
//
|
||
|
085a 8100 clr $ACC0
|
||
|
085b 2689 lrs $AC0.M, @0xff89
|
||
|
085c 0240 000f andi $AC0.M, #0x000f
|
||
|
085e 1f5e mrr $AX0.H, $AC0.M
|
||
|
085f 8100 clr $ACC0
|
||
|
0860 0e10 lris $AC0.M, #0x10
|
||
|
0861 5400 subr $ACC0, $AX0.H
|
||
|
0862 2e32 srs @0x0032, $AC0.M
|
||
|
0863 268a lrs $AC0.M, @0xff8a
|
||
|
0864 248b lrs $AC0.L, @0xff8b
|
||
|
0865 2288 lrs $AX0.H, @0xff88
|
||
|
0866 2089 lrs $AX0.L, @0xff89
|
||
|
0867 5800 subax $ACC0, $AX0.L
|
||
|
0868 0a00 lris $AX0.H, #0x00
|
||
|
0869 2032 lrs $AX0.L, @0x0032
|
||
|
086a 5800 subax $ACC0, $AX0.L
|
||
|
086b 2e3a srs @0x003a, $AC0.M
|
||
|
086c 2c3b srs @0x003b, $AC0.L
|
||
|
086d 02df ret
|
||
|
|
||
|
// mixer for sound types 5 and 9
|
||
|
// AR3 = 0x0580 (out address)
|
||
|
// AC1.M = 0x0043, AC1.L = 0x0000
|
||
|
086e 0092 0004 lri $CR, #0x0004
|
||
|
0870 8100 clr $ACC0
|
||
|
0871 2604 lrs $AC0.M, @0x0004
|
||
|
0872 b100 tst $ACC0
|
||
|
0873 02b4 0848 callne 0x0848 // nothing much interesting
|
||
|
0875 8100 clr $ACC0
|
||
|
0876 2601 lrs $AC0.M, @0x0001
|
||
|
0877 b100 tst $ACC0
|
||
|
0878 0294 0916 jnz 0x0916 // end
|
||
|
087a 2232 lrs $AX0.H, @0x0032
|
||
|
087b c900 cmpar $ACC0, $AX1.H
|
||
|
087c 0293 083f jle 0x083f // direct return (calls 0x082A though)
|
||
|
087e 5500 subr $ACC1, $AX0.H
|
||
|
087f 02bf 082a call 0x082a // interesting: stores value(s) to Mem[AR3] (output)
|
||
|
0881 223a lrs $AX0.H, @0x003a
|
||
|
0882 8600 tstaxh $AX0.H
|
||
|
0883 0294 088a jnz 0x088a
|
||
|
0885 8100 clr $ACC0
|
||
|
0886 263b lrs $AC0.M, @0x003b
|
||
|
0887 8200 cmp
|
||
|
0888 0291 08dc js 0x08dc
|
||
|
088a 8100 clr $ACC0
|
||
|
088b 1fdf mrr $AC0.M, $AC1.M
|
||
|
088c 040f addis $ACC0, #0x0f
|
||
|
088d 147c lsr $ACC0, #-4
|
||
|
088e 1f7e mrr $AX1.H, $AC0.M
|
||
|
088f 0c00 lris $AC0.L, #0x00
|
||
|
0890 1404 lsl $ACC0, #4
|
||
|
0891 1f1e mrr $AX0.L, $AC0.M
|
||
|
0892 0a00 lris $AX0.H, #0x00
|
||
|
0893 8100 clr $ACC0
|
||
|
0894 263a lrs $AC0.M, @0x003a
|
||
|
0895 243b lrs $AC0.L, @0x003b
|
||
|
0896 5800 subax $ACC0, $AX0.L
|
||
|
0897 0290 08a2 jns 0x08a2
|
||
|
0899 8100 clr $ACC0
|
||
|
089a 263b lrs $AC0.M, @0x003b
|
||
|
089b 5c00 sub $ACC0, $AC1.L
|
||
|
089c 2e32 srs @0x0032, $AC0.M
|
||
|
089d 8100 clr $ACC0
|
||
|
089e 2e3a srs @0x003a, $AC0.M
|
||
|
089f 2e3b srs @0x003b, $AC0.M
|
||
|
08a0 029f 08a8 jmp 0x08a8
|
||
|
08a2 2e3a srs @0x003a, $AC0.M
|
||
|
08a3 2c3b srs @0x003b, $AC0.L
|
||
|
08a4 0c00 lris $AC0.L, #0x00
|
||
|
08a5 1fd8 mrr $AC0.M, $AX0.L
|
||
|
08a6 5c00 sub $ACC0, $AC1.L
|
||
|
08a7 2e32 srs @0x0032, $AC0.M
|
||
|
08a8 8100 clr $ACC0
|
||
|
08a9 1fdb mrr $AC0.M, $AX1.H
|
||
|
08aa 02bf 091c call 0x091c // afc decoder
|
||
|
08ac 2232 lrs $AX0.H, @0x0032
|
||
|
08ad 8600 tstaxh $AX0.H
|
||
|
08ae 0295 08d9 jz 0x08d9 // end
|
||
|
08b0 0a10 lris $AX0.H, #0x10
|
||
|
08b1 8100 clr $ACC0
|
||
|
08b2 1fc3 mrr $AC0.M, $AR3
|
||
|
08b3 5400 subr $ACC0, $AX0.H
|
||
|
08b4 1c7e mrr $AR3, $AC0.M
|
||
|
08b5 0080 0458 lri $AR0, #0x0458
|
||
|
08b7 197e lrri $AC0.M, @$AR3
|
||
|
08b8 197a lrri $AX0.H, @$AR3
|
||
|
|
||
|
08b9 100e loopi #0x0e
|
||
|
08ba 64a2 movr'sl $ACC0, $AX0.H : $AC0.M, $AX0.H
|
||
|
|
||
|
08bb 1b1e srri @$AR0, $AC0.M
|
||
|
08bc 1b1a srri @$AR0, $AX0.H
|
||
|
08bd 8100 clr $ACC0
|
||
|
08be 263a lrs $AC0.M, @0x003a
|
||
|
08bf 243b lrs $AC0.L, @0x003b
|
||
|
08c0 b100 tst $ACC0
|
||
|
08c1 0294 08d9 jnz 0x08d9 // end
|
||
|
08c3 2232 lrs $AX0.H, @0x0032
|
||
|
08c4 8600 tstaxh $AX0.H
|
||
|
08c5 0295 08d9 jz 0x08d9 // end
|
||
|
08c7 0080 0467 lri $AR0, #0x0467
|
||
|
08c9 8100 clr $ACC0
|
||
|
08ca 268b lrs $AC0.M, @0xff8b
|
||
|
08cb b100 tst $ACC0
|
||
|
08cc 0295 08d9 jz 0x08d9 // end
|
||
|
08ce 0200 000f addi $AC0.M, #0x000f
|
||
|
08d0 0240 000f andi $AC0.M, #0x000f
|
||
|
08d2 0200 0458 addi $AC0.M, #0x0458
|
||
|
08d4 1c7e mrr $AR3, $AC0.M
|
||
|
|
||
|
08d5 007a 08d8 bloop $AX0.H, 0x08d8
|
||
|
08d7 18fe lrrd $AC0.M, @$AR3
|
||
|
08d8 1a9e srrd @$AR0, $AC0.M
|
||
|
|
||
|
08d9 0092 00ff lri $CR, #0x00ff
|
||
|
08db 02df ret
|
||
|
|
||
|
//
|
||
|
08dc b100 tst $ACC0
|
||
|
08dd 0295 08ec jz 0x08ec
|
||
|
08df 5d00 sub $ACC1, $AC0.L
|
||
|
08e0 040f addis $ACC0, #0x0f
|
||
|
08e1 147c lsr $ACC0, #-4
|
||
|
08e2 0c00 lris $AC0.L, #0x00
|
||
|
08e3 00e3 0363 sr @0x0363, $AR3
|
||
|
08e5 02bf 091c call 0x091c
|
||
|
08e7 00de 0363 lr $AC0.M, @0x0363
|
||
|
08e9 223b lrs $AX0.H, @0x003b
|
||
|
08ea 4400 addr $ACC0, $AX0.H
|
||
|
08eb 1c7e mrr $AR3, $AC0.M
|
||
|
08ec 8100 clr $ACC0
|
||
|
08ed 2681 lrs $AC0.M, @0xff81
|
||
|
08ee b100 tst $ACC0
|
||
|
08ef 0295 0914 jz 0x0914
|
||
|
08f1 2380 lrs $AX1.H, @0xff80
|
||
|
08f2 2688 lrs $AC0.M, @0xff88
|
||
|
08f3 2489 lrs $AC0.L, @0xff89
|
||
|
08f4 1408 lsl $ACC0, #8
|
||
|
08f5 14f4 asr $ACC0, #-12
|
||
|
08f6 2380 lrs $AX1.H, @0xff80
|
||
|
08f7 8d00 set15
|
||
|
08f8 c810 mulc'mv $AC0.M, $AX1.H : $AX0.L, $AC0.L
|
||
|
08f9 ae00 mulxmv $AX0.L, $AX1.H, $ACC0
|
||
|
08fa 8c00 clr15
|
||
|
08fb f000 lsl16 $ACC0
|
||
|
08fc 4e00 addp $ACC0
|
||
|
08fd 238c lrs $AX1.H, @0xff8c
|
||
|
08fe 218d lrs $AX1.L, @0xff8d
|
||
|
08ff 4a00 addax $ACC0, $AX1.L
|
||
|
0900 2e38 srs @0x0038, $AC0.M
|
||
|
0901 2c39 srs @0x0039, $AC0.L
|
||
|
0902 2682 lrs $AC0.M, @0xff82
|
||
|
0903 2e67 srs @0x0067, $AC0.M
|
||
|
0904 2683 lrs $AC0.M, @0xff83
|
||
|
0905 2e66 srs @0x0066, $AC0.M
|
||
|
0906 00e3 0363 sr @0x0363, $AR3
|
||
|
0908 0083 0458 lri $AR3, #0x0458
|
||
|
090a 8100 clr $ACC0
|
||
|
090b 0e01 lris $AC0.M, #0x01
|
||
|
090c 02bf 091c call 0x091c
|
||
|
090e 00c3 0363 lr $AR3, @0x0363
|
||
|
0910 02bf 085a call 0x085a
|
||
|
0912 029f 087a jmp 0x087a
|
||
|
0914 0e01 lris $AC0.M, #0x01
|
||
|
0915 2e01 srs @0x0001, $AC0.M
|
||
|
0916 8100 clr $ACC0
|
||
|
0917 005f loop $AC1.M
|
||
|
0918 1b7e srri @$AR3, $AC0.M
|
||
|
0919 0092 00ff lri $CR, #0x00ff
|
||
|
091b 02df ret
|
||
|
|
||
|
// afc decoder (for sound formats 5 and 9)
|
||
|
// AC0.M = num of blocks to do? (0x4)
|
||
|
// AC1.M =
|
||
|
091c 00ff 0360 sr @0x0360, $AC1.M
|
||
|
091e 00fe 0361 sr @0x0361, $AC0.M
|
||
|
0920 8100 clr $ACC0
|
||
|
0921 00de 0361 lr $AC0.M, @0x0361
|
||
|
|
||
|
0923 007e 099c bloop $AC0.M, 0x099c
|
||
|
0925 2638 lrs $AC0.M, @0x0038
|
||
|
0926 2439 lrs $AC0.L, @0x0039
|
||
|
0927 0092 00ff lri $CR, #0x00ff
|
||
|
0929 029f 063a jmp 0x063a // ReadSoundData(Dword[0x0038])
|
||
|
092b 0092 0004 lri $CR, #0x0004
|
||
|
092d 2638 lrs $AC0.M, @0x0038
|
||
|
092e 2439 lrs $AC0.L, @0x0039
|
||
|
092f 8900 clr $ACC1
|
||
|
0930 2580 lrs $AC1.L, @0xff80
|
||
|
0931 4c00 add $ACC0, $AC1.L
|
||
|
0932 2e38 srs @0x0038, $AC0.M
|
||
|
0933 2c39 srs @0x0039, $AC0.L
|
||
|
0934 00de 037f lr $AC0.M, @0x037f
|
||
|
0936 0200 0b00 addi $AC0.M, #0x0b00 // buffer where read sound data is stored (128 bytes)
|
||
|
0938 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x0B00 + Mem[0x037F]; (Mem[0x037F] seems to be the offset in buffer to the actual block...)
|
||
|
0939 0084 0001 lri $IX0, #0x0001 // IX0 = 0x0001;
|
||
|
093b 199e lrrn $AC0.M, @$AR0 // AC0.M = Mem[AR0]; AR0++; read first byte in buffer
|
||
|
093c 8900 clr $ACC1
|
||
|
093d 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M = first_byte;
|
||
|
093e 1401 lsl $ACC0, #1
|
||
|
093f 0240 001e andi $AC0.M, #0x001e
|
||
|
0941 0200 0300 addi $AC0.M, #0x0300
|
||
|
0943 1c3e mrr $AR1, $AC0.M // AR1 = ((first_byte << 1) & 0x1E) + 0x0300;
|
||
|
0944 157c lsr $ACC1, #-4
|
||
|
0945 0340 000f andi $AC1.M, #0x000f
|
||
|
0947 0a11 lris $AX0.H, #0x11
|
||
|
0948 5500 subr $ACC1, $AX0.H // AC1.M = ((first_byte >> 4) & 0xF) - 0x11;
|
||
|
0949 8100 clr $ACC0
|
||
|
094a 2680 lrs $AC0.M, @0xff80
|
||
|
094b 0605 cmpis $ACC0, #0x05
|
||
|
094c 0295 0965 jz 0x0965 // skip loop below (execute another loop) for sound format 5
|
||
|
|
||
|
094e 009a 00f0 lri $AX0.H, #0x00f0 // these masks... for adpcm sound surely
|
||
|
0950 0b0f lris $AX1.H, #0x0f
|
||
|
0951 0082 0364 lri $AR2, #0x0364 // AR2 = 0x0364;
|
||
|
0953 1998 lrrn $AX0.L, @$AR0 // AX0.L = Mem[AR0]; AR0++;
|
||
|
0954 6000 movr $ACC0, $AX0.L // AC0.HM = AX0; AC0.L = 0x0000;
|
||
|
// loop for sound format 9 (looks like adpcm)
|
||
|
// decompose sound data into nibbles and store it to 0x0364 (again a temp buffer!)
|
||
|
// for(i = 0; i < 7; i++)
|
||
|
0955 1107 095c bloopi #0x07, 0x095c
|
||
|
0957 3400 andr $AC0.M, $AX0.H // AC0.M &= 0x00F0;
|
||
|
0958 1408 lsl $ACC0, #8 // ACC0 <<= 8;
|
||
|
0959 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++;
|
||
|
095a 3644 andr'ln $AC0.M, $AX1.H : $AX0.L, @$AR0 // AC0.M &= 0x000F; AX0.L = Mem[AR0]; AR0++;
|
||
|
095b 140c lsl $ACC0, #12 // ACC0 <<= 12;
|
||
|
095c 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M // AC0.HM = AX0; AC0.L = 0; Mem[AR2] = AC0.M; AR2++;
|
||
|
|
||
|
095d 3400 andr $AC0.M, $AX0.H
|
||
|
095e 1408 lsl $ACC0, #8
|
||
|
095f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
0960 3600 andr $AC0.M, $AX1.H
|
||
|
0961 140c lsl $ACC0, #12
|
||
|
0962 1b5e srri @$AR2, $AC0.M
|
||
|
0963 029f 0985 jmp 0x0985
|
||
|
// below for sound format 5 only
|
||
|
0965 009a c000 lri $AX0.H, #0xc000
|
||
|
0967 0082 0364 lri $AR2, #0x0364
|
||
|
0969 1998 lrrn $AX0.L, @$AR0
|
||
|
096a 6000 movr $ACC0, $AX0.L
|
||
|
// loop for sound format 5
|
||
|
096b 1103 0978 bloopi #0x03, 0x0978
|
||
|
096d 1408 lsl $ACC0, #8
|
||
|
096e 3400 andr $AC0.M, $AX0.H
|
||
|
096f 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
0970 140a lsl $ACC0, #10
|
||
|
0971 3400 andr $AC0.M, $AX0.H
|
||
|
0972 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
0973 140c lsl $ACC0, #12
|
||
|
0974 3400 andr $AC0.M, $AX0.H
|
||
|
0975 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
0976 140e lsl $ACC0, #14
|
||
|
0977 3444 andr'ln $AC0.M, $AX0.H : $AX0.L, @$AR0
|
||
|
0978 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
|
||
|
0979 1408 lsl $ACC0, #8
|
||
|
097a 3400 andr $AC0.M, $AX0.H
|
||
|
097b 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
097c 140a lsl $ACC0, #10
|
||
|
097d 3400 andr $AC0.M, $AX0.H
|
||
|
097e 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
097f 140c lsl $ACC0, #12
|
||
|
0980 3400 andr $AC0.M, $AX0.H
|
||
|
0981 6032 movr's $ACC0, $AX0.L : @$AR2, $AC0.M
|
||
|
0982 140e lsl $ACC0, #14
|
||
|
0983 3400 andr $AC0.M, $AX0.H
|
||
|
0984 1b5e srri @$AR2, $AC0.M
|
||
|
|
||
|
0985 8f00 set40
|
||
|
0986 1f7f mrr $AX1.H, $AC1.M // AX1.H = AC1.M = ((first_byte >> 4) & 0xF) - 0x11;
|
||
|
0987 2066 lrs $AX0.L, @0x0066 // AX0.L = Mem[0x0066];
|
||
|
0988 2767 lrs $AC1.M, @0x0067 // AC1.M = Mem[0x0067];
|
||
|
0989 193a lrri $AX0.H, @$AR1 // AX0.H = Mem[AR1]; AR1++; load coefs from 0x0300+
|
||
|
098a 1939 lrri $AX1.L, @$AR1 // AX1.L = Mem[AR1]; AR1++;
|
||
|
098b 0080 0364 lri $AR0, #0x0364 // AR0 = 0x0364;
|
||
|
098d a000 mulx $AX0.L, $AX1.L // prod = AX0.L * AX1.L;
|
||
|
098e ea70 maddc'l $AC1.M, $AX1.L : $AC0.M, @$AR0 // prod += AC1.M * AX1.L; AC0.M = Mem[AR0]; AR0++;
|
||
|
|
||
|
098f 1108 0998 bloopi #0x08, 0x0998
|
||
|
0991 3a93 orr'sl $AC0.M, $AX1.H : $AC1.M, $AX1.L // AC0.M |= AX1.H; Mem[AR3] = AC1.M; AR3++; AX1.L = Mem[AR0]; AR0++;
|
||
|
0992 a478 mulxac'l $AX0.L, $AX1.L, $ACC0 : $AC1.M, @$AR0 // ACC0 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++;
|
||
|
0993 1485 asl $ACC0, #5 // ACC0 <<= 5;
|
||
|
0994 e833 maddc's $AC0.M, $AX1.L : @$AR3, $AC0.M // prod += AC0.M * AX1.L; Mem[AR3] = AC0.M; AR3++;
|
||
|
0995 3b92 orr'sl $AC1.M, $AX1.H : $AC0.M, $AX1.L // AC1.M |= AX1.H; Mem[AR3] = AC0.M; AR3++; AX1.L = Mem[AR0]; AR0++;
|
||
|
0996 a570 mulxac'l $AX0.L, $AX1.L, $ACC1 : $AC0.M, @$AR0 // ACC1 += prod; prod = AX0.L * AX1.L; AC1.M = Mem[AR0]; AR0++;
|
||
|
0997 1585 asl $ACC1, #5 // ACC1 <<= 5;
|
||
|
0998 ea3b maddc's $AC1.M, $AX1.L : @$AR3, $AC1.M // prod += AC1.M * AX1.L; Mem[AR3] = AC1.M; AR3++;
|
||
|
|
||
|
0999 2f67 srs @0x0067, $AC1.M
|
||
|
099a 8e00 set16
|
||
|
099b 1ff8 mrr $AC1.M, $AX0.L
|
||
|
099c 2f66 srs @0x0066, $AC1.M
|
||
|
// end of outer loop
|
||
|
099d 8900 clr $ACC1
|
||
|
099e 00df 0360 lr $AC1.M, @0x0360
|
||
|
09a0 02df ret
|
||
|
|
||
|
//
|
||
|
09a1 b100 tst $ACC0
|
||
|
09a2 02d5 retz
|
||
|
09a3 04fe addis $ACC0, #0xfe
|
||
|
09a4 1f1e mrr $AX0.L, $AC0.M
|
||
|
09a5 191e lrri $AC0.M, @$AR0
|
||
|
09a6 0291 09ac js 0x09ac
|
||
|
09a8 191a lrri $AX0.H, @$AR0
|
||
|
09a9 0058 loop $AX0.L
|
||
|
09aa 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
09ab 6433 movr's $ACC0, $AX0.H : @$AR3, $AC0.M
|
||
|
09ac 1b7e srri @$AR3, $AC0.M
|
||
|
09ad 02df ret
|
||
|
|
||
|
// decode audio?
|
||
|
09ae 8100 clr $ACC0
|
||
|
09af 1f5e mrr $AX0.H, $AC0.M
|
||
|
09b0 00d8 0402 lr $AX0.L, @0x0402
|
||
|
09b2 00dc 0430 lr $AC0.L, @0x0430
|
||
|
09b4 0080 0520 lri $AR0, #0x0520
|
||
|
09b6 00df 0480 lr $AC1.M, @0x0480 // sound format???
|
||
|
09b8 1501 lsl $ACC1, #1
|
||
|
09b9 0340 007e andi $AC1.M, #0x007e
|
||
|
09bb 0300 09c3 addi $AC1.M, #0x09c3
|
||
|
09bd 1c5f mrr $AR2, $AC1.M
|
||
|
09be 175f callr $AR2 // jump to one of the functions
|
||
|
09bf 00fc 0430 sr @0x0430, $AC0.L
|
||
|
09c1 029f 0336 jmp 0x0336 // return to SyncFrame func
|
||
|
// jump table
|
||
|
09c3 029f 09e4 jmp 0x09e4 // 0x0:
|
||
|
09c5 029f 0a1f jmp 0x0a1f // 0x1:
|
||
|
09c7 029f 0a07 jmp 0x0a07 // 0x2:
|
||
|
09c9 029f 09f4 jmp 0x09f4 // 0x3:
|
||
|
09cb 029f 0a2d jmp 0x0a2d // 0x4:
|
||
|
09cd 029f 09e3 jmp 0x09e3 // 0x5: dummy
|
||
|
09cf 029f 0a4b jmp 0x0a4b // 0x6:
|
||
|
09d1 029f 0a4e jmp 0x0a4e // 0x7:
|
||
|
09d3 029f 09e3 jmp 0x09e3 // 0x8: dummy
|
||
|
09d5 029f 09e3 jmp 0x09e3 // 0x9: dummy
|
||
|
09d7 029f 0a6c jmp 0x0a6c // 0xA:
|
||
|
09d9 029f 0a25 jmp 0x0a25 // 0xB:
|
||
|
09db 029f 0a29 jmp 0x0a29 // 0xC:
|
||
|
09dd 029f 09e3 jmp 0x09e3 // 0xD: dummy
|
||
|
09df 029f 09e3 jmp 0x09e3 // 0xE: dummy
|
||
|
09e1 029f 09e3 jmp 0x09e3 // 0xF: dummy
|
||
|
09e3 02df ret // direct return for dummy funcs
|
||
|
|
||
|
// Func_00()
|
||
|
09e4 1401 lsl $ACC0, #1
|
||
|
09e5 009b c000 lri $AX1.H, #0xc000
|
||
|
09e7 0099 4000 lri $AX1.L, #0x4000
|
||
|
09e9 1150 09f1 bloopi #0x50, 0x09f1
|
||
|
09eb 02c0 0001 andcf $AC0.M, #0x0001
|
||
|
09ed 027c iflnz
|
||
|
09ee 1b1b srri @$AR0, $AX1.H
|
||
|
09ef 027d iflz
|
||
|
09f0 1b19 srri @$AR0, $AX1.L
|
||
|
09f1 4800 addax $ACC0, $AX0.L
|
||
|
09f2 147f lsr $ACC0, #-1
|
||
|
09f3 02df ret
|
||
|
09f4 1402 lsl $ACC0, #2
|
||
|
09f5 8900 clr $ACC1
|
||
|
09f6 1fb8 mrr $AC1.L, $AX0.L
|
||
|
09f7 1501 lsl $ACC1, #1
|
||
|
09f8 009b c000 lri $AX1.H, #0xc000
|
||
|
09fa 0099 4000 lri $AX1.L, #0x4000
|
||
|
09fc 1150 0a04 bloopi #0x50, 0x0a04
|
||
|
09fe 02c0 0003 andcf $AC0.M, #0x0003
|
||
|
0a00 027c iflnz
|
||
|
0a01 1b1b srri @$AR0, $AX1.H
|
||
|
0a02 027d iflz
|
||
|
0a03 1b19 srri @$AR0, $AX1.L
|
||
|
0a04 4c00 add $ACC0, $AC1.L
|
||
|
0a05 147e lsr $ACC0, #-2
|
||
|
0a06 02df ret
|
||
|
0a07 1401 lsl $ACC0, #1
|
||
|
0a08 0081 0ca0 lri $AR1, #0x0ca0
|
||
|
0a0a 009b c000 lri $AX1.H, #0xc000
|
||
|
0a0c 0099 4000 lri $AX1.L, #0x4000
|
||
|
0a0e 8900 clr $ACC1
|
||
|
0a0f 0082 0000 lri $AR2, #0x0000
|
||
|
0a11 1150 0a1c bloopi #0x50, 0x0a1c
|
||
|
0a13 02c0 0001 andcf $AC0.M, #0x0001
|
||
|
0a15 027c iflnz
|
||
|
0a16 1b1b srri @$AR0, $AX1.H
|
||
|
0a17 027d iflz
|
||
|
0a18 1b19 srri @$AR0, $AX1.L
|
||
|
0a19 183d lrr $AC1.L, @$AR1
|
||
|
0a1a 4900 addax $ACC1, $AX0.L
|
||
|
0a1b 1fe2 mrr $AC1.M, $AR2
|
||
|
0a1c 4c39 add's $ACC0, $AC1.L : @$AR1, $AC1.M
|
||
|
0a1d 147f lsr $ACC0, #-1
|
||
|
0a1e 02df ret
|
||
|
0a1f 8900 clr $ACC1
|
||
|
0a20 1fb8 mrr $AC1.L, $AX0.L
|
||
|
0a21 157f lsr $ACC1, #-1
|
||
|
0a22 1050 loopi #0x50
|
||
|
0a23 4c20 add's $ACC0, $AC1.L : @$AR0, $AC0.L
|
||
|
0a24 02df ret
|
||
|
0a25 0082 0180 lri $AR2, #0x0180
|
||
|
0a27 029f 0a2f jmp 0x0a2f
|
||
|
0a29 0082 01c0 lri $AR2, #0x01c0
|
||
|
0a2b 029f 0a2f jmp 0x0a2f
|
||
|
0a2d 0082 0140 lri $AR2, #0x0140
|
||
|
0a2f 008a 003f lri $WR2, #0x003f
|
||
|
0a31 0086 0000 lri $IX2, #0x0000
|
||
|
0a33 1406 lsl $ACC0, #6
|
||
|
0a34 8900 clr $ACC1
|
||
|
0a35 1fb8 mrr $AC1.L, $AX0.L
|
||
|
0a36 1505 lsl $ACC1, #5
|
||
|
0a37 009b 003f lri $AX1.H, #0x003f
|
||
|
0a39 009a 0000 lri $AX0.H, #0x0000
|
||
|
0a3b 3600 andr $AC0.M, $AX1.H
|
||
|
0a3c 1cde mrr $IX2, $AC0.M
|
||
|
0a3d 001a addarn $AR2, $IX2
|
||
|
0a3e 3400 andr $AC0.M, $AX0.H
|
||
|
0a3f 1150 0a45 bloopi #0x50, 0x0a45
|
||
|
0a41 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
|
||
|
0a42 3606 andr'dr $AC0.M, $AX1.H : $AR2
|
||
|
0a43 1cde mrr $IX2, $AC0.M
|
||
|
0a44 340e andr'nr $AC0.M, $AX0.H : $AR2
|
||
|
0a45 1b19 srri @$AR0, $AX1.L
|
||
|
0a46 1fc2 mrr $AC0.M, $AR2
|
||
|
0a47 147a lsr $ACC0, #-6
|
||
|
0a48 008a ffff lri $WR2, #0xffff
|
||
|
0a4a 02df ret
|
||
|
0a4b 1050 loopi #0x50
|
||
|
0a4c 1b18 srri @$AR0, $AX0.L
|
||
|
0a4d 02df ret
|
||
|
0a4e 0082 0100 lri $AR2, #0x0100
|
||
|
0a50 008a 003f lri $WR2, #0x003f
|
||
|
0a52 0086 0000 lri $IX2, #0x0000
|
||
|
0a54 1406 lsl $ACC0, #6
|
||
|
0a55 8900 clr $ACC1
|
||
|
0a56 1fb8 mrr $AC1.L, $AX0.L
|
||
|
0a57 1505 lsl $ACC1, #5
|
||
|
0a58 009b 003f lri $AX1.H, #0x003f
|
||
|
0a5a 009a 0000 lri $AX0.H, #0x0000
|
||
|
0a5c 3600 andr $AC0.M, $AX1.H
|
||
|
0a5d 1cde mrr $IX2, $AC0.M
|
||
|
0a5e 001a addarn $AR2, $IX2
|
||
|
0a5f 3400 andr $AC0.M, $AX0.H
|
||
|
0a60 1150 0a66 bloopi #0x50, 0x0a66
|
||
|
0a62 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
|
||
|
0a63 3606 andr'dr $AC0.M, $AX1.H : $AR2
|
||
|
0a64 1cde mrr $IX2, $AC0.M
|
||
|
0a65 340e andr'nr $AC0.M, $AX0.H : $AR2
|
||
|
0a66 1b19 srri @$AR0, $AX1.L
|
||
|
0a67 1fc2 mrr $AC0.M, $AR2
|
||
|
0a68 147a lsr $ACC0, #-6
|
||
|
0a69 008a ffff lri $WR2, #0xffff
|
||
|
0a6b 02df ret
|
||
|
|
||
|
//
|
||
|
0a6c 0082 0100 lri $AR2, #0x0100
|
||
|
0a6e 008a 003f lri $WR2, #0x003f
|
||
|
0a70 0086 0000 lri $IX2, #0x0000
|
||
|
0a72 0081 0ca0 lri $AR1, #0x0ca0
|
||
|
0a74 1406 lsl $ACC0, #6
|
||
|
0a75 8900 clr $ACC1
|
||
|
0a76 1fb8 mrr $AC1.L, $AX0.L
|
||
|
0a77 1505 lsl $ACC1, #5
|
||
|
0a78 009b 003f lri $AX1.H, #0x003f
|
||
|
0a7a 009a 0000 lri $AX0.H, #0x0000
|
||
|
0a7c 3600 andr $AC0.M, $AX1.H
|
||
|
0a7d 1cde mrr $IX2, $AC0.M
|
||
|
0a7e 001a addarn $AR2, $IX2
|
||
|
0a7f 3400 andr $AC0.M, $AX0.H
|
||
|
|
||
|
0a80 1150 0a8b bloopi #0x50, 0x0a8b
|
||
|
0a82 1939 lrri $AX1.L, @$AR1
|
||
|
0a83 a000 mulx $AX0.L, $AX1.L
|
||
|
0a84 140a lsl $ACC0, #10
|
||
|
0a85 4e00 addp $ACC0
|
||
|
0a86 1476 lsr $ACC0, #-10
|
||
|
0a87 4c4a add'l $ACC0, $AC1.L : $AX1.L, @$AR2
|
||
|
0a88 3606 andr'dr $AC0.M, $AX1.H : $AR2
|
||
|
0a89 1cde mrr $IX2, $AC0.M
|
||
|
0a8a 340e andr'nr $AC0.M, $AX0.H : $AR2
|
||
|
0a8b 1b19 srri @$AR0, $AX1.L
|
||
|
|
||
|
0a8c 1fc2 mrr $AC0.M, $AR2
|
||
|
0a8d 147a lsr $ACC0, #-6
|
||
|
0a8e 008a ffff lri $WR2, #0xffff
|
||
|
0a90 02df ret
|
||
|
|
||
|
//
|
||
|
0a91 0080 01be lri $AR0, #0x01be
|
||
|
0a93 1918 lrri $AX0.L, @$AR0
|
||
|
0a94 191a lrri $AX0.H, @$AR0
|
||
|
0a95 0080 0180 lri $AR0, #0x0180
|
||
|
0a97 0083 0180 lri $AR3, #0x0180
|
||
|
0a99 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0
|
||
|
0a9a 1ffe mrr $AC1.M, $AC0.M
|
||
|
0a9b 1120 0aa2 bloopi #0x20, 0x0aa2
|
||
|
0a9d 7c00 neg $ACC0
|
||
|
0a9e d450 mulcac'l $AC1.M, $AX0.H, $ACC0 : $AX0.H, @$AR0
|
||
|
0a9f 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M
|
||
|
0aa0 c550 mulcac'l $AC0.M, $AX0.H, $ACC1 : $AX0.H, @$AR0
|
||
|
0aa1 1501 lsl $ACC1, #1
|
||
|
0aa2 643b movr's $ACC0, $AX0.H : @$AR3, $AC1.M
|
||
|
0aa3 0080 01fe lri $AR0, #0x01fe
|
||
|
0aa5 191a lrri $AX0.H, @$AR0
|
||
|
0aa6 1918 lrri $AX0.L, @$AR0
|
||
|
0aa7 0080 01c0 lri $AR0, #0x01c0
|
||
|
0aa9 0083 01c0 lri $AR3, #0x01c0
|
||
|
0aab 1ff8 mrr $AC1.M, $AX0.L
|
||
|
0aac 9070 mul'l $AX0.L, $AX0.H : $AC0.M, @$AR0
|
||
|
0aad f800 addpaxz $ACC0, $AX0.H
|
||
|
0aae 0240 01ff andi $AC0.M, #0x01ff
|
||
|
0ab0 0260 2000 ori $AC0.M, #0x2000
|
||
|
0ab2 02bf 0ab5 call 0x0ab5
|
||
|
0ab4 02df ret
|
||
|
0ab5 b900 tst $ACC1
|
||
|
0ab6 0272 ifg
|
||
|
0ab7 7c00 neg $ACC0
|
||
|
0ab8 1f7e mrr $AX1.H, $AC0.M
|
||
|
0ab9 4700 addr $ACC1, $AX1.H
|
||
|
0aba 1110 0abf bloopi #0x10, 0x0abf
|
||
|
0abc 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
|
||
|
0abd 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
|
||
|
0abe 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
|
||
|
0abf 473b addr's $ACC1, $AX1.H : @$AR3, $AC1.M
|
||
|
0ac0 02df ret
|
||
|
|
||
|
//
|
||
|
0ac1 02bf 0b2e call 0x0b2e
|
||
|
0ac3 2201 lrs $AX0.H, @0x0001
|
||
|
0ac4 8600 tstaxh $AX0.H
|
||
|
0ac5 0294 0ad6 jnz 0x0ad6
|
||
|
0ac7 2204 lrs $AX0.H, @0x0004
|
||
|
0ac8 8600 tstaxh $AX0.H
|
||
|
0ac9 02b4 0b1d callne 0x0b1d
|
||
|
0acb 8100 clr $ACC0
|
||
|
0acc 2605 lrs $AC0.M, @0x0005
|
||
|
0acd b100 tst $ACC0
|
||
|
0ace 0295 0ae3 jz 0x0ae3
|
||
|
0ad0 8100 clr $ACC0
|
||
|
0ad1 2e05 srs @0x0005, $AC0.M
|
||
|
0ad2 2281 lrs $AX0.H, @0xff81
|
||
|
0ad3 8600 tstaxh $AX0.H
|
||
|
0ad4 0294 0add jnz 0x0add
|
||
|
0ad6 8100 clr $ACC0
|
||
|
0ad7 005f loop $AC1.M
|
||
|
0ad8 1b7e srri @$AR3, $AC0.M
|
||
|
0ad9 7400 incm $AC0.M
|
||
|
0ada 2e01 srs @0x0001, $AC0.M
|
||
|
0adb 029f 0b16 jmp 0x0b16
|
||
|
0add 2688 lrs $AC0.M, @0xff88
|
||
|
0ade 2489 lrs $AC0.L, @0xff89
|
||
|
0adf 2e34 srs @0x0034, $AC0.M
|
||
|
0ae0 2c35 srs @0x0035, $AC0.L
|
||
|
0ae1 02bf 0b1d call 0x0b1d
|
||
|
0ae3 00ff 0360 sr @0x0360, $AC1.M
|
||
|
0ae5 2638 lrs $AC0.M, @0x0038
|
||
|
0ae6 2439 lrs $AC0.L, @0x0039
|
||
|
0ae7 02bf 068d call 0x068d
|
||
|
0ae9 00df 0360 lr $AC1.M, @0x0360
|
||
|
0aeb 8100 clr $ACC0
|
||
|
0aec 263a lrs $AC0.M, @0x003a
|
||
|
0aed b100 tst $ACC0
|
||
|
0aee 0294 0afd jnz 0x0afd
|
||
|
0af0 263b lrs $AC0.M, @0x003b
|
||
|
0af1 5c00 sub $ACC0, $AC1.L
|
||
|
0af2 0290 0afd jns 0x0afd
|
||
|
0af4 223b lrs $AX0.H, @0x003b
|
||
|
0af5 02bf 06aa call 0x06aa
|
||
|
0af7 5500 subr $ACC1, $AX0.H
|
||
|
0af8 0a01 lris $AX0.H, #0x01
|
||
|
0af9 00fa 0405 sr @0x0405, $AX0.H
|
||
|
0afb 029f 0ad0 jmp 0x0ad0
|
||
|
0afd 1f5f mrr $AX0.H, $AC1.M
|
||
|
0afe 02bf 06aa call 0x06aa
|
||
|
0b00 00fa 0362 sr @0x0362, $AX0.H
|
||
|
0b02 8100 clr $ACC0
|
||
|
0b03 263a lrs $AC0.M, @0x003a
|
||
|
0b04 243b lrs $AC0.L, @0x003b
|
||
|
0b05 1570 lsr $ACC1, #-16
|
||
|
0b06 0a01 lris $AX0.H, #0x01
|
||
|
0b07 0081 0405 lri $AR1, #0x0405
|
||
|
0b09 5c00 sub $ACC0, $AC1.L
|
||
|
0b0a b100 tst $ACC0
|
||
|
0b0b 0275 ifz
|
||
|
0b0c 1a3a srr @$AR1, $AX0.H
|
||
|
0b0d 2e3a srs @0x003a, $AC0.M
|
||
|
0b0e 2c3b srs @0x003b, $AC0.L
|
||
|
0b0f 2638 lrs $AC0.M, @0x0038
|
||
|
0b10 2439 lrs $AC0.L, @0x0039
|
||
|
0b11 00d8 0362 lr $AX0.L, @0x0362
|
||
|
0b13 7000 addaxl $ACC0, $AX0.L
|
||
|
0b14 2c39 srs @0x0039, $AC0.L
|
||
|
0b15 2e38 srs @0x0038, $AC0.M
|
||
|
0b16 0092 00ff lri $CR, #0x00ff
|
||
|
0b18 029f 032e jmp 0x032e
|
||
|
0b1a 8100 clr $ACC0
|
||
|
0b1b 2e34 srs @0x0034, $AC0.M
|
||
|
0b1c 2e35 srs @0x0035, $AC0.M
|
||
|
0b1d 2334 lrs $AX1.H, @0x0034
|
||
|
0b1e 2135 lrs $AX1.L, @0x0035
|
||
|
0b1f 268a lrs $AC0.M, @0xff8a
|
||
|
0b20 248b lrs $AC0.L, @0xff8b
|
||
|
0b21 5a00 subax $ACC0, $AX1.L
|
||
|
0b22 2e3a srs @0x003a, $AC0.M
|
||
|
0b23 2c3b srs @0x003b, $AC0.L
|
||
|
0b24 2634 lrs $AC0.M, @0x0034
|
||
|
0b25 2435 lrs $AC0.L, @0x0035
|
||
|
0b26 238c lrs $AX1.H, @0xff8c
|
||
|
0b27 218d lrs $AX1.L, @0xff8d
|
||
|
0b28 4a00 addax $ACC0, $AX1.L
|
||
|
0b29 2e38 srs @0x0038, $AC0.M
|
||
|
0b2a 2c39 srs @0x0039, $AC0.L
|
||
|
0b2b 8100 clr $ACC0
|
||
|
0b2c 2e05 srs @0x0005, $AC0.M
|
||
|
0b2d 02df ret
|
||
|
|
||
|
//
|
||
|
0b2e 0092 0004 lri $CR, #0x0004
|
||
|
0b30 2002 lrs $AX0.L, @0x0002
|
||
|
0b31 8100 clr $ACC0
|
||
|
0b32 8900 clr $ACC1
|
||
|
0b33 2430 lrs $AC0.L, @0x0030
|
||
|
0b34 8d00 set15
|
||
|
0b35 0950 lris $AX1.L, #0x50
|
||
|
0b36 a000 mulx $AX0.L, $AX1.L
|
||
|
0b37 a400 mulxac $AX0.L, $AX1.L, $ACC0
|
||
|
0b38 1404 lsl $ACC0, #4 // ACC0 = (Mem[0x0002] * 80) << 4;
|
||
|
0b39 8c00 clr15
|
||
|
0b3a 1ffe mrr $AC1.M, $AC0.M // AC1.M = AC0.M;
|
||
|
0b3b 0083 0580 lri $AR3, #0x0580
|
||
|
0b3d 02df ret
|
||
|
|
||
|
// process sound format 0x10 (smg)
|
||
|
// read data stored at 0x0000 by DsetupTable
|
||
|
// stores the output to 0x0580
|
||
|
0b3e 02bf 0b2e call 0x0b2e // prepare regs
|
||
|
0b40 2201 lrs $AX0.H, @0x0001
|
||
|
0b41 8600 tstaxh $AX0.H
|
||
|
0b42 0294 0b53 jnz 0x0b53
|
||
|
0b44 2204 lrs $AX0.H, @0x0004
|
||
|
0b45 8600 tstaxh $AX0.H
|
||
|
0b46 02b4 0b9d callne 0x0b9d
|
||
|
0b48 8100 clr $ACC0
|
||
|
0b49 2605 lrs $AC0.M, @0x0005
|
||
|
0b4a b100 tst $ACC0
|
||
|
0b4b 0295 0b60 jz 0x0b60
|
||
|
0b4d 8100 clr $ACC0
|
||
|
0b4e 2e05 srs @0x0005, $AC0.M
|
||
|
0b4f 2281 lrs $AX0.H, @0xff81
|
||
|
0b50 8600 tstaxh $AX0.H
|
||
|
0b51 0294 0b5a jnz 0x0b5a
|
||
|
|
||
|
0b53 8100 clr $ACC0
|
||
|
|
||
|
0b54 005f loop $AC1.M
|
||
|
0b55 1b7e srri @$AR3, $AC0.M // store zero to output
|
||
|
|
||
|
0b56 7400 incm $AC0.M
|
||
|
0b57 2e01 srs @0x0001, $AC0.M
|
||
|
0b58 029f 0b96 jmp 0x0b96
|
||
|
|
||
|
0b5a 2688 lrs $AC0.M, @0xff88
|
||
|
0b5b 2489 lrs $AC0.L, @0xff89
|
||
|
0b5c 2e34 srs @0x0034, $AC0.M
|
||
|
0b5d 2c35 srs @0x0035, $AC0.L
|
||
|
0b5e 02bf 0b9d call 0x0b9d
|
||
|
|
||
|
0b60 00ff 0360 sr @0x0360, $AC1.M
|
||
|
0b62 2638 lrs $AC0.M, @0x0038
|
||
|
0b63 2439 lrs $AC0.L, @0x0039
|
||
|
// DMA transfer from main memory address Dword[0x0038] to 0x0580
|
||
|
// Dword[0x0038] = Dword[0xFF8C]
|
||
|
0b64 02bf 068d call 0x068d
|
||
|
0b66 02bf 06a4 call 0x06a4
|
||
|
0b68 00df 0360 lr $AC1.M, @0x0360
|
||
|
0b6a 8100 clr $ACC0
|
||
|
0b6b 263a lrs $AC0.M, @0x003a
|
||
|
0b6c b100 tst $ACC0
|
||
|
0b6d 0294 0b7c jnz 0x0b7c
|
||
|
0b6f 263b lrs $AC0.M, @0x003b
|
||
|
0b70 5c00 sub $ACC0, $AC1.L
|
||
|
0b71 0290 0b7c jns 0x0b7c
|
||
|
0b73 223b lrs $AX0.H, @0x003b
|
||
|
0b74 02bf 066f call 0x066f // dma?
|
||
|
0b76 5500 subr $ACC1, $AX0.H
|
||
|
0b77 0a01 lris $AX0.H, #0x01
|
||
|
0b78 00fa 0405 sr @0x0405, $AX0.H
|
||
|
0b7a 029f 0b4d jmp 0x0b4d
|
||
|
0b7c 1f5f mrr $AX0.H, $AC1.M
|
||
|
0b7d 02bf 066f call 0x066f // dma?
|
||
|
0b7f 00fa 0362 sr @0x0362, $AX0.H
|
||
|
0b81 8100 clr $ACC0
|
||
|
0b82 263a lrs $AC0.M, @0x003a
|
||
|
0b83 243b lrs $AC0.L, @0x003b
|
||
|
0b84 1570 lsr $ACC1, #-16
|
||
|
0b85 0a01 lris $AX0.H, #0x01
|
||
|
0b86 0081 0405 lri $AR1, #0x0405
|
||
|
0b88 5c00 sub $ACC0, $AC1.L
|
||
|
0b89 b100 tst $ACC0
|
||
|
0b8a 0275 ifz
|
||
|
0b8b 1a3a srr @$AR1, $AX0.H
|
||
|
0b8c 2e3a srs @0x003a, $AC0.M
|
||
|
0b8d 2c3b srs @0x003b, $AC0.L
|
||
|
0b8e 2638 lrs $AC0.M, @0x0038
|
||
|
0b8f 2439 lrs $AC0.L, @0x0039
|
||
|
0b90 00d8 0362 lr $AX0.L, @0x0362
|
||
|
0b92 7000 addaxl $ACC0, $AX0.L
|
||
|
0b93 7000 addaxl $ACC0, $AX0.L
|
||
|
0b94 2c39 srs @0x0039, $AC0.L
|
||
|
0b95 2e38 srs @0x0038, $AC0.M
|
||
|
0b96 0092 00ff lri $CR, #0x00ff
|
||
|
0b98 029f 032e jmp 0x032e
|
||
|
|
||
|
//
|
||
|
0b9a 8100 clr $ACC0
|
||
|
|
||
|
0b9b 2e34 srs @0x0034, $AC0.M
|
||
|
0b9c 2e35 srs @0x0035, $AC0.M
|
||
|
|
||
|
0b9d 2334 lrs $AX1.H, @0x0034
|
||
|
0b9e 2135 lrs $AX1.L, @0x0035
|
||
|
0b9f 268a lrs $AC0.M, @0xff8a
|
||
|
0ba0 248b lrs $AC0.L, @0xff8b
|
||
|
0ba1 5a00 subax $ACC0, $AX1.L
|
||
|
0ba2 2e3a srs @0x003a, $AC0.M
|
||
|
0ba3 2c3b srs @0x003b, $AC0.L
|
||
|
0ba4 2634 lrs $AC0.M, @0x0034
|
||
|
0ba5 2435 lrs $AC0.L, @0x0035
|
||
|
0ba6 1401 lsl $ACC0, #1
|
||
|
0ba7 238c lrs $AX1.H, @0xff8c
|
||
|
0ba8 218d lrs $AX1.L, @0xff8d
|
||
|
0ba9 4a00 addax $ACC0, $AX1.L
|
||
|
0baa 2e38 srs @0x0038, $AC0.M
|
||
|
0bab 2c39 srs @0x0039, $AC0.L
|
||
|
0bac 8100 clr $ACC0
|
||
|
0bad 2e05 srs @0x0005, $AC0.M
|
||
|
0bae 02df ret
|
||
|
|
||
|
//
|
||
|
0baf 8900 clr $ACC1
|
||
|
0bb0 0f50 lris $AC1.M, #0x50
|
||
|
0bb1 0083 0520 lri $AR3, #0x0520
|
||
|
0bb3 02bf 0bc8 call 0x0bc8
|
||
|
0bb5 029f 0336 jmp 0x0336
|
||
|
0bb7 00d8 0402 lr $AX0.L, @0x0402
|
||
|
0bb9 8100 clr $ACC0
|
||
|
0bba 8900 clr $ACC1
|
||
|
0bbb 00dc 0430 lr $AC0.L, @0x0430
|
||
|
0bbd 0a50 lris $AX0.H, #0x50
|
||
|
0bbe 9000 mul $AX0.L, $AX0.H
|
||
|
0bbf 9400 mulac $AX0.L, $AX0.H, $ACC0
|
||
|
0bc0 1404 lsl $ACC0, #4
|
||
|
0bc1 1ffe mrr $AC1.M, $AC0.M
|
||
|
0bc2 0083 0580 lri $AR3, #0x0580
|
||
|
0bc4 02bf 0bc8 call 0x0bc8
|
||
|
0bc6 029f 032e jmp 0x032e
|
||
|
|
||
|
//
|
||
|
0bc8 0092 0004 lri $CR, #0x0004
|
||
|
0bca 8100 clr $ACC0
|
||
|
0bcb 263a lrs $AC0.M, @0x003a
|
||
|
0bcc 243b lrs $AC0.L, @0x003b
|
||
|
0bcd 1f1f mrr $AX0.L, $AC1.M
|
||
|
0bce 0a00 lris $AX0.H, #0x00
|
||
|
0bcf 5800 subax $ACC0, $AX0.L
|
||
|
0bd0 0292 0be6 jg 0x0be6
|
||
|
0bd2 8900 clr $ACC1
|
||
|
0bd3 00c0 043b lr $AR0, @0x043b
|
||
|
0bd5 02bf 0c0b call 0x0c0b
|
||
|
0bd7 8100 clr $ACC0
|
||
|
0bd8 1fd8 mrr $AC0.M, $AX0.L
|
||
|
0bd9 223b lrs $AX0.H, @0x003b
|
||
|
0bda 5400 subr $ACC0, $AX0.H
|
||
|
0bdb 0007 dar $AR3
|
||
|
0bdc 1979 lrri $AX1.L, @$AR3
|
||
|
0bdd 005e loop $AC0.M
|
||
|
0bde 1b79 srri @$AR3, $AX1.L
|
||
|
0bdf 0f01 lris $AC1.M, #0x01
|
||
|
0be0 2f01 srs @0x0001, $AC1.M
|
||
|
0be1 8900 clr $ACC1
|
||
|
0be2 2f3b srs @0x003b, $AC1.M
|
||
|
0be3 0092 00ff lri $CR, #0x00ff
|
||
|
0be5 02df ret
|
||
|
|
||
|
//
|
||
|
0be6 2e3a srs @0x003a, $AC0.M
|
||
|
0be7 2c3b srs @0x003b, $AC0.L
|
||
|
0be8 8100 clr $ACC0
|
||
|
0be9 8900 clr $ACC1
|
||
|
0bea 268a lrs $AC0.M, @0xff8a
|
||
|
0beb 2734 lrs $AC1.M, @0x0034
|
||
|
0bec 5c00 sub $ACC0, $AC1.L
|
||
|
0bed 2e36 srs @0x0036, $AC0.M
|
||
|
0bee 5000 subr $ACC0, $AX0.L
|
||
|
0bef 0290 0c05 jns 0x0c05
|
||
|
0bf1 00c0 0436 lr $AR0, @0x0436
|
||
|
0bf3 02bf 0c0b call 0x0c0b
|
||
|
0bf5 8100 clr $ACC0
|
||
|
0bf6 1fd8 mrr $AC0.M, $AX0.L
|
||
|
0bf7 2236 lrs $AX0.H, @0x0036
|
||
|
0bf8 5400 subr $ACC0, $AX0.H
|
||
|
0bf9 1c1e mrr $AR0, $AC0.M
|
||
|
0bfa 8100 clr $ACC0
|
||
|
0bfb 2e34 srs @0x0034, $AC0.M
|
||
|
0bfc 2688 lrs $AC0.M, @0xff88
|
||
|
0bfd 2489 lrs $AC0.L, @0xff89
|
||
|
0bfe 2e8c srs @0xff8c, $AC0.M
|
||
|
0bff 2c8d srs @0xff8d, $AC0.L
|
||
|
0c00 02bf 0c0b call 0x0c0b
|
||
|
0c02 0092 00ff lri $CR, #0x00ff
|
||
|
0c04 02df ret
|
||
|
|
||
|
//
|
||
|
0c05 1c18 mrr $AR0, $AX0.L
|
||
|
0c06 02bf 0c0b call 0x0c0b
|
||
|
0c08 0092 00ff lri $CR, #0x00ff
|
||
|
0c0a 02df ret
|
||
|
|
||
|
//
|
||
|
0c0b 8100 clr $ACC0
|
||
|
0c0c 1fc0 mrr $AC0.M, $AR0
|
||
|
0c0d b100 tst $ACC0
|
||
|
0c0e 02d5 retz
|
||
|
0c0f 8900 clr $ACC1
|
||
|
0c10 2734 lrs $AC1.M, @0x0034
|
||
|
0c11 0340 0001 andi $AC1.M, #0x0001
|
||
|
0c13 0b00 lris $AX1.H, #0x00
|
||
|
0c14 1f3f mrr $AX1.L, $AC1.M
|
||
|
0c15 268c lrs $AC0.M, @0xff8c
|
||
|
0c16 248d lrs $AC0.L, @0xff8d
|
||
|
0c17 8900 clr $ACC1
|
||
|
0c18 2534 lrs $AC1.L, @0x0034
|
||
|
0c19 1501 lsl $ACC1, #1
|
||
|
0c1a 4c00 add $ACC0, $AC1.L
|
||
|
0c1b 5a00 subax $ACC0, $AX1.L
|
||
|
0c1c 5a00 subax $ACC0, $AX1.L
|
||
|
0c1d 1c20 mrr $AR1, $AR0
|
||
|
0c1e 1fe0 mrr $AC1.M, $AR0
|
||
|
0c1f 0502 addis $ACC1, #0x02
|
||
|
0c20 1c1f mrr $AR0, $AC1.M
|
||
|
0c21 009f 0b00 lri $AC1.M, #0x0b00
|
||
|
0c23 0092 00ff lri $CR, #0x00ff
|
||
|
0c25 02bf 05e8 call 0x05e8
|
||
|
0c27 0092 0004 lri $CR, #0x0004
|
||
|
0c29 2734 lrs $AC1.M, @0x0034
|
||
|
0c2a 1f61 mrr $AX1.H, $AR1
|
||
|
0c2b 4700 addr $ACC1, $AX1.H
|
||
|
0c2c 2f34 srs @0x0034, $AC1.M
|
||
|
0c2d 0080 0b00 lri $AR0, #0x0b00
|
||
|
0c2f 8900 clr $ACC1
|
||
|
0c30 1ff9 mrr $AC1.M, $AX1.L
|
||
|
0c31 b900 tst $ACC1
|
||
|
0c32 0274 ifnz
|
||
|
0c33 0008 iar $AR0
|
||
|
0c34 8900 clr $ACC1
|
||
|
0c35 1fe1 mrr $AC1.M, $AR1
|
||
|
0c36 191e lrri $AC0.M, @$AR0
|
||
|
0c37 0701 cmpis $ACC1, #0x01
|
||
|
0c38 0293 0c41 jle 0x0c41
|
||
|
0c3a 191a lrri $AX0.H, @$AR0
|
||
|
0c3b 05fe addis $ACC1, #0xfe
|
||
|
0c3c 005f loop $AC1.M
|
||
|
0c3d 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0c3e 1b7e srri @$AR3, $AC0.M
|
||
|
0c3f 1b7a srri @$AR3, $AX0.H
|
||
|
0c40 02df ret
|
||
|
|
||
|
// uh?
|
||
|
0c41 1b7e srri @$AR3, $AC0.M
|
||
|
0c42 02df ret
|
||
|
|
||
|
// ???
|
||
|
// AR0 = some count??? address???
|
||
|
// AC0.M =
|
||
|
// AR1 =
|
||
|
0c43 0083 03e8 lri $AR3, #0x03e8
|
||
|
0c45 191e lrri $AC0.M, @$AR0
|
||
|
0c46 191a lrri $AX0.H, @$AR0
|
||
|
0c47 1006 loopi #0x06
|
||
|
0c48 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0c49 1b7e srri @$AR3, $AC0.M
|
||
|
0c4a 1b7a srri @$AR3, $AX0.H
|
||
|
0c4b 0080 03e8 lri $AR0, #0x03e8
|
||
|
0c4d 8a00 m2
|
||
|
0c4e 0088 0007 lri $WR0, #0x0007
|
||
|
|
||
|
0c50 1150 0c5d bloopi #0x50, 0x0c5d
|
||
|
0c52 1c61 mrr $AR3, $AR1
|
||
|
0c53 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3
|
||
|
0c54 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c55 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c56 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c57 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c58 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c59 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c5a f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c5b f200 madd $AX0.L, $AX0.H
|
||
|
0c5c fe00 movpz $ACC0
|
||
|
0c5d 1b3e srri @$AR1, $AC0.M
|
||
|
|
||
|
0c5e 0088 ffff lri $WR0, #0xffff
|
||
|
0c60 8b00 m0
|
||
|
0c61 02df ret
|
||
|
|
||
|
//
|
||
|
0c62 8a00 m2
|
||
|
0c63 05fe addis $ACC1, #0xfe
|
||
|
0c64 0083 03e8 lri $AR3, #0x03e8
|
||
|
0c66 191e lrri $AC0.M, @$AR0
|
||
|
0c67 191a lrri $AX0.H, @$AR0
|
||
|
0c68 005f loop $AC1.M
|
||
|
0c69 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0c6a 1b7e srri @$AR3, $AC0.M
|
||
|
0c6b 1b7a srri @$AR3, $AX0.H
|
||
|
0c6c 0080 03e8 lri $AR0, #0x03e8
|
||
|
0c6e 0501 addis $ACC1, #0x01
|
||
|
0c6f 1d1f mrr $WR0, $AC1.M
|
||
|
0c70 1150 0c78 bloopi #0x50, 0x0c78
|
||
|
0c72 1c61 mrr $AR3, $AR1
|
||
|
0c73 84c3 clrp'ld : $AX0.L, $AX1.L, @$AR3
|
||
|
0c74 005f loop $AC1.M
|
||
|
0c75 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0c76 f200 madd $AX0.L, $AX0.H
|
||
|
0c77 fe00 movpz $ACC0
|
||
|
0c78 1b3e srri @$AR1, $AC0.M
|
||
|
0c79 0088 ffff lri $WR0, #0xffff
|
||
|
0c7b 8b00 m0
|
||
|
0c7c 02df ret
|
||
|
0c7d 0083 03e8 lri $AR3, #0x03e8
|
||
|
0c7f 191e lrri $AC0.M, @$AR0
|
||
|
0c80 191a lrri $AX0.H, @$AR0
|
||
|
0c81 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0c82 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0c83 1b7e srri @$AR3, $AC0.M
|
||
|
0c84 1b7a srri @$AR3, $AX0.H
|
||
|
0c85 0080 03e8 lri $AR0, #0x03e8
|
||
|
0c87 0088 0003 lri $WR0, #0x0003
|
||
|
0c89 0085 0000 lri $IX1, #0x0000
|
||
|
0c8b 0087 0000 lri $IX3, #0x0000
|
||
|
0c8d 1fc2 mrr $AC0.M, $AR2
|
||
|
0c8e 195b lrri $AX1.H, @$AR2
|
||
|
0c8f 1959 lrri $AX1.L, @$AR2
|
||
|
0c90 195f lrri $AC1.M, @$AR2
|
||
|
0c91 195a lrri $AX0.H, @$AR2
|
||
|
0c92 1c5e mrr $AR2, $AC0.M
|
||
|
0c93 1fda mrr $AC0.M, $AX0.H
|
||
|
0c94 1c61 mrr $AR3, $AR1
|
||
|
0c95 8a00 m2
|
||
|
0c96 8f00 set40
|
||
|
0c97 191a lrri $AX0.H, @$AR0
|
||
|
0c98 b850 mulx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
|
||
|
0c99 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
|
||
|
0c9a ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0c9b e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
|
||
|
0c9c b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0
|
||
|
0c9d 1127 0ca8 bloopi #0x27, 0x0ca8
|
||
|
0c9f e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
|
||
|
0ca0 197e lrri $AC0.M, @$AR3
|
||
|
0ca1 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0ca2 eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
|
||
|
0ca3 bf50 mulxmv'l $AX0.H, $AX1.H, $ACC1 : $AX0.H, @$AR0
|
||
|
0ca4 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M
|
||
|
0ca5 197f lrri $AC1.M, @$AR3
|
||
|
0ca6 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0ca7 e8e8 maddc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
|
||
|
0ca8 b650 mulxmv'l $AX0.H, $AX1.L, $ACC0 : $AX0.H, @$AR0
|
||
|
0ca9 e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
|
||
|
0caa 197e lrri $AC0.M, @$AR3
|
||
|
0cab e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0cac eaf8 maddc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
|
||
|
0cad bf00 mulxmv $AX0.H, $AX1.H, $ACC1
|
||
|
0cae 1bff srrn @$AR3, $AC1.M
|
||
|
0caf 197f lrri $AC1.M, @$AR3
|
||
|
0cb0 8e00 set16
|
||
|
0cb1 8b00 m0
|
||
|
0cb2 0088 ffff lri $WR0, #0xffff
|
||
|
0cb4 1b5b srri @$AR2, $AX1.H
|
||
|
0cb5 1b59 srri @$AR2, $AX1.L
|
||
|
0cb6 1b5f srri @$AR2, $AC1.M
|
||
|
0cb7 1b5e srri @$AR2, $AC0.M
|
||
|
0cb8 02df ret
|
||
|
0cb9 0083 03e8 lri $AR3, #0x03e8
|
||
|
0cbb 191e lrri $AC0.M, @$AR0
|
||
|
0cbc 191a lrri $AX0.H, @$AR0
|
||
|
0cbd 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0cbe 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||
|
0cbf 1b7e srri @$AR3, $AC0.M
|
||
|
0cc0 1b7a srri @$AR3, $AX0.H
|
||
|
0cc1 0080 03e8 lri $AR0, #0x03e8
|
||
|
0cc3 0088 0003 lri $WR0, #0x0003
|
||
|
0cc5 0085 0000 lri $IX1, #0x0000
|
||
|
0cc7 0087 0000 lri $IX3, #0x0000
|
||
|
0cc9 1fc2 mrr $AC0.M, $AR2
|
||
|
0cca 195b lrri $AX1.H, @$AR2
|
||
|
0ccb 1959 lrri $AX1.L, @$AR2
|
||
|
0ccc 195f lrri $AC1.M, @$AR2
|
||
|
0ccd 195a lrri $AX0.H, @$AR2
|
||
|
0cce 1c5e mrr $AR2, $AC0.M
|
||
|
0ccf 1fda mrr $AC0.M, $AX0.H
|
||
|
0cd0 1c61 mrr $AR3, $AR1
|
||
|
0cd1 8a00 m2
|
||
|
0cd2 8f00 set40
|
||
|
0cd3 191a lrri $AX0.H, @$AR0
|
||
|
0cd4 b800 mulx $AX0.H, $AX1.H
|
||
|
0cd5 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
|
||
|
0cd6 e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
|
||
|
0cd7 ea00 maddc $AC1.M, $AX1.L
|
||
|
0cd8 ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0cd9 e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3
|
||
|
0cda ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
|
||
|
0cdb b200 mulxmvz $AX0.H, $AX1.L, $ACC0
|
||
|
0cdc 1127 0ced bloopi #0x27, 0x0ced
|
||
|
0cde e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
|
||
|
0cdf e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
|
||
|
0ce0 197e lrri $AC0.M, @$AR3
|
||
|
0ce1 e800 maddc $AC0.M, $AX1.L
|
||
|
0ce2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0ce3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3
|
||
|
0ce4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
|
||
|
0ce5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1
|
||
|
0ce6 e350 maddx'l $AX0.H, $AX1.H : $AX0.H, @$AR0
|
||
|
0ce7 e2a9 maddx'lsm $AX0.H, $AX1.L : $AX0.H, $AC1.M
|
||
|
0ce8 197f lrri $AC1.M, @$AR3
|
||
|
0ce9 ea00 maddc $AC1.M, $AX1.L
|
||
|
0cea ea50 maddc'l $AC1.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0ceb e877 maddc'ln $AC0.M, $AX1.L : $AC0.M, @$AR3
|
||
|
0cec ece8 msubc'ldm $AC0.M, $AX1.L : $AX0.H, $AX1.L, @$AR0
|
||
|
0ced b200 mulxmvz $AX0.H, $AX1.L, $ACC0
|
||
|
0cee e250 maddx'l $AX0.H, $AX1.L : $AX0.H, @$AR0
|
||
|
0cef e3a8 maddx'lsm $AX0.H, $AX1.H : $AX0.H, $AC0.M
|
||
|
0cf0 197e lrri $AC0.M, @$AR3
|
||
|
0cf1 e800 maddc $AC0.M, $AX1.L
|
||
|
0cf2 e850 maddc'l $AC0.M, $AX1.L : $AX0.H, @$AR0
|
||
|
0cf3 ea7f maddc'ln $AC1.M, $AX1.L : $AC1.M, @$AR3
|
||
|
0cf4 eef8 msubc'ldm $AC1.M, $AX1.L : $AX0.H, $AX1.H, @$AR0
|
||
|
0cf5 bb00 mulxmvz $AX0.H, $AX1.H, $ACC1
|
||
|
0cf6 1bff srrn @$AR3, $AC1.M
|
||
|
0cf7 197f lrri $AC1.M, @$AR3
|
||
|
0cf8 8e00 set16
|
||
|
0cf9 8b00 m0
|
||
|
0cfa 0088 ffff lri $WR0, #0xffff
|
||
|
0cfc 1b5b srri @$AR2, $AX1.H
|
||
|
0cfd 1b59 srri @$AR2, $AX1.L
|
||
|
0cfe 1b5f srri @$AR2, $AC1.M
|
||
|
0cff 1b5e srri @$AR2, $AC0.M
|
||
|
0d00 02df ret
|
||
|
|
||
|
// stores an offset table??? called by DsetupTable
|
||
|
// Mem[0x03F0] = 0x0000;
|
||
|
// Mem[0x03F1] = 0x0096;
|
||
|
// Mem[0x03F2] = 0x00FF;
|
||
|
// Mem[0x03F3] = 0x0030;
|
||
|
// Mem[0x03F4] = 0x0010;
|
||
|
// Mem[0x03F5] = 0x7F00;
|
||
|
// Mem[0x03F6] = 0x0000;
|
||
|
// Mem[0x03F7] = 0x0100;
|
||
|
0d01 0eff lris $AC0.M, #0xff
|
||
|
0d02 00fe 03f2 sr @0x03f2, $AC0.M
|
||
|
0d04 8100 clr $ACC0
|
||
|
0d05 00fe 03f0 sr @0x03f0, $AC0.M
|
||
|
0d07 00fe 03f6 sr @0x03f6, $AC0.M
|
||
|
0d09 009e 0100 lri $AC0.M, #0x0100
|
||
|
0d0b 00fe 03f7 sr @0x03f7, $AC0.M
|
||
|
0d0d 00da 03f7 lr $AX0.H, @0x03f7
|
||
|
0d0f 009e 8000 lri $AC0.M, #0x8000
|
||
|
0d11 5400 subr $ACC0, $AX0.H
|
||
|
0d12 00fe 03f5 sr @0x03f5, $AC0.M
|
||
|
0d14 0e30 lris $AC0.M, #0x30
|
||
|
0d15 00fe 03f3 sr @0x03f3, $AC0.M
|
||
|
0d17 0e10 lris $AC0.M, #0x10
|
||
|
0d18 00fe 03f4 sr @0x03f4, $AC0.M
|
||
|
0d1a 009e 0096 lri $AC0.M, #0x0096
|
||
|
0d1c 00fe 03f1 sr @0x03f1, $AC0.M
|
||
|
0d1e 02df ret
|
||
|
|
||
|
//
|
||
|
0d1f 0080 0a00 lri $AR0, #0x0a00
|
||
|
0d21 8100 clr $ACC0
|
||
|
0d22 00de 03f0 lr $AC0.M, @0x03f0
|
||
|
0d24 8900 clr $ACC1
|
||
|
0d25 b100 tst $ACC0
|
||
|
0d26 0275 ifz
|
||
|
0d27 0550 addis $ACC1, #0x50
|
||
|
0d28 00ff 03f0 sr @0x03f0, $AC1.M
|
||
|
0d2a 0200 0a60 addi $AC0.M, #0x0a60
|
||
|
0d2c 1c7e mrr $AR3, $AC0.M
|
||
|
0d2d 0f4e lris $AC1.M, #0x4e
|
||
|
0d2e 02bf 00e5 call 0x00e5
|
||
|
0d30 02df ret
|
||
|
|
||
|
//
|
||
|
0d31 00de 03f1 lr $AC0.M, @0x03f1
|
||
|
0d33 0200 0a60 addi $AC0.M, #0x0a60
|
||
|
0d35 1c7e mrr $AR3, $AC0.M
|
||
|
0d36 8100 clr $ACC0
|
||
|
0d37 8900 clr $ACC1
|
||
|
0d38 009f 00a0 lri $AC1.M, #0x00a0
|
||
|
0d3a 00de 03f1 lr $AC0.M, @0x03f1
|
||
|
0d3c 5d00 sub $ACC1, $AC0.L
|
||
|
0d3d 0e50 lris $AC0.M, #0x50
|
||
|
0d3e 0750 cmpis $ACC1, #0x50
|
||
|
0d3f 0270 ifns
|
||
|
0d40 5d00 sub $ACC1, $AC0.L
|
||
|
0d41 00da 03f2 lr $AX0.H, @0x03f2
|
||
|
0d43 8600 tstaxh $AX0.H
|
||
|
0d44 0290 0d62 jns 0x0d62
|
||
|
0d46 00de 03f3 lr $AC0.M, @0x03f3
|
||
|
0d48 5c00 sub $ACC0, $AC1.L
|
||
|
0d49 0293 0d4d jle 0x0d4d
|
||
|
0d4b 029f 0d67 jmp 0x0d67
|
||
|
0d4d 00db 03f7 lr $AX1.H, @0x03f7
|
||
|
0d4f 009e 8000 lri $AC0.M, #0x8000
|
||
|
0d51 4600 addr $ACC0, $AX1.H
|
||
|
0d52 029f 0d59 jmp 0x0d59
|
||
|
0d54 00db 03f7 lr $AX1.H, @0x03f7
|
||
|
0d56 009e 8000 lri $AC0.M, #0x8000
|
||
|
0d58 5600 subr $ACC0, $AX1.H
|
||
|
0d59 00fe 03f5 sr @0x03f5, $AC0.M
|
||
|
0d5b 1fda mrr $AC0.M, $AX0.H
|
||
|
0d5c 7c00 neg $ACC0
|
||
|
0d5d 1f5e mrr $AX0.H, $AC0.M
|
||
|
0d5e 00fe 03f2 sr @0x03f2, $AC0.M
|
||
|
0d60 029f 0d67 jmp 0x0d67
|
||
|
0d62 00de 03f4 lr $AC0.M, @0x03f4
|
||
|
0d64 5d00 sub $ACC1, $AC0.L
|
||
|
0d65 0293 0d54 jle 0x0d54
|
||
|
0d67 8900 clr $ACC1
|
||
|
0d68 00dd 03f5 lr $AC1.L, @0x03f5
|
||
|
0d6a 1501 lsl $ACC1, #1
|
||
|
0d6b 8100 clr $ACC0
|
||
|
0d6c 00dc 03f6 lr $AC0.L, @0x03f6
|
||
|
0d6e 008b 009f lri $WR3, #0x009f
|
||
|
0d70 0080 0a00 lri $AR0, #0x0a00
|
||
|
0d72 0900 lris $AX1.L, #0x00
|
||
|
// fill buffer at 0x0A00 with buffer at (0x0A60 + Mem[0x03F1])
|
||
|
0d73 1150 0d7a bloopi #0x50, 0x0d7a
|
||
|
0d75 1878 lrr $AX0.L, @$AR3
|
||
|
0d76 4c00 add $ACC0, $AC1.L
|
||
|
0d77 1cfe mrr $IX3, $AC0.M
|
||
|
0d78 001f addarn $AR3, $IX3
|
||
|
0d79 1fd9 mrr $AC0.M, $AX1.L
|
||
|
0d7a 1b18 srri @$AR0, $AX0.L
|
||
|
|
||
|
0d7b 009f 0a60 lri $AC1.M, #0x0a60
|
||
|
0d7d 1fc3 mrr $AC0.M, $AR3
|
||
|
0d7e 5c00 sub $ACC0, $AC1.L
|
||
|
0d7f 00fe 03f1 sr @0x03f1, $AC0.M
|
||
|
0d81 00fc 03f6 sr @0x03f6, $AC0.L
|
||
|
0d83 008b ffff lri $WR3, #0xffff
|
||
|
0d85 02df ret
|
||
|
|
||
|
// copy buffer at 0x0A00 to right & left buffers
|
||
|
0d86 0f50 lris $AC1.M, #0x50
|
||
|
0d87 0080 0a00 lri $AR0, #0x0a00
|
||
|
0d89 0083 0d60 lri $AR3, #0x0d60
|
||
|
0d8b 0098 3fff lri $AX0.L, #0x3fff
|
||
|
0d8d 02bf 00ff call 0x00ff
|
||
|
0d8f 0f50 lris $AC1.M, #0x50
|
||
|
0d90 0080 0a00 lri $AR0, #0x0a00
|
||
|
0d92 0083 0d00 lri $AR3, #0x0d00
|
||
|
0d94 0098 3fff lri $AX0.L, #0x3fff
|
||
|
0d96 02bf 00ff call 0x00ff
|
||
|
0d98 02df ret
|
||
|
|
||
|
// ???
|
||
|
// ACC1: ???
|
||
|
0d99 b900 tst $ACC1
|
||
|
0d9a 0294 0d9f jnz 0x0d9f
|
||
|
0d9c 6800 movax $ACC0, $AX0.L
|
||
|
0d9d b100 tst $ACC0
|
||
|
0d9e 02d5 retz
|
||
|
0d9f 1c23 mrr $AR1, $AR3
|
||
|
0da0 197e lrri $AC0.M, @$AR3
|
||
|
0da1 191b lrri $AX1.H, @$AR0
|
||
|
0da2 d858 mulc'l $AC1.M, $AX1.H : $AX1.H, @$AR0
|
||
|
|
||
|
0da3 1120 0da9 bloopi #0x20, 0x0da9
|
||
|
0da5 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
|
||
|
0da6 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
|
||
|
0da7 dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
|
||
|
0da8 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
|
||
|
0da9 4900 addax $ACC1, $AX0.L
|
||
|
|
||
|
0daa 1108 0daf bloopi #0x08, 0x0daf
|
||
|
0dac dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
|
||
|
0dad 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
|
||
|
0dae dcd3 mulcac'ld $AC1.M, $AX1.H, $ACC0 : $AX0.L, $AX1.H, @$AR3
|
||
|
0daf 6231 movr's $ACC0, $AX1.L : @$AR1, $AC0.M
|
||
|
|
||
|
0db0 02df ret
|
||
|
|
||
|
// interleave two buffers
|
||
|
0db1 8f00 set40
|
||
|
0db2 8d00 set15
|
||
|
0db3 1c03 mrr $AR0, $AR3
|
||
|
0db4 00d9 038e lr $AX1.L, @0x038e // (0x0040) set by DsetupTable
|
||
|
0db6 0b04 lris $AX1.H, #0x04
|
||
|
0db7 197a lrri $AX0.H, @$AR3
|
||
|
0db8 b053 mulx'l $AX0.H, $AX1.L : $AX0.H, @$AR3
|
||
|
0db9 b600 mulxmv $AX0.H, $AX1.L, $ACC0
|
||
|
0dba 1128 0dbf bloopi #0x28, 0x0dbf
|
||
|
0dbc 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3
|
||
|
0dbd b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
|
||
|
0dbe 3ad3 orr'ld $AC0.M, $AX1.H : $AX0.L, $AX1.H, @$AR3
|
||
|
0dbf b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
|
||
|
0dc0 8c00 clr15
|
||
|
0dc1 8e00 set16
|
||
|
0dc2 02df ret
|
||
|
|
||
|
// ???
|
||
|
0dc3 00da 0485 lr $AX0.H, @0x0485
|
||
|
0dc5 8600 tstaxh $AX0.H
|
||
|
0dc6 0295 0dd4 jz 0x0dd4
|
||
|
0dc8 8100 clr $ACC0
|
||
|
0dc9 00de 042a lr $AC0.M, @0x042a
|
||
|
0dcb 147f lsr $ACC0, #-1
|
||
|
0dcc 00fe 042b sr @0x042b, $AC0.M
|
||
|
0dce b100 tst $ACC0
|
||
|
0dcf 0294 0dd4 jnz 0x0dd4
|
||
|
0dd1 0a01 lris $AX0.H, #0x01
|
||
|
0dd2 00fa 0401 sr @0x0401, $AX0.H
|
||
|
|
||
|
0dd4 8f00 set40
|
||
|
0dd5 8100 clr $ACC0
|
||
|
0dd6 00de 0428 lr $AC0.M, @0x0428
|
||
|
0dd8 1478 lsr $ACC0, #-8
|
||
|
0dd9 00df 0428 lr $AC1.M, @0x0428
|
||
|
0ddb 0340 007f andi $AC1.M, #0x007f
|
||
|
0ddd 1f1e mrr $AX0.L, $AC0.M
|
||
|
0dde 1f5f mrr $AX0.H, $AC1.M
|
||
|
0ddf 0220 007f xori $ACC0, #0x007f
|
||
|
0de1 1f3e mrr $AX1.L, $AC0.M
|
||
|
0de2 0320 007f xori $ACC1, #0x007f
|
||
|
0de4 1f7f mrr $AX1.H, $AC1.M
|
||
|
0de5 8100 clr $ACC0
|
||
|
0de6 8900 clr $ACC1
|
||
|
0de7 009f 0200 lri $AC1.M, #0x0200
|
||
|
0de9 1fd8 mrr $AC0.M, $AX0.L
|
||
|
0dea 4c00 add $ACC0, $AC1.L
|
||
|
0deb 1c1e mrr $AR0, $AC0.M
|
||
|
0dec 1818 lrr $AX0.L, @$AR0
|
||
|
0ded 1fda mrr $AC0.M, $AX0.H
|
||
|
0dee 4c00 add $ACC0, $AC1.L
|
||
|
0def 1c1e mrr $AR0, $AC0.M
|
||
|
0df0 181a lrr $AX0.H, @$AR0
|
||
|
0df1 1fd9 mrr $AC0.M, $AX1.L
|
||
|
0df2 4c00 add $ACC0, $AC1.L
|
||
|
0df3 1c1e mrr $AR0, $AC0.M
|
||
|
0df4 1819 lrr $AX1.L, @$AR0
|
||
|
0df5 1fdb mrr $AC0.M, $AX1.H
|
||
|
0df6 4c00 add $ACC0, $AC1.L
|
||
|
0df7 1c1e mrr $AR0, $AC0.M
|
||
|
0df8 181b lrr $AX1.H, @$AR0
|
||
|
0df9 8a00 m2
|
||
|
0dfa 0080 0b00 lri $AR0, #0x0b00
|
||
|
0dfc 9800 mul $AX1.L, $AX1.H
|
||
|
0dfd ae00 mulxmv $AX0.L, $AX1.H, $ACC0
|
||
|
0dfe b630 mulxmv's $AX0.H, $AX1.L, $ACC0 : @$AR0, $AC0.M
|
||
|
0dff 9630 mulmv's $AX0.L, $AX0.H, $ACC0 : @$AR0, $AC0.M
|
||
|
0e00 6e30 movp's $ACC0 : @$AR0, $AC0.M
|
||
|
0e01 1b1e srri @$AR0, $AC0.M
|
||
|
0e02 8b00 m0
|
||
|
0e03 0080 0b00 lri $AR0, #0x0b00
|
||
|
0e05 0081 0b04 lri $AR1, #0x0b04
|
||
|
0e07 00da 042a lr $AX0.H, @0x042a
|
||
|
0e09 02bf 0e54 call 0x0e54
|
||
|
0e0b 0081 0b08 lri $AR1, #0x0b08
|
||
|
0e0d 0080 0b00 lri $AR0, #0x0b00
|
||
|
0e0f 00da 042a lr $AX0.H, @0x042a
|
||
|
0e11 00de 0429 lr $AC0.M, @0x0429
|
||
|
0e13 8a00 m2
|
||
|
0e14 c000 mulc $AC0.M, $AX0.H
|
||
|
0e15 8b00 m0
|
||
|
0e16 6e00 movp $ACC0
|
||
|
0e17 1f5e mrr $AX0.H, $AC0.M
|
||
|
0e18 02bf 0e54 call 0x0e54
|
||
|
0e1a 0080 0b00 lri $AR0, #0x0b00
|
||
|
0e1c 0081 0b0c lri $AR1, #0x0b0c
|
||
|
0e1e 8100 clr $ACC0
|
||
|
0e1f 8900 clr $ACC1
|
||
|
0e20 00de 042b lr $AC0.M, @0x042b
|
||
|
0e22 00df 042a lr $AC1.M, @0x042a
|
||
|
0e24 00fe 042a sr @0x042a, $AC0.M
|
||
|
0e26 5c00 sub $ACC0, $AC1.L
|
||
|
0e27 1f5e mrr $AX0.H, $AC0.M
|
||
|
0e28 02bf 0e5f call 0x0e5f
|
||
|
0e2a 0080 0b0c lri $AR0, #0x0b0c
|
||
|
0e2c 0081 0b10 lri $AR1, #0x0b10
|
||
|
0e2e 00da 0429 lr $AX0.H, @0x0429
|
||
|
0e30 02bf 0e54 call 0x0e54
|
||
|
0e32 0081 0b04 lri $AR1, #0x0b04
|
||
|
0e34 0082 0b0c lri $AR2, #0x0b0c
|
||
|
0e36 0083 0e6d lri $AR3, #0x0e6d
|
||
|
0e38 1108 0e51 bloopi #0x08, 0x0e51
|
||
|
0e3a 195f lrri $AC1.M, @$AR2
|
||
|
0e3b 15fb asr $ACC1, #-5
|
||
|
0e3c 1f1d mrr $AX0.L, $AC1.L
|
||
|
0e3d 1f5f mrr $AX0.H, $AC1.M
|
||
|
0e3e 193f lrri $AC1.M, @$AR1
|
||
|
0e3f 00e1 0b24 sr @0x0b24, $AR1
|
||
|
0e41 00e2 0b25 sr @0x0b25, $AR2
|
||
|
0e43 021b ilrri $AC0.M, @$AR3
|
||
|
0e44 00e3 0b26 sr @0x0b26, $AR3
|
||
|
0e46 1c7e mrr $AR3, $AC0.M
|
||
|
0e47 00c0 038f lr $AR0, @0x038f
|
||
|
0e49 02bf 0d99 call 0x0d99
|
||
|
0e4b 00c1 0b24 lr $AR1, @0x0b24
|
||
|
0e4d 00c2 0b25 lr $AR2, @0x0b25
|
||
|
0e4f 00c3 0b26 lr $AR3, @0x0b26
|
||
|
0e51 0000 nop
|
||
|
0e52 8e00 set16
|
||
|
0e53 02df ret
|
||
|
|
||
|
//
|
||
|
0e54 8a00 m2
|
||
|
0e55 191f lrri $AC1.M, @$AR0
|
||
|
0e56 d078 mulc'l $AC1.M, $AX0.H : $AC1.M, @$AR0
|
||
|
0e57 d678 mulcmv'l $AC1.M, $AX0.H, $ACC0 : $AC1.M, @$AR0
|
||
|
0e58 d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M
|
||
|
0e59 191f lrri $AC1.M, @$AR0
|
||
|
0e5a d631 mulcmv's $AC1.M, $AX0.H, $ACC0 : @$AR1, $AC0.M
|
||
|
0e5b 6e31 movp's $ACC0 : @$AR1, $AC0.M
|
||
|
0e5c 1b3e srri @$AR1, $AC0.M
|
||
|
0e5d 8b00 m0
|
||
|
0e5e 02df ret
|
||
|
0e5f 8a00 m2
|
||
|
0e60 8d00 set15
|
||
|
0e61 1f7e mrr $AX1.H, $AC0.M
|
||
|
0e62 1918 lrri $AX0.L, @$AR0
|
||
|
0e63 a840 mulx'l $AX0.L, $AX1.H : $AX0.L, @$AR0
|
||
|
0e64 ae40 mulxmv'l $AX0.L, $AX1.H, $ACC0 : $AX0.L, @$AR0
|
||
|
0e65 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M
|
||
|
0e66 1918 lrri $AX0.L, @$AR0
|
||
|
0e67 ae31 mulxmv's $AX0.L, $AX1.H, $ACC0 : @$AR1, $AC0.M
|
||
|
0e68 6e31 movp's $ACC0 : @$AR1, $AC0.M
|
||
|
0e69 1b3e srri @$AR1, $AC0.M
|
||
|
0e6a 8c00 clr15
|
||
|
0e6b 8b00 m0
|
||
|
0e6c 02df ret
|
||
|
0e6d 0d00 lris $AC1.L, #0x00
|
||
|
0e6e 0d60 lris $AC1.L, #0x60
|
||
|
0e6f 0f40 lris $AC1.M, #0x40
|
||
|
0e70 0ca0 lris $AC0.L, #0xa0
|
||
|
0e71 0e80 lris $AC0.M, #0x80
|
||
|
0e72 0ee0 lris $AC0.M, #0xe0
|
||
|
0e73 0be0 lris $AX1.H, #0xe0
|
||
|
0e74 0c40 lris $AC0.L, #0x40
|
||
|
|
||
|
// store ramp???
|
||
|
// AR0 = 0x0580 (left buffer?)
|
||
|
// AR1 = 0x0520 (right buffer?)
|
||
|
0e75 00f9 0361 sr @0x0361, $AX1.L
|
||
|
0e77 1fc0 mrr $AC0.M, $AR0
|
||
|
0e78 0200 fffc addi $AC0.M, #0xfffc // AC0.M = AR0 - 4;
|
||
|
0e7a 1c1e mrr $AR0, $AC0.M // AR0 = AC0.M = 0x057C;
|
||
|
0e7b 1c5e mrr $AR2, $AC0.M // AR2 = AC0.M = 0x057C;
|
||
|
0e7c 0083 043c lri $AR3, #0x043c // AR3 = 0x043C;
|
||
|
0e7e 197e lrri $AC0.M, @$AR3 // AC0.M = Mem[AR3]; AR3++;
|
||
|
0e7f 197f lrri $AC1.M, @$AR3 // AC1.M = Mem[AR3]; AR3++;
|
||
|
0e80 80a2 nx'sl : $AC0.M, $AX0.H // AX0.H = Mem[AR3]; AR3++; Mem[AR0] = AC0.M; AR0++;
|
||
|
0e81 64a3 movr'sl $ACC0, $AX0.H : $AC1.M, $AX0.H
|
||
|
0e82 6530 movr's $ACC1, $AX0.H : @$AR0, $AC0.M
|
||
|
0e83 1b1f srri @$AR0, $AC1.M
|
||
|
0e84 1c02 mrr $AR0, $AR2 // AR0 = AR2; (0x0580)
|
||
|
0e85 8100 clr $ACC0
|
||
|
0e86 00de 0402 lr $AC0.M, @0x0402 // AC0.M = Mem[0x0402]; (0x0FFC) (ACC0 = 0x0FFC0000)
|
||
|
0e88 00fe 0362 sr @0x0362, $AC0.M // Mem[0x0362] = AC0.M;
|
||
|
0e8a 1474 lsr $ACC0, #-12 // ACC0 >>= 12;
|
||
|
0e8b 1f7e mrr $AX1.H, $AC0.M // AX1.H = AC0.M; (0x0000)
|
||
|
0e8c 1f3c mrr $AX1.L, $AC0.L // AX1.L = AC0.L; (0xFFC0)
|
||
|
0e8d 8900 clr $ACC1
|
||
|
0e8e 00dd 0430 lr $AC1.L, @0x0430 // AC1.L = Mem[0x0430];
|
||
|
0e90 1504 lsl $ACC1, #4 // ACC1 <<= 4;
|
||
|
0e91 0604 cmpis $ACC0, #0x04
|
||
|
0e92 0290 0ee9 jns 0x0ee9
|
||
|
0e94 1fdd mrr $AC0.M, $AC1.L
|
||
|
0e95 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0; temp buffer?
|
||
|
// store a ramp. for example, the ramp is 0xFFC0, 0xFF80, 0xFF40, 0xFF00, 0xFEC0 and so on... if start value (Mem[0x0402]) is 0x0FFC.
|
||
|
0e97 1050 loopi #0x50 // for(i = 0; i < 80; i++)
|
||
|
0e98 4b2a addax's $ACC1, $AX1.L : @$AR2, $AC1.L // ACC1 += AX1.L; Mem[AR2] = AC1.L; AR2++;
|
||
|
|
||
|
0e99 1fbe mrr $AC1.L, $AC0.M
|
||
|
0e9a 00fe 0360 sr @0x0360, $AC0.M
|
||
|
0e9c 8900 clr $ACC1
|
||
|
0e9d 1fbe mrr $AC1.L, $AC0.M
|
||
|
0e9e 0af8 lris $AX0.H, #0xf8 // AX0.H = 0x00F8;
|
||
|
0e9f 009b 00fc lri $AX1.H, #0x00fc // AX1.H = 0x00FC;
|
||
|
0ea1 00d8 0361 lr $AX0.L, @0x0361 // AX0.L = Mem[0x0361];
|
||
|
0ea3 0082 02b0 lri $AR2, #0x02b0 // AR2 = 0x02B0;
|
||
|
0ea5 0083 02b0 lri $AR3, #0x02b0 // AR3 = 0x02B0;
|
||
|
0ea7 195e lrri $AC0.M, @$AR2 // AC0.M = Mem[AR2];
|
||
|
0ea8 3480 andr'ls $AC0.M, $AX0.H : $AX0.L, $AC0.M // AC0.M &= 0x00F8; AX0.L = Mem[AR0]; AR0++; Mem[AR3] = AC0.M; AR3++;
|
||
|
// do some processing on the ramp we just made, and merge it to the buffer at 0x0580
|
||
|
0ea9 1128 0eae bloopi #0x28, 0x0eae //
|
||
|
0eab 367a andr'l $AC0.M, $AX1.H : $AC1.M, @$AR2 // AC0.M &= AX1.H; AC1.M = Mem[AR2]; AR2++;
|
||
|
0eac 35b3 andr'sl $AC1.M, $AX0.H : $AC1.M, $AX1.H // AC1.M &= 0x00F8; Mem[AR0] = AC1.M; AR0++; AX1.H = Mem[AR3]; AR3++;
|
||
|
0ead 3772 andr'l $AC1.M, $AX1.H : $AC0.M, @$AR2 // ...
|
||
|
0eae 34bb andr'slm $AC0.M, $AX0.H : $AC1.M, $AX1.H
|
||
|
|
||
|
0eaf 8a00 m2 // multiply by 2
|
||
|
0eb0 0082 02b0 lri $AR2, #0x02b0
|
||
|
0eb2 00dd 0430 lr $AC1.L, @0x0430
|
||
|
0eb4 1504 lsl $ACC1, #4
|
||
|
0eb5 1fe0 mrr $AC1.M, $AR0
|
||
|
0eb6 8100 clr $ACC0
|
||
|
0eb7 00de 0362 lr $AC0.M, @0x0362
|
||
|
0eb9 1474 lsr $ACC0, #-12
|
||
|
0eba 1f7e mrr $AX1.H, $AC0.M // AX1.H = 0x0000
|
||
|
0ebb 1f3c mrr $AX1.L, $AC0.L // AX1.L = 0xFFC0
|
||
|
0ebc 8f00 set40
|
||
|
0ebd 1943 lrri $AR3, @$AR2
|
||
|
0ebe 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
|
||
|
0ebf 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ec0 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ec1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ec2 f200 madd $AX0.L, $AX0.H
|
||
|
0ec3 fe00 movpz $ACC0
|
||
|
0ec4 1c1f mrr $AR0, $AC1.M
|
||
|
0ec5 1943 lrri $AR3, @$AR2
|
||
|
0ec6 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
|
||
|
0ec7 90c3 mul'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
|
||
|
0ec8 114e 0ed0 bloopi #0x4e, 0x0ed0 // uh? 0x4E? skip two samples?
|
||
|
0eca f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ecb f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ecc f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M
|
||
|
0ecd 1c1f mrr $AR0, $AC1.M
|
||
|
0ece 1943 lrri $AR3, @$AR2
|
||
|
0ecf 4bc3 addax'ld $ACC1, $AX1.L : $AX0.L, $AX1.L, @$AR3
|
||
|
0ed0 92c3 mulmvz'ld $AX0.L, $AX0.H, $ACC0 : $AX0.L, $AX1.L, @$AR3
|
||
|
|
||
|
0ed1 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ed2 f2c3 madd'ld $AX0.L, $AX0.H : $AX0.L, $AX1.L, @$AR3
|
||
|
0ed3 f231 madd's $AX0.L, $AX0.H : @$AR1, $AC0.M
|
||
|
0ed4 fe00 movpz $ACC0
|
||
|
0ed5 1b3e srri @$AR1, $AC0.M
|
||
|
0ed6 8b00 m0 // don't multiply by 2
|
||
|
0ed7 8e00 set16
|
||
|
0ed8 00fe 0433 sr @0x0433, $AC0.M
|
||
|
0eda 1c1f mrr $AR0, $AC1.M
|
||
|
0edb 150c lsl $ACC1, #12
|
||
|
0edc 0340 0fff andi $AC1.M, #0x0fff
|
||
|
0ede 00ff 0430 sr @0x0430, $AC1.M
|
||
|
0ee0 0083 043c lri $AR3, #0x043c
|
||
|
0ee2 191e lrri $AC0.M, @$AR0
|
||
|
0ee3 191f lrri $AC1.M, @$AR0
|
||
|
0ee4 80a0 nx'ls : $AX0.H, $AC0.M
|
||
|
0ee5 64a1 movr'ls $ACC0, $AX0.H : $AX0.H, $AC1.M
|
||
|
0ee6 6533 movr's $ACC1, $AX0.H : @$AR3, $AC0.M
|
||
|
0ee7 1b7f srri @$AR3, $AC1.M
|
||
|
0ee8 02df ret
|
||
|
|
||
|
//
|
||
|
0ee9 1fe0 mrr $AC1.M, $AR0
|
||
|
0eea 1c1f mrr $AR0, $AC1.M
|
||
|
// copy buffer at 0x0580 to buffer at 0x0520?
|
||
|
0eeb 1128 0ef2 bloopi #0x28, 0x0ef2
|
||
|
0eed 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0
|
||
|
0eee 1b3e srri @$AR1, $AC0.M
|
||
|
0eef 1c1f mrr $AR0, $AC1.M
|
||
|
0ef0 4b70 addax'l $ACC1, $AX1.L : $AC0.M, @$AR0
|
||
|
0ef1 1b3e srri @$AR1, $AC0.M
|
||
|
0ef2 1c1f mrr $AR0, $AC1.M
|
||
|
|
||
|
0ef3 029f 0ed8 jmp 0x0ed8
|
||
|
|
||
|
//
|
||
|
0ef5 0083 0520 lri $AR3, #0x0520
|
||
|
0ef7 00de 0433 lr $AC0.M, @0x0433
|
||
|
0ef9 1050 loopi #0x50
|
||
|
0efa 1b7e srri @$AR3, $AC0.M
|
||
|
0efb 029f 0336 jmp 0x0336
|
||
|
|
||
|
//
|
||
|
0efd 1c20 mrr $AR1, $AR0
|
||
|
0efe 185f lrr $AC1.M, @$AR2
|
||
|
0eff 1f7f mrr $AX1.H, $AC1.M
|
||
|
0f00 193a lrri $AX0.H, @$AR1
|
||
|
0f01 6400 movr $ACC0, $AX0.H
|
||
|
0f02 0078 0f07 bloop $AX0.L, 0x0f07
|
||
|
0f04 5659 subr'l $ACC0, $AX1.H : $AX1.H, @$AR1
|
||
|
0f05 6730 movr's $ACC1, $AX1.H : @$AR0, $AC0.M
|
||
|
0f06 5551 subr'l $ACC1, $AX0.H : $AX0.H, @$AR1
|
||
|
0f07 6438 movr's $ACC0, $AX0.H : @$AR0, $AC1.M
|
||
|
0f08 1a5b srr @$AR2, $AX1.H
|
||
|
0f09 02df ret
|
||
|
|
||
|
// InitUnkTable()
|
||
|
0f0a 0098 8240 lri $AX0.L, #0x8240
|
||
|
0f0c 00f8 04e8 sr @0x04e8, $AX0.L
|
||
|
0f0e 0098 7fff lri $AX0.L, #0x7fff
|
||
|
0f10 00f8 04e9 sr @0x04e9, $AX0.L
|
||
|
0f12 0098 7dbf lri $AX0.L, #0x7dbf
|
||
|
0f14 00f8 04ea sr @0x04ea, $AX0.L
|
||
|
0f16 0098 843f lri $AX0.L, #0x843f
|
||
|
0f18 00f8 04eb sr @0x04eb, $AX0.L
|
||
|
0f1a 0098 b23b lri $AX0.L, #0xb23b
|
||
|
0f1c 00f8 04f0 sr @0x04f0, $AX0.L
|
||
|
0f1e 0098 7fff lri $AX0.L, #0x7fff
|
||
|
0f20 00f8 04f1 sr @0x04f1, $AX0.L
|
||
|
0f22 0098 4dc4 lri $AX0.L, #0x4dc4
|
||
|
0f24 00f8 04f2 sr @0x04f2, $AX0.L
|
||
|
0f26 0098 d808 lri $AX0.L, #0xd808
|
||
|
0f28 00f8 04f3 sr @0x04f3, $AX0.L
|
||
|
0f2a 0098 0000 lri $AX0.L, #0x0000
|
||
|
0f2c 0080 04ec lri $AR0, #0x04ec
|
||
|
0f2e 1004 loopi #0x04
|
||
|
0f2f 1b18 srri @$AR0, $AX0.L
|
||
|
0f30 0080 04f4 lri $AR0, #0x04f4
|
||
|
0f32 1004 loopi #0x04
|
||
|
0f33 1b18 srri @$AR0, $AX0.L
|
||
|
0f34 02df ret
|
||
|
|
||
|
// mixer?
|
||
|
0f35 0080 0f40 lri $AR0, #0x0f40
|
||
|
0f37 0083 0b00 lri $AR3, #0x0b00
|
||
|
0f39 8900 clr $ACC1
|
||
|
0f3a 0f50 lris $AC1.M, #0x50
|
||
|
0f3b 0098 6784 lri $AX0.L, #0x6784
|
||
|
0f3d 02bf 010e call 0x010e
|
||
|
0f3f 0080 04e8 lri $AR0, #0x04e8
|
||
|
0f41 0082 04ec lri $AR2, #0x04ec
|
||
|
0f43 0081 0b00 lri $AR1, #0x0b00
|
||
|
0f45 8900 clr $ACC1
|
||
|
0f46 0f50 lris $AC1.M, #0x50
|
||
|
0f47 0080 0b00 lri $AR0, #0x0b00
|
||
|
0f49 0083 0d00 lri $AR3, #0x0d00
|
||
|
0f4b 0098 7fff lri $AX0.L, #0x7fff
|
||
|
0f4d 02bf 00ff call 0x00ff
|
||
|
0f4f 8900 clr $ACC1
|
||
|
0f50 0f50 lris $AC1.M, #0x50
|
||
|
0f51 0080 0b00 lri $AR0, #0x0b00
|
||
|
0f53 0083 0d60 lri $AR3, #0x0d60
|
||
|
0f55 0098 b820 lri $AX0.L, #0xb820
|
||
|
0f57 02bf 00ff call 0x00ff
|
||
|
0f59 0080 0ca0 lri $AR0, #0x0ca0
|
||
|
0f5b 0083 0b00 lri $AR3, #0x0b00
|
||
|
0f5d 8900 clr $ACC1
|
||
|
0f5e 0f50 lris $AC1.M, #0x50
|
||
|
0f5f 0098 6784 lri $AX0.L, #0x6784
|
||
|
0f61 02bf 010e call 0x010e
|
||
|
0f63 0080 04e8 lri $AR0, #0x04e8
|
||
|
0f65 0082 04f4 lri $AR2, #0x04f4
|
||
|
0f67 0081 0b00 lri $AR1, #0x0b00
|
||
|
0f69 8900 clr $ACC1
|
||
|
0f6a 0f50 lris $AC1.M, #0x50
|
||
|
0f6b 0080 0b00 lri $AR0, #0x0b00
|
||
|
0f6d 0083 0d00 lri $AR3, #0x0d00
|
||
|
0f6f 0098 47e0 lri $AX0.L, #0x47e0
|
||
|
0f71 02bf 00ff call 0x00ff
|
||
|
0f73 8900 clr $ACC1
|
||
|
0f74 0f50 lris $AC1.M, #0x50
|
||
|
0f75 0080 0b00 lri $AR0, #0x0b00
|
||
|
0f77 0083 0d60 lri $AR3, #0x0d60
|
||
|
0f79 0098 8001 lri $AX0.L, #0x8001
|
||
|
0f7b 02bf 00ff call 0x00ff
|
||
|
0f7d 02df ret
|
||
|
|
||
|
0f7e 0000 nop
|
||
|
0f7f 0000 nop
|