Home » Archimedes archive » Apps » Tracker - Program Disc (1990)(The Serial Port).adf » SourceCode/Play_Mod_S
SourceCode/Play_Mod_S
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 » Apps » Tracker - Program Disc (1990)(The Serial Port).adf |
Filename: | SourceCode/Play_Mod_S |
Read OK: | ✔ |
File size: | 6D61 bytes |
Load address: | FFFFFB42 |
Exec address: | CD9BA5FE |
File contents
10REM >Play_Mod_S 20: 30REM *-----------------------------------------------------------------* 40REM * * 50REM * TRACKER MODULES PLAYER (1-8 VOICES) Version 2.06 * 60REM * * 70REM *-----------------------------------------------------------------* 80REM * Written by Fabrice MERCIER & Hugo FIENNES * 90REM *-----------------------------------------------------------------* 100REM * (c) 1990 The Serial Port * 110REM *-----------------------------------------------------------------* 120: 130REM Reserve space for the module 140DIM code 32768 150Sample_Rate=34 160PRINT'"Assembling code..." 170FOR Pass%=0 TO 2 STEP 2 180P%=code 190[OPTPass% 200 210; *--------------------------------* 220; * Module Header (40 Bytes) * 230; *--------------------------------* 240 250EQUD 0 ; No start code 260EQUD 0 ; Init code 270EQUD mod_kill-code ; => Release memory/kill tune routine 280EQUD 0 ; No service code 290EQUD mod_title-code ; => Title string 300EQUD mod_help-code ; => Help string 310EQUD mod_command-code ; => Command table 320EQUD 0:EQUD 0:EQUD 0:EQUD 0 330 340.mod_title:EQUS "TrackerModule":EQUB 0 350.mod_help:EQUS "Tracker Player"+CHR$9+"2.06 (03-Dec-1990) " 360EQUS "by Fabrice Mercier & Hugo Fiennes" 370EQUB 0:ALIGN 380 390; *-----------------------------* 400; * Command keyword table * 410; *-----------------------------* 420 430.mod_command ; Module command table 440EQUS "PlayInit":EQUB 0:ALIGN ; *PLAYINIT Command 450EQUD Play_Init-code ; Offset of command 460EQUD &00010101 ; 1 parameter, GSTrans'ed 470EQUD PlaySyn_Error-code ; Invalid syntax 480EQUD Help_Init-code ; Help text 490 500EQUS "PlayKill":EQUB 0:ALIGN ; *PLAYKILL Command 510EQUD mod_kill-code ; Offset of command 520EQUD 0 ; No params 530EQUD 0 ; No syntax message 540EQUD Help_Kill-code ; Help text 550 560EQUS "PlayPause":EQUB 0:ALIGN ; *PLAYPAUSE Command 570EQUD Play_Pause-code ; Offset of command 580EQUD 0 ; No params 590EQUD 0 ; No syntax message 600EQUD Help_Pause-code ; Help text 610 620EQUS "PlayStart":EQUB 0:ALIGN ; *PLAYSTART Command 630EQUD Play_Start-code ; Offset of command 640EQUD 0 ; No params 650EQUD 0 ; No syntax message 660EQUD Help_Start-code ; Help text 670 680EQUS "SetPlayPos":EQUB 0:ALIGN ; *SETPLAYPOS Command 690EQUD Set_PlayPos-code 700EQUD &00010001 ; 1 parameter... 710EQUD PlayPosSyn_Error-code 720EQUD Help_PlayPos-code 730 740EQUD 0 ; Terminate table 750 760; *-----------------* 770; * EDIT Messages * 780; *-----------------* 790 800.Help_Pause 810EQUS "*PlayPause will pause the currently playing tune until *PlayStart Command. "+CHR$13 820EQUS "Syntax: *PlayPause" 830EQUB 0 840ALIGN 850.Help_Start 860EQUS "*PlayStart will play the tune after a *PlayPause Command."+CHR$13 870EQUS "Syntax: *PlayStart" 880EQUB 0 890ALIGN 900.Help_Kill 910EQUS "*PlayKill will stop & kill the currently playing tune & free memory."+CHR$13 920EQUS "Syntax: *PlayKill" 930EQUB 0 940ALIGN 950.Help_PlayPos 960EQUS "*SetPlayPos will set position in sequence table"+CHR$13 970EQUS "Syntax: *SetPlayPos 0-127" 980EQUB 0 990ALIGN 1000.Help_Init 1010EQUS "*PlayInit load & start to play the specified Tracker module"+CHR$13 1020EQUS "Syntax: *PlayInit <filename>" 1030EQUB 0 1040ALIGN 1050 1060; Invalid syntax messages 1070; ~~~~~~~~~~~~~~~~~~~~~~~ 1080.PlaySyn_Error 1090EQUS "Syntax: *PlayMod <filename>" 1100EQUB 0:ALIGN 1110.PlayPosSyn_Error 1120EQUS "Syntax: *SetPlayPos 0-127" 1130EQUB 0:ALIGN 1140 1150; *-----------------------------------* 1160; * Kill interrupt & release memory * 1170; *-----------------------------------* 1180 1190.mod_kill 1200STMFD R13!,{R0-R12,R14} ; Store return 1210LDR R0,Play_Flag ; Still playing? 1220CMP R0,#0 1230LDMEQFD R13!,{R0-R12,PC} 1240 1250MOV R0,#13:MOV R1,#4:SWI "OS_Byte" ; Disable event 1260 1270MOV R0,#&10 1280BL Get_Intr_Adr ; Return R1=>Interrupt address 1290MOV R2,#0 1300SWI "OS_Release" 1310MOV R0,#0 1320STR R0,Play_Flag 1330BL Trk_Close_All 1340LDR R2,[R12] 1350CMP R2,#0 ; None allocated? 1360LDMEQFD R13!,{R0-R12,PC} ; Ok return 1370MOV R0,#7 ; Free it up 1380SWI "XOS_Module" 1390MOV R0,#0 1400STRVC R0,[R12] 1410LDMFD R13!,{R0-R12,PC} ; Bye! 1420 1430.Play_Pause 1440STMFD R13!,{R0-R12,R14} 1450MOV R0,#0 1460STR R0,Play_Status ; Play status = 0 = Pause 1470LDMFD R13!,{R0-R12,PC} 1480 1490; *-----------------------------------------------------* 1500; * PLAYSTART = Plays music after a PlayPause command * 1510; *-----------------------------------------------------* 1520 1530.Play_Start 1540STMFD R13!,{R0-R12,R14} 1550MOV R0,#1 1560STR R0,Play_Status ; Play status = 1 = Play 1570LDMFD R13!,{R0-R12,PC} 1580 1590.Play_Status 1600EQUD 1 1610 1620; *----------------------------------------------* 1630; * PLAYPOS = Set position in sequence (0-127) * 1640; *----------------------------------------------* 1650 1660.Set_PlayPos 1670STMFD R13!,{R0-R12,R14} 1680MOV R1,R0 ; R1 => String 1690MOV R0,#10 ; Base 10 1700ORR R0,R0,#&A0<<24 ; Number (0-127) 1710MOV R2,#&7F 1720SWI "OS_ReadUnsigned" 1730BL Get_Trk_Infos_Block 1740LDR R4,[R12,#4] ; R4 = Music length 1750CMP R2,R4 ; Check if position > maxi music length 1760LDMGTFD R13!,{R0-R12,PC} 1770STR R2,[R12],#8 ; Set position in sequence 1780MOV R3,#0 1790STR R3,[R12] ; Position in pattern = 0 1800LDMFD R13!,{R0-R12,PC} 1810 1820; *---------------------------------------------------------* 1830; * PLAYINIT = Load Music, Init interrupt & Start playing * 1840; *---------------------------------------------------------* 1850 1860.Play_Init 1870STMFD R13!,{R0-R12,R14} 1880BL mod_kill ; Stop any current tune 1890MOV R1,R0 ; R1->filename 1900MOV R0,#5 ; Read catalogue info 1910SWI "XOS_File" 1920BVC okfile 1930SWI "XOS_WriteS" ; Write error message 1940EQUS "File error" 1950EQUB 13:EQUB 10:EQUB 0:ALIGN 1960LDMFD R13!,{R0-R12,PC} 1970 1980.okfile 1990MOV R3,R4 ; Try to get memory 2000MOV R0,#6 2010SWI "XOS_Module" 2020BVC okmem 2030SWI "XOS_WriteS" ; Write error message 2040EQUS "No room for module" 2050EQUB 13:EQUB 10:EQUB 0:ALIGN 2060LDMFD R13!,{R0-R12,PC} 2070 2080.okmem 2090STR R2,[R12] 2100STR R2,Trk_Base ; Save music base address 2110MOV R0,#16 2120MOV R3,#0 2130SWI "XOS_File" ; Load the file 2140BVC okload 2150SWI "OS_WriteS" ; Write error message 2160EQUS "Can't load file" 2170EQUB 13:EQUB 10:EQUB 0:ALIGN 2180BL mod_kill 2190LDMFD R13!,{R0-R12,PC} 2200 2210.okload 2220BL Trk_Init_All ; Init Tracker Variables & Sound System 2230MOV R0,#&10 ; Comment this lot is using callevery 2240BL Get_Intr_Adr ; Return R1=>Interrupt address 2250MOV R2,#0 ; R12 2260SWI "OS_Claim" 2270MOV R0,#14 2280MOV R1,#4 2290SWI "OS_Byte" 2300MOV R0,#1 2310STR R0,Play_Flag 2320MOV R0,#1 2330STR R0,Play_Status ; Play status = 1 = Play 2340LDMFD R13!,{R0-R12,PC} 2350 2360.Play_Flag 2370EQUD 0 ; <>0 if tune in progress 2380 2390; *--------------------------------------------------* 2400; * Init Tracker Variables & Init Sound System * 2410; *--------------------------------------------------* 2420 2430.Trk_Init_All 2440STMFD R13!,{R14} 2450ADR R12,Trk_Infos_Block ; R12 => Tracker Pointers & Counters 2460MOV R1,#0 2470STR R1,[R12],#4 ; Set position in Sequence to zero 2480 2490LDR R0,Trk_Base ; R0 => Music Base Address 2500LDR R9,[R0,#4] ; R9 = File Length (-8) 2510ADD R0,R0,#8 ; R0 => First Chunk Address 2520ADD R9,R0,R9 ; R9 => End of file 2530MOV R10,R0 2540 2550LDR R4,MLEN_Chunk 2560BL Search_TFF 2570LDR R1,[R0] ; R1 = Music Length (=Sequence length) 2580STR R1,[R12],#4 2590MOV R1,#0 2600STR R1,[R12],#4 ; Pattern line counter to zero 2610 2620MOV R0,R10 2630LDR R4,PLEN_Chunk 2640BL Search_TFF 2650STR R0,[R12],#4 ; Save Pattern Table Base Address 2660 2670MOV R0,R10 2680LDR R4,SEQU_Chunk 2690BL Search_TFF 2700STR R0,[R12],#4 ; Save Sequence Base Address 2710 2720MOV R0,R10 2730LDR R4,PNUM_Chunk 2740BL Search_TFF 2750LDR R6,[R0] ; R6 = Patterns number in music 2760 2770BL Get_Patterns_Table ; R11 => on Patterns Table 2780STR R11,[R12],#4 2790LDR R4,PATT_Chunk 2800MOV R0,R10 2810.Search_Patterns 2820BL Search_TFF 2830STR R0,[R11],#4 ; Save Pattern Address in Patterns Table 2840ADD R0,R0,R3 ; Add pattern length to chunk (=next pattern) 2850SUBS R6,R6,#1 2860BGT Search_Patterns 2870 2880ADR R1,Trk_Samples 2890LDR R4,SAMP_Chunk 2900MOV R7,#36 ; 36 Samples Chunk in one music piece 2910.Init_Trk_Samples 2920BL Search_TFF 2930SUB R5,R0,#8 2940STR R5,[R1],#4 2950ADD R0,R0,R3 2960SUBS R7,R7,#1 2970BGT Init_Trk_Samples 2980 2990MOV R0,R10 3000LDR R4,MVOX_Chunk 3010BL Search_TFF 3020LDR R12,[R0] ; R12 = Voices Number 3030STR R12,Trk_Voices 3040 3050MOV R0,R10 3060LDR R4,STER_Chunk 3070BL Search_TFF 3080MOV R11,R0 ; R11 => Stereo Positions List 3090BL Init_Sound_System ; Jump To Sound System Initialisation 3100LDMFD R13!,{PC} 3110 3120.TINF_Chunk:EQUS "TINF" 3130.MVOX_Chunk:EQUS "MVOX" 3140.STER_Chunk:EQUS "STER" 3150.MLEN_Chunk:EQUS "MLEN" 3160.PLEN_Chunk:EQUS "PLEN" 3170.SEQU_Chunk:EQUS "SEQU" 3180.PNUM_Chunk:EQUS "PNUM" 3190.PATT_Chunk:EQUS "PATT" 3200.SAMP_Chunk:EQUS "SAMP" 3210 3220; *-----------------------------------------------------* 3230; * SOUND BUFFER FILL ROUTINES * 3240; *-----------------------------------------------------* 3250; * R9 => Tracker Infos Block (32 Byte per channel) * 3260; * [00-03] ( R0 ) Phase Accumulator * 3270; * [04-07] ( R1 ) Phase Increment (Cf. Frequency) * 3280; * [08-11] ( R2 ) Repeat Offset * 3290; * [12-15] ( R3 ) Sample Length (or Repeat Length) * 3300; * [16-19] ( R4 ) Sample Address * 3310; * [20-23] ( R5 ) Sample Volume (255-Volume) * 3320; * [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples) * 3330; * [.....] (....) Others infos for effects * 3340; *-----------------------------------------------------* 3350; * R10 = DMA Buffer limits (+1) * 3360; * R11 = DMA Buffer Interleave Increment (1-8) * 3370; * R12 = DMA Buffer base pointer (+R11) * 3380; *-----------------------------------------------------* 3390 3400.Fill_Sound_Buffer 3410ADR R9,Voices_Infos_Block 3420LDR R0,Play_Status 3430CMP R0,#0 3440BEQ Clear_Fill 3450 3460ADD R9,R9,R7,LSL#5 3470LDMIA R9,{R0-R6} 3480 3490CMP R6,#0 3500BEQ Clear_Fill 3510 3520SUB R8,R3,R0,LSR#16 3530SUB R8,R8,R1,LSR#8 3540CMP R8,#208 3550ADRGT R2,New_Data 3560BGT Full_Fill 3570 3580.Fill_Loop 3590] 3600FOR Plop%=1 TO 16 3610[ 3620OPT Pass% 3630LDRB R8,[R4,R0,LSR#16] 3640SUBS R8,R8,R5 3650MOVMI R8,#0 3660STRB R8,[R12],R11 3670ADD R0,R0,R1 3680] 3690NEXT 3700[ 3710OPT Pass% 3720CMP R3,R0,LSR#16 ; End of sample ? 3730BGE Check_Buffer_End 3740MOVS R0,R2,LSL#16 ; Yes => R0=Repeat Offset 3750BEQ Clear_Fill ; If no repeat then fill buffer with zeros 3760.Check_Buffer_End 3770CMP R12,R10 3780BLT Fill_Loop 3790 3800ADR R2,New_Data 3810LDRB R4,[R2,R7] ; Hugo has found this system not to loose 3820CMP R4,#0 ; any note/voice... 3830STREQ R0,[R9] 3840MOVNE R4,#0 3850STRNEB R4,[R2,R7] 3860 3870MOV R0,#%00001000 3880LDMFD R13!,{PC} 3890 3900.Clear_Fill 3910MOV R5,#0 3920STR R5,[R9,#24] 3930.Clear_Fill_Loop 3940STRB R5,[R12],R11 3950CMP R12,R10 3960BLT Clear_Fill_Loop 3970MOV R0,#%00001000 3980LDMFD R13!,{PC} 3990 4000.Voices_Infos_Block 4010] 4020FOR BufBlk%=1 TO 64 4030[OPT Pass% 4040EQUD 0 4050] 4060NEXT 4070[OPT Pass% 4080 4090.Trk_Base 4100EQUD 0 ; Music Base Address 4110.Trk_Infos_Block 4120EQUD 0 ; Position Counter (In Sequence) 4130EQUD 0 ; Music Length 4140EQUD 0 ; Position Counter (In Pattern) 4150EQUD 0 ; => on Patterns Length Table 4160EQUD 0 ; => on Sequence Base Address 4170EQUD 0 ; => on Patterns Table (up to 64 patterns) 4180.Trk_Voices 4190EQUD 0 ; Voices Number 4200.Trk_Counter 4210EQUD 5 4220.Trk_Speed 4230EQUD 6 4240.Trk_Samples 4250] 4260P%+=36*4 4270[OPT Pass% 4280.Trk_Periods 4290EQUD 0:EQUD 0:EQUD 0:EQUD 0 4300EQUD 0:EQUD 0:EQUD 0:EQUD 0 4310.Trk_Pattern_Line 4320EQUD 0:EQUD 0:EQUD 0:EQUD 0 4330EQUD 0:EQUD 0:EQUD 0:EQUD 0 4340.New_Data 4350EQUD 0:EQUD 0 4360.Get_Infos_Block 4370ADR R7,Voices_Infos_Block 4380MOV PC,R14 4390.Get_Trk_Infos_Block 4400ADR R12,Trk_Infos_Block 4410MOV PC,R14 4420 4430; *---------------------------------------------* 4440; * Increment/Check Counter (Tempo) Value * 4450; *---------------------------------------------* 4460 4470.Get_Intr_Adr 4480ADR R1,Trk_Play_Music 4490MOV PC,R14 4500 4510.Trk_Play_Music 4520CMP R0,#4 ; Check if event is a VSYNC... 4530MOVNES PC,R14 4540STMFD R13!,{R0-R12,R14} 4550LDR R0,Play_Status 4560CMP R0,#0 4570LDMEQFD R13!,{R0-R12,PC} 4580 4590LDR R0,Trk_Counter 4600LDR R1,Trk_Speed 4610ADD R0,R0,#1 4620CMP R0,R1 4630MOVGE R0,#0 4640STR R0,Trk_Counter 4650BEQ Trk_Player 4660BNE Trk_Effects 4670 4680; *------------------------------------------* 4690; * Play a new line of current pattern * 4700; *------------------------------------------* 4710 4720.Trk_Player 4730ADR R0,Trk_Infos_Block 4740LDMIA R0,{R1-R6,R11} 4750LDRB R7,[R5,R1] ; R7 = Pattern number 4760LDR R12,[R6,R7,LSL#2] ; R12 => Current pattern 4770MOV R10,R11,LSL#2 ; R10=R11*4 = Pattern Line Length 4780MLA R12,R3,R10,R12 ; R12 => Current pattern line 4790LDRB R7,[R4,R7] ; R7 = Pattern Length (01-64) 4800ADD R3,R3,#1 4810CMP R3,R7 ; End of Pattern ? 4820BLT Write_Position 4830MOV R3,#0 4840ADD R1,R1,#1 ; Next position in Sequence Table 4850CMP R1,R2 ; Last Position in Sequence Table ? 4860MOVGE R1,#0 ; If Yes, Clear Counter. 4870.Write_Position 4880STMIA R0,{R1-R3} ; Save new position 4890 4900ADR R2,Trk_Pattern_Line 4910LDMIA R12,{R4-R11} 4920STMIA R2,{R4-R11} 4930ADR R7,Voices_Infos_Block 4940LDR R11,Trk_Voices 4950BL Get_Frequence_Table ; Return R8 => 'Frequence' Table 4960MOV R9,#0 4970.Trk_VoiceLoop 4980LDR R5,[R12],#4 ; R5=Note+Instrument 4990AND R2,R5,#&FF0000 5000MOV R2,R2,LSR#16 ; R2=Sample number (01-36)=(0-Z) 5010SUBS R2,R2,#1 5020BLT NextOne 5030BL Get_New_Sample ; Normal case = N-O S000... 5040MOVS R4,R5,LSR#24 ; R4=Note number (01-36) 5050BLGT Get_New_Note ; ... Get Sample & Note 5060.NextOne 5070BL Trk_Effects2 5080ADD R7,R7,#32 5090ADD R9,R9,#1 5100CMP R9,R11 5110BLT Trk_VoiceLoop 5120 5130.EndOfPlay 5140LDMFD R13!,{R0-R12,PC} 5150 5160.Get_New_Note 5170STMFD R13!,{R12,R14} 5180BL Get_Periods_Adr 5190SUB R3,R4,#1 5200LDR R3,[R12,R3,LSL#2] 5210STR R3,[R7,#28] ; Save period for portamento... 5220ADR R1,Trk_Periods 5230STR R3,[R1,R9,LSL#2] ; ...and for arpeggio 5240LDR R3,[R8,R3,LSL#2] ; Get phase increment 5250STR R3,[R7,#4] ; & Save it in voices infos block 5260MOV R1,#0 5270STR R1,[R7,#0] ; Clear phase accumulator 5280LDMFD R13!,{R12,PC}^ 5290 5300.Get_New_Sample 5310STMFD R13!,{R4,R12,R14} 5320ADR R3,Trk_Samples 5330LDR R3,[R3,R2,LSL#2] ; R3 => Actual Sample 5340ADD R4,R3,#60 ; R4 => Samples Data 5350STR R4,[R7,#16] 5360MOV R1,#1 5370STR R1,[R7,#24] ; R1 = Flag Fill With Sample 5380 5390; Set Volume 5400 5410LDR R1,[R3,#16+28] ; R1 = Sample Volume 5420SUBS R4,R1,#68 5430MOVLT R4,#0 5440MOV R4,R4,LSR#2 5450RSB R1,R1,#255 5460STR R1,[R7,#20] 5470 5480; Set Volume Command 5490 5500AND R4,R5,#&FF00 5510CMP R4,#&1F00 5520ANDEQ R1,R5,#&FF 5530RSBEQ R1,R1,#&FF 5540STREQ R1,[R7,#20] 5550 5560; Get & Save samples infos 5570 5580LDR R1,[R3,#40+28] ; R1 = Repeat Offset 5590LDR R4,[R3,#52+28] ; R4 = Repeat Length 5600CMP R4,#2 5610ADDNE R4,R4,R1 5620LDREQ R4,[R3,#28+28] ; R4 = Sample Length 5630STR R4,[R7,#12] 5640ADDNE R1,R1,#1 5650STR R1,[R7,#8] ; Sauve Repeat Offset 5660 5670ADR R4,New_Data 5680MOV R1,#1 5690STRB R1,[R4,R9] 5700 5710LDMFD R13!,{R4,R12,PC}^ 5720 5730; *----------------------------* 5740; * Effects Checking #1 * 5750; *----------------------------* 5760; * 'E' = Set Stereo * 5770; * 'J' = Position Jump * 5780; * 'V' = Set Volume * 5790; * 'B' = Pattern Break * 5800; * 'S' = Set Speed * 5810; *----------------------------* 5820 5830.Trk_Effects2 5840AND R4,R5,#&FF00 5850 5860; Set Volume ('V') 5870 5880CMP R4,#&1F00 5890BNE No_Set_Volume 5900AND R1,R5,#&FF 5910RSB R1,R1,#&FF 5920STR R1,[R7,#20] 5930MOV PC,R14 5940.No_Set_Volume 5950 5960; Set Speed ('S') 5970 5980CMP R4,#&1C00 5990BNE No_Set_Speed 6000ANDS R1,R5,#&0F 6010STRNE R1,Trk_Speed 6020MOV PC,R14 6030.No_Set_Speed 6040 6050; Pattern Break ('B') 6060 6070CMP R4,#&B00 6080BNE No_Pattern_Break 6090ADR R0,Trk_Infos_Block 6100LDMIA R0,{R1-R3} 6110ADD R1,R1,#1 ; Position = Position + 1 6120CMP R1,R2 6130MOVEQ R1,#0 6140MOV R3,#0 ; At the start of next pattern 6150STMIA R0,{R1-R3} 6160MOV PC,R14 6170.No_Pattern_Break 6180 6190; Position Jump ('J') 6200 6210CMP R4,#&1300 6220BNE No_Position_Jump 6230ADR R0,Trk_Infos_Block 6240AND R1,R5,#&7F 6250STR R1,[R0] 6260MOV R1,#0 6270STR R1,[R0,#8] 6280MOV PC,R14 6290.No_Position_Jump 6300 6310; Line Jump ('L') 6320 6330CMP R4,#&1500 6340BNE No_Line_Jump 6350AND R1,R5,#&F 6360MOV R2,R5,LSR#4 6370ANDS R2,R2,#&F 6380MOVGT R3,#10 6390MLAGT R1,R2,R3,R1 6400CMP R1,#63 6410ADRLE R0,Trk_Infos_Block 6420STRLE R1,[R0,#8] 6430MOV PC,R14 6440.No_Line_Jump 6450 6460; Set STEREO Position ('E') 6470 6480CMP R4,#&E00 6490BNE No_Set_Stereo 6500ADR R10,Stereo_Table 6510ANDS R2,R5,#&0F ; R2 = Stereo position (1-7) 6520MOVEQ PC,R14 6530CMP R2,#7 6540MOVGT PC,R14 6550SUB R2,R2,#1 6560LDR R1,[R10,R2,LSL#2] 6570ADD R0,R9,#1 ; R0 = Voice Number 6580STMFD R13!,{R8,R9} ; Save R14 before SWI as we are in IRQ mode 6590MOV R9,PC 6600ORR R8,R9,#3 6610TEQP R8,#0 6620MOVNV R0,R0 6630STMFD R13!,{R14} 6640SWI "Sound_Stereo" 6650LDMFD R13!,{R14} 6660TEQP R9,#0 6670MOVNV R0,R0 6680LDMFD R13!,{R8,R9} 6690.No_Set_Stereo 6700MOV PC,R14 6710 6720; *---------------------------* 6730; * Effects Checking #2 * 6740; *---------------------------* 6750; * '0' = Arpeggio * 6760; * '1' = Portamento Up * 6770; * '2' = Portamento Down * 6780; * 'G' = Slide Volume Up * 6790; * 'H' = Slide Volume Down * 6800; *---------------------------* 6810 6820.Trk_Effects 6830ADR R9,Trk_Pattern_Line 6840ADR R10,Trk_Periods 6850LDR R11,Trk_Voices ; R11 = Voices Number 6860BL Get_Frequence_Table ; R8 => Frequence Table 6870BL Get_Infos_Block ; R7 => Infos Block (32 Byte / Channel) 6880MOV R2,#0 6890.CheckEffectsLoop 6900LDR R1,[R9,R2,LSL#2] 6910AND R3,R1,#&00FF ; R3 = Effect Data 6920MOV R1,R1,LSR#8 6930AND R1,R1,#&FF ; R1 = Effect Type 6940 6950CMP R1,#&10 6960BNE No_Slide_Vol_Up 6970AND R3,R3,#&FF 6980ADD R4,R7,R2,LSL#5 6990LDR R5,[R4,#20] ; R5=255-Volume 7000RSB R5,R5,#255 7010ADD R5,R5,R3 7020CMP R5,#&FF 7030MOVGT R5,#&FF 7040RSB R5,R5,#255 7050STR R5,[R4,#20] 7060B CheckNextVox 7070.No_Slide_Vol_Up 7080 7090CMP R1,#&11 7100BNE No_Slide_Vol_Down 7110AND R3,R3,#&FF 7120ADD R4,R7,R2,LSL#5 7130LDR R5,[R4,#20] ; R5=255-Volume 7140RSB R5,R5,#255 7150SUBS R5,R5,R3 7160MOVLT R5,#0 7170RSB R5,R5,#255 7180STR R5,[R4,#20] 7190B CheckNextVox 7200.No_Slide_Vol_Down 7210 7220CMP R1,#1 7230BNE NoPortUp 7240ADD R4,R7,R2,LSL#5 7250LDR R5,[R4,#28] ; R5=Actual Period 7260SUB R5,R5,R3 7270CMP R5,#&50 7280MOVLT R5,#&50 7290STR R5,[R4,#28] 7300LDR R5,[R8,R5,LSL#2] 7310STR R5,[R4,#4] 7320B CheckNextVox 7330.NoPortUp 7340 7350CMP R1,#2 7360BNE NoPortDown 7370ADD R4,R7,R2,LSL#5 7380LDR R5,[R4,#28] ; Hauteur Note Actuelle 7390ADD R5,R5,R3 7400CMP R5,#&3F0 7410MOVGT R5,#&3F0 7420STR R5,[R4,#28] 7430LDR R5,[R8,R5,LSL#2] ; Get phase increment... 7440STR R5,[R4,#4] ; ...Save it 7450B CheckNextVox 7460.NoPortDown 7470 7480CMP R1,#0 7490BLEQ Trk_Arpeggio 7500 7510.CheckNextVox 7520ADD R2,R2,#1 ; Next Voice 7530CMP R2,R11 ; Last Voice ? 7540BNE CheckEffectsLoop 7550LDMFD R13!,{R0-R12,PC} 7560 7570.Trk_Arpeggio 7580STMFD R13!,{R14} 7590CMP R3,#0 7600LDMEQFD R13!,{PC} 7610LDR R0,Trk_Counter 7620CMP R0,#1 7630BEQ Arp_Loop2 7640CMP R0,#2 7650BEQ Arp_Loop3 7660CMP R0,#3 7670BEQ Arp_Loop4 7680CMP R0,#4 7690BEQ Arp_Loop2 7700CMP R0,#5 7710BEQ Arp_Loop3 7720LDMFD R13!,{PC} 7730 7740.Arp_Loop2 7750MOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone 7760B Arp_Cont 7770.Arp_Loop3 7780AND R0,R3,#&0F ; R0=Second nibble, then add it to current tone 7790B Arp_Cont 7800.Arp_Loop4 7810LDR R3,[R10,R2,LSL#2] ; Play current tone 7820B Arp_EndPart 7830.Arp_Cont 7840BL Get_Periods_Adr 7850LDR R1,[R10,R2,LSL#2] 7860ADD R4,R12,#36*4 7870.Arp_Loop5 7880LDR R3,[R12,R0,LSL#2] 7890LDR R6,[R12],#4 7900CMP R6,R1 7910BEQ Arp_EndPart 7920B Arp_Loop5 7930 7940.Arp_EndPart 7950ADD R12,R12,R0,LSL#2 7960CMP R12,R4 7970LDMGTFD R13!,{PC} 7980ADD R4,R7,R2,LSL#5 7990CMP R3,#0 8000LDMEQFD R13!,{PC} 8010LDR R5,[R8,R3,LSL#2] ; Get phase increment... 8020STR R5,[R4,#4] ; ...Save it in Voices Infos_Block 8030.End_Effect 8040LDMFD R13!,{PC} 8050 8060.Stereo_Table 8070EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127 8080 8090.Voice_Control_Block 8100B Fill_Sound_Buffer 8110B Fill_Sound_Buffer 8120B Fill_Sound_Buffer 8130LDMFD R13!,{PC} 8140LDMFD R13!,{PC} 8150LDMFD R13!,{PC} 8160LDMFD R13!,{PC} 8170EQUD Voice_Name-Voice_Control_Block 8180.Voice_Name 8190EQUS "Tracker":EQUB 0:ALIGN 8200 8210; *---------------------------------* 8220; * Init Tracker Sound System * 8230; *---------------------------------* 8240 8250.Init_Sound_System 8260STMFD R13!,{R0-R12,R14} 8270LDR R12,Trk_Voices 8280 8290ADR R0,Voice_Control_Block 8300MOV R1,#0 8310SWI "Sound_InstallVoice" 8320STR R1,Old_Voice_Slot 8330 8340MOV R10,#1 8350ADR R9,OldVoices 8360SUB R9,R9,#4 8370.Voices_Exterminator 8380MOV R0,R10 8390MOV R1,#0 8400SWI "Sound_AttachVoice" 8410STR R1,[R9,R10,LSL#2] 8420ADD R10,R10,#1 8430CMP R10,#8 8440BLE Voices_Exterminator 8450 8460MOV R10,#1 8470.InitAllVoices 8480MOV R0,R10 8490ADR R1,Voice_Name 8500SWI "Sound_AttachNamedVoice" 8510ADD R10,R10,#1 8520CMP R10,R12 8530BLE InitAllVoices 8540 8550ADR R7,OldStereos 8560ADR R10,Stereo_Table 8570MOV R9,#1 8580.Set_Stereo_Loop 8590MOV R0,R9 8600LDRB R5,[R11],#1 8610SUBS R5,R5,#1 8620MOVLT R5,#0 8630LDR R1,[R10,R5,LSL#2] 8640SWI "Sound_Stereo" 8650STRB R1,[R7],#1 8660ADD R9,R9,#1 8670CMP R9,R12 8680BLE Set_Stereo_Loop 8690 8700MOV R0,R12 ; Voices number 8710MOV R1,#208 ; Buffer length in byte per channel 8720MOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) 8730MOV R3,#0 8740MOV R4,#0 8750SWI "Sound_Configure" 8760ADR R9,OldConfigure 8770STMIA R9,{R0-R4} 8780 8790MOV R8,R12 8800.SoundAllVoices 8810MOV R0,R8 8820MVN R1,#20 8830MOV R2,#&F0 8840MOV R3,#&FF 8850SWI "Sound_Control" 8860SUBS R8,R8,#1 8870BGT SoundAllVoices 8880LDMFD R13!,{R0-R12,PC}^ 8890 8900.OldVoices 8910EQUD 0:EQUD 0:EQUD 0:EQUD 0 8920EQUD 0:EQUD 0:EQUD 0:EQUD 0 8930.OldConfigure 8940EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 8950.OldStereos 8960EQUD 0:EQUD 0 8970 8980; *--------------------------------* 8990; * Exit of Tracker Sound System * 9000; *--------------------------------* 9010 9020.Trk_Close_All 9030STMFD R13!,{R0-R12,R14} 9040 9050BL Get_Infos_Block 9060ADD R7,R7,#24 9070MOV R6,#8:MOV R5,#0 9080.Set_Zeroes_Loop 9090STR R5,[R7],#32 9100SUBS R6,R6,#1 9110BGT Set_Zeroes_Loop 9120 9130MOV R0,#0 9140LDR R1,Old_Voice_Slot 9150SWI "Sound_RemoveVoice" 9160 9170LDR R12,Trk_Voices 9180MOV R10,#1 9190ADR R9,OldVoices 9200SUB R9,R9,#4 9210.Detach_Trk_Voices 9220MOV R0,R10 9230LDR R1,[R9,R10,LSL#2] 9240SWI "Sound_AttachVoice" 9250ADD R10,R10,#1 9260CMP R10,R12 9270BLE Detach_Trk_Voices 9280 9290ADR R9,OldStereos 9300MOV R10,#1 9310.Restore_Stereos 9320MOV R0,R10 9330LDRB R1,[R9],#1 9340SWI "Sound_Stereo" 9350ADD R10,R10,#1 9360CMP R10,R12 9370BLE Restore_Stereos 9380 9390ADR R9,OldConfigure 9400LDMIA R9,{R0-R4} 9410SWI "Sound_Configure" 9420LDMFD R13!,{R0-R12,PC}^ 9430 9440.Old_Voice_Slot 9450EQUD 0 9460.Get_Periods_Adr 9470ADR R12,Trk_Periods_List 9480MOV PC,R14 9490.Trk_Periods_List 9500EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0 9510EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A 9520EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 9530EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 9540EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D 9550EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 9560EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 9570EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F 9580EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 9590 9600; *--------------------------------------------------* 9610; * Locate a TFF (Tracker File Format !) Chunk * 9620; *--------------------------------------------------* 9630; * Entry parameters = * 9640; * R0 => Previous Chunk or Base Address * 9650; * R4 = Chunck name * 9660; * R9 => Enf of File Address * 9670; *--------------------------------------------------* 9680 9690.Search_TFF 9700LDMIA R0!,{R2-R3} 9710CMP R2,R4 9720ADDNE R0,R0,R3 9730MOVEQ PC,R14 9740CMP R0,R9 ; End Of File ? 9750MOVGE PC,R14 ; Should display an error here (!) 9760B Search_TFF 9770.Get_Patterns_Table 9780ADR R11,Patterns_Table 9790MOV PC,R14 9800 9810.Patterns_Table 9820]:P%+=256:[OPT Pass% 9830 9840; *--------------------------------------------------------------* 9850; * Fill sound buffer without loop (Not beautifull but faster) * 9860; *--------------------------------------------------------------* 9870 9880.Full_Fill 9890] 9900FOR FillSB%=1 TO 208 9910[OPT Pass% 9920LDRB R8,[R4,R0,LSR#16] 9930SUBS R8,R8,R5 9940MOVMI R8,#0 9950STRB R8,[R12],R11 9960ADD R0,R0,R1 9970] 9980NEXT 9990[OPT Pass% 10000 10010LDRB R4,[R2,R7] ; Hugo has found this system not to loose 10020CMP R4,#0 ; any note/voice... 10030STREQ R0,[R9] 10040MOVNE R4,#0 10050STRNEB R4,[R2,R7] 10060 10070MOV R0,#%00001000 10080LDMFD R13!,{PC} 10090 10100.Get_Frequence_Table 10110ADR R8,Frequence_Table1 ; => Freq Table For 1 & 2 Channels 10120CMP R11,#3 10130ADDGE R8,R8,#4096 ; => Freq Table For 3 & 4 Channels 10140CMP R11,#5 10150ADDGE R8,R8,#4096 ; => Freq Table For 5 - 8 Channels 10160MOV PC,R14 10170 10180.Frequence_Table1 10190]:P%+=4096:[OPT Pass% 10200.Frequence_Table2 10210]:P%+=4096:[OPT Pass% 10220.Frequence_Table3 10230]:P%+=4096:[OPT Pass% 10240.Module_End 10250] 10260NEXT 10270 10280FOR Periods%=1 TO 1020 10290Frequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 10300NEXT 10310FOR Periods%=1 TO 1020 10320Frequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/34))*60000 10330NEXT 10340FOR Periods%=1 TO 1020 10350Frequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 10360NEXT 10370 10380OSCLI("SAVE %.Player_Mod "+STR$~code+" "+STR$~Module_End) 10390*SETTYPE %.Player_Mod MODULE
� >Play_Mod_S : I� *-----------------------------------------------------------------* (I� * * 2I� * TRACKER MODULES PLAYER (1-8 VOICES) Version 2.06 * <I� * * FI� *-----------------------------------------------------------------* PI� * Written by Fabrice MERCIER & Hugo FIENNES * ZI� *-----------------------------------------------------------------* dI� * (c) 1990 The Serial Port * nI� *-----------------------------------------------------------------* x: �"� Reserve space for the module �� code 32768 �Sample_Rate=34 ��'"Assembling code..." �� Pass%=0 � 2 � 2 �P%=code � [OPTPass% � �(; *--------------------------------* �(; * Module Header (40 Bytes) * �(; *--------------------------------* � �0EQUD 0 ; No start code ,EQUD 0 ; Init code FEQUD mod_kill-code ; => Release memory/kill tune routine 2EQUD 0 ; No service code "2EQUD mod_title-code ; => Title string ,1EQUD mod_help-code ; => Help string 63EQUD mod_command-code ; => Command table @ EQUD 0:EQUD 0:EQUD 0:EQUD 0 J T*.mod_title:EQUS "TrackerModule":EQUB 0 ^<.mod_help:EQUS "Tracker Player"+�9+"2.06 (03-Dec-1990) " h,EQUS "by Fabrice Mercier & Hugo Fiennes" rEQUB 0:ALIGN | �%; *-----------------------------* �%; * Command keyword table * �%; *-----------------------------* � �:.mod_command ; Module command table �7EQUS "PlayInit":EQUB 0:ALIGN ; *PLAYINIT Command �7EQUD Play_Init-code ; Offset of command �=EQUD &00010101 ; 1 parameter, GSTrans'ed �4EQUD PlaySyn_Error-code ; Invalid syntax �/EQUD Help_Init-code ; Help text � �7EQUS "PlayKill":EQUB 0:ALIGN ; *PLAYKILL Command �7EQUD mod_kill-code ; Offset of command /EQUD 0 ; No params 7EQUD 0 ; No syntax message /EQUD Help_Kill-code ; Help text & 08EQUS "PlayPause":EQUB 0:ALIGN ; *PLAYPAUSE Command :7EQUD Play_Pause-code ; Offset of command D/EQUD 0 ; No params N7EQUD 0 ; No syntax message X/EQUD Help_Pause-code ; Help text b l8EQUS "PlayStart":EQUB 0:ALIGN ; *PLAYSTART Command v7EQUD Play_Start-code ; Offset of command �/EQUD 0 ; No params �7EQUD 0 ; No syntax message �/EQUD Help_Start-code ; Help text � �9EQUS "SetPlayPos":EQUB 0:ALIGN ; *SETPLAYPOS Command �EQUD Set_PlayPos-code �4EQUD &00010001 ; 1 parameter... �EQUD PlayPosSyn_Error-code �EQUD Help_PlayPos-code � �5EQUD 0 ; Terminate table � �; *-----------------* ; * ǒ Messages * ; *-----------------* .Help_Pause *ZEQUS "*PlayPause will pause the currently playing tune until *PlayStart Command. "+�13 4EQUS "Syntax: *PlayPause" > EQUB 0 H ALIGN R.Help_Start \HEQUS "*PlayStart will play the tune after a *PlayPause Command."+�13 fEQUS "Syntax: *PlayStart" p EQUB 0 z ALIGN �.Help_Kill �SEQUS "*PlayKill will stop & kill the currently playing tune & free memory."+�13 �EQUS "Syntax: *PlayKill" � EQUB 0 � ALIGN �.Help_PlayPos �>EQUS "*SetPlayPos will set position in sequence table"+�13 �$EQUS "Syntax: *SetPlayPos 0-127" � EQUB 0 � ALIGN �.Help_Init �JEQUS "*PlayInit load & start to play the specified Tracker module"+�13 �'EQUS "Syntax: *PlayInit <filename>" EQUB 0 ALIGN $; Invalid syntax messages .; ~~~~~~~~~~~~~~~~~~~~~~~ 8.PlaySyn_Error B&EQUS "Syntax: *PlayMod <filename>" LEQUB 0:ALIGN V.PlayPosSyn_Error `$EQUS "Syntax: *SetPlayPos 0-127" jEQUB 0:ALIGN t ~+; *-----------------------------------* �+; * Kill interrupt & release memory * �+; *-----------------------------------* � � .mod_kill �/STMFD R13!,{R0-R12,R14} ; Store return �1LDR R0,Play_Flag ; Still playing? �CMP R0,#0 �LDMEQFD R13!,{R0-R12,PC} � �8MOV R0,#13:MOV R1,#4:SWI "OS_Byte" ; Disable event � �MOV R0,#&10 ?BL Get_Intr_Adr ; Return R1=>Interrupt address MOV R2,#0 SWI "OS_Release" MOV R0,#0 (STR R0,Play_Flag 2BL Trk_Close_All <LDR R2,[R12] F2CMP R2,#0 ; None allocated? P,LDMEQFD R13!,{R0-R12,PC} ; Ok return Z-MOV R0,#7 ; Free it up dSWI "XOS_Module" nMOV R0,#0 xSTRVC R0,[R12] �'LDMFD R13!,{R0-R12,PC} ; Bye! � �.Play_Pause �STMFD R13!,{R0-R12,R14} �MOV R0,#0 �:STR R0,Play_Status ; Play status = 0 = Pause �LDMFD R13!,{R0-R12,PC} � �=; *-----------------------------------------------------* �=; * PLAYSTART = Plays music after a PlayPause command * �=; *-----------------------------------------------------* � �.Play_Start STMFD R13!,{R0-R12,R14} MOV R0,#1 9STR R0,Play_Status ; Play status = 1 = Play "LDMFD R13!,{R0-R12,PC} , 6.Play_Status @ EQUD 1 J T6; *----------------------------------------------* ^6; * PLAYPOS = Set position in sequence (0-127) * h6; *----------------------------------------------* r |.Set_PlayPos �STMFD R13!,{R0-R12,R14} �/MOV R1,R0 ; R1 => String �*MOV R0,#10 ; Base 10 �0�R R0,R0,#&A0<<24 ; Number (0-127) �MOV R2,#&7F �SWI "OS_ReadUnsigned" �BL Get_Trk_Infos_Block �4LDR R4,[R12,#4] ; R4 = Music length �HCMP R2,R4 ; Check if position > maxi music length �LDMGTFD R13!,{R0-R12,PC} �;STR R2,[R12],#8 ; Set position in sequence �MOV R3,#0 �:STR R3,[R12] ; Position in pattern = 0 LDMFD R13!,{R0-R12,PC} A; *---------------------------------------------------------* &A; * PLAYINIT = Load Music, Init interrupt & Start playing * 0A; *---------------------------------------------------------* : D.Play_Init NSTMFD R13!,{R0-R12,R14} X3BL mod_kill ; Stop any current tune b*MOV R1,R0 ; R1->filename l1MOV R0,#5 ; Read catalogue info vSWI "XOS_File" �BVC okfile �1SWI "XOS_WriteS" ; Write error message �EQUS "File error" �!EQUB 13:EQUB 10:EQUB 0:ALIGN �LDMFD R13!,{R0-R12,PC} � �.okfile �/MOV R3,R4 ; Try to get memory �MOV R0,#6 �SWI "XOS_Module" �BVC okmem �1SWI "XOS_WriteS" ; Write error message �EQUS "No room for module" !EQUB 13:EQUB 10:EQUB 0:ALIGN LDMFD R13!,{R0-R12,PC} .okmem *STR R2,[R12] 45STR R2,Trk_Base ; Save music base address >MOV R0,#16 HMOV R3,#0 R+SWI "XOS_File" ; Load the file \BVC okload f1SWI "OS_WriteS" ; Write error message pEQUS "Can't load file" z!EQUB 13:EQUB 10:EQUB 0:ALIGN �BL mod_kill �LDMFD R13!,{R0-R12,PC} � �.okload �CBL Trk_Init_All ; Init Tracker Variables & Sound System �AMOV R0,#&10 ; Comment this lot is using callevery �:BL Get_Intr_Adr ; Return R1=>Interrupt address �!MOV R2,#0 ; R12 �SWI "OS_Claim" �MOV R0,#14 �MOV R1,#4 �SWI "OS_Byte" �MOV R0,#1 STR R0,Play_Flag MOV R0,#1 9STR R0,Play_Status ; Play status = 1 = Play $LDMFD R13!,{R0-R12,PC} . 8.Play_Flag B5EQUD 0 ; <>0 if tune in progress L V:; *--------------------------------------------------* `:; * Init Tracker Variables & Init Sound System * j:; *--------------------------------------------------* t ~.Trk_Init_All �STMFD R13!,{R14} �BADR R12,Trk_Infos_Block ; 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 DLDR R1,[R0] ; R1 = Music Length (=Sequence length) STR R1,[R12],#4 MOV R1,#0 (<STR R1,[R12],#4 ; Pattern line counter to zero 2 <MOV R0,R10 FLDR R4,PLEN_Chunk PBL Search_TFF Z?STR R0,[R12],#4 ; Save Pattern Table Base Address d nMOV R0,R10 xLDR 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 6 @ADR R1,Trk_Samples JLDR R4,SAMP_Chunk TCMOV R7,#36 ; 36 Samples Chunk in one music piece ^.Init_Trk_Samples hBL Search_TFF rSUB R5,R0,#8 |STR 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!,{PC} & 0.TINF_Chunk:EQUS "TINF" :.MVOX_Chunk:EQUS "MVOX" D.STER_Chunk:EQUS "STER" N.MLEN_Chunk:EQUS "MLEN" X.PLEN_Chunk:EQUS "PLEN" b.SEQU_Chunk:EQUS "SEQU" l.PNUM_Chunk:EQUS "PNUM" v.PATT_Chunk:EQUS "PATT" �.SAMP_Chunk:EQUS "SAMP" � �=; *-----------------------------------------------------* �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) * 4=; *-----------------------------------------------------* > H.Fill_Sound_Buffer RADR R9,Voices_Infos_Block \LDR R0,Play_Status fCMP R0,#0 pBEQ Clear_Fill z �ADD R9,R9,R7,LSL#5 �LDMIA R9,{R0-R6} � �CMP R6,#0 �BEQ Clear_Fill � �SUB R8,R3,R0,LSR#16 �SUB R8,R8,R1,LSR#8 �CMP R8,#208 �ADRGT R2,New_Data �BGT Full_Fill � �.Fill_Loop ] � Plop%=1 � 16 [ $ OPT Pass% .LDRB R8,[R4,R0,LSR#16] 8SUBS R8,R8,R5 BMOVMI R8,#0 LSTRB R8,[R12],R11 VADD R0,R0,R1 `] j� t[ ~OPT Pass% �1CMP R3,R0,LSR#16 ; End of sample ? �BGE Check_Buffer_End �9MOVS R0,R2,LSL#16 ; Yes => R0=Repeat Offset �JBEQ Clear_Fill ; If no repeat then fill buffer with zeros �.Check_Buffer_End �CMP R12,R10 �BLT Fill_Loop � �ADR R2,New_Data �JLDRB R4,[R2,R7] ; Hugo has found this system not to loose �4CMP R4,#0 ; any note/voice... �STREQ R0,[R9] MOVNE R4,#0 STRNEB R4,[R2,R7] MOV R0,#%00001000 (LDMFD R13!,{PC} 2 <.Clear_Fill FMOV R5,#0 PSTR R5,[R9,#24] Z.Clear_Fill_Loop dSTRB R5,[R12],R11 nCMP R12,R10 xBLT Clear_Fill_Loop �MOV R0,#%00001000 �LDMFD R13!,{PC} � �.Voices_Infos_Block �] �� BufBlk%=1 � 64 �[OPT Pass% � EQUD 0 �] �� �[OPT Pass% � � .Trk_Base 1EQUD 0 ; Music Base Address .Trk_Infos_Block =EQUD 0 ; Position Counter (In Sequence) "+EQUD 0 ; Music Length ,<EQUD 0 ; Position Counter (In Pattern) 6:EQUD 0 ; => on Patterns Length Table @:EQUD 0 ; => on Sequence Base Address JGEQUD 0 ; => on Patterns Table (up to 64 patterns) T.Trk_Voices ^,EQUD 0 ; Voices Number h.Trk_Counter rEQUD 5 |.Trk_Speed �EQUD 6 �.Trk_Samples �] �P%+=36*4 �[OPT Pass% �.Trk_Periods �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �.Trk_Pattern_Line �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �EQUD 0:EQUD 0:EQUD 0:EQUD 0 � .New_Data �EQUD 0:EQUD 0 .Get_Infos_Block ADR R7,Voices_Infos_Block MOV PC,R14 &.Get_Trk_Infos_Block 0ADR R12,Trk_Infos_Block :MOV PC,R14 D N5; *---------------------------------------------* X5; * Increment/Check Counter (Tempo) Value * b5; *---------------------------------------------* l v.Get_Intr_Adr �ADR R1,Trk_Play_Music �MOV PC,R14 � �.Trk_Play_Music �?CMP R0,#4 ; Check if event is a VSYNC... �MOVNES PC,R14 �STMFD R13!,{R0-R12,R14} �LDR R0,Play_Status �CMP R0,#0 �LDMEQFD R13!,{R0-R12,PC} � �LDR R0,Trk_Counter �LDR R1,Trk_Speed ADD R0,R0,#1 CMP R0,R1 MOVGE R0,#0 STR R0,Trk_Counter *BEQ Trk_Player 4BNE Trk_Effects > H2; *------------------------------------------* R2; * Play a new line of current pattern * \2; *------------------------------------------* f p.Trk_Player zADR R0,Trk_Infos_Block �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 4STMIA R0,{R1-R3} ; Save new position $ADR R2,Trk_Pattern_Line .LDMIA R12,{R4-R11} 8STMIA R2,{R4-R11} BADR R7,Voices_Infos_Block LLDR R11,Trk_Voices V@BL Get_Frequence_Table ; Return R8 => 'Frequence' Table `MOV R9,#0 j.Trk_VoiceLoop t4LDR 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 .EndOfPlay LDMFD R13!,{R0-R12,PC} (.Get_New_Note 2STMFD R13!,{R12,R14} <BL Get_Periods_Adr FSUB R3,R4,#1 PLDR R3,[R12,R3,LSL#2] Z@STR R3,[R7,#28] ; Save period for portamento... dADR R1,Trk_Periods n6STR R3,[R1,R9,LSL#2] ; ...and for arpeggio x6LDR 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 ; Set Volume "5LDR R1,[R3,#16+28] ; R1 = Sample Volume ,SUBS R4,R1,#68 6MOVLT R4,#0 @MOV R4,R4,LSR#2 JRSB R1,R1,#255 TSTR R1,[R7,#20] ^ h; Set Volume Command r |� 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 9STR R1,[R7,#8] ; Sauve Repeat Offset &ADR R4,New_Data 0MOV R1,#1 :STRB R1,[R4,R9] D NLDMFD R13!,{R4,R12,PC}^ X b$; *----------------------------* l$; * Effects Checking #1 * v$; *----------------------------* �$; * '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 4.No_Set_Volume > H; Set Speed ('S') R \CMP R4,#&1C00 fBNE No_Set_Speed p�S R1,R5,#&0F zSTRNE R1,Trk_Speed �MOV PC,R14 �.No_Set_Speed � �; Pattern Break ('B') � �CMP R4,#&B00 �BNE No_Pattern_Break �ADR R0,Trk_Infos_Block �LDMIA R0,{R1-R3} �AADD R1,R1,#1 ; Position = Position + 1 �CMP R1,R2 ��Q R1,#0 �FMOV R3,#0 ; At the start of next pattern STMIA R0,{R1-R3} MOV PC,R14 .No_Pattern_Break $ .; Position Jump ('J') 8 BCMP R4,#&1300 LBNE No_Position_Jump VADR R0,Trk_Infos_Block `� R1,R5,#&7F jSTR R1,[R0] tMOV R1,#0 ~STR R1,[R0,#8] �MOV PC,R14 �.No_Position_Jump � �; Line Jump ('L') � �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_Block STRLE R1,[R0,#8] MOV PC,R14 (.No_Line_Jump 2 <; Set Ȣ Position ('E') F PCMP R4,#&E00 ZBNE No_Set_Stereo dADR R10,Stereo_Table n8�S R2,R5,#&0F ; R2 = Stereo position (1-7) x �Q PC,R14 �CMP R2,#7 �MOVGT PC,R14 �SUB R2,R2,#1 �LDR R1,[R10,R2,LSL#2] �1ADD R0,R9,#1 ; R0 = Voice Number �ISTMFD R13!,{R8,R9} ; Save R14 before SWI as we are in IRQ mode �MOV R9,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 6 @#; *---------------------------* J#; * Effects Checking #2 * T#; *---------------------------* ^#; * '0' = Arpeggio * h#; * '1' = Portamento Up * r#; * '2' = Portamento Down * |#; * 'G' = Slide Volume Up * �#; * 'H' = Slide Volume Down * �#; *---------------------------* � �.Trk_Effects �ADR 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 0BNE No_Slide_Vol_Up :� R3,R3,#&FF DADD R4,R7,R2,LSL#5 N/LDR R5,[R4,#20] ; R5=255-Volume XRSB R5,R5,#255 bADD R5,R5,R3 lCMP R5,#&FF vMOVGT R5,#&FF �RSB R5,R5,#255 �STR R5,[R4,#20] �B CheckNextVox �.No_Slide_Vol_Up � �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 * 4CMP R1,#1 >BNE NoPortUp HADD R4,R7,R2,LSL#5 R0LDR R5,[R4,#28] ; R5=Actual Period \SUB R5,R5,R3 fCMP R5,#&50 pMOVLT R5,#&50 zSTR R5,[R4,#28] �LDR R5,[R8,R5,LSL#2] �STR R5,[R4,#4] �B CheckNextVox � .NoPortUp � �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 . 8CMP R1,#0 BBLEQ Trk_Arpeggio L V.CheckNextVox `*ADD R2,R2,#1 ; Next Voice j,CMP R2,R11 ; Last Voice ? tBNE CheckEffectsLoop ~LDMFD R13!,{R0-R12,PC} � �.Trk_Arpeggio �STMFD R13!,{R14} �CMP 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} 2 <.Arp_Loop2 FKMOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone PB Arp_Cont Z.Arp_Loop3 dJ� R0,R3,#&0F ; R0=Second nibble, then add it to current tone nB Arp_Cont x.Arp_Loop4 �0LDR R3,[R10,R2,LSL#2] ; Play current tone �B Arp_EndPart � .Arp_Cont �BL Get_Periods_Adr �LDR 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 6CMP R3,#0 @LDMEQFD R13!,{PC} J;LDR R5,[R8,R3,LSL#2] ; Get phase increment... TESTR R5,[R4,#4] ; ...Save it in Voices Infos_Block ^.End_Effect hLDMFD R13!,{PC} r |.Stereo_Table �?EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127 � �.Voice_Control_Block �B Fill_Sound_Buffer �B 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 * &); *---------------------------------* 0 :.Init_Sound_System DSTMFD R13!,{R0-R12,R14} NLDR R12,Trk_Voices X b ADR R0,Voice_Control_Block lMOV R1,#0 vSWI "Sound_InstallVoice" �STR R1,Old_Voice_Slot � �MOV R10,#1 �ADR R9,OldVoices �SUB 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 !4"SWI "Sound_AttachNamedVoice" !>ADD R10,R10,#1 !HCMP R10,R12 !RBLE InitAllVoices !\ !fADR R7,OldStereos !pADR R10,Stereo_Table !zMOV R9,#1 !�.Set_Stereo_Loop !�MOV R0,R9 !�LDRB R5,[R11],#1 !�SUBS R5,R5,#1 !�MOVLT 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 !� !�0MOV R0,R12 ; Voices number "DMOV R1,#208 ; Buffer length in byte per channel "BMOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) "MOV R3,#0 "$MOV R4,#0 ".SWI "Sound_Configure" "8ADR R9,OldConfigure "BSTMIA R9,{R0-R4} "L "VMOV R8,R12 "`.SoundAllVoices "jMOV R0,R8 "tMVN R1,#20 "~MOV R2,#&F0 "�MOV R3,#&FF "�SWI "Sound_Control" "�SUBS R8,R8,#1 "�BGT 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 * #((; *--------------------------------* #2 #<.Trk_Close_All #FSTMFD R13!,{R0-R12,R14} #P #ZBL Get_Infos_Block #dADD R7,R7,#24 #nMOV R6,#8:MOV R5,#0 #x.Set_Zeroes_Loop #�STR R5,[R7],#32 #�SUBS R6,R6,#1 #�BGT Set_Zeroes_Loop #� #�MOV R0,#0 #�LDR R1,Old_Voice_Slot #�SWI "Sound_RemoveVoice" #� #�LDR R12,Trk_Voices #�MOV R10,#1 #�ADR R9,OldVoices #�SUB R9,R9,#4 #�.Detach_Trk_Voices $MOV R0,R10 $LDR R1,[R9,R10,LSL#2] $SWI "Sound_AttachVoice" $"ADD R10,R10,#1 $,CMP R10,R12 $6BLE Detach_Trk_Voices $@ $JADR R9,OldStereos $TMOV R10,#1 $^.Restore_Stereos $hMOV R0,R10 $rLDRB R1,[R9],#1 $|SWI "Sound_Stereo" $�ADD R10,R10,#1 $�CMP R10,R12 $�BLE Restore_Stereos $� $�ADR R9,OldConfigure $�LDMIA R9,{R0-R4} $�SWI "Sound_Configure" $�LDMFD R13!,{R0-R12,PC}^ $� $�.Old_Voice_Slot $� EQUD 0 $�.Get_Periods_Adr $�ADR R12,Trk_Periods_List %MOV PC,R14 %.Trk_Periods_List %/EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0 %&/EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A %0/EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 %:/EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 %D/EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D %N/EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 %X/EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 %b/EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F %l/EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 %v %�:; *--------------------------------------------------* %�:; * Locate a TFF (Tracker File Format !) Chunk * %�:; *--------------------------------------------------* %�:; * Entry parameters = * %�:; * R0 => Previous Chunk or Base Address * %�:; * R4 = Chunck name * %�:; * R9 => Enf of File Address * %�:; *--------------------------------------------------* %� %�.Search_TFF %�LDMIA R0!,{R2-R3} %�CMP R2,R4 %�ADDNE R0,R0,R3 & �Q PC,R14 &+CMP R0,R9 ; End Of File ? &>MOVGE PC,R14 ; Should display an error here (!) & B Search_TFF &*.Get_Patterns_Table &4ADR R11,Patterns_Table &>MOV PC,R14 &H &R.Patterns_Table &\]:P%+=256:[OPT Pass% &f &pF; *--------------------------------------------------------------* &zF; * Fill sound buffer without loop (Not beautifull but faster) * &�F; *--------------------------------------------------------------* &� &�.Full_Fill &�] &�� FillSB%=1 � 208 &�[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% ' 'JLDRB R4,[R2,R7] ; Hugo has found this system not to loose '$4CMP R4,#0 ; any note/voice... '.STREQ R0,[R9] '8MOVNE R4,#0 'BSTRNEB R4,[R2,R7] 'L 'VMOV R0,#%00001000 '`LDMFD R13!,{PC} 'j 't.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 '�]:P%+=4096:[OPT Pass% (.Module_End ( ] (� ( ((� Periods%=1 � 1020 (2IFrequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 (<� (F� Periods%=1 � 1020 (PIFrequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/34))*60000 (Z� (d� Periods%=1 � 1020 (nIFrequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 (x� (� (�3�("SAVE %.Player_Mod "+�~code+" "+�~Module_End) (� *SETTYPE %.Player_Mod MODULE �
00000000 0d 00 0a 11 f4 20 3e 50 6c 61 79 5f 4d 6f 64 5f |..... >Play_Mod_| 00000010 53 0d 00 14 05 3a 0d 00 1e 49 f4 20 2a 2d 2d 2d |S....:...I. *---| 00000020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00000060 00 28 49 f4 20 2a 20 20 20 20 20 20 20 20 20 20 |.(I. * | 00000070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 000000a0 20 20 20 20 20 20 20 2a 0d 00 32 49 f4 20 2a 20 | *..2I. * | 000000b0 20 20 20 20 20 20 20 20 54 52 41 43 4b 45 52 20 | TRACKER | 000000c0 4d 4f 44 55 4c 45 53 20 50 4c 41 59 45 52 20 28 |MODULES PLAYER (| 000000d0 31 2d 38 20 56 4f 49 43 45 53 29 20 56 65 72 73 |1-8 VOICES) Vers| 000000e0 69 6f 6e 20 32 2e 30 36 20 20 20 20 20 20 20 20 |ion 2.06 | 000000f0 2a 0d 00 3c 49 f4 20 2a 20 20 20 20 20 20 20 20 |*..<I. * | 00000100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00000130 20 20 20 20 20 20 20 20 20 2a 0d 00 46 49 f4 20 | *..FI. | 00000140 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00000150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000180 2d 2d 2a 0d 00 50 49 f4 20 2a 20 20 20 20 20 20 |--*..PI. * | 00000190 20 20 20 20 20 20 57 72 69 74 74 65 6e 20 62 79 | Written by| 000001a0 20 46 61 62 72 69 63 65 20 4d 45 52 43 49 45 52 | Fabrice MERCIER| 000001b0 20 26 20 48 75 67 6f 20 46 49 45 4e 4e 45 53 20 | & Hugo FIENNES | 000001c0 20 20 20 20 20 20 20 20 20 20 20 2a 0d 00 5a 49 | *..ZI| 000001d0 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |. *-------------| 000001e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000210 2d 2d 2d 2d 2a 0d 00 64 49 f4 20 2a 20 20 20 20 |----*..dI. * | 00000220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000230 20 28 63 29 20 31 39 39 30 20 54 68 65 20 53 65 | (c) 1990 The Se| 00000240 72 69 61 6c 20 50 6f 72 74 20 20 20 20 20 20 20 |rial Port | 00000250 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 00 | *..| 00000260 6e 49 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |nI. *-----------| 00000270 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000002a0 2d 2d 2d 2d 2d 2d 2a 0d 00 78 05 3a 0d 00 82 22 |------*..x.:..."| 000002b0 f4 20 52 65 73 65 72 76 65 20 73 70 61 63 65 20 |. Reserve space | 000002c0 66 6f 72 20 74 68 65 20 6d 6f 64 75 6c 65 0d 00 |for the module..| 000002d0 8c 10 de 20 63 6f 64 65 20 33 32 37 36 38 0d 00 |... code 32768..| 000002e0 96 12 53 61 6d 70 6c 65 5f 52 61 74 65 3d 33 34 |..Sample_Rate=34| 000002f0 0d 00 a0 1a f1 27 22 41 73 73 65 6d 62 6c 69 6e |.....'"Assemblin| 00000300 67 20 63 6f 64 65 2e 2e 2e 22 0d 00 aa 15 e3 20 |g code..."..... | 00000310 50 61 73 73 25 3d 30 20 b8 20 32 20 88 20 32 0d |Pass%=0 . 2 . 2.| 00000320 00 b4 0b 50 25 3d 63 6f 64 65 0d 00 be 0d 5b 4f |...P%=code....[O| 00000330 50 54 50 61 73 73 25 0d 00 c8 04 0d 00 d2 28 3b |PTPass%.......(;| 00000340 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00000350 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00000360 2d 2d 2a 0d 00 dc 28 3b 20 2a 20 20 20 20 4d 6f |--*...(; * Mo| 00000370 64 75 6c 65 20 48 65 61 64 65 72 20 28 34 30 20 |dule Header (40 | 00000380 42 79 74 65 73 29 20 20 20 20 2a 0d 00 e6 28 3b |Bytes) *...(;| 00000390 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 000003a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000003b0 2d 2d 2a 0d 00 f0 04 0d 00 fa 30 45 51 55 44 20 |--*.......0EQUD | 000003c0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 000003d0 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 73 74 61 | ; No sta| 000003e0 72 74 20 63 6f 64 65 0d 01 04 2c 45 51 55 44 20 |rt code...,EQUD | 000003f0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000400 20 20 20 20 20 20 20 20 3b 20 49 6e 69 74 20 63 | ; Init c| 00000410 6f 64 65 0d 01 0e 46 45 51 55 44 20 20 6d 6f 64 |ode...FEQUD mod| 00000420 5f 6b 69 6c 6c 2d 63 6f 64 65 20 20 20 20 20 20 |_kill-code | 00000430 20 20 20 20 3b 20 3d 3e 20 52 65 6c 65 61 73 65 | ; => Release| 00000440 20 6d 65 6d 6f 72 79 2f 6b 69 6c 6c 20 74 75 6e | memory/kill tun| 00000450 65 20 72 6f 75 74 69 6e 65 0d 01 18 32 45 51 55 |e routine...2EQU| 00000460 44 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 |D 0 | 00000470 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 73 | ; No s| 00000480 65 72 76 69 63 65 20 63 6f 64 65 0d 01 22 32 45 |ervice code.."2E| 00000490 51 55 44 20 20 6d 6f 64 5f 74 69 74 6c 65 2d 63 |QUD mod_title-c| 000004a0 6f 64 65 20 20 20 20 20 20 20 20 20 3b 20 3d 3e |ode ; =>| 000004b0 20 54 69 74 6c 65 20 73 74 72 69 6e 67 0d 01 2c | Title string..,| 000004c0 31 45 51 55 44 20 20 6d 6f 64 5f 68 65 6c 70 2d |1EQUD mod_help-| 000004d0 63 6f 64 65 20 20 20 20 20 20 20 20 20 20 3b 20 |code ; | 000004e0 3d 3e 20 48 65 6c 70 20 73 74 72 69 6e 67 0d 01 |=> Help string..| 000004f0 36 33 45 51 55 44 20 20 6d 6f 64 5f 63 6f 6d 6d |63EQUD mod_comm| 00000500 61 6e 64 2d 63 6f 64 65 20 20 20 20 20 20 20 3b |and-code ;| 00000510 20 3d 3e 20 43 6f 6d 6d 61 6e 64 20 74 61 62 6c | => Command tabl| 00000520 65 0d 01 40 20 45 51 55 44 20 20 30 3a 45 51 55 |e..@ EQUD 0:EQU| 00000530 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 00000540 30 0d 01 4a 04 0d 01 54 2a 2e 6d 6f 64 5f 74 69 |0..J...T*.mod_ti| 00000550 74 6c 65 3a 45 51 55 53 20 22 54 72 61 63 6b 65 |tle:EQUS "Tracke| 00000560 72 4d 6f 64 75 6c 65 22 3a 45 51 55 42 20 30 0d |rModule":EQUB 0.| 00000570 01 5e 3c 2e 6d 6f 64 5f 68 65 6c 70 3a 45 51 55 |.^<.mod_help:EQU| 00000580 53 20 22 54 72 61 63 6b 65 72 20 50 6c 61 79 65 |S "Tracker Playe| 00000590 72 22 2b bd 39 2b 22 32 2e 30 36 20 28 30 33 2d |r"+.9+"2.06 (03-| 000005a0 44 65 63 2d 31 39 39 30 29 20 22 0d 01 68 2c 45 |Dec-1990) "..h,E| 000005b0 51 55 53 20 22 62 79 20 46 61 62 72 69 63 65 20 |QUS "by Fabrice | 000005c0 4d 65 72 63 69 65 72 20 26 20 48 75 67 6f 20 46 |Mercier & Hugo F| 000005d0 69 65 6e 6e 65 73 22 0d 01 72 10 45 51 55 42 20 |iennes"..r.EQUB | 000005e0 30 3a 41 4c 49 47 4e 0d 01 7c 04 0d 01 86 25 3b |0:ALIGN..|....%;| 000005f0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00000600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00000610 0d 01 90 25 3b 20 2a 20 20 20 20 43 6f 6d 6d 61 |...%; * Comma| 00000620 6e 64 20 6b 65 79 77 6f 72 64 20 74 61 62 6c 65 |nd keyword table| 00000630 20 20 20 20 2a 0d 01 9a 25 3b 20 2a 2d 2d 2d 2d | *...%; *----| 00000640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00000650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 a4 04 0d 01 |---------*......| 00000660 ae 3a 2e 6d 6f 64 5f 63 6f 6d 6d 61 6e 64 20 20 |.:.mod_command | 00000670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000680 20 20 3b 20 4d 6f 64 75 6c 65 20 63 6f 6d 6d 61 | ; Module comma| 00000690 6e 64 20 74 61 62 6c 65 0d 01 b8 37 45 51 55 53 |nd table...7EQUS| 000006a0 20 22 50 6c 61 79 49 6e 69 74 22 3a 45 51 55 42 | "PlayInit":EQUB| 000006b0 20 30 3a 41 4c 49 47 4e 20 20 20 20 3b 20 2a 50 | 0:ALIGN ; *P| 000006c0 4c 41 59 49 4e 49 54 20 43 6f 6d 6d 61 6e 64 0d |LAYINIT Command.| 000006d0 01 c2 37 45 51 55 44 20 50 6c 61 79 5f 49 6e 69 |..7EQUD Play_Ini| 000006e0 74 2d 63 6f 64 65 20 20 20 20 20 20 20 20 20 20 |t-code | 000006f0 20 20 20 3b 20 4f 66 66 73 65 74 20 6f 66 20 63 | ; Offset of c| 00000700 6f 6d 6d 61 6e 64 0d 01 cc 3d 45 51 55 44 20 26 |ommand...=EQUD &| 00000710 30 30 30 31 30 31 30 31 20 20 20 20 20 20 20 20 |00010101 | 00000720 20 20 20 20 20 20 20 20 20 20 3b 20 31 20 70 61 | ; 1 pa| 00000730 72 61 6d 65 74 65 72 2c 20 47 53 54 72 61 6e 73 |rameter, GSTrans| 00000740 27 65 64 0d 01 d6 34 45 51 55 44 20 50 6c 61 79 |'ed...4EQUD Play| 00000750 53 79 6e 5f 45 72 72 6f 72 2d 63 6f 64 65 20 20 |Syn_Error-code | 00000760 20 20 20 20 20 20 20 3b 20 49 6e 76 61 6c 69 64 | ; Invalid| 00000770 20 73 79 6e 74 61 78 0d 01 e0 2f 45 51 55 44 20 | syntax.../EQUD | 00000780 48 65 6c 70 5f 49 6e 69 74 2d 63 6f 64 65 20 20 |Help_Init-code | 00000790 20 20 20 20 20 20 20 20 20 20 20 3b 20 48 65 6c | ; Hel| 000007a0 70 20 74 65 78 74 0d 01 ea 04 0d 01 f4 37 45 51 |p text.......7EQ| 000007b0 55 53 20 22 50 6c 61 79 4b 69 6c 6c 22 3a 45 51 |US "PlayKill":EQ| 000007c0 55 42 20 30 3a 41 4c 49 47 4e 20 20 20 20 3b 20 |UB 0:ALIGN ; | 000007d0 2a 50 4c 41 59 4b 49 4c 4c 20 43 6f 6d 6d 61 6e |*PLAYKILL Comman| 000007e0 64 0d 01 fe 37 45 51 55 44 20 6d 6f 64 5f 6b 69 |d...7EQUD mod_ki| 000007f0 6c 6c 2d 63 6f 64 65 20 20 20 20 20 20 20 20 20 |ll-code | 00000800 20 20 20 20 20 3b 20 4f 66 66 73 65 74 20 6f 66 | ; Offset of| 00000810 20 63 6f 6d 6d 61 6e 64 0d 02 08 2f 45 51 55 44 | command.../EQUD| 00000820 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000830 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f | ; No| 00000840 20 70 61 72 61 6d 73 0d 02 12 37 45 51 55 44 20 | params...7EQUD | 00000850 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00000860 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 | ; No | 00000870 73 79 6e 74 61 78 20 6d 65 73 73 61 67 65 0d 02 |syntax message..| 00000880 1c 2f 45 51 55 44 20 48 65 6c 70 5f 4b 69 6c 6c |./EQUD Help_Kill| 00000890 2d 63 6f 64 65 20 20 20 20 20 20 20 20 20 20 20 |-code | 000008a0 20 20 3b 20 48 65 6c 70 20 74 65 78 74 0d 02 26 | ; Help text..&| 000008b0 04 0d 02 30 38 45 51 55 53 20 22 50 6c 61 79 50 |...08EQUS "PlayP| 000008c0 61 75 73 65 22 3a 45 51 55 42 20 30 3a 41 4c 49 |ause":EQUB 0:ALI| 000008d0 47 4e 20 20 20 3b 20 2a 50 4c 41 59 50 41 55 53 |GN ; *PLAYPAUS| 000008e0 45 20 43 6f 6d 6d 61 6e 64 0d 02 3a 37 45 51 55 |E Command..:7EQU| 000008f0 44 20 50 6c 61 79 5f 50 61 75 73 65 2d 63 6f 64 |D Play_Pause-cod| 00000900 65 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4f |e ; O| 00000910 66 66 73 65 74 20 6f 66 20 63 6f 6d 6d 61 6e 64 |ffset of command| 00000920 0d 02 44 2f 45 51 55 44 20 30 20 20 20 20 20 20 |..D/EQUD 0 | 00000930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000940 20 20 20 20 3b 20 4e 6f 20 70 61 72 61 6d 73 0d | ; No params.| 00000950 02 4e 37 45 51 55 44 20 30 20 20 20 20 20 20 20 |.N7EQUD 0 | 00000960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000970 20 20 20 3b 20 4e 6f 20 73 79 6e 74 61 78 20 6d | ; No syntax m| 00000980 65 73 73 61 67 65 0d 02 58 2f 45 51 55 44 20 48 |essage..X/EQUD H| 00000990 65 6c 70 5f 50 61 75 73 65 2d 63 6f 64 65 20 20 |elp_Pause-code | 000009a0 20 20 20 20 20 20 20 20 20 20 3b 20 48 65 6c 70 | ; Help| 000009b0 20 74 65 78 74 0d 02 62 04 0d 02 6c 38 45 51 55 | text..b...l8EQU| 000009c0 53 20 22 50 6c 61 79 53 74 61 72 74 22 3a 45 51 |S "PlayStart":EQ| 000009d0 55 42 20 30 3a 41 4c 49 47 4e 20 20 20 3b 20 2a |UB 0:ALIGN ; *| 000009e0 50 4c 41 59 53 54 41 52 54 20 43 6f 6d 6d 61 6e |PLAYSTART Comman| 000009f0 64 0d 02 76 37 45 51 55 44 20 50 6c 61 79 5f 53 |d..v7EQUD Play_S| 00000a00 74 61 72 74 2d 63 6f 64 65 20 20 20 20 20 20 20 |tart-code | 00000a10 20 20 20 20 20 3b 20 4f 66 66 73 65 74 20 6f 66 | ; Offset of| 00000a20 20 63 6f 6d 6d 61 6e 64 0d 02 80 2f 45 51 55 44 | command.../EQUD| 00000a30 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000a40 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f | ; No| 00000a50 20 70 61 72 61 6d 73 0d 02 8a 37 45 51 55 44 20 | params...7EQUD | 00000a60 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00000a70 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 | ; No | 00000a80 73 79 6e 74 61 78 20 6d 65 73 73 61 67 65 0d 02 |syntax message..| 00000a90 94 2f 45 51 55 44 20 48 65 6c 70 5f 53 74 61 72 |./EQUD Help_Star| 00000aa0 74 2d 63 6f 64 65 20 20 20 20 20 20 20 20 20 20 |t-code | 00000ab0 20 20 3b 20 48 65 6c 70 20 74 65 78 74 0d 02 9e | ; Help text...| 00000ac0 04 0d 02 a8 39 45 51 55 53 20 22 53 65 74 50 6c |....9EQUS "SetPl| 00000ad0 61 79 50 6f 73 22 3a 45 51 55 42 20 30 3a 41 4c |ayPos":EQUB 0:AL| 00000ae0 49 47 4e 20 20 3b 20 2a 53 45 54 50 4c 41 59 50 |IGN ; *SETPLAYP| 00000af0 4f 53 20 43 6f 6d 6d 61 6e 64 0d 02 b2 19 45 51 |OS Command....EQ| 00000b00 55 44 20 53 65 74 5f 50 6c 61 79 50 6f 73 2d 63 |UD Set_PlayPos-c| 00000b10 6f 64 65 0d 02 bc 34 45 51 55 44 20 26 30 30 30 |ode...4EQUD &000| 00000b20 31 30 30 30 31 20 20 20 20 20 20 20 20 20 20 20 |10001 | 00000b30 20 20 20 20 20 20 20 3b 20 31 20 70 61 72 61 6d | ; 1 param| 00000b40 65 74 65 72 2e 2e 2e 0d 02 c6 1e 45 51 55 44 20 |eter.......EQUD | 00000b50 50 6c 61 79 50 6f 73 53 79 6e 5f 45 72 72 6f 72 |PlayPosSyn_Error| 00000b60 2d 63 6f 64 65 0d 02 d0 1a 45 51 55 44 20 48 65 |-code....EQUD He| 00000b70 6c 70 5f 50 6c 61 79 50 6f 73 2d 63 6f 64 65 0d |lp_PlayPos-code.| 00000b80 02 da 04 0d 02 e4 35 45 51 55 44 20 30 20 20 20 |......5EQUD 0 | 00000b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000ba0 20 20 20 20 20 20 20 3b 20 54 65 72 6d 69 6e 61 | ; Termina| 00000bb0 74 65 20 74 61 62 6c 65 0d 02 ee 04 0d 02 f8 19 |te table........| 00000bc0 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 00000bd0 2d 2d 2d 2d 2a 0d 03 02 17 3b 20 2a 20 20 c7 92 |----*....; * ..| 00000be0 20 4d 65 73 73 61 67 65 73 20 20 2a 0d 03 0c 19 | Messages *....| 00000bf0 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 00000c00 2d 2d 2d 2d 2a 0d 03 16 04 0d 03 20 0f 2e 48 65 |----*...... ..He| 00000c10 6c 70 5f 50 61 75 73 65 0d 03 2a 5a 45 51 55 53 |lp_Pause..*ZEQUS| 00000c20 20 22 2a 50 6c 61 79 50 61 75 73 65 20 77 69 6c | "*PlayPause wil| 00000c30 6c 20 70 61 75 73 65 20 74 68 65 20 63 75 72 72 |l pause the curr| 00000c40 65 6e 74 6c 79 20 70 6c 61 79 69 6e 67 20 74 75 |ently playing tu| 00000c50 6e 65 20 75 6e 74 69 6c 20 2a 50 6c 61 79 53 74 |ne until *PlaySt| 00000c60 61 72 74 20 43 6f 6d 6d 61 6e 64 2e 20 22 2b bd |art Command. "+.| 00000c70 31 33 0d 03 34 1d 45 51 55 53 20 22 53 79 6e 74 |13..4.EQUS "Synt| 00000c80 61 78 3a 20 2a 50 6c 61 79 50 61 75 73 65 22 0d |ax: *PlayPause".| 00000c90 03 3e 0a 45 51 55 42 20 30 0d 03 48 09 41 4c 49 |.>.EQUB 0..H.ALI| 00000ca0 47 4e 0d 03 52 0f 2e 48 65 6c 70 5f 53 74 61 72 |GN..R..Help_Star| 00000cb0 74 0d 03 5c 48 45 51 55 53 20 22 2a 50 6c 61 79 |t..\HEQUS "*Play| 00000cc0 53 74 61 72 74 20 77 69 6c 6c 20 70 6c 61 79 20 |Start will play | 00000cd0 74 68 65 20 74 75 6e 65 20 61 66 74 65 72 20 61 |the tune after a| 00000ce0 20 2a 50 6c 61 79 50 61 75 73 65 20 43 6f 6d 6d | *PlayPause Comm| 00000cf0 61 6e 64 2e 22 2b bd 31 33 0d 03 66 1d 45 51 55 |and."+.13..f.EQU| 00000d00 53 20 22 53 79 6e 74 61 78 3a 20 2a 50 6c 61 79 |S "Syntax: *Play| 00000d10 53 74 61 72 74 22 0d 03 70 0a 45 51 55 42 20 30 |Start"..p.EQUB 0| 00000d20 0d 03 7a 09 41 4c 49 47 4e 0d 03 84 0e 2e 48 65 |..z.ALIGN.....He| 00000d30 6c 70 5f 4b 69 6c 6c 0d 03 8e 53 45 51 55 53 20 |lp_Kill...SEQUS | 00000d40 22 2a 50 6c 61 79 4b 69 6c 6c 20 77 69 6c 6c 20 |"*PlayKill will | 00000d50 73 74 6f 70 20 26 20 6b 69 6c 6c 20 74 68 65 20 |stop & kill the | 00000d60 63 75 72 72 65 6e 74 6c 79 20 70 6c 61 79 69 6e |currently playin| 00000d70 67 20 74 75 6e 65 20 26 20 66 72 65 65 20 6d 65 |g tune & free me| 00000d80 6d 6f 72 79 2e 22 2b bd 31 33 0d 03 98 1c 45 51 |mory."+.13....EQ| 00000d90 55 53 20 22 53 79 6e 74 61 78 3a 20 2a 50 6c 61 |US "Syntax: *Pla| 00000da0 79 4b 69 6c 6c 22 0d 03 a2 0a 45 51 55 42 20 30 |yKill"....EQUB 0| 00000db0 0d 03 ac 09 41 4c 49 47 4e 0d 03 b6 11 2e 48 65 |....ALIGN.....He| 00000dc0 6c 70 5f 50 6c 61 79 50 6f 73 0d 03 c0 3e 45 51 |lp_PlayPos...>EQ| 00000dd0 55 53 20 22 2a 53 65 74 50 6c 61 79 50 6f 73 20 |US "*SetPlayPos | 00000de0 77 69 6c 6c 20 73 65 74 20 70 6f 73 69 74 69 6f |will set positio| 00000df0 6e 20 69 6e 20 73 65 71 75 65 6e 63 65 20 74 61 |n in sequence ta| 00000e00 62 6c 65 22 2b bd 31 33 0d 03 ca 24 45 51 55 53 |ble"+.13...$EQUS| 00000e10 20 22 53 79 6e 74 61 78 3a 20 2a 53 65 74 50 6c | "Syntax: *SetPl| 00000e20 61 79 50 6f 73 20 30 2d 31 32 37 22 0d 03 d4 0a |ayPos 0-127"....| 00000e30 45 51 55 42 20 30 0d 03 de 09 41 4c 49 47 4e 0d |EQUB 0....ALIGN.| 00000e40 03 e8 0e 2e 48 65 6c 70 5f 49 6e 69 74 0d 03 f2 |....Help_Init...| 00000e50 4a 45 51 55 53 20 22 2a 50 6c 61 79 49 6e 69 74 |JEQUS "*PlayInit| 00000e60 20 6c 6f 61 64 20 26 20 73 74 61 72 74 20 74 6f | load & start to| 00000e70 20 70 6c 61 79 20 74 68 65 20 73 70 65 63 69 66 | play the specif| 00000e80 69 65 64 20 54 72 61 63 6b 65 72 20 6d 6f 64 75 |ied Tracker modu| 00000e90 6c 65 22 2b bd 31 33 0d 03 fc 27 45 51 55 53 20 |le"+.13...'EQUS | 00000ea0 22 53 79 6e 74 61 78 3a 20 2a 50 6c 61 79 49 6e |"Syntax: *PlayIn| 00000eb0 69 74 20 3c 66 69 6c 65 6e 61 6d 65 3e 22 0d 04 |it <filename>"..| 00000ec0 06 0a 45 51 55 42 20 30 0d 04 10 09 41 4c 49 47 |..EQUB 0....ALIG| 00000ed0 4e 0d 04 1a 04 0d 04 24 1d 3b 20 49 6e 76 61 6c |N......$.; Inval| 00000ee0 69 64 20 73 79 6e 74 61 78 20 6d 65 73 73 61 67 |id syntax messag| 00000ef0 65 73 0d 04 2e 1d 3b 20 7e 7e 7e 7e 7e 7e 7e 7e |es....; ~~~~~~~~| 00000f00 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 0d |~~~~~~~~~~~~~~~.| 00000f10 04 38 12 2e 50 6c 61 79 53 79 6e 5f 45 72 72 6f |.8..PlaySyn_Erro| 00000f20 72 0d 04 42 26 45 51 55 53 20 22 53 79 6e 74 61 |r..B&EQUS "Synta| 00000f30 78 3a 20 2a 50 6c 61 79 4d 6f 64 20 3c 66 69 6c |x: *PlayMod <fil| 00000f40 65 6e 61 6d 65 3e 22 0d 04 4c 10 45 51 55 42 20 |ename>"..L.EQUB | 00000f50 30 3a 41 4c 49 47 4e 0d 04 56 15 2e 50 6c 61 79 |0:ALIGN..V..Play| 00000f60 50 6f 73 53 79 6e 5f 45 72 72 6f 72 0d 04 60 24 |PosSyn_Error..`$| 00000f70 45 51 55 53 20 22 53 79 6e 74 61 78 3a 20 2a 53 |EQUS "Syntax: *S| 00000f80 65 74 50 6c 61 79 50 6f 73 20 30 2d 31 32 37 22 |etPlayPos 0-127"| 00000f90 0d 04 6a 10 45 51 55 42 20 30 3a 41 4c 49 47 4e |..j.EQUB 0:ALIGN| 00000fa0 0d 04 74 04 0d 04 7e 2b 3b 20 2a 2d 2d 2d 2d 2d |..t...~+; *-----| 00000fb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00000fc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00000fd0 04 88 2b 3b 20 2a 20 20 4b 69 6c 6c 20 69 6e 74 |..+; * Kill int| 00000fe0 65 72 72 75 70 74 20 26 20 72 65 6c 65 61 73 65 |errupt & release| 00000ff0 20 6d 65 6d 6f 72 79 20 20 2a 0d 04 92 2b 3b 20 | memory *...+; | 00001000 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00001010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00001020 2d 2d 2d 2d 2a 0d 04 9c 04 0d 04 a6 0d 2e 6d 6f |----*.........mo| 00001030 64 5f 6b 69 6c 6c 0d 04 b0 2f 53 54 4d 46 44 20 |d_kill.../STMFD | 00001040 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 52 31 34 |R13!,{R0-R12,R14| 00001050 7d 20 20 20 20 20 20 3b 20 53 74 6f 72 65 20 72 |} ; Store r| 00001060 65 74 75 72 6e 0d 04 ba 31 4c 44 52 20 20 20 52 |eturn...1LDR R| 00001070 30 2c 50 6c 61 79 5f 46 6c 61 67 20 20 20 20 20 |0,Play_Flag | 00001080 20 20 20 20 20 20 3b 20 53 74 69 6c 6c 20 70 6c | ; Still pl| 00001090 61 79 69 6e 67 3f 0d 04 c4 0f 43 4d 50 20 20 20 |aying?....CMP | 000010a0 52 30 2c 23 30 0d 04 ce 1c 4c 44 4d 45 51 46 44 |R0,#0....LDMEQFD| 000010b0 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 | R13!,{R0-R12,PC| 000010c0 7d 0d 04 d8 04 0d 04 e2 38 4d 4f 56 20 20 20 52 |}.......8MOV R| 000010d0 30 2c 23 31 33 3a 4d 4f 56 20 52 31 2c 23 34 3a |0,#13:MOV R1,#4:| 000010e0 53 57 49 20 22 4f 53 5f 42 79 74 65 22 20 3b 20 |SWI "OS_Byte" ; | 000010f0 44 69 73 61 62 6c 65 20 65 76 65 6e 74 0d 04 ec |Disable event...| 00001100 04 0d 04 f6 11 4d 4f 56 20 20 20 52 30 2c 23 26 |.....MOV R0,#&| 00001110 31 30 0d 05 00 3f 42 4c 20 20 20 20 47 65 74 5f |10...?BL Get_| 00001120 49 6e 74 72 5f 41 64 72 20 20 20 20 20 20 20 20 |Intr_Adr | 00001130 20 20 20 3b 20 52 65 74 75 72 6e 20 52 31 3d 3e | ; Return R1=>| 00001140 49 6e 74 65 72 72 75 70 74 20 61 64 64 72 65 73 |Interrupt addres| 00001150 73 0d 05 0a 0f 4d 4f 56 20 20 20 52 32 2c 23 30 |s....MOV R2,#0| 00001160 0d 05 14 16 53 57 49 20 20 20 22 4f 53 5f 52 65 |....SWI "OS_Re| 00001170 6c 65 61 73 65 22 0d 05 1e 0f 4d 4f 56 20 20 20 |lease"....MOV | 00001180 52 30 2c 23 30 0d 05 28 16 53 54 52 20 20 20 52 |R0,#0..(.STR R| 00001190 30 2c 50 6c 61 79 5f 46 6c 61 67 0d 05 32 17 42 |0,Play_Flag..2.B| 000011a0 4c 20 20 20 20 54 72 6b 5f 43 6c 6f 73 65 5f 41 |L Trk_Close_A| 000011b0 6c 6c 0d 05 3c 12 4c 44 52 20 20 20 52 32 2c 5b |ll..<.LDR R2,[| 000011c0 52 31 32 5d 0d 05 46 32 43 4d 50 20 20 20 52 32 |R12]..F2CMP R2| 000011d0 2c 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 |,#0 | 000011e0 20 20 20 20 20 3b 20 4e 6f 6e 65 20 61 6c 6c 6f | ; None allo| 000011f0 63 61 74 65 64 3f 0d 05 50 2c 4c 44 4d 45 51 46 |cated?..P,LDMEQF| 00001200 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 |D R13!,{R0-R12,P| 00001210 43 7d 20 20 20 20 20 3b 20 4f 6b 20 72 65 74 75 |C} ; Ok retu| 00001220 72 6e 0d 05 5a 2d 4d 4f 56 20 20 20 52 30 2c 23 |rn..Z-MOV R0,#| 00001230 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |7 | 00001240 20 20 20 3b 20 46 72 65 65 20 69 74 20 75 70 0d | ; Free it up.| 00001250 05 64 16 53 57 49 20 20 20 22 58 4f 53 5f 4d 6f |.d.SWI "XOS_Mo| 00001260 64 75 6c 65 22 0d 05 6e 0f 4d 4f 56 20 20 20 52 |dule"..n.MOV R| 00001270 30 2c 23 30 0d 05 78 12 53 54 52 56 43 20 52 30 |0,#0..x.STRVC R0| 00001280 2c 5b 52 31 32 5d 0d 05 82 27 4c 44 4d 46 44 20 |,[R12]...'LDMFD | 00001290 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d |R13!,{R0-R12,PC}| 000012a0 20 20 20 20 20 20 20 3b 20 42 79 65 21 0d 05 8c | ; Bye!...| 000012b0 04 0d 05 96 0f 2e 50 6c 61 79 5f 50 61 75 73 65 |......Play_Pause| 000012c0 0d 05 a0 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b |....STMFD R13!,{| 000012d0 52 30 2d 52 31 32 2c 52 31 34 7d 0d 05 aa 0f 4d |R0-R12,R14}....M| 000012e0 4f 56 20 20 20 52 30 2c 23 30 0d 05 b4 3a 53 54 |OV R0,#0...:ST| 000012f0 52 20 20 20 52 30 2c 50 6c 61 79 5f 53 74 61 74 |R R0,Play_Stat| 00001300 75 73 20 20 20 20 20 20 20 20 20 3b 20 50 6c 61 |us ; Pla| 00001310 79 20 73 74 61 74 75 73 20 3d 20 30 20 3d 20 50 |y status = 0 = P| 00001320 61 75 73 65 0d 05 be 1a 4c 44 4d 46 44 20 52 31 |ause....LDMFD R1| 00001330 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 05 |3!,{R0-R12,PC}..| 00001340 c8 04 0d 05 d2 3d 3b 20 2a 2d 2d 2d 2d 2d 2d 2d |.....=; *-------| 00001350 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00001380 05 dc 3d 3b 20 2a 20 20 50 4c 41 59 53 54 41 52 |..=; * PLAYSTAR| 00001390 54 20 3d 20 50 6c 61 79 73 20 6d 75 73 69 63 20 |T = Plays music | 000013a0 61 66 74 65 72 20 61 20 50 6c 61 79 50 61 75 73 |after a PlayPaus| 000013b0 65 20 63 6f 6d 6d 61 6e 64 20 20 2a 0d 05 e6 3d |e command *...=| 000013c0 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 000013d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000013f0 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 05 f0 04 0d 05 fa |--------*.......| 00001400 0f 2e 50 6c 61 79 5f 53 74 61 72 74 0d 06 04 1b |..Play_Start....| 00001410 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |STMFD R13!,{R0-R| 00001420 31 32 2c 52 31 34 7d 0d 06 0e 0f 4d 4f 56 20 20 |12,R14}....MOV | 00001430 20 52 30 2c 23 31 0d 06 18 39 53 54 52 20 20 20 | R0,#1...9STR | 00001440 52 30 2c 50 6c 61 79 5f 53 74 61 74 75 73 20 20 |R0,Play_Status | 00001450 20 20 20 20 20 20 20 3b 20 50 6c 61 79 20 73 74 | ; Play st| 00001460 61 74 75 73 20 3d 20 31 20 3d 20 50 6c 61 79 0d |atus = 1 = Play.| 00001470 06 22 1a 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 |.".LDMFD R13!,{R| 00001480 30 2d 52 31 32 2c 50 43 7d 0d 06 2c 04 0d 06 36 |0-R12,PC}..,...6| 00001490 10 2e 50 6c 61 79 5f 53 74 61 74 75 73 0d 06 40 |..Play_Status..@| 000014a0 0a 45 51 55 44 20 31 0d 06 4a 04 0d 06 54 36 3b |.EQUD 1..J...T6;| 000014b0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 000014c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000014e0 2a 0d 06 5e 36 3b 20 2a 20 20 50 4c 41 59 50 4f |*..^6; * PLAYPO| 000014f0 53 20 3d 20 53 65 74 20 70 6f 73 69 74 69 6f 6e |S = Set position| 00001500 20 69 6e 20 73 65 71 75 65 6e 63 65 20 28 30 2d | in sequence (0-| 00001510 31 32 37 29 20 20 2a 0d 06 68 36 3b 20 2a 2d 2d |127) *..h6; *--| 00001520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 06 72 |------------*..r| 00001550 04 0d 06 7c 10 2e 53 65 74 5f 50 6c 61 79 50 6f |...|..Set_PlayPo| 00001560 73 0d 06 86 1b 53 54 4d 46 44 20 52 31 33 21 2c |s....STMFD R13!,| 00001570 7b 52 30 2d 52 31 32 2c 52 31 34 7d 0d 06 90 2f |{R0-R12,R14}.../| 00001580 4d 4f 56 20 20 20 52 31 2c 52 30 20 20 20 20 20 |MOV R1,R0 | 00001590 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 | ; R| 000015a0 31 20 3d 3e 20 53 74 72 69 6e 67 0d 06 9a 2a 4d |1 => String...*M| 000015b0 4f 56 20 20 20 52 30 2c 23 31 30 20 20 20 20 20 |OV R0,#10 | 000015c0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 42 61 | ; Ba| 000015d0 73 65 20 31 30 0d 06 a4 30 84 52 20 20 20 52 30 |se 10...0.R R0| 000015e0 2c 52 30 2c 23 26 41 30 3c 3c 32 34 20 20 20 20 |,R0,#&A0<<24 | 000015f0 20 20 20 20 20 3b 20 4e 75 6d 62 65 72 20 28 30 | ; Number (0| 00001600 2d 31 32 37 29 0d 06 ae 11 4d 4f 56 20 20 20 52 |-127)....MOV R| 00001610 32 2c 23 26 37 46 0d 06 b8 1b 53 57 49 20 20 20 |2,#&7F....SWI | 00001620 22 4f 53 5f 52 65 61 64 55 6e 73 69 67 6e 65 64 |"OS_ReadUnsigned| 00001630 22 0d 06 c2 1d 42 4c 20 20 20 20 47 65 74 5f 54 |"....BL Get_T| 00001640 72 6b 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 06 |rk_Infos_Block..| 00001650 cc 34 4c 44 52 20 20 20 52 34 2c 5b 52 31 32 2c |.4LDR R4,[R12,| 00001660 23 34 5d 20 20 20 20 20 20 20 20 20 20 20 20 3b |#4] ;| 00001670 20 52 34 20 3d 20 4d 75 73 69 63 20 6c 65 6e 67 | R4 = Music leng| 00001680 74 68 0d 06 d6 48 43 4d 50 20 20 20 52 32 2c 52 |th...HCMP R2,R| 00001690 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |4 | 000016a0 20 20 20 3b 20 43 68 65 63 6b 20 69 66 20 70 6f | ; Check if po| 000016b0 73 69 74 69 6f 6e 20 3e 20 6d 61 78 69 20 6d 75 |sition > maxi mu| 000016c0 73 69 63 20 6c 65 6e 67 74 68 0d 06 e0 1c 4c 44 |sic length....LD| 000016d0 4d 47 54 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |MGTFD R13!,{R0-R| 000016e0 31 32 2c 50 43 7d 0d 06 ea 3b 53 54 52 20 20 20 |12,PC}...;STR | 000016f0 52 32 2c 5b 52 31 32 5d 2c 23 38 20 20 20 20 20 |R2,[R12],#8 | 00001700 20 20 20 20 20 20 20 3b 20 53 65 74 20 70 6f 73 | ; Set pos| 00001710 69 74 69 6f 6e 20 69 6e 20 73 65 71 75 65 6e 63 |ition in sequenc| 00001720 65 0d 06 f4 0f 4d 4f 56 20 20 20 52 33 2c 23 30 |e....MOV R3,#0| 00001730 0d 06 fe 3a 53 54 52 20 20 20 52 33 2c 5b 52 31 |...:STR R3,[R1| 00001740 32 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |2] | 00001750 20 3b 20 50 6f 73 69 74 69 6f 6e 20 69 6e 20 70 | ; Position in p| 00001760 61 74 74 65 72 6e 20 3d 20 30 0d 07 08 1a 4c 44 |attern = 0....LD| 00001770 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 |MFD R13!,{R0-R12| 00001780 2c 50 43 7d 0d 07 12 04 0d 07 1c 41 3b 20 2a 2d |,PC}.......A; *-| 00001790 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000017c0 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 07 26 41 3b 20 2a |--------*..&A; *| 000017d0 20 20 50 4c 41 59 49 4e 49 54 20 3d 20 4c 6f 61 | PLAYINIT = Loa| 000017e0 64 20 4d 75 73 69 63 2c 20 49 6e 69 74 20 69 6e |d Music, Init in| 000017f0 74 65 72 72 75 70 74 20 26 20 53 74 61 72 74 20 |terrupt & Start | 00001800 70 6c 61 79 69 6e 67 20 20 2a 0d 07 30 41 3b 20 |playing *..0A; | 00001810 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00001820 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 07 3a 04 0d |----------*..:..| 00001850 07 44 0e 2e 50 6c 61 79 5f 49 6e 69 74 0d 07 4e |.D..Play_Init..N| 00001860 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d |.STMFD R13!,{R0-| 00001870 52 31 32 2c 52 31 34 7d 0d 07 58 33 42 4c 20 20 |R12,R14}..X3BL | 00001880 20 20 6d 6f 64 5f 6b 69 6c 6c 20 20 20 20 20 20 | mod_kill | 00001890 20 20 20 20 3b 20 53 74 6f 70 20 61 6e 79 20 63 | ; Stop any c| 000018a0 75 72 72 65 6e 74 20 74 75 6e 65 0d 07 62 2a 4d |urrent tune..b*M| 000018b0 4f 56 20 20 20 52 31 2c 52 30 20 20 20 20 20 20 |OV R1,R0 | 000018c0 20 20 20 20 20 20 20 3b 20 52 31 2d 3e 66 69 6c | ; R1->fil| 000018d0 65 6e 61 6d 65 0d 07 6c 31 4d 4f 56 20 20 20 52 |ename..l1MOV R| 000018e0 30 2c 23 35 20 20 20 20 20 20 20 20 20 20 20 20 |0,#5 | 000018f0 20 3b 20 52 65 61 64 20 63 61 74 61 6c 6f 67 75 | ; Read catalogu| 00001900 65 20 69 6e 66 6f 0d 07 76 14 53 57 49 20 20 20 |e info..v.SWI | 00001910 22 58 4f 53 5f 46 69 6c 65 22 0d 07 80 10 42 56 |"XOS_File"....BV| 00001920 43 20 20 20 6f 6b 66 69 6c 65 0d 07 8a 31 53 57 |C okfile...1SW| 00001930 49 20 20 20 22 58 4f 53 5f 57 72 69 74 65 53 22 |I "XOS_WriteS"| 00001940 20 20 20 20 20 20 3b 20 57 72 69 74 65 20 65 72 | ; Write er| 00001950 72 6f 72 20 6d 65 73 73 61 67 65 0d 07 94 16 45 |ror message....E| 00001960 51 55 53 20 20 22 46 69 6c 65 20 65 72 72 6f 72 |QUS "File error| 00001970 22 0d 07 9e 21 45 51 55 42 20 20 31 33 3a 45 51 |"...!EQUB 13:EQ| 00001980 55 42 20 31 30 3a 45 51 55 42 20 30 3a 41 4c 49 |UB 10:EQUB 0:ALI| 00001990 47 4e 0d 07 a8 1a 4c 44 4d 46 44 20 52 31 33 21 |GN....LDMFD R13!| 000019a0 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 07 b2 04 |,{R0-R12,PC}....| 000019b0 0d 07 bc 0b 2e 6f 6b 66 69 6c 65 0d 07 c6 2f 4d |.....okfile.../M| 000019c0 4f 56 20 20 20 52 33 2c 52 34 20 20 20 20 20 20 |OV R3,R4 | 000019d0 20 20 20 20 20 20 20 3b 20 54 72 79 20 74 6f 20 | ; Try to | 000019e0 67 65 74 20 6d 65 6d 6f 72 79 0d 07 d0 0f 4d 4f |get memory....MO| 000019f0 56 20 20 20 52 30 2c 23 36 0d 07 da 16 53 57 49 |V R0,#6....SWI| 00001a00 20 20 20 22 58 4f 53 5f 4d 6f 64 75 6c 65 22 0d | "XOS_Module".| 00001a10 07 e4 0f 42 56 43 20 20 20 6f 6b 6d 65 6d 0d 07 |...BVC okmem..| 00001a20 ee 31 53 57 49 20 20 20 22 58 4f 53 5f 57 72 69 |.1SWI "XOS_Wri| 00001a30 74 65 53 22 20 20 20 20 20 20 3b 20 57 72 69 74 |teS" ; Writ| 00001a40 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0d |e error message.| 00001a50 07 f8 1e 45 51 55 53 20 20 22 4e 6f 20 72 6f 6f |...EQUS "No roo| 00001a60 6d 20 66 6f 72 20 6d 6f 64 75 6c 65 22 0d 08 02 |m for module"...| 00001a70 21 45 51 55 42 20 20 31 33 3a 45 51 55 42 20 31 |!EQUB 13:EQUB 1| 00001a80 30 3a 45 51 55 42 20 30 3a 41 4c 49 47 4e 0d 08 |0:EQUB 0:ALIGN..| 00001a90 0c 1a 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 30 |..LDMFD R13!,{R0| 00001aa0 2d 52 31 32 2c 50 43 7d 0d 08 16 04 0d 08 20 0a |-R12,PC}...... .| 00001ab0 2e 6f 6b 6d 65 6d 0d 08 2a 12 53 54 52 20 20 20 |.okmem..*.STR | 00001ac0 52 32 2c 5b 52 31 32 5d 0d 08 34 35 53 54 52 20 |R2,[R12]..45STR | 00001ad0 20 20 52 32 2c 54 72 6b 5f 42 61 73 65 20 20 20 | R2,Trk_Base | 00001ae0 20 20 20 20 3b 20 53 61 76 65 20 6d 75 73 69 63 | ; Save music| 00001af0 20 62 61 73 65 20 61 64 64 72 65 73 73 0d 08 3e | base address..>| 00001b00 10 4d 4f 56 20 20 20 52 30 2c 23 31 36 0d 08 48 |.MOV R0,#16..H| 00001b10 0f 4d 4f 56 20 20 20 52 33 2c 23 30 0d 08 52 2b |.MOV R3,#0..R+| 00001b20 53 57 49 20 20 20 22 58 4f 53 5f 46 69 6c 65 22 |SWI "XOS_File"| 00001b30 20 20 20 20 20 20 20 20 3b 20 4c 6f 61 64 20 74 | ; Load t| 00001b40 68 65 20 66 69 6c 65 0d 08 5c 10 42 56 43 20 20 |he file..\.BVC | 00001b50 20 6f 6b 6c 6f 61 64 0d 08 66 31 53 57 49 20 20 | okload..f1SWI | 00001b60 20 22 4f 53 5f 57 72 69 74 65 53 22 20 20 20 20 | "OS_WriteS" | 00001b70 20 20 20 3b 20 57 72 69 74 65 20 65 72 72 6f 72 | ; Write error| 00001b80 20 6d 65 73 73 61 67 65 0d 08 70 1b 45 51 55 53 | message..p.EQUS| 00001b90 20 20 22 43 61 6e 27 74 20 6c 6f 61 64 20 66 69 | "Can't load fi| 00001ba0 6c 65 22 0d 08 7a 21 45 51 55 42 20 20 31 33 3a |le"..z!EQUB 13:| 00001bb0 45 51 55 42 20 31 30 3a 45 51 55 42 20 30 3a 41 |EQUB 10:EQUB 0:A| 00001bc0 4c 49 47 4e 0d 08 84 12 42 4c 20 20 20 20 6d 6f |LIGN....BL mo| 00001bd0 64 5f 6b 69 6c 6c 0d 08 8e 1a 4c 44 4d 46 44 20 |d_kill....LDMFD | 00001be0 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d |R13!,{R0-R12,PC}| 00001bf0 0d 08 98 04 0d 08 a2 0b 2e 6f 6b 6c 6f 61 64 0d |.........okload.| 00001c00 08 ac 43 42 4c 20 20 20 20 54 72 6b 5f 49 6e 69 |..CBL Trk_Ini| 00001c10 74 5f 41 6c 6c 20 20 20 20 20 20 3b 20 49 6e 69 |t_All ; Ini| 00001c20 74 20 54 72 61 63 6b 65 72 20 56 61 72 69 61 62 |t Tracker Variab| 00001c30 6c 65 73 20 26 20 53 6f 75 6e 64 20 53 79 73 74 |les & Sound Syst| 00001c40 65 6d 0d 08 b6 41 4d 4f 56 20 20 20 52 30 2c 23 |em...AMOV R0,#| 00001c50 26 31 30 20 20 20 20 20 20 20 20 20 20 20 3b 20 |&10 ; | 00001c60 43 6f 6d 6d 65 6e 74 20 74 68 69 73 20 6c 6f 74 |Comment this lot| 00001c70 20 69 73 20 75 73 69 6e 67 20 63 61 6c 6c 65 76 | is using callev| 00001c80 65 72 79 0d 08 c0 3a 42 4c 20 20 20 20 47 65 74 |ery...:BL Get| 00001c90 5f 49 6e 74 72 5f 41 64 72 20 20 20 20 20 20 3b |_Intr_Adr ;| 00001ca0 20 52 65 74 75 72 6e 20 52 31 3d 3e 49 6e 74 65 | Return R1=>Inte| 00001cb0 72 72 75 70 74 20 61 64 64 72 65 73 73 0d 08 ca |rrupt address...| 00001cc0 21 4d 4f 56 20 20 20 52 32 2c 23 30 20 20 20 20 |!MOV R2,#0 | 00001cd0 20 20 20 20 20 20 20 20 20 3b 20 52 31 32 0d 08 | ; R12..| 00001ce0 d4 14 53 57 49 20 20 20 22 4f 53 5f 43 6c 61 69 |..SWI "OS_Clai| 00001cf0 6d 22 0d 08 de 10 4d 4f 56 20 20 20 52 30 2c 23 |m"....MOV R0,#| 00001d00 31 34 0d 08 e8 0f 4d 4f 56 20 20 20 52 31 2c 23 |14....MOV R1,#| 00001d10 34 0d 08 f2 13 53 57 49 20 20 20 22 4f 53 5f 42 |4....SWI "OS_B| 00001d20 79 74 65 22 0d 08 fc 0f 4d 4f 56 20 20 20 52 30 |yte"....MOV R0| 00001d30 2c 23 31 0d 09 06 16 53 54 52 20 20 20 52 30 2c |,#1....STR R0,| 00001d40 50 6c 61 79 5f 46 6c 61 67 0d 09 10 0f 4d 4f 56 |Play_Flag....MOV| 00001d50 20 20 20 52 30 2c 23 31 0d 09 1a 39 53 54 52 20 | R0,#1...9STR | 00001d60 20 20 52 30 2c 50 6c 61 79 5f 53 74 61 74 75 73 | R0,Play_Status| 00001d70 20 20 20 20 20 20 20 20 20 3b 20 50 6c 61 79 20 | ; Play | 00001d80 73 74 61 74 75 73 20 3d 20 31 20 3d 20 50 6c 61 |status = 1 = Pla| 00001d90 79 0d 09 24 1a 4c 44 4d 46 44 20 52 31 33 21 2c |y..$.LDMFD R13!,| 00001da0 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 09 2e 04 0d |{R0-R12,PC}.....| 00001db0 09 38 0e 2e 50 6c 61 79 5f 46 6c 61 67 0d 09 42 |.8..Play_Flag..B| 00001dc0 35 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 |5EQUD 0 | 00001dd0 20 20 20 20 20 20 20 20 20 3b 20 3c 3e 30 20 69 | ; <>0 i| 00001de0 66 20 74 75 6e 65 20 69 6e 20 70 72 6f 67 72 65 |f tune in progre| 00001df0 73 73 0d 09 4c 04 0d 09 56 3a 3b 20 2a 2d 2d 2d |ss..L...V:; *---| 00001e00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001e20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00001e30 0d 09 60 3a 3b 20 2a 20 20 20 20 49 6e 69 74 20 |..`:; * Init | 00001e40 54 72 61 63 6b 65 72 20 56 61 72 69 61 62 6c 65 |Tracker Variable| 00001e50 73 20 26 20 49 6e 69 74 20 53 6f 75 6e 64 20 53 |s & Init Sound S| 00001e60 79 73 74 65 6d 20 20 20 20 2a 0d 09 6a 3a 3b 20 |ystem *..j:; | 00001e70 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00001e80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001ea0 2d 2d 2d 2a 0d 09 74 04 0d 09 7e 11 2e 54 72 6b |---*..t...~..Trk| 00001eb0 5f 49 6e 69 74 5f 41 6c 6c 0d 09 88 14 53 54 4d |_Init_All....STM| 00001ec0 46 44 20 52 31 33 21 2c 7b 52 31 34 7d 0d 09 92 |FD R13!,{R14}...| 00001ed0 42 41 44 52 20 20 20 52 31 32 2c 54 72 6b 5f 49 |BADR R12,Trk_I| 00001ee0 6e 66 6f 73 5f 42 6c 6f 63 6b 20 3b 20 52 31 32 |nfos_Block ; R12| 00001ef0 20 3d 3e 20 54 72 61 63 6b 65 72 20 50 6f 69 6e | => Tracker Poin| 00001f00 74 65 72 73 20 26 20 43 6f 75 6e 74 65 72 73 0d |ters & Counters.| 00001f10 09 9c 0f 4d 4f 56 20 20 20 52 31 2c 23 30 0d 09 |...MOV R1,#0..| 00001f20 a6 40 53 54 52 20 20 20 52 31 2c 5b 52 31 32 5d |.@STR R1,[R12]| 00001f30 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 53 65 |,#4 ; Se| 00001f40 74 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 53 65 |t position in Se| 00001f50 71 75 65 6e 63 65 20 74 6f 20 7a 65 72 6f 0d 09 |quence to zero..| 00001f60 b0 04 0d 09 ba 38 4c 44 52 20 20 20 52 30 2c 54 |.....8LDR R0,T| 00001f70 72 6b 5f 42 61 73 65 20 20 20 20 20 20 20 20 20 |rk_Base | 00001f80 3b 20 52 30 20 3d 3e 20 4d 75 73 69 63 20 42 61 |; R0 => Music Ba| 00001f90 73 65 20 41 64 64 72 65 73 73 0d 09 c4 35 4c 44 |se Address...5LD| 00001fa0 52 20 20 20 52 39 2c 5b 52 30 2c 23 34 5d 20 20 |R R9,[R0,#4] | 00001fb0 20 20 20 20 20 20 20 20 3b 20 52 39 20 3d 20 46 | ; R9 = F| 00001fc0 69 6c 65 20 4c 65 6e 67 74 68 20 28 2d 38 29 0d |ile Length (-8).| 00001fd0 09 ce 39 41 44 44 20 20 20 52 30 2c 52 30 2c 23 |..9ADD R0,R0,#| 00001fe0 38 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 |8 ; R| 00001ff0 30 20 3d 3e 20 46 69 72 73 74 20 43 68 75 6e 6b |0 => First Chunk| 00002000 20 41 64 64 72 65 73 73 0d 09 d8 31 41 44 44 20 | Address...1ADD | 00002010 20 20 52 39 2c 52 30 2c 52 39 20 20 20 20 20 20 | R9,R0,R9 | 00002020 20 20 20 20 20 20 3b 20 52 39 20 3d 3e 20 45 6e | ; R9 => En| 00002030 64 20 6f 66 20 66 69 6c 65 0d 09 e2 10 4d 4f 56 |d of file....MOV| 00002040 20 20 20 52 31 30 2c 52 30 0d 09 ec 04 0d 09 f6 | R10,R0.......| 00002050 17 4c 44 52 20 20 20 52 34 2c 4d 4c 45 4e 5f 43 |.LDR R4,MLEN_C| 00002060 68 75 6e 6b 0d 0a 00 14 42 4c 20 20 20 20 53 65 |hunk....BL Se| 00002070 61 72 63 68 5f 54 46 46 0d 0a 0a 44 4c 44 52 20 |arch_TFF...DLDR | 00002080 20 20 52 31 2c 5b 52 30 5d 20 20 20 20 20 20 20 | R1,[R0] | 00002090 20 20 20 20 20 20 3b 20 52 31 20 3d 20 4d 75 73 | ; R1 = Mus| 000020a0 69 63 20 4c 65 6e 67 74 68 20 28 3d 53 65 71 75 |ic Length (=Sequ| 000020b0 65 6e 63 65 20 6c 65 6e 67 74 68 29 0d 0a 14 15 |ence length)....| 000020c0 53 54 52 20 20 20 52 31 2c 5b 52 31 32 5d 2c 23 |STR R1,[R12],#| 000020d0 34 0d 0a 1e 0f 4d 4f 56 20 20 20 52 31 2c 23 30 |4....MOV R1,#0| 000020e0 0d 0a 28 3c 53 54 52 20 20 20 52 31 2c 5b 52 31 |..(<STR R1,[R1| 000020f0 32 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |2],#4 ; | 00002100 50 61 74 74 65 72 6e 20 6c 69 6e 65 20 63 6f 75 |Pattern line cou| 00002110 6e 74 65 72 20 74 6f 20 7a 65 72 6f 0d 0a 32 04 |nter to zero..2.| 00002120 0d 0a 3c 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 |..<.MOV R0,R10| 00002130 0d 0a 46 17 4c 44 52 20 20 20 52 34 2c 50 4c 45 |..F.LDR R4,PLE| 00002140 4e 5f 43 68 75 6e 6b 0d 0a 50 14 42 4c 20 20 20 |N_Chunk..P.BL | 00002150 20 53 65 61 72 63 68 5f 54 46 46 0d 0a 5a 3f 53 | Search_TFF..Z?S| 00002160 54 52 20 20 20 52 30 2c 5b 52 31 32 5d 2c 23 34 |TR R0,[R12],#4| 00002170 20 20 20 20 20 20 20 20 20 3b 20 53 61 76 65 20 | ; Save | 00002180 50 61 74 74 65 72 6e 20 54 61 62 6c 65 20 42 61 |Pattern Table Ba| 00002190 73 65 20 41 64 64 72 65 73 73 0d 0a 64 04 0d 0a |se Address..d...| 000021a0 6e 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 0a |n.MOV R0,R10..| 000021b0 78 17 4c 44 52 20 20 20 52 34 2c 53 45 51 55 5f |x.LDR R4,SEQU_| 000021c0 43 68 75 6e 6b 0d 0a 82 14 42 4c 20 20 20 20 53 |Chunk....BL S| 000021d0 65 61 72 63 68 5f 54 46 46 0d 0a 8c 3a 53 54 52 |earch_TFF...:STR| 000021e0 20 20 20 52 30 2c 5b 52 31 32 5d 2c 23 34 20 20 | R0,[R12],#4 | 000021f0 20 20 20 20 20 20 20 3b 20 53 61 76 65 20 53 65 | ; Save Se| 00002200 71 75 65 6e 63 65 20 42 61 73 65 20 41 64 64 72 |quence Base Addr| 00002210 65 73 73 0d 0a 96 04 0d 0a a0 10 4d 4f 56 20 20 |ess........MOV | 00002220 20 52 30 2c 52 31 30 0d 0a aa 17 4c 44 52 20 20 | R0,R10....LDR | 00002230 20 52 34 2c 50 4e 55 4d 5f 43 68 75 6e 6b 0d 0a | R4,PNUM_Chunk..| 00002240 b4 14 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 |..BL Search_T| 00002250 46 46 0d 0a be 3d 4c 44 52 20 20 20 52 36 2c 5b |FF...=LDR R6,[| 00002260 52 30 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |R0] | 00002270 3b 20 52 36 20 3d 20 50 61 74 74 65 72 6e 73 20 |; R6 = Patterns | 00002280 6e 75 6d 62 65 72 20 69 6e 20 6d 75 73 69 63 0d |number in music.| 00002290 0a c8 04 0d 0a d2 38 42 4c 20 20 20 20 47 65 74 |......8BL Get| 000022a0 5f 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 20 |_Patterns_Table | 000022b0 20 3b 20 52 31 31 20 3d 3e 20 6f 6e 20 50 61 74 | ; R11 => on Pat| 000022c0 74 65 72 6e 73 20 54 61 62 6c 65 0d 0a dc 16 53 |terns Table....S| 000022d0 54 52 20 20 20 52 31 31 2c 5b 52 31 32 5d 2c 23 |TR R11,[R12],#| 000022e0 34 0d 0a e6 17 4c 44 52 20 20 20 52 34 2c 50 41 |4....LDR R4,PA| 000022f0 54 54 5f 43 68 75 6e 6b 0d 0a f0 10 4d 4f 56 20 |TT_Chunk....MOV | 00002300 20 20 52 30 2c 52 31 30 0d 0a fa 14 2e 53 65 61 | R0,R10.....Sea| 00002310 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 0b 04 14 |rch_Patterns....| 00002320 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 46 46 |BL Search_TFF| 00002330 0d 0b 0e 46 53 54 52 20 20 20 52 30 2c 5b 52 31 |...FSTR R0,[R1| 00002340 31 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |1],#4 ; | 00002350 53 61 76 65 20 50 61 74 74 65 72 6e 20 41 64 64 |Save Pattern Add| 00002360 72 65 73 73 20 69 6e 20 50 61 74 74 65 72 6e 73 |ress in Patterns| 00002370 20 54 61 62 6c 65 0d 0b 18 4b 41 44 44 20 20 20 | Table...KADD | 00002380 52 30 2c 52 30 2c 52 33 20 20 20 20 20 20 20 20 |R0,R0,R3 | 00002390 20 20 20 20 3b 20 41 64 64 20 70 61 74 74 65 72 | ; Add patter| 000023a0 6e 20 6c 65 6e 67 74 68 20 74 6f 20 63 68 75 6e |n length to chun| 000023b0 6b 20 28 3d 6e 65 78 74 20 70 61 74 74 65 72 6e |k (=next pattern| 000023c0 29 0d 0b 22 12 53 55 42 53 20 20 52 36 2c 52 36 |)..".SUBS R6,R6| 000023d0 2c 23 31 0d 0b 2c 19 42 47 54 20 20 20 53 65 61 |,#1..,.BGT Sea| 000023e0 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 0b 36 04 |rch_Patterns..6.| 000023f0 0d 0b 40 18 41 44 52 20 20 20 52 31 2c 54 72 6b |..@.ADR R1,Trk| 00002400 5f 53 61 6d 70 6c 65 73 0d 0b 4a 17 4c 44 52 20 |_Samples..J.LDR | 00002410 20 20 52 34 2c 53 41 4d 50 5f 43 68 75 6e 6b 0d | R4,SAMP_Chunk.| 00002420 0b 54 43 4d 4f 56 20 20 20 52 37 2c 23 33 36 20 |.TCMOV R7,#36 | 00002430 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 33 | ; 3| 00002440 36 20 53 61 6d 70 6c 65 73 20 43 68 75 6e 6b 20 |6 Samples Chunk | 00002450 69 6e 20 6f 6e 65 20 6d 75 73 69 63 20 70 69 65 |in one music pie| 00002460 63 65 0d 0b 5e 15 2e 49 6e 69 74 5f 54 72 6b 5f |ce..^..Init_Trk_| 00002470 53 61 6d 70 6c 65 73 0d 0b 68 14 42 4c 20 20 20 |Samples..h.BL | 00002480 20 53 65 61 72 63 68 5f 54 46 46 0d 0b 72 12 53 | Search_TFF..r.S| 00002490 55 42 20 20 20 52 35 2c 52 30 2c 23 38 0d 0b 7c |UB R5,R0,#8..|| 000024a0 14 53 54 52 20 20 20 52 35 2c 5b 52 31 5d 2c 23 |.STR R5,[R1],#| 000024b0 34 0d 0b 86 12 41 44 44 20 20 20 52 30 2c 52 30 |4....ADD R0,R0| 000024c0 2c 52 33 0d 0b 90 12 53 55 42 53 20 20 52 37 2c |,R3....SUBS R7,| 000024d0 52 37 2c 23 31 0d 0b 9a 1a 42 47 54 20 20 20 49 |R7,#1....BGT I| 000024e0 6e 69 74 5f 54 72 6b 5f 53 61 6d 70 6c 65 73 0d |nit_Trk_Samples.| 000024f0 0b a4 04 0d 0b ae 10 4d 4f 56 20 20 20 52 30 2c |.......MOV R0,| 00002500 52 31 30 0d 0b b8 17 4c 44 52 20 20 20 52 34 2c |R10....LDR R4,| 00002510 4d 56 4f 58 5f 43 68 75 6e 6b 0d 0b c2 14 42 4c |MVOX_Chunk....BL| 00002520 20 20 20 20 53 65 61 72 63 68 5f 54 46 46 0d 0b | Search_TFF..| 00002530 cc 33 4c 44 52 20 20 20 52 31 32 2c 5b 52 30 5d |.3LDR R12,[R0]| 00002540 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 | ; R1| 00002550 32 20 3d 20 56 6f 69 63 65 73 20 4e 75 6d 62 65 |2 = Voices Numbe| 00002560 72 0d 0b d6 18 53 54 52 20 20 20 52 31 32 2c 54 |r....STR R12,T| 00002570 72 6b 5f 56 6f 69 63 65 73 0d 0b e0 04 0d 0b ea |rk_Voices.......| 00002580 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 0b f4 |.MOV R0,R10...| 00002590 17 4c 44 52 20 20 20 52 34 2c 53 54 45 52 5f 43 |.LDR R4,STER_C| 000025a0 68 75 6e 6b 0d 0b fe 14 42 4c 20 20 20 20 53 65 |hunk....BL Se| 000025b0 61 72 63 68 5f 54 46 46 0d 0c 08 3c 4d 4f 56 20 |arch_TFF...<MOV | 000025c0 20 20 52 31 31 2c 52 30 20 20 20 20 20 20 20 20 | R11,R0 | 000025d0 20 20 20 20 20 20 3b 20 52 31 31 20 3d 3e 20 53 | ; R11 => S| 000025e0 74 65 72 65 6f 20 50 6f 73 69 74 69 6f 6e 73 20 |tereo Positions | 000025f0 4c 69 73 74 0d 0c 12 43 42 4c 20 20 20 20 49 6e |List...CBL In| 00002600 69 74 5f 53 6f 75 6e 64 5f 53 79 73 74 65 6d 20 |it_Sound_System | 00002610 20 20 3b 20 4a 75 6d 70 20 54 6f 20 53 6f 75 6e | ; Jump To Soun| 00002620 64 20 53 79 73 74 65 6d 20 49 6e 69 74 69 61 6c |d System Initial| 00002630 69 73 61 74 69 6f 6e 0d 0c 1c 13 4c 44 4d 46 44 |isation....LDMFD| 00002640 20 52 31 33 21 2c 7b 50 43 7d 0d 0c 26 04 0d 0c | R13!,{PC}..&...| 00002650 30 1b 2e 54 49 4e 46 5f 43 68 75 6e 6b 3a 45 51 |0..TINF_Chunk:EQ| 00002660 55 53 20 22 54 49 4e 46 22 0d 0c 3a 1b 2e 4d 56 |US "TINF"..:..MV| 00002670 4f 58 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 4d |OX_Chunk:EQUS "M| 00002680 56 4f 58 22 0d 0c 44 1b 2e 53 54 45 52 5f 43 68 |VOX"..D..STER_Ch| 00002690 75 6e 6b 3a 45 51 55 53 20 22 53 54 45 52 22 0d |unk:EQUS "STER".| 000026a0 0c 4e 1b 2e 4d 4c 45 4e 5f 43 68 75 6e 6b 3a 45 |.N..MLEN_Chunk:E| 000026b0 51 55 53 20 22 4d 4c 45 4e 22 0d 0c 58 1b 2e 50 |QUS "MLEN"..X..P| 000026c0 4c 45 4e 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 |LEN_Chunk:EQUS "| 000026d0 50 4c 45 4e 22 0d 0c 62 1b 2e 53 45 51 55 5f 43 |PLEN"..b..SEQU_C| 000026e0 68 75 6e 6b 3a 45 51 55 53 20 22 53 45 51 55 22 |hunk:EQUS "SEQU"| 000026f0 0d 0c 6c 1b 2e 50 4e 55 4d 5f 43 68 75 6e 6b 3a |..l..PNUM_Chunk:| 00002700 45 51 55 53 20 22 50 4e 55 4d 22 0d 0c 76 1b 2e |EQUS "PNUM"..v..| 00002710 50 41 54 54 5f 43 68 75 6e 6b 3a 45 51 55 53 20 |PATT_Chunk:EQUS | 00002720 22 50 41 54 54 22 0d 0c 80 1b 2e 53 41 4d 50 5f |"PATT".....SAMP_| 00002730 43 68 75 6e 6b 3a 45 51 55 53 20 22 53 41 4d 50 |Chunk:EQUS "SAMP| 00002740 22 0d 0c 8a 04 0d 0c 94 3d 3b 20 2a 2d 2d 2d 2d |".......=; *----| 00002750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002780 2d 2a 0d 0c 9e 37 3b 20 2a 20 20 20 20 20 20 20 |-*...7; * | 00002790 20 20 20 20 20 20 d4 20 42 55 46 46 45 52 20 c8 | . BUFFER .| 000027a0 90 20 52 4f 55 54 49 4e 45 53 20 20 20 20 20 20 |. ROUTINES | 000027b0 20 20 20 20 20 20 20 20 2a 0d 0c a8 3d 3b 20 2a | *...=; *| 000027c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000027f0 2d 2d 2d 2d 2d 2a 0d 0c b2 3d 3b 20 2a 20 20 20 |-----*...=; * | 00002800 52 39 20 3d 3e 20 54 72 61 63 6b 65 72 20 49 6e |R9 => Tracker In| 00002810 66 6f 73 20 42 6c 6f 63 6b 20 28 33 32 20 42 79 |fos Block (32 By| 00002820 74 65 20 70 65 72 20 63 68 61 6e 6e 65 6c 29 20 |te per channel) | 00002830 20 20 2a 0d 0c bc 3d 3b 20 2a 20 20 20 20 20 5b | *...=; * [| 00002840 30 30 2d 30 33 5d 20 28 20 52 30 20 29 20 50 68 |00-03] ( R0 ) Ph| 00002850 61 73 65 20 41 63 63 75 6d 75 6c 61 74 6f 72 20 |ase Accumulator | 00002860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a | *| 00002870 0d 0c c6 3d 3b 20 2a 20 20 20 20 20 5b 30 34 2d |...=; * [04-| 00002880 30 37 5d 20 28 20 52 31 20 29 20 50 68 61 73 65 |07] ( R1 ) Phase| 00002890 20 49 6e 63 72 65 6d 65 6e 74 20 28 43 66 2e 20 | Increment (Cf. | 000028a0 46 72 65 71 75 65 6e 63 79 29 20 20 2a 0d 0c d0 |Frequency) *...| 000028b0 3d 3b 20 2a 20 20 20 20 20 5b 30 38 2d 31 31 5d |=; * [08-11]| 000028c0 20 28 20 52 32 20 29 20 52 65 70 65 61 74 20 4f | ( R2 ) Repeat O| 000028d0 66 66 73 65 74 20 20 20 20 20 20 20 20 20 20 20 |ffset | 000028e0 20 20 20 20 20 20 20 20 20 2a 0d 0c da 3d 3b 20 | *...=; | 000028f0 2a 20 20 20 20 20 5b 31 32 2d 31 35 5d 20 28 20 |* [12-15] ( | 00002900 52 33 20 29 20 53 61 6d 70 6c 65 20 4c 65 6e 67 |R3 ) Sample Leng| 00002910 74 68 20 28 6f 72 20 52 65 70 65 61 74 20 4c 65 |th (or Repeat Le| 00002920 6e 67 74 68 29 20 2a 0d 0c e4 3d 3b 20 2a 20 20 |ngth) *...=; * | 00002930 20 20 20 5b 31 36 2d 31 39 5d 20 28 20 52 34 20 | [16-19] ( R4 | 00002940 29 20 53 61 6d 70 6c 65 20 41 64 64 72 65 73 73 |) Sample Address| 00002950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002960 20 20 20 2a 0d 0c ee 3d 3b 20 2a 20 20 20 20 20 | *...=; * | 00002970 5b 32 30 2d 32 33 5d 20 28 20 52 35 20 29 20 53 |[20-23] ( R5 ) S| 00002980 61 6d 70 6c 65 20 56 6f 6c 75 6d 65 20 28 32 35 |ample Volume (25| 00002990 35 2d 56 6f 6c 75 6d 65 29 20 20 20 20 20 20 20 |5-Volume) | 000029a0 2a 0d 0c f8 3d 3b 20 2a 20 20 20 20 20 5b 32 34 |*...=; * [24| 000029b0 2d 32 37 5d 20 28 20 52 36 20 29 20 46 69 6c 6c |-27] ( R6 ) Fill| 000029c0 20 53 74 61 74 75 73 20 28 30 3d 5a 65 72 6f 73 | Status (0=Zeros| 000029d0 20 31 3d 53 61 6d 70 6c 65 73 29 20 20 2a 0d 0d | 1=Samples) *..| 000029e0 02 3d 3b 20 2a 20 20 20 20 20 5b 2e 2e 2e 2e 2e |.=; * [.....| 000029f0 5d 20 28 2e 2e 2e 2e 29 20 4f 74 68 65 72 73 20 |] (....) Others | 00002a00 69 6e 66 6f 73 20 66 6f 72 20 65 66 66 65 63 74 |infos for effect| 00002a10 73 20 20 20 20 20 20 20 20 20 2a 0d 0d 0c 3d 3b |s *...=;| 00002a20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00002a30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002a50 2d 2d 2d 2d 2d 2d 2d 2a 0d 0d 16 3d 3b 20 2a 20 |-------*...=; * | 00002a60 20 52 31 30 20 3d 20 44 4d 41 20 42 75 66 66 65 | R10 = DMA Buffe| 00002a70 72 20 6c 69 6d 69 74 73 20 28 2b 31 29 20 20 20 |r limits (+1) | 00002a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002a90 20 20 20 20 2a 0d 0d 20 3d 3b 20 2a 20 20 52 31 | *.. =; * R1| 00002aa0 31 20 3d 20 44 4d 41 20 42 75 66 66 65 72 20 49 |1 = DMA Buffer I| 00002ab0 6e 74 65 72 6c 65 61 76 65 20 49 6e 63 72 65 6d |nterleave Increm| 00002ac0 65 6e 74 20 28 31 2d 38 29 20 20 20 20 20 20 20 |ent (1-8) | 00002ad0 20 2a 0d 0d 2a 3d 3b 20 2a 20 20 52 31 32 20 3d | *..*=; * R12 =| 00002ae0 20 44 4d 41 20 42 75 66 66 65 72 20 62 61 73 65 | DMA Buffer base| 00002af0 20 70 6f 69 6e 74 65 72 20 28 2b 52 31 31 29 20 | pointer (+R11) | 00002b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d | *.| 00002b10 0d 34 3d 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.4=; *----------| 00002b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 0d 3e 04 |-----------*..>.| 00002b50 0d 0d 48 16 2e 46 69 6c 6c 5f 53 6f 75 6e 64 5f |..H..Fill_Sound_| 00002b60 42 75 66 66 65 72 0d 0d 52 1f 41 44 52 20 20 20 |Buffer..R.ADR | 00002b70 52 39 2c 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f |R9,Voices_Infos_| 00002b80 42 6c 6f 63 6b 0d 0d 5c 18 4c 44 52 20 20 20 52 |Block..\.LDR R| 00002b90 30 2c 50 6c 61 79 5f 53 74 61 74 75 73 0d 0d 66 |0,Play_Status..f| 00002ba0 0f 43 4d 50 20 20 20 52 30 2c 23 30 0d 0d 70 14 |.CMP R0,#0..p.| 00002bb0 42 45 51 20 20 20 43 6c 65 61 72 5f 46 69 6c 6c |BEQ Clear_Fill| 00002bc0 0d 0d 7a 04 0d 0d 84 18 41 44 44 20 20 20 52 39 |..z.....ADD R9| 00002bd0 2c 52 39 2c 52 37 2c 4c 53 4c 23 35 0d 0d 8e 14 |,R9,R7,LSL#5....| 00002be0 4c 44 4d 49 41 20 52 39 2c 7b 52 30 2d 52 36 7d |LDMIA R9,{R0-R6}| 00002bf0 0d 0d 98 04 0d 0d a2 0f 43 4d 50 20 20 20 52 36 |........CMP R6| 00002c00 2c 23 30 0d 0d ac 14 42 45 51 20 20 20 43 6c 65 |,#0....BEQ Cle| 00002c10 61 72 5f 46 69 6c 6c 0d 0d b6 04 0d 0d c0 19 53 |ar_Fill........S| 00002c20 55 42 20 20 20 52 38 2c 52 33 2c 52 30 2c 4c 53 |UB R8,R3,R0,LS| 00002c30 52 23 31 36 0d 0d ca 18 53 55 42 20 20 20 52 38 |R#16....SUB R8| 00002c40 2c 52 38 2c 52 31 2c 4c 53 52 23 38 0d 0d d4 11 |,R8,R1,LSR#8....| 00002c50 43 4d 50 20 20 20 52 38 2c 23 32 30 38 0d 0d de |CMP R8,#208...| 00002c60 15 41 44 52 47 54 20 52 32 2c 4e 65 77 5f 44 61 |.ADRGT R2,New_Da| 00002c70 74 61 0d 0d e8 13 42 47 54 20 20 20 46 75 6c 6c |ta....BGT Full| 00002c80 5f 46 69 6c 6c 0d 0d f2 04 0d 0d fc 0e 2e 46 69 |_Fill.........Fi| 00002c90 6c 6c 5f 4c 6f 6f 70 0d 0e 06 05 5d 0d 0e 10 12 |ll_Loop....]....| 00002ca0 e3 20 50 6c 6f 70 25 3d 31 20 b8 20 31 36 0d 0e |. Plop%=1 . 16..| 00002cb0 1a 05 5b 0d 0e 24 0d 4f 50 54 20 50 61 73 73 25 |..[..$.OPT Pass%| 00002cc0 0d 0e 2e 1b 4c 44 52 42 20 20 52 38 2c 5b 52 34 |....LDRB R8,[R4| 00002cd0 2c 52 30 2c 4c 53 52 23 31 36 5d 0d 0e 38 12 53 |,R0,LSR#16]..8.S| 00002ce0 55 42 53 20 20 52 38 2c 52 38 2c 52 35 0d 0e 42 |UBS R8,R8,R5..B| 00002cf0 0f 4d 4f 56 4d 49 20 52 38 2c 23 30 0d 0e 4c 16 |.MOVMI R8,#0..L.| 00002d00 53 54 52 42 20 20 52 38 2c 5b 52 31 32 5d 2c 52 |STRB R8,[R12],R| 00002d10 31 31 0d 0e 56 12 41 44 44 20 20 20 52 30 2c 52 |11..V.ADD R0,R| 00002d20 30 2c 52 31 0d 0e 60 05 5d 0d 0e 6a 05 ed 0d 0e |0,R1..`.]..j....| 00002d30 74 05 5b 0d 0e 7e 0f 4f 50 54 20 20 20 50 61 73 |t.[..~.OPT Pas| 00002d40 73 25 0d 0e 88 31 43 4d 50 20 20 20 52 33 2c 52 |s%...1CMP R3,R| 00002d50 30 2c 4c 53 52 23 31 36 20 20 20 20 20 20 20 20 |0,LSR#16 | 00002d60 20 20 3b 20 45 6e 64 20 6f 66 20 73 61 6d 70 6c | ; End of sampl| 00002d70 65 20 3f 0d 0e 92 1a 42 47 45 20 20 20 43 68 65 |e ?....BGE Che| 00002d80 63 6b 5f 42 75 66 66 65 72 5f 45 6e 64 0d 0e 9c |ck_Buffer_End...| 00002d90 39 4d 4f 56 53 20 20 52 30 2c 52 32 2c 4c 53 4c |9MOVS R0,R2,LSL| 00002da0 23 31 36 20 20 20 20 20 20 20 20 20 20 3b 20 59 |#16 ; Y| 00002db0 65 73 20 3d 3e 20 52 30 3d 52 65 70 65 61 74 20 |es => R0=Repeat | 00002dc0 4f 66 66 73 65 74 0d 0e a6 4a 42 45 51 20 20 20 |Offset...JBEQ | 00002dd0 43 6c 65 61 72 5f 46 69 6c 6c 20 20 20 20 20 20 |Clear_Fill | 00002de0 20 20 20 20 20 20 3b 20 49 66 20 6e 6f 20 72 65 | ; If no re| 00002df0 70 65 61 74 20 74 68 65 6e 20 66 69 6c 6c 20 62 |peat then fill b| 00002e00 75 66 66 65 72 20 77 69 74 68 20 7a 65 72 6f 73 |uffer with zeros| 00002e10 0d 0e b0 15 2e 43 68 65 63 6b 5f 42 75 66 66 65 |.....Check_Buffe| 00002e20 72 5f 45 6e 64 0d 0e ba 11 43 4d 50 20 20 20 52 |r_End....CMP R| 00002e30 31 32 2c 52 31 30 0d 0e c4 13 42 4c 54 20 20 20 |12,R10....BLT | 00002e40 46 69 6c 6c 5f 4c 6f 6f 70 0d 0e ce 04 0d 0e d8 |Fill_Loop.......| 00002e50 16 41 44 52 20 20 20 20 52 32 2c 4e 65 77 5f 44 |.ADR R2,New_D| 00002e60 61 74 61 0d 0e e2 4a 4c 44 52 42 20 20 20 52 34 |ata...JLDRB R4| 00002e70 2c 5b 52 32 2c 52 37 5d 20 20 20 20 20 20 20 20 |,[R2,R7] | 00002e80 20 20 20 20 3b 20 48 75 67 6f 20 68 61 73 20 66 | ; Hugo has f| 00002e90 6f 75 6e 64 20 74 68 69 73 20 73 79 73 74 65 6d |ound this system| 00002ea0 20 6e 6f 74 20 74 6f 20 6c 6f 6f 73 65 0d 0e ec | not to loose...| 00002eb0 34 43 4d 50 20 20 20 20 52 34 2c 23 30 20 20 20 |4CMP R4,#0 | 00002ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00002ed0 61 6e 79 20 6e 6f 74 65 2f 76 6f 69 63 65 2e 2e |any note/voice..| 00002ee0 2e 0d 0e f6 12 53 54 52 45 51 20 20 52 30 2c 5b |.....STREQ R0,[| 00002ef0 52 39 5d 0d 0f 00 10 4d 4f 56 4e 45 20 20 52 34 |R9]....MOVNE R4| 00002f00 2c 23 30 0d 0f 0a 15 53 54 52 4e 45 42 20 52 34 |,#0....STRNEB R4| 00002f10 2c 5b 52 32 2c 52 37 5d 0d 0f 14 04 0d 0f 1e 17 |,[R2,R7]........| 00002f20 4d 4f 56 20 20 20 52 30 2c 23 25 30 30 30 30 31 |MOV R0,#%00001| 00002f30 30 30 30 0d 0f 28 13 4c 44 4d 46 44 20 52 31 33 |000..(.LDMFD R13| 00002f40 21 2c 7b 50 43 7d 0d 0f 32 04 0d 0f 3c 0f 2e 43 |!,{PC}..2...<..C| 00002f50 6c 65 61 72 5f 46 69 6c 6c 0d 0f 46 0f 4d 4f 56 |lear_Fill..F.MOV| 00002f60 20 20 20 52 35 2c 23 30 0d 0f 50 15 53 54 52 20 | R5,#0..P.STR | 00002f70 20 20 52 35 2c 5b 52 39 2c 23 32 34 5d 0d 0f 5a | R5,[R9,#24]..Z| 00002f80 14 2e 43 6c 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f |..Clear_Fill_Loo| 00002f90 70 0d 0f 64 16 53 54 52 42 20 20 52 35 2c 5b 52 |p..d.STRB R5,[R| 00002fa0 31 32 5d 2c 52 31 31 0d 0f 6e 11 43 4d 50 20 20 |12],R11..n.CMP | 00002fb0 20 52 31 32 2c 52 31 30 0d 0f 78 19 42 4c 54 20 | R12,R10..x.BLT | 00002fc0 20 20 43 6c 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f | Clear_Fill_Loo| 00002fd0 70 0d 0f 82 17 4d 4f 56 20 20 20 52 30 2c 23 25 |p....MOV R0,#%| 00002fe0 30 30 30 30 31 30 30 30 0d 0f 8c 13 4c 44 4d 46 |00001000....LDMF| 00002ff0 44 20 52 31 33 21 2c 7b 50 43 7d 0d 0f 96 04 0d |D R13!,{PC}.....| 00003000 0f a0 17 2e 56 6f 69 63 65 73 5f 49 6e 66 6f 73 |....Voices_Infos| 00003010 5f 42 6c 6f 63 6b 0d 0f aa 05 5d 0d 0f b4 14 e3 |_Block....].....| 00003020 20 42 75 66 42 6c 6b 25 3d 31 20 b8 20 36 34 0d | BufBlk%=1 . 64.| 00003030 0f be 0e 5b 4f 50 54 20 50 61 73 73 25 0d 0f c8 |...[OPT Pass%...| 00003040 0a 45 51 55 44 20 30 0d 0f d2 05 5d 0d 0f dc 05 |.EQUD 0....]....| 00003050 ed 0d 0f e6 0e 5b 4f 50 54 20 50 61 73 73 25 0d |.....[OPT Pass%.| 00003060 0f f0 04 0d 0f fa 0d 2e 54 72 6b 5f 42 61 73 65 |........Trk_Base| 00003070 0d 10 04 31 45 51 55 44 20 20 30 20 20 20 20 20 |...1EQUD 0 | 00003080 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4d | ; M| 00003090 75 73 69 63 20 42 61 73 65 20 41 64 64 72 65 73 |usic Base Addres| 000030a0 73 0d 10 0e 14 2e 54 72 6b 5f 49 6e 66 6f 73 5f |s.....Trk_Infos_| 000030b0 42 6c 6f 63 6b 0d 10 18 3d 45 51 55 44 20 20 30 |Block...=EQUD 0| 000030c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000030d0 20 20 3b 20 50 6f 73 69 74 69 6f 6e 20 43 6f 75 | ; Position Cou| 000030e0 6e 74 65 72 20 28 49 6e 20 53 65 71 75 65 6e 63 |nter (In Sequenc| 000030f0 65 29 0d 10 22 2b 45 51 55 44 20 20 30 20 20 20 |e).."+EQUD 0 | 00003100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00003110 20 4d 75 73 69 63 20 4c 65 6e 67 74 68 0d 10 2c | Music Length..,| 00003120 3c 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 |<EQUD 0 | 00003130 20 20 20 20 20 20 20 20 20 20 3b 20 50 6f 73 69 | ; Posi| 00003140 74 69 6f 6e 20 43 6f 75 6e 74 65 72 20 28 49 6e |tion Counter (In| 00003150 20 50 61 74 74 65 72 6e 29 0d 10 36 3a 45 51 55 | Pattern)..6:EQU| 00003160 44 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 |D 0 | 00003170 20 20 20 20 20 20 3b 20 3d 3e 20 6f 6e 20 50 61 | ; => on Pa| 00003180 74 74 65 72 6e 73 20 4c 65 6e 67 74 68 20 54 61 |tterns Length Ta| 00003190 62 6c 65 0d 10 40 3a 45 51 55 44 20 20 30 20 20 |ble..@:EQUD 0 | 000031a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000031b0 3b 20 3d 3e 20 6f 6e 20 53 65 71 75 65 6e 63 65 |; => on Sequence| 000031c0 20 42 61 73 65 20 41 64 64 72 65 73 73 0d 10 4a | Base Address..J| 000031d0 47 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 |GEQUD 0 | 000031e0 20 20 20 20 20 20 20 20 20 20 3b 20 3d 3e 20 6f | ; => o| 000031f0 6e 20 50 61 74 74 65 72 6e 73 20 54 61 62 6c 65 |n Patterns Table| 00003200 20 28 75 70 20 74 6f 20 36 34 20 70 61 74 74 65 | (up to 64 patte| 00003210 72 6e 73 29 0d 10 54 0f 2e 54 72 6b 5f 56 6f 69 |rns)..T..Trk_Voi| 00003220 63 65 73 0d 10 5e 2c 45 51 55 44 20 20 30 20 20 |ces..^,EQUD 0 | 00003230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003240 3b 20 56 6f 69 63 65 73 20 4e 75 6d 62 65 72 0d |; Voices Number.| 00003250 10 68 10 2e 54 72 6b 5f 43 6f 75 6e 74 65 72 0d |.h..Trk_Counter.| 00003260 10 72 0b 45 51 55 44 20 20 35 0d 10 7c 0e 2e 54 |.r.EQUD 5..|..T| 00003270 72 6b 5f 53 70 65 65 64 0d 10 86 0b 45 51 55 44 |rk_Speed....EQUD| 00003280 20 20 36 0d 10 90 10 2e 54 72 6b 5f 53 61 6d 70 | 6.....Trk_Samp| 00003290 6c 65 73 0d 10 9a 05 5d 0d 10 a4 0c 50 25 2b 3d |les....]....P%+=| 000032a0 33 36 2a 34 0d 10 ae 0e 5b 4f 50 54 20 50 61 73 |36*4....[OPT Pas| 000032b0 73 25 0d 10 b8 10 2e 54 72 6b 5f 50 65 72 69 6f |s%.....Trk_Perio| 000032c0 64 73 0d 10 c2 1f 45 51 55 44 20 30 3a 45 51 55 |ds....EQUD 0:EQU| 000032d0 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 000032e0 30 0d 10 cc 1f 45 51 55 44 20 30 3a 45 51 55 44 |0....EQUD 0:EQUD| 000032f0 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 30 | 0:EQUD 0:EQUD 0| 00003300 0d 10 d6 15 2e 54 72 6b 5f 50 61 74 74 65 72 6e |.....Trk_Pattern| 00003310 5f 4c 69 6e 65 0d 10 e0 1f 45 51 55 44 20 30 3a |_Line....EQUD 0:| 00003320 45 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 |EQUD 0:EQUD 0:EQ| 00003330 55 44 20 30 0d 10 ea 1f 45 51 55 44 20 30 3a 45 |UD 0....EQUD 0:E| 00003340 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 |QUD 0:EQUD 0:EQU| 00003350 44 20 30 0d 10 f4 0d 2e 4e 65 77 5f 44 61 74 61 |D 0.....New_Data| 00003360 0d 10 fe 11 45 51 55 44 20 30 3a 45 51 55 44 20 |....EQUD 0:EQUD | 00003370 30 0d 11 08 14 2e 47 65 74 5f 49 6e 66 6f 73 5f |0.....Get_Infos_| 00003380 42 6c 6f 63 6b 0d 11 12 1e 41 44 52 20 20 52 37 |Block....ADR R7| 00003390 2c 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f 42 6c |,Voices_Infos_Bl| 000033a0 6f 63 6b 0d 11 1c 0f 4d 4f 56 20 20 50 43 2c 52 |ock....MOV PC,R| 000033b0 31 34 0d 11 26 18 2e 47 65 74 5f 54 72 6b 5f 49 |14..&..Get_Trk_I| 000033c0 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 11 30 1c 41 44 |nfos_Block..0.AD| 000033d0 52 20 20 52 31 32 2c 54 72 6b 5f 49 6e 66 6f 73 |R R12,Trk_Infos| 000033e0 5f 42 6c 6f 63 6b 0d 11 3a 0f 4d 4f 56 20 20 50 |_Block..:.MOV P| 000033f0 43 2c 52 31 34 0d 11 44 04 0d 11 4e 35 3b 20 2a |C,R14..D...N5; *| 00003400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00003420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 11 |-------------*..| 00003430 58 35 3b 20 2a 20 20 20 20 49 6e 63 72 65 6d 65 |X5; * Increme| 00003440 6e 74 2f 43 68 65 63 6b 20 43 6f 75 6e 74 65 72 |nt/Check Counter| 00003450 20 28 54 65 6d 70 6f 29 20 56 61 6c 75 65 20 20 | (Tempo) Value | 00003460 20 20 2a 0d 11 62 35 3b 20 2a 2d 2d 2d 2d 2d 2d | *..b5; *------| 00003470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00003490 2d 2d 2d 2d 2d 2d 2d 2a 0d 11 6c 04 0d 11 76 11 |-------*..l...v.| 000034a0 2e 47 65 74 5f 49 6e 74 72 5f 41 64 72 0d 11 80 |.Get_Intr_Adr...| 000034b0 1b 41 44 52 20 20 20 52 31 2c 54 72 6b 5f 50 6c |.ADR R1,Trk_Pl| 000034c0 61 79 5f 4d 75 73 69 63 0d 11 8a 10 4d 4f 56 20 |ay_Music....MOV | 000034d0 20 20 50 43 2c 52 31 34 0d 11 94 04 0d 11 9e 13 | PC,R14........| 000034e0 2e 54 72 6b 5f 50 6c 61 79 5f 4d 75 73 69 63 0d |.Trk_Play_Music.| 000034f0 11 a8 3f 43 4d 50 20 20 20 52 30 2c 23 34 20 20 |..?CMP R0,#4 | 00003500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003510 3b 20 43 68 65 63 6b 20 69 66 20 65 76 65 6e 74 |; Check if event| 00003520 20 69 73 20 61 20 56 53 59 4e 43 2e 2e 2e 0d 11 | is a VSYNC.....| 00003530 b2 11 4d 4f 56 4e 45 53 20 50 43 2c 52 31 34 0d |..MOVNES PC,R14.| 00003540 11 bc 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 |...STMFD R13!,{R| 00003550 30 2d 52 31 32 2c 52 31 34 7d 0d 11 c6 18 4c 44 |0-R12,R14}....LD| 00003560 52 20 20 20 52 30 2c 50 6c 61 79 5f 53 74 61 74 |R R0,Play_Stat| 00003570 75 73 0d 11 d0 0f 43 4d 50 20 20 20 52 30 2c 23 |us....CMP R0,#| 00003580 30 0d 11 da 1c 4c 44 4d 45 51 46 44 20 52 31 33 |0....LDMEQFD R13| 00003590 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 11 e4 |!,{R0-R12,PC}...| 000035a0 04 0d 11 ee 18 4c 44 52 20 20 20 52 30 2c 54 72 |.....LDR R0,Tr| 000035b0 6b 5f 43 6f 75 6e 74 65 72 0d 11 f8 16 4c 44 52 |k_Counter....LDR| 000035c0 20 20 20 52 31 2c 54 72 6b 5f 53 70 65 65 64 0d | R1,Trk_Speed.| 000035d0 12 02 12 41 44 44 20 20 20 52 30 2c 52 30 2c 23 |...ADD R0,R0,#| 000035e0 31 0d 12 0c 0f 43 4d 50 20 20 20 52 30 2c 52 31 |1....CMP R0,R1| 000035f0 0d 12 16 0f 4d 4f 56 47 45 20 52 30 2c 23 30 0d |....MOVGE R0,#0.| 00003600 12 20 18 53 54 52 20 20 20 52 30 2c 54 72 6b 5f |. .STR R0,Trk_| 00003610 43 6f 75 6e 74 65 72 0d 12 2a 14 42 45 51 20 20 |Counter..*.BEQ | 00003620 20 54 72 6b 5f 50 6c 61 79 65 72 0d 12 34 15 42 | Trk_Player..4.B| 00003630 4e 45 20 20 20 54 72 6b 5f 45 66 66 65 63 74 73 |NE Trk_Effects| 00003640 0d 12 3e 04 0d 12 48 32 3b 20 2a 2d 2d 2d 2d 2d |..>...H2; *-----| 00003650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00003670 2d 2d 2d 2d 2d 2a 0d 12 52 32 3b 20 2a 20 20 20 |-----*..R2; * | 00003680 20 50 6c 61 79 20 61 20 6e 65 77 20 6c 69 6e 65 | Play a new line| 00003690 20 6f 66 20 63 75 72 72 65 6e 74 20 70 61 74 74 | of current patt| 000036a0 65 72 6e 20 20 20 20 2a 0d 12 5c 32 3b 20 2a 2d |ern *..\2; *-| 000036b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000036d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 12 66 04 0d 12 |---------*..f...| 000036e0 70 0f 2e 54 72 6b 5f 50 6c 61 79 65 72 0d 12 7a |p..Trk_Player..z| 000036f0 1c 41 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e |.ADR R0,Trk_In| 00003700 66 6f 73 5f 42 6c 6f 63 6b 0d 12 84 18 4c 44 4d |fos_Block....LDM| 00003710 49 41 20 52 30 2c 7b 52 31 2d 52 36 2c 52 31 31 |IA R0,{R1-R6,R11| 00003720 7d 0d 12 8e 36 4c 44 52 42 20 20 52 37 2c 5b 52 |}...6LDRB R7,[R| 00003730 35 2c 52 31 5d 20 20 20 20 20 20 20 20 20 20 20 |5,R1] | 00003740 20 20 3b 20 52 37 20 3d 20 50 61 74 74 65 72 6e | ; R7 = Pattern| 00003750 20 6e 75 6d 62 65 72 0d 12 98 39 4c 44 52 20 20 | number...9LDR | 00003760 20 52 31 32 2c 5b 52 36 2c 52 37 2c 4c 53 4c 23 | R12,[R6,R7,LSL#| 00003770 32 5d 20 20 20 20 20 20 3b 20 52 31 32 20 3d 3e |2] ; R12 =>| 00003780 20 43 75 72 72 65 6e 74 20 70 61 74 74 65 72 6e | Current pattern| 00003790 0d 12 a2 42 4d 4f 56 20 20 20 52 31 30 2c 52 31 |...BMOV R10,R1| 000037a0 31 2c 4c 53 4c 23 32 20 20 20 20 20 20 20 20 20 |1,LSL#2 | 000037b0 20 3b 20 52 31 30 3d 52 31 31 2a 34 20 3d 20 50 | ; R10=R11*4 = P| 000037c0 61 74 74 65 72 6e 20 4c 69 6e 65 20 4c 65 6e 67 |attern Line Leng| 000037d0 74 68 0d 12 ac 3e 4d 4c 41 20 20 20 52 31 32 2c |th...>MLA R12,| 000037e0 52 33 2c 52 31 30 2c 52 31 32 20 20 20 20 20 20 |R3,R10,R12 | 000037f0 20 20 20 3b 20 52 31 32 20 3d 3e 20 43 75 72 72 | ; R12 => Curr| 00003800 65 6e 74 20 70 61 74 74 65 72 6e 20 6c 69 6e 65 |ent pattern line| 00003810 0d 12 b6 3e 4c 44 52 42 20 20 52 37 2c 5b 52 34 |...>LDRB R7,[R4| 00003820 2c 52 37 5d 20 20 20 20 20 20 20 20 20 20 20 20 |,R7] | 00003830 20 3b 20 52 37 20 3d 20 50 61 74 74 65 72 6e 20 | ; R7 = Pattern | 00003840 4c 65 6e 67 74 68 20 28 30 31 2d 36 34 29 0d 12 |Length (01-64)..| 00003850 c0 12 41 44 44 20 20 20 52 33 2c 52 33 2c 23 31 |..ADD R3,R3,#1| 00003860 0d 12 ca 33 43 4d 50 20 20 20 52 33 2c 52 37 20 |...3CMP R3,R7 | 00003870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003880 20 3b 20 45 6e 64 20 6f 66 20 50 61 74 74 65 72 | ; End of Patter| 00003890 6e 20 3f 0d 12 d4 18 42 4c 54 20 20 20 57 72 69 |n ?....BLT Wri| 000038a0 74 65 5f 50 6f 73 69 74 69 6f 6e 0d 12 de 0f 4d |te_Position....M| 000038b0 4f 56 20 20 20 52 33 2c 23 30 0d 12 e8 42 41 44 |OV R3,#0...BAD| 000038c0 44 20 20 20 52 31 2c 52 31 2c 23 31 20 20 20 20 |D R1,R1,#1 | 000038d0 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 65 78 | ; Nex| 000038e0 74 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 53 65 |t position in Se| 000038f0 71 75 65 6e 63 65 20 54 61 62 6c 65 0d 12 f2 44 |quence Table...D| 00003900 43 4d 50 20 20 20 52 31 2c 52 32 20 20 20 20 20 |CMP R1,R2 | 00003910 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4c | ; L| 00003920 61 73 74 20 50 6f 73 69 74 69 6f 6e 20 69 6e 20 |ast Position in | 00003930 53 65 71 75 65 6e 63 65 20 54 61 62 6c 65 20 3f |Sequence Table ?| 00003940 0d 12 fc 39 4d 4f 56 47 45 20 52 31 2c 23 30 20 |...9MOVGE R1,#0 | 00003950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003960 20 3b 20 49 66 20 59 65 73 2c 20 43 6c 65 61 72 | ; If Yes, Clear| 00003970 20 43 6f 75 6e 74 65 72 2e 0d 13 06 13 2e 57 72 | Counter......Wr| 00003980 69 74 65 5f 50 6f 73 69 74 69 6f 6e 0d 13 10 34 |ite_Position...4| 00003990 53 54 4d 49 41 20 52 30 2c 7b 52 31 2d 52 33 7d |STMIA R0,{R1-R3}| 000039a0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 | ; S| 000039b0 61 76 65 20 6e 65 77 20 70 6f 73 69 74 69 6f 6e |ave new position| 000039c0 0d 13 1a 04 0d 13 24 1d 41 44 52 20 20 20 52 32 |......$.ADR R2| 000039d0 2c 54 72 6b 5f 50 61 74 74 65 72 6e 5f 4c 69 6e |,Trk_Pattern_Lin| 000039e0 65 0d 13 2e 16 4c 44 4d 49 41 20 52 31 32 2c 7b |e....LDMIA R12,{| 000039f0 52 34 2d 52 31 31 7d 0d 13 38 15 53 54 4d 49 41 |R4-R11}..8.STMIA| 00003a00 20 52 32 2c 7b 52 34 2d 52 31 31 7d 0d 13 42 1f | R2,{R4-R11}..B.| 00003a10 41 44 52 20 20 20 52 37 2c 56 6f 69 63 65 73 5f |ADR R7,Voices_| 00003a20 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 13 4c 18 4c |Infos_Block..L.L| 00003a30 44 52 20 20 20 52 31 31 2c 54 72 6b 5f 56 6f 69 |DR R11,Trk_Voi| 00003a40 63 65 73 0d 13 56 40 42 4c 20 20 20 20 47 65 74 |ces..V@BL Get| 00003a50 5f 46 72 65 71 75 65 6e 63 65 5f 54 61 62 6c 65 |_Frequence_Table| 00003a60 20 20 20 3b 20 52 65 74 75 72 6e 20 52 38 20 3d | ; Return R8 =| 00003a70 3e 20 27 46 72 65 71 75 65 6e 63 65 27 20 54 61 |> 'Frequence' Ta| 00003a80 62 6c 65 0d 13 60 0f 4d 4f 56 20 20 20 52 39 2c |ble..`.MOV R9,| 00003a90 23 30 0d 13 6a 12 2e 54 72 6b 5f 56 6f 69 63 65 |#0..j..Trk_Voice| 00003aa0 4c 6f 6f 70 0d 13 74 34 4c 44 52 20 20 20 52 35 |Loop..t4LDR R5| 00003ab0 2c 5b 52 31 32 5d 2c 23 34 20 20 20 20 20 20 20 |,[R12],#4 | 00003ac0 20 20 20 20 3b 20 52 35 3d 4e 6f 74 65 2b 49 6e | ; R5=Note+In| 00003ad0 73 74 72 75 6d 65 6e 74 0d 13 7e 16 80 20 20 20 |strument..~.. | 00003ae0 52 32 2c 52 35 2c 23 26 46 46 30 30 30 30 0d 13 |R2,R5,#&FF0000..| 00003af0 88 40 4d 4f 56 20 20 20 52 32 2c 52 32 2c 4c 53 |.@MOV R2,R2,LS| 00003b00 52 23 31 36 20 20 20 20 20 20 20 20 20 20 3b 20 |R#16 ; | 00003b10 52 32 3d 53 61 6d 70 6c 65 20 6e 75 6d 62 65 72 |R2=Sample number| 00003b20 20 28 30 31 2d 33 36 29 3d 28 30 2d 5a 29 0d 13 | (01-36)=(0-Z)..| 00003b30 92 12 53 55 42 53 20 20 52 32 2c 52 32 2c 23 31 |..SUBS R2,R2,#1| 00003b40 0d 13 9c 11 42 4c 54 20 20 20 4e 65 78 74 4f 6e |....BLT NextOn| 00003b50 65 0d 13 a6 3b 42 4c 20 20 20 20 47 65 74 5f 4e |e...;BL Get_N| 00003b60 65 77 5f 53 61 6d 70 6c 65 20 20 20 20 20 20 20 |ew_Sample | 00003b70 20 3b 20 4e 6f 72 6d 61 6c 20 63 61 73 65 20 3d | ; Normal case =| 00003b80 20 4e 2d 4f 20 53 30 30 30 2e 2e 2e 0d 13 b0 39 | N-O S000......9| 00003b90 4d 4f 56 53 20 20 52 34 2c 52 35 2c 4c 53 52 23 |MOVS R4,R5,LSR#| 00003ba0 32 34 20 20 20 20 20 20 20 20 20 20 3b 20 52 34 |24 ; R4| 00003bb0 3d 4e 6f 74 65 20 6e 75 6d 62 65 72 20 20 28 30 |=Note number (0| 00003bc0 31 2d 33 36 29 0d 13 ba 37 42 4c 47 54 20 20 47 |1-36)...7BLGT G| 00003bd0 65 74 5f 4e 65 77 5f 4e 6f 74 65 20 20 20 20 20 |et_New_Note | 00003be0 20 20 20 20 20 3b 20 2e 2e 2e 20 47 65 74 20 53 | ; ... Get S| 00003bf0 61 6d 70 6c 65 20 26 20 4e 6f 74 65 0d 13 c4 0c |ample & Note....| 00003c00 2e 4e 65 78 74 4f 6e 65 0d 13 ce 16 42 4c 20 20 |.NextOne....BL | 00003c10 20 20 54 72 6b 5f 45 66 66 65 63 74 73 32 0d 13 | Trk_Effects2..| 00003c20 d8 13 41 44 44 20 20 20 52 37 2c 52 37 2c 23 33 |..ADD R7,R7,#3| 00003c30 32 0d 13 e2 12 41 44 44 20 20 20 52 39 2c 52 39 |2....ADD R9,R9| 00003c40 2c 23 31 0d 13 ec 10 43 4d 50 20 20 20 52 39 2c |,#1....CMP R9,| 00003c50 52 31 31 0d 13 f6 17 42 4c 54 20 20 20 54 72 6b |R11....BLT Trk| 00003c60 5f 56 6f 69 63 65 4c 6f 6f 70 0d 14 00 04 0d 14 |_VoiceLoop......| 00003c70 0a 0e 2e 45 6e 64 4f 66 50 6c 61 79 0d 14 14 1a |...EndOfPlay....| 00003c80 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |LDMFD R13!,{R0-R| 00003c90 31 32 2c 50 43 7d 0d 14 1e 04 0d 14 28 11 2e 47 |12,PC}......(..G| 00003ca0 65 74 5f 4e 65 77 5f 4e 6f 74 65 0d 14 32 18 53 |et_New_Note..2.S| 00003cb0 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 32 2c 52 |TMFD R13!,{R12,R| 00003cc0 31 34 7d 0d 14 3c 19 42 4c 20 20 20 20 47 65 74 |14}..<.BL Get| 00003cd0 5f 50 65 72 69 6f 64 73 5f 41 64 72 0d 14 46 12 |_Periods_Adr..F.| 00003ce0 53 55 42 20 20 20 52 33 2c 52 34 2c 23 31 0d 14 |SUB R3,R4,#1..| 00003cf0 50 1b 4c 44 52 20 20 20 52 33 2c 5b 52 31 32 2c |P.LDR R3,[R12,| 00003d00 52 33 2c 4c 53 4c 23 32 5d 0d 14 5a 40 53 54 52 |R3,LSL#2]..Z@STR| 00003d10 20 20 20 52 33 2c 5b 52 37 2c 23 32 38 5d 20 20 | R3,[R7,#28] | 00003d20 20 20 20 20 20 20 20 20 20 20 3b 20 53 61 76 65 | ; Save| 00003d30 20 70 65 72 69 6f 64 20 66 6f 72 20 70 6f 72 74 | period for port| 00003d40 61 6d 65 6e 74 6f 2e 2e 2e 0d 14 64 18 41 44 52 |amento.....d.ADR| 00003d50 20 20 20 52 31 2c 54 72 6b 5f 50 65 72 69 6f 64 | R1,Trk_Period| 00003d60 73 0d 14 6e 36 53 54 52 20 20 20 52 33 2c 5b 52 |s..n6STR R3,[R| 00003d70 31 2c 52 39 2c 4c 53 4c 23 32 5d 20 20 20 20 20 |1,R9,LSL#2] | 00003d80 20 20 3b 20 2e 2e 2e 61 6e 64 20 66 6f 72 20 61 | ; ...and for a| 00003d90 72 70 65 67 67 69 6f 0d 14 78 36 4c 44 52 20 20 |rpeggio..x6LDR | 00003da0 20 52 33 2c 5b 52 38 2c 52 33 2c 4c 53 4c 23 32 | R3,[R8,R3,LSL#2| 00003db0 5d 20 20 20 20 20 20 20 3b 20 47 65 74 20 70 68 |] ; Get ph| 00003dc0 61 73 65 20 69 6e 63 72 65 6d 65 6e 74 0d 14 82 |ase increment...| 00003dd0 42 53 54 52 20 20 20 52 33 2c 5b 52 37 2c 23 34 |BSTR R3,[R7,#4| 00003de0 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 |] ; | 00003df0 26 20 53 61 76 65 20 69 74 20 69 6e 20 76 6f 69 |& Save it in voi| 00003e00 63 65 73 20 69 6e 66 6f 73 20 62 6c 6f 63 6b 0d |ces infos block.| 00003e10 14 8c 0f 4d 4f 56 20 20 20 52 31 2c 23 30 0d 14 |...MOV R1,#0..| 00003e20 96 3a 53 54 52 20 20 20 52 31 2c 5b 52 37 2c 23 |.:STR R1,[R7,#| 00003e30 30 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |0] ;| 00003e40 20 43 6c 65 61 72 20 70 68 61 73 65 20 61 63 63 | Clear phase acc| 00003e50 75 6d 75 6c 61 74 6f 72 0d 14 a0 18 4c 44 4d 46 |umulator....LDMF| 00003e60 44 20 52 31 33 21 2c 7b 52 31 32 2c 50 43 7d 5e |D R13!,{R12,PC}^| 00003e70 0d 14 aa 04 0d 14 b4 13 2e 47 65 74 5f 4e 65 77 |.........Get_New| 00003e80 5f 53 61 6d 70 6c 65 0d 14 be 1b 53 54 4d 46 44 |_Sample....STMFD| 00003e90 20 52 31 33 21 2c 7b 52 34 2c 52 31 32 2c 52 31 | R13!,{R4,R12,R1| 00003ea0 34 7d 0d 14 c8 18 41 44 52 20 20 20 52 33 2c 54 |4}....ADR R3,T| 00003eb0 72 6b 5f 53 61 6d 70 6c 65 73 0d 14 d2 36 4c 44 |rk_Samples...6LD| 00003ec0 52 20 20 20 52 33 2c 5b 52 33 2c 52 32 2c 4c 53 |R R3,[R3,R2,LS| 00003ed0 4c 23 32 5d 20 20 20 20 20 20 20 3b 20 52 33 20 |L#2] ; R3 | 00003ee0 3d 3e 20 41 63 74 75 61 6c 20 53 61 6d 70 6c 65 |=> Actual Sample| 00003ef0 0d 14 dc 35 41 44 44 20 20 20 52 34 2c 52 33 2c |...5ADD R4,R3,| 00003f00 23 36 30 20 20 20 20 20 20 20 20 20 20 20 20 20 |#60 | 00003f10 20 3b 20 52 34 20 3d 3e 20 53 61 6d 70 6c 65 73 | ; R4 => Samples| 00003f20 20 44 61 74 61 0d 14 e6 15 53 54 52 20 20 20 52 | Data....STR R| 00003f30 34 2c 5b 52 37 2c 23 31 36 5d 0d 14 f0 0f 4d 4f |4,[R7,#16]....MO| 00003f40 56 20 20 20 52 31 2c 23 31 0d 14 fa 3d 53 54 52 |V R1,#1...=STR| 00003f50 20 20 20 52 31 2c 5b 52 37 2c 23 32 34 5d 20 20 | R1,[R7,#24] | 00003f60 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 20 3d | ; R1 =| 00003f70 20 46 6c 61 67 20 46 69 6c 6c 20 57 69 74 68 20 | Flag Fill With | 00003f80 53 61 6d 70 6c 65 0d 15 04 04 0d 15 0e 10 3b 20 |Sample........; | 00003f90 53 65 74 20 56 6f 6c 75 6d 65 0d 15 18 04 0d 15 |Set Volume......| 00003fa0 22 35 4c 44 52 20 20 20 52 31 2c 5b 52 33 2c 23 |"5LDR R1,[R3,#| 00003fb0 31 36 2b 32 38 5d 20 20 20 20 20 20 20 20 20 3b |16+28] ;| 00003fc0 20 52 31 20 3d 20 53 61 6d 70 6c 65 20 56 6f 6c | R1 = Sample Vol| 00003fd0 75 6d 65 0d 15 2c 13 53 55 42 53 20 20 52 34 2c |ume..,.SUBS R4,| 00003fe0 52 31 2c 23 36 38 0d 15 36 0f 4d 4f 56 4c 54 20 |R1,#68..6.MOVLT | 00003ff0 52 34 2c 23 30 0d 15 40 15 4d 4f 56 20 20 20 52 |R4,#0..@.MOV R| 00004000 34 2c 52 34 2c 4c 53 52 23 32 0d 15 4a 14 52 53 |4,R4,LSR#2..J.RS| 00004010 42 20 20 20 52 31 2c 52 31 2c 23 32 35 35 0d 15 |B R1,R1,#255..| 00004020 54 15 53 54 52 20 20 20 52 31 2c 5b 52 37 2c 23 |T.STR R1,[R7,#| 00004030 32 30 5d 0d 15 5e 04 0d 15 68 18 3b 20 53 65 74 |20]..^...h.; Set| 00004040 20 56 6f 6c 75 6d 65 20 43 6f 6d 6d 61 6e 64 0d | Volume Command.| 00004050 15 72 04 0d 15 7c 14 80 20 20 20 52 34 2c 52 35 |.r...|.. R4,R5| 00004060 2c 23 26 46 46 30 30 0d 15 86 13 43 4d 50 20 20 |,#&FF00....CMP | 00004070 20 52 34 2c 23 26 31 46 30 30 0d 15 90 12 80 45 | R4,#&1F00.....E| 00004080 51 20 52 31 2c 52 35 2c 23 26 46 46 0d 15 9a 14 |Q R1,R5,#&FF....| 00004090 52 53 42 45 51 20 52 31 2c 52 31 2c 23 26 46 46 |RSBEQ R1,R1,#&FF| 000040a0 0d 15 a4 15 53 54 52 45 51 20 52 31 2c 5b 52 37 |....STREQ R1,[R7| 000040b0 2c 23 32 30 5d 0d 15 ae 04 0d 15 b8 1e 3b 20 47 |,#20]........; G| 000040c0 65 74 20 26 20 53 61 76 65 20 73 61 6d 70 6c 65 |et & Save sample| 000040d0 73 20 69 6e 66 6f 73 0d 15 c2 04 0d 15 cc 38 4c |s infos.......8L| 000040e0 44 52 20 20 20 52 31 2c 5b 52 33 2c 23 34 30 2b |DR R1,[R3,#40+| 000040f0 32 38 5d 20 20 20 20 20 20 20 20 20 20 20 20 3b |28] ;| 00004100 20 52 31 20 3d 20 52 65 70 65 61 74 20 4f 66 66 | R1 = Repeat Off| 00004110 73 65 74 0d 15 d6 38 4c 44 52 20 20 20 52 34 2c |set...8LDR R4,| 00004120 5b 52 33 2c 23 35 32 2b 32 38 5d 20 20 20 20 20 |[R3,#52+28] | 00004130 20 20 20 20 20 20 20 3b 20 52 34 20 3d 20 52 65 | ; R4 = Re| 00004140 70 65 61 74 20 4c 65 6e 67 74 68 0d 15 e0 0f 43 |peat Length....C| 00004150 4d 50 20 20 20 52 34 2c 23 32 0d 15 ea 12 41 44 |MP R4,#2....AD| 00004160 44 4e 45 20 52 34 2c 52 34 2c 52 31 0d 15 f4 38 |DNE R4,R4,R1...8| 00004170 4c 44 52 45 51 20 52 34 2c 5b 52 33 2c 23 32 38 |LDREQ R4,[R3,#28| 00004180 2b 32 38 5d 20 20 20 20 20 20 20 20 20 20 20 20 |+28] | 00004190 3b 20 52 34 20 3d 20 53 61 6d 70 6c 65 20 4c 65 |; R4 = Sample Le| 000041a0 6e 67 74 68 0d 15 fe 15 53 54 52 20 20 20 52 34 |ngth....STR R4| 000041b0 2c 5b 52 37 2c 23 31 32 5d 0d 16 08 12 41 44 44 |,[R7,#12]....ADD| 000041c0 4e 45 20 52 31 2c 52 31 2c 23 31 0d 16 12 39 53 |NE R1,R1,#1...9S| 000041d0 54 52 20 20 20 52 31 2c 5b 52 37 2c 23 38 5d 20 |TR R1,[R7,#8] | 000041e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 000041f0 20 53 61 75 76 65 20 52 65 70 65 61 74 20 4f 66 | Sauve Repeat Of| 00004200 66 73 65 74 0d 16 1c 04 0d 16 26 15 41 44 52 20 |fset......&.ADR | 00004210 20 20 52 34 2c 4e 65 77 5f 44 61 74 61 0d 16 30 | R4,New_Data..0| 00004220 0f 4d 4f 56 20 20 20 52 31 2c 23 31 0d 16 3a 14 |.MOV R1,#1..:.| 00004230 53 54 52 42 20 20 52 31 2c 5b 52 34 2c 52 39 5d |STRB R1,[R4,R9]| 00004240 0d 16 44 04 0d 16 4e 1b 4c 44 4d 46 44 20 52 31 |..D...N.LDMFD R1| 00004250 33 21 2c 7b 52 34 2c 52 31 32 2c 50 43 7d 5e 0d |3!,{R4,R12,PC}^.| 00004260 16 58 04 0d 16 62 24 3b 20 2a 2d 2d 2d 2d 2d 2d |.X...b$; *------| 00004270 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004280 2d 2d 2d 2d 2d 2d 2a 0d 16 6c 24 3b 20 2a 20 20 |------*..l$; * | 00004290 20 20 20 20 45 66 66 65 63 74 73 20 43 68 65 63 | Effects Chec| 000042a0 6b 69 6e 67 20 23 31 20 20 20 2a 0d 16 76 24 3b |king #1 *..v$;| 000042b0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 000042c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 000042d0 16 80 24 3b 20 2a 20 20 27 45 27 20 20 3d 20 53 |..$; * 'E' = S| 000042e0 65 74 20 53 74 65 72 65 6f 20 20 20 20 20 20 20 |et Stereo | 000042f0 20 20 2a 0d 16 8a 24 3b 20 2a 20 20 27 4a 27 20 | *...$; * 'J' | 00004300 20 3d 20 50 6f 73 69 74 69 6f 6e 20 4a 75 6d 70 | = Position Jump| 00004310 20 20 20 20 20 20 2a 0d 16 94 24 3b 20 2a 20 20 | *...$; * | 00004320 27 56 27 20 20 3d 20 53 65 74 20 56 6f 6c 75 6d |'V' = Set Volum| 00004330 65 20 20 20 20 20 20 20 20 20 2a 0d 16 9e 24 3b |e *...$;| 00004340 20 2a 20 20 27 42 27 20 20 3d 20 50 61 74 74 65 | * 'B' = Patte| 00004350 72 6e 20 42 72 65 61 6b 20 20 20 20 20 20 2a 0d |rn Break *.| 00004360 16 a8 24 3b 20 2a 20 20 27 53 27 20 20 3d 20 53 |..$; * 'S' = S| 00004370 65 74 20 53 70 65 65 64 20 20 20 20 20 20 20 20 |et Speed | 00004380 20 20 2a 0d 16 b2 24 3b 20 2a 2d 2d 2d 2d 2d 2d | *...$; *------| 00004390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000043a0 2d 2d 2d 2d 2d 2d 2a 0d 16 bc 04 0d 16 c6 11 2e |------*.........| 000043b0 54 72 6b 5f 45 66 66 65 63 74 73 32 0d 16 d0 14 |Trk_Effects2....| 000043c0 80 20 20 20 52 34 2c 52 35 2c 23 26 46 46 30 30 |. R4,R5,#&FF00| 000043d0 0d 16 da 04 0d 16 e4 16 3b 20 53 65 74 20 56 6f |........; Set Vo| 000043e0 6c 75 6d 65 20 28 27 56 27 29 0d 16 ee 04 0d 16 |lume ('V')......| 000043f0 f8 13 43 4d 50 20 20 20 52 34 2c 23 26 31 46 30 |..CMP R4,#&1F0| 00004400 30 0d 17 02 17 42 4e 45 20 20 20 4e 6f 5f 53 65 |0....BNE No_Se| 00004410 74 5f 56 6f 6c 75 6d 65 0d 17 0c 12 80 20 20 20 |t_Volume..... | 00004420 52 31 2c 52 35 2c 23 26 46 46 0d 17 16 14 52 53 |R1,R5,#&FF....RS| 00004430 42 20 20 20 52 31 2c 52 31 2c 23 26 46 46 0d 17 |B R1,R1,#&FF..| 00004440 20 15 53 54 52 20 20 20 52 31 2c 5b 52 37 2c 23 | .STR R1,[R7,#| 00004450 32 30 5d 0d 17 2a 10 4d 4f 56 20 20 20 50 43 2c |20]..*.MOV PC,| 00004460 52 31 34 0d 17 34 12 2e 4e 6f 5f 53 65 74 5f 56 |R14..4..No_Set_V| 00004470 6f 6c 75 6d 65 0d 17 3e 04 0d 17 48 16 3b 20 53 |olume..>...H.; S| 00004480 65 74 20 53 70 65 65 64 20 20 28 27 53 27 29 0d |et Speed ('S').| 00004490 17 52 04 0d 17 5c 13 43 4d 50 20 20 20 52 34 2c |.R...\.CMP R4,| 000044a0 23 26 31 43 30 30 0d 17 66 16 42 4e 45 20 20 20 |#&1C00..f.BNE | 000044b0 4e 6f 5f 53 65 74 5f 53 70 65 65 64 0d 17 70 12 |No_Set_Speed..p.| 000044c0 80 53 20 20 52 31 2c 52 35 2c 23 26 30 46 0d 17 |.S R1,R5,#&0F..| 000044d0 7a 16 53 54 52 4e 45 20 52 31 2c 54 72 6b 5f 53 |z.STRNE R1,Trk_S| 000044e0 70 65 65 64 0d 17 84 10 4d 4f 56 20 20 20 50 43 |peed....MOV PC| 000044f0 2c 52 31 34 0d 17 8e 11 2e 4e 6f 5f 53 65 74 5f |,R14.....No_Set_| 00004500 53 70 65 65 64 0d 17 98 04 0d 17 a2 1a 3b 20 50 |Speed........; P| 00004510 61 74 74 65 72 6e 20 42 72 65 61 6b 20 20 28 27 |attern Break ('| 00004520 42 27 29 0d 17 ac 04 0d 17 b6 12 43 4d 50 20 20 |B')........CMP | 00004530 20 52 34 2c 23 26 42 30 30 0d 17 c0 1a 42 4e 45 | R4,#&B00....BNE| 00004540 20 20 20 4e 6f 5f 50 61 74 74 65 72 6e 5f 42 72 | No_Pattern_Br| 00004550 65 61 6b 0d 17 ca 1c 41 44 52 20 20 20 52 30 2c |eak....ADR R0,| 00004560 54 72 6b 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d |Trk_Infos_Block.| 00004570 17 d4 14 4c 44 4d 49 41 20 52 30 2c 7b 52 31 2d |...LDMIA R0,{R1-| 00004580 52 33 7d 0d 17 de 41 41 44 44 20 20 20 52 31 2c |R3}...AADD R1,| 00004590 52 31 2c 23 31 20 20 20 20 20 20 20 20 20 20 20 |R1,#1 | 000045a0 20 20 20 20 20 20 20 20 20 20 20 3b 20 50 6f 73 | ; Pos| 000045b0 69 74 69 6f 6e 20 3d 20 50 6f 73 69 74 69 6f 6e |ition = Position| 000045c0 20 2b 20 31 0d 17 e8 0f 43 4d 50 20 20 20 52 31 | + 1....CMP R1| 000045d0 2c 52 32 0d 17 f2 0c ec 51 20 52 31 2c 23 30 0d |,R2.....Q R1,#0.| 000045e0 17 fc 46 4d 4f 56 20 20 20 52 33 2c 23 30 20 20 |..FMOV R3,#0 | 000045f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004600 20 20 20 20 20 20 20 3b 20 41 74 20 74 68 65 20 | ; At the | 00004610 73 74 61 72 74 20 6f 66 20 6e 65 78 74 20 70 61 |start of next pa| 00004620 74 74 65 72 6e 0d 18 06 14 53 54 4d 49 41 20 52 |ttern....STMIA R| 00004630 30 2c 7b 52 31 2d 52 33 7d 0d 18 10 10 4d 4f 56 |0,{R1-R3}....MOV| 00004640 20 20 20 50 43 2c 52 31 34 0d 18 1a 15 2e 4e 6f | PC,R14.....No| 00004650 5f 50 61 74 74 65 72 6e 5f 42 72 65 61 6b 0d 18 |_Pattern_Break..| 00004660 24 04 0d 18 2e 19 3b 20 50 6f 73 69 74 69 6f 6e |$.....; Position| 00004670 20 4a 75 6d 70 20 28 27 4a 27 29 0d 18 38 04 0d | Jump ('J')..8..| 00004680 18 42 13 43 4d 50 20 20 20 52 34 2c 23 26 31 33 |.B.CMP R4,#&13| 00004690 30 30 0d 18 4c 1a 42 4e 45 20 20 20 4e 6f 5f 50 |00..L.BNE No_P| 000046a0 6f 73 69 74 69 6f 6e 5f 4a 75 6d 70 0d 18 56 1c |osition_Jump..V.| 000046b0 41 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 |ADR R0,Trk_Inf| 000046c0 6f 73 5f 42 6c 6f 63 6b 0d 18 60 12 80 20 20 20 |os_Block..`.. | 000046d0 52 31 2c 52 35 2c 23 26 37 46 0d 18 6a 11 53 54 |R1,R5,#&7F..j.ST| 000046e0 52 20 20 20 52 31 2c 5b 52 30 5d 0d 18 74 0f 4d |R R1,[R0]..t.M| 000046f0 4f 56 20 20 20 52 31 2c 23 30 0d 18 7e 14 53 54 |OV R1,#0..~.ST| 00004700 52 20 20 20 52 31 2c 5b 52 30 2c 23 38 5d 0d 18 |R R1,[R0,#8]..| 00004710 88 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 18 |..MOV PC,R14..| 00004720 92 15 2e 4e 6f 5f 50 6f 73 69 74 69 6f 6e 5f 4a |...No_Position_J| 00004730 75 6d 70 0d 18 9c 04 0d 18 a6 15 3b 20 4c 69 6e |ump........; Lin| 00004740 65 20 4a 75 6d 70 20 28 27 4c 27 29 0d 18 b0 04 |e Jump ('L')....| 00004750 0d 18 ba 13 43 4d 50 20 20 20 52 34 2c 23 26 31 |....CMP R4,#&1| 00004760 35 30 30 0d 18 c4 16 42 4e 45 20 20 20 4e 6f 5f |500....BNE No_| 00004770 4c 69 6e 65 5f 4a 75 6d 70 0d 18 ce 11 80 20 20 |Line_Jump..... | 00004780 20 52 31 2c 52 35 2c 23 26 46 0d 18 d8 15 4d 4f | R1,R5,#&F....MO| 00004790 56 20 20 20 52 32 2c 52 35 2c 4c 53 52 23 34 0d |V R2,R5,LSR#4.| 000047a0 18 e2 11 80 53 20 20 52 32 2c 52 32 2c 23 26 46 |....S R2,R2,#&F| 000047b0 0d 18 ec 10 4d 4f 56 47 54 20 52 33 2c 23 31 30 |....MOVGT R3,#10| 000047c0 0d 18 f6 15 4d 4c 41 47 54 20 52 31 2c 52 32 2c |....MLAGT R1,R2,| 000047d0 52 33 2c 52 31 0d 19 00 10 43 4d 50 20 20 20 52 |R3,R1....CMP R| 000047e0 31 2c 23 36 33 0d 19 0a 1c 41 44 52 4c 45 20 52 |1,#63....ADRLE R| 000047f0 30 2c 54 72 6b 5f 49 6e 66 6f 73 5f 42 6c 6f 63 |0,Trk_Infos_Bloc| 00004800 6b 0d 19 14 14 53 54 52 4c 45 20 52 31 2c 5b 52 |k....STRLE R1,[R| 00004810 30 2c 23 38 5d 0d 19 1e 10 4d 4f 56 20 20 20 50 |0,#8]....MOV P| 00004820 43 2c 52 31 34 0d 19 28 11 2e 4e 6f 5f 4c 69 6e |C,R14..(..No_Lin| 00004830 65 5f 4a 75 6d 70 0d 19 32 04 0d 19 3c 1b 3b 20 |e_Jump..2...<.; | 00004840 53 65 74 20 c8 a2 20 50 6f 73 69 74 69 6f 6e 20 |Set .. Position | 00004850 28 27 45 27 29 0d 19 46 04 0d 19 50 12 43 4d 50 |('E')..F...P.CMP| 00004860 20 20 20 52 34 2c 23 26 45 30 30 0d 19 5a 17 42 | R4,#&E00..Z.B| 00004870 4e 45 20 20 20 4e 6f 5f 53 65 74 5f 53 74 65 72 |NE No_Set_Ster| 00004880 65 6f 0d 19 64 1a 41 44 52 20 20 20 52 31 30 2c |eo..d.ADR R10,| 00004890 53 74 65 72 65 6f 5f 54 61 62 6c 65 0d 19 6e 38 |Stereo_Table..n8| 000048a0 80 53 20 20 52 32 2c 52 35 2c 23 26 30 46 20 20 |.S R2,R5,#&0F | 000048b0 20 20 20 20 20 20 20 20 3b 20 52 32 20 3d 20 53 | ; R2 = S| 000048c0 74 65 72 65 6f 20 70 6f 73 69 74 69 6f 6e 20 28 |tereo position (| 000048d0 31 2d 37 29 0d 19 78 0d ec 51 20 50 43 2c 52 31 |1-7)..x..Q PC,R1| 000048e0 34 0d 19 82 0f 43 4d 50 20 20 20 52 32 2c 23 37 |4....CMP R2,#7| 000048f0 0d 19 8c 10 4d 4f 56 47 54 20 50 43 2c 52 31 34 |....MOVGT PC,R14| 00004900 0d 19 96 12 53 55 42 20 20 20 52 32 2c 52 32 2c |....SUB R2,R2,| 00004910 23 31 0d 19 a0 1b 4c 44 52 20 20 20 52 31 2c 5b |#1....LDR R1,[| 00004920 52 31 30 2c 52 32 2c 4c 53 4c 23 32 5d 0d 19 aa |R10,R2,LSL#2]...| 00004930 31 41 44 44 20 20 20 52 30 2c 52 39 2c 23 31 20 |1ADD R0,R9,#1 | 00004940 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 30 20 | ; R0 | 00004950 3d 20 56 6f 69 63 65 20 4e 75 6d 62 65 72 0d 19 |= Voice Number..| 00004960 b4 49 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 38 |.ISTMFD R13!,{R8| 00004970 2c 52 39 7d 20 20 20 20 20 20 20 20 3b 20 53 61 |,R9} ; Sa| 00004980 76 65 20 52 31 34 20 62 65 66 6f 72 65 20 53 57 |ve R14 before SW| 00004990 49 20 61 73 20 77 65 20 61 72 65 20 69 6e 20 49 |I as we are in I| 000049a0 52 51 20 6d 6f 64 65 0d 19 be 0f 4d 4f 56 20 20 |RQ mode....MOV | 000049b0 20 52 39 2c 50 43 0d 19 c8 11 84 52 20 20 20 52 | R9,PC.....R R| 000049c0 38 2c 52 39 2c 23 33 0d 19 d2 0f 54 45 51 50 20 |8,R9,#3....TEQP | 000049d0 20 52 38 2c 23 30 0d 19 dc 0f 4d 4f 56 4e 56 20 | R8,#0....MOVNV | 000049e0 52 30 2c 52 30 0d 19 e6 14 53 54 4d 46 44 20 52 |R0,R0....STMFD R| 000049f0 31 33 21 2c 7b 52 31 34 7d 0d 19 f0 18 53 57 49 |13!,{R14}....SWI| 00004a00 20 20 20 22 53 6f 75 6e 64 5f 53 74 65 72 65 6f | "Sound_Stereo| 00004a10 22 0d 19 fa 14 4c 44 4d 46 44 20 52 31 33 21 2c |"....LDMFD R13!,| 00004a20 7b 52 31 34 7d 0d 1a 04 0f 54 45 51 50 20 20 52 |{R14}....TEQP R| 00004a30 39 2c 23 30 0d 1a 0e 0f 4d 4f 56 4e 56 20 52 30 |9,#0....MOVNV R0| 00004a40 2c 52 30 0d 1a 18 16 4c 44 4d 46 44 20 52 31 33 |,R0....LDMFD R13| 00004a50 21 2c 7b 52 38 2c 52 39 7d 0d 1a 22 12 2e 4e 6f |!,{R8,R9}.."..No| 00004a60 5f 53 65 74 5f 53 74 65 72 65 6f 0d 1a 2c 10 4d |_Set_Stereo..,.M| 00004a70 4f 56 20 20 20 50 43 2c 52 31 34 0d 1a 36 04 0d |OV PC,R14..6..| 00004a80 1a 40 23 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.@#; *----------| 00004a90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004aa0 2d 2a 0d 1a 4a 23 3b 20 2a 20 20 20 20 45 66 66 |-*..J#; * Eff| 00004ab0 65 63 74 73 20 43 68 65 63 6b 69 6e 67 20 23 32 |ects Checking #2| 00004ac0 20 20 20 20 2a 0d 1a 54 23 3b 20 2a 2d 2d 2d 2d | *..T#; *----| 00004ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004ae0 2d 2d 2d 2d 2d 2d 2d 2a 0d 1a 5e 23 3b 20 2a 20 |-------*..^#; * | 00004af0 27 30 27 20 20 3d 20 41 72 70 65 67 67 69 6f 20 |'0' = Arpeggio | 00004b00 20 20 20 20 20 20 20 20 20 20 2a 0d 1a 68 23 3b | *..h#;| 00004b10 20 2a 20 27 31 27 20 20 3d 20 50 6f 72 74 61 6d | * '1' = Portam| 00004b20 65 6e 74 6f 20 55 70 20 20 20 20 20 20 2a 0d 1a |ento Up *..| 00004b30 72 23 3b 20 2a 20 27 32 27 20 20 3d 20 50 6f 72 |r#; * '2' = Por| 00004b40 74 61 6d 65 6e 74 6f 20 44 6f 77 6e 20 20 20 20 |tamento Down | 00004b50 2a 0d 1a 7c 23 3b 20 2a 20 27 47 27 20 20 3d 20 |*..|#; * 'G' = | 00004b60 53 6c 69 64 65 20 56 6f 6c 75 6d 65 20 55 70 20 |Slide Volume Up | 00004b70 20 20 20 2a 0d 1a 86 23 3b 20 2a 20 27 48 27 20 | *...#; * 'H' | 00004b80 20 3d 20 53 6c 69 64 65 20 56 6f 6c 75 6d 65 20 | = Slide Volume | 00004b90 44 6f 77 6e 20 20 2a 0d 1a 90 23 3b 20 2a 2d 2d |Down *...#; *--| 00004ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 1a 9a 04 0d 1a |---------*......| 00004bc0 a4 10 2e 54 72 6b 5f 45 66 66 65 63 74 73 0d 1a |...Trk_Effects..| 00004bd0 ae 1d 41 44 52 20 20 20 52 39 2c 54 72 6b 5f 50 |..ADR R9,Trk_P| 00004be0 61 74 74 65 72 6e 5f 4c 69 6e 65 0d 1a b8 19 41 |attern_Line....A| 00004bf0 44 52 20 20 20 52 31 30 2c 54 72 6b 5f 50 65 72 |DR R10,Trk_Per| 00004c00 69 6f 64 73 0d 1a c2 34 4c 44 52 20 20 20 52 31 |iods...4LDR R1| 00004c10 31 2c 54 72 6b 5f 56 6f 69 63 65 73 20 20 20 20 |1,Trk_Voices | 00004c20 20 20 20 3b 20 52 31 31 20 3d 20 56 6f 69 63 65 | ; R11 = Voice| 00004c30 73 20 4e 75 6d 62 65 72 0d 1a cc 36 42 4c 20 20 |s Number...6BL | 00004c40 20 20 47 65 74 5f 46 72 65 71 75 65 6e 63 65 5f | Get_Frequence_| 00004c50 54 61 62 6c 65 20 20 3b 20 52 38 20 3d 3e 20 46 |Table ; R8 => F| 00004c60 72 65 71 75 65 6e 63 65 20 54 61 62 6c 65 0d 1a |requence Table..| 00004c70 d6 46 42 4c 20 20 20 20 47 65 74 5f 49 6e 66 6f |.FBL Get_Info| 00004c80 73 5f 42 6c 6f 63 6b 20 20 20 20 20 20 3b 20 52 |s_Block ; R| 00004c90 37 20 3d 3e 20 49 6e 66 6f 73 20 42 6c 6f 63 6b |7 => Infos Block| 00004ca0 20 28 33 32 20 42 79 74 65 20 2f 20 43 68 61 6e | (32 Byte / Chan| 00004cb0 6e 65 6c 29 0d 1a e0 0f 4d 4f 56 20 20 20 52 32 |nel)....MOV R2| 00004cc0 2c 23 30 0d 1a ea 15 2e 43 68 65 63 6b 45 66 66 |,#0.....CheckEff| 00004cd0 65 63 74 73 4c 6f 6f 70 0d 1a f4 1a 4c 44 52 20 |ectsLoop....LDR | 00004ce0 20 20 52 31 2c 5b 52 39 2c 52 32 2c 4c 53 4c 23 | R1,[R9,R2,LSL#| 00004cf0 32 5d 0d 1a fe 2f 80 20 20 20 52 33 2c 52 31 2c |2].../. R3,R1,| 00004d00 23 26 30 30 46 46 20 20 20 20 20 20 20 20 20 3b |#&00FF ;| 00004d10 20 52 33 20 3d 20 45 66 66 65 63 74 20 44 61 74 | R3 = Effect Dat| 00004d20 61 0d 1b 08 15 4d 4f 56 20 20 20 52 31 2c 52 31 |a....MOV R1,R1| 00004d30 2c 4c 53 52 23 38 0d 1b 12 2f 80 20 20 20 52 31 |,LSR#8.../. R1| 00004d40 2c 52 31 2c 23 26 46 46 20 20 20 20 20 20 20 20 |,R1,#&FF | 00004d50 20 20 20 3b 20 52 31 20 3d 20 45 66 66 65 63 74 | ; R1 = Effect| 00004d60 20 54 79 70 65 0d 1b 1c 04 0d 1b 26 11 43 4d 50 | Type......&.CMP| 00004d70 20 20 20 52 31 2c 23 26 31 30 0d 1b 30 19 42 4e | R1,#&10..0.BN| 00004d80 45 20 20 20 4e 6f 5f 53 6c 69 64 65 5f 56 6f 6c |E No_Slide_Vol| 00004d90 5f 55 70 0d 1b 3a 12 80 20 20 20 52 33 2c 52 33 |_Up..:.. R3,R3| 00004da0 2c 23 26 46 46 0d 1b 44 18 41 44 44 20 20 20 52 |,#&FF..D.ADD R| 00004db0 34 2c 52 37 2c 52 32 2c 4c 53 4c 23 35 0d 1b 4e |4,R7,R2,LSL#5..N| 00004dc0 2f 4c 44 52 20 20 20 52 35 2c 5b 52 34 2c 23 32 |/LDR R5,[R4,#2| 00004dd0 30 5d 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 |0] ; R| 00004de0 35 3d 32 35 35 2d 56 6f 6c 75 6d 65 0d 1b 58 14 |5=255-Volume..X.| 00004df0 52 53 42 20 20 20 52 35 2c 52 35 2c 23 32 35 35 |RSB R5,R5,#255| 00004e00 0d 1b 62 12 41 44 44 20 20 20 52 35 2c 52 35 2c |..b.ADD R5,R5,| 00004e10 52 33 0d 1b 6c 11 43 4d 50 20 20 20 52 35 2c 23 |R3..l.CMP R5,#| 00004e20 26 46 46 0d 1b 76 11 4d 4f 56 47 54 20 52 35 2c |&FF..v.MOVGT R5,| 00004e30 23 26 46 46 0d 1b 80 14 52 53 42 20 20 20 52 35 |#&FF....RSB R5| 00004e40 2c 52 35 2c 23 32 35 35 0d 1b 8a 15 53 54 52 20 |,R5,#255....STR | 00004e50 20 20 52 35 2c 5b 52 34 2c 23 32 30 5d 0d 1b 94 | R5,[R4,#20]...| 00004e60 16 42 20 20 20 20 20 43 68 65 63 6b 4e 65 78 74 |.B CheckNext| 00004e70 56 6f 78 0d 1b 9e 14 2e 4e 6f 5f 53 6c 69 64 65 |Vox.....No_Slide| 00004e80 5f 56 6f 6c 5f 55 70 0d 1b a8 04 0d 1b b2 11 43 |_Vol_Up........C| 00004e90 4d 50 20 20 20 52 31 2c 23 26 31 31 0d 1b bc 1b |MP R1,#&11....| 00004ea0 42 4e 45 20 20 20 4e 6f 5f 53 6c 69 64 65 5f 56 |BNE No_Slide_V| 00004eb0 6f 6c 5f 44 6f 77 6e 0d 1b c6 12 80 20 20 20 52 |ol_Down..... R| 00004ec0 33 2c 52 33 2c 23 26 46 46 0d 1b d0 18 41 44 44 |3,R3,#&FF....ADD| 00004ed0 20 20 20 52 34 2c 52 37 2c 52 32 2c 4c 53 4c 23 | R4,R7,R2,LSL#| 00004ee0 35 0d 1b da 2d 4c 44 52 20 20 20 52 35 2c 5b 52 |5...-LDR R5,[R| 00004ef0 34 2c 23 32 30 5d 20 20 20 20 20 20 20 20 20 3b |4,#20] ;| 00004f00 20 52 35 3d 32 35 35 2d 56 6f 6c 75 6d 65 0d 1b | R5=255-Volume..| 00004f10 e4 14 52 53 42 20 20 20 52 35 2c 52 35 2c 23 32 |..RSB R5,R5,#2| 00004f20 35 35 0d 1b ee 12 53 55 42 53 20 20 52 35 2c 52 |55....SUBS R5,R| 00004f30 35 2c 52 33 0d 1b f8 0f 4d 4f 56 4c 54 20 52 35 |5,R3....MOVLT R5| 00004f40 2c 23 30 0d 1c 02 14 52 53 42 20 20 20 52 35 2c |,#0....RSB R5,| 00004f50 52 35 2c 23 32 35 35 0d 1c 0c 15 53 54 52 20 20 |R5,#255....STR | 00004f60 20 52 35 2c 5b 52 34 2c 23 32 30 5d 0d 1c 16 16 | R5,[R4,#20]....| 00004f70 42 20 20 20 20 20 43 68 65 63 6b 4e 65 78 74 56 |B CheckNextV| 00004f80 6f 78 0d 1c 20 16 2e 4e 6f 5f 53 6c 69 64 65 5f |ox.. ..No_Slide_| 00004f90 56 6f 6c 5f 44 6f 77 6e 0d 1c 2a 04 0d 1c 34 0f |Vol_Down..*...4.| 00004fa0 43 4d 50 20 20 20 52 31 2c 23 31 0d 1c 3e 12 42 |CMP R1,#1..>.B| 00004fb0 4e 45 20 20 20 4e 6f 50 6f 72 74 55 70 0d 1c 48 |NE NoPortUp..H| 00004fc0 18 41 44 44 20 20 20 52 34 2c 52 37 2c 52 32 2c |.ADD R4,R7,R2,| 00004fd0 4c 53 4c 23 35 0d 1c 52 30 4c 44 52 20 20 20 52 |LSL#5..R0LDR R| 00004fe0 35 2c 5b 52 34 2c 23 32 38 5d 20 20 20 20 20 20 |5,[R4,#28] | 00004ff0 20 20 20 3b 20 52 35 3d 41 63 74 75 61 6c 20 50 | ; R5=Actual P| 00005000 65 72 69 6f 64 0d 1c 5c 12 53 55 42 20 20 20 52 |eriod..\.SUB R| 00005010 35 2c 52 35 2c 52 33 0d 1c 66 11 43 4d 50 20 20 |5,R5,R3..f.CMP | 00005020 20 52 35 2c 23 26 35 30 0d 1c 70 11 4d 4f 56 4c | R5,#&50..p.MOVL| 00005030 54 20 52 35 2c 23 26 35 30 0d 1c 7a 15 53 54 52 |T R5,#&50..z.STR| 00005040 20 20 20 52 35 2c 5b 52 34 2c 23 32 38 5d 0d 1c | R5,[R4,#28]..| 00005050 84 1a 4c 44 52 20 20 20 52 35 2c 5b 52 38 2c 52 |..LDR R5,[R8,R| 00005060 35 2c 4c 53 4c 23 32 5d 0d 1c 8e 14 53 54 52 20 |5,LSL#2]....STR | 00005070 20 20 52 35 2c 5b 52 34 2c 23 34 5d 0d 1c 98 16 | R5,[R4,#4]....| 00005080 42 20 20 20 20 20 43 68 65 63 6b 4e 65 78 74 56 |B CheckNextV| 00005090 6f 78 0d 1c a2 0d 2e 4e 6f 50 6f 72 74 55 70 0d |ox.....NoPortUp.| 000050a0 1c ac 04 0d 1c b6 0f 43 4d 50 20 20 20 52 31 2c |.......CMP R1,| 000050b0 23 32 0d 1c c0 14 42 4e 45 20 20 20 4e 6f 50 6f |#2....BNE NoPo| 000050c0 72 74 44 6f 77 6e 0d 1c ca 18 41 44 44 20 20 20 |rtDown....ADD | 000050d0 52 34 2c 52 37 2c 52 32 2c 4c 53 4c 23 35 0d 1c |R4,R7,R2,LSL#5..| 000050e0 d4 35 4c 44 52 20 20 20 52 35 2c 5b 52 34 2c 23 |.5LDR R5,[R4,#| 000050f0 32 38 5d 20 20 20 20 20 20 20 20 20 3b 20 48 61 |28] ; Ha| 00005100 75 74 65 75 72 20 4e 6f 74 65 20 41 63 74 75 65 |uteur Note Actue| 00005110 6c 6c 65 0d 1c de 12 41 44 44 20 20 20 52 35 2c |lle....ADD R5,| 00005120 52 35 2c 52 33 0d 1c e8 12 43 4d 50 20 20 20 52 |R5,R3....CMP R| 00005130 35 2c 23 26 33 46 30 0d 1c f2 12 4d 4f 56 47 54 |5,#&3F0....MOVGT| 00005140 20 52 35 2c 23 26 33 46 30 0d 1c fc 15 53 54 52 | R5,#&3F0....STR| 00005150 20 20 20 52 35 2c 5b 52 34 2c 23 32 38 5d 0d 1d | R5,[R4,#28]..| 00005160 06 36 4c 44 52 20 20 20 52 35 2c 5b 52 38 2c 52 |.6LDR R5,[R8,R| 00005170 35 2c 4c 53 4c 23 32 5d 20 20 20 20 3b 20 47 65 |5,LSL#2] ; Ge| 00005180 74 20 70 68 61 73 65 20 69 6e 63 72 65 6d 65 6e |t phase incremen| 00005190 74 2e 2e 2e 0d 1d 10 2a 53 54 52 20 20 20 52 35 |t......*STR R5| 000051a0 2c 5b 52 34 2c 23 34 5d 20 20 20 20 20 20 20 20 |,[R4,#4] | 000051b0 20 20 3b 20 2e 2e 2e 53 61 76 65 20 69 74 0d 1d | ; ...Save it..| 000051c0 1a 16 42 20 20 20 20 20 43 68 65 63 6b 4e 65 78 |..B CheckNex| 000051d0 74 56 6f 78 0d 1d 24 0f 2e 4e 6f 50 6f 72 74 44 |tVox..$..NoPortD| 000051e0 6f 77 6e 0d 1d 2e 04 0d 1d 38 0f 43 4d 50 20 20 |own......8.CMP | 000051f0 20 52 31 2c 23 30 0d 1d 42 16 42 4c 45 51 20 20 | R1,#0..B.BLEQ | 00005200 54 72 6b 5f 41 72 70 65 67 67 69 6f 0d 1d 4c 04 |Trk_Arpeggio..L.| 00005210 0d 1d 56 11 2e 43 68 65 63 6b 4e 65 78 74 56 6f |..V..CheckNextVo| 00005220 78 0d 1d 60 2a 41 44 44 20 20 20 52 32 2c 52 32 |x..`*ADD R2,R2| 00005230 2c 23 31 20 20 20 20 20 20 20 20 20 20 20 20 3b |,#1 ;| 00005240 20 4e 65 78 74 20 56 6f 69 63 65 0d 1d 6a 2c 43 | Next Voice..j,C| 00005250 4d 50 20 20 20 52 32 2c 52 31 31 20 20 20 20 20 |MP R2,R11 | 00005260 20 20 20 20 20 20 20 20 20 3b 20 4c 61 73 74 20 | ; Last | 00005270 56 6f 69 63 65 20 3f 0d 1d 74 1a 42 4e 45 20 20 |Voice ?..t.BNE | 00005280 20 43 68 65 63 6b 45 66 66 65 63 74 73 4c 6f 6f | CheckEffectsLoo| 00005290 70 0d 1d 7e 1a 4c 44 4d 46 44 20 52 31 33 21 2c |p..~.LDMFD R13!,| 000052a0 7b 52 30 2d 52 31 32 2c 50 43 7d 0d 1d 88 04 0d |{R0-R12,PC}.....| 000052b0 1d 92 11 2e 54 72 6b 5f 41 72 70 65 67 67 69 6f |....Trk_Arpeggio| 000052c0 0d 1d 9c 14 53 54 4d 46 44 20 52 31 33 21 2c 7b |....STMFD R13!,{| 000052d0 52 31 34 7d 0d 1d a6 0f 43 4d 50 20 20 20 52 33 |R14}....CMP R3| 000052e0 2c 23 30 0d 1d b0 15 4c 44 4d 45 51 46 44 20 52 |,#0....LDMEQFD R| 000052f0 31 33 21 2c 7b 50 43 7d 0d 1d ba 18 4c 44 52 20 |13!,{PC}....LDR | 00005300 20 20 52 30 2c 54 72 6b 5f 43 6f 75 6e 74 65 72 | R0,Trk_Counter| 00005310 0d 1d c4 0f 43 4d 50 20 20 20 52 30 2c 23 31 0d |....CMP R0,#1.| 00005320 1d ce 13 42 45 51 20 20 20 41 72 70 5f 4c 6f 6f |...BEQ Arp_Loo| 00005330 70 32 0d 1d d8 0f 43 4d 50 20 20 20 52 30 2c 23 |p2....CMP R0,#| 00005340 32 0d 1d e2 13 42 45 51 20 20 20 41 72 70 5f 4c |2....BEQ Arp_L| 00005350 6f 6f 70 33 0d 1d ec 0f 43 4d 50 20 20 20 52 30 |oop3....CMP R0| 00005360 2c 23 33 0d 1d f6 13 42 45 51 20 20 20 41 72 70 |,#3....BEQ Arp| 00005370 5f 4c 6f 6f 70 34 0d 1e 00 0f 43 4d 50 20 20 20 |_Loop4....CMP | 00005380 52 30 2c 23 34 0d 1e 0a 13 42 45 51 20 20 20 41 |R0,#4....BEQ A| 00005390 72 70 5f 4c 6f 6f 70 32 0d 1e 14 0f 43 4d 50 20 |rp_Loop2....CMP | 000053a0 20 20 52 30 2c 23 35 0d 1e 1e 13 42 45 51 20 20 | R0,#5....BEQ | 000053b0 20 41 72 70 5f 4c 6f 6f 70 33 0d 1e 28 13 4c 44 | Arp_Loop3..(.LD| 000053c0 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 1e 32 |MFD R13!,{PC}..2| 000053d0 04 0d 1e 3c 0e 2e 41 72 70 5f 4c 6f 6f 70 32 0d |...<..Arp_Loop2.| 000053e0 1e 46 4b 4d 4f 56 20 20 20 52 30 2c 52 33 2c 4c |.FKMOV R0,R3,L| 000053f0 53 52 23 34 20 20 20 20 20 20 20 20 3b 20 52 30 |SR#4 ; R0| 00005400 3d 46 69 72 73 74 20 6e 69 62 62 6c 65 2c 20 74 |=First nibble, t| 00005410 68 65 6e 20 61 64 64 20 69 74 20 74 6f 20 63 75 |hen add it to cu| 00005420 72 72 65 6e 74 20 74 6f 6e 65 0d 1e 50 12 42 20 |rrent tone..P.B | 00005430 20 20 20 20 41 72 70 5f 43 6f 6e 74 0d 1e 5a 0e | Arp_Cont..Z.| 00005440 2e 41 72 70 5f 4c 6f 6f 70 33 0d 1e 64 4a 80 20 |.Arp_Loop3..dJ. | 00005450 20 20 52 30 2c 52 33 2c 23 26 30 46 20 20 20 20 | R0,R3,#&0F | 00005460 20 20 20 20 20 3b 20 52 30 3d 53 65 63 6f 6e 64 | ; R0=Second| 00005470 20 6e 69 62 62 6c 65 2c 20 74 68 65 6e 20 61 64 | nibble, then ad| 00005480 64 20 69 74 20 74 6f 20 63 75 72 72 65 6e 74 20 |d it to current | 00005490 74 6f 6e 65 0d 1e 6e 12 42 20 20 20 20 20 41 72 |tone..n.B Ar| 000054a0 70 5f 43 6f 6e 74 0d 1e 78 0e 2e 41 72 70 5f 4c |p_Cont..x..Arp_L| 000054b0 6f 6f 70 34 0d 1e 82 30 4c 44 52 20 20 20 52 33 |oop4...0LDR R3| 000054c0 2c 5b 52 31 30 2c 52 32 2c 4c 53 4c 23 32 5d 20 |,[R10,R2,LSL#2] | 000054d0 20 3b 20 50 6c 61 79 20 63 75 72 72 65 6e 74 20 | ; Play current | 000054e0 74 6f 6e 65 0d 1e 8c 15 42 20 20 20 20 20 41 72 |tone....B Ar| 000054f0 70 5f 45 6e 64 50 61 72 74 0d 1e 96 0d 2e 41 72 |p_EndPart.....Ar| 00005500 70 5f 43 6f 6e 74 0d 1e a0 19 42 4c 20 20 20 20 |p_Cont....BL | 00005510 47 65 74 5f 50 65 72 69 6f 64 73 5f 41 64 72 0d |Get_Periods_Adr.| 00005520 1e aa 1b 4c 44 52 20 20 20 52 31 2c 5b 52 31 30 |...LDR R1,[R10| 00005530 2c 52 32 2c 4c 53 4c 23 32 5d 0d 1e b4 16 41 44 |,R2,LSL#2]....AD| 00005540 44 20 20 20 52 34 2c 52 31 32 2c 23 33 36 2a 34 |D R4,R12,#36*4| 00005550 0d 1e be 0e 2e 41 72 70 5f 4c 6f 6f 70 35 0d 1e |.....Arp_Loop5..| 00005560 c8 1b 4c 44 52 20 20 20 52 33 2c 5b 52 31 32 2c |..LDR R3,[R12,| 00005570 52 30 2c 4c 53 4c 23 32 5d 0d 1e d2 15 4c 44 52 |R0,LSL#2]....LDR| 00005580 20 20 20 52 36 2c 5b 52 31 32 5d 2c 23 34 0d 1e | R6,[R12],#4..| 00005590 dc 0f 43 4d 50 20 20 20 52 36 2c 52 31 0d 1e e6 |..CMP R6,R1...| 000055a0 15 42 45 51 20 20 20 41 72 70 5f 45 6e 64 50 61 |.BEQ Arp_EndPa| 000055b0 72 74 0d 1e f0 13 42 20 20 20 20 20 41 72 70 5f |rt....B Arp_| 000055c0 4c 6f 6f 70 35 0d 1e fa 04 0d 1f 04 10 2e 41 72 |Loop5.........Ar| 000055d0 70 5f 45 6e 64 50 61 72 74 0d 1f 0e 1a 41 44 44 |p_EndPart....ADD| 000055e0 20 20 20 52 31 32 2c 52 31 32 2c 52 30 2c 4c 53 | R12,R12,R0,LS| 000055f0 4c 23 32 0d 1f 18 10 43 4d 50 20 20 20 52 31 32 |L#2....CMP R12| 00005600 2c 52 34 0d 1f 22 15 4c 44 4d 47 54 46 44 20 52 |,R4..".LDMGTFD R| 00005610 31 33 21 2c 7b 50 43 7d 0d 1f 2c 18 41 44 44 20 |13!,{PC}..,.ADD | 00005620 20 20 52 34 2c 52 37 2c 52 32 2c 4c 53 4c 23 35 | R4,R7,R2,LSL#5| 00005630 0d 1f 36 0f 43 4d 50 20 20 20 52 33 2c 23 30 0d |..6.CMP R3,#0.| 00005640 1f 40 15 4c 44 4d 45 51 46 44 20 52 31 33 21 2c |.@.LDMEQFD R13!,| 00005650 7b 50 43 7d 0d 1f 4a 3b 4c 44 52 20 20 20 52 35 |{PC}..J;LDR R5| 00005660 2c 5b 52 38 2c 52 33 2c 4c 53 4c 23 32 5d 20 20 |,[R8,R3,LSL#2] | 00005670 20 20 20 20 20 20 20 3b 20 47 65 74 20 70 68 61 | ; Get pha| 00005680 73 65 20 69 6e 63 72 65 6d 65 6e 74 2e 2e 2e 0d |se increment....| 00005690 1f 54 45 53 54 52 20 20 20 52 35 2c 5b 52 34 2c |.TESTR R5,[R4,| 000056a0 23 34 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |#4] | 000056b0 20 20 3b 20 2e 2e 2e 53 61 76 65 20 69 74 20 69 | ; ...Save it i| 000056c0 6e 20 56 6f 69 63 65 73 20 49 6e 66 6f 73 5f 42 |n Voices Infos_B| 000056d0 6c 6f 63 6b 0d 1f 5e 0f 2e 45 6e 64 5f 45 66 66 |lock..^..End_Eff| 000056e0 65 63 74 0d 1f 68 13 4c 44 4d 46 44 20 52 31 33 |ect..h.LDMFD R13| 000056f0 21 2c 7b 50 43 7d 0d 1f 72 04 0d 1f 7c 11 2e 53 |!,{PC}..r...|..S| 00005700 74 65 72 65 6f 5f 54 61 62 6c 65 0d 1f 86 3f 45 |tereo_Table...?E| 00005710 51 55 44 20 2d 31 32 36 3a 45 51 55 44 20 2d 37 |QUD -126:EQUD -7| 00005720 30 3a 45 51 55 44 20 2d 34 30 3a 45 51 55 44 20 |0:EQUD -40:EQUD | 00005730 30 3a 45 51 55 44 20 34 30 3a 45 51 55 44 20 37 |0:EQUD 40:EQUD 7| 00005740 30 3a 45 51 55 44 20 31 32 37 0d 1f 90 04 0d 1f |0:EQUD 127......| 00005750 9a 18 2e 56 6f 69 63 65 5f 43 6f 6e 74 72 6f 6c |...Voice_Control| 00005760 5f 42 6c 6f 63 6b 0d 1f a4 17 42 20 46 69 6c 6c |_Block....B Fill| 00005770 5f 53 6f 75 6e 64 5f 42 75 66 66 65 72 0d 1f ae |_Sound_Buffer...| 00005780 17 42 20 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 75 |.B Fill_Sound_Bu| 00005790 66 66 65 72 0d 1f b8 17 42 20 46 69 6c 6c 5f 53 |ffer....B Fill_S| 000057a0 6f 75 6e 64 5f 42 75 66 66 65 72 0d 1f c2 13 4c |ound_Buffer....L| 000057b0 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 1f |DMFD R13!,{PC}..| 000057c0 cc 13 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 |..LDMFD R13!,{PC| 000057d0 7d 0d 1f d6 13 4c 44 4d 46 44 20 52 31 33 21 2c |}....LDMFD R13!,| 000057e0 7b 50 43 7d 0d 1f e0 13 4c 44 4d 46 44 20 52 31 |{PC}....LDMFD R1| 000057f0 33 21 2c 7b 50 43 7d 0d 1f ea 27 45 51 55 44 20 |3!,{PC}...'EQUD | 00005800 56 6f 69 63 65 5f 4e 61 6d 65 2d 56 6f 69 63 65 |Voice_Name-Voice| 00005810 5f 43 6f 6e 74 72 6f 6c 5f 42 6c 6f 63 6b 0d 1f |_Control_Block..| 00005820 f4 0f 2e 56 6f 69 63 65 5f 4e 61 6d 65 0d 1f fe |...Voice_Name...| 00005830 1f 45 51 55 53 20 22 54 72 61 63 6b 65 72 22 3a |.EQUS "Tracker":| 00005840 45 51 55 42 20 30 3a 41 4c 49 47 4e 0d 20 08 04 |EQUB 0:ALIGN. ..| 00005850 0d 20 12 29 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d |. .); *---------| 00005860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00005870 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 20 1c 29 3b 20 2a |--------*. .); *| 00005880 20 20 20 20 49 6e 69 74 20 54 72 61 63 6b 65 72 | Init Tracker| 00005890 20 53 6f 75 6e 64 20 53 79 73 74 65 6d 20 20 20 | Sound System | 000058a0 20 2a 0d 20 26 29 3b 20 2a 2d 2d 2d 2d 2d 2d 2d | *. &); *-------| 000058b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000058c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 20 30 04 0d |----------*. 0..| 000058d0 20 3a 16 2e 49 6e 69 74 5f 53 6f 75 6e 64 5f 53 | :..Init_Sound_S| 000058e0 79 73 74 65 6d 0d 20 44 1b 53 54 4d 46 44 20 52 |ystem. D.STMFD R| 000058f0 31 33 21 2c 7b 52 30 2d 52 31 32 2c 52 31 34 7d |13!,{R0-R12,R14}| 00005900 0d 20 4e 18 4c 44 52 20 20 20 52 31 32 2c 54 72 |. N.LDR R12,Tr| 00005910 6b 5f 56 6f 69 63 65 73 0d 20 58 04 0d 20 62 20 |k_Voices. X.. b | 00005920 41 44 52 20 20 20 52 30 2c 56 6f 69 63 65 5f 43 |ADR R0,Voice_C| 00005930 6f 6e 74 72 6f 6c 5f 42 6c 6f 63 6b 0d 20 6c 0f |ontrol_Block. l.| 00005940 4d 4f 56 20 20 20 52 31 2c 23 30 0d 20 76 1e 53 |MOV R1,#0. v.S| 00005950 57 49 20 20 20 22 53 6f 75 6e 64 5f 49 6e 73 74 |WI "Sound_Inst| 00005960 61 6c 6c 56 6f 69 63 65 22 0d 20 80 1b 53 54 52 |allVoice". ..STR| 00005970 20 20 20 52 31 2c 4f 6c 64 5f 56 6f 69 63 65 5f | R1,Old_Voice_| 00005980 53 6c 6f 74 0d 20 8a 04 0d 20 94 10 4d 4f 56 20 |Slot. ... ..MOV | 00005990 20 20 52 31 30 2c 23 31 0d 20 9e 16 41 44 52 20 | R10,#1. ..ADR | 000059a0 20 20 52 39 2c 4f 6c 64 56 6f 69 63 65 73 0d 20 | R9,OldVoices. | 000059b0 a8 12 53 55 42 20 20 20 52 39 2c 52 39 2c 23 34 |..SUB R9,R9,#4| 000059c0 0d 20 b2 18 2e 56 6f 69 63 65 73 5f 45 78 74 65 |. ...Voices_Exte| 000059d0 72 6d 69 6e 61 74 6f 72 0d 20 bc 10 4d 4f 56 20 |rminator. ..MOV | 000059e0 20 20 52 30 2c 52 31 30 0d 20 c6 0f 4d 4f 56 20 | R0,R10. ..MOV | 000059f0 20 20 52 31 2c 23 30 0d 20 d0 1d 53 57 49 20 20 | R1,#0. ..SWI | 00005a00 20 22 53 6f 75 6e 64 5f 41 74 74 61 63 68 56 6f | "Sound_AttachVo| 00005a10 69 63 65 22 0d 20 da 1b 53 54 52 20 20 20 52 31 |ice". ..STR R1| 00005a20 2c 5b 52 39 2c 52 31 30 2c 4c 53 4c 23 32 5d 0d |,[R9,R10,LSL#2].| 00005a30 20 e4 14 41 44 44 20 20 20 52 31 30 2c 52 31 30 | ..ADD R10,R10| 00005a40 2c 23 31 0d 20 ee 10 43 4d 50 20 20 20 52 31 30 |,#1. ..CMP R10| 00005a50 2c 23 38 0d 20 f8 1d 42 4c 45 20 20 20 56 6f 69 |,#8. ..BLE Voi| 00005a60 63 65 73 5f 45 78 74 65 72 6d 69 6e 61 74 6f 72 |ces_Exterminator| 00005a70 0d 21 02 04 0d 21 0c 10 4d 4f 56 20 20 20 52 31 |.!...!..MOV R1| 00005a80 30 2c 23 31 0d 21 16 12 2e 49 6e 69 74 41 6c 6c |0,#1.!...InitAll| 00005a90 56 6f 69 63 65 73 0d 21 20 10 4d 4f 56 20 20 20 |Voices.! .MOV | 00005aa0 52 30 2c 52 31 30 0d 21 2a 17 41 44 52 20 20 20 |R0,R10.!*.ADR | 00005ab0 52 31 2c 56 6f 69 63 65 5f 4e 61 6d 65 0d 21 34 |R1,Voice_Name.!4| 00005ac0 22 53 57 49 20 20 20 22 53 6f 75 6e 64 5f 41 74 |"SWI "Sound_At| 00005ad0 74 61 63 68 4e 61 6d 65 64 56 6f 69 63 65 22 0d |tachNamedVoice".| 00005ae0 21 3e 14 41 44 44 20 20 20 52 31 30 2c 52 31 30 |!>.ADD R10,R10| 00005af0 2c 23 31 0d 21 48 11 43 4d 50 20 20 20 52 31 30 |,#1.!H.CMP R10| 00005b00 2c 52 31 32 0d 21 52 17 42 4c 45 20 20 20 49 6e |,R12.!R.BLE In| 00005b10 69 74 41 6c 6c 56 6f 69 63 65 73 0d 21 5c 04 0d |itAllVoices.!\..| 00005b20 21 66 17 41 44 52 20 20 20 52 37 2c 4f 6c 64 53 |!f.ADR R7,OldS| 00005b30 74 65 72 65 6f 73 0d 21 70 1a 41 44 52 20 20 20 |tereos.!p.ADR | 00005b40 52 31 30 2c 53 74 65 72 65 6f 5f 54 61 62 6c 65 |R10,Stereo_Table| 00005b50 0d 21 7a 0f 4d 4f 56 20 20 20 52 39 2c 23 31 0d |.!z.MOV R9,#1.| 00005b60 21 84 14 2e 53 65 74 5f 53 74 65 72 65 6f 5f 4c |!...Set_Stereo_L| 00005b70 6f 6f 70 0d 21 8e 0f 4d 4f 56 20 20 20 52 30 2c |oop.!..MOV R0,| 00005b80 52 39 0d 21 98 15 4c 44 52 42 20 20 52 35 2c 5b |R9.!..LDRB R5,[| 00005b90 52 31 31 5d 2c 23 31 0d 21 a2 12 53 55 42 53 20 |R11],#1.!..SUBS | 00005ba0 20 52 35 2c 52 35 2c 23 31 0d 21 ac 0f 4d 4f 56 | R5,R5,#1.!..MOV| 00005bb0 4c 54 20 52 35 2c 23 30 0d 21 b6 1b 4c 44 52 20 |LT R5,#0.!..LDR | 00005bc0 20 20 52 31 2c 5b 52 31 30 2c 52 35 2c 4c 53 4c | R1,[R10,R5,LSL| 00005bd0 23 32 5d 0d 21 c0 18 53 57 49 20 20 20 22 53 6f |#2].!..SWI "So| 00005be0 75 6e 64 5f 53 74 65 72 65 6f 22 0d 21 ca 14 53 |und_Stereo".!..S| 00005bf0 54 52 42 20 20 52 31 2c 5b 52 37 5d 2c 23 31 0d |TRB R1,[R7],#1.| 00005c00 21 d4 12 41 44 44 20 20 20 52 39 2c 52 39 2c 23 |!..ADD R9,R9,#| 00005c10 31 0d 21 de 10 43 4d 50 20 20 20 52 39 2c 52 31 |1.!..CMP R9,R1| 00005c20 32 0d 21 e8 19 42 4c 45 20 20 20 53 65 74 5f 53 |2.!..BLE Set_S| 00005c30 74 65 72 65 6f 5f 4c 6f 6f 70 0d 21 f2 04 0d 21 |tereo_Loop.!...!| 00005c40 fc 30 4d 4f 56 20 20 20 52 30 2c 52 31 32 20 20 |.0MOV R0,R12 | 00005c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00005c60 20 56 6f 69 63 65 73 20 6e 75 6d 62 65 72 0d 22 | Voices number."| 00005c70 06 44 4d 4f 56 20 20 20 52 31 2c 23 32 30 38 20 |.DMOV R1,#208 | 00005c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00005c90 20 42 75 66 66 65 72 20 6c 65 6e 67 74 68 20 69 | Buffer length i| 00005ca0 6e 20 62 79 74 65 20 70 65 72 20 63 68 61 6e 6e |n byte per chann| 00005cb0 65 6c 0d 22 10 42 4d 4f 56 20 20 20 52 32 2c 23 |el.".BMOV R2,#| 00005cc0 53 61 6d 70 6c 65 5f 52 61 74 65 20 20 20 20 20 |Sample_Rate | 00005cd0 20 20 20 3b 20 53 61 6d 70 6c 65 20 52 61 74 65 | ; Sample Rate| 00005ce0 20 28 33 34 75 73 20 3d 20 32 39 2e 34 31 31 20 | (34us = 29.411 | 00005cf0 4b 68 7a 29 0d 22 1a 0f 4d 4f 56 20 20 20 52 33 |Khz)."..MOV R3| 00005d00 2c 23 30 0d 22 24 0f 4d 4f 56 20 20 20 52 34 2c |,#0."$.MOV R4,| 00005d10 23 30 0d 22 2e 1b 53 57 49 20 20 20 22 53 6f 75 |#0."..SWI "Sou| 00005d20 6e 64 5f 43 6f 6e 66 69 67 75 72 65 22 0d 22 38 |nd_Configure"."8| 00005d30 19 41 44 52 20 20 20 52 39 2c 4f 6c 64 43 6f 6e |.ADR R9,OldCon| 00005d40 66 69 67 75 72 65 0d 22 42 14 53 54 4d 49 41 20 |figure."B.STMIA | 00005d50 52 39 2c 7b 52 30 2d 52 34 7d 0d 22 4c 04 0d 22 |R9,{R0-R4}."L.."| 00005d60 56 10 4d 4f 56 20 20 20 52 38 2c 52 31 32 0d 22 |V.MOV R8,R12."| 00005d70 60 13 2e 53 6f 75 6e 64 41 6c 6c 56 6f 69 63 65 |`..SoundAllVoice| 00005d80 73 0d 22 6a 0f 4d 4f 56 20 20 20 52 30 2c 52 38 |s."j.MOV R0,R8| 00005d90 0d 22 74 10 4d 56 4e 20 20 20 52 31 2c 23 32 30 |."t.MVN R1,#20| 00005da0 0d 22 7e 11 4d 4f 56 20 20 20 52 32 2c 23 26 46 |."~.MOV R2,#&F| 00005db0 30 0d 22 88 11 4d 4f 56 20 20 20 52 33 2c 23 26 |0."..MOV R3,#&| 00005dc0 46 46 0d 22 92 19 53 57 49 20 20 20 22 53 6f 75 |FF."..SWI "Sou| 00005dd0 6e 64 5f 43 6f 6e 74 72 6f 6c 22 0d 22 9c 12 53 |nd_Control"."..S| 00005de0 55 42 53 20 20 52 38 2c 52 38 2c 23 31 0d 22 a6 |UBS R8,R8,#1.".| 00005df0 18 42 47 54 20 20 20 53 6f 75 6e 64 41 6c 6c 56 |.BGT SoundAllV| 00005e00 6f 69 63 65 73 0d 22 b0 1b 4c 44 4d 46 44 20 52 |oices."..LDMFD R| 00005e10 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 5e |13!,{R0-R12,PC}^| 00005e20 0d 22 ba 04 0d 22 c4 0e 2e 4f 6c 64 56 6f 69 63 |."..."...OldVoic| 00005e30 65 73 0d 22 ce 1f 45 51 55 44 20 30 3a 45 51 55 |es."..EQUD 0:EQU| 00005e40 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 00005e50 30 0d 22 d8 1f 45 51 55 44 20 30 3a 45 51 55 44 |0."..EQUD 0:EQUD| 00005e60 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 30 | 0:EQUD 0:EQUD 0| 00005e70 0d 22 e2 11 2e 4f 6c 64 43 6f 6e 66 69 67 75 72 |."...OldConfigur| 00005e80 65 0d 22 ec 26 45 51 55 44 20 30 3a 45 51 55 44 |e.".&EQUD 0:EQUD| 00005e90 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 30 | 0:EQUD 0:EQUD 0| 00005ea0 3a 45 51 55 44 20 30 0d 22 f6 0f 2e 4f 6c 64 53 |:EQUD 0."...OldS| 00005eb0 74 65 72 65 6f 73 0d 23 00 11 45 51 55 44 20 30 |tereos.#..EQUD 0| 00005ec0 3a 45 51 55 44 20 30 0d 23 0a 04 0d 23 14 28 3b |:EQUD 0.#...#.(;| 00005ed0 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00005ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00005ef0 2d 2d 2a 0d 23 1e 28 3b 20 2a 20 20 45 78 69 74 |--*.#.(; * Exit| 00005f00 20 6f 66 20 54 72 61 63 6b 65 72 20 53 6f 75 6e | of Tracker Soun| 00005f10 64 20 53 79 73 74 65 6d 20 20 2a 0d 23 28 28 3b |d System *.#((;| 00005f20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00005f30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00005f40 2d 2d 2a 0d 23 32 04 0d 23 3c 12 2e 54 72 6b 5f |--*.#2..#<..Trk_| 00005f50 43 6c 6f 73 65 5f 41 6c 6c 0d 23 46 1b 53 54 4d |Close_All.#F.STM| 00005f60 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c |FD R13!,{R0-R12,| 00005f70 52 31 34 7d 0d 23 50 04 0d 23 5a 19 42 4c 20 20 |R14}.#P..#Z.BL | 00005f80 20 20 47 65 74 5f 49 6e 66 6f 73 5f 42 6c 6f 63 | Get_Infos_Bloc| 00005f90 6b 0d 23 64 13 41 44 44 20 20 20 52 37 2c 52 37 |k.#d.ADD R7,R7| 00005fa0 2c 23 32 34 0d 23 6e 19 4d 4f 56 20 20 20 52 36 |,#24.#n.MOV R6| 00005fb0 2c 23 38 3a 4d 4f 56 20 52 35 2c 23 30 0d 23 78 |,#8:MOV R5,#0.#x| 00005fc0 14 2e 53 65 74 5f 5a 65 72 6f 65 73 5f 4c 6f 6f |..Set_Zeroes_Loo| 00005fd0 70 0d 23 82 15 53 54 52 20 20 20 52 35 2c 5b 52 |p.#..STR R5,[R| 00005fe0 37 5d 2c 23 33 32 0d 23 8c 12 53 55 42 53 20 20 |7],#32.#..SUBS | 00005ff0 52 36 2c 52 36 2c 23 31 0d 23 96 19 42 47 54 20 |R6,R6,#1.#..BGT | 00006000 20 20 53 65 74 5f 5a 65 72 6f 65 73 5f 4c 6f 6f | Set_Zeroes_Loo| 00006010 70 0d 23 a0 04 0d 23 aa 0f 4d 4f 56 20 20 20 52 |p.#...#..MOV R| 00006020 30 2c 23 30 0d 23 b4 1b 4c 44 52 20 20 20 52 31 |0,#0.#..LDR R1| 00006030 2c 4f 6c 64 5f 56 6f 69 63 65 5f 53 6c 6f 74 0d |,Old_Voice_Slot.| 00006040 23 be 1d 53 57 49 20 20 20 22 53 6f 75 6e 64 5f |#..SWI "Sound_| 00006050 52 65 6d 6f 76 65 56 6f 69 63 65 22 0d 23 c8 04 |RemoveVoice".#..| 00006060 0d 23 d2 18 4c 44 52 20 20 20 52 31 32 2c 54 72 |.#..LDR R12,Tr| 00006070 6b 5f 56 6f 69 63 65 73 0d 23 dc 10 4d 4f 56 20 |k_Voices.#..MOV | 00006080 20 20 52 31 30 2c 23 31 0d 23 e6 16 41 44 52 20 | R10,#1.#..ADR | 00006090 20 20 52 39 2c 4f 6c 64 56 6f 69 63 65 73 0d 23 | R9,OldVoices.#| 000060a0 f0 12 53 55 42 20 20 20 52 39 2c 52 39 2c 23 34 |..SUB R9,R9,#4| 000060b0 0d 23 fa 16 2e 44 65 74 61 63 68 5f 54 72 6b 5f |.#...Detach_Trk_| 000060c0 56 6f 69 63 65 73 0d 24 04 10 4d 4f 56 20 20 20 |Voices.$..MOV | 000060d0 52 30 2c 52 31 30 0d 24 0e 1b 4c 44 52 20 20 20 |R0,R10.$..LDR | 000060e0 52 31 2c 5b 52 39 2c 52 31 30 2c 4c 53 4c 23 32 |R1,[R9,R10,LSL#2| 000060f0 5d 0d 24 18 1d 53 57 49 20 20 20 22 53 6f 75 6e |].$..SWI "Soun| 00006100 64 5f 41 74 74 61 63 68 56 6f 69 63 65 22 0d 24 |d_AttachVoice".$| 00006110 22 14 41 44 44 20 20 20 52 31 30 2c 52 31 30 2c |".ADD R10,R10,| 00006120 23 31 0d 24 2c 11 43 4d 50 20 20 20 52 31 30 2c |#1.$,.CMP R10,| 00006130 52 31 32 0d 24 36 1b 42 4c 45 20 20 20 44 65 74 |R12.$6.BLE Det| 00006140 61 63 68 5f 54 72 6b 5f 56 6f 69 63 65 73 0d 24 |ach_Trk_Voices.$| 00006150 40 04 0d 24 4a 17 41 44 52 20 20 20 52 39 2c 4f |@..$J.ADR R9,O| 00006160 6c 64 53 74 65 72 65 6f 73 0d 24 54 10 4d 4f 56 |ldStereos.$T.MOV| 00006170 20 20 20 52 31 30 2c 23 31 0d 24 5e 14 2e 52 65 | R10,#1.$^..Re| 00006180 73 74 6f 72 65 5f 53 74 65 72 65 6f 73 0d 24 68 |store_Stereos.$h| 00006190 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 24 72 |.MOV R0,R10.$r| 000061a0 14 4c 44 52 42 20 20 52 31 2c 5b 52 39 5d 2c 23 |.LDRB R1,[R9],#| 000061b0 31 0d 24 7c 18 53 57 49 20 20 20 22 53 6f 75 6e |1.$|.SWI "Soun| 000061c0 64 5f 53 74 65 72 65 6f 22 0d 24 86 14 41 44 44 |d_Stereo".$..ADD| 000061d0 20 20 20 52 31 30 2c 52 31 30 2c 23 31 0d 24 90 | R10,R10,#1.$.| 000061e0 11 43 4d 50 20 20 20 52 31 30 2c 52 31 32 0d 24 |.CMP R10,R12.$| 000061f0 9a 19 42 4c 45 20 20 20 52 65 73 74 6f 72 65 5f |..BLE Restore_| 00006200 53 74 65 72 65 6f 73 0d 24 a4 04 0d 24 ae 19 41 |Stereos.$...$..A| 00006210 44 52 20 20 20 52 39 2c 4f 6c 64 43 6f 6e 66 69 |DR R9,OldConfi| 00006220 67 75 72 65 0d 24 b8 14 4c 44 4d 49 41 20 52 39 |gure.$..LDMIA R9| 00006230 2c 7b 52 30 2d 52 34 7d 0d 24 c2 1b 53 57 49 20 |,{R0-R4}.$..SWI | 00006240 20 20 22 53 6f 75 6e 64 5f 43 6f 6e 66 69 67 75 | "Sound_Configu| 00006250 72 65 22 0d 24 cc 1b 4c 44 4d 46 44 20 52 31 33 |re".$..LDMFD R13| 00006260 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 5e 0d 24 |!,{R0-R12,PC}^.$| 00006270 d6 04 0d 24 e0 13 2e 4f 6c 64 5f 56 6f 69 63 65 |...$...Old_Voice| 00006280 5f 53 6c 6f 74 0d 24 ea 0a 45 51 55 44 20 30 0d |_Slot.$..EQUD 0.| 00006290 24 f4 14 2e 47 65 74 5f 50 65 72 69 6f 64 73 5f |$...Get_Periods_| 000062a0 41 64 72 0d 24 fe 1e 41 44 52 20 20 20 52 31 32 |Adr.$..ADR R12| 000062b0 2c 54 72 6b 5f 50 65 72 69 6f 64 73 5f 4c 69 73 |,Trk_Periods_Lis| 000062c0 74 0d 25 08 10 4d 4f 56 20 20 20 50 43 2c 52 31 |t.%..MOV PC,R1| 000062d0 34 0d 25 12 15 2e 54 72 6b 5f 50 65 72 69 6f 64 |4.%...Trk_Period| 000062e0 73 5f 4c 69 73 74 0d 25 1c 2f 45 51 55 44 20 26 |s_List.%./EQUD &| 000062f0 30 33 35 38 3a 45 51 55 44 20 26 30 33 32 38 3a |0358:EQUD &0328:| 00006300 45 51 55 44 20 26 30 32 46 41 3a 45 51 55 44 20 |EQUD &02FA:EQUD | 00006310 26 30 32 44 30 0d 25 26 2f 45 51 55 44 20 26 30 |&02D0.%&/EQUD &0| 00006320 32 41 36 3a 45 51 55 44 20 26 30 32 38 30 3a 45 |2A6:EQUD &0280:E| 00006330 51 55 44 20 26 30 32 35 43 3a 45 51 55 44 20 26 |QUD &025C:EQUD &| 00006340 30 32 33 41 0d 25 30 2f 45 51 55 44 20 26 30 32 |023A.%0/EQUD &02| 00006350 31 41 3a 45 51 55 44 20 26 30 31 46 43 3a 45 51 |1A:EQUD &01FC:EQ| 00006360 55 44 20 26 30 31 45 30 3a 45 51 55 44 20 26 30 |UD &01E0:EQUD &0| 00006370 31 43 35 0d 25 3a 2f 45 51 55 44 20 26 30 31 41 |1C5.%:/EQUD &01A| 00006380 43 3a 45 51 55 44 20 26 30 31 39 34 3a 45 51 55 |C:EQUD &0194:EQU| 00006390 44 20 26 30 31 37 44 3a 45 51 55 44 20 26 30 31 |D &017D:EQUD &01| 000063a0 36 38 0d 25 44 2f 45 51 55 44 20 26 30 31 35 33 |68.%D/EQUD &0153| 000063b0 3a 45 51 55 44 20 26 30 31 34 30 3a 45 51 55 44 |:EQUD &0140:EQUD| 000063c0 20 26 30 31 32 45 3a 45 51 55 44 20 26 30 31 31 | &012E:EQUD &011| 000063d0 44 0d 25 4e 2f 45 51 55 44 20 26 30 31 30 44 3a |D.%N/EQUD &010D:| 000063e0 45 51 55 44 20 26 30 30 46 45 3a 45 51 55 44 20 |EQUD &00FE:EQUD | 000063f0 26 30 30 46 30 3a 45 51 55 44 20 26 30 30 45 32 |&00F0:EQUD &00E2| 00006400 0d 25 58 2f 45 51 55 44 20 26 30 30 44 36 3a 45 |.%X/EQUD &00D6:E| 00006410 51 55 44 20 26 30 30 43 41 3a 45 51 55 44 20 26 |QUD &00CA:EQUD &| 00006420 30 30 42 45 3a 45 51 55 44 20 26 30 30 42 34 0d |00BE:EQUD &00B4.| 00006430 25 62 2f 45 51 55 44 20 26 30 30 41 41 3a 45 51 |%b/EQUD &00AA:EQ| 00006440 55 44 20 26 30 30 41 30 3a 45 51 55 44 20 26 30 |UD &00A0:EQUD &0| 00006450 30 39 37 3a 45 51 55 44 20 26 30 30 38 46 0d 25 |097:EQUD &008F.%| 00006460 6c 2f 45 51 55 44 20 26 30 30 38 37 3a 45 51 55 |l/EQUD &0087:EQU| 00006470 44 20 26 30 30 37 46 3a 45 51 55 44 20 26 30 30 |D &007F:EQUD &00| 00006480 37 38 3a 45 51 55 44 20 26 30 30 37 31 0d 25 76 |78:EQUD &0071.%v| 00006490 04 0d 25 80 3a 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d |..%.:; *--------| 000064a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000064c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 25 8a 3a 3b |----------*.%.:;| 000064d0 20 2a 20 20 20 20 4c 6f 63 61 74 65 20 61 20 54 | * Locate a T| 000064e0 46 46 20 28 54 72 61 63 6b 65 72 20 46 69 6c 65 |FF (Tracker File| 000064f0 20 46 6f 72 6d 61 74 20 21 29 20 43 68 75 6e 6b | Format !) Chunk| 00006500 20 20 20 20 2a 0d 25 94 3a 3b 20 2a 2d 2d 2d 2d | *.%.:; *----| 00006510 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00006530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 00006540 25 9e 3a 3b 20 2a 20 20 45 6e 74 72 79 20 70 61 |%.:; * Entry pa| 00006550 72 61 6d 65 74 65 72 73 20 3d 20 20 20 20 20 20 |rameters = | 00006560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00006570 20 20 20 20 20 20 20 20 2a 0d 25 a8 3a 3b 20 2a | *.%.:; *| 00006580 20 20 52 30 20 3d 3e 20 50 72 65 76 69 6f 75 73 | R0 => Previous| 00006590 20 43 68 75 6e 6b 20 6f 72 20 42 61 73 65 20 41 | Chunk or Base A| 000065a0 64 64 72 65 73 73 20 20 20 20 20 20 20 20 20 20 |ddress | 000065b0 20 20 2a 0d 25 b2 3a 3b 20 2a 20 20 52 34 20 3d | *.%.:; * R4 =| 000065c0 20 20 43 68 75 6e 63 6b 20 6e 61 6d 65 20 20 20 | Chunck name | 000065d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000065e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 25 bc | *.%.| 000065f0 3a 3b 20 2a 20 20 52 39 20 3d 3e 20 45 6e 66 20 |:; * R9 => Enf | 00006600 6f 66 20 46 69 6c 65 20 41 64 64 72 65 73 73 20 |of File Address | 00006610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00006620 20 20 20 20 20 20 2a 0d 25 c6 3a 3b 20 2a 2d 2d | *.%.:; *--| 00006630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00006660 2a 0d 25 d0 04 0d 25 da 0f 2e 53 65 61 72 63 68 |*.%...%...Search| 00006670 5f 54 46 46 0d 25 e4 15 4c 44 4d 49 41 20 52 30 |_TFF.%..LDMIA R0| 00006680 21 2c 7b 52 32 2d 52 33 7d 0d 25 ee 0f 43 4d 50 |!,{R2-R3}.%..CMP| 00006690 20 20 20 52 32 2c 52 34 0d 25 f8 12 41 44 44 4e | R2,R4.%..ADDN| 000066a0 45 20 52 30 2c 52 30 2c 52 33 0d 26 02 0d ec 51 |E R0,R0,R3.&...Q| 000066b0 20 50 43 2c 52 31 34 0d 26 0c 2b 43 4d 50 20 20 | PC,R14.&.+CMP | 000066c0 20 52 30 2c 52 39 20 20 20 20 20 20 20 20 20 20 | R0,R9 | 000066d0 20 20 20 3b 20 45 6e 64 20 4f 66 20 46 69 6c 65 | ; End Of File| 000066e0 20 3f 0d 26 16 3e 4d 4f 56 47 45 20 50 43 2c 52 | ?.&.>MOVGE PC,R| 000066f0 31 34 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 |14 ; | 00006700 53 68 6f 75 6c 64 20 64 69 73 70 6c 61 79 20 61 |Should display a| 00006710 6e 20 65 72 72 6f 72 20 68 65 72 65 20 28 21 29 |n error here (!)| 00006720 0d 26 20 14 42 20 20 20 20 20 53 65 61 72 63 68 |.& .B Search| 00006730 5f 54 46 46 0d 26 2a 17 2e 47 65 74 5f 50 61 74 |_TFF.&*..Get_Pat| 00006740 74 65 72 6e 73 5f 54 61 62 6c 65 0d 26 34 1c 41 |terns_Table.&4.A| 00006750 44 52 20 20 20 52 31 31 2c 50 61 74 74 65 72 6e |DR R11,Pattern| 00006760 73 5f 54 61 62 6c 65 0d 26 3e 10 4d 4f 56 20 20 |s_Table.&>.MOV | 00006770 20 50 43 2c 52 31 34 0d 26 48 04 0d 26 52 13 2e | PC,R14.&H..&R..| 00006780 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 0d 26 |Patterns_Table.&| 00006790 5c 18 5d 3a 50 25 2b 3d 32 35 36 3a 5b 4f 50 54 |\.]:P%+=256:[OPT| 000067a0 20 50 61 73 73 25 0d 26 66 04 0d 26 70 46 3b 20 | Pass%.&f..&pF; | 000067b0 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 000067c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000067e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 000067f0 0d 26 7a 46 3b 20 2a 20 20 46 69 6c 6c 20 73 6f |.&zF; * Fill so| 00006800 75 6e 64 20 62 75 66 66 65 72 20 77 69 74 68 6f |und buffer witho| 00006810 75 74 20 6c 6f 6f 70 20 28 4e 6f 74 20 62 65 61 |ut loop (Not bea| 00006820 75 74 69 66 75 6c 6c 20 62 75 74 20 66 61 73 74 |utifull but fast| 00006830 65 72 29 20 20 2a 0d 26 84 46 3b 20 2a 2d 2d 2d |er) *.&.F; *---| 00006840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00006870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 26 8e 04 |-----------*.&..| 00006880 0d 26 98 0e 2e 46 75 6c 6c 5f 46 69 6c 6c 0d 26 |.&...Full_Fill.&| 00006890 a2 05 5d 0d 26 ac 15 e3 20 46 69 6c 6c 53 42 25 |..].&... FillSB%| 000068a0 3d 31 20 b8 20 32 30 38 0d 26 b6 0e 5b 4f 50 54 |=1 . 208.&..[OPT| 000068b0 20 50 61 73 73 25 0d 26 c0 1b 4c 44 52 42 20 20 | Pass%.&..LDRB | 000068c0 52 38 2c 5b 52 34 2c 52 30 2c 4c 53 52 23 31 36 |R8,[R4,R0,LSR#16| 000068d0 5d 0d 26 ca 12 53 55 42 53 20 20 52 38 2c 52 38 |].&..SUBS R8,R8| 000068e0 2c 52 35 0d 26 d4 0f 4d 4f 56 4d 49 20 52 38 2c |,R5.&..MOVMI R8,| 000068f0 23 30 0d 26 de 16 53 54 52 42 20 20 52 38 2c 5b |#0.&..STRB R8,[| 00006900 52 31 32 5d 2c 52 31 31 0d 26 e8 12 41 44 44 20 |R12],R11.&..ADD | 00006910 20 20 52 30 2c 52 30 2c 52 31 0d 26 f2 05 5d 0d | R0,R0,R1.&..].| 00006920 26 fc 05 ed 0d 27 06 0e 5b 4f 50 54 20 50 61 73 |&....'..[OPT Pas| 00006930 73 25 0d 27 10 04 0d 27 1a 4a 4c 44 52 42 20 20 |s%.'...'.JLDRB | 00006940 20 52 34 2c 5b 52 32 2c 52 37 5d 20 20 20 20 20 | R4,[R2,R7] | 00006950 20 20 20 20 20 20 20 3b 20 48 75 67 6f 20 68 61 | ; Hugo ha| 00006960 73 20 66 6f 75 6e 64 20 74 68 69 73 20 73 79 73 |s found this sys| 00006970 74 65 6d 20 6e 6f 74 20 74 6f 20 6c 6f 6f 73 65 |tem not to loose| 00006980 0d 27 24 34 43 4d 50 20 20 20 20 52 34 2c 23 30 |.'$4CMP R4,#0| 00006990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000069a0 20 3b 20 61 6e 79 20 6e 6f 74 65 2f 76 6f 69 63 | ; any note/voic| 000069b0 65 2e 2e 2e 0d 27 2e 12 53 54 52 45 51 20 20 52 |e....'..STREQ R| 000069c0 30 2c 5b 52 39 5d 0d 27 38 10 4d 4f 56 4e 45 20 |0,[R9].'8.MOVNE | 000069d0 20 52 34 2c 23 30 0d 27 42 15 53 54 52 4e 45 42 | R4,#0.'B.STRNEB| 000069e0 20 52 34 2c 5b 52 32 2c 52 37 5d 0d 27 4c 04 0d | R4,[R2,R7].'L..| 000069f0 27 56 17 4d 4f 56 20 20 20 52 30 2c 23 25 30 30 |'V.MOV R0,#%00| 00006a00 30 30 31 30 30 30 0d 27 60 13 4c 44 4d 46 44 20 |001000.'`.LDMFD | 00006a10 52 31 33 21 2c 7b 50 43 7d 0d 27 6a 04 0d 27 74 |R13!,{PC}.'j..'t| 00006a20 18 2e 47 65 74 5f 46 72 65 71 75 65 6e 63 65 5f |..Get_Frequence_| 00006a30 54 61 62 6c 65 0d 27 7e 43 41 44 52 20 20 20 52 |Table.'~CADR R| 00006a40 38 2c 46 72 65 71 75 65 6e 63 65 5f 54 61 62 6c |8,Frequence_Tabl| 00006a50 65 31 20 20 20 20 3b 20 3d 3e 20 46 72 65 71 20 |e1 ; => Freq | 00006a60 54 61 62 6c 65 20 46 6f 72 20 31 20 26 20 32 20 |Table For 1 & 2 | 00006a70 43 68 61 6e 6e 65 6c 73 0d 27 88 10 43 4d 50 20 |Channels.'..CMP | 00006a80 20 20 52 31 31 2c 23 33 0d 27 92 43 41 44 44 47 | R11,#3.'.CADDG| 00006a90 45 20 52 38 2c 52 38 2c 23 34 30 39 36 20 20 20 |E R8,R8,#4096 | 00006aa0 20 20 20 20 20 20 20 20 20 3b 20 3d 3e 20 46 72 | ; => Fr| 00006ab0 65 71 20 54 61 62 6c 65 20 46 6f 72 20 33 20 26 |eq Table For 3 &| 00006ac0 20 34 20 43 68 61 6e 6e 65 6c 73 0d 27 9c 10 43 | 4 Channels.'..C| 00006ad0 4d 50 20 20 20 52 31 31 2c 23 35 0d 27 a6 43 41 |MP R11,#5.'.CA| 00006ae0 44 44 47 45 20 52 38 2c 52 38 2c 23 34 30 39 36 |DDGE R8,R8,#4096| 00006af0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 3d 3e | ; =>| 00006b00 20 46 72 65 71 20 54 61 62 6c 65 20 46 6f 72 20 | Freq Table For | 00006b10 35 20 2d 20 38 20 43 68 61 6e 6e 65 6c 73 0d 27 |5 - 8 Channels.'| 00006b20 b0 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 27 |..MOV PC,R14.'| 00006b30 ba 04 0d 27 c4 15 2e 46 72 65 71 75 65 6e 63 65 |...'...Frequence| 00006b40 5f 54 61 62 6c 65 31 0d 27 ce 19 5d 3a 50 25 2b |_Table1.'..]:P%+| 00006b50 3d 34 30 39 36 3a 5b 4f 50 54 20 50 61 73 73 25 |=4096:[OPT Pass%| 00006b60 0d 27 d8 15 2e 46 72 65 71 75 65 6e 63 65 5f 54 |.'...Frequence_T| 00006b70 61 62 6c 65 32 0d 27 e2 19 5d 3a 50 25 2b 3d 34 |able2.'..]:P%+=4| 00006b80 30 39 36 3a 5b 4f 50 54 20 50 61 73 73 25 0d 27 |096:[OPT Pass%.'| 00006b90 ec 15 2e 46 72 65 71 75 65 6e 63 65 5f 54 61 62 |...Frequence_Tab| 00006ba0 6c 65 33 0d 27 f6 19 5d 3a 50 25 2b 3d 34 30 39 |le3.'..]:P%+=409| 00006bb0 36 3a 5b 4f 50 54 20 50 61 73 73 25 0d 28 00 0f |6:[OPT Pass%.(..| 00006bc0 2e 4d 6f 64 75 6c 65 5f 45 6e 64 0d 28 0a 05 5d |.Module_End.(..]| 00006bd0 0d 28 14 05 ed 0d 28 1e 04 0d 28 28 17 e3 20 50 |.(....(...((.. P| 00006be0 65 72 69 6f 64 73 25 3d 31 20 b8 20 31 30 32 30 |eriods%=1 . 1020| 00006bf0 0d 28 32 49 46 72 65 71 75 65 6e 63 65 5f 54 61 |.(2IFrequence_Ta| 00006c00 62 6c 65 31 21 28 50 65 72 69 6f 64 73 25 2a 34 |ble1!(Periods%*4| 00006c10 29 3d 28 28 33 35 37 35 38 37 32 2f 50 65 72 69 |)=((3575872/Peri| 00006c20 6f 64 73 25 29 2f 28 31 30 30 30 30 30 30 2f 33 |ods%)/(1000000/3| 00006c30 37 29 29 2a 36 30 30 30 30 0d 28 3c 05 ed 0d 28 |7))*60000.(<...(| 00006c40 46 17 e3 20 50 65 72 69 6f 64 73 25 3d 31 20 b8 |F.. Periods%=1 .| 00006c50 20 31 30 32 30 0d 28 50 49 46 72 65 71 75 65 6e | 1020.(PIFrequen| 00006c60 63 65 5f 54 61 62 6c 65 32 21 28 50 65 72 69 6f |ce_Table2!(Perio| 00006c70 64 73 25 2a 34 29 3d 28 28 33 35 37 35 38 37 32 |ds%*4)=((3575872| 00006c80 2f 50 65 72 69 6f 64 73 25 29 2f 28 31 30 30 30 |/Periods%)/(1000| 00006c90 30 30 30 2f 33 34 29 29 2a 36 30 30 30 30 0d 28 |000/34))*60000.(| 00006ca0 5a 05 ed 0d 28 64 17 e3 20 50 65 72 69 6f 64 73 |Z...(d.. Periods| 00006cb0 25 3d 31 20 b8 20 31 30 32 30 0d 28 6e 49 46 72 |%=1 . 1020.(nIFr| 00006cc0 65 71 75 65 6e 63 65 5f 54 61 62 6c 65 33 21 28 |equence_Table3!(| 00006cd0 50 65 72 69 6f 64 73 25 2a 34 29 3d 28 28 33 35 |Periods%*4)=((35| 00006ce0 37 35 38 37 32 2f 50 65 72 69 6f 64 73 25 29 2f |75872/Periods%)/| 00006cf0 28 31 30 30 30 30 30 30 2f 32 36 29 29 2a 36 30 |(1000000/26))*60| 00006d00 30 30 30 0d 28 78 05 ed 0d 28 82 04 0d 28 8c 33 |000.(x...(...(.3| 00006d10 ff 28 22 53 41 56 45 20 25 2e 50 6c 61 79 65 72 |.("SAVE %.Player| 00006d20 5f 4d 6f 64 20 22 2b c3 7e 63 6f 64 65 2b 22 20 |_Mod "+.~code+" | 00006d30 22 2b c3 7e 4d 6f 64 75 6c 65 5f 45 6e 64 29 0d |"+.~Module_End).| 00006d40 28 96 20 2a 53 45 54 54 59 50 45 20 25 2e 50 6c |(. *SETTYPE %.Pl| 00006d50 61 79 65 72 5f 4d 6f 64 20 4d 4f 44 55 4c 45 0d |ayer_Mod MODULE.| 00006d60 ff |.| 00006d61