Home » Archimedes archive » Apps » Tracker - Program Disc (1990)(The Serial Port).adf » SourceCode/Play_Mod_S

SourceCode/Play_Mod_S

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Apps » Tracker - Program Disc (1990)(The Serial Port).adf
Filename: SourceCode/Play_Mod_S
Read OK:
File size: 6D61 bytes
Load address: FFFFFB42
Exec address: CD9BA5FE
File contents
   10REM >Play_Mod_S
   20:
   30REM *-----------------------------------------------------------------*
   40REM *                                                                 *
   50REM *         TRACKER MODULES PLAYER (1-8 VOICES) Version 2.06        *
   60REM *                                                                 *
   70REM *-----------------------------------------------------------------*
   80REM *            Written by Fabrice MERCIER & Hugo FIENNES            *
   90REM *-----------------------------------------------------------------*
  100REM *                     (c) 1990 The Serial Port                    *
  110REM *-----------------------------------------------------------------*
  120:
  130REM Reserve space for the module
  140DIM code 32768
  150Sample_Rate=34
  160PRINT'"Assembling code..."
  170FOR Pass%=0 TO 2 STEP 2
  180P%=code
  190[OPTPass%
  200
  210; *--------------------------------*
  220; *    Module Header (40 Bytes)    *
  230; *--------------------------------*
  240
  250EQUD  0                      ; No start code
  260EQUD  0                      ; Init code
  270EQUD  mod_kill-code          ; => Release memory/kill tune routine
  280EQUD  0                      ; No service code
  290EQUD  mod_title-code         ; => Title string
  300EQUD  mod_help-code          ; => Help string
  310EQUD  mod_command-code       ; => Command table
  320EQUD  0:EQUD 0:EQUD 0:EQUD 0
  330
  340.mod_title:EQUS "TrackerModule":EQUB 0
  350.mod_help:EQUS "Tracker Player"+CHR$9+"2.06 (03-Dec-1990) "
  360EQUS "by Fabrice Mercier & Hugo Fiennes"
  370EQUB 0:ALIGN
  380
  390; *-----------------------------*
  400; *    Command keyword table    *
  410; *-----------------------------*
  420
  430.mod_command                    ; Module command table
  440EQUS "PlayInit":EQUB 0:ALIGN    ; *PLAYINIT Command
  450EQUD Play_Init-code             ; Offset of command
  460EQUD &00010101                  ; 1 parameter, GSTrans'ed
  470EQUD PlaySyn_Error-code         ; Invalid syntax
  480EQUD Help_Init-code             ; Help text
  490
  500EQUS "PlayKill":EQUB 0:ALIGN    ; *PLAYKILL Command
  510EQUD mod_kill-code              ; Offset of command
  520EQUD 0                          ; No params
  530EQUD 0                          ; No syntax message
  540EQUD Help_Kill-code             ; Help text
  550
  560EQUS "PlayPause":EQUB 0:ALIGN   ; *PLAYPAUSE Command
  570EQUD Play_Pause-code            ; Offset of command
  580EQUD 0                          ; No params
  590EQUD 0                          ; No syntax message
  600EQUD Help_Pause-code            ; Help text
  610
  620EQUS "PlayStart":EQUB 0:ALIGN   ; *PLAYSTART Command
  630EQUD Play_Start-code            ; Offset of command
  640EQUD 0                          ; No params
  650EQUD 0                          ; No syntax message
  660EQUD Help_Start-code            ; Help text
  670
  680EQUS "SetPlayPos":EQUB 0:ALIGN  ; *SETPLAYPOS Command
  690EQUD Set_PlayPos-code
  700EQUD &00010001                  ; 1 parameter...
  710EQUD PlayPosSyn_Error-code
  720EQUD Help_PlayPos-code
  730
  740EQUD 0                          ; Terminate table
  750
  760; *-----------------*
  770; *  EDIT Messages  *
  780; *-----------------*
  790
  800.Help_Pause
  810EQUS "*PlayPause will pause the currently playing tune until *PlayStart Command. "+CHR$13
  820EQUS "Syntax: *PlayPause"
  830EQUB 0
  840ALIGN
  850.Help_Start
  860EQUS "*PlayStart will play the tune after a *PlayPause Command."+CHR$13
  870EQUS "Syntax: *PlayStart"
  880EQUB 0
  890ALIGN
  900.Help_Kill
  910EQUS "*PlayKill will stop & kill the currently playing tune & free memory."+CHR$13
  920EQUS "Syntax: *PlayKill"
  930EQUB 0
  940ALIGN
  950.Help_PlayPos
  960EQUS "*SetPlayPos will set position in sequence table"+CHR$13
  970EQUS "Syntax: *SetPlayPos 0-127"
  980EQUB 0
  990ALIGN
 1000.Help_Init
 1010EQUS "*PlayInit load & start to play the specified Tracker module"+CHR$13
 1020EQUS "Syntax: *PlayInit <filename>"
 1030EQUB 0
 1040ALIGN
 1050
 1060; Invalid syntax messages
 1070; ~~~~~~~~~~~~~~~~~~~~~~~
 1080.PlaySyn_Error
 1090EQUS "Syntax: *PlayMod <filename>"
 1100EQUB 0:ALIGN
 1110.PlayPosSyn_Error
 1120EQUS "Syntax: *SetPlayPos 0-127"
 1130EQUB 0:ALIGN
 1140
 1150; *-----------------------------------*
 1160; *  Kill interrupt & release memory  *
 1170; *-----------------------------------*
 1180
 1190.mod_kill
 1200STMFD R13!,{R0-R12,R14}      ; Store return
 1210LDR   R0,Play_Flag           ; Still playing?
 1220CMP   R0,#0
 1230LDMEQFD R13!,{R0-R12,PC}
 1240
 1250MOV   R0,#13:MOV R1,#4:SWI "OS_Byte" ; Disable event
 1260
 1270MOV   R0,#&10
 1280BL    Get_Intr_Adr           ; Return R1=>Interrupt address
 1290MOV   R2,#0
 1300SWI   "OS_Release"
 1310MOV   R0,#0
 1320STR   R0,Play_Flag
 1330BL    Trk_Close_All
 1340LDR   R2,[R12]
 1350CMP   R2,#0                  ; None allocated?
 1360LDMEQFD R13!,{R0-R12,PC}     ; Ok return
 1370MOV   R0,#7                  ; Free it up
 1380SWI   "XOS_Module"
 1390MOV   R0,#0
 1400STRVC R0,[R12]
 1410LDMFD R13!,{R0-R12,PC}       ; Bye!
 1420
 1430.Play_Pause
 1440STMFD R13!,{R0-R12,R14}
 1450MOV   R0,#0
 1460STR   R0,Play_Status         ; Play status = 0 = Pause
 1470LDMFD R13!,{R0-R12,PC}
 1480
 1490; *-----------------------------------------------------*
 1500; *  PLAYSTART = Plays music after a PlayPause command  *
 1510; *-----------------------------------------------------*
 1520
 1530.Play_Start
 1540STMFD R13!,{R0-R12,R14}
 1550MOV   R0,#1
 1560STR   R0,Play_Status         ; Play status = 1 = Play
 1570LDMFD R13!,{R0-R12,PC}
 1580
 1590.Play_Status
 1600EQUD 1
 1610
 1620; *----------------------------------------------*
 1630; *  PLAYPOS = Set position in sequence (0-127)  *
 1640; *----------------------------------------------*
 1650
 1660.Set_PlayPos
 1670STMFD R13!,{R0-R12,R14}
 1680MOV   R1,R0                  ; R1 => String
 1690MOV   R0,#10                 ; Base 10
 1700ORR   R0,R0,#&A0<<24         ; Number (0-127)
 1710MOV   R2,#&7F
 1720SWI   "OS_ReadUnsigned"
 1730BL    Get_Trk_Infos_Block
 1740LDR   R4,[R12,#4]            ; R4 = Music length
 1750CMP   R2,R4                  ; Check if position > maxi music length
 1760LDMGTFD R13!,{R0-R12,PC}
 1770STR   R2,[R12],#8            ; Set position in sequence
 1780MOV   R3,#0
 1790STR   R3,[R12]               ; Position in pattern = 0
 1800LDMFD R13!,{R0-R12,PC}
 1810
 1820; *---------------------------------------------------------*
 1830; *  PLAYINIT = Load Music, Init interrupt & Start playing  *
 1840; *---------------------------------------------------------*
 1850
 1860.Play_Init
 1870STMFD R13!,{R0-R12,R14}
 1880BL    mod_kill          ; Stop any current tune
 1890MOV   R1,R0             ; R1->filename
 1900MOV   R0,#5             ; Read catalogue info
 1910SWI   "XOS_File"
 1920BVC   okfile
 1930SWI   "XOS_WriteS"      ; Write error message
 1940EQUS  "File error"
 1950EQUB  13:EQUB 10:EQUB 0:ALIGN
 1960LDMFD R13!,{R0-R12,PC}
 1970
 1980.okfile
 1990MOV   R3,R4             ; Try to get memory
 2000MOV   R0,#6
 2010SWI   "XOS_Module"
 2020BVC   okmem
 2030SWI   "XOS_WriteS"      ; Write error message
 2040EQUS  "No room for module"
 2050EQUB  13:EQUB 10:EQUB 0:ALIGN
 2060LDMFD R13!,{R0-R12,PC}
 2070
 2080.okmem
 2090STR   R2,[R12]
 2100STR   R2,Trk_Base       ; Save music base address
 2110MOV   R0,#16
 2120MOV   R3,#0
 2130SWI   "XOS_File"        ; Load the file
 2140BVC   okload
 2150SWI   "OS_WriteS"       ; Write error message
 2160EQUS  "Can't load file"
 2170EQUB  13:EQUB 10:EQUB 0:ALIGN
 2180BL    mod_kill
 2190LDMFD R13!,{R0-R12,PC}
 2200
 2210.okload
 2220BL    Trk_Init_All      ; Init Tracker Variables & Sound System
 2230MOV   R0,#&10           ; Comment this lot is using callevery
 2240BL    Get_Intr_Adr      ; Return R1=>Interrupt address
 2250MOV   R2,#0             ; R12
 2260SWI   "OS_Claim"
 2270MOV   R0,#14
 2280MOV   R1,#4
 2290SWI   "OS_Byte"
 2300MOV   R0,#1
 2310STR   R0,Play_Flag
 2320MOV   R0,#1
 2330STR   R0,Play_Status         ; Play status = 1 = Play
 2340LDMFD R13!,{R0-R12,PC}
 2350
 2360.Play_Flag
 2370EQUD  0                 ; <>0 if tune in progress
 2380
 2390; *--------------------------------------------------*
 2400; *    Init Tracker Variables & Init Sound System    *
 2410; *--------------------------------------------------*
 2420
 2430.Trk_Init_All
 2440STMFD R13!,{R14}
 2450ADR   R12,Trk_Infos_Block ; R12 => Tracker Pointers & Counters
 2460MOV   R1,#0
 2470STR   R1,[R12],#4         ; Set position in Sequence to zero
 2480
 2490LDR   R0,Trk_Base         ; R0 => Music Base Address
 2500LDR   R9,[R0,#4]          ; R9 = File Length (-8)
 2510ADD   R0,R0,#8            ; R0 => First Chunk Address
 2520ADD   R9,R0,R9            ; R9 => End of file
 2530MOV   R10,R0
 2540
 2550LDR   R4,MLEN_Chunk
 2560BL    Search_TFF
 2570LDR   R1,[R0]             ; R1 = Music Length (=Sequence length)
 2580STR   R1,[R12],#4
 2590MOV   R1,#0
 2600STR   R1,[R12],#4         ; Pattern line counter to zero
 2610
 2620MOV   R0,R10
 2630LDR   R4,PLEN_Chunk
 2640BL    Search_TFF
 2650STR   R0,[R12],#4         ; Save Pattern Table Base Address
 2660
 2670MOV   R0,R10
 2680LDR   R4,SEQU_Chunk
 2690BL    Search_TFF
 2700STR   R0,[R12],#4         ; Save Sequence Base Address
 2710
 2720MOV   R0,R10
 2730LDR   R4,PNUM_Chunk
 2740BL    Search_TFF
 2750LDR   R6,[R0]             ; R6 = Patterns number in music
 2760
 2770BL    Get_Patterns_Table  ; R11 => on Patterns Table
 2780STR   R11,[R12],#4
 2790LDR   R4,PATT_Chunk
 2800MOV   R0,R10
 2810.Search_Patterns
 2820BL    Search_TFF
 2830STR   R0,[R11],#4         ; Save Pattern Address in Patterns Table
 2840ADD   R0,R0,R3            ; Add pattern length to chunk (=next pattern)
 2850SUBS  R6,R6,#1
 2860BGT   Search_Patterns
 2870
 2880ADR   R1,Trk_Samples
 2890LDR   R4,SAMP_Chunk
 2900MOV   R7,#36              ; 36 Samples Chunk in one music piece
 2910.Init_Trk_Samples
 2920BL    Search_TFF
 2930SUB   R5,R0,#8
 2940STR   R5,[R1],#4
 2950ADD   R0,R0,R3
 2960SUBS  R7,R7,#1
 2970BGT   Init_Trk_Samples
 2980
 2990MOV   R0,R10
 3000LDR   R4,MVOX_Chunk
 3010BL    Search_TFF
 3020LDR   R12,[R0]            ; R12 = Voices Number
 3030STR   R12,Trk_Voices
 3040
 3050MOV   R0,R10
 3060LDR   R4,STER_Chunk
 3070BL    Search_TFF
 3080MOV   R11,R0              ; R11 => Stereo Positions List
 3090BL    Init_Sound_System   ; Jump To Sound System Initialisation
 3100LDMFD R13!,{PC}
 3110
 3120.TINF_Chunk:EQUS "TINF"
 3130.MVOX_Chunk:EQUS "MVOX"
 3140.STER_Chunk:EQUS "STER"
 3150.MLEN_Chunk:EQUS "MLEN"
 3160.PLEN_Chunk:EQUS "PLEN"
 3170.SEQU_Chunk:EQUS "SEQU"
 3180.PNUM_Chunk:EQUS "PNUM"
 3190.PATT_Chunk:EQUS "PATT"
 3200.SAMP_Chunk:EQUS "SAMP"
 3210
 3220; *-----------------------------------------------------*
 3230; *             SOUND BUFFER FILL ROUTINES              *
 3240; *-----------------------------------------------------*
 3250; *   R9 => Tracker Infos Block (32 Byte per channel)   *
 3260; *     [00-03] ( R0 ) Phase Accumulator                *
 3270; *     [04-07] ( R1 ) Phase Increment (Cf. Frequency)  *
 3280; *     [08-11] ( R2 ) Repeat Offset                    *
 3290; *     [12-15] ( R3 ) Sample Length (or Repeat Length) *
 3300; *     [16-19] ( R4 ) Sample Address                   *
 3310; *     [20-23] ( R5 ) Sample Volume (255-Volume)       *
 3320; *     [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples)  *
 3330; *     [.....] (....) Others infos for effects         *
 3340; *-----------------------------------------------------*
 3350; *  R10 = DMA Buffer limits (+1)                       *
 3360; *  R11 = DMA Buffer Interleave Increment (1-8)        *
 3370; *  R12 = DMA Buffer base pointer (+R11)               *
 3380; *-----------------------------------------------------*
 3390
 3400.Fill_Sound_Buffer
 3410ADR   R9,Voices_Infos_Block
 3420LDR   R0,Play_Status
 3430CMP   R0,#0
 3440BEQ   Clear_Fill
 3450
 3460ADD   R9,R9,R7,LSL#5
 3470LDMIA R9,{R0-R6}
 3480
 3490CMP   R6,#0
 3500BEQ   Clear_Fill
 3510
 3520SUB   R8,R3,R0,LSR#16
 3530SUB   R8,R8,R1,LSR#8
 3540CMP   R8,#208
 3550ADRGT R2,New_Data
 3560BGT   Full_Fill
 3570
 3580.Fill_Loop
 3590]
 3600FOR Plop%=1 TO 16
 3610[
 3620OPT Pass%
 3630LDRB  R8,[R4,R0,LSR#16]
 3640SUBS  R8,R8,R5
 3650MOVMI R8,#0
 3660STRB  R8,[R12],R11
 3670ADD   R0,R0,R1
 3680]
 3690NEXT
 3700[
 3710OPT   Pass%
 3720CMP   R3,R0,LSR#16          ; End of sample ?
 3730BGE   Check_Buffer_End
 3740MOVS  R0,R2,LSL#16          ; Yes => R0=Repeat Offset
 3750BEQ   Clear_Fill            ; If no repeat then fill buffer with zeros
 3760.Check_Buffer_End
 3770CMP   R12,R10
 3780BLT   Fill_Loop
 3790
 3800ADR    R2,New_Data
 3810LDRB   R4,[R2,R7]            ; Hugo has found this system not to loose
 3820CMP    R4,#0                 ; any note/voice...
 3830STREQ  R0,[R9]
 3840MOVNE  R4,#0
 3850STRNEB R4,[R2,R7]
 3860
 3870MOV   R0,#%00001000
 3880LDMFD R13!,{PC}
 3890
 3900.Clear_Fill
 3910MOV   R5,#0
 3920STR   R5,[R9,#24]
 3930.Clear_Fill_Loop
 3940STRB  R5,[R12],R11
 3950CMP   R12,R10
 3960BLT   Clear_Fill_Loop
 3970MOV   R0,#%00001000
 3980LDMFD R13!,{PC}
 3990
 4000.Voices_Infos_Block
 4010]
 4020FOR BufBlk%=1 TO 64
 4030[OPT Pass%
 4040EQUD 0
 4050]
 4060NEXT
 4070[OPT Pass%
 4080
 4090.Trk_Base
 4100EQUD  0                  ; Music Base Address
 4110.Trk_Infos_Block
 4120EQUD  0                  ; Position Counter (In Sequence)
 4130EQUD  0                  ; Music Length
 4140EQUD  0                  ; Position Counter (In Pattern)
 4150EQUD  0                  ; => on Patterns Length Table
 4160EQUD  0                  ; => on Sequence Base Address
 4170EQUD  0                  ; => on Patterns Table (up to 64 patterns)
 4180.Trk_Voices
 4190EQUD  0                  ; Voices Number
 4200.Trk_Counter
 4210EQUD  5
 4220.Trk_Speed
 4230EQUD  6
 4240.Trk_Samples
 4250]
 4260P%+=36*4
 4270[OPT Pass%
 4280.Trk_Periods
 4290EQUD 0:EQUD 0:EQUD 0:EQUD 0
 4300EQUD 0:EQUD 0:EQUD 0:EQUD 0
 4310.Trk_Pattern_Line
 4320EQUD 0:EQUD 0:EQUD 0:EQUD 0
 4330EQUD 0:EQUD 0:EQUD 0:EQUD 0
 4340.New_Data
 4350EQUD 0:EQUD 0
 4360.Get_Infos_Block
 4370ADR  R7,Voices_Infos_Block
 4380MOV  PC,R14
 4390.Get_Trk_Infos_Block
 4400ADR  R12,Trk_Infos_Block
 4410MOV  PC,R14
 4420
 4430; *---------------------------------------------*
 4440; *    Increment/Check Counter (Tempo) Value    *
 4450; *---------------------------------------------*
 4460
 4470.Get_Intr_Adr
 4480ADR   R1,Trk_Play_Music
 4490MOV   PC,R14
 4500
 4510.Trk_Play_Music
 4520CMP   R0,#4                  ; Check if event is a VSYNC...
 4530MOVNES PC,R14
 4540STMFD R13!,{R0-R12,R14}
 4550LDR   R0,Play_Status
 4560CMP   R0,#0
 4570LDMEQFD R13!,{R0-R12,PC}
 4580
 4590LDR   R0,Trk_Counter
 4600LDR   R1,Trk_Speed
 4610ADD   R0,R0,#1
 4620CMP   R0,R1
 4630MOVGE R0,#0
 4640STR   R0,Trk_Counter
 4650BEQ   Trk_Player
 4660BNE   Trk_Effects
 4670
 4680; *------------------------------------------*
 4690; *    Play a new line of current pattern    *
 4700; *------------------------------------------*
 4710
 4720.Trk_Player
 4730ADR   R0,Trk_Infos_Block
 4740LDMIA R0,{R1-R6,R11}
 4750LDRB  R7,[R5,R1]             ; R7 = Pattern number
 4760LDR   R12,[R6,R7,LSL#2]      ; R12 => Current pattern
 4770MOV   R10,R11,LSL#2          ; R10=R11*4 = Pattern Line Length
 4780MLA   R12,R3,R10,R12         ; R12 => Current pattern line
 4790LDRB  R7,[R4,R7]             ; R7 = Pattern Length (01-64)
 4800ADD   R3,R3,#1
 4810CMP   R3,R7                  ; End of Pattern ?
 4820BLT   Write_Position
 4830MOV   R3,#0
 4840ADD   R1,R1,#1               ; Next position in Sequence Table
 4850CMP   R1,R2                  ; Last Position in Sequence Table ?
 4860MOVGE R1,#0                  ; If Yes, Clear Counter.
 4870.Write_Position
 4880STMIA R0,{R1-R3}             ; Save new position
 4890
 4900ADR   R2,Trk_Pattern_Line
 4910LDMIA R12,{R4-R11}
 4920STMIA R2,{R4-R11}
 4930ADR   R7,Voices_Infos_Block
 4940LDR   R11,Trk_Voices
 4950BL    Get_Frequence_Table   ; Return R8 => 'Frequence' Table
 4960MOV   R9,#0
 4970.Trk_VoiceLoop
 4980LDR   R5,[R12],#4           ; R5=Note+Instrument
 4990AND   R2,R5,#&FF0000
 5000MOV   R2,R2,LSR#16          ; R2=Sample number (01-36)=(0-Z)
 5010SUBS  R2,R2,#1
 5020BLT   NextOne
 5030BL    Get_New_Sample        ; Normal case = N-O S000...
 5040MOVS  R4,R5,LSR#24          ; R4=Note number  (01-36)
 5050BLGT  Get_New_Note          ; ... Get Sample & Note
 5060.NextOne
 5070BL    Trk_Effects2
 5080ADD   R7,R7,#32
 5090ADD   R9,R9,#1
 5100CMP   R9,R11
 5110BLT   Trk_VoiceLoop
 5120
 5130.EndOfPlay
 5140LDMFD R13!,{R0-R12,PC}
 5150
 5160.Get_New_Note
 5170STMFD R13!,{R12,R14}
 5180BL    Get_Periods_Adr
 5190SUB   R3,R4,#1
 5200LDR   R3,[R12,R3,LSL#2]
 5210STR   R3,[R7,#28]            ; Save period for portamento...
 5220ADR   R1,Trk_Periods
 5230STR   R3,[R1,R9,LSL#2]       ; ...and for arpeggio
 5240LDR   R3,[R8,R3,LSL#2]       ; Get phase increment
 5250STR   R3,[R7,#4]             ; & Save it in voices infos block
 5260MOV   R1,#0
 5270STR   R1,[R7,#0]             ; Clear phase accumulator
 5280LDMFD R13!,{R12,PC}^
 5290
 5300.Get_New_Sample
 5310STMFD R13!,{R4,R12,R14}
 5320ADR   R3,Trk_Samples
 5330LDR   R3,[R3,R2,LSL#2]       ; R3 => Actual Sample
 5340ADD   R4,R3,#60              ; R4 => Samples Data
 5350STR   R4,[R7,#16]
 5360MOV   R1,#1
 5370STR   R1,[R7,#24]            ; R1 = Flag Fill With Sample
 5380
 5390; Set Volume
 5400
 5410LDR   R1,[R3,#16+28]         ; R1 = Sample Volume
 5420SUBS  R4,R1,#68
 5430MOVLT R4,#0
 5440MOV   R4,R4,LSR#2
 5450RSB   R1,R1,#255
 5460STR   R1,[R7,#20]
 5470
 5480; Set Volume Command
 5490
 5500AND   R4,R5,#&FF00
 5510CMP   R4,#&1F00
 5520ANDEQ R1,R5,#&FF
 5530RSBEQ R1,R1,#&FF
 5540STREQ R1,[R7,#20]
 5550
 5560; Get & Save samples infos
 5570
 5580LDR   R1,[R3,#40+28]            ; R1 = Repeat Offset
 5590LDR   R4,[R3,#52+28]            ; R4 = Repeat Length
 5600CMP   R4,#2
 5610ADDNE R4,R4,R1
 5620LDREQ R4,[R3,#28+28]            ; R4 = Sample Length
 5630STR   R4,[R7,#12]
 5640ADDNE R1,R1,#1
 5650STR   R1,[R7,#8]                ; Sauve Repeat Offset
 5660
 5670ADR   R4,New_Data
 5680MOV   R1,#1
 5690STRB  R1,[R4,R9]
 5700
 5710LDMFD R13!,{R4,R12,PC}^
 5720
 5730; *----------------------------*
 5740; *      Effects Checking #1   *
 5750; *----------------------------*
 5760; *  'E'  = Set Stereo         *
 5770; *  'J'  = Position Jump      *
 5780; *  'V'  = Set Volume         *
 5790; *  'B'  = Pattern Break      *
 5800; *  'S'  = Set Speed          *
 5810; *----------------------------*
 5820
 5830.Trk_Effects2
 5840AND   R4,R5,#&FF00
 5850
 5860; Set Volume ('V')
 5870
 5880CMP   R4,#&1F00
 5890BNE   No_Set_Volume
 5900AND   R1,R5,#&FF
 5910RSB   R1,R1,#&FF
 5920STR   R1,[R7,#20]
 5930MOV   PC,R14
 5940.No_Set_Volume
 5950
 5960; Set Speed  ('S')
 5970
 5980CMP   R4,#&1C00
 5990BNE   No_Set_Speed
 6000ANDS  R1,R5,#&0F
 6010STRNE R1,Trk_Speed
 6020MOV   PC,R14
 6030.No_Set_Speed
 6040
 6050; Pattern Break  ('B')
 6060
 6070CMP   R4,#&B00
 6080BNE   No_Pattern_Break
 6090ADR   R0,Trk_Infos_Block
 6100LDMIA R0,{R1-R3}
 6110ADD   R1,R1,#1                      ; Position = Position + 1
 6120CMP   R1,R2
 6130MOVEQ R1,#0
 6140MOV   R3,#0                         ; At the start of next pattern
 6150STMIA R0,{R1-R3}
 6160MOV   PC,R14
 6170.No_Pattern_Break
 6180
 6190; Position Jump ('J')
 6200
 6210CMP   R4,#&1300
 6220BNE   No_Position_Jump
 6230ADR   R0,Trk_Infos_Block
 6240AND   R1,R5,#&7F
 6250STR   R1,[R0]
 6260MOV   R1,#0
 6270STR   R1,[R0,#8]
 6280MOV   PC,R14
 6290.No_Position_Jump
 6300
 6310; Line Jump ('L')
 6320
 6330CMP   R4,#&1500
 6340BNE   No_Line_Jump
 6350AND   R1,R5,#&F
 6360MOV   R2,R5,LSR#4
 6370ANDS  R2,R2,#&F
 6380MOVGT R3,#10
 6390MLAGT R1,R2,R3,R1
 6400CMP   R1,#63
 6410ADRLE R0,Trk_Infos_Block
 6420STRLE R1,[R0,#8]
 6430MOV   PC,R14
 6440.No_Line_Jump
 6450
 6460; Set STEREO Position ('E')
 6470
 6480CMP   R4,#&E00
 6490BNE   No_Set_Stereo
 6500ADR   R10,Stereo_Table
 6510ANDS  R2,R5,#&0F          ; R2 = Stereo position (1-7)
 6520MOVEQ PC,R14
 6530CMP   R2,#7
 6540MOVGT PC,R14
 6550SUB   R2,R2,#1
 6560LDR   R1,[R10,R2,LSL#2]
 6570ADD   R0,R9,#1            ; R0 = Voice Number
 6580STMFD R13!,{R8,R9}        ; Save R14 before SWI as we are in IRQ mode
 6590MOV   R9,PC
 6600ORR   R8,R9,#3
 6610TEQP  R8,#0
 6620MOVNV R0,R0
 6630STMFD R13!,{R14}
 6640SWI   "Sound_Stereo"
 6650LDMFD R13!,{R14}
 6660TEQP  R9,#0
 6670MOVNV R0,R0
 6680LDMFD R13!,{R8,R9}
 6690.No_Set_Stereo
 6700MOV   PC,R14
 6710
 6720; *---------------------------*
 6730; *    Effects Checking #2    *
 6740; *---------------------------*
 6750; * '0'  = Arpeggio           *
 6760; * '1'  = Portamento Up      *
 6770; * '2'  = Portamento Down    *
 6780; * 'G'  = Slide Volume Up    *
 6790; * 'H'  = Slide Volume Down  *
 6800; *---------------------------*
 6810
 6820.Trk_Effects
 6830ADR   R9,Trk_Pattern_Line
 6840ADR   R10,Trk_Periods
 6850LDR   R11,Trk_Voices       ; R11 = Voices Number
 6860BL    Get_Frequence_Table  ; R8 => Frequence Table
 6870BL    Get_Infos_Block      ; R7 => Infos Block (32 Byte / Channel)
 6880MOV   R2,#0
 6890.CheckEffectsLoop
 6900LDR   R1,[R9,R2,LSL#2]
 6910AND   R3,R1,#&00FF         ; R3 = Effect Data
 6920MOV   R1,R1,LSR#8
 6930AND   R1,R1,#&FF           ; R1 = Effect Type
 6940
 6950CMP   R1,#&10
 6960BNE   No_Slide_Vol_Up
 6970AND   R3,R3,#&FF
 6980ADD   R4,R7,R2,LSL#5
 6990LDR   R5,[R4,#20]           ; R5=255-Volume
 7000RSB   R5,R5,#255
 7010ADD   R5,R5,R3
 7020CMP   R5,#&FF
 7030MOVGT R5,#&FF
 7040RSB   R5,R5,#255
 7050STR   R5,[R4,#20]
 7060B     CheckNextVox
 7070.No_Slide_Vol_Up
 7080
 7090CMP   R1,#&11
 7100BNE   No_Slide_Vol_Down
 7110AND   R3,R3,#&FF
 7120ADD   R4,R7,R2,LSL#5
 7130LDR   R5,[R4,#20]         ; R5=255-Volume
 7140RSB   R5,R5,#255
 7150SUBS  R5,R5,R3
 7160MOVLT R5,#0
 7170RSB   R5,R5,#255
 7180STR   R5,[R4,#20]
 7190B     CheckNextVox
 7200.No_Slide_Vol_Down
 7210
 7220CMP   R1,#1
 7230BNE   NoPortUp
 7240ADD   R4,R7,R2,LSL#5
 7250LDR   R5,[R4,#28]         ; R5=Actual Period
 7260SUB   R5,R5,R3
 7270CMP   R5,#&50
 7280MOVLT R5,#&50
 7290STR   R5,[R4,#28]
 7300LDR   R5,[R8,R5,LSL#2]
 7310STR   R5,[R4,#4]
 7320B     CheckNextVox
 7330.NoPortUp
 7340
 7350CMP   R1,#2
 7360BNE   NoPortDown
 7370ADD   R4,R7,R2,LSL#5
 7380LDR   R5,[R4,#28]         ; Hauteur Note Actuelle
 7390ADD   R5,R5,R3
 7400CMP   R5,#&3F0
 7410MOVGT R5,#&3F0
 7420STR   R5,[R4,#28]
 7430LDR   R5,[R8,R5,LSL#2]    ; Get phase increment...
 7440STR   R5,[R4,#4]          ; ...Save it
 7450B     CheckNextVox
 7460.NoPortDown
 7470
 7480CMP   R1,#0
 7490BLEQ  Trk_Arpeggio
 7500
 7510.CheckNextVox
 7520ADD   R2,R2,#1            ; Next Voice
 7530CMP   R2,R11              ; Last Voice ?
 7540BNE   CheckEffectsLoop
 7550LDMFD R13!,{R0-R12,PC}
 7560
 7570.Trk_Arpeggio
 7580STMFD R13!,{R14}
 7590CMP   R3,#0
 7600LDMEQFD R13!,{PC}
 7610LDR   R0,Trk_Counter
 7620CMP   R0,#1
 7630BEQ   Arp_Loop2
 7640CMP   R0,#2
 7650BEQ   Arp_Loop3
 7660CMP   R0,#3
 7670BEQ   Arp_Loop4
 7680CMP   R0,#4
 7690BEQ   Arp_Loop2
 7700CMP   R0,#5
 7710BEQ   Arp_Loop3
 7720LDMFD R13!,{PC}
 7730
 7740.Arp_Loop2
 7750MOV   R0,R3,LSR#4        ; R0=First nibble, then add it to current tone
 7760B     Arp_Cont
 7770.Arp_Loop3
 7780AND   R0,R3,#&0F         ; R0=Second nibble, then add it to current tone
 7790B     Arp_Cont
 7800.Arp_Loop4
 7810LDR   R3,[R10,R2,LSL#2]  ; Play current tone
 7820B     Arp_EndPart
 7830.Arp_Cont
 7840BL    Get_Periods_Adr
 7850LDR   R1,[R10,R2,LSL#2]
 7860ADD   R4,R12,#36*4
 7870.Arp_Loop5
 7880LDR   R3,[R12,R0,LSL#2]
 7890LDR   R6,[R12],#4
 7900CMP   R6,R1
 7910BEQ   Arp_EndPart
 7920B     Arp_Loop5
 7930
 7940.Arp_EndPart
 7950ADD   R12,R12,R0,LSL#2
 7960CMP   R12,R4
 7970LDMGTFD R13!,{PC}
 7980ADD   R4,R7,R2,LSL#5
 7990CMP   R3,#0
 8000LDMEQFD R13!,{PC}
 8010LDR   R5,[R8,R3,LSL#2]         ; Get phase increment...
 8020STR   R5,[R4,#4]               ; ...Save it in Voices Infos_Block
 8030.End_Effect
 8040LDMFD R13!,{PC}
 8050
 8060.Stereo_Table
 8070EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127
 8080
 8090.Voice_Control_Block
 8100B Fill_Sound_Buffer
 8110B Fill_Sound_Buffer
 8120B Fill_Sound_Buffer
 8130LDMFD R13!,{PC}
 8140LDMFD R13!,{PC}
 8150LDMFD R13!,{PC}
 8160LDMFD R13!,{PC}
 8170EQUD Voice_Name-Voice_Control_Block
 8180.Voice_Name
 8190EQUS "Tracker":EQUB 0:ALIGN
 8200
 8210; *---------------------------------*
 8220; *    Init Tracker Sound System    *
 8230; *---------------------------------*
 8240
 8250.Init_Sound_System
 8260STMFD R13!,{R0-R12,R14}
 8270LDR   R12,Trk_Voices
 8280
 8290ADR   R0,Voice_Control_Block
 8300MOV   R1,#0
 8310SWI   "Sound_InstallVoice"
 8320STR   R1,Old_Voice_Slot
 8330
 8340MOV   R10,#1
 8350ADR   R9,OldVoices
 8360SUB   R9,R9,#4
 8370.Voices_Exterminator
 8380MOV   R0,R10
 8390MOV   R1,#0
 8400SWI   "Sound_AttachVoice"
 8410STR   R1,[R9,R10,LSL#2]
 8420ADD   R10,R10,#1
 8430CMP   R10,#8
 8440BLE   Voices_Exterminator
 8450
 8460MOV   R10,#1
 8470.InitAllVoices
 8480MOV   R0,R10
 8490ADR   R1,Voice_Name
 8500SWI   "Sound_AttachNamedVoice"
 8510ADD   R10,R10,#1
 8520CMP   R10,R12
 8530BLE   InitAllVoices
 8540
 8550ADR   R7,OldStereos
 8560ADR   R10,Stereo_Table
 8570MOV   R9,#1
 8580.Set_Stereo_Loop
 8590MOV   R0,R9
 8600LDRB  R5,[R11],#1
 8610SUBS  R5,R5,#1
 8620MOVLT R5,#0
 8630LDR   R1,[R10,R5,LSL#2]
 8640SWI   "Sound_Stereo"
 8650STRB  R1,[R7],#1
 8660ADD   R9,R9,#1
 8670CMP   R9,R12
 8680BLE   Set_Stereo_Loop
 8690
 8700MOV   R0,R12                 ; Voices number
 8710MOV   R1,#208                ; Buffer length in byte per channel
 8720MOV   R2,#Sample_Rate        ; Sample Rate (34us = 29.411 Khz)
 8730MOV   R3,#0
 8740MOV   R4,#0
 8750SWI   "Sound_Configure"
 8760ADR   R9,OldConfigure
 8770STMIA R9,{R0-R4}
 8780
 8790MOV   R8,R12
 8800.SoundAllVoices
 8810MOV   R0,R8
 8820MVN   R1,#20
 8830MOV   R2,#&F0
 8840MOV   R3,#&FF
 8850SWI   "Sound_Control"
 8860SUBS  R8,R8,#1
 8870BGT   SoundAllVoices
 8880LDMFD R13!,{R0-R12,PC}^
 8890
 8900.OldVoices
 8910EQUD 0:EQUD 0:EQUD 0:EQUD 0
 8920EQUD 0:EQUD 0:EQUD 0:EQUD 0
 8930.OldConfigure
 8940EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 8950.OldStereos
 8960EQUD 0:EQUD 0
 8970
 8980; *--------------------------------*
 8990; *  Exit of Tracker Sound System  *
 9000; *--------------------------------*
 9010
 9020.Trk_Close_All
 9030STMFD R13!,{R0-R12,R14}
 9040
 9050BL    Get_Infos_Block
 9060ADD   R7,R7,#24
 9070MOV   R6,#8:MOV R5,#0
 9080.Set_Zeroes_Loop
 9090STR   R5,[R7],#32
 9100SUBS  R6,R6,#1
 9110BGT   Set_Zeroes_Loop
 9120
 9130MOV   R0,#0
 9140LDR   R1,Old_Voice_Slot
 9150SWI   "Sound_RemoveVoice"
 9160
 9170LDR   R12,Trk_Voices
 9180MOV   R10,#1
 9190ADR   R9,OldVoices
 9200SUB   R9,R9,#4
 9210.Detach_Trk_Voices
 9220MOV   R0,R10
 9230LDR   R1,[R9,R10,LSL#2]
 9240SWI   "Sound_AttachVoice"
 9250ADD   R10,R10,#1
 9260CMP   R10,R12
 9270BLE   Detach_Trk_Voices
 9280
 9290ADR   R9,OldStereos
 9300MOV   R10,#1
 9310.Restore_Stereos
 9320MOV   R0,R10
 9330LDRB  R1,[R9],#1
 9340SWI   "Sound_Stereo"
 9350ADD   R10,R10,#1
 9360CMP   R10,R12
 9370BLE   Restore_Stereos
 9380
 9390ADR   R9,OldConfigure
 9400LDMIA R9,{R0-R4}
 9410SWI   "Sound_Configure"
 9420LDMFD R13!,{R0-R12,PC}^
 9430
 9440.Old_Voice_Slot
 9450EQUD 0
 9460.Get_Periods_Adr
 9470ADR   R12,Trk_Periods_List
 9480MOV   PC,R14
 9490.Trk_Periods_List
 9500EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0
 9510EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A
 9520EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5
 9530EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168
 9540EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D
 9550EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2
 9560EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4
 9570EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F
 9580EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071
 9590
 9600; *--------------------------------------------------*
 9610; *    Locate a TFF (Tracker File Format !) Chunk    *
 9620; *--------------------------------------------------*
 9630; *  Entry parameters =                              *
 9640; *  R0 => Previous Chunk or Base Address            *
 9650; *  R4 =  Chunck name                               *
 9660; *  R9 => Enf of File Address                       *
 9670; *--------------------------------------------------*
 9680
 9690.Search_TFF
 9700LDMIA R0!,{R2-R3}
 9710CMP   R2,R4
 9720ADDNE R0,R0,R3
 9730MOVEQ PC,R14
 9740CMP   R0,R9             ; End Of File ?
 9750MOVGE PC,R14            ; Should display an error here (!)
 9760B     Search_TFF
 9770.Get_Patterns_Table
 9780ADR   R11,Patterns_Table
 9790MOV   PC,R14
 9800
 9810.Patterns_Table
 9820]:P%+=256:[OPT Pass%
 9830
 9840; *--------------------------------------------------------------*
 9850; *  Fill sound buffer without loop (Not beautifull but faster)  *
 9860; *--------------------------------------------------------------*
 9870
 9880.Full_Fill
 9890]
 9900FOR FillSB%=1 TO 208
 9910[OPT Pass%
 9920LDRB  R8,[R4,R0,LSR#16]
 9930SUBS  R8,R8,R5
 9940MOVMI R8,#0
 9950STRB  R8,[R12],R11
 9960ADD   R0,R0,R1
 9970]
 9980NEXT
 9990[OPT Pass%
10000
10010LDRB   R4,[R2,R7]            ; Hugo has found this system not to loose
10020CMP    R4,#0                 ; any note/voice...
10030STREQ  R0,[R9]
10040MOVNE  R4,#0
10050STRNEB R4,[R2,R7]
10060
10070MOV   R0,#%00001000
10080LDMFD R13!,{PC}
10090
10100.Get_Frequence_Table
10110ADR   R8,Frequence_Table1    ; => Freq Table For 1 & 2 Channels
10120CMP   R11,#3
10130ADDGE R8,R8,#4096            ; => Freq Table For 3 & 4 Channels
10140CMP   R11,#5
10150ADDGE R8,R8,#4096            ; => Freq Table For 5 - 8 Channels
10160MOV   PC,R14
10170
10180.Frequence_Table1
10190]:P%+=4096:[OPT Pass%
10200.Frequence_Table2
10210]:P%+=4096:[OPT Pass%
10220.Frequence_Table3
10230]:P%+=4096:[OPT Pass%
10240.Module_End
10250]
10260NEXT
10270
10280FOR Periods%=1 TO 1020
10290Frequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000
10300NEXT
10310FOR Periods%=1 TO 1020
10320Frequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/34))*60000
10330NEXT
10340FOR Periods%=1 TO 1020
10350Frequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000
10360NEXT
10370
10380OSCLI("SAVE %.Player_Mod "+STR$~code+" "+STR$~Module_End)
10390*SETTYPE %.Player_Mod MODULE
� >Play_Mod_S
:
I� *-----------------------------------------------------------------*
(I� *                                                                 *
2I� *         TRACKER MODULES PLAYER (1-8 VOICES) Version 2.06        *
<I� *                                                                 *
FI� *-----------------------------------------------------------------*
PI� *            Written by Fabrice MERCIER & Hugo FIENNES            *
ZI� *-----------------------------------------------------------------*
dI� *                     (c) 1990 The Serial Port                    *
nI� *-----------------------------------------------------------------*
x:
�"� Reserve space for the module
�� code 32768
�Sample_Rate=34
��'"Assembling code..."
�� Pass%=0 � 2 � 2
�P%=code
�
[OPTPass%
�
�(; *--------------------------------*
�(; *    Module Header (40 Bytes)    *
�(; *--------------------------------*
�
�0EQUD  0                      ; No start code
,EQUD  0                      ; Init code
FEQUD  mod_kill-code          ; => Release memory/kill tune routine
2EQUD  0                      ; No service code
"2EQUD  mod_title-code         ; => Title string
,1EQUD  mod_help-code          ; => Help string
63EQUD  mod_command-code       ; => Command table
@ EQUD  0:EQUD 0:EQUD 0:EQUD 0
J
T*.mod_title:EQUS "TrackerModule":EQUB 0
^<.mod_help:EQUS "Tracker Player"+�9+"2.06 (03-Dec-1990) "
h,EQUS "by Fabrice Mercier & Hugo Fiennes"
rEQUB 0:ALIGN
|
�%; *-----------------------------*
�%; *    Command keyword table    *
�%; *-----------------------------*
�
�:.mod_command                    ; Module command table
�7EQUS "PlayInit":EQUB 0:ALIGN    ; *PLAYINIT Command
�7EQUD Play_Init-code             ; Offset of command
�=EQUD &00010101                  ; 1 parameter, GSTrans'ed
�4EQUD PlaySyn_Error-code         ; Invalid syntax
�/EQUD Help_Init-code             ; Help text
�
�7EQUS "PlayKill":EQUB 0:ALIGN    ; *PLAYKILL Command
�7EQUD mod_kill-code              ; Offset of command
/EQUD 0                          ; No params
7EQUD 0                          ; No syntax message
/EQUD Help_Kill-code             ; Help text
&
08EQUS "PlayPause":EQUB 0:ALIGN   ; *PLAYPAUSE Command
:7EQUD Play_Pause-code            ; Offset of command
D/EQUD 0                          ; No params
N7EQUD 0                          ; No syntax message
X/EQUD Help_Pause-code            ; Help text
b
l8EQUS "PlayStart":EQUB 0:ALIGN   ; *PLAYSTART Command
v7EQUD Play_Start-code            ; Offset of command
�/EQUD 0                          ; No params
�7EQUD 0                          ; No syntax message
�/EQUD Help_Start-code            ; Help text
�
�9EQUS "SetPlayPos":EQUB 0:ALIGN  ; *SETPLAYPOS Command
�EQUD Set_PlayPos-code
�4EQUD &00010001                  ; 1 parameter...
�EQUD PlayPosSyn_Error-code
�EQUD Help_PlayPos-code
�
�5EQUD 0                          ; Terminate table
�
�; *-----------------*
; *  ǒ Messages  *
; *-----------------*

 .Help_Pause
*ZEQUS "*PlayPause will pause the currently playing tune until *PlayStart Command. "+�13
4EQUS "Syntax: *PlayPause"
>
EQUB 0
H	ALIGN
R.Help_Start
\HEQUS "*PlayStart will play the tune after a *PlayPause Command."+�13
fEQUS "Syntax: *PlayStart"
p
EQUB 0
z	ALIGN
�.Help_Kill
�SEQUS "*PlayKill will stop & kill the currently playing tune & free memory."+�13
�EQUS "Syntax: *PlayKill"
�
EQUB 0
�	ALIGN
�.Help_PlayPos
�>EQUS "*SetPlayPos will set position in sequence table"+�13
�$EQUS "Syntax: *SetPlayPos 0-127"
�
EQUB 0
�	ALIGN
�.Help_Init
�JEQUS "*PlayInit load & start to play the specified Tracker module"+�13
�'EQUS "Syntax: *PlayInit <filename>"

EQUB 0
	ALIGN

$; Invalid syntax messages
.; ~~~~~~~~~~~~~~~~~~~~~~~
8.PlaySyn_Error
B&EQUS "Syntax: *PlayMod <filename>"
LEQUB 0:ALIGN
V.PlayPosSyn_Error
`$EQUS "Syntax: *SetPlayPos 0-127"
jEQUB 0:ALIGN
t
~+; *-----------------------------------*
�+; *  Kill interrupt & release memory  *
�+; *-----------------------------------*
�
�
.mod_kill
�/STMFD R13!,{R0-R12,R14}      ; Store return
�1LDR   R0,Play_Flag           ; Still playing?
�CMP   R0,#0
�LDMEQFD R13!,{R0-R12,PC}
�
�8MOV   R0,#13:MOV R1,#4:SWI "OS_Byte" ; Disable event
�
�MOV   R0,#&10
?BL    Get_Intr_Adr           ; Return R1=>Interrupt address

MOV   R2,#0
SWI   "OS_Release"
MOV   R0,#0
(STR   R0,Play_Flag
2BL    Trk_Close_All
<LDR   R2,[R12]
F2CMP   R2,#0                  ; None allocated?
P,LDMEQFD R13!,{R0-R12,PC}     ; Ok return
Z-MOV   R0,#7                  ; Free it up
dSWI   "XOS_Module"
nMOV   R0,#0
xSTRVC R0,[R12]
�'LDMFD R13!,{R0-R12,PC}       ; Bye!
�
�.Play_Pause
�STMFD R13!,{R0-R12,R14}
�MOV   R0,#0
�:STR   R0,Play_Status         ; Play status = 0 = Pause
�LDMFD R13!,{R0-R12,PC}
�
�=; *-----------------------------------------------------*
�=; *  PLAYSTART = Plays music after a PlayPause command  *
�=; *-----------------------------------------------------*
�
�.Play_Start
STMFD R13!,{R0-R12,R14}
MOV   R0,#1
9STR   R0,Play_Status         ; Play status = 1 = Play
"LDMFD R13!,{R0-R12,PC}
,
6.Play_Status
@
EQUD 1
J
T6; *----------------------------------------------*
^6; *  PLAYPOS = Set position in sequence (0-127)  *
h6; *----------------------------------------------*
r
|.Set_PlayPos
�STMFD R13!,{R0-R12,R14}
�/MOV   R1,R0                  ; R1 => String
�*MOV   R0,#10                 ; Base 10
�0�R   R0,R0,#&A0<<24         ; Number (0-127)
�MOV   R2,#&7F
�SWI   "OS_ReadUnsigned"
�BL    Get_Trk_Infos_Block
�4LDR   R4,[R12,#4]            ; R4 = Music length
�HCMP   R2,R4                  ; Check if position > maxi music length
�LDMGTFD R13!,{R0-R12,PC}
�;STR   R2,[R12],#8            ; Set position in sequence
�MOV   R3,#0
�:STR   R3,[R12]               ; Position in pattern = 0
LDMFD R13!,{R0-R12,PC}

A; *---------------------------------------------------------*
&A; *  PLAYINIT = Load Music, Init interrupt & Start playing  *
0A; *---------------------------------------------------------*
:
D.Play_Init
NSTMFD R13!,{R0-R12,R14}
X3BL    mod_kill          ; Stop any current tune
b*MOV   R1,R0             ; R1->filename
l1MOV   R0,#5             ; Read catalogue info
vSWI   "XOS_File"
�BVC   okfile
�1SWI   "XOS_WriteS"      ; Write error message
�EQUS  "File error"
�!EQUB  13:EQUB 10:EQUB 0:ALIGN
�LDMFD R13!,{R0-R12,PC}
�
�.okfile
�/MOV   R3,R4             ; Try to get memory
�MOV   R0,#6
�SWI   "XOS_Module"
�BVC   okmem
�1SWI   "XOS_WriteS"      ; Write error message
�EQUS  "No room for module"
!EQUB  13:EQUB 10:EQUB 0:ALIGN
LDMFD R13!,{R0-R12,PC}

 
.okmem
*STR   R2,[R12]
45STR   R2,Trk_Base       ; Save music base address
>MOV   R0,#16
HMOV   R3,#0
R+SWI   "XOS_File"        ; Load the file
\BVC   okload
f1SWI   "OS_WriteS"       ; Write error message
pEQUS  "Can't load file"
z!EQUB  13:EQUB 10:EQUB 0:ALIGN
�BL    mod_kill
�LDMFD R13!,{R0-R12,PC}
�
�.okload
�CBL    Trk_Init_All      ; Init Tracker Variables & Sound System
�AMOV   R0,#&10           ; Comment this lot is using callevery
�:BL    Get_Intr_Adr      ; Return R1=>Interrupt address
�!MOV   R2,#0             ; R12
�SWI   "OS_Claim"
�MOV   R0,#14
�MOV   R1,#4
�SWI   "OS_Byte"
�MOV   R0,#1
	STR   R0,Play_Flag
	MOV   R0,#1
	9STR   R0,Play_Status         ; Play status = 1 = Play
	$LDMFD R13!,{R0-R12,PC}
	.
	8.Play_Flag
	B5EQUD  0                 ; <>0 if tune in progress
	L
	V:; *--------------------------------------------------*
	`:; *    Init Tracker Variables & Init Sound System    *
	j:; *--------------------------------------------------*
	t
	~.Trk_Init_All
	�STMFD R13!,{R14}
	�BADR   R12,Trk_Infos_Block ; R12 => Tracker Pointers & Counters
	�MOV   R1,#0
	�@STR   R1,[R12],#4         ; Set position in Sequence to zero
	�
	�8LDR   R0,Trk_Base         ; R0 => Music Base Address
	�5LDR   R9,[R0,#4]          ; R9 = File Length (-8)
	�9ADD   R0,R0,#8            ; R0 => First Chunk Address
	�1ADD   R9,R0,R9            ; R9 => End of file
	�MOV   R10,R0
	�
	�LDR   R4,MLEN_Chunk
BL    Search_TFF

DLDR   R1,[R0]             ; R1 = Music Length (=Sequence length)
STR   R1,[R12],#4
MOV   R1,#0
(<STR   R1,[R12],#4         ; Pattern line counter to zero
2
<MOV   R0,R10
FLDR   R4,PLEN_Chunk
PBL    Search_TFF
Z?STR   R0,[R12],#4         ; Save Pattern Table Base Address
d
nMOV   R0,R10
xLDR   R4,SEQU_Chunk
�BL    Search_TFF
�:STR   R0,[R12],#4         ; Save Sequence Base Address
�
�MOV   R0,R10
�LDR   R4,PNUM_Chunk
�BL    Search_TFF
�=LDR   R6,[R0]             ; R6 = Patterns number in music
�
�8BL    Get_Patterns_Table  ; R11 => on Patterns Table
�STR   R11,[R12],#4
�LDR   R4,PATT_Chunk
�MOV   R0,R10
�.Search_Patterns
BL    Search_TFF
FSTR   R0,[R11],#4         ; Save Pattern Address in Patterns Table
KADD   R0,R0,R3            ; Add pattern length to chunk (=next pattern)
"SUBS  R6,R6,#1
,BGT   Search_Patterns
6
@ADR   R1,Trk_Samples
JLDR   R4,SAMP_Chunk
TCMOV   R7,#36              ; 36 Samples Chunk in one music piece
^.Init_Trk_Samples
hBL    Search_TFF
rSUB   R5,R0,#8
|STR   R5,[R1],#4
�ADD   R0,R0,R3
�SUBS  R7,R7,#1
�BGT   Init_Trk_Samples
�
�MOV   R0,R10
�LDR   R4,MVOX_Chunk
�BL    Search_TFF
�3LDR   R12,[R0]            ; R12 = Voices Number
�STR   R12,Trk_Voices
�
�MOV   R0,R10
�LDR   R4,STER_Chunk
�BL    Search_TFF
<MOV   R11,R0              ; R11 => Stereo Positions List
CBL    Init_Sound_System   ; Jump To Sound System Initialisation
LDMFD R13!,{PC}
&
0.TINF_Chunk:EQUS "TINF"
:.MVOX_Chunk:EQUS "MVOX"
D.STER_Chunk:EQUS "STER"
N.MLEN_Chunk:EQUS "MLEN"
X.PLEN_Chunk:EQUS "PLEN"
b.SEQU_Chunk:EQUS "SEQU"
l.PNUM_Chunk:EQUS "PNUM"
v.PATT_Chunk:EQUS "PATT"
�.SAMP_Chunk:EQUS "SAMP"
�
�=; *-----------------------------------------------------*
�7; *             � BUFFER Ȑ ROUTINES              *
�=; *-----------------------------------------------------*
�=; *   R9 => Tracker Infos Block (32 Byte per channel)   *
�=; *     [00-03] ( R0 ) Phase Accumulator                *
�=; *     [04-07] ( R1 ) Phase Increment (Cf. Frequency)  *
�=; *     [08-11] ( R2 ) Repeat Offset                    *
�=; *     [12-15] ( R3 ) Sample Length (or Repeat Length) *
�=; *     [16-19] ( R4 ) Sample Address                   *
�=; *     [20-23] ( R5 ) Sample Volume (255-Volume)       *
�=; *     [24-27] ( R6 ) Fill Status (0=Zeros 1=Samples)  *

=; *     [.....] (....) Others infos for effects         *

=; *-----------------------------------------------------*

=; *  R10 = DMA Buffer limits (+1)                       *

 =; *  R11 = DMA Buffer Interleave Increment (1-8)        *

*=; *  R12 = DMA Buffer base pointer (+R11)               *

4=; *-----------------------------------------------------*

>

H.Fill_Sound_Buffer

RADR   R9,Voices_Infos_Block

\LDR   R0,Play_Status

fCMP   R0,#0

pBEQ   Clear_Fill

z

�ADD   R9,R9,R7,LSL#5

�LDMIA R9,{R0-R6}

�

�CMP   R6,#0

�BEQ   Clear_Fill

�

�SUB   R8,R3,R0,LSR#16

�SUB   R8,R8,R1,LSR#8

�CMP   R8,#208

�ADRGT R2,New_Data

�BGT   Full_Fill

�

�.Fill_Loop
]
� Plop%=1 � 16
[
$
OPT Pass%
.LDRB  R8,[R4,R0,LSR#16]
8SUBS  R8,R8,R5
BMOVMI R8,#0
LSTRB  R8,[R12],R11
VADD   R0,R0,R1
`]
j�
t[
~OPT   Pass%
�1CMP   R3,R0,LSR#16          ; End of sample ?
�BGE   Check_Buffer_End
�9MOVS  R0,R2,LSL#16          ; Yes => R0=Repeat Offset
�JBEQ   Clear_Fill            ; If no repeat then fill buffer with zeros
�.Check_Buffer_End
�CMP   R12,R10
�BLT   Fill_Loop
�
�ADR    R2,New_Data
�JLDRB   R4,[R2,R7]            ; Hugo has found this system not to loose
�4CMP    R4,#0                 ; any note/voice...
�STREQ  R0,[R9]
MOVNE  R4,#0

STRNEB R4,[R2,R7]

MOV   R0,#%00001000
(LDMFD R13!,{PC}
2
<.Clear_Fill
FMOV   R5,#0
PSTR   R5,[R9,#24]
Z.Clear_Fill_Loop
dSTRB  R5,[R12],R11
nCMP   R12,R10
xBLT   Clear_Fill_Loop
�MOV   R0,#%00001000
�LDMFD R13!,{PC}
�
�.Voices_Infos_Block
�]
�� BufBlk%=1 � 64
�[OPT Pass%
�
EQUD 0
�]
��
�[OPT Pass%
�
�
.Trk_Base
1EQUD  0                  ; Music Base Address
.Trk_Infos_Block
=EQUD  0                  ; Position Counter (In Sequence)
"+EQUD  0                  ; Music Length
,<EQUD  0                  ; Position Counter (In Pattern)
6:EQUD  0                  ; => on Patterns Length Table
@:EQUD  0                  ; => on Sequence Base Address
JGEQUD  0                  ; => on Patterns Table (up to 64 patterns)
T.Trk_Voices
^,EQUD  0                  ; Voices Number
h.Trk_Counter
rEQUD  5
|.Trk_Speed
�EQUD  6
�.Trk_Samples
�]
�P%+=36*4
�[OPT Pass%
�.Trk_Periods
�EQUD 0:EQUD 0:EQUD 0:EQUD 0
�EQUD 0:EQUD 0:EQUD 0:EQUD 0
�.Trk_Pattern_Line
�EQUD 0:EQUD 0:EQUD 0:EQUD 0
�EQUD 0:EQUD 0:EQUD 0:EQUD 0
�
.New_Data
�EQUD 0:EQUD 0
.Get_Infos_Block
ADR  R7,Voices_Infos_Block
MOV  PC,R14
&.Get_Trk_Infos_Block
0ADR  R12,Trk_Infos_Block
:MOV  PC,R14
D
N5; *---------------------------------------------*
X5; *    Increment/Check Counter (Tempo) Value    *
b5; *---------------------------------------------*
l
v.Get_Intr_Adr
�ADR   R1,Trk_Play_Music
�MOV   PC,R14
�
�.Trk_Play_Music
�?CMP   R0,#4                  ; Check if event is a VSYNC...
�MOVNES PC,R14
�STMFD R13!,{R0-R12,R14}
�LDR   R0,Play_Status
�CMP   R0,#0
�LDMEQFD R13!,{R0-R12,PC}
�
�LDR   R0,Trk_Counter
�LDR   R1,Trk_Speed
ADD   R0,R0,#1
CMP   R0,R1
MOVGE R0,#0
 STR   R0,Trk_Counter
*BEQ   Trk_Player
4BNE   Trk_Effects
>
H2; *------------------------------------------*
R2; *    Play a new line of current pattern    *
\2; *------------------------------------------*
f
p.Trk_Player
zADR   R0,Trk_Infos_Block
�LDMIA R0,{R1-R6,R11}
�6LDRB  R7,[R5,R1]             ; R7 = Pattern number
�9LDR   R12,[R6,R7,LSL#2]      ; R12 => Current pattern
�BMOV   R10,R11,LSL#2          ; R10=R11*4 = Pattern Line Length
�>MLA   R12,R3,R10,R12         ; R12 => Current pattern line
�>LDRB  R7,[R4,R7]             ; R7 = Pattern Length (01-64)
�ADD   R3,R3,#1
�3CMP   R3,R7                  ; End of Pattern ?
�BLT   Write_Position
�MOV   R3,#0
�BADD   R1,R1,#1               ; Next position in Sequence Table
�DCMP   R1,R2                  ; Last Position in Sequence Table ?
�9MOVGE R1,#0                  ; If Yes, Clear Counter.
.Write_Position
4STMIA R0,{R1-R3}             ; Save new position

$ADR   R2,Trk_Pattern_Line
.LDMIA R12,{R4-R11}
8STMIA R2,{R4-R11}
BADR   R7,Voices_Infos_Block
LLDR   R11,Trk_Voices
V@BL    Get_Frequence_Table   ; Return R8 => 'Frequence' Table
`MOV   R9,#0
j.Trk_VoiceLoop
t4LDR   R5,[R12],#4           ; R5=Note+Instrument
~�   R2,R5,#&FF0000
�@MOV   R2,R2,LSR#16          ; R2=Sample number (01-36)=(0-Z)
�SUBS  R2,R2,#1
�BLT   NextOne
�;BL    Get_New_Sample        ; Normal case = N-O S000...
�9MOVS  R4,R5,LSR#24          ; R4=Note number  (01-36)
�7BLGT  Get_New_Note          ; ... Get Sample & Note
�.NextOne
�BL    Trk_Effects2
�ADD   R7,R7,#32
�ADD   R9,R9,#1
�CMP   R9,R11
�BLT   Trk_VoiceLoop


.EndOfPlay
LDMFD R13!,{R0-R12,PC}

(.Get_New_Note
2STMFD R13!,{R12,R14}
<BL    Get_Periods_Adr
FSUB   R3,R4,#1
PLDR   R3,[R12,R3,LSL#2]
Z@STR   R3,[R7,#28]            ; Save period for portamento...
dADR   R1,Trk_Periods
n6STR   R3,[R1,R9,LSL#2]       ; ...and for arpeggio
x6LDR   R3,[R8,R3,LSL#2]       ; Get phase increment
�BSTR   R3,[R7,#4]             ; & Save it in voices infos block
�MOV   R1,#0
�:STR   R1,[R7,#0]             ; Clear phase accumulator
�LDMFD R13!,{R12,PC}^
�
�.Get_New_Sample
�STMFD R13!,{R4,R12,R14}
�ADR   R3,Trk_Samples
�6LDR   R3,[R3,R2,LSL#2]       ; R3 => Actual Sample
�5ADD   R4,R3,#60              ; R4 => Samples Data
�STR   R4,[R7,#16]
�MOV   R1,#1
�=STR   R1,[R7,#24]            ; R1 = Flag Fill With Sample

; Set Volume

"5LDR   R1,[R3,#16+28]         ; R1 = Sample Volume
,SUBS  R4,R1,#68
6MOVLT R4,#0
@MOV   R4,R4,LSR#2
JRSB   R1,R1,#255
TSTR   R1,[R7,#20]
^
h; Set Volume Command
r
|�   R4,R5,#&FF00
�CMP   R4,#&1F00
��EQ R1,R5,#&FF
�RSBEQ R1,R1,#&FF
�STREQ R1,[R7,#20]
�
�; Get & Save samples infos
�
�8LDR   R1,[R3,#40+28]            ; R1 = Repeat Offset
�8LDR   R4,[R3,#52+28]            ; R4 = Repeat Length
�CMP   R4,#2
�ADDNE R4,R4,R1
�8LDREQ R4,[R3,#28+28]            ; R4 = Sample Length
�STR   R4,[R7,#12]
ADDNE R1,R1,#1
9STR   R1,[R7,#8]                ; Sauve Repeat Offset

&ADR   R4,New_Data
0MOV   R1,#1
:STRB  R1,[R4,R9]
D
NLDMFD R13!,{R4,R12,PC}^
X
b$; *----------------------------*
l$; *      Effects Checking #1   *
v$; *----------------------------*
�$; *  'E'  = Set Stereo         *
�$; *  'J'  = Position Jump      *
�$; *  'V'  = Set Volume         *
�$; *  'B'  = Pattern Break      *
�$; *  'S'  = Set Speed          *
�$; *----------------------------*
�
�.Trk_Effects2
��   R4,R5,#&FF00
�
�; Set Volume ('V')
�
�CMP   R4,#&1F00
BNE   No_Set_Volume
�   R1,R5,#&FF
RSB   R1,R1,#&FF
 STR   R1,[R7,#20]
*MOV   PC,R14
4.No_Set_Volume
>
H; Set Speed  ('S')
R
\CMP   R4,#&1C00
fBNE   No_Set_Speed
p�S  R1,R5,#&0F
zSTRNE R1,Trk_Speed
�MOV   PC,R14
�.No_Set_Speed
�
�; Pattern Break  ('B')
�
�CMP   R4,#&B00
�BNE   No_Pattern_Break
�ADR   R0,Trk_Infos_Block
�LDMIA R0,{R1-R3}
�AADD   R1,R1,#1                      ; Position = Position + 1
�CMP   R1,R2
��Q R1,#0
�FMOV   R3,#0                         ; At the start of next pattern
STMIA R0,{R1-R3}
MOV   PC,R14
.No_Pattern_Break
$
.; Position Jump ('J')
8
BCMP   R4,#&1300
LBNE   No_Position_Jump
VADR   R0,Trk_Infos_Block
`�   R1,R5,#&7F
jSTR   R1,[R0]
tMOV   R1,#0
~STR   R1,[R0,#8]
�MOV   PC,R14
�.No_Position_Jump
�
�; Line Jump ('L')
�
�CMP   R4,#&1500
�BNE   No_Line_Jump
��   R1,R5,#&F
�MOV   R2,R5,LSR#4
��S  R2,R2,#&F
�MOVGT R3,#10
�MLAGT R1,R2,R3,R1
CMP   R1,#63

ADRLE R0,Trk_Infos_Block
STRLE R1,[R0,#8]
MOV   PC,R14
(.No_Line_Jump
2
<; Set Ȣ Position ('E')
F
PCMP   R4,#&E00
ZBNE   No_Set_Stereo
dADR   R10,Stereo_Table
n8�S  R2,R5,#&0F          ; R2 = Stereo position (1-7)
x
�Q PC,R14
�CMP   R2,#7
�MOVGT PC,R14
�SUB   R2,R2,#1
�LDR   R1,[R10,R2,LSL#2]
�1ADD   R0,R9,#1            ; R0 = Voice Number
�ISTMFD R13!,{R8,R9}        ; Save R14 before SWI as we are in IRQ mode
�MOV   R9,PC
��R   R8,R9,#3
�TEQP  R8,#0
�MOVNV R0,R0
�STMFD R13!,{R14}
�SWI   "Sound_Stereo"
�LDMFD R13!,{R14}
TEQP  R9,#0
MOVNV R0,R0
LDMFD R13!,{R8,R9}
".No_Set_Stereo
,MOV   PC,R14
6
@#; *---------------------------*
J#; *    Effects Checking #2    *
T#; *---------------------------*
^#; * '0'  = Arpeggio           *
h#; * '1'  = Portamento Up      *
r#; * '2'  = Portamento Down    *
|#; * 'G'  = Slide Volume Up    *
�#; * 'H'  = Slide Volume Down  *
�#; *---------------------------*
�
�.Trk_Effects
�ADR   R9,Trk_Pattern_Line
�ADR   R10,Trk_Periods
�4LDR   R11,Trk_Voices       ; R11 = Voices Number
�6BL    Get_Frequence_Table  ; R8 => Frequence Table
�FBL    Get_Infos_Block      ; R7 => Infos Block (32 Byte / Channel)
�MOV   R2,#0
�.CheckEffectsLoop
�LDR   R1,[R9,R2,LSL#2]
�/�   R3,R1,#&00FF         ; R3 = Effect Data
MOV   R1,R1,LSR#8
/�   R1,R1,#&FF           ; R1 = Effect Type

&CMP   R1,#&10
0BNE   No_Slide_Vol_Up
:�   R3,R3,#&FF
DADD   R4,R7,R2,LSL#5
N/LDR   R5,[R4,#20]           ; R5=255-Volume
XRSB   R5,R5,#255
bADD   R5,R5,R3
lCMP   R5,#&FF
vMOVGT R5,#&FF
�RSB   R5,R5,#255
�STR   R5,[R4,#20]
�B     CheckNextVox
�.No_Slide_Vol_Up
�
�CMP   R1,#&11
�BNE   No_Slide_Vol_Down
��   R3,R3,#&FF
�ADD   R4,R7,R2,LSL#5
�-LDR   R5,[R4,#20]         ; R5=255-Volume
�RSB   R5,R5,#255
�SUBS  R5,R5,R3
�MOVLT R5,#0
RSB   R5,R5,#255
STR   R5,[R4,#20]
B     CheckNextVox
 .No_Slide_Vol_Down
*
4CMP   R1,#1
>BNE   NoPortUp
HADD   R4,R7,R2,LSL#5
R0LDR   R5,[R4,#28]         ; R5=Actual Period
\SUB   R5,R5,R3
fCMP   R5,#&50
pMOVLT R5,#&50
zSTR   R5,[R4,#28]
�LDR   R5,[R8,R5,LSL#2]
�STR   R5,[R4,#4]
�B     CheckNextVox
�
.NoPortUp
�
�CMP   R1,#2
�BNE   NoPortDown
�ADD   R4,R7,R2,LSL#5
�5LDR   R5,[R4,#28]         ; Hauteur Note Actuelle
�ADD   R5,R5,R3
�CMP   R5,#&3F0
�MOVGT R5,#&3F0
�STR   R5,[R4,#28]
6LDR   R5,[R8,R5,LSL#2]    ; Get phase increment...
*STR   R5,[R4,#4]          ; ...Save it
B     CheckNextVox
$.NoPortDown
.
8CMP   R1,#0
BBLEQ  Trk_Arpeggio
L
V.CheckNextVox
`*ADD   R2,R2,#1            ; Next Voice
j,CMP   R2,R11              ; Last Voice ?
tBNE   CheckEffectsLoop
~LDMFD R13!,{R0-R12,PC}
�
�.Trk_Arpeggio
�STMFD R13!,{R14}
�CMP   R3,#0
�LDMEQFD R13!,{PC}
�LDR   R0,Trk_Counter
�CMP   R0,#1
�BEQ   Arp_Loop2
�CMP   R0,#2
�BEQ   Arp_Loop3
�CMP   R0,#3
�BEQ   Arp_Loop4
CMP   R0,#4

BEQ   Arp_Loop2
CMP   R0,#5
BEQ   Arp_Loop3
(LDMFD R13!,{PC}
2
<.Arp_Loop2
FKMOV   R0,R3,LSR#4        ; R0=First nibble, then add it to current tone
PB     Arp_Cont
Z.Arp_Loop3
dJ�   R0,R3,#&0F         ; R0=Second nibble, then add it to current tone
nB     Arp_Cont
x.Arp_Loop4
�0LDR   R3,[R10,R2,LSL#2]  ; Play current tone
�B     Arp_EndPart
�
.Arp_Cont
�BL    Get_Periods_Adr
�LDR   R1,[R10,R2,LSL#2]
�ADD   R4,R12,#36*4
�.Arp_Loop5
�LDR   R3,[R12,R0,LSL#2]
�LDR   R6,[R12],#4
�CMP   R6,R1
�BEQ   Arp_EndPart
�B     Arp_Loop5
�
.Arp_EndPart
ADD   R12,R12,R0,LSL#2
CMP   R12,R4
"LDMGTFD R13!,{PC}
,ADD   R4,R7,R2,LSL#5
6CMP   R3,#0
@LDMEQFD R13!,{PC}
J;LDR   R5,[R8,R3,LSL#2]         ; Get phase increment...
TESTR   R5,[R4,#4]               ; ...Save it in Voices Infos_Block
^.End_Effect
hLDMFD R13!,{PC}
r
|.Stereo_Table
�?EQUD -126:EQUD -70:EQUD -40:EQUD 0:EQUD 40:EQUD 70:EQUD 127
�
�.Voice_Control_Block
�B Fill_Sound_Buffer
�B Fill_Sound_Buffer
�B Fill_Sound_Buffer
�LDMFD R13!,{PC}
�LDMFD R13!,{PC}
�LDMFD R13!,{PC}
�LDMFD R13!,{PC}
�'EQUD Voice_Name-Voice_Control_Block
�.Voice_Name
�EQUS "Tracker":EQUB 0:ALIGN
 
 ); *---------------------------------*
 ); *    Init Tracker Sound System    *
 &); *---------------------------------*
 0
 :.Init_Sound_System
 DSTMFD R13!,{R0-R12,R14}
 NLDR   R12,Trk_Voices
 X
 b ADR   R0,Voice_Control_Block
 lMOV   R1,#0
 vSWI   "Sound_InstallVoice"
 �STR   R1,Old_Voice_Slot
 �
 �MOV   R10,#1
 �ADR   R9,OldVoices
 �SUB   R9,R9,#4
 �.Voices_Exterminator
 �MOV   R0,R10
 �MOV   R1,#0
 �SWI   "Sound_AttachVoice"
 �STR   R1,[R9,R10,LSL#2]
 �ADD   R10,R10,#1
 �CMP   R10,#8
 �BLE   Voices_Exterminator
!
!MOV   R10,#1
!.InitAllVoices
! MOV   R0,R10
!*ADR   R1,Voice_Name
!4"SWI   "Sound_AttachNamedVoice"
!>ADD   R10,R10,#1
!HCMP   R10,R12
!RBLE   InitAllVoices
!\
!fADR   R7,OldStereos
!pADR   R10,Stereo_Table
!zMOV   R9,#1
!�.Set_Stereo_Loop
!�MOV   R0,R9
!�LDRB  R5,[R11],#1
!�SUBS  R5,R5,#1
!�MOVLT R5,#0
!�LDR   R1,[R10,R5,LSL#2]
!�SWI   "Sound_Stereo"
!�STRB  R1,[R7],#1
!�ADD   R9,R9,#1
!�CMP   R9,R12
!�BLE   Set_Stereo_Loop
!�
!�0MOV   R0,R12                 ; Voices number
"DMOV   R1,#208                ; Buffer length in byte per channel
"BMOV   R2,#Sample_Rate        ; Sample Rate (34us = 29.411 Khz)
"MOV   R3,#0
"$MOV   R4,#0
".SWI   "Sound_Configure"
"8ADR   R9,OldConfigure
"BSTMIA R9,{R0-R4}
"L
"VMOV   R8,R12
"`.SoundAllVoices
"jMOV   R0,R8
"tMVN   R1,#20
"~MOV   R2,#&F0
"�MOV   R3,#&FF
"�SWI   "Sound_Control"
"�SUBS  R8,R8,#1
"�BGT   SoundAllVoices
"�LDMFD R13!,{R0-R12,PC}^
"�
"�.OldVoices
"�EQUD 0:EQUD 0:EQUD 0:EQUD 0
"�EQUD 0:EQUD 0:EQUD 0:EQUD 0
"�.OldConfigure
"�&EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
"�.OldStereos
#EQUD 0:EQUD 0
#

#(; *--------------------------------*
#(; *  Exit of Tracker Sound System  *
#((; *--------------------------------*
#2
#<.Trk_Close_All
#FSTMFD R13!,{R0-R12,R14}
#P
#ZBL    Get_Infos_Block
#dADD   R7,R7,#24
#nMOV   R6,#8:MOV R5,#0
#x.Set_Zeroes_Loop
#�STR   R5,[R7],#32
#�SUBS  R6,R6,#1
#�BGT   Set_Zeroes_Loop
#�
#�MOV   R0,#0
#�LDR   R1,Old_Voice_Slot
#�SWI   "Sound_RemoveVoice"
#�
#�LDR   R12,Trk_Voices
#�MOV   R10,#1
#�ADR   R9,OldVoices
#�SUB   R9,R9,#4
#�.Detach_Trk_Voices
$MOV   R0,R10
$LDR   R1,[R9,R10,LSL#2]
$SWI   "Sound_AttachVoice"
$"ADD   R10,R10,#1
$,CMP   R10,R12
$6BLE   Detach_Trk_Voices
$@
$JADR   R9,OldStereos
$TMOV   R10,#1
$^.Restore_Stereos
$hMOV   R0,R10
$rLDRB  R1,[R9],#1
$|SWI   "Sound_Stereo"
$�ADD   R10,R10,#1
$�CMP   R10,R12
$�BLE   Restore_Stereos
$�
$�ADR   R9,OldConfigure
$�LDMIA R9,{R0-R4}
$�SWI   "Sound_Configure"
$�LDMFD R13!,{R0-R12,PC}^
$�
$�.Old_Voice_Slot
$�
EQUD 0
$�.Get_Periods_Adr
$�ADR   R12,Trk_Periods_List
%MOV   PC,R14
%.Trk_Periods_List
%/EQUD &0358:EQUD &0328:EQUD &02FA:EQUD &02D0
%&/EQUD &02A6:EQUD &0280:EQUD &025C:EQUD &023A
%0/EQUD &021A:EQUD &01FC:EQUD &01E0:EQUD &01C5
%:/EQUD &01AC:EQUD &0194:EQUD &017D:EQUD &0168
%D/EQUD &0153:EQUD &0140:EQUD &012E:EQUD &011D
%N/EQUD &010D:EQUD &00FE:EQUD &00F0:EQUD &00E2
%X/EQUD &00D6:EQUD &00CA:EQUD &00BE:EQUD &00B4
%b/EQUD &00AA:EQUD &00A0:EQUD &0097:EQUD &008F
%l/EQUD &0087:EQUD &007F:EQUD &0078:EQUD &0071
%v
%�:; *--------------------------------------------------*
%�:; *    Locate a TFF (Tracker File Format !) Chunk    *
%�:; *--------------------------------------------------*
%�:; *  Entry parameters =                              *
%�:; *  R0 => Previous Chunk or Base Address            *
%�:; *  R4 =  Chunck name                               *
%�:; *  R9 => Enf of File Address                       *
%�:; *--------------------------------------------------*
%�
%�.Search_TFF
%�LDMIA R0!,{R2-R3}
%�CMP   R2,R4
%�ADDNE R0,R0,R3
&
�Q PC,R14
&+CMP   R0,R9             ; End Of File ?
&>MOVGE PC,R14            ; Should display an error here (!)
& B     Search_TFF
&*.Get_Patterns_Table
&4ADR   R11,Patterns_Table
&>MOV   PC,R14
&H
&R.Patterns_Table
&\]:P%+=256:[OPT Pass%
&f
&pF; *--------------------------------------------------------------*
&zF; *  Fill sound buffer without loop (Not beautifull but faster)  *
&�F; *--------------------------------------------------------------*
&�
&�.Full_Fill
&�]
&�� FillSB%=1 � 208
&�[OPT Pass%
&�LDRB  R8,[R4,R0,LSR#16]
&�SUBS  R8,R8,R5
&�MOVMI R8,#0
&�STRB  R8,[R12],R11
&�ADD   R0,R0,R1
&�]
&��
'[OPT Pass%
'
'JLDRB   R4,[R2,R7]            ; Hugo has found this system not to loose
'$4CMP    R4,#0                 ; any note/voice...
'.STREQ  R0,[R9]
'8MOVNE  R4,#0
'BSTRNEB R4,[R2,R7]
'L
'VMOV   R0,#%00001000
'`LDMFD R13!,{PC}
'j
't.Get_Frequence_Table
'~CADR   R8,Frequence_Table1    ; => Freq Table For 1 & 2 Channels
'�CMP   R11,#3
'�CADDGE R8,R8,#4096            ; => Freq Table For 3 & 4 Channels
'�CMP   R11,#5
'�CADDGE R8,R8,#4096            ; => Freq Table For 5 - 8 Channels
'�MOV   PC,R14
'�
'�.Frequence_Table1
'�]:P%+=4096:[OPT Pass%
'�.Frequence_Table2
'�]:P%+=4096:[OPT Pass%
'�.Frequence_Table3
'�]:P%+=4096:[OPT Pass%
(.Module_End
(
]
(�
(
((� Periods%=1 � 1020
(2IFrequence_Table1!(Periods%*4)=((3575872/Periods%)/(1000000/37))*60000
(<�
(F� Periods%=1 � 1020
(PIFrequence_Table2!(Periods%*4)=((3575872/Periods%)/(1000000/34))*60000
(Z�
(d� Periods%=1 � 1020
(nIFrequence_Table3!(Periods%*4)=((3575872/Periods%)/(1000000/26))*60000
(x�
(�
(�3�("SAVE %.Player_Mod "+�~code+" "+�~Module_End)
(� *SETTYPE %.Player_Mod MODULE
�
00000000  0d 00 0a 11 f4 20 3e 50  6c 61 79 5f 4d 6f 64 5f  |..... >Play_Mod_|
00000010  53 0d 00 14 05 3a 0d 00  1e 49 f4 20 2a 2d 2d 2d  |S....:...I. *---|
00000020  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000050  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2a 0d  |--------------*.|
00000060  00 28 49 f4 20 2a 20 20  20 20 20 20 20 20 20 20  |.(I. *          |
00000070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000000a0  20 20 20 20 20 20 20 2a  0d 00 32 49 f4 20 2a 20  |       *..2I. * |
000000b0  20 20 20 20 20 20 20 20  54 52 41 43 4b 45 52 20  |        TRACKER |
000000c0  4d 4f 44 55 4c 45 53 20  50 4c 41 59 45 52 20 28  |MODULES PLAYER (|
000000d0  31 2d 38 20 56 4f 49 43  45 53 29 20 56 65 72 73  |1-8 VOICES) Vers|
000000e0  69 6f 6e 20 32 2e 30 36  20 20 20 20 20 20 20 20  |ion 2.06        |
000000f0  2a 0d 00 3c 49 f4 20 2a  20 20 20 20 20 20 20 20  |*..<I. *        |
00000100  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000130  20 20 20 20 20 20 20 20  20 2a 0d 00 46 49 f4 20  |         *..FI. |
00000140  2a 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |*---------------|
00000150  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000180  2d 2d 2a 0d 00 50 49 f4  20 2a 20 20 20 20 20 20  |--*..PI. *      |
00000190  20 20 20 20 20 20 57 72  69 74 74 65 6e 20 62 79  |      Written by|
000001a0  20 46 61 62 72 69 63 65  20 4d 45 52 43 49 45 52  | Fabrice MERCIER|
000001b0  20 26 20 48 75 67 6f 20  46 49 45 4e 4e 45 53 20  | & Hugo FIENNES |
000001c0  20 20 20 20 20 20 20 20  20 20 20 2a 0d 00 5a 49  |           *..ZI|
000001d0  f4 20 2a 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |. *-------------|
000001e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000210  2d 2d 2d 2d 2a 0d 00 64  49 f4 20 2a 20 20 20 20  |----*..dI. *    |
00000220  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000230  20 28 63 29 20 31 39 39  30 20 54 68 65 20 53 65  | (c) 1990 The Se|
00000240  72 69 61 6c 20 50 6f 72  74 20 20 20 20 20 20 20  |rial Port       |
00000250  20 20 20 20 20 20 20 20  20 20 20 20 20 2a 0d 00  |             *..|
00000260  6e 49 f4 20 2a 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |nI. *-----------|
00000270  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000002a0  2d 2d 2d 2d 2d 2d 2a 0d  00 78 05 3a 0d 00 82 22  |------*..x.:..."|
000002b0  f4 20 52 65 73 65 72 76  65 20 73 70 61 63 65 20  |. Reserve space |
000002c0  66 6f 72 20 74 68 65 20  6d 6f 64 75 6c 65 0d 00  |for the module..|
000002d0  8c 10 de 20 63 6f 64 65  20 33 32 37 36 38 0d 00  |... code 32768..|
000002e0  96 12 53 61 6d 70 6c 65  5f 52 61 74 65 3d 33 34  |..Sample_Rate=34|
000002f0  0d 00 a0 1a f1 27 22 41  73 73 65 6d 62 6c 69 6e  |.....'"Assemblin|
00000300  67 20 63 6f 64 65 2e 2e  2e 22 0d 00 aa 15 e3 20  |g code..."..... |
00000310  50 61 73 73 25 3d 30 20  b8 20 32 20 88 20 32 0d  |Pass%=0 . 2 . 2.|
00000320  00 b4 0b 50 25 3d 63 6f  64 65 0d 00 be 0d 5b 4f  |...P%=code....[O|
00000330  50 54 50 61 73 73 25 0d  00 c8 04 0d 00 d2 28 3b  |PTPass%.......(;|
00000340  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
00000350  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000360  2d 2d 2a 0d 00 dc 28 3b  20 2a 20 20 20 20 4d 6f  |--*...(; *    Mo|
00000370  64 75 6c 65 20 48 65 61  64 65 72 20 28 34 30 20  |dule Header (40 |
00000380  42 79 74 65 73 29 20 20  20 20 2a 0d 00 e6 28 3b  |Bytes)    *...(;|
00000390  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
000003a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000003b0  2d 2d 2a 0d 00 f0 04 0d  00 fa 30 45 51 55 44 20  |--*.......0EQUD |
000003c0  20 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | 0              |
000003d0  20 20 20 20 20 20 20 20  3b 20 4e 6f 20 73 74 61  |        ; No sta|
000003e0  72 74 20 63 6f 64 65 0d  01 04 2c 45 51 55 44 20  |rt code...,EQUD |
000003f0  20 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | 0              |
00000400  20 20 20 20 20 20 20 20  3b 20 49 6e 69 74 20 63  |        ; Init c|
00000410  6f 64 65 0d 01 0e 46 45  51 55 44 20 20 6d 6f 64  |ode...FEQUD  mod|
00000420  5f 6b 69 6c 6c 2d 63 6f  64 65 20 20 20 20 20 20  |_kill-code      |
00000430  20 20 20 20 3b 20 3d 3e  20 52 65 6c 65 61 73 65  |    ; => Release|
00000440  20 6d 65 6d 6f 72 79 2f  6b 69 6c 6c 20 74 75 6e  | memory/kill tun|
00000450  65 20 72 6f 75 74 69 6e  65 0d 01 18 32 45 51 55  |e routine...2EQU|
00000460  44 20 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |D  0            |
00000470  20 20 20 20 20 20 20 20  20 20 3b 20 4e 6f 20 73  |          ; No s|
00000480  65 72 76 69 63 65 20 63  6f 64 65 0d 01 22 32 45  |ervice code.."2E|
00000490  51 55 44 20 20 6d 6f 64  5f 74 69 74 6c 65 2d 63  |QUD  mod_title-c|
000004a0  6f 64 65 20 20 20 20 20  20 20 20 20 3b 20 3d 3e  |ode         ; =>|
000004b0  20 54 69 74 6c 65 20 73  74 72 69 6e 67 0d 01 2c  | Title string..,|
000004c0  31 45 51 55 44 20 20 6d  6f 64 5f 68 65 6c 70 2d  |1EQUD  mod_help-|
000004d0  63 6f 64 65 20 20 20 20  20 20 20 20 20 20 3b 20  |code          ; |
000004e0  3d 3e 20 48 65 6c 70 20  73 74 72 69 6e 67 0d 01  |=> Help string..|
000004f0  36 33 45 51 55 44 20 20  6d 6f 64 5f 63 6f 6d 6d  |63EQUD  mod_comm|
00000500  61 6e 64 2d 63 6f 64 65  20 20 20 20 20 20 20 3b  |and-code       ;|
00000510  20 3d 3e 20 43 6f 6d 6d  61 6e 64 20 74 61 62 6c  | => Command tabl|
00000520  65 0d 01 40 20 45 51 55  44 20 20 30 3a 45 51 55  |e..@ EQUD  0:EQU|
00000530  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
00000540  30 0d 01 4a 04 0d 01 54  2a 2e 6d 6f 64 5f 74 69  |0..J...T*.mod_ti|
00000550  74 6c 65 3a 45 51 55 53  20 22 54 72 61 63 6b 65  |tle:EQUS "Tracke|
00000560  72 4d 6f 64 75 6c 65 22  3a 45 51 55 42 20 30 0d  |rModule":EQUB 0.|
00000570  01 5e 3c 2e 6d 6f 64 5f  68 65 6c 70 3a 45 51 55  |.^<.mod_help:EQU|
00000580  53 20 22 54 72 61 63 6b  65 72 20 50 6c 61 79 65  |S "Tracker Playe|
00000590  72 22 2b bd 39 2b 22 32  2e 30 36 20 28 30 33 2d  |r"+.9+"2.06 (03-|
000005a0  44 65 63 2d 31 39 39 30  29 20 22 0d 01 68 2c 45  |Dec-1990) "..h,E|
000005b0  51 55 53 20 22 62 79 20  46 61 62 72 69 63 65 20  |QUS "by Fabrice |
000005c0  4d 65 72 63 69 65 72 20  26 20 48 75 67 6f 20 46  |Mercier & Hugo F|
000005d0  69 65 6e 6e 65 73 22 0d  01 72 10 45 51 55 42 20  |iennes"..r.EQUB |
000005e0  30 3a 41 4c 49 47 4e 0d  01 7c 04 0d 01 86 25 3b  |0:ALIGN..|....%;|
000005f0  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
00000600  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2a  |---------------*|
00000610  0d 01 90 25 3b 20 2a 20  20 20 20 43 6f 6d 6d 61  |...%; *    Comma|
00000620  6e 64 20 6b 65 79 77 6f  72 64 20 74 61 62 6c 65  |nd keyword table|
00000630  20 20 20 20 2a 0d 01 9a  25 3b 20 2a 2d 2d 2d 2d  |    *...%; *----|
00000640  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000650  2d 2d 2d 2d 2d 2d 2d 2d  2d 2a 0d 01 a4 04 0d 01  |---------*......|
00000660  ae 3a 2e 6d 6f 64 5f 63  6f 6d 6d 61 6e 64 20 20  |.:.mod_command  |
00000670  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000680  20 20 3b 20 4d 6f 64 75  6c 65 20 63 6f 6d 6d 61  |  ; Module comma|
00000690  6e 64 20 74 61 62 6c 65  0d 01 b8 37 45 51 55 53  |nd table...7EQUS|
000006a0  20 22 50 6c 61 79 49 6e  69 74 22 3a 45 51 55 42  | "PlayInit":EQUB|
000006b0  20 30 3a 41 4c 49 47 4e  20 20 20 20 3b 20 2a 50  | 0:ALIGN    ; *P|
000006c0  4c 41 59 49 4e 49 54 20  43 6f 6d 6d 61 6e 64 0d  |LAYINIT Command.|
000006d0  01 c2 37 45 51 55 44 20  50 6c 61 79 5f 49 6e 69  |..7EQUD Play_Ini|
000006e0  74 2d 63 6f 64 65 20 20  20 20 20 20 20 20 20 20  |t-code          |
000006f0  20 20 20 3b 20 4f 66 66  73 65 74 20 6f 66 20 63  |   ; Offset of c|
00000700  6f 6d 6d 61 6e 64 0d 01  cc 3d 45 51 55 44 20 26  |ommand...=EQUD &|
00000710  30 30 30 31 30 31 30 31  20 20 20 20 20 20 20 20  |00010101        |
00000720  20 20 20 20 20 20 20 20  20 20 3b 20 31 20 70 61  |          ; 1 pa|
00000730  72 61 6d 65 74 65 72 2c  20 47 53 54 72 61 6e 73  |rameter, GSTrans|
00000740  27 65 64 0d 01 d6 34 45  51 55 44 20 50 6c 61 79  |'ed...4EQUD Play|
00000750  53 79 6e 5f 45 72 72 6f  72 2d 63 6f 64 65 20 20  |Syn_Error-code  |
00000760  20 20 20 20 20 20 20 3b  20 49 6e 76 61 6c 69 64  |       ; Invalid|
00000770  20 73 79 6e 74 61 78 0d  01 e0 2f 45 51 55 44 20  | syntax.../EQUD |
00000780  48 65 6c 70 5f 49 6e 69  74 2d 63 6f 64 65 20 20  |Help_Init-code  |
00000790  20 20 20 20 20 20 20 20  20 20 20 3b 20 48 65 6c  |           ; Hel|
000007a0  70 20 74 65 78 74 0d 01  ea 04 0d 01 f4 37 45 51  |p text.......7EQ|
000007b0  55 53 20 22 50 6c 61 79  4b 69 6c 6c 22 3a 45 51  |US "PlayKill":EQ|
000007c0  55 42 20 30 3a 41 4c 49  47 4e 20 20 20 20 3b 20  |UB 0:ALIGN    ; |
000007d0  2a 50 4c 41 59 4b 49 4c  4c 20 43 6f 6d 6d 61 6e  |*PLAYKILL Comman|
000007e0  64 0d 01 fe 37 45 51 55  44 20 6d 6f 64 5f 6b 69  |d...7EQUD mod_ki|
000007f0  6c 6c 2d 63 6f 64 65 20  20 20 20 20 20 20 20 20  |ll-code         |
00000800  20 20 20 20 20 3b 20 4f  66 66 73 65 74 20 6f 66  |     ; Offset of|
00000810  20 63 6f 6d 6d 61 6e 64  0d 02 08 2f 45 51 55 44  | command.../EQUD|
00000820  20 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | 0              |
00000830  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 4e 6f  |            ; No|
00000840  20 70 61 72 61 6d 73 0d  02 12 37 45 51 55 44 20  | params...7EQUD |
00000850  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00000860  20 20 20 20 20 20 20 20  20 20 20 3b 20 4e 6f 20  |           ; No |
00000870  73 79 6e 74 61 78 20 6d  65 73 73 61 67 65 0d 02  |syntax message..|
00000880  1c 2f 45 51 55 44 20 48  65 6c 70 5f 4b 69 6c 6c  |./EQUD Help_Kill|
00000890  2d 63 6f 64 65 20 20 20  20 20 20 20 20 20 20 20  |-code           |
000008a0  20 20 3b 20 48 65 6c 70  20 74 65 78 74 0d 02 26  |  ; Help text..&|
000008b0  04 0d 02 30 38 45 51 55  53 20 22 50 6c 61 79 50  |...08EQUS "PlayP|
000008c0  61 75 73 65 22 3a 45 51  55 42 20 30 3a 41 4c 49  |ause":EQUB 0:ALI|
000008d0  47 4e 20 20 20 3b 20 2a  50 4c 41 59 50 41 55 53  |GN   ; *PLAYPAUS|
000008e0  45 20 43 6f 6d 6d 61 6e  64 0d 02 3a 37 45 51 55  |E Command..:7EQU|
000008f0  44 20 50 6c 61 79 5f 50  61 75 73 65 2d 63 6f 64  |D Play_Pause-cod|
00000900  65 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 4f  |e            ; O|
00000910  66 66 73 65 74 20 6f 66  20 63 6f 6d 6d 61 6e 64  |ffset of command|
00000920  0d 02 44 2f 45 51 55 44  20 30 20 20 20 20 20 20  |..D/EQUD 0      |
00000930  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000940  20 20 20 20 3b 20 4e 6f  20 70 61 72 61 6d 73 0d  |    ; No params.|
00000950  02 4e 37 45 51 55 44 20  30 20 20 20 20 20 20 20  |.N7EQUD 0       |
00000960  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000970  20 20 20 3b 20 4e 6f 20  73 79 6e 74 61 78 20 6d  |   ; No syntax m|
00000980  65 73 73 61 67 65 0d 02  58 2f 45 51 55 44 20 48  |essage..X/EQUD H|
00000990  65 6c 70 5f 50 61 75 73  65 2d 63 6f 64 65 20 20  |elp_Pause-code  |
000009a0  20 20 20 20 20 20 20 20  20 20 3b 20 48 65 6c 70  |          ; Help|
000009b0  20 74 65 78 74 0d 02 62  04 0d 02 6c 38 45 51 55  | text..b...l8EQU|
000009c0  53 20 22 50 6c 61 79 53  74 61 72 74 22 3a 45 51  |S "PlayStart":EQ|
000009d0  55 42 20 30 3a 41 4c 49  47 4e 20 20 20 3b 20 2a  |UB 0:ALIGN   ; *|
000009e0  50 4c 41 59 53 54 41 52  54 20 43 6f 6d 6d 61 6e  |PLAYSTART Comman|
000009f0  64 0d 02 76 37 45 51 55  44 20 50 6c 61 79 5f 53  |d..v7EQUD Play_S|
00000a00  74 61 72 74 2d 63 6f 64  65 20 20 20 20 20 20 20  |tart-code       |
00000a10  20 20 20 20 20 3b 20 4f  66 66 73 65 74 20 6f 66  |     ; Offset of|
00000a20  20 63 6f 6d 6d 61 6e 64  0d 02 80 2f 45 51 55 44  | command.../EQUD|
00000a30  20 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | 0              |
00000a40  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 4e 6f  |            ; No|
00000a50  20 70 61 72 61 6d 73 0d  02 8a 37 45 51 55 44 20  | params...7EQUD |
00000a60  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00000a70  20 20 20 20 20 20 20 20  20 20 20 3b 20 4e 6f 20  |           ; No |
00000a80  73 79 6e 74 61 78 20 6d  65 73 73 61 67 65 0d 02  |syntax message..|
00000a90  94 2f 45 51 55 44 20 48  65 6c 70 5f 53 74 61 72  |./EQUD Help_Star|
00000aa0  74 2d 63 6f 64 65 20 20  20 20 20 20 20 20 20 20  |t-code          |
00000ab0  20 20 3b 20 48 65 6c 70  20 74 65 78 74 0d 02 9e  |  ; Help text...|
00000ac0  04 0d 02 a8 39 45 51 55  53 20 22 53 65 74 50 6c  |....9EQUS "SetPl|
00000ad0  61 79 50 6f 73 22 3a 45  51 55 42 20 30 3a 41 4c  |ayPos":EQUB 0:AL|
00000ae0  49 47 4e 20 20 3b 20 2a  53 45 54 50 4c 41 59 50  |IGN  ; *SETPLAYP|
00000af0  4f 53 20 43 6f 6d 6d 61  6e 64 0d 02 b2 19 45 51  |OS Command....EQ|
00000b00  55 44 20 53 65 74 5f 50  6c 61 79 50 6f 73 2d 63  |UD Set_PlayPos-c|
00000b10  6f 64 65 0d 02 bc 34 45  51 55 44 20 26 30 30 30  |ode...4EQUD &000|
00000b20  31 30 30 30 31 20 20 20  20 20 20 20 20 20 20 20  |10001           |
00000b30  20 20 20 20 20 20 20 3b  20 31 20 70 61 72 61 6d  |       ; 1 param|
00000b40  65 74 65 72 2e 2e 2e 0d  02 c6 1e 45 51 55 44 20  |eter.......EQUD |
00000b50  50 6c 61 79 50 6f 73 53  79 6e 5f 45 72 72 6f 72  |PlayPosSyn_Error|
00000b60  2d 63 6f 64 65 0d 02 d0  1a 45 51 55 44 20 48 65  |-code....EQUD He|
00000b70  6c 70 5f 50 6c 61 79 50  6f 73 2d 63 6f 64 65 0d  |lp_PlayPos-code.|
00000b80  02 da 04 0d 02 e4 35 45  51 55 44 20 30 20 20 20  |......5EQUD 0   |
00000b90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ba0  20 20 20 20 20 20 20 3b  20 54 65 72 6d 69 6e 61  |       ; Termina|
00000bb0  74 65 20 74 61 62 6c 65  0d 02 ee 04 0d 02 f8 19  |te table........|
00000bc0  3b 20 2a 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; *-------------|
00000bd0  2d 2d 2d 2d 2a 0d 03 02  17 3b 20 2a 20 20 c7 92  |----*....; *  ..|
00000be0  20 4d 65 73 73 61 67 65  73 20 20 2a 0d 03 0c 19  | Messages  *....|
00000bf0  3b 20 2a 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; *-------------|
00000c00  2d 2d 2d 2d 2a 0d 03 16  04 0d 03 20 0f 2e 48 65  |----*...... ..He|
00000c10  6c 70 5f 50 61 75 73 65  0d 03 2a 5a 45 51 55 53  |lp_Pause..*ZEQUS|
00000c20  20 22 2a 50 6c 61 79 50  61 75 73 65 20 77 69 6c  | "*PlayPause wil|
00000c30  6c 20 70 61 75 73 65 20  74 68 65 20 63 75 72 72  |l pause the curr|
00000c40  65 6e 74 6c 79 20 70 6c  61 79 69 6e 67 20 74 75  |ently playing tu|
00000c50  6e 65 20 75 6e 74 69 6c  20 2a 50 6c 61 79 53 74  |ne until *PlaySt|
00000c60  61 72 74 20 43 6f 6d 6d  61 6e 64 2e 20 22 2b bd  |art Command. "+.|
00000c70  31 33 0d 03 34 1d 45 51  55 53 20 22 53 79 6e 74  |13..4.EQUS "Synt|
00000c80  61 78 3a 20 2a 50 6c 61  79 50 61 75 73 65 22 0d  |ax: *PlayPause".|
00000c90  03 3e 0a 45 51 55 42 20  30 0d 03 48 09 41 4c 49  |.>.EQUB 0..H.ALI|
00000ca0  47 4e 0d 03 52 0f 2e 48  65 6c 70 5f 53 74 61 72  |GN..R..Help_Star|
00000cb0  74 0d 03 5c 48 45 51 55  53 20 22 2a 50 6c 61 79  |t..\HEQUS "*Play|
00000cc0  53 74 61 72 74 20 77 69  6c 6c 20 70 6c 61 79 20  |Start will play |
00000cd0  74 68 65 20 74 75 6e 65  20 61 66 74 65 72 20 61  |the tune after a|
00000ce0  20 2a 50 6c 61 79 50 61  75 73 65 20 43 6f 6d 6d  | *PlayPause Comm|
00000cf0  61 6e 64 2e 22 2b bd 31  33 0d 03 66 1d 45 51 55  |and."+.13..f.EQU|
00000d00  53 20 22 53 79 6e 74 61  78 3a 20 2a 50 6c 61 79  |S "Syntax: *Play|
00000d10  53 74 61 72 74 22 0d 03  70 0a 45 51 55 42 20 30  |Start"..p.EQUB 0|
00000d20  0d 03 7a 09 41 4c 49 47  4e 0d 03 84 0e 2e 48 65  |..z.ALIGN.....He|
00000d30  6c 70 5f 4b 69 6c 6c 0d  03 8e 53 45 51 55 53 20  |lp_Kill...SEQUS |
00000d40  22 2a 50 6c 61 79 4b 69  6c 6c 20 77 69 6c 6c 20  |"*PlayKill will |
00000d50  73 74 6f 70 20 26 20 6b  69 6c 6c 20 74 68 65 20  |stop & kill the |
00000d60  63 75 72 72 65 6e 74 6c  79 20 70 6c 61 79 69 6e  |currently playin|
00000d70  67 20 74 75 6e 65 20 26  20 66 72 65 65 20 6d 65  |g tune & free me|
00000d80  6d 6f 72 79 2e 22 2b bd  31 33 0d 03 98 1c 45 51  |mory."+.13....EQ|
00000d90  55 53 20 22 53 79 6e 74  61 78 3a 20 2a 50 6c 61  |US "Syntax: *Pla|
00000da0  79 4b 69 6c 6c 22 0d 03  a2 0a 45 51 55 42 20 30  |yKill"....EQUB 0|
00000db0  0d 03 ac 09 41 4c 49 47  4e 0d 03 b6 11 2e 48 65  |....ALIGN.....He|
00000dc0  6c 70 5f 50 6c 61 79 50  6f 73 0d 03 c0 3e 45 51  |lp_PlayPos...>EQ|
00000dd0  55 53 20 22 2a 53 65 74  50 6c 61 79 50 6f 73 20  |US "*SetPlayPos |
00000de0  77 69 6c 6c 20 73 65 74  20 70 6f 73 69 74 69 6f  |will set positio|
00000df0  6e 20 69 6e 20 73 65 71  75 65 6e 63 65 20 74 61  |n in sequence ta|
00000e00  62 6c 65 22 2b bd 31 33  0d 03 ca 24 45 51 55 53  |ble"+.13...$EQUS|
00000e10  20 22 53 79 6e 74 61 78  3a 20 2a 53 65 74 50 6c  | "Syntax: *SetPl|
00000e20  61 79 50 6f 73 20 30 2d  31 32 37 22 0d 03 d4 0a  |ayPos 0-127"....|
00000e30  45 51 55 42 20 30 0d 03  de 09 41 4c 49 47 4e 0d  |EQUB 0....ALIGN.|
00000e40  03 e8 0e 2e 48 65 6c 70  5f 49 6e 69 74 0d 03 f2  |....Help_Init...|
00000e50  4a 45 51 55 53 20 22 2a  50 6c 61 79 49 6e 69 74  |JEQUS "*PlayInit|
00000e60  20 6c 6f 61 64 20 26 20  73 74 61 72 74 20 74 6f  | load & start to|
00000e70  20 70 6c 61 79 20 74 68  65 20 73 70 65 63 69 66  | play the specif|
00000e80  69 65 64 20 54 72 61 63  6b 65 72 20 6d 6f 64 75  |ied Tracker modu|
00000e90  6c 65 22 2b bd 31 33 0d  03 fc 27 45 51 55 53 20  |le"+.13...'EQUS |
00000ea0  22 53 79 6e 74 61 78 3a  20 2a 50 6c 61 79 49 6e  |"Syntax: *PlayIn|
00000eb0  69 74 20 3c 66 69 6c 65  6e 61 6d 65 3e 22 0d 04  |it <filename>"..|
00000ec0  06 0a 45 51 55 42 20 30  0d 04 10 09 41 4c 49 47  |..EQUB 0....ALIG|
00000ed0  4e 0d 04 1a 04 0d 04 24  1d 3b 20 49 6e 76 61 6c  |N......$.; Inval|
00000ee0  69 64 20 73 79 6e 74 61  78 20 6d 65 73 73 61 67  |id syntax messag|
00000ef0  65 73 0d 04 2e 1d 3b 20  7e 7e 7e 7e 7e 7e 7e 7e  |es....; ~~~~~~~~|
00000f00  7e 7e 7e 7e 7e 7e 7e 7e  7e 7e 7e 7e 7e 7e 7e 0d  |~~~~~~~~~~~~~~~.|
00000f10  04 38 12 2e 50 6c 61 79  53 79 6e 5f 45 72 72 6f  |.8..PlaySyn_Erro|
00000f20  72 0d 04 42 26 45 51 55  53 20 22 53 79 6e 74 61  |r..B&EQUS "Synta|
00000f30  78 3a 20 2a 50 6c 61 79  4d 6f 64 20 3c 66 69 6c  |x: *PlayMod <fil|
00000f40  65 6e 61 6d 65 3e 22 0d  04 4c 10 45 51 55 42 20  |ename>"..L.EQUB |
00000f50  30 3a 41 4c 49 47 4e 0d  04 56 15 2e 50 6c 61 79  |0:ALIGN..V..Play|
00000f60  50 6f 73 53 79 6e 5f 45  72 72 6f 72 0d 04 60 24  |PosSyn_Error..`$|
00000f70  45 51 55 53 20 22 53 79  6e 74 61 78 3a 20 2a 53  |EQUS "Syntax: *S|
00000f80  65 74 50 6c 61 79 50 6f  73 20 30 2d 31 32 37 22  |etPlayPos 0-127"|
00000f90  0d 04 6a 10 45 51 55 42  20 30 3a 41 4c 49 47 4e  |..j.EQUB 0:ALIGN|
00000fa0  0d 04 74 04 0d 04 7e 2b  3b 20 2a 2d 2d 2d 2d 2d  |..t...~+; *-----|
00000fb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000fc0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2a 0d  |--------------*.|
00000fd0  04 88 2b 3b 20 2a 20 20  4b 69 6c 6c 20 69 6e 74  |..+; *  Kill int|
00000fe0  65 72 72 75 70 74 20 26  20 72 65 6c 65 61 73 65  |errupt & release|
00000ff0  20 6d 65 6d 6f 72 79 20  20 2a 0d 04 92 2b 3b 20  | memory  *...+; |
00001000  2a 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |*---------------|
00001010  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00001020  2d 2d 2d 2d 2a 0d 04 9c  04 0d 04 a6 0d 2e 6d 6f  |----*.........mo|
00001030  64 5f 6b 69 6c 6c 0d 04  b0 2f 53 54 4d 46 44 20  |d_kill.../STMFD |
00001040  52 31 33 21 2c 7b 52 30  2d 52 31 32 2c 52 31 34  |R13!,{R0-R12,R14|
00001050  7d 20 20 20 20 20 20 3b  20 53 74 6f 72 65 20 72  |}      ; Store r|
00001060  65 74 75 72 6e 0d 04 ba  31 4c 44 52 20 20 20 52  |eturn...1LDR   R|
00001070  30 2c 50 6c 61 79 5f 46  6c 61 67 20 20 20 20 20  |0,Play_Flag     |
00001080  20 20 20 20 20 20 3b 20  53 74 69 6c 6c 20 70 6c  |      ; Still pl|
00001090  61 79 69 6e 67 3f 0d 04  c4 0f 43 4d 50 20 20 20  |aying?....CMP   |
000010a0  52 30 2c 23 30 0d 04 ce  1c 4c 44 4d 45 51 46 44  |R0,#0....LDMEQFD|
000010b0  20 52 31 33 21 2c 7b 52  30 2d 52 31 32 2c 50 43  | R13!,{R0-R12,PC|
000010c0  7d 0d 04 d8 04 0d 04 e2  38 4d 4f 56 20 20 20 52  |}.......8MOV   R|
000010d0  30 2c 23 31 33 3a 4d 4f  56 20 52 31 2c 23 34 3a  |0,#13:MOV R1,#4:|
000010e0  53 57 49 20 22 4f 53 5f  42 79 74 65 22 20 3b 20  |SWI "OS_Byte" ; |
000010f0  44 69 73 61 62 6c 65 20  65 76 65 6e 74 0d 04 ec  |Disable event...|
00001100  04 0d 04 f6 11 4d 4f 56  20 20 20 52 30 2c 23 26  |.....MOV   R0,#&|
00001110  31 30 0d 05 00 3f 42 4c  20 20 20 20 47 65 74 5f  |10...?BL    Get_|
00001120  49 6e 74 72 5f 41 64 72  20 20 20 20 20 20 20 20  |Intr_Adr        |
00001130  20 20 20 3b 20 52 65 74  75 72 6e 20 52 31 3d 3e  |   ; Return R1=>|
00001140  49 6e 74 65 72 72 75 70  74 20 61 64 64 72 65 73  |Interrupt addres|
00001150  73 0d 05 0a 0f 4d 4f 56  20 20 20 52 32 2c 23 30  |s....MOV   R2,#0|
00001160  0d 05 14 16 53 57 49 20  20 20 22 4f 53 5f 52 65  |....SWI   "OS_Re|
00001170  6c 65 61 73 65 22 0d 05  1e 0f 4d 4f 56 20 20 20  |lease"....MOV   |
00001180  52 30 2c 23 30 0d 05 28  16 53 54 52 20 20 20 52  |R0,#0..(.STR   R|
00001190  30 2c 50 6c 61 79 5f 46  6c 61 67 0d 05 32 17 42  |0,Play_Flag..2.B|
000011a0  4c 20 20 20 20 54 72 6b  5f 43 6c 6f 73 65 5f 41  |L    Trk_Close_A|
000011b0  6c 6c 0d 05 3c 12 4c 44  52 20 20 20 52 32 2c 5b  |ll..<.LDR   R2,[|
000011c0  52 31 32 5d 0d 05 46 32  43 4d 50 20 20 20 52 32  |R12]..F2CMP   R2|
000011d0  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
000011e0  20 20 20 20 20 3b 20 4e  6f 6e 65 20 61 6c 6c 6f  |     ; None allo|
000011f0  63 61 74 65 64 3f 0d 05  50 2c 4c 44 4d 45 51 46  |cated?..P,LDMEQF|
00001200  44 20 52 31 33 21 2c 7b  52 30 2d 52 31 32 2c 50  |D R13!,{R0-R12,P|
00001210  43 7d 20 20 20 20 20 3b  20 4f 6b 20 72 65 74 75  |C}     ; Ok retu|
00001220  72 6e 0d 05 5a 2d 4d 4f  56 20 20 20 52 30 2c 23  |rn..Z-MOV   R0,#|
00001230  37 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |7               |
00001240  20 20 20 3b 20 46 72 65  65 20 69 74 20 75 70 0d  |   ; Free it up.|
00001250  05 64 16 53 57 49 20 20  20 22 58 4f 53 5f 4d 6f  |.d.SWI   "XOS_Mo|
00001260  64 75 6c 65 22 0d 05 6e  0f 4d 4f 56 20 20 20 52  |dule"..n.MOV   R|
00001270  30 2c 23 30 0d 05 78 12  53 54 52 56 43 20 52 30  |0,#0..x.STRVC R0|
00001280  2c 5b 52 31 32 5d 0d 05  82 27 4c 44 4d 46 44 20  |,[R12]...'LDMFD |
00001290  52 31 33 21 2c 7b 52 30  2d 52 31 32 2c 50 43 7d  |R13!,{R0-R12,PC}|
000012a0  20 20 20 20 20 20 20 3b  20 42 79 65 21 0d 05 8c  |       ; Bye!...|
000012b0  04 0d 05 96 0f 2e 50 6c  61 79 5f 50 61 75 73 65  |......Play_Pause|
000012c0  0d 05 a0 1b 53 54 4d 46  44 20 52 31 33 21 2c 7b  |....STMFD R13!,{|
000012d0  52 30 2d 52 31 32 2c 52  31 34 7d 0d 05 aa 0f 4d  |R0-R12,R14}....M|
000012e0  4f 56 20 20 20 52 30 2c  23 30 0d 05 b4 3a 53 54  |OV   R0,#0...:ST|
000012f0  52 20 20 20 52 30 2c 50  6c 61 79 5f 53 74 61 74  |R   R0,Play_Stat|
00001300  75 73 20 20 20 20 20 20  20 20 20 3b 20 50 6c 61  |us         ; Pla|
00001310  79 20 73 74 61 74 75 73  20 3d 20 30 20 3d 20 50  |y status = 0 = P|
00001320  61 75 73 65 0d 05 be 1a  4c 44 4d 46 44 20 52 31  |ause....LDMFD R1|
00001330  33 21 2c 7b 52 30 2d 52  31 32 2c 50 43 7d 0d 05  |3!,{R0-R12,PC}..|
00001340  c8 04 0d 05 d2 3d 3b 20  2a 2d 2d 2d 2d 2d 2d 2d  |.....=; *-------|
00001350  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001370  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2a 0d  |--------------*.|
00001380  05 dc 3d 3b 20 2a 20 20  50 4c 41 59 53 54 41 52  |..=; *  PLAYSTAR|
00001390  54 20 3d 20 50 6c 61 79  73 20 6d 75 73 69 63 20  |T = Plays music |
000013a0  61 66 74 65 72 20 61 20  50 6c 61 79 50 61 75 73  |after a PlayPaus|
000013b0  65 20 63 6f 6d 6d 61 6e  64 20 20 2a 0d 05 e6 3d  |e command  *...=|
000013c0  3b 20 2a 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; *-------------|
000013d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000013f0  2d 2d 2d 2d 2d 2d 2d 2d  2a 0d 05 f0 04 0d 05 fa  |--------*.......|
00001400  0f 2e 50 6c 61 79 5f 53  74 61 72 74 0d 06 04 1b  |..Play_Start....|
00001410  53 54 4d 46 44 20 52 31  33 21 2c 7b 52 30 2d 52  |STMFD R13!,{R0-R|
00001420  31 32 2c 52 31 34 7d 0d  06 0e 0f 4d 4f 56 20 20  |12,R14}....MOV  |
00001430  20 52 30 2c 23 31 0d 06  18 39 53 54 52 20 20 20  | R0,#1...9STR   |
00001440  52 30 2c 50 6c 61 79 5f  53 74 61 74 75 73 20 20  |R0,Play_Status  |
00001450  20 20 20 20 20 20 20 3b  20 50 6c 61 79 20 73 74  |       ; Play st|
00001460  61 74 75 73 20 3d 20 31  20 3d 20 50 6c 61 79 0d  |atus = 1 = Play.|
00001470  06 22 1a 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |.".LDMFD R13!,{R|
00001480  30 2d 52 31 32 2c 50 43  7d 0d 06 2c 04 0d 06 36  |0-R12,PC}..,...6|
00001490  10 2e 50 6c 61 79 5f 53  74 61 74 75 73 0d 06 40  |..Play_Status..@|
000014a0  0a 45 51 55 44 20 31 0d  06 4a 04 0d 06 54 36 3b  |.EQUD 1..J...T6;|
000014b0  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
000014c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000014e0  2a 0d 06 5e 36 3b 20 2a  20 20 50 4c 41 59 50 4f  |*..^6; *  PLAYPO|
000014f0  53 20 3d 20 53 65 74 20  70 6f 73 69 74 69 6f 6e  |S = Set position|
00001500  20 69 6e 20 73 65 71 75  65 6e 63 65 20 28 30 2d  | in sequence (0-|
00001510  31 32 37 29 20 20 2a 0d  06 68 36 3b 20 2a 2d 2d  |127)  *..h6; *--|
00001520  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001540  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2a 0d 06 72  |------------*..r|
00001550  04 0d 06 7c 10 2e 53 65  74 5f 50 6c 61 79 50 6f  |...|..Set_PlayPo|
00001560  73 0d 06 86 1b 53 54 4d  46 44 20 52 31 33 21 2c  |s....STMFD R13!,|
00001570  7b 52 30 2d 52 31 32 2c  52 31 34 7d 0d 06 90 2f  |{R0-R12,R14}.../|
00001580  4d 4f 56 20 20 20 52 31  2c 52 30 20 20 20 20 20  |MOV   R1,R0     |
00001590  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 52  |             ; R|
000015a0  31 20 3d 3e 20 53 74 72  69 6e 67 0d 06 9a 2a 4d  |1 => String...*M|
000015b0  4f 56 20 20 20 52 30 2c  23 31 30 20 20 20 20 20  |OV   R0,#10     |
000015c0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 42 61  |            ; Ba|
000015d0  73 65 20 31 30 0d 06 a4  30 84 52 20 20 20 52 30  |se 10...0.R   R0|
000015e0  2c 52 30 2c 23 26 41 30  3c 3c 32 34 20 20 20 20  |,R0,#&A0<<24    |
000015f0  20 20 20 20 20 3b 20 4e  75 6d 62 65 72 20 28 30  |     ; Number (0|
00001600  2d 31 32 37 29 0d 06 ae  11 4d 4f 56 20 20 20 52  |-127)....MOV   R|
00001610  32 2c 23 26 37 46 0d 06  b8 1b 53 57 49 20 20 20  |2,#&7F....SWI   |
00001620  22 4f 53 5f 52 65 61 64  55 6e 73 69 67 6e 65 64  |"OS_ReadUnsigned|
00001630  22 0d 06 c2 1d 42 4c 20  20 20 20 47 65 74 5f 54  |"....BL    Get_T|
00001640  72 6b 5f 49 6e 66 6f 73  5f 42 6c 6f 63 6b 0d 06  |rk_Infos_Block..|
00001650  cc 34 4c 44 52 20 20 20  52 34 2c 5b 52 31 32 2c  |.4LDR   R4,[R12,|
00001660  23 34 5d 20 20 20 20 20  20 20 20 20 20 20 20 3b  |#4]            ;|
00001670  20 52 34 20 3d 20 4d 75  73 69 63 20 6c 65 6e 67  | R4 = Music leng|
00001680  74 68 0d 06 d6 48 43 4d  50 20 20 20 52 32 2c 52  |th...HCMP   R2,R|
00001690  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
000016a0  20 20 20 3b 20 43 68 65  63 6b 20 69 66 20 70 6f  |   ; Check if po|
000016b0  73 69 74 69 6f 6e 20 3e  20 6d 61 78 69 20 6d 75  |sition > maxi mu|
000016c0  73 69 63 20 6c 65 6e 67  74 68 0d 06 e0 1c 4c 44  |sic length....LD|
000016d0  4d 47 54 46 44 20 52 31  33 21 2c 7b 52 30 2d 52  |MGTFD R13!,{R0-R|
000016e0  31 32 2c 50 43 7d 0d 06  ea 3b 53 54 52 20 20 20  |12,PC}...;STR   |
000016f0  52 32 2c 5b 52 31 32 5d  2c 23 38 20 20 20 20 20  |R2,[R12],#8     |
00001700  20 20 20 20 20 20 20 3b  20 53 65 74 20 70 6f 73  |       ; Set pos|
00001710  69 74 69 6f 6e 20 69 6e  20 73 65 71 75 65 6e 63  |ition in sequenc|
00001720  65 0d 06 f4 0f 4d 4f 56  20 20 20 52 33 2c 23 30  |e....MOV   R3,#0|
00001730  0d 06 fe 3a 53 54 52 20  20 20 52 33 2c 5b 52 31  |...:STR   R3,[R1|
00001740  32 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2]              |
00001750  20 3b 20 50 6f 73 69 74  69 6f 6e 20 69 6e 20 70  | ; Position in p|
00001760  61 74 74 65 72 6e 20 3d  20 30 0d 07 08 1a 4c 44  |attern = 0....LD|
00001770  4d 46 44 20 52 31 33 21  2c 7b 52 30 2d 52 31 32  |MFD R13!,{R0-R12|
00001780  2c 50 43 7d 0d 07 12 04  0d 07 1c 41 3b 20 2a 2d  |,PC}.......A; *-|
00001790  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000017c0  2d 2d 2d 2d 2d 2d 2d 2d  2a 0d 07 26 41 3b 20 2a  |--------*..&A; *|
000017d0  20 20 50 4c 41 59 49 4e  49 54 20 3d 20 4c 6f 61  |  PLAYINIT = Loa|
000017e0  64 20 4d 75 73 69 63 2c  20 49 6e 69 74 20 69 6e  |d Music, Init in|
000017f0  74 65 72 72 75 70 74 20  26 20 53 74 61 72 74 20  |terrupt & Start |
00001800  70 6c 61 79 69 6e 67 20  20 2a 0d 07 30 41 3b 20  |playing  *..0A; |
00001810  2a 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |*---------------|
00001820  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001840  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2a 0d 07 3a 04 0d  |----------*..:..|
00001850  07 44 0e 2e 50 6c 61 79  5f 49 6e 69 74 0d 07 4e  |.D..Play_Init..N|
00001860  1b 53 54 4d 46 44 20 52  31 33 21 2c 7b 52 30 2d  |.STMFD R13!,{R0-|
00001870  52 31 32 2c 52 31 34 7d  0d 07 58 33 42 4c 20 20  |R12,R14}..X3BL  |
00001880  20 20 6d 6f 64 5f 6b 69  6c 6c 20 20 20 20 20 20  |  mod_kill      |
00001890  20 20 20 20 3b 20 53 74  6f 70 20 61 6e 79 20 63  |    ; Stop any c|
000018a0  75 72 72 65 6e 74 20 74  75 6e 65 0d 07 62 2a 4d  |urrent tune..b*M|
000018b0  4f 56 20 20 20 52 31 2c  52 30 20 20 20 20 20 20  |OV   R1,R0      |
000018c0  20 20 20 20 20 20 20 3b  20 52 31 2d 3e 66 69 6c  |       ; R1->fil|
000018d0  65 6e 61 6d 65 0d 07 6c  31 4d 4f 56 20 20 20 52  |ename..l1MOV   R|
000018e0  30 2c 23 35 20 20 20 20  20 20 20 20 20 20 20 20  |0,#5            |
000018f0  20 3b 20 52 65 61 64 20  63 61 74 61 6c 6f 67 75  | ; Read catalogu|
00001900  65 20 69 6e 66 6f 0d 07  76 14 53 57 49 20 20 20  |e info..v.SWI   |
00001910  22 58 4f 53 5f 46 69 6c  65 22 0d 07 80 10 42 56  |"XOS_File"....BV|
00001920  43 20 20 20 6f 6b 66 69  6c 65 0d 07 8a 31 53 57  |C   okfile...1SW|
00001930  49 20 20 20 22 58 4f 53  5f 57 72 69 74 65 53 22  |I   "XOS_WriteS"|
00001940  20 20 20 20 20 20 3b 20  57 72 69 74 65 20 65 72  |      ; Write er|
00001950  72 6f 72 20 6d 65 73 73  61 67 65 0d 07 94 16 45  |ror message....E|
00001960  51 55 53 20 20 22 46 69  6c 65 20 65 72 72 6f 72  |QUS  "File error|
00001970  22 0d 07 9e 21 45 51 55  42 20 20 31 33 3a 45 51  |"...!EQUB  13:EQ|
00001980  55 42 20 31 30 3a 45 51  55 42 20 30 3a 41 4c 49  |UB 10:EQUB 0:ALI|
00001990  47 4e 0d 07 a8 1a 4c 44  4d 46 44 20 52 31 33 21  |GN....LDMFD R13!|
000019a0  2c 7b 52 30 2d 52 31 32  2c 50 43 7d 0d 07 b2 04  |,{R0-R12,PC}....|
000019b0  0d 07 bc 0b 2e 6f 6b 66  69 6c 65 0d 07 c6 2f 4d  |.....okfile.../M|
000019c0  4f 56 20 20 20 52 33 2c  52 34 20 20 20 20 20 20  |OV   R3,R4      |
000019d0  20 20 20 20 20 20 20 3b  20 54 72 79 20 74 6f 20  |       ; Try to |
000019e0  67 65 74 20 6d 65 6d 6f  72 79 0d 07 d0 0f 4d 4f  |get memory....MO|
000019f0  56 20 20 20 52 30 2c 23  36 0d 07 da 16 53 57 49  |V   R0,#6....SWI|
00001a00  20 20 20 22 58 4f 53 5f  4d 6f 64 75 6c 65 22 0d  |   "XOS_Module".|
00001a10  07 e4 0f 42 56 43 20 20  20 6f 6b 6d 65 6d 0d 07  |...BVC   okmem..|
00001a20  ee 31 53 57 49 20 20 20  22 58 4f 53 5f 57 72 69  |.1SWI   "XOS_Wri|
00001a30  74 65 53 22 20 20 20 20  20 20 3b 20 57 72 69 74  |teS"      ; Writ|
00001a40  65 20 65 72 72 6f 72 20  6d 65 73 73 61 67 65 0d  |e error message.|
00001a50  07 f8 1e 45 51 55 53 20  20 22 4e 6f 20 72 6f 6f  |...EQUS  "No roo|
00001a60  6d 20 66 6f 72 20 6d 6f  64 75 6c 65 22 0d 08 02  |m for module"...|
00001a70  21 45 51 55 42 20 20 31  33 3a 45 51 55 42 20 31  |!EQUB  13:EQUB 1|
00001a80  30 3a 45 51 55 42 20 30  3a 41 4c 49 47 4e 0d 08  |0:EQUB 0:ALIGN..|
00001a90  0c 1a 4c 44 4d 46 44 20  52 31 33 21 2c 7b 52 30  |..LDMFD R13!,{R0|
00001aa0  2d 52 31 32 2c 50 43 7d  0d 08 16 04 0d 08 20 0a  |-R12,PC}...... .|
00001ab0  2e 6f 6b 6d 65 6d 0d 08  2a 12 53 54 52 20 20 20  |.okmem..*.STR   |
00001ac0  52 32 2c 5b 52 31 32 5d  0d 08 34 35 53 54 52 20  |R2,[R12]..45STR |
00001ad0  20 20 52 32 2c 54 72 6b  5f 42 61 73 65 20 20 20  |  R2,Trk_Base   |
00001ae0  20 20 20 20 3b 20 53 61  76 65 20 6d 75 73 69 63  |    ; Save music|
00001af0  20 62 61 73 65 20 61 64  64 72 65 73 73 0d 08 3e  | base address..>|
00001b00  10 4d 4f 56 20 20 20 52  30 2c 23 31 36 0d 08 48  |.MOV   R0,#16..H|
00001b10  0f 4d 4f 56 20 20 20 52  33 2c 23 30 0d 08 52 2b  |.MOV   R3,#0..R+|
00001b20  53 57 49 20 20 20 22 58  4f 53 5f 46 69 6c 65 22  |SWI   "XOS_File"|
00001b30  20 20 20 20 20 20 20 20  3b 20 4c 6f 61 64 20 74  |        ; Load t|
00001b40  68 65 20 66 69 6c 65 0d  08 5c 10 42 56 43 20 20  |he file..\.BVC  |
00001b50  20 6f 6b 6c 6f 61 64 0d  08 66 31 53 57 49 20 20  | okload..f1SWI  |
00001b60  20 22 4f 53 5f 57 72 69  74 65 53 22 20 20 20 20  | "OS_WriteS"    |
00001b70  20 20 20 3b 20 57 72 69  74 65 20 65 72 72 6f 72  |   ; Write error|
00001b80  20 6d 65 73 73 61 67 65  0d 08 70 1b 45 51 55 53  | message..p.EQUS|
00001b90  20 20 22 43 61 6e 27 74  20 6c 6f 61 64 20 66 69  |  "Can't load fi|
00001ba0  6c 65 22 0d 08 7a 21 45  51 55 42 20 20 31 33 3a  |le"..z!EQUB  13:|
00001bb0  45 51 55 42 20 31 30 3a  45 51 55 42 20 30 3a 41  |EQUB 10:EQUB 0:A|
00001bc0  4c 49 47 4e 0d 08 84 12  42 4c 20 20 20 20 6d 6f  |LIGN....BL    mo|
00001bd0  64 5f 6b 69 6c 6c 0d 08  8e 1a 4c 44 4d 46 44 20  |d_kill....LDMFD |
00001be0  52 31 33 21 2c 7b 52 30  2d 52 31 32 2c 50 43 7d  |R13!,{R0-R12,PC}|
00001bf0  0d 08 98 04 0d 08 a2 0b  2e 6f 6b 6c 6f 61 64 0d  |.........okload.|
00001c00  08 ac 43 42 4c 20 20 20  20 54 72 6b 5f 49 6e 69  |..CBL    Trk_Ini|
00001c10  74 5f 41 6c 6c 20 20 20  20 20 20 3b 20 49 6e 69  |t_All      ; Ini|
00001c20  74 20 54 72 61 63 6b 65  72 20 56 61 72 69 61 62  |t Tracker Variab|
00001c30  6c 65 73 20 26 20 53 6f  75 6e 64 20 53 79 73 74  |les & Sound Syst|
00001c40  65 6d 0d 08 b6 41 4d 4f  56 20 20 20 52 30 2c 23  |em...AMOV   R0,#|
00001c50  26 31 30 20 20 20 20 20  20 20 20 20 20 20 3b 20  |&10           ; |
00001c60  43 6f 6d 6d 65 6e 74 20  74 68 69 73 20 6c 6f 74  |Comment this lot|
00001c70  20 69 73 20 75 73 69 6e  67 20 63 61 6c 6c 65 76  | is using callev|
00001c80  65 72 79 0d 08 c0 3a 42  4c 20 20 20 20 47 65 74  |ery...:BL    Get|
00001c90  5f 49 6e 74 72 5f 41 64  72 20 20 20 20 20 20 3b  |_Intr_Adr      ;|
00001ca0  20 52 65 74 75 72 6e 20  52 31 3d 3e 49 6e 74 65  | Return R1=>Inte|
00001cb0  72 72 75 70 74 20 61 64  64 72 65 73 73 0d 08 ca  |rrupt address...|
00001cc0  21 4d 4f 56 20 20 20 52  32 2c 23 30 20 20 20 20  |!MOV   R2,#0    |
00001cd0  20 20 20 20 20 20 20 20  20 3b 20 52 31 32 0d 08  |         ; R12..|
00001ce0  d4 14 53 57 49 20 20 20  22 4f 53 5f 43 6c 61 69  |..SWI   "OS_Clai|
00001cf0  6d 22 0d 08 de 10 4d 4f  56 20 20 20 52 30 2c 23  |m"....MOV   R0,#|
00001d00  31 34 0d 08 e8 0f 4d 4f  56 20 20 20 52 31 2c 23  |14....MOV   R1,#|
00001d10  34 0d 08 f2 13 53 57 49  20 20 20 22 4f 53 5f 42  |4....SWI   "OS_B|
00001d20  79 74 65 22 0d 08 fc 0f  4d 4f 56 20 20 20 52 30  |yte"....MOV   R0|
00001d30  2c 23 31 0d 09 06 16 53  54 52 20 20 20 52 30 2c  |,#1....STR   R0,|
00001d40  50 6c 61 79 5f 46 6c 61  67 0d 09 10 0f 4d 4f 56  |Play_Flag....MOV|
00001d50  20 20 20 52 30 2c 23 31  0d 09 1a 39 53 54 52 20  |   R0,#1...9STR |
00001d60  20 20 52 30 2c 50 6c 61  79 5f 53 74 61 74 75 73  |  R0,Play_Status|
00001d70  20 20 20 20 20 20 20 20  20 3b 20 50 6c 61 79 20  |         ; Play |
00001d80  73 74 61 74 75 73 20 3d  20 31 20 3d 20 50 6c 61  |status = 1 = Pla|
00001d90  79 0d 09 24 1a 4c 44 4d  46 44 20 52 31 33 21 2c  |y..$.LDMFD R13!,|
00001da0  7b 52 30 2d 52 31 32 2c  50 43 7d 0d 09 2e 04 0d  |{R0-R12,PC}.....|
00001db0  09 38 0e 2e 50 6c 61 79  5f 46 6c 61 67 0d 09 42  |.8..Play_Flag..B|
00001dc0  35 45 51 55 44 20 20 30  20 20 20 20 20 20 20 20  |5EQUD  0        |
00001dd0  20 20 20 20 20 20 20 20  20 3b 20 3c 3e 30 20 69  |         ; <>0 i|
00001de0  66 20 74 75 6e 65 20 69  6e 20 70 72 6f 67 72 65  |f tune in progre|
00001df0  73 73 0d 09 4c 04 0d 09  56 3a 3b 20 2a 2d 2d 2d  |ss..L...V:; *---|
00001e00  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001e20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2a  |---------------*|
00001e30  0d 09 60 3a 3b 20 2a 20  20 20 20 49 6e 69 74 20  |..`:; *    Init |
00001e40  54 72 61 63 6b 65 72 20  56 61 72 69 61 62 6c 65  |Tracker Variable|
00001e50  73 20 26 20 49 6e 69 74  20 53 6f 75 6e 64 20 53  |s & Init Sound S|
00001e60  79 73 74 65 6d 20 20 20  20 2a 0d 09 6a 3a 3b 20  |ystem    *..j:; |
00001e70  2a 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |*---------------|
00001e80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001ea0  2d 2d 2d 2a 0d 09 74 04  0d 09 7e 11 2e 54 72 6b  |---*..t...~..Trk|
00001eb0  5f 49 6e 69 74 5f 41 6c  6c 0d 09 88 14 53 54 4d  |_Init_All....STM|
00001ec0  46 44 20 52 31 33 21 2c  7b 52 31 34 7d 0d 09 92  |FD R13!,{R14}...|
00001ed0  42 41 44 52 20 20 20 52  31 32 2c 54 72 6b 5f 49  |BADR   R12,Trk_I|
00001ee0  6e 66 6f 73 5f 42 6c 6f  63 6b 20 3b 20 52 31 32  |nfos_Block ; R12|
00001ef0  20 3d 3e 20 54 72 61 63  6b 65 72 20 50 6f 69 6e  | => Tracker Poin|
00001f00  74 65 72 73 20 26 20 43  6f 75 6e 74 65 72 73 0d  |ters & Counters.|
00001f10  09 9c 0f 4d 4f 56 20 20  20 52 31 2c 23 30 0d 09  |...MOV   R1,#0..|
00001f20  a6 40 53 54 52 20 20 20  52 31 2c 5b 52 31 32 5d  |.@STR   R1,[R12]|
00001f30  2c 23 34 20 20 20 20 20  20 20 20 20 3b 20 53 65  |,#4         ; Se|
00001f40  74 20 70 6f 73 69 74 69  6f 6e 20 69 6e 20 53 65  |t position in Se|
00001f50  71 75 65 6e 63 65 20 74  6f 20 7a 65 72 6f 0d 09  |quence to zero..|
00001f60  b0 04 0d 09 ba 38 4c 44  52 20 20 20 52 30 2c 54  |.....8LDR   R0,T|
00001f70  72 6b 5f 42 61 73 65 20  20 20 20 20 20 20 20 20  |rk_Base         |
00001f80  3b 20 52 30 20 3d 3e 20  4d 75 73 69 63 20 42 61  |; R0 => Music Ba|
00001f90  73 65 20 41 64 64 72 65  73 73 0d 09 c4 35 4c 44  |se Address...5LD|
00001fa0  52 20 20 20 52 39 2c 5b  52 30 2c 23 34 5d 20 20  |R   R9,[R0,#4]  |
00001fb0  20 20 20 20 20 20 20 20  3b 20 52 39 20 3d 20 46  |        ; R9 = F|
00001fc0  69 6c 65 20 4c 65 6e 67  74 68 20 28 2d 38 29 0d  |ile Length (-8).|
00001fd0  09 ce 39 41 44 44 20 20  20 52 30 2c 52 30 2c 23  |..9ADD   R0,R0,#|
00001fe0  38 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 52  |8            ; R|
00001ff0  30 20 3d 3e 20 46 69 72  73 74 20 43 68 75 6e 6b  |0 => First Chunk|
00002000  20 41 64 64 72 65 73 73  0d 09 d8 31 41 44 44 20  | Address...1ADD |
00002010  20 20 52 39 2c 52 30 2c  52 39 20 20 20 20 20 20  |  R9,R0,R9      |
00002020  20 20 20 20 20 20 3b 20  52 39 20 3d 3e 20 45 6e  |      ; R9 => En|
00002030  64 20 6f 66 20 66 69 6c  65 0d 09 e2 10 4d 4f 56  |d of file....MOV|
00002040  20 20 20 52 31 30 2c 52  30 0d 09 ec 04 0d 09 f6  |   R10,R0.......|
00002050  17 4c 44 52 20 20 20 52  34 2c 4d 4c 45 4e 5f 43  |.LDR   R4,MLEN_C|
00002060  68 75 6e 6b 0d 0a 00 14  42 4c 20 20 20 20 53 65  |hunk....BL    Se|
00002070  61 72 63 68 5f 54 46 46  0d 0a 0a 44 4c 44 52 20  |arch_TFF...DLDR |
00002080  20 20 52 31 2c 5b 52 30  5d 20 20 20 20 20 20 20  |  R1,[R0]       |
00002090  20 20 20 20 20 20 3b 20  52 31 20 3d 20 4d 75 73  |      ; R1 = Mus|
000020a0  69 63 20 4c 65 6e 67 74  68 20 28 3d 53 65 71 75  |ic Length (=Sequ|
000020b0  65 6e 63 65 20 6c 65 6e  67 74 68 29 0d 0a 14 15  |ence length)....|
000020c0  53 54 52 20 20 20 52 31  2c 5b 52 31 32 5d 2c 23  |STR   R1,[R12],#|
000020d0  34 0d 0a 1e 0f 4d 4f 56  20 20 20 52 31 2c 23 30  |4....MOV   R1,#0|
000020e0  0d 0a 28 3c 53 54 52 20  20 20 52 31 2c 5b 52 31  |..(<STR   R1,[R1|
000020f0  32 5d 2c 23 34 20 20 20  20 20 20 20 20 20 3b 20  |2],#4         ; |
00002100  50 61 74 74 65 72 6e 20  6c 69 6e 65 20 63 6f 75  |Pattern line cou|
00002110  6e 74 65 72 20 74 6f 20  7a 65 72 6f 0d 0a 32 04  |nter to zero..2.|
00002120  0d 0a 3c 10 4d 4f 56 20  20 20 52 30 2c 52 31 30  |..<.MOV   R0,R10|
00002130  0d 0a 46 17 4c 44 52 20  20 20 52 34 2c 50 4c 45  |..F.LDR   R4,PLE|
00002140  4e 5f 43 68 75 6e 6b 0d  0a 50 14 42 4c 20 20 20  |N_Chunk..P.BL   |
00002150  20 53 65 61 72 63 68 5f  54 46 46 0d 0a 5a 3f 53  | Search_TFF..Z?S|
00002160  54 52 20 20 20 52 30 2c  5b 52 31 32 5d 2c 23 34  |TR   R0,[R12],#4|
00002170  20 20 20 20 20 20 20 20  20 3b 20 53 61 76 65 20  |         ; Save |
00002180  50 61 74 74 65 72 6e 20  54 61 62 6c 65 20 42 61  |Pattern Table Ba|
00002190  73 65 20 41 64 64 72 65  73 73 0d 0a 64 04 0d 0a  |se Address..d...|
000021a0  6e 10 4d 4f 56 20 20 20  52 30 2c 52 31 30 0d 0a  |n.MOV   R0,R10..|
000021b0  78 17 4c 44 52 20 20 20  52 34 2c 53 45 51 55 5f  |x.LDR   R4,SEQU_|
000021c0  43 68 75 6e 6b 0d 0a 82  14 42 4c 20 20 20 20 53  |Chunk....BL    S|
000021d0  65 61 72 63 68 5f 54 46  46 0d 0a 8c 3a 53 54 52  |earch_TFF...:STR|
000021e0  20 20 20 52 30 2c 5b 52  31 32 5d 2c 23 34 20 20  |   R0,[R12],#4  |
000021f0  20 20 20 20 20 20 20 3b  20 53 61 76 65 20 53 65  |       ; Save Se|
00002200  71 75 65 6e 63 65 20 42  61 73 65 20 41 64 64 72  |quence Base Addr|
00002210  65 73 73 0d 0a 96 04 0d  0a a0 10 4d 4f 56 20 20  |ess........MOV  |
00002220  20 52 30 2c 52 31 30 0d  0a aa 17 4c 44 52 20 20  | R0,R10....LDR  |
00002230  20 52 34 2c 50 4e 55 4d  5f 43 68 75 6e 6b 0d 0a  | R4,PNUM_Chunk..|
00002240  b4 14 42 4c 20 20 20 20  53 65 61 72 63 68 5f 54  |..BL    Search_T|
00002250  46 46 0d 0a be 3d 4c 44  52 20 20 20 52 36 2c 5b  |FF...=LDR   R6,[|
00002260  52 30 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |R0]             |
00002270  3b 20 52 36 20 3d 20 50  61 74 74 65 72 6e 73 20  |; R6 = Patterns |
00002280  6e 75 6d 62 65 72 20 69  6e 20 6d 75 73 69 63 0d  |number in music.|
00002290  0a c8 04 0d 0a d2 38 42  4c 20 20 20 20 47 65 74  |......8BL    Get|
000022a0  5f 50 61 74 74 65 72 6e  73 5f 54 61 62 6c 65 20  |_Patterns_Table |
000022b0  20 3b 20 52 31 31 20 3d  3e 20 6f 6e 20 50 61 74  | ; R11 => on Pat|
000022c0  74 65 72 6e 73 20 54 61  62 6c 65 0d 0a dc 16 53  |terns Table....S|
000022d0  54 52 20 20 20 52 31 31  2c 5b 52 31 32 5d 2c 23  |TR   R11,[R12],#|
000022e0  34 0d 0a e6 17 4c 44 52  20 20 20 52 34 2c 50 41  |4....LDR   R4,PA|
000022f0  54 54 5f 43 68 75 6e 6b  0d 0a f0 10 4d 4f 56 20  |TT_Chunk....MOV |
00002300  20 20 52 30 2c 52 31 30  0d 0a fa 14 2e 53 65 61  |  R0,R10.....Sea|
00002310  72 63 68 5f 50 61 74 74  65 72 6e 73 0d 0b 04 14  |rch_Patterns....|
00002320  42 4c 20 20 20 20 53 65  61 72 63 68 5f 54 46 46  |BL    Search_TFF|
00002330  0d 0b 0e 46 53 54 52 20  20 20 52 30 2c 5b 52 31  |...FSTR   R0,[R1|
00002340  31 5d 2c 23 34 20 20 20  20 20 20 20 20 20 3b 20  |1],#4         ; |
00002350  53 61 76 65 20 50 61 74  74 65 72 6e 20 41 64 64  |Save Pattern Add|
00002360  72 65 73 73 20 69 6e 20  50 61 74 74 65 72 6e 73  |ress in Patterns|
00002370  20 54 61 62 6c 65 0d 0b  18 4b 41 44 44 20 20 20  | Table...KADD   |
00002380  52 30 2c 52 30 2c 52 33  20 20 20 20 20 20 20 20  |R0,R0,R3        |
00002390  20 20 20 20 3b 20 41 64  64 20 70 61 74 74 65 72  |    ; Add patter|
000023a0  6e 20 6c 65 6e 67 74 68  20 74 6f 20 63 68 75 6e  |n length to chun|
000023b0  6b 20 28 3d 6e 65 78 74  20 70 61 74 74 65 72 6e  |k (=next pattern|
000023c0  29 0d 0b 22 12 53 55 42  53 20 20 52 36 2c 52 36  |)..".SUBS  R6,R6|
000023d0  2c 23 31 0d 0b 2c 19 42  47 54 20 20 20 53 65 61  |,#1..,.BGT   Sea|
000023e0  72 63 68 5f 50 61 74 74  65 72 6e 73 0d 0b 36 04  |rch_Patterns..6.|
000023f0  0d 0b 40 18 41 44 52 20  20 20 52 31 2c 54 72 6b  |..@.ADR   R1,Trk|
00002400  5f 53 61 6d 70 6c 65 73  0d 0b 4a 17 4c 44 52 20  |_Samples..J.LDR |
00002410  20 20 52 34 2c 53 41 4d  50 5f 43 68 75 6e 6b 0d  |  R4,SAMP_Chunk.|
00002420  0b 54 43 4d 4f 56 20 20  20 52 37 2c 23 33 36 20  |.TCMOV   R7,#36 |
00002430  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 33  |             ; 3|
00002440  36 20 53 61 6d 70 6c 65  73 20 43 68 75 6e 6b 20  |6 Samples Chunk |
00002450  69 6e 20 6f 6e 65 20 6d  75 73 69 63 20 70 69 65  |in one music pie|
00002460  63 65 0d 0b 5e 15 2e 49  6e 69 74 5f 54 72 6b 5f  |ce..^..Init_Trk_|
00002470  53 61 6d 70 6c 65 73 0d  0b 68 14 42 4c 20 20 20  |Samples..h.BL   |
00002480  20 53 65 61 72 63 68 5f  54 46 46 0d 0b 72 12 53  | Search_TFF..r.S|
00002490  55 42 20 20 20 52 35 2c  52 30 2c 23 38 0d 0b 7c  |UB   R5,R0,#8..||
000024a0  14 53 54 52 20 20 20 52  35 2c 5b 52 31 5d 2c 23  |.STR   R5,[R1],#|
000024b0  34 0d 0b 86 12 41 44 44  20 20 20 52 30 2c 52 30  |4....ADD   R0,R0|
000024c0  2c 52 33 0d 0b 90 12 53  55 42 53 20 20 52 37 2c  |,R3....SUBS  R7,|
000024d0  52 37 2c 23 31 0d 0b 9a  1a 42 47 54 20 20 20 49  |R7,#1....BGT   I|
000024e0  6e 69 74 5f 54 72 6b 5f  53 61 6d 70 6c 65 73 0d  |nit_Trk_Samples.|
000024f0  0b a4 04 0d 0b ae 10 4d  4f 56 20 20 20 52 30 2c  |.......MOV   R0,|
00002500  52 31 30 0d 0b b8 17 4c  44 52 20 20 20 52 34 2c  |R10....LDR   R4,|
00002510  4d 56 4f 58 5f 43 68 75  6e 6b 0d 0b c2 14 42 4c  |MVOX_Chunk....BL|
00002520  20 20 20 20 53 65 61 72  63 68 5f 54 46 46 0d 0b  |    Search_TFF..|
00002530  cc 33 4c 44 52 20 20 20  52 31 32 2c 5b 52 30 5d  |.3LDR   R12,[R0]|
00002540  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 52 31  |            ; R1|
00002550  32 20 3d 20 56 6f 69 63  65 73 20 4e 75 6d 62 65  |2 = Voices Numbe|
00002560  72 0d 0b d6 18 53 54 52  20 20 20 52 31 32 2c 54  |r....STR   R12,T|
00002570  72 6b 5f 56 6f 69 63 65  73 0d 0b e0 04 0d 0b ea  |rk_Voices.......|
00002580  10 4d 4f 56 20 20 20 52  30 2c 52 31 30 0d 0b f4  |.MOV   R0,R10...|
00002590  17 4c 44 52 20 20 20 52  34 2c 53 54 45 52 5f 43  |.LDR   R4,STER_C|
000025a0  68 75 6e 6b 0d 0b fe 14  42 4c 20 20 20 20 53 65  |hunk....BL    Se|
000025b0  61 72 63 68 5f 54 46 46  0d 0c 08 3c 4d 4f 56 20  |arch_TFF...<MOV |
000025c0  20 20 52 31 31 2c 52 30  20 20 20 20 20 20 20 20  |  R11,R0        |
000025d0  20 20 20 20 20 20 3b 20  52 31 31 20 3d 3e 20 53  |      ; R11 => S|
000025e0  74 65 72 65 6f 20 50 6f  73 69 74 69 6f 6e 73 20  |tereo Positions |
000025f0  4c 69 73 74 0d 0c 12 43  42 4c 20 20 20 20 49 6e  |List...CBL    In|
00002600  69 74 5f 53 6f 75 6e 64  5f 53 79 73 74 65 6d 20  |it_Sound_System |
00002610  20 20 3b 20 4a 75 6d 70  20 54 6f 20 53 6f 75 6e  |  ; Jump To Soun|
00002620  64 20 53 79 73 74 65 6d  20 49 6e 69 74 69 61 6c  |d System Initial|
00002630  69 73 61 74 69 6f 6e 0d  0c 1c 13 4c 44 4d 46 44  |isation....LDMFD|
00002640  20 52 31 33 21 2c 7b 50  43 7d 0d 0c 26 04 0d 0c  | R13!,{PC}..&...|
00002650  30 1b 2e 54 49 4e 46 5f  43 68 75 6e 6b 3a 45 51  |0..TINF_Chunk:EQ|
00002660  55 53 20 22 54 49 4e 46  22 0d 0c 3a 1b 2e 4d 56  |US "TINF"..:..MV|
00002670  4f 58 5f 43 68 75 6e 6b  3a 45 51 55 53 20 22 4d  |OX_Chunk:EQUS "M|
00002680  56 4f 58 22 0d 0c 44 1b  2e 53 54 45 52 5f 43 68  |VOX"..D..STER_Ch|
00002690  75 6e 6b 3a 45 51 55 53  20 22 53 54 45 52 22 0d  |unk:EQUS "STER".|
000026a0  0c 4e 1b 2e 4d 4c 45 4e  5f 43 68 75 6e 6b 3a 45  |.N..MLEN_Chunk:E|
000026b0  51 55 53 20 22 4d 4c 45  4e 22 0d 0c 58 1b 2e 50  |QUS "MLEN"..X..P|
000026c0  4c 45 4e 5f 43 68 75 6e  6b 3a 45 51 55 53 20 22  |LEN_Chunk:EQUS "|
000026d0  50 4c 45 4e 22 0d 0c 62  1b 2e 53 45 51 55 5f 43  |PLEN"..b..SEQU_C|
000026e0  68 75 6e 6b 3a 45 51 55  53 20 22 53 45 51 55 22  |hunk:EQUS "SEQU"|
000026f0  0d 0c 6c 1b 2e 50 4e 55  4d 5f 43 68 75 6e 6b 3a  |..l..PNUM_Chunk:|
00002700  45 51 55 53 20 22 50 4e  55 4d 22 0d 0c 76 1b 2e  |EQUS "PNUM"..v..|
00002710  50 41 54 54 5f 43 68 75  6e 6b 3a 45 51 55 53 20  |PATT_Chunk:EQUS |
00002720  22 50 41 54 54 22 0d 0c  80 1b 2e 53 41 4d 50 5f  |"PATT".....SAMP_|
00002730  43 68 75 6e 6b 3a 45 51  55 53 20 22 53 41 4d 50  |Chunk:EQUS "SAMP|
00002740  22 0d 0c 8a 04 0d 0c 94  3d 3b 20 2a 2d 2d 2d 2d  |".......=; *----|
00002750  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002780  2d 2a 0d 0c 9e 37 3b 20  2a 20 20 20 20 20 20 20  |-*...7; *       |
00002790  20 20 20 20 20 20 d4 20  42 55 46 46 45 52 20 c8  |      . BUFFER .|
000027a0  90 20 52 4f 55 54 49 4e  45 53 20 20 20 20 20 20  |. ROUTINES      |
000027b0  20 20 20 20 20 20 20 20  2a 0d 0c a8 3d 3b 20 2a  |        *...=; *|
000027c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000027f0  2d 2d 2d 2d 2d 2a 0d 0c  b2 3d 3b 20 2a 20 20 20  |-----*...=; *   |
00002800  52 39 20 3d 3e 20 54 72  61 63 6b 65 72 20 49 6e  |R9 => Tracker In|
00002810  66 6f 73 20 42 6c 6f 63  6b 20 28 33 32 20 42 79  |fos Block (32 By|
00002820  74 65 20 70 65 72 20 63  68 61 6e 6e 65 6c 29 20  |te per channel) |
00002830  20 20 2a 0d 0c bc 3d 3b  20 2a 20 20 20 20 20 5b  |  *...=; *     [|
00002840  30 30 2d 30 33 5d 20 28  20 52 30 20 29 20 50 68  |00-03] ( R0 ) Ph|
00002850  61 73 65 20 41 63 63 75  6d 75 6c 61 74 6f 72 20  |ase Accumulator |
00002860  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 2a  |               *|
00002870  0d 0c c6 3d 3b 20 2a 20  20 20 20 20 5b 30 34 2d  |...=; *     [04-|
00002880  30 37 5d 20 28 20 52 31  20 29 20 50 68 61 73 65  |07] ( R1 ) Phase|
00002890  20 49 6e 63 72 65 6d 65  6e 74 20 28 43 66 2e 20  | Increment (Cf. |
000028a0  46 72 65 71 75 65 6e 63  79 29 20 20 2a 0d 0c d0  |Frequency)  *...|
000028b0  3d 3b 20 2a 20 20 20 20  20 5b 30 38 2d 31 31 5d  |=; *     [08-11]|
000028c0  20 28 20 52 32 20 29 20  52 65 70 65 61 74 20 4f  | ( R2 ) Repeat O|
000028d0  66 66 73 65 74 20 20 20  20 20 20 20 20 20 20 20  |ffset           |
000028e0  20 20 20 20 20 20 20 20  20 2a 0d 0c da 3d 3b 20  |         *...=; |
000028f0  2a 20 20 20 20 20 5b 31  32 2d 31 35 5d 20 28 20  |*     [12-15] ( |
00002900  52 33 20 29 20 53 61 6d  70 6c 65 20 4c 65 6e 67  |R3 ) Sample Leng|
00002910  74 68 20 28 6f 72 20 52  65 70 65 61 74 20 4c 65  |th (or Repeat Le|
00002920  6e 67 74 68 29 20 2a 0d  0c e4 3d 3b 20 2a 20 20  |ngth) *...=; *  |
00002930  20 20 20 5b 31 36 2d 31  39 5d 20 28 20 52 34 20  |   [16-19] ( R4 |
00002940  29 20 53 61 6d 70 6c 65  20 41 64 64 72 65 73 73  |) Sample Address|
00002950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002960  20 20 20 2a 0d 0c ee 3d  3b 20 2a 20 20 20 20 20  |   *...=; *     |
00002970  5b 32 30 2d 32 33 5d 20  28 20 52 35 20 29 20 53  |[20-23] ( R5 ) S|
00002980  61 6d 70 6c 65 20 56 6f  6c 75 6d 65 20 28 32 35  |ample Volume (25|
00002990  35 2d 56 6f 6c 75 6d 65  29 20 20 20 20 20 20 20  |5-Volume)       |
000029a0  2a 0d 0c f8 3d 3b 20 2a  20 20 20 20 20 5b 32 34  |*...=; *     [24|
000029b0  2d 32 37 5d 20 28 20 52  36 20 29 20 46 69 6c 6c  |-27] ( R6 ) Fill|
000029c0  20 53 74 61 74 75 73 20  28 30 3d 5a 65 72 6f 73  | Status (0=Zeros|
000029d0  20 31 3d 53 61 6d 70 6c  65 73 29 20 20 2a 0d 0d  | 1=Samples)  *..|
000029e0  02 3d 3b 20 2a 20 20 20  20 20 5b 2e 2e 2e 2e 2e  |.=; *     [.....|
000029f0  5d 20 28 2e 2e 2e 2e 29  20 4f 74 68 65 72 73 20  |] (....) Others |
00002a00  69 6e 66 6f 73 20 66 6f  72 20 65 66 66 65 63 74  |infos for effect|
00002a10  73 20 20 20 20 20 20 20  20 20 2a 0d 0d 0c 3d 3b  |s         *...=;|
00002a20  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
00002a30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002a50  2d 2d 2d 2d 2d 2d 2d 2a  0d 0d 16 3d 3b 20 2a 20  |-------*...=; * |
00002a60  20 52 31 30 20 3d 20 44  4d 41 20 42 75 66 66 65  | R10 = DMA Buffe|
00002a70  72 20 6c 69 6d 69 74 73  20 28 2b 31 29 20 20 20  |r limits (+1)   |
00002a80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002a90  20 20 20 20 2a 0d 0d 20  3d 3b 20 2a 20 20 52 31  |    *.. =; *  R1|
00002aa0  31 20 3d 20 44 4d 41 20  42 75 66 66 65 72 20 49  |1 = DMA Buffer I|
00002ab0  6e 74 65 72 6c 65 61 76  65 20 49 6e 63 72 65 6d  |nterleave Increm|
00002ac0  65 6e 74 20 28 31 2d 38  29 20 20 20 20 20 20 20  |ent (1-8)       |
00002ad0  20 2a 0d 0d 2a 3d 3b 20  2a 20 20 52 31 32 20 3d  | *..*=; *  R12 =|
00002ae0  20 44 4d 41 20 42 75 66  66 65 72 20 62 61 73 65  | DMA Buffer base|
00002af0  20 70 6f 69 6e 74 65 72  20 28 2b 52 31 31 29 20  | pointer (+R11) |
00002b00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 2a 0d  |              *.|
00002b10  0d 34 3d 3b 20 2a 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.4=; *----------|
00002b20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002b40  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2a 0d 0d 3e 04  |-----------*..>.|
00002b50  0d 0d 48 16 2e 46 69 6c  6c 5f 53 6f 75 6e 64 5f  |..H..Fill_Sound_|
00002b60  42 75 66 66 65 72 0d 0d  52 1f 41 44 52 20 20 20  |Buffer..R.ADR   |
00002b70  52 39 2c 56 6f 69 63 65  73 5f 49 6e 66 6f 73 5f  |R9,Voices_Infos_|
00002b80  42 6c 6f 63 6b 0d 0d 5c  18 4c 44 52 20 20 20 52  |Block..\.LDR   R|
00002b90  30 2c 50 6c 61 79 5f 53  74 61 74 75 73 0d 0d 66  |0,Play_Status..f|
00002ba0  0f 43 4d 50 20 20 20 52  30 2c 23 30 0d 0d 70 14  |.CMP   R0,#0..p.|
00002bb0  42 45 51 20 20 20 43 6c  65 61 72 5f 46 69 6c 6c  |BEQ   Clear_Fill|
00002bc0  0d 0d 7a 04 0d 0d 84 18  41 44 44 20 20 20 52 39  |..z.....ADD   R9|
00002bd0  2c 52 39 2c 52 37 2c 4c  53 4c 23 35 0d 0d 8e 14  |,R9,R7,LSL#5....|
00002be0  4c 44 4d 49 41 20 52 39  2c 7b 52 30 2d 52 36 7d  |LDMIA R9,{R0-R6}|
00002bf0  0d 0d 98 04 0d 0d a2 0f  43 4d 50 20 20 20 52 36  |........CMP   R6|
00002c00  2c 23 30 0d 0d ac 14 42  45 51 20 20 20 43 6c 65  |,#0....BEQ   Cle|
00002c10  61 72 5f 46 69 6c 6c 0d  0d b6 04 0d 0d c0 19 53  |ar_Fill........S|
00002c20  55 42 20 20 20 52 38 2c  52 33 2c 52 30 2c 4c 53  |UB   R8,R3,R0,LS|
00002c30  52 23 31 36 0d 0d ca 18  53 55 42 20 20 20 52 38  |R#16....SUB   R8|
00002c40  2c 52 38 2c 52 31 2c 4c  53 52 23 38 0d 0d d4 11  |,R8,R1,LSR#8....|
00002c50  43 4d 50 20 20 20 52 38  2c 23 32 30 38 0d 0d de  |CMP   R8,#208...|
00002c60  15 41 44 52 47 54 20 52  32 2c 4e 65 77 5f 44 61  |.ADRGT R2,New_Da|
00002c70  74 61 0d 0d e8 13 42 47  54 20 20 20 46 75 6c 6c  |ta....BGT   Full|
00002c80  5f 46 69 6c 6c 0d 0d f2  04 0d 0d fc 0e 2e 46 69  |_Fill.........Fi|
00002c90  6c 6c 5f 4c 6f 6f 70 0d  0e 06 05 5d 0d 0e 10 12  |ll_Loop....]....|
00002ca0  e3 20 50 6c 6f 70 25 3d  31 20 b8 20 31 36 0d 0e  |. Plop%=1 . 16..|
00002cb0  1a 05 5b 0d 0e 24 0d 4f  50 54 20 50 61 73 73 25  |..[..$.OPT Pass%|
00002cc0  0d 0e 2e 1b 4c 44 52 42  20 20 52 38 2c 5b 52 34  |....LDRB  R8,[R4|
00002cd0  2c 52 30 2c 4c 53 52 23  31 36 5d 0d 0e 38 12 53  |,R0,LSR#16]..8.S|
00002ce0  55 42 53 20 20 52 38 2c  52 38 2c 52 35 0d 0e 42  |UBS  R8,R8,R5..B|
00002cf0  0f 4d 4f 56 4d 49 20 52  38 2c 23 30 0d 0e 4c 16  |.MOVMI R8,#0..L.|
00002d00  53 54 52 42 20 20 52 38  2c 5b 52 31 32 5d 2c 52  |STRB  R8,[R12],R|
00002d10  31 31 0d 0e 56 12 41 44  44 20 20 20 52 30 2c 52  |11..V.ADD   R0,R|
00002d20  30 2c 52 31 0d 0e 60 05  5d 0d 0e 6a 05 ed 0d 0e  |0,R1..`.]..j....|
00002d30  74 05 5b 0d 0e 7e 0f 4f  50 54 20 20 20 50 61 73  |t.[..~.OPT   Pas|
00002d40  73 25 0d 0e 88 31 43 4d  50 20 20 20 52 33 2c 52  |s%...1CMP   R3,R|
00002d50  30 2c 4c 53 52 23 31 36  20 20 20 20 20 20 20 20  |0,LSR#16        |
00002d60  20 20 3b 20 45 6e 64 20  6f 66 20 73 61 6d 70 6c  |  ; End of sampl|
00002d70  65 20 3f 0d 0e 92 1a 42  47 45 20 20 20 43 68 65  |e ?....BGE   Che|
00002d80  63 6b 5f 42 75 66 66 65  72 5f 45 6e 64 0d 0e 9c  |ck_Buffer_End...|
00002d90  39 4d 4f 56 53 20 20 52  30 2c 52 32 2c 4c 53 4c  |9MOVS  R0,R2,LSL|
00002da0  23 31 36 20 20 20 20 20  20 20 20 20 20 3b 20 59  |#16          ; Y|
00002db0  65 73 20 3d 3e 20 52 30  3d 52 65 70 65 61 74 20  |es => R0=Repeat |
00002dc0  4f 66 66 73 65 74 0d 0e  a6 4a 42 45 51 20 20 20  |Offset...JBEQ   |
00002dd0  43 6c 65 61 72 5f 46 69  6c 6c 20 20 20 20 20 20  |Clear_Fill      |
00002de0  20 20 20 20 20 20 3b 20  49 66 20 6e 6f 20 72 65  |      ; If no re|
00002df0  70 65 61 74 20 74 68 65  6e 20 66 69 6c 6c 20 62  |peat then fill b|
00002e00  75 66 66 65 72 20 77 69  74 68 20 7a 65 72 6f 73  |uffer with zeros|
00002e10  0d 0e b0 15 2e 43 68 65  63 6b 5f 42 75 66 66 65  |.....Check_Buffe|
00002e20  72 5f 45 6e 64 0d 0e ba  11 43 4d 50 20 20 20 52  |r_End....CMP   R|
00002e30  31 32 2c 52 31 30 0d 0e  c4 13 42 4c 54 20 20 20  |12,R10....BLT   |
00002e40  46 69 6c 6c 5f 4c 6f 6f  70 0d 0e ce 04 0d 0e d8  |Fill_Loop.......|
00002e50  16 41 44 52 20 20 20 20  52 32 2c 4e 65 77 5f 44  |.ADR    R2,New_D|
00002e60  61 74 61 0d 0e e2 4a 4c  44 52 42 20 20 20 52 34  |ata...JLDRB   R4|
00002e70  2c 5b 52 32 2c 52 37 5d  20 20 20 20 20 20 20 20  |,[R2,R7]        |
00002e80  20 20 20 20 3b 20 48 75  67 6f 20 68 61 73 20 66  |    ; Hugo has f|
00002e90  6f 75 6e 64 20 74 68 69  73 20 73 79 73 74 65 6d  |ound this system|
00002ea0  20 6e 6f 74 20 74 6f 20  6c 6f 6f 73 65 0d 0e ec  | not to loose...|
00002eb0  34 43 4d 50 20 20 20 20  52 34 2c 23 30 20 20 20  |4CMP    R4,#0   |
00002ec0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002ed0  61 6e 79 20 6e 6f 74 65  2f 76 6f 69 63 65 2e 2e  |any note/voice..|
00002ee0  2e 0d 0e f6 12 53 54 52  45 51 20 20 52 30 2c 5b  |.....STREQ  R0,[|
00002ef0  52 39 5d 0d 0f 00 10 4d  4f 56 4e 45 20 20 52 34  |R9]....MOVNE  R4|
00002f00  2c 23 30 0d 0f 0a 15 53  54 52 4e 45 42 20 52 34  |,#0....STRNEB R4|
00002f10  2c 5b 52 32 2c 52 37 5d  0d 0f 14 04 0d 0f 1e 17  |,[R2,R7]........|
00002f20  4d 4f 56 20 20 20 52 30  2c 23 25 30 30 30 30 31  |MOV   R0,#%00001|
00002f30  30 30 30 0d 0f 28 13 4c  44 4d 46 44 20 52 31 33  |000..(.LDMFD R13|
00002f40  21 2c 7b 50 43 7d 0d 0f  32 04 0d 0f 3c 0f 2e 43  |!,{PC}..2...<..C|
00002f50  6c 65 61 72 5f 46 69 6c  6c 0d 0f 46 0f 4d 4f 56  |lear_Fill..F.MOV|
00002f60  20 20 20 52 35 2c 23 30  0d 0f 50 15 53 54 52 20  |   R5,#0..P.STR |
00002f70  20 20 52 35 2c 5b 52 39  2c 23 32 34 5d 0d 0f 5a  |  R5,[R9,#24]..Z|
00002f80  14 2e 43 6c 65 61 72 5f  46 69 6c 6c 5f 4c 6f 6f  |..Clear_Fill_Loo|
00002f90  70 0d 0f 64 16 53 54 52  42 20 20 52 35 2c 5b 52  |p..d.STRB  R5,[R|
00002fa0  31 32 5d 2c 52 31 31 0d  0f 6e 11 43 4d 50 20 20  |12],R11..n.CMP  |
00002fb0  20 52 31 32 2c 52 31 30  0d 0f 78 19 42 4c 54 20  | R12,R10..x.BLT |
00002fc0  20 20 43 6c 65 61 72 5f  46 69 6c 6c 5f 4c 6f 6f  |  Clear_Fill_Loo|
00002fd0  70 0d 0f 82 17 4d 4f 56  20 20 20 52 30 2c 23 25  |p....MOV   R0,#%|
00002fe0  30 30 30 30 31 30 30 30  0d 0f 8c 13 4c 44 4d 46  |00001000....LDMF|
00002ff0  44 20 52 31 33 21 2c 7b  50 43 7d 0d 0f 96 04 0d  |D R13!,{PC}.....|
00003000  0f a0 17 2e 56 6f 69 63  65 73 5f 49 6e 66 6f 73  |....Voices_Infos|
00003010  5f 42 6c 6f 63 6b 0d 0f  aa 05 5d 0d 0f b4 14 e3  |_Block....].....|
00003020  20 42 75 66 42 6c 6b 25  3d 31 20 b8 20 36 34 0d  | BufBlk%=1 . 64.|
00003030  0f be 0e 5b 4f 50 54 20  50 61 73 73 25 0d 0f c8  |...[OPT Pass%...|
00003040  0a 45 51 55 44 20 30 0d  0f d2 05 5d 0d 0f dc 05  |.EQUD 0....]....|
00003050  ed 0d 0f e6 0e 5b 4f 50  54 20 50 61 73 73 25 0d  |.....[OPT Pass%.|
00003060  0f f0 04 0d 0f fa 0d 2e  54 72 6b 5f 42 61 73 65  |........Trk_Base|
00003070  0d 10 04 31 45 51 55 44  20 20 30 20 20 20 20 20  |...1EQUD  0     |
00003080  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 4d  |             ; M|
00003090  75 73 69 63 20 42 61 73  65 20 41 64 64 72 65 73  |usic Base Addres|
000030a0  73 0d 10 0e 14 2e 54 72  6b 5f 49 6e 66 6f 73 5f  |s.....Trk_Infos_|
000030b0  42 6c 6f 63 6b 0d 10 18  3d 45 51 55 44 20 20 30  |Block...=EQUD  0|
000030c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000030d0  20 20 3b 20 50 6f 73 69  74 69 6f 6e 20 43 6f 75  |  ; Position Cou|
000030e0  6e 74 65 72 20 28 49 6e  20 53 65 71 75 65 6e 63  |nter (In Sequenc|
000030f0  65 29 0d 10 22 2b 45 51  55 44 20 20 30 20 20 20  |e).."+EQUD  0   |
00003100  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00003110  20 4d 75 73 69 63 20 4c  65 6e 67 74 68 0d 10 2c  | Music Length..,|
00003120  3c 45 51 55 44 20 20 30  20 20 20 20 20 20 20 20  |<EQUD  0        |
00003130  20 20 20 20 20 20 20 20  20 20 3b 20 50 6f 73 69  |          ; Posi|
00003140  74 69 6f 6e 20 43 6f 75  6e 74 65 72 20 28 49 6e  |tion Counter (In|
00003150  20 50 61 74 74 65 72 6e  29 0d 10 36 3a 45 51 55  | Pattern)..6:EQU|
00003160  44 20 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |D  0            |
00003170  20 20 20 20 20 20 3b 20  3d 3e 20 6f 6e 20 50 61  |      ; => on Pa|
00003180  74 74 65 72 6e 73 20 4c  65 6e 67 74 68 20 54 61  |tterns Length Ta|
00003190  62 6c 65 0d 10 40 3a 45  51 55 44 20 20 30 20 20  |ble..@:EQUD  0  |
000031a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000031b0  3b 20 3d 3e 20 6f 6e 20  53 65 71 75 65 6e 63 65  |; => on Sequence|
000031c0  20 42 61 73 65 20 41 64  64 72 65 73 73 0d 10 4a  | Base Address..J|
000031d0  47 45 51 55 44 20 20 30  20 20 20 20 20 20 20 20  |GEQUD  0        |
000031e0  20 20 20 20 20 20 20 20  20 20 3b 20 3d 3e 20 6f  |          ; => o|
000031f0  6e 20 50 61 74 74 65 72  6e 73 20 54 61 62 6c 65  |n Patterns Table|
00003200  20 28 75 70 20 74 6f 20  36 34 20 70 61 74 74 65  | (up to 64 patte|
00003210  72 6e 73 29 0d 10 54 0f  2e 54 72 6b 5f 56 6f 69  |rns)..T..Trk_Voi|
00003220  63 65 73 0d 10 5e 2c 45  51 55 44 20 20 30 20 20  |ces..^,EQUD  0  |
00003230  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003240  3b 20 56 6f 69 63 65 73  20 4e 75 6d 62 65 72 0d  |; Voices Number.|
00003250  10 68 10 2e 54 72 6b 5f  43 6f 75 6e 74 65 72 0d  |.h..Trk_Counter.|
00003260  10 72 0b 45 51 55 44 20  20 35 0d 10 7c 0e 2e 54  |.r.EQUD  5..|..T|
00003270  72 6b 5f 53 70 65 65 64  0d 10 86 0b 45 51 55 44  |rk_Speed....EQUD|
00003280  20 20 36 0d 10 90 10 2e  54 72 6b 5f 53 61 6d 70  |  6.....Trk_Samp|
00003290  6c 65 73 0d 10 9a 05 5d  0d 10 a4 0c 50 25 2b 3d  |les....]....P%+=|
000032a0  33 36 2a 34 0d 10 ae 0e  5b 4f 50 54 20 50 61 73  |36*4....[OPT Pas|
000032b0  73 25 0d 10 b8 10 2e 54  72 6b 5f 50 65 72 69 6f  |s%.....Trk_Perio|
000032c0  64 73 0d 10 c2 1f 45 51  55 44 20 30 3a 45 51 55  |ds....EQUD 0:EQU|
000032d0  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
000032e0  30 0d 10 cc 1f 45 51 55  44 20 30 3a 45 51 55 44  |0....EQUD 0:EQUD|
000032f0  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00003300  0d 10 d6 15 2e 54 72 6b  5f 50 61 74 74 65 72 6e  |.....Trk_Pattern|
00003310  5f 4c 69 6e 65 0d 10 e0  1f 45 51 55 44 20 30 3a  |_Line....EQUD 0:|
00003320  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 45 51  |EQUD 0:EQUD 0:EQ|
00003330  55 44 20 30 0d 10 ea 1f  45 51 55 44 20 30 3a 45  |UD 0....EQUD 0:E|
00003340  51 55 44 20 30 3a 45 51  55 44 20 30 3a 45 51 55  |QUD 0:EQUD 0:EQU|
00003350  44 20 30 0d 10 f4 0d 2e  4e 65 77 5f 44 61 74 61  |D 0.....New_Data|
00003360  0d 10 fe 11 45 51 55 44  20 30 3a 45 51 55 44 20  |....EQUD 0:EQUD |
00003370  30 0d 11 08 14 2e 47 65  74 5f 49 6e 66 6f 73 5f  |0.....Get_Infos_|
00003380  42 6c 6f 63 6b 0d 11 12  1e 41 44 52 20 20 52 37  |Block....ADR  R7|
00003390  2c 56 6f 69 63 65 73 5f  49 6e 66 6f 73 5f 42 6c  |,Voices_Infos_Bl|
000033a0  6f 63 6b 0d 11 1c 0f 4d  4f 56 20 20 50 43 2c 52  |ock....MOV  PC,R|
000033b0  31 34 0d 11 26 18 2e 47  65 74 5f 54 72 6b 5f 49  |14..&..Get_Trk_I|
000033c0  6e 66 6f 73 5f 42 6c 6f  63 6b 0d 11 30 1c 41 44  |nfos_Block..0.AD|
000033d0  52 20 20 52 31 32 2c 54  72 6b 5f 49 6e 66 6f 73  |R  R12,Trk_Infos|
000033e0  5f 42 6c 6f 63 6b 0d 11  3a 0f 4d 4f 56 20 20 50  |_Block..:.MOV  P|
000033f0  43 2c 52 31 34 0d 11 44  04 0d 11 4e 35 3b 20 2a  |C,R14..D...N5; *|
00003400  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003420  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2a 0d 11  |-------------*..|
00003430  58 35 3b 20 2a 20 20 20  20 49 6e 63 72 65 6d 65  |X5; *    Increme|
00003440  6e 74 2f 43 68 65 63 6b  20 43 6f 75 6e 74 65 72  |nt/Check Counter|
00003450  20 28 54 65 6d 70 6f 29  20 56 61 6c 75 65 20 20  | (Tempo) Value  |
00003460  20 20 2a 0d 11 62 35 3b  20 2a 2d 2d 2d 2d 2d 2d  |  *..b5; *------|
00003470  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003490  2d 2d 2d 2d 2d 2d 2d 2a  0d 11 6c 04 0d 11 76 11  |-------*..l...v.|
000034a0  2e 47 65 74 5f 49 6e 74  72 5f 41 64 72 0d 11 80  |.Get_Intr_Adr...|
000034b0  1b 41 44 52 20 20 20 52  31 2c 54 72 6b 5f 50 6c  |.ADR   R1,Trk_Pl|
000034c0  61 79 5f 4d 75 73 69 63  0d 11 8a 10 4d 4f 56 20  |ay_Music....MOV |
000034d0  20 20 50 43 2c 52 31 34  0d 11 94 04 0d 11 9e 13  |  PC,R14........|
000034e0  2e 54 72 6b 5f 50 6c 61  79 5f 4d 75 73 69 63 0d  |.Trk_Play_Music.|
000034f0  11 a8 3f 43 4d 50 20 20  20 52 30 2c 23 34 20 20  |..?CMP   R0,#4  |
00003500  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003510  3b 20 43 68 65 63 6b 20  69 66 20 65 76 65 6e 74  |; Check if event|
00003520  20 69 73 20 61 20 56 53  59 4e 43 2e 2e 2e 0d 11  | is a VSYNC.....|
00003530  b2 11 4d 4f 56 4e 45 53  20 50 43 2c 52 31 34 0d  |..MOVNES PC,R14.|
00003540  11 bc 1b 53 54 4d 46 44  20 52 31 33 21 2c 7b 52  |...STMFD R13!,{R|
00003550  30 2d 52 31 32 2c 52 31  34 7d 0d 11 c6 18 4c 44  |0-R12,R14}....LD|
00003560  52 20 20 20 52 30 2c 50  6c 61 79 5f 53 74 61 74  |R   R0,Play_Stat|
00003570  75 73 0d 11 d0 0f 43 4d  50 20 20 20 52 30 2c 23  |us....CMP   R0,#|
00003580  30 0d 11 da 1c 4c 44 4d  45 51 46 44 20 52 31 33  |0....LDMEQFD R13|
00003590  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 0d 11 e4  |!,{R0-R12,PC}...|
000035a0  04 0d 11 ee 18 4c 44 52  20 20 20 52 30 2c 54 72  |.....LDR   R0,Tr|
000035b0  6b 5f 43 6f 75 6e 74 65  72 0d 11 f8 16 4c 44 52  |k_Counter....LDR|
000035c0  20 20 20 52 31 2c 54 72  6b 5f 53 70 65 65 64 0d  |   R1,Trk_Speed.|
000035d0  12 02 12 41 44 44 20 20  20 52 30 2c 52 30 2c 23  |...ADD   R0,R0,#|
000035e0  31 0d 12 0c 0f 43 4d 50  20 20 20 52 30 2c 52 31  |1....CMP   R0,R1|
000035f0  0d 12 16 0f 4d 4f 56 47  45 20 52 30 2c 23 30 0d  |....MOVGE R0,#0.|
00003600  12 20 18 53 54 52 20 20  20 52 30 2c 54 72 6b 5f  |. .STR   R0,Trk_|
00003610  43 6f 75 6e 74 65 72 0d  12 2a 14 42 45 51 20 20  |Counter..*.BEQ  |
00003620  20 54 72 6b 5f 50 6c 61  79 65 72 0d 12 34 15 42  | Trk_Player..4.B|
00003630  4e 45 20 20 20 54 72 6b  5f 45 66 66 65 63 74 73  |NE   Trk_Effects|
00003640  0d 12 3e 04 0d 12 48 32  3b 20 2a 2d 2d 2d 2d 2d  |..>...H2; *-----|
00003650  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003670  2d 2d 2d 2d 2d 2a 0d 12  52 32 3b 20 2a 20 20 20  |-----*..R2; *   |
00003680  20 50 6c 61 79 20 61 20  6e 65 77 20 6c 69 6e 65  | Play a new line|
00003690  20 6f 66 20 63 75 72 72  65 6e 74 20 70 61 74 74  | of current patt|
000036a0  65 72 6e 20 20 20 20 2a  0d 12 5c 32 3b 20 2a 2d  |ern    *..\2; *-|
000036b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000036d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2a 0d 12 66 04 0d 12  |---------*..f...|
000036e0  70 0f 2e 54 72 6b 5f 50  6c 61 79 65 72 0d 12 7a  |p..Trk_Player..z|
000036f0  1c 41 44 52 20 20 20 52  30 2c 54 72 6b 5f 49 6e  |.ADR   R0,Trk_In|
00003700  66 6f 73 5f 42 6c 6f 63  6b 0d 12 84 18 4c 44 4d  |fos_Block....LDM|
00003710  49 41 20 52 30 2c 7b 52  31 2d 52 36 2c 52 31 31  |IA R0,{R1-R6,R11|
00003720  7d 0d 12 8e 36 4c 44 52  42 20 20 52 37 2c 5b 52  |}...6LDRB  R7,[R|
00003730  35 2c 52 31 5d 20 20 20  20 20 20 20 20 20 20 20  |5,R1]           |
00003740  20 20 3b 20 52 37 20 3d  20 50 61 74 74 65 72 6e  |  ; R7 = Pattern|
00003750  20 6e 75 6d 62 65 72 0d  12 98 39 4c 44 52 20 20  | number...9LDR  |
00003760  20 52 31 32 2c 5b 52 36  2c 52 37 2c 4c 53 4c 23  | R12,[R6,R7,LSL#|
00003770  32 5d 20 20 20 20 20 20  3b 20 52 31 32 20 3d 3e  |2]      ; R12 =>|
00003780  20 43 75 72 72 65 6e 74  20 70 61 74 74 65 72 6e  | Current pattern|
00003790  0d 12 a2 42 4d 4f 56 20  20 20 52 31 30 2c 52 31  |...BMOV   R10,R1|
000037a0  31 2c 4c 53 4c 23 32 20  20 20 20 20 20 20 20 20  |1,LSL#2         |
000037b0  20 3b 20 52 31 30 3d 52  31 31 2a 34 20 3d 20 50  | ; R10=R11*4 = P|
000037c0  61 74 74 65 72 6e 20 4c  69 6e 65 20 4c 65 6e 67  |attern Line Leng|
000037d0  74 68 0d 12 ac 3e 4d 4c  41 20 20 20 52 31 32 2c  |th...>MLA   R12,|
000037e0  52 33 2c 52 31 30 2c 52  31 32 20 20 20 20 20 20  |R3,R10,R12      |
000037f0  20 20 20 3b 20 52 31 32  20 3d 3e 20 43 75 72 72  |   ; R12 => Curr|
00003800  65 6e 74 20 70 61 74 74  65 72 6e 20 6c 69 6e 65  |ent pattern line|
00003810  0d 12 b6 3e 4c 44 52 42  20 20 52 37 2c 5b 52 34  |...>LDRB  R7,[R4|
00003820  2c 52 37 5d 20 20 20 20  20 20 20 20 20 20 20 20  |,R7]            |
00003830  20 3b 20 52 37 20 3d 20  50 61 74 74 65 72 6e 20  | ; R7 = Pattern |
00003840  4c 65 6e 67 74 68 20 28  30 31 2d 36 34 29 0d 12  |Length (01-64)..|
00003850  c0 12 41 44 44 20 20 20  52 33 2c 52 33 2c 23 31  |..ADD   R3,R3,#1|
00003860  0d 12 ca 33 43 4d 50 20  20 20 52 33 2c 52 37 20  |...3CMP   R3,R7 |
00003870  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003880  20 3b 20 45 6e 64 20 6f  66 20 50 61 74 74 65 72  | ; End of Patter|
00003890  6e 20 3f 0d 12 d4 18 42  4c 54 20 20 20 57 72 69  |n ?....BLT   Wri|
000038a0  74 65 5f 50 6f 73 69 74  69 6f 6e 0d 12 de 0f 4d  |te_Position....M|
000038b0  4f 56 20 20 20 52 33 2c  23 30 0d 12 e8 42 41 44  |OV   R3,#0...BAD|
000038c0  44 20 20 20 52 31 2c 52  31 2c 23 31 20 20 20 20  |D   R1,R1,#1    |
000038d0  20 20 20 20 20 20 20 20  20 20 20 3b 20 4e 65 78  |           ; Nex|
000038e0  74 20 70 6f 73 69 74 69  6f 6e 20 69 6e 20 53 65  |t position in Se|
000038f0  71 75 65 6e 63 65 20 54  61 62 6c 65 0d 12 f2 44  |quence Table...D|
00003900  43 4d 50 20 20 20 52 31  2c 52 32 20 20 20 20 20  |CMP   R1,R2     |
00003910  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 4c  |             ; L|
00003920  61 73 74 20 50 6f 73 69  74 69 6f 6e 20 69 6e 20  |ast Position in |
00003930  53 65 71 75 65 6e 63 65  20 54 61 62 6c 65 20 3f  |Sequence Table ?|
00003940  0d 12 fc 39 4d 4f 56 47  45 20 52 31 2c 23 30 20  |...9MOVGE R1,#0 |
00003950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003960  20 3b 20 49 66 20 59 65  73 2c 20 43 6c 65 61 72  | ; If Yes, Clear|
00003970  20 43 6f 75 6e 74 65 72  2e 0d 13 06 13 2e 57 72  | Counter......Wr|
00003980  69 74 65 5f 50 6f 73 69  74 69 6f 6e 0d 13 10 34  |ite_Position...4|
00003990  53 54 4d 49 41 20 52 30  2c 7b 52 31 2d 52 33 7d  |STMIA R0,{R1-R3}|
000039a0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 53  |             ; S|
000039b0  61 76 65 20 6e 65 77 20  70 6f 73 69 74 69 6f 6e  |ave new position|
000039c0  0d 13 1a 04 0d 13 24 1d  41 44 52 20 20 20 52 32  |......$.ADR   R2|
000039d0  2c 54 72 6b 5f 50 61 74  74 65 72 6e 5f 4c 69 6e  |,Trk_Pattern_Lin|
000039e0  65 0d 13 2e 16 4c 44 4d  49 41 20 52 31 32 2c 7b  |e....LDMIA R12,{|
000039f0  52 34 2d 52 31 31 7d 0d  13 38 15 53 54 4d 49 41  |R4-R11}..8.STMIA|
00003a00  20 52 32 2c 7b 52 34 2d  52 31 31 7d 0d 13 42 1f  | R2,{R4-R11}..B.|
00003a10  41 44 52 20 20 20 52 37  2c 56 6f 69 63 65 73 5f  |ADR   R7,Voices_|
00003a20  49 6e 66 6f 73 5f 42 6c  6f 63 6b 0d 13 4c 18 4c  |Infos_Block..L.L|
00003a30  44 52 20 20 20 52 31 31  2c 54 72 6b 5f 56 6f 69  |DR   R11,Trk_Voi|
00003a40  63 65 73 0d 13 56 40 42  4c 20 20 20 20 47 65 74  |ces..V@BL    Get|
00003a50  5f 46 72 65 71 75 65 6e  63 65 5f 54 61 62 6c 65  |_Frequence_Table|
00003a60  20 20 20 3b 20 52 65 74  75 72 6e 20 52 38 20 3d  |   ; Return R8 =|
00003a70  3e 20 27 46 72 65 71 75  65 6e 63 65 27 20 54 61  |> 'Frequence' Ta|
00003a80  62 6c 65 0d 13 60 0f 4d  4f 56 20 20 20 52 39 2c  |ble..`.MOV   R9,|
00003a90  23 30 0d 13 6a 12 2e 54  72 6b 5f 56 6f 69 63 65  |#0..j..Trk_Voice|
00003aa0  4c 6f 6f 70 0d 13 74 34  4c 44 52 20 20 20 52 35  |Loop..t4LDR   R5|
00003ab0  2c 5b 52 31 32 5d 2c 23  34 20 20 20 20 20 20 20  |,[R12],#4       |
00003ac0  20 20 20 20 3b 20 52 35  3d 4e 6f 74 65 2b 49 6e  |    ; R5=Note+In|
00003ad0  73 74 72 75 6d 65 6e 74  0d 13 7e 16 80 20 20 20  |strument..~..   |
00003ae0  52 32 2c 52 35 2c 23 26  46 46 30 30 30 30 0d 13  |R2,R5,#&FF0000..|
00003af0  88 40 4d 4f 56 20 20 20  52 32 2c 52 32 2c 4c 53  |.@MOV   R2,R2,LS|
00003b00  52 23 31 36 20 20 20 20  20 20 20 20 20 20 3b 20  |R#16          ; |
00003b10  52 32 3d 53 61 6d 70 6c  65 20 6e 75 6d 62 65 72  |R2=Sample number|
00003b20  20 28 30 31 2d 33 36 29  3d 28 30 2d 5a 29 0d 13  | (01-36)=(0-Z)..|
00003b30  92 12 53 55 42 53 20 20  52 32 2c 52 32 2c 23 31  |..SUBS  R2,R2,#1|
00003b40  0d 13 9c 11 42 4c 54 20  20 20 4e 65 78 74 4f 6e  |....BLT   NextOn|
00003b50  65 0d 13 a6 3b 42 4c 20  20 20 20 47 65 74 5f 4e  |e...;BL    Get_N|
00003b60  65 77 5f 53 61 6d 70 6c  65 20 20 20 20 20 20 20  |ew_Sample       |
00003b70  20 3b 20 4e 6f 72 6d 61  6c 20 63 61 73 65 20 3d  | ; Normal case =|
00003b80  20 4e 2d 4f 20 53 30 30  30 2e 2e 2e 0d 13 b0 39  | N-O S000......9|
00003b90  4d 4f 56 53 20 20 52 34  2c 52 35 2c 4c 53 52 23  |MOVS  R4,R5,LSR#|
00003ba0  32 34 20 20 20 20 20 20  20 20 20 20 3b 20 52 34  |24          ; R4|
00003bb0  3d 4e 6f 74 65 20 6e 75  6d 62 65 72 20 20 28 30  |=Note number  (0|
00003bc0  31 2d 33 36 29 0d 13 ba  37 42 4c 47 54 20 20 47  |1-36)...7BLGT  G|
00003bd0  65 74 5f 4e 65 77 5f 4e  6f 74 65 20 20 20 20 20  |et_New_Note     |
00003be0  20 20 20 20 20 3b 20 2e  2e 2e 20 47 65 74 20 53  |     ; ... Get S|
00003bf0  61 6d 70 6c 65 20 26 20  4e 6f 74 65 0d 13 c4 0c  |ample & Note....|
00003c00  2e 4e 65 78 74 4f 6e 65  0d 13 ce 16 42 4c 20 20  |.NextOne....BL  |
00003c10  20 20 54 72 6b 5f 45 66  66 65 63 74 73 32 0d 13  |  Trk_Effects2..|
00003c20  d8 13 41 44 44 20 20 20  52 37 2c 52 37 2c 23 33  |..ADD   R7,R7,#3|
00003c30  32 0d 13 e2 12 41 44 44  20 20 20 52 39 2c 52 39  |2....ADD   R9,R9|
00003c40  2c 23 31 0d 13 ec 10 43  4d 50 20 20 20 52 39 2c  |,#1....CMP   R9,|
00003c50  52 31 31 0d 13 f6 17 42  4c 54 20 20 20 54 72 6b  |R11....BLT   Trk|
00003c60  5f 56 6f 69 63 65 4c 6f  6f 70 0d 14 00 04 0d 14  |_VoiceLoop......|
00003c70  0a 0e 2e 45 6e 64 4f 66  50 6c 61 79 0d 14 14 1a  |...EndOfPlay....|
00003c80  4c 44 4d 46 44 20 52 31  33 21 2c 7b 52 30 2d 52  |LDMFD R13!,{R0-R|
00003c90  31 32 2c 50 43 7d 0d 14  1e 04 0d 14 28 11 2e 47  |12,PC}......(..G|
00003ca0  65 74 5f 4e 65 77 5f 4e  6f 74 65 0d 14 32 18 53  |et_New_Note..2.S|
00003cb0  54 4d 46 44 20 52 31 33  21 2c 7b 52 31 32 2c 52  |TMFD R13!,{R12,R|
00003cc0  31 34 7d 0d 14 3c 19 42  4c 20 20 20 20 47 65 74  |14}..<.BL    Get|
00003cd0  5f 50 65 72 69 6f 64 73  5f 41 64 72 0d 14 46 12  |_Periods_Adr..F.|
00003ce0  53 55 42 20 20 20 52 33  2c 52 34 2c 23 31 0d 14  |SUB   R3,R4,#1..|
00003cf0  50 1b 4c 44 52 20 20 20  52 33 2c 5b 52 31 32 2c  |P.LDR   R3,[R12,|
00003d00  52 33 2c 4c 53 4c 23 32  5d 0d 14 5a 40 53 54 52  |R3,LSL#2]..Z@STR|
00003d10  20 20 20 52 33 2c 5b 52  37 2c 23 32 38 5d 20 20  |   R3,[R7,#28]  |
00003d20  20 20 20 20 20 20 20 20  20 20 3b 20 53 61 76 65  |          ; Save|
00003d30  20 70 65 72 69 6f 64 20  66 6f 72 20 70 6f 72 74  | period for port|
00003d40  61 6d 65 6e 74 6f 2e 2e  2e 0d 14 64 18 41 44 52  |amento.....d.ADR|
00003d50  20 20 20 52 31 2c 54 72  6b 5f 50 65 72 69 6f 64  |   R1,Trk_Period|
00003d60  73 0d 14 6e 36 53 54 52  20 20 20 52 33 2c 5b 52  |s..n6STR   R3,[R|
00003d70  31 2c 52 39 2c 4c 53 4c  23 32 5d 20 20 20 20 20  |1,R9,LSL#2]     |
00003d80  20 20 3b 20 2e 2e 2e 61  6e 64 20 66 6f 72 20 61  |  ; ...and for a|
00003d90  72 70 65 67 67 69 6f 0d  14 78 36 4c 44 52 20 20  |rpeggio..x6LDR  |
00003da0  20 52 33 2c 5b 52 38 2c  52 33 2c 4c 53 4c 23 32  | R3,[R8,R3,LSL#2|
00003db0  5d 20 20 20 20 20 20 20  3b 20 47 65 74 20 70 68  |]       ; Get ph|
00003dc0  61 73 65 20 69 6e 63 72  65 6d 65 6e 74 0d 14 82  |ase increment...|
00003dd0  42 53 54 52 20 20 20 52  33 2c 5b 52 37 2c 23 34  |BSTR   R3,[R7,#4|
00003de0  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |]             ; |
00003df0  26 20 53 61 76 65 20 69  74 20 69 6e 20 76 6f 69  |& Save it in voi|
00003e00  63 65 73 20 69 6e 66 6f  73 20 62 6c 6f 63 6b 0d  |ces infos block.|
00003e10  14 8c 0f 4d 4f 56 20 20  20 52 31 2c 23 30 0d 14  |...MOV   R1,#0..|
00003e20  96 3a 53 54 52 20 20 20  52 31 2c 5b 52 37 2c 23  |.:STR   R1,[R7,#|
00003e30  30 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |0]             ;|
00003e40  20 43 6c 65 61 72 20 70  68 61 73 65 20 61 63 63  | Clear phase acc|
00003e50  75 6d 75 6c 61 74 6f 72  0d 14 a0 18 4c 44 4d 46  |umulator....LDMF|
00003e60  44 20 52 31 33 21 2c 7b  52 31 32 2c 50 43 7d 5e  |D R13!,{R12,PC}^|
00003e70  0d 14 aa 04 0d 14 b4 13  2e 47 65 74 5f 4e 65 77  |.........Get_New|
00003e80  5f 53 61 6d 70 6c 65 0d  14 be 1b 53 54 4d 46 44  |_Sample....STMFD|
00003e90  20 52 31 33 21 2c 7b 52  34 2c 52 31 32 2c 52 31  | R13!,{R4,R12,R1|
00003ea0  34 7d 0d 14 c8 18 41 44  52 20 20 20 52 33 2c 54  |4}....ADR   R3,T|
00003eb0  72 6b 5f 53 61 6d 70 6c  65 73 0d 14 d2 36 4c 44  |rk_Samples...6LD|
00003ec0  52 20 20 20 52 33 2c 5b  52 33 2c 52 32 2c 4c 53  |R   R3,[R3,R2,LS|
00003ed0  4c 23 32 5d 20 20 20 20  20 20 20 3b 20 52 33 20  |L#2]       ; R3 |
00003ee0  3d 3e 20 41 63 74 75 61  6c 20 53 61 6d 70 6c 65  |=> Actual Sample|
00003ef0  0d 14 dc 35 41 44 44 20  20 20 52 34 2c 52 33 2c  |...5ADD   R4,R3,|
00003f00  23 36 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |#60             |
00003f10  20 3b 20 52 34 20 3d 3e  20 53 61 6d 70 6c 65 73  | ; R4 => Samples|
00003f20  20 44 61 74 61 0d 14 e6  15 53 54 52 20 20 20 52  | Data....STR   R|
00003f30  34 2c 5b 52 37 2c 23 31  36 5d 0d 14 f0 0f 4d 4f  |4,[R7,#16]....MO|
00003f40  56 20 20 20 52 31 2c 23  31 0d 14 fa 3d 53 54 52  |V   R1,#1...=STR|
00003f50  20 20 20 52 31 2c 5b 52  37 2c 23 32 34 5d 20 20  |   R1,[R7,#24]  |
00003f60  20 20 20 20 20 20 20 20  20 20 3b 20 52 31 20 3d  |          ; R1 =|
00003f70  20 46 6c 61 67 20 46 69  6c 6c 20 57 69 74 68 20  | Flag Fill With |
00003f80  53 61 6d 70 6c 65 0d 15  04 04 0d 15 0e 10 3b 20  |Sample........; |
00003f90  53 65 74 20 56 6f 6c 75  6d 65 0d 15 18 04 0d 15  |Set Volume......|
00003fa0  22 35 4c 44 52 20 20 20  52 31 2c 5b 52 33 2c 23  |"5LDR   R1,[R3,#|
00003fb0  31 36 2b 32 38 5d 20 20  20 20 20 20 20 20 20 3b  |16+28]         ;|
00003fc0  20 52 31 20 3d 20 53 61  6d 70 6c 65 20 56 6f 6c  | R1 = Sample Vol|
00003fd0  75 6d 65 0d 15 2c 13 53  55 42 53 20 20 52 34 2c  |ume..,.SUBS  R4,|
00003fe0  52 31 2c 23 36 38 0d 15  36 0f 4d 4f 56 4c 54 20  |R1,#68..6.MOVLT |
00003ff0  52 34 2c 23 30 0d 15 40  15 4d 4f 56 20 20 20 52  |R4,#0..@.MOV   R|
00004000  34 2c 52 34 2c 4c 53 52  23 32 0d 15 4a 14 52 53  |4,R4,LSR#2..J.RS|
00004010  42 20 20 20 52 31 2c 52  31 2c 23 32 35 35 0d 15  |B   R1,R1,#255..|
00004020  54 15 53 54 52 20 20 20  52 31 2c 5b 52 37 2c 23  |T.STR   R1,[R7,#|
00004030  32 30 5d 0d 15 5e 04 0d  15 68 18 3b 20 53 65 74  |20]..^...h.; Set|
00004040  20 56 6f 6c 75 6d 65 20  43 6f 6d 6d 61 6e 64 0d  | Volume Command.|
00004050  15 72 04 0d 15 7c 14 80  20 20 20 52 34 2c 52 35  |.r...|..   R4,R5|
00004060  2c 23 26 46 46 30 30 0d  15 86 13 43 4d 50 20 20  |,#&FF00....CMP  |
00004070  20 52 34 2c 23 26 31 46  30 30 0d 15 90 12 80 45  | R4,#&1F00.....E|
00004080  51 20 52 31 2c 52 35 2c  23 26 46 46 0d 15 9a 14  |Q R1,R5,#&FF....|
00004090  52 53 42 45 51 20 52 31  2c 52 31 2c 23 26 46 46  |RSBEQ R1,R1,#&FF|
000040a0  0d 15 a4 15 53 54 52 45  51 20 52 31 2c 5b 52 37  |....STREQ R1,[R7|
000040b0  2c 23 32 30 5d 0d 15 ae  04 0d 15 b8 1e 3b 20 47  |,#20]........; G|
000040c0  65 74 20 26 20 53 61 76  65 20 73 61 6d 70 6c 65  |et & Save sample|
000040d0  73 20 69 6e 66 6f 73 0d  15 c2 04 0d 15 cc 38 4c  |s infos.......8L|
000040e0  44 52 20 20 20 52 31 2c  5b 52 33 2c 23 34 30 2b  |DR   R1,[R3,#40+|
000040f0  32 38 5d 20 20 20 20 20  20 20 20 20 20 20 20 3b  |28]            ;|
00004100  20 52 31 20 3d 20 52 65  70 65 61 74 20 4f 66 66  | R1 = Repeat Off|
00004110  73 65 74 0d 15 d6 38 4c  44 52 20 20 20 52 34 2c  |set...8LDR   R4,|
00004120  5b 52 33 2c 23 35 32 2b  32 38 5d 20 20 20 20 20  |[R3,#52+28]     |
00004130  20 20 20 20 20 20 20 3b  20 52 34 20 3d 20 52 65  |       ; R4 = Re|
00004140  70 65 61 74 20 4c 65 6e  67 74 68 0d 15 e0 0f 43  |peat Length....C|
00004150  4d 50 20 20 20 52 34 2c  23 32 0d 15 ea 12 41 44  |MP   R4,#2....AD|
00004160  44 4e 45 20 52 34 2c 52  34 2c 52 31 0d 15 f4 38  |DNE R4,R4,R1...8|
00004170  4c 44 52 45 51 20 52 34  2c 5b 52 33 2c 23 32 38  |LDREQ R4,[R3,#28|
00004180  2b 32 38 5d 20 20 20 20  20 20 20 20 20 20 20 20  |+28]            |
00004190  3b 20 52 34 20 3d 20 53  61 6d 70 6c 65 20 4c 65  |; R4 = Sample Le|
000041a0  6e 67 74 68 0d 15 fe 15  53 54 52 20 20 20 52 34  |ngth....STR   R4|
000041b0  2c 5b 52 37 2c 23 31 32  5d 0d 16 08 12 41 44 44  |,[R7,#12]....ADD|
000041c0  4e 45 20 52 31 2c 52 31  2c 23 31 0d 16 12 39 53  |NE R1,R1,#1...9S|
000041d0  54 52 20 20 20 52 31 2c  5b 52 37 2c 23 38 5d 20  |TR   R1,[R7,#8] |
000041e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000041f0  20 53 61 75 76 65 20 52  65 70 65 61 74 20 4f 66  | Sauve Repeat Of|
00004200  66 73 65 74 0d 16 1c 04  0d 16 26 15 41 44 52 20  |fset......&.ADR |
00004210  20 20 52 34 2c 4e 65 77  5f 44 61 74 61 0d 16 30  |  R4,New_Data..0|
00004220  0f 4d 4f 56 20 20 20 52  31 2c 23 31 0d 16 3a 14  |.MOV   R1,#1..:.|
00004230  53 54 52 42 20 20 52 31  2c 5b 52 34 2c 52 39 5d  |STRB  R1,[R4,R9]|
00004240  0d 16 44 04 0d 16 4e 1b  4c 44 4d 46 44 20 52 31  |..D...N.LDMFD R1|
00004250  33 21 2c 7b 52 34 2c 52  31 32 2c 50 43 7d 5e 0d  |3!,{R4,R12,PC}^.|
00004260  16 58 04 0d 16 62 24 3b  20 2a 2d 2d 2d 2d 2d 2d  |.X...b$; *------|
00004270  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004280  2d 2d 2d 2d 2d 2d 2a 0d  16 6c 24 3b 20 2a 20 20  |------*..l$; *  |
00004290  20 20 20 20 45 66 66 65  63 74 73 20 43 68 65 63  |    Effects Chec|
000042a0  6b 69 6e 67 20 23 31 20  20 20 2a 0d 16 76 24 3b  |king #1   *..v$;|
000042b0  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
000042c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2a 0d  |--------------*.|
000042d0  16 80 24 3b 20 2a 20 20  27 45 27 20 20 3d 20 53  |..$; *  'E'  = S|
000042e0  65 74 20 53 74 65 72 65  6f 20 20 20 20 20 20 20  |et Stereo       |
000042f0  20 20 2a 0d 16 8a 24 3b  20 2a 20 20 27 4a 27 20  |  *...$; *  'J' |
00004300  20 3d 20 50 6f 73 69 74  69 6f 6e 20 4a 75 6d 70  | = Position Jump|
00004310  20 20 20 20 20 20 2a 0d  16 94 24 3b 20 2a 20 20  |      *...$; *  |
00004320  27 56 27 20 20 3d 20 53  65 74 20 56 6f 6c 75 6d  |'V'  = Set Volum|
00004330  65 20 20 20 20 20 20 20  20 20 2a 0d 16 9e 24 3b  |e         *...$;|
00004340  20 2a 20 20 27 42 27 20  20 3d 20 50 61 74 74 65  | *  'B'  = Patte|
00004350  72 6e 20 42 72 65 61 6b  20 20 20 20 20 20 2a 0d  |rn Break      *.|
00004360  16 a8 24 3b 20 2a 20 20  27 53 27 20 20 3d 20 53  |..$; *  'S'  = S|
00004370  65 74 20 53 70 65 65 64  20 20 20 20 20 20 20 20  |et Speed        |
00004380  20 20 2a 0d 16 b2 24 3b  20 2a 2d 2d 2d 2d 2d 2d  |  *...$; *------|
00004390  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000043a0  2d 2d 2d 2d 2d 2d 2a 0d  16 bc 04 0d 16 c6 11 2e  |------*.........|
000043b0  54 72 6b 5f 45 66 66 65  63 74 73 32 0d 16 d0 14  |Trk_Effects2....|
000043c0  80 20 20 20 52 34 2c 52  35 2c 23 26 46 46 30 30  |.   R4,R5,#&FF00|
000043d0  0d 16 da 04 0d 16 e4 16  3b 20 53 65 74 20 56 6f  |........; Set Vo|
000043e0  6c 75 6d 65 20 28 27 56  27 29 0d 16 ee 04 0d 16  |lume ('V')......|
000043f0  f8 13 43 4d 50 20 20 20  52 34 2c 23 26 31 46 30  |..CMP   R4,#&1F0|
00004400  30 0d 17 02 17 42 4e 45  20 20 20 4e 6f 5f 53 65  |0....BNE   No_Se|
00004410  74 5f 56 6f 6c 75 6d 65  0d 17 0c 12 80 20 20 20  |t_Volume.....   |
00004420  52 31 2c 52 35 2c 23 26  46 46 0d 17 16 14 52 53  |R1,R5,#&FF....RS|
00004430  42 20 20 20 52 31 2c 52  31 2c 23 26 46 46 0d 17  |B   R1,R1,#&FF..|
00004440  20 15 53 54 52 20 20 20  52 31 2c 5b 52 37 2c 23  | .STR   R1,[R7,#|
00004450  32 30 5d 0d 17 2a 10 4d  4f 56 20 20 20 50 43 2c  |20]..*.MOV   PC,|
00004460  52 31 34 0d 17 34 12 2e  4e 6f 5f 53 65 74 5f 56  |R14..4..No_Set_V|
00004470  6f 6c 75 6d 65 0d 17 3e  04 0d 17 48 16 3b 20 53  |olume..>...H.; S|
00004480  65 74 20 53 70 65 65 64  20 20 28 27 53 27 29 0d  |et Speed  ('S').|
00004490  17 52 04 0d 17 5c 13 43  4d 50 20 20 20 52 34 2c  |.R...\.CMP   R4,|
000044a0  23 26 31 43 30 30 0d 17  66 16 42 4e 45 20 20 20  |#&1C00..f.BNE   |
000044b0  4e 6f 5f 53 65 74 5f 53  70 65 65 64 0d 17 70 12  |No_Set_Speed..p.|
000044c0  80 53 20 20 52 31 2c 52  35 2c 23 26 30 46 0d 17  |.S  R1,R5,#&0F..|
000044d0  7a 16 53 54 52 4e 45 20  52 31 2c 54 72 6b 5f 53  |z.STRNE R1,Trk_S|
000044e0  70 65 65 64 0d 17 84 10  4d 4f 56 20 20 20 50 43  |peed....MOV   PC|
000044f0  2c 52 31 34 0d 17 8e 11  2e 4e 6f 5f 53 65 74 5f  |,R14.....No_Set_|
00004500  53 70 65 65 64 0d 17 98  04 0d 17 a2 1a 3b 20 50  |Speed........; P|
00004510  61 74 74 65 72 6e 20 42  72 65 61 6b 20 20 28 27  |attern Break  ('|
00004520  42 27 29 0d 17 ac 04 0d  17 b6 12 43 4d 50 20 20  |B')........CMP  |
00004530  20 52 34 2c 23 26 42 30  30 0d 17 c0 1a 42 4e 45  | R4,#&B00....BNE|
00004540  20 20 20 4e 6f 5f 50 61  74 74 65 72 6e 5f 42 72  |   No_Pattern_Br|
00004550  65 61 6b 0d 17 ca 1c 41  44 52 20 20 20 52 30 2c  |eak....ADR   R0,|
00004560  54 72 6b 5f 49 6e 66 6f  73 5f 42 6c 6f 63 6b 0d  |Trk_Infos_Block.|
00004570  17 d4 14 4c 44 4d 49 41  20 52 30 2c 7b 52 31 2d  |...LDMIA R0,{R1-|
00004580  52 33 7d 0d 17 de 41 41  44 44 20 20 20 52 31 2c  |R3}...AADD   R1,|
00004590  52 31 2c 23 31 20 20 20  20 20 20 20 20 20 20 20  |R1,#1           |
000045a0  20 20 20 20 20 20 20 20  20 20 20 3b 20 50 6f 73  |           ; Pos|
000045b0  69 74 69 6f 6e 20 3d 20  50 6f 73 69 74 69 6f 6e  |ition = Position|
000045c0  20 2b 20 31 0d 17 e8 0f  43 4d 50 20 20 20 52 31  | + 1....CMP   R1|
000045d0  2c 52 32 0d 17 f2 0c ec  51 20 52 31 2c 23 30 0d  |,R2.....Q R1,#0.|
000045e0  17 fc 46 4d 4f 56 20 20  20 52 33 2c 23 30 20 20  |..FMOV   R3,#0  |
000045f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004600  20 20 20 20 20 20 20 3b  20 41 74 20 74 68 65 20  |       ; At the |
00004610  73 74 61 72 74 20 6f 66  20 6e 65 78 74 20 70 61  |start of next pa|
00004620  74 74 65 72 6e 0d 18 06  14 53 54 4d 49 41 20 52  |ttern....STMIA R|
00004630  30 2c 7b 52 31 2d 52 33  7d 0d 18 10 10 4d 4f 56  |0,{R1-R3}....MOV|
00004640  20 20 20 50 43 2c 52 31  34 0d 18 1a 15 2e 4e 6f  |   PC,R14.....No|
00004650  5f 50 61 74 74 65 72 6e  5f 42 72 65 61 6b 0d 18  |_Pattern_Break..|
00004660  24 04 0d 18 2e 19 3b 20  50 6f 73 69 74 69 6f 6e  |$.....; Position|
00004670  20 4a 75 6d 70 20 28 27  4a 27 29 0d 18 38 04 0d  | Jump ('J')..8..|
00004680  18 42 13 43 4d 50 20 20  20 52 34 2c 23 26 31 33  |.B.CMP   R4,#&13|
00004690  30 30 0d 18 4c 1a 42 4e  45 20 20 20 4e 6f 5f 50  |00..L.BNE   No_P|
000046a0  6f 73 69 74 69 6f 6e 5f  4a 75 6d 70 0d 18 56 1c  |osition_Jump..V.|
000046b0  41 44 52 20 20 20 52 30  2c 54 72 6b 5f 49 6e 66  |ADR   R0,Trk_Inf|
000046c0  6f 73 5f 42 6c 6f 63 6b  0d 18 60 12 80 20 20 20  |os_Block..`..   |
000046d0  52 31 2c 52 35 2c 23 26  37 46 0d 18 6a 11 53 54  |R1,R5,#&7F..j.ST|
000046e0  52 20 20 20 52 31 2c 5b  52 30 5d 0d 18 74 0f 4d  |R   R1,[R0]..t.M|
000046f0  4f 56 20 20 20 52 31 2c  23 30 0d 18 7e 14 53 54  |OV   R1,#0..~.ST|
00004700  52 20 20 20 52 31 2c 5b  52 30 2c 23 38 5d 0d 18  |R   R1,[R0,#8]..|
00004710  88 10 4d 4f 56 20 20 20  50 43 2c 52 31 34 0d 18  |..MOV   PC,R14..|
00004720  92 15 2e 4e 6f 5f 50 6f  73 69 74 69 6f 6e 5f 4a  |...No_Position_J|
00004730  75 6d 70 0d 18 9c 04 0d  18 a6 15 3b 20 4c 69 6e  |ump........; Lin|
00004740  65 20 4a 75 6d 70 20 28  27 4c 27 29 0d 18 b0 04  |e Jump ('L')....|
00004750  0d 18 ba 13 43 4d 50 20  20 20 52 34 2c 23 26 31  |....CMP   R4,#&1|
00004760  35 30 30 0d 18 c4 16 42  4e 45 20 20 20 4e 6f 5f  |500....BNE   No_|
00004770  4c 69 6e 65 5f 4a 75 6d  70 0d 18 ce 11 80 20 20  |Line_Jump.....  |
00004780  20 52 31 2c 52 35 2c 23  26 46 0d 18 d8 15 4d 4f  | R1,R5,#&F....MO|
00004790  56 20 20 20 52 32 2c 52  35 2c 4c 53 52 23 34 0d  |V   R2,R5,LSR#4.|
000047a0  18 e2 11 80 53 20 20 52  32 2c 52 32 2c 23 26 46  |....S  R2,R2,#&F|
000047b0  0d 18 ec 10 4d 4f 56 47  54 20 52 33 2c 23 31 30  |....MOVGT R3,#10|
000047c0  0d 18 f6 15 4d 4c 41 47  54 20 52 31 2c 52 32 2c  |....MLAGT R1,R2,|
000047d0  52 33 2c 52 31 0d 19 00  10 43 4d 50 20 20 20 52  |R3,R1....CMP   R|
000047e0  31 2c 23 36 33 0d 19 0a  1c 41 44 52 4c 45 20 52  |1,#63....ADRLE R|
000047f0  30 2c 54 72 6b 5f 49 6e  66 6f 73 5f 42 6c 6f 63  |0,Trk_Infos_Bloc|
00004800  6b 0d 19 14 14 53 54 52  4c 45 20 52 31 2c 5b 52  |k....STRLE R1,[R|
00004810  30 2c 23 38 5d 0d 19 1e  10 4d 4f 56 20 20 20 50  |0,#8]....MOV   P|
00004820  43 2c 52 31 34 0d 19 28  11 2e 4e 6f 5f 4c 69 6e  |C,R14..(..No_Lin|
00004830  65 5f 4a 75 6d 70 0d 19  32 04 0d 19 3c 1b 3b 20  |e_Jump..2...<.; |
00004840  53 65 74 20 c8 a2 20 50  6f 73 69 74 69 6f 6e 20  |Set .. Position |
00004850  28 27 45 27 29 0d 19 46  04 0d 19 50 12 43 4d 50  |('E')..F...P.CMP|
00004860  20 20 20 52 34 2c 23 26  45 30 30 0d 19 5a 17 42  |   R4,#&E00..Z.B|
00004870  4e 45 20 20 20 4e 6f 5f  53 65 74 5f 53 74 65 72  |NE   No_Set_Ster|
00004880  65 6f 0d 19 64 1a 41 44  52 20 20 20 52 31 30 2c  |eo..d.ADR   R10,|
00004890  53 74 65 72 65 6f 5f 54  61 62 6c 65 0d 19 6e 38  |Stereo_Table..n8|
000048a0  80 53 20 20 52 32 2c 52  35 2c 23 26 30 46 20 20  |.S  R2,R5,#&0F  |
000048b0  20 20 20 20 20 20 20 20  3b 20 52 32 20 3d 20 53  |        ; R2 = S|
000048c0  74 65 72 65 6f 20 70 6f  73 69 74 69 6f 6e 20 28  |tereo position (|
000048d0  31 2d 37 29 0d 19 78 0d  ec 51 20 50 43 2c 52 31  |1-7)..x..Q PC,R1|
000048e0  34 0d 19 82 0f 43 4d 50  20 20 20 52 32 2c 23 37  |4....CMP   R2,#7|
000048f0  0d 19 8c 10 4d 4f 56 47  54 20 50 43 2c 52 31 34  |....MOVGT PC,R14|
00004900  0d 19 96 12 53 55 42 20  20 20 52 32 2c 52 32 2c  |....SUB   R2,R2,|
00004910  23 31 0d 19 a0 1b 4c 44  52 20 20 20 52 31 2c 5b  |#1....LDR   R1,[|
00004920  52 31 30 2c 52 32 2c 4c  53 4c 23 32 5d 0d 19 aa  |R10,R2,LSL#2]...|
00004930  31 41 44 44 20 20 20 52  30 2c 52 39 2c 23 31 20  |1ADD   R0,R9,#1 |
00004940  20 20 20 20 20 20 20 20  20 20 20 3b 20 52 30 20  |           ; R0 |
00004950  3d 20 56 6f 69 63 65 20  4e 75 6d 62 65 72 0d 19  |= Voice Number..|
00004960  b4 49 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 38  |.ISTMFD R13!,{R8|
00004970  2c 52 39 7d 20 20 20 20  20 20 20 20 3b 20 53 61  |,R9}        ; Sa|
00004980  76 65 20 52 31 34 20 62  65 66 6f 72 65 20 53 57  |ve R14 before SW|
00004990  49 20 61 73 20 77 65 20  61 72 65 20 69 6e 20 49  |I as we are in I|
000049a0  52 51 20 6d 6f 64 65 0d  19 be 0f 4d 4f 56 20 20  |RQ mode....MOV  |
000049b0  20 52 39 2c 50 43 0d 19  c8 11 84 52 20 20 20 52  | R9,PC.....R   R|
000049c0  38 2c 52 39 2c 23 33 0d  19 d2 0f 54 45 51 50 20  |8,R9,#3....TEQP |
000049d0  20 52 38 2c 23 30 0d 19  dc 0f 4d 4f 56 4e 56 20  | R8,#0....MOVNV |
000049e0  52 30 2c 52 30 0d 19 e6  14 53 54 4d 46 44 20 52  |R0,R0....STMFD R|
000049f0  31 33 21 2c 7b 52 31 34  7d 0d 19 f0 18 53 57 49  |13!,{R14}....SWI|
00004a00  20 20 20 22 53 6f 75 6e  64 5f 53 74 65 72 65 6f  |   "Sound_Stereo|
00004a10  22 0d 19 fa 14 4c 44 4d  46 44 20 52 31 33 21 2c  |"....LDMFD R13!,|
00004a20  7b 52 31 34 7d 0d 1a 04  0f 54 45 51 50 20 20 52  |{R14}....TEQP  R|
00004a30  39 2c 23 30 0d 1a 0e 0f  4d 4f 56 4e 56 20 52 30  |9,#0....MOVNV R0|
00004a40  2c 52 30 0d 1a 18 16 4c  44 4d 46 44 20 52 31 33  |,R0....LDMFD R13|
00004a50  21 2c 7b 52 38 2c 52 39  7d 0d 1a 22 12 2e 4e 6f  |!,{R8,R9}.."..No|
00004a60  5f 53 65 74 5f 53 74 65  72 65 6f 0d 1a 2c 10 4d  |_Set_Stereo..,.M|
00004a70  4f 56 20 20 20 50 43 2c  52 31 34 0d 1a 36 04 0d  |OV   PC,R14..6..|
00004a80  1a 40 23 3b 20 2a 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.@#; *----------|
00004a90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004aa0  2d 2a 0d 1a 4a 23 3b 20  2a 20 20 20 20 45 66 66  |-*..J#; *    Eff|
00004ab0  65 63 74 73 20 43 68 65  63 6b 69 6e 67 20 23 32  |ects Checking #2|
00004ac0  20 20 20 20 2a 0d 1a 54  23 3b 20 2a 2d 2d 2d 2d  |    *..T#; *----|
00004ad0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004ae0  2d 2d 2d 2d 2d 2d 2d 2a  0d 1a 5e 23 3b 20 2a 20  |-------*..^#; * |
00004af0  27 30 27 20 20 3d 20 41  72 70 65 67 67 69 6f 20  |'0'  = Arpeggio |
00004b00  20 20 20 20 20 20 20 20  20 20 2a 0d 1a 68 23 3b  |          *..h#;|
00004b10  20 2a 20 27 31 27 20 20  3d 20 50 6f 72 74 61 6d  | * '1'  = Portam|
00004b20  65 6e 74 6f 20 55 70 20  20 20 20 20 20 2a 0d 1a  |ento Up      *..|
00004b30  72 23 3b 20 2a 20 27 32  27 20 20 3d 20 50 6f 72  |r#; * '2'  = Por|
00004b40  74 61 6d 65 6e 74 6f 20  44 6f 77 6e 20 20 20 20  |tamento Down    |
00004b50  2a 0d 1a 7c 23 3b 20 2a  20 27 47 27 20 20 3d 20  |*..|#; * 'G'  = |
00004b60  53 6c 69 64 65 20 56 6f  6c 75 6d 65 20 55 70 20  |Slide Volume Up |
00004b70  20 20 20 2a 0d 1a 86 23  3b 20 2a 20 27 48 27 20  |   *...#; * 'H' |
00004b80  20 3d 20 53 6c 69 64 65  20 56 6f 6c 75 6d 65 20  | = Slide Volume |
00004b90  44 6f 77 6e 20 20 2a 0d  1a 90 23 3b 20 2a 2d 2d  |Down  *...#; *--|
00004ba0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004bb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2a 0d 1a 9a 04 0d 1a  |---------*......|
00004bc0  a4 10 2e 54 72 6b 5f 45  66 66 65 63 74 73 0d 1a  |...Trk_Effects..|
00004bd0  ae 1d 41 44 52 20 20 20  52 39 2c 54 72 6b 5f 50  |..ADR   R9,Trk_P|
00004be0  61 74 74 65 72 6e 5f 4c  69 6e 65 0d 1a b8 19 41  |attern_Line....A|
00004bf0  44 52 20 20 20 52 31 30  2c 54 72 6b 5f 50 65 72  |DR   R10,Trk_Per|
00004c00  69 6f 64 73 0d 1a c2 34  4c 44 52 20 20 20 52 31  |iods...4LDR   R1|
00004c10  31 2c 54 72 6b 5f 56 6f  69 63 65 73 20 20 20 20  |1,Trk_Voices    |
00004c20  20 20 20 3b 20 52 31 31  20 3d 20 56 6f 69 63 65  |   ; R11 = Voice|
00004c30  73 20 4e 75 6d 62 65 72  0d 1a cc 36 42 4c 20 20  |s Number...6BL  |
00004c40  20 20 47 65 74 5f 46 72  65 71 75 65 6e 63 65 5f  |  Get_Frequence_|
00004c50  54 61 62 6c 65 20 20 3b  20 52 38 20 3d 3e 20 46  |Table  ; R8 => F|
00004c60  72 65 71 75 65 6e 63 65  20 54 61 62 6c 65 0d 1a  |requence Table..|
00004c70  d6 46 42 4c 20 20 20 20  47 65 74 5f 49 6e 66 6f  |.FBL    Get_Info|
00004c80  73 5f 42 6c 6f 63 6b 20  20 20 20 20 20 3b 20 52  |s_Block      ; R|
00004c90  37 20 3d 3e 20 49 6e 66  6f 73 20 42 6c 6f 63 6b  |7 => Infos Block|
00004ca0  20 28 33 32 20 42 79 74  65 20 2f 20 43 68 61 6e  | (32 Byte / Chan|
00004cb0  6e 65 6c 29 0d 1a e0 0f  4d 4f 56 20 20 20 52 32  |nel)....MOV   R2|
00004cc0  2c 23 30 0d 1a ea 15 2e  43 68 65 63 6b 45 66 66  |,#0.....CheckEff|
00004cd0  65 63 74 73 4c 6f 6f 70  0d 1a f4 1a 4c 44 52 20  |ectsLoop....LDR |
00004ce0  20 20 52 31 2c 5b 52 39  2c 52 32 2c 4c 53 4c 23  |  R1,[R9,R2,LSL#|
00004cf0  32 5d 0d 1a fe 2f 80 20  20 20 52 33 2c 52 31 2c  |2].../.   R3,R1,|
00004d00  23 26 30 30 46 46 20 20  20 20 20 20 20 20 20 3b  |#&00FF         ;|
00004d10  20 52 33 20 3d 20 45 66  66 65 63 74 20 44 61 74  | R3 = Effect Dat|
00004d20  61 0d 1b 08 15 4d 4f 56  20 20 20 52 31 2c 52 31  |a....MOV   R1,R1|
00004d30  2c 4c 53 52 23 38 0d 1b  12 2f 80 20 20 20 52 31  |,LSR#8.../.   R1|
00004d40  2c 52 31 2c 23 26 46 46  20 20 20 20 20 20 20 20  |,R1,#&FF        |
00004d50  20 20 20 3b 20 52 31 20  3d 20 45 66 66 65 63 74  |   ; R1 = Effect|
00004d60  20 54 79 70 65 0d 1b 1c  04 0d 1b 26 11 43 4d 50  | Type......&.CMP|
00004d70  20 20 20 52 31 2c 23 26  31 30 0d 1b 30 19 42 4e  |   R1,#&10..0.BN|
00004d80  45 20 20 20 4e 6f 5f 53  6c 69 64 65 5f 56 6f 6c  |E   No_Slide_Vol|
00004d90  5f 55 70 0d 1b 3a 12 80  20 20 20 52 33 2c 52 33  |_Up..:..   R3,R3|
00004da0  2c 23 26 46 46 0d 1b 44  18 41 44 44 20 20 20 52  |,#&FF..D.ADD   R|
00004db0  34 2c 52 37 2c 52 32 2c  4c 53 4c 23 35 0d 1b 4e  |4,R7,R2,LSL#5..N|
00004dc0  2f 4c 44 52 20 20 20 52  35 2c 5b 52 34 2c 23 32  |/LDR   R5,[R4,#2|
00004dd0  30 5d 20 20 20 20 20 20  20 20 20 20 20 3b 20 52  |0]           ; R|
00004de0  35 3d 32 35 35 2d 56 6f  6c 75 6d 65 0d 1b 58 14  |5=255-Volume..X.|
00004df0  52 53 42 20 20 20 52 35  2c 52 35 2c 23 32 35 35  |RSB   R5,R5,#255|
00004e00  0d 1b 62 12 41 44 44 20  20 20 52 35 2c 52 35 2c  |..b.ADD   R5,R5,|
00004e10  52 33 0d 1b 6c 11 43 4d  50 20 20 20 52 35 2c 23  |R3..l.CMP   R5,#|
00004e20  26 46 46 0d 1b 76 11 4d  4f 56 47 54 20 52 35 2c  |&FF..v.MOVGT R5,|
00004e30  23 26 46 46 0d 1b 80 14  52 53 42 20 20 20 52 35  |#&FF....RSB   R5|
00004e40  2c 52 35 2c 23 32 35 35  0d 1b 8a 15 53 54 52 20  |,R5,#255....STR |
00004e50  20 20 52 35 2c 5b 52 34  2c 23 32 30 5d 0d 1b 94  |  R5,[R4,#20]...|
00004e60  16 42 20 20 20 20 20 43  68 65 63 6b 4e 65 78 74  |.B     CheckNext|
00004e70  56 6f 78 0d 1b 9e 14 2e  4e 6f 5f 53 6c 69 64 65  |Vox.....No_Slide|
00004e80  5f 56 6f 6c 5f 55 70 0d  1b a8 04 0d 1b b2 11 43  |_Vol_Up........C|
00004e90  4d 50 20 20 20 52 31 2c  23 26 31 31 0d 1b bc 1b  |MP   R1,#&11....|
00004ea0  42 4e 45 20 20 20 4e 6f  5f 53 6c 69 64 65 5f 56  |BNE   No_Slide_V|
00004eb0  6f 6c 5f 44 6f 77 6e 0d  1b c6 12 80 20 20 20 52  |ol_Down.....   R|
00004ec0  33 2c 52 33 2c 23 26 46  46 0d 1b d0 18 41 44 44  |3,R3,#&FF....ADD|
00004ed0  20 20 20 52 34 2c 52 37  2c 52 32 2c 4c 53 4c 23  |   R4,R7,R2,LSL#|
00004ee0  35 0d 1b da 2d 4c 44 52  20 20 20 52 35 2c 5b 52  |5...-LDR   R5,[R|
00004ef0  34 2c 23 32 30 5d 20 20  20 20 20 20 20 20 20 3b  |4,#20]         ;|
00004f00  20 52 35 3d 32 35 35 2d  56 6f 6c 75 6d 65 0d 1b  | R5=255-Volume..|
00004f10  e4 14 52 53 42 20 20 20  52 35 2c 52 35 2c 23 32  |..RSB   R5,R5,#2|
00004f20  35 35 0d 1b ee 12 53 55  42 53 20 20 52 35 2c 52  |55....SUBS  R5,R|
00004f30  35 2c 52 33 0d 1b f8 0f  4d 4f 56 4c 54 20 52 35  |5,R3....MOVLT R5|
00004f40  2c 23 30 0d 1c 02 14 52  53 42 20 20 20 52 35 2c  |,#0....RSB   R5,|
00004f50  52 35 2c 23 32 35 35 0d  1c 0c 15 53 54 52 20 20  |R5,#255....STR  |
00004f60  20 52 35 2c 5b 52 34 2c  23 32 30 5d 0d 1c 16 16  | R5,[R4,#20]....|
00004f70  42 20 20 20 20 20 43 68  65 63 6b 4e 65 78 74 56  |B     CheckNextV|
00004f80  6f 78 0d 1c 20 16 2e 4e  6f 5f 53 6c 69 64 65 5f  |ox.. ..No_Slide_|
00004f90  56 6f 6c 5f 44 6f 77 6e  0d 1c 2a 04 0d 1c 34 0f  |Vol_Down..*...4.|
00004fa0  43 4d 50 20 20 20 52 31  2c 23 31 0d 1c 3e 12 42  |CMP   R1,#1..>.B|
00004fb0  4e 45 20 20 20 4e 6f 50  6f 72 74 55 70 0d 1c 48  |NE   NoPortUp..H|
00004fc0  18 41 44 44 20 20 20 52  34 2c 52 37 2c 52 32 2c  |.ADD   R4,R7,R2,|
00004fd0  4c 53 4c 23 35 0d 1c 52  30 4c 44 52 20 20 20 52  |LSL#5..R0LDR   R|
00004fe0  35 2c 5b 52 34 2c 23 32  38 5d 20 20 20 20 20 20  |5,[R4,#28]      |
00004ff0  20 20 20 3b 20 52 35 3d  41 63 74 75 61 6c 20 50  |   ; R5=Actual P|
00005000  65 72 69 6f 64 0d 1c 5c  12 53 55 42 20 20 20 52  |eriod..\.SUB   R|
00005010  35 2c 52 35 2c 52 33 0d  1c 66 11 43 4d 50 20 20  |5,R5,R3..f.CMP  |
00005020  20 52 35 2c 23 26 35 30  0d 1c 70 11 4d 4f 56 4c  | R5,#&50..p.MOVL|
00005030  54 20 52 35 2c 23 26 35  30 0d 1c 7a 15 53 54 52  |T R5,#&50..z.STR|
00005040  20 20 20 52 35 2c 5b 52  34 2c 23 32 38 5d 0d 1c  |   R5,[R4,#28]..|
00005050  84 1a 4c 44 52 20 20 20  52 35 2c 5b 52 38 2c 52  |..LDR   R5,[R8,R|
00005060  35 2c 4c 53 4c 23 32 5d  0d 1c 8e 14 53 54 52 20  |5,LSL#2]....STR |
00005070  20 20 52 35 2c 5b 52 34  2c 23 34 5d 0d 1c 98 16  |  R5,[R4,#4]....|
00005080  42 20 20 20 20 20 43 68  65 63 6b 4e 65 78 74 56  |B     CheckNextV|
00005090  6f 78 0d 1c a2 0d 2e 4e  6f 50 6f 72 74 55 70 0d  |ox.....NoPortUp.|
000050a0  1c ac 04 0d 1c b6 0f 43  4d 50 20 20 20 52 31 2c  |.......CMP   R1,|
000050b0  23 32 0d 1c c0 14 42 4e  45 20 20 20 4e 6f 50 6f  |#2....BNE   NoPo|
000050c0  72 74 44 6f 77 6e 0d 1c  ca 18 41 44 44 20 20 20  |rtDown....ADD   |
000050d0  52 34 2c 52 37 2c 52 32  2c 4c 53 4c 23 35 0d 1c  |R4,R7,R2,LSL#5..|
000050e0  d4 35 4c 44 52 20 20 20  52 35 2c 5b 52 34 2c 23  |.5LDR   R5,[R4,#|
000050f0  32 38 5d 20 20 20 20 20  20 20 20 20 3b 20 48 61  |28]         ; Ha|
00005100  75 74 65 75 72 20 4e 6f  74 65 20 41 63 74 75 65  |uteur Note Actue|
00005110  6c 6c 65 0d 1c de 12 41  44 44 20 20 20 52 35 2c  |lle....ADD   R5,|
00005120  52 35 2c 52 33 0d 1c e8  12 43 4d 50 20 20 20 52  |R5,R3....CMP   R|
00005130  35 2c 23 26 33 46 30 0d  1c f2 12 4d 4f 56 47 54  |5,#&3F0....MOVGT|
00005140  20 52 35 2c 23 26 33 46  30 0d 1c fc 15 53 54 52  | R5,#&3F0....STR|
00005150  20 20 20 52 35 2c 5b 52  34 2c 23 32 38 5d 0d 1d  |   R5,[R4,#28]..|
00005160  06 36 4c 44 52 20 20 20  52 35 2c 5b 52 38 2c 52  |.6LDR   R5,[R8,R|
00005170  35 2c 4c 53 4c 23 32 5d  20 20 20 20 3b 20 47 65  |5,LSL#2]    ; Ge|
00005180  74 20 70 68 61 73 65 20  69 6e 63 72 65 6d 65 6e  |t phase incremen|
00005190  74 2e 2e 2e 0d 1d 10 2a  53 54 52 20 20 20 52 35  |t......*STR   R5|
000051a0  2c 5b 52 34 2c 23 34 5d  20 20 20 20 20 20 20 20  |,[R4,#4]        |
000051b0  20 20 3b 20 2e 2e 2e 53  61 76 65 20 69 74 0d 1d  |  ; ...Save it..|
000051c0  1a 16 42 20 20 20 20 20  43 68 65 63 6b 4e 65 78  |..B     CheckNex|
000051d0  74 56 6f 78 0d 1d 24 0f  2e 4e 6f 50 6f 72 74 44  |tVox..$..NoPortD|
000051e0  6f 77 6e 0d 1d 2e 04 0d  1d 38 0f 43 4d 50 20 20  |own......8.CMP  |
000051f0  20 52 31 2c 23 30 0d 1d  42 16 42 4c 45 51 20 20  | R1,#0..B.BLEQ  |
00005200  54 72 6b 5f 41 72 70 65  67 67 69 6f 0d 1d 4c 04  |Trk_Arpeggio..L.|
00005210  0d 1d 56 11 2e 43 68 65  63 6b 4e 65 78 74 56 6f  |..V..CheckNextVo|
00005220  78 0d 1d 60 2a 41 44 44  20 20 20 52 32 2c 52 32  |x..`*ADD   R2,R2|
00005230  2c 23 31 20 20 20 20 20  20 20 20 20 20 20 20 3b  |,#1            ;|
00005240  20 4e 65 78 74 20 56 6f  69 63 65 0d 1d 6a 2c 43  | Next Voice..j,C|
00005250  4d 50 20 20 20 52 32 2c  52 31 31 20 20 20 20 20  |MP   R2,R11     |
00005260  20 20 20 20 20 20 20 20  20 3b 20 4c 61 73 74 20  |         ; Last |
00005270  56 6f 69 63 65 20 3f 0d  1d 74 1a 42 4e 45 20 20  |Voice ?..t.BNE  |
00005280  20 43 68 65 63 6b 45 66  66 65 63 74 73 4c 6f 6f  | CheckEffectsLoo|
00005290  70 0d 1d 7e 1a 4c 44 4d  46 44 20 52 31 33 21 2c  |p..~.LDMFD R13!,|
000052a0  7b 52 30 2d 52 31 32 2c  50 43 7d 0d 1d 88 04 0d  |{R0-R12,PC}.....|
000052b0  1d 92 11 2e 54 72 6b 5f  41 72 70 65 67 67 69 6f  |....Trk_Arpeggio|
000052c0  0d 1d 9c 14 53 54 4d 46  44 20 52 31 33 21 2c 7b  |....STMFD R13!,{|
000052d0  52 31 34 7d 0d 1d a6 0f  43 4d 50 20 20 20 52 33  |R14}....CMP   R3|
000052e0  2c 23 30 0d 1d b0 15 4c  44 4d 45 51 46 44 20 52  |,#0....LDMEQFD R|
000052f0  31 33 21 2c 7b 50 43 7d  0d 1d ba 18 4c 44 52 20  |13!,{PC}....LDR |
00005300  20 20 52 30 2c 54 72 6b  5f 43 6f 75 6e 74 65 72  |  R0,Trk_Counter|
00005310  0d 1d c4 0f 43 4d 50 20  20 20 52 30 2c 23 31 0d  |....CMP   R0,#1.|
00005320  1d ce 13 42 45 51 20 20  20 41 72 70 5f 4c 6f 6f  |...BEQ   Arp_Loo|
00005330  70 32 0d 1d d8 0f 43 4d  50 20 20 20 52 30 2c 23  |p2....CMP   R0,#|
00005340  32 0d 1d e2 13 42 45 51  20 20 20 41 72 70 5f 4c  |2....BEQ   Arp_L|
00005350  6f 6f 70 33 0d 1d ec 0f  43 4d 50 20 20 20 52 30  |oop3....CMP   R0|
00005360  2c 23 33 0d 1d f6 13 42  45 51 20 20 20 41 72 70  |,#3....BEQ   Arp|
00005370  5f 4c 6f 6f 70 34 0d 1e  00 0f 43 4d 50 20 20 20  |_Loop4....CMP   |
00005380  52 30 2c 23 34 0d 1e 0a  13 42 45 51 20 20 20 41  |R0,#4....BEQ   A|
00005390  72 70 5f 4c 6f 6f 70 32  0d 1e 14 0f 43 4d 50 20  |rp_Loop2....CMP |
000053a0  20 20 52 30 2c 23 35 0d  1e 1e 13 42 45 51 20 20  |  R0,#5....BEQ  |
000053b0  20 41 72 70 5f 4c 6f 6f  70 33 0d 1e 28 13 4c 44  | Arp_Loop3..(.LD|
000053c0  4d 46 44 20 52 31 33 21  2c 7b 50 43 7d 0d 1e 32  |MFD R13!,{PC}..2|
000053d0  04 0d 1e 3c 0e 2e 41 72  70 5f 4c 6f 6f 70 32 0d  |...<..Arp_Loop2.|
000053e0  1e 46 4b 4d 4f 56 20 20  20 52 30 2c 52 33 2c 4c  |.FKMOV   R0,R3,L|
000053f0  53 52 23 34 20 20 20 20  20 20 20 20 3b 20 52 30  |SR#4        ; R0|
00005400  3d 46 69 72 73 74 20 6e  69 62 62 6c 65 2c 20 74  |=First nibble, t|
00005410  68 65 6e 20 61 64 64 20  69 74 20 74 6f 20 63 75  |hen add it to cu|
00005420  72 72 65 6e 74 20 74 6f  6e 65 0d 1e 50 12 42 20  |rrent tone..P.B |
00005430  20 20 20 20 41 72 70 5f  43 6f 6e 74 0d 1e 5a 0e  |    Arp_Cont..Z.|
00005440  2e 41 72 70 5f 4c 6f 6f  70 33 0d 1e 64 4a 80 20  |.Arp_Loop3..dJ. |
00005450  20 20 52 30 2c 52 33 2c  23 26 30 46 20 20 20 20  |  R0,R3,#&0F    |
00005460  20 20 20 20 20 3b 20 52  30 3d 53 65 63 6f 6e 64  |     ; R0=Second|
00005470  20 6e 69 62 62 6c 65 2c  20 74 68 65 6e 20 61 64  | nibble, then ad|
00005480  64 20 69 74 20 74 6f 20  63 75 72 72 65 6e 74 20  |d it to current |
00005490  74 6f 6e 65 0d 1e 6e 12  42 20 20 20 20 20 41 72  |tone..n.B     Ar|
000054a0  70 5f 43 6f 6e 74 0d 1e  78 0e 2e 41 72 70 5f 4c  |p_Cont..x..Arp_L|
000054b0  6f 6f 70 34 0d 1e 82 30  4c 44 52 20 20 20 52 33  |oop4...0LDR   R3|
000054c0  2c 5b 52 31 30 2c 52 32  2c 4c 53 4c 23 32 5d 20  |,[R10,R2,LSL#2] |
000054d0  20 3b 20 50 6c 61 79 20  63 75 72 72 65 6e 74 20  | ; Play current |
000054e0  74 6f 6e 65 0d 1e 8c 15  42 20 20 20 20 20 41 72  |tone....B     Ar|
000054f0  70 5f 45 6e 64 50 61 72  74 0d 1e 96 0d 2e 41 72  |p_EndPart.....Ar|
00005500  70 5f 43 6f 6e 74 0d 1e  a0 19 42 4c 20 20 20 20  |p_Cont....BL    |
00005510  47 65 74 5f 50 65 72 69  6f 64 73 5f 41 64 72 0d  |Get_Periods_Adr.|
00005520  1e aa 1b 4c 44 52 20 20  20 52 31 2c 5b 52 31 30  |...LDR   R1,[R10|
00005530  2c 52 32 2c 4c 53 4c 23  32 5d 0d 1e b4 16 41 44  |,R2,LSL#2]....AD|
00005540  44 20 20 20 52 34 2c 52  31 32 2c 23 33 36 2a 34  |D   R4,R12,#36*4|
00005550  0d 1e be 0e 2e 41 72 70  5f 4c 6f 6f 70 35 0d 1e  |.....Arp_Loop5..|
00005560  c8 1b 4c 44 52 20 20 20  52 33 2c 5b 52 31 32 2c  |..LDR   R3,[R12,|
00005570  52 30 2c 4c 53 4c 23 32  5d 0d 1e d2 15 4c 44 52  |R0,LSL#2]....LDR|
00005580  20 20 20 52 36 2c 5b 52  31 32 5d 2c 23 34 0d 1e  |   R6,[R12],#4..|
00005590  dc 0f 43 4d 50 20 20 20  52 36 2c 52 31 0d 1e e6  |..CMP   R6,R1...|
000055a0  15 42 45 51 20 20 20 41  72 70 5f 45 6e 64 50 61  |.BEQ   Arp_EndPa|
000055b0  72 74 0d 1e f0 13 42 20  20 20 20 20 41 72 70 5f  |rt....B     Arp_|
000055c0  4c 6f 6f 70 35 0d 1e fa  04 0d 1f 04 10 2e 41 72  |Loop5.........Ar|
000055d0  70 5f 45 6e 64 50 61 72  74 0d 1f 0e 1a 41 44 44  |p_EndPart....ADD|
000055e0  20 20 20 52 31 32 2c 52  31 32 2c 52 30 2c 4c 53  |   R12,R12,R0,LS|
000055f0  4c 23 32 0d 1f 18 10 43  4d 50 20 20 20 52 31 32  |L#2....CMP   R12|
00005600  2c 52 34 0d 1f 22 15 4c  44 4d 47 54 46 44 20 52  |,R4..".LDMGTFD R|
00005610  31 33 21 2c 7b 50 43 7d  0d 1f 2c 18 41 44 44 20  |13!,{PC}..,.ADD |
00005620  20 20 52 34 2c 52 37 2c  52 32 2c 4c 53 4c 23 35  |  R4,R7,R2,LSL#5|
00005630  0d 1f 36 0f 43 4d 50 20  20 20 52 33 2c 23 30 0d  |..6.CMP   R3,#0.|
00005640  1f 40 15 4c 44 4d 45 51  46 44 20 52 31 33 21 2c  |.@.LDMEQFD R13!,|
00005650  7b 50 43 7d 0d 1f 4a 3b  4c 44 52 20 20 20 52 35  |{PC}..J;LDR   R5|
00005660  2c 5b 52 38 2c 52 33 2c  4c 53 4c 23 32 5d 20 20  |,[R8,R3,LSL#2]  |
00005670  20 20 20 20 20 20 20 3b  20 47 65 74 20 70 68 61  |       ; Get pha|
00005680  73 65 20 69 6e 63 72 65  6d 65 6e 74 2e 2e 2e 0d  |se increment....|
00005690  1f 54 45 53 54 52 20 20  20 52 35 2c 5b 52 34 2c  |.TESTR   R5,[R4,|
000056a0  23 34 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |#4]             |
000056b0  20 20 3b 20 2e 2e 2e 53  61 76 65 20 69 74 20 69  |  ; ...Save it i|
000056c0  6e 20 56 6f 69 63 65 73  20 49 6e 66 6f 73 5f 42  |n Voices Infos_B|
000056d0  6c 6f 63 6b 0d 1f 5e 0f  2e 45 6e 64 5f 45 66 66  |lock..^..End_Eff|
000056e0  65 63 74 0d 1f 68 13 4c  44 4d 46 44 20 52 31 33  |ect..h.LDMFD R13|
000056f0  21 2c 7b 50 43 7d 0d 1f  72 04 0d 1f 7c 11 2e 53  |!,{PC}..r...|..S|
00005700  74 65 72 65 6f 5f 54 61  62 6c 65 0d 1f 86 3f 45  |tereo_Table...?E|
00005710  51 55 44 20 2d 31 32 36  3a 45 51 55 44 20 2d 37  |QUD -126:EQUD -7|
00005720  30 3a 45 51 55 44 20 2d  34 30 3a 45 51 55 44 20  |0:EQUD -40:EQUD |
00005730  30 3a 45 51 55 44 20 34  30 3a 45 51 55 44 20 37  |0:EQUD 40:EQUD 7|
00005740  30 3a 45 51 55 44 20 31  32 37 0d 1f 90 04 0d 1f  |0:EQUD 127......|
00005750  9a 18 2e 56 6f 69 63 65  5f 43 6f 6e 74 72 6f 6c  |...Voice_Control|
00005760  5f 42 6c 6f 63 6b 0d 1f  a4 17 42 20 46 69 6c 6c  |_Block....B Fill|
00005770  5f 53 6f 75 6e 64 5f 42  75 66 66 65 72 0d 1f ae  |_Sound_Buffer...|
00005780  17 42 20 46 69 6c 6c 5f  53 6f 75 6e 64 5f 42 75  |.B Fill_Sound_Bu|
00005790  66 66 65 72 0d 1f b8 17  42 20 46 69 6c 6c 5f 53  |ffer....B Fill_S|
000057a0  6f 75 6e 64 5f 42 75 66  66 65 72 0d 1f c2 13 4c  |ound_Buffer....L|
000057b0  44 4d 46 44 20 52 31 33  21 2c 7b 50 43 7d 0d 1f  |DMFD R13!,{PC}..|
000057c0  cc 13 4c 44 4d 46 44 20  52 31 33 21 2c 7b 50 43  |..LDMFD R13!,{PC|
000057d0  7d 0d 1f d6 13 4c 44 4d  46 44 20 52 31 33 21 2c  |}....LDMFD R13!,|
000057e0  7b 50 43 7d 0d 1f e0 13  4c 44 4d 46 44 20 52 31  |{PC}....LDMFD R1|
000057f0  33 21 2c 7b 50 43 7d 0d  1f ea 27 45 51 55 44 20  |3!,{PC}...'EQUD |
00005800  56 6f 69 63 65 5f 4e 61  6d 65 2d 56 6f 69 63 65  |Voice_Name-Voice|
00005810  5f 43 6f 6e 74 72 6f 6c  5f 42 6c 6f 63 6b 0d 1f  |_Control_Block..|
00005820  f4 0f 2e 56 6f 69 63 65  5f 4e 61 6d 65 0d 1f fe  |...Voice_Name...|
00005830  1f 45 51 55 53 20 22 54  72 61 63 6b 65 72 22 3a  |.EQUS "Tracker":|
00005840  45 51 55 42 20 30 3a 41  4c 49 47 4e 0d 20 08 04  |EQUB 0:ALIGN. ..|
00005850  0d 20 12 29 3b 20 2a 2d  2d 2d 2d 2d 2d 2d 2d 2d  |. .); *---------|
00005860  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005870  2d 2d 2d 2d 2d 2d 2d 2d  2a 0d 20 1c 29 3b 20 2a  |--------*. .); *|
00005880  20 20 20 20 49 6e 69 74  20 54 72 61 63 6b 65 72  |    Init Tracker|
00005890  20 53 6f 75 6e 64 20 53  79 73 74 65 6d 20 20 20  | Sound System   |
000058a0  20 2a 0d 20 26 29 3b 20  2a 2d 2d 2d 2d 2d 2d 2d  | *. &); *-------|
000058b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000058c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2a 0d 20 30 04 0d  |----------*. 0..|
000058d0  20 3a 16 2e 49 6e 69 74  5f 53 6f 75 6e 64 5f 53  | :..Init_Sound_S|
000058e0  79 73 74 65 6d 0d 20 44  1b 53 54 4d 46 44 20 52  |ystem. D.STMFD R|
000058f0  31 33 21 2c 7b 52 30 2d  52 31 32 2c 52 31 34 7d  |13!,{R0-R12,R14}|
00005900  0d 20 4e 18 4c 44 52 20  20 20 52 31 32 2c 54 72  |. N.LDR   R12,Tr|
00005910  6b 5f 56 6f 69 63 65 73  0d 20 58 04 0d 20 62 20  |k_Voices. X.. b |
00005920  41 44 52 20 20 20 52 30  2c 56 6f 69 63 65 5f 43  |ADR   R0,Voice_C|
00005930  6f 6e 74 72 6f 6c 5f 42  6c 6f 63 6b 0d 20 6c 0f  |ontrol_Block. l.|
00005940  4d 4f 56 20 20 20 52 31  2c 23 30 0d 20 76 1e 53  |MOV   R1,#0. v.S|
00005950  57 49 20 20 20 22 53 6f  75 6e 64 5f 49 6e 73 74  |WI   "Sound_Inst|
00005960  61 6c 6c 56 6f 69 63 65  22 0d 20 80 1b 53 54 52  |allVoice". ..STR|
00005970  20 20 20 52 31 2c 4f 6c  64 5f 56 6f 69 63 65 5f  |   R1,Old_Voice_|
00005980  53 6c 6f 74 0d 20 8a 04  0d 20 94 10 4d 4f 56 20  |Slot. ... ..MOV |
00005990  20 20 52 31 30 2c 23 31  0d 20 9e 16 41 44 52 20  |  R10,#1. ..ADR |
000059a0  20 20 52 39 2c 4f 6c 64  56 6f 69 63 65 73 0d 20  |  R9,OldVoices. |
000059b0  a8 12 53 55 42 20 20 20  52 39 2c 52 39 2c 23 34  |..SUB   R9,R9,#4|
000059c0  0d 20 b2 18 2e 56 6f 69  63 65 73 5f 45 78 74 65  |. ...Voices_Exte|
000059d0  72 6d 69 6e 61 74 6f 72  0d 20 bc 10 4d 4f 56 20  |rminator. ..MOV |
000059e0  20 20 52 30 2c 52 31 30  0d 20 c6 0f 4d 4f 56 20  |  R0,R10. ..MOV |
000059f0  20 20 52 31 2c 23 30 0d  20 d0 1d 53 57 49 20 20  |  R1,#0. ..SWI  |
00005a00  20 22 53 6f 75 6e 64 5f  41 74 74 61 63 68 56 6f  | "Sound_AttachVo|
00005a10  69 63 65 22 0d 20 da 1b  53 54 52 20 20 20 52 31  |ice". ..STR   R1|
00005a20  2c 5b 52 39 2c 52 31 30  2c 4c 53 4c 23 32 5d 0d  |,[R9,R10,LSL#2].|
00005a30  20 e4 14 41 44 44 20 20  20 52 31 30 2c 52 31 30  | ..ADD   R10,R10|
00005a40  2c 23 31 0d 20 ee 10 43  4d 50 20 20 20 52 31 30  |,#1. ..CMP   R10|
00005a50  2c 23 38 0d 20 f8 1d 42  4c 45 20 20 20 56 6f 69  |,#8. ..BLE   Voi|
00005a60  63 65 73 5f 45 78 74 65  72 6d 69 6e 61 74 6f 72  |ces_Exterminator|
00005a70  0d 21 02 04 0d 21 0c 10  4d 4f 56 20 20 20 52 31  |.!...!..MOV   R1|
00005a80  30 2c 23 31 0d 21 16 12  2e 49 6e 69 74 41 6c 6c  |0,#1.!...InitAll|
00005a90  56 6f 69 63 65 73 0d 21  20 10 4d 4f 56 20 20 20  |Voices.! .MOV   |
00005aa0  52 30 2c 52 31 30 0d 21  2a 17 41 44 52 20 20 20  |R0,R10.!*.ADR   |
00005ab0  52 31 2c 56 6f 69 63 65  5f 4e 61 6d 65 0d 21 34  |R1,Voice_Name.!4|
00005ac0  22 53 57 49 20 20 20 22  53 6f 75 6e 64 5f 41 74  |"SWI   "Sound_At|
00005ad0  74 61 63 68 4e 61 6d 65  64 56 6f 69 63 65 22 0d  |tachNamedVoice".|
00005ae0  21 3e 14 41 44 44 20 20  20 52 31 30 2c 52 31 30  |!>.ADD   R10,R10|
00005af0  2c 23 31 0d 21 48 11 43  4d 50 20 20 20 52 31 30  |,#1.!H.CMP   R10|
00005b00  2c 52 31 32 0d 21 52 17  42 4c 45 20 20 20 49 6e  |,R12.!R.BLE   In|
00005b10  69 74 41 6c 6c 56 6f 69  63 65 73 0d 21 5c 04 0d  |itAllVoices.!\..|
00005b20  21 66 17 41 44 52 20 20  20 52 37 2c 4f 6c 64 53  |!f.ADR   R7,OldS|
00005b30  74 65 72 65 6f 73 0d 21  70 1a 41 44 52 20 20 20  |tereos.!p.ADR   |
00005b40  52 31 30 2c 53 74 65 72  65 6f 5f 54 61 62 6c 65  |R10,Stereo_Table|
00005b50  0d 21 7a 0f 4d 4f 56 20  20 20 52 39 2c 23 31 0d  |.!z.MOV   R9,#1.|
00005b60  21 84 14 2e 53 65 74 5f  53 74 65 72 65 6f 5f 4c  |!...Set_Stereo_L|
00005b70  6f 6f 70 0d 21 8e 0f 4d  4f 56 20 20 20 52 30 2c  |oop.!..MOV   R0,|
00005b80  52 39 0d 21 98 15 4c 44  52 42 20 20 52 35 2c 5b  |R9.!..LDRB  R5,[|
00005b90  52 31 31 5d 2c 23 31 0d  21 a2 12 53 55 42 53 20  |R11],#1.!..SUBS |
00005ba0  20 52 35 2c 52 35 2c 23  31 0d 21 ac 0f 4d 4f 56  | R5,R5,#1.!..MOV|
00005bb0  4c 54 20 52 35 2c 23 30  0d 21 b6 1b 4c 44 52 20  |LT R5,#0.!..LDR |
00005bc0  20 20 52 31 2c 5b 52 31  30 2c 52 35 2c 4c 53 4c  |  R1,[R10,R5,LSL|
00005bd0  23 32 5d 0d 21 c0 18 53  57 49 20 20 20 22 53 6f  |#2].!..SWI   "So|
00005be0  75 6e 64 5f 53 74 65 72  65 6f 22 0d 21 ca 14 53  |und_Stereo".!..S|
00005bf0  54 52 42 20 20 52 31 2c  5b 52 37 5d 2c 23 31 0d  |TRB  R1,[R7],#1.|
00005c00  21 d4 12 41 44 44 20 20  20 52 39 2c 52 39 2c 23  |!..ADD   R9,R9,#|
00005c10  31 0d 21 de 10 43 4d 50  20 20 20 52 39 2c 52 31  |1.!..CMP   R9,R1|
00005c20  32 0d 21 e8 19 42 4c 45  20 20 20 53 65 74 5f 53  |2.!..BLE   Set_S|
00005c30  74 65 72 65 6f 5f 4c 6f  6f 70 0d 21 f2 04 0d 21  |tereo_Loop.!...!|
00005c40  fc 30 4d 4f 56 20 20 20  52 30 2c 52 31 32 20 20  |.0MOV   R0,R12  |
00005c50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00005c60  20 56 6f 69 63 65 73 20  6e 75 6d 62 65 72 0d 22  | Voices number."|
00005c70  06 44 4d 4f 56 20 20 20  52 31 2c 23 32 30 38 20  |.DMOV   R1,#208 |
00005c80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00005c90  20 42 75 66 66 65 72 20  6c 65 6e 67 74 68 20 69  | Buffer length i|
00005ca0  6e 20 62 79 74 65 20 70  65 72 20 63 68 61 6e 6e  |n byte per chann|
00005cb0  65 6c 0d 22 10 42 4d 4f  56 20 20 20 52 32 2c 23  |el.".BMOV   R2,#|
00005cc0  53 61 6d 70 6c 65 5f 52  61 74 65 20 20 20 20 20  |Sample_Rate     |
00005cd0  20 20 20 3b 20 53 61 6d  70 6c 65 20 52 61 74 65  |   ; Sample Rate|
00005ce0  20 28 33 34 75 73 20 3d  20 32 39 2e 34 31 31 20  | (34us = 29.411 |
00005cf0  4b 68 7a 29 0d 22 1a 0f  4d 4f 56 20 20 20 52 33  |Khz)."..MOV   R3|
00005d00  2c 23 30 0d 22 24 0f 4d  4f 56 20 20 20 52 34 2c  |,#0."$.MOV   R4,|
00005d10  23 30 0d 22 2e 1b 53 57  49 20 20 20 22 53 6f 75  |#0."..SWI   "Sou|
00005d20  6e 64 5f 43 6f 6e 66 69  67 75 72 65 22 0d 22 38  |nd_Configure"."8|
00005d30  19 41 44 52 20 20 20 52  39 2c 4f 6c 64 43 6f 6e  |.ADR   R9,OldCon|
00005d40  66 69 67 75 72 65 0d 22  42 14 53 54 4d 49 41 20  |figure."B.STMIA |
00005d50  52 39 2c 7b 52 30 2d 52  34 7d 0d 22 4c 04 0d 22  |R9,{R0-R4}."L.."|
00005d60  56 10 4d 4f 56 20 20 20  52 38 2c 52 31 32 0d 22  |V.MOV   R8,R12."|
00005d70  60 13 2e 53 6f 75 6e 64  41 6c 6c 56 6f 69 63 65  |`..SoundAllVoice|
00005d80  73 0d 22 6a 0f 4d 4f 56  20 20 20 52 30 2c 52 38  |s."j.MOV   R0,R8|
00005d90  0d 22 74 10 4d 56 4e 20  20 20 52 31 2c 23 32 30  |."t.MVN   R1,#20|
00005da0  0d 22 7e 11 4d 4f 56 20  20 20 52 32 2c 23 26 46  |."~.MOV   R2,#&F|
00005db0  30 0d 22 88 11 4d 4f 56  20 20 20 52 33 2c 23 26  |0."..MOV   R3,#&|
00005dc0  46 46 0d 22 92 19 53 57  49 20 20 20 22 53 6f 75  |FF."..SWI   "Sou|
00005dd0  6e 64 5f 43 6f 6e 74 72  6f 6c 22 0d 22 9c 12 53  |nd_Control"."..S|
00005de0  55 42 53 20 20 52 38 2c  52 38 2c 23 31 0d 22 a6  |UBS  R8,R8,#1.".|
00005df0  18 42 47 54 20 20 20 53  6f 75 6e 64 41 6c 6c 56  |.BGT   SoundAllV|
00005e00  6f 69 63 65 73 0d 22 b0  1b 4c 44 4d 46 44 20 52  |oices."..LDMFD R|
00005e10  31 33 21 2c 7b 52 30 2d  52 31 32 2c 50 43 7d 5e  |13!,{R0-R12,PC}^|
00005e20  0d 22 ba 04 0d 22 c4 0e  2e 4f 6c 64 56 6f 69 63  |."..."...OldVoic|
00005e30  65 73 0d 22 ce 1f 45 51  55 44 20 30 3a 45 51 55  |es."..EQUD 0:EQU|
00005e40  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
00005e50  30 0d 22 d8 1f 45 51 55  44 20 30 3a 45 51 55 44  |0."..EQUD 0:EQUD|
00005e60  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00005e70  0d 22 e2 11 2e 4f 6c 64  43 6f 6e 66 69 67 75 72  |."...OldConfigur|
00005e80  65 0d 22 ec 26 45 51 55  44 20 30 3a 45 51 55 44  |e.".&EQUD 0:EQUD|
00005e90  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00005ea0  3a 45 51 55 44 20 30 0d  22 f6 0f 2e 4f 6c 64 53  |:EQUD 0."...OldS|
00005eb0  74 65 72 65 6f 73 0d 23  00 11 45 51 55 44 20 30  |tereos.#..EQUD 0|
00005ec0  3a 45 51 55 44 20 30 0d  23 0a 04 0d 23 14 28 3b  |:EQUD 0.#...#.(;|
00005ed0  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
00005ee0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005ef0  2d 2d 2a 0d 23 1e 28 3b  20 2a 20 20 45 78 69 74  |--*.#.(; *  Exit|
00005f00  20 6f 66 20 54 72 61 63  6b 65 72 20 53 6f 75 6e  | of Tracker Soun|
00005f10  64 20 53 79 73 74 65 6d  20 20 2a 0d 23 28 28 3b  |d System  *.#((;|
00005f20  20 2a 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | *--------------|
00005f30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005f40  2d 2d 2a 0d 23 32 04 0d  23 3c 12 2e 54 72 6b 5f  |--*.#2..#<..Trk_|
00005f50  43 6c 6f 73 65 5f 41 6c  6c 0d 23 46 1b 53 54 4d  |Close_All.#F.STM|
00005f60  46 44 20 52 31 33 21 2c  7b 52 30 2d 52 31 32 2c  |FD R13!,{R0-R12,|
00005f70  52 31 34 7d 0d 23 50 04  0d 23 5a 19 42 4c 20 20  |R14}.#P..#Z.BL  |
00005f80  20 20 47 65 74 5f 49 6e  66 6f 73 5f 42 6c 6f 63  |  Get_Infos_Bloc|
00005f90  6b 0d 23 64 13 41 44 44  20 20 20 52 37 2c 52 37  |k.#d.ADD   R7,R7|
00005fa0  2c 23 32 34 0d 23 6e 19  4d 4f 56 20 20 20 52 36  |,#24.#n.MOV   R6|
00005fb0  2c 23 38 3a 4d 4f 56 20  52 35 2c 23 30 0d 23 78  |,#8:MOV R5,#0.#x|
00005fc0  14 2e 53 65 74 5f 5a 65  72 6f 65 73 5f 4c 6f 6f  |..Set_Zeroes_Loo|
00005fd0  70 0d 23 82 15 53 54 52  20 20 20 52 35 2c 5b 52  |p.#..STR   R5,[R|
00005fe0  37 5d 2c 23 33 32 0d 23  8c 12 53 55 42 53 20 20  |7],#32.#..SUBS  |
00005ff0  52 36 2c 52 36 2c 23 31  0d 23 96 19 42 47 54 20  |R6,R6,#1.#..BGT |
00006000  20 20 53 65 74 5f 5a 65  72 6f 65 73 5f 4c 6f 6f  |  Set_Zeroes_Loo|
00006010  70 0d 23 a0 04 0d 23 aa  0f 4d 4f 56 20 20 20 52  |p.#...#..MOV   R|
00006020  30 2c 23 30 0d 23 b4 1b  4c 44 52 20 20 20 52 31  |0,#0.#..LDR   R1|
00006030  2c 4f 6c 64 5f 56 6f 69  63 65 5f 53 6c 6f 74 0d  |,Old_Voice_Slot.|
00006040  23 be 1d 53 57 49 20 20  20 22 53 6f 75 6e 64 5f  |#..SWI   "Sound_|
00006050  52 65 6d 6f 76 65 56 6f  69 63 65 22 0d 23 c8 04  |RemoveVoice".#..|
00006060  0d 23 d2 18 4c 44 52 20  20 20 52 31 32 2c 54 72  |.#..LDR   R12,Tr|
00006070  6b 5f 56 6f 69 63 65 73  0d 23 dc 10 4d 4f 56 20  |k_Voices.#..MOV |
00006080  20 20 52 31 30 2c 23 31  0d 23 e6 16 41 44 52 20  |  R10,#1.#..ADR |
00006090  20 20 52 39 2c 4f 6c 64  56 6f 69 63 65 73 0d 23  |  R9,OldVoices.#|
000060a0  f0 12 53 55 42 20 20 20  52 39 2c 52 39 2c 23 34  |..SUB   R9,R9,#4|
000060b0  0d 23 fa 16 2e 44 65 74  61 63 68 5f 54 72 6b 5f  |.#...Detach_Trk_|
000060c0  56 6f 69 63 65 73 0d 24  04 10 4d 4f 56 20 20 20  |Voices.$..MOV   |
000060d0  52 30 2c 52 31 30 0d 24  0e 1b 4c 44 52 20 20 20  |R0,R10.$..LDR   |
000060e0  52 31 2c 5b 52 39 2c 52  31 30 2c 4c 53 4c 23 32  |R1,[R9,R10,LSL#2|
000060f0  5d 0d 24 18 1d 53 57 49  20 20 20 22 53 6f 75 6e  |].$..SWI   "Soun|
00006100  64 5f 41 74 74 61 63 68  56 6f 69 63 65 22 0d 24  |d_AttachVoice".$|
00006110  22 14 41 44 44 20 20 20  52 31 30 2c 52 31 30 2c  |".ADD   R10,R10,|
00006120  23 31 0d 24 2c 11 43 4d  50 20 20 20 52 31 30 2c  |#1.$,.CMP   R10,|
00006130  52 31 32 0d 24 36 1b 42  4c 45 20 20 20 44 65 74  |R12.$6.BLE   Det|
00006140  61 63 68 5f 54 72 6b 5f  56 6f 69 63 65 73 0d 24  |ach_Trk_Voices.$|
00006150  40 04 0d 24 4a 17 41 44  52 20 20 20 52 39 2c 4f  |@..$J.ADR   R9,O|
00006160  6c 64 53 74 65 72 65 6f  73 0d 24 54 10 4d 4f 56  |ldStereos.$T.MOV|
00006170  20 20 20 52 31 30 2c 23  31 0d 24 5e 14 2e 52 65  |   R10,#1.$^..Re|
00006180  73 74 6f 72 65 5f 53 74  65 72 65 6f 73 0d 24 68  |store_Stereos.$h|
00006190  10 4d 4f 56 20 20 20 52  30 2c 52 31 30 0d 24 72  |.MOV   R0,R10.$r|
000061a0  14 4c 44 52 42 20 20 52  31 2c 5b 52 39 5d 2c 23  |.LDRB  R1,[R9],#|
000061b0  31 0d 24 7c 18 53 57 49  20 20 20 22 53 6f 75 6e  |1.$|.SWI   "Soun|
000061c0  64 5f 53 74 65 72 65 6f  22 0d 24 86 14 41 44 44  |d_Stereo".$..ADD|
000061d0  20 20 20 52 31 30 2c 52  31 30 2c 23 31 0d 24 90  |   R10,R10,#1.$.|
000061e0  11 43 4d 50 20 20 20 52  31 30 2c 52 31 32 0d 24  |.CMP   R10,R12.$|
000061f0  9a 19 42 4c 45 20 20 20  52 65 73 74 6f 72 65 5f  |..BLE   Restore_|
00006200  53 74 65 72 65 6f 73 0d  24 a4 04 0d 24 ae 19 41  |Stereos.$...$..A|
00006210  44 52 20 20 20 52 39 2c  4f 6c 64 43 6f 6e 66 69  |DR   R9,OldConfi|
00006220  67 75 72 65 0d 24 b8 14  4c 44 4d 49 41 20 52 39  |gure.$..LDMIA R9|
00006230  2c 7b 52 30 2d 52 34 7d  0d 24 c2 1b 53 57 49 20  |,{R0-R4}.$..SWI |
00006240  20 20 22 53 6f 75 6e 64  5f 43 6f 6e 66 69 67 75  |  "Sound_Configu|
00006250  72 65 22 0d 24 cc 1b 4c  44 4d 46 44 20 52 31 33  |re".$..LDMFD R13|
00006260  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 5e 0d 24  |!,{R0-R12,PC}^.$|
00006270  d6 04 0d 24 e0 13 2e 4f  6c 64 5f 56 6f 69 63 65  |...$...Old_Voice|
00006280  5f 53 6c 6f 74 0d 24 ea  0a 45 51 55 44 20 30 0d  |_Slot.$..EQUD 0.|
00006290  24 f4 14 2e 47 65 74 5f  50 65 72 69 6f 64 73 5f  |$...Get_Periods_|
000062a0  41 64 72 0d 24 fe 1e 41  44 52 20 20 20 52 31 32  |Adr.$..ADR   R12|
000062b0  2c 54 72 6b 5f 50 65 72  69 6f 64 73 5f 4c 69 73  |,Trk_Periods_Lis|
000062c0  74 0d 25 08 10 4d 4f 56  20 20 20 50 43 2c 52 31  |t.%..MOV   PC,R1|
000062d0  34 0d 25 12 15 2e 54 72  6b 5f 50 65 72 69 6f 64  |4.%...Trk_Period|
000062e0  73 5f 4c 69 73 74 0d 25  1c 2f 45 51 55 44 20 26  |s_List.%./EQUD &|
000062f0  30 33 35 38 3a 45 51 55  44 20 26 30 33 32 38 3a  |0358:EQUD &0328:|
00006300  45 51 55 44 20 26 30 32  46 41 3a 45 51 55 44 20  |EQUD &02FA:EQUD |
00006310  26 30 32 44 30 0d 25 26  2f 45 51 55 44 20 26 30  |&02D0.%&/EQUD &0|
00006320  32 41 36 3a 45 51 55 44  20 26 30 32 38 30 3a 45  |2A6:EQUD &0280:E|
00006330  51 55 44 20 26 30 32 35  43 3a 45 51 55 44 20 26  |QUD &025C:EQUD &|
00006340  30 32 33 41 0d 25 30 2f  45 51 55 44 20 26 30 32  |023A.%0/EQUD &02|
00006350  31 41 3a 45 51 55 44 20  26 30 31 46 43 3a 45 51  |1A:EQUD &01FC:EQ|
00006360  55 44 20 26 30 31 45 30  3a 45 51 55 44 20 26 30  |UD &01E0:EQUD &0|
00006370  31 43 35 0d 25 3a 2f 45  51 55 44 20 26 30 31 41  |1C5.%:/EQUD &01A|
00006380  43 3a 45 51 55 44 20 26  30 31 39 34 3a 45 51 55  |C:EQUD &0194:EQU|
00006390  44 20 26 30 31 37 44 3a  45 51 55 44 20 26 30 31  |D &017D:EQUD &01|
000063a0  36 38 0d 25 44 2f 45 51  55 44 20 26 30 31 35 33  |68.%D/EQUD &0153|
000063b0  3a 45 51 55 44 20 26 30  31 34 30 3a 45 51 55 44  |:EQUD &0140:EQUD|
000063c0  20 26 30 31 32 45 3a 45  51 55 44 20 26 30 31 31  | &012E:EQUD &011|
000063d0  44 0d 25 4e 2f 45 51 55  44 20 26 30 31 30 44 3a  |D.%N/EQUD &010D:|
000063e0  45 51 55 44 20 26 30 30  46 45 3a 45 51 55 44 20  |EQUD &00FE:EQUD |
000063f0  26 30 30 46 30 3a 45 51  55 44 20 26 30 30 45 32  |&00F0:EQUD &00E2|
00006400  0d 25 58 2f 45 51 55 44  20 26 30 30 44 36 3a 45  |.%X/EQUD &00D6:E|
00006410  51 55 44 20 26 30 30 43  41 3a 45 51 55 44 20 26  |QUD &00CA:EQUD &|
00006420  30 30 42 45 3a 45 51 55  44 20 26 30 30 42 34 0d  |00BE:EQUD &00B4.|
00006430  25 62 2f 45 51 55 44 20  26 30 30 41 41 3a 45 51  |%b/EQUD &00AA:EQ|
00006440  55 44 20 26 30 30 41 30  3a 45 51 55 44 20 26 30  |UD &00A0:EQUD &0|
00006450  30 39 37 3a 45 51 55 44  20 26 30 30 38 46 0d 25  |097:EQUD &008F.%|
00006460  6c 2f 45 51 55 44 20 26  30 30 38 37 3a 45 51 55  |l/EQUD &0087:EQU|
00006470  44 20 26 30 30 37 46 3a  45 51 55 44 20 26 30 30  |D &007F:EQUD &00|
00006480  37 38 3a 45 51 55 44 20  26 30 30 37 31 0d 25 76  |78:EQUD &0071.%v|
00006490  04 0d 25 80 3a 3b 20 2a  2d 2d 2d 2d 2d 2d 2d 2d  |..%.:; *--------|
000064a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000064c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2a 0d 25 8a 3a 3b  |----------*.%.:;|
000064d0  20 2a 20 20 20 20 4c 6f  63 61 74 65 20 61 20 54  | *    Locate a T|
000064e0  46 46 20 28 54 72 61 63  6b 65 72 20 46 69 6c 65  |FF (Tracker File|
000064f0  20 46 6f 72 6d 61 74 20  21 29 20 43 68 75 6e 6b  | Format !) Chunk|
00006500  20 20 20 20 2a 0d 25 94  3a 3b 20 2a 2d 2d 2d 2d  |    *.%.:; *----|
00006510  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00006530  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2a 0d  |--------------*.|
00006540  25 9e 3a 3b 20 2a 20 20  45 6e 74 72 79 20 70 61  |%.:; *  Entry pa|
00006550  72 61 6d 65 74 65 72 73  20 3d 20 20 20 20 20 20  |rameters =      |
00006560  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006570  20 20 20 20 20 20 20 20  2a 0d 25 a8 3a 3b 20 2a  |        *.%.:; *|
00006580  20 20 52 30 20 3d 3e 20  50 72 65 76 69 6f 75 73  |  R0 => Previous|
00006590  20 43 68 75 6e 6b 20 6f  72 20 42 61 73 65 20 41  | Chunk or Base A|
000065a0  64 64 72 65 73 73 20 20  20 20 20 20 20 20 20 20  |ddress          |
000065b0  20 20 2a 0d 25 b2 3a 3b  20 2a 20 20 52 34 20 3d  |  *.%.:; *  R4 =|
000065c0  20 20 43 68 75 6e 63 6b  20 6e 61 6d 65 20 20 20  |  Chunck name   |
000065d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000065e0  20 20 20 20 20 20 20 20  20 20 20 20 2a 0d 25 bc  |            *.%.|
000065f0  3a 3b 20 2a 20 20 52 39  20 3d 3e 20 45 6e 66 20  |:; *  R9 => Enf |
00006600  6f 66 20 46 69 6c 65 20  41 64 64 72 65 73 73 20  |of File Address |
00006610  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006620  20 20 20 20 20 20 2a 0d  25 c6 3a 3b 20 2a 2d 2d  |      *.%.:; *--|
00006630  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00006660  2a 0d 25 d0 04 0d 25 da  0f 2e 53 65 61 72 63 68  |*.%...%...Search|
00006670  5f 54 46 46 0d 25 e4 15  4c 44 4d 49 41 20 52 30  |_TFF.%..LDMIA R0|
00006680  21 2c 7b 52 32 2d 52 33  7d 0d 25 ee 0f 43 4d 50  |!,{R2-R3}.%..CMP|
00006690  20 20 20 52 32 2c 52 34  0d 25 f8 12 41 44 44 4e  |   R2,R4.%..ADDN|
000066a0  45 20 52 30 2c 52 30 2c  52 33 0d 26 02 0d ec 51  |E R0,R0,R3.&...Q|
000066b0  20 50 43 2c 52 31 34 0d  26 0c 2b 43 4d 50 20 20  | PC,R14.&.+CMP  |
000066c0  20 52 30 2c 52 39 20 20  20 20 20 20 20 20 20 20  | R0,R9          |
000066d0  20 20 20 3b 20 45 6e 64  20 4f 66 20 46 69 6c 65  |   ; End Of File|
000066e0  20 3f 0d 26 16 3e 4d 4f  56 47 45 20 50 43 2c 52  | ?.&.>MOVGE PC,R|
000066f0  31 34 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |14            ; |
00006700  53 68 6f 75 6c 64 20 64  69 73 70 6c 61 79 20 61  |Should display a|
00006710  6e 20 65 72 72 6f 72 20  68 65 72 65 20 28 21 29  |n error here (!)|
00006720  0d 26 20 14 42 20 20 20  20 20 53 65 61 72 63 68  |.& .B     Search|
00006730  5f 54 46 46 0d 26 2a 17  2e 47 65 74 5f 50 61 74  |_TFF.&*..Get_Pat|
00006740  74 65 72 6e 73 5f 54 61  62 6c 65 0d 26 34 1c 41  |terns_Table.&4.A|
00006750  44 52 20 20 20 52 31 31  2c 50 61 74 74 65 72 6e  |DR   R11,Pattern|
00006760  73 5f 54 61 62 6c 65 0d  26 3e 10 4d 4f 56 20 20  |s_Table.&>.MOV  |
00006770  20 50 43 2c 52 31 34 0d  26 48 04 0d 26 52 13 2e  | PC,R14.&H..&R..|
00006780  50 61 74 74 65 72 6e 73  5f 54 61 62 6c 65 0d 26  |Patterns_Table.&|
00006790  5c 18 5d 3a 50 25 2b 3d  32 35 36 3a 5b 4f 50 54  |\.]:P%+=256:[OPT|
000067a0  20 50 61 73 73 25 0d 26  66 04 0d 26 70 46 3b 20  | Pass%.&f..&pF; |
000067b0  2a 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |*---------------|
000067c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000067e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2a  |---------------*|
000067f0  0d 26 7a 46 3b 20 2a 20  20 46 69 6c 6c 20 73 6f  |.&zF; *  Fill so|
00006800  75 6e 64 20 62 75 66 66  65 72 20 77 69 74 68 6f  |und buffer witho|
00006810  75 74 20 6c 6f 6f 70 20  28 4e 6f 74 20 62 65 61  |ut loop (Not bea|
00006820  75 74 69 66 75 6c 6c 20  62 75 74 20 66 61 73 74  |utifull but fast|
00006830  65 72 29 20 20 2a 0d 26  84 46 3b 20 2a 2d 2d 2d  |er)  *.&.F; *---|
00006840  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00006870  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2a 0d 26 8e 04  |-----------*.&..|
00006880  0d 26 98 0e 2e 46 75 6c  6c 5f 46 69 6c 6c 0d 26  |.&...Full_Fill.&|
00006890  a2 05 5d 0d 26 ac 15 e3  20 46 69 6c 6c 53 42 25  |..].&... FillSB%|
000068a0  3d 31 20 b8 20 32 30 38  0d 26 b6 0e 5b 4f 50 54  |=1 . 208.&..[OPT|
000068b0  20 50 61 73 73 25 0d 26  c0 1b 4c 44 52 42 20 20  | Pass%.&..LDRB  |
000068c0  52 38 2c 5b 52 34 2c 52  30 2c 4c 53 52 23 31 36  |R8,[R4,R0,LSR#16|
000068d0  5d 0d 26 ca 12 53 55 42  53 20 20 52 38 2c 52 38  |].&..SUBS  R8,R8|
000068e0  2c 52 35 0d 26 d4 0f 4d  4f 56 4d 49 20 52 38 2c  |,R5.&..MOVMI R8,|
000068f0  23 30 0d 26 de 16 53 54  52 42 20 20 52 38 2c 5b  |#0.&..STRB  R8,[|
00006900  52 31 32 5d 2c 52 31 31  0d 26 e8 12 41 44 44 20  |R12],R11.&..ADD |
00006910  20 20 52 30 2c 52 30 2c  52 31 0d 26 f2 05 5d 0d  |  R0,R0,R1.&..].|
00006920  26 fc 05 ed 0d 27 06 0e  5b 4f 50 54 20 50 61 73  |&....'..[OPT Pas|
00006930  73 25 0d 27 10 04 0d 27  1a 4a 4c 44 52 42 20 20  |s%.'...'.JLDRB  |
00006940  20 52 34 2c 5b 52 32 2c  52 37 5d 20 20 20 20 20  | R4,[R2,R7]     |
00006950  20 20 20 20 20 20 20 3b  20 48 75 67 6f 20 68 61  |       ; Hugo ha|
00006960  73 20 66 6f 75 6e 64 20  74 68 69 73 20 73 79 73  |s found this sys|
00006970  74 65 6d 20 6e 6f 74 20  74 6f 20 6c 6f 6f 73 65  |tem not to loose|
00006980  0d 27 24 34 43 4d 50 20  20 20 20 52 34 2c 23 30  |.'$4CMP    R4,#0|
00006990  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000069a0  20 3b 20 61 6e 79 20 6e  6f 74 65 2f 76 6f 69 63  | ; any note/voic|
000069b0  65 2e 2e 2e 0d 27 2e 12  53 54 52 45 51 20 20 52  |e....'..STREQ  R|
000069c0  30 2c 5b 52 39 5d 0d 27  38 10 4d 4f 56 4e 45 20  |0,[R9].'8.MOVNE |
000069d0  20 52 34 2c 23 30 0d 27  42 15 53 54 52 4e 45 42  | R4,#0.'B.STRNEB|
000069e0  20 52 34 2c 5b 52 32 2c  52 37 5d 0d 27 4c 04 0d  | R4,[R2,R7].'L..|
000069f0  27 56 17 4d 4f 56 20 20  20 52 30 2c 23 25 30 30  |'V.MOV   R0,#%00|
00006a00  30 30 31 30 30 30 0d 27  60 13 4c 44 4d 46 44 20  |001000.'`.LDMFD |
00006a10  52 31 33 21 2c 7b 50 43  7d 0d 27 6a 04 0d 27 74  |R13!,{PC}.'j..'t|
00006a20  18 2e 47 65 74 5f 46 72  65 71 75 65 6e 63 65 5f  |..Get_Frequence_|
00006a30  54 61 62 6c 65 0d 27 7e  43 41 44 52 20 20 20 52  |Table.'~CADR   R|
00006a40  38 2c 46 72 65 71 75 65  6e 63 65 5f 54 61 62 6c  |8,Frequence_Tabl|
00006a50  65 31 20 20 20 20 3b 20  3d 3e 20 46 72 65 71 20  |e1    ; => Freq |
00006a60  54 61 62 6c 65 20 46 6f  72 20 31 20 26 20 32 20  |Table For 1 & 2 |
00006a70  43 68 61 6e 6e 65 6c 73  0d 27 88 10 43 4d 50 20  |Channels.'..CMP |
00006a80  20 20 52 31 31 2c 23 33  0d 27 92 43 41 44 44 47  |  R11,#3.'.CADDG|
00006a90  45 20 52 38 2c 52 38 2c  23 34 30 39 36 20 20 20  |E R8,R8,#4096   |
00006aa0  20 20 20 20 20 20 20 20  20 3b 20 3d 3e 20 46 72  |         ; => Fr|
00006ab0  65 71 20 54 61 62 6c 65  20 46 6f 72 20 33 20 26  |eq Table For 3 &|
00006ac0  20 34 20 43 68 61 6e 6e  65 6c 73 0d 27 9c 10 43  | 4 Channels.'..C|
00006ad0  4d 50 20 20 20 52 31 31  2c 23 35 0d 27 a6 43 41  |MP   R11,#5.'.CA|
00006ae0  44 44 47 45 20 52 38 2c  52 38 2c 23 34 30 39 36  |DDGE R8,R8,#4096|
00006af0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 3d 3e  |            ; =>|
00006b00  20 46 72 65 71 20 54 61  62 6c 65 20 46 6f 72 20  | Freq Table For |
00006b10  35 20 2d 20 38 20 43 68  61 6e 6e 65 6c 73 0d 27  |5 - 8 Channels.'|
00006b20  b0 10 4d 4f 56 20 20 20  50 43 2c 52 31 34 0d 27  |..MOV   PC,R14.'|
00006b30  ba 04 0d 27 c4 15 2e 46  72 65 71 75 65 6e 63 65  |...'...Frequence|
00006b40  5f 54 61 62 6c 65 31 0d  27 ce 19 5d 3a 50 25 2b  |_Table1.'..]:P%+|
00006b50  3d 34 30 39 36 3a 5b 4f  50 54 20 50 61 73 73 25  |=4096:[OPT Pass%|
00006b60  0d 27 d8 15 2e 46 72 65  71 75 65 6e 63 65 5f 54  |.'...Frequence_T|
00006b70  61 62 6c 65 32 0d 27 e2  19 5d 3a 50 25 2b 3d 34  |able2.'..]:P%+=4|
00006b80  30 39 36 3a 5b 4f 50 54  20 50 61 73 73 25 0d 27  |096:[OPT Pass%.'|
00006b90  ec 15 2e 46 72 65 71 75  65 6e 63 65 5f 54 61 62  |...Frequence_Tab|
00006ba0  6c 65 33 0d 27 f6 19 5d  3a 50 25 2b 3d 34 30 39  |le3.'..]:P%+=409|
00006bb0  36 3a 5b 4f 50 54 20 50  61 73 73 25 0d 28 00 0f  |6:[OPT Pass%.(..|
00006bc0  2e 4d 6f 64 75 6c 65 5f  45 6e 64 0d 28 0a 05 5d  |.Module_End.(..]|
00006bd0  0d 28 14 05 ed 0d 28 1e  04 0d 28 28 17 e3 20 50  |.(....(...((.. P|
00006be0  65 72 69 6f 64 73 25 3d  31 20 b8 20 31 30 32 30  |eriods%=1 . 1020|
00006bf0  0d 28 32 49 46 72 65 71  75 65 6e 63 65 5f 54 61  |.(2IFrequence_Ta|
00006c00  62 6c 65 31 21 28 50 65  72 69 6f 64 73 25 2a 34  |ble1!(Periods%*4|
00006c10  29 3d 28 28 33 35 37 35  38 37 32 2f 50 65 72 69  |)=((3575872/Peri|
00006c20  6f 64 73 25 29 2f 28 31  30 30 30 30 30 30 2f 33  |ods%)/(1000000/3|
00006c30  37 29 29 2a 36 30 30 30  30 0d 28 3c 05 ed 0d 28  |7))*60000.(<...(|
00006c40  46 17 e3 20 50 65 72 69  6f 64 73 25 3d 31 20 b8  |F.. Periods%=1 .|
00006c50  20 31 30 32 30 0d 28 50  49 46 72 65 71 75 65 6e  | 1020.(PIFrequen|
00006c60  63 65 5f 54 61 62 6c 65  32 21 28 50 65 72 69 6f  |ce_Table2!(Perio|
00006c70  64 73 25 2a 34 29 3d 28  28 33 35 37 35 38 37 32  |ds%*4)=((3575872|
00006c80  2f 50 65 72 69 6f 64 73  25 29 2f 28 31 30 30 30  |/Periods%)/(1000|
00006c90  30 30 30 2f 33 34 29 29  2a 36 30 30 30 30 0d 28  |000/34))*60000.(|
00006ca0  5a 05 ed 0d 28 64 17 e3  20 50 65 72 69 6f 64 73  |Z...(d.. Periods|
00006cb0  25 3d 31 20 b8 20 31 30  32 30 0d 28 6e 49 46 72  |%=1 . 1020.(nIFr|
00006cc0  65 71 75 65 6e 63 65 5f  54 61 62 6c 65 33 21 28  |equence_Table3!(|
00006cd0  50 65 72 69 6f 64 73 25  2a 34 29 3d 28 28 33 35  |Periods%*4)=((35|
00006ce0  37 35 38 37 32 2f 50 65  72 69 6f 64 73 25 29 2f  |75872/Periods%)/|
00006cf0  28 31 30 30 30 30 30 30  2f 32 36 29 29 2a 36 30  |(1000000/26))*60|
00006d00  30 30 30 0d 28 78 05 ed  0d 28 82 04 0d 28 8c 33  |000.(x...(...(.3|
00006d10  ff 28 22 53 41 56 45 20  25 2e 50 6c 61 79 65 72  |.("SAVE %.Player|
00006d20  5f 4d 6f 64 20 22 2b c3  7e 63 6f 64 65 2b 22 20  |_Mod "+.~code+" |
00006d30  22 2b c3 7e 4d 6f 64 75  6c 65 5f 45 6e 64 29 0d  |"+.~Module_End).|
00006d40  28 96 20 2a 53 45 54 54  59 50 45 20 25 2e 50 6c  |(. *SETTYPE %.Pl|
00006d50  61 79 65 72 5f 4d 6f 64  20 4d 4f 44 55 4c 45 0d  |ayer_Mod MODULE.|
00006d60  ff                                                |.|
00006d61