Skip to content

Instantly share code, notes, and snippets.

@yupferris
Created March 2, 2017 20:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yupferris/ef36a18d979a5f832192f7dd8504a554 to your computer and use it in GitHub Desktop.
Save yupferris/ef36a18d979a5f832192f7dd8504a554 to your computer and use it in GitHub Desktop.
Sample playback routine info for T&E soft logo in Red Alarm
// Super high-level playroutine overview:
// Timer reload set to 0x0004
// Timer int fires every 120us (sample rate of ~8333.3hz)
// Store 0x15 in timer control (small interval, zero interrupt disable, clear zero status, timer enable)
// Output volumes to VOICE_1_VOLUME - VOICE_5_VOLUME
// Store 0x19 in timer control (small interval, zero interrupt enable, timer enable)
* 0xfffffe10 7c44 add 28, r3
0xfffffe12 23dc0000 st.w r1, 0[r3]
0xfffffe16 20bc0207 movhi 0x702, r0, r1
0xfffffe1a 21a0cc07 movea 0x7cc, r1, r1
0xfffffe1e 0118 jmp [r1]
0x070207cc 0078 sei
0x070207ce 7c44 add 28, r3
0x070207d0 e3df0000 st.w r31, 0[r3]
0x070207d4 feaf280e jal 66981416 (0x070015fc)
0x070207d8 e3cf0000 ld.w 0[r3], r31
0x070207dc 6444 add 4, r3
0x070207de 23cc0000 ld.w 0[r3], r1
0x070207e2 6444 add 4, r3
0x070207e4 0058 cli
0x070207e6 0064 reti
0x070015fc 24c04e80 ld.b -32690[r4], r1
0x07001600 01b40100 andi 0x1, r1, r0
0x07001604 5e94 bnz 0x5e (0x07001662)
0x07001662 63a4d8ff addi 0xffd8, r3, r3
0x07001666 c3df2400 st.w r30, 36[r3]
0x0700166a 23df2000 st.w r25, 32[r3]
0x0700166e 03df1c00 st.w r24, 28[r3]
0x07001672 e3de1800 st.w r23, 24[r3]
0x07001676 c3de1400 st.w r22, 20[r3]
0x0700167a a3de1000 st.w r21, 16[r3]
0x0700167e 03de0c00 st.w r16, 12[r3]
0x07001682 43de0800 st.w r18, 8[r3]
0x07001686 63dd0400 st.w r11, 4[r3]
0x0700168a c3dd0000 st.w r14, 0[r3]
0x0700168e 60bd0002 movhi 0x200, r0, r11 // r11 = 0x02000000 (Start of system registers)
0x07001692 a0a21500 movea 0x15, r0, r21
0x07001696 abd22000 st.b r21, 32[r11] // Store 0x15 in timer control reg (small interval, zero interrupt disable, clear zero status, timer enable)
0x0700169a a076 stsr eipc, r21
0x0700169c a4de0480 st.w r21, -32764[r4]
0x070016a0 a176 stsr eipsw, r21
0x070016a2 a4de0880 st.w r21, -32760[r4]
0x070016a6 a576 stsr psw, r21
0x070016a8 20a0ffaf movea 0xafff, r0, r1
0x070016ac a136 and r1, r21
0x070016ae a572 ldsr r21, psw
0x070016b0 c0bd0001 movhi 0x100, r0, r14 // r14 = 0x01000000 (Start of VSU registers)
0x070016b4 04c24e80 ld.b -32690[r4], r16
0x070016b8 10b40200 andi 0x2, r16, r0
0x070016bc 0684 bz 0x6 (0x070016c2)
0x070016be 00a89202 jr 658 (0x07001950)
0x070016c2 c4c63c80 ld.h -32708[r4], r22
0x070016c6 c00e cmp r0, r22
0x070016c8 1884 bz 0x18 (0x070016e0)
0x070016ca a4c63e80 ld.h -32706[r4], r21
0x070016ce a146 add 1, r21
0x070016d0 a4d63e80 st.h r21, -32706[r4]
0x070016d4 b60e cmp r22, r21
0x070016d6 0a94 bnz 0xa (0x070016e0)
0x070016d8 04d43e80 st.h r0, -32706[r4]
0x070016dc 00a83001 jr 304 (0x0700180c)
0x070016e0 10b48000 andi 0x80, r16, r0
0x070016e4 4684 bz 0x46 (0x0700172a)
0x070016e6 a4ce3480 ld.w -32716[r4], r21
0x070016ea a00e cmp r0, r21
0x070016ec 3a84 bz 0x3a (0x07001726)
0x070016ee bf46 add 31, r21
0x070016f0 a4de3480 st.w r21, -32716[r4]
0x070016f4 3694 bnz 0x36 (0x0700172a)
0x070016f6 a4ce3080 ld.w -32720[r4], r21
0x070016fa a4de3480 st.w r21, -32716[r4]
0x070016fe a4c26580 ld.b -32667[r4], r21
0x07001702 b5b6ff00 andi 0xff, r21, r21
0x07001706 20a01000 movea 0x10, r0, r1
0x0700170a a10a sub r1, r21
0x0700170c a4d26580 st.b r21, -32667[r4]
0x07001710 aed21004 st.b r21, 1040[r14] // Write VOICE_1_ENVELOPE_DATA
0x07001714 aed25004 st.b r21, 1104[r14] // Write VOICE_2_ENVELOPE_DATA
0x07001718 aed29004 st.b r21, 1168[r14] // Write VOICE_3_ENVELOPE_DATA
0x0700171c aed2d004 st.b r21, 1232[r14] // Write VOICE_4_ENVELOPE_DATA
0x07001720 aed21005 st.b r21, 1296[r14] // Write VOICE_5_ENVELOPE_DATA
0x07001724 0694 bnz 0x6 (0x0700172a)
0x07001726 00a84201 jr 322 (0x07001868)
0x0700172a 44ce1880 ld.w -32744[r4], r18
0x0700172e a4ce2080 ld.w -32736[r4], r21
0x07001732 32c30000 ld.b 0[r18], r25
0x07001736 39b7ff00 andi 0xff, r25, r25
0x0700173a 4146 add 1, r18
0x0700173c bf46 add 31, r21
0x0700173e 0c8e ble 0xc (0x0700174a)
0x07001740 44de1880 st.w r18, -32744[r4]
0x07001744 a4de2080 st.w r21, -32736[r4]
0x07001748 1a8a br 0x1a (0x07001762)
0x0700174a a4ce2880 ld.w -32728[r4], r21
0x0700174e a00e cmp r0, r21
0x07001750 0e84 bz 0xe (0x0700175e)
0x07001752 a4de1880 st.w r21, -32744[r4]
0x07001756 550a sub r21, r18
0x07001758 44de2080 st.w r18, -32736[r4]
0x0700175c 068a br 0x6 (0x07001762)
0x0700175e 00a80a01 jr 266 (0x07001868)
0x07001762 2157 shr 1, r25
0x07001764 a4c25180 ld.b -32687[r4], r21
0x07001768 a00e cmp r0, r21
0x0700176a 4084 bz 0x40 (0x070017aa)
0x0700176c 44ce1c80 ld.w -32740[r4], r18
0x07001770 a4ce2480 ld.w -32732[r4], r21
0x07001774 12c30000 ld.b 0[r18], r24
0x07001778 18b7ff00 andi 0xff, r24, r24
0x0700177c 4146 add 1, r18
0x0700177e bf46 add 31, r21
0x07001780 0c8e ble 0xc (0x0700178c)
0x07001782 44de1c80 st.w r18, -32740[r4]
0x07001786 a4de2480 st.w r21, -32732[r4]
0x0700178a 1c8a br 0x1c (0x070017a6)
0x0700178c a4ce2c80 ld.w -32724[r4], r21
0x07001790 a00e cmp r0, r21
0x07001792 0e84 bz 0xe (0x070017a0)
0x07001794 a4de1c80 st.w r21, -32740[r4]
0x07001798 550a sub r21, r18
0x0700179a 44de2480 st.w r18, -32732[r4]
0x0700179e 088a br 0x8 (0x070017a6)
0x070017a0 04d05180 st.b r0, -32687[r4]
0x070017a4 028a br 0x2 (0x070017a6)
0x070017a6 0157 shr 1, r24
0x070017a8 3807 add r24, r25
0x070017aa 3507 add r21, r25
0x070017ac a342 mov 3, r21
0x070017ae 3527 div r21, r25
0x070017b0 b902 mov r25, r21
0x070017b2 2253 shl 2, r25
0x070017b4 3507 add r21, r25
0x070017b6 20bc0007 movhi 0x700, r0, r1
0x070017ba a1a2841c movea 0x1c84, r1, r21
0x070017be 3507 add r21, r25
0x070017c0 10b44000 andi 0x40, r16, r0
0x070017c4 2c94 bnz 0x2c (0x070017f0)
0x070017c6 b9c20000 ld.b 0[r25], r21 // r21 = voice 1 volume nybble
0x070017ca d502 mov r21, r22
0x070017cc c452 shl 4, r22
0x070017ce b632 or r22, r21 // r21 = left/right voice 1 volume
0x070017d0 aed20404 st.b r21, 1028[r14] // Write VOICE_1_VOLUME
0x070017d4 b9c20100 ld.b 1[r25], r21
0x070017d8 d502 mov r21, r22
0x070017da c452 shl 4, r22
0x070017dc b632 or r22, r21
0x070017de aed24404 st.b r21, 1092[r14] // Write VOICE_2_VOLUME
0x070017e2 b9c20200 ld.b 2[r25], r21
0x070017e6 d502 mov r21, r22
0x070017e8 c452 shl 4, r22
0x070017ea b632 or r22, r21
0x070017ec aed28404 st.b r21, 1156[r14] // Write VOICE_3_VOLUME
0x070017f0 b9c20300 ld.b 3[r25], r21
0x070017f4 d502 mov r21, r22
0x070017f6 c452 shl 4, r22
0x070017f8 b632 or r22, r21
0x070017fa aed2c404 st.b r21, 1220[r14] // Write VOICE_4_VOLUME
0x070017fe b9c20400 ld.b 4[r25], r21
0x07001802 d502 mov r21, r22
0x07001804 c452 shl 4, r22
0x07001806 b632 or r22, r21
0x07001808 aed20405 st.b r21, 1284[r14] // Write VOICE_5_VOLUME
0x0700180c 10b44000 andi 0x40, r16, r0
0x07001810 0684 bz 0x6 (0x07001816)
0x07001812 00a8f803 jr 1016 (0x07001c0a)
0x07001816 a576 stsr psw, r21
0x07001818 b5b20010 ori 0x1000, r21, r21
0x0700181c a572 ldsr r21, psw
0x0700181e a4ce0480 ld.w -32764[r4], r21
0x07001822 a072 ldsr r21, eipc
0x07001824 a4ce0880 ld.w -32760[r4], r21
0x07001828 a172 ldsr r21, eipsw
0x0700182a a576 stsr psw, r21
0x0700182c b5b20040 ori 0x4000, r21, r21
0x07001830 a572 ldsr r21, psw
0x07001832 a0a21900 movea 0x19, r0, r21
0x07001836 abd22000 st.b r21, 32[r11] // Store 0x19 in timer control reg (small interval, zero interrupt enable, timer enable)
0x0700183a c3cd0000 ld.w 0[r3], r14
0x0700183e 63cd0400 ld.w 4[r3], r11
0x07001842 43ce0800 ld.w 8[r3], r18
0x07001846 03ce0c00 ld.w 12[r3], r16
0x0700184a a3ce1000 ld.w 16[r3], r21
0x0700184e c3ce1400 ld.w 20[r3], r22
0x07001852 e3ce1800 ld.w 24[r3], r23
0x07001856 03cf1c00 ld.w 28[r3], r24
0x0700185a 23cf2000 ld.w 32[r3], r25
0x0700185e c3cf2400 ld.w 36[r3], r30
0x07001862 63a42800 addi 0x28, r3, r3
0x07001866 1f18 jmp [r31]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment