Home » Archimedes archive » Acorn User » AU 1994-06.adf » !WriteDemo_WriteDemo » Modules/Music/Source
Modules/Music/Source
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1994-06.adf » !WriteDemo_WriteDemo |
Filename: | Modules/Music/Source |
Read OK: | ✔ |
File size: | 544C bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >Music 20 30ON ERROR SYS "Hourglass_Smash":ERROR 0,(error$+" (internal error code "+STR$(ERL)+")") 40 50REM Fixed variables : 60 70 trigger$ = "" 80 trigger% = FALSE 90 100 110 120module$ = "Music" 130 140SYS "Hourglass_On" 150SYS "OS_File",13,"<Modules$Dir>."+module$+".Music" TO mus_exists%,,,,mus_len% 160IF mus_exists% = 0 THEN ERROR 0,(module$+": Music file not found") 170 180PROCassemble 190PROCinit 200 210OSCLI"SAVE <Modules$Dir>."+module$+".Module "+STR$~Play_Routine+" "+STR$~(End_Code+mus_len%) 220OSCLI"SETTYPE <Modules$Dir>."+module$+".Module Data" 230 240SYS "Hourglass_Off" 250END 260 270 280 290DEF PROCassemble 300REM *-----------------------------------------------------------------* 310REM * PLAYROUTINE 1-8 VOICES FOR TRACKER Version 1.3 * 320REM *-----------------------------------------------------------------* 330REM * Written by Fabrice MERCIER * 340REM *-----------------------------------------------------------------* 350REM * (c) 1990 Fabrice MERCIER & The Serial Port * 360REM *-----------------------------------------------------------------* 370REM * Many thanks to Hugo for his great help in a bloody debug-day ! * 380REM *-----------------------------------------------------------------* 390REM * In your own program : * 400REM * 1) Call 'Trk_Init_All' at beginning of your program * 410REM * 2) Call 'Trk_Play_Music' each frame * 420REM * 3) Call 'Trk_Close_All' before to quit * 430REM *-----------------------------------------------------------------* 440 450len% = (32 * 1024) + mus_len% 460DIM Play_Routine len% 470Sample_Rate = 34 480Sample_Volume = 44 490Sample_Length = 56 500Repeat_Offset = 68 510Repeat_Length = 80 520 530FOR Pass% = 8 TO 10 STEP 2 540 P% = Play_Routine 550 L% = Play_Routine + len% 560 [ OPT Pass% 570 571 580.init EQUD Trk_Init_All - Play_Routine 590.frame EQUD Trk_Play_Music - Play_Routine 600.end EQUD Trk_Close_All - Play_Routine 610 620; *--------------------------------------------------* 630; * Init Tracker Variables & Init Sound System * 640; *--------------------------------------------------* 650 660.Trk_Init_All 670STMFD R13!,{R0-R12,R14} 680 690BL Get_End_Addr ; R2 => Music base address 700STR R2,Trk_Base ; Must be saved in Trk_Base (!) 710 720ADR R12,Trk_Infos ; R12 => Tracker Pointers & Counters 730MOV R1,#0 740STR R1,[R12],#4 ; Set position in Sequence to zero 750LDR R0,Trk_Base ; R0 => Music Base Address 760LDR R9,[R0,#4] ; R9 = File Length (-8) 770ADD R0,R0,#8 ; R0 => First Chunk Address 780ADD R9,R0,R9 ; R9 => End of file 790MOV R10,R0 800LDR R4,MLEN_Chunk 810BL Search_TFF 820LDR R1,[R0] ; R1 = Music Length (=Sequence length) 830STR R1,[R12],#4 840MOV R1,#0 850STR R1,[R12],#4 ; Pattern line counter to zero 860MOV R0,R10 870LDR R4,PLEN_Chunk 880BL Search_TFF 890STR R0,[R12],#4 ; Save Pattern Table Base Address 900MOV R0,R10 910LDR R4,SEQU_Chunk 920BL Search_TFF 930STR R0,[R12],#4 ; Save Sequence Base Address 940MOV R0,R10 950LDR R4,PNUM_Chunk 960BL Search_TFF 970LDR R6,[R0] ; R6 = Patterns number in music 980BL Get_Patterns_Table ; R11 => on Patterns Table 990STR R11,[R12],#4 1000LDR R4,PATT_Chunk 1010MOV R0,R10 1020.Search_Patterns 1030BL Search_TFF 1040STR R0,[R11],#4 ; Save Pattern Address in Patterns Table 1050ADD R0,R0,R3 ; Add pattern length to chunk (=next pattern) 1060SUBS R6,R6,#1 1070BGT Search_Patterns 1080ADR R1,Trk_Samples 1090LDR R4,SAMP_Chunk 1100MOV R7,#36 ; 36 Samples Chunks in one music piece 1110.Init_Trk_Samples 1120BL Search_TFF 1130SUB R5,R0,#8 1140STR R5,[R1],#4 1150ADD R0,R0,R3 1160SUBS R7,R7,#1 1170BGT Init_Trk_Samples 1180MOV R0,R10 1190LDR R4,MVOX_Chunk 1200BL Search_TFF 1210LDR R12,[R0] ; R12 = Voices Number 1220STR R12,Trk_Voices 1230MOV R0,R10 1240LDR R4,STER_Chunk 1250BL Search_TFF 1260MOV R11,R0 ; R11 => Stereo Positions List 1270BL Init_Sound_System ; Jump To Sound System Initialisation 1280LDMFD R13!,{R0-R12,PC} 1290 1300.TINF_Chunk:EQUS "TINF" 1310.MVOX_Chunk:EQUS "MVOX" 1320.STER_Chunk:EQUS "STER" 1330.MLEN_Chunk:EQUS "MLEN" 1340.PLEN_Chunk:EQUS "PLEN" 1350.SEQU_Chunk:EQUS "SEQU" 1360.PNUM_Chunk:EQUS "PNUM" 1370.PATT_Chunk:EQUS "PATT" 1380.SAMP_Chunk:EQUS "SAMP" 1390 1400; *-----------------------------------------------------* 1410; * SOUND BUFFER FILL ROUTINES * 1420; *-----------------------------------------------------* 1430; * R9 => Tracker Infos Block (32 Byte per channel) * 1440; * [00-03] ( R0 ) Phase Accumulator * 1450; * [04-07] ( R1 ) Phase Increment (Cf. Frequency) * 1460; * [08-11] ( R2 ) Repeat Offset * 1470; * [12-15] ( R3 ) Sample Length (or Repeat Length) * 1480; * [16-19] ( R4 ) Sample Address * 1490; * [20-23] ( R5 ) Sample Volume (255-Volume) * 1500; * [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples) * 1510; * [.....] (....) Others infos for effects * 1520; *-----------------------------------------------------* 1530; * R10 = DMA Buffer limits (+1) * 1540; * R11 = DMA Buffer Interleave Increment (1-8) * 1550; * R12 = DMA Buffer base pointer (+R11) * 1560; *-----------------------------------------------------* 1570 1580.Fill_Sound_Buffer 1590ADR R9,Voices_Infos_Block 1600ADD R9,R9,R7,LSL#5 1610LDMIA R9,{R0-R6} 1620 1630CMP R6,#0 1640BEQ Clear_Fill 1650 1660SUB R8,R3,R0,LSR#16 1670SUB R8,R8,R1,LSR#8 1680CMP R8,#208 1690BGT Full_Fill 1700 1710.Fill_Loop 1720] 1730FOR Plop%=1 TO 16 1740[OPT Pass% 1750LDRB R8,[R4,R0,LSR#16] 1760SUBS R8,R8,R5 1770MOVMI R8,#0 1780STRB R8,[R12],R11 1790ADD R0,R0,R1 1800] 1810NEXT 1820[OPT Pass% 1830CMP R3,R0,LSR#16 ; End of sample ? 1840BGE Check_Buffer_End 1850MOVS R0,R2,LSL#16 ; Yes => R0=Repeat Offset 1860BEQ Clear_Fill ; If no repeat then fill buffer with zeros 1870.Check_Buffer_End 1880CMP R12,R10 1890BLT Fill_Loop 1900STR R0,[R9] 1910MOV R0,#%00001000 1920LDMFD R13!,{PC} 1930 1940.Clear_Fill 1950MOV R5,#0 1960STR R5,[R9,#24] 1970.Clear_Fill_Loop 1980STRB R5,[R12],R11 1990CMP R12,R10 2000BLT Clear_Fill_Loop 2010MOV R0,#%00001000 2020LDMFD R13!,{PC} 2030 2040.Voices_Infos_Block 2050] 2060FOR BufBlk%=1 TO 64 2070[OPT Pass% 2080EQUD 0 2090] 2100NEXT 2110[OPT Pass% 2120 2130.Trk_Base 2140EQUD 0 ; Music Base Address 2150.Trk_Infos 2160EQUD 0 ; Position Counter (In Sequence) 2170EQUD 0 ; Music Length 2180EQUD 0 ; Position Counter (In Pattern) 2190EQUD 0 ; => on Patterns Length Table 2200EQUD 0 ; => on Sequence Base Address 2210EQUD 0 ; => on Patterns Table (up to 64 patterns) 2220.Trk_Voices 2230EQUD 0 ; Voices Number 2240.Trk_Counter 2250EQUD 5 2260.Trk_Speed 2270EQUD 6 2280.Trk_Samples 2290] 2300P%+=36*4 2310[OPT Pass% 2320.Trk_Periods 2330EQUD0:EQUD0:EQUD0:EQUD0 2340EQUD0:EQUD0:EQUD0:EQUD0 2350.Trk_Pattern_Line 2360EQUD0:EQUD0:EQUD0:EQUD0 2370EQUD0:EQUD0:EQUD0:EQUD0 2380.Get_Infos_Block 2390ADR R7,Voices_Infos_Block 2400MOV PC,R14 2410 2420; *---------------------------------------------* 2430; * Increment/Check Counter (Tempo) Value * 2440; *---------------------------------------------* 2450 2460.Trk_Play_Music 2470STMFD R13!,{R0-R12,R14} 2480] 2490IF trigger% THEN 2500 [OPT Pass% 2510 TST R11,#(1<<(ASC("z")-ASC(trigger$))) 2520 BNE Trk_Ok 2530 LDMFD R13!,{R0-R12,PC} 2540 ] 2550ENDIF 2560[OPT Pass% 2570.Trk_Ok 2580LDR R0,Trk_Counter 2590LDR R1,Trk_Speed 2600ADD R0,R0,#1 2610CMP R0,R1 2620MOVGE R0,#0 2630STR R0,Trk_Counter 2640BEQ Trk_Player 2650BNE Trk_Effects 2660 2670; *------------------------------------------* 2680; * Play a new line of current pattern * 2690; *------------------------------------------* 2700 2710.Trk_Player 2720ADR R0,Trk_Infos 2730LDMIA R0,{R1-R6,R11} 2740LDRB R7,[R5,R1] ; R7 = Pattern number 2750LDR R12,[R6,R7,LSL#2] ; R12 => Current pattern 2760MOV R10,R11,LSL#2 ; R10=R11*4 = Pattern Line Length 2770MLA R12,R3,R10,R12 ; R12 => Current pattern line 2780LDRB R7,[R4,R7] ; R7 = Pattern Length (01-64) 2790ADD R3,R3,#1 2800CMP R3,R7 ; End of Pattern ? 2810BLT Write_Position 2820MOV R3,#0 2830ADD R1,R1,#1 ; Next position in Sequence Table 2840CMP R1,R2 ; Last Position in Sequence Table ? 2850MOVGE R1,#0 ; If Yes, Clear Counter. 2860.Write_Position 2870STMIA R0,{R1-R3} ; Save new position 2880 2890ADR R2,Trk_Pattern_Line 2900LDMIA R12,{R4-R11} 2910STMIA R2,{R4-R11} 2920ADR R7,Voices_Infos_Block 2930LDR R11,Trk_Voices 2940BL Get_Frequence_Table ; Return R8 => 'Frequence' Table 2950MOV R9,#0 2960.Trk_VoiceLoop 2970LDR R5,[R12],#4 ; R5=Note+Instrument 2980AND R2,R5,#&FF0000 2990MOV R2,R2,LSR#16 ; R2=Sample number (01-36)=(0-Z) 3000SUBS R2,R2,#1 3010BLT NextOne 3020BL Get_New_Sample ; Normal case = N-O S000... 3030MOVS R4,R5,LSR#24 ; R4=Note number (01-36) 3040BLGT Get_New_Note ; ... Get Sample & Note 3050.NextOne 3060BL Trk_Effects2 3070ADD R7,R7,#32 3080ADD R9,R9,#1 3090CMP R9,R11 3100BLT Trk_VoiceLoop 3110 3120.EndOfPlay 3130LDMFD R13!,{R0-R12,PC} 3140 3150.Get_New_Note 3160STMFD R13!,{R12,R14} 3170BL Get_Periods_Adr 3180SUB R3,R4,#1 3190LDR R3,[R12,R3,LSL#2] 3200STR R3,[R7,#28] ; Save period for portamento... 3210ADR R1,Trk_Periods 3220STR R3,[R1,R9,LSL#2] ; ...and for arpeggio 3230LDR R3,[R8,R3,LSL#2] ; Get phase increment 3240STR R3,[R7,#4] ; & Save it in voices infos block 3250MOV R1,#0 3260STR R1,[R7,#0] ; Clear phase accumulator 3270LDMFD R13!,{R12,PC}^ 3280 3290.Get_New_Sample 3300STMFD R13!,{R4,R12,R14} 3310ADR R3,Trk_Samples 3320LDR R3,[R3,R2,LSL#2] ; R3 => Actual Sample 3330ADD R4,R3,#60 ; R4 => Samples Data 3340STR R4,[R7,#16] 3350MOV R1,#1 3360STR R1,[R7,#24] ; R1 = Flag Fill With Sample 3370 3380; Set Volume 3390 3400LDR R1,[R3,#16+28] ; R1 = Sample Volume 3410SUBS R4,R1,#68 3420MOVLT R4,#0 3430MOV R4,R4,LSR#2 3440RSB R1,R1,#255 3450STR R1,[R7,#20] 3460 3470; Set Volume Command 3480 3490AND R4,R5,#&FF00 3500CMP R4,#&1F00 3510ANDEQ R1,R5,#&FF 3520RSBEQ R1,R1,#&FF 3530STREQ R1,[R7,#20] 3540 3550; Get & Save samples infos 3560 3570LDR R1,[R3,#40+28] ; R1 = Repeat Offset 3580LDR R4,[R3,#52+28] ; R4 = Repeat Length 3590CMP R4,#2 3600ADDNE R4,R4,R1 3610LDREQ R4,[R3,#28+28] ; R4 = Sample Length 3620STR R4,[R7,#12] 3630ADDNE R1,R1,#1 3640STR R1,[R7,#8] ; Sauve Repeat Offset 3650LDMFD R13!,{R4,R12,PC}^ 3660 3670; *----------------------------* 3680; * Effects Checking #1 * 3690; *----------------------------* 3700; * 'E' = Set Stereo * 3710; * 'J' = Position Jump * 3720; * 'V' = Set Volume * 3730; * 'B' = Pattern Break * 3740; * 'S' = Set Speed * 3750; *----------------------------* 3760 3770.Trk_Effects2 3780AND R4,R5,#&FF00 3790 3800; Set Volume ('V') 3810 3820CMP R4,#&1F00 3830BNE No_Set_Volume 3840AND R1,R5,#&FF 3850RSB R1,R1,#&FF 3860STR R1,[R7,#20] 3870MOV PC,R14 3880.No_Set_Volume 3890 3900; Set Speed ('S') 3910 3920CMP R4,#&1C00 3930BNE No_Set_Speed 3940ANDS R1,R5,#&0F 3950STRNE R1,Trk_Speed 3960MOV PC,R14 3970.No_Set_Speed 3980 3990; Pattern Break ('B') 4000 4010CMP R4,#&B00 4020BNE No_Pattern_Break 4030ADR R0,Trk_Infos 4040LDMIA R0,{R1-R3} 4050ADD R1,R1,#1 ; Position = Position + 1 4060CMP R1,R2 4070MOVEQ R1,#0 4080MOV R3,#0 ; At start of next pattern 4090STMIA R0,{R1-R3} 4100MOV PC,R14 4110.No_Pattern_Break 4120 4130; Position Jump ('J') 4140 4150CMP R4,#&1300 4160BNE No_Position_Jump 4170ADR R0,Trk_Infos 4180AND R1,R5,#&7F 4190STR R1,[R0] 4200MOV R1,#0 4210STR R1,[R0,#8] 4220MOV PC,R14 4230.No_Position_Jump 4240 4250CMP R4,#&1500 4260BNE No_Line_Jump 4270AND R1,R5,#&F 4280MOV R2,R5,LSR#4 4290ANDS R2,R2,#&F 4300MOVGT R3,#10 4310MLAGT R1,R2,R3,R1 4320CMP R1,#63 4330ADRLE R0,Trk_Infos 4340STRLE R1,[R0,#8] 4350MOV PC,R14 4360.No_Line_Jump 4370 4380CMP R4,#&E00 4390BNE No_Set_Stereo 4400ADR R10,Stereo_Table 4410ANDS R2,R5,#&0F ; R2 = Stereo position (1-7) 4420MOVEQ PC,R14 4430CMP R2,#7 4440MOVGT PC,R14 4450SUB R2,R2,#1 4460LDR R1,[R10,R2,LSL#2] 4470ADD R0,R9,#1 ; R0 = Voice Number 4480STMFD R13!,{R8,R9} 4490MOV R0,PC 4500ORR R8,R9,#3 4510TEQP R8,#0 4520MOVNV R0,R0 4530STMFD R13!,{R14} 4540SWI "Sound_Stereo" 4550LDMFD R13!,{R14} 4560TEQP R9,#0 4570MOVNV R0,R0 4580LDMFD R13!,{R8,R9} 4590.No_Set_Stereo 4600MOV PC,R14 4610 4620; *---------------------------* 4630; * Effects Checking #2 * 4640; *---------------------------* 4650; * '0' = Arpeggio * 4660; * '1' = Portamento Up * 4670; * '2' = Portamento Down * 4680; * 'G' = Slide Volume Up * 4690; * 'H' = Slide Volume Down * 4700; *---------------------------* 4710 4720.Trk_Effects 4730ADR R9,Trk_Pattern_Line 4740ADR R10,Trk_Periods 4750LDR R11,Trk_Voices ; R11 = Voices Number 4760BL Get_Frequence_Table ; R8 => Frequence Table 4770BL Get_Infos_Block ; R7 => Infos Block (32 Byte / Channel) 4780MOV R2,#0 4790.CheckEffectsLoop 4800LDR R1,[R9,R2,LSL#2] 4810AND R3,R1,#&00FF ; R3 = Effect Data 4820MOV R1,R1,LSR#8 4830AND R1,R1,#&FF ; R1 = Effect Type 4840 4850CMP R1,#&10 4860BNE No_Slide_Vol_Up 4870AND R3,R3,#&FF 4880ADD R4,R7,R2,LSL#5 4890LDR R5,[R4,#20] ; R5=255-Volume 4900RSB R5,R5,#255 4910ADD R5,R5,R3 4920CMP R5,#&FF 4930MOVGT R5,#&FF 4940RSB R5,R5,#255 4950STR R5,[R4,#20] 4960B CheckNextVox 4970.No_Slide_Vol_Up 4980 4990CMP R1,#&11 5000BNE No_Slide_Vol_Down 5010AND R3,R3,#&FF 5020ADD R4,R7,R2,LSL#5 5030LDR R5,[R4,#20] ; R5=255-Volume 5040RSB R5,R5,#255 5050SUBS R5,R5,R3 5060MOVLT R5,#0 5070RSB R5,R5,#255 5080STR R5,[R4,#20] 5090B CheckNextVox 5100.No_Slide_Vol_Down 5110 5120CMP R1,#1 5130BNE NoPortUp 5140ADD R4,R7,R2,LSL#5 5150LDR R5,[R4,#28] ; R5=Actual Period 5160SUB R5,R5,R3 5170CMP R5,#&50 5180MOVLT R5,#&50 5190STR R5,[R4,#28] 5200LDR R5,[R8,R5,LSL#2] 5210STR R5,[R4,#4] 5220B CheckNextVox 5230.NoPortUp 5240 5250CMP R1,#2 5260BNE NoPortDown 5270ADD R4,R7,R2,LSL#5 5280LDR R5,[R4,#28] ; Hauteur Note Actuelle 5290ADD R5,R5,R3 5300CMP R5,#&3F0 5310MOVGT R5,#&3F0 5320STR R5,[R4,#28] 5330LDR R5,[R8,R5,LSL#2] ; Get phase increment... 5340STR R5,[R4,#4] ; ...Save it 5350B CheckNextVox 5360.NoPortDown 5370 5380CMP R1,#0 5390BLEQ Trk_Arpeggio 5400 5410.CheckNextVox 5420ADD R2,R2,#1 ; Next Voice 5430CMP R2,R11 ; Last Voice ? 5440BNE CheckEffectsLoop 5450LDMFD R13!,{R0-R12,PC} 5460 5470.Trk_Arpeggio 5480STMFD R13!,{R14} 5490CMP R3,#0 5500LDMEQFD R13!,{PC} 5510LDR R0,Trk_Counter 5520CMP R0,#1 5530BEQ Arp_Loop2 5540CMP R0,#2 5550BEQ Arp_Loop3 5560CMP R0,#3 5570BEQ Arp_Loop4 5580CMP R0,#4 5590BEQ Arp_Loop2 5600CMP R0,#5 5610BEQ Arp_Loop3 5620LDMFD R13!,{PC} 5630 5640.Arp_Loop2 5650MOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone 5660B Arp_Cont 5670.Arp_Loop3 5680AND R0,R3,#&0F ; R0=Second nibble, then add it to current tone 5690B Arp_Cont 5700.Arp_Loop4 5710LDR R3,[R10,R2,LSL#2] ; Play current tone 5720B Arp_EndPart 5730.Arp_Cont 5740BL Get_Periods_Adr 5750LDR R1,[R10,R2,LSL#2] 5760ADD R4,R12,#36*4 5770.Arp_Loop5 5780LDR R3,[R12,R0,LSL#2] 5790LDR R6,[R12],#4 5800CMP R6,R1 5810BEQ Arp_EndPart 5820B Arp_Loop5 5830 5840.Arp_EndPart 5850ADD R12,R12,R0,LSL#2 5860CMP R12,R4 5870LDMGTFD R13!,{PC} 5880ADD R4,R7,R2,LSL#5 5890CMP R3,#0 5900LDMEQFD R13!,{PC} 5910LDR R5,[R8,R3,LSL#2] ; Get phase increment... 5920STR R5,[R4,#4] ; ...Save it in Voices Infos_Block 5930.End_Effect 5940LDMFD R13!,{PC} 5950 5960.Stereo_Table 5970EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127 5980 5990.Voice_Control_Block 6000B Fill_Sound_Buffer 6010B Fill_Sound_Buffer 6020B Fill_Sound_Buffer 6030LDMFD R13!,{PC} 6040LDMFD R13!,{PC} 6050LDMFD R13!,{PC} 6060LDMFD R13!,{PC} 6070EQUD Voice_Name-Voice_Control_Block 6080.Voice_Name 6090EQUS "Tracker":EQUB 0:ALIGN 6100 6110; *---------------------------------* 6120; * Init Tracker Sound System * 6130; *---------------------------------* 6140 6150.Init_Sound_System 6160STMFD R13!,{R0-R12,R14} 6170LDR R12,Trk_Voices 6180 6190ADR R0,Voice_Control_Block 6200MOV R1,#0 6210SWI "Sound_InstallVoice" 6220STR R1,Old_Voice_Slot 6230 6240MOV R10,#1 6250ADR R9,OldVoices 6260SUB R9,R9,#4 6270.Voices_Exterminator 6280MOV R0,R10 6290MOV R1,#0 6300SWI "Sound_AttachVoice" 6310STR R1,[R9,R10,LSL#2] 6320ADD R10,R10,#1 6330CMP R10,#8 6340BLE Voices_Exterminator 6350 6360MOV R10,#1 6370.InitAllVoices 6380MOV R0,R10 6390ADR R1,Voice_Name 6400SWI "Sound_AttachNamedVoice" 6410ADD R10,R10,#1 6420CMP R10,R12 6430BLE InitAllVoices 6440 6450ADR R7,OldStereos 6460ADR R10,Stereo_Table 6470MOV R9,#1 6480.Set_Stereo_Loop 6490MOV R0,R9 6500LDRB R5,[R11],#1 6510SUBS R5,R5,#1 6520MOVLT R5,#0 6530LDR R1,[R10,R5,LSL#2] 6540SWI "Sound_Stereo" 6550STRB R1,[R7],#1 6560ADD R9,R9,#1 6570CMP R9,R12 6580BLE Set_Stereo_Loop 6590 6600MOV R0,R12 ; Voices number 6610MOV R1,#208 ; Buffer length in byte per channel 6620MOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) 6630MOV R3,#0 6640MOV R4,#0 6650SWI "Sound_Configure" 6660ADR R9,OldConfigure 6670STMIA R9,{R0-R4} 6680 6690MOV R8,R12 6700.SoundAllVoices 6710MOV R0,R8 6720MVN R1,#20 6730MOV R2,#&F0 6740MOV R3,#&FF 6750SWI "Sound_Control" 6760SUBS R8,R8,#1 6770BGT SoundAllVoices 6780LDMFD R13!,{R0-R12,PC}^ 6790 6800.OldVoices 6810EQUD 0:EQUD 0:EQUD 0:EQUD 0 6820EQUD 0:EQUD 0:EQUD 0:EQUD 0 6830.OldConfigure 6840EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 6850.OldStereos 6860EQUD 0:EQUD 0 6870 6880; *--------------------------------* 6890; * Exit of Tracker Sound System * 6900; *--------------------------------* 6910 6920.Trk_Close_All 6930STMFD R13!,{R0-R12,R14} 6940MOV R0,#0 6950LDR R1,Old_Voice_Slot 6960SWI "Sound_RemoveVoice" 6970 6980LDR R12,Trk_Voices 6990MOV R10,#1 7000ADR R9,OldVoices 7010SUB R9,R9,#4 7020.Detach_Trk_Voices 7030MOV R0,R10 7040LDR R1,[R9,R10,LSL#2] 7050SWI "Sound_AttachVoice" 7060ADD R10,R10,#1 7070CMP R10,R12 7080BLE Detach_Trk_Voices 7090 7100ADR R9,OldStereos 7110MOV R10,#1 7120.Restore_Stereos 7130MOV R0,R10 7140LDRB R1,[R9],#1 7150SWI "Sound_Stereo" 7160ADD R10,R10,#1 7170CMP R10,R12 7180BLE Restore_Stereos 7190 7200ADR R9,OldConfigure 7210LDMIA R9,{R0-R4} 7220SWI "Sound_Configure" 7230LDMFD R13!,{R0-R12,PC}^ 7240 7250.Old_Voice_Slot 7260EQUD 0 7270.Get_Periods_Adr 7280ADR R12,Trk_Periods_List 7290MOV PC,R14 7300.Trk_Periods_List 7310EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0 7320EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A 7330EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 7340EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 7350EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D 7360EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 7370EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 7380EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F 7390EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 7400 7410; *--------------------------------------------------* 7420; * Locate a TFF (Tracker File Format !) Chunk * 7430; *--------------------------------------------------* 7440; * Entry parameters = * 7450; * R0 => Previous Chunk or Base Address * 7460; * R4 = Chunck name * 7470; * R9 => Enf of File Address * 7480; *--------------------------------------------------* 7490 7500.Search_TFF 7510LDMIA R0!,{R2-R3} 7520CMP R2,R4 7530ADDNE R0,R0,R3 7540MOVEQ PC,R14 7550CMP R0,R9 ; End Of File ? 7560MOVGE PC,R14 ; Should display an error here (!) 7570B Search_TFF 7580.Get_Patterns_Table 7590ADR R11,Patterns_Table 7600MOV PC,R14 7610 7620.Patterns_Table 7630]:P%+=256:[OPT Pass% 7640 7650; *--------------------------------------------------------------* 7660; * Fill sound buffer without loop (Not beautifull but faster) * 7670; *--------------------------------------------------------------* 7680 7690.Full_Fill 7700] 7710FOR FillSB%=1 TO 208 7720[OPT Pass% 7730LDRB R8,[R4,R0,LSR#16] 7740SUBS R8,R8,R5 7750MOVMI R8,#0 7760STRB R8,[R12],R11 7770ADD R0,R0,R1 7780] 7790NEXT 7800[OPT Pass% 7810STR R0,[R9] 7820MOV R0,#%00001000 7830LDMFD R13!,{PC} 7840 7850 7860.Get_Frequence_Table 7870ADR R8,Frequence_Table1 ; => Freq Table For 1 & 2 Channels 7880CMP R11,#3 7890ADDGE R8,R8,#4096 ; => Freq Table For 3 & 4 Channels 7900CMP R11,#5 7910ADDGE R8,R8,#4096 ; => Freq Table For 5 - 8 Channels 7920MOV PC,R14 7930 7940.Frequence_Table1 7950]:P%+=4096:[OPT Pass% 7960.Frequence_Table2 7970]:P%+=4096:[OPT Pass% 7980.Frequence_Table3 7990]:P%+=4096:[OPT Pass% 8000 8010.Get_End_Addr 8020ADR R2,End_Code 8030MOV PC,R14 8040 8050.End_Code 8060] 8070NEXT 8080ENDPROC 8090 8100 8110 8120DEFPROCinit 8130 8140 FOR Periods%=1 TO 1020 8150 Frequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 8160 NEXT 8170 8180 FOR Periods%=1 TO 1020 8190 Frequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/Sample_Rate))*60000 8200 NEXT 8210 8220 FOR Periods%=1 TO 1020 8230 Frequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 8240 NEXT 8250 8260 OSCLI"LOAD <Modules$Dir>."+module$+".Music "+STR$~End_Code 8270 8280ENDPROC
� >Music K� � ș "Hourglass_Smash":� 0,(error$+" (internal error code "+�(�)+")") ( 2� Fixed variables : < F trigger$ = "" P trigger% = � Z d n xmodule$ = "Music" � �ș "Hourglass_On" �Oș "OS_File",13,"<Modules$Dir>."+module$+".Music" � mus_exists%,,,,mus_len% �>� mus_exists% = 0 � � 0,(module$+": Music file not found") � � �assemble � �init � �Y�"SAVE <Modules$Dir>."+module$+".Module "+�~Play_Routine+" "+�~(End_Code+mus_len%) �4�"SETTYPE <Modules$Dir>."+module$+".Module Data" � �ș "Hourglass_Off" �� "� �assemble ,I� *-----------------------------------------------------------------* 6I� * PLAYROUTINE 1-8 VOICES FOR TRACKER Version 1.3 * @I� *-----------------------------------------------------------------* JI� * Written by Fabrice MERCIER * TI� *-----------------------------------------------------------------* ^I� * (c) 1990 Fabrice MERCIER & The Serial Port * hI� *-----------------------------------------------------------------* rI� * Many thanks to Hugo for his great help in a bloody debug-day ! * |I� *-----------------------------------------------------------------* �I� * In your own program : * �I� * 1) Call 'Trk_Init_All' at beginning of your program * �I� * 2) Call 'Trk_Play_Music' each frame * �I� * 3) Call 'Trk_Close_All' before to quit * �I� *-----------------------------------------------------------------* � �!len% = (32 * 1024) + mus_len% �� Play_Routine len% �Sample_Rate = 34 �Sample_Volume = 44 �Sample_Length = 56 �Repeat_Offset = 68 �Repeat_Length = 80 � Pass% = 8 � 10 � 2 P% = Play_Routine & L% = Play_Routine + len% 0 [ OPT Pass% : ; D-.init EQUD Trk_Init_All - Play_Routine N-.frame EQUD Trk_Play_Music - Play_Routine X-.end EQUD Trk_Close_All - Play_Routine b l:; *--------------------------------------------------* v:; * Init Tracker Variables & Init Sound System * �:; *--------------------------------------------------* � �.Trk_Init_All �STMFD R13!,{R0-R12,R14} � �8BL Get_End_Addr ; R2 => Music base address �=STR R2,Trk_Base ; Must be saved in Trk_Base (!) � �BADR R12,Trk_Infos ; R12 => Tracker Pointers & Counters �MOV R1,#0 �@STR R1,[R12],#4 ; Set position in Sequence to zero �8LDR R0,Trk_Base ; R0 => Music Base Address �5LDR R9,[R0,#4] ; R9 = File Length (-8) 9ADD R0,R0,#8 ; R0 => First Chunk Address 1ADD R9,R0,R9 ; R9 => End of file MOV R10,R0 LDR R4,MLEN_Chunk *BL Search_TFF 4DLDR R1,[R0] ; R1 = Music Length (=Sequence length) >STR R1,[R12],#4 HMOV R1,#0 R<STR R1,[R12],#4 ; Pattern line counter to zero \MOV R0,R10 fLDR R4,PLEN_Chunk pBL Search_TFF z?STR R0,[R12],#4 ; Save Pattern Table Base Address �MOV R0,R10 �LDR R4,SEQU_Chunk �BL Search_TFF �:STR R0,[R12],#4 ; Save Sequence Base Address �MOV R0,R10 �LDR R4,PNUM_Chunk �BL Search_TFF �=LDR R6,[R0] ; R6 = Patterns number in music �8BL Get_Patterns_Table ; R11 => on Patterns Table �STR R11,[R12],#4 �LDR R4,PATT_Chunk �MOV R0,R10 �.Search_Patterns BL Search_TFF FSTR R0,[R11],#4 ; Save Pattern Address in Patterns Table KADD R0,R0,R3 ; Add pattern length to chunk (=next pattern) $SUBS R6,R6,#1 .BGT Search_Patterns 8ADR R1,Trk_Samples BLDR R4,SAMP_Chunk LDMOV R7,#36 ; 36 Samples Chunks in one music piece V.Init_Trk_Samples `BL Search_TFF jSUB R5,R0,#8 tSTR R5,[R1],#4 ~ADD R0,R0,R3 �SUBS R7,R7,#1 �BGT Init_Trk_Samples �MOV R0,R10 �LDR R4,MVOX_Chunk �BL Search_TFF �3LDR R12,[R0] ; R12 = Voices Number �STR R12,Trk_Voices �MOV R0,R10 �LDR R4,STER_Chunk �BL Search_TFF �<MOV R11,R0 ; R11 => Stereo Positions List �CBL Init_Sound_System ; Jump To Sound System Initialisation LDMFD R13!,{R0-R12,PC} .TINF_Chunk:EQUS "TINF" .MVOX_Chunk:EQUS "MVOX" (.STER_Chunk:EQUS "STER" 2.MLEN_Chunk:EQUS "MLEN" <.PLEN_Chunk:EQUS "PLEN" F.SEQU_Chunk:EQUS "SEQU" P.PNUM_Chunk:EQUS "PNUM" Z.PATT_Chunk:EQUS "PATT" d.SAMP_Chunk:EQUS "SAMP" n x=; *-----------------------------------------------------* �7; * � BUFFER Ȑ ROUTINES * �=; *-----------------------------------------------------* �=; * R9 => Tracker Infos Block (32 Byte per channel) * �=; * [00-03] ( R0 ) Phase Accumulator * �=; * [04-07] ( R1 ) Phase Increment (Cf. Frequency) * �=; * [08-11] ( R2 ) Repeat Offset * �=; * [12-15] ( R3 ) Sample Length (or Repeat Length) * �=; * [16-19] ( R4 ) Sample Address * �=; * [20-23] ( R5 ) Sample Volume (255-Volume) * �=; * [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples) * �=; * [.....] (....) Others infos for effects * �=; *-----------------------------------------------------* �=; * R10 = DMA Buffer limits (+1) * =; * R11 = DMA Buffer Interleave Increment (1-8) * =; * R12 = DMA Buffer base pointer (+R11) * =; *-----------------------------------------------------* " ,.Fill_Sound_Buffer 6ADR R9,Voices_Infos_Block @ADD R9,R9,R7,LSL#5 JLDMIA R9,{R0-R6} T ^CMP R6,#0 hBEQ Clear_Fill r |SUB R8,R3,R0,LSR#16 �SUB R8,R8,R1,LSR#8 �CMP R8,#208 �BGT Full_Fill � �.Fill_Loop �] �� Plop%=1 � 16 �[OPT Pass% �LDRB R8,[R4,R0,LSR#16] �SUBS R8,R8,R5 �MOVMI R8,#0 �STRB R8,[R12],R11 �ADD R0,R0,R1 ] � [OPT Pass% &1CMP R3,R0,LSR#16 ; End of sample ? 0BGE Check_Buffer_End :9MOVS R0,R2,LSL#16 ; Yes => R0=Repeat Offset DJBEQ Clear_Fill ; If no repeat then fill buffer with zeros N.Check_Buffer_End XCMP R12,R10 bBLT Fill_Loop lSTR R0,[R9] vMOV R0,#%00001000 �LDMFD R13!,{PC} � �.Clear_Fill �MOV R5,#0 �STR R5,[R9,#24] �.Clear_Fill_Loop �STRB R5,[R12],R11 �CMP R12,R10 �BLT Clear_Fill_Loop �MOV R0,#%00001000 �LDMFD R13!,{PC} � �.Voices_Infos_Block ] � BufBlk%=1 � 64 [OPT Pass% EQUD 0 *] 4� >[OPT Pass% H R .Trk_Base \1EQUD 0 ; Music Base Address f.Trk_Infos p=EQUD 0 ; Position Counter (In Sequence) z+EQUD 0 ; Music Length �<EQUD 0 ; Position Counter (In Pattern) �:EQUD 0 ; => on Patterns Length Table �:EQUD 0 ; => on Sequence Base Address �GEQUD 0 ; => on Patterns Table (up to 64 patterns) �.Trk_Voices �,EQUD 0 ; Voices Number �.Trk_Counter � EQUD 5 �.Trk_Speed � EQUD 6 �.Trk_Samples �] �P%+=36*4 [OPT Pass% .Trk_Periods EQUD0:EQUD0:EQUD0:EQUD0 $EQUD0:EQUD0:EQUD0:EQUD0 ..Trk_Pattern_Line 8EQUD0:EQUD0:EQUD0:EQUD0 BEQUD0:EQUD0:EQUD0:EQUD0 L.Get_Infos_Block VADR R7,Voices_Infos_Block `MOV PC,R14 j t5; *---------------------------------------------* ~5; * Increment/Check Counter (Tempo) Value * �5; *---------------------------------------------* � �.Trk_Play_Music �STMFD R13!,{R0-R12,R14} �] �� trigger% � � [OPT Pass% �* TST R11,#(1<<(�("z")-�(trigger$))) � BNE Trk_Ok � LDMFD R13!,{R0-R12,PC} � ] �� [OPT Pass% .Trk_Ok LDR R0,Trk_Counter LDR R1,Trk_Speed (ADD R0,R0,#1 2CMP R0,R1 <MOVGE R0,#0 FSTR R0,Trk_Counter PBEQ Trk_Player ZBNE Trk_Effects d n2; *------------------------------------------* x2; * Play a new line of current pattern * �2; *------------------------------------------* � �.Trk_Player �ADR R0,Trk_Infos �LDMIA R0,{R1-R6,R11} �6LDRB R7,[R5,R1] ; R7 = Pattern number �9LDR R12,[R6,R7,LSL#2] ; R12 => Current pattern �BMOV R10,R11,LSL#2 ; R10=R11*4 = Pattern Line Length �>MLA R12,R3,R10,R12 ; R12 => Current pattern line �>LDRB R7,[R4,R7] ; R7 = Pattern Length (01-64) �ADD R3,R3,#1 �3CMP R3,R7 ; End of Pattern ? �BLT Write_Position MOV R3,#0 BADD R1,R1,#1 ; Next position in Sequence Table DCMP R1,R2 ; Last Position in Sequence Table ? "9MOVGE R1,#0 ; If Yes, Clear Counter. ,.Write_Position 64STMIA R0,{R1-R3} ; Save new position @ JADR R2,Trk_Pattern_Line TLDMIA R12,{R4-R11} ^STMIA R2,{R4-R11} hADR R7,Voices_Infos_Block rLDR R11,Trk_Voices |@BL Get_Frequence_Table ; Return R8 => 'Frequence' Table �MOV R9,#0 �.Trk_VoiceLoop �4LDR R5,[R12],#4 ; R5=Note+Instrument �� R2,R5,#&FF0000 �@MOV R2,R2,LSR#16 ; R2=Sample number (01-36)=(0-Z) �SUBS R2,R2,#1 �BLT NextOne �;BL Get_New_Sample ; Normal case = N-O S000... �9MOVS R4,R5,LSR#24 ; R4=Note number (01-36) �7BLGT Get_New_Note ; ... Get Sample & Note �.NextOne �BL Trk_Effects2 �ADD R7,R7,#32 ADD R9,R9,#1 CMP R9,R11 BLT Trk_VoiceLoop & 0.EndOfPlay :LDMFD R13!,{R0-R12,PC} D N.Get_New_Note XSTMFD R13!,{R12,R14} bBL Get_Periods_Adr lSUB R3,R4,#1 vLDR R3,[R12,R3,LSL#2] �@STR R3,[R7,#28] ; Save period for portamento... �ADR R1,Trk_Periods �6STR R3,[R1,R9,LSL#2] ; ...and for arpeggio �6LDR R3,[R8,R3,LSL#2] ; Get phase increment �BSTR R3,[R7,#4] ; & Save it in voices infos block �MOV R1,#0 �:STR R1,[R7,#0] ; Clear phase accumulator �LDMFD R13!,{R12,PC}^ � �.Get_New_Sample �STMFD R13!,{R4,R12,R14} �ADR R3,Trk_Samples �6LDR R3,[R3,R2,LSL#2] ; R3 => Actual Sample 5ADD R4,R3,#60 ; R4 => Samples Data STR R4,[R7,#16] MOV R1,#1 =STR R1,[R7,#24] ; R1 = Flag Fill With Sample * 4; Set Volume > H5LDR R1,[R3,#16+28] ; R1 = Sample Volume RSUBS R4,R1,#68 \MOVLT R4,#0 fMOV R4,R4,LSR#2 pRSB R1,R1,#255 zSTR R1,[R7,#20] � �; Set Volume Command � �� R4,R5,#&FF00 �CMP R4,#&1F00 ��EQ R1,R5,#&FF �RSBEQ R1,R1,#&FF �STREQ R1,[R7,#20] � �; Get & Save samples infos � �8LDR R1,[R3,#40+28] ; R1 = Repeat Offset �8LDR R4,[R3,#52+28] ; R4 = Repeat Length CMP R4,#2 ADDNE R4,R4,R1 8LDREQ R4,[R3,#28+28] ; R4 = Sample Length $STR R4,[R7,#12] .ADDNE R1,R1,#1 89STR R1,[R7,#8] ; Sauve Repeat Offset BLDMFD R13!,{R4,R12,PC}^ L V$; *----------------------------* `$; * Effects Checking #1 * j$; *----------------------------* t$; * 'E' = Set Stereo * ~$; * 'J' = Position Jump * �$; * 'V' = Set Volume * �$; * 'B' = Pattern Break * �$; * 'S' = Set Speed * �$; *----------------------------* � �.Trk_Effects2 �� R4,R5,#&FF00 � �; Set Volume ('V') � �CMP R4,#&1F00 �BNE No_Set_Volume � R1,R5,#&FF RSB R1,R1,#&FF STR R1,[R7,#20] MOV PC,R14 (.No_Set_Volume 2 <; Set Speed ('S') F PCMP R4,#&1C00 ZBNE No_Set_Speed d�S R1,R5,#&0F nSTRNE R1,Trk_Speed xMOV PC,R14 �.No_Set_Speed � �; Pattern Break ('B') � �CMP R4,#&B00 �BNE No_Pattern_Break �ADR R0,Trk_Infos �LDMIA R0,{R1-R3} �AADD R1,R1,#1 ; Position = Position + 1 �CMP R1,R2 ��Q R1,#0 �BMOV R3,#0 ; At start of next pattern �STMIA R0,{R1-R3} MOV PC,R14 .No_Pattern_Break "; Position Jump ('J') , 6CMP R4,#&1300 @BNE No_Position_Jump JADR R0,Trk_Infos T� R1,R5,#&7F ^STR R1,[R0] hMOV R1,#0 rSTR R1,[R0,#8] |MOV PC,R14 �.No_Position_Jump � �CMP R4,#&1500 �BNE No_Line_Jump �� R1,R5,#&F �MOV R2,R5,LSR#4 ��S R2,R2,#&F �MOVGT R3,#10 �MLAGT R1,R2,R3,R1 �CMP R1,#63 �ADRLE R0,Trk_Infos �STRLE R1,[R0,#8] �MOV PC,R14 .No_Line_Jump CMP R4,#&E00 &BNE No_Set_Stereo 0ADR R10,Stereo_Table :8�S R2,R5,#&0F ; R2 = Stereo position (1-7) D �Q PC,R14 NCMP R2,#7 XMOVGT PC,R14 bSUB R2,R2,#1 lLDR R1,[R10,R2,LSL#2] v1ADD R0,R9,#1 ; R0 = Voice Number �STMFD R13!,{R8,R9} �MOV R0,PC ��R R8,R9,#3 �TEQP R8,#0 �MOVNV R0,R0 �STMFD R13!,{R14} �SWI "Sound_Stereo" �LDMFD R13!,{R14} �TEQP R9,#0 �MOVNV R0,R0 �LDMFD R13!,{R8,R9} �.No_Set_Stereo �MOV PC,R14 #; *---------------------------* #; * Effects Checking #2 * #; *---------------------------* *#; * '0' = Arpeggio * 4#; * '1' = Portamento Up * >#; * '2' = Portamento Down * H#; * 'G' = Slide Volume Up * R#; * 'H' = Slide Volume Down * \#; *---------------------------* f p.Trk_Effects zADR R9,Trk_Pattern_Line �ADR R10,Trk_Periods �4LDR R11,Trk_Voices ; R11 = Voices Number �6BL Get_Frequence_Table ; R8 => Frequence Table �FBL Get_Infos_Block ; R7 => Infos Block (32 Byte / Channel) �MOV R2,#0 �.CheckEffectsLoop �LDR R1,[R9,R2,LSL#2] �/� R3,R1,#&00FF ; R3 = Effect Data �MOV R1,R1,LSR#8 �/� R1,R1,#&FF ; R1 = Effect Type � �CMP R1,#&10 �BNE No_Slide_Vol_Up � R3,R3,#&FF ADD R4,R7,R2,LSL#5 /LDR R5,[R4,#20] ; R5=255-Volume $RSB R5,R5,#255 .ADD R5,R5,R3 8CMP R5,#&FF BMOVGT R5,#&FF LRSB R5,R5,#255 VSTR R5,[R4,#20] `B CheckNextVox j.No_Slide_Vol_Up t ~CMP R1,#&11 �BNE No_Slide_Vol_Down �� R3,R3,#&FF �ADD R4,R7,R2,LSL#5 �-LDR R5,[R4,#20] ; R5=255-Volume �RSB R5,R5,#255 �SUBS R5,R5,R3 �MOVLT R5,#0 �RSB R5,R5,#255 �STR R5,[R4,#20] �B CheckNextVox �.No_Slide_Vol_Down � CMP R1,#1 BNE NoPortUp ADD R4,R7,R2,LSL#5 0LDR R5,[R4,#28] ; R5=Actual Period (SUB R5,R5,R3 2CMP R5,#&50 <MOVLT R5,#&50 FSTR R5,[R4,#28] PLDR R5,[R8,R5,LSL#2] ZSTR R5,[R4,#4] dB CheckNextVox n .NoPortUp x �CMP R1,#2 �BNE NoPortDown �ADD R4,R7,R2,LSL#5 �5LDR R5,[R4,#28] ; Hauteur Note Actuelle �ADD R5,R5,R3 �CMP R5,#&3F0 �MOVGT R5,#&3F0 �STR R5,[R4,#28] �6LDR R5,[R8,R5,LSL#2] ; Get phase increment... �*STR R5,[R4,#4] ; ...Save it �B CheckNextVox �.NoPortDown � CMP R1,#0 BLEQ Trk_Arpeggio ".CheckNextVox ,*ADD R2,R2,#1 ; Next Voice 6,CMP R2,R11 ; Last Voice ? @BNE CheckEffectsLoop JLDMFD R13!,{R0-R12,PC} T ^.Trk_Arpeggio hSTMFD R13!,{R14} rCMP R3,#0 |LDMEQFD R13!,{PC} �LDR R0,Trk_Counter �CMP R0,#1 �BEQ Arp_Loop2 �CMP R0,#2 �BEQ Arp_Loop3 �CMP R0,#3 �BEQ Arp_Loop4 �CMP R0,#4 �BEQ Arp_Loop2 �CMP R0,#5 �BEQ Arp_Loop3 �LDMFD R13!,{PC} � .Arp_Loop2 KMOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone B Arp_Cont &.Arp_Loop3 0J� R0,R3,#&0F ; R0=Second nibble, then add it to current tone :B Arp_Cont D.Arp_Loop4 N0LDR R3,[R10,R2,LSL#2] ; Play current tone XB Arp_EndPart b .Arp_Cont lBL Get_Periods_Adr vLDR R1,[R10,R2,LSL#2] �ADD R4,R12,#36*4 �.Arp_Loop5 �LDR R3,[R12,R0,LSL#2] �LDR R6,[R12],#4 �CMP R6,R1 �BEQ Arp_EndPart �B Arp_Loop5 � �.Arp_EndPart �ADD R12,R12,R0,LSL#2 �CMP R12,R4 �LDMGTFD R13!,{PC} �ADD R4,R7,R2,LSL#5 CMP R3,#0 LDMEQFD R13!,{PC} ;LDR R5,[R8,R3,LSL#2] ; Get phase increment... ESTR R5,[R4,#4] ; ...Save it in Voices Infos_Block *.End_Effect 4LDMFD R13!,{PC} > H.Stereo_Table R?EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127 \ f.Voice_Control_Block pB Fill_Sound_Buffer zB Fill_Sound_Buffer �B Fill_Sound_Buffer �LDMFD R13!,{PC} �LDMFD R13!,{PC} �LDMFD R13!,{PC} �LDMFD R13!,{PC} �'EQUD Voice_Name-Voice_Control_Block �.Voice_Name �EQUS "Tracker":EQUB 0:ALIGN � �); *---------------------------------* �); * Init Tracker Sound System * �); *---------------------------------* � .Init_Sound_System STMFD R13!,{R0-R12,R14} LDR R12,Trk_Voices $ . ADR R0,Voice_Control_Block 8MOV R1,#0 BSWI "Sound_InstallVoice" LSTR R1,Old_Voice_Slot V `MOV R10,#1 jADR R9,OldVoices tSUB R9,R9,#4 ~.Voices_Exterminator �MOV R0,R10 �MOV R1,#0 �SWI "Sound_AttachVoice" �STR R1,[R9,R10,LSL#2] �ADD R10,R10,#1 �CMP R10,#8 �BLE Voices_Exterminator � �MOV R10,#1 �.InitAllVoices �MOV R0,R10 �ADR R1,Voice_Name "SWI "Sound_AttachNamedVoice" ADD R10,R10,#1 CMP R10,R12 BLE InitAllVoices ( 2ADR R7,OldStereos <ADR R10,Stereo_Table FMOV R9,#1 P.Set_Stereo_Loop ZMOV R0,R9 dLDRB R5,[R11],#1 nSUBS R5,R5,#1 xMOVLT R5,#0 �LDR R1,[R10,R5,LSL#2] �SWI "Sound_Stereo" �STRB R1,[R7],#1 �ADD R9,R9,#1 �CMP R9,R12 �BLE Set_Stereo_Loop � �.MOV R0,R12 ; Voices number �BMOV R1,#208 ; Buffer length in byte per channel �@MOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) �MOV R3,#0 �MOV R4,#0 �SWI "Sound_Configure" ADR R9,OldConfigure STMIA R9,{R0-R4} "MOV R8,R12 ,.SoundAllVoices 6MOV R0,R8 @MVN R1,#20 JMOV R2,#&F0 TMOV R3,#&FF ^SWI "Sound_Control" hSUBS R8,R8,#1 rBGT SoundAllVoices |LDMFD R13!,{R0-R12,PC}^ � �.OldVoices �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �.OldConfigure �&EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 �.OldStereos �EQUD 0:EQUD 0 � �(; *--------------------------------* �(; * Exit of Tracker Sound System * �(; *--------------------------------* � .Trk_Close_All STMFD R13!,{R0-R12,R14} MOV R0,#0 &LDR R1,Old_Voice_Slot 0SWI "Sound_RemoveVoice" : DLDR R12,Trk_Voices NMOV R10,#1 XADR R9,OldVoices bSUB R9,R9,#4 l.Detach_Trk_Voices vMOV R0,R10 �LDR R1,[R9,R10,LSL#2] �SWI "Sound_AttachVoice" �ADD R10,R10,#1 �CMP R10,R12 �BLE Detach_Trk_Voices � �ADR R9,OldStereos �MOV R10,#1 �.Restore_Stereos �MOV R0,R10 �LDRB R1,[R9],#1 �SWI "Sound_Stereo" �ADD R10,R10,#1 CMP R10,R12 BLE Restore_Stereos ADR R9,OldConfigure *LDMIA R9,{R0-R4} 4SWI "Sound_Configure" >LDMFD R13!,{R0-R12,PC}^ H R.Old_Voice_Slot \ EQUD 0 f.Get_Periods_Adr pADR R12,Trk_Periods_List zMOV PC,R14 �.Trk_Periods_List �/EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0 �/EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A �/EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 �/EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 �/EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D �/EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 �/EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 �/EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F �/EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 � �:; *--------------------------------------------------* �:; * Locate a TFF (Tracker File Format !) Chunk * :; *--------------------------------------------------* :; * Entry parameters = * :; * R0 => Previous Chunk or Base Address * $:; * R4 = Chunck name * .:; * R9 => Enf of File Address * 8:; *--------------------------------------------------* B L.Search_TFF VLDMIA R0!,{R2-R3} `CMP R2,R4 jADDNE R0,R0,R3 t �Q PC,R14 ~+CMP R0,R9 ; End Of File ? �>MOVGE PC,R14 ; Should display an error here (!) �B Search_TFF �.Get_Patterns_Table �ADR R11,Patterns_Table �MOV PC,R14 � �.Patterns_Table �]:P%+=256:[OPT Pass% � �F; *--------------------------------------------------------------* �F; * Fill sound buffer without loop (Not beautifull but faster) * �F; *--------------------------------------------------------------* .Full_Fill ] � FillSB%=1 � 208 ([OPT Pass% 2LDRB R8,[R4,R0,LSR#16] <SUBS R8,R8,R5 FMOVMI R8,#0 PSTRB R8,[R12],R11 ZADD R0,R0,R1 d] n� x[OPT Pass% �STR R0,[R9] �MOV R0,#%00001000 �LDMFD R13!,{PC} � � �.Get_Frequence_Table �CADR R8,Frequence_Table1 ; => Freq Table For 1 & 2 Channels �CMP R11,#3 �CADDGE R8,R8,#4096 ; => Freq Table For 3 & 4 Channels �CMP R11,#5 �CADDGE R8,R8,#4096 ; => Freq Table For 5 - 8 Channels �MOV PC,R14 � .Frequence_Table1 ]:P%+=4096:[OPT Pass% .Frequence_Table2 "]:P%+=4096:[OPT Pass% ,.Frequence_Table3 6]:P%+=4096:[OPT Pass% @ J.Get_End_Addr TADR R2,End_Code ^MOV PC,R14 h r .End_Code |] �� �� � � � � ��init � � � Periods%=1 � 1020 �M Frequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 � � � � � Periods%=1 � 1020 �V Frequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/Sample_Rate))*60000 � � Periods%=1 � 1020 &M Frequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 0 � : D9 �"LOAD <Modules$Dir>."+module$+".Music "+�~End_Code N X� �
00000000 0d 00 0a 0c f4 20 3e 4d 75 73 69 63 0d 00 14 04 |..... >Music....| 00000010 0d 00 1e 4b ee 20 85 20 c8 99 20 22 48 6f 75 72 |...K. . .. "Hour| 00000020 67 6c 61 73 73 5f 53 6d 61 73 68 22 3a 85 20 30 |glass_Smash":. 0| 00000030 2c 28 65 72 72 6f 72 24 2b 22 20 28 69 6e 74 65 |,(error$+" (inte| 00000040 72 6e 61 6c 20 65 72 72 6f 72 20 63 6f 64 65 20 |rnal error code | 00000050 22 2b c3 28 9e 29 2b 22 29 22 29 0d 00 28 04 0d |"+.(.)+")")..(..| 00000060 00 32 18 f4 20 20 46 69 78 65 64 20 76 61 72 69 |.2.. Fixed vari| 00000070 61 62 6c 65 73 20 3a 0d 00 3c 04 0d 00 46 13 20 |ables :..<...F. | 00000080 20 74 72 69 67 67 65 72 24 20 3d 20 22 22 0d 00 | trigger$ = ""..| 00000090 50 12 20 20 74 72 69 67 67 65 72 25 20 3d 20 a3 |P. trigger% = .| 000000a0 0d 00 5a 04 0d 00 64 04 0d 00 6e 04 0d 00 78 15 |..Z...d...n...x.| 000000b0 6d 6f 64 75 6c 65 24 20 3d 20 22 4d 75 73 69 63 |module$ = "Music| 000000c0 22 0d 00 82 04 0d 00 8c 15 c8 99 20 22 48 6f 75 |".......... "Hou| 000000d0 72 67 6c 61 73 73 5f 4f 6e 22 0d 00 96 4f c8 99 |rglass_On"...O..| 000000e0 20 22 4f 53 5f 46 69 6c 65 22 2c 31 33 2c 22 3c | "OS_File",13,"<| 000000f0 4d 6f 64 75 6c 65 73 24 44 69 72 3e 2e 22 2b 6d |Modules$Dir>."+m| 00000100 6f 64 75 6c 65 24 2b 22 2e 4d 75 73 69 63 22 20 |odule$+".Music" | 00000110 b8 20 6d 75 73 5f 65 78 69 73 74 73 25 2c 2c 2c |. mus_exists%,,,| 00000120 2c 6d 75 73 5f 6c 65 6e 25 0d 00 a0 3e e7 20 6d |,mus_len%...>. m| 00000130 75 73 5f 65 78 69 73 74 73 25 20 3d 20 30 20 8c |us_exists% = 0 .| 00000140 20 85 20 30 2c 28 6d 6f 64 75 6c 65 24 2b 22 3a | . 0,(module$+":| 00000150 20 4d 75 73 69 63 20 66 69 6c 65 20 6e 6f 74 20 | Music file not | 00000160 66 6f 75 6e 64 22 29 0d 00 aa 04 0d 00 b4 0d f2 |found").........| 00000170 61 73 73 65 6d 62 6c 65 0d 00 be 09 f2 69 6e 69 |assemble.....ini| 00000180 74 0d 00 c8 04 0d 00 d2 59 ff 22 53 41 56 45 20 |t.......Y."SAVE | 00000190 20 20 20 3c 4d 6f 64 75 6c 65 73 24 44 69 72 3e | <Modules$Dir>| 000001a0 2e 22 2b 6d 6f 64 75 6c 65 24 2b 22 2e 4d 6f 64 |."+module$+".Mod| 000001b0 75 6c 65 20 22 2b c3 7e 50 6c 61 79 5f 52 6f 75 |ule "+.~Play_Rou| 000001c0 74 69 6e 65 2b 22 20 22 2b c3 7e 28 45 6e 64 5f |tine+" "+.~(End_| 000001d0 43 6f 64 65 2b 6d 75 73 5f 6c 65 6e 25 29 0d 00 |Code+mus_len%)..| 000001e0 dc 34 ff 22 53 45 54 54 59 50 45 20 3c 4d 6f 64 |.4."SETTYPE <Mod| 000001f0 75 6c 65 73 24 44 69 72 3e 2e 22 2b 6d 6f 64 75 |ules$Dir>."+modu| 00000200 6c 65 24 2b 22 2e 4d 6f 64 75 6c 65 20 44 61 74 |le$+".Module Dat| 00000210 61 22 0d 00 e6 04 0d 00 f0 16 c8 99 20 22 48 6f |a".......... "Ho| 00000220 75 72 67 6c 61 73 73 5f 4f 66 66 22 0d 00 fa 05 |urglass_Off"....| 00000230 e0 0d 01 04 04 0d 01 0e 04 0d 01 18 04 0d 01 22 |..............."| 00000240 0f dd 20 f2 61 73 73 65 6d 62 6c 65 0d 01 2c 49 |.. .assemble..,I| 00000250 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |. *-------------| 00000260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000290 2d 2d 2d 2d 2a 0d 01 36 49 f4 20 2a 20 20 20 20 |----*..6I. * | 000002a0 20 20 20 20 20 50 4c 41 59 52 4f 55 54 49 4e 45 | PLAYROUTINE| 000002b0 20 31 2d 38 20 56 4f 49 43 45 53 20 46 4f 52 20 | 1-8 VOICES FOR | 000002c0 54 52 41 43 4b 45 52 20 20 56 65 72 73 69 6f 6e |TRACKER Version| 000002d0 20 31 2e 33 20 20 20 20 20 20 20 20 20 2a 0d 01 | 1.3 *..| 000002e0 40 49 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |@I. *-----------| 000002f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000320 2d 2d 2d 2d 2d 2d 2a 0d 01 4a 49 f4 20 2a 20 20 |------*..JI. * | 00000330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000340 20 20 57 72 69 74 74 65 6e 20 62 79 20 46 61 62 | Written by Fab| 00000350 72 69 63 65 20 4d 45 52 43 49 45 52 20 20 20 20 |rice MERCIER | 00000360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a | *| 00000370 0d 01 54 49 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d |..TI. *---------| 00000380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000003b0 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 5e 49 f4 20 2a |--------*..^I. *| 000003c0 20 20 20 20 20 20 20 20 20 20 20 20 28 63 29 20 | (c) | 000003d0 31 39 39 30 20 46 61 62 72 69 63 65 20 4d 45 52 |1990 Fabrice MER| 000003e0 43 49 45 52 20 26 20 54 68 65 20 53 65 72 69 61 |CIER & The Seria| 000003f0 6c 20 50 6f 72 74 20 20 20 20 20 20 20 20 20 20 |l Port | 00000400 20 2a 0d 01 68 49 f4 20 2a 2d 2d 2d 2d 2d 2d 2d | *..hI. *-------| 00000410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 72 49 f4 |----------*..rI.| 00000450 20 2a 20 20 4d 61 6e 79 20 74 68 61 6e 6b 73 20 | * Many thanks | 00000460 74 6f 20 48 75 67 6f 20 66 6f 72 20 68 69 73 20 |to Hugo for his | 00000470 67 72 65 61 74 20 68 65 6c 70 20 69 6e 20 61 20 |great help in a | 00000480 62 6c 6f 6f 64 79 20 64 65 62 75 67 2d 64 61 79 |bloody debug-day| 00000490 20 21 20 2a 0d 01 7c 49 f4 20 2a 2d 2d 2d 2d 2d | ! *..|I. *-----| 000004a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000004d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 86 |------------*...| 000004e0 49 f4 20 2a 20 20 49 6e 20 79 6f 75 72 20 6f 77 |I. * In your ow| 000004f0 6e 20 70 72 6f 67 72 61 6d 20 3a 20 20 20 20 20 |n program : | 00000500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00000520 20 20 20 20 20 2a 0d 01 90 49 f4 20 2a 20 20 31 | *...I. * 1| 00000530 29 20 43 61 6c 6c 20 27 54 72 6b 5f 49 6e 69 74 |) Call 'Trk_Init| 00000540 5f 41 6c 6c 27 20 61 74 20 62 65 67 69 6e 6e 69 |_All' at beginni| 00000550 6e 67 20 6f 66 20 79 6f 75 72 20 70 72 6f 67 72 |ng of your progr| 00000560 61 6d 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d |am *.| 00000570 01 9a 49 f4 20 2a 20 20 32 29 20 43 61 6c 6c 20 |..I. * 2) Call | 00000580 27 54 72 6b 5f 50 6c 61 79 5f 4d 75 73 69 63 27 |'Trk_Play_Music'| 00000590 20 65 61 63 68 20 66 72 61 6d 65 20 20 20 20 20 | each frame | 000005a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000005b0 20 20 20 20 20 20 20 2a 0d 01 a4 49 f4 20 2a 20 | *...I. * | 000005c0 20 33 29 20 43 61 6c 6c 20 27 54 72 6b 5f 43 6c | 3) Call 'Trk_Cl| 000005d0 6f 73 65 5f 41 6c 6c 27 20 62 65 66 6f 72 65 20 |ose_All' before | 000005e0 74 6f 20 71 75 69 74 20 20 20 20 20 20 20 20 20 |to quit | 000005f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000600 2a 0d 01 ae 49 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d |*...I. *--------| 00000610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 b8 04 0d 01 |---------*......| 00000650 c2 21 6c 65 6e 25 20 3d 20 28 33 32 20 2a 20 31 |.!len% = (32 * 1| 00000660 30 32 34 29 20 2b 20 6d 75 73 5f 6c 65 6e 25 0d |024) + mus_len%.| 00000670 01 cc 18 de 20 20 50 6c 61 79 5f 52 6f 75 74 69 |.... Play_Routi| 00000680 6e 65 20 6c 65 6e 25 0d 01 d6 16 53 61 6d 70 6c |ne len%....Sampl| 00000690 65 5f 52 61 74 65 20 20 20 3d 20 33 34 0d 01 e0 |e_Rate = 34...| 000006a0 16 53 61 6d 70 6c 65 5f 56 6f 6c 75 6d 65 20 3d |.Sample_Volume =| 000006b0 20 34 34 0d 01 ea 16 53 61 6d 70 6c 65 5f 4c 65 | 44....Sample_Le| 000006c0 6e 67 74 68 20 3d 20 35 36 0d 01 f4 16 52 65 70 |ngth = 56....Rep| 000006d0 65 61 74 5f 4f 66 66 73 65 74 20 3d 20 36 38 0d |eat_Offset = 68.| 000006e0 01 fe 16 52 65 70 65 61 74 5f 4c 65 6e 67 74 68 |...Repeat_Length| 000006f0 20 3d 20 38 30 0d 02 08 04 0d 02 12 18 e3 20 50 | = 80......... P| 00000700 61 73 73 25 20 3d 20 38 20 b8 20 31 30 20 88 20 |ass% = 8 . 10 . | 00000710 32 0d 02 1c 17 20 20 50 25 20 3d 20 50 6c 61 79 |2.... P% = Play| 00000720 5f 52 6f 75 74 69 6e 65 0d 02 26 1e 20 20 4c 25 |_Routine..&. L%| 00000730 20 3d 20 50 6c 61 79 5f 52 6f 75 74 69 6e 65 20 | = Play_Routine | 00000740 2b 20 6c 65 6e 25 0d 02 30 11 20 20 5b 20 4f 50 |+ len%..0. [ OP| 00000750 54 20 50 61 73 73 25 0d 02 3a 04 0d 02 3b 04 0d |T Pass%..:...;..| 00000760 02 44 2d 2e 69 6e 69 74 20 20 45 51 55 44 20 54 |.D-.init EQUD T| 00000770 72 6b 5f 49 6e 69 74 5f 41 6c 6c 20 20 20 2d 20 |rk_Init_All - | 00000780 50 6c 61 79 5f 52 6f 75 74 69 6e 65 0d 02 4e 2d |Play_Routine..N-| 00000790 2e 66 72 61 6d 65 20 45 51 55 44 20 54 72 6b 5f |.frame EQUD Trk_| 000007a0 50 6c 61 79 5f 4d 75 73 69 63 20 2d 20 50 6c 61 |Play_Music - Pla| 000007b0 79 5f 52 6f 75 74 69 6e 65 0d 02 58 2d 2e 65 6e |y_Routine..X-.en| 000007c0 64 20 20 20 45 51 55 44 20 54 72 6b 5f 43 6c 6f |d EQUD Trk_Clo| 000007d0 73 65 5f 41 6c 6c 20 20 2d 20 50 6c 61 79 5f 52 |se_All - Play_R| 000007e0 6f 75 74 69 6e 65 0d 02 62 04 0d 02 6c 3a 3b 20 |outine..b...l:; | 000007f0 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00000800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000820 2d 2d 2d 2a 0d 02 76 3a 3b 20 2a 20 20 20 20 49 |---*..v:; * I| 00000830 6e 69 74 20 54 72 61 63 6b 65 72 20 56 61 72 69 |nit Tracker Vari| 00000840 61 62 6c 65 73 20 26 20 49 6e 69 74 20 53 6f 75 |ables & Init Sou| 00000850 6e 64 20 53 79 73 74 65 6d 20 20 20 20 2a 0d 02 |nd System *..| 00000860 80 3a 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.:; *-----------| 00000870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000890 2d 2d 2d 2d 2d 2d 2d 2a 0d 02 8a 04 0d 02 94 11 |-------*........| 000008a0 2e 54 72 6b 5f 49 6e 69 74 5f 41 6c 6c 0d 02 9e |.Trk_Init_All...| 000008b0 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d |.STMFD R13!,{R0-| 000008c0 52 31 32 2c 52 31 34 7d 0d 02 a8 04 0d 02 b2 38 |R12,R14}.......8| 000008d0 42 4c 20 20 20 20 47 65 74 5f 45 6e 64 5f 41 64 |BL Get_End_Ad| 000008e0 64 72 20 20 20 20 20 20 20 20 3b 20 52 32 20 3d |dr ; R2 =| 000008f0 3e 20 4d 75 73 69 63 20 62 61 73 65 20 61 64 64 |> Music base add| 00000900 72 65 73 73 0d 02 bc 3d 53 54 52 20 20 20 52 32 |ress...=STR R2| 00000910 2c 54 72 6b 5f 42 61 73 65 20 20 20 20 20 20 20 |,Trk_Base | 00000920 20 20 3b 20 4d 75 73 74 20 62 65 20 73 61 76 65 | ; Must be save| 00000930 64 20 69 6e 20 54 72 6b 5f 42 61 73 65 20 28 21 |d in Trk_Base (!| 00000940 29 0d 02 c6 04 0d 02 d0 42 41 44 52 20 20 20 52 |).......BADR R| 00000950 31 32 2c 54 72 6b 5f 49 6e 66 6f 73 20 20 20 20 |12,Trk_Infos | 00000960 20 20 20 3b 20 52 31 32 20 3d 3e 20 54 72 61 63 | ; R12 => Trac| 00000970 6b 65 72 20 50 6f 69 6e 74 65 72 73 20 26 20 43 |ker Pointers & C| 00000980 6f 75 6e 74 65 72 73 0d 02 da 0f 4d 4f 56 20 20 |ounters....MOV | 00000990 20 52 31 2c 23 30 0d 02 e4 40 53 54 52 20 20 20 | R1,#0...@STR | 000009a0 52 31 2c 5b 52 31 32 5d 2c 23 34 20 20 20 20 20 |R1,[R12],#4 | 000009b0 20 20 20 20 3b 20 53 65 74 20 70 6f 73 69 74 69 | ; Set positi| 000009c0 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 65 20 74 |on in Sequence t| 000009d0 6f 20 7a 65 72 6f 0d 02 ee 38 4c 44 52 20 20 20 |o zero...8LDR | 000009e0 52 30 2c 54 72 6b 5f 42 61 73 65 20 20 20 20 20 |R0,Trk_Base | 000009f0 20 20 20 20 3b 20 52 30 20 3d 3e 20 4d 75 73 69 | ; R0 => Musi| 00000a00 63 20 42 61 73 65 20 41 64 64 72 65 73 73 0d 02 |c Base Address..| 00000a10 f8 35 4c 44 52 20 20 20 52 39 2c 5b 52 30 2c 23 |.5LDR R9,[R0,#| 00000a20 34 5d 20 20 20 20 20 20 20 20 20 20 3b 20 52 39 |4] ; R9| 00000a30 20 3d 20 46 69 6c 65 20 4c 65 6e 67 74 68 20 28 | = File Length (| 00000a40 2d 38 29 0d 03 02 39 41 44 44 20 20 20 52 30 2c |-8)...9ADD R0,| 00000a50 52 30 2c 23 38 20 20 20 20 20 20 20 20 20 20 20 |R0,#8 | 00000a60 20 3b 20 52 30 20 3d 3e 20 46 69 72 73 74 20 43 | ; R0 => First C| 00000a70 68 75 6e 6b 20 41 64 64 72 65 73 73 0d 03 0c 31 |hunk Address...1| 00000a80 41 44 44 20 20 20 52 39 2c 52 30 2c 52 39 20 20 |ADD R9,R0,R9 | 00000a90 20 20 20 20 20 20 20 20 20 20 3b 20 52 39 20 3d | ; R9 =| 00000aa0 3e 20 45 6e 64 20 6f 66 20 66 69 6c 65 0d 03 16 |> End of file...| 00000ab0 10 4d 4f 56 20 20 20 52 31 30 2c 52 30 0d 03 20 |.MOV R10,R0.. | 00000ac0 17 4c 44 52 20 20 20 52 34 2c 4d 4c 45 4e 5f 43 |.LDR R4,MLEN_C| 00000ad0 68 75 6e 6b 0d 03 2a 14 42 4c 20 20 20 20 53 65 |hunk..*.BL Se| 00000ae0 61 72 63 68 5f 54 46 46 0d 03 34 44 4c 44 52 20 |arch_TFF..4DLDR | 00000af0 20 20 52 31 2c 5b 52 30 5d 20 20 20 20 20 20 20 | R1,[R0] | 00000b00 20 20 20 20 20 20 3b 20 52 31 20 3d 20 4d 75 73 | ; R1 = Mus| 00000b10 69 63 20 4c 65 6e 67 74 68 20 28 3d 53 65 71 75 |ic Length (=Sequ| 00000b20 65 6e 63 65 20 6c 65 6e 67 74 68 29 0d 03 3e 15 |ence length)..>.| 00000b30 53 54 52 20 20 20 52 31 2c 5b 52 31 32 5d 2c 23 |STR R1,[R12],#| 00000b40 34 0d 03 48 0f 4d 4f 56 20 20 20 52 31 2c 23 30 |4..H.MOV R1,#0| 00000b50 0d 03 52 3c 53 54 52 20 20 20 52 31 2c 5b 52 31 |..R<STR R1,[R1| 00000b60 32 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |2],#4 ; | 00000b70 50 61 74 74 65 72 6e 20 6c 69 6e 65 20 63 6f 75 |Pattern line cou| 00000b80 6e 74 65 72 20 74 6f 20 7a 65 72 6f 0d 03 5c 10 |nter to zero..\.| 00000b90 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 03 66 17 |MOV R0,R10..f.| 00000ba0 4c 44 52 20 20 20 52 34 2c 50 4c 45 4e 5f 43 68 |LDR R4,PLEN_Ch| 00000bb0 75 6e 6b 0d 03 70 14 42 4c 20 20 20 20 53 65 61 |unk..p.BL Sea| 00000bc0 72 63 68 5f 54 46 46 0d 03 7a 3f 53 54 52 20 20 |rch_TFF..z?STR | 00000bd0 20 52 30 2c 5b 52 31 32 5d 2c 23 34 20 20 20 20 | R0,[R12],#4 | 00000be0 20 20 20 20 20 3b 20 53 61 76 65 20 50 61 74 74 | ; Save Patt| 00000bf0 65 72 6e 20 54 61 62 6c 65 20 42 61 73 65 20 41 |ern Table Base A| 00000c00 64 64 72 65 73 73 0d 03 84 10 4d 4f 56 20 20 20 |ddress....MOV | 00000c10 52 30 2c 52 31 30 0d 03 8e 17 4c 44 52 20 20 20 |R0,R10....LDR | 00000c20 52 34 2c 53 45 51 55 5f 43 68 75 6e 6b 0d 03 98 |R4,SEQU_Chunk...| 00000c30 14 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 46 |.BL Search_TF| 00000c40 46 0d 03 a2 3a 53 54 52 20 20 20 52 30 2c 5b 52 |F...:STR R0,[R| 00000c50 31 32 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b |12],#4 ;| 00000c60 20 53 61 76 65 20 53 65 71 75 65 6e 63 65 20 42 | Save Sequence B| 00000c70 61 73 65 20 41 64 64 72 65 73 73 0d 03 ac 10 4d |ase Address....M| 00000c80 4f 56 20 20 20 52 30 2c 52 31 30 0d 03 b6 17 4c |OV R0,R10....L| 00000c90 44 52 20 20 20 52 34 2c 50 4e 55 4d 5f 43 68 75 |DR R4,PNUM_Chu| 00000ca0 6e 6b 0d 03 c0 14 42 4c 20 20 20 20 53 65 61 72 |nk....BL Sear| 00000cb0 63 68 5f 54 46 46 0d 03 ca 3d 4c 44 52 20 20 20 |ch_TFF...=LDR | 00000cc0 52 36 2c 5b 52 30 5d 20 20 20 20 20 20 20 20 20 |R6,[R0] | 00000cd0 20 20 20 20 3b 20 52 36 20 3d 20 50 61 74 74 65 | ; R6 = Patte| 00000ce0 72 6e 73 20 6e 75 6d 62 65 72 20 69 6e 20 6d 75 |rns number in mu| 00000cf0 73 69 63 0d 03 d4 38 42 4c 20 20 20 20 47 65 74 |sic...8BL Get| 00000d00 5f 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 20 |_Patterns_Table | 00000d10 20 3b 20 52 31 31 20 3d 3e 20 6f 6e 20 50 61 74 | ; R11 => on Pat| 00000d20 74 65 72 6e 73 20 54 61 62 6c 65 0d 03 de 16 53 |terns Table....S| 00000d30 54 52 20 20 20 52 31 31 2c 5b 52 31 32 5d 2c 23 |TR R11,[R12],#| 00000d40 34 0d 03 e8 17 4c 44 52 20 20 20 52 34 2c 50 41 |4....LDR R4,PA| 00000d50 54 54 5f 43 68 75 6e 6b 0d 03 f2 10 4d 4f 56 20 |TT_Chunk....MOV | 00000d60 20 20 52 30 2c 52 31 30 0d 03 fc 14 2e 53 65 61 | R0,R10.....Sea| 00000d70 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 04 06 14 |rch_Patterns....| 00000d80 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 46 46 |BL Search_TFF| 00000d90 0d 04 10 46 53 54 52 20 20 20 52 30 2c 5b 52 31 |...FSTR R0,[R1| 00000da0 31 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |1],#4 ; | 00000db0 53 61 76 65 20 50 61 74 74 65 72 6e 20 41 64 64 |Save Pattern Add| 00000dc0 72 65 73 73 20 69 6e 20 50 61 74 74 65 72 6e 73 |ress in Patterns| 00000dd0 20 54 61 62 6c 65 0d 04 1a 4b 41 44 44 20 20 20 | Table...KADD | 00000de0 52 30 2c 52 30 2c 52 33 20 20 20 20 20 20 20 20 |R0,R0,R3 | 00000df0 20 20 20 20 3b 20 41 64 64 20 70 61 74 74 65 72 | ; Add patter| 00000e00 6e 20 6c 65 6e 67 74 68 20 74 6f 20 63 68 75 6e |n length to chun| 00000e10 6b 20 28 3d 6e 65 78 74 20 70 61 74 74 65 72 6e |k (=next pattern| 00000e20 29 0d 04 24 12 53 55 42 53 20 20 52 36 2c 52 36 |)..$.SUBS R6,R6| 00000e30 2c 23 31 0d 04 2e 19 42 47 54 20 20 20 53 65 61 |,#1....BGT Sea| 00000e40 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 04 38 18 |rch_Patterns..8.| 00000e50 41 44 52 20 20 20 52 31 2c 54 72 6b 5f 53 61 6d |ADR R1,Trk_Sam| 00000e60 70 6c 65 73 0d 04 42 17 4c 44 52 20 20 20 52 34 |ples..B.LDR R4| 00000e70 2c 53 41 4d 50 5f 43 68 75 6e 6b 0d 04 4c 44 4d |,SAMP_Chunk..LDM| 00000e80 4f 56 20 20 20 52 37 2c 23 33 36 20 20 20 20 20 |OV R7,#36 | 00000e90 20 20 20 20 20 20 20 20 20 3b 20 33 36 20 53 61 | ; 36 Sa| 00000ea0 6d 70 6c 65 73 20 43 68 75 6e 6b 73 20 69 6e 20 |mples Chunks in | 00000eb0 6f 6e 65 20 6d 75 73 69 63 20 70 69 65 63 65 0d |one music piece.| 00000ec0 04 56 15 2e 49 6e 69 74 5f 54 72 6b 5f 53 61 6d |.V..Init_Trk_Sam| 00000ed0 70 6c 65 73 0d 04 60 14 42 4c 20 20 20 20 53 65 |ples..`.BL Se| 00000ee0 61 72 63 68 5f 54 46 46 0d 04 6a 12 53 55 42 20 |arch_TFF..j.SUB | 00000ef0 20 20 52 35 2c 52 30 2c 23 38 0d 04 74 14 53 54 | R5,R0,#8..t.ST| 00000f00 52 20 20 20 52 35 2c 5b 52 31 5d 2c 23 34 0d 04 |R R5,[R1],#4..| 00000f10 7e 12 41 44 44 20 20 20 52 30 2c 52 30 2c 52 33 |~.ADD R0,R0,R3| 00000f20 0d 04 88 12 53 55 42 53 20 20 52 37 2c 52 37 2c |....SUBS R7,R7,| 00000f30 23 31 0d 04 92 1a 42 47 54 20 20 20 49 6e 69 74 |#1....BGT Init| 00000f40 5f 54 72 6b 5f 53 61 6d 70 6c 65 73 0d 04 9c 10 |_Trk_Samples....| 00000f50 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 04 a6 17 |MOV R0,R10....| 00000f60 4c 44 52 20 20 20 52 34 2c 4d 56 4f 58 5f 43 68 |LDR R4,MVOX_Ch| 00000f70 75 6e 6b 0d 04 b0 14 42 4c 20 20 20 20 53 65 61 |unk....BL Sea| 00000f80 72 63 68 5f 54 46 46 0d 04 ba 33 4c 44 52 20 20 |rch_TFF...3LDR | 00000f90 20 52 31 32 2c 5b 52 30 5d 20 20 20 20 20 20 20 | R12,[R0] | 00000fa0 20 20 20 20 20 3b 20 52 31 32 20 3d 20 56 6f 69 | ; R12 = Voi| 00000fb0 63 65 73 20 4e 75 6d 62 65 72 0d 04 c4 18 53 54 |ces Number....ST| 00000fc0 52 20 20 20 52 31 32 2c 54 72 6b 5f 56 6f 69 63 |R R12,Trk_Voic| 00000fd0 65 73 0d 04 ce 10 4d 4f 56 20 20 20 52 30 2c 52 |es....MOV R0,R| 00000fe0 31 30 0d 04 d8 17 4c 44 52 20 20 20 52 34 2c 53 |10....LDR R4,S| 00000ff0 54 45 52 5f 43 68 75 6e 6b 0d 04 e2 14 42 4c 20 |TER_Chunk....BL | 00001000 20 20 20 53 65 61 72 63 68 5f 54 46 46 0d 04 ec | Search_TFF...| 00001010 3c 4d 4f 56 20 20 20 52 31 31 2c 52 30 20 20 20 |<MOV R11,R0 | 00001020 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 31 | ; R11| 00001030 20 3d 3e 20 53 74 65 72 65 6f 20 50 6f 73 69 74 | => Stereo Posit| 00001040 69 6f 6e 73 20 4c 69 73 74 0d 04 f6 43 42 4c 20 |ions List...CBL | 00001050 20 20 20 49 6e 69 74 5f 53 6f 75 6e 64 5f 53 79 | Init_Sound_Sy| 00001060 73 74 65 6d 20 20 20 3b 20 4a 75 6d 70 20 54 6f |stem ; Jump To| 00001070 20 53 6f 75 6e 64 20 53 79 73 74 65 6d 20 49 6e | Sound System In| 00001080 69 74 69 61 6c 69 73 61 74 69 6f 6e 0d 05 00 1a |itialisation....| 00001090 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |LDMFD R13!,{R0-R| 000010a0 31 32 2c 50 43 7d 0d 05 0a 04 0d 05 14 1b 2e 54 |12,PC}.........T| 000010b0 49 4e 46 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 |INF_Chunk:EQUS "| 000010c0 54 49 4e 46 22 0d 05 1e 1b 2e 4d 56 4f 58 5f 43 |TINF".....MVOX_C| 000010d0 68 75 6e 6b 3a 45 51 55 53 20 22 4d 56 4f 58 22 |hunk:EQUS "MVOX"| 000010e0 0d 05 28 1b 2e 53 54 45 52 5f 43 68 75 6e 6b 3a |..(..STER_Chunk:| 000010f0 45 51 55 53 20 22 53 54 45 52 22 0d 05 32 1b 2e |EQUS "STER"..2..| 00001100 4d 4c 45 4e 5f 43 68 75 6e 6b 3a 45 51 55 53 20 |MLEN_Chunk:EQUS | 00001110 22 4d 4c 45 4e 22 0d 05 3c 1b 2e 50 4c 45 4e 5f |"MLEN"..<..PLEN_| 00001120 43 68 75 6e 6b 3a 45 51 55 53 20 22 50 4c 45 4e |Chunk:EQUS "PLEN| 00001130 22 0d 05 46 1b 2e 53 45 51 55 5f 43 68 75 6e 6b |"..F..SEQU_Chunk| 00001140 3a 45 51 55 53 20 22 53 45 51 55 22 0d 05 50 1b |:EQUS "SEQU"..P.| 00001150 2e 50 4e 55 4d 5f 43 68 75 6e 6b 3a 45 51 55 53 |.PNUM_Chunk:EQUS| 00001160 20 22 50 4e 55 4d 22 0d 05 5a 1b 2e 50 41 54 54 | "PNUM"..Z..PATT| 00001170 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 50 41 54 |_Chunk:EQUS "PAT| 00001180 54 22 0d 05 64 1b 2e 53 41 4d 50 5f 43 68 75 6e |T"..d..SAMP_Chun| 00001190 6b 3a 45 51 55 53 20 22 53 41 4d 50 22 0d 05 6e |k:EQUS "SAMP"..n| 000011a0 04 0d 05 78 3d 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d |...x=; *--------| 000011b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000011d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 05 |-------------*..| 000011e0 82 37 3b 20 2a 20 20 20 20 20 20 20 20 20 20 20 |.7; * | 000011f0 20 20 d4 20 42 55 46 46 45 52 20 c8 90 20 52 4f | . BUFFER .. RO| 00001200 55 54 49 4e 45 53 20 20 20 20 20 20 20 20 20 20 |UTINES | 00001210 20 20 20 20 2a 0d 05 8c 3d 3b 20 2a 2d 2d 2d 2d | *...=; *----| 00001220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001250 2d 2a 0d 05 96 3d 3b 20 2a 20 20 20 20 52 39 20 |-*...=; * R9 | 00001260 3d 3e 20 54 72 61 63 6b 65 72 20 49 6e 66 6f 73 |=> Tracker Infos| 00001270 20 42 6c 6f 63 6b 20 28 33 32 20 42 79 74 65 20 | Block (32 Byte | 00001280 70 65 72 20 63 68 61 6e 6e 65 6c 29 20 20 2a 0d |per channel) *.| 00001290 05 a0 3d 3b 20 2a 20 20 20 20 20 5b 30 30 2d 30 |..=; * [00-0| 000012a0 33 5d 20 28 20 52 30 20 29 20 50 68 61 73 65 20 |3] ( R0 ) Phase | 000012b0 41 63 63 75 6d 75 6c 61 74 6f 72 20 20 20 20 20 |Accumulator | 000012c0 20 20 20 20 20 20 20 20 20 20 20 2a 0d 05 aa 3d | *...=| 000012d0 3b 20 2a 20 20 20 20 20 5b 30 34 2d 30 37 5d 20 |; * [04-07] | 000012e0 28 20 52 31 20 29 20 50 68 61 73 65 20 49 6e 63 |( R1 ) Phase Inc| 000012f0 72 65 6d 65 6e 74 20 28 43 66 2e 20 46 72 65 71 |rement (Cf. Freq| 00001300 75 65 6e 63 79 29 20 20 2a 0d 05 b4 3d 3b 20 2a |uency) *...=; *| 00001310 20 20 20 20 20 5b 30 38 2d 31 31 5d 20 28 20 52 | [08-11] ( R| 00001320 32 20 29 20 52 65 70 65 61 74 20 4f 66 66 73 65 |2 ) Repeat Offse| 00001330 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |t | 00001340 20 20 20 20 20 2a 0d 05 be 3d 3b 20 2a 20 20 20 | *...=; * | 00001350 20 20 5b 31 32 2d 31 35 5d 20 28 20 52 33 20 29 | [12-15] ( R3 )| 00001360 20 53 61 6d 70 6c 65 20 4c 65 6e 67 74 68 20 28 | Sample Length (| 00001370 6f 72 20 52 65 70 65 61 74 20 4c 65 6e 67 74 68 |or Repeat Length| 00001380 29 20 2a 0d 05 c8 3d 3b 20 2a 20 20 20 20 20 5b |) *...=; * [| 00001390 31 36 2d 31 39 5d 20 28 20 52 34 20 29 20 53 61 |16-19] ( R4 ) Sa| 000013a0 6d 70 6c 65 20 41 64 64 72 65 73 73 20 20 20 20 |mple Address | 000013b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a | *| 000013c0 0d 05 d2 3d 3b 20 2a 20 20 20 20 20 5b 32 30 2d |...=; * [20-| 000013d0 32 33 5d 20 28 20 52 35 20 29 20 53 61 6d 70 6c |23] ( R5 ) Sampl| 000013e0 65 20 56 6f 6c 75 6d 65 20 28 32 35 35 2d 56 6f |e Volume (255-Vo| 000013f0 6c 75 6d 65 29 20 20 20 20 20 20 20 2a 0d 05 dc |lume) *...| 00001400 3d 3b 20 2a 20 20 20 20 20 5b 32 34 2d 32 37 5d |=; * [24-27]| 00001410 20 28 20 52 36 20 29 20 46 69 6c 6c 20 53 74 61 | ( R6 ) Fill Sta| 00001420 74 75 73 20 28 30 3d 5a 65 72 6f 73 20 31 3d 53 |tus (0=Zeros 1=S| 00001430 61 6d 70 6c 65 73 29 20 20 2a 0d 05 e6 3d 3b 20 |amples) *...=; | 00001440 2a 20 20 20 20 20 5b 2e 2e 2e 2e 2e 5d 20 28 2e |* [.....] (.| 00001450 2e 2e 2e 29 20 4f 74 68 65 72 73 20 69 6e 66 6f |...) Others info| 00001460 73 20 66 6f 72 20 65 66 66 65 63 74 73 20 20 20 |s for effects | 00001470 20 20 20 20 20 20 2a 0d 05 f0 3d 3b 20 2a 2d 2d | *...=; *--| 00001480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000014b0 2d 2d 2d 2a 0d 05 fa 3d 3b 20 2a 20 20 52 31 30 |---*...=; * R10| 000014c0 20 3d 20 44 4d 41 20 42 75 66 66 65 72 20 6c 69 | = DMA Buffer li| 000014d0 6d 69 74 73 20 28 2b 31 29 20 20 20 20 20 20 20 |mits (+1) | 000014e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000014f0 2a 0d 06 04 3d 3b 20 2a 20 20 52 31 31 20 3d 20 |*...=; * R11 = | 00001500 44 4d 41 20 42 75 66 66 65 72 20 49 6e 74 65 72 |DMA Buffer Inter| 00001510 6c 65 61 76 65 20 49 6e 63 72 65 6d 65 6e 74 20 |leave Increment | 00001520 28 31 2d 38 29 20 20 20 20 20 20 20 20 2a 0d 06 |(1-8) *..| 00001530 0e 3d 3b 20 2a 20 20 52 31 32 20 3d 20 44 4d 41 |.=; * R12 = DMA| 00001540 20 42 75 66 66 65 72 20 62 61 73 65 20 70 6f 69 | Buffer base poi| 00001550 6e 74 65 72 20 28 2b 52 31 31 29 20 20 20 20 20 |nter (+R11) | 00001560 20 20 20 20 20 20 20 20 20 20 2a 0d 06 18 3d 3b | *...=;| 00001570 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00001580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000015a0 2d 2d 2d 2d 2d 2d 2d 2a 0d 06 22 04 0d 06 2c 16 |-------*.."...,.| 000015b0 2e 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 75 66 66 |.Fill_Sound_Buff| 000015c0 65 72 0d 06 36 1f 41 44 52 20 20 20 52 39 2c 56 |er..6.ADR R9,V| 000015d0 6f 69 63 65 73 5f 49 6e 66 6f 73 5f 42 6c 6f 63 |oices_Infos_Bloc| 000015e0 6b 0d 06 40 18 41 44 44 20 20 20 52 39 2c 52 39 |k..@.ADD R9,R9| 000015f0 2c 52 37 2c 4c 53 4c 23 35 0d 06 4a 14 4c 44 4d |,R7,LSL#5..J.LDM| 00001600 49 41 20 52 39 2c 7b 52 30 2d 52 36 7d 0d 06 54 |IA R9,{R0-R6}..T| 00001610 04 0d 06 5e 0f 43 4d 50 20 20 20 52 36 2c 23 30 |...^.CMP R6,#0| 00001620 0d 06 68 14 42 45 51 20 20 20 43 6c 65 61 72 5f |..h.BEQ Clear_| 00001630 46 69 6c 6c 0d 06 72 04 0d 06 7c 19 53 55 42 20 |Fill..r...|.SUB | 00001640 20 20 52 38 2c 52 33 2c 52 30 2c 4c 53 52 23 31 | R8,R3,R0,LSR#1| 00001650 36 0d 06 86 18 53 55 42 20 20 20 52 38 2c 52 38 |6....SUB R8,R8| 00001660 2c 52 31 2c 4c 53 52 23 38 0d 06 90 11 43 4d 50 |,R1,LSR#8....CMP| 00001670 20 20 20 52 38 2c 23 32 30 38 0d 06 9a 13 42 47 | R8,#208....BG| 00001680 54 20 20 20 46 75 6c 6c 5f 46 69 6c 6c 0d 06 a4 |T Full_Fill...| 00001690 04 0d 06 ae 0e 2e 46 69 6c 6c 5f 4c 6f 6f 70 0d |......Fill_Loop.| 000016a0 06 b8 05 5d 0d 06 c2 12 e3 20 50 6c 6f 70 25 3d |...]..... Plop%=| 000016b0 31 20 b8 20 31 36 0d 06 cc 0e 5b 4f 50 54 20 50 |1 . 16....[OPT P| 000016c0 61 73 73 25 0d 06 d6 1b 4c 44 52 42 20 20 52 38 |ass%....LDRB R8| 000016d0 2c 5b 52 34 2c 52 30 2c 4c 53 52 23 31 36 5d 0d |,[R4,R0,LSR#16].| 000016e0 06 e0 12 53 55 42 53 20 20 52 38 2c 52 38 2c 52 |...SUBS R8,R8,R| 000016f0 35 0d 06 ea 0f 4d 4f 56 4d 49 20 52 38 2c 23 30 |5....MOVMI R8,#0| 00001700 0d 06 f4 16 53 54 52 42 20 20 52 38 2c 5b 52 31 |....STRB R8,[R1| 00001710 32 5d 2c 52 31 31 0d 06 fe 12 41 44 44 20 20 20 |2],R11....ADD | 00001720 52 30 2c 52 30 2c 52 31 0d 07 08 05 5d 0d 07 12 |R0,R0,R1....]...| 00001730 05 ed 0d 07 1c 0e 5b 4f 50 54 20 50 61 73 73 25 |......[OPT Pass%| 00001740 0d 07 26 31 43 4d 50 20 20 20 52 33 2c 52 30 2c |..&1CMP R3,R0,| 00001750 4c 53 52 23 31 36 20 20 20 20 20 20 20 20 20 20 |LSR#16 | 00001760 3b 20 45 6e 64 20 6f 66 20 73 61 6d 70 6c 65 20 |; End of sample | 00001770 3f 0d 07 30 1a 42 47 45 20 20 20 43 68 65 63 6b |?..0.BGE Check| 00001780 5f 42 75 66 66 65 72 5f 45 6e 64 0d 07 3a 39 4d |_Buffer_End..:9M| 00001790 4f 56 53 20 20 52 30 2c 52 32 2c 4c 53 4c 23 31 |OVS R0,R2,LSL#1| 000017a0 36 20 20 20 20 20 20 20 20 20 20 3b 20 59 65 73 |6 ; Yes| 000017b0 20 3d 3e 20 52 30 3d 52 65 70 65 61 74 20 4f 66 | => R0=Repeat Of| 000017c0 66 73 65 74 0d 07 44 4a 42 45 51 20 20 20 43 6c |fset..DJBEQ Cl| 000017d0 65 61 72 5f 46 69 6c 6c 20 20 20 20 20 20 20 20 |ear_Fill | 000017e0 20 20 20 20 3b 20 49 66 20 6e 6f 20 72 65 70 65 | ; If no repe| 000017f0 61 74 20 74 68 65 6e 20 66 69 6c 6c 20 62 75 66 |at then fill buf| 00001800 66 65 72 20 77 69 74 68 20 7a 65 72 6f 73 0d 07 |fer with zeros..| 00001810 4e 15 2e 43 68 65 63 6b 5f 42 75 66 66 65 72 5f |N..Check_Buffer_| 00001820 45 6e 64 0d 07 58 11 43 4d 50 20 20 20 52 31 32 |End..X.CMP R12| 00001830 2c 52 31 30 0d 07 62 13 42 4c 54 20 20 20 46 69 |,R10..b.BLT Fi| 00001840 6c 6c 5f 4c 6f 6f 70 0d 07 6c 11 53 54 52 20 20 |ll_Loop..l.STR | 00001850 20 52 30 2c 5b 52 39 5d 0d 07 76 17 4d 4f 56 20 | R0,[R9]..v.MOV | 00001860 20 20 52 30 2c 23 25 30 30 30 30 31 30 30 30 0d | R0,#%00001000.| 00001870 07 80 13 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 |...LDMFD R13!,{P| 00001880 43 7d 0d 07 8a 04 0d 07 94 0f 2e 43 6c 65 61 72 |C}.........Clear| 00001890 5f 46 69 6c 6c 0d 07 9e 0f 4d 4f 56 20 20 20 52 |_Fill....MOV R| 000018a0 35 2c 23 30 0d 07 a8 15 53 54 52 20 20 20 52 35 |5,#0....STR R5| 000018b0 2c 5b 52 39 2c 23 32 34 5d 0d 07 b2 14 2e 43 6c |,[R9,#24].....Cl| 000018c0 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f 70 0d 07 bc |ear_Fill_Loop...| 000018d0 16 53 54 52 42 20 20 52 35 2c 5b 52 31 32 5d 2c |.STRB R5,[R12],| 000018e0 52 31 31 0d 07 c6 11 43 4d 50 20 20 20 52 31 32 |R11....CMP R12| 000018f0 2c 52 31 30 0d 07 d0 19 42 4c 54 20 20 20 43 6c |,R10....BLT Cl| 00001900 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f 70 0d 07 da |ear_Fill_Loop...| 00001910 17 4d 4f 56 20 20 20 52 30 2c 23 25 30 30 30 30 |.MOV R0,#%0000| 00001920 31 30 30 30 0d 07 e4 13 4c 44 4d 46 44 20 52 31 |1000....LDMFD R1| 00001930 33 21 2c 7b 50 43 7d 0d 07 ee 04 0d 07 f8 17 2e |3!,{PC}.........| 00001940 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f 42 6c 6f |Voices_Infos_Blo| 00001950 63 6b 0d 08 02 05 5d 0d 08 0c 14 e3 20 42 75 66 |ck....]..... Buf| 00001960 42 6c 6b 25 3d 31 20 b8 20 36 34 0d 08 16 0e 5b |Blk%=1 . 64....[| 00001970 4f 50 54 20 50 61 73 73 25 0d 08 20 0a 45 51 55 |OPT Pass%.. .EQU| 00001980 44 20 30 0d 08 2a 05 5d 0d 08 34 05 ed 0d 08 3e |D 0..*.]..4....>| 00001990 0e 5b 4f 50 54 20 50 61 73 73 25 0d 08 48 04 0d |.[OPT Pass%..H..| 000019a0 08 52 0d 2e 54 72 6b 5f 42 61 73 65 0d 08 5c 31 |.R..Trk_Base..\1| 000019b0 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 |EQUD 0 | 000019c0 20 20 20 20 20 20 20 20 20 3b 20 4d 75 73 69 63 | ; Music| 000019d0 20 42 61 73 65 20 41 64 64 72 65 73 73 0d 08 66 | Base Address..f| 000019e0 0e 2e 54 72 6b 5f 49 6e 66 6f 73 0d 08 70 3d 45 |..Trk_Infos..p=E| 000019f0 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 20 |QUD 0 | 00001a00 20 20 20 20 20 20 20 20 3b 20 50 6f 73 69 74 69 | ; Positi| 00001a10 6f 6e 20 43 6f 75 6e 74 65 72 20 28 49 6e 20 53 |on Counter (In S| 00001a20 65 71 75 65 6e 63 65 29 0d 08 7a 2b 45 51 55 44 |equence)..z+EQUD| 00001a30 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00001a40 20 20 20 20 20 3b 20 4d 75 73 69 63 20 4c 65 6e | ; Music Len| 00001a50 67 74 68 0d 08 84 3c 45 51 55 44 20 20 30 20 20 |gth...<EQUD 0 | 00001a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001a70 3b 20 50 6f 73 69 74 69 6f 6e 20 43 6f 75 6e 74 |; Position Count| 00001a80 65 72 20 28 49 6e 20 50 61 74 74 65 72 6e 29 0d |er (In Pattern).| 00001a90 08 8e 3a 45 51 55 44 20 20 30 20 20 20 20 20 20 |..:EQUD 0 | 00001aa0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 3d 3e | ; =>| 00001ab0 20 6f 6e 20 50 61 74 74 65 72 6e 73 20 4c 65 6e | on Patterns Len| 00001ac0 67 74 68 20 54 61 62 6c 65 0d 08 98 3a 45 51 55 |gth Table...:EQU| 00001ad0 44 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 |D 0 | 00001ae0 20 20 20 20 20 20 3b 20 3d 3e 20 6f 6e 20 53 65 | ; => on Se| 00001af0 71 75 65 6e 63 65 20 42 61 73 65 20 41 64 64 72 |quence Base Addr| 00001b00 65 73 73 0d 08 a2 47 45 51 55 44 20 20 30 20 20 |ess...GEQUD 0 | 00001b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001b20 3b 20 3d 3e 20 6f 6e 20 50 61 74 74 65 72 6e 73 |; => on Patterns| 00001b30 20 54 61 62 6c 65 20 28 75 70 20 74 6f 20 36 34 | Table (up to 64| 00001b40 20 70 61 74 74 65 72 6e 73 29 0d 08 ac 0f 2e 54 | patterns).....T| 00001b50 72 6b 5f 56 6f 69 63 65 73 0d 08 b6 2c 45 51 55 |rk_Voices...,EQU| 00001b60 44 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 |D 0 | 00001b70 20 20 20 20 20 20 3b 20 56 6f 69 63 65 73 20 4e | ; Voices N| 00001b80 75 6d 62 65 72 0d 08 c0 10 2e 54 72 6b 5f 43 6f |umber.....Trk_Co| 00001b90 75 6e 74 65 72 0d 08 ca 0a 45 51 55 44 20 35 0d |unter....EQUD 5.| 00001ba0 08 d4 0e 2e 54 72 6b 5f 53 70 65 65 64 0d 08 de |....Trk_Speed...| 00001bb0 0a 45 51 55 44 20 36 0d 08 e8 10 2e 54 72 6b 5f |.EQUD 6.....Trk_| 00001bc0 53 61 6d 70 6c 65 73 0d 08 f2 05 5d 0d 08 fc 0c |Samples....]....| 00001bd0 50 25 2b 3d 33 36 2a 34 0d 09 06 0e 5b 4f 50 54 |P%+=36*4....[OPT| 00001be0 20 50 61 73 73 25 0d 09 10 10 2e 54 72 6b 5f 50 | Pass%.....Trk_P| 00001bf0 65 72 69 6f 64 73 0d 09 1a 1b 45 51 55 44 30 3a |eriods....EQUD0:| 00001c00 45 51 55 44 30 3a 45 51 55 44 30 3a 45 51 55 44 |EQUD0:EQUD0:EQUD| 00001c10 30 0d 09 24 1b 45 51 55 44 30 3a 45 51 55 44 30 |0..$.EQUD0:EQUD0| 00001c20 3a 45 51 55 44 30 3a 45 51 55 44 30 0d 09 2e 15 |:EQUD0:EQUD0....| 00001c30 2e 54 72 6b 5f 50 61 74 74 65 72 6e 5f 4c 69 6e |.Trk_Pattern_Lin| 00001c40 65 0d 09 38 1b 45 51 55 44 30 3a 45 51 55 44 30 |e..8.EQUD0:EQUD0| 00001c50 3a 45 51 55 44 30 3a 45 51 55 44 30 0d 09 42 1b |:EQUD0:EQUD0..B.| 00001c60 45 51 55 44 30 3a 45 51 55 44 30 3a 45 51 55 44 |EQUD0:EQUD0:EQUD| 00001c70 30 3a 45 51 55 44 30 0d 09 4c 14 2e 47 65 74 5f |0:EQUD0..L..Get_| 00001c80 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 09 56 1e 41 |Infos_Block..V.A| 00001c90 44 52 20 20 52 37 2c 56 6f 69 63 65 73 5f 49 6e |DR R7,Voices_In| 00001ca0 66 6f 73 5f 42 6c 6f 63 6b 0d 09 60 0f 4d 4f 56 |fos_Block..`.MOV| 00001cb0 20 20 50 43 2c 52 31 34 0d 09 6a 04 0d 09 74 35 | PC,R14..j...t5| 00001cc0 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 00001cd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001cf0 2a 0d 09 7e 35 3b 20 2a 20 20 20 20 49 6e 63 72 |*..~5; * Incr| 00001d00 65 6d 65 6e 74 2f 43 68 65 63 6b 20 43 6f 75 6e |ement/Check Coun| 00001d10 74 65 72 20 28 54 65 6d 70 6f 29 20 56 61 6c 75 |ter (Tempo) Valu| 00001d20 65 20 20 20 20 2a 0d 09 88 35 3b 20 2a 2d 2d 2d |e *...5; *---| 00001d30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001d50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 09 92 04 0d |----------*.....| 00001d60 09 9c 13 2e 54 72 6b 5f 50 6c 61 79 5f 4d 75 73 |....Trk_Play_Mus| 00001d70 69 63 0d 09 a6 1b 53 54 4d 46 44 20 52 31 33 21 |ic....STMFD R13!| 00001d80 2c 7b 52 30 2d 52 31 32 2c 52 31 34 7d 0d 09 b0 |,{R0-R12,R14}...| 00001d90 05 5d 0d 09 ba 10 e7 20 74 72 69 67 67 65 72 25 |.]..... trigger%| 00001da0 20 8c 0d 09 c4 10 20 20 5b 4f 50 54 20 50 61 73 | ..... [OPT Pas| 00001db0 73 25 0d 09 ce 2a 20 20 54 53 54 20 20 20 52 31 |s%...* TST R1| 00001dc0 31 2c 23 28 31 3c 3c 28 97 28 22 7a 22 29 2d 97 |1,#(1<<(.("z")-.| 00001dd0 28 74 72 69 67 67 65 72 24 29 29 29 0d 09 d8 12 |(trigger$)))....| 00001de0 20 20 42 4e 45 20 20 20 54 72 6b 5f 4f 6b 0d 09 | BNE Trk_Ok..| 00001df0 e2 1c 20 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b |.. LDMFD R13!,{| 00001e00 52 30 2d 52 31 32 2c 50 43 7d 0d 09 ec 07 20 20 |R0-R12,PC}.... | 00001e10 5d 0d 09 f6 05 cd 0d 0a 00 0e 5b 4f 50 54 20 50 |].........[OPT P| 00001e20 61 73 73 25 0d 0a 0a 0b 2e 54 72 6b 5f 4f 6b 0d |ass%.....Trk_Ok.| 00001e30 0a 14 18 4c 44 52 20 20 20 52 30 2c 54 72 6b 5f |...LDR R0,Trk_| 00001e40 43 6f 75 6e 74 65 72 0d 0a 1e 16 4c 44 52 20 20 |Counter....LDR | 00001e50 20 52 31 2c 54 72 6b 5f 53 70 65 65 64 0d 0a 28 | R1,Trk_Speed..(| 00001e60 12 41 44 44 20 20 20 52 30 2c 52 30 2c 23 31 0d |.ADD R0,R0,#1.| 00001e70 0a 32 0f 43 4d 50 20 20 20 52 30 2c 52 31 0d 0a |.2.CMP R0,R1..| 00001e80 3c 0f 4d 4f 56 47 45 20 52 30 2c 23 30 0d 0a 46 |<.MOVGE R0,#0..F| 00001e90 18 53 54 52 20 20 20 52 30 2c 54 72 6b 5f 43 6f |.STR R0,Trk_Co| 00001ea0 75 6e 74 65 72 0d 0a 50 14 42 45 51 20 20 20 54 |unter..P.BEQ T| 00001eb0 72 6b 5f 50 6c 61 79 65 72 0d 0a 5a 15 42 4e 45 |rk_Player..Z.BNE| 00001ec0 20 20 20 54 72 6b 5f 45 66 66 65 63 74 73 0d 0a | Trk_Effects..| 00001ed0 64 04 0d 0a 6e 32 3b 20 2a 2d 2d 2d 2d 2d 2d 2d |d...n2; *-------| 00001ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001f00 2d 2d 2d 2a 0d 0a 78 32 3b 20 2a 20 20 20 20 50 |---*..x2; * P| 00001f10 6c 61 79 20 61 20 6e 65 77 20 6c 69 6e 65 20 6f |lay a new line o| 00001f20 66 20 63 75 72 72 65 6e 74 20 70 61 74 74 65 72 |f current patter| 00001f30 6e 20 20 20 20 2a 0d 0a 82 32 3b 20 2a 2d 2d 2d |n *...2; *---| 00001f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001f60 2d 2d 2d 2d 2d 2d 2d 2a 0d 0a 8c 04 0d 0a 96 0f |-------*........| 00001f70 2e 54 72 6b 5f 50 6c 61 79 65 72 0d 0a a0 16 41 |.Trk_Player....A| 00001f80 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 6f |DR R0,Trk_Info| 00001f90 73 0d 0a aa 18 4c 44 4d 49 41 20 52 30 2c 7b 52 |s....LDMIA R0,{R| 00001fa0 31 2d 52 36 2c 52 31 31 7d 0d 0a b4 36 4c 44 52 |1-R6,R11}...6LDR| 00001fb0 42 20 20 52 37 2c 5b 52 35 2c 52 31 5d 20 20 20 |B R7,[R5,R1] | 00001fc0 20 20 20 20 20 20 20 20 20 20 3b 20 52 37 20 3d | ; R7 =| 00001fd0 20 50 61 74 74 65 72 6e 20 6e 75 6d 62 65 72 0d | Pattern number.| 00001fe0 0a be 39 4c 44 52 20 20 20 52 31 32 2c 5b 52 36 |..9LDR R12,[R6| 00001ff0 2c 52 37 2c 4c 53 4c 23 32 5d 20 20 20 20 20 20 |,R7,LSL#2] | 00002000 3b 20 52 31 32 20 3d 3e 20 43 75 72 72 65 6e 74 |; R12 => Current| 00002010 20 70 61 74 74 65 72 6e 0d 0a c8 42 4d 4f 56 20 | pattern...BMOV | 00002020 20 20 52 31 30 2c 52 31 31 2c 4c 53 4c 23 32 20 | R10,R11,LSL#2 | 00002030 20 20 20 20 20 20 20 20 20 3b 20 52 31 30 3d 52 | ; R10=R| 00002040 31 31 2a 34 20 3d 20 50 61 74 74 65 72 6e 20 4c |11*4 = Pattern L| 00002050 69 6e 65 20 4c 65 6e 67 74 68 0d 0a d2 3e 4d 4c |ine Length...>ML| 00002060 41 20 20 20 52 31 32 2c 52 33 2c 52 31 30 2c 52 |A R12,R3,R10,R| 00002070 31 32 20 20 20 20 20 20 20 20 20 3b 20 52 31 32 |12 ; R12| 00002080 20 3d 3e 20 43 75 72 72 65 6e 74 20 70 61 74 74 | => Current patt| 00002090 65 72 6e 20 6c 69 6e 65 0d 0a dc 3e 4c 44 52 42 |ern line...>LDRB| 000020a0 20 20 52 37 2c 5b 52 34 2c 52 37 5d 20 20 20 20 | R7,[R4,R7] | 000020b0 20 20 20 20 20 20 20 20 20 3b 20 52 37 20 3d 20 | ; R7 = | 000020c0 50 61 74 74 65 72 6e 20 4c 65 6e 67 74 68 20 28 |Pattern Length (| 000020d0 30 31 2d 36 34 29 0d 0a e6 12 41 44 44 20 20 20 |01-64)....ADD | 000020e0 52 33 2c 52 33 2c 23 31 0d 0a f0 33 43 4d 50 20 |R3,R3,#1...3CMP | 000020f0 20 20 52 33 2c 52 37 20 20 20 20 20 20 20 20 20 | R3,R7 | 00002100 20 20 20 20 20 20 20 20 20 3b 20 45 6e 64 20 6f | ; End o| 00002110 66 20 50 61 74 74 65 72 6e 20 3f 0d 0a fa 18 42 |f Pattern ?....B| 00002120 4c 54 20 20 20 57 72 69 74 65 5f 50 6f 73 69 74 |LT Write_Posit| 00002130 69 6f 6e 0d 0b 04 0f 4d 4f 56 20 20 20 52 33 2c |ion....MOV R3,| 00002140 23 30 0d 0b 0e 42 41 44 44 20 20 20 52 31 2c 52 |#0...BADD R1,R| 00002150 31 2c 23 31 20 20 20 20 20 20 20 20 20 20 20 20 |1,#1 | 00002160 20 20 20 3b 20 4e 65 78 74 20 70 6f 73 69 74 69 | ; Next positi| 00002170 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 65 20 54 |on in Sequence T| 00002180 61 62 6c 65 0d 0b 18 44 43 4d 50 20 20 20 52 31 |able...DCMP R1| 00002190 2c 52 32 20 20 20 20 20 20 20 20 20 20 20 20 20 |,R2 | 000021a0 20 20 20 20 20 3b 20 4c 61 73 74 20 50 6f 73 69 | ; Last Posi| 000021b0 74 69 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 65 |tion in Sequence| 000021c0 20 54 61 62 6c 65 20 3f 0d 0b 22 39 4d 4f 56 47 | Table ?.."9MOVG| 000021d0 45 20 52 31 2c 23 30 20 20 20 20 20 20 20 20 20 |E R1,#0 | 000021e0 20 20 20 20 20 20 20 20 20 3b 20 49 66 20 59 65 | ; If Ye| 000021f0 73 2c 20 43 6c 65 61 72 20 43 6f 75 6e 74 65 72 |s, Clear Counter| 00002200 2e 0d 0b 2c 13 2e 57 72 69 74 65 5f 50 6f 73 69 |...,..Write_Posi| 00002210 74 69 6f 6e 0d 0b 36 34 53 54 4d 49 41 20 52 30 |tion..64STMIA R0| 00002220 2c 7b 52 31 2d 52 33 7d 20 20 20 20 20 20 20 20 |,{R1-R3} | 00002230 20 20 20 20 20 3b 20 53 61 76 65 20 6e 65 77 20 | ; Save new | 00002240 70 6f 73 69 74 69 6f 6e 0d 0b 40 04 0d 0b 4a 1d |position..@...J.| 00002250 41 44 52 20 20 20 52 32 2c 54 72 6b 5f 50 61 74 |ADR R2,Trk_Pat| 00002260 74 65 72 6e 5f 4c 69 6e 65 0d 0b 54 16 4c 44 4d |tern_Line..T.LDM| 00002270 49 41 20 52 31 32 2c 7b 52 34 2d 52 31 31 7d 0d |IA R12,{R4-R11}.| 00002280 0b 5e 15 53 54 4d 49 41 20 52 32 2c 7b 52 34 2d |.^.STMIA R2,{R4-| 00002290 52 31 31 7d 0d 0b 68 1f 41 44 52 20 20 20 52 37 |R11}..h.ADR R7| 000022a0 2c 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f 42 6c |,Voices_Infos_Bl| 000022b0 6f 63 6b 0d 0b 72 18 4c 44 52 20 20 20 52 31 31 |ock..r.LDR R11| 000022c0 2c 54 72 6b 5f 56 6f 69 63 65 73 0d 0b 7c 40 42 |,Trk_Voices..|@B| 000022d0 4c 20 20 20 20 47 65 74 5f 46 72 65 71 75 65 6e |L Get_Frequen| 000022e0 63 65 5f 54 61 62 6c 65 20 20 20 3b 20 52 65 74 |ce_Table ; Ret| 000022f0 75 72 6e 20 52 38 20 3d 3e 20 27 46 72 65 71 75 |urn R8 => 'Frequ| 00002300 65 6e 63 65 27 20 54 61 62 6c 65 0d 0b 86 0f 4d |ence' Table....M| 00002310 4f 56 20 20 20 52 39 2c 23 30 0d 0b 90 12 2e 54 |OV R9,#0.....T| 00002320 72 6b 5f 56 6f 69 63 65 4c 6f 6f 70 0d 0b 9a 34 |rk_VoiceLoop...4| 00002330 4c 44 52 20 20 20 52 35 2c 5b 52 31 32 5d 2c 23 |LDR R5,[R12],#| 00002340 34 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 35 |4 ; R5| 00002350 3d 4e 6f 74 65 2b 49 6e 73 74 72 75 6d 65 6e 74 |=Note+Instrument| 00002360 0d 0b a4 16 80 20 20 20 52 32 2c 52 35 2c 23 26 |..... R2,R5,#&| 00002370 46 46 30 30 30 30 0d 0b ae 40 4d 4f 56 20 20 20 |FF0000...@MOV | 00002380 52 32 2c 52 32 2c 4c 53 52 23 31 36 20 20 20 20 |R2,R2,LSR#16 | 00002390 20 20 20 20 20 20 3b 20 52 32 3d 53 61 6d 70 6c | ; R2=Sampl| 000023a0 65 20 6e 75 6d 62 65 72 20 28 30 31 2d 33 36 29 |e number (01-36)| 000023b0 3d 28 30 2d 5a 29 0d 0b b8 12 53 55 42 53 20 20 |=(0-Z)....SUBS | 000023c0 52 32 2c 52 32 2c 23 31 0d 0b c2 11 42 4c 54 20 |R2,R2,#1....BLT | 000023d0 20 20 4e 65 78 74 4f 6e 65 0d 0b cc 3b 42 4c 20 | NextOne...;BL | 000023e0 20 20 20 47 65 74 5f 4e 65 77 5f 53 61 6d 70 6c | Get_New_Sampl| 000023f0 65 20 20 20 20 20 20 20 20 3b 20 4e 6f 72 6d 61 |e ; Norma| 00002400 6c 20 63 61 73 65 20 3d 20 4e 2d 4f 20 53 30 30 |l case = N-O S00| 00002410 30 2e 2e 2e 0d 0b d6 39 4d 4f 56 53 20 20 52 34 |0......9MOVS R4| 00002420 2c 52 35 2c 4c 53 52 23 32 34 20 20 20 20 20 20 |,R5,LSR#24 | 00002430 20 20 20 20 3b 20 52 34 3d 4e 6f 74 65 20 6e 75 | ; R4=Note nu| 00002440 6d 62 65 72 20 20 28 30 31 2d 33 36 29 0d 0b e0 |mber (01-36)...| 00002450 37 42 4c 47 54 20 20 47 65 74 5f 4e 65 77 5f 4e |7BLGT Get_New_N| 00002460 6f 74 65 20 20 20 20 20 20 20 20 20 20 3b 20 2e |ote ; .| 00002470 2e 2e 20 47 65 74 20 53 61 6d 70 6c 65 20 26 20 |.. Get Sample & | 00002480 4e 6f 74 65 0d 0b ea 0c 2e 4e 65 78 74 4f 6e 65 |Note.....NextOne| 00002490 0d 0b f4 16 42 4c 20 20 20 20 54 72 6b 5f 45 66 |....BL Trk_Ef| 000024a0 66 65 63 74 73 32 0d 0b fe 13 41 44 44 20 20 20 |fects2....ADD | 000024b0 52 37 2c 52 37 2c 23 33 32 0d 0c 08 12 41 44 44 |R7,R7,#32....ADD| 000024c0 20 20 20 52 39 2c 52 39 2c 23 31 0d 0c 12 10 43 | R9,R9,#1....C| 000024d0 4d 50 20 20 20 52 39 2c 52 31 31 0d 0c 1c 17 42 |MP R9,R11....B| 000024e0 4c 54 20 20 20 54 72 6b 5f 56 6f 69 63 65 4c 6f |LT Trk_VoiceLo| 000024f0 6f 70 0d 0c 26 04 0d 0c 30 0e 2e 45 6e 64 4f 66 |op..&...0..EndOf| 00002500 50 6c 61 79 0d 0c 3a 1a 4c 44 4d 46 44 20 52 31 |Play..:.LDMFD R1| 00002510 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 0c |3!,{R0-R12,PC}..| 00002520 44 04 0d 0c 4e 11 2e 47 65 74 5f 4e 65 77 5f 4e |D...N..Get_New_N| 00002530 6f 74 65 0d 0c 58 18 53 54 4d 46 44 20 52 31 33 |ote..X.STMFD R13| 00002540 21 2c 7b 52 31 32 2c 52 31 34 7d 0d 0c 62 19 42 |!,{R12,R14}..b.B| 00002550 4c 20 20 20 20 47 65 74 5f 50 65 72 69 6f 64 73 |L Get_Periods| 00002560 5f 41 64 72 0d 0c 6c 12 53 55 42 20 20 20 52 33 |_Adr..l.SUB R3| 00002570 2c 52 34 2c 23 31 0d 0c 76 1b 4c 44 52 20 20 20 |,R4,#1..v.LDR | 00002580 52 33 2c 5b 52 31 32 2c 52 33 2c 4c 53 4c 23 32 |R3,[R12,R3,LSL#2| 00002590 5d 0d 0c 80 40 53 54 52 20 20 20 52 33 2c 5b 52 |]...@STR R3,[R| 000025a0 37 2c 23 32 38 5d 20 20 20 20 20 20 20 20 20 20 |7,#28] | 000025b0 20 20 3b 20 53 61 76 65 20 70 65 72 69 6f 64 20 | ; Save period | 000025c0 66 6f 72 20 70 6f 72 74 61 6d 65 6e 74 6f 2e 2e |for portamento..| 000025d0 2e 0d 0c 8a 18 41 44 52 20 20 20 52 31 2c 54 72 |.....ADR R1,Tr| 000025e0 6b 5f 50 65 72 69 6f 64 73 0d 0c 94 36 53 54 52 |k_Periods...6STR| 000025f0 20 20 20 52 33 2c 5b 52 31 2c 52 39 2c 4c 53 4c | R3,[R1,R9,LSL| 00002600 23 32 5d 20 20 20 20 20 20 20 3b 20 2e 2e 2e 61 |#2] ; ...a| 00002610 6e 64 20 66 6f 72 20 61 72 70 65 67 67 69 6f 0d |nd for arpeggio.| 00002620 0c 9e 36 4c 44 52 20 20 20 52 33 2c 5b 52 38 2c |..6LDR R3,[R8,| 00002630 52 33 2c 4c 53 4c 23 32 5d 20 20 20 20 20 20 20 |R3,LSL#2] | 00002640 3b 20 47 65 74 20 70 68 61 73 65 20 69 6e 63 72 |; Get phase incr| 00002650 65 6d 65 6e 74 0d 0c a8 42 53 54 52 20 20 20 52 |ement...BSTR R| 00002660 33 2c 5b 52 37 2c 23 34 5d 20 20 20 20 20 20 20 |3,[R7,#4] | 00002670 20 20 20 20 20 20 3b 20 26 20 53 61 76 65 20 69 | ; & Save i| 00002680 74 20 69 6e 20 76 6f 69 63 65 73 20 69 6e 66 6f |t in voices info| 00002690 73 20 62 6c 6f 63 6b 0d 0c b2 0f 4d 4f 56 20 20 |s block....MOV | 000026a0 20 52 31 2c 23 30 0d 0c bc 3a 53 54 52 20 20 20 | R1,#0...:STR | 000026b0 52 31 2c 5b 52 37 2c 23 30 5d 20 20 20 20 20 20 |R1,[R7,#0] | 000026c0 20 20 20 20 20 20 20 3b 20 43 6c 65 61 72 20 70 | ; Clear p| 000026d0 68 61 73 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 |hase accumulator| 000026e0 0d 0c c6 18 4c 44 4d 46 44 20 52 31 33 21 2c 7b |....LDMFD R13!,{| 000026f0 52 31 32 2c 50 43 7d 5e 0d 0c d0 04 0d 0c da 13 |R12,PC}^........| 00002700 2e 47 65 74 5f 4e 65 77 5f 53 61 6d 70 6c 65 0d |.Get_New_Sample.| 00002710 0c e4 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 |...STMFD R13!,{R| 00002720 34 2c 52 31 32 2c 52 31 34 7d 0d 0c ee 18 41 44 |4,R12,R14}....AD| 00002730 52 20 20 20 52 33 2c 54 72 6b 5f 53 61 6d 70 6c |R R3,Trk_Sampl| 00002740 65 73 0d 0c f8 36 4c 44 52 20 20 20 52 33 2c 5b |es...6LDR R3,[| 00002750 52 33 2c 52 32 2c 4c 53 4c 23 32 5d 20 20 20 20 |R3,R2,LSL#2] | 00002760 20 20 20 3b 20 52 33 20 3d 3e 20 41 63 74 75 61 | ; R3 => Actua| 00002770 6c 20 53 61 6d 70 6c 65 0d 0d 02 35 41 44 44 20 |l Sample...5ADD | 00002780 20 20 52 34 2c 52 33 2c 23 36 30 20 20 20 20 20 | R4,R3,#60 | 00002790 20 20 20 20 20 20 20 20 20 3b 20 52 34 20 3d 3e | ; R4 =>| 000027a0 20 53 61 6d 70 6c 65 73 20 44 61 74 61 0d 0d 0c | Samples Data...| 000027b0 15 53 54 52 20 20 20 52 34 2c 5b 52 37 2c 23 31 |.STR R4,[R7,#1| 000027c0 36 5d 0d 0d 16 0f 4d 4f 56 20 20 20 52 31 2c 23 |6]....MOV R1,#| 000027d0 31 0d 0d 20 3d 53 54 52 20 20 20 52 31 2c 5b 52 |1.. =STR R1,[R| 000027e0 37 2c 23 32 34 5d 20 20 20 20 20 20 20 20 20 20 |7,#24] | 000027f0 20 20 3b 20 52 31 20 3d 20 46 6c 61 67 20 46 69 | ; R1 = Flag Fi| 00002800 6c 6c 20 57 69 74 68 20 53 61 6d 70 6c 65 0d 0d |ll With Sample..| 00002810 2a 04 0d 0d 34 10 3b 20 53 65 74 20 56 6f 6c 75 |*...4.; Set Volu| 00002820 6d 65 0d 0d 3e 04 0d 0d 48 35 4c 44 52 20 20 20 |me..>...H5LDR | 00002830 52 31 2c 5b 52 33 2c 23 31 36 2b 32 38 5d 20 20 |R1,[R3,#16+28] | 00002840 20 20 20 20 20 20 20 3b 20 52 31 20 3d 20 53 61 | ; R1 = Sa| 00002850 6d 70 6c 65 20 56 6f 6c 75 6d 65 0d 0d 52 13 53 |mple Volume..R.S| 00002860 55 42 53 20 20 52 34 2c 52 31 2c 23 36 38 0d 0d |UBS R4,R1,#68..| 00002870 5c 0f 4d 4f 56 4c 54 20 52 34 2c 23 30 0d 0d 66 |\.MOVLT R4,#0..f| 00002880 15 4d 4f 56 20 20 20 52 34 2c 52 34 2c 4c 53 52 |.MOV R4,R4,LSR| 00002890 23 32 0d 0d 70 14 52 53 42 20 20 20 52 31 2c 52 |#2..p.RSB R1,R| 000028a0 31 2c 23 32 35 35 0d 0d 7a 15 53 54 52 20 20 20 |1,#255..z.STR | 000028b0 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0d 84 04 0d |R1,[R7,#20].....| 000028c0 0d 8e 18 3b 20 53 65 74 20 56 6f 6c 75 6d 65 20 |...; Set Volume | 000028d0 43 6f 6d 6d 61 6e 64 0d 0d 98 04 0d 0d a2 14 80 |Command.........| 000028e0 20 20 20 52 34 2c 52 35 2c 23 26 46 46 30 30 0d | R4,R5,#&FF00.| 000028f0 0d ac 13 43 4d 50 20 20 20 52 34 2c 23 26 31 46 |...CMP R4,#&1F| 00002900 30 30 0d 0d b6 12 80 45 51 20 52 31 2c 52 35 2c |00.....EQ R1,R5,| 00002910 23 26 46 46 0d 0d c0 14 52 53 42 45 51 20 52 31 |#&FF....RSBEQ R1| 00002920 2c 52 31 2c 23 26 46 46 0d 0d ca 15 53 54 52 45 |,R1,#&FF....STRE| 00002930 51 20 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0d d4 |Q R1,[R7,#20]...| 00002940 04 0d 0d de 1e 3b 20 47 65 74 20 26 20 53 61 76 |.....; Get & Sav| 00002950 65 20 73 61 6d 70 6c 65 73 20 69 6e 66 6f 73 0d |e samples infos.| 00002960 0d e8 04 0d 0d f2 38 4c 44 52 20 20 20 52 31 2c |......8LDR R1,| 00002970 5b 52 33 2c 23 34 30 2b 32 38 5d 20 20 20 20 20 |[R3,#40+28] | 00002980 20 20 20 20 20 20 20 3b 20 52 31 20 3d 20 52 65 | ; R1 = Re| 00002990 70 65 61 74 20 4f 66 66 73 65 74 0d 0d fc 38 4c |peat Offset...8L| 000029a0 44 52 20 20 20 52 34 2c 5b 52 33 2c 23 35 32 2b |DR R4,[R3,#52+| 000029b0 32 38 5d 20 20 20 20 20 20 20 20 20 20 20 20 3b |28] ;| 000029c0 20 52 34 20 3d 20 52 65 70 65 61 74 20 4c 65 6e | R4 = Repeat Len| 000029d0 67 74 68 0d 0e 06 0f 43 4d 50 20 20 20 52 34 2c |gth....CMP R4,| 000029e0 23 32 0d 0e 10 12 41 44 44 4e 45 20 52 34 2c 52 |#2....ADDNE R4,R| 000029f0 34 2c 52 31 0d 0e 1a 38 4c 44 52 45 51 20 52 34 |4,R1...8LDREQ R4| 00002a00 2c 5b 52 33 2c 23 32 38 2b 32 38 5d 20 20 20 20 |,[R3,#28+28] | 00002a10 20 20 20 20 20 20 20 20 3b 20 52 34 20 3d 20 53 | ; R4 = S| 00002a20 61 6d 70 6c 65 20 4c 65 6e 67 74 68 0d 0e 24 15 |ample Length..$.| 00002a30 53 54 52 20 20 20 52 34 2c 5b 52 37 2c 23 31 32 |STR R4,[R7,#12| 00002a40 5d 0d 0e 2e 12 41 44 44 4e 45 20 52 31 2c 52 31 |]....ADDNE R1,R1| 00002a50 2c 23 31 0d 0e 38 39 53 54 52 20 20 20 52 31 2c |,#1..89STR R1,| 00002a60 5b 52 37 2c 23 38 5d 20 20 20 20 20 20 20 20 20 |[R7,#8] | 00002a70 20 20 20 20 20 20 20 3b 20 53 61 75 76 65 20 52 | ; Sauve R| 00002a80 65 70 65 61 74 20 4f 66 66 73 65 74 0d 0e 42 1b |epeat Offset..B.| 00002a90 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 34 2c 52 |LDMFD R13!,{R4,R| 00002aa0 31 32 2c 50 43 7d 5e 0d 0e 4c 04 0d 0e 56 24 3b |12,PC}^..L...V$;| 00002ab0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00002ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00002ad0 0e 60 24 3b 20 2a 20 20 20 20 20 20 45 66 66 65 |.`$; * Effe| 00002ae0 63 74 73 20 43 68 65 63 6b 69 6e 67 20 23 31 20 |cts Checking #1 | 00002af0 20 20 2a 0d 0e 6a 24 3b 20 2a 2d 2d 2d 2d 2d 2d | *..j$; *------| 00002b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00002b10 2d 2d 2d 2d 2d 2d 2a 0d 0e 74 24 3b 20 2a 20 20 |------*..t$; * | 00002b20 27 45 27 20 20 3d 20 53 65 74 20 53 74 65 72 65 |'E' = Set Stere| 00002b30 6f 20 20 20 20 20 20 20 20 20 2a 0d 0e 7e 24 3b |o *..~$;| 00002b40 20 2a 20 20 27 4a 27 20 20 3d 20 50 6f 73 69 74 | * 'J' = Posit| 00002b50 69 6f 6e 20 4a 75 6d 70 20 20 20 20 20 20 2a 0d |ion Jump *.| 00002b60 0e 88 24 3b 20 2a 20 20 27 56 27 20 20 3d 20 53 |..$; * 'V' = S| 00002b70 65 74 20 56 6f 6c 75 6d 65 20 20 20 20 20 20 20 |et Volume | 00002b80 20 20 2a 0d 0e 92 24 3b 20 2a 20 20 27 42 27 20 | *...$; * 'B' | 00002b90 20 3d 20 50 61 74 74 65 72 6e 20 42 72 65 61 6b | = Pattern Break| 00002ba0 20 20 20 20 20 20 2a 0d 0e 9c 24 3b 20 2a 20 20 | *...$; * | 00002bb0 27 53 27 20 20 3d 20 53 65 74 20 53 70 65 65 64 |'S' = Set Speed| 00002bc0 20 20 20 20 20 20 20 20 20 20 2a 0d 0e a6 24 3b | *...$;| 00002bd0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00002be0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00002bf0 0e b0 04 0d 0e ba 11 2e 54 72 6b 5f 45 66 66 65 |........Trk_Effe| 00002c00 63 74 73 32 0d 0e c4 14 80 20 20 20 52 34 2c 52 |cts2..... R4,R| 00002c10 35 2c 23 26 46 46 30 30 0d 0e ce 04 0d 0e d8 16 |5,#&FF00........| 00002c20 3b 20 53 65 74 20 56 6f 6c 75 6d 65 20 28 27 56 |; Set Volume ('V| 00002c30 27 29 0d 0e e2 04 0d 0e ec 13 43 4d 50 20 20 20 |')........CMP | 00002c40 52 34 2c 23 26 31 46 30 30 0d 0e f6 17 42 4e 45 |R4,#&1F00....BNE| 00002c50 20 20 20 4e 6f 5f 53 65 74 5f 56 6f 6c 75 6d 65 | No_Set_Volume| 00002c60 0d 0f 00 12 80 20 20 20 52 31 2c 52 35 2c 23 26 |..... R1,R5,#&| 00002c70 46 46 0d 0f 0a 14 52 53 42 20 20 20 52 31 2c 52 |FF....RSB R1,R| 00002c80 31 2c 23 26 46 46 0d 0f 14 15 53 54 52 20 20 20 |1,#&FF....STR | 00002c90 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0f 1e 10 4d |R1,[R7,#20]....M| 00002ca0 4f 56 20 20 20 50 43 2c 52 31 34 0d 0f 28 12 2e |OV PC,R14..(..| 00002cb0 4e 6f 5f 53 65 74 5f 56 6f 6c 75 6d 65 0d 0f 32 |No_Set_Volume..2| 00002cc0 04 0d 0f 3c 16 3b 20 53 65 74 20 53 70 65 65 64 |...<.; Set Speed| 00002cd0 20 20 28 27 53 27 29 0d 0f 46 04 0d 0f 50 13 43 | ('S')..F...P.C| 00002ce0 4d 50 20 20 20 52 34 2c 23 26 31 43 30 30 0d 0f |MP R4,#&1C00..| 00002cf0 5a 16 42 4e 45 20 20 20 4e 6f 5f 53 65 74 5f 53 |Z.BNE No_Set_S| 00002d00 70 65 65 64 0d 0f 64 12 80 53 20 20 52 31 2c 52 |peed..d..S R1,R| 00002d10 35 2c 23 26 30 46 0d 0f 6e 16 53 54 52 4e 45 20 |5,#&0F..n.STRNE | 00002d20 52 31 2c 54 72 6b 5f 53 70 65 65 64 0d 0f 78 10 |R1,Trk_Speed..x.| 00002d30 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 0f 82 11 |MOV PC,R14....| 00002d40 2e 4e 6f 5f 53 65 74 5f 53 70 65 65 64 0d 0f 8c |.No_Set_Speed...| 00002d50 04 0d 0f 96 1a 3b 20 50 61 74 74 65 72 6e 20 42 |.....; Pattern B| 00002d60 72 65 61 6b 20 20 28 27 42 27 29 0d 0f a0 04 0d |reak ('B').....| 00002d70 0f aa 12 43 4d 50 20 20 20 52 34 2c 23 26 42 30 |...CMP R4,#&B0| 00002d80 30 0d 0f b4 1a 42 4e 45 20 20 20 4e 6f 5f 50 61 |0....BNE No_Pa| 00002d90 74 74 65 72 6e 5f 42 72 65 61 6b 0d 0f be 16 41 |ttern_Break....A| 00002da0 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 6f |DR R0,Trk_Info| 00002db0 73 0d 0f c8 14 4c 44 4d 49 41 20 52 30 2c 7b 52 |s....LDMIA R0,{R| 00002dc0 31 2d 52 33 7d 0d 0f d2 41 41 44 44 20 20 20 52 |1-R3}...AADD R| 00002dd0 31 2c 52 31 2c 23 31 20 20 20 20 20 20 20 20 20 |1,R1,#1 | 00002de0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 50 | ; P| 00002df0 6f 73 69 74 69 6f 6e 20 3d 20 50 6f 73 69 74 69 |osition = Positi| 00002e00 6f 6e 20 2b 20 31 0d 0f dc 0f 43 4d 50 20 20 20 |on + 1....CMP | 00002e10 52 31 2c 52 32 0d 0f e6 0c ec 51 20 52 31 2c 23 |R1,R2.....Q R1,#| 00002e20 30 0d 0f f0 42 4d 4f 56 20 20 20 52 33 2c 23 30 |0...BMOV R3,#0| 00002e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002e40 20 20 20 20 20 20 20 20 20 3b 20 41 74 20 73 74 | ; At st| 00002e50 61 72 74 20 6f 66 20 6e 65 78 74 20 70 61 74 74 |art of next patt| 00002e60 65 72 6e 0d 0f fa 14 53 54 4d 49 41 20 52 30 2c |ern....STMIA R0,| 00002e70 7b 52 31 2d 52 33 7d 0d 10 04 10 4d 4f 56 20 20 |{R1-R3}....MOV | 00002e80 20 50 43 2c 52 31 34 0d 10 0e 15 2e 4e 6f 5f 50 | PC,R14.....No_P| 00002e90 61 74 74 65 72 6e 5f 42 72 65 61 6b 0d 10 18 04 |attern_Break....| 00002ea0 0d 10 22 19 3b 20 50 6f 73 69 74 69 6f 6e 20 4a |..".; Position J| 00002eb0 75 6d 70 20 28 27 4a 27 29 0d 10 2c 04 0d 10 36 |ump ('J')..,...6| 00002ec0 13 43 4d 50 20 20 20 52 34 2c 23 26 31 33 30 30 |.CMP R4,#&1300| 00002ed0 0d 10 40 1a 42 4e 45 20 20 20 4e 6f 5f 50 6f 73 |..@.BNE No_Pos| 00002ee0 69 74 69 6f 6e 5f 4a 75 6d 70 0d 10 4a 16 41 44 |ition_Jump..J.AD| 00002ef0 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 6f 73 |R R0,Trk_Infos| 00002f00 0d 10 54 12 80 20 20 20 52 31 2c 52 35 2c 23 26 |..T.. R1,R5,#&| 00002f10 37 46 0d 10 5e 11 53 54 52 20 20 20 52 31 2c 5b |7F..^.STR R1,[| 00002f20 52 30 5d 0d 10 68 0f 4d 4f 56 20 20 20 52 31 2c |R0]..h.MOV R1,| 00002f30 23 30 0d 10 72 14 53 54 52 20 20 20 52 31 2c 5b |#0..r.STR R1,[| 00002f40 52 30 2c 23 38 5d 0d 10 7c 10 4d 4f 56 20 20 20 |R0,#8]..|.MOV | 00002f50 50 43 2c 52 31 34 0d 10 86 15 2e 4e 6f 5f 50 6f |PC,R14.....No_Po| 00002f60 73 69 74 69 6f 6e 5f 4a 75 6d 70 0d 10 90 04 0d |sition_Jump.....| 00002f70 10 9a 13 43 4d 50 20 20 20 52 34 2c 23 26 31 35 |...CMP R4,#&15| 00002f80 30 30 0d 10 a4 16 42 4e 45 20 20 20 4e 6f 5f 4c |00....BNE No_L| 00002f90 69 6e 65 5f 4a 75 6d 70 0d 10 ae 11 80 20 20 20 |ine_Jump..... | 00002fa0 52 31 2c 52 35 2c 23 26 46 0d 10 b8 15 4d 4f 56 |R1,R5,#&F....MOV| 00002fb0 20 20 20 52 32 2c 52 35 2c 4c 53 52 23 34 0d 10 | R2,R5,LSR#4..| 00002fc0 c2 11 80 53 20 20 52 32 2c 52 32 2c 23 26 46 0d |...S R2,R2,#&F.| 00002fd0 10 cc 10 4d 4f 56 47 54 20 52 33 2c 23 31 30 0d |...MOVGT R3,#10.| 00002fe0 10 d6 15 4d 4c 41 47 54 20 52 31 2c 52 32 2c 52 |...MLAGT R1,R2,R| 00002ff0 33 2c 52 31 0d 10 e0 10 43 4d 50 20 20 20 52 31 |3,R1....CMP R1| 00003000 2c 23 36 33 0d 10 ea 16 41 44 52 4c 45 20 52 30 |,#63....ADRLE R0| 00003010 2c 54 72 6b 5f 49 6e 66 6f 73 0d 10 f4 14 53 54 |,Trk_Infos....ST| 00003020 52 4c 45 20 52 31 2c 5b 52 30 2c 23 38 5d 0d 10 |RLE R1,[R0,#8]..| 00003030 fe 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 11 |..MOV PC,R14..| 00003040 08 11 2e 4e 6f 5f 4c 69 6e 65 5f 4a 75 6d 70 0d |...No_Line_Jump.| 00003050 11 12 04 0d 11 1c 12 43 4d 50 20 20 20 52 34 2c |.......CMP R4,| 00003060 23 26 45 30 30 0d 11 26 17 42 4e 45 20 20 20 4e |#&E00..&.BNE N| 00003070 6f 5f 53 65 74 5f 53 74 65 72 65 6f 0d 11 30 1a |o_Set_Stereo..0.| 00003080 41 44 52 20 20 20 52 31 30 2c 53 74 65 72 65 6f |ADR R10,Stereo| 00003090 5f 54 61 62 6c 65 0d 11 3a 38 80 53 20 20 52 32 |_Table..:8.S R2| 000030a0 2c 52 35 2c 23 26 30 46 20 20 20 20 20 20 20 20 |,R5,#&0F | 000030b0 20 20 3b 20 52 32 20 3d 20 53 74 65 72 65 6f 20 | ; R2 = Stereo | 000030c0 70 6f 73 69 74 69 6f 6e 20 28 31 2d 37 29 0d 11 |position (1-7)..| 000030d0 44 0d ec 51 20 50 43 2c 52 31 34 0d 11 4e 0f 43 |D..Q PC,R14..N.C| 000030e0 4d 50 20 20 20 52 32 2c 23 37 0d 11 58 10 4d 4f |MP R2,#7..X.MO| 000030f0 56 47 54 20 50 43 2c 52 31 34 0d 11 62 12 53 55 |VGT PC,R14..b.SU| 00003100 42 20 20 20 52 32 2c 52 32 2c 23 31 0d 11 6c 1b |B R2,R2,#1..l.| 00003110 4c 44 52 20 20 20 52 31 2c 5b 52 31 30 2c 52 32 |LDR R1,[R10,R2| 00003120 2c 4c 53 4c 23 32 5d 0d 11 76 31 41 44 44 20 20 |,LSL#2]..v1ADD | 00003130 20 52 30 2c 52 39 2c 23 31 20 20 20 20 20 20 20 | R0,R9,#1 | 00003140 20 20 20 20 20 3b 20 52 30 20 3d 20 56 6f 69 63 | ; R0 = Voic| 00003150 65 20 4e 75 6d 62 65 72 0d 11 80 16 53 54 4d 46 |e Number....STMF| 00003160 44 20 52 31 33 21 2c 7b 52 38 2c 52 39 7d 0d 11 |D R13!,{R8,R9}..| 00003170 8a 0f 4d 4f 56 20 20 20 52 30 2c 50 43 0d 11 94 |..MOV R0,PC...| 00003180 11 84 52 20 20 20 52 38 2c 52 39 2c 23 33 0d 11 |..R R8,R9,#3..| 00003190 9e 0f 54 45 51 50 20 20 52 38 2c 23 30 0d 11 a8 |..TEQP R8,#0...| 000031a0 0f 4d 4f 56 4e 56 20 52 30 2c 52 30 0d 11 b2 14 |.MOVNV R0,R0....| 000031b0 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 7d |STMFD R13!,{R14}| 000031c0 0d 11 bc 18 53 57 49 20 20 20 22 53 6f 75 6e 64 |....SWI "Sound| 000031d0 5f 53 74 65 72 65 6f 22 0d 11 c6 14 4c 44 4d 46 |_Stereo"....LDMF| 000031e0 44 20 52 31 33 21 2c 7b 52 31 34 7d 0d 11 d0 0f |D R13!,{R14}....| 000031f0 54 45 51 50 20 20 52 39 2c 23 30 0d 11 da 0f 4d |TEQP R9,#0....M| 00003200 4f 56 4e 56 20 52 30 2c 52 30 0d 11 e4 16 4c 44 |OVNV R0,R0....LD| 00003210 4d 46 44 20 52 31 33 21 2c 7b 52 38 2c 52 39 7d |MFD R13!,{R8,R9}| 00003220 0d 11 ee 12 2e 4e 6f 5f 53 65 74 5f 53 74 65 72 |.....No_Set_Ster| 00003230 65 6f 0d 11 f8 10 4d 4f 56 20 20 20 50 43 2c 52 |eo....MOV PC,R| 00003240 31 34 0d 12 02 04 0d 12 0c 23 3b 20 2a 2d 2d 2d |14.......#; *---| 00003250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00003260 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 12 16 23 3b 20 2a |--------*...#; *| 00003270 20 20 20 20 45 66 66 65 63 74 73 20 43 68 65 63 | Effects Chec| 00003280 6b 69 6e 67 20 23 32 20 20 20 20 2a 0d 12 20 23 |king #2 *.. #| 00003290 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 000032a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 000032b0 12 2a 23 3b 20 2a 20 27 30 27 20 20 3d 20 41 72 |.*#; * '0' = Ar| 000032c0 70 65 67 67 69 6f 20 20 20 20 20 20 20 20 20 20 |peggio | 000032d0 20 2a 0d 12 34 23 3b 20 2a 20 27 31 27 20 20 3d | *..4#; * '1' =| 000032e0 20 50 6f 72 74 61 6d 65 6e 74 6f 20 55 70 20 20 | Portamento Up | 000032f0 20 20 20 20 2a 0d 12 3e 23 3b 20 2a 20 27 32 27 | *..>#; * '2'| 00003300 20 20 3d 20 50 6f 72 74 61 6d 65 6e 74 6f 20 44 | = Portamento D| 00003310 6f 77 6e 20 20 20 20 2a 0d 12 48 23 3b 20 2a 20 |own *..H#; * | 00003320 27 47 27 20 20 3d 20 53 6c 69 64 65 20 56 6f 6c |'G' = Slide Vol| 00003330 75 6d 65 20 55 70 20 20 20 20 2a 0d 12 52 23 3b |ume Up *..R#;| 00003340 20 2a 20 27 48 27 20 20 3d 20 53 6c 69 64 65 20 | * 'H' = Slide | 00003350 56 6f 6c 75 6d 65 20 44 6f 77 6e 20 20 2a 0d 12 |Volume Down *..| 00003360 5c 23 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |\#; *-----------| 00003370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00003380 2a 0d 12 66 04 0d 12 70 10 2e 54 72 6b 5f 45 66 |*..f...p..Trk_Ef| 00003390 66 65 63 74 73 0d 12 7a 1d 41 44 52 20 20 20 52 |fects..z.ADR R| 000033a0 39 2c 54 72 6b 5f 50 61 74 74 65 72 6e 5f 4c 69 |9,Trk_Pattern_Li| 000033b0 6e 65 0d 12 84 19 41 44 52 20 20 20 52 31 30 2c |ne....ADR R10,| 000033c0 54 72 6b 5f 50 65 72 69 6f 64 73 0d 12 8e 34 4c |Trk_Periods...4L| 000033d0 44 52 20 20 20 52 31 31 2c 54 72 6b 5f 56 6f 69 |DR R11,Trk_Voi| 000033e0 63 65 73 20 20 20 20 20 20 20 3b 20 52 31 31 20 |ces ; R11 | 000033f0 3d 20 56 6f 69 63 65 73 20 4e 75 6d 62 65 72 0d |= Voices Number.| 00003400 12 98 36 42 4c 20 20 20 20 47 65 74 5f 46 72 65 |..6BL Get_Fre| 00003410 71 75 65 6e 63 65 5f 54 61 62 6c 65 20 20 3b 20 |quence_Table ; | 00003420 52 38 20 3d 3e 20 46 72 65 71 75 65 6e 63 65 20 |R8 => Frequence | 00003430 54 61 62 6c 65 0d 12 a2 46 42 4c 20 20 20 20 47 |Table...FBL G| 00003440 65 74 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 20 20 |et_Infos_Block | 00003450 20 20 20 20 3b 20 52 37 20 3d 3e 20 49 6e 66 6f | ; R7 => Info| 00003460 73 20 42 6c 6f 63 6b 20 28 33 32 20 42 79 74 65 |s Block (32 Byte| 00003470 20 2f 20 43 68 61 6e 6e 65 6c 29 0d 12 ac 0f 4d | / Channel)....M| 00003480 4f 56 20 20 20 52 32 2c 23 30 0d 12 b6 15 2e 43 |OV R2,#0.....C| 00003490 68 65 63 6b 45 66 66 65 63 74 73 4c 6f 6f 70 0d |heckEffectsLoop.| 000034a0 12 c0 1a 4c 44 52 20 20 20 52 31 2c 5b 52 39 2c |...LDR R1,[R9,| 000034b0 52 32 2c 4c 53 4c 23 32 5d 0d 12 ca 2f 80 20 20 |R2,LSL#2].../. | 000034c0 20 52 33 2c 52 31 2c 23 26 30 30 46 46 20 20 20 | R3,R1,#&00FF | 000034d0 20 20 20 20 20 20 3b 20 52 33 20 3d 20 45 66 66 | ; R3 = Eff| 000034e0 65 63 74 20 44 61 74 61 0d 12 d4 15 4d 4f 56 20 |ect Data....MOV | 000034f0 20 20 52 31 2c 52 31 2c 4c 53 52 23 38 0d 12 de | R1,R1,LSR#8...| 00003500 2f 80 20 20 20 52 31 2c 52 31 2c 23 26 46 46 20 |/. R1,R1,#&FF | 00003510 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 20 3d | ; R1 =| 00003520 20 45 66 66 65 63 74 20 54 79 70 65 0d 12 e8 04 | Effect Type....| 00003530 0d 12 f2 11 43 4d 50 20 20 20 52 31 2c 23 26 31 |....CMP R1,#&1| 00003540 30 0d 12 fc 19 42 4e 45 20 20 20 4e 6f 5f 53 6c |0....BNE No_Sl| 00003550 69 64 65 5f 56 6f 6c 5f 55 70 0d 13 06 12 80 20 |ide_Vol_Up..... | 00003560 20 20 52 33 2c 52 33 2c 23 26 46 46 0d 13 10 18 | R3,R3,#&FF....| 00003570 41 44 44 20 20 20 52 34 2c 52 37 2c 52 32 2c 4c |ADD R4,R7,R2,L| 00003580 53 4c 23 35 0d 13 1a 2f 4c 44 52 20 20 20 52 35 |SL#5.../LDR R5| 00003590 2c 5b 52 34 2c 23 32 30 5d 20 20 20 20 20 20 20 |,[R4,#20] | 000035a0 20 20 20 20 3b 20 52 35 3d 32 35 35 2d 56 6f 6c | ; R5=255-Vol| 000035b0 75 6d 65 0d 13 24 14 52 53 42 20 20 20 52 35 2c |ume..$.RSB R5,| 000035c0 52 35 2c 23 32 35 35 0d 13 2e 12 41 44 44 20 20 |R5,#255....ADD | 000035d0 20 52 35 2c 52 35 2c 52 33 0d 13 38 11 43 4d 50 | R5,R5,R3..8.CMP| 000035e0 20 20 20 52 35 2c 23 26 46 46 0d 13 42 11 4d 4f | R5,#&FF..B.MO| 000035f0 56 47 54 20 52 35 2c 23 26 46 46 0d 13 4c 14 52 |VGT R5,#&FF..L.R| 00003600 53 42 20 20 20 52 35 2c 52 35 2c 23 32 35 35 0d |SB R5,R5,#255.| 00003610 13 56 15 53 54 52 20 20 20 52 35 2c 5b 52 34 2c |.V.STR R5,[R4,| 00003620 23 32 30 5d 0d 13 60 16 42 20 20 20 20 20 43 68 |#20]..`.B Ch| 00003630 65 63 6b 4e 65 78 74 56 6f 78 0d 13 6a 14 2e 4e |eckNextVox..j..N| 00003640 6f 5f 53 6c 69 64 65 5f 56 6f 6c 5f 55 70 0d 13 |o_Slide_Vol_Up..| 00003650 74 04 0d 13 7e 11 43 4d 50 20 20 20 52 31 2c 23 |t...~.CMP R1,#| 00003660 26 31 31 0d 13 88 1b 42 4e 45 20 20 20 4e 6f 5f |&11....BNE No_| 00003670 53 6c 69 64 65 5f 56 6f 6c 5f 44 6f 77 6e 0d 13 |Slide_Vol_Down..| 00003680 92 12 80 20 20 20 52 33 2c 52 33 2c 23 26 46 46 |... R3,R3,#&FF| 00003690 0d 13 9c 18 41 44 44 20 20 20 52 34 2c 52 37 2c |....ADD R4,R7,| 000036a0 52 32 2c 4c 53 4c 23 35 0d 13 a6 2d 4c 44 52 20 |R2,LSL#5...-LDR | 000036b0 20 20 52 35 2c 5b 52 34 2c 23 32 30 5d 20 20 20 | R5,[R4,#20] | 000036c0 20 20 20 20 20 20 3b 20 52 35 3d 32 35 35 2d 56 | ; R5=255-V| 000036d0 6f 6c 75 6d 65 0d 13 b0 14 52 53 42 20 20 20 52 |olume....RSB R| 000036e0 35 2c 52 35 2c 23 32 35 35 0d 13 ba 12 53 55 42 |5,R5,#255....SUB| 000036f0 53 20 20 52 35 2c 52 35 2c 52 33 0d 13 c4 0f 4d |S R5,R5,R3....M| 00003700 4f 56 4c 54 20 52 35 2c 23 30 0d 13 ce 14 52 53 |OVLT R5,#0....RS| 00003710 42 20 20 20 52 35 2c 52 35 2c 23 32 35 35 0d 13 |B R5,R5,#255..| 00003720 d8 15 53 54 52 20 20 20 52 35 2c 5b 52 34 2c 23 |..STR R5,[R4,#| 00003730 32 30 5d 0d 13 e2 16 42 20 20 20 20 20 43 68 65 |20]....B Che| 00003740 63 6b 4e 65 78 74 56 6f 78 0d 13 ec 16 2e 4e 6f |ckNextVox.....No| 00003750 5f 53 6c 69 64 65 5f 56 6f 6c 5f 44 6f 77 6e 0d |_Slide_Vol_Down.| 00003760 13 f6 04 0d 14 00 0f 43 4d 50 20 20 20 52 31 2c |.......CMP R1,| 00003770 23 31 0d 14 0a 12 42 4e 45 20 20 20 4e 6f 50 6f |#1....BNE NoPo| 00003780 72 74 55 70 0d 14 14 18 41 44 44 20 20 20 52 34 |rtUp....ADD R4| 00003790 2c 52 37 2c 52 32 2c 4c 53 4c 23 35 0d 14 1e 30 |,R7,R2,LSL#5...0| 000037a0 4c 44 52 20 20 20 52 35 2c 5b 52 34 2c 23 32 38 |LDR R5,[R4,#28| 000037b0 5d 20 20 20 20 20 20 20 20 20 3b 20 52 35 3d 41 |] ; R5=A| 000037c0 63 74 75 61 6c 20 50 65 72 69 6f 64 0d 14 28 12 |ctual Period..(.| 000037d0 53 55 42 20 20 20 52 35 2c 52 35 2c 52 33 0d 14 |SUB R5,R5,R3..| 000037e0 32 11 43 4d 50 20 20 20 52 35 2c 23 26 35 30 0d |2.CMP R5,#&50.| 000037f0 14 3c 11 4d 4f 56 4c 54 20 52 35 2c 23 26 35 30 |.<.MOVLT R5,#&50| 00003800 0d 14 46 15 53 54 52 20 20 20 52 35 2c 5b 52 34 |..F.STR R5,[R4| 00003810 2c 23 32 38 5d 0d 14 50 1a 4c 44 52 20 20 20 52 |,#28]..P.LDR R| 00003820 35 2c 5b 52 38 2c 52 35 2c 4c 53 4c 23 32 5d 0d |5,[R8,R5,LSL#2].| 00003830 14 5a 14 53 54 52 20 20 20 52 35 2c 5b 52 34 2c |.Z.STR R5,[R4,| 00003840 23 34 5d 0d 14 64 16 42 20 20 20 20 20 43 68 65 |#4]..d.B Che| 00003850 63 6b 4e 65 78 74 56 6f 78 0d 14 6e 0d 2e 4e 6f |ckNextVox..n..No| 00003860 50 6f 72 74 55 70 0d 14 78 04 0d 14 82 0f 43 4d |PortUp..x.....CM| 00003870 50 20 20 20 52 31 2c 23 32 0d 14 8c 14 42 4e 45 |P R1,#2....BNE| 00003880 20 20 20 4e 6f 50 6f 72 74 44 6f 77 6e 0d 14 96 | NoPortDown...| 00003890 18 41 44 44 20 20 20 52 34 2c 52 37 2c 52 32 2c |.ADD R4,R7,R2,| 000038a0 4c 53 4c 23 35 0d 14 a0 35 4c 44 52 20 20 20 52 |LSL#5...5LDR R| 000038b0 35 2c 5b 52 34 2c 23 32 38 5d 20 20 20 20 20 20 |5,[R4,#28] | 000038c0 20 20 20 3b 20 48 61 75 74 65 75 72 20 4e 6f 74 | ; Hauteur Not| 000038d0 65 20 41 63 74 75 65 6c 6c 65 0d 14 aa 12 41 44 |e Actuelle....AD| 000038e0 44 20 20 20 52 35 2c 52 35 2c 52 33 0d 14 b4 12 |D R5,R5,R3....| 000038f0 43 4d 50 20 20 20 52 35 2c 23 26 33 46 30 0d 14 |CMP R5,#&3F0..| 00003900 be 12 4d 4f 56 47 54 20 52 35 2c 23 26 33 46 30 |..MOVGT R5,#&3F0| 00003910 0d 14 c8 15 53 54 52 20 20 20 52 35 2c 5b 52 34 |....STR R5,[R4| 00003920 2c 23 32 38 5d 0d 14 d2 36 4c 44 52 20 20 20 52 |,#28]...6LDR R| 00003930 35 2c 5b 52 38 2c 52 35 2c 4c 53 4c 23 32 5d 20 |5,[R8,R5,LSL#2] | 00003940 20 20 20 3b 20 47 65 74 20 70 68 61 73 65 20 69 | ; Get phase i| 00003950 6e 63 72 65 6d 65 6e 74 2e 2e 2e 0d 14 dc 2a 53 |ncrement......*S| 00003960 54 52 20 20 20 52 35 2c 5b 52 34 2c 23 34 5d 20 |TR R5,[R4,#4] | 00003970 20 20 20 20 20 20 20 20 20 3b 20 2e 2e 2e 53 61 | ; ...Sa| 00003980 76 65 20 69 74 0d 14 e6 16 42 20 20 20 20 20 43 |ve it....B C| 00003990 68 65 63 6b 4e 65 78 74 56 6f 78 0d 14 f0 0f 2e |heckNextVox.....| 000039a0 4e 6f 50 6f 72 74 44 6f 77 6e 0d 14 fa 04 0d 15 |NoPortDown......| 000039b0 04 0f 43 4d 50 20 20 20 52 31 2c 23 30 0d 15 0e |..CMP R1,#0...| 000039c0 16 42 4c 45 51 20 20 54 72 6b 5f 41 72 70 65 67 |.BLEQ Trk_Arpeg| 000039d0 67 69 6f 0d 15 18 04 0d 15 22 11 2e 43 68 65 63 |gio......"..Chec| 000039e0 6b 4e 65 78 74 56 6f 78 0d 15 2c 2a 41 44 44 20 |kNextVox..,*ADD | 000039f0 20 20 52 32 2c 52 32 2c 23 31 20 20 20 20 20 20 | R2,R2,#1 | 00003a00 20 20 20 20 20 20 3b 20 4e 65 78 74 20 56 6f 69 | ; Next Voi| 00003a10 63 65 0d 15 36 2c 43 4d 50 20 20 20 52 32 2c 52 |ce..6,CMP R2,R| 00003a20 31 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |11 | 00003a30 3b 20 4c 61 73 74 20 56 6f 69 63 65 20 3f 0d 15 |; Last Voice ?..| 00003a40 40 1a 42 4e 45 20 20 20 43 68 65 63 6b 45 66 66 |@.BNE CheckEff| 00003a50 65 63 74 73 4c 6f 6f 70 0d 15 4a 1a 4c 44 4d 46 |ectsLoop..J.LDMF| 00003a60 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 |D R13!,{R0-R12,P| 00003a70 43 7d 0d 15 54 04 0d 15 5e 11 2e 54 72 6b 5f 41 |C}..T...^..Trk_A| 00003a80 72 70 65 67 67 69 6f 0d 15 68 14 53 54 4d 46 44 |rpeggio..h.STMFD| 00003a90 20 52 31 33 21 2c 7b 52 31 34 7d 0d 15 72 0f 43 | R13!,{R14}..r.C| 00003aa0 4d 50 20 20 20 52 33 2c 23 30 0d 15 7c 15 4c 44 |MP R3,#0..|.LD| 00003ab0 4d 45 51 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d |MEQFD R13!,{PC}.| 00003ac0 15 86 18 4c 44 52 20 20 20 52 30 2c 54 72 6b 5f |...LDR R0,Trk_| 00003ad0 43 6f 75 6e 74 65 72 0d 15 90 0f 43 4d 50 20 20 |Counter....CMP | 00003ae0 20 52 30 2c 23 31 0d 15 9a 13 42 45 51 20 20 20 | R0,#1....BEQ | 00003af0 41 72 70 5f 4c 6f 6f 70 32 0d 15 a4 0f 43 4d 50 |Arp_Loop2....CMP| 00003b00 20 20 20 52 30 2c 23 32 0d 15 ae 13 42 45 51 20 | R0,#2....BEQ | 00003b10 20 20 41 72 70 5f 4c 6f 6f 70 33 0d 15 b8 0f 43 | Arp_Loop3....C| 00003b20 4d 50 20 20 20 52 30 2c 23 33 0d 15 c2 13 42 45 |MP R0,#3....BE| 00003b30 51 20 20 20 41 72 70 5f 4c 6f 6f 70 34 0d 15 cc |Q Arp_Loop4...| 00003b40 0f 43 4d 50 20 20 20 52 30 2c 23 34 0d 15 d6 13 |.CMP R0,#4....| 00003b50 42 45 51 20 20 20 41 72 70 5f 4c 6f 6f 70 32 0d |BEQ Arp_Loop2.| 00003b60 15 e0 0f 43 4d 50 20 20 20 52 30 2c 23 35 0d 15 |...CMP R0,#5..| 00003b70 ea 13 42 45 51 20 20 20 41 72 70 5f 4c 6f 6f 70 |..BEQ Arp_Loop| 00003b80 33 0d 15 f4 13 4c 44 4d 46 44 20 52 31 33 21 2c |3....LDMFD R13!,| 00003b90 7b 50 43 7d 0d 15 fe 04 0d 16 08 0e 2e 41 72 70 |{PC}.........Arp| 00003ba0 5f 4c 6f 6f 70 32 0d 16 12 4b 4d 4f 56 20 20 20 |_Loop2...KMOV | 00003bb0 52 30 2c 52 33 2c 4c 53 52 23 34 20 20 20 20 20 |R0,R3,LSR#4 | 00003bc0 20 20 20 3b 20 52 30 3d 46 69 72 73 74 20 6e 69 | ; R0=First ni| 00003bd0 62 62 6c 65 2c 20 74 68 65 6e 20 61 64 64 20 69 |bble, then add i| 00003be0 74 20 74 6f 20 63 75 72 72 65 6e 74 20 74 6f 6e |t to current ton| 00003bf0 65 0d 16 1c 12 42 20 20 20 20 20 41 72 70 5f 43 |e....B Arp_C| 00003c00 6f 6e 74 0d 16 26 0e 2e 41 72 70 5f 4c 6f 6f 70 |ont..&..Arp_Loop| 00003c10 33 0d 16 30 4a 80 20 20 20 52 30 2c 52 33 2c 23 |3..0J. R0,R3,#| 00003c20 26 30 46 20 20 20 20 20 20 20 20 20 3b 20 52 30 |&0F ; R0| 00003c30 3d 53 65 63 6f 6e 64 20 6e 69 62 62 6c 65 2c 20 |=Second nibble, | 00003c40 74 68 65 6e 20 61 64 64 20 69 74 20 74 6f 20 63 |then add it to c| 00003c50 75 72 72 65 6e 74 20 74 6f 6e 65 0d 16 3a 12 42 |urrent tone..:.B| 00003c60 20 20 20 20 20 41 72 70 5f 43 6f 6e 74 0d 16 44 | Arp_Cont..D| 00003c70 0e 2e 41 72 70 5f 4c 6f 6f 70 34 0d 16 4e 30 4c |..Arp_Loop4..N0L| 00003c80 44 52 20 20 20 52 33 2c 5b 52 31 30 2c 52 32 2c |DR R3,[R10,R2,| 00003c90 4c 53 4c 23 32 5d 20 20 3b 20 50 6c 61 79 20 63 |LSL#2] ; Play c| 00003ca0 75 72 72 65 6e 74 20 74 6f 6e 65 0d 16 58 15 42 |urrent tone..X.B| 00003cb0 20 20 20 20 20 41 72 70 5f 45 6e 64 50 61 72 74 | Arp_EndPart| 00003cc0 0d 16 62 0d 2e 41 72 70 5f 43 6f 6e 74 0d 16 6c |..b..Arp_Cont..l| 00003cd0 19 42 4c 20 20 20 20 47 65 74 5f 50 65 72 69 6f |.BL Get_Perio| 00003ce0 64 73 5f 41 64 72 0d 16 76 1b 4c 44 52 20 20 20 |ds_Adr..v.LDR | 00003cf0 52 31 2c 5b 52 31 30 2c 52 32 2c 4c 53 4c 23 32 |R1,[R10,R2,LSL#2| 00003d00 5d 0d 16 80 16 41 44 44 20 20 20 52 34 2c 52 31 |]....ADD R4,R1| 00003d10 32 2c 23 33 36 2a 34 0d 16 8a 0e 2e 41 72 70 5f |2,#36*4.....Arp_| 00003d20 4c 6f 6f 70 35 0d 16 94 1b 4c 44 52 20 20 20 52 |Loop5....LDR R| 00003d30 33 2c 5b 52 31 32 2c 52 30 2c 4c 53 4c 23 32 5d |3,[R12,R0,LSL#2]| 00003d40 0d 16 9e 15 4c 44 52 20 20 20 52 36 2c 5b 52 31 |....LDR R6,[R1| 00003d50 32 5d 2c 23 34 0d 16 a8 0f 43 4d 50 20 20 20 52 |2],#4....CMP R| 00003d60 36 2c 52 31 0d 16 b2 15 42 45 51 20 20 20 41 72 |6,R1....BEQ Ar| 00003d70 70 5f 45 6e 64 50 61 72 74 0d 16 bc 13 42 20 20 |p_EndPart....B | 00003d80 20 20 20 41 72 70 5f 4c 6f 6f 70 35 0d 16 c6 04 | Arp_Loop5....| 00003d90 0d 16 d0 10 2e 41 72 70 5f 45 6e 64 50 61 72 74 |.....Arp_EndPart| 00003da0 0d 16 da 1a 41 44 44 20 20 20 52 31 32 2c 52 31 |....ADD R12,R1| 00003db0 32 2c 52 30 2c 4c 53 4c 23 32 0d 16 e4 10 43 4d |2,R0,LSL#2....CM| 00003dc0 50 20 20 20 52 31 32 2c 52 34 0d 16 ee 15 4c 44 |P R12,R4....LD| 00003dd0 4d 47 54 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d |MGTFD R13!,{PC}.| 00003de0 16 f8 18 41 44 44 20 20 20 52 34 2c 52 37 2c 52 |...ADD R4,R7,R| 00003df0 32 2c 4c 53 4c 23 35 0d 17 02 0f 43 4d 50 20 20 |2,LSL#5....CMP | 00003e00 20 52 33 2c 23 30 0d 17 0c 15 4c 44 4d 45 51 46 | R3,#0....LDMEQF| 00003e10 44 20 52 31 33 21 2c 7b 50 43 7d 0d 17 16 3b 4c |D R13!,{PC}...;L| 00003e20 44 52 20 20 20 52 35 2c 5b 52 38 2c 52 33 2c 4c |DR R5,[R8,R3,L| 00003e30 53 4c 23 32 5d 20 20 20 20 20 20 20 20 20 3b 20 |SL#2] ; | 00003e40 47 65 74 20 70 68 61 73 65 20 69 6e 63 72 65 6d |Get phase increm| 00003e50 65 6e 74 2e 2e 2e 0d 17 20 45 53 54 52 20 20 20 |ent..... ESTR | 00003e60 52 35 2c 5b 52 34 2c 23 34 5d 20 20 20 20 20 20 |R5,[R4,#4] | 00003e70 20 20 20 20 20 20 20 20 20 3b 20 2e 2e 2e 53 61 | ; ...Sa| 00003e80 76 65 20 69 74 20 69 6e 20 56 6f 69 63 65 73 20 |ve it in Voices | 00003e90 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 17 2a 0f 2e |Infos_Block..*..| 00003ea0 45 6e 64 5f 45 66 66 65 63 74 0d 17 34 13 4c 44 |End_Effect..4.LD| 00003eb0 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 17 3e |MFD R13!,{PC}..>| 00003ec0 04 0d 17 48 11 2e 53 74 65 72 65 6f 5f 54 61 62 |...H..Stereo_Tab| 00003ed0 6c 65 0d 17 52 3f 45 51 55 44 20 2d 31 32 36 3a |le..R?EQUD -126:| 00003ee0 45 51 55 44 20 2d 37 30 3a 45 51 55 44 20 2d 34 |EQUD -70:EQUD -4| 00003ef0 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 34 30 |0:EQUD 0:EQUD 40| 00003f00 3a 45 51 55 44 20 37 30 3a 45 51 55 44 20 31 32 |:EQUD 70:EQUD 12| 00003f10 37 0d 17 5c 04 0d 17 66 18 2e 56 6f 69 63 65 5f |7..\...f..Voice_| 00003f20 43 6f 6e 74 72 6f 6c 5f 42 6c 6f 63 6b 0d 17 70 |Control_Block..p| 00003f30 17 42 20 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 75 |.B Fill_Sound_Bu| 00003f40 66 66 65 72 0d 17 7a 17 42 20 46 69 6c 6c 5f 53 |ffer..z.B Fill_S| 00003f50 6f 75 6e 64 5f 42 75 66 66 65 72 0d 17 84 17 42 |ound_Buffer....B| 00003f60 20 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 75 66 66 | Fill_Sound_Buff| 00003f70 65 72 0d 17 8e 13 4c 44 4d 46 44 20 52 31 33 21 |er....LDMFD R13!| 00003f80 2c 7b 50 43 7d 0d 17 98 13 4c 44 4d 46 44 20 52 |,{PC}....LDMFD R| 00003f90 31 33 21 2c 7b 50 43 7d 0d 17 a2 13 4c 44 4d 46 |13!,{PC}....LDMF| 00003fa0 44 20 52 31 33 21 2c 7b 50 43 7d 0d 17 ac 13 4c |D R13!,{PC}....L| 00003fb0 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 17 |DMFD R13!,{PC}..| 00003fc0 b6 27 45 51 55 44 20 56 6f 69 63 65 5f 4e 61 6d |.'EQUD Voice_Nam| 00003fd0 65 2d 56 6f 69 63 65 5f 43 6f 6e 74 72 6f 6c 5f |e-Voice_Control_| 00003fe0 42 6c 6f 63 6b 0d 17 c0 0f 2e 56 6f 69 63 65 5f |Block.....Voice_| 00003ff0 4e 61 6d 65 0d 17 ca 1f 45 51 55 53 20 22 54 72 |Name....EQUS "Tr| 00004000 61 63 6b 65 72 22 3a 45 51 55 42 20 30 3a 41 4c |acker":EQUB 0:AL| 00004010 49 47 4e 0d 17 d4 04 0d 17 de 29 3b 20 2a 2d 2d |IGN.......); *--| 00004020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004030 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00004040 0d 17 e8 29 3b 20 2a 20 20 20 20 49 6e 69 74 20 |...); * Init | 00004050 54 72 61 63 6b 65 72 20 53 6f 75 6e 64 20 53 79 |Tracker Sound Sy| 00004060 73 74 65 6d 20 20 20 20 2a 0d 17 f2 29 3b 20 2a |stem *...); *| 00004070 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004090 2d 2a 0d 17 fc 04 0d 18 06 16 2e 49 6e 69 74 5f |-*.........Init_| 000040a0 53 6f 75 6e 64 5f 53 79 73 74 65 6d 0d 18 10 1b |Sound_System....| 000040b0 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |STMFD R13!,{R0-R| 000040c0 31 32 2c 52 31 34 7d 0d 18 1a 18 4c 44 52 20 20 |12,R14}....LDR | 000040d0 20 52 31 32 2c 54 72 6b 5f 56 6f 69 63 65 73 0d | R12,Trk_Voices.| 000040e0 18 24 04 0d 18 2e 20 41 44 52 20 20 20 52 30 2c |.$.... ADR R0,| 000040f0 56 6f 69 63 65 5f 43 6f 6e 74 72 6f 6c 5f 42 6c |Voice_Control_Bl| 00004100 6f 63 6b 0d 18 38 0f 4d 4f 56 20 20 20 52 31 2c |ock..8.MOV R1,| 00004110 23 30 0d 18 42 1e 53 57 49 20 20 20 22 53 6f 75 |#0..B.SWI "Sou| 00004120 6e 64 5f 49 6e 73 74 61 6c 6c 56 6f 69 63 65 22 |nd_InstallVoice"| 00004130 0d 18 4c 1b 53 54 52 20 20 20 52 31 2c 4f 6c 64 |..L.STR R1,Old| 00004140 5f 56 6f 69 63 65 5f 53 6c 6f 74 0d 18 56 04 0d |_Voice_Slot..V..| 00004150 18 60 10 4d 4f 56 20 20 20 52 31 30 2c 23 31 0d |.`.MOV R10,#1.| 00004160 18 6a 16 41 44 52 20 20 20 52 39 2c 4f 6c 64 56 |.j.ADR R9,OldV| 00004170 6f 69 63 65 73 0d 18 74 12 53 55 42 20 20 20 52 |oices..t.SUB R| 00004180 39 2c 52 39 2c 23 34 0d 18 7e 18 2e 56 6f 69 63 |9,R9,#4..~..Voic| 00004190 65 73 5f 45 78 74 65 72 6d 69 6e 61 74 6f 72 0d |es_Exterminator.| 000041a0 18 88 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d |...MOV R0,R10.| 000041b0 18 92 0f 4d 4f 56 20 20 20 52 31 2c 23 30 0d 18 |...MOV R1,#0..| 000041c0 9c 1d 53 57 49 20 20 20 22 53 6f 75 6e 64 5f 41 |..SWI "Sound_A| 000041d0 74 74 61 63 68 56 6f 69 63 65 22 0d 18 a6 1b 53 |ttachVoice"....S| 000041e0 54 52 20 20 20 52 31 2c 5b 52 39 2c 52 31 30 2c |TR R1,[R9,R10,| 000041f0 4c 53 4c 23 32 5d 0d 18 b0 14 41 44 44 20 20 20 |LSL#2]....ADD | 00004200 52 31 30 2c 52 31 30 2c 23 31 0d 18 ba 10 43 4d |R10,R10,#1....CM| 00004210 50 20 20 20 52 31 30 2c 23 38 0d 18 c4 1d 42 4c |P R10,#8....BL| 00004220 45 20 20 20 56 6f 69 63 65 73 5f 45 78 74 65 72 |E Voices_Exter| 00004230 6d 69 6e 61 74 6f 72 0d 18 ce 04 0d 18 d8 10 4d |minator........M| 00004240 4f 56 20 20 20 52 31 30 2c 23 31 0d 18 e2 12 2e |OV R10,#1.....| 00004250 49 6e 69 74 41 6c 6c 56 6f 69 63 65 73 0d 18 ec |InitAllVoices...| 00004260 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 18 f6 |.MOV R0,R10...| 00004270 17 41 44 52 20 20 20 52 31 2c 56 6f 69 63 65 5f |.ADR R1,Voice_| 00004280 4e 61 6d 65 0d 19 00 22 53 57 49 20 20 20 22 53 |Name..."SWI "S| 00004290 6f 75 6e 64 5f 41 74 74 61 63 68 4e 61 6d 65 64 |ound_AttachNamed| 000042a0 56 6f 69 63 65 22 0d 19 0a 14 41 44 44 20 20 20 |Voice"....ADD | 000042b0 52 31 30 2c 52 31 30 2c 23 31 0d 19 14 11 43 4d |R10,R10,#1....CM| 000042c0 50 20 20 20 52 31 30 2c 52 31 32 0d 19 1e 17 42 |P R10,R12....B| 000042d0 4c 45 20 20 20 49 6e 69 74 41 6c 6c 56 6f 69 63 |LE InitAllVoic| 000042e0 65 73 0d 19 28 04 0d 19 32 17 41 44 52 20 20 20 |es..(...2.ADR | 000042f0 52 37 2c 4f 6c 64 53 74 65 72 65 6f 73 0d 19 3c |R7,OldStereos..<| 00004300 1a 41 44 52 20 20 20 52 31 30 2c 53 74 65 72 65 |.ADR R10,Stere| 00004310 6f 5f 54 61 62 6c 65 0d 19 46 0f 4d 4f 56 20 20 |o_Table..F.MOV | 00004320 20 52 39 2c 23 31 0d 19 50 14 2e 53 65 74 5f 53 | R9,#1..P..Set_S| 00004330 74 65 72 65 6f 5f 4c 6f 6f 70 0d 19 5a 0f 4d 4f |tereo_Loop..Z.MO| 00004340 56 20 20 20 52 30 2c 52 39 0d 19 64 15 4c 44 52 |V R0,R9..d.LDR| 00004350 42 20 20 52 35 2c 5b 52 31 31 5d 2c 23 31 0d 19 |B R5,[R11],#1..| 00004360 6e 12 53 55 42 53 20 20 52 35 2c 52 35 2c 23 31 |n.SUBS R5,R5,#1| 00004370 0d 19 78 0f 4d 4f 56 4c 54 20 52 35 2c 23 30 0d |..x.MOVLT R5,#0.| 00004380 19 82 1b 4c 44 52 20 20 20 52 31 2c 5b 52 31 30 |...LDR R1,[R10| 00004390 2c 52 35 2c 4c 53 4c 23 32 5d 0d 19 8c 18 53 57 |,R5,LSL#2]....SW| 000043a0 49 20 20 20 22 53 6f 75 6e 64 5f 53 74 65 72 65 |I "Sound_Stere| 000043b0 6f 22 0d 19 96 14 53 54 52 42 20 20 52 31 2c 5b |o"....STRB R1,[| 000043c0 52 37 5d 2c 23 31 0d 19 a0 12 41 44 44 20 20 20 |R7],#1....ADD | 000043d0 52 39 2c 52 39 2c 23 31 0d 19 aa 10 43 4d 50 20 |R9,R9,#1....CMP | 000043e0 20 20 52 39 2c 52 31 32 0d 19 b4 19 42 4c 45 20 | R9,R12....BLE | 000043f0 20 20 53 65 74 5f 53 74 65 72 65 6f 5f 4c 6f 6f | Set_Stereo_Loo| 00004400 70 0d 19 be 04 0d 19 c8 2e 4d 4f 56 20 20 20 52 |p........MOV R| 00004410 30 2c 52 31 32 20 20 20 20 20 20 20 20 20 20 20 |0,R12 | 00004420 20 20 20 20 3b 20 56 6f 69 63 65 73 20 6e 75 6d | ; Voices num| 00004430 62 65 72 0d 19 d2 42 4d 4f 56 20 20 20 52 31 2c |ber...BMOV R1,| 00004440 23 32 30 38 20 20 20 20 20 20 20 20 20 20 20 20 |#208 | 00004450 20 20 3b 20 42 75 66 66 65 72 20 6c 65 6e 67 74 | ; Buffer lengt| 00004460 68 20 69 6e 20 62 79 74 65 20 70 65 72 20 63 68 |h in byte per ch| 00004470 61 6e 6e 65 6c 0d 19 dc 40 4d 4f 56 20 20 20 52 |annel...@MOV R| 00004480 32 2c 23 53 61 6d 70 6c 65 5f 52 61 74 65 20 20 |2,#Sample_Rate | 00004490 20 20 20 20 3b 20 53 61 6d 70 6c 65 20 52 61 74 | ; Sample Rat| 000044a0 65 20 28 33 34 75 73 20 3d 20 32 39 2e 34 31 31 |e (34us = 29.411| 000044b0 20 4b 68 7a 29 0d 19 e6 0f 4d 4f 56 20 20 20 52 | Khz)....MOV R| 000044c0 33 2c 23 30 0d 19 f0 0f 4d 4f 56 20 20 20 52 34 |3,#0....MOV R4| 000044d0 2c 23 30 0d 19 fa 1b 53 57 49 20 20 20 22 53 6f |,#0....SWI "So| 000044e0 75 6e 64 5f 43 6f 6e 66 69 67 75 72 65 22 0d 1a |und_Configure"..| 000044f0 04 19 41 44 52 20 20 20 52 39 2c 4f 6c 64 43 6f |..ADR R9,OldCo| 00004500 6e 66 69 67 75 72 65 0d 1a 0e 14 53 54 4d 49 41 |nfigure....STMIA| 00004510 20 52 39 2c 7b 52 30 2d 52 34 7d 0d 1a 18 04 0d | R9,{R0-R4}.....| 00004520 1a 22 10 4d 4f 56 20 20 20 52 38 2c 52 31 32 0d |.".MOV R8,R12.| 00004530 1a 2c 13 2e 53 6f 75 6e 64 41 6c 6c 56 6f 69 63 |.,..SoundAllVoic| 00004540 65 73 0d 1a 36 0f 4d 4f 56 20 20 20 52 30 2c 52 |es..6.MOV R0,R| 00004550 38 0d 1a 40 10 4d 56 4e 20 20 20 52 31 2c 23 32 |8..@.MVN R1,#2| 00004560 30 0d 1a 4a 11 4d 4f 56 20 20 20 52 32 2c 23 26 |0..J.MOV R2,#&| 00004570 46 30 0d 1a 54 11 4d 4f 56 20 20 20 52 33 2c 23 |F0..T.MOV R3,#| 00004580 26 46 46 0d 1a 5e 19 53 57 49 20 20 20 22 53 6f |&FF..^.SWI "So| 00004590 75 6e 64 5f 43 6f 6e 74 72 6f 6c 22 0d 1a 68 12 |und_Control"..h.| 000045a0 53 55 42 53 20 20 52 38 2c 52 38 2c 23 31 0d 1a |SUBS R8,R8,#1..| 000045b0 72 18 42 47 54 20 20 20 53 6f 75 6e 64 41 6c 6c |r.BGT SoundAll| 000045c0 56 6f 69 63 65 73 0d 1a 7c 1b 4c 44 4d 46 44 20 |Voices..|.LDMFD | 000045d0 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d |R13!,{R0-R12,PC}| 000045e0 5e 0d 1a 86 04 0d 1a 90 0e 2e 4f 6c 64 56 6f 69 |^.........OldVoi| 000045f0 63 65 73 0d 1a 9a 1f 45 51 55 44 20 30 3a 45 51 |ces....EQUD 0:EQ| 00004600 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 |UD 0:EQUD 0:EQUD| 00004610 20 30 0d 1a a4 1f 45 51 55 44 20 30 3a 45 51 55 | 0....EQUD 0:EQU| 00004620 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 00004630 30 0d 1a ae 11 2e 4f 6c 64 43 6f 6e 66 69 67 75 |0.....OldConfigu| 00004640 72 65 0d 1a b8 26 45 51 55 44 20 30 3a 45 51 55 |re...&EQUD 0:EQU| 00004650 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 00004660 30 3a 45 51 55 44 20 30 0d 1a c2 0f 2e 4f 6c 64 |0:EQUD 0.....Old| 00004670 53 74 65 72 65 6f 73 0d 1a cc 11 45 51 55 44 20 |Stereos....EQUD | 00004680 30 3a 45 51 55 44 20 30 0d 1a d6 04 0d 1a e0 28 |0:EQUD 0.......(| 00004690 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 000046a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000046b0 2d 2d 2d 2a 0d 1a ea 28 3b 20 2a 20 20 45 78 69 |---*...(; * Exi| 000046c0 74 20 6f 66 20 54 72 61 63 6b 65 72 20 53 6f 75 |t of Tracker Sou| 000046d0 6e 64 20 53 79 73 74 65 6d 20 20 2a 0d 1a f4 28 |nd System *...(| 000046e0 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 000046f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004700 2d 2d 2d 2a 0d 1a fe 04 0d 1b 08 12 2e 54 72 6b |---*.........Trk| 00004710 5f 43 6c 6f 73 65 5f 41 6c 6c 0d 1b 12 1b 53 54 |_Close_All....ST| 00004720 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 |MFD R13!,{R0-R12| 00004730 2c 52 31 34 7d 0d 1b 1c 0f 4d 4f 56 20 20 20 52 |,R14}....MOV R| 00004740 30 2c 23 30 0d 1b 26 1b 4c 44 52 20 20 20 52 31 |0,#0..&.LDR R1| 00004750 2c 4f 6c 64 5f 56 6f 69 63 65 5f 53 6c 6f 74 0d |,Old_Voice_Slot.| 00004760 1b 30 1d 53 57 49 20 20 20 22 53 6f 75 6e 64 5f |.0.SWI "Sound_| 00004770 52 65 6d 6f 76 65 56 6f 69 63 65 22 0d 1b 3a 04 |RemoveVoice"..:.| 00004780 0d 1b 44 18 4c 44 52 20 20 20 52 31 32 2c 54 72 |..D.LDR R12,Tr| 00004790 6b 5f 56 6f 69 63 65 73 0d 1b 4e 10 4d 4f 56 20 |k_Voices..N.MOV | 000047a0 20 20 52 31 30 2c 23 31 0d 1b 58 16 41 44 52 20 | R10,#1..X.ADR | 000047b0 20 20 52 39 2c 4f 6c 64 56 6f 69 63 65 73 0d 1b | R9,OldVoices..| 000047c0 62 12 53 55 42 20 20 20 52 39 2c 52 39 2c 23 34 |b.SUB R9,R9,#4| 000047d0 0d 1b 6c 16 2e 44 65 74 61 63 68 5f 54 72 6b 5f |..l..Detach_Trk_| 000047e0 56 6f 69 63 65 73 0d 1b 76 10 4d 4f 56 20 20 20 |Voices..v.MOV | 000047f0 52 30 2c 52 31 30 0d 1b 80 1b 4c 44 52 20 20 20 |R0,R10....LDR | 00004800 52 31 2c 5b 52 39 2c 52 31 30 2c 4c 53 4c 23 32 |R1,[R9,R10,LSL#2| 00004810 5d 0d 1b 8a 1d 53 57 49 20 20 20 22 53 6f 75 6e |]....SWI "Soun| 00004820 64 5f 41 74 74 61 63 68 56 6f 69 63 65 22 0d 1b |d_AttachVoice"..| 00004830 94 14 41 44 44 20 20 20 52 31 30 2c 52 31 30 2c |..ADD R10,R10,| 00004840 23 31 0d 1b 9e 11 43 4d 50 20 20 20 52 31 30 2c |#1....CMP R10,| 00004850 52 31 32 0d 1b a8 1b 42 4c 45 20 20 20 44 65 74 |R12....BLE Det| 00004860 61 63 68 5f 54 72 6b 5f 56 6f 69 63 65 73 0d 1b |ach_Trk_Voices..| 00004870 b2 04 0d 1b bc 17 41 44 52 20 20 20 52 39 2c 4f |......ADR R9,O| 00004880 6c 64 53 74 65 72 65 6f 73 0d 1b c6 10 4d 4f 56 |ldStereos....MOV| 00004890 20 20 20 52 31 30 2c 23 31 0d 1b d0 14 2e 52 65 | R10,#1.....Re| 000048a0 73 74 6f 72 65 5f 53 74 65 72 65 6f 73 0d 1b da |store_Stereos...| 000048b0 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 1b e4 |.MOV R0,R10...| 000048c0 14 4c 44 52 42 20 20 52 31 2c 5b 52 39 5d 2c 23 |.LDRB R1,[R9],#| 000048d0 31 0d 1b ee 18 53 57 49 20 20 20 22 53 6f 75 6e |1....SWI "Soun| 000048e0 64 5f 53 74 65 72 65 6f 22 0d 1b f8 14 41 44 44 |d_Stereo"....ADD| 000048f0 20 20 20 52 31 30 2c 52 31 30 2c 23 31 0d 1c 02 | R10,R10,#1...| 00004900 11 43 4d 50 20 20 20 52 31 30 2c 52 31 32 0d 1c |.CMP R10,R12..| 00004910 0c 19 42 4c 45 20 20 20 52 65 73 74 6f 72 65 5f |..BLE Restore_| 00004920 53 74 65 72 65 6f 73 0d 1c 16 04 0d 1c 20 19 41 |Stereos...... .A| 00004930 44 52 20 20 20 52 39 2c 4f 6c 64 43 6f 6e 66 69 |DR R9,OldConfi| 00004940 67 75 72 65 0d 1c 2a 14 4c 44 4d 49 41 20 52 39 |gure..*.LDMIA R9| 00004950 2c 7b 52 30 2d 52 34 7d 0d 1c 34 1b 53 57 49 20 |,{R0-R4}..4.SWI | 00004960 20 20 22 53 6f 75 6e 64 5f 43 6f 6e 66 69 67 75 | "Sound_Configu| 00004970 72 65 22 0d 1c 3e 1b 4c 44 4d 46 44 20 52 31 33 |re"..>.LDMFD R13| 00004980 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 5e 0d 1c |!,{R0-R12,PC}^..| 00004990 48 04 0d 1c 52 13 2e 4f 6c 64 5f 56 6f 69 63 65 |H...R..Old_Voice| 000049a0 5f 53 6c 6f 74 0d 1c 5c 0a 45 51 55 44 20 30 0d |_Slot..\.EQUD 0.| 000049b0 1c 66 14 2e 47 65 74 5f 50 65 72 69 6f 64 73 5f |.f..Get_Periods_| 000049c0 41 64 72 0d 1c 70 1e 41 44 52 20 20 20 52 31 32 |Adr..p.ADR R12| 000049d0 2c 54 72 6b 5f 50 65 72 69 6f 64 73 5f 4c 69 73 |,Trk_Periods_Lis| 000049e0 74 0d 1c 7a 10 4d 4f 56 20 20 20 50 43 2c 52 31 |t..z.MOV PC,R1| 000049f0 34 0d 1c 84 15 2e 54 72 6b 5f 50 65 72 69 6f 64 |4.....Trk_Period| 00004a00 73 5f 4c 69 73 74 0d 1c 8e 2f 45 51 55 44 20 26 |s_List.../EQUD &| 00004a10 30 33 35 38 3a 45 51 55 44 20 26 30 33 32 38 3a |0358:EQUD &0328:| 00004a20 45 51 55 44 20 26 30 32 46 41 3a 45 51 55 44 20 |EQUD &02FA:EQUD | 00004a30 26 30 32 44 30 0d 1c 98 2f 45 51 55 44 20 26 30 |&02D0.../EQUD &0| 00004a40 32 41 36 3a 45 51 55 44 20 26 30 32 38 30 3a 45 |2A6:EQUD &0280:E| 00004a50 51 55 44 20 26 30 32 35 43 3a 45 51 55 44 20 26 |QUD &025C:EQUD &| 00004a60 30 32 33 41 0d 1c a2 2f 45 51 55 44 20 26 30 32 |023A.../EQUD &02| 00004a70 31 41 3a 45 51 55 44 20 26 30 31 46 43 3a 45 51 |1A:EQUD &01FC:EQ| 00004a80 55 44 20 26 30 31 45 30 3a 45 51 55 44 20 26 30 |UD &01E0:EQUD &0| 00004a90 31 43 35 0d 1c ac 2f 45 51 55 44 20 26 30 31 41 |1C5.../EQUD &01A| 00004aa0 43 3a 45 51 55 44 20 26 30 31 39 34 3a 45 51 55 |C:EQUD &0194:EQU| 00004ab0 44 20 26 30 31 37 44 3a 45 51 55 44 20 26 30 31 |D &017D:EQUD &01| 00004ac0 36 38 0d 1c b6 2f 45 51 55 44 20 26 30 31 35 33 |68.../EQUD &0153| 00004ad0 3a 45 51 55 44 20 26 30 31 34 30 3a 45 51 55 44 |:EQUD &0140:EQUD| 00004ae0 20 26 30 31 32 45 3a 45 51 55 44 20 26 30 31 31 | &012E:EQUD &011| 00004af0 44 0d 1c c0 2f 45 51 55 44 20 26 30 31 30 44 3a |D.../EQUD &010D:| 00004b00 45 51 55 44 20 26 30 30 46 45 3a 45 51 55 44 20 |EQUD &00FE:EQUD | 00004b10 26 30 30 46 30 3a 45 51 55 44 20 26 30 30 45 32 |&00F0:EQUD &00E2| 00004b20 0d 1c ca 2f 45 51 55 44 20 26 30 30 44 36 3a 45 |.../EQUD &00D6:E| 00004b30 51 55 44 20 26 30 30 43 41 3a 45 51 55 44 20 26 |QUD &00CA:EQUD &| 00004b40 30 30 42 45 3a 45 51 55 44 20 26 30 30 42 34 0d |00BE:EQUD &00B4.| 00004b50 1c d4 2f 45 51 55 44 20 26 30 30 41 41 3a 45 51 |../EQUD &00AA:EQ| 00004b60 55 44 20 26 30 30 41 30 3a 45 51 55 44 20 26 30 |UD &00A0:EQUD &0| 00004b70 30 39 37 3a 45 51 55 44 20 26 30 30 38 46 0d 1c |097:EQUD &008F..| 00004b80 de 2f 45 51 55 44 20 26 30 30 38 37 3a 45 51 55 |./EQUD &0087:EQU| 00004b90 44 20 26 30 30 37 46 3a 45 51 55 44 20 26 30 30 |D &007F:EQUD &00| 00004ba0 37 38 3a 45 51 55 44 20 26 30 30 37 31 0d 1c e8 |78:EQUD &0071...| 00004bb0 04 0d 1c f2 3a 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d |....:; *--------| 00004bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004be0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 1c fc 3a 3b |----------*...:;| 00004bf0 20 2a 20 20 20 20 4c 6f 63 61 74 65 20 61 20 54 | * Locate a T| 00004c00 46 46 20 28 54 72 61 63 6b 65 72 20 46 69 6c 65 |FF (Tracker File| 00004c10 20 46 6f 72 6d 61 74 20 21 29 20 43 68 75 6e 6b | Format !) Chunk| 00004c20 20 20 20 20 2a 0d 1d 06 3a 3b 20 2a 2d 2d 2d 2d | *...:; *----| 00004c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004c50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00004c60 1d 10 3a 3b 20 2a 20 20 45 6e 74 72 79 20 70 61 |..:; * Entry pa| 00004c70 72 61 6d 65 74 65 72 73 20 3d 20 20 20 20 20 20 |rameters = | 00004c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004c90 20 20 20 20 20 20 20 20 2a 0d 1d 1a 3a 3b 20 2a | *...:; *| 00004ca0 20 20 52 30 20 3d 3e 20 50 72 65 76 69 6f 75 73 | R0 => Previous| 00004cb0 20 43 68 75 6e 6b 20 6f 72 20 42 61 73 65 20 41 | Chunk or Base A| 00004cc0 64 64 72 65 73 73 20 20 20 20 20 20 20 20 20 20 |ddress | 00004cd0 20 20 2a 0d 1d 24 3a 3b 20 2a 20 20 52 34 20 3d | *..$:; * R4 =| 00004ce0 20 20 43 68 75 6e 63 6b 20 6e 61 6d 65 20 20 20 | Chunck name | 00004cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004d00 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 1d 2e | *...| 00004d10 3a 3b 20 2a 20 20 52 39 20 3d 3e 20 45 6e 66 20 |:; * R9 => Enf | 00004d20 6f 66 20 46 69 6c 65 20 41 64 64 72 65 73 73 20 |of File Address | 00004d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004d40 20 20 20 20 20 20 2a 0d 1d 38 3a 3b 20 2a 2d 2d | *..8:; *--| 00004d50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004d80 2a 0d 1d 42 04 0d 1d 4c 0f 2e 53 65 61 72 63 68 |*..B...L..Search| 00004d90 5f 54 46 46 0d 1d 56 15 4c 44 4d 49 41 20 52 30 |_TFF..V.LDMIA R0| 00004da0 21 2c 7b 52 32 2d 52 33 7d 0d 1d 60 0f 43 4d 50 |!,{R2-R3}..`.CMP| 00004db0 20 20 20 52 32 2c 52 34 0d 1d 6a 12 41 44 44 4e | R2,R4..j.ADDN| 00004dc0 45 20 52 30 2c 52 30 2c 52 33 0d 1d 74 0d ec 51 |E R0,R0,R3..t..Q| 00004dd0 20 50 43 2c 52 31 34 0d 1d 7e 2b 43 4d 50 20 20 | PC,R14..~+CMP | 00004de0 20 52 30 2c 52 39 20 20 20 20 20 20 20 20 20 20 | R0,R9 | 00004df0 20 20 20 3b 20 45 6e 64 20 4f 66 20 46 69 6c 65 | ; End Of File| 00004e00 20 3f 0d 1d 88 3e 4d 4f 56 47 45 20 50 43 2c 52 | ?...>MOVGE PC,R| 00004e10 31 34 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 |14 ; | 00004e20 53 68 6f 75 6c 64 20 64 69 73 70 6c 61 79 20 61 |Should display a| 00004e30 6e 20 65 72 72 6f 72 20 68 65 72 65 20 28 21 29 |n error here (!)| 00004e40 0d 1d 92 14 42 20 20 20 20 20 53 65 61 72 63 68 |....B Search| 00004e50 5f 54 46 46 0d 1d 9c 17 2e 47 65 74 5f 50 61 74 |_TFF.....Get_Pat| 00004e60 74 65 72 6e 73 5f 54 61 62 6c 65 0d 1d a6 1c 41 |terns_Table....A| 00004e70 44 52 20 20 20 52 31 31 2c 50 61 74 74 65 72 6e |DR R11,Pattern| 00004e80 73 5f 54 61 62 6c 65 0d 1d b0 10 4d 4f 56 20 20 |s_Table....MOV | 00004e90 20 50 43 2c 52 31 34 0d 1d ba 04 0d 1d c4 13 2e | PC,R14.........| 00004ea0 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 0d 1d |Patterns_Table..| 00004eb0 ce 18 5d 3a 50 25 2b 3d 32 35 36 3a 5b 4f 50 54 |..]:P%+=256:[OPT| 00004ec0 20 50 61 73 73 25 0d 1d d8 04 0d 1d e2 46 3b 20 | Pass%.......F; | 00004ed0 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00004ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004f00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00004f10 0d 1d ec 46 3b 20 2a 20 20 46 69 6c 6c 20 73 6f |...F; * Fill so| 00004f20 75 6e 64 20 62 75 66 66 65 72 20 77 69 74 68 6f |und buffer witho| 00004f30 75 74 20 6c 6f 6f 70 20 28 4e 6f 74 20 62 65 61 |ut loop (Not bea| 00004f40 75 74 69 66 75 6c 6c 20 62 75 74 20 66 61 73 74 |utifull but fast| 00004f50 65 72 29 20 20 2a 0d 1d f6 46 3b 20 2a 2d 2d 2d |er) *...F; *---| 00004f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004f90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 1e 00 04 |-----------*....| 00004fa0 0d 1e 0a 0e 2e 46 75 6c 6c 5f 46 69 6c 6c 0d 1e |.....Full_Fill..| 00004fb0 14 05 5d 0d 1e 1e 15 e3 20 46 69 6c 6c 53 42 25 |..]..... FillSB%| 00004fc0 3d 31 20 b8 20 32 30 38 0d 1e 28 0e 5b 4f 50 54 |=1 . 208..(.[OPT| 00004fd0 20 50 61 73 73 25 0d 1e 32 1b 4c 44 52 42 20 20 | Pass%..2.LDRB | 00004fe0 52 38 2c 5b 52 34 2c 52 30 2c 4c 53 52 23 31 36 |R8,[R4,R0,LSR#16| 00004ff0 5d 0d 1e 3c 12 53 55 42 53 20 20 52 38 2c 52 38 |]..<.SUBS R8,R8| 00005000 2c 52 35 0d 1e 46 0f 4d 4f 56 4d 49 20 52 38 2c |,R5..F.MOVMI R8,| 00005010 23 30 0d 1e 50 16 53 54 52 42 20 20 52 38 2c 5b |#0..P.STRB R8,[| 00005020 52 31 32 5d 2c 52 31 31 0d 1e 5a 12 41 44 44 20 |R12],R11..Z.ADD | 00005030 20 20 52 30 2c 52 30 2c 52 31 0d 1e 64 05 5d 0d | R0,R0,R1..d.].| 00005040 1e 6e 05 ed 0d 1e 78 0e 5b 4f 50 54 20 50 61 73 |.n....x.[OPT Pas| 00005050 73 25 0d 1e 82 11 53 54 52 20 20 20 52 30 2c 5b |s%....STR R0,[| 00005060 52 39 5d 0d 1e 8c 17 4d 4f 56 20 20 20 52 30 2c |R9]....MOV R0,| 00005070 23 25 30 30 30 30 31 30 30 30 0d 1e 96 13 4c 44 |#%00001000....LD| 00005080 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 1e a0 |MFD R13!,{PC}...| 00005090 04 0d 1e aa 04 0d 1e b4 18 2e 47 65 74 5f 46 72 |..........Get_Fr| 000050a0 65 71 75 65 6e 63 65 5f 54 61 62 6c 65 0d 1e be |equence_Table...| 000050b0 43 41 44 52 20 20 20 52 38 2c 46 72 65 71 75 65 |CADR R8,Freque| 000050c0 6e 63 65 5f 54 61 62 6c 65 31 20 20 20 20 3b 20 |nce_Table1 ; | 000050d0 3d 3e 20 46 72 65 71 20 54 61 62 6c 65 20 46 6f |=> Freq Table Fo| 000050e0 72 20 31 20 26 20 32 20 43 68 61 6e 6e 65 6c 73 |r 1 & 2 Channels| 000050f0 0d 1e c8 10 43 4d 50 20 20 20 52 31 31 2c 23 33 |....CMP R11,#3| 00005100 0d 1e d2 43 41 44 44 47 45 20 52 38 2c 52 38 2c |...CADDGE R8,R8,| 00005110 23 34 30 39 36 20 20 20 20 20 20 20 20 20 20 20 |#4096 | 00005120 20 3b 20 3d 3e 20 46 72 65 71 20 54 61 62 6c 65 | ; => Freq Table| 00005130 20 46 6f 72 20 33 20 26 20 34 20 43 68 61 6e 6e | For 3 & 4 Chann| 00005140 65 6c 73 0d 1e dc 10 43 4d 50 20 20 20 52 31 31 |els....CMP R11| 00005150 2c 23 35 0d 1e e6 43 41 44 44 47 45 20 52 38 2c |,#5...CADDGE R8,| 00005160 52 38 2c 23 34 30 39 36 20 20 20 20 20 20 20 20 |R8,#4096 | 00005170 20 20 20 20 3b 20 3d 3e 20 46 72 65 71 20 54 61 | ; => Freq Ta| 00005180 62 6c 65 20 46 6f 72 20 35 20 2d 20 38 20 43 68 |ble For 5 - 8 Ch| 00005190 61 6e 6e 65 6c 73 0d 1e f0 10 4d 4f 56 20 20 20 |annels....MOV | 000051a0 50 43 2c 52 31 34 0d 1e fa 04 0d 1f 04 15 2e 46 |PC,R14.........F| 000051b0 72 65 71 75 65 6e 63 65 5f 54 61 62 6c 65 31 0d |requence_Table1.| 000051c0 1f 0e 19 5d 3a 50 25 2b 3d 34 30 39 36 3a 5b 4f |...]:P%+=4096:[O| 000051d0 50 54 20 50 61 73 73 25 0d 1f 18 15 2e 46 72 65 |PT Pass%.....Fre| 000051e0 71 75 65 6e 63 65 5f 54 61 62 6c 65 32 0d 1f 22 |quence_Table2.."| 000051f0 19 5d 3a 50 25 2b 3d 34 30 39 36 3a 5b 4f 50 54 |.]:P%+=4096:[OPT| 00005200 20 50 61 73 73 25 0d 1f 2c 15 2e 46 72 65 71 75 | Pass%..,..Frequ| 00005210 65 6e 63 65 5f 54 61 62 6c 65 33 0d 1f 36 19 5d |ence_Table3..6.]| 00005220 3a 50 25 2b 3d 34 30 39 36 3a 5b 4f 50 54 20 50 |:P%+=4096:[OPT P| 00005230 61 73 73 25 0d 1f 40 04 0d 1f 4a 11 2e 47 65 74 |ass%..@...J..Get| 00005240 5f 45 6e 64 5f 41 64 64 72 0d 1f 54 15 41 44 52 |_End_Addr..T.ADR| 00005250 20 20 20 52 32 2c 45 6e 64 5f 43 6f 64 65 0d 1f | R2,End_Code..| 00005260 5e 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 1f |^.MOV PC,R14..| 00005270 68 04 0d 1f 72 0d 2e 45 6e 64 5f 43 6f 64 65 0d |h...r..End_Code.| 00005280 1f 7c 05 5d 0d 1f 86 05 ed 0d 1f 90 05 e1 0d 1f |.|.]............| 00005290 9a 04 0d 1f a4 04 0d 1f ae 04 0d 1f b8 0a dd f2 |................| 000052a0 69 6e 69 74 0d 1f c2 04 0d 1f cc 19 20 20 e3 20 |init........ . | 000052b0 50 65 72 69 6f 64 73 25 3d 31 20 b8 20 31 30 32 |Periods%=1 . 102| 000052c0 30 0d 1f d6 4d 20 20 20 20 46 72 65 71 75 65 6e |0...M Frequen| 000052d0 63 65 5f 54 61 62 6c 65 31 21 28 50 65 72 69 6f |ce_Table1!(Perio| 000052e0 64 73 25 2a 34 29 3d 28 28 33 35 37 35 38 37 32 |ds%*4)=((3575872| 000052f0 2f 50 65 72 69 6f 64 73 25 29 2f 28 31 30 30 30 |/Periods%)/(1000| 00005300 30 30 30 2f 33 37 29 29 2a 36 30 30 30 30 0d 1f |000/37))*60000..| 00005310 e0 07 20 20 ed 0d 1f ea 06 20 20 0d 1f f4 19 20 |.. ..... .... | 00005320 20 e3 20 50 65 72 69 6f 64 73 25 3d 31 20 b8 20 | . Periods%=1 . | 00005330 31 30 32 30 0d 1f fe 56 20 20 20 20 46 72 65 71 |1020...V Freq| 00005340 75 65 6e 63 65 5f 54 61 62 6c 65 32 21 28 50 65 |uence_Table2!(Pe| 00005350 72 69 6f 64 73 25 2a 34 29 3d 28 28 33 35 37 35 |riods%*4)=((3575| 00005360 38 37 32 2f 50 65 72 69 6f 64 73 25 29 2f 28 31 |872/Periods%)/(1| 00005370 30 30 30 30 30 30 2f 53 61 6d 70 6c 65 5f 52 61 |000000/Sample_Ra| 00005380 74 65 29 29 2a 36 30 30 30 30 0d 20 08 07 20 20 |te))*60000. .. | 00005390 ed 0d 20 12 06 20 20 0d 20 1c 19 20 20 e3 20 50 |.. .. . .. . P| 000053a0 65 72 69 6f 64 73 25 3d 31 20 b8 20 31 30 32 30 |eriods%=1 . 1020| 000053b0 0d 20 26 4d 20 20 20 20 46 72 65 71 75 65 6e 63 |. &M Frequenc| 000053c0 65 5f 54 61 62 6c 65 33 21 28 50 65 72 69 6f 64 |e_Table3!(Period| 000053d0 73 25 2a 34 29 3d 28 28 33 35 37 35 38 37 32 2f |s%*4)=((3575872/| 000053e0 50 65 72 69 6f 64 73 25 29 2f 28 31 30 30 30 30 |Periods%)/(10000| 000053f0 30 30 2f 32 36 29 29 2a 36 30 30 30 30 0d 20 30 |00/26))*60000. 0| 00005400 07 20 20 ed 0d 20 3a 04 0d 20 44 39 20 20 ff 22 |. .. :.. D9 ."| 00005410 4c 4f 41 44 20 3c 4d 6f 64 75 6c 65 73 24 44 69 |LOAD <Modules$Di| 00005420 72 3e 2e 22 2b 6d 6f 64 75 6c 65 24 2b 22 2e 4d |r>."+module$+".M| 00005430 75 73 69 63 20 22 2b c3 7e 45 6e 64 5f 43 6f 64 |usic "+.~End_Cod| 00005440 65 0d 20 4e 04 0d 20 58 05 e1 0d ff |e. N.. X....| 0000544c