680 lines
26 KiB
Plaintext
680 lines
26 KiB
Plaintext
001 0000 device zxspectrum128
|
||
002 0000
|
||
003 0000 org #6000
|
||
004 6000 begin
|
||
005 6000 include "test.asm"
|
||
001+ 6000 F3 di
|
||
002+ 6001 CD 00 C0 call init
|
||
003+ 6004 FD 21 3A 5C ld iy,#5c3a
|
||
004+ 6008 21 58 27 ld hl,10072
|
||
005+ 600B D9 exx
|
||
006+ 600C FB ei
|
||
007+ 600D 76 .loop halt
|
||
008+ 600E 01 01 00 ld bc,1
|
||
009+ 6011 21 F4 01 ld hl,500
|
||
010+ 6014 .delay
|
||
011+ 6014 ED 42 sbc hl,bc
|
||
012+ 6016 20 FC jr nz,.delay
|
||
013+ 6018 3E 04 ld a,4
|
||
014+ 601A D3 FE out (-2),a
|
||
015+ 601C CD 05 C0 call play
|
||
016+ 601F AF xor a
|
||
017+ 6020 D3 FE out (-2),a
|
||
018+ 6022 3E 7F ld a,#7f
|
||
019+ 6024 DB FE in a,(-2)
|
||
020+ 6026 1F rra
|
||
021+ 6027 38 E4 jr c,.loop
|
||
022+ 6029 CD 08 C0 CALL mute
|
||
023+ 602C 3E 02 .fail ld a,2
|
||
024+ 602E D3 FE out (-2),a
|
||
025+ 6030 F3 di
|
||
026+ 6031 76 halt
|
||
027+ 6032
|
||
028+ 6032 define MTC_CYBERMOTION "CyberMotion.mtc"
|
||
029+ 6032 define MTC_DRUMTEST "drumtest.mtc"
|
||
030+ 6032 define MTC_MUG "mug.mtc"
|
||
031+ 6032 define MTC_MYSTICAL "mystical.mtc"
|
||
032+ 6032 define MTC_NEWOLD "newold.mtc"
|
||
033+ 6032 define MTC_SNEGURKA "Snegurka.mtc"
|
||
034+ 6032 define MTC_INDEEDREST "ineedrest.mtc"
|
||
035+ 6032
|
||
036+ 6032 define TFC_CYBERMOTION MTC_CYBERMOTION,0x76
|
||
037+ 6032 define TFC_DRUMTEST MTC_DRUMTEST,0xa90
|
||
038+ 6032 define TFC_MUG MTC_MUG,0x52
|
||
039+ 6032 define TFC_MYSTICAL MTC_MYSTICAL,0xcd4
|
||
040+ 6032 define TFC_NEWOLD MTC_NEWOLD,0x263a
|
||
041+ 6032 define TFC_SNEGURKA MTC_SNEGURKA,0x52
|
||
042+ 6032
|
||
043+ 6032 define PT3_DRUMTEST MTC_DRUMTEST,0x52
|
||
044+ 6032 define PT3_MYSTICAL MTC_MYSTICAL,0x52
|
||
045+ 6032 define PT3_NEWOLD MTC_NEWOLD,0x52
|
||
046+ 6032 define PT3_SNEGURKA MTC_SNEGURKA,0xaa4
|
||
047+ 6032
|
||
048+ 6032 define TS_INEEDREST "ineedrest.mtc",0x52
|
||
049+ 6032
|
||
050+ 6032 define PT2_PITON "PITON.pt2"
|
||
051+ 6032
|
||
006 6032
|
||
007 6032 org #c000
|
||
008 C000 player
|
||
009 C000 init=player
|
||
010 C000 play=player+5
|
||
011 C000 mute=player+8
|
||
012 C000 include "tfc.asm"
|
||
001+ C000 ifndef _tfc_asm_defined
|
||
002+ C000 define _tfc_asm_defined
|
||
003+ C000
|
||
004+ C000 module TFC
|
||
005+ C000
|
||
006+ C000 ; Original version by (C) Alone Coder
|
||
007+ C000 ; SjasmPlus adaptation, code cleanup and size optimization by (C) Vitamin/CAIG
|
||
008+ C000
|
||
009+ C000 ; Warning: no 60Hz modules support!
|
||
010+ C000
|
||
011+ C000 ;TODO begin&end ⮫쪮 ¢ ®¤®¬ ª «¥
|
||
012+ C000 newtfm=1 ;0=revision A, 1=revision C
|
||
013+ C000
|
||
014+ C000 if newtfm == 1
|
||
015+ C000 statuschip0=%11111000
|
||
016+ C000 statuschip1=%11111001
|
||
017+ C000 else
|
||
018+ C000~ if newtfm == 2 ;US031DX
|
||
019+ C000~ statuschip0=%11111110
|
||
020+ C000~ statuschip1=%11111111
|
||
021+ C000~ else ;newtfm=0
|
||
022+ C000~ statuschip0=%11111100
|
||
023+ C000~ statuschip1=%11111101
|
||
024+ C000~ endif
|
||
025+ C000 endif
|
||
026+ C000
|
||
027+ C000 struct Header
|
||
028+ C000~ signature
|
||
029+ C000~ ds 6
|
||
030+ C000~ version ds 3
|
||
031+ C000~ intfreq db 0
|
||
032+ C000~ tfmptrs ds 12
|
||
033+ C000~ ssgptrs ds 12
|
||
034+ C000 ends
|
||
035+ C000
|
||
036+ C000 struct TFMData
|
||
037+ C000~ addr dw 0
|
||
038+ C000~ skip db 0
|
||
039+ C000~ blkcnt db 0
|
||
040+ C000~ blkretaddr
|
||
041+ C000~ db 0
|
||
042+ C000~ loopaddr
|
||
043+ C000~ db 0
|
||
044+ C000~ tfmlow db 0
|
||
045+ C000~ tfmhigh db 0
|
||
046+ C000 ends
|
||
047+ C000
|
||
048+ C000 macro WaitStatus
|
||
049+ C000~ if newtfm != 2
|
||
050+ C000~ inf
|
||
051+ C000~ jp m,$-2
|
||
052+ C000~ endif
|
||
053+ C000 endm
|
||
054+ C000
|
||
055+ C000 macro FM.OutReg Reg
|
||
056+ C000~ WaitStatus
|
||
057+ C000~ out (c),Reg
|
||
058+ C000 endm
|
||
059+ C000
|
||
060+ C000 macro FM.SelectReg Reg
|
||
061+ C000~ ld b,d
|
||
062+ C000~ FM.OutReg Reg
|
||
063+ C000 endm
|
||
064+ C000
|
||
065+ C000 macro FM.WriteReg Reg
|
||
066+ C000~ ld b,e
|
||
067+ C000~ FM.OutReg Reg
|
||
068+ C000 endm
|
||
069+ C000
|
||
070+ C000 Start
|
||
071+ C000 21 50 C2 ld hl,End
|
||
072+ C003 18 06 jr Init
|
||
073+ C005 C3 BE C0 jp Play
|
||
074+ C008 C3 47 C0 jp Mute
|
||
075+ C00B
|
||
076+ C00B ifdef HaveFormatCheck
|
||
077+ C00B~ include "format.asm"
|
||
078+ C00B~
|
||
079+ C00B~ ;in HL - module addr
|
||
080+ C00B~ ;out Z - is tfc
|
||
081+ C00B~ ;out C - 60 Hz (valid only if Z)
|
||
082+ C00B~ CheckFormat
|
||
083+ C00B~ EqualTo "T"
|
||
084+ C00B~ EqualTo "F"
|
||
085+ C00B~ EqualTo "M"
|
||
086+ C00B~ EqualTo "c"
|
||
087+ C00B~ EqualTo "o"
|
||
088+ C00B~ EqualTo "m"
|
||
089+ C00B~ AnyBytes 3
|
||
090+ C00B~ ld a,(hl)
|
||
091+ C00B~ cp 50
|
||
092+ C00B~ ret z
|
||
093+ C00B~ cp 60
|
||
094+ C00B~ ccf
|
||
095+ C00B~ ret
|
||
096+ C00B~
|
||
097+ C00B~ display "TFC checker size: ",$-CheckFormat
|
||
098+ C00B endif
|
||
099+ C00B
|
||
100+ C00B ;HL - module addr
|
||
101+ C00B Init
|
||
102+ C00B EB exd
|
||
103+ C00C 21 0A 00 ld hl,Header.tfmptrs
|
||
104+ C00F 19 add hl,de
|
||
105+ C010 D9 exx
|
||
106+ C011
|
||
107+ C011 21 18 C2 ld hl,TFM.Init
|
||
108+ C014 11 20 C2 ld de,TFM.A
|
||
109+ C017 01 30 00 ld bc,6*TFMData
|
||
110+ C01A ED B0 ldir
|
||
111+ C01C
|
||
112+ C01C 21 3B C0 ld hl,.tfminitab
|
||
113+ C01F 01 FD 06 ld bc,128*(.tfminitab_end-.tfminitab)+#fd
|
||
114+ C022 .tfmini0
|
||
115+ C022 11 31 C0 ld de,.tfminiHL
|
||
116+ C025 ED A0 ldi
|
||
117+ C027 ED A0 ldi
|
||
118+ C029 D9 exx
|
||
119+ C02A 7E ld a,(hl)
|
||
120+ C02B 23 inc hl
|
||
121+ C02C E5 push hl
|
||
122+ C02D 66 ld h,(hl)
|
||
123+ C02E 6F ld l,a
|
||
124+ C02F 19 add hl,de
|
||
125+ C030 .tfminiHL=$+1
|
||
126+ C030 22 00 00 ld (0),hl
|
||
127+ C033 E1 pop hl
|
||
128+ C034 23 inc hl
|
||
129+ C035 D9 exx
|
||
130+ C036 10 EA djnz .tfmini0
|
||
131+ C038
|
||
132+ C038 C3 47 C0 jp Mute
|
||
133+ C03B
|
||
134+ C03B .tfminitab
|
||
135+ C03B 20 C2 DW TFM.A.addr
|
||
136+ C03D 28 C2 DW TFM.B.addr
|
||
137+ C03F 30 C2 DW TFM.C.addr
|
||
138+ C041 38 C2 DW TFM.D.addr
|
||
139+ C043 40 C2 DW TFM.E.addr
|
||
140+ C045 48 C2 DW TFM.F.addr
|
||
141+ C047 .tfminitab_end
|
||
142+ C047
|
||
143+ C047 Mute
|
||
144+ C047 11 BF FF ld de,#ffbf
|
||
145+ C04A 0E FD ld c,#fd
|
||
146+ C04C CD B6 C0 call selChip0
|
||
147+ C04F CD 55 C0 call .tfminiPP
|
||
148+ C052 CD BA C0 call selChip1
|
||
149+ C055 .tfminiPP
|
||
150+ C055 ; 0 -> (00..0D)
|
||
151+ C055 21 00 00 ld hl,#0000
|
||
152+ C058 3E 0E ld a,#0e
|
||
153+ C05A CD 9D C0 call .writeregsset
|
||
154+ C05D
|
||
155+ C05D ; 0 -> (30..3F)
|
||
156+ C05D 26 30 ld h,#30
|
||
157+ C05F 3E 40 ld a,#40
|
||
158+ C061 CD 9D C0 call .writeregsset
|
||
159+ C064
|
||
160+ C064 ; 0 -> (50..B4)
|
||
161+ C064 26 50 ld h,#50
|
||
162+ C066 3E B5 ld a,#b5
|
||
163+ C068 CD 9D C0 call .writeregsset
|
||
164+ C06B
|
||
165+ C06B ; 0F -> (80..8F) ;max speed to RR
|
||
166+ C06B 21 0F 80 ld hl,#800f
|
||
167+ C06E 3E 90 ld a,#90
|
||
168+ C070 CD 9D C0 call .writeregsset
|
||
169+ C073
|
||
170+ C073 ; 0..2 -> 28, key off
|
||
171+ C073 ; 2 -> 27 channel 3 mode
|
||
172+ C073 21 00 28 ld hl,#2800
|
||
173+ C076 CD A5 C0 call .writereg
|
||
174+ C079 2C inc l
|
||
175+ C07A CD A5 C0 call .writereg
|
||
176+ C07D 2C inc l
|
||
177+ C07E CD A5 C0 call .writereg
|
||
178+ C081 25 dec h
|
||
179+ C082 CD A5 C0 call .writereg
|
||
180+ C085
|
||
181+ C085 ; 7F -> (40..4F,2F,2D)
|
||
182+ C085 21 7F 40 ld hl,#407f
|
||
183+ C088 3E 50 ld a,#50
|
||
184+ C08A CD 9D C0 call .writeregsset
|
||
185+ C08D
|
||
186+ C08D 26 2F ld h,#2f
|
||
187+ C08F CD A5 C0 call .writereg
|
||
188+ C092
|
||
189+ C092 26 2D ld h,#2d
|
||
190+ C094 CD A5 C0 call .writereg
|
||
191+ C097
|
||
192+ C097 3E FF ld a,#ff ;¢ëª«. FM
|
||
193+ C099 .selRegA
|
||
194+ C099 42 ld b,d
|
||
195+ C09A ED 79 out (c),a
|
||
196+ C09C C9 ret
|
||
197+ C09D
|
||
198+ C09D ;H=REG start
|
||
199+ C09D ;L=VALUE
|
||
200+ C09D ;A=REG end (not inclusive)
|
||
201+ C09D .writeregsset
|
||
202+ C09D CD A5 C0 call .writereg
|
||
203+ C0A0 24 inc h
|
||
204+ C0A1 BC cp h
|
||
205+ C0A2 20 F9 jr nz,.writeregsset
|
||
206+ C0A4 C9 ret
|
||
207+ C0A5 ;H=REG
|
||
208+ C0A5 ;L=VALUE
|
||
209+ C0A5 .writereg
|
||
210+ C0A5 FM.SelectReg h
|
||
210+ C0A5 42 > ld b,d
|
||
210+ C0A6 ED 70 > inf
|
||
210+ C0A8 FA A6 C0 > jp m,$-2
|
||
210+ C0AB ED 61 > out (c),Reg
|
||
211+ C0AD FM.WriteReg l
|
||
211+ C0AD 43 > ld b,e
|
||
211+ C0AE ED 70 > inf
|
||
211+ C0B0 FA AE C0 > jp m,$-2
|
||
211+ C0B3 ED 69 > out (c),Reg
|
||
212+ C0B5 C9 ret
|
||
213+ C0B6
|
||
214+ C0B6 selChip0
|
||
215+ C0B6 3E F8 ld a,statuschip0
|
||
216+ C0B8 18 DF jr Mute.selRegA
|
||
217+ C0BA
|
||
218+ C0BA selChip1
|
||
219+ C0BA 3E F9 ld a,statuschip1
|
||
220+ C0BC 18 DB jr Mute.selRegA
|
||
221+ C0BE
|
||
222+ C0BE Play
|
||
223+ C0BE 11 BF FF ld de,#FFBF
|
||
224+ C0C1 0E FD ld c,#FD
|
||
225+ C0C3
|
||
226+ C0C3 CD B6 C0 call selChip0
|
||
227+ C0C6
|
||
228+ C0C6 AF xor a
|
||
229+ C0C7 08 exa
|
||
230+ C0C8 DD 21 20 C2 ld ix,TFM.A
|
||
231+ C0CC CD 03 C1 call PlayChannel
|
||
232+ C0CF 3E 01 ld a,1
|
||
233+ C0D1 08 exa
|
||
234+ C0D2 DD 21 28 C2 ld ix,TFM.B
|
||
235+ C0D6 CD 03 C1 call PlayChannel
|
||
236+ C0D9 3E 02 ld a,2
|
||
237+ C0DB 08 exa
|
||
238+ C0DC DD 21 30 C2 ld ix,TFM.C
|
||
239+ C0E0 CD 03 C1 call PlayChannel
|
||
240+ C0E3
|
||
241+ C0E3 CD BA C0 call selChip1
|
||
242+ C0E6
|
||
243+ C0E6 AF xor a
|
||
244+ C0E7 08 exa
|
||
245+ C0E8 DD 21 38 C2 ld ix,TFM.D
|
||
246+ C0EC CD 03 C1 call PlayChannel
|
||
247+ C0EF 3E 01 ld a,1
|
||
248+ C0F1 08 exa
|
||
249+ C0F2 DD 21 40 C2 ld ix,TFM.E
|
||
250+ C0F6 CD 03 C1 call PlayChannel
|
||
251+ C0F9 3E 02 ld a,2
|
||
252+ C0FB 08 exa
|
||
253+ C0FC DD 21 48 C2 ld ix,TFM.F
|
||
254+ C100 C3 03 C1 jp PlayChannel
|
||
255+ C103
|
||
256+ C103 ;%11111111,-disp8 = ¤ ë¥ ª ¤à «¥¦ â ¯® ᬥ饨î -disp8
|
||
257+ C103 ;%111ttttt = skip 32..2 frames
|
||
258+ C103 ;%110ddddd = slide d-16
|
||
259+ C103 ;%11010000,frames,-disp16 = repeat block (skips = 1 frame)
|
||
260+ C103 ;%10111111,-disp16 = ¤ ë¥ ª ¤à «¥¦ â ¯® ᬥ饨î -disp16
|
||
261+ C103 ;%10NNNNNf = keyoff,[freq,]0..30 regs, keyon
|
||
262+ C103 ;%01111111 = end
|
||
263+ C103 ;%01111110 = begin
|
||
264+ C103 ;%01NNNNNf = keyoff,[freq,]0..31 regs
|
||
265+ C103 ;%00NNNNNf = [freq,]0..30 regs
|
||
266+ C103 bb=%01111110
|
||
267+ C103 be=%01111111
|
||
268+ C103 ;IX - data
|
||
269+ C103 ;DE - hi ports #FFBF
|
||
270+ C103 ;C - low port #FD
|
||
271+ C103 ;A' - fm channel
|
||
272+ C103 PlayChannel
|
||
273+ C103 DD 7E 02 ld a,(ix+TFMData.skip)
|
||
274+ C106 3C inc a
|
||
275+ C107 C2 C6 C1 jp nz,.skiper
|
||
276+ C10A DD 7E 03 ld a,(ix+TFMData.blkcnt)
|
||
277+ C10D A7 and a
|
||
278+ C10E 28 1D jr z,.noframe
|
||
279+ C110 DD 35 03 dec (ix+TFMData.blkcnt)
|
||
280+ C113 20 18 jr nz,.noframe
|
||
281+ C115 DD 6E 04 ld l,(ix+TFMData.blkretaddr)
|
||
282+ C118 DD 66 05 ld h,(ix+TFMData.blkretaddr+1)
|
||
283+ C11B 18 16 jr .tfmframe
|
||
284+ C11D .begin
|
||
285+ C11D DD 75 05 ld (ix+TFMData.loopaddr),l
|
||
286+ C120 DD 74 06 ld (ix+TFMData.loopaddr+1),h
|
||
287+ C123 18 0E jr .tfmframe
|
||
288+ C125 .end
|
||
289+ C125 DD 6E 05 ld l,(ix+TFMData.loopaddr)
|
||
290+ C128 DD 66 06 ld h,(ix+TFMData.loopaddr+1)
|
||
291+ C12B 18 06 jr .tfmframe
|
||
292+ C12D .noframe
|
||
293+ C12D DD 6E 00 ld l,(ix+TFMData.addr)
|
||
294+ C130 DD 66 01 ld h,(ix+TFMData.addr+1)
|
||
295+ C133 .tfmframe
|
||
296+ C133 7E ld a,(hl)
|
||
297+ C134 23 inc hl
|
||
298+ C135 FE 7E cp bb
|
||
299+ C137 28 E4 jr z,.begin
|
||
300+ C139 FE 7F cp be
|
||
301+ C13B 28 E8 jr z,.end
|
||
302+ C13D BB cp e ;#BF
|
||
303+ C13E D2 B9 C1 jp NC,.HLskiper
|
||
304+ C141 ;TestKeyOff
|
||
305+ C141 F2 5A C1 jp P,.noffX
|
||
306+ C144 F5 push af
|
||
307+ C145 3E 28 ld a,#28
|
||
308+ C147 FM.SelectReg a
|
||
308+ C147 42 > ld b,d
|
||
308+ C148 ED 70 > inf
|
||
308+ C14A FA 48 C1 > jp m,$-2
|
||
308+ C14D ED 79 > out (c),Reg
|
||
309+ C14F 08 exa
|
||
310+ C150 FM.WriteReg a ;FMChannel
|
||
310+ C150 43 > ld b,e
|
||
310+ C151 ED 70 > inf
|
||
310+ C153 FA 51 C1 > jp m,$-2
|
||
310+ C156 ED 79 > out (c),Reg
|
||
311+ C158 08 exa
|
||
312+ C159 F1 pop af
|
||
313+ C15A .noffX
|
||
314+ C15A B7 OR a
|
||
315+ C15B F5 push af
|
||
316+ C15C ;TestFreq
|
||
317+ C15C 1F RRA
|
||
318+ C15D 30 12 jr NC,.nofrqX
|
||
319+ C15F
|
||
320+ C15F 46 ld b,(hl)
|
||
321+ C160 23 inc hl
|
||
322+ C161 4E ld c,(hl)
|
||
323+ C162 23 inc hl
|
||
324+ C163 DD 70 07 ld (ix+TFMData.tfmhigh),b
|
||
325+ C166 DD 71 06 ld (ix+TFMData.tfmlow),c
|
||
326+ C169 C5 push bc
|
||
327+ C16A E3 ex (sp),hl
|
||
328+ C16B 0E FD ld c,#FD
|
||
329+ C16D CD DB C1 call .outTone
|
||
330+ C170 E1 pop hl
|
||
331+ C171
|
||
332+ C171 .nofrqX
|
||
333+ C171 E6 1F and #1F
|
||
334+ C173 C4 04 C2 call nz,.OutRegs
|
||
335+ C176 CD B2 C1 call .storeaddr
|
||
336+ C179 F1 pop af
|
||
337+ C17A F0 ret P
|
||
338+ C17B ;.KeyOn
|
||
339+ C17B 3E 28 ld a,#28
|
||
340+ C17D FM.SelectReg a
|
||
340+ C17D 42 > ld b,d
|
||
340+ C17E ED 70 > inf
|
||
340+ C180 FA 7E C1 > jp m,$-2
|
||
340+ C183 ED 79 > out (c),Reg
|
||
341+ C185 08 exa
|
||
342+ C186 C6 F0 add a,#F0
|
||
343+ C188 FM.WriteReg a
|
||
343+ C188 43 > ld b,e
|
||
343+ C189 ED 70 > inf
|
||
343+ C18B FA 89 C1 > jp m,$-2
|
||
343+ C18E ED 79 > out (c),Reg
|
||
344+ C190 D6 F0 sub #F0
|
||
345+ C192 08 exa
|
||
346+ C193 C9 ret
|
||
347+ C194
|
||
348+ C194 .block
|
||
349+ C194 7E ld a,(hl) ;N frames
|
||
350+ C195 ;1 now, N-1 later
|
||
351+ C195 ;skip command is used as 1 frame
|
||
352+ C195 23 inc hl
|
||
353+ C196 DD 77 03 ld (ix+TFMData.blkcnt),a
|
||
354+ C199 46 ld b,(hl)
|
||
355+ C19A 23 inc hl
|
||
356+ C19B 4E ld c,(hl) ;disp
|
||
357+ C19C 23 inc hl
|
||
358+ C19D DD 75 04 ld (ix+TFMData.blkretaddr),l
|
||
359+ C1A0 DD 74 05 ld (ix+TFMData.blkretaddr+1),h
|
||
360+ C1A3 .subframe
|
||
361+ C1A3 09 add hl,bc
|
||
362+ C1A4 0E FD ld c,#fd
|
||
363+ C1A6 C3 33 C1 jp .tfmframe
|
||
364+ C1A9
|
||
365+ C1A9 .OLDfar
|
||
366+ C1A9 46 ld b,(hl)
|
||
367+ C1AA 23 inc hl
|
||
368+ C1AB .OLDnear
|
||
369+ C1AB 4E ld c,(hl)
|
||
370+ C1AC 23 inc hl
|
||
371+ C1AD E5 push hl
|
||
372+ C1AE CD A3 C1 call .subframe
|
||
373+ C1B1 E1 pop hl
|
||
374+ C1B2 .storeaddr
|
||
375+ C1B2 DD 75 00 ld (ix+TFMData.addr),l
|
||
376+ C1B5 DD 74 01 ld (ix+TFMData.addr+1),h
|
||
377+ C1B8 C9 ret
|
||
378+ C1B9 .HLskiper
|
||
379+ C1B9 28 EE jr z,.OLDfar
|
||
380+ C1BB FE E0 cp %11100000
|
||
381+ C1BD 38 0B jr c,.slide
|
||
382+ C1BF 47 ld b,a
|
||
383+ C1C0 BA cp d ;#FF
|
||
384+ C1C1 28 E8 jr z,.OLDnear
|
||
385+ C1C3 CD B2 C1 call .storeaddr
|
||
386+ C1C6 DD 77 02 .skiper ld (ix+TFMData.skip),a
|
||
387+ C1C9 C9 ret
|
||
388+ C1CA .slide
|
||
389+ C1CA ;a=-64..-33
|
||
390+ C1CA C6 30 add a,48
|
||
391+ C1CC ;a=-16..15
|
||
392+ C1CC 28 C6 jr z,.block
|
||
393+ C1CE DD 86 06 add a,(ix+TFMData.tfmlow)
|
||
394+ C1D1 DD 77 06 ld (ix+TFMData.tfmlow),a
|
||
395+ C1D4 CD B2 C1 call .storeaddr
|
||
396+ C1D7 DD 66 07 ld h,(ix+TFMData.tfmhigh)
|
||
397+ C1DA 6F ld l,a
|
||
398+ C1DB .outTone
|
||
399+ C1DB 08 exa
|
||
400+ C1DC C6 A4 add a,#a4
|
||
401+ C1DE FM.SelectReg a
|
||
401+ C1DE 42 > ld b,d
|
||
401+ C1DF ED 70 > inf
|
||
401+ C1E1 FA DF C1 > jp m,$-2
|
||
401+ C1E4 ED 79 > out (c),Reg
|
||
402+ C1E6 FM.WriteReg h
|
||
402+ C1E6 43 > ld b,e
|
||
402+ C1E7 ED 70 > inf
|
||
402+ C1E9 FA E7 C1 > jp m,$-2
|
||
402+ C1EC ED 61 > out (c),Reg
|
||
403+ C1EE D6 04 sub #04 ;#A0+channel
|
||
404+ C1F0 FM.SelectReg a
|
||
404+ C1F0 42 > ld b,d
|
||
404+ C1F1 ED 70 > inf
|
||
404+ C1F3 FA F1 C1 > jp m,$-2
|
||
404+ C1F6 ED 79 > out (c),Reg
|
||
405+ C1F8 FM.WriteReg l
|
||
405+ C1F8 43 > ld b,e
|
||
405+ C1F9 ED 70 > inf
|
||
405+ C1FB FA F9 C1 > jp m,$-2
|
||
405+ C1FE ED 69 > out (c),Reg
|
||
406+ C200 D6 A0 sub #a0
|
||
407+ C202 08 exa
|
||
408+ C203 C9 ret
|
||
409+ C204
|
||
410+ C204 42 .OutRegs ld b,d ;%11111xxx
|
||
411+ C205 WaitStatus
|
||
411+ C205 ED 70 > inf
|
||
411+ C207 FA 05 C2 > jp m,$-2
|
||
412+ C20A ED A3 outi ;reg
|
||
413+ C20C WaitStatus
|
||
413+ C20C ED 70 > inf
|
||
413+ C20E FA 0C C2 > jp m,$-2
|
||
414+ C211 43 ld b,e ;#BF
|
||
415+ C212 ED A3 outi ;value
|
||
416+ C214 3D dec a
|
||
417+ C215 20 ED jr nz,.OutRegs ;¢ turbo jr=jp
|
||
418+ C217 C9 ret
|
||
419+ C218
|
||
420+ C218 TFM.Init TFMData 0,-1,0
|
||
420+ C218 0000FF0000000000
|
||
421+ C220 TFM.A TFMData
|
||
421+ C220 0000000000000000
|
||
422+ C228 TFM.B TFMData
|
||
422+ C228 0000000000000000
|
||
423+ C230 TFM.C TFMData
|
||
423+ C230 0000000000000000
|
||
424+ C238 TFM.D TFMData
|
||
424+ C238 0000000000000000
|
||
425+ C240 TFM.E TFMData
|
||
425+ C240 0000000000000000
|
||
426+ C248 TFM.F TFMData
|
||
426+ C248 0000000000000000
|
||
427+ C250
|
||
428+ C250 endmod
|
||
429+ C250 TFC.End
|
||
430+ C250
|
||
431+ C250 display "TFC module size: ",TFC.End-TFC.Start
|
||
432+ C250
|
||
433+ C250 endif
|
||
434+ C250
|
||
013 C250
|
||
014 C250 module
|
||
015 C250 incbin TFC_CYBERMOTION
|
||
016 F79A ;incbin TFC_DRUMTEST
|
||
017 F79A ;incbin TFC_MUG
|
||
018 F79A ;incbin TFC_MYSTICAL
|
||
019 F79A ;incbin TFC_NEWOLD
|
||
020 F79A ;incbin TFC_SNEGURKA
|
||
021 F79A
|
||
022 F79A savesna "test_tfc.sna",begin
|
||
023 F79A savebin "../tfc_c000.bin",player,module-player
|
||
024 F79A
|
||
|
||
Value Label
|
||
------ - -----------------------------------------------------------
|
||
0x6000 begin
|
||
0xC000 init
|
||
0x600D begin.loop
|
||
0x6014 begin.delay
|
||
0xC005 play
|
||
0xC008 mute
|
||
0x602C X begin.fail
|
||
0xC000 player
|
||
0x0001 TFC.newtfm
|
||
0x00F8 TFC.statuschip0
|
||
0x00F9 TFC.statuschip1
|
||
0x0022 X TFC.Header
|
||
0x0000 X TFC.Header.signature
|
||
0x0006 X TFC.Header.version
|
||
0x0009 X TFC.Header.intfreq
|
||
0x000A TFC.Header.tfmptrs
|
||
0x0016 X TFC.Header.ssgptrs
|
||
0x0008 TFC.TFMData
|
||
0x0000 TFC.TFMData.addr
|
||
0x0002 TFC.TFMData.skip
|
||
0x0003 TFC.TFMData.blkcnt
|
||
0x0004 TFC.TFMData.blkretaddr
|
||
0x0005 TFC.TFMData.loopaddr
|
||
0x0006 TFC.TFMData.tfmlow
|
||
0x0007 TFC.TFMData.tfmhigh
|
||
0xC000 TFC.Start
|
||
0xC250 TFC.End
|
||
0xC00B TFC.Init
|
||
0xC0BE TFC.Play
|
||
0xC047 TFC.Mute
|
||
0xC218 TFC.TFM.Init
|
||
0xC220 TFC.TFM.A
|
||
0xC03B TFC.Init.tfminitab
|
||
0xC047 TFC.Init.tfminitab_end
|
||
0xC022 TFC.Init.tfmini0
|
||
0xC031 TFC.Init.tfminiHL
|
||
0xC220 TFC.TFM.A.addr
|
||
0xC228 TFC.TFM.B.addr
|
||
0xC230 TFC.TFM.C.addr
|
||
0xC238 TFC.TFM.D.addr
|
||
0xC240 TFC.TFM.E.addr
|
||
0xC248 TFC.TFM.F.addr
|
||
0xC0B6 TFC.selChip0
|
||
0xC055 TFC.Mute.tfminiPP
|
||
0xC0BA TFC.selChip1
|
||
0xC09D TFC.Mute.writeregsset
|
||
0xC0A5 TFC.Mute.writereg
|
||
0xC099 TFC.Mute.selRegA
|
||
0xC103 TFC.PlayChannel
|
||
0xC228 TFC.TFM.B
|
||
0xC230 TFC.TFM.C
|
||
0xC238 TFC.TFM.D
|
||
0xC240 TFC.TFM.E
|
||
0xC248 TFC.TFM.F
|
||
0x007E TFC.bb
|
||
0x007F TFC.be
|
||
0xC1C6 TFC.PlayChannel.skiper
|
||
0xC12D TFC.PlayChannel.noframe
|
||
0xC133 TFC.PlayChannel.tfmframe
|
||
0xC11D TFC.PlayChannel.begin
|
||
0xC125 TFC.PlayChannel.end
|
||
0xC1B9 TFC.PlayChannel.HLskiper
|
||
0xC15A TFC.PlayChannel.noffX
|
||
0xC171 TFC.PlayChannel.nofrqX
|
||
0xC1DB TFC.PlayChannel.outTone
|
||
0xC204 TFC.PlayChannel.OutRegs
|
||
0xC1B2 TFC.PlayChannel.storeaddr
|
||
0xC194 TFC.PlayChannel.block
|
||
0xC1A3 TFC.PlayChannel.subframe
|
||
0xC1A9 TFC.PlayChannel.OLDfar
|
||
0xC1AB TFC.PlayChannel.OLDnear
|
||
0xC1CA TFC.PlayChannel.slide
|
||
0xC218 X TFC.TFM.Init.addr
|
||
0xC21A X TFC.TFM.Init.skip
|
||
0xC21B X TFC.TFM.Init.blkcnt
|
||
0xC21C X TFC.TFM.Init.blkretaddr
|
||
0xC21D X TFC.TFM.Init.loopaddr
|
||
0xC21E X TFC.TFM.Init.tfmlow
|
||
0xC21F X TFC.TFM.Init.tfmhigh
|
||
0xC222 X TFC.TFM.A.skip
|
||
0xC223 X TFC.TFM.A.blkcnt
|
||
0xC224 X TFC.TFM.A.blkretaddr
|
||
0xC225 X TFC.TFM.A.loopaddr
|
||
0xC226 X TFC.TFM.A.tfmlow
|
||
0xC227 X TFC.TFM.A.tfmhigh
|
||
0xC22A X TFC.TFM.B.skip
|
||
0xC22B X TFC.TFM.B.blkcnt
|
||
0xC22C X TFC.TFM.B.blkretaddr
|
||
0xC22D X TFC.TFM.B.loopaddr
|
||
0xC22E X TFC.TFM.B.tfmlow
|
||
0xC22F X TFC.TFM.B.tfmhigh
|
||
0xC232 X TFC.TFM.C.skip
|
||
0xC233 X TFC.TFM.C.blkcnt
|
||
0xC234 X TFC.TFM.C.blkretaddr
|
||
0xC235 X TFC.TFM.C.loopaddr
|
||
0xC236 X TFC.TFM.C.tfmlow
|
||
0xC237 X TFC.TFM.C.tfmhigh
|
||
0xC23A X TFC.TFM.D.skip
|
||
0xC23B X TFC.TFM.D.blkcnt
|
||
0xC23C X TFC.TFM.D.blkretaddr
|
||
0xC23D X TFC.TFM.D.loopaddr
|
||
0xC23E X TFC.TFM.D.tfmlow
|
||
0xC23F X TFC.TFM.D.tfmhigh
|
||
0xC242 X TFC.TFM.E.skip
|
||
0xC243 X TFC.TFM.E.blkcnt
|
||
0xC244 X TFC.TFM.E.blkretaddr
|
||
0xC245 X TFC.TFM.E.loopaddr
|
||
0xC246 X TFC.TFM.E.tfmlow
|
||
0xC247 X TFC.TFM.E.tfmhigh
|
||
0xC24A X TFC.TFM.F.skip
|
||
0xC24B X TFC.TFM.F.blkcnt
|
||
0xC24C X TFC.TFM.F.blkretaddr
|
||
0xC24D X TFC.TFM.F.loopaddr
|
||
0xC24E X TFC.TFM.F.tfmlow
|
||
0xC24F X TFC.TFM.F.tfmhigh
|
||
0xC250 module
|