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