Home » Archimedes archive » Apps » Tracker - Program Disc (1990)(The Serial Port).adf » SourceCode/Player_S
SourceCode/Player_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/Player_S |
Read OK: | ✔ |
File size: | 520B bytes |
Load address: | FFFFFB42 |
Exec address: | CD9CAECF |
File contents
10REM >Player_S 20: 30REM *-----------------------------------------------------------------* 40REM * PLAYROUTINE 1-8 VOICES FOR TRACKER Version 1.3 * 50REM *-----------------------------------------------------------------* 60REM * Written by Fabrice MERCIER * 70REM *-----------------------------------------------------------------* 80REM * (c) 1990 Fabrice MERCIER & The Serial Port * 90REM *-----------------------------------------------------------------* 100REM * Many thanks to Hugo for his great help in a bloody debug-day ! * 110REM *-----------------------------------------------------------------* 120REM * In your own program : * 130REM * 1) Call 'Trk_Init_All' at beginning of your program * 140REM * 2) Call 'Trk_Play_Music' each frame * 150REM * 3) Call 'Trk_Close_All' before to quit * 160REM *-----------------------------------------------------------------* 170: 180DIM Play_Routine 256*1024 190Sample_Rate = 34 200Sample_Volume = 44 210Sample_Length = 56 220Repeat_Offset = 68 230Repeat_Length = 80 240 250FOR Pass%=0 TO 2 STEP 2 260P%=Play_Routine 270[OPT Pass% 280STMFD R13!,{R0-R12,R14} 290BL Trk_Init_All 300.Trk_Loop 310SWI "OS_ReadEscapeState" 320BCS Trk_Out 330BL Trk_Play_Music 340MOV R0,#&13 350SWI "OS_Byte" 360B Trk_Loop 370.Trk_Out 380BL Trk_Close_All 390LDMFD R13!,{R0-R12,PC} 400.Music_Name 410EQUS "Music":EQUB 0:ALIGN 420 430; *--------------------------------------------------* 440; * Init Tracker Variables & Init Sound System * 450; *--------------------------------------------------* 460 470.Trk_Init_All 480STMFD R13!,{R14} 490 500MOV R0,#16 ; You can remove this load routine and use 510ADR R1,Music_Name ; your own one, but you must save the music 520ADR R2,Play_Routine ; base address in Trk_Base... 530ADD R2,R2,#40*1024 ; R2 => Music base address 540STR R2,Trk_Base ; Must be saved in Trk_Base (!) 550MOV R3,#0 560SWI "OS_File" 570 580ADR R12,Trk_Infos ; R12 => Tracker Pointers & Counters 590MOV R1,#0 600STR R1,[R12],#4 ; Set position in Sequence to zero 610LDR R0,Trk_Base ; R0 => Music Base Address 620LDR R9,[R0,#4] ; R9 = File Length (-8) 630ADD R0,R0,#8 ; R0 => First Chunk Address 640ADD R9,R0,R9 ; R9 => End of file 650MOV R10,R0 660LDR R4,MLEN_Chunk 670BL Search_TFF 680LDR R1,[R0] ; R1 = Music Length (=Sequence length) 690STR R1,[R12],#4 700MOV R1,#0 710STR R1,[R12],#4 ; Pattern line counter to zero 720MOV R0,R10 730LDR R4,PLEN_Chunk 740BL Search_TFF 750STR R0,[R12],#4 ; Save Pattern Table Base Address 760MOV R0,R10 770LDR R4,SEQU_Chunk 780BL Search_TFF 790STR R0,[R12],#4 ; Save Sequence Base Address 800MOV R0,R10 810LDR R4,PNUM_Chunk 820BL Search_TFF 830LDR R6,[R0] ; R6 = Patterns number in music 840BL Get_Patterns_Table ; R11 => on Patterns Table 850STR R11,[R12],#4 860LDR R4,PATT_Chunk 870MOV R0,R10 880.Search_Patterns 890BL Search_TFF 900STR R0,[R11],#4 ; Save Pattern Address in Patterns Table 910ADD R0,R0,R3 ; Add pattern length to chunk (=next pattern) 920SUBS R6,R6,#1 930BGT Search_Patterns 940ADR R1,Trk_Samples 950LDR R4,SAMP_Chunk 960MOV R7,#36 ; 36 Samples Chunks in one music piece 970.Init_Trk_Samples 980BL Search_TFF 990SUB R5,R0,#8 1000STR R5,[R1],#4 1010ADD R0,R0,R3 1020SUBS R7,R7,#1 1030BGT Init_Trk_Samples 1040MOV R0,R10 1050LDR R4,MVOX_Chunk 1060BL Search_TFF 1070LDR R12,[R0] ; R12 = Voices Number 1080STR R12,Trk_Voices 1090MOV R0,R10 1100LDR R4,STER_Chunk 1110BL Search_TFF 1120MOV R11,R0 ; R11 => Stereo Positions List 1130BL Init_Sound_System ; Jump To Sound System Initialisation 1140LDMFD R13!,{PC} 1150 1160.TINF_Chunk:EQUS "TINF" 1170.MVOX_Chunk:EQUS "MVOX" 1180.STER_Chunk:EQUS "STER" 1190.MLEN_Chunk:EQUS "MLEN" 1200.PLEN_Chunk:EQUS "PLEN" 1210.SEQU_Chunk:EQUS "SEQU" 1220.PNUM_Chunk:EQUS "PNUM" 1230.PATT_Chunk:EQUS "PATT" 1240.SAMP_Chunk:EQUS "SAMP" 1250 1260; *-----------------------------------------------------* 1270; * SOUND BUFFER FILL ROUTINES * 1280; *-----------------------------------------------------* 1290; * R9 => Tracker Infos Block (32 Byte per channel) * 1300; * [00-03] ( R0 ) Phase Accumulator * 1310; * [04-07] ( R1 ) Phase Increment (Cf. Frequency) * 1320; * [08-11] ( R2 ) Repeat Offset * 1330; * [12-15] ( R3 ) Sample Length (or Repeat Length) * 1340; * [16-19] ( R4 ) Sample Address * 1350; * [20-23] ( R5 ) Sample Volume (255-Volume) * 1360; * [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples) * 1370; * [.....] (....) Others infos for effects * 1380; *-----------------------------------------------------* 1390; * R10 = DMA Buffer limits (+1) * 1400; * R11 = DMA Buffer Interleave Increment (1-8) * 1410; * R12 = DMA Buffer base pointer (+R11) * 1420; *-----------------------------------------------------* 1430 1440.Fill_Sound_Buffer 1450ADR R9,Voices_Infos_Block 1460ADD R9,R9,R7,LSL#5 1470LDMIA R9,{R0-R6} 1480 1490CMP R6,#0 1500BEQ Clear_Fill 1510 1520SUB R8,R3,R0,LSR#16 1530SUB R8,R8,R1,LSR#8 1540CMP R8,#208 1550BGT Full_Fill 1560 1570.Fill_Loop 1580] 1590FOR Plop%=1 TO 16 1600[ 1610OPT Pass% 1620LDRB R8,[R4,R0,LSR#16] 1630SUBS R8,R8,R5 1640MOVMI R8,#0 1650STRB R8,[R12],R11 1660ADD R0,R0,R1 1670] 1680NEXT 1690[ 1700OPT Pass% 1710CMP R3,R0,LSR#16 ; End of sample ? 1720BGE Check_Buffer_End 1730MOVS R0,R2,LSL#16 ; Yes => R0=Repeat Offset 1740BEQ Clear_Fill ; If no repeat then fill buffer with zeros 1750.Check_Buffer_End 1760CMP R12,R10 1770BLT Fill_Loop 1780STR R0,[R9] 1790MOV R0,#%00001000 1800LDMFD R13!,{PC} 1810 1820.Clear_Fill 1830MOV R5,#0 1840STR R5,[R9,#24] 1850.Clear_Fill_Loop 1860STRB R5,[R12],R11 1870CMP R12,R10 1880BLT Clear_Fill_Loop 1890MOV R0,#%00001000 1900LDMFD R13!,{PC} 1910 1920.Voices_Infos_Block 1930] 1940FOR BufBlk%=1 TO 64 1950[OPT Pass% 1960EQUD 0 1970] 1980NEXT 1990[OPT Pass% 2000 2010.Trk_Base 2020EQUD 0 ; Music Base Address 2030.Trk_Infos 2040EQUD 0 ; Position Counter (In Sequence) 2050EQUD 0 ; Music Length 2060EQUD 0 ; Position Counter (In Pattern) 2070EQUD 0 ; => on Patterns Length Table 2080EQUD 0 ; => on Sequence Base Address 2090EQUD 0 ; => on Patterns Table (up to 64 patterns) 2100.Trk_Voices 2110EQUD 0 ; Voices Number 2120.Trk_Counter 2130EQUD 5 2140.Trk_Speed 2150EQUD 6 2160.Trk_Samples 2170] 2180P%+=36*4 2190[OPT Pass% 2200.Trk_Periods 2210EQUD0:EQUD0:EQUD0:EQUD0 2220EQUD0:EQUD0:EQUD0:EQUD0 2230.Trk_Pattern_Line 2240EQUD0:EQUD0:EQUD0:EQUD0 2250EQUD0:EQUD0:EQUD0:EQUD0 2260.Get_Infos_Block 2270ADR R7,Voices_Infos_Block 2280MOV PC,R14 2290 2300; *---------------------------------------------* 2310; * Increment/Check Counter (Tempo) Value * 2320; *---------------------------------------------* 2330 2340.Trk_Play_Music 2350STMFD R13!,{R0-R12,R14} 2360LDR R0,Trk_Counter 2370LDR R1,Trk_Speed 2380ADD R0,R0,#1 2390CMP R0,R1 2400MOVGE R0,#0 2410STR R0,Trk_Counter 2420BEQ Trk_Player 2430BNE Trk_Effects 2440 2450; *------------------------------------------* 2460; * Play a new line of current pattern * 2470; *------------------------------------------* 2480 2490.Trk_Player 2500ADR R0,Trk_Infos 2510LDMIA R0,{R1-R6,R11} 2520LDRB R7,[R5,R1] ; R7 = Pattern number 2530LDR R12,[R6,R7,LSL#2] ; R12 => Current pattern 2540MOV R10,R11,LSL#2 ; R10=R11*4 = Pattern Line Length 2550MLA R12,R3,R10,R12 ; R12 => Current pattern line 2560LDRB R7,[R4,R7] ; R7 = Pattern Length (01-64) 2570ADD R3,R3,#1 2580CMP R3,R7 ; End of Pattern ? 2590BLT Write_Position 2600MOV R3,#0 2610ADD R1,R1,#1 ; Next position in Sequence Table 2620CMP R1,R2 ; Last Position in Sequence Table ? 2630MOVGE R1,#0 ; If Yes, Clear Counter. 2640.Write_Position 2650STMIA R0,{R1-R3} ; Save new position 2660 2670ADR R2,Trk_Pattern_Line 2680LDMIA R12,{R4-R11} 2690STMIA R2,{R4-R11} 2700ADR R7,Voices_Infos_Block 2710LDR R11,Trk_Voices 2720BL Get_Frequence_Table ; Return R8 => 'Frequence' Table 2730MOV R9,#0 2740.Trk_VoiceLoop 2750LDR R5,[R12],#4 ; R5=Note+Instrument 2760AND R2,R5,#&FF0000 2770MOV R2,R2,LSR#16 ; R2=Sample number (01-36)=(0-Z) 2780SUBS R2,R2,#1 2790BLT NextOne 2800BL Get_New_Sample ; Normal case = N-O S000... 2810MOVS R4,R5,LSR#24 ; R4=Note number (01-36) 2820BLGT Get_New_Note ; ... Get Sample & Note 2830.NextOne 2840BL Trk_Effects2 2850ADD R7,R7,#32 2860ADD R9,R9,#1 2870CMP R9,R11 2880BLT Trk_VoiceLoop 2890 2900.EndOfPlay 2910LDMFD R13!,{R0-R12,PC} 2920 2930.Get_New_Note 2940STMFD R13!,{R12,R14} 2950BL Get_Periods_Adr 2960SUB R3,R4,#1 2970LDR R3,[R12,R3,LSL#2] 2980STR R3,[R7,#28] ; Save period for portamento... 2990ADR R1,Trk_Periods 3000STR R3,[R1,R9,LSL#2] ; ...and for arpeggio 3010LDR R3,[R8,R3,LSL#2] ; Get phase increment 3020STR R3,[R7,#4] ; & Save it in voices infos block 3030MOV R1,#0 3040STR R1,[R7,#0] ; Clear phase accumulator 3050LDMFD R13!,{R12,PC}^ 3060 3070.Get_New_Sample 3080STMFD R13!,{R4,R12,R14} 3090ADR R3,Trk_Samples 3100LDR R3,[R3,R2,LSL#2] ; R3 => Actual Sample 3110ADD R4,R3,#60 ; R4 => Samples Data 3120STR R4,[R7,#16] 3130MOV R1,#1 3140STR R1,[R7,#24] ; R1 = Flag Fill With Sample 3150 3160; Set Volume 3170 3180LDR R1,[R3,#16+28] ; R1 = Sample Volume 3190SUBS R4,R1,#68 3200MOVLT R4,#0 3210MOV R4,R4,LSR#2 3220RSB R1,R1,#255 3230STR R1,[R7,#20] 3240 3250; Set Volume Command 3260 3270AND R4,R5,#&FF00 3280CMP R4,#&1F00 3290ANDEQ R1,R5,#&FF 3300RSBEQ R1,R1,#&FF 3310STREQ R1,[R7,#20] 3320 3330; Get & Save samples infos 3340 3350LDR R1,[R3,#40+28] ; R1 = Repeat Offset 3360LDR R4,[R3,#52+28] ; R4 = Repeat Length 3370CMP R4,#2 3380ADDNE R4,R4,R1 3390LDREQ R4,[R3,#28+28] ; R4 = Sample Length 3400STR R4,[R7,#12] 3410ADDNE R1,R1,#1 3420STR R1,[R7,#8] ; Sauve Repeat Offset 3430LDMFD R13!,{R4,R12,PC}^ 3440 3450; *----------------------------* 3460; * Effects Checking #1 * 3470; *----------------------------* 3480; * 'E' = Set Stereo * 3490; * 'J' = Position Jump * 3500; * 'V' = Set Volume * 3510; * 'B' = Pattern Break * 3520; * 'S' = Set Speed * 3530; *----------------------------* 3540 3550.Trk_Effects2 3560AND R4,R5,#&FF00 3570 3580; Set Volume ('V') 3590 3600CMP R4,#&1F00 3610BNE No_Set_Volume 3620AND R1,R5,#&FF 3630RSB R1,R1,#&FF 3640STR R1,[R7,#20] 3650MOV PC,R14 3660.No_Set_Volume 3670 3680; Set Speed ('S') 3690 3700CMP R4,#&1C00 3710BNE No_Set_Speed 3720ANDS R1,R5,#&0F 3730STRNE R1,Trk_Speed 3740MOV PC,R14 3750.No_Set_Speed 3760 3770; Pattern Break ('B') 3780 3790CMP R4,#&B00 3800BNE No_Pattern_Break 3810ADR R0,Trk_Infos 3820LDMIA R0,{R1-R3} 3830ADD R1,R1,#1 ; Position = Position + 1 3840CMP R1,R2 3850MOVEQ R1,#0 3860MOV R3,#0 ; At start of next pattern 3870STMIA R0,{R1-R3} 3880MOV PC,R14 3890.No_Pattern_Break 3900 3910; Position Jump ('J') 3920 3930CMP R4,#&1300 3940BNE No_Position_Jump 3950ADR R0,Trk_Infos 3960AND R1,R5,#&7F 3970STR R1,[R0] 3980MOV R1,#0 3990STR R1,[R0,#8] 4000MOV PC,R14 4010.No_Position_Jump 4020 4030CMP R4,#&1500 4040BNE No_Line_Jump 4050AND R1,R5,#&F 4060MOV R2,R5,LSR#4 4070ANDS R2,R2,#&F 4080MOVGT R3,#10 4090MLAGT R1,R2,R3,R1 4100CMP R1,#63 4110ADRLE R0,Trk_Infos 4120STRLE R1,[R0,#8] 4130MOV PC,R14 4140.No_Line_Jump 4150 4160CMP R4,#&E00 4170BNE No_Set_Stereo 4180ADR R10,Stereo_Table 4190ANDS R2,R5,#&0F ; R2 = Stereo position (1-7) 4200MOVEQ PC,R14 4210CMP R2,#7 4220MOVGT PC,R14 4230SUB R2,R2,#1 4240LDR R1,[R10,R2,LSL#2] 4250ADD R0,R9,#1 ; R0 = Voice Number 4260STMFD R13!,{R8,R9} 4270MOV R0,PC 4280ORR R8,R9,#3 4290TEQP R8,#0 4300MOVNV R0,R0 4310STMFD R13!,{R14} 4320SWI "Sound_Stereo" 4330LDMFD R13!,{R14} 4340TEQP R9,#0 4350MOVNV R0,R0 4360LDMFD R13!,{R8,R9} 4370.No_Set_Stereo 4380MOV PC,R14 4390 4400; *---------------------------* 4410; * Effects Checking #2 * 4420; *---------------------------* 4430; * '0' = Arpeggio * 4440; * '1' = Portamento Up * 4450; * '2' = Portamento Down * 4460; * 'G' = Slide Volume Up * 4470; * 'H' = Slide Volume Down * 4480; *---------------------------* 4490 4500.Trk_Effects 4510ADR R9,Trk_Pattern_Line 4520ADR R10,Trk_Periods 4530LDR R11,Trk_Voices ; R11 = Voices Number 4540BL Get_Frequence_Table ; R8 => Frequence Table 4550BL Get_Infos_Block ; R7 => Infos Block (32 Byte / Channel) 4560MOV R2,#0 4570.CheckEffectsLoop 4580LDR R1,[R9,R2,LSL#2] 4590AND R3,R1,#&00FF ; R3 = Effect Data 4600MOV R1,R1,LSR#8 4610AND R1,R1,#&FF ; R1 = Effect Type 4620 4630CMP R1,#&10 4640BNE No_Slide_Vol_Up 4650AND R3,R3,#&FF 4660ADD R4,R7,R2,LSL#5 4670LDR R5,[R4,#20] ; R5=255-Volume 4680RSB R5,R5,#255 4690ADD R5,R5,R3 4700CMP R5,#&FF 4710MOVGT R5,#&FF 4720RSB R5,R5,#255 4730STR R5,[R4,#20] 4740B CheckNextVox 4750.No_Slide_Vol_Up 4760 4770CMP R1,#&11 4780BNE No_Slide_Vol_Down 4790AND R3,R3,#&FF 4800ADD R4,R7,R2,LSL#5 4810LDR R5,[R4,#20] ; R5=255-Volume 4820RSB R5,R5,#255 4830SUBS R5,R5,R3 4840MOVLT R5,#0 4850RSB R5,R5,#255 4860STR R5,[R4,#20] 4870B CheckNextVox 4880.No_Slide_Vol_Down 4890 4900CMP R1,#1 4910BNE NoPortUp 4920ADD R4,R7,R2,LSL#5 4930LDR R5,[R4,#28] ; R5=Actual Period 4940SUB R5,R5,R3 4950CMP R5,#&50 4960MOVLT R5,#&50 4970STR R5,[R4,#28] 4980LDR R5,[R8,R5,LSL#2] 4990STR R5,[R4,#4] 5000B CheckNextVox 5010.NoPortUp 5020 5030CMP R1,#2 5040BNE NoPortDown 5050ADD R4,R7,R2,LSL#5 5060LDR R5,[R4,#28] ; Hauteur Note Actuelle 5070ADD R5,R5,R3 5080CMP R5,#&3F0 5090MOVGT R5,#&3F0 5100STR R5,[R4,#28] 5110LDR R5,[R8,R5,LSL#2] ; Get phase increment... 5120STR R5,[R4,#4] ; ...Save it 5130B CheckNextVox 5140.NoPortDown 5150 5160CMP R1,#0 5170BLEQ Trk_Arpeggio 5180 5190.CheckNextVox 5200ADD R2,R2,#1 ; Next Voice 5210CMP R2,R11 ; Last Voice ? 5220BNE CheckEffectsLoop 5230LDMFD R13!,{R0-R12,PC} 5240 5250.Trk_Arpeggio 5260STMFD R13!,{R14} 5270CMP R3,#0 5280LDMEQFD R13!,{PC} 5290LDR R0,Trk_Counter 5300CMP R0,#1 5310BEQ Arp_Loop2 5320CMP R0,#2 5330BEQ Arp_Loop3 5340CMP R0,#3 5350BEQ Arp_Loop4 5360CMP R0,#4 5370BEQ Arp_Loop2 5380CMP R0,#5 5390BEQ Arp_Loop3 5400LDMFD R13!,{PC} 5410 5420.Arp_Loop2 5430MOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone 5440B Arp_Cont 5450.Arp_Loop3 5460AND R0,R3,#&0F ; R0=Second nibble, then add it to current tone 5470B Arp_Cont 5480.Arp_Loop4 5490LDR R3,[R10,R2,LSL#2] ; Play current tone 5500B Arp_EndPart 5510.Arp_Cont 5520BL Get_Periods_Adr 5530LDR R1,[R10,R2,LSL#2] 5540ADD R4,R12,#36*4 5550.Arp_Loop5 5560LDR R3,[R12,R0,LSL#2] 5570LDR R6,[R12],#4 5580CMP R6,R1 5590BEQ Arp_EndPart 5600B Arp_Loop5 5610 5620.Arp_EndPart 5630ADD R12,R12,R0,LSL#2 5640CMP R12,R4 5650LDMGTFD R13!,{PC} 5660ADD R4,R7,R2,LSL#5 5670CMP R3,#0 5680LDMEQFD R13!,{PC} 5690LDR R5,[R8,R3,LSL#2] ; Get phase increment... 5700STR R5,[R4,#4] ; ...Save it in Voices Infos_Block 5710.End_Effect 5720LDMFD R13!,{PC} 5730 5740.Stereo_Table 5750EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127 5760 5770.Voice_Control_Block 5780B Fill_Sound_Buffer 5790B Fill_Sound_Buffer 5800B Fill_Sound_Buffer 5810LDMFD R13!,{PC} 5820LDMFD R13!,{PC} 5830LDMFD R13!,{PC} 5840LDMFD R13!,{PC} 5850EQUD Voice_Name-Voice_Control_Block 5860.Voice_Name 5870EQUS "Tracker":EQUB 0:ALIGN 5880 5890; *---------------------------------* 5900; * Init Tracker Sound System * 5910; *---------------------------------* 5920 5930.Init_Sound_System 5940STMFD R13!,{R0-R12,R14} 5950LDR R12,Trk_Voices 5960 5970ADR R0,Voice_Control_Block 5980MOV R1,#0 5990SWI "Sound_InstallVoice" 6000STR R1,Old_Voice_Slot 6010 6020MOV R10,#1 6030ADR R9,OldVoices 6040SUB R9,R9,#4 6050.Voices_Exterminator 6060MOV R0,R10 6070MOV R1,#0 6080SWI "Sound_AttachVoice" 6090STR R1,[R9,R10,LSL#2] 6100ADD R10,R10,#1 6110CMP R10,#8 6120BLE Voices_Exterminator 6130 6140MOV R10,#1 6150.InitAllVoices 6160MOV R0,R10 6170ADR R1,Voice_Name 6180SWI "Sound_AttachNamedVoice" 6190ADD R10,R10,#1 6200CMP R10,R12 6210BLE InitAllVoices 6220 6230ADR R7,OldStereos 6240ADR R10,Stereo_Table 6250MOV R9,#1 6260.Set_Stereo_Loop 6270MOV R0,R9 6280LDRB R5,[R11],#1 6290SUBS R5,R5,#1 6300MOVLT R5,#0 6310LDR R1,[R10,R5,LSL#2] 6320SWI "Sound_Stereo" 6330STRB R1,[R7],#1 6340ADD R9,R9,#1 6350CMP R9,R12 6360BLE Set_Stereo_Loop 6370 6380MOV R0,R12 ; Voices number 6390MOV R1,#208 ; Buffer length in byte per channel 6400MOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) 6410MOV R3,#0 6420MOV R4,#0 6430SWI "Sound_Configure" 6440ADR R9,OldConfigure 6450STMIA R9,{R0-R4} 6460 6470MOV R8,R12 6480.SoundAllVoices 6490MOV R0,R8 6500MVN R1,#20 6510MOV R2,#&F0 6520MOV R3,#&FF 6530SWI "Sound_Control" 6540SUBS R8,R8,#1 6550BGT SoundAllVoices 6560LDMFD R13!,{R0-R12,PC}^ 6570 6580.OldVoices 6590EQUD 0:EQUD 0:EQUD 0:EQUD 0 6600EQUD 0:EQUD 0:EQUD 0:EQUD 0 6610.OldConfigure 6620EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 6630.OldStereos 6640EQUD 0:EQUD 0 6650 6660; *--------------------------------* 6670; * Exit of Tracker Sound System * 6680; *--------------------------------* 6690 6700.Trk_Close_All 6710STMFD R13!,{R0-R12,R14} 6720MOV R0,#0 6730LDR R1,Old_Voice_Slot 6740SWI "Sound_RemoveVoice" 6750 6760LDR R12,Trk_Voices 6770MOV R10,#1 6780ADR R9,OldVoices 6790SUB R9,R9,#4 6800.Detach_Trk_Voices 6810MOV R0,R10 6820LDR R1,[R9,R10,LSL#2] 6830SWI "Sound_AttachVoice" 6840ADD R10,R10,#1 6850CMP R10,R12 6860BLE Detach_Trk_Voices 6870 6880ADR R9,OldStereos 6890MOV R10,#1 6900.Restore_Stereos 6910MOV R0,R10 6920LDRB R1,[R9],#1 6930SWI "Sound_Stereo" 6940ADD R10,R10,#1 6950CMP R10,R12 6960BLE Restore_Stereos 6970 6980ADR R9,OldConfigure 6990LDMIA R9,{R0-R4} 7000SWI "Sound_Configure" 7010LDMFD R13!,{R0-R12,PC}^ 7020 7030.Old_Voice_Slot 7040EQUD 0 7050.Get_Periods_Adr 7060ADR R12,Trk_Periods_List 7070MOV PC,R14 7080.Trk_Periods_List 7090EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0 7100EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A 7110EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 7120EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 7130EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D 7140EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 7150EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 7160EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F 7170EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 7180 7190; *--------------------------------------------------* 7200; * Locate a TFF (Tracker File Format !) Chunk * 7210; *--------------------------------------------------* 7220; * Entry parameters = * 7230; * R0 => Previous Chunk or Base Address * 7240; * R4 = Chunck name * 7250; * R9 => Enf of File Address * 7260; *--------------------------------------------------* 7270 7280.Search_TFF 7290LDMIA R0!,{R2-R3} 7300CMP R2,R4 7310ADDNE R0,R0,R3 7320MOVEQ PC,R14 7330CMP R0,R9 ; End Of File ? 7340MOVGE PC,R14 ; Should display an error here (!) 7350B Search_TFF 7360.Get_Patterns_Table 7370ADR R11,Patterns_Table 7380MOV PC,R14 7390 7400.Patterns_Table 7410]:P%+=256:[OPT Pass% 7420 7430; *--------------------------------------------------------------* 7440; * Fill sound buffer without loop (Not beautifull but faster) * 7450; *--------------------------------------------------------------* 7460 7470.Full_Fill 7480] 7490FOR FillSB%=1 TO 208 7500[ 7510OPT Pass% 7520LDRB R8,[R4,R0,LSR#16] 7530SUBS R8,R8,R5 7540MOVMI R8,#0 7550STRB R8,[R12],R11 7560ADD R0,R0,R1 7570] 7580NEXT 7590[ 7600OPT Pass% 7610STR R0,[R9] 7620MOV R0,#%00001000 7630LDMFD R13!,{PC} 7640 7650 7660.Get_Frequence_Table 7670ADR R8,Frequence_Table1 ; => Freq Table For 1 & 2 Channels 7680CMP R11,#3 7690ADDGE R8,R8,#4096 ; => Freq Table For 3 & 4 Channels 7700CMP R11,#5 7710ADDGE R8,R8,#4096 ; => Freq Table For 5 - 8 Channels 7720MOV PC,R14 7730 7740.Frequence_Table1 7750]:P%+=4096:[OPT Pass% 7760.Frequence_Table2 7770]:P%+=4096:[OPT Pass% 7780.Frequence_Table3 7790]:P%+=4096:[OPT Pass% 7800.End_Code 7810] 7820NEXT 7830 7840FOR Periods%=1 TO 1020 7850Frequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 7860NEXT 7870FOR Periods%=1 TO 1020 7880Frequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/Sample_Rate))*60000 7890NEXT 7900FOR Periods%=1 TO 1020 7910Frequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 7920NEXT 7930CALL Play_Routine 7940END
� >Player_S : I� *-----------------------------------------------------------------* (I� * PLAYROUTINE 1-8 VOICES FOR TRACKER Version 1.3 * 2I� *-----------------------------------------------------------------* <I� * Written by Fabrice MERCIER * FI� *-----------------------------------------------------------------* PI� * (c) 1990 Fabrice MERCIER & The Serial Port * ZI� *-----------------------------------------------------------------* dI� * Many thanks to Hugo for his great help in a bloody debug-day ! * nI� *-----------------------------------------------------------------* xI� * In your own program : * �I� * 1) Call 'Trk_Init_All' at beginning of your program * �I� * 2) Call 'Trk_Play_Music' each frame * �I� * 3) Call 'Trk_Close_All' before to quit * �I� *-----------------------------------------------------------------* �: �� Play_Routine 256*1024 �Sample_Rate = 34 �Sample_Volume = 44 �Sample_Length = 56 �Repeat_Offset = 68 �Repeat_Length = 80 � �� Pass%=0 � 2 � 2 P%=Play_Routine [OPT Pass% STMFD R13!,{R0-R12,R14} "BL Trk_Init_All , .Trk_Loop 6SWI "OS_ReadEscapeState" @BCS Trk_Out JBL Trk_Play_Music TMOV R0,#&13 ^SWI "OS_Byte" hB Trk_Loop r.Trk_Out |BL Trk_Close_All �LDMFD R13!,{R0-R12,PC} �.Music_Name �EQUS "Music":EQUB 0:ALIGN � �:; *--------------------------------------------------* �:; * Init Tracker Variables & Init Sound System * �:; *--------------------------------------------------* � �.Trk_Init_All �STMFD R13!,{R14} � �HMOV R0,#16 ; You can remove this load routine and use �IADR R1,Music_Name ; your own one, but you must save the music ;ADR R2,Play_Routine ; base address in Trk_Base... 8ADD R2,R2,#40*1024 ; R2 => Music base address =STR R2,Trk_Base ; Must be saved in Trk_Base (!) &MOV R3,#0 0SWI "OS_File" : DBADR R12,Trk_Infos ; R12 => Tracker Pointers & Counters NMOV R1,#0 X@STR R1,[R12],#4 ; Set position in Sequence to zero b8LDR R0,Trk_Base ; R0 => Music Base Address l5LDR R9,[R0,#4] ; R9 = File Length (-8) v9ADD 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 �MOV R0,R10 �LDR R4,PLEN_Chunk �BL Search_TFF �?STR R0,[R12],#4 ; Save Pattern Table Base Address �MOV R0,R10 LDR R4,SEQU_Chunk BL Search_TFF :STR R0,[R12],#4 ; Save Sequence Base Address MOV R0,R10 *LDR R4,PNUM_Chunk 4BL Search_TFF >=LDR R6,[R0] ; R6 = Patterns number in music H8BL Get_Patterns_Table ; R11 => on Patterns Table RSTR R11,[R12],#4 \LDR R4,PATT_Chunk fMOV R0,R10 p.Search_Patterns zBL 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 �ADR R1,Trk_Samples �LDR R4,SAMP_Chunk �DMOV R7,#36 ; 36 Samples Chunks in one music piece �.Init_Trk_Samples �BL Search_TFF �SUB 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 8STR R12,Trk_Voices BMOV R0,R10 LLDR R4,STER_Chunk VBL Search_TFF `<MOV R11,R0 ; R11 => Stereo Positions List jCBL Init_Sound_System ; Jump To Sound System Initialisation tLDMFD R13!,{PC} ~ �.TINF_Chunk:EQUS "TINF" �.MVOX_Chunk:EQUS "MVOX" �.STER_Chunk:EQUS "STER" �.MLEN_Chunk:EQUS "MLEN" �.PLEN_Chunk:EQUS "PLEN" �.SEQU_Chunk:EQUS "SEQU" �.PNUM_Chunk:EQUS "PNUM" �.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 * 2=; * [12-15] ( R3 ) Sample Length (or Repeat Length) * <=; * [16-19] ( R4 ) Sample Address * F=; * [20-23] ( R5 ) Sample Volume (255-Volume) * P=; * [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples) * Z=; * [.....] (....) Others infos for effects * d=; *-----------------------------------------------------* n=; * R10 = DMA Buffer limits (+1) * x=; * R11 = DMA Buffer Interleave Increment (1-8) * �=; * R12 = DMA Buffer base pointer (+R11) * �=; *-----------------------------------------------------* � �.Fill_Sound_Buffer �ADR R9,Voices_Infos_Block �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 BGT Full_Fill ".Fill_Loop ,] 6� Plop%=1 � 16 @[ J OPT Pass% TLDRB R8,[R4,R0,LSR#16] ^SUBS R8,R8,R5 hMOVMI R8,#0 rSTRB R8,[R12],R11 |ADD R0,R0,R1 �] �� �[ �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 �STR R0,[R9] �MOV R0,#%00001000 LDMFD R13!,{PC} .Clear_Fill &MOV R5,#0 0STR R5,[R9,#24] :.Clear_Fill_Loop DSTRB R5,[R12],R11 NCMP R12,R10 XBLT Clear_Fill_Loop bMOV R0,#%00001000 lLDMFD R13!,{PC} v �.Voices_Infos_Block �] �� BufBlk%=1 � 64 �[OPT Pass% � EQUD 0 �] �� �[OPT Pass% � � .Trk_Base �1EQUD 0 ; Music Base Address �.Trk_Infos �=EQUD 0 ; Position Counter (In Sequence) +EQUD 0 ; Music Length <EQUD 0 ; Position Counter (In Pattern) :EQUD 0 ; => on Patterns Length Table :EQUD 0 ; => on Sequence Base Address *GEQUD 0 ; => on Patterns Table (up to 64 patterns) 4.Trk_Voices >,EQUD 0 ; Voices Number H.Trk_Counter R EQUD 5 \.Trk_Speed f EQUD 6 p.Trk_Samples z] �P%+=36*4 �[OPT Pass% �.Trk_Periods �EQUD0:EQUD0:EQUD0:EQUD0 �EQUD0:EQUD0:EQUD0:EQUD0 �.Trk_Pattern_Line �EQUD0:EQUD0:EQUD0:EQUD0 �EQUD0:EQUD0:EQUD0:EQUD0 �.Get_Infos_Block �ADR R7,Voices_Infos_Block �MOV PC,R14 � �5; *---------------------------------------------* 5; * Increment/Check Counter (Tempo) Value * 5; *---------------------------------------------* $.Trk_Play_Music .STMFD R13!,{R0-R12,R14} 8LDR R0,Trk_Counter BLDR R1,Trk_Speed LADD R0,R0,#1 VCMP R0,R1 `MOVGE R0,#0 jSTR R0,Trk_Counter tBEQ Trk_Player ~BNE Trk_Effects � �2; *------------------------------------------* �2; * Play a new line of current pattern * �2; *------------------------------------------* � �.Trk_Player �ADR R0,Trk_Infos �LDMIA R0,{R1-R6,R11} �6LDRB R7,[R5,R1] ; R7 = Pattern number �9LDR R12,[R6,R7,LSL#2] ; R12 => Current pattern �BMOV R10,R11,LSL#2 ; R10=R11*4 = Pattern Line Length �>MLA R12,R3,R10,R12 ; R12 => Current pattern line >LDRB R7,[R4,R7] ; R7 = Pattern Length (01-64) ADD R3,R3,#1 3CMP R3,R7 ; End of Pattern ? BLT Write_Position (MOV R3,#0 2BADD R1,R1,#1 ; Next position in Sequence Table <DCMP R1,R2 ; Last Position in Sequence Table ? F9MOVGE R1,#0 ; If Yes, Clear Counter. P.Write_Position Z4STMIA R0,{R1-R3} ; Save new position d nADR R2,Trk_Pattern_Line xLDMIA R12,{R4-R11} �STMIA R2,{R4-R11} �ADR R7,Voices_Infos_Block �LDR R11,Trk_Voices �@BL Get_Frequence_Table ; Return R8 => 'Frequence' Table �MOV R9,#0 �.Trk_VoiceLoop �4LDR R5,[R12],#4 ; R5=Note+Instrument �� R2,R5,#&FF0000 �@MOV R2,R2,LSR#16 ; R2=Sample number (01-36)=(0-Z) �SUBS R2,R2,#1 �BLT NextOne �;BL Get_New_Sample ; Normal case = N-O S000... �9MOVS R4,R5,LSR#24 ; R4=Note number (01-36) 7BLGT Get_New_Note ; ... Get Sample & Note .NextOne BL Trk_Effects2 "ADD R7,R7,#32 ,ADD R9,R9,#1 6CMP R9,R11 @BLT Trk_VoiceLoop J T.EndOfPlay ^LDMFD R13!,{R0-R12,PC} h r.Get_New_Note |STMFD R13!,{R12,R14} �BL Get_Periods_Adr �SUB R3,R4,#1 �LDR R3,[R12,R3,LSL#2] �@STR R3,[R7,#28] ; Save period for portamento... �ADR R1,Trk_Periods �6STR R3,[R1,R9,LSL#2] ; ...and for arpeggio �6LDR R3,[R8,R3,LSL#2] ; Get phase increment �BSTR R3,[R7,#4] ; & Save it in voices infos block �MOV R1,#0 �:STR R1,[R7,#0] ; Clear phase accumulator �LDMFD R13!,{R12,PC}^ � �.Get_New_Sample STMFD R13!,{R4,R12,R14} ADR R3,Trk_Samples 6LDR R3,[R3,R2,LSL#2] ; R3 => Actual Sample &5ADD R4,R3,#60 ; R4 => Samples Data 0STR R4,[R7,#16] :MOV R1,#1 D=STR R1,[R7,#24] ; R1 = Flag Fill With Sample N X; Set Volume b l5LDR R1,[R3,#16+28] ; R1 = Sample Volume vSUBS R4,R1,#68 �MOVLT R4,#0 �MOV R4,R4,LSR#2 �RSB R1,R1,#255 �STR R1,[R7,#20] � �; Set Volume Command � �� R4,R5,#&FF00 �CMP R4,#&1F00 ��EQ R1,R5,#&FF �RSBEQ R1,R1,#&FF �STREQ R1,[R7,#20] � ; Get & Save samples infos 8LDR R1,[R3,#40+28] ; R1 = Repeat Offset 8LDR R4,[R3,#52+28] ; R4 = Repeat Length *CMP R4,#2 4ADDNE R4,R4,R1 >8LDREQ R4,[R3,#28+28] ; R4 = Sample Length HSTR R4,[R7,#12] RADDNE R1,R1,#1 \9STR R1,[R7,#8] ; Sauve Repeat Offset fLDMFD R13!,{R4,R12,PC}^ p z$; *----------------------------* �$; * Effects Checking #1 * �$; *----------------------------* �$; * '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 8STR R1,[R7,#20] BMOV PC,R14 L.No_Set_Volume V `; Set Speed ('S') j tCMP R4,#&1C00 ~BNE No_Set_Speed ��S R1,R5,#&0F �STRNE R1,Trk_Speed �MOV PC,R14 �.No_Set_Speed � �; Pattern Break ('B') � �CMP R4,#&B00 �BNE No_Pattern_Break �ADR R0,Trk_Infos �LDMIA R0,{R1-R3} �AADD R1,R1,#1 ; Position = Position + 1 CMP R1,R2 �Q R1,#0 BMOV R3,#0 ; At start of next pattern STMIA R0,{R1-R3} (MOV PC,R14 2.No_Pattern_Break < F; Position Jump ('J') P ZCMP R4,#&1300 dBNE No_Position_Jump nADR R0,Trk_Infos x� R1,R5,#&7F �STR R1,[R0] �MOV R1,#0 �STR R1,[R0,#8] �MOV PC,R14 �.No_Position_Jump � �CMP R4,#&1500 �BNE No_Line_Jump �� R1,R5,#&F �MOV R2,R5,LSR#4 ��S R2,R2,#&F �MOVGT R3,#10 �MLAGT R1,R2,R3,R1 CMP R1,#63 ADRLE R0,Trk_Infos STRLE R1,[R0,#8] "MOV PC,R14 ,.No_Line_Jump 6 @CMP R4,#&E00 JBNE No_Set_Stereo TADR R10,Stereo_Table ^8�S R2,R5,#&0F ; R2 = Stereo position (1-7) h �Q PC,R14 rCMP R2,#7 |MOVGT PC,R14 �SUB R2,R2,#1 �LDR R1,[R10,R2,LSL#2] �1ADD R0,R9,#1 ; R0 = Voice Number �STMFD R13!,{R8,R9} �MOV R0,PC ��R R8,R9,#3 �TEQP R8,#0 �MOVNV R0,R0 �STMFD R13!,{R14} �SWI "Sound_Stereo" �LDMFD R13!,{R14} �TEQP R9,#0 �MOVNV R0,R0 LDMFD R13!,{R8,R9} .No_Set_Stereo MOV PC,R14 & 0#; *---------------------------* :#; * Effects Checking #2 * D#; *---------------------------* N#; * '0' = Arpeggio * X#; * '1' = Portamento Up * b#; * '2' = Portamento Down * l#; * 'G' = Slide Volume Up * v#; * '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 BNE No_Slide_Vol_Up *� R3,R3,#&FF 4ADD R4,R7,R2,LSL#5 >/LDR R5,[R4,#20] ; R5=255-Volume HRSB R5,R5,#255 RADD R5,R5,R3 \CMP R5,#&FF fMOVGT R5,#&FF pRSB R5,R5,#255 zSTR 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 $CMP R1,#1 .BNE NoPortUp 8ADD R4,R7,R2,LSL#5 B0LDR R5,[R4,#28] ; R5=Actual Period LSUB R5,R5,R3 VCMP R5,#&50 `MOVLT R5,#&50 jSTR R5,[R4,#28] tLDR 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 (CMP R1,#0 2BLEQ Trk_Arpeggio < F.CheckNextVox P*ADD R2,R2,#1 ; Next Voice Z,CMP R2,R11 ; Last Voice ? dBNE CheckEffectsLoop nLDMFD R13!,{R0-R12,PC} x �.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} " ,.Arp_Loop2 6KMOV R0,R3,LSR#4 ; R0=First nibble, then add it to current tone @B Arp_Cont J.Arp_Loop3 TJ� R0,R3,#&0F ; R0=Second nibble, then add it to current tone ^B Arp_Cont h.Arp_Loop4 r0LDR 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 &CMP R3,#0 0LDMEQFD R13!,{PC} :;LDR R5,[R8,R3,LSL#2] ; Get phase increment... DESTR R5,[R4,#4] ; ...Save it in Voices Infos_Block N.End_Effect XLDMFD R13!,{PC} b l.Stereo_Table v?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 * ); *---------------------------------* *.Init_Sound_System 4STMFD R13!,{R0-R12,R14} >LDR R12,Trk_Voices H R ADR R0,Voice_Control_Block \MOV R1,#0 fSWI "Sound_InstallVoice" pSTR R1,Old_Voice_Slot z �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 $"SWI "Sound_AttachNamedVoice" .ADD R10,R10,#1 8CMP R10,R12 BBLE InitAllVoices L VADR R7,OldStereos `ADR R10,Stereo_Table jMOV R9,#1 t.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 � �.MOV R0,R12 ; Voices number �BMOV R1,#208 ; Buffer length in byte per channel @MOV R2,#Sample_Rate ; Sample Rate (34us = 29.411 Khz) MOV R3,#0 MOV R4,#0 SWI "Sound_Configure" (ADR R9,OldConfigure 2STMIA R9,{R0-R4} < FMOV R8,R12 P.SoundAllVoices ZMOV R0,R8 dMVN R1,#20 nMOV R2,#&F0 xMOV 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 * (; *--------------------------------* " ,.Trk_Close_All 6STMFD R13!,{R0-R12,R14} @MOV R0,#0 JLDR R1,Old_Voice_Slot TSWI "Sound_RemoveVoice" ^ hLDR R12,Trk_Voices rMOV 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 �BLE Detach_Trk_Voices � �ADR R9,OldStereos �MOV R10,#1 �.Restore_Stereos �MOV R0,R10 LDRB R1,[R9],#1 SWI "Sound_Stereo" ADD R10,R10,#1 &CMP R10,R12 0BLE Restore_Stereos : DADR R9,OldConfigure NLDMIA R9,{R0-R4} XSWI "Sound_Configure" bLDMFD R13!,{R0-R12,PC}^ l v.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 �/EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5 �/EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168 �/EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D �/EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2 �/EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4 �/EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F /EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071 :; *--------------------------------------------------* :; * Locate a TFF (Tracker File Format !) Chunk * *:; *--------------------------------------------------* 4:; * Entry parameters = * >:; * R0 => Previous Chunk or Base Address * H:; * R4 = Chunck name * R:; * R9 => Enf of File Address * \:; *--------------------------------------------------* f p.Search_TFF zLDMIA 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 �ADR R11,Patterns_Table �MOV PC,R14 � �.Patterns_Table �]:P%+=256:[OPT Pass% � F; *--------------------------------------------------------------* F; * Fill sound buffer without loop (Not beautifull but faster) * F; *--------------------------------------------------------------* $ ..Full_Fill 8] B� FillSB%=1 � 208 L[ V OPT Pass% `LDRB R8,[R4,R0,LSR#16] jSUBS R8,R8,R5 tMOVMI R8,#0 ~STRB R8,[R12],R11 �ADD R0,R0,R1 �] �� �[ �OPT Pass% �STR R0,[R9] �MOV R0,#%00001000 �LDMFD R13!,{PC} � � �.Get_Frequence_Table �CADR R8,Frequence_Table1 ; => Freq Table For 1 & 2 Channels CMP R11,#3 CADDGE R8,R8,#4096 ; => Freq Table For 3 & 4 Channels CMP R11,#5 CADDGE R8,R8,#4096 ; => Freq Table For 5 - 8 Channels (MOV PC,R14 2 <.Frequence_Table1 F]:P%+=4096:[OPT Pass% P.Frequence_Table2 Z]:P%+=4096:[OPT Pass% d.Frequence_Table3 n]:P%+=4096:[OPT Pass% x .End_Code �] �� � �� Periods%=1 � 1020 �IFrequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000 �� �� Periods%=1 � 1020 �RFrequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/Sample_Rate))*60000 �� �� Periods%=1 � 1020 �IFrequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000 �� �� Play_Routine � �
00000000 0d 00 0a 0f f4 20 3e 50 6c 61 79 65 72 5f 53 0d |..... >Player_S.| 00000010 00 14 05 3a 0d 00 1e 49 f4 20 2a 2d 2d 2d 2d 2d |...:...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 2a 0d 00 28 |------------*..(| 00000060 49 f4 20 2a 20 20 20 20 20 20 20 20 20 50 4c 41 |I. * PLA| 00000070 59 52 4f 55 54 49 4e 45 20 31 2d 38 20 56 4f 49 |YROUTINE 1-8 VOI| 00000080 43 45 53 20 46 4f 52 20 54 52 41 43 4b 45 52 20 |CES FOR TRACKER | 00000090 20 56 65 72 73 69 6f 6e 20 31 2e 33 20 20 20 20 | Version 1.3 | 000000a0 20 20 20 20 20 2a 0d 00 32 49 f4 20 2a 2d 2d 2d | *..2I. *---| 000000b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000000e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d |--------------*.| 000000f0 00 3c 49 f4 20 2a 20 20 20 20 20 20 20 20 20 20 |.<I. * | 00000100 20 20 20 20 20 20 20 20 20 20 57 72 69 74 74 65 | Writte| 00000110 6e 20 62 79 20 46 61 62 72 69 63 65 20 4d 45 52 |n by Fabrice MER| 00000120 43 49 45 52 20 20 20 20 20 20 20 20 20 20 20 20 |CIER | 00000130 20 20 20 20 20 20 20 2a 0d 00 46 49 f4 20 2a 2d | *..FI. *-| 00000140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000180 2a 0d 00 50 49 f4 20 2a 20 20 20 20 20 20 20 20 |*..PI. * | 00000190 20 20 20 20 28 63 29 20 31 39 39 30 20 46 61 62 | (c) 1990 Fab| 000001a0 72 69 63 65 20 4d 45 52 43 49 45 52 20 26 20 54 |rice MERCIER & T| 000001b0 68 65 20 53 65 72 69 61 6c 20 50 6f 72 74 20 20 |he Serial Port | 000001c0 20 20 20 20 20 20 20 20 20 2a 0d 00 5a 49 f4 20 | *..ZI. | 000001d0 2a 2d 2d 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 2a 0d 00 64 49 f4 20 2a 20 20 4d 61 6e 79 |--*..dI. * Many| 00000220 20 74 68 61 6e 6b 73 20 74 6f 20 48 75 67 6f 20 | thanks to Hugo | 00000230 66 6f 72 20 68 69 73 20 67 72 65 61 74 20 68 65 |for his great he| 00000240 6c 70 20 69 6e 20 61 20 62 6c 6f 6f 64 79 20 64 |lp in a bloody d| 00000250 65 62 75 67 2d 64 61 79 20 21 20 2a 0d 00 6e 49 |ebug-day ! *..nI| 00000260 f4 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |. *-------------| 00000270 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000002a0 2d 2d 2d 2d 2a 0d 00 78 49 f4 20 2a 20 20 49 6e |----*..xI. * In| 000002b0 20 79 6f 75 72 20 6f 77 6e 20 70 72 6f 67 72 61 | your own progra| 000002c0 6d 20 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 |m : | 000002d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000002e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 00 | *..| 000002f0 82 49 f4 20 2a 20 20 31 29 20 43 61 6c 6c 20 27 |.I. * 1) Call '| 00000300 54 72 6b 5f 49 6e 69 74 5f 41 6c 6c 27 20 61 74 |Trk_Init_All' at| 00000310 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 79 6f | beginning of yo| 00000320 75 72 20 70 72 6f 67 72 61 6d 20 20 20 20 20 20 |ur program | 00000330 20 20 20 20 20 20 2a 0d 00 8c 49 f4 20 2a 20 20 | *...I. * | 00000340 32 29 20 43 61 6c 6c 20 27 54 72 6b 5f 50 6c 61 |2) Call 'Trk_Pla| 00000350 79 5f 4d 75 73 69 63 27 20 65 61 63 68 20 66 72 |y_Music' each fr| 00000360 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 20 |ame | 00000370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a | *| 00000380 0d 00 96 49 f4 20 2a 20 20 33 29 20 43 61 6c 6c |...I. * 3) Call| 00000390 20 27 54 72 6b 5f 43 6c 6f 73 65 5f 41 6c 6c 27 | 'Trk_Close_All'| 000003a0 20 62 65 66 6f 72 65 20 74 6f 20 71 75 69 74 20 | before to quit | 000003b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000003c0 20 20 20 20 20 20 20 20 2a 0d 00 a0 49 f4 20 2a | *...I. *| 000003d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000410 2d 2a 0d 00 aa 05 3a 0d 00 b4 1c de 20 20 50 6c |-*....:..... Pl| 00000420 61 79 5f 52 6f 75 74 69 6e 65 20 32 35 36 2a 31 |ay_Routine 256*1| 00000430 30 32 34 0d 00 be 15 53 61 6d 70 6c 65 5f 52 61 |024....Sample_Ra| 00000440 74 65 20 20 3d 20 33 34 0d 00 c8 16 53 61 6d 70 |te = 34....Samp| 00000450 6c 65 5f 56 6f 6c 75 6d 65 20 3d 20 34 34 0d 00 |le_Volume = 44..| 00000460 d2 16 53 61 6d 70 6c 65 5f 4c 65 6e 67 74 68 20 |..Sample_Length | 00000470 3d 20 35 36 0d 00 dc 16 52 65 70 65 61 74 5f 4f |= 56....Repeat_O| 00000480 66 66 73 65 74 20 3d 20 36 38 0d 00 e6 16 52 65 |ffset = 68....Re| 00000490 70 65 61 74 5f 4c 65 6e 67 74 68 20 3d 20 38 30 |peat_Length = 80| 000004a0 0d 00 f0 04 0d 00 fa 15 e3 20 50 61 73 73 25 3d |......... Pass%=| 000004b0 30 20 b8 20 32 20 88 20 32 0d 01 04 13 50 25 3d |0 . 2 . 2....P%=| 000004c0 50 6c 61 79 5f 52 6f 75 74 69 6e 65 0d 01 0e 0e |Play_Routine....| 000004d0 5b 4f 50 54 20 50 61 73 73 25 0d 01 18 1b 53 54 |[OPT Pass%....ST| 000004e0 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 |MFD R13!,{R0-R12| 000004f0 2c 52 31 34 7d 0d 01 22 16 42 4c 20 20 20 20 54 |,R14}..".BL T| 00000500 72 6b 5f 49 6e 69 74 5f 41 6c 6c 0d 01 2c 0d 2e |rk_Init_All..,..| 00000510 54 72 6b 5f 4c 6f 6f 70 0d 01 36 1e 53 57 49 20 |Trk_Loop..6.SWI | 00000520 20 20 22 4f 53 5f 52 65 61 64 45 73 63 61 70 65 | "OS_ReadEscape| 00000530 53 74 61 74 65 22 0d 01 40 11 42 43 53 20 20 20 |State"..@.BCS | 00000540 54 72 6b 5f 4f 75 74 0d 01 4a 18 42 4c 20 20 20 |Trk_Out..J.BL | 00000550 20 54 72 6b 5f 50 6c 61 79 5f 4d 75 73 69 63 0d | Trk_Play_Music.| 00000560 01 54 11 4d 4f 56 20 20 20 52 30 2c 23 26 31 33 |.T.MOV R0,#&13| 00000570 0d 01 5e 13 53 57 49 20 20 20 22 4f 53 5f 42 79 |..^.SWI "OS_By| 00000580 74 65 22 0d 01 68 12 42 20 20 20 20 20 54 72 6b |te"..h.B Trk| 00000590 5f 4c 6f 6f 70 0d 01 72 0c 2e 54 72 6b 5f 4f 75 |_Loop..r..Trk_Ou| 000005a0 74 0d 01 7c 17 42 4c 20 20 20 20 54 72 6b 5f 43 |t..|.BL Trk_C| 000005b0 6c 6f 73 65 5f 41 6c 6c 0d 01 86 1a 4c 44 4d 46 |lose_All....LDMF| 000005c0 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 |D R13!,{R0-R12,P| 000005d0 43 7d 0d 01 90 0f 2e 4d 75 73 69 63 5f 4e 61 6d |C}.....Music_Nam| 000005e0 65 0d 01 9a 1e 45 51 55 53 20 20 22 4d 75 73 69 |e....EQUS "Musi| 000005f0 63 22 3a 45 51 55 42 20 30 3a 41 4c 49 47 4e 0d |c":EQUB 0:ALIGN.| 00000600 01 a4 04 0d 01 ae 3a 3b 20 2a 2d 2d 2d 2d 2d 2d |......:; *------| 00000610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 01 b8 |------------*...| 00000640 3a 3b 20 2a 20 20 20 20 49 6e 69 74 20 54 72 61 |:; * Init Tra| 00000650 63 6b 65 72 20 56 61 72 69 61 62 6c 65 73 20 26 |cker Variables &| 00000660 20 49 6e 69 74 20 53 6f 75 6e 64 20 53 79 73 74 | Init Sound Syst| 00000670 65 6d 20 20 20 20 2a 0d 01 c2 3a 3b 20 2a 2d 2d |em *...:; *--| 00000680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000006b0 2a 0d 01 cc 04 0d 01 d6 11 2e 54 72 6b 5f 49 6e |*.........Trk_In| 000006c0 69 74 5f 41 6c 6c 0d 01 e0 14 53 54 4d 46 44 20 |it_All....STMFD | 000006d0 52 31 33 21 2c 7b 52 31 34 7d 0d 01 ea 04 0d 01 |R13!,{R14}......| 000006e0 f4 48 4d 4f 56 20 20 20 52 30 2c 23 31 36 20 20 |.HMOV R0,#16 | 000006f0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 59 6f | ; Yo| 00000700 75 20 63 61 6e 20 72 65 6d 6f 76 65 20 74 68 69 |u can remove thi| 00000710 73 20 6c 6f 61 64 20 72 6f 75 74 69 6e 65 20 61 |s load routine a| 00000720 6e 64 20 75 73 65 0d 01 fe 49 41 44 52 20 20 20 |nd use...IADR | 00000730 52 31 2c 4d 75 73 69 63 5f 4e 61 6d 65 20 20 20 |R1,Music_Name | 00000740 20 20 20 20 3b 20 79 6f 75 72 20 6f 77 6e 20 6f | ; your own o| 00000750 6e 65 2c 20 62 75 74 20 79 6f 75 20 6d 75 73 74 |ne, but you must| 00000760 20 73 61 76 65 20 74 68 65 20 6d 75 73 69 63 0d | save the music.| 00000770 02 08 3b 41 44 52 20 20 20 52 32 2c 50 6c 61 79 |..;ADR R2,Play| 00000780 5f 52 6f 75 74 69 6e 65 20 20 20 20 20 3b 20 62 |_Routine ; b| 00000790 61 73 65 20 61 64 64 72 65 73 73 20 69 6e 20 54 |ase address in T| 000007a0 72 6b 5f 42 61 73 65 2e 2e 2e 0d 02 12 38 41 44 |rk_Base......8AD| 000007b0 44 20 20 20 52 32 2c 52 32 2c 23 34 30 2a 31 30 |D R2,R2,#40*10| 000007c0 32 34 20 20 20 20 20 20 3b 20 52 32 20 3d 3e 20 |24 ; R2 => | 000007d0 4d 75 73 69 63 20 62 61 73 65 20 61 64 64 72 65 |Music base addre| 000007e0 73 73 0d 02 1c 3d 53 54 52 20 20 20 52 32 2c 54 |ss...=STR R2,T| 000007f0 72 6b 5f 42 61 73 65 20 20 20 20 20 20 20 20 20 |rk_Base | 00000800 3b 20 4d 75 73 74 20 62 65 20 73 61 76 65 64 20 |; Must be saved | 00000810 69 6e 20 54 72 6b 5f 42 61 73 65 20 28 21 29 0d |in Trk_Base (!).| 00000820 02 26 0f 4d 4f 56 20 20 20 52 33 2c 23 30 0d 02 |.&.MOV R3,#0..| 00000830 30 13 53 57 49 20 20 20 22 4f 53 5f 46 69 6c 65 |0.SWI "OS_File| 00000840 22 0d 02 3a 04 0d 02 44 42 41 44 52 20 20 20 52 |"..:...DBADR R| 00000850 31 32 2c 54 72 6b 5f 49 6e 66 6f 73 20 20 20 20 |12,Trk_Infos | 00000860 20 20 20 3b 20 52 31 32 20 3d 3e 20 54 72 61 63 | ; R12 => Trac| 00000870 6b 65 72 20 50 6f 69 6e 74 65 72 73 20 26 20 43 |ker Pointers & C| 00000880 6f 75 6e 74 65 72 73 0d 02 4e 0f 4d 4f 56 20 20 |ounters..N.MOV | 00000890 20 52 31 2c 23 30 0d 02 58 40 53 54 52 20 20 20 | R1,#0..X@STR | 000008a0 52 31 2c 5b 52 31 32 5d 2c 23 34 20 20 20 20 20 |R1,[R12],#4 | 000008b0 20 20 20 20 3b 20 53 65 74 20 70 6f 73 69 74 69 | ; Set positi| 000008c0 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 65 20 74 |on in Sequence t| 000008d0 6f 20 7a 65 72 6f 0d 02 62 38 4c 44 52 20 20 20 |o zero..b8LDR | 000008e0 52 30 2c 54 72 6b 5f 42 61 73 65 20 20 20 20 20 |R0,Trk_Base | 000008f0 20 20 20 20 3b 20 52 30 20 3d 3e 20 4d 75 73 69 | ; R0 => Musi| 00000900 63 20 42 61 73 65 20 41 64 64 72 65 73 73 0d 02 |c Base Address..| 00000910 6c 35 4c 44 52 20 20 20 52 39 2c 5b 52 30 2c 23 |l5LDR R9,[R0,#| 00000920 34 5d 20 20 20 20 20 20 20 20 20 20 3b 20 52 39 |4] ; R9| 00000930 20 3d 20 46 69 6c 65 20 4c 65 6e 67 74 68 20 28 | = File Length (| 00000940 2d 38 29 0d 02 76 39 41 44 44 20 20 20 52 30 2c |-8)..v9ADD R0,| 00000950 52 30 2c 23 38 20 20 20 20 20 20 20 20 20 20 20 |R0,#8 | 00000960 20 3b 20 52 30 20 3d 3e 20 46 69 72 73 74 20 43 | ; R0 => First C| 00000970 68 75 6e 6b 20 41 64 64 72 65 73 73 0d 02 80 31 |hunk Address...1| 00000980 41 44 44 20 20 20 52 39 2c 52 30 2c 52 39 20 20 |ADD R9,R0,R9 | 00000990 20 20 20 20 20 20 20 20 20 20 3b 20 52 39 20 3d | ; R9 =| 000009a0 3e 20 45 6e 64 20 6f 66 20 66 69 6c 65 0d 02 8a |> End of file...| 000009b0 10 4d 4f 56 20 20 20 52 31 30 2c 52 30 0d 02 94 |.MOV R10,R0...| 000009c0 17 4c 44 52 20 20 20 52 34 2c 4d 4c 45 4e 5f 43 |.LDR R4,MLEN_C| 000009d0 68 75 6e 6b 0d 02 9e 14 42 4c 20 20 20 20 53 65 |hunk....BL Se| 000009e0 61 72 63 68 5f 54 46 46 0d 02 a8 44 4c 44 52 20 |arch_TFF...DLDR | 000009f0 20 20 52 31 2c 5b 52 30 5d 20 20 20 20 20 20 20 | R1,[R0] | 00000a00 20 20 20 20 20 20 3b 20 52 31 20 3d 20 4d 75 73 | ; R1 = Mus| 00000a10 69 63 20 4c 65 6e 67 74 68 20 28 3d 53 65 71 75 |ic Length (=Sequ| 00000a20 65 6e 63 65 20 6c 65 6e 67 74 68 29 0d 02 b2 15 |ence length)....| 00000a30 53 54 52 20 20 20 52 31 2c 5b 52 31 32 5d 2c 23 |STR R1,[R12],#| 00000a40 34 0d 02 bc 0f 4d 4f 56 20 20 20 52 31 2c 23 30 |4....MOV R1,#0| 00000a50 0d 02 c6 3c 53 54 52 20 20 20 52 31 2c 5b 52 31 |...<STR R1,[R1| 00000a60 32 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |2],#4 ; | 00000a70 50 61 74 74 65 72 6e 20 6c 69 6e 65 20 63 6f 75 |Pattern line cou| 00000a80 6e 74 65 72 20 74 6f 20 7a 65 72 6f 0d 02 d0 10 |nter to zero....| 00000a90 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 02 da 17 |MOV R0,R10....| 00000aa0 4c 44 52 20 20 20 52 34 2c 50 4c 45 4e 5f 43 68 |LDR R4,PLEN_Ch| 00000ab0 75 6e 6b 0d 02 e4 14 42 4c 20 20 20 20 53 65 61 |unk....BL Sea| 00000ac0 72 63 68 5f 54 46 46 0d 02 ee 3f 53 54 52 20 20 |rch_TFF...?STR | 00000ad0 20 52 30 2c 5b 52 31 32 5d 2c 23 34 20 20 20 20 | R0,[R12],#4 | 00000ae0 20 20 20 20 20 3b 20 53 61 76 65 20 50 61 74 74 | ; Save Patt| 00000af0 65 72 6e 20 54 61 62 6c 65 20 42 61 73 65 20 41 |ern Table Base A| 00000b00 64 64 72 65 73 73 0d 02 f8 10 4d 4f 56 20 20 20 |ddress....MOV | 00000b10 52 30 2c 52 31 30 0d 03 02 17 4c 44 52 20 20 20 |R0,R10....LDR | 00000b20 52 34 2c 53 45 51 55 5f 43 68 75 6e 6b 0d 03 0c |R4,SEQU_Chunk...| 00000b30 14 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 46 |.BL Search_TF| 00000b40 46 0d 03 16 3a 53 54 52 20 20 20 52 30 2c 5b 52 |F...:STR R0,[R| 00000b50 31 32 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b |12],#4 ;| 00000b60 20 53 61 76 65 20 53 65 71 75 65 6e 63 65 20 42 | Save Sequence B| 00000b70 61 73 65 20 41 64 64 72 65 73 73 0d 03 20 10 4d |ase Address.. .M| 00000b80 4f 56 20 20 20 52 30 2c 52 31 30 0d 03 2a 17 4c |OV R0,R10..*.L| 00000b90 44 52 20 20 20 52 34 2c 50 4e 55 4d 5f 43 68 75 |DR R4,PNUM_Chu| 00000ba0 6e 6b 0d 03 34 14 42 4c 20 20 20 20 53 65 61 72 |nk..4.BL Sear| 00000bb0 63 68 5f 54 46 46 0d 03 3e 3d 4c 44 52 20 20 20 |ch_TFF..>=LDR | 00000bc0 52 36 2c 5b 52 30 5d 20 20 20 20 20 20 20 20 20 |R6,[R0] | 00000bd0 20 20 20 20 3b 20 52 36 20 3d 20 50 61 74 74 65 | ; R6 = Patte| 00000be0 72 6e 73 20 6e 75 6d 62 65 72 20 69 6e 20 6d 75 |rns number in mu| 00000bf0 73 69 63 0d 03 48 38 42 4c 20 20 20 20 47 65 74 |sic..H8BL Get| 00000c00 5f 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 20 |_Patterns_Table | 00000c10 20 3b 20 52 31 31 20 3d 3e 20 6f 6e 20 50 61 74 | ; R11 => on Pat| 00000c20 74 65 72 6e 73 20 54 61 62 6c 65 0d 03 52 16 53 |terns Table..R.S| 00000c30 54 52 20 20 20 52 31 31 2c 5b 52 31 32 5d 2c 23 |TR R11,[R12],#| 00000c40 34 0d 03 5c 17 4c 44 52 20 20 20 52 34 2c 50 41 |4..\.LDR R4,PA| 00000c50 54 54 5f 43 68 75 6e 6b 0d 03 66 10 4d 4f 56 20 |TT_Chunk..f.MOV | 00000c60 20 20 52 30 2c 52 31 30 0d 03 70 14 2e 53 65 61 | R0,R10..p..Sea| 00000c70 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 03 7a 14 |rch_Patterns..z.| 00000c80 42 4c 20 20 20 20 53 65 61 72 63 68 5f 54 46 46 |BL Search_TFF| 00000c90 0d 03 84 46 53 54 52 20 20 20 52 30 2c 5b 52 31 |...FSTR R0,[R1| 00000ca0 31 5d 2c 23 34 20 20 20 20 20 20 20 20 20 3b 20 |1],#4 ; | 00000cb0 53 61 76 65 20 50 61 74 74 65 72 6e 20 41 64 64 |Save Pattern Add| 00000cc0 72 65 73 73 20 69 6e 20 50 61 74 74 65 72 6e 73 |ress in Patterns| 00000cd0 20 54 61 62 6c 65 0d 03 8e 4b 41 44 44 20 20 20 | Table...KADD | 00000ce0 52 30 2c 52 30 2c 52 33 20 20 20 20 20 20 20 20 |R0,R0,R3 | 00000cf0 20 20 20 20 3b 20 41 64 64 20 70 61 74 74 65 72 | ; Add patter| 00000d00 6e 20 6c 65 6e 67 74 68 20 74 6f 20 63 68 75 6e |n length to chun| 00000d10 6b 20 28 3d 6e 65 78 74 20 70 61 74 74 65 72 6e |k (=next pattern| 00000d20 29 0d 03 98 12 53 55 42 53 20 20 52 36 2c 52 36 |)....SUBS R6,R6| 00000d30 2c 23 31 0d 03 a2 19 42 47 54 20 20 20 53 65 61 |,#1....BGT Sea| 00000d40 72 63 68 5f 50 61 74 74 65 72 6e 73 0d 03 ac 18 |rch_Patterns....| 00000d50 41 44 52 20 20 20 52 31 2c 54 72 6b 5f 53 61 6d |ADR R1,Trk_Sam| 00000d60 70 6c 65 73 0d 03 b6 17 4c 44 52 20 20 20 52 34 |ples....LDR R4| 00000d70 2c 53 41 4d 50 5f 43 68 75 6e 6b 0d 03 c0 44 4d |,SAMP_Chunk...DM| 00000d80 4f 56 20 20 20 52 37 2c 23 33 36 20 20 20 20 20 |OV R7,#36 | 00000d90 20 20 20 20 20 20 20 20 20 3b 20 33 36 20 53 61 | ; 36 Sa| 00000da0 6d 70 6c 65 73 20 43 68 75 6e 6b 73 20 69 6e 20 |mples Chunks in | 00000db0 6f 6e 65 20 6d 75 73 69 63 20 70 69 65 63 65 0d |one music piece.| 00000dc0 03 ca 15 2e 49 6e 69 74 5f 54 72 6b 5f 53 61 6d |....Init_Trk_Sam| 00000dd0 70 6c 65 73 0d 03 d4 14 42 4c 20 20 20 20 53 65 |ples....BL Se| 00000de0 61 72 63 68 5f 54 46 46 0d 03 de 12 53 55 42 20 |arch_TFF....SUB | 00000df0 20 20 52 35 2c 52 30 2c 23 38 0d 03 e8 14 53 54 | R5,R0,#8....ST| 00000e00 52 20 20 20 52 35 2c 5b 52 31 5d 2c 23 34 0d 03 |R R5,[R1],#4..| 00000e10 f2 12 41 44 44 20 20 20 52 30 2c 52 30 2c 52 33 |..ADD R0,R0,R3| 00000e20 0d 03 fc 12 53 55 42 53 20 20 52 37 2c 52 37 2c |....SUBS R7,R7,| 00000e30 23 31 0d 04 06 1a 42 47 54 20 20 20 49 6e 69 74 |#1....BGT Init| 00000e40 5f 54 72 6b 5f 53 61 6d 70 6c 65 73 0d 04 10 10 |_Trk_Samples....| 00000e50 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 04 1a 17 |MOV R0,R10....| 00000e60 4c 44 52 20 20 20 52 34 2c 4d 56 4f 58 5f 43 68 |LDR R4,MVOX_Ch| 00000e70 75 6e 6b 0d 04 24 14 42 4c 20 20 20 20 53 65 61 |unk..$.BL Sea| 00000e80 72 63 68 5f 54 46 46 0d 04 2e 33 4c 44 52 20 20 |rch_TFF...3LDR | 00000e90 20 52 31 32 2c 5b 52 30 5d 20 20 20 20 20 20 20 | R12,[R0] | 00000ea0 20 20 20 20 20 3b 20 52 31 32 20 3d 20 56 6f 69 | ; R12 = Voi| 00000eb0 63 65 73 20 4e 75 6d 62 65 72 0d 04 38 18 53 54 |ces Number..8.ST| 00000ec0 52 20 20 20 52 31 32 2c 54 72 6b 5f 56 6f 69 63 |R R12,Trk_Voic| 00000ed0 65 73 0d 04 42 10 4d 4f 56 20 20 20 52 30 2c 52 |es..B.MOV R0,R| 00000ee0 31 30 0d 04 4c 17 4c 44 52 20 20 20 52 34 2c 53 |10..L.LDR R4,S| 00000ef0 54 45 52 5f 43 68 75 6e 6b 0d 04 56 14 42 4c 20 |TER_Chunk..V.BL | 00000f00 20 20 20 53 65 61 72 63 68 5f 54 46 46 0d 04 60 | Search_TFF..`| 00000f10 3c 4d 4f 56 20 20 20 52 31 31 2c 52 30 20 20 20 |<MOV R11,R0 | 00000f20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 31 | ; R11| 00000f30 20 3d 3e 20 53 74 65 72 65 6f 20 50 6f 73 69 74 | => Stereo Posit| 00000f40 69 6f 6e 73 20 4c 69 73 74 0d 04 6a 43 42 4c 20 |ions List..jCBL | 00000f50 20 20 20 49 6e 69 74 5f 53 6f 75 6e 64 5f 53 79 | Init_Sound_Sy| 00000f60 73 74 65 6d 20 20 20 3b 20 4a 75 6d 70 20 54 6f |stem ; Jump To| 00000f70 20 53 6f 75 6e 64 20 53 79 73 74 65 6d 20 49 6e | Sound System In| 00000f80 69 74 69 61 6c 69 73 61 74 69 6f 6e 0d 04 74 13 |itialisation..t.| 00000f90 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d |LDMFD R13!,{PC}.| 00000fa0 04 7e 04 0d 04 88 1b 2e 54 49 4e 46 5f 43 68 75 |.~......TINF_Chu| 00000fb0 6e 6b 3a 45 51 55 53 20 22 54 49 4e 46 22 0d 04 |nk:EQUS "TINF"..| 00000fc0 92 1b 2e 4d 56 4f 58 5f 43 68 75 6e 6b 3a 45 51 |...MVOX_Chunk:EQ| 00000fd0 55 53 20 22 4d 56 4f 58 22 0d 04 9c 1b 2e 53 54 |US "MVOX".....ST| 00000fe0 45 52 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 53 |ER_Chunk:EQUS "S| 00000ff0 54 45 52 22 0d 04 a6 1b 2e 4d 4c 45 4e 5f 43 68 |TER".....MLEN_Ch| 00001000 75 6e 6b 3a 45 51 55 53 20 22 4d 4c 45 4e 22 0d |unk:EQUS "MLEN".| 00001010 04 b0 1b 2e 50 4c 45 4e 5f 43 68 75 6e 6b 3a 45 |....PLEN_Chunk:E| 00001020 51 55 53 20 22 50 4c 45 4e 22 0d 04 ba 1b 2e 53 |QUS "PLEN".....S| 00001030 45 51 55 5f 43 68 75 6e 6b 3a 45 51 55 53 20 22 |EQU_Chunk:EQUS "| 00001040 53 45 51 55 22 0d 04 c4 1b 2e 50 4e 55 4d 5f 43 |SEQU".....PNUM_C| 00001050 68 75 6e 6b 3a 45 51 55 53 20 22 50 4e 55 4d 22 |hunk:EQUS "PNUM"| 00001060 0d 04 ce 1b 2e 50 41 54 54 5f 43 68 75 6e 6b 3a |.....PATT_Chunk:| 00001070 45 51 55 53 20 22 50 41 54 54 22 0d 04 d8 1b 2e |EQUS "PATT".....| 00001080 53 41 4d 50 5f 43 68 75 6e 6b 3a 45 51 55 53 20 |SAMP_Chunk:EQUS | 00001090 22 53 41 4d 50 22 0d 04 e2 04 0d 04 ec 3d 3b 20 |"SAMP".......=; | 000010a0 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 000010b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000010d0 2d 2d 2d 2d 2d 2d 2a 0d 04 f6 37 3b 20 2a 20 20 |------*...7; * | 000010e0 20 20 20 20 20 20 20 20 20 20 20 d4 20 42 55 46 | . BUF| 000010f0 46 45 52 20 c8 90 20 52 4f 55 54 49 4e 45 53 20 |FER .. ROUTINES | 00001100 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 05 | *..| 00001110 00 3d 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.=; *-----------| 00001120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 05 0a 3d 3b |----------*...=;| 00001150 20 2a 20 20 20 20 52 39 20 3d 3e 20 54 72 61 63 | * R9 => Trac| 00001160 6b 65 72 20 49 6e 66 6f 73 20 42 6c 6f 63 6b 20 |ker Infos Block | 00001170 28 33 32 20 42 79 74 65 20 70 65 72 20 63 68 61 |(32 Byte per cha| 00001180 6e 6e 65 6c 29 20 20 2a 0d 05 14 3d 3b 20 2a 20 |nnel) *...=; * | 00001190 20 20 20 20 5b 30 30 2d 30 33 5d 20 28 20 52 30 | [00-03] ( R0| 000011a0 20 29 20 50 68 61 73 65 20 41 63 63 75 6d 75 6c | ) Phase Accumul| 000011b0 61 74 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 |ator | 000011c0 20 20 20 20 2a 0d 05 1e 3d 3b 20 2a 20 20 20 20 | *...=; * | 000011d0 20 5b 30 34 2d 30 37 5d 20 28 20 52 31 20 29 20 | [04-07] ( R1 ) | 000011e0 50 68 61 73 65 20 49 6e 63 72 65 6d 65 6e 74 20 |Phase Increment | 000011f0 28 43 66 2e 20 46 72 65 71 75 65 6e 63 79 29 20 |(Cf. Frequency) | 00001200 20 2a 0d 05 28 3d 3b 20 2a 20 20 20 20 20 5b 30 | *..(=; * [0| 00001210 38 2d 31 31 5d 20 28 20 52 32 20 29 20 52 65 70 |8-11] ( R2 ) Rep| 00001220 65 61 74 20 4f 66 66 73 65 74 20 20 20 20 20 20 |eat Offset | 00001230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d | *.| 00001240 05 32 3d 3b 20 2a 20 20 20 20 20 5b 31 32 2d 31 |.2=; * [12-1| 00001250 35 5d 20 28 20 52 33 20 29 20 53 61 6d 70 6c 65 |5] ( R3 ) Sample| 00001260 20 4c 65 6e 67 74 68 20 28 6f 72 20 52 65 70 65 | Length (or Repe| 00001270 61 74 20 4c 65 6e 67 74 68 29 20 2a 0d 05 3c 3d |at Length) *..<=| 00001280 3b 20 2a 20 20 20 20 20 5b 31 36 2d 31 39 5d 20 |; * [16-19] | 00001290 28 20 52 34 20 29 20 53 61 6d 70 6c 65 20 41 64 |( R4 ) Sample Ad| 000012a0 64 72 65 73 73 20 20 20 20 20 20 20 20 20 20 20 |dress | 000012b0 20 20 20 20 20 20 20 20 2a 0d 05 46 3d 3b 20 2a | *..F=; *| 000012c0 20 20 20 20 20 5b 32 30 2d 32 33 5d 20 28 20 52 | [20-23] ( R| 000012d0 35 20 29 20 53 61 6d 70 6c 65 20 56 6f 6c 75 6d |5 ) Sample Volum| 000012e0 65 20 28 32 35 35 2d 56 6f 6c 75 6d 65 29 20 20 |e (255-Volume) | 000012f0 20 20 20 20 20 2a 0d 05 50 3d 3b 20 2a 20 20 20 | *..P=; * | 00001300 20 20 5b 32 34 2d 32 37 5d 20 28 20 52 36 20 29 | [24-27] ( R6 )| 00001310 20 46 69 6c 6c 20 53 74 61 74 75 73 20 28 30 3d | Fill Status (0=| 00001320 5a 65 72 6f 73 20 31 3d 53 61 6d 70 6c 65 73 29 |Zeros 1=Samples)| 00001330 20 20 2a 0d 05 5a 3d 3b 20 2a 20 20 20 20 20 5b | *..Z=; * [| 00001340 2e 2e 2e 2e 2e 5d 20 28 2e 2e 2e 2e 29 20 4f 74 |.....] (....) Ot| 00001350 68 65 72 73 20 69 6e 66 6f 73 20 66 6f 72 20 65 |hers infos for e| 00001360 66 66 65 63 74 73 20 20 20 20 20 20 20 20 20 2a |ffects *| 00001370 0d 05 64 3d 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d |..d=; *---------| 00001380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000013a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 05 6e |------------*..n| 000013b0 3d 3b 20 2a 20 20 52 31 30 20 3d 20 44 4d 41 20 |=; * R10 = DMA | 000013c0 42 75 66 66 65 72 20 6c 69 6d 69 74 73 20 28 2b |Buffer limits (+| 000013d0 31 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |1) | 000013e0 20 20 20 20 20 20 20 20 20 2a 0d 05 78 3d 3b 20 | *..x=; | 000013f0 2a 20 20 52 31 31 20 3d 20 44 4d 41 20 42 75 66 |* R11 = DMA Buf| 00001400 66 65 72 20 49 6e 74 65 72 6c 65 61 76 65 20 49 |fer Interleave I| 00001410 6e 63 72 65 6d 65 6e 74 20 28 31 2d 38 29 20 20 |ncrement (1-8) | 00001420 20 20 20 20 20 20 2a 0d 05 82 3d 3b 20 2a 20 20 | *...=; * | 00001430 52 31 32 20 3d 20 44 4d 41 20 42 75 66 66 65 72 |R12 = DMA Buffer| 00001440 20 62 61 73 65 20 70 6f 69 6e 74 65 72 20 28 2b | base pointer (+| 00001450 52 31 31 29 20 20 20 20 20 20 20 20 20 20 20 20 |R11) | 00001460 20 20 20 2a 0d 05 8c 3d 3b 20 2a 2d 2d 2d 2d 2d | *...=; *-----| 00001470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000014a0 2a 0d 05 96 04 0d 05 a0 16 2e 46 69 6c 6c 5f 53 |*.........Fill_S| 000014b0 6f 75 6e 64 5f 42 75 66 66 65 72 0d 05 aa 1f 41 |ound_Buffer....A| 000014c0 44 52 20 20 20 52 39 2c 56 6f 69 63 65 73 5f 49 |DR R9,Voices_I| 000014d0 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 05 b4 18 41 44 |nfos_Block....AD| 000014e0 44 20 20 20 52 39 2c 52 39 2c 52 37 2c 4c 53 4c |D R9,R9,R7,LSL| 000014f0 23 35 0d 05 be 14 4c 44 4d 49 41 20 52 39 2c 7b |#5....LDMIA R9,{| 00001500 52 30 2d 52 36 7d 0d 05 c8 04 0d 05 d2 0f 43 4d |R0-R6}........CM| 00001510 50 20 20 20 52 36 2c 23 30 0d 05 dc 14 42 45 51 |P R6,#0....BEQ| 00001520 20 20 20 43 6c 65 61 72 5f 46 69 6c 6c 0d 05 e6 | Clear_Fill...| 00001530 04 0d 05 f0 19 53 55 42 20 20 20 52 38 2c 52 33 |.....SUB R8,R3| 00001540 2c 52 30 2c 4c 53 52 23 31 36 0d 05 fa 18 53 55 |,R0,LSR#16....SU| 00001550 42 20 20 20 52 38 2c 52 38 2c 52 31 2c 4c 53 52 |B R8,R8,R1,LSR| 00001560 23 38 0d 06 04 11 43 4d 50 20 20 20 52 38 2c 23 |#8....CMP R8,#| 00001570 32 30 38 0d 06 0e 13 42 47 54 20 20 20 46 75 6c |208....BGT Ful| 00001580 6c 5f 46 69 6c 6c 0d 06 18 04 0d 06 22 0e 2e 46 |l_Fill......"..F| 00001590 69 6c 6c 5f 4c 6f 6f 70 0d 06 2c 05 5d 0d 06 36 |ill_Loop..,.]..6| 000015a0 12 e3 20 50 6c 6f 70 25 3d 31 20 b8 20 31 36 0d |.. Plop%=1 . 16.| 000015b0 06 40 05 5b 0d 06 4a 0d 4f 50 54 20 50 61 73 73 |.@.[..J.OPT Pass| 000015c0 25 0d 06 54 1b 4c 44 52 42 20 20 52 38 2c 5b 52 |%..T.LDRB R8,[R| 000015d0 34 2c 52 30 2c 4c 53 52 23 31 36 5d 0d 06 5e 12 |4,R0,LSR#16]..^.| 000015e0 53 55 42 53 20 20 52 38 2c 52 38 2c 52 35 0d 06 |SUBS R8,R8,R5..| 000015f0 68 0f 4d 4f 56 4d 49 20 52 38 2c 23 30 0d 06 72 |h.MOVMI R8,#0..r| 00001600 16 53 54 52 42 20 20 52 38 2c 5b 52 31 32 5d 2c |.STRB R8,[R12],| 00001610 52 31 31 0d 06 7c 12 41 44 44 20 20 20 52 30 2c |R11..|.ADD R0,| 00001620 52 30 2c 52 31 0d 06 86 05 5d 0d 06 90 05 ed 0d |R0,R1....]......| 00001630 06 9a 05 5b 0d 06 a4 0f 4f 50 54 20 20 20 50 61 |...[....OPT Pa| 00001640 73 73 25 0d 06 ae 31 43 4d 50 20 20 20 52 33 2c |ss%...1CMP R3,| 00001650 52 30 2c 4c 53 52 23 31 36 20 20 20 20 20 20 20 |R0,LSR#16 | 00001660 20 20 20 3b 20 45 6e 64 20 6f 66 20 73 61 6d 70 | ; End of samp| 00001670 6c 65 20 3f 0d 06 b8 1a 42 47 45 20 20 20 43 68 |le ?....BGE Ch| 00001680 65 63 6b 5f 42 75 66 66 65 72 5f 45 6e 64 0d 06 |eck_Buffer_End..| 00001690 c2 39 4d 4f 56 53 20 20 52 30 2c 52 32 2c 4c 53 |.9MOVS R0,R2,LS| 000016a0 4c 23 31 36 20 20 20 20 20 20 20 20 20 20 3b 20 |L#16 ; | 000016b0 59 65 73 20 3d 3e 20 52 30 3d 52 65 70 65 61 74 |Yes => R0=Repeat| 000016c0 20 4f 66 66 73 65 74 0d 06 cc 4a 42 45 51 20 20 | Offset...JBEQ | 000016d0 20 43 6c 65 61 72 5f 46 69 6c 6c 20 20 20 20 20 | Clear_Fill | 000016e0 20 20 20 20 20 20 20 3b 20 49 66 20 6e 6f 20 72 | ; If no r| 000016f0 65 70 65 61 74 20 74 68 65 6e 20 66 69 6c 6c 20 |epeat then fill | 00001700 62 75 66 66 65 72 20 77 69 74 68 20 7a 65 72 6f |buffer with zero| 00001710 73 0d 06 d6 15 2e 43 68 65 63 6b 5f 42 75 66 66 |s.....Check_Buff| 00001720 65 72 5f 45 6e 64 0d 06 e0 11 43 4d 50 20 20 20 |er_End....CMP | 00001730 52 31 32 2c 52 31 30 0d 06 ea 13 42 4c 54 20 20 |R12,R10....BLT | 00001740 20 46 69 6c 6c 5f 4c 6f 6f 70 0d 06 f4 11 53 54 | Fill_Loop....ST| 00001750 52 20 20 20 52 30 2c 5b 52 39 5d 0d 06 fe 17 4d |R R0,[R9]....M| 00001760 4f 56 20 20 20 52 30 2c 23 25 30 30 30 30 31 30 |OV R0,#%000010| 00001770 30 30 0d 07 08 13 4c 44 4d 46 44 20 52 31 33 21 |00....LDMFD R13!| 00001780 2c 7b 50 43 7d 0d 07 12 04 0d 07 1c 0f 2e 43 6c |,{PC}.........Cl| 00001790 65 61 72 5f 46 69 6c 6c 0d 07 26 0f 4d 4f 56 20 |ear_Fill..&.MOV | 000017a0 20 20 52 35 2c 23 30 0d 07 30 15 53 54 52 20 20 | R5,#0..0.STR | 000017b0 20 52 35 2c 5b 52 39 2c 23 32 34 5d 0d 07 3a 14 | R5,[R9,#24]..:.| 000017c0 2e 43 6c 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f 70 |.Clear_Fill_Loop| 000017d0 0d 07 44 16 53 54 52 42 20 20 52 35 2c 5b 52 31 |..D.STRB R5,[R1| 000017e0 32 5d 2c 52 31 31 0d 07 4e 11 43 4d 50 20 20 20 |2],R11..N.CMP | 000017f0 52 31 32 2c 52 31 30 0d 07 58 19 42 4c 54 20 20 |R12,R10..X.BLT | 00001800 20 43 6c 65 61 72 5f 46 69 6c 6c 5f 4c 6f 6f 70 | Clear_Fill_Loop| 00001810 0d 07 62 17 4d 4f 56 20 20 20 52 30 2c 23 25 30 |..b.MOV R0,#%0| 00001820 30 30 30 31 30 30 30 0d 07 6c 13 4c 44 4d 46 44 |0001000..l.LDMFD| 00001830 20 52 31 33 21 2c 7b 50 43 7d 0d 07 76 04 0d 07 | R13!,{PC}..v...| 00001840 80 17 2e 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f |...Voices_Infos_| 00001850 42 6c 6f 63 6b 0d 07 8a 05 5d 0d 07 94 14 e3 20 |Block....]..... | 00001860 42 75 66 42 6c 6b 25 3d 31 20 b8 20 36 34 0d 07 |BufBlk%=1 . 64..| 00001870 9e 0e 5b 4f 50 54 20 50 61 73 73 25 0d 07 a8 0a |..[OPT Pass%....| 00001880 45 51 55 44 20 30 0d 07 b2 05 5d 0d 07 bc 05 ed |EQUD 0....].....| 00001890 0d 07 c6 0e 5b 4f 50 54 20 50 61 73 73 25 0d 07 |....[OPT Pass%..| 000018a0 d0 04 0d 07 da 0d 2e 54 72 6b 5f 42 61 73 65 0d |.......Trk_Base.| 000018b0 07 e4 31 45 51 55 44 20 20 30 20 20 20 20 20 20 |..1EQUD 0 | 000018c0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4d 75 | ; Mu| 000018d0 73 69 63 20 42 61 73 65 20 41 64 64 72 65 73 73 |sic Base Address| 000018e0 0d 07 ee 0e 2e 54 72 6b 5f 49 6e 66 6f 73 0d 07 |.....Trk_Infos..| 000018f0 f8 3d 45 51 55 44 20 20 30 20 20 20 20 20 20 20 |.=EQUD 0 | 00001900 20 20 20 20 20 20 20 20 20 20 20 3b 20 50 6f 73 | ; Pos| 00001910 69 74 69 6f 6e 20 43 6f 75 6e 74 65 72 20 28 49 |ition Counter (I| 00001920 6e 20 53 65 71 75 65 6e 63 65 29 0d 08 02 2b 45 |n Sequence)...+E| 00001930 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 20 |QUD 0 | 00001940 20 20 20 20 20 20 20 20 3b 20 4d 75 73 69 63 20 | ; Music | 00001950 4c 65 6e 67 74 68 0d 08 0c 3c 45 51 55 44 20 20 |Length...<EQUD | 00001960 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00001970 20 20 20 3b 20 50 6f 73 69 74 69 6f 6e 20 43 6f | ; Position Co| 00001980 75 6e 74 65 72 20 28 49 6e 20 50 61 74 74 65 72 |unter (In Patter| 00001990 6e 29 0d 08 16 3a 45 51 55 44 20 20 30 20 20 20 |n)...:EQUD 0 | 000019a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 000019b0 20 3d 3e 20 6f 6e 20 50 61 74 74 65 72 6e 73 20 | => on Patterns | 000019c0 4c 65 6e 67 74 68 20 54 61 62 6c 65 0d 08 20 3a |Length Table.. :| 000019d0 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 |EQUD 0 | 000019e0 20 20 20 20 20 20 20 20 20 3b 20 3d 3e 20 6f 6e | ; => on| 000019f0 20 53 65 71 75 65 6e 63 65 20 42 61 73 65 20 41 | Sequence Base A| 00001a00 64 64 72 65 73 73 0d 08 2a 47 45 51 55 44 20 20 |ddress..*GEQUD | 00001a10 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00001a20 20 20 20 3b 20 3d 3e 20 6f 6e 20 50 61 74 74 65 | ; => on Patte| 00001a30 72 6e 73 20 54 61 62 6c 65 20 28 75 70 20 74 6f |rns Table (up to| 00001a40 20 36 34 20 70 61 74 74 65 72 6e 73 29 0d 08 34 | 64 patterns)..4| 00001a50 0f 2e 54 72 6b 5f 56 6f 69 63 65 73 0d 08 3e 2c |..Trk_Voices..>,| 00001a60 45 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 |EQUD 0 | 00001a70 20 20 20 20 20 20 20 20 20 3b 20 56 6f 69 63 65 | ; Voice| 00001a80 73 20 4e 75 6d 62 65 72 0d 08 48 10 2e 54 72 6b |s Number..H..Trk| 00001a90 5f 43 6f 75 6e 74 65 72 0d 08 52 0a 45 51 55 44 |_Counter..R.EQUD| 00001aa0 20 35 0d 08 5c 0e 2e 54 72 6b 5f 53 70 65 65 64 | 5..\..Trk_Speed| 00001ab0 0d 08 66 0a 45 51 55 44 20 36 0d 08 70 10 2e 54 |..f.EQUD 6..p..T| 00001ac0 72 6b 5f 53 61 6d 70 6c 65 73 0d 08 7a 05 5d 0d |rk_Samples..z.].| 00001ad0 08 84 0c 50 25 2b 3d 33 36 2a 34 0d 08 8e 0e 5b |...P%+=36*4....[| 00001ae0 4f 50 54 20 50 61 73 73 25 0d 08 98 10 2e 54 72 |OPT Pass%.....Tr| 00001af0 6b 5f 50 65 72 69 6f 64 73 0d 08 a2 1b 45 51 55 |k_Periods....EQU| 00001b00 44 30 3a 45 51 55 44 30 3a 45 51 55 44 30 3a 45 |D0:EQUD0:EQUD0:E| 00001b10 51 55 44 30 0d 08 ac 1b 45 51 55 44 30 3a 45 51 |QUD0....EQUD0:EQ| 00001b20 55 44 30 3a 45 51 55 44 30 3a 45 51 55 44 30 0d |UD0:EQUD0:EQUD0.| 00001b30 08 b6 15 2e 54 72 6b 5f 50 61 74 74 65 72 6e 5f |....Trk_Pattern_| 00001b40 4c 69 6e 65 0d 08 c0 1b 45 51 55 44 30 3a 45 51 |Line....EQUD0:EQ| 00001b50 55 44 30 3a 45 51 55 44 30 3a 45 51 55 44 30 0d |UD0:EQUD0:EQUD0.| 00001b60 08 ca 1b 45 51 55 44 30 3a 45 51 55 44 30 3a 45 |...EQUD0:EQUD0:E| 00001b70 51 55 44 30 3a 45 51 55 44 30 0d 08 d4 14 2e 47 |QUD0:EQUD0.....G| 00001b80 65 74 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 08 |et_Infos_Block..| 00001b90 de 1e 41 44 52 20 20 52 37 2c 56 6f 69 63 65 73 |..ADR R7,Voices| 00001ba0 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 08 e8 0f |_Infos_Block....| 00001bb0 4d 4f 56 20 20 50 43 2c 52 31 34 0d 08 f2 04 0d |MOV PC,R14.....| 00001bc0 08 fc 35 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..5; *----------| 00001bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001bf0 2d 2d 2d 2a 0d 09 06 35 3b 20 2a 20 20 20 20 49 |---*...5; * I| 00001c00 6e 63 72 65 6d 65 6e 74 2f 43 68 65 63 6b 20 43 |ncrement/Check C| 00001c10 6f 75 6e 74 65 72 20 28 54 65 6d 70 6f 29 20 56 |ounter (Tempo) V| 00001c20 61 6c 75 65 20 20 20 20 2a 0d 09 10 35 3b 20 2a |alue *...5; *| 00001c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001c50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 09 |-------------*..| 00001c60 1a 04 0d 09 24 13 2e 54 72 6b 5f 50 6c 61 79 5f |....$..Trk_Play_| 00001c70 4d 75 73 69 63 0d 09 2e 1b 53 54 4d 46 44 20 52 |Music....STMFD R| 00001c80 31 33 21 2c 7b 52 30 2d 52 31 32 2c 52 31 34 7d |13!,{R0-R12,R14}| 00001c90 0d 09 38 18 4c 44 52 20 20 20 52 30 2c 54 72 6b |..8.LDR R0,Trk| 00001ca0 5f 43 6f 75 6e 74 65 72 0d 09 42 16 4c 44 52 20 |_Counter..B.LDR | 00001cb0 20 20 52 31 2c 54 72 6b 5f 53 70 65 65 64 0d 09 | R1,Trk_Speed..| 00001cc0 4c 12 41 44 44 20 20 20 52 30 2c 52 30 2c 23 31 |L.ADD R0,R0,#1| 00001cd0 0d 09 56 0f 43 4d 50 20 20 20 52 30 2c 52 31 0d |..V.CMP R0,R1.| 00001ce0 09 60 0f 4d 4f 56 47 45 20 52 30 2c 23 30 0d 09 |.`.MOVGE R0,#0..| 00001cf0 6a 18 53 54 52 20 20 20 52 30 2c 54 72 6b 5f 43 |j.STR R0,Trk_C| 00001d00 6f 75 6e 74 65 72 0d 09 74 14 42 45 51 20 20 20 |ounter..t.BEQ | 00001d10 54 72 6b 5f 50 6c 61 79 65 72 0d 09 7e 15 42 4e |Trk_Player..~.BN| 00001d20 45 20 20 20 54 72 6b 5f 45 66 66 65 63 74 73 0d |E Trk_Effects.| 00001d30 09 88 04 0d 09 92 32 3b 20 2a 2d 2d 2d 2d 2d 2d |......2; *------| 00001d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001d60 2d 2d 2d 2d 2a 0d 09 9c 32 3b 20 2a 20 20 20 20 |----*...2; * | 00001d70 50 6c 61 79 20 61 20 6e 65 77 20 6c 69 6e 65 20 |Play a new line | 00001d80 6f 66 20 63 75 72 72 65 6e 74 20 70 61 74 74 65 |of current patte| 00001d90 72 6e 20 20 20 20 2a 0d 09 a6 32 3b 20 2a 2d 2d |rn *...2; *--| 00001da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001dc0 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 09 b0 04 0d 09 ba |--------*.......| 00001dd0 0f 2e 54 72 6b 5f 50 6c 61 79 65 72 0d 09 c4 16 |..Trk_Player....| 00001de0 41 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 |ADR R0,Trk_Inf| 00001df0 6f 73 0d 09 ce 18 4c 44 4d 49 41 20 52 30 2c 7b |os....LDMIA R0,{| 00001e00 52 31 2d 52 36 2c 52 31 31 7d 0d 09 d8 36 4c 44 |R1-R6,R11}...6LD| 00001e10 52 42 20 20 52 37 2c 5b 52 35 2c 52 31 5d 20 20 |RB R7,[R5,R1] | 00001e20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 37 20 | ; R7 | 00001e30 3d 20 50 61 74 74 65 72 6e 20 6e 75 6d 62 65 72 |= Pattern number| 00001e40 0d 09 e2 39 4c 44 52 20 20 20 52 31 32 2c 5b 52 |...9LDR R12,[R| 00001e50 36 2c 52 37 2c 4c 53 4c 23 32 5d 20 20 20 20 20 |6,R7,LSL#2] | 00001e60 20 3b 20 52 31 32 20 3d 3e 20 43 75 72 72 65 6e | ; R12 => Curren| 00001e70 74 20 70 61 74 74 65 72 6e 0d 09 ec 42 4d 4f 56 |t pattern...BMOV| 00001e80 20 20 20 52 31 30 2c 52 31 31 2c 4c 53 4c 23 32 | R10,R11,LSL#2| 00001e90 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 30 3d | ; R10=| 00001ea0 52 31 31 2a 34 20 3d 20 50 61 74 74 65 72 6e 20 |R11*4 = Pattern | 00001eb0 4c 69 6e 65 20 4c 65 6e 67 74 68 0d 09 f6 3e 4d |Line Length...>M| 00001ec0 4c 41 20 20 20 52 31 32 2c 52 33 2c 52 31 30 2c |LA R12,R3,R10,| 00001ed0 52 31 32 20 20 20 20 20 20 20 20 20 3b 20 52 31 |R12 ; R1| 00001ee0 32 20 3d 3e 20 43 75 72 72 65 6e 74 20 70 61 74 |2 => Current pat| 00001ef0 74 65 72 6e 20 6c 69 6e 65 0d 0a 00 3e 4c 44 52 |tern line...>LDR| 00001f00 42 20 20 52 37 2c 5b 52 34 2c 52 37 5d 20 20 20 |B R7,[R4,R7] | 00001f10 20 20 20 20 20 20 20 20 20 20 3b 20 52 37 20 3d | ; R7 =| 00001f20 20 50 61 74 74 65 72 6e 20 4c 65 6e 67 74 68 20 | Pattern Length | 00001f30 28 30 31 2d 36 34 29 0d 0a 0a 12 41 44 44 20 20 |(01-64)....ADD | 00001f40 20 52 33 2c 52 33 2c 23 31 0d 0a 14 33 43 4d 50 | R3,R3,#1...3CMP| 00001f50 20 20 20 52 33 2c 52 37 20 20 20 20 20 20 20 20 | R3,R7 | 00001f60 20 20 20 20 20 20 20 20 20 20 3b 20 45 6e 64 20 | ; End | 00001f70 6f 66 20 50 61 74 74 65 72 6e 20 3f 0d 0a 1e 18 |of Pattern ?....| 00001f80 42 4c 54 20 20 20 57 72 69 74 65 5f 50 6f 73 69 |BLT Write_Posi| 00001f90 74 69 6f 6e 0d 0a 28 0f 4d 4f 56 20 20 20 52 33 |tion..(.MOV R3| 00001fa0 2c 23 30 0d 0a 32 42 41 44 44 20 20 20 52 31 2c |,#0..2BADD R1,| 00001fb0 52 31 2c 23 31 20 20 20 20 20 20 20 20 20 20 20 |R1,#1 | 00001fc0 20 20 20 20 3b 20 4e 65 78 74 20 70 6f 73 69 74 | ; Next posit| 00001fd0 69 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 65 20 |ion in Sequence | 00001fe0 54 61 62 6c 65 0d 0a 3c 44 43 4d 50 20 20 20 52 |Table..<DCMP R| 00001ff0 31 2c 52 32 20 20 20 20 20 20 20 20 20 20 20 20 |1,R2 | 00002000 20 20 20 20 20 20 3b 20 4c 61 73 74 20 50 6f 73 | ; Last Pos| 00002010 69 74 69 6f 6e 20 69 6e 20 53 65 71 75 65 6e 63 |ition in Sequenc| 00002020 65 20 54 61 62 6c 65 20 3f 0d 0a 46 39 4d 4f 56 |e Table ?..F9MOV| 00002030 47 45 20 52 31 2c 23 30 20 20 20 20 20 20 20 20 |GE R1,#0 | 00002040 20 20 20 20 20 20 20 20 20 20 3b 20 49 66 20 59 | ; If Y| 00002050 65 73 2c 20 43 6c 65 61 72 20 43 6f 75 6e 74 65 |es, Clear Counte| 00002060 72 2e 0d 0a 50 13 2e 57 72 69 74 65 5f 50 6f 73 |r...P..Write_Pos| 00002070 69 74 69 6f 6e 0d 0a 5a 34 53 54 4d 49 41 20 52 |ition..Z4STMIA R| 00002080 30 2c 7b 52 31 2d 52 33 7d 20 20 20 20 20 20 20 |0,{R1-R3} | 00002090 20 20 20 20 20 20 3b 20 53 61 76 65 20 6e 65 77 | ; Save new| 000020a0 20 70 6f 73 69 74 69 6f 6e 0d 0a 64 04 0d 0a 6e | position..d...n| 000020b0 1d 41 44 52 20 20 20 52 32 2c 54 72 6b 5f 50 61 |.ADR R2,Trk_Pa| 000020c0 74 74 65 72 6e 5f 4c 69 6e 65 0d 0a 78 16 4c 44 |ttern_Line..x.LD| 000020d0 4d 49 41 20 52 31 32 2c 7b 52 34 2d 52 31 31 7d |MIA R12,{R4-R11}| 000020e0 0d 0a 82 15 53 54 4d 49 41 20 52 32 2c 7b 52 34 |....STMIA R2,{R4| 000020f0 2d 52 31 31 7d 0d 0a 8c 1f 41 44 52 20 20 20 52 |-R11}....ADR R| 00002100 37 2c 56 6f 69 63 65 73 5f 49 6e 66 6f 73 5f 42 |7,Voices_Infos_B| 00002110 6c 6f 63 6b 0d 0a 96 18 4c 44 52 20 20 20 52 31 |lock....LDR R1| 00002120 31 2c 54 72 6b 5f 56 6f 69 63 65 73 0d 0a a0 40 |1,Trk_Voices...@| 00002130 42 4c 20 20 20 20 47 65 74 5f 46 72 65 71 75 65 |BL Get_Freque| 00002140 6e 63 65 5f 54 61 62 6c 65 20 20 20 3b 20 52 65 |nce_Table ; Re| 00002150 74 75 72 6e 20 52 38 20 3d 3e 20 27 46 72 65 71 |turn R8 => 'Freq| 00002160 75 65 6e 63 65 27 20 54 61 62 6c 65 0d 0a aa 0f |uence' Table....| 00002170 4d 4f 56 20 20 20 52 39 2c 23 30 0d 0a b4 12 2e |MOV R9,#0.....| 00002180 54 72 6b 5f 56 6f 69 63 65 4c 6f 6f 70 0d 0a be |Trk_VoiceLoop...| 00002190 34 4c 44 52 20 20 20 52 35 2c 5b 52 31 32 5d 2c |4LDR R5,[R12],| 000021a0 23 34 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 |#4 ; R| 000021b0 35 3d 4e 6f 74 65 2b 49 6e 73 74 72 75 6d 65 6e |5=Note+Instrumen| 000021c0 74 0d 0a c8 16 80 20 20 20 52 32 2c 52 35 2c 23 |t..... R2,R5,#| 000021d0 26 46 46 30 30 30 30 0d 0a d2 40 4d 4f 56 20 20 |&FF0000...@MOV | 000021e0 20 52 32 2c 52 32 2c 4c 53 52 23 31 36 20 20 20 | R2,R2,LSR#16 | 000021f0 20 20 20 20 20 20 20 3b 20 52 32 3d 53 61 6d 70 | ; R2=Samp| 00002200 6c 65 20 6e 75 6d 62 65 72 20 28 30 31 2d 33 36 |le number (01-36| 00002210 29 3d 28 30 2d 5a 29 0d 0a dc 12 53 55 42 53 20 |)=(0-Z)....SUBS | 00002220 20 52 32 2c 52 32 2c 23 31 0d 0a e6 11 42 4c 54 | R2,R2,#1....BLT| 00002230 20 20 20 4e 65 78 74 4f 6e 65 0d 0a f0 3b 42 4c | NextOne...;BL| 00002240 20 20 20 20 47 65 74 5f 4e 65 77 5f 53 61 6d 70 | Get_New_Samp| 00002250 6c 65 20 20 20 20 20 20 20 20 3b 20 4e 6f 72 6d |le ; Norm| 00002260 61 6c 20 63 61 73 65 20 3d 20 4e 2d 4f 20 53 30 |al case = N-O S0| 00002270 30 30 2e 2e 2e 0d 0a fa 39 4d 4f 56 53 20 20 52 |00......9MOVS R| 00002280 34 2c 52 35 2c 4c 53 52 23 32 34 20 20 20 20 20 |4,R5,LSR#24 | 00002290 20 20 20 20 20 3b 20 52 34 3d 4e 6f 74 65 20 6e | ; R4=Note n| 000022a0 75 6d 62 65 72 20 20 28 30 31 2d 33 36 29 0d 0b |umber (01-36)..| 000022b0 04 37 42 4c 47 54 20 20 47 65 74 5f 4e 65 77 5f |.7BLGT Get_New_| 000022c0 4e 6f 74 65 20 20 20 20 20 20 20 20 20 20 3b 20 |Note ; | 000022d0 2e 2e 2e 20 47 65 74 20 53 61 6d 70 6c 65 20 26 |... Get Sample &| 000022e0 20 4e 6f 74 65 0d 0b 0e 0c 2e 4e 65 78 74 4f 6e | Note.....NextOn| 000022f0 65 0d 0b 18 16 42 4c 20 20 20 20 54 72 6b 5f 45 |e....BL Trk_E| 00002300 66 66 65 63 74 73 32 0d 0b 22 13 41 44 44 20 20 |ffects2..".ADD | 00002310 20 52 37 2c 52 37 2c 23 33 32 0d 0b 2c 12 41 44 | R7,R7,#32..,.AD| 00002320 44 20 20 20 52 39 2c 52 39 2c 23 31 0d 0b 36 10 |D R9,R9,#1..6.| 00002330 43 4d 50 20 20 20 52 39 2c 52 31 31 0d 0b 40 17 |CMP R9,R11..@.| 00002340 42 4c 54 20 20 20 54 72 6b 5f 56 6f 69 63 65 4c |BLT Trk_VoiceL| 00002350 6f 6f 70 0d 0b 4a 04 0d 0b 54 0e 2e 45 6e 64 4f |oop..J...T..EndO| 00002360 66 50 6c 61 79 0d 0b 5e 1a 4c 44 4d 46 44 20 52 |fPlay..^.LDMFD R| 00002370 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d |13!,{R0-R12,PC}.| 00002380 0b 68 04 0d 0b 72 11 2e 47 65 74 5f 4e 65 77 5f |.h...r..Get_New_| 00002390 4e 6f 74 65 0d 0b 7c 18 53 54 4d 46 44 20 52 31 |Note..|.STMFD R1| 000023a0 33 21 2c 7b 52 31 32 2c 52 31 34 7d 0d 0b 86 19 |3!,{R12,R14}....| 000023b0 42 4c 20 20 20 20 47 65 74 5f 50 65 72 69 6f 64 |BL Get_Period| 000023c0 73 5f 41 64 72 0d 0b 90 12 53 55 42 20 20 20 52 |s_Adr....SUB R| 000023d0 33 2c 52 34 2c 23 31 0d 0b 9a 1b 4c 44 52 20 20 |3,R4,#1....LDR | 000023e0 20 52 33 2c 5b 52 31 32 2c 52 33 2c 4c 53 4c 23 | R3,[R12,R3,LSL#| 000023f0 32 5d 0d 0b a4 40 53 54 52 20 20 20 52 33 2c 5b |2]...@STR R3,[| 00002400 52 37 2c 23 32 38 5d 20 20 20 20 20 20 20 20 20 |R7,#28] | 00002410 20 20 20 3b 20 53 61 76 65 20 70 65 72 69 6f 64 | ; Save period| 00002420 20 66 6f 72 20 70 6f 72 74 61 6d 65 6e 74 6f 2e | for portamento.| 00002430 2e 2e 0d 0b ae 18 41 44 52 20 20 20 52 31 2c 54 |......ADR R1,T| 00002440 72 6b 5f 50 65 72 69 6f 64 73 0d 0b b8 36 53 54 |rk_Periods...6ST| 00002450 52 20 20 20 52 33 2c 5b 52 31 2c 52 39 2c 4c 53 |R R3,[R1,R9,LS| 00002460 4c 23 32 5d 20 20 20 20 20 20 20 3b 20 2e 2e 2e |L#2] ; ...| 00002470 61 6e 64 20 66 6f 72 20 61 72 70 65 67 67 69 6f |and for arpeggio| 00002480 0d 0b c2 36 4c 44 52 20 20 20 52 33 2c 5b 52 38 |...6LDR R3,[R8| 00002490 2c 52 33 2c 4c 53 4c 23 32 5d 20 20 20 20 20 20 |,R3,LSL#2] | 000024a0 20 3b 20 47 65 74 20 70 68 61 73 65 20 69 6e 63 | ; Get phase inc| 000024b0 72 65 6d 65 6e 74 0d 0b cc 42 53 54 52 20 20 20 |rement...BSTR | 000024c0 52 33 2c 5b 52 37 2c 23 34 5d 20 20 20 20 20 20 |R3,[R7,#4] | 000024d0 20 20 20 20 20 20 20 3b 20 26 20 53 61 76 65 20 | ; & Save | 000024e0 69 74 20 69 6e 20 76 6f 69 63 65 73 20 69 6e 66 |it in voices inf| 000024f0 6f 73 20 62 6c 6f 63 6b 0d 0b d6 0f 4d 4f 56 20 |os block....MOV | 00002500 20 20 52 31 2c 23 30 0d 0b e0 3a 53 54 52 20 20 | R1,#0...:STR | 00002510 20 52 31 2c 5b 52 37 2c 23 30 5d 20 20 20 20 20 | R1,[R7,#0] | 00002520 20 20 20 20 20 20 20 20 3b 20 43 6c 65 61 72 20 | ; Clear | 00002530 70 68 61 73 65 20 61 63 63 75 6d 75 6c 61 74 6f |phase accumulato| 00002540 72 0d 0b ea 18 4c 44 4d 46 44 20 52 31 33 21 2c |r....LDMFD R13!,| 00002550 7b 52 31 32 2c 50 43 7d 5e 0d 0b f4 04 0d 0b fe |{R12,PC}^.......| 00002560 13 2e 47 65 74 5f 4e 65 77 5f 53 61 6d 70 6c 65 |..Get_New_Sample| 00002570 0d 0c 08 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b |....STMFD R13!,{| 00002580 52 34 2c 52 31 32 2c 52 31 34 7d 0d 0c 12 18 41 |R4,R12,R14}....A| 00002590 44 52 20 20 20 52 33 2c 54 72 6b 5f 53 61 6d 70 |DR R3,Trk_Samp| 000025a0 6c 65 73 0d 0c 1c 36 4c 44 52 20 20 20 52 33 2c |les...6LDR R3,| 000025b0 5b 52 33 2c 52 32 2c 4c 53 4c 23 32 5d 20 20 20 |[R3,R2,LSL#2] | 000025c0 20 20 20 20 3b 20 52 33 20 3d 3e 20 41 63 74 75 | ; R3 => Actu| 000025d0 61 6c 20 53 61 6d 70 6c 65 0d 0c 26 35 41 44 44 |al Sample..&5ADD| 000025e0 20 20 20 52 34 2c 52 33 2c 23 36 30 20 20 20 20 | R4,R3,#60 | 000025f0 20 20 20 20 20 20 20 20 20 20 3b 20 52 34 20 3d | ; R4 =| 00002600 3e 20 53 61 6d 70 6c 65 73 20 44 61 74 61 0d 0c |> Samples Data..| 00002610 30 15 53 54 52 20 20 20 52 34 2c 5b 52 37 2c 23 |0.STR R4,[R7,#| 00002620 31 36 5d 0d 0c 3a 0f 4d 4f 56 20 20 20 52 31 2c |16]..:.MOV R1,| 00002630 23 31 0d 0c 44 3d 53 54 52 20 20 20 52 31 2c 5b |#1..D=STR R1,[| 00002640 52 37 2c 23 32 34 5d 20 20 20 20 20 20 20 20 20 |R7,#24] | 00002650 20 20 20 3b 20 52 31 20 3d 20 46 6c 61 67 20 46 | ; R1 = Flag F| 00002660 69 6c 6c 20 57 69 74 68 20 53 61 6d 70 6c 65 0d |ill With Sample.| 00002670 0c 4e 04 0d 0c 58 10 3b 20 53 65 74 20 56 6f 6c |.N...X.; Set Vol| 00002680 75 6d 65 0d 0c 62 04 0d 0c 6c 35 4c 44 52 20 20 |ume..b...l5LDR | 00002690 20 52 31 2c 5b 52 33 2c 23 31 36 2b 32 38 5d 20 | R1,[R3,#16+28] | 000026a0 20 20 20 20 20 20 20 20 3b 20 52 31 20 3d 20 53 | ; R1 = S| 000026b0 61 6d 70 6c 65 20 56 6f 6c 75 6d 65 0d 0c 76 13 |ample Volume..v.| 000026c0 53 55 42 53 20 20 52 34 2c 52 31 2c 23 36 38 0d |SUBS R4,R1,#68.| 000026d0 0c 80 0f 4d 4f 56 4c 54 20 52 34 2c 23 30 0d 0c |...MOVLT R4,#0..| 000026e0 8a 15 4d 4f 56 20 20 20 52 34 2c 52 34 2c 4c 53 |..MOV R4,R4,LS| 000026f0 52 23 32 0d 0c 94 14 52 53 42 20 20 20 52 31 2c |R#2....RSB R1,| 00002700 52 31 2c 23 32 35 35 0d 0c 9e 15 53 54 52 20 20 |R1,#255....STR | 00002710 20 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0c a8 04 | R1,[R7,#20]....| 00002720 0d 0c b2 18 3b 20 53 65 74 20 56 6f 6c 75 6d 65 |....; Set Volume| 00002730 20 43 6f 6d 6d 61 6e 64 0d 0c bc 04 0d 0c c6 14 | Command........| 00002740 80 20 20 20 52 34 2c 52 35 2c 23 26 46 46 30 30 |. R4,R5,#&FF00| 00002750 0d 0c d0 13 43 4d 50 20 20 20 52 34 2c 23 26 31 |....CMP R4,#&1| 00002760 46 30 30 0d 0c da 12 80 45 51 20 52 31 2c 52 35 |F00.....EQ R1,R5| 00002770 2c 23 26 46 46 0d 0c e4 14 52 53 42 45 51 20 52 |,#&FF....RSBEQ R| 00002780 31 2c 52 31 2c 23 26 46 46 0d 0c ee 15 53 54 52 |1,R1,#&FF....STR| 00002790 45 51 20 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0c |EQ R1,[R7,#20]..| 000027a0 f8 04 0d 0d 02 1e 3b 20 47 65 74 20 26 20 53 61 |......; Get & Sa| 000027b0 76 65 20 73 61 6d 70 6c 65 73 20 69 6e 66 6f 73 |ve samples infos| 000027c0 0d 0d 0c 04 0d 0d 16 38 4c 44 52 20 20 20 52 31 |.......8LDR R1| 000027d0 2c 5b 52 33 2c 23 34 30 2b 32 38 5d 20 20 20 20 |,[R3,#40+28] | 000027e0 20 20 20 20 20 20 20 20 3b 20 52 31 20 3d 20 52 | ; R1 = R| 000027f0 65 70 65 61 74 20 4f 66 66 73 65 74 0d 0d 20 38 |epeat Offset.. 8| 00002800 4c 44 52 20 20 20 52 34 2c 5b 52 33 2c 23 35 32 |LDR R4,[R3,#52| 00002810 2b 32 38 5d 20 20 20 20 20 20 20 20 20 20 20 20 |+28] | 00002820 3b 20 52 34 20 3d 20 52 65 70 65 61 74 20 4c 65 |; R4 = Repeat Le| 00002830 6e 67 74 68 0d 0d 2a 0f 43 4d 50 20 20 20 52 34 |ngth..*.CMP R4| 00002840 2c 23 32 0d 0d 34 12 41 44 44 4e 45 20 52 34 2c |,#2..4.ADDNE R4,| 00002850 52 34 2c 52 31 0d 0d 3e 38 4c 44 52 45 51 20 52 |R4,R1..>8LDREQ R| 00002860 34 2c 5b 52 33 2c 23 32 38 2b 32 38 5d 20 20 20 |4,[R3,#28+28] | 00002870 20 20 20 20 20 20 20 20 20 3b 20 52 34 20 3d 20 | ; R4 = | 00002880 53 61 6d 70 6c 65 20 4c 65 6e 67 74 68 0d 0d 48 |Sample Length..H| 00002890 15 53 54 52 20 20 20 52 34 2c 5b 52 37 2c 23 31 |.STR R4,[R7,#1| 000028a0 32 5d 0d 0d 52 12 41 44 44 4e 45 20 52 31 2c 52 |2]..R.ADDNE R1,R| 000028b0 31 2c 23 31 0d 0d 5c 39 53 54 52 20 20 20 52 31 |1,#1..\9STR R1| 000028c0 2c 5b 52 37 2c 23 38 5d 20 20 20 20 20 20 20 20 |,[R7,#8] | 000028d0 20 20 20 20 20 20 20 20 3b 20 53 61 75 76 65 20 | ; Sauve | 000028e0 52 65 70 65 61 74 20 4f 66 66 73 65 74 0d 0d 66 |Repeat Offset..f| 000028f0 1b 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 34 2c |.LDMFD R13!,{R4,| 00002900 52 31 32 2c 50 43 7d 5e 0d 0d 70 04 0d 0d 7a 24 |R12,PC}^..p...z$| 00002910 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 00002920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00002930 0d 0d 84 24 3b 20 2a 20 20 20 20 20 20 45 66 66 |...$; * Eff| 00002940 65 63 74 73 20 43 68 65 63 6b 69 6e 67 20 23 31 |ects Checking #1| 00002950 20 20 20 2a 0d 0d 8e 24 3b 20 2a 2d 2d 2d 2d 2d | *...$; *-----| 00002960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00002970 2d 2d 2d 2d 2d 2d 2d 2a 0d 0d 98 24 3b 20 2a 20 |-------*...$; * | 00002980 20 27 45 27 20 20 3d 20 53 65 74 20 53 74 65 72 | 'E' = Set Ster| 00002990 65 6f 20 20 20 20 20 20 20 20 20 2a 0d 0d a2 24 |eo *...$| 000029a0 3b 20 2a 20 20 27 4a 27 20 20 3d 20 50 6f 73 69 |; * 'J' = Posi| 000029b0 74 69 6f 6e 20 4a 75 6d 70 20 20 20 20 20 20 2a |tion Jump *| 000029c0 0d 0d ac 24 3b 20 2a 20 20 27 56 27 20 20 3d 20 |...$; * 'V' = | 000029d0 53 65 74 20 56 6f 6c 75 6d 65 20 20 20 20 20 20 |Set Volume | 000029e0 20 20 20 2a 0d 0d b6 24 3b 20 2a 20 20 27 42 27 | *...$; * 'B'| 000029f0 20 20 3d 20 50 61 74 74 65 72 6e 20 42 72 65 61 | = Pattern Brea| 00002a00 6b 20 20 20 20 20 20 2a 0d 0d c0 24 3b 20 2a 20 |k *...$; * | 00002a10 20 27 53 27 20 20 3d 20 53 65 74 20 53 70 65 65 | 'S' = Set Spee| 00002a20 64 20 20 20 20 20 20 20 20 20 20 2a 0d 0d ca 24 |d *...$| 00002a30 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; *-------------| 00002a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00002a50 0d 0d d4 04 0d 0d de 11 2e 54 72 6b 5f 45 66 66 |.........Trk_Eff| 00002a60 65 63 74 73 32 0d 0d e8 14 80 20 20 20 52 34 2c |ects2..... R4,| 00002a70 52 35 2c 23 26 46 46 30 30 0d 0d f2 04 0d 0d fc |R5,#&FF00.......| 00002a80 16 3b 20 53 65 74 20 56 6f 6c 75 6d 65 20 28 27 |.; Set Volume ('| 00002a90 56 27 29 0d 0e 06 04 0d 0e 10 13 43 4d 50 20 20 |V')........CMP | 00002aa0 20 52 34 2c 23 26 31 46 30 30 0d 0e 1a 17 42 4e | R4,#&1F00....BN| 00002ab0 45 20 20 20 4e 6f 5f 53 65 74 5f 56 6f 6c 75 6d |E No_Set_Volum| 00002ac0 65 0d 0e 24 12 80 20 20 20 52 31 2c 52 35 2c 23 |e..$.. R1,R5,#| 00002ad0 26 46 46 0d 0e 2e 14 52 53 42 20 20 20 52 31 2c |&FF....RSB R1,| 00002ae0 52 31 2c 23 26 46 46 0d 0e 38 15 53 54 52 20 20 |R1,#&FF..8.STR | 00002af0 20 52 31 2c 5b 52 37 2c 23 32 30 5d 0d 0e 42 10 | R1,[R7,#20]..B.| 00002b00 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 0e 4c 12 |MOV PC,R14..L.| 00002b10 2e 4e 6f 5f 53 65 74 5f 56 6f 6c 75 6d 65 0d 0e |.No_Set_Volume..| 00002b20 56 04 0d 0e 60 16 3b 20 53 65 74 20 53 70 65 65 |V...`.; Set Spee| 00002b30 64 20 20 28 27 53 27 29 0d 0e 6a 04 0d 0e 74 13 |d ('S')..j...t.| 00002b40 43 4d 50 20 20 20 52 34 2c 23 26 31 43 30 30 0d |CMP R4,#&1C00.| 00002b50 0e 7e 16 42 4e 45 20 20 20 4e 6f 5f 53 65 74 5f |.~.BNE No_Set_| 00002b60 53 70 65 65 64 0d 0e 88 12 80 53 20 20 52 31 2c |Speed.....S R1,| 00002b70 52 35 2c 23 26 30 46 0d 0e 92 16 53 54 52 4e 45 |R5,#&0F....STRNE| 00002b80 20 52 31 2c 54 72 6b 5f 53 70 65 65 64 0d 0e 9c | R1,Trk_Speed...| 00002b90 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d 0e a6 |.MOV PC,R14...| 00002ba0 11 2e 4e 6f 5f 53 65 74 5f 53 70 65 65 64 0d 0e |..No_Set_Speed..| 00002bb0 b0 04 0d 0e ba 1a 3b 20 50 61 74 74 65 72 6e 20 |......; Pattern | 00002bc0 42 72 65 61 6b 20 20 28 27 42 27 29 0d 0e c4 04 |Break ('B')....| 00002bd0 0d 0e ce 12 43 4d 50 20 20 20 52 34 2c 23 26 42 |....CMP R4,#&B| 00002be0 30 30 0d 0e d8 1a 42 4e 45 20 20 20 4e 6f 5f 50 |00....BNE No_P| 00002bf0 61 74 74 65 72 6e 5f 42 72 65 61 6b 0d 0e e2 16 |attern_Break....| 00002c00 41 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 |ADR R0,Trk_Inf| 00002c10 6f 73 0d 0e ec 14 4c 44 4d 49 41 20 52 30 2c 7b |os....LDMIA R0,{| 00002c20 52 31 2d 52 33 7d 0d 0e f6 41 41 44 44 20 20 20 |R1-R3}...AADD | 00002c30 52 31 2c 52 31 2c 23 31 20 20 20 20 20 20 20 20 |R1,R1,#1 | 00002c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00002c50 50 6f 73 69 74 69 6f 6e 20 3d 20 50 6f 73 69 74 |Position = Posit| 00002c60 69 6f 6e 20 2b 20 31 0d 0f 00 0f 43 4d 50 20 20 |ion + 1....CMP | 00002c70 20 52 31 2c 52 32 0d 0f 0a 0c ec 51 20 52 31 2c | R1,R2.....Q R1,| 00002c80 23 30 0d 0f 14 42 4d 4f 56 20 20 20 52 33 2c 23 |#0...BMOV R3,#| 00002c90 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00002ca0 20 20 20 20 20 20 20 20 20 20 3b 20 41 74 20 73 | ; At s| 00002cb0 74 61 72 74 20 6f 66 20 6e 65 78 74 20 70 61 74 |tart of next pat| 00002cc0 74 65 72 6e 0d 0f 1e 14 53 54 4d 49 41 20 52 30 |tern....STMIA R0| 00002cd0 2c 7b 52 31 2d 52 33 7d 0d 0f 28 10 4d 4f 56 20 |,{R1-R3}..(.MOV | 00002ce0 20 20 50 43 2c 52 31 34 0d 0f 32 15 2e 4e 6f 5f | PC,R14..2..No_| 00002cf0 50 61 74 74 65 72 6e 5f 42 72 65 61 6b 0d 0f 3c |Pattern_Break..<| 00002d00 04 0d 0f 46 19 3b 20 50 6f 73 69 74 69 6f 6e 20 |...F.; Position | 00002d10 4a 75 6d 70 20 28 27 4a 27 29 0d 0f 50 04 0d 0f |Jump ('J')..P...| 00002d20 5a 13 43 4d 50 20 20 20 52 34 2c 23 26 31 33 30 |Z.CMP R4,#&130| 00002d30 30 0d 0f 64 1a 42 4e 45 20 20 20 4e 6f 5f 50 6f |0..d.BNE No_Po| 00002d40 73 69 74 69 6f 6e 5f 4a 75 6d 70 0d 0f 6e 16 41 |sition_Jump..n.A| 00002d50 44 52 20 20 20 52 30 2c 54 72 6b 5f 49 6e 66 6f |DR R0,Trk_Info| 00002d60 73 0d 0f 78 12 80 20 20 20 52 31 2c 52 35 2c 23 |s..x.. R1,R5,#| 00002d70 26 37 46 0d 0f 82 11 53 54 52 20 20 20 52 31 2c |&7F....STR R1,| 00002d80 5b 52 30 5d 0d 0f 8c 0f 4d 4f 56 20 20 20 52 31 |[R0]....MOV R1| 00002d90 2c 23 30 0d 0f 96 14 53 54 52 20 20 20 52 31 2c |,#0....STR R1,| 00002da0 5b 52 30 2c 23 38 5d 0d 0f a0 10 4d 4f 56 20 20 |[R0,#8]....MOV | 00002db0 20 50 43 2c 52 31 34 0d 0f aa 15 2e 4e 6f 5f 50 | PC,R14.....No_P| 00002dc0 6f 73 69 74 69 6f 6e 5f 4a 75 6d 70 0d 0f b4 04 |osition_Jump....| 00002dd0 0d 0f be 13 43 4d 50 20 20 20 52 34 2c 23 26 31 |....CMP R4,#&1| 00002de0 35 30 30 0d 0f c8 16 42 4e 45 20 20 20 4e 6f 5f |500....BNE No_| 00002df0 4c 69 6e 65 5f 4a 75 6d 70 0d 0f d2 11 80 20 20 |Line_Jump..... | 00002e00 20 52 31 2c 52 35 2c 23 26 46 0d 0f dc 15 4d 4f | R1,R5,#&F....MO| 00002e10 56 20 20 20 52 32 2c 52 35 2c 4c 53 52 23 34 0d |V R2,R5,LSR#4.| 00002e20 0f e6 11 80 53 20 20 52 32 2c 52 32 2c 23 26 46 |....S R2,R2,#&F| 00002e30 0d 0f f0 10 4d 4f 56 47 54 20 52 33 2c 23 31 30 |....MOVGT R3,#10| 00002e40 0d 0f fa 15 4d 4c 41 47 54 20 52 31 2c 52 32 2c |....MLAGT R1,R2,| 00002e50 52 33 2c 52 31 0d 10 04 10 43 4d 50 20 20 20 52 |R3,R1....CMP R| 00002e60 31 2c 23 36 33 0d 10 0e 16 41 44 52 4c 45 20 52 |1,#63....ADRLE R| 00002e70 30 2c 54 72 6b 5f 49 6e 66 6f 73 0d 10 18 14 53 |0,Trk_Infos....S| 00002e80 54 52 4c 45 20 52 31 2c 5b 52 30 2c 23 38 5d 0d |TRLE R1,[R0,#8].| 00002e90 10 22 10 4d 4f 56 20 20 20 50 43 2c 52 31 34 0d |.".MOV PC,R14.| 00002ea0 10 2c 11 2e 4e 6f 5f 4c 69 6e 65 5f 4a 75 6d 70 |.,..No_Line_Jump| 00002eb0 0d 10 36 04 0d 10 40 12 43 4d 50 20 20 20 52 34 |..6...@.CMP R4| 00002ec0 2c 23 26 45 30 30 0d 10 4a 17 42 4e 45 20 20 20 |,#&E00..J.BNE | 00002ed0 4e 6f 5f 53 65 74 5f 53 74 65 72 65 6f 0d 10 54 |No_Set_Stereo..T| 00002ee0 1a 41 44 52 20 20 20 52 31 30 2c 53 74 65 72 65 |.ADR R10,Stere| 00002ef0 6f 5f 54 61 62 6c 65 0d 10 5e 38 80 53 20 20 52 |o_Table..^8.S R| 00002f00 32 2c 52 35 2c 23 26 30 46 20 20 20 20 20 20 20 |2,R5,#&0F | 00002f10 20 20 20 3b 20 52 32 20 3d 20 53 74 65 72 65 6f | ; R2 = Stereo| 00002f20 20 70 6f 73 69 74 69 6f 6e 20 28 31 2d 37 29 0d | position (1-7).| 00002f30 10 68 0d ec 51 20 50 43 2c 52 31 34 0d 10 72 0f |.h..Q PC,R14..r.| 00002f40 43 4d 50 20 20 20 52 32 2c 23 37 0d 10 7c 10 4d |CMP R2,#7..|.M| 00002f50 4f 56 47 54 20 50 43 2c 52 31 34 0d 10 86 12 53 |OVGT PC,R14....S| 00002f60 55 42 20 20 20 52 32 2c 52 32 2c 23 31 0d 10 90 |UB R2,R2,#1...| 00002f70 1b 4c 44 52 20 20 20 52 31 2c 5b 52 31 30 2c 52 |.LDR R1,[R10,R| 00002f80 32 2c 4c 53 4c 23 32 5d 0d 10 9a 31 41 44 44 20 |2,LSL#2]...1ADD | 00002f90 20 20 52 30 2c 52 39 2c 23 31 20 20 20 20 20 20 | R0,R9,#1 | 00002fa0 20 20 20 20 20 20 3b 20 52 30 20 3d 20 56 6f 69 | ; R0 = Voi| 00002fb0 63 65 20 4e 75 6d 62 65 72 0d 10 a4 16 53 54 4d |ce Number....STM| 00002fc0 46 44 20 52 31 33 21 2c 7b 52 38 2c 52 39 7d 0d |FD R13!,{R8,R9}.| 00002fd0 10 ae 0f 4d 4f 56 20 20 20 52 30 2c 50 43 0d 10 |...MOV R0,PC..| 00002fe0 b8 11 84 52 20 20 20 52 38 2c 52 39 2c 23 33 0d |...R R8,R9,#3.| 00002ff0 10 c2 0f 54 45 51 50 20 20 52 38 2c 23 30 0d 10 |...TEQP R8,#0..| 00003000 cc 0f 4d 4f 56 4e 56 20 52 30 2c 52 30 0d 10 d6 |..MOVNV R0,R0...| 00003010 14 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 |.STMFD R13!,{R14| 00003020 7d 0d 10 e0 18 53 57 49 20 20 20 22 53 6f 75 6e |}....SWI "Soun| 00003030 64 5f 53 74 65 72 65 6f 22 0d 10 ea 14 4c 44 4d |d_Stereo"....LDM| 00003040 46 44 20 52 31 33 21 2c 7b 52 31 34 7d 0d 10 f4 |FD R13!,{R14}...| 00003050 0f 54 45 51 50 20 20 52 39 2c 23 30 0d 10 fe 0f |.TEQP R9,#0....| 00003060 4d 4f 56 4e 56 20 52 30 2c 52 30 0d 11 08 16 4c |MOVNV R0,R0....L| 00003070 44 4d 46 44 20 52 31 33 21 2c 7b 52 38 2c 52 39 |DMFD R13!,{R8,R9| 00003080 7d 0d 11 12 12 2e 4e 6f 5f 53 65 74 5f 53 74 65 |}.....No_Set_Ste| 00003090 72 65 6f 0d 11 1c 10 4d 4f 56 20 20 20 50 43 2c |reo....MOV PC,| 000030a0 52 31 34 0d 11 26 04 0d 11 30 23 3b 20 2a 2d 2d |R14..&...0#; *--| 000030b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000030c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 11 3a 23 3b 20 |---------*..:#; | 000030d0 2a 20 20 20 20 45 66 66 65 63 74 73 20 43 68 65 |* Effects Che| 000030e0 63 6b 69 6e 67 20 23 32 20 20 20 20 2a 0d 11 44 |cking #2 *..D| 000030f0 23 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |#; *------------| 00003100 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00003110 0d 11 4e 23 3b 20 2a 20 27 30 27 20 20 3d 20 41 |..N#; * '0' = A| 00003120 72 70 65 67 67 69 6f 20 20 20 20 20 20 20 20 20 |rpeggio | 00003130 20 20 2a 0d 11 58 23 3b 20 2a 20 27 31 27 20 20 | *..X#; * '1' | 00003140 3d 20 50 6f 72 74 61 6d 65 6e 74 6f 20 55 70 20 |= Portamento Up | 00003150 20 20 20 20 20 2a 0d 11 62 23 3b 20 2a 20 27 32 | *..b#; * '2| 00003160 27 20 20 3d 20 50 6f 72 74 61 6d 65 6e 74 6f 20 |' = Portamento | 00003170 44 6f 77 6e 20 20 20 20 2a 0d 11 6c 23 3b 20 2a |Down *..l#; *| 00003180 20 27 47 27 20 20 3d 20 53 6c 69 64 65 20 56 6f | 'G' = Slide Vo| 00003190 6c 75 6d 65 20 55 70 20 20 20 20 2a 0d 11 76 23 |lume Up *..v#| 000031a0 3b 20 2a 20 27 48 27 20 20 3d 20 53 6c 69 64 65 |; * 'H' = Slide| 000031b0 20 56 6f 6c 75 6d 65 20 44 6f 77 6e 20 20 2a 0d | Volume Down *.| 000031c0 11 80 23 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..#; *----------| 000031d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000031e0 2d 2a 0d 11 8a 04 0d 11 94 10 2e 54 72 6b 5f 45 |-*.........Trk_E| 000031f0 66 66 65 63 74 73 0d 11 9e 1d 41 44 52 20 20 20 |ffects....ADR | 00003200 52 39 2c 54 72 6b 5f 50 61 74 74 65 72 6e 5f 4c |R9,Trk_Pattern_L| 00003210 69 6e 65 0d 11 a8 19 41 44 52 20 20 20 52 31 30 |ine....ADR R10| 00003220 2c 54 72 6b 5f 50 65 72 69 6f 64 73 0d 11 b2 34 |,Trk_Periods...4| 00003230 4c 44 52 20 20 20 52 31 31 2c 54 72 6b 5f 56 6f |LDR R11,Trk_Vo| 00003240 69 63 65 73 20 20 20 20 20 20 20 3b 20 52 31 31 |ices ; R11| 00003250 20 3d 20 56 6f 69 63 65 73 20 4e 75 6d 62 65 72 | = Voices Number| 00003260 0d 11 bc 36 42 4c 20 20 20 20 47 65 74 5f 46 72 |...6BL Get_Fr| 00003270 65 71 75 65 6e 63 65 5f 54 61 62 6c 65 20 20 3b |equence_Table ;| 00003280 20 52 38 20 3d 3e 20 46 72 65 71 75 65 6e 63 65 | R8 => Frequence| 00003290 20 54 61 62 6c 65 0d 11 c6 46 42 4c 20 20 20 20 | Table...FBL | 000032a0 47 65 74 5f 49 6e 66 6f 73 5f 42 6c 6f 63 6b 20 |Get_Infos_Block | 000032b0 20 20 20 20 20 3b 20 52 37 20 3d 3e 20 49 6e 66 | ; R7 => Inf| 000032c0 6f 73 20 42 6c 6f 63 6b 20 28 33 32 20 42 79 74 |os Block (32 Byt| 000032d0 65 20 2f 20 43 68 61 6e 6e 65 6c 29 0d 11 d0 0f |e / Channel)....| 000032e0 4d 4f 56 20 20 20 52 32 2c 23 30 0d 11 da 15 2e |MOV R2,#0.....| 000032f0 43 68 65 63 6b 45 66 66 65 63 74 73 4c 6f 6f 70 |CheckEffectsLoop| 00003300 0d 11 e4 1a 4c 44 52 20 20 20 52 31 2c 5b 52 39 |....LDR R1,[R9| 00003310 2c 52 32 2c 4c 53 4c 23 32 5d 0d 11 ee 2f 80 20 |,R2,LSL#2].../. | 00003320 20 20 52 33 2c 52 31 2c 23 26 30 30 46 46 20 20 | R3,R1,#&00FF | 00003330 20 20 20 20 20 20 20 3b 20 52 33 20 3d 20 45 66 | ; R3 = Ef| 00003340 66 65 63 74 20 44 61 74 61 0d 11 f8 15 4d 4f 56 |fect Data....MOV| 00003350 20 20 20 52 31 2c 52 31 2c 4c 53 52 23 38 0d 12 | R1,R1,LSR#8..| 00003360 02 2f 80 20 20 20 52 31 2c 52 31 2c 23 26 46 46 |./. R1,R1,#&FF| 00003370 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 31 20 | ; R1 | 00003380 3d 20 45 66 66 65 63 74 20 54 79 70 65 0d 12 0c |= Effect Type...| 00003390 04 0d 12 16 11 43 4d 50 20 20 20 52 31 2c 23 26 |.....CMP R1,#&| 000033a0 31 30 0d 12 20 19 42 4e 45 20 20 20 4e 6f 5f 53 |10.. .BNE No_S| 000033b0 6c 69 64 65 5f 56 6f 6c 5f 55 70 0d 12 2a 12 80 |lide_Vol_Up..*..| 000033c0 20 20 20 52 33 2c 52 33 2c 23 26 46 46 0d 12 34 | R3,R3,#&FF..4| 000033d0 18 41 44 44 20 20 20 52 34 2c 52 37 2c 52 32 2c |.ADD R4,R7,R2,| 000033e0 4c 53 4c 23 35 0d 12 3e 2f 4c 44 52 20 20 20 52 |LSL#5..>/LDR R| 000033f0 35 2c 5b 52 34 2c 23 32 30 5d 20 20 20 20 20 20 |5,[R4,#20] | 00003400 20 20 20 20 20 3b 20 52 35 3d 32 35 35 2d 56 6f | ; R5=255-Vo| 00003410 6c 75 6d 65 0d 12 48 14 52 53 42 20 20 20 52 35 |lume..H.RSB R5| 00003420 2c 52 35 2c 23 32 35 35 0d 12 52 12 41 44 44 20 |,R5,#255..R.ADD | 00003430 20 20 52 35 2c 52 35 2c 52 33 0d 12 5c 11 43 4d | R5,R5,R3..\.CM| 00003440 50 20 20 20 52 35 2c 23 26 46 46 0d 12 66 11 4d |P R5,#&FF..f.M| 00003450 4f 56 47 54 20 52 35 2c 23 26 46 46 0d 12 70 14 |OVGT R5,#&FF..p.| 00003460 52 53 42 20 20 20 52 35 2c 52 35 2c 23 32 35 35 |RSB R5,R5,#255| 00003470 0d 12 7a 15 53 54 52 20 20 20 52 35 2c 5b 52 34 |..z.STR R5,[R4| 00003480 2c 23 32 30 5d 0d 12 84 16 42 20 20 20 20 20 43 |,#20]....B C| 00003490 68 65 63 6b 4e 65 78 74 56 6f 78 0d 12 8e 14 2e |heckNextVox.....| 000034a0 4e 6f 5f 53 6c 69 64 65 5f 56 6f 6c 5f 55 70 0d |No_Slide_Vol_Up.| 000034b0 12 98 04 0d 12 a2 11 43 4d 50 20 20 20 52 31 2c |.......CMP R1,| 000034c0 23 26 31 31 0d 12 ac 1b 42 4e 45 20 20 20 4e 6f |#&11....BNE No| 000034d0 5f 53 6c 69 64 65 5f 56 6f 6c 5f 44 6f 77 6e 0d |_Slide_Vol_Down.| 000034e0 12 b6 12 80 20 20 20 52 33 2c 52 33 2c 23 26 46 |.... R3,R3,#&F| 000034f0 46 0d 12 c0 18 41 44 44 20 20 20 52 34 2c 52 37 |F....ADD R4,R7| 00003500 2c 52 32 2c 4c 53 4c 23 35 0d 12 ca 2d 4c 44 52 |,R2,LSL#5...-LDR| 00003510 20 20 20 52 35 2c 5b 52 34 2c 23 32 30 5d 20 20 | R5,[R4,#20] | 00003520 20 20 20 20 20 20 20 3b 20 52 35 3d 32 35 35 2d | ; R5=255-| 00003530 56 6f 6c 75 6d 65 0d 12 d4 14 52 53 42 20 20 20 |Volume....RSB | 00003540 52 35 2c 52 35 2c 23 32 35 35 0d 12 de 12 53 55 |R5,R5,#255....SU| 00003550 42 53 20 20 52 35 2c 52 35 2c 52 33 0d 12 e8 0f |BS R5,R5,R3....| 00003560 4d 4f 56 4c 54 20 52 35 2c 23 30 0d 12 f2 14 52 |MOVLT R5,#0....R| 00003570 53 42 20 20 20 52 35 2c 52 35 2c 23 32 35 35 0d |SB R5,R5,#255.| 00003580 12 fc 15 53 54 52 20 20 20 52 35 2c 5b 52 34 2c |...STR R5,[R4,| 00003590 23 32 30 5d 0d 13 06 16 42 20 20 20 20 20 43 68 |#20]....B Ch| 000035a0 65 63 6b 4e 65 78 74 56 6f 78 0d 13 10 16 2e 4e |eckNextVox.....N| 000035b0 6f 5f 53 6c 69 64 65 5f 56 6f 6c 5f 44 6f 77 6e |o_Slide_Vol_Down| 000035c0 0d 13 1a 04 0d 13 24 0f 43 4d 50 20 20 20 52 31 |......$.CMP R1| 000035d0 2c 23 31 0d 13 2e 12 42 4e 45 20 20 20 4e 6f 50 |,#1....BNE NoP| 000035e0 6f 72 74 55 70 0d 13 38 18 41 44 44 20 20 20 52 |ortUp..8.ADD R| 000035f0 34 2c 52 37 2c 52 32 2c 4c 53 4c 23 35 0d 13 42 |4,R7,R2,LSL#5..B| 00003600 30 4c 44 52 20 20 20 52 35 2c 5b 52 34 2c 23 32 |0LDR R5,[R4,#2| 00003610 38 5d 20 20 20 20 20 20 20 20 20 3b 20 52 35 3d |8] ; R5=| 00003620 41 63 74 75 61 6c 20 50 65 72 69 6f 64 0d 13 4c |Actual Period..L| 00003630 12 53 55 42 20 20 20 52 35 2c 52 35 2c 52 33 0d |.SUB R5,R5,R3.| 00003640 13 56 11 43 4d 50 20 20 20 52 35 2c 23 26 35 30 |.V.CMP R5,#&50| 00003650 0d 13 60 11 4d 4f 56 4c 54 20 52 35 2c 23 26 35 |..`.MOVLT R5,#&5| 00003660 30 0d 13 6a 15 53 54 52 20 20 20 52 35 2c 5b 52 |0..j.STR R5,[R| 00003670 34 2c 23 32 38 5d 0d 13 74 1a 4c 44 52 20 20 20 |4,#28]..t.LDR | 00003680 52 35 2c 5b 52 38 2c 52 35 2c 4c 53 4c 23 32 5d |R5,[R8,R5,LSL#2]| 00003690 0d 13 7e 14 53 54 52 20 20 20 52 35 2c 5b 52 34 |..~.STR R5,[R4| 000036a0 2c 23 34 5d 0d 13 88 16 42 20 20 20 20 20 43 68 |,#4]....B Ch| 000036b0 65 63 6b 4e 65 78 74 56 6f 78 0d 13 92 0d 2e 4e |eckNextVox.....N| 000036c0 6f 50 6f 72 74 55 70 0d 13 9c 04 0d 13 a6 0f 43 |oPortUp........C| 000036d0 4d 50 20 20 20 52 31 2c 23 32 0d 13 b0 14 42 4e |MP R1,#2....BN| 000036e0 45 20 20 20 4e 6f 50 6f 72 74 44 6f 77 6e 0d 13 |E NoPortDown..| 000036f0 ba 18 41 44 44 20 20 20 52 34 2c 52 37 2c 52 32 |..ADD R4,R7,R2| 00003700 2c 4c 53 4c 23 35 0d 13 c4 35 4c 44 52 20 20 20 |,LSL#5...5LDR | 00003710 52 35 2c 5b 52 34 2c 23 32 38 5d 20 20 20 20 20 |R5,[R4,#28] | 00003720 20 20 20 20 3b 20 48 61 75 74 65 75 72 20 4e 6f | ; Hauteur No| 00003730 74 65 20 41 63 74 75 65 6c 6c 65 0d 13 ce 12 41 |te Actuelle....A| 00003740 44 44 20 20 20 52 35 2c 52 35 2c 52 33 0d 13 d8 |DD R5,R5,R3...| 00003750 12 43 4d 50 20 20 20 52 35 2c 23 26 33 46 30 0d |.CMP R5,#&3F0.| 00003760 13 e2 12 4d 4f 56 47 54 20 52 35 2c 23 26 33 46 |...MOVGT R5,#&3F| 00003770 30 0d 13 ec 15 53 54 52 20 20 20 52 35 2c 5b 52 |0....STR R5,[R| 00003780 34 2c 23 32 38 5d 0d 13 f6 36 4c 44 52 20 20 20 |4,#28]...6LDR | 00003790 52 35 2c 5b 52 38 2c 52 35 2c 4c 53 4c 23 32 5d |R5,[R8,R5,LSL#2]| 000037a0 20 20 20 20 3b 20 47 65 74 20 70 68 61 73 65 20 | ; Get phase | 000037b0 69 6e 63 72 65 6d 65 6e 74 2e 2e 2e 0d 14 00 2a |increment......*| 000037c0 53 54 52 20 20 20 52 35 2c 5b 52 34 2c 23 34 5d |STR R5,[R4,#4]| 000037d0 20 20 20 20 20 20 20 20 20 20 3b 20 2e 2e 2e 53 | ; ...S| 000037e0 61 76 65 20 69 74 0d 14 0a 16 42 20 20 20 20 20 |ave it....B | 000037f0 43 68 65 63 6b 4e 65 78 74 56 6f 78 0d 14 14 0f |CheckNextVox....| 00003800 2e 4e 6f 50 6f 72 74 44 6f 77 6e 0d 14 1e 04 0d |.NoPortDown.....| 00003810 14 28 0f 43 4d 50 20 20 20 52 31 2c 23 30 0d 14 |.(.CMP R1,#0..| 00003820 32 16 42 4c 45 51 20 20 54 72 6b 5f 41 72 70 65 |2.BLEQ Trk_Arpe| 00003830 67 67 69 6f 0d 14 3c 04 0d 14 46 11 2e 43 68 65 |ggio..<...F..Che| 00003840 63 6b 4e 65 78 74 56 6f 78 0d 14 50 2a 41 44 44 |ckNextVox..P*ADD| 00003850 20 20 20 52 32 2c 52 32 2c 23 31 20 20 20 20 20 | R2,R2,#1 | 00003860 20 20 20 20 20 20 20 3b 20 4e 65 78 74 20 56 6f | ; Next Vo| 00003870 69 63 65 0d 14 5a 2c 43 4d 50 20 20 20 52 32 2c |ice..Z,CMP R2,| 00003880 52 31 31 20 20 20 20 20 20 20 20 20 20 20 20 20 |R11 | 00003890 20 3b 20 4c 61 73 74 20 56 6f 69 63 65 20 3f 0d | ; Last Voice ?.| 000038a0 14 64 1a 42 4e 45 20 20 20 43 68 65 63 6b 45 66 |.d.BNE CheckEf| 000038b0 66 65 63 74 73 4c 6f 6f 70 0d 14 6e 1a 4c 44 4d |fectsLoop..n.LDM| 000038c0 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c |FD R13!,{R0-R12,| 000038d0 50 43 7d 0d 14 78 04 0d 14 82 11 2e 54 72 6b 5f |PC}..x......Trk_| 000038e0 41 72 70 65 67 67 69 6f 0d 14 8c 14 53 54 4d 46 |Arpeggio....STMF| 000038f0 44 20 52 31 33 21 2c 7b 52 31 34 7d 0d 14 96 0f |D R13!,{R14}....| 00003900 43 4d 50 20 20 20 52 33 2c 23 30 0d 14 a0 15 4c |CMP R3,#0....L| 00003910 44 4d 45 51 46 44 20 52 31 33 21 2c 7b 50 43 7d |DMEQFD R13!,{PC}| 00003920 0d 14 aa 18 4c 44 52 20 20 20 52 30 2c 54 72 6b |....LDR R0,Trk| 00003930 5f 43 6f 75 6e 74 65 72 0d 14 b4 0f 43 4d 50 20 |_Counter....CMP | 00003940 20 20 52 30 2c 23 31 0d 14 be 13 42 45 51 20 20 | R0,#1....BEQ | 00003950 20 41 72 70 5f 4c 6f 6f 70 32 0d 14 c8 0f 43 4d | Arp_Loop2....CM| 00003960 50 20 20 20 52 30 2c 23 32 0d 14 d2 13 42 45 51 |P R0,#2....BEQ| 00003970 20 20 20 41 72 70 5f 4c 6f 6f 70 33 0d 14 dc 0f | Arp_Loop3....| 00003980 43 4d 50 20 20 20 52 30 2c 23 33 0d 14 e6 13 42 |CMP R0,#3....B| 00003990 45 51 20 20 20 41 72 70 5f 4c 6f 6f 70 34 0d 14 |EQ Arp_Loop4..| 000039a0 f0 0f 43 4d 50 20 20 20 52 30 2c 23 34 0d 14 fa |..CMP R0,#4...| 000039b0 13 42 45 51 20 20 20 41 72 70 5f 4c 6f 6f 70 32 |.BEQ Arp_Loop2| 000039c0 0d 15 04 0f 43 4d 50 20 20 20 52 30 2c 23 35 0d |....CMP R0,#5.| 000039d0 15 0e 13 42 45 51 20 20 20 41 72 70 5f 4c 6f 6f |...BEQ Arp_Loo| 000039e0 70 33 0d 15 18 13 4c 44 4d 46 44 20 52 31 33 21 |p3....LDMFD R13!| 000039f0 2c 7b 50 43 7d 0d 15 22 04 0d 15 2c 0e 2e 41 72 |,{PC}.."...,..Ar| 00003a00 70 5f 4c 6f 6f 70 32 0d 15 36 4b 4d 4f 56 20 20 |p_Loop2..6KMOV | 00003a10 20 52 30 2c 52 33 2c 4c 53 52 23 34 20 20 20 20 | R0,R3,LSR#4 | 00003a20 20 20 20 20 3b 20 52 30 3d 46 69 72 73 74 20 6e | ; R0=First n| 00003a30 69 62 62 6c 65 2c 20 74 68 65 6e 20 61 64 64 20 |ibble, then add | 00003a40 69 74 20 74 6f 20 63 75 72 72 65 6e 74 20 74 6f |it to current to| 00003a50 6e 65 0d 15 40 12 42 20 20 20 20 20 41 72 70 5f |ne..@.B Arp_| 00003a60 43 6f 6e 74 0d 15 4a 0e 2e 41 72 70 5f 4c 6f 6f |Cont..J..Arp_Loo| 00003a70 70 33 0d 15 54 4a 80 20 20 20 52 30 2c 52 33 2c |p3..TJ. R0,R3,| 00003a80 23 26 30 46 20 20 20 20 20 20 20 20 20 3b 20 52 |#&0F ; R| 00003a90 30 3d 53 65 63 6f 6e 64 20 6e 69 62 62 6c 65 2c |0=Second nibble,| 00003aa0 20 74 68 65 6e 20 61 64 64 20 69 74 20 74 6f 20 | then add it to | 00003ab0 63 75 72 72 65 6e 74 20 74 6f 6e 65 0d 15 5e 12 |current tone..^.| 00003ac0 42 20 20 20 20 20 41 72 70 5f 43 6f 6e 74 0d 15 |B Arp_Cont..| 00003ad0 68 0e 2e 41 72 70 5f 4c 6f 6f 70 34 0d 15 72 30 |h..Arp_Loop4..r0| 00003ae0 4c 44 52 20 20 20 52 33 2c 5b 52 31 30 2c 52 32 |LDR R3,[R10,R2| 00003af0 2c 4c 53 4c 23 32 5d 20 20 3b 20 50 6c 61 79 20 |,LSL#2] ; Play | 00003b00 63 75 72 72 65 6e 74 20 74 6f 6e 65 0d 15 7c 15 |current tone..|.| 00003b10 42 20 20 20 20 20 41 72 70 5f 45 6e 64 50 61 72 |B Arp_EndPar| 00003b20 74 0d 15 86 0d 2e 41 72 70 5f 43 6f 6e 74 0d 15 |t.....Arp_Cont..| 00003b30 90 19 42 4c 20 20 20 20 47 65 74 5f 50 65 72 69 |..BL Get_Peri| 00003b40 6f 64 73 5f 41 64 72 0d 15 9a 1b 4c 44 52 20 20 |ods_Adr....LDR | 00003b50 20 52 31 2c 5b 52 31 30 2c 52 32 2c 4c 53 4c 23 | R1,[R10,R2,LSL#| 00003b60 32 5d 0d 15 a4 16 41 44 44 20 20 20 52 34 2c 52 |2]....ADD R4,R| 00003b70 31 32 2c 23 33 36 2a 34 0d 15 ae 0e 2e 41 72 70 |12,#36*4.....Arp| 00003b80 5f 4c 6f 6f 70 35 0d 15 b8 1b 4c 44 52 20 20 20 |_Loop5....LDR | 00003b90 52 33 2c 5b 52 31 32 2c 52 30 2c 4c 53 4c 23 32 |R3,[R12,R0,LSL#2| 00003ba0 5d 0d 15 c2 15 4c 44 52 20 20 20 52 36 2c 5b 52 |]....LDR R6,[R| 00003bb0 31 32 5d 2c 23 34 0d 15 cc 0f 43 4d 50 20 20 20 |12],#4....CMP | 00003bc0 52 36 2c 52 31 0d 15 d6 15 42 45 51 20 20 20 41 |R6,R1....BEQ A| 00003bd0 72 70 5f 45 6e 64 50 61 72 74 0d 15 e0 13 42 20 |rp_EndPart....B | 00003be0 20 20 20 20 41 72 70 5f 4c 6f 6f 70 35 0d 15 ea | Arp_Loop5...| 00003bf0 04 0d 15 f4 10 2e 41 72 70 5f 45 6e 64 50 61 72 |......Arp_EndPar| 00003c00 74 0d 15 fe 1a 41 44 44 20 20 20 52 31 32 2c 52 |t....ADD R12,R| 00003c10 31 32 2c 52 30 2c 4c 53 4c 23 32 0d 16 08 10 43 |12,R0,LSL#2....C| 00003c20 4d 50 20 20 20 52 31 32 2c 52 34 0d 16 12 15 4c |MP R12,R4....L| 00003c30 44 4d 47 54 46 44 20 52 31 33 21 2c 7b 50 43 7d |DMGTFD R13!,{PC}| 00003c40 0d 16 1c 18 41 44 44 20 20 20 52 34 2c 52 37 2c |....ADD R4,R7,| 00003c50 52 32 2c 4c 53 4c 23 35 0d 16 26 0f 43 4d 50 20 |R2,LSL#5..&.CMP | 00003c60 20 20 52 33 2c 23 30 0d 16 30 15 4c 44 4d 45 51 | R3,#0..0.LDMEQ| 00003c70 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 16 3a 3b |FD R13!,{PC}..:;| 00003c80 4c 44 52 20 20 20 52 35 2c 5b 52 38 2c 52 33 2c |LDR R5,[R8,R3,| 00003c90 4c 53 4c 23 32 5d 20 20 20 20 20 20 20 20 20 3b |LSL#2] ;| 00003ca0 20 47 65 74 20 70 68 61 73 65 20 69 6e 63 72 65 | Get phase incre| 00003cb0 6d 65 6e 74 2e 2e 2e 0d 16 44 45 53 54 52 20 20 |ment.....DESTR | 00003cc0 20 52 35 2c 5b 52 34 2c 23 34 5d 20 20 20 20 20 | R5,[R4,#4] | 00003cd0 20 20 20 20 20 20 20 20 20 20 3b 20 2e 2e 2e 53 | ; ...S| 00003ce0 61 76 65 20 69 74 20 69 6e 20 56 6f 69 63 65 73 |ave it in Voices| 00003cf0 20 49 6e 66 6f 73 5f 42 6c 6f 63 6b 0d 16 4e 0f | Infos_Block..N.| 00003d00 2e 45 6e 64 5f 45 66 66 65 63 74 0d 16 58 13 4c |.End_Effect..X.L| 00003d10 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 16 |DMFD R13!,{PC}..| 00003d20 62 04 0d 16 6c 11 2e 53 74 65 72 65 6f 5f 54 61 |b...l..Stereo_Ta| 00003d30 62 6c 65 0d 16 76 3f 45 51 55 44 20 2d 31 32 36 |ble..v?EQUD -126| 00003d40 3a 45 51 55 44 20 2d 37 30 3a 45 51 55 44 20 2d |:EQUD -70:EQUD -| 00003d50 34 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 34 |40:EQUD 0:EQUD 4| 00003d60 30 3a 45 51 55 44 20 37 30 3a 45 51 55 44 20 31 |0:EQUD 70:EQUD 1| 00003d70 32 37 0d 16 80 04 0d 16 8a 18 2e 56 6f 69 63 65 |27.........Voice| 00003d80 5f 43 6f 6e 74 72 6f 6c 5f 42 6c 6f 63 6b 0d 16 |_Control_Block..| 00003d90 94 17 42 20 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 |..B Fill_Sound_B| 00003da0 75 66 66 65 72 0d 16 9e 17 42 20 46 69 6c 6c 5f |uffer....B Fill_| 00003db0 53 6f 75 6e 64 5f 42 75 66 66 65 72 0d 16 a8 17 |Sound_Buffer....| 00003dc0 42 20 46 69 6c 6c 5f 53 6f 75 6e 64 5f 42 75 66 |B Fill_Sound_Buf| 00003dd0 66 65 72 0d 16 b2 13 4c 44 4d 46 44 20 52 31 33 |fer....LDMFD R13| 00003de0 21 2c 7b 50 43 7d 0d 16 bc 13 4c 44 4d 46 44 20 |!,{PC}....LDMFD | 00003df0 52 31 33 21 2c 7b 50 43 7d 0d 16 c6 13 4c 44 4d |R13!,{PC}....LDM| 00003e00 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 16 d0 13 |FD R13!,{PC}....| 00003e10 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d |LDMFD R13!,{PC}.| 00003e20 16 da 27 45 51 55 44 20 56 6f 69 63 65 5f 4e 61 |..'EQUD Voice_Na| 00003e30 6d 65 2d 56 6f 69 63 65 5f 43 6f 6e 74 72 6f 6c |me-Voice_Control| 00003e40 5f 42 6c 6f 63 6b 0d 16 e4 0f 2e 56 6f 69 63 65 |_Block.....Voice| 00003e50 5f 4e 61 6d 65 0d 16 ee 1f 45 51 55 53 20 22 54 |_Name....EQUS "T| 00003e60 72 61 63 6b 65 72 22 3a 45 51 55 42 20 30 3a 41 |racker":EQUB 0:A| 00003e70 4c 49 47 4e 0d 16 f8 04 0d 17 02 29 3b 20 2a 2d |LIGN.......); *-| 00003e80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00003ea0 2a 0d 17 0c 29 3b 20 2a 20 20 20 20 49 6e 69 74 |*...); * Init| 00003eb0 20 54 72 61 63 6b 65 72 20 53 6f 75 6e 64 20 53 | Tracker Sound S| 00003ec0 79 73 74 65 6d 20 20 20 20 2a 0d 17 16 29 3b 20 |ystem *...); | 00003ed0 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |*---------------| 00003ee0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00003ef0 2d 2d 2a 0d 17 20 04 0d 17 2a 16 2e 49 6e 69 74 |--*.. ...*..Init| 00003f00 5f 53 6f 75 6e 64 5f 53 79 73 74 65 6d 0d 17 34 |_Sound_System..4| 00003f10 1b 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d |.STMFD R13!,{R0-| 00003f20 52 31 32 2c 52 31 34 7d 0d 17 3e 18 4c 44 52 20 |R12,R14}..>.LDR | 00003f30 20 20 52 31 32 2c 54 72 6b 5f 56 6f 69 63 65 73 | R12,Trk_Voices| 00003f40 0d 17 48 04 0d 17 52 20 41 44 52 20 20 20 52 30 |..H...R ADR R0| 00003f50 2c 56 6f 69 63 65 5f 43 6f 6e 74 72 6f 6c 5f 42 |,Voice_Control_B| 00003f60 6c 6f 63 6b 0d 17 5c 0f 4d 4f 56 20 20 20 52 31 |lock..\.MOV R1| 00003f70 2c 23 30 0d 17 66 1e 53 57 49 20 20 20 22 53 6f |,#0..f.SWI "So| 00003f80 75 6e 64 5f 49 6e 73 74 61 6c 6c 56 6f 69 63 65 |und_InstallVoice| 00003f90 22 0d 17 70 1b 53 54 52 20 20 20 52 31 2c 4f 6c |"..p.STR R1,Ol| 00003fa0 64 5f 56 6f 69 63 65 5f 53 6c 6f 74 0d 17 7a 04 |d_Voice_Slot..z.| 00003fb0 0d 17 84 10 4d 4f 56 20 20 20 52 31 30 2c 23 31 |....MOV R10,#1| 00003fc0 0d 17 8e 16 41 44 52 20 20 20 52 39 2c 4f 6c 64 |....ADR R9,Old| 00003fd0 56 6f 69 63 65 73 0d 17 98 12 53 55 42 20 20 20 |Voices....SUB | 00003fe0 52 39 2c 52 39 2c 23 34 0d 17 a2 18 2e 56 6f 69 |R9,R9,#4.....Voi| 00003ff0 63 65 73 5f 45 78 74 65 72 6d 69 6e 61 74 6f 72 |ces_Exterminator| 00004000 0d 17 ac 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 |....MOV R0,R10| 00004010 0d 17 b6 0f 4d 4f 56 20 20 20 52 31 2c 23 30 0d |....MOV R1,#0.| 00004020 17 c0 1d 53 57 49 20 20 20 22 53 6f 75 6e 64 5f |...SWI "Sound_| 00004030 41 74 74 61 63 68 56 6f 69 63 65 22 0d 17 ca 1b |AttachVoice"....| 00004040 53 54 52 20 20 20 52 31 2c 5b 52 39 2c 52 31 30 |STR R1,[R9,R10| 00004050 2c 4c 53 4c 23 32 5d 0d 17 d4 14 41 44 44 20 20 |,LSL#2]....ADD | 00004060 20 52 31 30 2c 52 31 30 2c 23 31 0d 17 de 10 43 | R10,R10,#1....C| 00004070 4d 50 20 20 20 52 31 30 2c 23 38 0d 17 e8 1d 42 |MP R10,#8....B| 00004080 4c 45 20 20 20 56 6f 69 63 65 73 5f 45 78 74 65 |LE Voices_Exte| 00004090 72 6d 69 6e 61 74 6f 72 0d 17 f2 04 0d 17 fc 10 |rminator........| 000040a0 4d 4f 56 20 20 20 52 31 30 2c 23 31 0d 18 06 12 |MOV R10,#1....| 000040b0 2e 49 6e 69 74 41 6c 6c 56 6f 69 63 65 73 0d 18 |.InitAllVoices..| 000040c0 10 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 18 |..MOV R0,R10..| 000040d0 1a 17 41 44 52 20 20 20 52 31 2c 56 6f 69 63 65 |..ADR R1,Voice| 000040e0 5f 4e 61 6d 65 0d 18 24 22 53 57 49 20 20 20 22 |_Name..$"SWI "| 000040f0 53 6f 75 6e 64 5f 41 74 74 61 63 68 4e 61 6d 65 |Sound_AttachName| 00004100 64 56 6f 69 63 65 22 0d 18 2e 14 41 44 44 20 20 |dVoice"....ADD | 00004110 20 52 31 30 2c 52 31 30 2c 23 31 0d 18 38 11 43 | R10,R10,#1..8.C| 00004120 4d 50 20 20 20 52 31 30 2c 52 31 32 0d 18 42 17 |MP R10,R12..B.| 00004130 42 4c 45 20 20 20 49 6e 69 74 41 6c 6c 56 6f 69 |BLE InitAllVoi| 00004140 63 65 73 0d 18 4c 04 0d 18 56 17 41 44 52 20 20 |ces..L...V.ADR | 00004150 20 52 37 2c 4f 6c 64 53 74 65 72 65 6f 73 0d 18 | R7,OldStereos..| 00004160 60 1a 41 44 52 20 20 20 52 31 30 2c 53 74 65 72 |`.ADR R10,Ster| 00004170 65 6f 5f 54 61 62 6c 65 0d 18 6a 0f 4d 4f 56 20 |eo_Table..j.MOV | 00004180 20 20 52 39 2c 23 31 0d 18 74 14 2e 53 65 74 5f | R9,#1..t..Set_| 00004190 53 74 65 72 65 6f 5f 4c 6f 6f 70 0d 18 7e 0f 4d |Stereo_Loop..~.M| 000041a0 4f 56 20 20 20 52 30 2c 52 39 0d 18 88 15 4c 44 |OV R0,R9....LD| 000041b0 52 42 20 20 52 35 2c 5b 52 31 31 5d 2c 23 31 0d |RB R5,[R11],#1.| 000041c0 18 92 12 53 55 42 53 20 20 52 35 2c 52 35 2c 23 |...SUBS R5,R5,#| 000041d0 31 0d 18 9c 0f 4d 4f 56 4c 54 20 52 35 2c 23 30 |1....MOVLT R5,#0| 000041e0 0d 18 a6 1b 4c 44 52 20 20 20 52 31 2c 5b 52 31 |....LDR R1,[R1| 000041f0 30 2c 52 35 2c 4c 53 4c 23 32 5d 0d 18 b0 18 53 |0,R5,LSL#2]....S| 00004200 57 49 20 20 20 22 53 6f 75 6e 64 5f 53 74 65 72 |WI "Sound_Ster| 00004210 65 6f 22 0d 18 ba 14 53 54 52 42 20 20 52 31 2c |eo"....STRB R1,| 00004220 5b 52 37 5d 2c 23 31 0d 18 c4 12 41 44 44 20 20 |[R7],#1....ADD | 00004230 20 52 39 2c 52 39 2c 23 31 0d 18 ce 10 43 4d 50 | R9,R9,#1....CMP| 00004240 20 20 20 52 39 2c 52 31 32 0d 18 d8 19 42 4c 45 | R9,R12....BLE| 00004250 20 20 20 53 65 74 5f 53 74 65 72 65 6f 5f 4c 6f | Set_Stereo_Lo| 00004260 6f 70 0d 18 e2 04 0d 18 ec 2e 4d 4f 56 20 20 20 |op........MOV | 00004270 52 30 2c 52 31 32 20 20 20 20 20 20 20 20 20 20 |R0,R12 | 00004280 20 20 20 20 20 3b 20 56 6f 69 63 65 73 20 6e 75 | ; Voices nu| 00004290 6d 62 65 72 0d 18 f6 42 4d 4f 56 20 20 20 52 31 |mber...BMOV R1| 000042a0 2c 23 32 30 38 20 20 20 20 20 20 20 20 20 20 20 |,#208 | 000042b0 20 20 20 3b 20 42 75 66 66 65 72 20 6c 65 6e 67 | ; Buffer leng| 000042c0 74 68 20 69 6e 20 62 79 74 65 20 70 65 72 20 63 |th in byte per c| 000042d0 68 61 6e 6e 65 6c 0d 19 00 40 4d 4f 56 20 20 20 |hannel...@MOV | 000042e0 52 32 2c 23 53 61 6d 70 6c 65 5f 52 61 74 65 20 |R2,#Sample_Rate | 000042f0 20 20 20 20 20 3b 20 53 61 6d 70 6c 65 20 52 61 | ; Sample Ra| 00004300 74 65 20 28 33 34 75 73 20 3d 20 32 39 2e 34 31 |te (34us = 29.41| 00004310 31 20 4b 68 7a 29 0d 19 0a 0f 4d 4f 56 20 20 20 |1 Khz)....MOV | 00004320 52 33 2c 23 30 0d 19 14 0f 4d 4f 56 20 20 20 52 |R3,#0....MOV R| 00004330 34 2c 23 30 0d 19 1e 1b 53 57 49 20 20 20 22 53 |4,#0....SWI "S| 00004340 6f 75 6e 64 5f 43 6f 6e 66 69 67 75 72 65 22 0d |ound_Configure".| 00004350 19 28 19 41 44 52 20 20 20 52 39 2c 4f 6c 64 43 |.(.ADR R9,OldC| 00004360 6f 6e 66 69 67 75 72 65 0d 19 32 14 53 54 4d 49 |onfigure..2.STMI| 00004370 41 20 52 39 2c 7b 52 30 2d 52 34 7d 0d 19 3c 04 |A R9,{R0-R4}..<.| 00004380 0d 19 46 10 4d 4f 56 20 20 20 52 38 2c 52 31 32 |..F.MOV R8,R12| 00004390 0d 19 50 13 2e 53 6f 75 6e 64 41 6c 6c 56 6f 69 |..P..SoundAllVoi| 000043a0 63 65 73 0d 19 5a 0f 4d 4f 56 20 20 20 52 30 2c |ces..Z.MOV R0,| 000043b0 52 38 0d 19 64 10 4d 56 4e 20 20 20 52 31 2c 23 |R8..d.MVN R1,#| 000043c0 32 30 0d 19 6e 11 4d 4f 56 20 20 20 52 32 2c 23 |20..n.MOV R2,#| 000043d0 26 46 30 0d 19 78 11 4d 4f 56 20 20 20 52 33 2c |&F0..x.MOV R3,| 000043e0 23 26 46 46 0d 19 82 19 53 57 49 20 20 20 22 53 |#&FF....SWI "S| 000043f0 6f 75 6e 64 5f 43 6f 6e 74 72 6f 6c 22 0d 19 8c |ound_Control"...| 00004400 12 53 55 42 53 20 20 52 38 2c 52 38 2c 23 31 0d |.SUBS R8,R8,#1.| 00004410 19 96 18 42 47 54 20 20 20 53 6f 75 6e 64 41 6c |...BGT SoundAl| 00004420 6c 56 6f 69 63 65 73 0d 19 a0 1b 4c 44 4d 46 44 |lVoices....LDMFD| 00004430 20 52 31 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 | R13!,{R0-R12,PC| 00004440 7d 5e 0d 19 aa 04 0d 19 b4 0e 2e 4f 6c 64 56 6f |}^.........OldVo| 00004450 69 63 65 73 0d 19 be 1f 45 51 55 44 20 30 3a 45 |ices....EQUD 0:E| 00004460 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 |QUD 0:EQUD 0:EQU| 00004470 44 20 30 0d 19 c8 1f 45 51 55 44 20 30 3a 45 51 |D 0....EQUD 0:EQ| 00004480 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 |UD 0:EQUD 0:EQUD| 00004490 20 30 0d 19 d2 11 2e 4f 6c 64 43 6f 6e 66 69 67 | 0.....OldConfig| 000044a0 75 72 65 0d 19 dc 26 45 51 55 44 20 30 3a 45 51 |ure...&EQUD 0:EQ| 000044b0 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 |UD 0:EQUD 0:EQUD| 000044c0 20 30 3a 45 51 55 44 20 30 0d 19 e6 0f 2e 4f 6c | 0:EQUD 0.....Ol| 000044d0 64 53 74 65 72 65 6f 73 0d 19 f0 11 45 51 55 44 |dStereos....EQUD| 000044e0 20 30 3a 45 51 55 44 20 30 0d 19 fa 04 0d 1a 04 | 0:EQUD 0.......| 000044f0 28 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |(; *------------| 00004500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004510 2d 2d 2d 2d 2a 0d 1a 0e 28 3b 20 2a 20 20 45 78 |----*...(; * Ex| 00004520 69 74 20 6f 66 20 54 72 61 63 6b 65 72 20 53 6f |it of Tracker So| 00004530 75 6e 64 20 53 79 73 74 65 6d 20 20 2a 0d 1a 18 |und System *...| 00004540 28 3b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |(; *------------| 00004550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00004560 2d 2d 2d 2d 2a 0d 1a 22 04 0d 1a 2c 12 2e 54 72 |----*.."...,..Tr| 00004570 6b 5f 43 6c 6f 73 65 5f 41 6c 6c 0d 1a 36 1b 53 |k_Close_All..6.S| 00004580 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 31 |TMFD R13!,{R0-R1| 00004590 32 2c 52 31 34 7d 0d 1a 40 0f 4d 4f 56 20 20 20 |2,R14}..@.MOV | 000045a0 52 30 2c 23 30 0d 1a 4a 1b 4c 44 52 20 20 20 52 |R0,#0..J.LDR R| 000045b0 31 2c 4f 6c 64 5f 56 6f 69 63 65 5f 53 6c 6f 74 |1,Old_Voice_Slot| 000045c0 0d 1a 54 1d 53 57 49 20 20 20 22 53 6f 75 6e 64 |..T.SWI "Sound| 000045d0 5f 52 65 6d 6f 76 65 56 6f 69 63 65 22 0d 1a 5e |_RemoveVoice"..^| 000045e0 04 0d 1a 68 18 4c 44 52 20 20 20 52 31 32 2c 54 |...h.LDR R12,T| 000045f0 72 6b 5f 56 6f 69 63 65 73 0d 1a 72 10 4d 4f 56 |rk_Voices..r.MOV| 00004600 20 20 20 52 31 30 2c 23 31 0d 1a 7c 16 41 44 52 | R10,#1..|.ADR| 00004610 20 20 20 52 39 2c 4f 6c 64 56 6f 69 63 65 73 0d | R9,OldVoices.| 00004620 1a 86 12 53 55 42 20 20 20 52 39 2c 52 39 2c 23 |...SUB R9,R9,#| 00004630 34 0d 1a 90 16 2e 44 65 74 61 63 68 5f 54 72 6b |4.....Detach_Trk| 00004640 5f 56 6f 69 63 65 73 0d 1a 9a 10 4d 4f 56 20 20 |_Voices....MOV | 00004650 20 52 30 2c 52 31 30 0d 1a a4 1b 4c 44 52 20 20 | R0,R10....LDR | 00004660 20 52 31 2c 5b 52 39 2c 52 31 30 2c 4c 53 4c 23 | R1,[R9,R10,LSL#| 00004670 32 5d 0d 1a ae 1d 53 57 49 20 20 20 22 53 6f 75 |2]....SWI "Sou| 00004680 6e 64 5f 41 74 74 61 63 68 56 6f 69 63 65 22 0d |nd_AttachVoice".| 00004690 1a b8 14 41 44 44 20 20 20 52 31 30 2c 52 31 30 |...ADD R10,R10| 000046a0 2c 23 31 0d 1a c2 11 43 4d 50 20 20 20 52 31 30 |,#1....CMP R10| 000046b0 2c 52 31 32 0d 1a cc 1b 42 4c 45 20 20 20 44 65 |,R12....BLE De| 000046c0 74 61 63 68 5f 54 72 6b 5f 56 6f 69 63 65 73 0d |tach_Trk_Voices.| 000046d0 1a d6 04 0d 1a e0 17 41 44 52 20 20 20 52 39 2c |.......ADR R9,| 000046e0 4f 6c 64 53 74 65 72 65 6f 73 0d 1a ea 10 4d 4f |OldStereos....MO| 000046f0 56 20 20 20 52 31 30 2c 23 31 0d 1a f4 14 2e 52 |V R10,#1.....R| 00004700 65 73 74 6f 72 65 5f 53 74 65 72 65 6f 73 0d 1a |estore_Stereos..| 00004710 fe 10 4d 4f 56 20 20 20 52 30 2c 52 31 30 0d 1b |..MOV R0,R10..| 00004720 08 14 4c 44 52 42 20 20 52 31 2c 5b 52 39 5d 2c |..LDRB R1,[R9],| 00004730 23 31 0d 1b 12 18 53 57 49 20 20 20 22 53 6f 75 |#1....SWI "Sou| 00004740 6e 64 5f 53 74 65 72 65 6f 22 0d 1b 1c 14 41 44 |nd_Stereo"....AD| 00004750 44 20 20 20 52 31 30 2c 52 31 30 2c 23 31 0d 1b |D R10,R10,#1..| 00004760 26 11 43 4d 50 20 20 20 52 31 30 2c 52 31 32 0d |&.CMP R10,R12.| 00004770 1b 30 19 42 4c 45 20 20 20 52 65 73 74 6f 72 65 |.0.BLE Restore| 00004780 5f 53 74 65 72 65 6f 73 0d 1b 3a 04 0d 1b 44 19 |_Stereos..:...D.| 00004790 41 44 52 20 20 20 52 39 2c 4f 6c 64 43 6f 6e 66 |ADR R9,OldConf| 000047a0 69 67 75 72 65 0d 1b 4e 14 4c 44 4d 49 41 20 52 |igure..N.LDMIA R| 000047b0 39 2c 7b 52 30 2d 52 34 7d 0d 1b 58 1b 53 57 49 |9,{R0-R4}..X.SWI| 000047c0 20 20 20 22 53 6f 75 6e 64 5f 43 6f 6e 66 69 67 | "Sound_Config| 000047d0 75 72 65 22 0d 1b 62 1b 4c 44 4d 46 44 20 52 31 |ure"..b.LDMFD R1| 000047e0 33 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 5e 0d |3!,{R0-R12,PC}^.| 000047f0 1b 6c 04 0d 1b 76 13 2e 4f 6c 64 5f 56 6f 69 63 |.l...v..Old_Voic| 00004800 65 5f 53 6c 6f 74 0d 1b 80 0a 45 51 55 44 20 30 |e_Slot....EQUD 0| 00004810 0d 1b 8a 14 2e 47 65 74 5f 50 65 72 69 6f 64 73 |.....Get_Periods| 00004820 5f 41 64 72 0d 1b 94 1e 41 44 52 20 20 20 52 31 |_Adr....ADR R1| 00004830 32 2c 54 72 6b 5f 50 65 72 69 6f 64 73 5f 4c 69 |2,Trk_Periods_Li| 00004840 73 74 0d 1b 9e 10 4d 4f 56 20 20 20 50 43 2c 52 |st....MOV PC,R| 00004850 31 34 0d 1b a8 15 2e 54 72 6b 5f 50 65 72 69 6f |14.....Trk_Perio| 00004860 64 73 5f 4c 69 73 74 0d 1b b2 2f 45 51 55 44 20 |ds_List.../EQUD | 00004870 26 30 33 35 38 3a 45 51 55 44 20 26 30 33 32 38 |&0358:EQUD &0328| 00004880 3a 45 51 55 44 20 26 30 32 46 41 3a 45 51 55 44 |:EQUD &02FA:EQUD| 00004890 20 26 30 32 44 30 0d 1b bc 2f 45 51 55 44 20 26 | &02D0.../EQUD &| 000048a0 30 32 41 36 3a 45 51 55 44 20 26 30 32 38 30 3a |02A6:EQUD &0280:| 000048b0 45 51 55 44 20 26 30 32 35 43 3a 45 51 55 44 20 |EQUD &025C:EQUD | 000048c0 26 30 32 33 41 0d 1b c6 2f 45 51 55 44 20 26 30 |&023A.../EQUD &0| 000048d0 32 31 41 3a 45 51 55 44 20 26 30 31 46 43 3a 45 |21A:EQUD &01FC:E| 000048e0 51 55 44 20 26 30 31 45 30 3a 45 51 55 44 20 26 |QUD &01E0:EQUD &| 000048f0 30 31 43 35 0d 1b d0 2f 45 51 55 44 20 26 30 31 |01C5.../EQUD &01| 00004900 41 43 3a 45 51 55 44 20 26 30 31 39 34 3a 45 51 |AC:EQUD &0194:EQ| 00004910 55 44 20 26 30 31 37 44 3a 45 51 55 44 20 26 30 |UD &017D:EQUD &0| 00004920 31 36 38 0d 1b da 2f 45 51 55 44 20 26 30 31 35 |168.../EQUD &015| 00004930 33 3a 45 51 55 44 20 26 30 31 34 30 3a 45 51 55 |3:EQUD &0140:EQU| 00004940 44 20 26 30 31 32 45 3a 45 51 55 44 20 26 30 31 |D &012E:EQUD &01| 00004950 31 44 0d 1b e4 2f 45 51 55 44 20 26 30 31 30 44 |1D.../EQUD &010D| 00004960 3a 45 51 55 44 20 26 30 30 46 45 3a 45 51 55 44 |:EQUD &00FE:EQUD| 00004970 20 26 30 30 46 30 3a 45 51 55 44 20 26 30 30 45 | &00F0:EQUD &00E| 00004980 32 0d 1b ee 2f 45 51 55 44 20 26 30 30 44 36 3a |2.../EQUD &00D6:| 00004990 45 51 55 44 20 26 30 30 43 41 3a 45 51 55 44 20 |EQUD &00CA:EQUD | 000049a0 26 30 30 42 45 3a 45 51 55 44 20 26 30 30 42 34 |&00BE:EQUD &00B4| 000049b0 0d 1b f8 2f 45 51 55 44 20 26 30 30 41 41 3a 45 |.../EQUD &00AA:E| 000049c0 51 55 44 20 26 30 30 41 30 3a 45 51 55 44 20 26 |QUD &00A0:EQUD &| 000049d0 30 30 39 37 3a 45 51 55 44 20 26 30 30 38 46 0d |0097:EQUD &008F.| 000049e0 1c 02 2f 45 51 55 44 20 26 30 30 38 37 3a 45 51 |../EQUD &0087:EQ| 000049f0 55 44 20 26 30 30 37 46 3a 45 51 55 44 20 26 30 |UD &007F:EQUD &0| 00004a00 30 37 38 3a 45 51 55 44 20 26 30 30 37 31 0d 1c |078:EQUD &0071..| 00004a10 0c 04 0d 1c 16 3a 3b 20 2a 2d 2d 2d 2d 2d 2d 2d |.....:; *-------| 00004a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 1c 20 3a |-----------*.. :| 00004a50 3b 20 2a 20 20 20 20 4c 6f 63 61 74 65 20 61 20 |; * Locate a | 00004a60 54 46 46 20 28 54 72 61 63 6b 65 72 20 46 69 6c |TFF (Tracker Fil| 00004a70 65 20 46 6f 72 6d 61 74 20 21 29 20 43 68 75 6e |e Format !) Chun| 00004a80 6b 20 20 20 20 2a 0d 1c 2a 3a 3b 20 2a 2d 2d 2d |k *..*:; *---| 00004a90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004ab0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a |---------------*| 00004ac0 0d 1c 34 3a 3b 20 2a 20 20 45 6e 74 72 79 20 70 |..4:; * Entry p| 00004ad0 61 72 61 6d 65 74 65 72 73 20 3d 20 20 20 20 20 |arameters = | 00004ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004af0 20 20 20 20 20 20 20 20 20 2a 0d 1c 3e 3a 3b 20 | *..>:; | 00004b00 2a 20 20 52 30 20 3d 3e 20 50 72 65 76 69 6f 75 |* R0 => Previou| 00004b10 73 20 43 68 75 6e 6b 20 6f 72 20 42 61 73 65 20 |s Chunk or Base | 00004b20 41 64 64 72 65 73 73 20 20 20 20 20 20 20 20 20 |Address | 00004b30 20 20 20 2a 0d 1c 48 3a 3b 20 2a 20 20 52 34 20 | *..H:; * R4 | 00004b40 3d 20 20 43 68 75 6e 63 6b 20 6e 61 6d 65 20 20 |= Chunck name | 00004b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d 1c | *..| 00004b70 52 3a 3b 20 2a 20 20 52 39 20 3d 3e 20 45 6e 66 |R:; * R9 => Enf| 00004b80 20 6f 66 20 46 69 6c 65 20 41 64 64 72 65 73 73 | of File Address| 00004b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004ba0 20 20 20 20 20 20 20 2a 0d 1c 5c 3a 3b 20 2a 2d | *..\:; *-| 00004bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004be0 2d 2a 0d 1c 66 04 0d 1c 70 0f 2e 53 65 61 72 63 |-*..f...p..Searc| 00004bf0 68 5f 54 46 46 0d 1c 7a 15 4c 44 4d 49 41 20 52 |h_TFF..z.LDMIA R| 00004c00 30 21 2c 7b 52 32 2d 52 33 7d 0d 1c 84 0f 43 4d |0!,{R2-R3}....CM| 00004c10 50 20 20 20 52 32 2c 52 34 0d 1c 8e 12 41 44 44 |P R2,R4....ADD| 00004c20 4e 45 20 52 30 2c 52 30 2c 52 33 0d 1c 98 0d ec |NE R0,R0,R3.....| 00004c30 51 20 50 43 2c 52 31 34 0d 1c a2 2b 43 4d 50 20 |Q PC,R14...+CMP | 00004c40 20 20 52 30 2c 52 39 20 20 20 20 20 20 20 20 20 | R0,R9 | 00004c50 20 20 20 20 3b 20 45 6e 64 20 4f 66 20 46 69 6c | ; End Of Fil| 00004c60 65 20 3f 0d 1c ac 3e 4d 4f 56 47 45 20 50 43 2c |e ?...>MOVGE PC,| 00004c70 52 31 34 20 20 20 20 20 20 20 20 20 20 20 20 3b |R14 ;| 00004c80 20 53 68 6f 75 6c 64 20 64 69 73 70 6c 61 79 20 | Should display | 00004c90 61 6e 20 65 72 72 6f 72 20 68 65 72 65 20 28 21 |an error here (!| 00004ca0 29 0d 1c b6 14 42 20 20 20 20 20 53 65 61 72 63 |)....B Searc| 00004cb0 68 5f 54 46 46 0d 1c c0 17 2e 47 65 74 5f 50 61 |h_TFF.....Get_Pa| 00004cc0 74 74 65 72 6e 73 5f 54 61 62 6c 65 0d 1c ca 1c |tterns_Table....| 00004cd0 41 44 52 20 20 20 52 31 31 2c 50 61 74 74 65 72 |ADR R11,Patter| 00004ce0 6e 73 5f 54 61 62 6c 65 0d 1c d4 10 4d 4f 56 20 |ns_Table....MOV | 00004cf0 20 20 50 43 2c 52 31 34 0d 1c de 04 0d 1c e8 13 | PC,R14........| 00004d00 2e 50 61 74 74 65 72 6e 73 5f 54 61 62 6c 65 0d |.Patterns_Table.| 00004d10 1c f2 18 5d 3a 50 25 2b 3d 32 35 36 3a 5b 4f 50 |...]:P%+=256:[OP| 00004d20 54 20 50 61 73 73 25 0d 1c fc 04 0d 1d 06 46 3b |T Pass%.......F;| 00004d30 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | *--------------| 00004d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004d70 2a 0d 1d 10 46 3b 20 2a 20 20 46 69 6c 6c 20 73 |*...F; * Fill s| 00004d80 6f 75 6e 64 20 62 75 66 66 65 72 20 77 69 74 68 |ound buffer with| 00004d90 6f 75 74 20 6c 6f 6f 70 20 28 4e 6f 74 20 62 65 |out loop (Not be| 00004da0 61 75 74 69 66 75 6c 6c 20 62 75 74 20 66 61 73 |autifull but fas| 00004db0 74 65 72 29 20 20 2a 0d 1d 1a 46 3b 20 2a 2d 2d |ter) *...F; *--| 00004dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00004df0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 0d 1d 24 |------------*..$| 00004e00 04 0d 1d 2e 0e 2e 46 75 6c 6c 5f 46 69 6c 6c 0d |......Full_Fill.| 00004e10 1d 38 05 5d 0d 1d 42 15 e3 20 46 69 6c 6c 53 42 |.8.]..B.. FillSB| 00004e20 25 3d 31 20 b8 20 32 30 38 0d 1d 4c 05 5b 0d 1d |%=1 . 208..L.[..| 00004e30 56 0d 4f 50 54 20 50 61 73 73 25 0d 1d 60 1b 4c |V.OPT Pass%..`.L| 00004e40 44 52 42 20 20 52 38 2c 5b 52 34 2c 52 30 2c 4c |DRB R8,[R4,R0,L| 00004e50 53 52 23 31 36 5d 0d 1d 6a 12 53 55 42 53 20 20 |SR#16]..j.SUBS | 00004e60 52 38 2c 52 38 2c 52 35 0d 1d 74 0f 4d 4f 56 4d |R8,R8,R5..t.MOVM| 00004e70 49 20 52 38 2c 23 30 0d 1d 7e 16 53 54 52 42 20 |I R8,#0..~.STRB | 00004e80 20 52 38 2c 5b 52 31 32 5d 2c 52 31 31 0d 1d 88 | R8,[R12],R11...| 00004e90 12 41 44 44 20 20 20 52 30 2c 52 30 2c 52 31 0d |.ADD R0,R0,R1.| 00004ea0 1d 92 05 5d 0d 1d 9c 05 ed 0d 1d a6 05 5b 0d 1d |...].........[..| 00004eb0 b0 0f 4f 50 54 20 20 20 50 61 73 73 25 0d 1d ba |..OPT Pass%...| 00004ec0 11 53 54 52 20 20 20 52 30 2c 5b 52 39 5d 0d 1d |.STR R0,[R9]..| 00004ed0 c4 17 4d 4f 56 20 20 20 52 30 2c 23 25 30 30 30 |..MOV R0,#%000| 00004ee0 30 31 30 30 30 0d 1d ce 13 4c 44 4d 46 44 20 52 |01000....LDMFD R| 00004ef0 31 33 21 2c 7b 50 43 7d 0d 1d d8 04 0d 1d e2 04 |13!,{PC}........| 00004f00 0d 1d ec 18 2e 47 65 74 5f 46 72 65 71 75 65 6e |.....Get_Frequen| 00004f10 63 65 5f 54 61 62 6c 65 0d 1d f6 43 41 44 52 20 |ce_Table...CADR | 00004f20 20 20 52 38 2c 46 72 65 71 75 65 6e 63 65 5f 54 | R8,Frequence_T| 00004f30 61 62 6c 65 31 20 20 20 20 3b 20 3d 3e 20 46 72 |able1 ; => Fr| 00004f40 65 71 20 54 61 62 6c 65 20 46 6f 72 20 31 20 26 |eq Table For 1 &| 00004f50 20 32 20 43 68 61 6e 6e 65 6c 73 0d 1e 00 10 43 | 2 Channels....C| 00004f60 4d 50 20 20 20 52 31 31 2c 23 33 0d 1e 0a 43 41 |MP R11,#3...CA| 00004f70 44 44 47 45 20 52 38 2c 52 38 2c 23 34 30 39 36 |DDGE R8,R8,#4096| 00004f80 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 3d 3e | ; =>| 00004f90 20 46 72 65 71 20 54 61 62 6c 65 20 46 6f 72 20 | Freq Table For | 00004fa0 33 20 26 20 34 20 43 68 61 6e 6e 65 6c 73 0d 1e |3 & 4 Channels..| 00004fb0 14 10 43 4d 50 20 20 20 52 31 31 2c 23 35 0d 1e |..CMP R11,#5..| 00004fc0 1e 43 41 44 44 47 45 20 52 38 2c 52 38 2c 23 34 |.CADDGE R8,R8,#4| 00004fd0 30 39 36 20 20 20 20 20 20 20 20 20 20 20 20 3b |096 ;| 00004fe0 20 3d 3e 20 46 72 65 71 20 54 61 62 6c 65 20 46 | => Freq Table F| 00004ff0 6f 72 20 35 20 2d 20 38 20 43 68 61 6e 6e 65 6c |or 5 - 8 Channel| 00005000 73 0d 1e 28 10 4d 4f 56 20 20 20 50 43 2c 52 31 |s..(.MOV PC,R1| 00005010 34 0d 1e 32 04 0d 1e 3c 15 2e 46 72 65 71 75 65 |4..2...<..Freque| 00005020 6e 63 65 5f 54 61 62 6c 65 31 0d 1e 46 19 5d 3a |nce_Table1..F.]:| 00005030 50 25 2b 3d 34 30 39 36 3a 5b 4f 50 54 20 50 61 |P%+=4096:[OPT Pa| 00005040 73 73 25 0d 1e 50 15 2e 46 72 65 71 75 65 6e 63 |ss%..P..Frequenc| 00005050 65 5f 54 61 62 6c 65 32 0d 1e 5a 19 5d 3a 50 25 |e_Table2..Z.]:P%| 00005060 2b 3d 34 30 39 36 3a 5b 4f 50 54 20 50 61 73 73 |+=4096:[OPT Pass| 00005070 25 0d 1e 64 15 2e 46 72 65 71 75 65 6e 63 65 5f |%..d..Frequence_| 00005080 54 61 62 6c 65 33 0d 1e 6e 19 5d 3a 50 25 2b 3d |Table3..n.]:P%+=| 00005090 34 30 39 36 3a 5b 4f 50 54 20 50 61 73 73 25 0d |4096:[OPT Pass%.| 000050a0 1e 78 0d 2e 45 6e 64 5f 43 6f 64 65 0d 1e 82 05 |.x..End_Code....| 000050b0 5d 0d 1e 8c 05 ed 0d 1e 96 04 0d 1e a0 17 e3 20 |].............. | 000050c0 50 65 72 69 6f 64 73 25 3d 31 20 b8 20 31 30 32 |Periods%=1 . 102| 000050d0 30 0d 1e aa 49 46 72 65 71 75 65 6e 63 65 5f 54 |0...IFrequence_T| 000050e0 61 62 6c 65 31 21 28 50 65 72 69 6f 64 73 25 2a |able1!(Periods%*| 000050f0 34 29 3d 28 28 33 35 37 35 38 37 32 2f 50 65 72 |4)=((3575872/Per| 00005100 69 6f 64 73 25 29 2f 28 31 30 30 30 30 30 30 2f |iods%)/(1000000/| 00005110 33 37 29 29 2a 36 30 30 30 30 0d 1e b4 05 ed 0d |37))*60000......| 00005120 1e be 17 e3 20 50 65 72 69 6f 64 73 25 3d 31 20 |.... Periods%=1 | 00005130 b8 20 31 30 32 30 0d 1e c8 52 46 72 65 71 75 65 |. 1020...RFreque| 00005140 6e 63 65 5f 54 61 62 6c 65 32 21 28 50 65 72 69 |nce_Table2!(Peri| 00005150 6f 64 73 25 2a 34 29 3d 28 28 33 35 37 35 38 37 |ods%*4)=((357587| 00005160 32 2f 50 65 72 69 6f 64 73 25 29 2f 28 31 30 30 |2/Periods%)/(100| 00005170 30 30 30 30 2f 53 61 6d 70 6c 65 5f 52 61 74 65 |0000/Sample_Rate| 00005180 29 29 2a 36 30 30 30 30 0d 1e d2 05 ed 0d 1e dc |))*60000........| 00005190 17 e3 20 50 65 72 69 6f 64 73 25 3d 31 20 b8 20 |.. Periods%=1 . | 000051a0 31 30 32 30 0d 1e e6 49 46 72 65 71 75 65 6e 63 |1020...IFrequenc| 000051b0 65 5f 54 61 62 6c 65 33 21 28 50 65 72 69 6f 64 |e_Table3!(Period| 000051c0 73 25 2a 34 29 3d 28 28 33 35 37 35 38 37 32 2f |s%*4)=((3575872/| 000051d0 50 65 72 69 6f 64 73 25 29 2f 28 31 30 30 30 30 |Periods%)/(10000| 000051e0 30 30 2f 32 36 29 29 2a 36 30 30 30 30 0d 1e f0 |00/26))*60000...| 000051f0 05 ed 0d 1e fa 12 d6 20 50 6c 61 79 5f 52 6f 75 |....... Play_Rou| 00005200 74 69 6e 65 0d 1f 04 05 e0 0d ff |tine.......| 0000520b