// 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