0001 0000 device zxspectrum128 0002 0000 0003 0000 org #6000 0004 6000 begin 0005 6000 include "test.asm" 0001+ 6000 F3 di 0002+ 6001 CD 00 80 call init 0003+ 6004 FD 21 3A 5C ld iy,#5c3a 0004+ 6008 21 58 27 ld hl,10072 0005+ 600B D9 exx 0006+ 600C FB ei 0007+ 600D 76 .loop halt 0008+ 600E 01 01 00 ld bc,1 0009+ 6011 21 F4 01 ld hl,500 0010+ 6014 .delay 0011+ 6014 ED 42 sbc hl,bc 0012+ 6016 20 FC jr nz,.delay 0013+ 6018 3E 04 ld a,4 0014+ 601A D3 FE out (-2),a 0015+ 601C CD 05 80 call play 0016+ 601F AF xor a 0017+ 6020 D3 FE out (-2),a 0018+ 6022 3E 7F ld a,#7f 0019+ 6024 DB FE in a,(-2) 0020+ 6026 1F rra 0021+ 6027 38 E4 jr c,.loop 0022+ 6029 CD 08 80 CALL mute 0023+ 602C 3E 02 .fail ld a,2 0024+ 602E D3 FE out (-2),a 0025+ 6030 F3 di 0026+ 6031 76 halt 0027+ 6032 0028+ 6032 define MTC_CYBERMOTION "CyberMotion.mtc" 0029+ 6032 define MTC_DRUMTEST "drumtest.mtc" 0030+ 6032 define MTC_MUG "mug.mtc" 0031+ 6032 define MTC_MYSTICAL "mystical.mtc" 0032+ 6032 define MTC_NEWOLD "newold.mtc" 0033+ 6032 define MTC_SNEGURKA "Snegurka.mtc" 0034+ 6032 define MTC_INDEEDREST "ineedrest.mtc" 0035+ 6032 0036+ 6032 define TFC_CYBERMOTION MTC_CYBERMOTION,0x76 0037+ 6032 define TFC_DRUMTEST MTC_DRUMTEST,0xa90 0038+ 6032 define TFC_MUG MTC_MUG,0x52 0039+ 6032 define TFC_MYSTICAL MTC_MYSTICAL,0xcd4 0040+ 6032 define TFC_NEWOLD MTC_NEWOLD,0x263a 0041+ 6032 define TFC_SNEGURKA MTC_SNEGURKA,0x52 0042+ 6032 0043+ 6032 define PT3_DRUMTEST MTC_DRUMTEST,0x52 0044+ 6032 define PT3_MYSTICAL MTC_MYSTICAL,0x52 0045+ 6032 define PT3_NEWOLD MTC_NEWOLD,0x52 0046+ 6032 define PT3_SNEGURKA MTC_SNEGURKA,0xaa4 0047+ 6032 0048+ 6032 define TS_INEEDREST "ineedrest.mtc",0x52 0049+ 6032 0050+ 6032 define PT2_PITON "PITON.pt2" 0051+ 6032 0006 6032 0007 6032 org #8000 0008 8000 player 0009 8000 init=player 0010 8000 play=player+5 0011 8000 mute=player+8 0012 8000 include "mtc.asm" 0001+ 8000 ifndef _mtc_asm_defined 0002+ 8000 define _mtc_asm_defined 0003+ 8000 0004+ 8000 module MTC 0005+ 8000 0006+ 8000 ;enum-like 0007+ 8000 struct StreamType 0008+ 8000~ PT3 db 0 0009+ 8000~ PT2 db 0 0010+ 8000~ TS db 0 0011+ 8000~ TFC db 0 0012+ 8000~ Unknown db 0 0013+ 8000 ends 0014+ 8000 0015+ 8000 struct StreamData 0016+ 8000~ Type db 0 0017+ 8000~ Data1 dw 0 0018+ 8000~ Data2 dw 0 0019+ 8000~ Init dw 0 0020+ 8000~ Play dw 0 0021+ 8000~ Mute dw 0 0022+ 8000 ends 0023+ 8000 0024+ 8000 Start 0025+ 8000 ifndef NoPrologue 0026+ 8000 21 73 91 ld hl,End 0027+ 8003 18 06 jr Init 0028+ 8005 C3 48 80 jp Play 0029+ 8008 C3 66 80 jp Mute 0030+ 800B endif 0031+ 800B 0032+ 800B ifdef HaveFormatCheck 0033+ 800B~ 0034+ 800B~ include "format.asm" 0035+ 800B~ 0036+ 800B~ ;in HL - module addr 0037+ 800B~ ;out Z - is mtc 0038+ 800B~ CheckFormat 0039+ 800B~ EqualTo "M" 0040+ 800B~ EqualTo "T" 0041+ 800B~ EqualTo "C" 0042+ 800B~ EqualTo "1" 0043+ 800B~ EqualTo 0 0044+ 800B~ EqualTo 0 0045+ 800B~ ret 0046+ 800B~ 0047+ 800B~ display "MTC checker size: ",$-CheckFormat 0048+ 800B~ 0049+ 800B endif 0050+ 800B 0051+ 800B ;in HL - module addr 0052+ 800B DD 21 BD 80 Init ld ix,Streams 0053+ 800F DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown 0054+ 8013 CD 86 80 call ParseChunk 0055+ 8016 FE 00 cp ChunkId.MTC1 0056+ 8018 CC 1C 81 call z,ParseMTC1 0057+ 801B CD E6 81 call MergeStreams 0058+ 801E DD 21 BD 80 ld ix,Streams 0059+ 8022 .initstreams 0060+ 8022 DD 7E 00 ld a,(ix+StreamData.Type) 0061+ 8025 FE 04 cp StreamType.Unknown 0062+ 8027 C8 ret z 0063+ 8028 DD 6E 01 ld l,(ix+StreamData.Data1) 0064+ 802B DD 66 02 ld h,(ix+StreamData.Data1+1) 0065+ 802E DD 5E 03 ld e,(ix+StreamData.Data2) 0066+ 8031 DD 56 04 ld d,(ix+StreamData.Data2+1) 0067+ 8034 DD 4E 05 ld c,(ix+StreamData.Init) 0068+ 8037 DD 46 06 ld b,(ix+StreamData.Init+1) 0069+ 803A DD E5 push ix 0070+ 803C CD 84 80 call jp_bc 0071+ 803F DD E1 pop ix 0072+ 8041 01 0B 00 ld bc,StreamData 0073+ 8044 DD 09 add ix,bc 0074+ 8046 18 DA jr .initstreams 0075+ 8048 0076+ 8048 DD 21 BD 80 Play ld ix,Streams 0077+ 804C .playstreams 0078+ 804C DD 7E 00 ld a,(ix+StreamData.Type) 0079+ 804F FE 04 cp StreamType.Unknown 0080+ 8051 C8 ret z 0081+ 8052 DD 4E 07 ld c,(ix+StreamData.Play) 0082+ 8055 DD 46 08 ld b,(ix+StreamData.Play+1) 0083+ 8058 DD E5 push ix 0084+ 805A CD 84 80 call jp_bc 0085+ 805D DD E1 pop ix 0086+ 805F 01 0B 00 ld bc,StreamData 0087+ 8062 DD 09 add ix,bc 0088+ 8064 18 E6 jr .playstreams 0089+ 8066 0090+ 8066 DD 21 BD 80 Mute ld ix,Streams 0091+ 806A .mutestreams 0092+ 806A DD 7E 00 ld a,(ix+StreamData.Type) 0093+ 806D FE 04 cp StreamType.Unknown 0094+ 806F C8 ret z 0095+ 8070 DD 4E 09 ld c,(ix+StreamData.Mute) 0096+ 8073 DD 46 0A ld b,(ix+StreamData.Mute+1) 0097+ 8076 DD E5 push ix 0098+ 8078 CD 84 80 call jp_bc 0099+ 807B DD E1 pop ix 0100+ 807D 01 0B 00 ld bc,StreamData 0101+ 8080 DD 09 add ix,bc 0102+ 8082 18 E6 jr .mutestreams 0103+ 8084 0104+ 8084 C5 jp_bc push bc 0105+ 8085 C9 ret 0106+ 8086 0107+ 8086 ;in hl - chunk start 0108+ 8086 ;out a - chunkid 0109+ 8086 ;out hl - chunk data start 0110+ 8086 ;out bc - chunk data size 0111+ 8086 ;corrupt de 0112+ 8086 ParseChunk 0113+ 8086 11 00 81 ld de,ChunkId 0114+ 8089 .checkid 0115+ 8089 06 04 ld b,4 0116+ 808B dup 4 0117+ 808B 1A > ld a,(de) 0118+ 808C 1C > inc e 0119+ 808D BE > cp (hl) 0120+ 808E 23 > inc hl 0121+ 808F 20 01 > jr nz,$+3 0122+ 8091 05 > dec b 0117+ 8092 1A > ld a,(de) 0118+ 8093 1C > inc e 0119+ 8094 BE > cp (hl) 0120+ 8095 23 > inc hl 0121+ 8096 20 01 > jr nz,$+3 0122+ 8098 05 > dec b 0117+ 8099 1A > ld a,(de) 0118+ 809A 1C > inc e 0119+ 809B BE > cp (hl) 0120+ 809C 23 > inc hl 0121+ 809D 20 01 > jr nz,$+3 0122+ 809F 05 > dec b 0117+ 80A0 1A > ld a,(de) 0118+ 80A1 1C > inc e 0119+ 80A2 BE > cp (hl) 0120+ 80A3 23 > inc hl 0121+ 80A4 20 01 > jr nz,$+3 0122+ 80A6 05 > dec b 0124+ 80A7 ;nz if last byte is not matched 0125+ 80A7 ;nz if b != 0 (not all bytes matched) 0126+ 80A7 7B ld a,e 0127+ 80A8 28 0A jr z,.matched 0128+ 80AA FE 1C cp ChunkId.Unknown 0129+ 80AC 28 08 jr z,.getdata 0130+ 80B1 2B 2B 2B 2B dec hl,hl,hl,hl 0131+ 80B2 18 D5 jr .checkid 0132+ 80B4 .matched 0133+ 80B4 D6 04 sub 4 0134+ 80B6 .getdata 0135+ 80B6 ;skip higher bytes of size, assume they are zero 0136+ 80B6 23 inc hl 0137+ 80B7 23 inc hl 0138+ 80B8 46 ld b,(hl) 0139+ 80B9 23 inc hl 0140+ 80BA 4E ld c,(hl) 0141+ 80BB 23 inc hl 0142+ 80BC C9 ret 0143+ 80BD 0144+ 80BD ;put streams in gap 0145+ 80BD Streams 0146+ 80BD MinStreamsCount=3 ;approx: ts+tfm 0147+ 80BD 00 ds MinStreamsCount*StreamData ;approx 0148+ 80DE Streams.End 0149+ 80DE display "MTC: loosed ",256-low $," bytes" 0150+ 80DE 00 align 256 0151+ 8100 0152+ 8100 ChunkId 0153+ 8100 .MTC1=low $ 0154+ 8100 4D 54 43 31 db "MTC1" 0155+ 8104 .TRCK=low $ 0156+ 8104 54 52 43 4B db "TRCK" 0157+ 8108 .DATA=low $ 0158+ 8108 44 41 54 41 db "DATA" 0159+ 810C .NAME=low $ 0160+ 810C 4E 41 4D 45 db "NAME" 0161+ 8110 .AUTH=low $ 0162+ 8110 41 55 54 48 db "AUTH" 0163+ 8114 .ANNO=low $ 0164+ 8114 41 4E 4E 4F db "ANNO" 0165+ 8118 .PROP=low $ 0166+ 8118 50 52 4F 50 db "PROP" 0167+ 811C .Unknown=low $ 0168+ 811C 0169+ 811C MaxStreamsCount=(ChunkId-Streams)/StreamData 0170+ 811C display "MTC: max streams ",MaxStreamsCount 0171+ 811C 0172+ 811C macro MoveNextChunk 0173+ 811C~ ;chunk is always aligned at word boundary, so correct odd length 0174+ 811C~ push bc 0175+ 811C~ pop af 0176+ 811C~ adc hl,bc 0177+ 811C endm 0178+ 811C 0179+ 811C ;in hl - content 0180+ 811C ;in bc - size 0181+ 811C ParseMTC1 0182+ 811C E5 push hl 0183+ 811D 09 add hl,bc 0184+ 811E E3 ex (sp),hl 0185+ 811F ; (sp) - end of avail data 0186+ 811F .nextchunk 0187+ 811F CD 86 80 call ParseChunk 0188+ 8122 E5 C5 push hl,bc 0189+ 8124 FE 04 cp ChunkId.TRCK 0190+ 8126 CC 37 81 call z,ParseTrack 0191+ 8129 C1 E1 pop bc,hl 0192+ 812B MoveNextChunk 0192+ 812B C5 > push bc 0192+ 812C F1 > pop af 0192+ 812D ED 4A > adc hl,bc 0193+ 812F C1 pop bc 0194+ 8130 ;hl- end of chunk 0195+ 8130 ;de- end of avail 0196+ 8130 ED 42 sbc hl,bc 0197+ 8132 C8 ret z ;last chunk 0198+ 8133 09 add hl,bc 0199+ 8134 C5 push bc 0200+ 8135 18 E8 jr .nextchunk 0201+ 8137 0202+ 8137 ;in hl - content 0203+ 8137 ;in bc - size 0204+ 8137 ParseTrack 0205+ 8137 E5 push hl 0206+ 8138 09 add hl,bc 0207+ 8139 E3 ex (sp),hl 0208+ 813A ; (sp) - end of avail data 0209+ 813A .nextchunk 0210+ 813A CD 86 80 call ParseChunk 0211+ 813D E5 C5 push hl,bc 0212+ 813F FE 08 cp ChunkId.DATA 0213+ 8141 CC 56 81 call z,ParseData 0214+ 8144 08 exa 0215+ 8145 C1 E1 pop bc,hl 0216+ 8147 MoveNextChunk 0216+ 8147 C5 > push bc 0216+ 8148 F1 > pop af 0216+ 8149 ED 4A > adc hl,bc 0217+ 814B C1 pop bc 0218+ 814C 08 exa 0219+ 814D C8 ret z ;data is parsed 0220+ 814E ;hl- end of chunk 0221+ 814E ;de- end of avail 0222+ 814E A7 and a 0223+ 814F ED 42 sbc hl,bc 0224+ 8151 C8 ret z ;last chunk 0225+ 8152 09 add hl,bc 0226+ 8153 C5 push bc 0227+ 8154 18 E4 jr .nextchunk 0228+ 8156 0229+ 8156 ;in hl - content 0230+ 8156 ;in bc - size 0231+ 8156 ;out Z - data parsed and added as stream 0232+ 8156 ParseData 0233+ 8156 CD 62 81 call ParseTFC 0234+ 8159 C4 84 81 call nz,ParseTS 0235+ 815C C4 91 81 call nz,ParsePT2 0236+ 815F 20 43 jr nz,ParsePT3 0237+ 8161 C9 ret 0238+ 8162 0239+ 8162 ParseTFC 0240+ 8162 E5 C5 push hl,bc 0241+ 8164 CD 05 8F call TFC.CheckFormat 0242+ 8167 C1 E1 pop bc,hl 0243+ 8169 C0 ret nz 0244+ 816A 3E 03 ld a,StreamType.TFC 0245+ 816C D9 exx 0246+ 816D 21 2E 8F ld hl,TFC.Init 0247+ 8170 11 E1 8F ld de,TFC.Play 0248+ 8173 01 6A 8F ld bc,TFC.Mute 0249+ 8176 CD C3 81 call FillStream 0250+ 8179 AddStream 0251+ 8179 01 0B 00 ld bc,StreamData 0252+ 817C DD 09 add ix,bc 0253+ 817E DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown 0254+ 8182 AF xor a;set Z 0255+ 8183 C9 ret 0256+ 8184 0257+ 8184 ParseTS 0258+ 8184 E5 C5 push hl,bc 0259+ 8186 CD CD 8E call TS.CheckFormatKnownSize 0260+ 8189 C1 E1 pop bc,hl 0261+ 818B C0 ret nz 0262+ 818C CD B7 81 call FillTS 0263+ 818F 18 E8 jr AddStream 0264+ 8191 0265+ 8191 ParsePT2 0266+ 8191 E5 C5 push hl,bc 0267+ 8193 CD 7C 8E call PT2.CheckFormat 0268+ 8196 C1 E1 pop bc,hl 0269+ 8198 C0 ret nz 0270+ 8199 3E 01 ld a,StreamType.PT2 0271+ 819B D9 exx 0272+ 819C 21 77 8E ld hl,PT2.Init 0273+ 819F CD BD 81 call FillPts 0274+ 81A2 18 D5 jr AddStream 0275+ 81A4 0276+ 81A4 ParsePT3 0277+ 81A4 E5 C5 push hl,bc 0278+ 81A6 CD 30 8E call PT3.CheckFormat 0279+ 81A9 C1 E1 pop bc,hl 0280+ 81AB C0 ret nz 0281+ 81AC 3E 00 ld a,StreamType.PT3 0282+ 81AE D9 exx 0283+ 81AF 21 2B 8E ld hl,PT3.Init 0284+ 81B2 CD BD 81 call FillPts 0285+ 81B5 18 C2 jr AddStream 0286+ 81B7 0287+ 81B7 3E 02 FillTS ld a,StreamType.TS 0288+ 81B9 D9 exx 0289+ 81BA 21 B7 8E ld hl,TS.Init 0290+ 81BD 11 88 8A FillPts ld de,PTS.PLAY 0291+ 81C0 01 5A 82 ld bc,PTS.MUTE 0292+ 81C3 FillStream 0293+ 81C3 DD 77 00 ld (ix+StreamData.Type),a 0294+ 81C6 DD 75 05 ld (ix+StreamData.Init),l 0295+ 81C9 DD 74 06 ld (ix+StreamData.Init+1),h 0296+ 81CC DD 73 07 ld (ix+StreamData.Play),e 0297+ 81CF DD 72 08 ld (ix+StreamData.Play+1),d 0298+ 81D2 DD 71 09 ld (ix+StreamData.Mute),c 0299+ 81D5 DD 70 0A ld (ix+StreamData.Mute+1),b 0300+ 81D8 D9 exx 0301+ 81D9 DD 75 01 ld (ix+StreamData.Data1),l 0302+ 81DC DD 74 02 ld (ix+StreamData.Data1+1),h 0303+ 81DF DD 73 03 ld (ix+StreamData.Data2),e 0304+ 81E2 DD 72 04 ld (ix+StreamData.Data2+1),d 0305+ 81E5 C9 ret 0306+ 81E6 0307+ 81E6 ;some business-logic related to supported players 0308+ 81E6 MergeStreams 0309+ 81E6 3A BD 80 ld a,(Streams+StreamData.Type) 0310+ 81E9 FE 04 cp StreamType.Unknown 0311+ 81EB C8 ret z ;no streams 0312+ 81EC 3A C8 80 ld a,(Streams+StreamData+StreamData.Type) 0313+ 81EF FE 04 cp StreamType.Unknown 0314+ 81F1 C8 ret z ;single stream 0315+ 81F2 0316+ 81F2 ;sort streams according to type, use simple bubblesort 0317+ 81F2 Sort 0318+ 81F2 assert 0 == ((Streams ^ Streams.End) >> 8) 0319+ 81F2 assert 0 == StreamData.Type 0320+ 81F2 11 BD 80 ld de,Streams 0321+ 81F5 21 C8 80 ld hl,Streams+StreamData 0322+ 81F8 0E 00 ld c,0;swaps mark 0323+ 81FA .cycle 0324+ 81FA 1A ld a,(de) 0325+ 81FB FE 04 cp StreamType.Unknown 0326+ 81FD 28 1A jr z,.end 0327+ 81FF BE cp (hl) 0328+ 8200 38 10 jr c,.next 0329+ 8202 28 0E jr z,.next 0330+ 8204 06 0B ld b,StreamData 0331+ 8206 .swapitems 0332+ 8206 1A ld a,(de) 0333+ 8207 4E ld c,(hl) 0334+ 8208 77 ld (hl),a 0335+ 8209 79 ld a,c 0336+ 820A 12 ld (de),a 0337+ 820B 2C inc l 0338+ 820C 1C inc e 0339+ 820D 10 F7 djnz .swapitems 0340+ 820F 4C ld c,h 0341+ 8210 18 E8 jr .cycle 0342+ 8212 .next 0343+ 8212 5D ld e,l 0344+ 8213 7D ld a,l 0345+ 8214 C6 0B add a,StreamData 0346+ 8216 6F ld l,a 0347+ 8217 18 E1 jr .cycle 0348+ 8219 .end 0349+ 8219 79 ld a,c 0350+ 821A A7 and a 0351+ 821B 20 D5 jr nz,Sort 0352+ 821D ;try merge streams 0353+ 821D ; X X merged to X (last is taken) 0354+ 821D ; PT3 PT3 merged to TS 0355+ 821D Merge 0356+ 821D assert 0 == StreamData.Type 0357+ 821D 11 BD 80 ld de,Streams 0358+ 8220 21 C8 80 ld hl,Streams+StreamData 0359+ 8223 .cycle 0360+ 8223 1A ld a,(de) 0361+ 8224 FE 04 cp StreamType.Unknown 0362+ 8226 C8 ret z 0363+ 8227 BE cp (hl) 0364+ 8228 28 07 jr z,.perform 0365+ 822A 5D ld e,l 0366+ 822B 7D ld a,l 0367+ 822C C6 0B add a,StreamData 0368+ 822E 6F ld l,a 0369+ 822F 18 F2 jr .cycle 0370+ 8231 .perform 0371+ 8231 FE 00 cp StreamType.PT3 0372+ 8233 20 15 jr nz,.generic 0373+ 8235 ;merge PT3 streams to TS 0374+ 8235 E5 D5 push hl,de 0375+ 8237 E5 D5 push hl,de 0376+ 8239 2C inc l 0377+ 823A 5E ld e,(hl) 0378+ 823B 2C inc l 0379+ 823C 56 ld d,(hl) ;data1 0380+ 823D E1 pop hl 0381+ 823E 2C inc l 0382+ 823F 7E ld a,(hl) 0383+ 8240 2C inc l 0384+ 8241 66 ld h,(hl) 0385+ 8242 6F ld l,a ;data2 0386+ 8243 DD E1 pop ix 0387+ 8245 CD B7 81 call FillTS 0388+ 8248 D1 E1 pop de,hl 0389+ 824A .generic 0390+ 824A ;for other types just take last one 0391+ 824A 06 0B ld b,StreamData 0392+ 824C .copyitems 0393+ 824C 7E ld a,(hl) 0394+ 824D 12 ld (de),a 0395+ 824E 2C inc l 0396+ 824F 1C inc e 0397+ 8250 10 FA djnz .copyitems 0398+ 8252 1A ld a,(de) 0399+ 8253 FE 04 cp StreamType.Unknown 0400+ 8255 20 F3 jr nz,.generic 0401+ 8257 18 8D jr MergeStreams 0402+ 8259 0403+ 8259 endmod 0404+ 8259 0405+ 8259 ifndef NoPrologue 0406+ 8259 define NoPrologue 0407+ 8259 endif 0408+ 8259 0409+ 8259 ifndef HaveFormatCheck 0410+ 8259 define HaveFormatCheck 0411+ 8259 endif 0412+ 8259 0413+ 8259 ifndef ONtfm 0414+ 8259 define ONtfm 0415+ 8259 endif 0416+ 8259 0417+ 8259 include "PTSPlay.asm" 0001++ 8259 ifndef _pts_asm_defined 0002++ 8259 define _pts_asm_defined 0003++ 8259 0004++ 8259 MODULE PTS 0005++ 8259 0006++ 8259 ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007++ 8259 ;(c)2004-2007 S.V.Bulba 0008++ 8259 ;Specially for AlCo 0009++ 8259 ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010++ 8259 0011++ 8259 ;Release number 0012++ 8259 Release EQU "0" 0013++ 8259 0014++ 8259 ;Conditional assembly 0015++ 8259 ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016++ 8259 CurPosCounter=0 0017++ 8259 ;2) Allow channels allocation bits at (SETUP) 0018++ 8259 ACBBAC=0 0019++ 8259 ;3) Allow loop checking and disabling 0020++ 8259 LoopChecker=0 0021++ 8259 ;4) Insert official identificator 0022++ 8259 Id=0 0023++ 8259 ;5) Set IY for correct return to ZX Basic 0024++ 8259 Basic=0 0025++ 8259 0026++ 8259 ;Features 0027++ 8259 ;-------- 0028++ 8259 ;-Can be compiled at any address (i.e. no need rounding ORG 0029++ 8259 ; address). 0030++ 8259 ;-Variables (VARS) can be located at any address (not only after 0031++ 8259 ; code block). 0032++ 8259 ;-INIT subprogram checks PT3-module version and rightly 0033++ 8259 ; generates both note and volume tables outside of code block 0034++ 8259 ; (in VARS). 0035++ 8259 ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036++ 8259 ; PT3 module version). 0037++ 8259 ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038++ 8259 ; and higher). 0039++ 8259 ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040++ 8259 ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041++ 8259 ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042++ 8259 ;-See also notes at the end of this source code. 0043++ 8259 0044++ 8259 ;Limitations 0045++ 8259 ;----------- 0046++ 8259 ;-Can run in RAM only (self-modified code is used). 0047++ 8259 ;-PT2 position list must be end by #FF marker only. 0048++ 8259 0049++ 8259 ;Warning!!! PLAY subprogram can crash if no module are loaded 0050++ 8259 ;into RAM or INIT subprogram was not called before. 0051++ 8259 0052++ 8259 ;Call MUTE or INIT one more time to mute sound after stopping 0053++ 8259 ;playing 0054++ 8259 0055++ 8259 TonA EQU 0 0056++ 8259 TonB EQU 2 0057++ 8259 TonC EQU 4 0058++ 8259 Noise EQU 6 0059++ 8259 Mixer EQU 7 0060++ 8259 AmplA EQU 8 0061++ 8259 AmplB EQU 9 0062++ 8259 AmplC EQU 10 0063++ 8259 Env EQU 11 0064++ 8259 EnvTp EQU 13 0065++ 8259 0066++ 8259 START 0067++ 8259 0068++ 8259 SETUP.NOLOOP EQU 1 0069++ 8259 SETUP.PT2 EQU 2 0070++ 8259 SETUP.ACB EQU 4 0071++ 8259 SETUP.BAC EQU 8 0072++ 8259 SETUP.TS02 EQU 16 0073++ 8259 SETUP.TSPT3 EQU 32 0074++ 8259 0075++ 8259 00 SETUP DB 0 ;set bit0, if you want to play without looping 0076++ 825A ;(optional); 0077++ 825A ;set bit1 for PT2 and reset for PT3 before 0078++ 825A ;calling INIT; 0079++ 825A ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080++ 825A ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081++ 825A ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082++ 825A ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083++ 825A ;documented and must be converted to new standard. 0084++ 825A ;bit6 is set each time, when loop point of 2nd TS 0085++ 825A ;module is passed (optional). 0086++ 825A ;bit7 is set each time, when loop point of 1st TS 0087++ 825A ;or of single module is passed (optional). 0088++ 825A 0089++ 825A ;Identifier 0090++ 825A IF Id 0091++ 825A~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092++ 825A ENDIF 0093++ 825A 0094++ 825A IF LoopChecker 0095++ 825A~ CHECKLP LD HL,SETUP 0096++ 825A~ BIT 0,(IY-100+VRS.ModNum) 0097++ 825A~ JR Z,CHL1 0098++ 825A~ SET 6,(HL) 0099++ 825A~ JR CHL2 0100++ 825A~ CHL1 SET 7,(HL) 0101++ 825A~ CHL2 BIT 0,(HL) 0102++ 825A~ RET Z 0103++ 825A~ POP HL 0104++ 825A~ INC (IY-100+VRS.DelyCnt) 0105++ 825A~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106++ 825A~ XOR A 0107++ 825A~ LD (IY-100+VRS.AYREGS+AmplA),A 0108++ 825A~ LD (IY-100+VRS.AYREGS+AmplB),A 0109++ 825A~ LD (IY-100+VRS.AYREGS+AmplC),A 0110++ 825A~ RET 0111++ 825A ENDIF 0112++ 825A 0113++ 825A AF MUTE XOR A 0114++ 825B 67 LD H,A 0115++ 825C 6F LD L,A 0116++ 825D 32 EE 8B LD (VARS1+VRS.AYREGS+AmplA),A 0117++ 8260 22 EF 8B LD (VARS1+VRS.AYREGS+AmplB),HL 0118++ 8263 32 75 8C LD (VARS2+VRS.AYREGS+AmplA),A 0119++ 8266 22 76 8C LD (VARS2+VRS.AYREGS+AmplB),HL 0120++ 8269 C3 9C 8A JP ROUT 0121++ 826C 0122++ 826C INIT 0123++ 826C ;HL - AddressOfModule 0124++ 826C ;DE - AddresOf2ndModule 0125++ 826C ;A - mode 0126++ 826C D5 PUSH DE 0127++ 826D E5 PUSH HL 0128++ 826E 21 6C 8B LD HL,VARS 0129++ 8271 36 00 LD (HL),0 0130++ 8273 11 6D 8B LD DE,VARS+1 0131++ 8276 01 0E 01 LD BC,VAR0END-VARS-1 0132++ 8279 ED B0 LDIR 0133++ 827B 23 INC HL 0134++ 827C 22 CF 8B LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135++ 827F 22 56 8C LD (VARS2+VRS.AdInPtA),HL 0136++ 8282 0137++ 8282 E1 POP HL 0138++ 8283 FD 21 D1 8B LD IY,VARS1+100 0139++ 8287 32 59 82 LD (SETUP),A 0140++ 828A E6 02 AND SETUP.PT2 0141++ 828C C2 15 83 JP NZ,I_PT2 0142++ 828F 0143++ 828F CD 5E 84 CALL INITPT3 0144++ 8292 21 18 1F LD HL,(e_-SamCnv-2)*256+#18 0145++ 8295 22 31 88 LD (SamCnv),HL 0146++ 8298 3E BA LD A,#BA 0147++ 829A 32 FC 87 LD (OrnCP),A 0148++ 829D 32 28 88 LD (SamCP),A 0149++ 82A0 3E 7B LD A,#7B 0150++ 82A2 32 FF 87 LD (OrnLD),A 0151++ 82A5 32 2B 88 LD (SamLD),A 0152++ 82A8 3E 87 LD A,#87 0153++ 82AA 32 22 88 LD (SamClc2),A 0154++ 82AD E1 POP HL 0155++ 82AE ;Use version and ton table of 1st module 0156++ 82AE DD 7E A9 LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157++ 82B1 D6 30 SUB #30 0158++ 82B3 38 04 JR C,L20 0159++ 82B5 FE 0A CP 10 0160++ 82B7 38 02 JR C,L21 0161++ 82B9 3E 06 L20 LD A,6 0162++ 82BB 32 CF 86 L21 LD (Version),A 0163++ 82BE F5 PUSH AF ;VolTable version 0164++ 82BF FE 04 CP 4 0165++ 82C1 DD 7E FF LD A,(IX+99-100) ;TONE TABLE NUMBER 0166++ 82C4 17 RLA 0167++ 82C5 E6 07 AND 7 0168++ 82C7 F5 PUSH AF ;NoteTable number 0169++ 82C8 0170++ 82C8 FD 21 58 8C LD IY,VARS2+100 0171++ 82CC 3A 59 82 LD A,(SETUP) 0172++ 82CF E6 30 AND SETUP.TS02|SETUP.TSPT3 0173++ 82D1 28 37 JR Z,NOTS 0174++ 82D3 FE 10 CP SETUP.TS02 0175++ 82D5 28 27 JR Z,TwoPT3s 0176++ 82D7 3A CF 86 LD A,(Version) 0177++ 82DA FE 07 CP 7 0178++ 82DC 38 2C JR C,NOTS 0179++ 82DE DD 7E FE LD A,(IX+98-100) ;ALCO TS MARKER 0180++ 82E1 FE 20 CP #20 0181++ 82E3 28 25 JR Z,NOTS 0182++ 82E5 21 6D 8B LD HL,VARS1 0183++ 82E8 11 F4 8B LD DE,VARS2 0184++ 82EB 01 87 00 LD BC,VRS 0185++ 82EE ED B0 LDIR 0186++ 82F0 FD CB 9E CE SET 1,(IY-100+VRS.ModNum) 0187++ 82F4 4F LD C,A 0188++ 82F5 87 ADD A,A 0189++ 82F6 81 ADD A,C 0190++ 82F7 D6 02 SUB 2 0191++ 82F9 32 93 89 LD (TSSub),A 0192++ 82FC 18 03 JR AlCoTS_ 0193++ 82FE CD 5E 84 TwoPT3s CALL INITPT3 0194++ 8301 3E 01 AlCoTS_ LD A,1 0195++ 8303 32 6C 8B LD (is_ts),A 0196++ 8306 FD CB 9E C6 SET 0,(IY-100+VRS.ModNum) 0197++ 830A 0198++ 830A 01 1B 86 NOTS LD BC,PT3PD 0199++ 830D 21 00 00 LD HL,0 0200++ 8310 11 34 8B LD DE,PT3EMPTYORN 0201++ 8313 18 48 JR INITCOMMON 0202++ 8315 0203++ 8315 CD 96 84 I_PT2 CALL INITPT2 0204++ 8318 21 CB 51 LD HL,#51CB 0205++ 831B 22 31 88 LD (SamCnv),HL 0206++ 831E 3E BB LD A,#BB 0207++ 8320 32 FC 87 LD (OrnCP),A 0208++ 8323 32 28 88 LD (SamCP),A 0209++ 8326 3E 7A LD A,#7A 0210++ 8328 32 FF 87 LD (OrnLD),A 0211++ 832B 32 2B 88 LD (SamLD),A 0212++ 832E 3E 80 LD A,#80 0213++ 8330 32 22 88 LD (SamClc2),A 0214++ 8333 E1 POP HL 0215++ 8334 3E 05 LD A,5 0216++ 8336 32 CF 86 LD (Version),A 0217++ 8339 F5 PUSH AF 0218++ 833A 3E 02 LD A,2 0219++ 833C F5 PUSH AF 0220++ 833D 0221++ 833D 3A 59 82 LD A,(SETUP) 0222++ 8340 E6 30 AND SETUP.TS02|SETUP.TSPT3 0223++ 8342 28 10 JR Z,NOTS2 0224++ 8344 0225++ 8344 FD 21 58 8C LD IY,VARS2+100 0226++ 8348 3E 01 LD A,1 0227++ 834A 32 6C 8B LD (is_ts),A 0228++ 834D FD CB 9E C6 SET 0,(IY-100+VRS.ModNum) 0229++ 8351 CD 96 84 CALL INITPT2 0230++ 8354 0231++ 8354 01 55 85 NOTS2 LD BC,PT2PD 0232++ 8357 21 87 86 LD HL,#8687 0233++ 835A 11 8A 8C LD DE,PT2EMPTYORN 0234++ 835D 0235++ 835D INITCOMMON 0236++ 835D 0237++ 835D IF Basic 0238++ 835D~ LD IY,#5C3A 0239++ 835D ENDIF 0240++ 835D 0241++ 835D ED 43 06 85 LD (PTDEC),BC 0242++ 8361 22 95 89 LD (PsCalc),HL 0243++ 8364 D5 PUSH DE 0244++ 8365 0245++ 8365 ;note table data depacker 0246++ 8365 ;(c) Ivan Roshin 0247++ 8365 11 37 8B LD DE,T_PACK 0248++ 8368 01 DC 8C LD BC,T1_+(2*49)-1 0249++ 836B 1A TP_0 LD A,(DE) 0250++ 836C 13 INC DE 0251++ 836D FE 1E CP 15*2 0252++ 836F 30 06 JR NC,TP_1 0253++ 8371 67 LD H,A 0254++ 8372 1A LD A,(DE) 0255++ 8373 6F LD L,A 0256++ 8374 13 INC DE 0257++ 8375 18 07 JR TP_2 0258++ 8377 D5 TP_1 PUSH DE 0259++ 8378 16 00 LD D,0 0260++ 837A 5F LD E,A 0261++ 837B 19 ADD HL,DE 0262++ 837C 19 ADD HL,DE 0263++ 837D D1 POP DE 0264++ 837E 7C TP_2 LD A,H 0265++ 837F 02 LD (BC),A 0266++ 8380 0B DEC BC 0267++ 8381 7D LD A,L 0268++ 8382 02 LD (BC),A 0269++ 8383 0B DEC BC 0270++ 8384 D6 F0 SUB (#F8*2)&255 0271++ 8386 20 E3 JR NZ,TP_0 0272++ 8388 0273++ 8388 3C INC A 0274++ 8389 32 DA 8B LD (VARS1+VRS.DelyCnt),A 0275++ 838C 32 61 8C LD (VARS2+VRS.DelyCnt),A 0276++ 838F 21 01 F0 LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277++ 8392 22 8B 8B LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278++ 8395 22 A8 8B LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279++ 8398 22 C5 8B LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280++ 839B 22 12 8C LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281++ 839E 22 2F 8C LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282++ 83A1 22 4C 8C LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283++ 83A4 E1 POP HL 0284++ 83A5 22 7D 8B LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285++ 83A8 22 9A 8B LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286++ 83AB 22 B7 8B LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287++ 83AE 22 04 8C LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288++ 83B1 22 21 8C LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289++ 83B4 22 3E 8C LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290++ 83B7 0291++ 83B7 F1 POP AF 0292++ 83B8 0293++ 83B8 ;NoteTableCreator (c) Ivan Roshin 0294++ 83B8 ;A - NoteTableNumber*2+VersionForNoteTable 0295++ 83B8 ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296++ 83B8 0297++ 83B8 21 E4 8A LD HL,NT_DATA 0298++ 83BB 16 00 LD D,0 0299++ 83BD 87 ADD A,A 0300++ 83BE 5F LD E,A 0301++ 83BF 19 ADD HL,DE 0302++ 83C0 5E LD E,(HL) 0303++ 83C1 23 INC HL 0304++ 83C2 CB 3B SRL E 0305++ 83C4 9F SBC A,A 0306++ 83C5 E6 A7 AND #A7 ;#00 (NOP) or #A7 (AND A) 0307++ 83C7 32 EF 83 LD (L3),A 0308++ 83CA EB EX DE,HL 0309++ 83CB 01 7B 8C LD BC,T1_ 0310++ 83CE 09 ADD HL,BC 0311++ 83CF 0312++ 83CF 1A LD A,(DE) 0313++ 83D0 C6 F4 ADD A,T_&255 0314++ 83D2 4F LD C,A 0315++ 83D3 CE 8A ADC A,T_/256 0316++ 83D5 91 SUB C 0317++ 83D6 47 LD B,A 0318++ 83D7 C5 PUSH BC 0319++ 83D8 11 6B 8D LD DE,NT_ 0320++ 83DB D5 PUSH DE 0321++ 83DC 0322++ 83DC 06 0C LD B,12 0323++ 83DE C5 L1 PUSH BC 0324++ 83DF 4E LD C,(HL) 0325++ 83E0 23 INC HL 0326++ 83E1 E5 PUSH HL 0327++ 83E2 46 LD B,(HL) 0328++ 83E3 0329++ 83E3 D5 PUSH DE 0330++ 83E4 EB EX DE,HL 0331++ 83E5 11 17 00 LD DE,23 0332++ 83E8 DD 26 08 LD IXH,8 0333++ 83EB 0334++ 83EB CB 38 L2 SRL B 0335++ 83ED CB 19 RR C 0336++ 83EF 19 L3 DB #19 ;AND A or NOP 0337++ 83F0 79 LD A,C 0338++ 83F1 8A ADC A,D ;=ADC 0 0339++ 83F2 77 LD (HL),A 0340++ 83F3 23 INC HL 0341++ 83F4 78 LD A,B 0342++ 83F5 8A ADC A,D 0343++ 83F6 77 LD (HL),A 0344++ 83F7 19 ADD HL,DE 0345++ 83F8 DD 25 DEC IXH 0346++ 83FA 20 EF JR NZ,L2 0347++ 83FC 0348++ 83FC D1 POP DE 0349++ 83FD 13 INC DE 0350++ 83FE 13 INC DE 0351++ 83FF E1 POP HL 0352++ 8400 23 INC HL 0353++ 8401 C1 POP BC 0354++ 8402 10 DA DJNZ L1 0355++ 8404 0356++ 8404 E1 POP HL 0357++ 8405 D1 POP DE 0358++ 8406 0359++ 8406 7B LD A,E 0360++ 8407 FE 00 CP TCOLD_1&255 0361++ 8409 20 05 JR NZ,CORR_1 0362++ 840B 3E FD LD A,#FD 0363++ 840D 32 99 8D LD (NT_+#2E),A 0364++ 8410 0365++ 8410 1A CORR_1 LD A,(DE) 0366++ 8411 A7 AND A 0367++ 8412 28 11 JR Z,TC_EXIT 0368++ 8414 1F RRA 0369++ 8415 F5 PUSH AF 0370++ 8416 87 ADD A,A 0371++ 8417 4F LD C,A 0372++ 8418 09 ADD HL,BC 0373++ 8419 F1 POP AF 0374++ 841A 30 02 JR NC,CORR_2 0375++ 841C 35 DEC (HL) 0376++ 841D 35 DEC (HL) 0377++ 841E 34 CORR_2 INC (HL) 0378++ 841F A7 AND A 0379++ 8420 ED 42 SBC HL,BC 0380++ 8422 13 INC DE 0381++ 8423 18 EB JR CORR_1 0382++ 8425 0383++ 8425 TC_EXIT 0384++ 8425 0385++ 8425 F1 POP AF 0386++ 8426 0387++ 8426 ;VolTableCreator (c) Ivan Roshin 0388++ 8426 ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389++ 8426 ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390++ 8426 0391++ 8426 FE 05 CP 5 0392++ 8428 21 11 00 LD HL,#11 0393++ 842B 54 LD D,H 0394++ 842C 5C LD E,H 0395++ 842D 3E 17 LD A,#17 0396++ 842F 30 03 JR NC,M1 0397++ 8431 2D DEC L 0398++ 8432 5D LD E,L 0399++ 8433 AF XOR A 0400++ 8434 32 45 84 M1 LD (M2),A 0401++ 8437 0402++ 8437 DD 21 7B 8C LD IX,VT_+16 0403++ 843B 0404++ 843B 0E 0F LD C,#F 0405++ 843D E5 INITV2 PUSH HL 0406++ 843E 0407++ 843E 19 ADD HL,DE 0408++ 843F EB EX DE,HL 0409++ 8440 ED 62 SBC HL,HL 0410++ 8442 0411++ 8442 06 10 LD B,#10 0412++ 8444 7D INITV1 LD A,L 0413++ 8445 7D M2 DB #7D 0414++ 8446 7C LD A,H 0415++ 8447 CE 00 ADC A,0 0416++ 8449 DD 77 00 LD (IX),A 0417++ 844C DD 23 INC IX 0418++ 844E 19 ADD HL,DE 0419++ 844F 10 F3 DJNZ INITV1 0420++ 8451 0421++ 8451 E1 POP HL 0422++ 8452 7B LD A,E 0423++ 8453 FE 77 CP #77 0424++ 8455 20 01 JR NZ,M3 0425++ 8457 1C INC E 0426++ 8458 0D M3 DEC C 0427++ 8459 20 E2 JR NZ,INITV2 0428++ 845B 0429++ 845B C3 9C 8A JP ROUT 0430++ 845E 0431++ 845E CD D1 84 INITPT3 CALL SETMDAD 0432++ 8461 E5 PUSH HL 0433++ 8462 11 64 00 LD DE,100 0434++ 8465 19 ADD HL,DE 0435++ 8466 7E LD A,(HL) 0436++ 8467 FD 77 08 LD (IY-100+VRS.Delay),A 0437++ 846A E5 PUSH HL 0438++ 846B DD E1 POP IX 0439++ 846D 19 ADD HL,DE 0440++ 846E CD DF 84 CALL SETCPPT 0441++ 8471 DD 5E 02 LD E,(IX+102-100) 0442++ 8474 23 INC HL 0443++ 8475 0444++ 8475 IF CurPosCounter 0445++ 8475~ LD (IY-100+VRS.PosSub),L 0446++ 8475 ENDIF 0447++ 8475 0448++ 8475 19 ADD HL,DE 0449++ 8476 CD E6 84 CALL SETLPPT 0450++ 8479 D1 POP DE 0451++ 847A DD 6E 03 LD L,(IX+103-100) 0452++ 847D DD 66 04 LD H,(IX+104-100) 0453++ 8480 19 ADD HL,DE 0454++ 8481 CD CA 84 CALL SETPTPT 0455++ 8484 21 A9 00 LD HL,169 0456++ 8487 19 ADD HL,DE 0457++ 8488 CD D8 84 CALL SETORPT 0458++ 848B 21 69 00 LD HL,105 0459++ 848E 19 ADD HL,DE 0460++ 848F 0461++ 848F FD 75 FA SETSMPT LD (IY-100+VRS.SamPtrs),L 0462++ 8492 FD 74 FB LD (IY-100+VRS.SamPtrs+1),H 0463++ 8495 C9 RET 0464++ 8496 0465++ 8496 7E INITPT2 LD A,(HL) 0466++ 8497 FD 77 08 LD (IY-100+VRS.Delay),A 0467++ 849A E5 PUSH HL 0468++ 849B E5 PUSH HL 0469++ 849C E5 PUSH HL 0470++ 849D 23 INC HL 0471++ 849E 23 INC HL 0472++ 849F 7E LD A,(HL) 0473++ 84A0 23 INC HL 0474++ 84A1 CD 8F 84 CALL SETSMPT 0475++ 84A4 5E LD E,(HL) 0476++ 84A5 23 INC HL 0477++ 84A6 56 LD D,(HL) 0478++ 84A7 E1 POP HL 0479++ 84A8 A7 AND A 0480++ 84A9 ED 52 SBC HL,DE 0481++ 84AB CD D1 84 CALL SETMDAD 0482++ 84AE E1 POP HL 0483++ 84AF 11 43 00 LD DE,67 0484++ 84B2 19 ADD HL,DE 0485++ 84B3 CD D8 84 CALL SETORPT 0486++ 84B6 1E 20 LD E,32 0487++ 84B8 19 ADD HL,DE 0488++ 84B9 4E LD C,(HL) 0489++ 84BA 23 INC HL 0490++ 84BB 46 LD B,(HL) 0491++ 84BC 1E 1E LD E,30 0492++ 84BE 19 ADD HL,DE 0493++ 84BF CD DF 84 CALL SETCPPT 0494++ 84C2 5F LD E,A 0495++ 84C3 23 INC HL 0496++ 84C4 0497++ 84C4 IF CurPosCounter 0498++ 84C4~ LD (IY-100+VRS.PosSub),L 0499++ 84C4 ENDIF 0500++ 84C4 0501++ 84C4 19 ADD HL,DE 0502++ 84C5 CD E6 84 CALL SETLPPT 0503++ 84C8 E1 POP HL 0504++ 84C9 09 ADD HL,BC 0505++ 84CA 0506++ 84CA FD 75 FC SETPTPT LD (IY-100+VRS.PatsPtr),L 0507++ 84CD FD 74 FD LD (IY-100+VRS.PatsPtr+1),H 0508++ 84D0 C9 RET 0509++ 84D1 0510++ 84D1 FD 75 F6 SETMDAD LD (IY-100+VRS.MODADDR),L 0511++ 84D4 FD 74 F7 LD (IY-100+VRS.MODADDR+1),H 0512++ 84D7 C9 RET 0513++ 84D8 0514++ 84D8 FD 75 F8 SETORPT LD (IY-100+VRS.OrnPtrs),L 0515++ 84DB FD 74 F9 LD (IY-100+VRS.OrnPtrs+1),H 0516++ 84DE C9 RET 0517++ 84DF 0518++ 84DF FD 75 04 SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519++ 84E2 FD 74 05 LD (IY-100+VRS.CrPsPtr+1),H 0520++ 84E5 C9 RET 0521++ 84E6 0522++ 84E6 FD 75 06 SETLPPT LD (IY-100+VRS.LPosPtr),L 0523++ 84E9 FD 74 07 LD (IY-100+VRS.LPosPtr+1),H 0524++ 84EC C9 RET 0525++ 84ED 0526++ 84ED FD 75 13 SETENBS LD (IY-100+VRS.EnvBase),L 0527++ 84F0 FD 74 14 LD (IY-100+VRS.EnvBase+1),H 0528++ 84F3 C9 RET 0529++ 84F4 0530++ 84F4 FD 75 0C SETESLD LD (IY-100+VRS.CurESld),L 0531++ 84F7 FD 74 0D LD (IY-100+VRS.CurESld+1),H 0532++ 84FA C9 RET 0533++ 84FB 0534++ 84FB FD E5 GETIX PUSH IY 0535++ 84FD DD E1 POP IX 0536++ 84FF DD 19 ADD IX,DE 0537++ 8501 C9 RET 0538++ 8502 0539++ 8502 CD FB 84 PTDECOD CALL GETIX 0540++ 8505 PTDEC EQU $+1 0541++ 8505 C3 C3 C3 JP #C3C3 0542++ 8508 0543++ 8508 ;PT2 pattern decoder 0544++ 8508 CD 9E 87 PD2_SAM CALL SETSAM 0545++ 850B 18 4A JR PD2_LOOP 0546++ 850D 0547++ 850D DD 77 08 PD2_EOff LD (IX-12+CHP.Env_En),A 0548++ 8510 18 45 JR PD2_LOOP 0549++ 8512 0550++ 8512 DD 36 08 10 PD2_ENV LD (IX-12+CHP.Env_En),16 0551++ 8516 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 0552++ 8519 0A LD A,(BC) 0553++ 851A 03 INC BC 0554++ 851B 6F LD L,A 0555++ 851C 0A LD A,(BC) 0556++ 851D 03 INC BC 0557++ 851E 67 LD H,A 0558++ 851F CD ED 84 CALL SETENBS 0559++ 8522 18 33 JR PD2_LOOP 0560++ 8524 0561++ 8524 CD 7F 87 PD2_ORN CALL SETORN 0562++ 8527 18 2E JR PD2_LOOP 0563++ 8529 0564++ 8529 3C PD2_SKIP INC A 0565++ 852A DD 77 05 LD (IX-12+CHP.NNtSkp),A 0566++ 852D 18 28 JR PD2_LOOP 0567++ 852F 0568++ 852F 0F PD2_VOL RRCA 0569++ 8530 0F RRCA 0570++ 8531 0F RRCA 0571++ 8532 0F RRCA 0572++ 8533 DD 77 10 LD (IX-12+CHP.Volume),A 0573++ 8536 18 1F JR PD2_LOOP 0574++ 8538 0575++ 8538 CD 4F 87 PD2_DEL CALL C_DELAY 0576++ 853B 18 1A JR PD2_LOOP 0577++ 853D 0578++ 853D DD CB 09 D6 PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579++ 8541 3C INC A 0580++ 8542 DD 77 0A LD (IX-12+CHP.TnSlDl),A 0581++ 8545 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0582++ 8548 0A LD A,(BC) 0583++ 8549 03 INC BC 0584++ 854A DD 77 0B LD (IX-12+CHP.TSlStp),A 0585++ 854D 87 ADD A,A 0586++ 854E 9F SBC A,A 0587++ 854F DD 77 0C LD (IX-12+CHP.TSlStp+1),A 0588++ 8552 37 SCF 0589++ 8553 18 01 JR PD2_LP2 0590++ 8555 0591++ 8555 A7 PT2PD AND A 0592++ 8556 0593++ 8556 08 PD2_LP2 EX AF,AF' 0594++ 8557 0595++ 8557 0A PD2_LOOP LD A,(BC) 0596++ 8558 03 INC BC 0597++ 8559 C6 20 ADD A,#20 0598++ 855B 28 3F JR Z,PD2_REL 0599++ 855D 38 A9 JR C,PD2_SAM 0600++ 855F C6 60 ADD A,96 0601++ 8561 38 3E JR C,PD2_NOTE 0602++ 8563 3C INC A 0603++ 8564 28 A7 JR Z,PD2_EOff 0604++ 8566 C6 0F ADD A,15 0605++ 8568 CA 7E 86 JP Z,PD_FIN 0606++ 856B 38 A5 JR C,PD2_ENV 0607++ 856D C6 10 ADD A,#10 0608++ 856F 38 B3 JR C,PD2_ORN 0609++ 8571 C6 40 ADD A,#40 0610++ 8573 38 B4 JR C,PD2_SKIP 0611++ 8575 C6 10 ADD A,#10 0612++ 8577 38 B6 JR C,PD2_VOL 0613++ 8579 3C INC A 0614++ 857A 28 BC JR Z,PD2_DEL 0615++ 857C 3C INC A 0616++ 857D 28 BE JR Z,PD2_GLIS 0617++ 857F 3C INC A 0618++ 8580 28 0A JR Z,PD2_PORT 0619++ 8582 3C INC A 0620++ 8583 28 12 JR Z,PD2_STOP 0621++ 8585 0A LD A,(BC) 0622++ 8586 03 INC BC 0623++ 8587 DD 77 F7 LD (IX-12+CHP.CrNsSl),A 0624++ 858A 18 CB JR PD2_LOOP 0625++ 858C 0626++ 858C DD CB 09 96 PD2_PORT RES 2,(IX-12+CHP.Flags) 0627++ 8590 0A LD A,(BC) 0628++ 8591 03 INC BC 0629++ 8592 03 INC BC ;ignoring precalc delta to right sound 0630++ 8593 03 INC BC 0631++ 8594 37 SCF 0632++ 8595 18 BF JR PD2_LP2 0633++ 8597 0634++ 8597 DD 77 F9 PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635++ 859A 18 BB JR PD2_LOOP 0636++ 859C 0637++ 859C DD 77 09 PD2_REL LD (IX-12+CHP.Flags),A 0638++ 859F 18 2C JR PD2_EXIT 0639++ 85A1 0640++ 85A1 6F PD2_NOTE LD L,A 0641++ 85A2 DD 7E 06 LD A,(IX-12+CHP.Note) 0642++ 85A5 32 B8 86 LD (PrNote+1),A 0643++ 85A8 DD 75 06 LD (IX-12+CHP.Note),L 0644++ 85AB AF XOR A 0645++ 85AC DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0646++ 85AF DD CB 09 C6 SET 0,(IX-12+CHP.Flags) 0647++ 85B3 08 EX AF,AF' 0648++ 85B4 30 16 JR NC,NOGLIS2 0649++ 85B6 DD CB 09 56 BIT 2,(IX-12+CHP.Flags) 0650++ 85BA 20 0C JR NZ,NOPORT2 0651++ 85BC 32 DE 86 LD (LoStep),A 0652++ 85BF 87 ADD A,A 0653++ 85C0 9F SBC A,A 0654++ 85C1 08 EX AF,AF' 0655++ 85C2 67 LD H,A 0656++ 85C3 6F LD L,A 0657++ 85C4 3C INC A 0658++ 85C5 CD 99 86 CALL SETPORT 0659++ 85C8 DD 36 F9 01 NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660++ 85CC AF NOGLIS2 XOR A 0661++ 85CD 0662++ 85CD 0663++ 85CD DD 77 F5 PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664++ 85D0 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0665++ 85D3 DD 77 FA LD (IX-12+CHP.CrTnSl),A 0666++ 85D6 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A 0667++ 85D9 C3 7E 86 JP PD_FIN 0668++ 85DC 0669++ 85DC ;PT3 pattern decoder 0670++ 85DC DD 36 08 00 PD_OrSm LD (IX-12+CHP.Env_En),0 0671++ 85E0 CD 7F 87 CALL SETORN 0672++ 85E3 0A PD_SAM_ LD A,(BC) 0673++ 85E4 03 INC BC 0674++ 85E5 0F RRCA 0675++ 85E6 0676++ 85E6 CD 9E 87 PD_SAM CALL SETSAM 0677++ 85E9 18 3F JR PD_LOOP 0678++ 85EB 0679++ 85EB 0F PD_VOL RRCA 0680++ 85EC 0F RRCA 0681++ 85ED 0F RRCA 0682++ 85EE 0F RRCA 0683++ 85EF DD 77 10 LD (IX-12+CHP.Volume),A 0684++ 85F2 18 39 JR PD_LP2 0685++ 85F4 0686++ 85F4 DD 77 08 PD_EOff LD (IX-12+CHP.Env_En),A 0687++ 85F7 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0688++ 85FA 18 31 JR PD_LP2 0689++ 85FC 0690++ 85FC 3D PD_SorE DEC A 0691++ 85FD 20 07 JR NZ,PD_ENV 0692++ 85FF 0A LD A,(BC) 0693++ 8600 03 INC BC 0694++ 8601 DD 77 05 LD (IX-12+CHP.NNtSkp),A 0695++ 8604 18 27 JR PD_LP2 0696++ 8606 0697++ 8606 CD 64 87 PD_ENV CALL SETENV 0698++ 8609 18 22 JR PD_LP2 0699++ 860B 0700++ 860B CD 7F 87 PD_ORN CALL SETORN 0701++ 860E 18 1A JR PD_LOOP 0702++ 8610 0703++ 8610 DD 77 08 PD_ESAM LD (IX-12+CHP.Env_En),A 0704++ 8613 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0705++ 8616 C4 64 87 CALL NZ,SETENV 0706++ 8619 18 C8 JR PD_SAM_ 0707++ 861B 0708++ 861B DD 7E 06 PT3PD LD A,(IX-12+CHP.Note) 0709++ 861E 32 B8 86 LD (PrNote+1),A 0710++ 8621 DD 6E FA LD L,(IX-12+CHP.CrTnSl) 0711++ 8624 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1) 0712++ 8627 22 D5 86 LD (PrSlide+1),HL 0713++ 862A 0714++ 862A 11 10 20 PD_LOOP LD DE,#2010 0715++ 862D 0A PD_LP2 LD A,(BC) 0716++ 862E 03 INC BC 0717++ 862F 83 ADD A,E 0718++ 8630 38 AA JR C,PD_OrSm 0719++ 8632 82 ADD A,D 0720++ 8633 28 49 JR Z,PD_FIN 0721++ 8635 38 AF JR C,PD_SAM 0722++ 8637 83 ADD A,E 0723++ 8638 28 25 JR Z,PD_REL 0724++ 863A 38 AF JR C,PD_VOL 0725++ 863C 83 ADD A,E 0726++ 863D 28 B5 JR Z,PD_EOff 0727++ 863F 38 BB JR C,PD_SorE 0728++ 8641 C6 60 ADD A,96 0729++ 8643 38 20 JR C,PD_NOTE 0730++ 8645 83 ADD A,E 0731++ 8646 38 C3 JR C,PD_ORN 0732++ 8648 82 ADD A,D 0733++ 8649 38 0F JR C,PD_NOIS 0734++ 864B 83 ADD A,E 0735++ 864C 38 C2 JR C,PD_ESAM 0736++ 864E 87 ADD A,A 0737++ 864F 5F LD E,A 0738++ 8650 21 DA 66 LD HL,(SPCCOMS+#FF20-#2000)&65535 0739++ 8653 19 ADD HL,DE 0740++ 8654 5E LD E,(HL) 0741++ 8655 23 INC HL 0742++ 8656 56 LD D,(HL) 0743++ 8657 D5 PUSH DE 0744++ 8658 18 D0 JR PD_LOOP 0745++ 865A 0746++ 865A FD 77 10 PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747++ 865D 18 CE JR PD_LP2 0748++ 865F 0749++ 865F DD CB 09 86 PD_REL RES 0,(IX-12+CHP.Flags) 0750++ 8663 18 08 JR PD_RES 0751++ 8665 0752++ 8665 DD 77 06 PD_NOTE LD (IX-12+CHP.Note),A 0753++ 8668 DD CB 09 C6 SET 0,(IX-12+CHP.Flags) 0754++ 866C AF XOR A 0755++ 866D 0756++ 866D ED 73 7C 86 PD_RES LD (PDSP_+1),SP 0757++ 8671 DD F9 LD SP,IX 0758++ 8673 67 LD H,A 0759++ 8674 6F LD L,A 0760++ 8675 E5 PUSH HL 0761++ 8676 E5 PUSH HL 0762++ 8677 E5 PUSH HL 0763++ 8678 E5 PUSH HL 0764++ 8679 E5 PUSH HL 0765++ 867A E5 PUSH HL 0766++ 867B 31 31 31 PDSP_ LD SP,#3131 0767++ 867E 0768++ 867E DD 7E 05 PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769++ 8681 DD 77 0F LD (IX-12+CHP.NtSkCn),A 0770++ 8684 C9 RET 0771++ 8685 0772++ 8685 0A C_PORTM LD A,(BC) 0773++ 8686 03 INC BC 0774++ 8687 ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775++ 8687 ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776++ 8687 03 INC BC 0777++ 8688 03 INC BC 0778++ 8689 08 EX AF,AF' 0779++ 868A 0A LD A,(BC) ;SIGNED TONE STEP 0780++ 868B 03 INC BC 0781++ 868C 32 DE 86 LD (LoStep),A 0782++ 868F 0A LD A,(BC) 0783++ 8690 03 INC BC 0784++ 8691 A7 AND A 0785++ 8692 08 EX AF,AF' 0786++ 8693 DD 6E FA LD L,(IX-12+CHP.CrTnSl) 0787++ 8696 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1) 0788++ 8699 0789++ 8699 ;Set portamento variables 0790++ 8699 ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791++ 8699 0792++ 8699 DD CB 09 96 SETPORT RES 2,(IX-12+CHP.Flags) 0793++ 869D DD 77 0A LD (IX-12+CHP.TnSlDl),A 0794++ 86A0 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0795++ 86A3 E5 PUSH HL 0796++ 86A4 11 6B 8D LD DE,NT_ 0797++ 86A7 DD 7E 06 LD A,(IX-12+CHP.Note) 0798++ 86AA DD 77 07 LD (IX-12+CHP.SlToNt),A 0799++ 86AD 87 ADD A,A 0800++ 86AE 6F LD L,A 0801++ 86AF 26 00 LD H,0 0802++ 86B1 19 ADD HL,DE 0803++ 86B2 7E LD A,(HL) 0804++ 86B3 23 INC HL 0805++ 86B4 66 LD H,(HL) 0806++ 86B5 6F LD L,A 0807++ 86B6 E5 PUSH HL 0808++ 86B7 3E 3E PrNote LD A,#3E 0809++ 86B9 DD 77 06 LD (IX-12+CHP.Note),A 0810++ 86BC 87 ADD A,A 0811++ 86BD 6F LD L,A 0812++ 86BE 26 00 LD H,0 0813++ 86C0 19 ADD HL,DE 0814++ 86C1 5E LD E,(HL) 0815++ 86C2 23 INC HL 0816++ 86C3 56 LD D,(HL) 0817++ 86C4 E1 POP HL 0818++ 86C5 ED 52 SBC HL,DE 0819++ 86C7 DD 75 0D LD (IX-12+CHP.TnDelt),L 0820++ 86CA DD 74 0E LD (IX-12+CHP.TnDelt+1),H 0821++ 86CD D1 POP DE 0822++ 86CE Version EQU $+1 0823++ 86CE 3E 3E LD A,#3E 0824++ 86D0 FE 06 CP 6 0825++ 86D2 38 09 JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826++ 86D4 11 11 11 PrSlide LD DE,#1111 0827++ 86D7 DD 73 FA LD (IX-12+CHP.CrTnSl),E 0828++ 86DA DD 72 FB LD (IX-12+CHP.CrTnSl+1),D 0829++ 86DD LoStep EQU $+1 0830++ 86DD 3E 3E OLDPRTM LD A,#3E 0831++ 86DF 08 EX AF,AF' 0832++ 86E0 28 01 JR Z,NOSIG 0833++ 86E2 EB EX DE,HL 0834++ 86E3 ED 52 NOSIG SBC HL,DE 0835++ 86E5 F2 ED 86 JP P,SET_STP 0836++ 86E8 2F CPL 0837++ 86E9 08 EX AF,AF' 0838++ 86EA ED 44 NEG 0839++ 86EC 08 EX AF,AF' 0840++ 86ED DD 77 0C SET_STP LD (IX-12+CHP.TSlStp+1),A 0841++ 86F0 08 EX AF,AF' 0842++ 86F1 DD 77 0B LD (IX-12+CHP.TSlStp),A 0843++ 86F4 DD 36 FE 00 LD (IX-12+CHP.COnOff),0 0844++ 86F8 C9 RET 0845++ 86F9 0846++ 86F9 DD CB 09 D6 C_GLISS SET 2,(IX-12+CHP.Flags) 0847++ 86FD 0A LD A,(BC) 0848++ 86FE 03 INC BC 0849++ 86FF DD 77 0A LD (IX-12+CHP.TnSlDl),A 0850++ 8702 A7 AND A 0851++ 8703 20 07 JR NZ,GL36 0852++ 8705 3A CF 86 LD A,(Version) ;AlCo PT3.7+ 0853++ 8708 FE 07 CP 7 0854++ 870A 9F SBC A,A 0855++ 870B 3C INC A 0856++ 870C DD 77 F9 GL36 LD (IX-12+CHP.TSlCnt),A 0857++ 870F 0A LD A,(BC) 0858++ 8710 03 INC BC 0859++ 8711 08 EX AF,AF' 0860++ 8712 0A LD A,(BC) 0861++ 8713 03 INC BC 0862++ 8714 18 D7 JR SET_STP 0863++ 8716 0864++ 8716 0A C_SMPOS LD A,(BC) 0865++ 8717 03 INC BC 0866++ 8718 DD 77 F5 LD (IX-12+CHP.PsInSm),A 0867++ 871B C9 RET 0868++ 871C 0869++ 871C 0A C_ORPOS LD A,(BC) 0870++ 871D 03 INC BC 0871++ 871E DD 77 F4 LD (IX-12+CHP.PsInOr),A 0872++ 8721 C9 RET 0873++ 8722 0874++ 8722 0A C_VIBRT LD A,(BC) 0875++ 8723 03 INC BC 0876++ 8724 DD 77 FF LD (IX-12+CHP.OnOffD),A 0877++ 8727 DD 77 FE LD (IX-12+CHP.COnOff),A 0878++ 872A 0A LD A,(BC) 0879++ 872B 03 INC BC 0880++ 872C DD 77 00 LD (IX-12+CHP.OffOnD),A 0881++ 872F AF XOR A 0882++ 8730 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0883++ 8733 DD 77 FA LD (IX-12+CHP.CrTnSl),A 0884++ 8736 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A 0885++ 8739 C9 RET 0886++ 873A 0887++ 873A 0A C_ENGLS LD A,(BC) 0888++ 873B 03 INC BC 0889++ 873C FD 77 0E LD (IY-100+VRS.Env_Del),A 0890++ 873F FD 77 0F LD (IY-100+VRS.CurEDel),A 0891++ 8742 0A LD A,(BC) 0892++ 8743 03 INC BC 0893++ 8744 6F LD L,A 0894++ 8745 0A LD A,(BC) 0895++ 8746 03 INC BC 0896++ 8747 67 LD H,A 0897++ 8748 FD 75 0A LD (IY-100+VRS.ESldAdd),L 0898++ 874B FD 74 0B LD (IY-100+VRS.ESldAdd+1),H 0899++ 874E C9 RET 0900++ 874F 0901++ 874F 0A C_DELAY LD A,(BC) 0902++ 8750 03 INC BC 0903++ 8751 FD 77 08 LD (IY-100+VRS.Delay),A 0904++ 8754 21 F6 8B LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905++ 8757 CB 4E BIT 1,(HL) 0906++ 8759 C8 RET Z 0907++ 875A 32 D9 8B LD (VARS1+VRS.Delay),A 0908++ 875D 32 DA 8B LD (VARS1+VRS.DelyCnt),A 0909++ 8760 32 60 8C LD (VARS2+VRS.Delay),A 0910++ 8763 C9 RET 0911++ 8764 0912++ 8764 DD 73 08 SETENV LD (IX-12+CHP.Env_En),E 0913++ 8767 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 0914++ 876A 0A LD A,(BC) 0915++ 876B 03 INC BC 0916++ 876C 67 LD H,A 0917++ 876D 0A LD A,(BC) 0918++ 876E 03 INC BC 0919++ 876F 6F LD L,A 0920++ 8770 CD ED 84 CALL SETENBS 0921++ 8773 AF XOR A 0922++ 8774 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0923++ 8777 FD 77 0F LD (IY-100+VRS.CurEDel),A 0924++ 877A 67 LD H,A 0925++ 877B 6F LD L,A 0926++ 877C C3 F4 84 JP SETESLD 0927++ 877F 0928++ 877F 87 SETORN ADD A,A 0929++ 8780 5F LD E,A 0930++ 8781 16 00 LD D,0 0931++ 8783 DD 72 F4 LD (IX-12+CHP.PsInOr),D 0932++ 8786 FD 6E F8 LD L,(IY-100+VRS.OrnPtrs) 0933++ 8789 FD 66 F9 LD H,(IY-100+VRS.OrnPtrs+1) 0934++ 878C 19 ADD HL,DE 0935++ 878D 5E LD E,(HL) 0936++ 878E 23 INC HL 0937++ 878F 56 LD D,(HL) 0938++ 8790 FD 6E F6 LD L,(IY-100+VRS.MODADDR) 0939++ 8793 FD 66 F7 LD H,(IY-100+VRS.MODADDR+1) 0940++ 8796 19 ADD HL,DE 0941++ 8797 DD 75 01 LD (IX-12+CHP.OrnPtr),L 0942++ 879A DD 74 02 LD (IX-12+CHP.OrnPtr+1),H 0943++ 879D C9 C_NOP RET 0944++ 879E 0945++ 879E 87 SETSAM ADD A,A 0946++ 879F 5F LD E,A 0947++ 87A0 16 00 LD D,0 0948++ 87A2 FD 6E FA LD L,(IY-100+VRS.SamPtrs); 0949++ 87A5 FD 66 FB LD H,(IY-100+VRS.SamPtrs+1); 0950++ 87A8 19 ADD HL,DE 0951++ 87A9 5E LD E,(HL) 0952++ 87AA 23 INC HL 0953++ 87AB 56 LD D,(HL) 0954++ 87AC FD 6E F6 LD L,(IY-100+VRS.MODADDR) 0955++ 87AF FD 66 F7 LD H,(IY-100+VRS.MODADDR+1) 0956++ 87B2 19 ADD HL,DE 0957++ 87B3 DD 75 03 LD (IX-12+CHP.SamPtr),L 0958++ 87B6 DD 74 04 LD (IX-12+CHP.SamPtr+1),H 0959++ 87B9 C9 RET 0960++ 87BA 0961++ 87BA ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962++ 87BA 9D 87 SPCCOMS DW C_NOP 0963++ 87BC F9 86 DW C_GLISS 0964++ 87BE 85 86 DW C_PORTM 0965++ 87C0 16 87 DW C_SMPOS 0966++ 87C2 1C 87 DW C_ORPOS 0967++ 87C4 22 87 DW C_VIBRT 0968++ 87C6 9D 87 DW C_NOP 0969++ 87C8 9D 87 DW C_NOP 0970++ 87CA 3A 87 DW C_ENGLS 0971++ 87CC 4F 87 DW C_DELAY 0972++ 87CE 9D 87 DW C_NOP 0973++ 87D0 9D 87 DW C_NOP 0974++ 87D2 9D 87 DW C_NOP 0975++ 87D4 9D 87 DW C_NOP 0976++ 87D6 9D 87 DW C_NOP 0977++ 87D8 9D 87 DW C_NOP 0978++ 87DA 0979++ 87DA CD FB 84 CHREGS CALL GETIX 0980++ 87DD AF XOR A 0981++ 87DE 32 17 8A LD (Ampl),A 0982++ 87E1 DD CB 15 46 BIT 0,(IX+CHP.Flags) 0983++ 87E5 E5 PUSH HL 0984++ 87E6 CA 2D 89 JP Z,CH_EXIT 0985++ 87E9 ED 73 77 88 LD (CSP_+1),SP 0986++ 87ED DD 6E 0D LD L,(IX+CHP.OrnPtr) 0987++ 87F0 DD 66 0E LD H,(IX+CHP.OrnPtr+1) 0988++ 87F3 F9 LD SP,HL 0989++ 87F4 D1 POP DE 0990++ 87F5 67 LD H,A 0991++ 87F6 DD 7E 00 LD A,(IX+CHP.PsInOr) 0992++ 87F9 6F LD L,A 0993++ 87FA 39 ADD HL,SP 0994++ 87FB 3C INC A 0995++ 87FC ;PT2 PT3 0996++ 87FC 3C OrnCP INC A ;CP E CP D 0997++ 87FD 38 01 JR C,CH_ORPS 0998++ 87FF 01 OrnLD DB 1 ;LD A,D LD A,E 0999++ 8800 DD 77 00 CH_ORPS LD (IX+CHP.PsInOr),A 1000++ 8803 DD 7E 12 LD A,(IX+CHP.Note) 1001++ 8806 86 ADD A,(HL) 1002++ 8807 F2 0B 88 JP P,CH_NTP 1003++ 880A AF XOR A 1004++ 880B FE 60 CH_NTP CP 96 1005++ 880D 38 02 JR C,CH_NOK 1006++ 880F 3E 5F LD A,95 1007++ 8811 87 CH_NOK ADD A,A 1008++ 8812 08 EX AF,AF' 1009++ 8813 DD 6E 0F LD L,(IX+CHP.SamPtr) 1010++ 8816 DD 66 10 LD H,(IX+CHP.SamPtr+1) 1011++ 8819 F9 LD SP,HL 1012++ 881A D1 POP DE 1013++ 881B 26 00 LD H,0 1014++ 881D DD 7E 01 LD A,(IX+CHP.PsInSm) 1015++ 8820 47 LD B,A 1016++ 8821 87 ADD A,A 1017++ 8822 87 SamClc2 ADD A,A ;or ADD A,B for PT2 1018++ 8823 6F LD L,A 1019++ 8824 39 ADD HL,SP 1020++ 8825 F9 LD SP,HL 1021++ 8826 78 LD A,B 1022++ 8827 3C INC A 1023++ 8828 ;PT2 PT3 1024++ 8828 3C SamCP INC A ;CP E CP D 1025++ 8829 38 01 JR C,CH_SMPS 1026++ 882B 01 SamLD DB 1 ;LD A,D LD A,E 1027++ 882C DD 77 01 CH_SMPS LD (IX+CHP.PsInSm),A 1028++ 882F C1 POP BC 1029++ 8830 E1 POP HL 1030++ 8831 1031++ 8831 ;Convert PT2 sample to PT3 1032++ 8831 ;PT2 PT3 1033++ 8831 E1 SamCnv POP HL ;BIT 2,C JR e_ 1034++ 8832 E1 POP HL 1035++ 8833 60 LD H,B 1036++ 8834 20 06 JR NZ,$+8 1037++ 8836 EB EX DE,HL 1038++ 8837 A7 AND A 1039++ 8838 ED 62 SBC HL,HL 1040++ 883A ED 52 SBC HL,DE 1041++ 883C 51 LD D,C 1042++ 883D CB 19 RR C 1043++ 883F 9F SBC A,A 1044++ 8840 2F CPL 1045++ 8841 E6 3E AND #3E 1046++ 8843 CB 19 RR C 1047++ 8845 CB 18 RR B 1048++ 8847 A1 AND C 1049++ 8848 4F LD C,A 1050++ 8849 78 LD A,B 1051++ 884A 1F RRA 1052++ 884B 1F RRA 1053++ 884C CB 1A RR D 1054++ 884E 1F RRA 1055++ 884F E6 9F AND #9F 1056++ 8851 47 LD B,A 1057++ 8852 1058++ 8852 DD 5E 08 e_ LD E,(IX+CHP.TnAcc) 1059++ 8855 DD 56 09 LD D,(IX+CHP.TnAcc+1) 1060++ 8858 19 ADD HL,DE 1061++ 8859 CB 70 BIT 6,B 1062++ 885B 28 06 JR Z,CH_NOAC 1063++ 885D DD 75 08 LD (IX+CHP.TnAcc),L 1064++ 8860 DD 74 09 LD (IX+CHP.TnAcc+1),H 1065++ 8863 EB CH_NOAC EX DE,HL 1066++ 8864 08 EX AF,AF' 1067++ 8865 C6 6B ADD A,NT_&255 1068++ 8867 6F LD L,A 1069++ 8868 CE 8D ADC A,NT_/256 1070++ 886A 95 SUB L 1071++ 886B 67 LD H,A 1072++ 886C F9 LD SP,HL 1073++ 886D E1 POP HL 1074++ 886E 19 ADD HL,DE 1075++ 886F DD 5E 06 LD E,(IX+CHP.CrTnSl) 1076++ 8872 DD 56 07 LD D,(IX+CHP.CrTnSl+1) 1077++ 8875 19 ADD HL,DE 1078++ 8876 31 31 31 CSP_ LD SP,#3131 1079++ 8879 E3 EX (SP),HL 1080++ 887A AF XOR A 1081++ 887B DD B6 05 OR (IX+CHP.TSlCnt) 1082++ 887E 28 3E JR Z,CH_AMP 1083++ 8880 DD 35 05 DEC (IX+CHP.TSlCnt) 1084++ 8883 20 39 JR NZ,CH_AMP 1085++ 8885 DD 7E 16 LD A,(IX+CHP.TnSlDl) 1086++ 8888 DD 77 05 LD (IX+CHP.TSlCnt),A 1087++ 888B DD 6E 17 LD L,(IX+CHP.TSlStp) 1088++ 888E DD 66 18 LD H,(IX+CHP.TSlStp+1) 1089++ 8891 7C LD A,H 1090++ 8892 19 ADD HL,DE 1091++ 8893 DD 75 06 LD (IX+CHP.CrTnSl),L 1092++ 8896 DD 74 07 LD (IX+CHP.CrTnSl+1),H 1093++ 8899 DD CB 15 56 BIT 2,(IX+CHP.Flags) 1094++ 889D 20 1F JR NZ,CH_AMP 1095++ 889F DD 5E 19 LD E,(IX+CHP.TnDelt) 1096++ 88A2 DD 56 1A LD D,(IX+CHP.TnDelt+1) 1097++ 88A5 A7 AND A 1098++ 88A6 28 01 JR Z,CH_STPP 1099++ 88A8 EB EX DE,HL 1100++ 88A9 ED 52 CH_STPP SBC HL,DE 1101++ 88AB FA BE 88 JP M,CH_AMP 1102++ 88AE DD 7E 13 LD A,(IX+CHP.SlToNt) 1103++ 88B1 DD 77 12 LD (IX+CHP.Note),A 1104++ 88B4 AF XOR A 1105++ 88B5 DD 77 05 LD (IX+CHP.TSlCnt),A 1106++ 88B8 DD 77 06 LD (IX+CHP.CrTnSl),A 1107++ 88BB DD 77 07 LD (IX+CHP.CrTnSl+1),A 1108++ 88BE DD 7E 02 CH_AMP LD A,(IX+CHP.CrAmSl) 1109++ 88C1 CB 79 BIT 7,C 1110++ 88C3 28 13 JR Z,CH_NOAM 1111++ 88C5 CB 71 BIT 6,C 1112++ 88C7 28 07 JR Z,CH_AMIN 1113++ 88C9 FE 0F CP 15 1114++ 88CB 28 0B JR Z,CH_NOAM 1115++ 88CD 3C INC A 1116++ 88CE 18 05 JR CH_SVAM 1117++ 88D0 FE F1 CH_AMIN CP -15 1118++ 88D2 28 04 JR Z,CH_NOAM 1119++ 88D4 3D DEC A 1120++ 88D5 DD 77 02 CH_SVAM LD (IX+CHP.CrAmSl),A 1121++ 88D8 6F CH_NOAM LD L,A 1122++ 88D9 78 LD A,B 1123++ 88DA E6 0F AND 15 1124++ 88DC 85 ADD A,L 1125++ 88DD F2 E1 88 JP P,CH_APOS 1126++ 88E0 AF XOR A 1127++ 88E1 FE 10 CH_APOS CP 16 1128++ 88E3 38 02 JR C,CH_VOL 1129++ 88E5 3E 0F LD A,15 1130++ 88E7 DD B6 1C CH_VOL OR (IX+CHP.Volume) 1131++ 88EA C6 6B ADD A,VT_&255 1132++ 88EC 6F LD L,A 1133++ 88ED CE 8C ADC A,VT_/256 1134++ 88EF 95 SUB L 1135++ 88F0 67 LD H,A 1136++ 88F1 7E LD A,(HL) 1137++ 88F2 CB 41 CH_ENV BIT 0,C 1138++ 88F4 20 03 JR NZ,CH_NOEN 1139++ 88F6 DD B6 14 OR (IX+CHP.Env_En) 1140++ 88F9 32 17 8A CH_NOEN LD (Ampl),A 1141++ 88FC CB 78 BIT 7,B 1142++ 88FE 79 LD A,C 1143++ 88FF 28 1A JR Z,NO_ENSL 1144++ 8901 17 RLA 1145++ 8902 17 RLA 1146++ 8903 CB 2F SRA A 1147++ 8905 CB 2F SRA A 1148++ 8907 CB 2F SRA A 1149++ 8909 DD 86 04 ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150++ 890C CB 68 BIT 5,B 1151++ 890E 28 03 JR Z,NO_ENAC 1152++ 8910 DD 77 04 LD (IX+CHP.CrEnSl),A 1153++ 8913 FD 86 12 NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154++ 8916 FD 77 12 LD (IY-100+VRS.AddToEn),A 1155++ 8919 18 0E JR CH_MIX 1156++ 891B 1F NO_ENSL RRA 1157++ 891C DD 86 03 ADD A,(IX+CHP.CrNsSl) 1158++ 891F FD 77 11 LD (IY-100+VRS.AddToNs),A 1159++ 8922 CB 68 BIT 5,B 1160++ 8924 28 03 JR Z,CH_MIX 1161++ 8926 DD 77 03 LD (IX+CHP.CrNsSl),A 1162++ 8929 78 CH_MIX LD A,B 1163++ 892A 1F RRA 1164++ 892B E6 48 AND #48 1165++ 892D FD B6 1C CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166++ 8930 0F RRCA 1167++ 8931 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A 1168++ 8934 E1 POP HL 1169++ 8935 AF XOR A 1170++ 8936 DD B6 0A OR (IX+CHP.COnOff) 1171++ 8939 C8 RET Z 1172++ 893A DD 35 0A DEC (IX+CHP.COnOff) 1173++ 893D C0 RET NZ 1174++ 893E DD AE 15 XOR (IX+CHP.Flags) 1175++ 8941 DD 77 15 LD (IX+CHP.Flags),A 1176++ 8944 1F RRA 1177++ 8945 DD 7E 0B LD A,(IX+CHP.OnOffD) 1178++ 8948 38 03 JR C,CH_ONDL 1179++ 894A DD 7E 0C LD A,(IX+CHP.OffOnD) 1180++ 894D DD 77 0A CH_ONDL LD (IX+CHP.COnOff),A 1181++ 8950 C9 RET 1182++ 8951 1183++ 8951 AF PLAY_ XOR A 1184++ 8952 FD 77 12 LD (IY-100+VRS.AddToEn),A 1185++ 8955 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A 1186++ 8958 3D DEC A 1187++ 8959 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 1188++ 895C FD 35 09 DEC (IY-100+VRS.DelyCnt) 1189++ 895F C2 04 8A JP NZ,PL2 1190++ 8962 FD 35 BA DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191++ 8965 20 69 JR NZ,PL1B 1192++ 8967 FD 4E FE LD C,(IY-100+VRS.AdInPtA) 1193++ 896A FD 46 FF LD B,(IY-100+VRS.AdInPtA+1) 1194++ 896D 0A LD A,(BC) 1195++ 896E A7 AND A 1196++ 896F 20 53 JR NZ,PL1A 1197++ 8971 57 LD D,A 1198++ 8972 FD 77 10 LD (IY-100+VRS.Ns_Base),A 1199++ 8975 FD 6E 04 LD L,(IY-100+VRS.CrPsPtr) 1200++ 8978 FD 66 05 LD H,(IY-100+VRS.CrPsPtr+1) 1201++ 897B 23 INC HL 1202++ 897C 7E LD A,(HL) 1203++ 897D 3C INC A 1204++ 897E 20 08 JR NZ,PLNLP 1205++ 8980 1206++ 8980 IF LoopChecker 1207++ 8980~ CALL CHECKLP 1208++ 8980 ENDIF 1209++ 8980 1210++ 8980 FD 6E 06 LD L,(IY-100+VRS.LPosPtr) 1211++ 8983 FD 66 07 LD H,(IY-100+VRS.LPosPtr+1) 1212++ 8986 7E LD A,(HL) 1213++ 8987 3C INC A 1214++ 8988 CD DF 84 PLNLP CALL SETCPPT 1215++ 898B 3D DEC A 1216++ 898C FD CB 9E 4E BIT 1,(IY-100+VRS.ModNum) 1217++ 8990 28 03 JR Z,NoAlCo 1218++ 8992 TSSub EQU $+1 1219++ 8992 D6 D6 SUB #D6 1220++ 8994 2F CPL 1221++ 8995 NoAlCo 1222++ 8995 ;PT2 PT3 1223++ 8995 3D PsCalc DEC A ;ADD A,A NOP 1224++ 8996 3D DEC A ;ADD A,(HL) NOP 1225++ 8997 87 ADD A,A 1226++ 8998 5F LD E,A 1227++ 8999 CB 12 RL D 1228++ 899B 1229++ 899B IF CurPosCounter 1230++ 899B~ LD A,L 1231++ 899B~ SUB (IY-100+VRS.PosSub) 1232++ 899B~ LD (IY-100+VRS.CurPos),A 1233++ 899B ENDIF 1234++ 899B 1235++ 899B FD 6E FC LD L,(IY-100+VRS.PatsPtr) 1236++ 899E FD 66 FD LD H,(IY-100+VRS.PatsPtr+1) 1237++ 89A1 19 ADD HL,DE 1238++ 89A2 FD 5E F6 LD E,(IY-100+VRS.MODADDR) 1239++ 89A5 FD 56 F7 LD D,(IY-100+VRS.MODADDR+1) 1240++ 89A8 ED 73 C2 89 LD (PSP_+1),SP 1241++ 89AC F9 LD SP,HL 1242++ 89AD E1 POP HL 1243++ 89AE 19 ADD HL,DE 1244++ 89AF 44 LD B,H 1245++ 89B0 4D LD C,L 1246++ 89B1 E1 POP HL 1247++ 89B2 19 ADD HL,DE 1248++ 89B3 FD 75 00 LD (IY-100+VRS.AdInPtB),L 1249++ 89B6 FD 74 01 LD (IY-100+VRS.AdInPtB+1),H 1250++ 89B9 E1 POP HL 1251++ 89BA 19 ADD HL,DE 1252++ 89BB FD 75 02 LD (IY-100+VRS.AdInPtC),L 1253++ 89BE FD 74 03 LD (IY-100+VRS.AdInPtC+1),H 1254++ 89C1 31 31 31 PSP_ LD SP,#3131 1255++ 89C4 11 AB FF PL1A LD DE,VRS.ChanA+12-100 1256++ 89C7 CD 02 85 CALL PTDECOD 1257++ 89CA FD 71 FE LD (IY-100+VRS.AdInPtA),C 1258++ 89CD FD 70 FF LD (IY-100+VRS.AdInPtA+1),B 1259++ 89D0 1260++ 89D0 FD 35 D7 PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261++ 89D3 20 12 JR NZ,PL1C 1262++ 89D5 11 C8 FF LD DE,VRS.ChanB+12-100 1263++ 89D8 FD 4E 00 LD C,(IY-100+VRS.AdInPtB) 1264++ 89DB FD 46 01 LD B,(IY-100+VRS.AdInPtB+1) 1265++ 89DE CD 02 85 CALL PTDECOD 1266++ 89E1 FD 71 00 LD (IY-100+VRS.AdInPtB),C 1267++ 89E4 FD 70 01 LD (IY-100+VRS.AdInPtB+1),B 1268++ 89E7 1269++ 89E7 FD 35 F4 PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270++ 89EA 20 12 JR NZ,PL1D 1271++ 89EC 11 E5 FF LD DE,VRS.ChanC+12-100 1272++ 89EF FD 4E 02 LD C,(IY-100+VRS.AdInPtC) 1273++ 89F2 FD 46 03 LD B,(IY-100+VRS.AdInPtC+1) 1274++ 89F5 CD 02 85 CALL PTDECOD 1275++ 89F8 FD 71 02 LD (IY-100+VRS.AdInPtC),C 1276++ 89FB FD 70 03 LD (IY-100+VRS.AdInPtC+1),B 1277++ 89FE 1278++ 89FE FD 7E 08 PL1D LD A,(IY-100+VRS.Delay) 1279++ 8A01 FD 77 09 LD (IY-100+VRS.DelyCnt),A 1280++ 8A04 1281++ 8A04 11 9F FF PL2 LD DE,VRS.ChanA-100 1282++ 8A07 FD 6E 15 LD L,(IY-100+VRS.AYREGS+TonA) 1283++ 8A0A FD 66 16 LD H,(IY-100+VRS.AYREGS+TonA+1) 1284++ 8A0D CD DA 87 CALL CHREGS 1285++ 8A10 FD 75 15 LD (IY-100+VRS.AYREGS+TonA),L 1286++ 8A13 FD 74 16 LD (IY-100+VRS.AYREGS+TonA+1),H 1287++ 8A16 Ampl EQU $+1 1288++ 8A16 3E 3E LD A,#3E 1289++ 8A18 FD 77 1D LD (IY-100+VRS.AYREGS+AmplA),A 1290++ 8A1B 11 BC FF LD DE,VRS.ChanB-100 1291++ 8A1E FD 6E 17 LD L,(IY-100+VRS.AYREGS+TonB) 1292++ 8A21 FD 66 18 LD H,(IY-100+VRS.AYREGS+TonB+1) 1293++ 8A24 CD DA 87 CALL CHREGS 1294++ 8A27 FD 75 17 LD (IY-100+VRS.AYREGS+TonB),L 1295++ 8A2A FD 74 18 LD (IY-100+VRS.AYREGS+TonB+1),H 1296++ 8A2D 3A 17 8A LD A,(Ampl) 1297++ 8A30 FD 77 1E LD (IY-100+VRS.AYREGS+AmplB),A 1298++ 8A33 11 D9 FF LD DE,VRS.ChanC-100 1299++ 8A36 FD 6E 19 LD L,(IY-100+VRS.AYREGS+TonC) 1300++ 8A39 FD 66 1A LD H,(IY-100+VRS.AYREGS+TonC+1) 1301++ 8A3C CD DA 87 CALL CHREGS 1302++ 8A3F FD 75 19 LD (IY-100+VRS.AYREGS+TonC),L 1303++ 8A42 FD 74 1A LD (IY-100+VRS.AYREGS+TonC+1),H 1304++ 8A45 3A 17 8A LD A,(Ampl) 1305++ 8A48 FD 77 1F LD (IY-100+VRS.AYREGS+AmplC),A 1306++ 8A4B 1307++ 8A4B FD 7E 10 LD A,(IY-100+VRS.Ns_Base) 1308++ 8A4E FD 86 11 ADD (IY-100+VRS.AddToNs) 1309++ 8A51 FD 77 1B LD (IY-100+VRS.AYREGS+Noise),A 1310++ 8A54 1311++ 8A54 FD 7E 12 LD A,(IY-100+VRS.AddToEn) 1312++ 8A57 5F LD E,A 1313++ 8A58 87 ADD A,A 1314++ 8A59 9F SBC A,A 1315++ 8A5A 57 LD D,A 1316++ 8A5B FD 6E 13 LD L,(IY-100+VRS.EnvBase) 1317++ 8A5E FD 66 14 LD H,(IY-100+VRS.EnvBase+1) 1318++ 8A61 19 ADD HL,DE 1319++ 8A62 FD 5E 0C LD E,(IY-100+VRS.CurESld) 1320++ 8A65 FD 56 0D LD D,(IY-100+VRS.CurESld+1) 1321++ 8A68 19 ADD HL,DE 1322++ 8A69 FD 75 20 LD (IY-100+VRS.AYREGS+Env),L 1323++ 8A6C FD 74 21 LD (IY-100+VRS.AYREGS+Env+1),H 1324++ 8A6F 1325++ 8A6F AF XOR A 1326++ 8A70 FD B6 0F OR (IY-100+VRS.CurEDel) 1327++ 8A73 C8 RET Z 1328++ 8A74 FD 35 0F DEC (IY-100+VRS.CurEDel) 1329++ 8A77 C0 RET NZ 1330++ 8A78 FD 7E 0E LD A,(IY-100+VRS.Env_Del) 1331++ 8A7B FD 77 0F LD (IY-100+VRS.CurEDel),A 1332++ 8A7E FD 6E 0A LD L,(IY-100+VRS.ESldAdd) 1333++ 8A81 FD 66 0B LD H,(IY-100+VRS.ESldAdd+1) 1334++ 8A84 19 ADD HL,DE 1335++ 8A85 C3 F4 84 JP SETESLD 1336++ 8A88 1337++ 8A88 FD 21 D1 8B PLAY LD IY,VARS1+100 1338++ 8A8C CD 51 89 CALL PLAY_ 1339++ 8A8F 3A 6C 8B LD A,(is_ts) 1340++ 8A92 A7 AND A 1341++ 8A93 28 07 JR Z,PL_nts 1342++ 8A95 FD 21 58 8C LD IY,VARS2+100 1343++ 8A99 CD 51 89 CALL PLAY_ 1344++ 8A9C PL_nts 1345++ 8A9C IF Basic 1346++ 8A9C~ LD IY,#5C3A 1347++ 8A9C ENDIF 1348++ 8A9C 1349++ 8A9C 01 FD FF ROUT LD BC,#FFFD 1350++ 8A9F 3A 6C 8B LD A,(is_ts) 1351++ 8AA2 A7 AND A 1352++ 8AA3 IFDEF ONtfm 1353++ 8AA3 2E F9 LD L,#F9 1354++ 8AA5 ED 69 OUT (C),L 1355++ 8AA7 ELSE 1356++ 8AA7~ JR Z,r_nts ;keep old standard 1357++ 8AA7~ OUT (C),B 1358++ 8AA7 ENDIF 1359++ 8AA7 08 r_nts EX AF,AF' 1360++ 8AA8 1361++ 8AA8 IF ACBBAC 1362++ 8AA8~ LD IX,VARS1+VRS.AYREGS 1363++ 8AA8 ELSE 1364++ 8AA8 21 E6 8B LD HL,VARS1+VRS.AYREGS 1365++ 8AAB ENDIF 1366++ 8AAB 1367++ 8AAB CD B8 8A CALL ROUT_ 1368++ 8AAE 08 EX AF,AF' 1369++ 8AAF C8 RET Z 1370++ 8AB0 42 LD B,D 1371++ 8AB1 1372++ 8AB1 IFDEF ONtfm 1373++ 8AB1 3E F8 LD A,#F8 1374++ 8AB3 ELSE 1375++ 8AB3~ CPL 1376++ 8AB3 ENDIF 1377++ 8AB3 ED 79 OUT (C),A 1378++ 8AB5 1379++ 8AB5 IF ACBBAC 1380++ 8AB5~ LD IX,VARS2+VRS.AYREGS 1381++ 8AB5 ELSE 1382++ 8AB5 21 6D 8C LD HL,VARS2+VRS.AYREGS 1383++ 8AB8 ENDIF 1384++ 8AB8 1385++ 8AB8 ROUT_ 1386++ 8AB8 IF ACBBAC 1387++ 8AB8~ LD A,(SETUP) 1388++ 8AB8~ AND 12 1389++ 8AB8~ JR Z,ABC 1390++ 8AB8~ ADD A,CHTABLE 1391++ 8AB8~ LD E,A 1392++ 8AB8~ ADC A,CHTABLE/256 1393++ 8AB8~ SUB E 1394++ 8AB8~ LD D,A 1395++ 8AB8~ LD B,0 1396++ 8AB8~ PUSH IX 1397++ 8AB8~ POP HL 1398++ 8AB8~ LD A,(DE) 1399++ 8AB8~ INC DE 1400++ 8AB8~ LD C,A 1401++ 8AB8~ ADD HL,BC 1402++ 8AB8~ LD A,(IX+TonB) 1403++ 8AB8~ LD C,(HL) 1404++ 8AB8~ LD (IX+TonB),C 1405++ 8AB8~ LD (HL),A 1406++ 8AB8~ INC HL 1407++ 8AB8~ LD A,(IX+TonB+1) 1408++ 8AB8~ LD C,(HL) 1409++ 8AB8~ LD (IX+TonB+1),C 1410++ 8AB8~ LD (HL),A 1411++ 8AB8~ LD A,(DE) 1412++ 8AB8~ INC DE 1413++ 8AB8~ LD C,A 1414++ 8AB8~ ADD HL,BC 1415++ 8AB8~ LD A,(IX+AmplB) 1416++ 8AB8~ LD C,(HL) 1417++ 8AB8~ LD (IX+AmplB),C 1418++ 8AB8~ LD (HL),A 1419++ 8AB8~ LD A,(DE) 1420++ 8AB8~ INC DE 1421++ 8AB8~ LD (RxCA1),A 1422++ 8AB8~ XOR 8 1423++ 8AB8~ LD (RxCA2),A 1424++ 8AB8~ LD A,(DE) 1425++ 8AB8~ AND (IX+Mixer) 1426++ 8AB8~ LD E,A 1427++ 8AB8~ LD A,(IX+Mixer) 1428++ 8AB8~ RxCA1 DB #E6 1429++ 8AB8~ AND %010010 1430++ 8AB8~ OR E 1431++ 8AB8~ LD E,A 1432++ 8AB8~ LD A,(IX+Mixer) 1433++ 8AB8~ AND %010010 1434++ 8AB8~ RxCA2 OR E 1435++ 8AB8~ OR E 1436++ 8AB8~ LD (IX+Mixer),A 1437++ 8AB8~ ABC 1438++ 8AB8 ENDIF 1439++ 8AB8 1440++ 8AB8 AF XOR A 1441++ 8AB9 11 BF FF LD DE,#FFBF 1442++ 8ABC 1443++ 8ABC IF ACBBAC 1444++ 8ABC~ LD BC,#FFFD 1445++ 8ABC~ PUSH IX 1446++ 8ABC~ POP HL 1447++ 8ABC ENDIF 1448++ 8ABC 1449++ 8ABC LOUT 1450++ 8ABC IFDEF ONtfm 1451++ 8ABC ED 70 INF 1452++ 8ABE FA BC 8A JP M,$-2 1453++ 8AC1 ENDIF 1454++ 8AC1 ED 79 OUT (C),A 1455++ 8AC3 IFDEF ONtfm 1456++ 8AC3 ED 70 INF 1457++ 8AC5 FA C3 8A JP M,$-2 1458++ 8AC8 ENDIF 1459++ 8AC8 43 LD B,E 1460++ 8AC9 ED A3 OUTI 1461++ 8ACB 42 LD B,D 1462++ 8ACC 3C INC A 1463++ 8ACD FE 0D CP 13 1464++ 8ACF 20 EB JR NZ,LOUT 1465++ 8AD1 IFDEF ONtfm 1466++ 8AD1 ED 70 INF 1467++ 8AD3 FA D1 8A JP M,$-2 1468++ 8AD6 ENDIF 1469++ 8AD6 ED 79 OUT (C),A 1470++ 8AD8 7E LD A,(HL) 1471++ 8AD9 A7 AND A 1472++ 8ADA F8 RET M 1473++ 8ADB IFDEF ONtfm 1474++ 8ADB ED 70 INF 1475++ 8ADD FA DB 8A JP M,$-2 1476++ 8AE0 ENDIF 1477++ 8AE0 43 LD B,E 1478++ 8AE1 ED 79 OUT (C),A 1479++ 8AE3 C9 RET 1480++ 8AE4 1481++ 8AE4 IF ACBBAC 1482++ 8AE4~ CHTABLE EQU $-4 1483++ 8AE4~ DB 4,5,15,%001001,0,7,7,%100100 1484++ 8AE4 ENDIF 1485++ 8AE4 1486++ 8AE4 64 NT_DATA DB (T_NEW_0-T1_)*2 1487++ 8AE5 2A DB TCNEW_0-T_ 1488++ 8AE6 65 DB (T_OLD_0-T1_)*2+1 1489++ 8AE7 00 DB TCOLD_0-T_ 1490++ 8AE8 01 DB (T_NEW_1-T1_)*2+1 1491++ 8AE9 0C DB TCNEW_1-T_ 1492++ 8AEA 01 DB (T_OLD_1-T1_)*2+1 1493++ 8AEB 0C DB TCOLD_1-T_ 1494++ 8AEC 94 DB (T_NEW_2-T1_)*2 1495++ 8AED 35 DB TCNEW_2-T_ 1496++ 8AEE 30 DB (T_OLD_2-T1_)*2 1497++ 8AEF 0E DB TCOLD_2-T_ 1498++ 8AF0 60 DB (T_NEW_3-T1_)*2 1499++ 8AF1 20 DB TCNEW_3-T_ 1500++ 8AF2 60 DB (T_OLD_3-T1_)*2 1501++ 8AF3 21 DB TCOLD_3-T_ 1502++ 8AF4 1503++ 8AF4 T_ 1504++ 8AF4 1505++ 8AF4 TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1505++ 8AF4 0105090B0D0F1315 1506++ 8AFC 19 25 3D 00 DB #18+1,#24+1,#3C+1,0 1507++ 8B00 5D 00 TCOLD_1 DB #5C+1,0 1508++ 8B02 TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1508++ 8B02 31374D535F71828C9C 1509++ 8B0B DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1509++ 8B0B 9EA0A6A8AAACAEAE00 1510++ 8B14 57 TCNEW_3 DB #56+1 1511++ 8B15 TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1511++ 8B15 1F2325292D2F33BF00 1512++ 8B1E TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1512++ 8B1E 1D2123272B2D3155 1513++ 8B26 BD BF 00 DB #BC+1,#BE+1,0 1514++ 8B29 TCNEW_1 EQU TCOLD_1 1515++ 8B29 TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1515++ 8B29 1B2125292B3B4D5F 1516++ 8B31 BB BD BF 00 DB #BA+1,#BC+1,#BE+1,0 1517++ 8B35 1518++ 8B35 PT3EMPTYORN EQU $-1 1519++ 8B35 01 00 DB 1,0 1520++ 8B37 1521++ 8B37 ;first 12 values of tone tables (packed) 1522++ 8B37 1523++ 8B37 0D D8 T_PACK DB #06EC*2/256,#06EC*2&255 1524++ 8B39 69 DB #0755-#06EC 1525++ 8B3A 70 DB #07C5-#0755 1526++ 8B3B 76 DB #083B-#07C5 1527++ 8B3C 7D DB #08B8-#083B 1528++ 8B3D 85 DB #093D-#08B8 1529++ 8B3E 8D DB #09CA-#093D 1530++ 8B3F 95 DB #0A5F-#09CA 1531++ 8B40 9D DB #0AFC-#0A5F 1532++ 8B41 A8 DB #0BA4-#0AFC 1533++ 8B42 B1 DB #0C55-#0BA4 1534++ 8B43 BB DB #0D10-#0C55 1535++ 8B44 0C DA DB #066D*2/256,#066D*2&255 1536++ 8B46 62 DB #06CF-#066D 1537++ 8B47 68 DB #0737-#06CF 1538++ 8B48 6D DB #07A4-#0737 1539++ 8B49 75 DB #0819-#07A4 1540++ 8B4A 7B DB #0894-#0819 1541++ 8B4B 83 DB #0917-#0894 1542++ 8B4C 8A DB #09A1-#0917 1543++ 8B4D 92 DB #0A33-#09A1 1544++ 8B4E 9C DB #0ACF-#0A33 1545++ 8B4F A4 DB #0B73-#0ACF 1546++ 8B50 AF DB #0C22-#0B73 1547++ 8B51 B8 DB #0CDA-#0C22 1548++ 8B52 0E 08 DB #0704*2/256,#0704*2&255 1549++ 8B54 6A DB #076E-#0704 1550++ 8B55 72 DB #07E0-#076E 1551++ 8B56 78 DB #0858-#07E0 1552++ 8B57 7E DB #08D6-#0858 1553++ 8B58 86 DB #095C-#08D6 1554++ 8B59 90 DB #09EC-#095C 1555++ 8B5A 96 DB #0A82-#09EC 1556++ 8B5B A0 DB #0B22-#0A82 1557++ 8B5C AA DB #0BCC-#0B22 1558++ 8B5D B4 DB #0C80-#0BCC 1559++ 8B5E BE DB #0D3E-#0C80 1560++ 8B5F 0F C0 DB #07E0*2/256,#07E0*2&255 1561++ 8B61 78 DB #0858-#07E0 1562++ 8B62 88 DB #08E0-#0858 1563++ 8B63 80 DB #0960-#08E0 1564++ 8B64 90 DB #09F0-#0960 1565++ 8B65 98 DB #0A88-#09F0 1566++ 8B66 A0 DB #0B28-#0A88 1567++ 8B67 B0 DB #0BD8-#0B28 1568++ 8B68 A8 DB #0C80-#0BD8 1569++ 8B69 E0 DB #0D60-#0C80 1570++ 8B6A B0 DB #0E10-#0D60 1571++ 8B6B E8 DB #0EF8-#0E10 1572++ 8B6C 1573++ 8B6C ;vars from here can be stripped 1574++ 8B6C ;you can move VARS to any other address 1575++ 8B6C 1576++ 8B6C VARS 1577++ 8B6C 1578++ 8B6C 00 is_ts DB 0 1579++ 8B6D 1580++ 8B6D ;ChannelsVars 1581++ 8B6D STRUCT CHP 1582++ 8B6D~ ;reset group 1583++ 8B6D~ PsInOr DB 0 1584++ 8B6D~ PsInSm DB 0 1585++ 8B6D~ CrAmSl DB 0 1586++ 8B6D~ CrNsSl DB 0 1587++ 8B6D~ CrEnSl DB 0 1588++ 8B6D~ TSlCnt DB 0 1589++ 8B6D~ CrTnSl DW 0 1590++ 8B6D~ TnAcc DW 0 1591++ 8B6D~ COnOff DB 0 1592++ 8B6D~ ;reset group 1593++ 8B6D~ 1594++ 8B6D~ OnOffD DB 0 1595++ 8B6D~ 1596++ 8B6D~ ;IX for PTDECOD here (+12) 1597++ 8B6D~ OffOnD DB 0 1598++ 8B6D~ OrnPtr DW 0 1599++ 8B6D~ SamPtr DW 0 1600++ 8B6D~ NNtSkp DB 0 1601++ 8B6D~ Note DB 0 1602++ 8B6D~ SlToNt DB 0 1603++ 8B6D~ Env_En DB 0 1604++ 8B6D~ Flags DB 0 1605++ 8B6D~ ;Enabled - 0, SimpleGliss - 2 1606++ 8B6D~ TnSlDl DB 0 1607++ 8B6D~ TSlStp DW 0 1608++ 8B6D~ TnDelt DW 0 1609++ 8B6D~ NtSkCn DB 0 1610++ 8B6D~ Volume DB 0 1611++ 8B6D ENDS 1612++ 8B6D 1613++ 8B6D STRUCT VRS 1614++ 8B6D~ 1615++ 8B6D~ ;IF not works in STRUCT in SjASM :( 1616++ 8B6D~ ; IF CurPosCounter 1617++ 8B6D~ CurPos DB 0 1618++ 8B6D~ PosSub DB 0 1619++ 8B6D~ ; ENDIF 1620++ 8B6D~ 1621++ 8B6D~ ModNum DB 0 ;bit0: ChipNum 1622++ 8B6D~ ;bit1: 1-reversed patterns order (AlCo TS) 1623++ 8B6D~ 1624++ 8B6D~ ChanA DS CHP 1625++ 8B6D~ ChanB DS CHP 1626++ 8B6D~ ChanC DS CHP 1627++ 8B6D~ 1628++ 8B6D~ ;GlobalVars 1629++ 8B6D~ MODADDR DW 0 1630++ 8B6D~ OrnPtrs DW 0 1631++ 8B6D~ SamPtrs DW 0 1632++ 8B6D~ PatsPtr DW 0 1633++ 8B6D~ AdInPtA DW 0 1634++ 8B6D~ AdInPtB DW 0 1635++ 8B6D~ AdInPtC DW 0 1636++ 8B6D~ CrPsPtr DW 0 1637++ 8B6D~ LPosPtr DW 0 1638++ 8B6D~ Delay DB 0 1639++ 8B6D~ DelyCnt DB 0 1640++ 8B6D~ ESldAdd DW 0 1641++ 8B6D~ CurESld DW 0 1642++ 8B6D~ Env_Del DB 0 1643++ 8B6D~ CurEDel DB 0 1644++ 8B6D~ Ns_Base DB 0 1645++ 8B6D~ AddToNs DB 0 1646++ 8B6D~ AddToEn DB 0 1647++ 8B6D~ EnvBase DW 0 1648++ 8B6D~ AYREGS DS 14 1649++ 8B6D ENDS 1650++ 8B6D 1651++ 8B6D 00 VARS1 DS VRS 1652++ 8BF4 00 VARS2 DS VRS 1653++ 8C7B 1654++ 8C7B VT_ EQU $-16 1655++ 8C7B 00 DS 256-16 ;CreatedVolumeTableAddress 1656++ 8D6B 1657++ 8D6B T1_ EQU VT_+16 ;Tone tables data depacked here 1658++ 8D6B 1659++ 8D6B T_OLD_1 EQU T1_ 1660++ 8D6B T_OLD_2 EQU T_OLD_1+24 1661++ 8D6B T_OLD_3 EQU T_OLD_2+24 1662++ 8D6B T_OLD_0 EQU T_OLD_3+2 1663++ 8D6B T_NEW_0 EQU T_OLD_0 1664++ 8D6B T_NEW_1 EQU T_OLD_1 1665++ 8D6B T_NEW_2 EQU T_NEW_0+24 1666++ 8D6B T_NEW_3 EQU T_OLD_3 1667++ 8D6B 1668++ 8D6B PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669++ 8D6B 1670++ 8D6B 00 NT_ DS 192 ;CreatedNoteTableAddress 1671++ 8E2B 1672++ 8E2B VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673++ 8E2B 1674++ 8E2B VARSEND EQU $ 1675++ 8E2B MDLADDR EQU $ 1676++ 8E2B 1677++ 8E2B DISPLAY "PTS player size=",$-START 1678++ 8E2B 1679++ 8E2B ;Release 0 steps: 1680++ 8E2B ;04/21/2007 1681++ 8E2B ;Works start (PTxPlay adaptation); first beta. 1682++ 8E2B ;04/22/2007 1683++ 8E2B ;Job finished; beta-testing. 1684++ 8E2B ;04/23/2007 1685++ 8E2B ;PT v3.7 TS mode corrected (after AlCo remarks). 1686++ 8E2B ;04/29/2007 1687++ 8E2B ;Added 1.XX and 2.XX special commands interpretation for PT3 1688++ 8E2B ;modules of v3.7+. 1689++ 8E2B 1690++ 8E2B ;Size (minimal build for ZX Spectrum): 1691++ 8E2B ;Code block #908 bytes 1692++ 8E2B ;Variables #2BF bytes (can be stripped) 1693++ 8E2B ;Total size #908+#2BF=#BC7 (3015) bytes 1694++ 8E2B 1695++ 8E2B ENDMOD 1696++ 8E2B 1697++ 8E2B endif 1698++ 8E2B 0418+ 8E2B include "pt3.asm" 0001++ 8E2B ifndef _pt3_asm_defined 0002++ 8E2B define _pt3_asm_defined 0003++ 8E2B 0004++ 8E2B module PT3 0005++ 8E2B 0006++ 8E2B struct Header 0007++ 8E2B~ Id ds 13 ; usually 'Protracker 3.' 0008++ 8E2B~ Subversion 0009++ 8E2B~ db 0 0010++ 8E2B~ Description 0011++ 8E2B~ ds 84 ; usually ' compilation of ' + Name[32] + ' by ' + Author[32] 0012++ 8E2B~ Mode db 0 0013++ 8E2B~ FreqTable 0014++ 8E2B~ db 0 ;assume 0..04 0015++ 8E2B~ Tempo db 0 ;01-ff 0016++ 8E2B~ Length db 0 0017++ 8E2B~ Loop db 0 0018++ 8E2B~ Patterns 0019++ 8E2B~ dw 0 ;? 00-01 0020++ 8E2B~ Samples 0021++ 8E2B~ ds 64 ;(? 00-bf}{32} 0022++ 8E2B~ Ornaments 0023++ 8E2B~ ds 32 ;(? 00-d9){16} 0024++ 8E2B~ Positions 0025++ 8E2B~ db 0 ;*3&00-fe 0026++ 8E2B~ db 0 ;*3|ff 0027++ 8E2B ends 0028++ 8E2B 0029++ 8E2B Start 0030++ 8E2B ifndef NoPrologue 0031++ 8E2B~ ld hl,End 0032++ 8E2B~ jr Init 0033++ 8E2B~ jp PTS.PLAY 0034++ 8E2B~ jp PTS.MUTE 0035++ 8E2B endif 0036++ 8E2B 0037++ 8E2B 3E 20 Init ld a,PTS.SETUP.TSPT3 0038++ 8E2D C3 6C 82 jp PTS.INIT 0039++ 8E30 0040++ 8E30 ifdef HaveFormatCheck 0041++ 8E30 include "format.asm" 0001+++8E30 ;some format checking macros 0002+++8E30 ifndef _format_asm_defined 0003+++8E30 define _format_asm_defined 0004+++8E30 0005+++8E30 macro LessOrEqual number 0006+++8E30~ ld a,number 0007+++8E30~ cp (hl) 0008+++8E30~ inc hl 0009+++8E30~ ret c 0010+++8E30 endm 0011+++8E30 0012+++8E30 macro Greater number 0013+++8E30~ ld a,(hl) 0014+++8E30~ inc hl 0015+++8E30~ cp number 0016+++8E30~ ret c 0017+++8E30 endm 0018+++8E30 0019+++8E30 macro AnyByte 0020+++8E30~ inc hl 0021+++8E30 endm 0022+++8E30 0023+++8E30 macro AnyBytes count 0024+++8E30~ if count > 7 0025+++8E30~ ld a,l 0026+++8E30~ add a,count 0027+++8E30~ ld l,a 0028+++8E30~ adc a,h 0029+++8E30~ sub l 0030+++8E30~ ld h,a 0031+++8E30~ else 0032+++8E30~ dup count 0033+++8E30~ inc hl 0034+++8E30~ edup 0035+++8E30~ endif 0036+++8E30 endm 0037+++8E30 0038+++8E30 macro EqualTo number 0039+++8E30~ ld a,number 0040+++8E30~ cp (hl) 0041+++8E30~ inc hl 0042+++8E30~ ret nz 0043+++8E30 endm 0044+++8E30 0045+++8E30 endif 0046+++8E30 0042++ 8E30 0043++ 8E30 ;in HL - module addr 0044++ 8E30 ;out Z - is pt3 0045++ 8E30 CheckFormat 0046++ 8E30 ; meta 0047++ 8E30 AnyBytes Header.FreqTable 0047++ 8E30 7D > ld a,l 0047++ 8E31 C6 63 > add a,count 0047++ 8E33 6F > ld l,a 0047++ 8E34 8C > adc a,h 0047++ 8E35 95 > sub l 0047++ 8E36 67 > ld h,a 0048++ 8E37 ;FreqTable 0049++ 8E37 LessOrEqual 4 0049++ 8E37 3E 04 > ld a,number 0049++ 8E39 BE > cp (hl) 0049++ 8E3A 23 > inc hl 0049++ 8E3B D8 > ret c 0050++ 8E3C ;Tempo 0051++ 8E3C Greater 1 0051++ 8E3C 7E > ld a,(hl) 0051++ 8E3D 23 > inc hl 0051++ 8E3E FE 01 > cp number 0051++ 8E40 D8 > ret c 0052++ 8E41 ;Length 0053++ 8E41 AnyByte 0053++ 8E41 23 > inc hl 0054++ 8E42 ;Loop 0055++ 8E42 AnyByte 0055++ 8E42 23 > inc hl 0056++ 8E43 ;Patterns 0057++ 8E43 AnyByte 0057++ 8E43 23 > inc hl 0058++ 8E44 LessOrEqual 1 0058++ 8E44 3E 01 > ld a,number 0058++ 8E46 BE > cp (hl) 0058++ 8E47 23 > inc hl 0058++ 8E48 D8 > ret c 0059++ 8E49 ;Samples 0060++ 8E49 06 20 ld b,(Header.Ornaments-Header.Samples)/2 0061++ 8E4B .samples 0062++ 8E4B AnyByte 0062++ 8E4B 23 > inc hl 0063++ 8E4C LessOrEqual #bf 0063++ 8E4C 3E BF > ld a,number 0063++ 8E4E BE > cp (hl) 0063++ 8E4F 23 > inc hl 0063++ 8E50 D8 > ret c 0064++ 8E51 10 F8 djnz .samples 0065++ 8E53 ;Ornaments 0066++ 8E53 06 10 ld b,(Header.Positions-Header.Ornaments)/2 0067++ 8E55 .ornaments 0068++ 8E55 AnyByte 0068++ 8E55 23 > inc hl 0069++ 8E56 LessOrEqual #d9 0069++ 8E56 3E D9 > ld a,number 0069++ 8E58 BE > cp (hl) 0069++ 8E59 23 > inc hl 0069++ 8E5A D8 > ret c 0070++ 8E5B 10 F8 djnz .ornaments 0071++ 8E5D ;Positions 0072++ 8E5D ;255 at first position is denied 0073++ 8E5D LessOrEqual 254 0073++ 8E5D 3E FE > ld a,number 0073++ 8E5F BE > cp (hl) 0073++ 8E60 23 > inc hl 0073++ 8E61 D8 > ret c 0074++ 8E62 06 00 ld b,0 0075++ 8E64 2B dec hl 0076++ 8E65 .positions 0077++ 8E65 7E ld a,(hl) 0078++ 8E66 23 inc hl 0079++ 8E67 FE FF cp 255 0080++ 8E69 C8 ret z ;finish 0081++ 8E6A ;check is multiple of 3 0082++ 8E6A A7 .div3 and a 0083++ 8E6B 28 05 jr z,.posok 0084++ 8E6D D6 03 sub 3 0085++ 8E6F D8 ret c 0086++ 8E70 20 F8 jr nz,.div3 0087++ 8E72 10 F1 .posok djnz .positions 0088++ 8E74 ;fall through 0089++ 8E74 7C .fail ld a,h 0090++ 8E75 A7 and a ;reset Z 0091++ 8E76 C9 ret 0092++ 8E77 0093++ 8E77 display "PT3 checker size: ",$-CheckFormat 0094++ 8E77 endif 0095++ 8E77 0096++ 8E77 endmod 0097++ 8E77 0098++ 8E77 include "PTSPlay.asm" 0001+++8E77 ifndef _pts_asm_defined 0002+++8E77~ define _pts_asm_defined 0003+++8E77~ 0004+++8E77~ MODULE PTS 0005+++8E77~ 0006+++8E77~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8E77~ ;(c)2004-2007 S.V.Bulba 0008+++8E77~ ;Specially for AlCo 0009+++8E77~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8E77~ 0011+++8E77~ ;Release number 0012+++8E77~ Release EQU "0" 0013+++8E77~ 0014+++8E77~ ;Conditional assembly 0015+++8E77~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8E77~ CurPosCounter=0 0017+++8E77~ ;2) Allow channels allocation bits at (SETUP) 0018+++8E77~ ACBBAC=0 0019+++8E77~ ;3) Allow loop checking and disabling 0020+++8E77~ LoopChecker=0 0021+++8E77~ ;4) Insert official identificator 0022+++8E77~ Id=0 0023+++8E77~ ;5) Set IY for correct return to ZX Basic 0024+++8E77~ Basic=0 0025+++8E77~ 0026+++8E77~ ;Features 0027+++8E77~ ;-------- 0028+++8E77~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8E77~ ; address). 0030+++8E77~ ;-Variables (VARS) can be located at any address (not only after 0031+++8E77~ ; code block). 0032+++8E77~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8E77~ ; generates both note and volume tables outside of code block 0034+++8E77~ ; (in VARS). 0035+++8E77~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8E77~ ; PT3 module version). 0037+++8E77~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8E77~ ; and higher). 0039+++8E77~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8E77~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8E77~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8E77~ ;-See also notes at the end of this source code. 0043+++8E77~ 0044+++8E77~ ;Limitations 0045+++8E77~ ;----------- 0046+++8E77~ ;-Can run in RAM only (self-modified code is used). 0047+++8E77~ ;-PT2 position list must be end by #FF marker only. 0048+++8E77~ 0049+++8E77~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8E77~ ;into RAM or INIT subprogram was not called before. 0051+++8E77~ 0052+++8E77~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8E77~ ;playing 0054+++8E77~ 0055+++8E77~ TonA EQU 0 0056+++8E77~ TonB EQU 2 0057+++8E77~ TonC EQU 4 0058+++8E77~ Noise EQU 6 0059+++8E77~ Mixer EQU 7 0060+++8E77~ AmplA EQU 8 0061+++8E77~ AmplB EQU 9 0062+++8E77~ AmplC EQU 10 0063+++8E77~ Env EQU 11 0064+++8E77~ EnvTp EQU 13 0065+++8E77~ 0066+++8E77~ START 0067+++8E77~ 0068+++8E77~ SETUP.NOLOOP EQU 1 0069+++8E77~ SETUP.PT2 EQU 2 0070+++8E77~ SETUP.ACB EQU 4 0071+++8E77~ SETUP.BAC EQU 8 0072+++8E77~ SETUP.TS02 EQU 16 0073+++8E77~ SETUP.TSPT3 EQU 32 0074+++8E77~ 0075+++8E77~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8E77~ ;(optional); 0077+++8E77~ ;set bit1 for PT2 and reset for PT3 before 0078+++8E77~ ;calling INIT; 0079+++8E77~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8E77~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8E77~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8E77~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8E77~ ;documented and must be converted to new standard. 0084+++8E77~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8E77~ ;module is passed (optional). 0086+++8E77~ ;bit7 is set each time, when loop point of 1st TS 0087+++8E77~ ;or of single module is passed (optional). 0088+++8E77~ 0089+++8E77~ ;Identifier 0090+++8E77~ IF Id 0091+++8E77~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8E77~ ENDIF 0093+++8E77~ 0094+++8E77~ IF LoopChecker 0095+++8E77~ CHECKLP LD HL,SETUP 0096+++8E77~ BIT 0,(IY-100+VRS.ModNum) 0097+++8E77~ JR Z,CHL1 0098+++8E77~ SET 6,(HL) 0099+++8E77~ JR CHL2 0100+++8E77~ CHL1 SET 7,(HL) 0101+++8E77~ CHL2 BIT 0,(HL) 0102+++8E77~ RET Z 0103+++8E77~ POP HL 0104+++8E77~ INC (IY-100+VRS.DelyCnt) 0105+++8E77~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8E77~ XOR A 0107+++8E77~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8E77~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8E77~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8E77~ RET 0111+++8E77~ ENDIF 0112+++8E77~ 0113+++8E77~ MUTE XOR A 0114+++8E77~ LD H,A 0115+++8E77~ LD L,A 0116+++8E77~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8E77~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8E77~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8E77~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8E77~ JP ROUT 0121+++8E77~ 0122+++8E77~ INIT 0123+++8E77~ ;HL - AddressOfModule 0124+++8E77~ ;DE - AddresOf2ndModule 0125+++8E77~ ;A - mode 0126+++8E77~ PUSH DE 0127+++8E77~ PUSH HL 0128+++8E77~ LD HL,VARS 0129+++8E77~ LD (HL),0 0130+++8E77~ LD DE,VARS+1 0131+++8E77~ LD BC,VAR0END-VARS-1 0132+++8E77~ LDIR 0133+++8E77~ INC HL 0134+++8E77~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8E77~ LD (VARS2+VRS.AdInPtA),HL 0136+++8E77~ 0137+++8E77~ POP HL 0138+++8E77~ LD IY,VARS1+100 0139+++8E77~ LD (SETUP),A 0140+++8E77~ AND SETUP.PT2 0141+++8E77~ JP NZ,I_PT2 0142+++8E77~ 0143+++8E77~ CALL INITPT3 0144+++8E77~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8E77~ LD (SamCnv),HL 0146+++8E77~ LD A,#BA 0147+++8E77~ LD (OrnCP),A 0148+++8E77~ LD (SamCP),A 0149+++8E77~ LD A,#7B 0150+++8E77~ LD (OrnLD),A 0151+++8E77~ LD (SamLD),A 0152+++8E77~ LD A,#87 0153+++8E77~ LD (SamClc2),A 0154+++8E77~ POP HL 0155+++8E77~ ;Use version and ton table of 1st module 0156+++8E77~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8E77~ SUB #30 0158+++8E77~ JR C,L20 0159+++8E77~ CP 10 0160+++8E77~ JR C,L21 0161+++8E77~ L20 LD A,6 0162+++8E77~ L21 LD (Version),A 0163+++8E77~ PUSH AF ;VolTable version 0164+++8E77~ CP 4 0165+++8E77~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8E77~ RLA 0167+++8E77~ AND 7 0168+++8E77~ PUSH AF ;NoteTable number 0169+++8E77~ 0170+++8E77~ LD IY,VARS2+100 0171+++8E77~ LD A,(SETUP) 0172+++8E77~ AND SETUP.TS02|SETUP.TSPT3 0173+++8E77~ JR Z,NOTS 0174+++8E77~ CP SETUP.TS02 0175+++8E77~ JR Z,TwoPT3s 0176+++8E77~ LD A,(Version) 0177+++8E77~ CP 7 0178+++8E77~ JR C,NOTS 0179+++8E77~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8E77~ CP #20 0181+++8E77~ JR Z,NOTS 0182+++8E77~ LD HL,VARS1 0183+++8E77~ LD DE,VARS2 0184+++8E77~ LD BC,VRS 0185+++8E77~ LDIR 0186+++8E77~ SET 1,(IY-100+VRS.ModNum) 0187+++8E77~ LD C,A 0188+++8E77~ ADD A,A 0189+++8E77~ ADD A,C 0190+++8E77~ SUB 2 0191+++8E77~ LD (TSSub),A 0192+++8E77~ JR AlCoTS_ 0193+++8E77~ TwoPT3s CALL INITPT3 0194+++8E77~ AlCoTS_ LD A,1 0195+++8E77~ LD (is_ts),A 0196+++8E77~ SET 0,(IY-100+VRS.ModNum) 0197+++8E77~ 0198+++8E77~ NOTS LD BC,PT3PD 0199+++8E77~ LD HL,0 0200+++8E77~ LD DE,PT3EMPTYORN 0201+++8E77~ JR INITCOMMON 0202+++8E77~ 0203+++8E77~ I_PT2 CALL INITPT2 0204+++8E77~ LD HL,#51CB 0205+++8E77~ LD (SamCnv),HL 0206+++8E77~ LD A,#BB 0207+++8E77~ LD (OrnCP),A 0208+++8E77~ LD (SamCP),A 0209+++8E77~ LD A,#7A 0210+++8E77~ LD (OrnLD),A 0211+++8E77~ LD (SamLD),A 0212+++8E77~ LD A,#80 0213+++8E77~ LD (SamClc2),A 0214+++8E77~ POP HL 0215+++8E77~ LD A,5 0216+++8E77~ LD (Version),A 0217+++8E77~ PUSH AF 0218+++8E77~ LD A,2 0219+++8E77~ PUSH AF 0220+++8E77~ 0221+++8E77~ LD A,(SETUP) 0222+++8E77~ AND SETUP.TS02|SETUP.TSPT3 0223+++8E77~ JR Z,NOTS2 0224+++8E77~ 0225+++8E77~ LD IY,VARS2+100 0226+++8E77~ LD A,1 0227+++8E77~ LD (is_ts),A 0228+++8E77~ SET 0,(IY-100+VRS.ModNum) 0229+++8E77~ CALL INITPT2 0230+++8E77~ 0231+++8E77~ NOTS2 LD BC,PT2PD 0232+++8E77~ LD HL,#8687 0233+++8E77~ LD DE,PT2EMPTYORN 0234+++8E77~ 0235+++8E77~ INITCOMMON 0236+++8E77~ 0237+++8E77~ IF Basic 0238+++8E77~ LD IY,#5C3A 0239+++8E77~ ENDIF 0240+++8E77~ 0241+++8E77~ LD (PTDEC),BC 0242+++8E77~ LD (PsCalc),HL 0243+++8E77~ PUSH DE 0244+++8E77~ 0245+++8E77~ ;note table data depacker 0246+++8E77~ ;(c) Ivan Roshin 0247+++8E77~ LD DE,T_PACK 0248+++8E77~ LD BC,T1_+(2*49)-1 0249+++8E77~ TP_0 LD A,(DE) 0250+++8E77~ INC DE 0251+++8E77~ CP 15*2 0252+++8E77~ JR NC,TP_1 0253+++8E77~ LD H,A 0254+++8E77~ LD A,(DE) 0255+++8E77~ LD L,A 0256+++8E77~ INC DE 0257+++8E77~ JR TP_2 0258+++8E77~ TP_1 PUSH DE 0259+++8E77~ LD D,0 0260+++8E77~ LD E,A 0261+++8E77~ ADD HL,DE 0262+++8E77~ ADD HL,DE 0263+++8E77~ POP DE 0264+++8E77~ TP_2 LD A,H 0265+++8E77~ LD (BC),A 0266+++8E77~ DEC BC 0267+++8E77~ LD A,L 0268+++8E77~ LD (BC),A 0269+++8E77~ DEC BC 0270+++8E77~ SUB (#F8*2)&255 0271+++8E77~ JR NZ,TP_0 0272+++8E77~ 0273+++8E77~ INC A 0274+++8E77~ LD (VARS1+VRS.DelyCnt),A 0275+++8E77~ LD (VARS2+VRS.DelyCnt),A 0276+++8E77~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8E77~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8E77~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8E77~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8E77~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8E77~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8E77~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8E77~ POP HL 0284+++8E77~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8E77~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8E77~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8E77~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8E77~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8E77~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8E77~ 0291+++8E77~ POP AF 0292+++8E77~ 0293+++8E77~ ;NoteTableCreator (c) Ivan Roshin 0294+++8E77~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8E77~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8E77~ 0297+++8E77~ LD HL,NT_DATA 0298+++8E77~ LD D,0 0299+++8E77~ ADD A,A 0300+++8E77~ LD E,A 0301+++8E77~ ADD HL,DE 0302+++8E77~ LD E,(HL) 0303+++8E77~ INC HL 0304+++8E77~ SRL E 0305+++8E77~ SBC A,A 0306+++8E77~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8E77~ LD (L3),A 0308+++8E77~ EX DE,HL 0309+++8E77~ LD BC,T1_ 0310+++8E77~ ADD HL,BC 0311+++8E77~ 0312+++8E77~ LD A,(DE) 0313+++8E77~ ADD A,T_&255 0314+++8E77~ LD C,A 0315+++8E77~ ADC A,T_/256 0316+++8E77~ SUB C 0317+++8E77~ LD B,A 0318+++8E77~ PUSH BC 0319+++8E77~ LD DE,NT_ 0320+++8E77~ PUSH DE 0321+++8E77~ 0322+++8E77~ LD B,12 0323+++8E77~ L1 PUSH BC 0324+++8E77~ LD C,(HL) 0325+++8E77~ INC HL 0326+++8E77~ PUSH HL 0327+++8E77~ LD B,(HL) 0328+++8E77~ 0329+++8E77~ PUSH DE 0330+++8E77~ EX DE,HL 0331+++8E77~ LD DE,23 0332+++8E77~ LD IXH,8 0333+++8E77~ 0334+++8E77~ L2 SRL B 0335+++8E77~ RR C 0336+++8E77~ L3 DB #19 ;AND A or NOP 0337+++8E77~ LD A,C 0338+++8E77~ ADC A,D ;=ADC 0 0339+++8E77~ LD (HL),A 0340+++8E77~ INC HL 0341+++8E77~ LD A,B 0342+++8E77~ ADC A,D 0343+++8E77~ LD (HL),A 0344+++8E77~ ADD HL,DE 0345+++8E77~ DEC IXH 0346+++8E77~ JR NZ,L2 0347+++8E77~ 0348+++8E77~ POP DE 0349+++8E77~ INC DE 0350+++8E77~ INC DE 0351+++8E77~ POP HL 0352+++8E77~ INC HL 0353+++8E77~ POP BC 0354+++8E77~ DJNZ L1 0355+++8E77~ 0356+++8E77~ POP HL 0357+++8E77~ POP DE 0358+++8E77~ 0359+++8E77~ LD A,E 0360+++8E77~ CP TCOLD_1&255 0361+++8E77~ JR NZ,CORR_1 0362+++8E77~ LD A,#FD 0363+++8E77~ LD (NT_+#2E),A 0364+++8E77~ 0365+++8E77~ CORR_1 LD A,(DE) 0366+++8E77~ AND A 0367+++8E77~ JR Z,TC_EXIT 0368+++8E77~ RRA 0369+++8E77~ PUSH AF 0370+++8E77~ ADD A,A 0371+++8E77~ LD C,A 0372+++8E77~ ADD HL,BC 0373+++8E77~ POP AF 0374+++8E77~ JR NC,CORR_2 0375+++8E77~ DEC (HL) 0376+++8E77~ DEC (HL) 0377+++8E77~ CORR_2 INC (HL) 0378+++8E77~ AND A 0379+++8E77~ SBC HL,BC 0380+++8E77~ INC DE 0381+++8E77~ JR CORR_1 0382+++8E77~ 0383+++8E77~ TC_EXIT 0384+++8E77~ 0385+++8E77~ POP AF 0386+++8E77~ 0387+++8E77~ ;VolTableCreator (c) Ivan Roshin 0388+++8E77~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8E77~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8E77~ 0391+++8E77~ CP 5 0392+++8E77~ LD HL,#11 0393+++8E77~ LD D,H 0394+++8E77~ LD E,H 0395+++8E77~ LD A,#17 0396+++8E77~ JR NC,M1 0397+++8E77~ DEC L 0398+++8E77~ LD E,L 0399+++8E77~ XOR A 0400+++8E77~ M1 LD (M2),A 0401+++8E77~ 0402+++8E77~ LD IX,VT_+16 0403+++8E77~ 0404+++8E77~ LD C,#F 0405+++8E77~ INITV2 PUSH HL 0406+++8E77~ 0407+++8E77~ ADD HL,DE 0408+++8E77~ EX DE,HL 0409+++8E77~ SBC HL,HL 0410+++8E77~ 0411+++8E77~ LD B,#10 0412+++8E77~ INITV1 LD A,L 0413+++8E77~ M2 DB #7D 0414+++8E77~ LD A,H 0415+++8E77~ ADC A,0 0416+++8E77~ LD (IX),A 0417+++8E77~ INC IX 0418+++8E77~ ADD HL,DE 0419+++8E77~ DJNZ INITV1 0420+++8E77~ 0421+++8E77~ POP HL 0422+++8E77~ LD A,E 0423+++8E77~ CP #77 0424+++8E77~ JR NZ,M3 0425+++8E77~ INC E 0426+++8E77~ M3 DEC C 0427+++8E77~ JR NZ,INITV2 0428+++8E77~ 0429+++8E77~ JP ROUT 0430+++8E77~ 0431+++8E77~ INITPT3 CALL SETMDAD 0432+++8E77~ PUSH HL 0433+++8E77~ LD DE,100 0434+++8E77~ ADD HL,DE 0435+++8E77~ LD A,(HL) 0436+++8E77~ LD (IY-100+VRS.Delay),A 0437+++8E77~ PUSH HL 0438+++8E77~ POP IX 0439+++8E77~ ADD HL,DE 0440+++8E77~ CALL SETCPPT 0441+++8E77~ LD E,(IX+102-100) 0442+++8E77~ INC HL 0443+++8E77~ 0444+++8E77~ IF CurPosCounter 0445+++8E77~ LD (IY-100+VRS.PosSub),L 0446+++8E77~ ENDIF 0447+++8E77~ 0448+++8E77~ ADD HL,DE 0449+++8E77~ CALL SETLPPT 0450+++8E77~ POP DE 0451+++8E77~ LD L,(IX+103-100) 0452+++8E77~ LD H,(IX+104-100) 0453+++8E77~ ADD HL,DE 0454+++8E77~ CALL SETPTPT 0455+++8E77~ LD HL,169 0456+++8E77~ ADD HL,DE 0457+++8E77~ CALL SETORPT 0458+++8E77~ LD HL,105 0459+++8E77~ ADD HL,DE 0460+++8E77~ 0461+++8E77~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8E77~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8E77~ RET 0464+++8E77~ 0465+++8E77~ INITPT2 LD A,(HL) 0466+++8E77~ LD (IY-100+VRS.Delay),A 0467+++8E77~ PUSH HL 0468+++8E77~ PUSH HL 0469+++8E77~ PUSH HL 0470+++8E77~ INC HL 0471+++8E77~ INC HL 0472+++8E77~ LD A,(HL) 0473+++8E77~ INC HL 0474+++8E77~ CALL SETSMPT 0475+++8E77~ LD E,(HL) 0476+++8E77~ INC HL 0477+++8E77~ LD D,(HL) 0478+++8E77~ POP HL 0479+++8E77~ AND A 0480+++8E77~ SBC HL,DE 0481+++8E77~ CALL SETMDAD 0482+++8E77~ POP HL 0483+++8E77~ LD DE,67 0484+++8E77~ ADD HL,DE 0485+++8E77~ CALL SETORPT 0486+++8E77~ LD E,32 0487+++8E77~ ADD HL,DE 0488+++8E77~ LD C,(HL) 0489+++8E77~ INC HL 0490+++8E77~ LD B,(HL) 0491+++8E77~ LD E,30 0492+++8E77~ ADD HL,DE 0493+++8E77~ CALL SETCPPT 0494+++8E77~ LD E,A 0495+++8E77~ INC HL 0496+++8E77~ 0497+++8E77~ IF CurPosCounter 0498+++8E77~ LD (IY-100+VRS.PosSub),L 0499+++8E77~ ENDIF 0500+++8E77~ 0501+++8E77~ ADD HL,DE 0502+++8E77~ CALL SETLPPT 0503+++8E77~ POP HL 0504+++8E77~ ADD HL,BC 0505+++8E77~ 0506+++8E77~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8E77~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8E77~ RET 0509+++8E77~ 0510+++8E77~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8E77~ LD (IY-100+VRS.MODADDR+1),H 0512+++8E77~ RET 0513+++8E77~ 0514+++8E77~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8E77~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8E77~ RET 0517+++8E77~ 0518+++8E77~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8E77~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8E77~ RET 0521+++8E77~ 0522+++8E77~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8E77~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8E77~ RET 0525+++8E77~ 0526+++8E77~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8E77~ LD (IY-100+VRS.EnvBase+1),H 0528+++8E77~ RET 0529+++8E77~ 0530+++8E77~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8E77~ LD (IY-100+VRS.CurESld+1),H 0532+++8E77~ RET 0533+++8E77~ 0534+++8E77~ GETIX PUSH IY 0535+++8E77~ POP IX 0536+++8E77~ ADD IX,DE 0537+++8E77~ RET 0538+++8E77~ 0539+++8E77~ PTDECOD CALL GETIX 0540+++8E77~ PTDEC EQU $+1 0541+++8E77~ JP #C3C3 0542+++8E77~ 0543+++8E77~ ;PT2 pattern decoder 0544+++8E77~ PD2_SAM CALL SETSAM 0545+++8E77~ JR PD2_LOOP 0546+++8E77~ 0547+++8E77~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8E77~ JR PD2_LOOP 0549+++8E77~ 0550+++8E77~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8E77~ LD A,(BC) 0553+++8E77~ INC BC 0554+++8E77~ LD L,A 0555+++8E77~ LD A,(BC) 0556+++8E77~ INC BC 0557+++8E77~ LD H,A 0558+++8E77~ CALL SETENBS 0559+++8E77~ JR PD2_LOOP 0560+++8E77~ 0561+++8E77~ PD2_ORN CALL SETORN 0562+++8E77~ JR PD2_LOOP 0563+++8E77~ 0564+++8E77~ PD2_SKIP INC A 0565+++8E77~ LD (IX-12+CHP.NNtSkp),A 0566+++8E77~ JR PD2_LOOP 0567+++8E77~ 0568+++8E77~ PD2_VOL RRCA 0569+++8E77~ RRCA 0570+++8E77~ RRCA 0571+++8E77~ RRCA 0572+++8E77~ LD (IX-12+CHP.Volume),A 0573+++8E77~ JR PD2_LOOP 0574+++8E77~ 0575+++8E77~ PD2_DEL CALL C_DELAY 0576+++8E77~ JR PD2_LOOP 0577+++8E77~ 0578+++8E77~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8E77~ INC A 0580+++8E77~ LD (IX-12+CHP.TnSlDl),A 0581+++8E77~ LD (IX-12+CHP.TSlCnt),A 0582+++8E77~ LD A,(BC) 0583+++8E77~ INC BC 0584+++8E77~ LD (IX-12+CHP.TSlStp),A 0585+++8E77~ ADD A,A 0586+++8E77~ SBC A,A 0587+++8E77~ LD (IX-12+CHP.TSlStp+1),A 0588+++8E77~ SCF 0589+++8E77~ JR PD2_LP2 0590+++8E77~ 0591+++8E77~ PT2PD AND A 0592+++8E77~ 0593+++8E77~ PD2_LP2 EX AF,AF' 0594+++8E77~ 0595+++8E77~ PD2_LOOP LD A,(BC) 0596+++8E77~ INC BC 0597+++8E77~ ADD A,#20 0598+++8E77~ JR Z,PD2_REL 0599+++8E77~ JR C,PD2_SAM 0600+++8E77~ ADD A,96 0601+++8E77~ JR C,PD2_NOTE 0602+++8E77~ INC A 0603+++8E77~ JR Z,PD2_EOff 0604+++8E77~ ADD A,15 0605+++8E77~ JP Z,PD_FIN 0606+++8E77~ JR C,PD2_ENV 0607+++8E77~ ADD A,#10 0608+++8E77~ JR C,PD2_ORN 0609+++8E77~ ADD A,#40 0610+++8E77~ JR C,PD2_SKIP 0611+++8E77~ ADD A,#10 0612+++8E77~ JR C,PD2_VOL 0613+++8E77~ INC A 0614+++8E77~ JR Z,PD2_DEL 0615+++8E77~ INC A 0616+++8E77~ JR Z,PD2_GLIS 0617+++8E77~ INC A 0618+++8E77~ JR Z,PD2_PORT 0619+++8E77~ INC A 0620+++8E77~ JR Z,PD2_STOP 0621+++8E77~ LD A,(BC) 0622+++8E77~ INC BC 0623+++8E77~ LD (IX-12+CHP.CrNsSl),A 0624+++8E77~ JR PD2_LOOP 0625+++8E77~ 0626+++8E77~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8E77~ LD A,(BC) 0628+++8E77~ INC BC 0629+++8E77~ INC BC ;ignoring precalc delta to right sound 0630+++8E77~ INC BC 0631+++8E77~ SCF 0632+++8E77~ JR PD2_LP2 0633+++8E77~ 0634+++8E77~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8E77~ JR PD2_LOOP 0636+++8E77~ 0637+++8E77~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8E77~ JR PD2_EXIT 0639+++8E77~ 0640+++8E77~ PD2_NOTE LD L,A 0641+++8E77~ LD A,(IX-12+CHP.Note) 0642+++8E77~ LD (PrNote+1),A 0643+++8E77~ LD (IX-12+CHP.Note),L 0644+++8E77~ XOR A 0645+++8E77~ LD (IX-12+CHP.TSlCnt),A 0646+++8E77~ SET 0,(IX-12+CHP.Flags) 0647+++8E77~ EX AF,AF' 0648+++8E77~ JR NC,NOGLIS2 0649+++8E77~ BIT 2,(IX-12+CHP.Flags) 0650+++8E77~ JR NZ,NOPORT2 0651+++8E77~ LD (LoStep),A 0652+++8E77~ ADD A,A 0653+++8E77~ SBC A,A 0654+++8E77~ EX AF,AF' 0655+++8E77~ LD H,A 0656+++8E77~ LD L,A 0657+++8E77~ INC A 0658+++8E77~ CALL SETPORT 0659+++8E77~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8E77~ NOGLIS2 XOR A 0661+++8E77~ 0662+++8E77~ 0663+++8E77~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8E77~ LD (IX-12+CHP.PsInOr),A 0665+++8E77~ LD (IX-12+CHP.CrTnSl),A 0666+++8E77~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8E77~ JP PD_FIN 0668+++8E77~ 0669+++8E77~ ;PT3 pattern decoder 0670+++8E77~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8E77~ CALL SETORN 0672+++8E77~ PD_SAM_ LD A,(BC) 0673+++8E77~ INC BC 0674+++8E77~ RRCA 0675+++8E77~ 0676+++8E77~ PD_SAM CALL SETSAM 0677+++8E77~ JR PD_LOOP 0678+++8E77~ 0679+++8E77~ PD_VOL RRCA 0680+++8E77~ RRCA 0681+++8E77~ RRCA 0682+++8E77~ RRCA 0683+++8E77~ LD (IX-12+CHP.Volume),A 0684+++8E77~ JR PD_LP2 0685+++8E77~ 0686+++8E77~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8E77~ LD (IX-12+CHP.PsInOr),A 0688+++8E77~ JR PD_LP2 0689+++8E77~ 0690+++8E77~ PD_SorE DEC A 0691+++8E77~ JR NZ,PD_ENV 0692+++8E77~ LD A,(BC) 0693+++8E77~ INC BC 0694+++8E77~ LD (IX-12+CHP.NNtSkp),A 0695+++8E77~ JR PD_LP2 0696+++8E77~ 0697+++8E77~ PD_ENV CALL SETENV 0698+++8E77~ JR PD_LP2 0699+++8E77~ 0700+++8E77~ PD_ORN CALL SETORN 0701+++8E77~ JR PD_LOOP 0702+++8E77~ 0703+++8E77~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8E77~ LD (IX-12+CHP.PsInOr),A 0705+++8E77~ CALL NZ,SETENV 0706+++8E77~ JR PD_SAM_ 0707+++8E77~ 0708+++8E77~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8E77~ LD (PrNote+1),A 0710+++8E77~ LD L,(IX-12+CHP.CrTnSl) 0711+++8E77~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8E77~ LD (PrSlide+1),HL 0713+++8E77~ 0714+++8E77~ PD_LOOP LD DE,#2010 0715+++8E77~ PD_LP2 LD A,(BC) 0716+++8E77~ INC BC 0717+++8E77~ ADD A,E 0718+++8E77~ JR C,PD_OrSm 0719+++8E77~ ADD A,D 0720+++8E77~ JR Z,PD_FIN 0721+++8E77~ JR C,PD_SAM 0722+++8E77~ ADD A,E 0723+++8E77~ JR Z,PD_REL 0724+++8E77~ JR C,PD_VOL 0725+++8E77~ ADD A,E 0726+++8E77~ JR Z,PD_EOff 0727+++8E77~ JR C,PD_SorE 0728+++8E77~ ADD A,96 0729+++8E77~ JR C,PD_NOTE 0730+++8E77~ ADD A,E 0731+++8E77~ JR C,PD_ORN 0732+++8E77~ ADD A,D 0733+++8E77~ JR C,PD_NOIS 0734+++8E77~ ADD A,E 0735+++8E77~ JR C,PD_ESAM 0736+++8E77~ ADD A,A 0737+++8E77~ LD E,A 0738+++8E77~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8E77~ ADD HL,DE 0740+++8E77~ LD E,(HL) 0741+++8E77~ INC HL 0742+++8E77~ LD D,(HL) 0743+++8E77~ PUSH DE 0744+++8E77~ JR PD_LOOP 0745+++8E77~ 0746+++8E77~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8E77~ JR PD_LP2 0748+++8E77~ 0749+++8E77~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8E77~ JR PD_RES 0751+++8E77~ 0752+++8E77~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8E77~ SET 0,(IX-12+CHP.Flags) 0754+++8E77~ XOR A 0755+++8E77~ 0756+++8E77~ PD_RES LD (PDSP_+1),SP 0757+++8E77~ LD SP,IX 0758+++8E77~ LD H,A 0759+++8E77~ LD L,A 0760+++8E77~ PUSH HL 0761+++8E77~ PUSH HL 0762+++8E77~ PUSH HL 0763+++8E77~ PUSH HL 0764+++8E77~ PUSH HL 0765+++8E77~ PUSH HL 0766+++8E77~ PDSP_ LD SP,#3131 0767+++8E77~ 0768+++8E77~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8E77~ LD (IX-12+CHP.NtSkCn),A 0770+++8E77~ RET 0771+++8E77~ 0772+++8E77~ C_PORTM LD A,(BC) 0773+++8E77~ INC BC 0774+++8E77~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8E77~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8E77~ INC BC 0777+++8E77~ INC BC 0778+++8E77~ EX AF,AF' 0779+++8E77~ LD A,(BC) ;SIGNED TONE STEP 0780+++8E77~ INC BC 0781+++8E77~ LD (LoStep),A 0782+++8E77~ LD A,(BC) 0783+++8E77~ INC BC 0784+++8E77~ AND A 0785+++8E77~ EX AF,AF' 0786+++8E77~ LD L,(IX-12+CHP.CrTnSl) 0787+++8E77~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8E77~ 0789+++8E77~ ;Set portamento variables 0790+++8E77~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8E77~ 0792+++8E77~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8E77~ LD (IX-12+CHP.TnSlDl),A 0794+++8E77~ LD (IX-12+CHP.TSlCnt),A 0795+++8E77~ PUSH HL 0796+++8E77~ LD DE,NT_ 0797+++8E77~ LD A,(IX-12+CHP.Note) 0798+++8E77~ LD (IX-12+CHP.SlToNt),A 0799+++8E77~ ADD A,A 0800+++8E77~ LD L,A 0801+++8E77~ LD H,0 0802+++8E77~ ADD HL,DE 0803+++8E77~ LD A,(HL) 0804+++8E77~ INC HL 0805+++8E77~ LD H,(HL) 0806+++8E77~ LD L,A 0807+++8E77~ PUSH HL 0808+++8E77~ PrNote LD A,#3E 0809+++8E77~ LD (IX-12+CHP.Note),A 0810+++8E77~ ADD A,A 0811+++8E77~ LD L,A 0812+++8E77~ LD H,0 0813+++8E77~ ADD HL,DE 0814+++8E77~ LD E,(HL) 0815+++8E77~ INC HL 0816+++8E77~ LD D,(HL) 0817+++8E77~ POP HL 0818+++8E77~ SBC HL,DE 0819+++8E77~ LD (IX-12+CHP.TnDelt),L 0820+++8E77~ LD (IX-12+CHP.TnDelt+1),H 0821+++8E77~ POP DE 0822+++8E77~ Version EQU $+1 0823+++8E77~ LD A,#3E 0824+++8E77~ CP 6 0825+++8E77~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8E77~ PrSlide LD DE,#1111 0827+++8E77~ LD (IX-12+CHP.CrTnSl),E 0828+++8E77~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8E77~ LoStep EQU $+1 0830+++8E77~ OLDPRTM LD A,#3E 0831+++8E77~ EX AF,AF' 0832+++8E77~ JR Z,NOSIG 0833+++8E77~ EX DE,HL 0834+++8E77~ NOSIG SBC HL,DE 0835+++8E77~ JP P,SET_STP 0836+++8E77~ CPL 0837+++8E77~ EX AF,AF' 0838+++8E77~ NEG 0839+++8E77~ EX AF,AF' 0840+++8E77~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8E77~ EX AF,AF' 0842+++8E77~ LD (IX-12+CHP.TSlStp),A 0843+++8E77~ LD (IX-12+CHP.COnOff),0 0844+++8E77~ RET 0845+++8E77~ 0846+++8E77~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8E77~ LD A,(BC) 0848+++8E77~ INC BC 0849+++8E77~ LD (IX-12+CHP.TnSlDl),A 0850+++8E77~ AND A 0851+++8E77~ JR NZ,GL36 0852+++8E77~ LD A,(Version) ;AlCo PT3.7+ 0853+++8E77~ CP 7 0854+++8E77~ SBC A,A 0855+++8E77~ INC A 0856+++8E77~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8E77~ LD A,(BC) 0858+++8E77~ INC BC 0859+++8E77~ EX AF,AF' 0860+++8E77~ LD A,(BC) 0861+++8E77~ INC BC 0862+++8E77~ JR SET_STP 0863+++8E77~ 0864+++8E77~ C_SMPOS LD A,(BC) 0865+++8E77~ INC BC 0866+++8E77~ LD (IX-12+CHP.PsInSm),A 0867+++8E77~ RET 0868+++8E77~ 0869+++8E77~ C_ORPOS LD A,(BC) 0870+++8E77~ INC BC 0871+++8E77~ LD (IX-12+CHP.PsInOr),A 0872+++8E77~ RET 0873+++8E77~ 0874+++8E77~ C_VIBRT LD A,(BC) 0875+++8E77~ INC BC 0876+++8E77~ LD (IX-12+CHP.OnOffD),A 0877+++8E77~ LD (IX-12+CHP.COnOff),A 0878+++8E77~ LD A,(BC) 0879+++8E77~ INC BC 0880+++8E77~ LD (IX-12+CHP.OffOnD),A 0881+++8E77~ XOR A 0882+++8E77~ LD (IX-12+CHP.TSlCnt),A 0883+++8E77~ LD (IX-12+CHP.CrTnSl),A 0884+++8E77~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8E77~ RET 0886+++8E77~ 0887+++8E77~ C_ENGLS LD A,(BC) 0888+++8E77~ INC BC 0889+++8E77~ LD (IY-100+VRS.Env_Del),A 0890+++8E77~ LD (IY-100+VRS.CurEDel),A 0891+++8E77~ LD A,(BC) 0892+++8E77~ INC BC 0893+++8E77~ LD L,A 0894+++8E77~ LD A,(BC) 0895+++8E77~ INC BC 0896+++8E77~ LD H,A 0897+++8E77~ LD (IY-100+VRS.ESldAdd),L 0898+++8E77~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8E77~ RET 0900+++8E77~ 0901+++8E77~ C_DELAY LD A,(BC) 0902+++8E77~ INC BC 0903+++8E77~ LD (IY-100+VRS.Delay),A 0904+++8E77~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8E77~ BIT 1,(HL) 0906+++8E77~ RET Z 0907+++8E77~ LD (VARS1+VRS.Delay),A 0908+++8E77~ LD (VARS1+VRS.DelyCnt),A 0909+++8E77~ LD (VARS2+VRS.Delay),A 0910+++8E77~ RET 0911+++8E77~ 0912+++8E77~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8E77~ LD A,(BC) 0915+++8E77~ INC BC 0916+++8E77~ LD H,A 0917+++8E77~ LD A,(BC) 0918+++8E77~ INC BC 0919+++8E77~ LD L,A 0920+++8E77~ CALL SETENBS 0921+++8E77~ XOR A 0922+++8E77~ LD (IX-12+CHP.PsInOr),A 0923+++8E77~ LD (IY-100+VRS.CurEDel),A 0924+++8E77~ LD H,A 0925+++8E77~ LD L,A 0926+++8E77~ JP SETESLD 0927+++8E77~ 0928+++8E77~ SETORN ADD A,A 0929+++8E77~ LD E,A 0930+++8E77~ LD D,0 0931+++8E77~ LD (IX-12+CHP.PsInOr),D 0932+++8E77~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8E77~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8E77~ ADD HL,DE 0935+++8E77~ LD E,(HL) 0936+++8E77~ INC HL 0937+++8E77~ LD D,(HL) 0938+++8E77~ LD L,(IY-100+VRS.MODADDR) 0939+++8E77~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8E77~ ADD HL,DE 0941+++8E77~ LD (IX-12+CHP.OrnPtr),L 0942+++8E77~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8E77~ C_NOP RET 0944+++8E77~ 0945+++8E77~ SETSAM ADD A,A 0946+++8E77~ LD E,A 0947+++8E77~ LD D,0 0948+++8E77~ LD L,(IY-100+VRS.SamPtrs); 0949+++8E77~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8E77~ ADD HL,DE 0951+++8E77~ LD E,(HL) 0952+++8E77~ INC HL 0953+++8E77~ LD D,(HL) 0954+++8E77~ LD L,(IY-100+VRS.MODADDR) 0955+++8E77~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8E77~ ADD HL,DE 0957+++8E77~ LD (IX-12+CHP.SamPtr),L 0958+++8E77~ LD (IX-12+CHP.SamPtr+1),H 0959+++8E77~ RET 0960+++8E77~ 0961+++8E77~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8E77~ SPCCOMS DW C_NOP 0963+++8E77~ DW C_GLISS 0964+++8E77~ DW C_PORTM 0965+++8E77~ DW C_SMPOS 0966+++8E77~ DW C_ORPOS 0967+++8E77~ DW C_VIBRT 0968+++8E77~ DW C_NOP 0969+++8E77~ DW C_NOP 0970+++8E77~ DW C_ENGLS 0971+++8E77~ DW C_DELAY 0972+++8E77~ DW C_NOP 0973+++8E77~ DW C_NOP 0974+++8E77~ DW C_NOP 0975+++8E77~ DW C_NOP 0976+++8E77~ DW C_NOP 0977+++8E77~ DW C_NOP 0978+++8E77~ 0979+++8E77~ CHREGS CALL GETIX 0980+++8E77~ XOR A 0981+++8E77~ LD (Ampl),A 0982+++8E77~ BIT 0,(IX+CHP.Flags) 0983+++8E77~ PUSH HL 0984+++8E77~ JP Z,CH_EXIT 0985+++8E77~ LD (CSP_+1),SP 0986+++8E77~ LD L,(IX+CHP.OrnPtr) 0987+++8E77~ LD H,(IX+CHP.OrnPtr+1) 0988+++8E77~ LD SP,HL 0989+++8E77~ POP DE 0990+++8E77~ LD H,A 0991+++8E77~ LD A,(IX+CHP.PsInOr) 0992+++8E77~ LD L,A 0993+++8E77~ ADD HL,SP 0994+++8E77~ INC A 0995+++8E77~ ;PT2 PT3 0996+++8E77~ OrnCP INC A ;CP E CP D 0997+++8E77~ JR C,CH_ORPS 0998+++8E77~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8E77~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8E77~ LD A,(IX+CHP.Note) 1001+++8E77~ ADD A,(HL) 1002+++8E77~ JP P,CH_NTP 1003+++8E77~ XOR A 1004+++8E77~ CH_NTP CP 96 1005+++8E77~ JR C,CH_NOK 1006+++8E77~ LD A,95 1007+++8E77~ CH_NOK ADD A,A 1008+++8E77~ EX AF,AF' 1009+++8E77~ LD L,(IX+CHP.SamPtr) 1010+++8E77~ LD H,(IX+CHP.SamPtr+1) 1011+++8E77~ LD SP,HL 1012+++8E77~ POP DE 1013+++8E77~ LD H,0 1014+++8E77~ LD A,(IX+CHP.PsInSm) 1015+++8E77~ LD B,A 1016+++8E77~ ADD A,A 1017+++8E77~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8E77~ LD L,A 1019+++8E77~ ADD HL,SP 1020+++8E77~ LD SP,HL 1021+++8E77~ LD A,B 1022+++8E77~ INC A 1023+++8E77~ ;PT2 PT3 1024+++8E77~ SamCP INC A ;CP E CP D 1025+++8E77~ JR C,CH_SMPS 1026+++8E77~ SamLD DB 1 ;LD A,D LD A,E 1027+++8E77~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8E77~ POP BC 1029+++8E77~ POP HL 1030+++8E77~ 1031+++8E77~ ;Convert PT2 sample to PT3 1032+++8E77~ ;PT2 PT3 1033+++8E77~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8E77~ POP HL 1035+++8E77~ LD H,B 1036+++8E77~ JR NZ,$+8 1037+++8E77~ EX DE,HL 1038+++8E77~ AND A 1039+++8E77~ SBC HL,HL 1040+++8E77~ SBC HL,DE 1041+++8E77~ LD D,C 1042+++8E77~ RR C 1043+++8E77~ SBC A,A 1044+++8E77~ CPL 1045+++8E77~ AND #3E 1046+++8E77~ RR C 1047+++8E77~ RR B 1048+++8E77~ AND C 1049+++8E77~ LD C,A 1050+++8E77~ LD A,B 1051+++8E77~ RRA 1052+++8E77~ RRA 1053+++8E77~ RR D 1054+++8E77~ RRA 1055+++8E77~ AND #9F 1056+++8E77~ LD B,A 1057+++8E77~ 1058+++8E77~ e_ LD E,(IX+CHP.TnAcc) 1059+++8E77~ LD D,(IX+CHP.TnAcc+1) 1060+++8E77~ ADD HL,DE 1061+++8E77~ BIT 6,B 1062+++8E77~ JR Z,CH_NOAC 1063+++8E77~ LD (IX+CHP.TnAcc),L 1064+++8E77~ LD (IX+CHP.TnAcc+1),H 1065+++8E77~ CH_NOAC EX DE,HL 1066+++8E77~ EX AF,AF' 1067+++8E77~ ADD A,NT_&255 1068+++8E77~ LD L,A 1069+++8E77~ ADC A,NT_/256 1070+++8E77~ SUB L 1071+++8E77~ LD H,A 1072+++8E77~ LD SP,HL 1073+++8E77~ POP HL 1074+++8E77~ ADD HL,DE 1075+++8E77~ LD E,(IX+CHP.CrTnSl) 1076+++8E77~ LD D,(IX+CHP.CrTnSl+1) 1077+++8E77~ ADD HL,DE 1078+++8E77~ CSP_ LD SP,#3131 1079+++8E77~ EX (SP),HL 1080+++8E77~ XOR A 1081+++8E77~ OR (IX+CHP.TSlCnt) 1082+++8E77~ JR Z,CH_AMP 1083+++8E77~ DEC (IX+CHP.TSlCnt) 1084+++8E77~ JR NZ,CH_AMP 1085+++8E77~ LD A,(IX+CHP.TnSlDl) 1086+++8E77~ LD (IX+CHP.TSlCnt),A 1087+++8E77~ LD L,(IX+CHP.TSlStp) 1088+++8E77~ LD H,(IX+CHP.TSlStp+1) 1089+++8E77~ LD A,H 1090+++8E77~ ADD HL,DE 1091+++8E77~ LD (IX+CHP.CrTnSl),L 1092+++8E77~ LD (IX+CHP.CrTnSl+1),H 1093+++8E77~ BIT 2,(IX+CHP.Flags) 1094+++8E77~ JR NZ,CH_AMP 1095+++8E77~ LD E,(IX+CHP.TnDelt) 1096+++8E77~ LD D,(IX+CHP.TnDelt+1) 1097+++8E77~ AND A 1098+++8E77~ JR Z,CH_STPP 1099+++8E77~ EX DE,HL 1100+++8E77~ CH_STPP SBC HL,DE 1101+++8E77~ JP M,CH_AMP 1102+++8E77~ LD A,(IX+CHP.SlToNt) 1103+++8E77~ LD (IX+CHP.Note),A 1104+++8E77~ XOR A 1105+++8E77~ LD (IX+CHP.TSlCnt),A 1106+++8E77~ LD (IX+CHP.CrTnSl),A 1107+++8E77~ LD (IX+CHP.CrTnSl+1),A 1108+++8E77~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8E77~ BIT 7,C 1110+++8E77~ JR Z,CH_NOAM 1111+++8E77~ BIT 6,C 1112+++8E77~ JR Z,CH_AMIN 1113+++8E77~ CP 15 1114+++8E77~ JR Z,CH_NOAM 1115+++8E77~ INC A 1116+++8E77~ JR CH_SVAM 1117+++8E77~ CH_AMIN CP -15 1118+++8E77~ JR Z,CH_NOAM 1119+++8E77~ DEC A 1120+++8E77~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8E77~ CH_NOAM LD L,A 1122+++8E77~ LD A,B 1123+++8E77~ AND 15 1124+++8E77~ ADD A,L 1125+++8E77~ JP P,CH_APOS 1126+++8E77~ XOR A 1127+++8E77~ CH_APOS CP 16 1128+++8E77~ JR C,CH_VOL 1129+++8E77~ LD A,15 1130+++8E77~ CH_VOL OR (IX+CHP.Volume) 1131+++8E77~ ADD A,VT_&255 1132+++8E77~ LD L,A 1133+++8E77~ ADC A,VT_/256 1134+++8E77~ SUB L 1135+++8E77~ LD H,A 1136+++8E77~ LD A,(HL) 1137+++8E77~ CH_ENV BIT 0,C 1138+++8E77~ JR NZ,CH_NOEN 1139+++8E77~ OR (IX+CHP.Env_En) 1140+++8E77~ CH_NOEN LD (Ampl),A 1141+++8E77~ BIT 7,B 1142+++8E77~ LD A,C 1143+++8E77~ JR Z,NO_ENSL 1144+++8E77~ RLA 1145+++8E77~ RLA 1146+++8E77~ SRA A 1147+++8E77~ SRA A 1148+++8E77~ SRA A 1149+++8E77~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8E77~ BIT 5,B 1151+++8E77~ JR Z,NO_ENAC 1152+++8E77~ LD (IX+CHP.CrEnSl),A 1153+++8E77~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8E77~ LD (IY-100+VRS.AddToEn),A 1155+++8E77~ JR CH_MIX 1156+++8E77~ NO_ENSL RRA 1157+++8E77~ ADD A,(IX+CHP.CrNsSl) 1158+++8E77~ LD (IY-100+VRS.AddToNs),A 1159+++8E77~ BIT 5,B 1160+++8E77~ JR Z,CH_MIX 1161+++8E77~ LD (IX+CHP.CrNsSl),A 1162+++8E77~ CH_MIX LD A,B 1163+++8E77~ RRA 1164+++8E77~ AND #48 1165+++8E77~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8E77~ RRCA 1167+++8E77~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8E77~ POP HL 1169+++8E77~ XOR A 1170+++8E77~ OR (IX+CHP.COnOff) 1171+++8E77~ RET Z 1172+++8E77~ DEC (IX+CHP.COnOff) 1173+++8E77~ RET NZ 1174+++8E77~ XOR (IX+CHP.Flags) 1175+++8E77~ LD (IX+CHP.Flags),A 1176+++8E77~ RRA 1177+++8E77~ LD A,(IX+CHP.OnOffD) 1178+++8E77~ JR C,CH_ONDL 1179+++8E77~ LD A,(IX+CHP.OffOnD) 1180+++8E77~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8E77~ RET 1182+++8E77~ 1183+++8E77~ PLAY_ XOR A 1184+++8E77~ LD (IY-100+VRS.AddToEn),A 1185+++8E77~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8E77~ DEC A 1187+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8E77~ DEC (IY-100+VRS.DelyCnt) 1189+++8E77~ JP NZ,PL2 1190+++8E77~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8E77~ JR NZ,PL1B 1192+++8E77~ LD C,(IY-100+VRS.AdInPtA) 1193+++8E77~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8E77~ LD A,(BC) 1195+++8E77~ AND A 1196+++8E77~ JR NZ,PL1A 1197+++8E77~ LD D,A 1198+++8E77~ LD (IY-100+VRS.Ns_Base),A 1199+++8E77~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8E77~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8E77~ INC HL 1202+++8E77~ LD A,(HL) 1203+++8E77~ INC A 1204+++8E77~ JR NZ,PLNLP 1205+++8E77~ 1206+++8E77~ IF LoopChecker 1207+++8E77~ CALL CHECKLP 1208+++8E77~ ENDIF 1209+++8E77~ 1210+++8E77~ LD L,(IY-100+VRS.LPosPtr) 1211+++8E77~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8E77~ LD A,(HL) 1213+++8E77~ INC A 1214+++8E77~ PLNLP CALL SETCPPT 1215+++8E77~ DEC A 1216+++8E77~ BIT 1,(IY-100+VRS.ModNum) 1217+++8E77~ JR Z,NoAlCo 1218+++8E77~ TSSub EQU $+1 1219+++8E77~ SUB #D6 1220+++8E77~ CPL 1221+++8E77~ NoAlCo 1222+++8E77~ ;PT2 PT3 1223+++8E77~ PsCalc DEC A ;ADD A,A NOP 1224+++8E77~ DEC A ;ADD A,(HL) NOP 1225+++8E77~ ADD A,A 1226+++8E77~ LD E,A 1227+++8E77~ RL D 1228+++8E77~ 1229+++8E77~ IF CurPosCounter 1230+++8E77~ LD A,L 1231+++8E77~ SUB (IY-100+VRS.PosSub) 1232+++8E77~ LD (IY-100+VRS.CurPos),A 1233+++8E77~ ENDIF 1234+++8E77~ 1235+++8E77~ LD L,(IY-100+VRS.PatsPtr) 1236+++8E77~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8E77~ ADD HL,DE 1238+++8E77~ LD E,(IY-100+VRS.MODADDR) 1239+++8E77~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8E77~ LD (PSP_+1),SP 1241+++8E77~ LD SP,HL 1242+++8E77~ POP HL 1243+++8E77~ ADD HL,DE 1244+++8E77~ LD B,H 1245+++8E77~ LD C,L 1246+++8E77~ POP HL 1247+++8E77~ ADD HL,DE 1248+++8E77~ LD (IY-100+VRS.AdInPtB),L 1249+++8E77~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8E77~ POP HL 1251+++8E77~ ADD HL,DE 1252+++8E77~ LD (IY-100+VRS.AdInPtC),L 1253+++8E77~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8E77~ PSP_ LD SP,#3131 1255+++8E77~ PL1A LD DE,VRS.ChanA+12-100 1256+++8E77~ CALL PTDECOD 1257+++8E77~ LD (IY-100+VRS.AdInPtA),C 1258+++8E77~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8E77~ 1260+++8E77~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8E77~ JR NZ,PL1C 1262+++8E77~ LD DE,VRS.ChanB+12-100 1263+++8E77~ LD C,(IY-100+VRS.AdInPtB) 1264+++8E77~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8E77~ CALL PTDECOD 1266+++8E77~ LD (IY-100+VRS.AdInPtB),C 1267+++8E77~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8E77~ 1269+++8E77~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8E77~ JR NZ,PL1D 1271+++8E77~ LD DE,VRS.ChanC+12-100 1272+++8E77~ LD C,(IY-100+VRS.AdInPtC) 1273+++8E77~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8E77~ CALL PTDECOD 1275+++8E77~ LD (IY-100+VRS.AdInPtC),C 1276+++8E77~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8E77~ 1278+++8E77~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8E77~ LD (IY-100+VRS.DelyCnt),A 1280+++8E77~ 1281+++8E77~ PL2 LD DE,VRS.ChanA-100 1282+++8E77~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8E77~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8E77~ CALL CHREGS 1285+++8E77~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8E77~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8E77~ Ampl EQU $+1 1288+++8E77~ LD A,#3E 1289+++8E77~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8E77~ LD DE,VRS.ChanB-100 1291+++8E77~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8E77~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8E77~ CALL CHREGS 1294+++8E77~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8E77~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8E77~ LD A,(Ampl) 1297+++8E77~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8E77~ LD DE,VRS.ChanC-100 1299+++8E77~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8E77~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8E77~ CALL CHREGS 1302+++8E77~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8E77~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8E77~ LD A,(Ampl) 1305+++8E77~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8E77~ 1307+++8E77~ LD A,(IY-100+VRS.Ns_Base) 1308+++8E77~ ADD (IY-100+VRS.AddToNs) 1309+++8E77~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8E77~ 1311+++8E77~ LD A,(IY-100+VRS.AddToEn) 1312+++8E77~ LD E,A 1313+++8E77~ ADD A,A 1314+++8E77~ SBC A,A 1315+++8E77~ LD D,A 1316+++8E77~ LD L,(IY-100+VRS.EnvBase) 1317+++8E77~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8E77~ ADD HL,DE 1319+++8E77~ LD E,(IY-100+VRS.CurESld) 1320+++8E77~ LD D,(IY-100+VRS.CurESld+1) 1321+++8E77~ ADD HL,DE 1322+++8E77~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8E77~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8E77~ 1325+++8E77~ XOR A 1326+++8E77~ OR (IY-100+VRS.CurEDel) 1327+++8E77~ RET Z 1328+++8E77~ DEC (IY-100+VRS.CurEDel) 1329+++8E77~ RET NZ 1330+++8E77~ LD A,(IY-100+VRS.Env_Del) 1331+++8E77~ LD (IY-100+VRS.CurEDel),A 1332+++8E77~ LD L,(IY-100+VRS.ESldAdd) 1333+++8E77~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8E77~ ADD HL,DE 1335+++8E77~ JP SETESLD 1336+++8E77~ 1337+++8E77~ PLAY LD IY,VARS1+100 1338+++8E77~ CALL PLAY_ 1339+++8E77~ LD A,(is_ts) 1340+++8E77~ AND A 1341+++8E77~ JR Z,PL_nts 1342+++8E77~ LD IY,VARS2+100 1343+++8E77~ CALL PLAY_ 1344+++8E77~ PL_nts 1345+++8E77~ IF Basic 1346+++8E77~ LD IY,#5C3A 1347+++8E77~ ENDIF 1348+++8E77~ 1349+++8E77~ ROUT LD BC,#FFFD 1350+++8E77~ LD A,(is_ts) 1351+++8E77~ AND A 1352+++8E77~ IFDEF ONtfm 1353+++8E77~ LD L,#F9 1354+++8E77~ OUT (C),L 1355+++8E77~ ELSE 1356+++8E77~ JR Z,r_nts ;keep old standard 1357+++8E77~ OUT (C),B 1358+++8E77~ ENDIF 1359+++8E77~ r_nts EX AF,AF' 1360+++8E77~ 1361+++8E77~ IF ACBBAC 1362+++8E77~ LD IX,VARS1+VRS.AYREGS 1363+++8E77~ ELSE 1364+++8E77~ LD HL,VARS1+VRS.AYREGS 1365+++8E77~ ENDIF 1366+++8E77~ 1367+++8E77~ CALL ROUT_ 1368+++8E77~ EX AF,AF' 1369+++8E77~ RET Z 1370+++8E77~ LD B,D 1371+++8E77~ 1372+++8E77~ IFDEF ONtfm 1373+++8E77~ LD A,#F8 1374+++8E77~ ELSE 1375+++8E77~ CPL 1376+++8E77~ ENDIF 1377+++8E77~ OUT (C),A 1378+++8E77~ 1379+++8E77~ IF ACBBAC 1380+++8E77~ LD IX,VARS2+VRS.AYREGS 1381+++8E77~ ELSE 1382+++8E77~ LD HL,VARS2+VRS.AYREGS 1383+++8E77~ ENDIF 1384+++8E77~ 1385+++8E77~ ROUT_ 1386+++8E77~ IF ACBBAC 1387+++8E77~ LD A,(SETUP) 1388+++8E77~ AND 12 1389+++8E77~ JR Z,ABC 1390+++8E77~ ADD A,CHTABLE 1391+++8E77~ LD E,A 1392+++8E77~ ADC A,CHTABLE/256 1393+++8E77~ SUB E 1394+++8E77~ LD D,A 1395+++8E77~ LD B,0 1396+++8E77~ PUSH IX 1397+++8E77~ POP HL 1398+++8E77~ LD A,(DE) 1399+++8E77~ INC DE 1400+++8E77~ LD C,A 1401+++8E77~ ADD HL,BC 1402+++8E77~ LD A,(IX+TonB) 1403+++8E77~ LD C,(HL) 1404+++8E77~ LD (IX+TonB),C 1405+++8E77~ LD (HL),A 1406+++8E77~ INC HL 1407+++8E77~ LD A,(IX+TonB+1) 1408+++8E77~ LD C,(HL) 1409+++8E77~ LD (IX+TonB+1),C 1410+++8E77~ LD (HL),A 1411+++8E77~ LD A,(DE) 1412+++8E77~ INC DE 1413+++8E77~ LD C,A 1414+++8E77~ ADD HL,BC 1415+++8E77~ LD A,(IX+AmplB) 1416+++8E77~ LD C,(HL) 1417+++8E77~ LD (IX+AmplB),C 1418+++8E77~ LD (HL),A 1419+++8E77~ LD A,(DE) 1420+++8E77~ INC DE 1421+++8E77~ LD (RxCA1),A 1422+++8E77~ XOR 8 1423+++8E77~ LD (RxCA2),A 1424+++8E77~ LD A,(DE) 1425+++8E77~ AND (IX+Mixer) 1426+++8E77~ LD E,A 1427+++8E77~ LD A,(IX+Mixer) 1428+++8E77~ RxCA1 DB #E6 1429+++8E77~ AND %010010 1430+++8E77~ OR E 1431+++8E77~ LD E,A 1432+++8E77~ LD A,(IX+Mixer) 1433+++8E77~ AND %010010 1434+++8E77~ RxCA2 OR E 1435+++8E77~ OR E 1436+++8E77~ LD (IX+Mixer),A 1437+++8E77~ ABC 1438+++8E77~ ENDIF 1439+++8E77~ 1440+++8E77~ XOR A 1441+++8E77~ LD DE,#FFBF 1442+++8E77~ 1443+++8E77~ IF ACBBAC 1444+++8E77~ LD BC,#FFFD 1445+++8E77~ PUSH IX 1446+++8E77~ POP HL 1447+++8E77~ ENDIF 1448+++8E77~ 1449+++8E77~ LOUT 1450+++8E77~ IFDEF ONtfm 1451+++8E77~ INF 1452+++8E77~ JP M,$-2 1453+++8E77~ ENDIF 1454+++8E77~ OUT (C),A 1455+++8E77~ IFDEF ONtfm 1456+++8E77~ INF 1457+++8E77~ JP M,$-2 1458+++8E77~ ENDIF 1459+++8E77~ LD B,E 1460+++8E77~ OUTI 1461+++8E77~ LD B,D 1462+++8E77~ INC A 1463+++8E77~ CP 13 1464+++8E77~ JR NZ,LOUT 1465+++8E77~ IFDEF ONtfm 1466+++8E77~ INF 1467+++8E77~ JP M,$-2 1468+++8E77~ ENDIF 1469+++8E77~ OUT (C),A 1470+++8E77~ LD A,(HL) 1471+++8E77~ AND A 1472+++8E77~ RET M 1473+++8E77~ IFDEF ONtfm 1474+++8E77~ INF 1475+++8E77~ JP M,$-2 1476+++8E77~ ENDIF 1477+++8E77~ LD B,E 1478+++8E77~ OUT (C),A 1479+++8E77~ RET 1480+++8E77~ 1481+++8E77~ IF ACBBAC 1482+++8E77~ CHTABLE EQU $-4 1483+++8E77~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8E77~ ENDIF 1485+++8E77~ 1486+++8E77~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8E77~ DB TCNEW_0-T_ 1488+++8E77~ DB (T_OLD_0-T1_)*2+1 1489+++8E77~ DB TCOLD_0-T_ 1490+++8E77~ DB (T_NEW_1-T1_)*2+1 1491+++8E77~ DB TCNEW_1-T_ 1492+++8E77~ DB (T_OLD_1-T1_)*2+1 1493+++8E77~ DB TCOLD_1-T_ 1494+++8E77~ DB (T_NEW_2-T1_)*2 1495+++8E77~ DB TCNEW_2-T_ 1496+++8E77~ DB (T_OLD_2-T1_)*2 1497+++8E77~ DB TCOLD_2-T_ 1498+++8E77~ DB (T_NEW_3-T1_)*2 1499+++8E77~ DB TCNEW_3-T_ 1500+++8E77~ DB (T_OLD_3-T1_)*2 1501+++8E77~ DB TCOLD_3-T_ 1502+++8E77~ 1503+++8E77~ T_ 1504+++8E77~ 1505+++8E77~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8E77~ DB #18+1,#24+1,#3C+1,0 1507+++8E77~ TCOLD_1 DB #5C+1,0 1508+++8E77~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8E77~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8E77~ TCNEW_3 DB #56+1 1511+++8E77~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8E77~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8E77~ DB #BC+1,#BE+1,0 1514+++8E77~ TCNEW_1 EQU TCOLD_1 1515+++8E77~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8E77~ DB #BA+1,#BC+1,#BE+1,0 1517+++8E77~ 1518+++8E77~ PT3EMPTYORN EQU $-1 1519+++8E77~ DB 1,0 1520+++8E77~ 1521+++8E77~ ;first 12 values of tone tables (packed) 1522+++8E77~ 1523+++8E77~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8E77~ DB #0755-#06EC 1525+++8E77~ DB #07C5-#0755 1526+++8E77~ DB #083B-#07C5 1527+++8E77~ DB #08B8-#083B 1528+++8E77~ DB #093D-#08B8 1529+++8E77~ DB #09CA-#093D 1530+++8E77~ DB #0A5F-#09CA 1531+++8E77~ DB #0AFC-#0A5F 1532+++8E77~ DB #0BA4-#0AFC 1533+++8E77~ DB #0C55-#0BA4 1534+++8E77~ DB #0D10-#0C55 1535+++8E77~ DB #066D*2/256,#066D*2&255 1536+++8E77~ DB #06CF-#066D 1537+++8E77~ DB #0737-#06CF 1538+++8E77~ DB #07A4-#0737 1539+++8E77~ DB #0819-#07A4 1540+++8E77~ DB #0894-#0819 1541+++8E77~ DB #0917-#0894 1542+++8E77~ DB #09A1-#0917 1543+++8E77~ DB #0A33-#09A1 1544+++8E77~ DB #0ACF-#0A33 1545+++8E77~ DB #0B73-#0ACF 1546+++8E77~ DB #0C22-#0B73 1547+++8E77~ DB #0CDA-#0C22 1548+++8E77~ DB #0704*2/256,#0704*2&255 1549+++8E77~ DB #076E-#0704 1550+++8E77~ DB #07E0-#076E 1551+++8E77~ DB #0858-#07E0 1552+++8E77~ DB #08D6-#0858 1553+++8E77~ DB #095C-#08D6 1554+++8E77~ DB #09EC-#095C 1555+++8E77~ DB #0A82-#09EC 1556+++8E77~ DB #0B22-#0A82 1557+++8E77~ DB #0BCC-#0B22 1558+++8E77~ DB #0C80-#0BCC 1559+++8E77~ DB #0D3E-#0C80 1560+++8E77~ DB #07E0*2/256,#07E0*2&255 1561+++8E77~ DB #0858-#07E0 1562+++8E77~ DB #08E0-#0858 1563+++8E77~ DB #0960-#08E0 1564+++8E77~ DB #09F0-#0960 1565+++8E77~ DB #0A88-#09F0 1566+++8E77~ DB #0B28-#0A88 1567+++8E77~ DB #0BD8-#0B28 1568+++8E77~ DB #0C80-#0BD8 1569+++8E77~ DB #0D60-#0C80 1570+++8E77~ DB #0E10-#0D60 1571+++8E77~ DB #0EF8-#0E10 1572+++8E77~ 1573+++8E77~ ;vars from here can be stripped 1574+++8E77~ ;you can move VARS to any other address 1575+++8E77~ 1576+++8E77~ VARS 1577+++8E77~ 1578+++8E77~ is_ts DB 0 1579+++8E77~ 1580+++8E77~ ;ChannelsVars 1581+++8E77~ STRUCT CHP 1582+++8E77~ ;reset group 1583+++8E77~ PsInOr DB 0 1584+++8E77~ PsInSm DB 0 1585+++8E77~ CrAmSl DB 0 1586+++8E77~ CrNsSl DB 0 1587+++8E77~ CrEnSl DB 0 1588+++8E77~ TSlCnt DB 0 1589+++8E77~ CrTnSl DW 0 1590+++8E77~ TnAcc DW 0 1591+++8E77~ COnOff DB 0 1592+++8E77~ ;reset group 1593+++8E77~ 1594+++8E77~ OnOffD DB 0 1595+++8E77~ 1596+++8E77~ ;IX for PTDECOD here (+12) 1597+++8E77~ OffOnD DB 0 1598+++8E77~ OrnPtr DW 0 1599+++8E77~ SamPtr DW 0 1600+++8E77~ NNtSkp DB 0 1601+++8E77~ Note DB 0 1602+++8E77~ SlToNt DB 0 1603+++8E77~ Env_En DB 0 1604+++8E77~ Flags DB 0 1605+++8E77~ ;Enabled - 0, SimpleGliss - 2 1606+++8E77~ TnSlDl DB 0 1607+++8E77~ TSlStp DW 0 1608+++8E77~ TnDelt DW 0 1609+++8E77~ NtSkCn DB 0 1610+++8E77~ Volume DB 0 1611+++8E77~ ENDS 1612+++8E77~ 1613+++8E77~ STRUCT VRS 1614+++8E77~ 1615+++8E77~ ;IF not works in STRUCT in SjASM :( 1616+++8E77~ ; IF CurPosCounter 1617+++8E77~ CurPos DB 0 1618+++8E77~ PosSub DB 0 1619+++8E77~ ; ENDIF 1620+++8E77~ 1621+++8E77~ ModNum DB 0 ;bit0: ChipNum 1622+++8E77~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8E77~ 1624+++8E77~ ChanA DS CHP 1625+++8E77~ ChanB DS CHP 1626+++8E77~ ChanC DS CHP 1627+++8E77~ 1628+++8E77~ ;GlobalVars 1629+++8E77~ MODADDR DW 0 1630+++8E77~ OrnPtrs DW 0 1631+++8E77~ SamPtrs DW 0 1632+++8E77~ PatsPtr DW 0 1633+++8E77~ AdInPtA DW 0 1634+++8E77~ AdInPtB DW 0 1635+++8E77~ AdInPtC DW 0 1636+++8E77~ CrPsPtr DW 0 1637+++8E77~ LPosPtr DW 0 1638+++8E77~ Delay DB 0 1639+++8E77~ DelyCnt DB 0 1640+++8E77~ ESldAdd DW 0 1641+++8E77~ CurESld DW 0 1642+++8E77~ Env_Del DB 0 1643+++8E77~ CurEDel DB 0 1644+++8E77~ Ns_Base DB 0 1645+++8E77~ AddToNs DB 0 1646+++8E77~ AddToEn DB 0 1647+++8E77~ EnvBase DW 0 1648+++8E77~ AYREGS DS 14 1649+++8E77~ ENDS 1650+++8E77~ 1651+++8E77~ VARS1 DS VRS 1652+++8E77~ VARS2 DS VRS 1653+++8E77~ 1654+++8E77~ VT_ EQU $-16 1655+++8E77~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8E77~ 1657+++8E77~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8E77~ 1659+++8E77~ T_OLD_1 EQU T1_ 1660+++8E77~ T_OLD_2 EQU T_OLD_1+24 1661+++8E77~ T_OLD_3 EQU T_OLD_2+24 1662+++8E77~ T_OLD_0 EQU T_OLD_3+2 1663+++8E77~ T_NEW_0 EQU T_OLD_0 1664+++8E77~ T_NEW_1 EQU T_OLD_1 1665+++8E77~ T_NEW_2 EQU T_NEW_0+24 1666+++8E77~ T_NEW_3 EQU T_OLD_3 1667+++8E77~ 1668+++8E77~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8E77~ 1670+++8E77~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8E77~ 1672+++8E77~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8E77~ 1674+++8E77~ VARSEND EQU $ 1675+++8E77~ MDLADDR EQU $ 1676+++8E77~ 1677+++8E77~ DISPLAY "PTS player size=",$-START 1678+++8E77~ 1679+++8E77~ ;Release 0 steps: 1680+++8E77~ ;04/21/2007 1681+++8E77~ ;Works start (PTxPlay adaptation); first beta. 1682+++8E77~ ;04/22/2007 1683+++8E77~ ;Job finished; beta-testing. 1684+++8E77~ ;04/23/2007 1685+++8E77~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8E77~ ;04/29/2007 1687+++8E77~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8E77~ ;modules of v3.7+. 1689+++8E77~ 1690+++8E77~ ;Size (minimal build for ZX Spectrum): 1691+++8E77~ ;Code block #908 bytes 1692+++8E77~ ;Variables #2BF bytes (can be stripped) 1693+++8E77~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8E77~ 1695+++8E77~ ENDMOD 1696+++8E77~ 1697+++8E77 endif 1698+++8E77 0099++ 8E77 PT3.Play=PTS.PLAY 0100++ 8E77 PT3.Mute=PTS.MUTE 0101++ 8E77 PT3.End 0102++ 8E77 0103++ 8E77 display "PT3 module size: ",PT3.End-PT3.Start 0104++ 8E77 0105++ 8E77 endif 0106++ 8E77 0419+ 8E77 include "pt2.asm" 0001++ 8E77 ifndef _pt2_asm_defined 0002++ 8E77 define _pt2_asm_defined 0003++ 8E77 0004++ 8E77 module PT2 0005++ 8E77 0006++ 8E77 struct Header 0007++ 8E77~ Tempo db 0 ;02-ff 0008++ 8E77~ Length db 0 ;01-ff 0009++ 8E77~ Loop db 0 ;00-fe 0010++ 8E77~ Samples 0011++ 8E77~ ds 64 ;(? 00-36){32} 0012++ 8E77~ Ornaments 0013++ 8E77~ ds 32 ;(? 00-36){16} 0014++ 8E77~ Patterns 0015++ 8E77~ dw 0 ;? 00-01 0016++ 8E77~ Name ds 30 ;? 0017++ 8E77~ Positions 0018++ 8E77~ db 0 ;00-1f 0019++ 8E77~ db 0 ;ff|00-1f 0020++ 8E77 ends 0021++ 8E77 0022++ 8E77 Start 0023++ 8E77 ifndef NoPrologue 0024++ 8E77~ ld hl,End 0025++ 8E77~ jr Init 0026++ 8E77~ jp PTS.PLAY 0027++ 8E77~ jp PTS.MUTE 0028++ 8E77 endif 0029++ 8E77 0030++ 8E77 3E 02 Init ld a,PTS.SETUP.PT2 0031++ 8E79 C3 6C 82 jp PTS.INIT 0032++ 8E7C 0033++ 8E7C ifdef HaveFormatCheck 0034++ 8E7C include "format.asm" 0001+++8E7C ;some format checking macros 0002+++8E7C ifndef _format_asm_defined 0003+++8E7C~ define _format_asm_defined 0004+++8E7C~ 0005+++8E7C~ macro LessOrEqual number 0006+++8E7C~ ld a,number 0007+++8E7C~ cp (hl) 0008+++8E7C~ inc hl 0009+++8E7C~ ret c 0010+++8E7C~ endm 0011+++8E7C~ 0012+++8E7C~ macro Greater number 0013+++8E7C~ ld a,(hl) 0014+++8E7C~ inc hl 0015+++8E7C~ cp number 0016+++8E7C~ ret c 0017+++8E7C~ endm 0018+++8E7C~ 0019+++8E7C~ macro AnyByte 0020+++8E7C~ inc hl 0021+++8E7C~ endm 0022+++8E7C~ 0023+++8E7C~ macro AnyBytes count 0024+++8E7C~ if count > 7 0025+++8E7C~ ld a,l 0026+++8E7C~ add a,count 0027+++8E7C~ ld l,a 0028+++8E7C~ adc a,h 0029+++8E7C~ sub l 0030+++8E7C~ ld h,a 0031+++8E7C~ else 0032+++8E7C~ dup count 0033+++8E7C~ inc hl 0034+++8E7C~ edup 0035+++8E7C~ endif 0036+++8E7C~ endm 0037+++8E7C~ 0038+++8E7C~ macro EqualTo number 0039+++8E7C~ ld a,number 0040+++8E7C~ cp (hl) 0041+++8E7C~ inc hl 0042+++8E7C~ ret nz 0043+++8E7C~ endm 0044+++8E7C~ 0045+++8E7C endif 0046+++8E7C 0035++ 8E7C 0036++ 8E7C ;in HL - module addr 0037++ 8E7C ;out Z - is pt2 0038++ 8E7C CheckFormat 0039++ 8E7C ;Tempo 0040++ 8E7C Greater 2 0040++ 8E7C 7E > ld a,(hl) 0040++ 8E7D 23 > inc hl 0040++ 8E7E FE 02 > cp number 0040++ 8E80 D8 > ret c 0041++ 8E81 ;Length 0042++ 8E81 Greater 1 0042++ 8E81 7E > ld a,(hl) 0042++ 8E82 23 > inc hl 0042++ 8E83 FE 01 > cp number 0042++ 8E85 D8 > ret c 0043++ 8E86 ;Loop 0044++ 8E86 LessOrEqual 254 0044++ 8E86 3E FE > ld a,number 0044++ 8E88 BE > cp (hl) 0044++ 8E89 23 > inc hl 0044++ 8E8A D8 > ret c 0045++ 8E8B ;Samples+Ornaments 0046++ 8E8B 06 30 ld b,(Header.Patterns-Header.Samples)/2 0047++ 8E8D .samorns 0048++ 8E8D AnyByte 0048++ 8E8D 23 > inc hl 0049++ 8E8E LessOrEqual #36 0049++ 8E8E 3E 36 > ld a,number 0049++ 8E90 BE > cp (hl) 0049++ 8E91 23 > inc hl 0049++ 8E92 D8 > ret c 0050++ 8E93 10 F8 djnz .samorns 0051++ 8E95 ;Patterns 0052++ 8E95 AnyByte 0052++ 8E95 23 > inc hl 0053++ 8E96 LessOrEqual 1 0053++ 8E96 3E 01 > ld a,number 0053++ 8E98 BE > cp (hl) 0053++ 8E99 23 > inc hl 0053++ 8E9A D8 > ret c 0054++ 8E9B ;Name 0055++ 8E9B AnyBytes Header.Positions-Header.Name 0055++ 8E9B 7D > ld a,l 0055++ 8E9C C6 1E > add a,count 0055++ 8E9E 6F > ld l,a 0055++ 8E9F 8C > adc a,h 0055++ 8EA0 95 > sub l 0055++ 8EA1 67 > ld h,a 0056++ 8EA2 ;Positions 0057++ 8EA2 ;first should be not marker 0058++ 8EA2 LessOrEqual #1f 0058++ 8EA2 3E 1F > ld a,number 0058++ 8EA4 BE > cp (hl) 0058++ 8EA5 23 > inc hl 0058++ 8EA6 D8 > ret c 0059++ 8EA7 06 FF ld b,255 ;max positions 0060++ 8EA9 .positions 0061++ 8EA9 7E ld a,(hl) 0062++ 8EAA FE FF cp 255 0063++ 8EAC C8 ret z ;finish 0064++ 8EAD LessOrEqual #1f 0064++ 8EAD 3E 1F > ld a,number 0064++ 8EAF BE > cp (hl) 0064++ 8EB0 23 > inc hl 0064++ 8EB1 D8 > ret c 0065++ 8EB2 10 F5 djnz .positions 0066++ 8EB4 ;fall through 0067++ 8EB4 7C .fail ld a,h 0068++ 8EB5 A7 and a ;reset Z 0069++ 8EB6 C9 ret 0070++ 8EB7 0071++ 8EB7 display "PT2 checker size: ",$-CheckFormat 0072++ 8EB7 endif 0073++ 8EB7 0074++ 8EB7 endmod 0075++ 8EB7 0076++ 8EB7 include "PTSPlay.asm" 0001+++8EB7 ifndef _pts_asm_defined 0002+++8EB7~ define _pts_asm_defined 0003+++8EB7~ 0004+++8EB7~ MODULE PTS 0005+++8EB7~ 0006+++8EB7~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8EB7~ ;(c)2004-2007 S.V.Bulba 0008+++8EB7~ ;Specially for AlCo 0009+++8EB7~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8EB7~ 0011+++8EB7~ ;Release number 0012+++8EB7~ Release EQU "0" 0013+++8EB7~ 0014+++8EB7~ ;Conditional assembly 0015+++8EB7~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8EB7~ CurPosCounter=0 0017+++8EB7~ ;2) Allow channels allocation bits at (SETUP) 0018+++8EB7~ ACBBAC=0 0019+++8EB7~ ;3) Allow loop checking and disabling 0020+++8EB7~ LoopChecker=0 0021+++8EB7~ ;4) Insert official identificator 0022+++8EB7~ Id=0 0023+++8EB7~ ;5) Set IY for correct return to ZX Basic 0024+++8EB7~ Basic=0 0025+++8EB7~ 0026+++8EB7~ ;Features 0027+++8EB7~ ;-------- 0028+++8EB7~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8EB7~ ; address). 0030+++8EB7~ ;-Variables (VARS) can be located at any address (not only after 0031+++8EB7~ ; code block). 0032+++8EB7~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8EB7~ ; generates both note and volume tables outside of code block 0034+++8EB7~ ; (in VARS). 0035+++8EB7~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8EB7~ ; PT3 module version). 0037+++8EB7~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8EB7~ ; and higher). 0039+++8EB7~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8EB7~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8EB7~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8EB7~ ;-See also notes at the end of this source code. 0043+++8EB7~ 0044+++8EB7~ ;Limitations 0045+++8EB7~ ;----------- 0046+++8EB7~ ;-Can run in RAM only (self-modified code is used). 0047+++8EB7~ ;-PT2 position list must be end by #FF marker only. 0048+++8EB7~ 0049+++8EB7~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8EB7~ ;into RAM or INIT subprogram was not called before. 0051+++8EB7~ 0052+++8EB7~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8EB7~ ;playing 0054+++8EB7~ 0055+++8EB7~ TonA EQU 0 0056+++8EB7~ TonB EQU 2 0057+++8EB7~ TonC EQU 4 0058+++8EB7~ Noise EQU 6 0059+++8EB7~ Mixer EQU 7 0060+++8EB7~ AmplA EQU 8 0061+++8EB7~ AmplB EQU 9 0062+++8EB7~ AmplC EQU 10 0063+++8EB7~ Env EQU 11 0064+++8EB7~ EnvTp EQU 13 0065+++8EB7~ 0066+++8EB7~ START 0067+++8EB7~ 0068+++8EB7~ SETUP.NOLOOP EQU 1 0069+++8EB7~ SETUP.PT2 EQU 2 0070+++8EB7~ SETUP.ACB EQU 4 0071+++8EB7~ SETUP.BAC EQU 8 0072+++8EB7~ SETUP.TS02 EQU 16 0073+++8EB7~ SETUP.TSPT3 EQU 32 0074+++8EB7~ 0075+++8EB7~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8EB7~ ;(optional); 0077+++8EB7~ ;set bit1 for PT2 and reset for PT3 before 0078+++8EB7~ ;calling INIT; 0079+++8EB7~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8EB7~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8EB7~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8EB7~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8EB7~ ;documented and must be converted to new standard. 0084+++8EB7~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8EB7~ ;module is passed (optional). 0086+++8EB7~ ;bit7 is set each time, when loop point of 1st TS 0087+++8EB7~ ;or of single module is passed (optional). 0088+++8EB7~ 0089+++8EB7~ ;Identifier 0090+++8EB7~ IF Id 0091+++8EB7~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8EB7~ ENDIF 0093+++8EB7~ 0094+++8EB7~ IF LoopChecker 0095+++8EB7~ CHECKLP LD HL,SETUP 0096+++8EB7~ BIT 0,(IY-100+VRS.ModNum) 0097+++8EB7~ JR Z,CHL1 0098+++8EB7~ SET 6,(HL) 0099+++8EB7~ JR CHL2 0100+++8EB7~ CHL1 SET 7,(HL) 0101+++8EB7~ CHL2 BIT 0,(HL) 0102+++8EB7~ RET Z 0103+++8EB7~ POP HL 0104+++8EB7~ INC (IY-100+VRS.DelyCnt) 0105+++8EB7~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8EB7~ XOR A 0107+++8EB7~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8EB7~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8EB7~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8EB7~ RET 0111+++8EB7~ ENDIF 0112+++8EB7~ 0113+++8EB7~ MUTE XOR A 0114+++8EB7~ LD H,A 0115+++8EB7~ LD L,A 0116+++8EB7~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8EB7~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8EB7~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8EB7~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8EB7~ JP ROUT 0121+++8EB7~ 0122+++8EB7~ INIT 0123+++8EB7~ ;HL - AddressOfModule 0124+++8EB7~ ;DE - AddresOf2ndModule 0125+++8EB7~ ;A - mode 0126+++8EB7~ PUSH DE 0127+++8EB7~ PUSH HL 0128+++8EB7~ LD HL,VARS 0129+++8EB7~ LD (HL),0 0130+++8EB7~ LD DE,VARS+1 0131+++8EB7~ LD BC,VAR0END-VARS-1 0132+++8EB7~ LDIR 0133+++8EB7~ INC HL 0134+++8EB7~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8EB7~ LD (VARS2+VRS.AdInPtA),HL 0136+++8EB7~ 0137+++8EB7~ POP HL 0138+++8EB7~ LD IY,VARS1+100 0139+++8EB7~ LD (SETUP),A 0140+++8EB7~ AND SETUP.PT2 0141+++8EB7~ JP NZ,I_PT2 0142+++8EB7~ 0143+++8EB7~ CALL INITPT3 0144+++8EB7~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8EB7~ LD (SamCnv),HL 0146+++8EB7~ LD A,#BA 0147+++8EB7~ LD (OrnCP),A 0148+++8EB7~ LD (SamCP),A 0149+++8EB7~ LD A,#7B 0150+++8EB7~ LD (OrnLD),A 0151+++8EB7~ LD (SamLD),A 0152+++8EB7~ LD A,#87 0153+++8EB7~ LD (SamClc2),A 0154+++8EB7~ POP HL 0155+++8EB7~ ;Use version and ton table of 1st module 0156+++8EB7~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8EB7~ SUB #30 0158+++8EB7~ JR C,L20 0159+++8EB7~ CP 10 0160+++8EB7~ JR C,L21 0161+++8EB7~ L20 LD A,6 0162+++8EB7~ L21 LD (Version),A 0163+++8EB7~ PUSH AF ;VolTable version 0164+++8EB7~ CP 4 0165+++8EB7~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8EB7~ RLA 0167+++8EB7~ AND 7 0168+++8EB7~ PUSH AF ;NoteTable number 0169+++8EB7~ 0170+++8EB7~ LD IY,VARS2+100 0171+++8EB7~ LD A,(SETUP) 0172+++8EB7~ AND SETUP.TS02|SETUP.TSPT3 0173+++8EB7~ JR Z,NOTS 0174+++8EB7~ CP SETUP.TS02 0175+++8EB7~ JR Z,TwoPT3s 0176+++8EB7~ LD A,(Version) 0177+++8EB7~ CP 7 0178+++8EB7~ JR C,NOTS 0179+++8EB7~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8EB7~ CP #20 0181+++8EB7~ JR Z,NOTS 0182+++8EB7~ LD HL,VARS1 0183+++8EB7~ LD DE,VARS2 0184+++8EB7~ LD BC,VRS 0185+++8EB7~ LDIR 0186+++8EB7~ SET 1,(IY-100+VRS.ModNum) 0187+++8EB7~ LD C,A 0188+++8EB7~ ADD A,A 0189+++8EB7~ ADD A,C 0190+++8EB7~ SUB 2 0191+++8EB7~ LD (TSSub),A 0192+++8EB7~ JR AlCoTS_ 0193+++8EB7~ TwoPT3s CALL INITPT3 0194+++8EB7~ AlCoTS_ LD A,1 0195+++8EB7~ LD (is_ts),A 0196+++8EB7~ SET 0,(IY-100+VRS.ModNum) 0197+++8EB7~ 0198+++8EB7~ NOTS LD BC,PT3PD 0199+++8EB7~ LD HL,0 0200+++8EB7~ LD DE,PT3EMPTYORN 0201+++8EB7~ JR INITCOMMON 0202+++8EB7~ 0203+++8EB7~ I_PT2 CALL INITPT2 0204+++8EB7~ LD HL,#51CB 0205+++8EB7~ LD (SamCnv),HL 0206+++8EB7~ LD A,#BB 0207+++8EB7~ LD (OrnCP),A 0208+++8EB7~ LD (SamCP),A 0209+++8EB7~ LD A,#7A 0210+++8EB7~ LD (OrnLD),A 0211+++8EB7~ LD (SamLD),A 0212+++8EB7~ LD A,#80 0213+++8EB7~ LD (SamClc2),A 0214+++8EB7~ POP HL 0215+++8EB7~ LD A,5 0216+++8EB7~ LD (Version),A 0217+++8EB7~ PUSH AF 0218+++8EB7~ LD A,2 0219+++8EB7~ PUSH AF 0220+++8EB7~ 0221+++8EB7~ LD A,(SETUP) 0222+++8EB7~ AND SETUP.TS02|SETUP.TSPT3 0223+++8EB7~ JR Z,NOTS2 0224+++8EB7~ 0225+++8EB7~ LD IY,VARS2+100 0226+++8EB7~ LD A,1 0227+++8EB7~ LD (is_ts),A 0228+++8EB7~ SET 0,(IY-100+VRS.ModNum) 0229+++8EB7~ CALL INITPT2 0230+++8EB7~ 0231+++8EB7~ NOTS2 LD BC,PT2PD 0232+++8EB7~ LD HL,#8687 0233+++8EB7~ LD DE,PT2EMPTYORN 0234+++8EB7~ 0235+++8EB7~ INITCOMMON 0236+++8EB7~ 0237+++8EB7~ IF Basic 0238+++8EB7~ LD IY,#5C3A 0239+++8EB7~ ENDIF 0240+++8EB7~ 0241+++8EB7~ LD (PTDEC),BC 0242+++8EB7~ LD (PsCalc),HL 0243+++8EB7~ PUSH DE 0244+++8EB7~ 0245+++8EB7~ ;note table data depacker 0246+++8EB7~ ;(c) Ivan Roshin 0247+++8EB7~ LD DE,T_PACK 0248+++8EB7~ LD BC,T1_+(2*49)-1 0249+++8EB7~ TP_0 LD A,(DE) 0250+++8EB7~ INC DE 0251+++8EB7~ CP 15*2 0252+++8EB7~ JR NC,TP_1 0253+++8EB7~ LD H,A 0254+++8EB7~ LD A,(DE) 0255+++8EB7~ LD L,A 0256+++8EB7~ INC DE 0257+++8EB7~ JR TP_2 0258+++8EB7~ TP_1 PUSH DE 0259+++8EB7~ LD D,0 0260+++8EB7~ LD E,A 0261+++8EB7~ ADD HL,DE 0262+++8EB7~ ADD HL,DE 0263+++8EB7~ POP DE 0264+++8EB7~ TP_2 LD A,H 0265+++8EB7~ LD (BC),A 0266+++8EB7~ DEC BC 0267+++8EB7~ LD A,L 0268+++8EB7~ LD (BC),A 0269+++8EB7~ DEC BC 0270+++8EB7~ SUB (#F8*2)&255 0271+++8EB7~ JR NZ,TP_0 0272+++8EB7~ 0273+++8EB7~ INC A 0274+++8EB7~ LD (VARS1+VRS.DelyCnt),A 0275+++8EB7~ LD (VARS2+VRS.DelyCnt),A 0276+++8EB7~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8EB7~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8EB7~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8EB7~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8EB7~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8EB7~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8EB7~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8EB7~ POP HL 0284+++8EB7~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8EB7~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8EB7~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8EB7~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8EB7~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8EB7~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8EB7~ 0291+++8EB7~ POP AF 0292+++8EB7~ 0293+++8EB7~ ;NoteTableCreator (c) Ivan Roshin 0294+++8EB7~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8EB7~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8EB7~ 0297+++8EB7~ LD HL,NT_DATA 0298+++8EB7~ LD D,0 0299+++8EB7~ ADD A,A 0300+++8EB7~ LD E,A 0301+++8EB7~ ADD HL,DE 0302+++8EB7~ LD E,(HL) 0303+++8EB7~ INC HL 0304+++8EB7~ SRL E 0305+++8EB7~ SBC A,A 0306+++8EB7~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8EB7~ LD (L3),A 0308+++8EB7~ EX DE,HL 0309+++8EB7~ LD BC,T1_ 0310+++8EB7~ ADD HL,BC 0311+++8EB7~ 0312+++8EB7~ LD A,(DE) 0313+++8EB7~ ADD A,T_&255 0314+++8EB7~ LD C,A 0315+++8EB7~ ADC A,T_/256 0316+++8EB7~ SUB C 0317+++8EB7~ LD B,A 0318+++8EB7~ PUSH BC 0319+++8EB7~ LD DE,NT_ 0320+++8EB7~ PUSH DE 0321+++8EB7~ 0322+++8EB7~ LD B,12 0323+++8EB7~ L1 PUSH BC 0324+++8EB7~ LD C,(HL) 0325+++8EB7~ INC HL 0326+++8EB7~ PUSH HL 0327+++8EB7~ LD B,(HL) 0328+++8EB7~ 0329+++8EB7~ PUSH DE 0330+++8EB7~ EX DE,HL 0331+++8EB7~ LD DE,23 0332+++8EB7~ LD IXH,8 0333+++8EB7~ 0334+++8EB7~ L2 SRL B 0335+++8EB7~ RR C 0336+++8EB7~ L3 DB #19 ;AND A or NOP 0337+++8EB7~ LD A,C 0338+++8EB7~ ADC A,D ;=ADC 0 0339+++8EB7~ LD (HL),A 0340+++8EB7~ INC HL 0341+++8EB7~ LD A,B 0342+++8EB7~ ADC A,D 0343+++8EB7~ LD (HL),A 0344+++8EB7~ ADD HL,DE 0345+++8EB7~ DEC IXH 0346+++8EB7~ JR NZ,L2 0347+++8EB7~ 0348+++8EB7~ POP DE 0349+++8EB7~ INC DE 0350+++8EB7~ INC DE 0351+++8EB7~ POP HL 0352+++8EB7~ INC HL 0353+++8EB7~ POP BC 0354+++8EB7~ DJNZ L1 0355+++8EB7~ 0356+++8EB7~ POP HL 0357+++8EB7~ POP DE 0358+++8EB7~ 0359+++8EB7~ LD A,E 0360+++8EB7~ CP TCOLD_1&255 0361+++8EB7~ JR NZ,CORR_1 0362+++8EB7~ LD A,#FD 0363+++8EB7~ LD (NT_+#2E),A 0364+++8EB7~ 0365+++8EB7~ CORR_1 LD A,(DE) 0366+++8EB7~ AND A 0367+++8EB7~ JR Z,TC_EXIT 0368+++8EB7~ RRA 0369+++8EB7~ PUSH AF 0370+++8EB7~ ADD A,A 0371+++8EB7~ LD C,A 0372+++8EB7~ ADD HL,BC 0373+++8EB7~ POP AF 0374+++8EB7~ JR NC,CORR_2 0375+++8EB7~ DEC (HL) 0376+++8EB7~ DEC (HL) 0377+++8EB7~ CORR_2 INC (HL) 0378+++8EB7~ AND A 0379+++8EB7~ SBC HL,BC 0380+++8EB7~ INC DE 0381+++8EB7~ JR CORR_1 0382+++8EB7~ 0383+++8EB7~ TC_EXIT 0384+++8EB7~ 0385+++8EB7~ POP AF 0386+++8EB7~ 0387+++8EB7~ ;VolTableCreator (c) Ivan Roshin 0388+++8EB7~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8EB7~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8EB7~ 0391+++8EB7~ CP 5 0392+++8EB7~ LD HL,#11 0393+++8EB7~ LD D,H 0394+++8EB7~ LD E,H 0395+++8EB7~ LD A,#17 0396+++8EB7~ JR NC,M1 0397+++8EB7~ DEC L 0398+++8EB7~ LD E,L 0399+++8EB7~ XOR A 0400+++8EB7~ M1 LD (M2),A 0401+++8EB7~ 0402+++8EB7~ LD IX,VT_+16 0403+++8EB7~ 0404+++8EB7~ LD C,#F 0405+++8EB7~ INITV2 PUSH HL 0406+++8EB7~ 0407+++8EB7~ ADD HL,DE 0408+++8EB7~ EX DE,HL 0409+++8EB7~ SBC HL,HL 0410+++8EB7~ 0411+++8EB7~ LD B,#10 0412+++8EB7~ INITV1 LD A,L 0413+++8EB7~ M2 DB #7D 0414+++8EB7~ LD A,H 0415+++8EB7~ ADC A,0 0416+++8EB7~ LD (IX),A 0417+++8EB7~ INC IX 0418+++8EB7~ ADD HL,DE 0419+++8EB7~ DJNZ INITV1 0420+++8EB7~ 0421+++8EB7~ POP HL 0422+++8EB7~ LD A,E 0423+++8EB7~ CP #77 0424+++8EB7~ JR NZ,M3 0425+++8EB7~ INC E 0426+++8EB7~ M3 DEC C 0427+++8EB7~ JR NZ,INITV2 0428+++8EB7~ 0429+++8EB7~ JP ROUT 0430+++8EB7~ 0431+++8EB7~ INITPT3 CALL SETMDAD 0432+++8EB7~ PUSH HL 0433+++8EB7~ LD DE,100 0434+++8EB7~ ADD HL,DE 0435+++8EB7~ LD A,(HL) 0436+++8EB7~ LD (IY-100+VRS.Delay),A 0437+++8EB7~ PUSH HL 0438+++8EB7~ POP IX 0439+++8EB7~ ADD HL,DE 0440+++8EB7~ CALL SETCPPT 0441+++8EB7~ LD E,(IX+102-100) 0442+++8EB7~ INC HL 0443+++8EB7~ 0444+++8EB7~ IF CurPosCounter 0445+++8EB7~ LD (IY-100+VRS.PosSub),L 0446+++8EB7~ ENDIF 0447+++8EB7~ 0448+++8EB7~ ADD HL,DE 0449+++8EB7~ CALL SETLPPT 0450+++8EB7~ POP DE 0451+++8EB7~ LD L,(IX+103-100) 0452+++8EB7~ LD H,(IX+104-100) 0453+++8EB7~ ADD HL,DE 0454+++8EB7~ CALL SETPTPT 0455+++8EB7~ LD HL,169 0456+++8EB7~ ADD HL,DE 0457+++8EB7~ CALL SETORPT 0458+++8EB7~ LD HL,105 0459+++8EB7~ ADD HL,DE 0460+++8EB7~ 0461+++8EB7~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8EB7~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8EB7~ RET 0464+++8EB7~ 0465+++8EB7~ INITPT2 LD A,(HL) 0466+++8EB7~ LD (IY-100+VRS.Delay),A 0467+++8EB7~ PUSH HL 0468+++8EB7~ PUSH HL 0469+++8EB7~ PUSH HL 0470+++8EB7~ INC HL 0471+++8EB7~ INC HL 0472+++8EB7~ LD A,(HL) 0473+++8EB7~ INC HL 0474+++8EB7~ CALL SETSMPT 0475+++8EB7~ LD E,(HL) 0476+++8EB7~ INC HL 0477+++8EB7~ LD D,(HL) 0478+++8EB7~ POP HL 0479+++8EB7~ AND A 0480+++8EB7~ SBC HL,DE 0481+++8EB7~ CALL SETMDAD 0482+++8EB7~ POP HL 0483+++8EB7~ LD DE,67 0484+++8EB7~ ADD HL,DE 0485+++8EB7~ CALL SETORPT 0486+++8EB7~ LD E,32 0487+++8EB7~ ADD HL,DE 0488+++8EB7~ LD C,(HL) 0489+++8EB7~ INC HL 0490+++8EB7~ LD B,(HL) 0491+++8EB7~ LD E,30 0492+++8EB7~ ADD HL,DE 0493+++8EB7~ CALL SETCPPT 0494+++8EB7~ LD E,A 0495+++8EB7~ INC HL 0496+++8EB7~ 0497+++8EB7~ IF CurPosCounter 0498+++8EB7~ LD (IY-100+VRS.PosSub),L 0499+++8EB7~ ENDIF 0500+++8EB7~ 0501+++8EB7~ ADD HL,DE 0502+++8EB7~ CALL SETLPPT 0503+++8EB7~ POP HL 0504+++8EB7~ ADD HL,BC 0505+++8EB7~ 0506+++8EB7~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8EB7~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8EB7~ RET 0509+++8EB7~ 0510+++8EB7~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8EB7~ LD (IY-100+VRS.MODADDR+1),H 0512+++8EB7~ RET 0513+++8EB7~ 0514+++8EB7~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8EB7~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8EB7~ RET 0517+++8EB7~ 0518+++8EB7~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8EB7~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8EB7~ RET 0521+++8EB7~ 0522+++8EB7~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8EB7~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8EB7~ RET 0525+++8EB7~ 0526+++8EB7~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8EB7~ LD (IY-100+VRS.EnvBase+1),H 0528+++8EB7~ RET 0529+++8EB7~ 0530+++8EB7~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8EB7~ LD (IY-100+VRS.CurESld+1),H 0532+++8EB7~ RET 0533+++8EB7~ 0534+++8EB7~ GETIX PUSH IY 0535+++8EB7~ POP IX 0536+++8EB7~ ADD IX,DE 0537+++8EB7~ RET 0538+++8EB7~ 0539+++8EB7~ PTDECOD CALL GETIX 0540+++8EB7~ PTDEC EQU $+1 0541+++8EB7~ JP #C3C3 0542+++8EB7~ 0543+++8EB7~ ;PT2 pattern decoder 0544+++8EB7~ PD2_SAM CALL SETSAM 0545+++8EB7~ JR PD2_LOOP 0546+++8EB7~ 0547+++8EB7~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8EB7~ JR PD2_LOOP 0549+++8EB7~ 0550+++8EB7~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8EB7~ LD A,(BC) 0553+++8EB7~ INC BC 0554+++8EB7~ LD L,A 0555+++8EB7~ LD A,(BC) 0556+++8EB7~ INC BC 0557+++8EB7~ LD H,A 0558+++8EB7~ CALL SETENBS 0559+++8EB7~ JR PD2_LOOP 0560+++8EB7~ 0561+++8EB7~ PD2_ORN CALL SETORN 0562+++8EB7~ JR PD2_LOOP 0563+++8EB7~ 0564+++8EB7~ PD2_SKIP INC A 0565+++8EB7~ LD (IX-12+CHP.NNtSkp),A 0566+++8EB7~ JR PD2_LOOP 0567+++8EB7~ 0568+++8EB7~ PD2_VOL RRCA 0569+++8EB7~ RRCA 0570+++8EB7~ RRCA 0571+++8EB7~ RRCA 0572+++8EB7~ LD (IX-12+CHP.Volume),A 0573+++8EB7~ JR PD2_LOOP 0574+++8EB7~ 0575+++8EB7~ PD2_DEL CALL C_DELAY 0576+++8EB7~ JR PD2_LOOP 0577+++8EB7~ 0578+++8EB7~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8EB7~ INC A 0580+++8EB7~ LD (IX-12+CHP.TnSlDl),A 0581+++8EB7~ LD (IX-12+CHP.TSlCnt),A 0582+++8EB7~ LD A,(BC) 0583+++8EB7~ INC BC 0584+++8EB7~ LD (IX-12+CHP.TSlStp),A 0585+++8EB7~ ADD A,A 0586+++8EB7~ SBC A,A 0587+++8EB7~ LD (IX-12+CHP.TSlStp+1),A 0588+++8EB7~ SCF 0589+++8EB7~ JR PD2_LP2 0590+++8EB7~ 0591+++8EB7~ PT2PD AND A 0592+++8EB7~ 0593+++8EB7~ PD2_LP2 EX AF,AF' 0594+++8EB7~ 0595+++8EB7~ PD2_LOOP LD A,(BC) 0596+++8EB7~ INC BC 0597+++8EB7~ ADD A,#20 0598+++8EB7~ JR Z,PD2_REL 0599+++8EB7~ JR C,PD2_SAM 0600+++8EB7~ ADD A,96 0601+++8EB7~ JR C,PD2_NOTE 0602+++8EB7~ INC A 0603+++8EB7~ JR Z,PD2_EOff 0604+++8EB7~ ADD A,15 0605+++8EB7~ JP Z,PD_FIN 0606+++8EB7~ JR C,PD2_ENV 0607+++8EB7~ ADD A,#10 0608+++8EB7~ JR C,PD2_ORN 0609+++8EB7~ ADD A,#40 0610+++8EB7~ JR C,PD2_SKIP 0611+++8EB7~ ADD A,#10 0612+++8EB7~ JR C,PD2_VOL 0613+++8EB7~ INC A 0614+++8EB7~ JR Z,PD2_DEL 0615+++8EB7~ INC A 0616+++8EB7~ JR Z,PD2_GLIS 0617+++8EB7~ INC A 0618+++8EB7~ JR Z,PD2_PORT 0619+++8EB7~ INC A 0620+++8EB7~ JR Z,PD2_STOP 0621+++8EB7~ LD A,(BC) 0622+++8EB7~ INC BC 0623+++8EB7~ LD (IX-12+CHP.CrNsSl),A 0624+++8EB7~ JR PD2_LOOP 0625+++8EB7~ 0626+++8EB7~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8EB7~ LD A,(BC) 0628+++8EB7~ INC BC 0629+++8EB7~ INC BC ;ignoring precalc delta to right sound 0630+++8EB7~ INC BC 0631+++8EB7~ SCF 0632+++8EB7~ JR PD2_LP2 0633+++8EB7~ 0634+++8EB7~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8EB7~ JR PD2_LOOP 0636+++8EB7~ 0637+++8EB7~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8EB7~ JR PD2_EXIT 0639+++8EB7~ 0640+++8EB7~ PD2_NOTE LD L,A 0641+++8EB7~ LD A,(IX-12+CHP.Note) 0642+++8EB7~ LD (PrNote+1),A 0643+++8EB7~ LD (IX-12+CHP.Note),L 0644+++8EB7~ XOR A 0645+++8EB7~ LD (IX-12+CHP.TSlCnt),A 0646+++8EB7~ SET 0,(IX-12+CHP.Flags) 0647+++8EB7~ EX AF,AF' 0648+++8EB7~ JR NC,NOGLIS2 0649+++8EB7~ BIT 2,(IX-12+CHP.Flags) 0650+++8EB7~ JR NZ,NOPORT2 0651+++8EB7~ LD (LoStep),A 0652+++8EB7~ ADD A,A 0653+++8EB7~ SBC A,A 0654+++8EB7~ EX AF,AF' 0655+++8EB7~ LD H,A 0656+++8EB7~ LD L,A 0657+++8EB7~ INC A 0658+++8EB7~ CALL SETPORT 0659+++8EB7~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8EB7~ NOGLIS2 XOR A 0661+++8EB7~ 0662+++8EB7~ 0663+++8EB7~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8EB7~ LD (IX-12+CHP.PsInOr),A 0665+++8EB7~ LD (IX-12+CHP.CrTnSl),A 0666+++8EB7~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8EB7~ JP PD_FIN 0668+++8EB7~ 0669+++8EB7~ ;PT3 pattern decoder 0670+++8EB7~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8EB7~ CALL SETORN 0672+++8EB7~ PD_SAM_ LD A,(BC) 0673+++8EB7~ INC BC 0674+++8EB7~ RRCA 0675+++8EB7~ 0676+++8EB7~ PD_SAM CALL SETSAM 0677+++8EB7~ JR PD_LOOP 0678+++8EB7~ 0679+++8EB7~ PD_VOL RRCA 0680+++8EB7~ RRCA 0681+++8EB7~ RRCA 0682+++8EB7~ RRCA 0683+++8EB7~ LD (IX-12+CHP.Volume),A 0684+++8EB7~ JR PD_LP2 0685+++8EB7~ 0686+++8EB7~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8EB7~ LD (IX-12+CHP.PsInOr),A 0688+++8EB7~ JR PD_LP2 0689+++8EB7~ 0690+++8EB7~ PD_SorE DEC A 0691+++8EB7~ JR NZ,PD_ENV 0692+++8EB7~ LD A,(BC) 0693+++8EB7~ INC BC 0694+++8EB7~ LD (IX-12+CHP.NNtSkp),A 0695+++8EB7~ JR PD_LP2 0696+++8EB7~ 0697+++8EB7~ PD_ENV CALL SETENV 0698+++8EB7~ JR PD_LP2 0699+++8EB7~ 0700+++8EB7~ PD_ORN CALL SETORN 0701+++8EB7~ JR PD_LOOP 0702+++8EB7~ 0703+++8EB7~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8EB7~ LD (IX-12+CHP.PsInOr),A 0705+++8EB7~ CALL NZ,SETENV 0706+++8EB7~ JR PD_SAM_ 0707+++8EB7~ 0708+++8EB7~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8EB7~ LD (PrNote+1),A 0710+++8EB7~ LD L,(IX-12+CHP.CrTnSl) 0711+++8EB7~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8EB7~ LD (PrSlide+1),HL 0713+++8EB7~ 0714+++8EB7~ PD_LOOP LD DE,#2010 0715+++8EB7~ PD_LP2 LD A,(BC) 0716+++8EB7~ INC BC 0717+++8EB7~ ADD A,E 0718+++8EB7~ JR C,PD_OrSm 0719+++8EB7~ ADD A,D 0720+++8EB7~ JR Z,PD_FIN 0721+++8EB7~ JR C,PD_SAM 0722+++8EB7~ ADD A,E 0723+++8EB7~ JR Z,PD_REL 0724+++8EB7~ JR C,PD_VOL 0725+++8EB7~ ADD A,E 0726+++8EB7~ JR Z,PD_EOff 0727+++8EB7~ JR C,PD_SorE 0728+++8EB7~ ADD A,96 0729+++8EB7~ JR C,PD_NOTE 0730+++8EB7~ ADD A,E 0731+++8EB7~ JR C,PD_ORN 0732+++8EB7~ ADD A,D 0733+++8EB7~ JR C,PD_NOIS 0734+++8EB7~ ADD A,E 0735+++8EB7~ JR C,PD_ESAM 0736+++8EB7~ ADD A,A 0737+++8EB7~ LD E,A 0738+++8EB7~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8EB7~ ADD HL,DE 0740+++8EB7~ LD E,(HL) 0741+++8EB7~ INC HL 0742+++8EB7~ LD D,(HL) 0743+++8EB7~ PUSH DE 0744+++8EB7~ JR PD_LOOP 0745+++8EB7~ 0746+++8EB7~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8EB7~ JR PD_LP2 0748+++8EB7~ 0749+++8EB7~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8EB7~ JR PD_RES 0751+++8EB7~ 0752+++8EB7~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8EB7~ SET 0,(IX-12+CHP.Flags) 0754+++8EB7~ XOR A 0755+++8EB7~ 0756+++8EB7~ PD_RES LD (PDSP_+1),SP 0757+++8EB7~ LD SP,IX 0758+++8EB7~ LD H,A 0759+++8EB7~ LD L,A 0760+++8EB7~ PUSH HL 0761+++8EB7~ PUSH HL 0762+++8EB7~ PUSH HL 0763+++8EB7~ PUSH HL 0764+++8EB7~ PUSH HL 0765+++8EB7~ PUSH HL 0766+++8EB7~ PDSP_ LD SP,#3131 0767+++8EB7~ 0768+++8EB7~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8EB7~ LD (IX-12+CHP.NtSkCn),A 0770+++8EB7~ RET 0771+++8EB7~ 0772+++8EB7~ C_PORTM LD A,(BC) 0773+++8EB7~ INC BC 0774+++8EB7~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8EB7~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8EB7~ INC BC 0777+++8EB7~ INC BC 0778+++8EB7~ EX AF,AF' 0779+++8EB7~ LD A,(BC) ;SIGNED TONE STEP 0780+++8EB7~ INC BC 0781+++8EB7~ LD (LoStep),A 0782+++8EB7~ LD A,(BC) 0783+++8EB7~ INC BC 0784+++8EB7~ AND A 0785+++8EB7~ EX AF,AF' 0786+++8EB7~ LD L,(IX-12+CHP.CrTnSl) 0787+++8EB7~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8EB7~ 0789+++8EB7~ ;Set portamento variables 0790+++8EB7~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8EB7~ 0792+++8EB7~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8EB7~ LD (IX-12+CHP.TnSlDl),A 0794+++8EB7~ LD (IX-12+CHP.TSlCnt),A 0795+++8EB7~ PUSH HL 0796+++8EB7~ LD DE,NT_ 0797+++8EB7~ LD A,(IX-12+CHP.Note) 0798+++8EB7~ LD (IX-12+CHP.SlToNt),A 0799+++8EB7~ ADD A,A 0800+++8EB7~ LD L,A 0801+++8EB7~ LD H,0 0802+++8EB7~ ADD HL,DE 0803+++8EB7~ LD A,(HL) 0804+++8EB7~ INC HL 0805+++8EB7~ LD H,(HL) 0806+++8EB7~ LD L,A 0807+++8EB7~ PUSH HL 0808+++8EB7~ PrNote LD A,#3E 0809+++8EB7~ LD (IX-12+CHP.Note),A 0810+++8EB7~ ADD A,A 0811+++8EB7~ LD L,A 0812+++8EB7~ LD H,0 0813+++8EB7~ ADD HL,DE 0814+++8EB7~ LD E,(HL) 0815+++8EB7~ INC HL 0816+++8EB7~ LD D,(HL) 0817+++8EB7~ POP HL 0818+++8EB7~ SBC HL,DE 0819+++8EB7~ LD (IX-12+CHP.TnDelt),L 0820+++8EB7~ LD (IX-12+CHP.TnDelt+1),H 0821+++8EB7~ POP DE 0822+++8EB7~ Version EQU $+1 0823+++8EB7~ LD A,#3E 0824+++8EB7~ CP 6 0825+++8EB7~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8EB7~ PrSlide LD DE,#1111 0827+++8EB7~ LD (IX-12+CHP.CrTnSl),E 0828+++8EB7~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8EB7~ LoStep EQU $+1 0830+++8EB7~ OLDPRTM LD A,#3E 0831+++8EB7~ EX AF,AF' 0832+++8EB7~ JR Z,NOSIG 0833+++8EB7~ EX DE,HL 0834+++8EB7~ NOSIG SBC HL,DE 0835+++8EB7~ JP P,SET_STP 0836+++8EB7~ CPL 0837+++8EB7~ EX AF,AF' 0838+++8EB7~ NEG 0839+++8EB7~ EX AF,AF' 0840+++8EB7~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8EB7~ EX AF,AF' 0842+++8EB7~ LD (IX-12+CHP.TSlStp),A 0843+++8EB7~ LD (IX-12+CHP.COnOff),0 0844+++8EB7~ RET 0845+++8EB7~ 0846+++8EB7~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8EB7~ LD A,(BC) 0848+++8EB7~ INC BC 0849+++8EB7~ LD (IX-12+CHP.TnSlDl),A 0850+++8EB7~ AND A 0851+++8EB7~ JR NZ,GL36 0852+++8EB7~ LD A,(Version) ;AlCo PT3.7+ 0853+++8EB7~ CP 7 0854+++8EB7~ SBC A,A 0855+++8EB7~ INC A 0856+++8EB7~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8EB7~ LD A,(BC) 0858+++8EB7~ INC BC 0859+++8EB7~ EX AF,AF' 0860+++8EB7~ LD A,(BC) 0861+++8EB7~ INC BC 0862+++8EB7~ JR SET_STP 0863+++8EB7~ 0864+++8EB7~ C_SMPOS LD A,(BC) 0865+++8EB7~ INC BC 0866+++8EB7~ LD (IX-12+CHP.PsInSm),A 0867+++8EB7~ RET 0868+++8EB7~ 0869+++8EB7~ C_ORPOS LD A,(BC) 0870+++8EB7~ INC BC 0871+++8EB7~ LD (IX-12+CHP.PsInOr),A 0872+++8EB7~ RET 0873+++8EB7~ 0874+++8EB7~ C_VIBRT LD A,(BC) 0875+++8EB7~ INC BC 0876+++8EB7~ LD (IX-12+CHP.OnOffD),A 0877+++8EB7~ LD (IX-12+CHP.COnOff),A 0878+++8EB7~ LD A,(BC) 0879+++8EB7~ INC BC 0880+++8EB7~ LD (IX-12+CHP.OffOnD),A 0881+++8EB7~ XOR A 0882+++8EB7~ LD (IX-12+CHP.TSlCnt),A 0883+++8EB7~ LD (IX-12+CHP.CrTnSl),A 0884+++8EB7~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8EB7~ RET 0886+++8EB7~ 0887+++8EB7~ C_ENGLS LD A,(BC) 0888+++8EB7~ INC BC 0889+++8EB7~ LD (IY-100+VRS.Env_Del),A 0890+++8EB7~ LD (IY-100+VRS.CurEDel),A 0891+++8EB7~ LD A,(BC) 0892+++8EB7~ INC BC 0893+++8EB7~ LD L,A 0894+++8EB7~ LD A,(BC) 0895+++8EB7~ INC BC 0896+++8EB7~ LD H,A 0897+++8EB7~ LD (IY-100+VRS.ESldAdd),L 0898+++8EB7~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8EB7~ RET 0900+++8EB7~ 0901+++8EB7~ C_DELAY LD A,(BC) 0902+++8EB7~ INC BC 0903+++8EB7~ LD (IY-100+VRS.Delay),A 0904+++8EB7~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8EB7~ BIT 1,(HL) 0906+++8EB7~ RET Z 0907+++8EB7~ LD (VARS1+VRS.Delay),A 0908+++8EB7~ LD (VARS1+VRS.DelyCnt),A 0909+++8EB7~ LD (VARS2+VRS.Delay),A 0910+++8EB7~ RET 0911+++8EB7~ 0912+++8EB7~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8EB7~ LD A,(BC) 0915+++8EB7~ INC BC 0916+++8EB7~ LD H,A 0917+++8EB7~ LD A,(BC) 0918+++8EB7~ INC BC 0919+++8EB7~ LD L,A 0920+++8EB7~ CALL SETENBS 0921+++8EB7~ XOR A 0922+++8EB7~ LD (IX-12+CHP.PsInOr),A 0923+++8EB7~ LD (IY-100+VRS.CurEDel),A 0924+++8EB7~ LD H,A 0925+++8EB7~ LD L,A 0926+++8EB7~ JP SETESLD 0927+++8EB7~ 0928+++8EB7~ SETORN ADD A,A 0929+++8EB7~ LD E,A 0930+++8EB7~ LD D,0 0931+++8EB7~ LD (IX-12+CHP.PsInOr),D 0932+++8EB7~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8EB7~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8EB7~ ADD HL,DE 0935+++8EB7~ LD E,(HL) 0936+++8EB7~ INC HL 0937+++8EB7~ LD D,(HL) 0938+++8EB7~ LD L,(IY-100+VRS.MODADDR) 0939+++8EB7~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8EB7~ ADD HL,DE 0941+++8EB7~ LD (IX-12+CHP.OrnPtr),L 0942+++8EB7~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8EB7~ C_NOP RET 0944+++8EB7~ 0945+++8EB7~ SETSAM ADD A,A 0946+++8EB7~ LD E,A 0947+++8EB7~ LD D,0 0948+++8EB7~ LD L,(IY-100+VRS.SamPtrs); 0949+++8EB7~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8EB7~ ADD HL,DE 0951+++8EB7~ LD E,(HL) 0952+++8EB7~ INC HL 0953+++8EB7~ LD D,(HL) 0954+++8EB7~ LD L,(IY-100+VRS.MODADDR) 0955+++8EB7~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8EB7~ ADD HL,DE 0957+++8EB7~ LD (IX-12+CHP.SamPtr),L 0958+++8EB7~ LD (IX-12+CHP.SamPtr+1),H 0959+++8EB7~ RET 0960+++8EB7~ 0961+++8EB7~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8EB7~ SPCCOMS DW C_NOP 0963+++8EB7~ DW C_GLISS 0964+++8EB7~ DW C_PORTM 0965+++8EB7~ DW C_SMPOS 0966+++8EB7~ DW C_ORPOS 0967+++8EB7~ DW C_VIBRT 0968+++8EB7~ DW C_NOP 0969+++8EB7~ DW C_NOP 0970+++8EB7~ DW C_ENGLS 0971+++8EB7~ DW C_DELAY 0972+++8EB7~ DW C_NOP 0973+++8EB7~ DW C_NOP 0974+++8EB7~ DW C_NOP 0975+++8EB7~ DW C_NOP 0976+++8EB7~ DW C_NOP 0977+++8EB7~ DW C_NOP 0978+++8EB7~ 0979+++8EB7~ CHREGS CALL GETIX 0980+++8EB7~ XOR A 0981+++8EB7~ LD (Ampl),A 0982+++8EB7~ BIT 0,(IX+CHP.Flags) 0983+++8EB7~ PUSH HL 0984+++8EB7~ JP Z,CH_EXIT 0985+++8EB7~ LD (CSP_+1),SP 0986+++8EB7~ LD L,(IX+CHP.OrnPtr) 0987+++8EB7~ LD H,(IX+CHP.OrnPtr+1) 0988+++8EB7~ LD SP,HL 0989+++8EB7~ POP DE 0990+++8EB7~ LD H,A 0991+++8EB7~ LD A,(IX+CHP.PsInOr) 0992+++8EB7~ LD L,A 0993+++8EB7~ ADD HL,SP 0994+++8EB7~ INC A 0995+++8EB7~ ;PT2 PT3 0996+++8EB7~ OrnCP INC A ;CP E CP D 0997+++8EB7~ JR C,CH_ORPS 0998+++8EB7~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8EB7~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8EB7~ LD A,(IX+CHP.Note) 1001+++8EB7~ ADD A,(HL) 1002+++8EB7~ JP P,CH_NTP 1003+++8EB7~ XOR A 1004+++8EB7~ CH_NTP CP 96 1005+++8EB7~ JR C,CH_NOK 1006+++8EB7~ LD A,95 1007+++8EB7~ CH_NOK ADD A,A 1008+++8EB7~ EX AF,AF' 1009+++8EB7~ LD L,(IX+CHP.SamPtr) 1010+++8EB7~ LD H,(IX+CHP.SamPtr+1) 1011+++8EB7~ LD SP,HL 1012+++8EB7~ POP DE 1013+++8EB7~ LD H,0 1014+++8EB7~ LD A,(IX+CHP.PsInSm) 1015+++8EB7~ LD B,A 1016+++8EB7~ ADD A,A 1017+++8EB7~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8EB7~ LD L,A 1019+++8EB7~ ADD HL,SP 1020+++8EB7~ LD SP,HL 1021+++8EB7~ LD A,B 1022+++8EB7~ INC A 1023+++8EB7~ ;PT2 PT3 1024+++8EB7~ SamCP INC A ;CP E CP D 1025+++8EB7~ JR C,CH_SMPS 1026+++8EB7~ SamLD DB 1 ;LD A,D LD A,E 1027+++8EB7~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8EB7~ POP BC 1029+++8EB7~ POP HL 1030+++8EB7~ 1031+++8EB7~ ;Convert PT2 sample to PT3 1032+++8EB7~ ;PT2 PT3 1033+++8EB7~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8EB7~ POP HL 1035+++8EB7~ LD H,B 1036+++8EB7~ JR NZ,$+8 1037+++8EB7~ EX DE,HL 1038+++8EB7~ AND A 1039+++8EB7~ SBC HL,HL 1040+++8EB7~ SBC HL,DE 1041+++8EB7~ LD D,C 1042+++8EB7~ RR C 1043+++8EB7~ SBC A,A 1044+++8EB7~ CPL 1045+++8EB7~ AND #3E 1046+++8EB7~ RR C 1047+++8EB7~ RR B 1048+++8EB7~ AND C 1049+++8EB7~ LD C,A 1050+++8EB7~ LD A,B 1051+++8EB7~ RRA 1052+++8EB7~ RRA 1053+++8EB7~ RR D 1054+++8EB7~ RRA 1055+++8EB7~ AND #9F 1056+++8EB7~ LD B,A 1057+++8EB7~ 1058+++8EB7~ e_ LD E,(IX+CHP.TnAcc) 1059+++8EB7~ LD D,(IX+CHP.TnAcc+1) 1060+++8EB7~ ADD HL,DE 1061+++8EB7~ BIT 6,B 1062+++8EB7~ JR Z,CH_NOAC 1063+++8EB7~ LD (IX+CHP.TnAcc),L 1064+++8EB7~ LD (IX+CHP.TnAcc+1),H 1065+++8EB7~ CH_NOAC EX DE,HL 1066+++8EB7~ EX AF,AF' 1067+++8EB7~ ADD A,NT_&255 1068+++8EB7~ LD L,A 1069+++8EB7~ ADC A,NT_/256 1070+++8EB7~ SUB L 1071+++8EB7~ LD H,A 1072+++8EB7~ LD SP,HL 1073+++8EB7~ POP HL 1074+++8EB7~ ADD HL,DE 1075+++8EB7~ LD E,(IX+CHP.CrTnSl) 1076+++8EB7~ LD D,(IX+CHP.CrTnSl+1) 1077+++8EB7~ ADD HL,DE 1078+++8EB7~ CSP_ LD SP,#3131 1079+++8EB7~ EX (SP),HL 1080+++8EB7~ XOR A 1081+++8EB7~ OR (IX+CHP.TSlCnt) 1082+++8EB7~ JR Z,CH_AMP 1083+++8EB7~ DEC (IX+CHP.TSlCnt) 1084+++8EB7~ JR NZ,CH_AMP 1085+++8EB7~ LD A,(IX+CHP.TnSlDl) 1086+++8EB7~ LD (IX+CHP.TSlCnt),A 1087+++8EB7~ LD L,(IX+CHP.TSlStp) 1088+++8EB7~ LD H,(IX+CHP.TSlStp+1) 1089+++8EB7~ LD A,H 1090+++8EB7~ ADD HL,DE 1091+++8EB7~ LD (IX+CHP.CrTnSl),L 1092+++8EB7~ LD (IX+CHP.CrTnSl+1),H 1093+++8EB7~ BIT 2,(IX+CHP.Flags) 1094+++8EB7~ JR NZ,CH_AMP 1095+++8EB7~ LD E,(IX+CHP.TnDelt) 1096+++8EB7~ LD D,(IX+CHP.TnDelt+1) 1097+++8EB7~ AND A 1098+++8EB7~ JR Z,CH_STPP 1099+++8EB7~ EX DE,HL 1100+++8EB7~ CH_STPP SBC HL,DE 1101+++8EB7~ JP M,CH_AMP 1102+++8EB7~ LD A,(IX+CHP.SlToNt) 1103+++8EB7~ LD (IX+CHP.Note),A 1104+++8EB7~ XOR A 1105+++8EB7~ LD (IX+CHP.TSlCnt),A 1106+++8EB7~ LD (IX+CHP.CrTnSl),A 1107+++8EB7~ LD (IX+CHP.CrTnSl+1),A 1108+++8EB7~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8EB7~ BIT 7,C 1110+++8EB7~ JR Z,CH_NOAM 1111+++8EB7~ BIT 6,C 1112+++8EB7~ JR Z,CH_AMIN 1113+++8EB7~ CP 15 1114+++8EB7~ JR Z,CH_NOAM 1115+++8EB7~ INC A 1116+++8EB7~ JR CH_SVAM 1117+++8EB7~ CH_AMIN CP -15 1118+++8EB7~ JR Z,CH_NOAM 1119+++8EB7~ DEC A 1120+++8EB7~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8EB7~ CH_NOAM LD L,A 1122+++8EB7~ LD A,B 1123+++8EB7~ AND 15 1124+++8EB7~ ADD A,L 1125+++8EB7~ JP P,CH_APOS 1126+++8EB7~ XOR A 1127+++8EB7~ CH_APOS CP 16 1128+++8EB7~ JR C,CH_VOL 1129+++8EB7~ LD A,15 1130+++8EB7~ CH_VOL OR (IX+CHP.Volume) 1131+++8EB7~ ADD A,VT_&255 1132+++8EB7~ LD L,A 1133+++8EB7~ ADC A,VT_/256 1134+++8EB7~ SUB L 1135+++8EB7~ LD H,A 1136+++8EB7~ LD A,(HL) 1137+++8EB7~ CH_ENV BIT 0,C 1138+++8EB7~ JR NZ,CH_NOEN 1139+++8EB7~ OR (IX+CHP.Env_En) 1140+++8EB7~ CH_NOEN LD (Ampl),A 1141+++8EB7~ BIT 7,B 1142+++8EB7~ LD A,C 1143+++8EB7~ JR Z,NO_ENSL 1144+++8EB7~ RLA 1145+++8EB7~ RLA 1146+++8EB7~ SRA A 1147+++8EB7~ SRA A 1148+++8EB7~ SRA A 1149+++8EB7~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8EB7~ BIT 5,B 1151+++8EB7~ JR Z,NO_ENAC 1152+++8EB7~ LD (IX+CHP.CrEnSl),A 1153+++8EB7~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8EB7~ LD (IY-100+VRS.AddToEn),A 1155+++8EB7~ JR CH_MIX 1156+++8EB7~ NO_ENSL RRA 1157+++8EB7~ ADD A,(IX+CHP.CrNsSl) 1158+++8EB7~ LD (IY-100+VRS.AddToNs),A 1159+++8EB7~ BIT 5,B 1160+++8EB7~ JR Z,CH_MIX 1161+++8EB7~ LD (IX+CHP.CrNsSl),A 1162+++8EB7~ CH_MIX LD A,B 1163+++8EB7~ RRA 1164+++8EB7~ AND #48 1165+++8EB7~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8EB7~ RRCA 1167+++8EB7~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8EB7~ POP HL 1169+++8EB7~ XOR A 1170+++8EB7~ OR (IX+CHP.COnOff) 1171+++8EB7~ RET Z 1172+++8EB7~ DEC (IX+CHP.COnOff) 1173+++8EB7~ RET NZ 1174+++8EB7~ XOR (IX+CHP.Flags) 1175+++8EB7~ LD (IX+CHP.Flags),A 1176+++8EB7~ RRA 1177+++8EB7~ LD A,(IX+CHP.OnOffD) 1178+++8EB7~ JR C,CH_ONDL 1179+++8EB7~ LD A,(IX+CHP.OffOnD) 1180+++8EB7~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8EB7~ RET 1182+++8EB7~ 1183+++8EB7~ PLAY_ XOR A 1184+++8EB7~ LD (IY-100+VRS.AddToEn),A 1185+++8EB7~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8EB7~ DEC A 1187+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8EB7~ DEC (IY-100+VRS.DelyCnt) 1189+++8EB7~ JP NZ,PL2 1190+++8EB7~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8EB7~ JR NZ,PL1B 1192+++8EB7~ LD C,(IY-100+VRS.AdInPtA) 1193+++8EB7~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8EB7~ LD A,(BC) 1195+++8EB7~ AND A 1196+++8EB7~ JR NZ,PL1A 1197+++8EB7~ LD D,A 1198+++8EB7~ LD (IY-100+VRS.Ns_Base),A 1199+++8EB7~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8EB7~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8EB7~ INC HL 1202+++8EB7~ LD A,(HL) 1203+++8EB7~ INC A 1204+++8EB7~ JR NZ,PLNLP 1205+++8EB7~ 1206+++8EB7~ IF LoopChecker 1207+++8EB7~ CALL CHECKLP 1208+++8EB7~ ENDIF 1209+++8EB7~ 1210+++8EB7~ LD L,(IY-100+VRS.LPosPtr) 1211+++8EB7~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8EB7~ LD A,(HL) 1213+++8EB7~ INC A 1214+++8EB7~ PLNLP CALL SETCPPT 1215+++8EB7~ DEC A 1216+++8EB7~ BIT 1,(IY-100+VRS.ModNum) 1217+++8EB7~ JR Z,NoAlCo 1218+++8EB7~ TSSub EQU $+1 1219+++8EB7~ SUB #D6 1220+++8EB7~ CPL 1221+++8EB7~ NoAlCo 1222+++8EB7~ ;PT2 PT3 1223+++8EB7~ PsCalc DEC A ;ADD A,A NOP 1224+++8EB7~ DEC A ;ADD A,(HL) NOP 1225+++8EB7~ ADD A,A 1226+++8EB7~ LD E,A 1227+++8EB7~ RL D 1228+++8EB7~ 1229+++8EB7~ IF CurPosCounter 1230+++8EB7~ LD A,L 1231+++8EB7~ SUB (IY-100+VRS.PosSub) 1232+++8EB7~ LD (IY-100+VRS.CurPos),A 1233+++8EB7~ ENDIF 1234+++8EB7~ 1235+++8EB7~ LD L,(IY-100+VRS.PatsPtr) 1236+++8EB7~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8EB7~ ADD HL,DE 1238+++8EB7~ LD E,(IY-100+VRS.MODADDR) 1239+++8EB7~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8EB7~ LD (PSP_+1),SP 1241+++8EB7~ LD SP,HL 1242+++8EB7~ POP HL 1243+++8EB7~ ADD HL,DE 1244+++8EB7~ LD B,H 1245+++8EB7~ LD C,L 1246+++8EB7~ POP HL 1247+++8EB7~ ADD HL,DE 1248+++8EB7~ LD (IY-100+VRS.AdInPtB),L 1249+++8EB7~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8EB7~ POP HL 1251+++8EB7~ ADD HL,DE 1252+++8EB7~ LD (IY-100+VRS.AdInPtC),L 1253+++8EB7~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8EB7~ PSP_ LD SP,#3131 1255+++8EB7~ PL1A LD DE,VRS.ChanA+12-100 1256+++8EB7~ CALL PTDECOD 1257+++8EB7~ LD (IY-100+VRS.AdInPtA),C 1258+++8EB7~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8EB7~ 1260+++8EB7~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8EB7~ JR NZ,PL1C 1262+++8EB7~ LD DE,VRS.ChanB+12-100 1263+++8EB7~ LD C,(IY-100+VRS.AdInPtB) 1264+++8EB7~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8EB7~ CALL PTDECOD 1266+++8EB7~ LD (IY-100+VRS.AdInPtB),C 1267+++8EB7~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8EB7~ 1269+++8EB7~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8EB7~ JR NZ,PL1D 1271+++8EB7~ LD DE,VRS.ChanC+12-100 1272+++8EB7~ LD C,(IY-100+VRS.AdInPtC) 1273+++8EB7~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8EB7~ CALL PTDECOD 1275+++8EB7~ LD (IY-100+VRS.AdInPtC),C 1276+++8EB7~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8EB7~ 1278+++8EB7~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8EB7~ LD (IY-100+VRS.DelyCnt),A 1280+++8EB7~ 1281+++8EB7~ PL2 LD DE,VRS.ChanA-100 1282+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8EB7~ CALL CHREGS 1285+++8EB7~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8EB7~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8EB7~ Ampl EQU $+1 1288+++8EB7~ LD A,#3E 1289+++8EB7~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8EB7~ LD DE,VRS.ChanB-100 1291+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8EB7~ CALL CHREGS 1294+++8EB7~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8EB7~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8EB7~ LD A,(Ampl) 1297+++8EB7~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8EB7~ LD DE,VRS.ChanC-100 1299+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8EB7~ CALL CHREGS 1302+++8EB7~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8EB7~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8EB7~ LD A,(Ampl) 1305+++8EB7~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8EB7~ 1307+++8EB7~ LD A,(IY-100+VRS.Ns_Base) 1308+++8EB7~ ADD (IY-100+VRS.AddToNs) 1309+++8EB7~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8EB7~ 1311+++8EB7~ LD A,(IY-100+VRS.AddToEn) 1312+++8EB7~ LD E,A 1313+++8EB7~ ADD A,A 1314+++8EB7~ SBC A,A 1315+++8EB7~ LD D,A 1316+++8EB7~ LD L,(IY-100+VRS.EnvBase) 1317+++8EB7~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8EB7~ ADD HL,DE 1319+++8EB7~ LD E,(IY-100+VRS.CurESld) 1320+++8EB7~ LD D,(IY-100+VRS.CurESld+1) 1321+++8EB7~ ADD HL,DE 1322+++8EB7~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8EB7~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8EB7~ 1325+++8EB7~ XOR A 1326+++8EB7~ OR (IY-100+VRS.CurEDel) 1327+++8EB7~ RET Z 1328+++8EB7~ DEC (IY-100+VRS.CurEDel) 1329+++8EB7~ RET NZ 1330+++8EB7~ LD A,(IY-100+VRS.Env_Del) 1331+++8EB7~ LD (IY-100+VRS.CurEDel),A 1332+++8EB7~ LD L,(IY-100+VRS.ESldAdd) 1333+++8EB7~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8EB7~ ADD HL,DE 1335+++8EB7~ JP SETESLD 1336+++8EB7~ 1337+++8EB7~ PLAY LD IY,VARS1+100 1338+++8EB7~ CALL PLAY_ 1339+++8EB7~ LD A,(is_ts) 1340+++8EB7~ AND A 1341+++8EB7~ JR Z,PL_nts 1342+++8EB7~ LD IY,VARS2+100 1343+++8EB7~ CALL PLAY_ 1344+++8EB7~ PL_nts 1345+++8EB7~ IF Basic 1346+++8EB7~ LD IY,#5C3A 1347+++8EB7~ ENDIF 1348+++8EB7~ 1349+++8EB7~ ROUT LD BC,#FFFD 1350+++8EB7~ LD A,(is_ts) 1351+++8EB7~ AND A 1352+++8EB7~ IFDEF ONtfm 1353+++8EB7~ LD L,#F9 1354+++8EB7~ OUT (C),L 1355+++8EB7~ ELSE 1356+++8EB7~ JR Z,r_nts ;keep old standard 1357+++8EB7~ OUT (C),B 1358+++8EB7~ ENDIF 1359+++8EB7~ r_nts EX AF,AF' 1360+++8EB7~ 1361+++8EB7~ IF ACBBAC 1362+++8EB7~ LD IX,VARS1+VRS.AYREGS 1363+++8EB7~ ELSE 1364+++8EB7~ LD HL,VARS1+VRS.AYREGS 1365+++8EB7~ ENDIF 1366+++8EB7~ 1367+++8EB7~ CALL ROUT_ 1368+++8EB7~ EX AF,AF' 1369+++8EB7~ RET Z 1370+++8EB7~ LD B,D 1371+++8EB7~ 1372+++8EB7~ IFDEF ONtfm 1373+++8EB7~ LD A,#F8 1374+++8EB7~ ELSE 1375+++8EB7~ CPL 1376+++8EB7~ ENDIF 1377+++8EB7~ OUT (C),A 1378+++8EB7~ 1379+++8EB7~ IF ACBBAC 1380+++8EB7~ LD IX,VARS2+VRS.AYREGS 1381+++8EB7~ ELSE 1382+++8EB7~ LD HL,VARS2+VRS.AYREGS 1383+++8EB7~ ENDIF 1384+++8EB7~ 1385+++8EB7~ ROUT_ 1386+++8EB7~ IF ACBBAC 1387+++8EB7~ LD A,(SETUP) 1388+++8EB7~ AND 12 1389+++8EB7~ JR Z,ABC 1390+++8EB7~ ADD A,CHTABLE 1391+++8EB7~ LD E,A 1392+++8EB7~ ADC A,CHTABLE/256 1393+++8EB7~ SUB E 1394+++8EB7~ LD D,A 1395+++8EB7~ LD B,0 1396+++8EB7~ PUSH IX 1397+++8EB7~ POP HL 1398+++8EB7~ LD A,(DE) 1399+++8EB7~ INC DE 1400+++8EB7~ LD C,A 1401+++8EB7~ ADD HL,BC 1402+++8EB7~ LD A,(IX+TonB) 1403+++8EB7~ LD C,(HL) 1404+++8EB7~ LD (IX+TonB),C 1405+++8EB7~ LD (HL),A 1406+++8EB7~ INC HL 1407+++8EB7~ LD A,(IX+TonB+1) 1408+++8EB7~ LD C,(HL) 1409+++8EB7~ LD (IX+TonB+1),C 1410+++8EB7~ LD (HL),A 1411+++8EB7~ LD A,(DE) 1412+++8EB7~ INC DE 1413+++8EB7~ LD C,A 1414+++8EB7~ ADD HL,BC 1415+++8EB7~ LD A,(IX+AmplB) 1416+++8EB7~ LD C,(HL) 1417+++8EB7~ LD (IX+AmplB),C 1418+++8EB7~ LD (HL),A 1419+++8EB7~ LD A,(DE) 1420+++8EB7~ INC DE 1421+++8EB7~ LD (RxCA1),A 1422+++8EB7~ XOR 8 1423+++8EB7~ LD (RxCA2),A 1424+++8EB7~ LD A,(DE) 1425+++8EB7~ AND (IX+Mixer) 1426+++8EB7~ LD E,A 1427+++8EB7~ LD A,(IX+Mixer) 1428+++8EB7~ RxCA1 DB #E6 1429+++8EB7~ AND %010010 1430+++8EB7~ OR E 1431+++8EB7~ LD E,A 1432+++8EB7~ LD A,(IX+Mixer) 1433+++8EB7~ AND %010010 1434+++8EB7~ RxCA2 OR E 1435+++8EB7~ OR E 1436+++8EB7~ LD (IX+Mixer),A 1437+++8EB7~ ABC 1438+++8EB7~ ENDIF 1439+++8EB7~ 1440+++8EB7~ XOR A 1441+++8EB7~ LD DE,#FFBF 1442+++8EB7~ 1443+++8EB7~ IF ACBBAC 1444+++8EB7~ LD BC,#FFFD 1445+++8EB7~ PUSH IX 1446+++8EB7~ POP HL 1447+++8EB7~ ENDIF 1448+++8EB7~ 1449+++8EB7~ LOUT 1450+++8EB7~ IFDEF ONtfm 1451+++8EB7~ INF 1452+++8EB7~ JP M,$-2 1453+++8EB7~ ENDIF 1454+++8EB7~ OUT (C),A 1455+++8EB7~ IFDEF ONtfm 1456+++8EB7~ INF 1457+++8EB7~ JP M,$-2 1458+++8EB7~ ENDIF 1459+++8EB7~ LD B,E 1460+++8EB7~ OUTI 1461+++8EB7~ LD B,D 1462+++8EB7~ INC A 1463+++8EB7~ CP 13 1464+++8EB7~ JR NZ,LOUT 1465+++8EB7~ IFDEF ONtfm 1466+++8EB7~ INF 1467+++8EB7~ JP M,$-2 1468+++8EB7~ ENDIF 1469+++8EB7~ OUT (C),A 1470+++8EB7~ LD A,(HL) 1471+++8EB7~ AND A 1472+++8EB7~ RET M 1473+++8EB7~ IFDEF ONtfm 1474+++8EB7~ INF 1475+++8EB7~ JP M,$-2 1476+++8EB7~ ENDIF 1477+++8EB7~ LD B,E 1478+++8EB7~ OUT (C),A 1479+++8EB7~ RET 1480+++8EB7~ 1481+++8EB7~ IF ACBBAC 1482+++8EB7~ CHTABLE EQU $-4 1483+++8EB7~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8EB7~ ENDIF 1485+++8EB7~ 1486+++8EB7~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8EB7~ DB TCNEW_0-T_ 1488+++8EB7~ DB (T_OLD_0-T1_)*2+1 1489+++8EB7~ DB TCOLD_0-T_ 1490+++8EB7~ DB (T_NEW_1-T1_)*2+1 1491+++8EB7~ DB TCNEW_1-T_ 1492+++8EB7~ DB (T_OLD_1-T1_)*2+1 1493+++8EB7~ DB TCOLD_1-T_ 1494+++8EB7~ DB (T_NEW_2-T1_)*2 1495+++8EB7~ DB TCNEW_2-T_ 1496+++8EB7~ DB (T_OLD_2-T1_)*2 1497+++8EB7~ DB TCOLD_2-T_ 1498+++8EB7~ DB (T_NEW_3-T1_)*2 1499+++8EB7~ DB TCNEW_3-T_ 1500+++8EB7~ DB (T_OLD_3-T1_)*2 1501+++8EB7~ DB TCOLD_3-T_ 1502+++8EB7~ 1503+++8EB7~ T_ 1504+++8EB7~ 1505+++8EB7~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8EB7~ DB #18+1,#24+1,#3C+1,0 1507+++8EB7~ TCOLD_1 DB #5C+1,0 1508+++8EB7~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8EB7~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8EB7~ TCNEW_3 DB #56+1 1511+++8EB7~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8EB7~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8EB7~ DB #BC+1,#BE+1,0 1514+++8EB7~ TCNEW_1 EQU TCOLD_1 1515+++8EB7~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8EB7~ DB #BA+1,#BC+1,#BE+1,0 1517+++8EB7~ 1518+++8EB7~ PT3EMPTYORN EQU $-1 1519+++8EB7~ DB 1,0 1520+++8EB7~ 1521+++8EB7~ ;first 12 values of tone tables (packed) 1522+++8EB7~ 1523+++8EB7~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8EB7~ DB #0755-#06EC 1525+++8EB7~ DB #07C5-#0755 1526+++8EB7~ DB #083B-#07C5 1527+++8EB7~ DB #08B8-#083B 1528+++8EB7~ DB #093D-#08B8 1529+++8EB7~ DB #09CA-#093D 1530+++8EB7~ DB #0A5F-#09CA 1531+++8EB7~ DB #0AFC-#0A5F 1532+++8EB7~ DB #0BA4-#0AFC 1533+++8EB7~ DB #0C55-#0BA4 1534+++8EB7~ DB #0D10-#0C55 1535+++8EB7~ DB #066D*2/256,#066D*2&255 1536+++8EB7~ DB #06CF-#066D 1537+++8EB7~ DB #0737-#06CF 1538+++8EB7~ DB #07A4-#0737 1539+++8EB7~ DB #0819-#07A4 1540+++8EB7~ DB #0894-#0819 1541+++8EB7~ DB #0917-#0894 1542+++8EB7~ DB #09A1-#0917 1543+++8EB7~ DB #0A33-#09A1 1544+++8EB7~ DB #0ACF-#0A33 1545+++8EB7~ DB #0B73-#0ACF 1546+++8EB7~ DB #0C22-#0B73 1547+++8EB7~ DB #0CDA-#0C22 1548+++8EB7~ DB #0704*2/256,#0704*2&255 1549+++8EB7~ DB #076E-#0704 1550+++8EB7~ DB #07E0-#076E 1551+++8EB7~ DB #0858-#07E0 1552+++8EB7~ DB #08D6-#0858 1553+++8EB7~ DB #095C-#08D6 1554+++8EB7~ DB #09EC-#095C 1555+++8EB7~ DB #0A82-#09EC 1556+++8EB7~ DB #0B22-#0A82 1557+++8EB7~ DB #0BCC-#0B22 1558+++8EB7~ DB #0C80-#0BCC 1559+++8EB7~ DB #0D3E-#0C80 1560+++8EB7~ DB #07E0*2/256,#07E0*2&255 1561+++8EB7~ DB #0858-#07E0 1562+++8EB7~ DB #08E0-#0858 1563+++8EB7~ DB #0960-#08E0 1564+++8EB7~ DB #09F0-#0960 1565+++8EB7~ DB #0A88-#09F0 1566+++8EB7~ DB #0B28-#0A88 1567+++8EB7~ DB #0BD8-#0B28 1568+++8EB7~ DB #0C80-#0BD8 1569+++8EB7~ DB #0D60-#0C80 1570+++8EB7~ DB #0E10-#0D60 1571+++8EB7~ DB #0EF8-#0E10 1572+++8EB7~ 1573+++8EB7~ ;vars from here can be stripped 1574+++8EB7~ ;you can move VARS to any other address 1575+++8EB7~ 1576+++8EB7~ VARS 1577+++8EB7~ 1578+++8EB7~ is_ts DB 0 1579+++8EB7~ 1580+++8EB7~ ;ChannelsVars 1581+++8EB7~ STRUCT CHP 1582+++8EB7~ ;reset group 1583+++8EB7~ PsInOr DB 0 1584+++8EB7~ PsInSm DB 0 1585+++8EB7~ CrAmSl DB 0 1586+++8EB7~ CrNsSl DB 0 1587+++8EB7~ CrEnSl DB 0 1588+++8EB7~ TSlCnt DB 0 1589+++8EB7~ CrTnSl DW 0 1590+++8EB7~ TnAcc DW 0 1591+++8EB7~ COnOff DB 0 1592+++8EB7~ ;reset group 1593+++8EB7~ 1594+++8EB7~ OnOffD DB 0 1595+++8EB7~ 1596+++8EB7~ ;IX for PTDECOD here (+12) 1597+++8EB7~ OffOnD DB 0 1598+++8EB7~ OrnPtr DW 0 1599+++8EB7~ SamPtr DW 0 1600+++8EB7~ NNtSkp DB 0 1601+++8EB7~ Note DB 0 1602+++8EB7~ SlToNt DB 0 1603+++8EB7~ Env_En DB 0 1604+++8EB7~ Flags DB 0 1605+++8EB7~ ;Enabled - 0, SimpleGliss - 2 1606+++8EB7~ TnSlDl DB 0 1607+++8EB7~ TSlStp DW 0 1608+++8EB7~ TnDelt DW 0 1609+++8EB7~ NtSkCn DB 0 1610+++8EB7~ Volume DB 0 1611+++8EB7~ ENDS 1612+++8EB7~ 1613+++8EB7~ STRUCT VRS 1614+++8EB7~ 1615+++8EB7~ ;IF not works in STRUCT in SjASM :( 1616+++8EB7~ ; IF CurPosCounter 1617+++8EB7~ CurPos DB 0 1618+++8EB7~ PosSub DB 0 1619+++8EB7~ ; ENDIF 1620+++8EB7~ 1621+++8EB7~ ModNum DB 0 ;bit0: ChipNum 1622+++8EB7~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8EB7~ 1624+++8EB7~ ChanA DS CHP 1625+++8EB7~ ChanB DS CHP 1626+++8EB7~ ChanC DS CHP 1627+++8EB7~ 1628+++8EB7~ ;GlobalVars 1629+++8EB7~ MODADDR DW 0 1630+++8EB7~ OrnPtrs DW 0 1631+++8EB7~ SamPtrs DW 0 1632+++8EB7~ PatsPtr DW 0 1633+++8EB7~ AdInPtA DW 0 1634+++8EB7~ AdInPtB DW 0 1635+++8EB7~ AdInPtC DW 0 1636+++8EB7~ CrPsPtr DW 0 1637+++8EB7~ LPosPtr DW 0 1638+++8EB7~ Delay DB 0 1639+++8EB7~ DelyCnt DB 0 1640+++8EB7~ ESldAdd DW 0 1641+++8EB7~ CurESld DW 0 1642+++8EB7~ Env_Del DB 0 1643+++8EB7~ CurEDel DB 0 1644+++8EB7~ Ns_Base DB 0 1645+++8EB7~ AddToNs DB 0 1646+++8EB7~ AddToEn DB 0 1647+++8EB7~ EnvBase DW 0 1648+++8EB7~ AYREGS DS 14 1649+++8EB7~ ENDS 1650+++8EB7~ 1651+++8EB7~ VARS1 DS VRS 1652+++8EB7~ VARS2 DS VRS 1653+++8EB7~ 1654+++8EB7~ VT_ EQU $-16 1655+++8EB7~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8EB7~ 1657+++8EB7~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8EB7~ 1659+++8EB7~ T_OLD_1 EQU T1_ 1660+++8EB7~ T_OLD_2 EQU T_OLD_1+24 1661+++8EB7~ T_OLD_3 EQU T_OLD_2+24 1662+++8EB7~ T_OLD_0 EQU T_OLD_3+2 1663+++8EB7~ T_NEW_0 EQU T_OLD_0 1664+++8EB7~ T_NEW_1 EQU T_OLD_1 1665+++8EB7~ T_NEW_2 EQU T_NEW_0+24 1666+++8EB7~ T_NEW_3 EQU T_OLD_3 1667+++8EB7~ 1668+++8EB7~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8EB7~ 1670+++8EB7~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8EB7~ 1672+++8EB7~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8EB7~ 1674+++8EB7~ VARSEND EQU $ 1675+++8EB7~ MDLADDR EQU $ 1676+++8EB7~ 1677+++8EB7~ DISPLAY "PTS player size=",$-START 1678+++8EB7~ 1679+++8EB7~ ;Release 0 steps: 1680+++8EB7~ ;04/21/2007 1681+++8EB7~ ;Works start (PTxPlay adaptation); first beta. 1682+++8EB7~ ;04/22/2007 1683+++8EB7~ ;Job finished; beta-testing. 1684+++8EB7~ ;04/23/2007 1685+++8EB7~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8EB7~ ;04/29/2007 1687+++8EB7~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8EB7~ ;modules of v3.7+. 1689+++8EB7~ 1690+++8EB7~ ;Size (minimal build for ZX Spectrum): 1691+++8EB7~ ;Code block #908 bytes 1692+++8EB7~ ;Variables #2BF bytes (can be stripped) 1693+++8EB7~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8EB7~ 1695+++8EB7~ ENDMOD 1696+++8EB7~ 1697+++8EB7 endif 1698+++8EB7 0077++ 8EB7 0078++ 8EB7 PT2.Play=PTS.PLAY 0079++ 8EB7 PT2.Mute=PTS.MUTE 0080++ 8EB7 PT2.End 0081++ 8EB7 0082++ 8EB7 display "PT2 module size: ",PT2.End-PT2.Start 0083++ 8EB7 endif 0084++ 8EB7 0420+ 8EB7 include "ts.asm" 0001++ 8EB7 ifndef _ts_asm_defined 0002++ 8EB7 define _ts_asm_defined 0003++ 8EB7 0004++ 8EB7 module TS 0005++ 8EB7 0006++ 8EB7 struct Footer 0007++ 8EB7~ Sign1 DS 4 0008++ 8EB7~ Size1 DW 0 0009++ 8EB7~ Sign2 DS 4 0010++ 8EB7~ Size2 DW 0 0011++ 8EB7~ Sign3 DS 4 0012++ 8EB7 ENDS 0013++ 8EB7 0014++ 8EB7 Start 0015++ 8EB7 ifndef NoPrologue 0016++ 8EB7~ ld hl,End 0017++ 8EB7~ jr .init 0018++ 8EB7~ jp PTS.PLAY 0019++ 8EB7~ jp PTS.MUTE 0020++ 8EB7~ .init call CheckFormat 0021++ 8EB7~ ;ignore invalids 0022++ 8EB7 endif 0023++ 8EB7 0024++ 8EB7 3E 10 Init ld a,PTS.SETUP.TS02 0025++ 8EB9 C3 6C 82 jp PTS.INIT 0026++ 8EBC 0027++ 8EBC ;in HL - module addr 0028++ 8EBC ;out Z - is ts 0029++ 8EBC ;out HL/DE modules offsets (valid only if Z) 0030++ 8EBC CheckFormat 0031++ 8EBD 54 5D ld d,h,e,l 0032++ 8EBE 14 inc d ;skip 256 bytes 0033++ 8EBF .findfooter 0034++ 8EC0 62 6B ld h,d,l,e 0035++ 8EC1 CD CE 8E call CheckFooter 0036++ 8EC4 C8 ret z 0037++ 8EC5 1C inc e 0038++ 8EC6 20 F7 jr nz,.findfooter 0039++ 8EC8 14 inc d 0040++ 8EC9 20 F4 jr nz,.findfooter 0041++ 8ECB 1C inc e ;reset Z 0042++ 8ECC ;hl/de are invalid!!! 0043++ 8ECC C9 ret 0044++ 8ECD 0045++ 8ECD ;in HL - module addr 0046++ 8ECD ;in BC - module size 0047++ 8ECD ;out Z - is ts 0048++ 8ECD ;out HL/DE - modules offsets (valid only if Z) 0049++ 8ECD ifdef HaveFormatCheck 0050++ 8ECD CheckFormatKnownSize 0051++ 8ECD 09 add hl,bc 0052++ 8ECE endif 0053++ 8ECE CheckFooter 0054++ 8ECE 2B dec hl 0055++ 8ECF 7E ld a,(hl) 0056++ 8ED0 FE 53 cp "S" 0057++ 8ED2 C0 ret nz 0058++ 8ED3 2B dec hl 0059++ 8ED4 7E ld a,(hl) 0060++ 8ED5 FE 54 cp "T" 0061++ 8ED7 C0 ret nz 0062++ 8ED8 2B dec hl 0063++ 8ED9 7E ld a,(hl) 0064++ 8EDA FE 32 cp "2" 0065++ 8EDC C0 ret nz 0066++ 8EDD 2B dec hl 0067++ 8EDE 7E ld a,(hl) 0068++ 8EDF FE 30 cp "0" 0069++ 8EE1 C0 ret nz 0070++ 8EE2 2B dec hl 0071++ 8EE3 56 ld d,(hl) 0072++ 8EE4 2B dec hl 0073++ 8EE5 5E ld e,(hl) ;Size2 0074++ 8EE9 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign2 0075++ 8EEA 2B dec hl 0076++ 8EEB 46 ld b,(hl) 0077++ 8EEC 2B dec hl 0078++ 8EED 4E ld c,(hl) ;Size1 0079++ 8EF1 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign1 0080++ 8EF2 0081++ 8EF2 ED 52 sbc hl,de 0082++ 8EF4 54 ld d,h 0083++ 8EF5 5D ld e,l 0084++ 8EF6 ED 42 sbc hl,bc 0085++ 8EF8 AF xor a 0086++ 8EF9 C9 ret 0087++ 8EFA 0088++ 8EFA ifdef HaveFormatCheck 0089++ 8EFA display "TS checker size: ",$-CheckFormat 0090++ 8EFA endif 0091++ 8EFA 0092++ 8EFA endmod 0093++ 8EFA 0094++ 8EFA include "PTSPlay.asm" 0001+++8EFA ifndef _pts_asm_defined 0002+++8EFA~ define _pts_asm_defined 0003+++8EFA~ 0004+++8EFA~ MODULE PTS 0005+++8EFA~ 0006+++8EFA~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8EFA~ ;(c)2004-2007 S.V.Bulba 0008+++8EFA~ ;Specially for AlCo 0009+++8EFA~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8EFA~ 0011+++8EFA~ ;Release number 0012+++8EFA~ Release EQU "0" 0013+++8EFA~ 0014+++8EFA~ ;Conditional assembly 0015+++8EFA~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8EFA~ CurPosCounter=0 0017+++8EFA~ ;2) Allow channels allocation bits at (SETUP) 0018+++8EFA~ ACBBAC=0 0019+++8EFA~ ;3) Allow loop checking and disabling 0020+++8EFA~ LoopChecker=0 0021+++8EFA~ ;4) Insert official identificator 0022+++8EFA~ Id=0 0023+++8EFA~ ;5) Set IY for correct return to ZX Basic 0024+++8EFA~ Basic=0 0025+++8EFA~ 0026+++8EFA~ ;Features 0027+++8EFA~ ;-------- 0028+++8EFA~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8EFA~ ; address). 0030+++8EFA~ ;-Variables (VARS) can be located at any address (not only after 0031+++8EFA~ ; code block). 0032+++8EFA~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8EFA~ ; generates both note and volume tables outside of code block 0034+++8EFA~ ; (in VARS). 0035+++8EFA~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8EFA~ ; PT3 module version). 0037+++8EFA~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8EFA~ ; and higher). 0039+++8EFA~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8EFA~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8EFA~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8EFA~ ;-See also notes at the end of this source code. 0043+++8EFA~ 0044+++8EFA~ ;Limitations 0045+++8EFA~ ;----------- 0046+++8EFA~ ;-Can run in RAM only (self-modified code is used). 0047+++8EFA~ ;-PT2 position list must be end by #FF marker only. 0048+++8EFA~ 0049+++8EFA~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8EFA~ ;into RAM or INIT subprogram was not called before. 0051+++8EFA~ 0052+++8EFA~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8EFA~ ;playing 0054+++8EFA~ 0055+++8EFA~ TonA EQU 0 0056+++8EFA~ TonB EQU 2 0057+++8EFA~ TonC EQU 4 0058+++8EFA~ Noise EQU 6 0059+++8EFA~ Mixer EQU 7 0060+++8EFA~ AmplA EQU 8 0061+++8EFA~ AmplB EQU 9 0062+++8EFA~ AmplC EQU 10 0063+++8EFA~ Env EQU 11 0064+++8EFA~ EnvTp EQU 13 0065+++8EFA~ 0066+++8EFA~ START 0067+++8EFA~ 0068+++8EFA~ SETUP.NOLOOP EQU 1 0069+++8EFA~ SETUP.PT2 EQU 2 0070+++8EFA~ SETUP.ACB EQU 4 0071+++8EFA~ SETUP.BAC EQU 8 0072+++8EFA~ SETUP.TS02 EQU 16 0073+++8EFA~ SETUP.TSPT3 EQU 32 0074+++8EFA~ 0075+++8EFA~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8EFA~ ;(optional); 0077+++8EFA~ ;set bit1 for PT2 and reset for PT3 before 0078+++8EFA~ ;calling INIT; 0079+++8EFA~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8EFA~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8EFA~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8EFA~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8EFA~ ;documented and must be converted to new standard. 0084+++8EFA~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8EFA~ ;module is passed (optional). 0086+++8EFA~ ;bit7 is set each time, when loop point of 1st TS 0087+++8EFA~ ;or of single module is passed (optional). 0088+++8EFA~ 0089+++8EFA~ ;Identifier 0090+++8EFA~ IF Id 0091+++8EFA~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8EFA~ ENDIF 0093+++8EFA~ 0094+++8EFA~ IF LoopChecker 0095+++8EFA~ CHECKLP LD HL,SETUP 0096+++8EFA~ BIT 0,(IY-100+VRS.ModNum) 0097+++8EFA~ JR Z,CHL1 0098+++8EFA~ SET 6,(HL) 0099+++8EFA~ JR CHL2 0100+++8EFA~ CHL1 SET 7,(HL) 0101+++8EFA~ CHL2 BIT 0,(HL) 0102+++8EFA~ RET Z 0103+++8EFA~ POP HL 0104+++8EFA~ INC (IY-100+VRS.DelyCnt) 0105+++8EFA~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8EFA~ XOR A 0107+++8EFA~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8EFA~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8EFA~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8EFA~ RET 0111+++8EFA~ ENDIF 0112+++8EFA~ 0113+++8EFA~ MUTE XOR A 0114+++8EFA~ LD H,A 0115+++8EFA~ LD L,A 0116+++8EFA~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8EFA~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8EFA~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8EFA~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8EFA~ JP ROUT 0121+++8EFA~ 0122+++8EFA~ INIT 0123+++8EFA~ ;HL - AddressOfModule 0124+++8EFA~ ;DE - AddresOf2ndModule 0125+++8EFA~ ;A - mode 0126+++8EFA~ PUSH DE 0127+++8EFA~ PUSH HL 0128+++8EFA~ LD HL,VARS 0129+++8EFA~ LD (HL),0 0130+++8EFA~ LD DE,VARS+1 0131+++8EFA~ LD BC,VAR0END-VARS-1 0132+++8EFA~ LDIR 0133+++8EFA~ INC HL 0134+++8EFA~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8EFA~ LD (VARS2+VRS.AdInPtA),HL 0136+++8EFA~ 0137+++8EFA~ POP HL 0138+++8EFA~ LD IY,VARS1+100 0139+++8EFA~ LD (SETUP),A 0140+++8EFA~ AND SETUP.PT2 0141+++8EFA~ JP NZ,I_PT2 0142+++8EFA~ 0143+++8EFA~ CALL INITPT3 0144+++8EFA~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8EFA~ LD (SamCnv),HL 0146+++8EFA~ LD A,#BA 0147+++8EFA~ LD (OrnCP),A 0148+++8EFA~ LD (SamCP),A 0149+++8EFA~ LD A,#7B 0150+++8EFA~ LD (OrnLD),A 0151+++8EFA~ LD (SamLD),A 0152+++8EFA~ LD A,#87 0153+++8EFA~ LD (SamClc2),A 0154+++8EFA~ POP HL 0155+++8EFA~ ;Use version and ton table of 1st module 0156+++8EFA~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8EFA~ SUB #30 0158+++8EFA~ JR C,L20 0159+++8EFA~ CP 10 0160+++8EFA~ JR C,L21 0161+++8EFA~ L20 LD A,6 0162+++8EFA~ L21 LD (Version),A 0163+++8EFA~ PUSH AF ;VolTable version 0164+++8EFA~ CP 4 0165+++8EFA~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8EFA~ RLA 0167+++8EFA~ AND 7 0168+++8EFA~ PUSH AF ;NoteTable number 0169+++8EFA~ 0170+++8EFA~ LD IY,VARS2+100 0171+++8EFA~ LD A,(SETUP) 0172+++8EFA~ AND SETUP.TS02|SETUP.TSPT3 0173+++8EFA~ JR Z,NOTS 0174+++8EFA~ CP SETUP.TS02 0175+++8EFA~ JR Z,TwoPT3s 0176+++8EFA~ LD A,(Version) 0177+++8EFA~ CP 7 0178+++8EFA~ JR C,NOTS 0179+++8EFA~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8EFA~ CP #20 0181+++8EFA~ JR Z,NOTS 0182+++8EFA~ LD HL,VARS1 0183+++8EFA~ LD DE,VARS2 0184+++8EFA~ LD BC,VRS 0185+++8EFA~ LDIR 0186+++8EFA~ SET 1,(IY-100+VRS.ModNum) 0187+++8EFA~ LD C,A 0188+++8EFA~ ADD A,A 0189+++8EFA~ ADD A,C 0190+++8EFA~ SUB 2 0191+++8EFA~ LD (TSSub),A 0192+++8EFA~ JR AlCoTS_ 0193+++8EFA~ TwoPT3s CALL INITPT3 0194+++8EFA~ AlCoTS_ LD A,1 0195+++8EFA~ LD (is_ts),A 0196+++8EFA~ SET 0,(IY-100+VRS.ModNum) 0197+++8EFA~ 0198+++8EFA~ NOTS LD BC,PT3PD 0199+++8EFA~ LD HL,0 0200+++8EFA~ LD DE,PT3EMPTYORN 0201+++8EFA~ JR INITCOMMON 0202+++8EFA~ 0203+++8EFA~ I_PT2 CALL INITPT2 0204+++8EFA~ LD HL,#51CB 0205+++8EFA~ LD (SamCnv),HL 0206+++8EFA~ LD A,#BB 0207+++8EFA~ LD (OrnCP),A 0208+++8EFA~ LD (SamCP),A 0209+++8EFA~ LD A,#7A 0210+++8EFA~ LD (OrnLD),A 0211+++8EFA~ LD (SamLD),A 0212+++8EFA~ LD A,#80 0213+++8EFA~ LD (SamClc2),A 0214+++8EFA~ POP HL 0215+++8EFA~ LD A,5 0216+++8EFA~ LD (Version),A 0217+++8EFA~ PUSH AF 0218+++8EFA~ LD A,2 0219+++8EFA~ PUSH AF 0220+++8EFA~ 0221+++8EFA~ LD A,(SETUP) 0222+++8EFA~ AND SETUP.TS02|SETUP.TSPT3 0223+++8EFA~ JR Z,NOTS2 0224+++8EFA~ 0225+++8EFA~ LD IY,VARS2+100 0226+++8EFA~ LD A,1 0227+++8EFA~ LD (is_ts),A 0228+++8EFA~ SET 0,(IY-100+VRS.ModNum) 0229+++8EFA~ CALL INITPT2 0230+++8EFA~ 0231+++8EFA~ NOTS2 LD BC,PT2PD 0232+++8EFA~ LD HL,#8687 0233+++8EFA~ LD DE,PT2EMPTYORN 0234+++8EFA~ 0235+++8EFA~ INITCOMMON 0236+++8EFA~ 0237+++8EFA~ IF Basic 0238+++8EFA~ LD IY,#5C3A 0239+++8EFA~ ENDIF 0240+++8EFA~ 0241+++8EFA~ LD (PTDEC),BC 0242+++8EFA~ LD (PsCalc),HL 0243+++8EFA~ PUSH DE 0244+++8EFA~ 0245+++8EFA~ ;note table data depacker 0246+++8EFA~ ;(c) Ivan Roshin 0247+++8EFA~ LD DE,T_PACK 0248+++8EFA~ LD BC,T1_+(2*49)-1 0249+++8EFA~ TP_0 LD A,(DE) 0250+++8EFA~ INC DE 0251+++8EFA~ CP 15*2 0252+++8EFA~ JR NC,TP_1 0253+++8EFA~ LD H,A 0254+++8EFA~ LD A,(DE) 0255+++8EFA~ LD L,A 0256+++8EFA~ INC DE 0257+++8EFA~ JR TP_2 0258+++8EFA~ TP_1 PUSH DE 0259+++8EFA~ LD D,0 0260+++8EFA~ LD E,A 0261+++8EFA~ ADD HL,DE 0262+++8EFA~ ADD HL,DE 0263+++8EFA~ POP DE 0264+++8EFA~ TP_2 LD A,H 0265+++8EFA~ LD (BC),A 0266+++8EFA~ DEC BC 0267+++8EFA~ LD A,L 0268+++8EFA~ LD (BC),A 0269+++8EFA~ DEC BC 0270+++8EFA~ SUB (#F8*2)&255 0271+++8EFA~ JR NZ,TP_0 0272+++8EFA~ 0273+++8EFA~ INC A 0274+++8EFA~ LD (VARS1+VRS.DelyCnt),A 0275+++8EFA~ LD (VARS2+VRS.DelyCnt),A 0276+++8EFA~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8EFA~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8EFA~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8EFA~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8EFA~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8EFA~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8EFA~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8EFA~ POP HL 0284+++8EFA~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8EFA~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8EFA~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8EFA~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8EFA~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8EFA~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8EFA~ 0291+++8EFA~ POP AF 0292+++8EFA~ 0293+++8EFA~ ;NoteTableCreator (c) Ivan Roshin 0294+++8EFA~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8EFA~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8EFA~ 0297+++8EFA~ LD HL,NT_DATA 0298+++8EFA~ LD D,0 0299+++8EFA~ ADD A,A 0300+++8EFA~ LD E,A 0301+++8EFA~ ADD HL,DE 0302+++8EFA~ LD E,(HL) 0303+++8EFA~ INC HL 0304+++8EFA~ SRL E 0305+++8EFA~ SBC A,A 0306+++8EFA~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8EFA~ LD (L3),A 0308+++8EFA~ EX DE,HL 0309+++8EFA~ LD BC,T1_ 0310+++8EFA~ ADD HL,BC 0311+++8EFA~ 0312+++8EFA~ LD A,(DE) 0313+++8EFA~ ADD A,T_&255 0314+++8EFA~ LD C,A 0315+++8EFA~ ADC A,T_/256 0316+++8EFA~ SUB C 0317+++8EFA~ LD B,A 0318+++8EFA~ PUSH BC 0319+++8EFA~ LD DE,NT_ 0320+++8EFA~ PUSH DE 0321+++8EFA~ 0322+++8EFA~ LD B,12 0323+++8EFA~ L1 PUSH BC 0324+++8EFA~ LD C,(HL) 0325+++8EFA~ INC HL 0326+++8EFA~ PUSH HL 0327+++8EFA~ LD B,(HL) 0328+++8EFA~ 0329+++8EFA~ PUSH DE 0330+++8EFA~ EX DE,HL 0331+++8EFA~ LD DE,23 0332+++8EFA~ LD IXH,8 0333+++8EFA~ 0334+++8EFA~ L2 SRL B 0335+++8EFA~ RR C 0336+++8EFA~ L3 DB #19 ;AND A or NOP 0337+++8EFA~ LD A,C 0338+++8EFA~ ADC A,D ;=ADC 0 0339+++8EFA~ LD (HL),A 0340+++8EFA~ INC HL 0341+++8EFA~ LD A,B 0342+++8EFA~ ADC A,D 0343+++8EFA~ LD (HL),A 0344+++8EFA~ ADD HL,DE 0345+++8EFA~ DEC IXH 0346+++8EFA~ JR NZ,L2 0347+++8EFA~ 0348+++8EFA~ POP DE 0349+++8EFA~ INC DE 0350+++8EFA~ INC DE 0351+++8EFA~ POP HL 0352+++8EFA~ INC HL 0353+++8EFA~ POP BC 0354+++8EFA~ DJNZ L1 0355+++8EFA~ 0356+++8EFA~ POP HL 0357+++8EFA~ POP DE 0358+++8EFA~ 0359+++8EFA~ LD A,E 0360+++8EFA~ CP TCOLD_1&255 0361+++8EFA~ JR NZ,CORR_1 0362+++8EFA~ LD A,#FD 0363+++8EFA~ LD (NT_+#2E),A 0364+++8EFA~ 0365+++8EFA~ CORR_1 LD A,(DE) 0366+++8EFA~ AND A 0367+++8EFA~ JR Z,TC_EXIT 0368+++8EFA~ RRA 0369+++8EFA~ PUSH AF 0370+++8EFA~ ADD A,A 0371+++8EFA~ LD C,A 0372+++8EFA~ ADD HL,BC 0373+++8EFA~ POP AF 0374+++8EFA~ JR NC,CORR_2 0375+++8EFA~ DEC (HL) 0376+++8EFA~ DEC (HL) 0377+++8EFA~ CORR_2 INC (HL) 0378+++8EFA~ AND A 0379+++8EFA~ SBC HL,BC 0380+++8EFA~ INC DE 0381+++8EFA~ JR CORR_1 0382+++8EFA~ 0383+++8EFA~ TC_EXIT 0384+++8EFA~ 0385+++8EFA~ POP AF 0386+++8EFA~ 0387+++8EFA~ ;VolTableCreator (c) Ivan Roshin 0388+++8EFA~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8EFA~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8EFA~ 0391+++8EFA~ CP 5 0392+++8EFA~ LD HL,#11 0393+++8EFA~ LD D,H 0394+++8EFA~ LD E,H 0395+++8EFA~ LD A,#17 0396+++8EFA~ JR NC,M1 0397+++8EFA~ DEC L 0398+++8EFA~ LD E,L 0399+++8EFA~ XOR A 0400+++8EFA~ M1 LD (M2),A 0401+++8EFA~ 0402+++8EFA~ LD IX,VT_+16 0403+++8EFA~ 0404+++8EFA~ LD C,#F 0405+++8EFA~ INITV2 PUSH HL 0406+++8EFA~ 0407+++8EFA~ ADD HL,DE 0408+++8EFA~ EX DE,HL 0409+++8EFA~ SBC HL,HL 0410+++8EFA~ 0411+++8EFA~ LD B,#10 0412+++8EFA~ INITV1 LD A,L 0413+++8EFA~ M2 DB #7D 0414+++8EFA~ LD A,H 0415+++8EFA~ ADC A,0 0416+++8EFA~ LD (IX),A 0417+++8EFA~ INC IX 0418+++8EFA~ ADD HL,DE 0419+++8EFA~ DJNZ INITV1 0420+++8EFA~ 0421+++8EFA~ POP HL 0422+++8EFA~ LD A,E 0423+++8EFA~ CP #77 0424+++8EFA~ JR NZ,M3 0425+++8EFA~ INC E 0426+++8EFA~ M3 DEC C 0427+++8EFA~ JR NZ,INITV2 0428+++8EFA~ 0429+++8EFA~ JP ROUT 0430+++8EFA~ 0431+++8EFA~ INITPT3 CALL SETMDAD 0432+++8EFA~ PUSH HL 0433+++8EFA~ LD DE,100 0434+++8EFA~ ADD HL,DE 0435+++8EFA~ LD A,(HL) 0436+++8EFA~ LD (IY-100+VRS.Delay),A 0437+++8EFA~ PUSH HL 0438+++8EFA~ POP IX 0439+++8EFA~ ADD HL,DE 0440+++8EFA~ CALL SETCPPT 0441+++8EFA~ LD E,(IX+102-100) 0442+++8EFA~ INC HL 0443+++8EFA~ 0444+++8EFA~ IF CurPosCounter 0445+++8EFA~ LD (IY-100+VRS.PosSub),L 0446+++8EFA~ ENDIF 0447+++8EFA~ 0448+++8EFA~ ADD HL,DE 0449+++8EFA~ CALL SETLPPT 0450+++8EFA~ POP DE 0451+++8EFA~ LD L,(IX+103-100) 0452+++8EFA~ LD H,(IX+104-100) 0453+++8EFA~ ADD HL,DE 0454+++8EFA~ CALL SETPTPT 0455+++8EFA~ LD HL,169 0456+++8EFA~ ADD HL,DE 0457+++8EFA~ CALL SETORPT 0458+++8EFA~ LD HL,105 0459+++8EFA~ ADD HL,DE 0460+++8EFA~ 0461+++8EFA~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8EFA~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8EFA~ RET 0464+++8EFA~ 0465+++8EFA~ INITPT2 LD A,(HL) 0466+++8EFA~ LD (IY-100+VRS.Delay),A 0467+++8EFA~ PUSH HL 0468+++8EFA~ PUSH HL 0469+++8EFA~ PUSH HL 0470+++8EFA~ INC HL 0471+++8EFA~ INC HL 0472+++8EFA~ LD A,(HL) 0473+++8EFA~ INC HL 0474+++8EFA~ CALL SETSMPT 0475+++8EFA~ LD E,(HL) 0476+++8EFA~ INC HL 0477+++8EFA~ LD D,(HL) 0478+++8EFA~ POP HL 0479+++8EFA~ AND A 0480+++8EFA~ SBC HL,DE 0481+++8EFA~ CALL SETMDAD 0482+++8EFA~ POP HL 0483+++8EFA~ LD DE,67 0484+++8EFA~ ADD HL,DE 0485+++8EFA~ CALL SETORPT 0486+++8EFA~ LD E,32 0487+++8EFA~ ADD HL,DE 0488+++8EFA~ LD C,(HL) 0489+++8EFA~ INC HL 0490+++8EFA~ LD B,(HL) 0491+++8EFA~ LD E,30 0492+++8EFA~ ADD HL,DE 0493+++8EFA~ CALL SETCPPT 0494+++8EFA~ LD E,A 0495+++8EFA~ INC HL 0496+++8EFA~ 0497+++8EFA~ IF CurPosCounter 0498+++8EFA~ LD (IY-100+VRS.PosSub),L 0499+++8EFA~ ENDIF 0500+++8EFA~ 0501+++8EFA~ ADD HL,DE 0502+++8EFA~ CALL SETLPPT 0503+++8EFA~ POP HL 0504+++8EFA~ ADD HL,BC 0505+++8EFA~ 0506+++8EFA~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8EFA~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8EFA~ RET 0509+++8EFA~ 0510+++8EFA~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8EFA~ LD (IY-100+VRS.MODADDR+1),H 0512+++8EFA~ RET 0513+++8EFA~ 0514+++8EFA~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8EFA~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8EFA~ RET 0517+++8EFA~ 0518+++8EFA~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8EFA~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8EFA~ RET 0521+++8EFA~ 0522+++8EFA~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8EFA~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8EFA~ RET 0525+++8EFA~ 0526+++8EFA~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8EFA~ LD (IY-100+VRS.EnvBase+1),H 0528+++8EFA~ RET 0529+++8EFA~ 0530+++8EFA~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8EFA~ LD (IY-100+VRS.CurESld+1),H 0532+++8EFA~ RET 0533+++8EFA~ 0534+++8EFA~ GETIX PUSH IY 0535+++8EFA~ POP IX 0536+++8EFA~ ADD IX,DE 0537+++8EFA~ RET 0538+++8EFA~ 0539+++8EFA~ PTDECOD CALL GETIX 0540+++8EFA~ PTDEC EQU $+1 0541+++8EFA~ JP #C3C3 0542+++8EFA~ 0543+++8EFA~ ;PT2 pattern decoder 0544+++8EFA~ PD2_SAM CALL SETSAM 0545+++8EFA~ JR PD2_LOOP 0546+++8EFA~ 0547+++8EFA~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8EFA~ JR PD2_LOOP 0549+++8EFA~ 0550+++8EFA~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8EFA~ LD A,(BC) 0553+++8EFA~ INC BC 0554+++8EFA~ LD L,A 0555+++8EFA~ LD A,(BC) 0556+++8EFA~ INC BC 0557+++8EFA~ LD H,A 0558+++8EFA~ CALL SETENBS 0559+++8EFA~ JR PD2_LOOP 0560+++8EFA~ 0561+++8EFA~ PD2_ORN CALL SETORN 0562+++8EFA~ JR PD2_LOOP 0563+++8EFA~ 0564+++8EFA~ PD2_SKIP INC A 0565+++8EFA~ LD (IX-12+CHP.NNtSkp),A 0566+++8EFA~ JR PD2_LOOP 0567+++8EFA~ 0568+++8EFA~ PD2_VOL RRCA 0569+++8EFA~ RRCA 0570+++8EFA~ RRCA 0571+++8EFA~ RRCA 0572+++8EFA~ LD (IX-12+CHP.Volume),A 0573+++8EFA~ JR PD2_LOOP 0574+++8EFA~ 0575+++8EFA~ PD2_DEL CALL C_DELAY 0576+++8EFA~ JR PD2_LOOP 0577+++8EFA~ 0578+++8EFA~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8EFA~ INC A 0580+++8EFA~ LD (IX-12+CHP.TnSlDl),A 0581+++8EFA~ LD (IX-12+CHP.TSlCnt),A 0582+++8EFA~ LD A,(BC) 0583+++8EFA~ INC BC 0584+++8EFA~ LD (IX-12+CHP.TSlStp),A 0585+++8EFA~ ADD A,A 0586+++8EFA~ SBC A,A 0587+++8EFA~ LD (IX-12+CHP.TSlStp+1),A 0588+++8EFA~ SCF 0589+++8EFA~ JR PD2_LP2 0590+++8EFA~ 0591+++8EFA~ PT2PD AND A 0592+++8EFA~ 0593+++8EFA~ PD2_LP2 EX AF,AF' 0594+++8EFA~ 0595+++8EFA~ PD2_LOOP LD A,(BC) 0596+++8EFA~ INC BC 0597+++8EFA~ ADD A,#20 0598+++8EFA~ JR Z,PD2_REL 0599+++8EFA~ JR C,PD2_SAM 0600+++8EFA~ ADD A,96 0601+++8EFA~ JR C,PD2_NOTE 0602+++8EFA~ INC A 0603+++8EFA~ JR Z,PD2_EOff 0604+++8EFA~ ADD A,15 0605+++8EFA~ JP Z,PD_FIN 0606+++8EFA~ JR C,PD2_ENV 0607+++8EFA~ ADD A,#10 0608+++8EFA~ JR C,PD2_ORN 0609+++8EFA~ ADD A,#40 0610+++8EFA~ JR C,PD2_SKIP 0611+++8EFA~ ADD A,#10 0612+++8EFA~ JR C,PD2_VOL 0613+++8EFA~ INC A 0614+++8EFA~ JR Z,PD2_DEL 0615+++8EFA~ INC A 0616+++8EFA~ JR Z,PD2_GLIS 0617+++8EFA~ INC A 0618+++8EFA~ JR Z,PD2_PORT 0619+++8EFA~ INC A 0620+++8EFA~ JR Z,PD2_STOP 0621+++8EFA~ LD A,(BC) 0622+++8EFA~ INC BC 0623+++8EFA~ LD (IX-12+CHP.CrNsSl),A 0624+++8EFA~ JR PD2_LOOP 0625+++8EFA~ 0626+++8EFA~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8EFA~ LD A,(BC) 0628+++8EFA~ INC BC 0629+++8EFA~ INC BC ;ignoring precalc delta to right sound 0630+++8EFA~ INC BC 0631+++8EFA~ SCF 0632+++8EFA~ JR PD2_LP2 0633+++8EFA~ 0634+++8EFA~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8EFA~ JR PD2_LOOP 0636+++8EFA~ 0637+++8EFA~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8EFA~ JR PD2_EXIT 0639+++8EFA~ 0640+++8EFA~ PD2_NOTE LD L,A 0641+++8EFA~ LD A,(IX-12+CHP.Note) 0642+++8EFA~ LD (PrNote+1),A 0643+++8EFA~ LD (IX-12+CHP.Note),L 0644+++8EFA~ XOR A 0645+++8EFA~ LD (IX-12+CHP.TSlCnt),A 0646+++8EFA~ SET 0,(IX-12+CHP.Flags) 0647+++8EFA~ EX AF,AF' 0648+++8EFA~ JR NC,NOGLIS2 0649+++8EFA~ BIT 2,(IX-12+CHP.Flags) 0650+++8EFA~ JR NZ,NOPORT2 0651+++8EFA~ LD (LoStep),A 0652+++8EFA~ ADD A,A 0653+++8EFA~ SBC A,A 0654+++8EFA~ EX AF,AF' 0655+++8EFA~ LD H,A 0656+++8EFA~ LD L,A 0657+++8EFA~ INC A 0658+++8EFA~ CALL SETPORT 0659+++8EFA~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8EFA~ NOGLIS2 XOR A 0661+++8EFA~ 0662+++8EFA~ 0663+++8EFA~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8EFA~ LD (IX-12+CHP.PsInOr),A 0665+++8EFA~ LD (IX-12+CHP.CrTnSl),A 0666+++8EFA~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8EFA~ JP PD_FIN 0668+++8EFA~ 0669+++8EFA~ ;PT3 pattern decoder 0670+++8EFA~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8EFA~ CALL SETORN 0672+++8EFA~ PD_SAM_ LD A,(BC) 0673+++8EFA~ INC BC 0674+++8EFA~ RRCA 0675+++8EFA~ 0676+++8EFA~ PD_SAM CALL SETSAM 0677+++8EFA~ JR PD_LOOP 0678+++8EFA~ 0679+++8EFA~ PD_VOL RRCA 0680+++8EFA~ RRCA 0681+++8EFA~ RRCA 0682+++8EFA~ RRCA 0683+++8EFA~ LD (IX-12+CHP.Volume),A 0684+++8EFA~ JR PD_LP2 0685+++8EFA~ 0686+++8EFA~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8EFA~ LD (IX-12+CHP.PsInOr),A 0688+++8EFA~ JR PD_LP2 0689+++8EFA~ 0690+++8EFA~ PD_SorE DEC A 0691+++8EFA~ JR NZ,PD_ENV 0692+++8EFA~ LD A,(BC) 0693+++8EFA~ INC BC 0694+++8EFA~ LD (IX-12+CHP.NNtSkp),A 0695+++8EFA~ JR PD_LP2 0696+++8EFA~ 0697+++8EFA~ PD_ENV CALL SETENV 0698+++8EFA~ JR PD_LP2 0699+++8EFA~ 0700+++8EFA~ PD_ORN CALL SETORN 0701+++8EFA~ JR PD_LOOP 0702+++8EFA~ 0703+++8EFA~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8EFA~ LD (IX-12+CHP.PsInOr),A 0705+++8EFA~ CALL NZ,SETENV 0706+++8EFA~ JR PD_SAM_ 0707+++8EFA~ 0708+++8EFA~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8EFA~ LD (PrNote+1),A 0710+++8EFA~ LD L,(IX-12+CHP.CrTnSl) 0711+++8EFA~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8EFA~ LD (PrSlide+1),HL 0713+++8EFA~ 0714+++8EFA~ PD_LOOP LD DE,#2010 0715+++8EFA~ PD_LP2 LD A,(BC) 0716+++8EFA~ INC BC 0717+++8EFA~ ADD A,E 0718+++8EFA~ JR C,PD_OrSm 0719+++8EFA~ ADD A,D 0720+++8EFA~ JR Z,PD_FIN 0721+++8EFA~ JR C,PD_SAM 0722+++8EFA~ ADD A,E 0723+++8EFA~ JR Z,PD_REL 0724+++8EFA~ JR C,PD_VOL 0725+++8EFA~ ADD A,E 0726+++8EFA~ JR Z,PD_EOff 0727+++8EFA~ JR C,PD_SorE 0728+++8EFA~ ADD A,96 0729+++8EFA~ JR C,PD_NOTE 0730+++8EFA~ ADD A,E 0731+++8EFA~ JR C,PD_ORN 0732+++8EFA~ ADD A,D 0733+++8EFA~ JR C,PD_NOIS 0734+++8EFA~ ADD A,E 0735+++8EFA~ JR C,PD_ESAM 0736+++8EFA~ ADD A,A 0737+++8EFA~ LD E,A 0738+++8EFA~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8EFA~ ADD HL,DE 0740+++8EFA~ LD E,(HL) 0741+++8EFA~ INC HL 0742+++8EFA~ LD D,(HL) 0743+++8EFA~ PUSH DE 0744+++8EFA~ JR PD_LOOP 0745+++8EFA~ 0746+++8EFA~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8EFA~ JR PD_LP2 0748+++8EFA~ 0749+++8EFA~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8EFA~ JR PD_RES 0751+++8EFA~ 0752+++8EFA~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8EFA~ SET 0,(IX-12+CHP.Flags) 0754+++8EFA~ XOR A 0755+++8EFA~ 0756+++8EFA~ PD_RES LD (PDSP_+1),SP 0757+++8EFA~ LD SP,IX 0758+++8EFA~ LD H,A 0759+++8EFA~ LD L,A 0760+++8EFA~ PUSH HL 0761+++8EFA~ PUSH HL 0762+++8EFA~ PUSH HL 0763+++8EFA~ PUSH HL 0764+++8EFA~ PUSH HL 0765+++8EFA~ PUSH HL 0766+++8EFA~ PDSP_ LD SP,#3131 0767+++8EFA~ 0768+++8EFA~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8EFA~ LD (IX-12+CHP.NtSkCn),A 0770+++8EFA~ RET 0771+++8EFA~ 0772+++8EFA~ C_PORTM LD A,(BC) 0773+++8EFA~ INC BC 0774+++8EFA~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8EFA~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8EFA~ INC BC 0777+++8EFA~ INC BC 0778+++8EFA~ EX AF,AF' 0779+++8EFA~ LD A,(BC) ;SIGNED TONE STEP 0780+++8EFA~ INC BC 0781+++8EFA~ LD (LoStep),A 0782+++8EFA~ LD A,(BC) 0783+++8EFA~ INC BC 0784+++8EFA~ AND A 0785+++8EFA~ EX AF,AF' 0786+++8EFA~ LD L,(IX-12+CHP.CrTnSl) 0787+++8EFA~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8EFA~ 0789+++8EFA~ ;Set portamento variables 0790+++8EFA~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8EFA~ 0792+++8EFA~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8EFA~ LD (IX-12+CHP.TnSlDl),A 0794+++8EFA~ LD (IX-12+CHP.TSlCnt),A 0795+++8EFA~ PUSH HL 0796+++8EFA~ LD DE,NT_ 0797+++8EFA~ LD A,(IX-12+CHP.Note) 0798+++8EFA~ LD (IX-12+CHP.SlToNt),A 0799+++8EFA~ ADD A,A 0800+++8EFA~ LD L,A 0801+++8EFA~ LD H,0 0802+++8EFA~ ADD HL,DE 0803+++8EFA~ LD A,(HL) 0804+++8EFA~ INC HL 0805+++8EFA~ LD H,(HL) 0806+++8EFA~ LD L,A 0807+++8EFA~ PUSH HL 0808+++8EFA~ PrNote LD A,#3E 0809+++8EFA~ LD (IX-12+CHP.Note),A 0810+++8EFA~ ADD A,A 0811+++8EFA~ LD L,A 0812+++8EFA~ LD H,0 0813+++8EFA~ ADD HL,DE 0814+++8EFA~ LD E,(HL) 0815+++8EFA~ INC HL 0816+++8EFA~ LD D,(HL) 0817+++8EFA~ POP HL 0818+++8EFA~ SBC HL,DE 0819+++8EFA~ LD (IX-12+CHP.TnDelt),L 0820+++8EFA~ LD (IX-12+CHP.TnDelt+1),H 0821+++8EFA~ POP DE 0822+++8EFA~ Version EQU $+1 0823+++8EFA~ LD A,#3E 0824+++8EFA~ CP 6 0825+++8EFA~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8EFA~ PrSlide LD DE,#1111 0827+++8EFA~ LD (IX-12+CHP.CrTnSl),E 0828+++8EFA~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8EFA~ LoStep EQU $+1 0830+++8EFA~ OLDPRTM LD A,#3E 0831+++8EFA~ EX AF,AF' 0832+++8EFA~ JR Z,NOSIG 0833+++8EFA~ EX DE,HL 0834+++8EFA~ NOSIG SBC HL,DE 0835+++8EFA~ JP P,SET_STP 0836+++8EFA~ CPL 0837+++8EFA~ EX AF,AF' 0838+++8EFA~ NEG 0839+++8EFA~ EX AF,AF' 0840+++8EFA~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8EFA~ EX AF,AF' 0842+++8EFA~ LD (IX-12+CHP.TSlStp),A 0843+++8EFA~ LD (IX-12+CHP.COnOff),0 0844+++8EFA~ RET 0845+++8EFA~ 0846+++8EFA~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8EFA~ LD A,(BC) 0848+++8EFA~ INC BC 0849+++8EFA~ LD (IX-12+CHP.TnSlDl),A 0850+++8EFA~ AND A 0851+++8EFA~ JR NZ,GL36 0852+++8EFA~ LD A,(Version) ;AlCo PT3.7+ 0853+++8EFA~ CP 7 0854+++8EFA~ SBC A,A 0855+++8EFA~ INC A 0856+++8EFA~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8EFA~ LD A,(BC) 0858+++8EFA~ INC BC 0859+++8EFA~ EX AF,AF' 0860+++8EFA~ LD A,(BC) 0861+++8EFA~ INC BC 0862+++8EFA~ JR SET_STP 0863+++8EFA~ 0864+++8EFA~ C_SMPOS LD A,(BC) 0865+++8EFA~ INC BC 0866+++8EFA~ LD (IX-12+CHP.PsInSm),A 0867+++8EFA~ RET 0868+++8EFA~ 0869+++8EFA~ C_ORPOS LD A,(BC) 0870+++8EFA~ INC BC 0871+++8EFA~ LD (IX-12+CHP.PsInOr),A 0872+++8EFA~ RET 0873+++8EFA~ 0874+++8EFA~ C_VIBRT LD A,(BC) 0875+++8EFA~ INC BC 0876+++8EFA~ LD (IX-12+CHP.OnOffD),A 0877+++8EFA~ LD (IX-12+CHP.COnOff),A 0878+++8EFA~ LD A,(BC) 0879+++8EFA~ INC BC 0880+++8EFA~ LD (IX-12+CHP.OffOnD),A 0881+++8EFA~ XOR A 0882+++8EFA~ LD (IX-12+CHP.TSlCnt),A 0883+++8EFA~ LD (IX-12+CHP.CrTnSl),A 0884+++8EFA~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8EFA~ RET 0886+++8EFA~ 0887+++8EFA~ C_ENGLS LD A,(BC) 0888+++8EFA~ INC BC 0889+++8EFA~ LD (IY-100+VRS.Env_Del),A 0890+++8EFA~ LD (IY-100+VRS.CurEDel),A 0891+++8EFA~ LD A,(BC) 0892+++8EFA~ INC BC 0893+++8EFA~ LD L,A 0894+++8EFA~ LD A,(BC) 0895+++8EFA~ INC BC 0896+++8EFA~ LD H,A 0897+++8EFA~ LD (IY-100+VRS.ESldAdd),L 0898+++8EFA~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8EFA~ RET 0900+++8EFA~ 0901+++8EFA~ C_DELAY LD A,(BC) 0902+++8EFA~ INC BC 0903+++8EFA~ LD (IY-100+VRS.Delay),A 0904+++8EFA~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8EFA~ BIT 1,(HL) 0906+++8EFA~ RET Z 0907+++8EFA~ LD (VARS1+VRS.Delay),A 0908+++8EFA~ LD (VARS1+VRS.DelyCnt),A 0909+++8EFA~ LD (VARS2+VRS.Delay),A 0910+++8EFA~ RET 0911+++8EFA~ 0912+++8EFA~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8EFA~ LD A,(BC) 0915+++8EFA~ INC BC 0916+++8EFA~ LD H,A 0917+++8EFA~ LD A,(BC) 0918+++8EFA~ INC BC 0919+++8EFA~ LD L,A 0920+++8EFA~ CALL SETENBS 0921+++8EFA~ XOR A 0922+++8EFA~ LD (IX-12+CHP.PsInOr),A 0923+++8EFA~ LD (IY-100+VRS.CurEDel),A 0924+++8EFA~ LD H,A 0925+++8EFA~ LD L,A 0926+++8EFA~ JP SETESLD 0927+++8EFA~ 0928+++8EFA~ SETORN ADD A,A 0929+++8EFA~ LD E,A 0930+++8EFA~ LD D,0 0931+++8EFA~ LD (IX-12+CHP.PsInOr),D 0932+++8EFA~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8EFA~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8EFA~ ADD HL,DE 0935+++8EFA~ LD E,(HL) 0936+++8EFA~ INC HL 0937+++8EFA~ LD D,(HL) 0938+++8EFA~ LD L,(IY-100+VRS.MODADDR) 0939+++8EFA~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8EFA~ ADD HL,DE 0941+++8EFA~ LD (IX-12+CHP.OrnPtr),L 0942+++8EFA~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8EFA~ C_NOP RET 0944+++8EFA~ 0945+++8EFA~ SETSAM ADD A,A 0946+++8EFA~ LD E,A 0947+++8EFA~ LD D,0 0948+++8EFA~ LD L,(IY-100+VRS.SamPtrs); 0949+++8EFA~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8EFA~ ADD HL,DE 0951+++8EFA~ LD E,(HL) 0952+++8EFA~ INC HL 0953+++8EFA~ LD D,(HL) 0954+++8EFA~ LD L,(IY-100+VRS.MODADDR) 0955+++8EFA~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8EFA~ ADD HL,DE 0957+++8EFA~ LD (IX-12+CHP.SamPtr),L 0958+++8EFA~ LD (IX-12+CHP.SamPtr+1),H 0959+++8EFA~ RET 0960+++8EFA~ 0961+++8EFA~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8EFA~ SPCCOMS DW C_NOP 0963+++8EFA~ DW C_GLISS 0964+++8EFA~ DW C_PORTM 0965+++8EFA~ DW C_SMPOS 0966+++8EFA~ DW C_ORPOS 0967+++8EFA~ DW C_VIBRT 0968+++8EFA~ DW C_NOP 0969+++8EFA~ DW C_NOP 0970+++8EFA~ DW C_ENGLS 0971+++8EFA~ DW C_DELAY 0972+++8EFA~ DW C_NOP 0973+++8EFA~ DW C_NOP 0974+++8EFA~ DW C_NOP 0975+++8EFA~ DW C_NOP 0976+++8EFA~ DW C_NOP 0977+++8EFA~ DW C_NOP 0978+++8EFA~ 0979+++8EFA~ CHREGS CALL GETIX 0980+++8EFA~ XOR A 0981+++8EFA~ LD (Ampl),A 0982+++8EFA~ BIT 0,(IX+CHP.Flags) 0983+++8EFA~ PUSH HL 0984+++8EFA~ JP Z,CH_EXIT 0985+++8EFA~ LD (CSP_+1),SP 0986+++8EFA~ LD L,(IX+CHP.OrnPtr) 0987+++8EFA~ LD H,(IX+CHP.OrnPtr+1) 0988+++8EFA~ LD SP,HL 0989+++8EFA~ POP DE 0990+++8EFA~ LD H,A 0991+++8EFA~ LD A,(IX+CHP.PsInOr) 0992+++8EFA~ LD L,A 0993+++8EFA~ ADD HL,SP 0994+++8EFA~ INC A 0995+++8EFA~ ;PT2 PT3 0996+++8EFA~ OrnCP INC A ;CP E CP D 0997+++8EFA~ JR C,CH_ORPS 0998+++8EFA~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8EFA~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8EFA~ LD A,(IX+CHP.Note) 1001+++8EFA~ ADD A,(HL) 1002+++8EFA~ JP P,CH_NTP 1003+++8EFA~ XOR A 1004+++8EFA~ CH_NTP CP 96 1005+++8EFA~ JR C,CH_NOK 1006+++8EFA~ LD A,95 1007+++8EFA~ CH_NOK ADD A,A 1008+++8EFA~ EX AF,AF' 1009+++8EFA~ LD L,(IX+CHP.SamPtr) 1010+++8EFA~ LD H,(IX+CHP.SamPtr+1) 1011+++8EFA~ LD SP,HL 1012+++8EFA~ POP DE 1013+++8EFA~ LD H,0 1014+++8EFA~ LD A,(IX+CHP.PsInSm) 1015+++8EFA~ LD B,A 1016+++8EFA~ ADD A,A 1017+++8EFA~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8EFA~ LD L,A 1019+++8EFA~ ADD HL,SP 1020+++8EFA~ LD SP,HL 1021+++8EFA~ LD A,B 1022+++8EFA~ INC A 1023+++8EFA~ ;PT2 PT3 1024+++8EFA~ SamCP INC A ;CP E CP D 1025+++8EFA~ JR C,CH_SMPS 1026+++8EFA~ SamLD DB 1 ;LD A,D LD A,E 1027+++8EFA~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8EFA~ POP BC 1029+++8EFA~ POP HL 1030+++8EFA~ 1031+++8EFA~ ;Convert PT2 sample to PT3 1032+++8EFA~ ;PT2 PT3 1033+++8EFA~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8EFA~ POP HL 1035+++8EFA~ LD H,B 1036+++8EFA~ JR NZ,$+8 1037+++8EFA~ EX DE,HL 1038+++8EFA~ AND A 1039+++8EFA~ SBC HL,HL 1040+++8EFA~ SBC HL,DE 1041+++8EFA~ LD D,C 1042+++8EFA~ RR C 1043+++8EFA~ SBC A,A 1044+++8EFA~ CPL 1045+++8EFA~ AND #3E 1046+++8EFA~ RR C 1047+++8EFA~ RR B 1048+++8EFA~ AND C 1049+++8EFA~ LD C,A 1050+++8EFA~ LD A,B 1051+++8EFA~ RRA 1052+++8EFA~ RRA 1053+++8EFA~ RR D 1054+++8EFA~ RRA 1055+++8EFA~ AND #9F 1056+++8EFA~ LD B,A 1057+++8EFA~ 1058+++8EFA~ e_ LD E,(IX+CHP.TnAcc) 1059+++8EFA~ LD D,(IX+CHP.TnAcc+1) 1060+++8EFA~ ADD HL,DE 1061+++8EFA~ BIT 6,B 1062+++8EFA~ JR Z,CH_NOAC 1063+++8EFA~ LD (IX+CHP.TnAcc),L 1064+++8EFA~ LD (IX+CHP.TnAcc+1),H 1065+++8EFA~ CH_NOAC EX DE,HL 1066+++8EFA~ EX AF,AF' 1067+++8EFA~ ADD A,NT_&255 1068+++8EFA~ LD L,A 1069+++8EFA~ ADC A,NT_/256 1070+++8EFA~ SUB L 1071+++8EFA~ LD H,A 1072+++8EFA~ LD SP,HL 1073+++8EFA~ POP HL 1074+++8EFA~ ADD HL,DE 1075+++8EFA~ LD E,(IX+CHP.CrTnSl) 1076+++8EFA~ LD D,(IX+CHP.CrTnSl+1) 1077+++8EFA~ ADD HL,DE 1078+++8EFA~ CSP_ LD SP,#3131 1079+++8EFA~ EX (SP),HL 1080+++8EFA~ XOR A 1081+++8EFA~ OR (IX+CHP.TSlCnt) 1082+++8EFA~ JR Z,CH_AMP 1083+++8EFA~ DEC (IX+CHP.TSlCnt) 1084+++8EFA~ JR NZ,CH_AMP 1085+++8EFA~ LD A,(IX+CHP.TnSlDl) 1086+++8EFA~ LD (IX+CHP.TSlCnt),A 1087+++8EFA~ LD L,(IX+CHP.TSlStp) 1088+++8EFA~ LD H,(IX+CHP.TSlStp+1) 1089+++8EFA~ LD A,H 1090+++8EFA~ ADD HL,DE 1091+++8EFA~ LD (IX+CHP.CrTnSl),L 1092+++8EFA~ LD (IX+CHP.CrTnSl+1),H 1093+++8EFA~ BIT 2,(IX+CHP.Flags) 1094+++8EFA~ JR NZ,CH_AMP 1095+++8EFA~ LD E,(IX+CHP.TnDelt) 1096+++8EFA~ LD D,(IX+CHP.TnDelt+1) 1097+++8EFA~ AND A 1098+++8EFA~ JR Z,CH_STPP 1099+++8EFA~ EX DE,HL 1100+++8EFA~ CH_STPP SBC HL,DE 1101+++8EFA~ JP M,CH_AMP 1102+++8EFA~ LD A,(IX+CHP.SlToNt) 1103+++8EFA~ LD (IX+CHP.Note),A 1104+++8EFA~ XOR A 1105+++8EFA~ LD (IX+CHP.TSlCnt),A 1106+++8EFA~ LD (IX+CHP.CrTnSl),A 1107+++8EFA~ LD (IX+CHP.CrTnSl+1),A 1108+++8EFA~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8EFA~ BIT 7,C 1110+++8EFA~ JR Z,CH_NOAM 1111+++8EFA~ BIT 6,C 1112+++8EFA~ JR Z,CH_AMIN 1113+++8EFA~ CP 15 1114+++8EFA~ JR Z,CH_NOAM 1115+++8EFA~ INC A 1116+++8EFA~ JR CH_SVAM 1117+++8EFA~ CH_AMIN CP -15 1118+++8EFA~ JR Z,CH_NOAM 1119+++8EFA~ DEC A 1120+++8EFA~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8EFA~ CH_NOAM LD L,A 1122+++8EFA~ LD A,B 1123+++8EFA~ AND 15 1124+++8EFA~ ADD A,L 1125+++8EFA~ JP P,CH_APOS 1126+++8EFA~ XOR A 1127+++8EFA~ CH_APOS CP 16 1128+++8EFA~ JR C,CH_VOL 1129+++8EFA~ LD A,15 1130+++8EFA~ CH_VOL OR (IX+CHP.Volume) 1131+++8EFA~ ADD A,VT_&255 1132+++8EFA~ LD L,A 1133+++8EFA~ ADC A,VT_/256 1134+++8EFA~ SUB L 1135+++8EFA~ LD H,A 1136+++8EFA~ LD A,(HL) 1137+++8EFA~ CH_ENV BIT 0,C 1138+++8EFA~ JR NZ,CH_NOEN 1139+++8EFA~ OR (IX+CHP.Env_En) 1140+++8EFA~ CH_NOEN LD (Ampl),A 1141+++8EFA~ BIT 7,B 1142+++8EFA~ LD A,C 1143+++8EFA~ JR Z,NO_ENSL 1144+++8EFA~ RLA 1145+++8EFA~ RLA 1146+++8EFA~ SRA A 1147+++8EFA~ SRA A 1148+++8EFA~ SRA A 1149+++8EFA~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8EFA~ BIT 5,B 1151+++8EFA~ JR Z,NO_ENAC 1152+++8EFA~ LD (IX+CHP.CrEnSl),A 1153+++8EFA~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8EFA~ LD (IY-100+VRS.AddToEn),A 1155+++8EFA~ JR CH_MIX 1156+++8EFA~ NO_ENSL RRA 1157+++8EFA~ ADD A,(IX+CHP.CrNsSl) 1158+++8EFA~ LD (IY-100+VRS.AddToNs),A 1159+++8EFA~ BIT 5,B 1160+++8EFA~ JR Z,CH_MIX 1161+++8EFA~ LD (IX+CHP.CrNsSl),A 1162+++8EFA~ CH_MIX LD A,B 1163+++8EFA~ RRA 1164+++8EFA~ AND #48 1165+++8EFA~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8EFA~ RRCA 1167+++8EFA~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8EFA~ POP HL 1169+++8EFA~ XOR A 1170+++8EFA~ OR (IX+CHP.COnOff) 1171+++8EFA~ RET Z 1172+++8EFA~ DEC (IX+CHP.COnOff) 1173+++8EFA~ RET NZ 1174+++8EFA~ XOR (IX+CHP.Flags) 1175+++8EFA~ LD (IX+CHP.Flags),A 1176+++8EFA~ RRA 1177+++8EFA~ LD A,(IX+CHP.OnOffD) 1178+++8EFA~ JR C,CH_ONDL 1179+++8EFA~ LD A,(IX+CHP.OffOnD) 1180+++8EFA~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8EFA~ RET 1182+++8EFA~ 1183+++8EFA~ PLAY_ XOR A 1184+++8EFA~ LD (IY-100+VRS.AddToEn),A 1185+++8EFA~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8EFA~ DEC A 1187+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8EFA~ DEC (IY-100+VRS.DelyCnt) 1189+++8EFA~ JP NZ,PL2 1190+++8EFA~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8EFA~ JR NZ,PL1B 1192+++8EFA~ LD C,(IY-100+VRS.AdInPtA) 1193+++8EFA~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8EFA~ LD A,(BC) 1195+++8EFA~ AND A 1196+++8EFA~ JR NZ,PL1A 1197+++8EFA~ LD D,A 1198+++8EFA~ LD (IY-100+VRS.Ns_Base),A 1199+++8EFA~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8EFA~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8EFA~ INC HL 1202+++8EFA~ LD A,(HL) 1203+++8EFA~ INC A 1204+++8EFA~ JR NZ,PLNLP 1205+++8EFA~ 1206+++8EFA~ IF LoopChecker 1207+++8EFA~ CALL CHECKLP 1208+++8EFA~ ENDIF 1209+++8EFA~ 1210+++8EFA~ LD L,(IY-100+VRS.LPosPtr) 1211+++8EFA~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8EFA~ LD A,(HL) 1213+++8EFA~ INC A 1214+++8EFA~ PLNLP CALL SETCPPT 1215+++8EFA~ DEC A 1216+++8EFA~ BIT 1,(IY-100+VRS.ModNum) 1217+++8EFA~ JR Z,NoAlCo 1218+++8EFA~ TSSub EQU $+1 1219+++8EFA~ SUB #D6 1220+++8EFA~ CPL 1221+++8EFA~ NoAlCo 1222+++8EFA~ ;PT2 PT3 1223+++8EFA~ PsCalc DEC A ;ADD A,A NOP 1224+++8EFA~ DEC A ;ADD A,(HL) NOP 1225+++8EFA~ ADD A,A 1226+++8EFA~ LD E,A 1227+++8EFA~ RL D 1228+++8EFA~ 1229+++8EFA~ IF CurPosCounter 1230+++8EFA~ LD A,L 1231+++8EFA~ SUB (IY-100+VRS.PosSub) 1232+++8EFA~ LD (IY-100+VRS.CurPos),A 1233+++8EFA~ ENDIF 1234+++8EFA~ 1235+++8EFA~ LD L,(IY-100+VRS.PatsPtr) 1236+++8EFA~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8EFA~ ADD HL,DE 1238+++8EFA~ LD E,(IY-100+VRS.MODADDR) 1239+++8EFA~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8EFA~ LD (PSP_+1),SP 1241+++8EFA~ LD SP,HL 1242+++8EFA~ POP HL 1243+++8EFA~ ADD HL,DE 1244+++8EFA~ LD B,H 1245+++8EFA~ LD C,L 1246+++8EFA~ POP HL 1247+++8EFA~ ADD HL,DE 1248+++8EFA~ LD (IY-100+VRS.AdInPtB),L 1249+++8EFA~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8EFA~ POP HL 1251+++8EFA~ ADD HL,DE 1252+++8EFA~ LD (IY-100+VRS.AdInPtC),L 1253+++8EFA~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8EFA~ PSP_ LD SP,#3131 1255+++8EFA~ PL1A LD DE,VRS.ChanA+12-100 1256+++8EFA~ CALL PTDECOD 1257+++8EFA~ LD (IY-100+VRS.AdInPtA),C 1258+++8EFA~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8EFA~ 1260+++8EFA~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8EFA~ JR NZ,PL1C 1262+++8EFA~ LD DE,VRS.ChanB+12-100 1263+++8EFA~ LD C,(IY-100+VRS.AdInPtB) 1264+++8EFA~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8EFA~ CALL PTDECOD 1266+++8EFA~ LD (IY-100+VRS.AdInPtB),C 1267+++8EFA~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8EFA~ 1269+++8EFA~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8EFA~ JR NZ,PL1D 1271+++8EFA~ LD DE,VRS.ChanC+12-100 1272+++8EFA~ LD C,(IY-100+VRS.AdInPtC) 1273+++8EFA~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8EFA~ CALL PTDECOD 1275+++8EFA~ LD (IY-100+VRS.AdInPtC),C 1276+++8EFA~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8EFA~ 1278+++8EFA~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8EFA~ LD (IY-100+VRS.DelyCnt),A 1280+++8EFA~ 1281+++8EFA~ PL2 LD DE,VRS.ChanA-100 1282+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8EFA~ CALL CHREGS 1285+++8EFA~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8EFA~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8EFA~ Ampl EQU $+1 1288+++8EFA~ LD A,#3E 1289+++8EFA~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8EFA~ LD DE,VRS.ChanB-100 1291+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8EFA~ CALL CHREGS 1294+++8EFA~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8EFA~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8EFA~ LD A,(Ampl) 1297+++8EFA~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8EFA~ LD DE,VRS.ChanC-100 1299+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8EFA~ CALL CHREGS 1302+++8EFA~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8EFA~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8EFA~ LD A,(Ampl) 1305+++8EFA~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8EFA~ 1307+++8EFA~ LD A,(IY-100+VRS.Ns_Base) 1308+++8EFA~ ADD (IY-100+VRS.AddToNs) 1309+++8EFA~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8EFA~ 1311+++8EFA~ LD A,(IY-100+VRS.AddToEn) 1312+++8EFA~ LD E,A 1313+++8EFA~ ADD A,A 1314+++8EFA~ SBC A,A 1315+++8EFA~ LD D,A 1316+++8EFA~ LD L,(IY-100+VRS.EnvBase) 1317+++8EFA~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8EFA~ ADD HL,DE 1319+++8EFA~ LD E,(IY-100+VRS.CurESld) 1320+++8EFA~ LD D,(IY-100+VRS.CurESld+1) 1321+++8EFA~ ADD HL,DE 1322+++8EFA~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8EFA~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8EFA~ 1325+++8EFA~ XOR A 1326+++8EFA~ OR (IY-100+VRS.CurEDel) 1327+++8EFA~ RET Z 1328+++8EFA~ DEC (IY-100+VRS.CurEDel) 1329+++8EFA~ RET NZ 1330+++8EFA~ LD A,(IY-100+VRS.Env_Del) 1331+++8EFA~ LD (IY-100+VRS.CurEDel),A 1332+++8EFA~ LD L,(IY-100+VRS.ESldAdd) 1333+++8EFA~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8EFA~ ADD HL,DE 1335+++8EFA~ JP SETESLD 1336+++8EFA~ 1337+++8EFA~ PLAY LD IY,VARS1+100 1338+++8EFA~ CALL PLAY_ 1339+++8EFA~ LD A,(is_ts) 1340+++8EFA~ AND A 1341+++8EFA~ JR Z,PL_nts 1342+++8EFA~ LD IY,VARS2+100 1343+++8EFA~ CALL PLAY_ 1344+++8EFA~ PL_nts 1345+++8EFA~ IF Basic 1346+++8EFA~ LD IY,#5C3A 1347+++8EFA~ ENDIF 1348+++8EFA~ 1349+++8EFA~ ROUT LD BC,#FFFD 1350+++8EFA~ LD A,(is_ts) 1351+++8EFA~ AND A 1352+++8EFA~ IFDEF ONtfm 1353+++8EFA~ LD L,#F9 1354+++8EFA~ OUT (C),L 1355+++8EFA~ ELSE 1356+++8EFA~ JR Z,r_nts ;keep old standard 1357+++8EFA~ OUT (C),B 1358+++8EFA~ ENDIF 1359+++8EFA~ r_nts EX AF,AF' 1360+++8EFA~ 1361+++8EFA~ IF ACBBAC 1362+++8EFA~ LD IX,VARS1+VRS.AYREGS 1363+++8EFA~ ELSE 1364+++8EFA~ LD HL,VARS1+VRS.AYREGS 1365+++8EFA~ ENDIF 1366+++8EFA~ 1367+++8EFA~ CALL ROUT_ 1368+++8EFA~ EX AF,AF' 1369+++8EFA~ RET Z 1370+++8EFA~ LD B,D 1371+++8EFA~ 1372+++8EFA~ IFDEF ONtfm 1373+++8EFA~ LD A,#F8 1374+++8EFA~ ELSE 1375+++8EFA~ CPL 1376+++8EFA~ ENDIF 1377+++8EFA~ OUT (C),A 1378+++8EFA~ 1379+++8EFA~ IF ACBBAC 1380+++8EFA~ LD IX,VARS2+VRS.AYREGS 1381+++8EFA~ ELSE 1382+++8EFA~ LD HL,VARS2+VRS.AYREGS 1383+++8EFA~ ENDIF 1384+++8EFA~ 1385+++8EFA~ ROUT_ 1386+++8EFA~ IF ACBBAC 1387+++8EFA~ LD A,(SETUP) 1388+++8EFA~ AND 12 1389+++8EFA~ JR Z,ABC 1390+++8EFA~ ADD A,CHTABLE 1391+++8EFA~ LD E,A 1392+++8EFA~ ADC A,CHTABLE/256 1393+++8EFA~ SUB E 1394+++8EFA~ LD D,A 1395+++8EFA~ LD B,0 1396+++8EFA~ PUSH IX 1397+++8EFA~ POP HL 1398+++8EFA~ LD A,(DE) 1399+++8EFA~ INC DE 1400+++8EFA~ LD C,A 1401+++8EFA~ ADD HL,BC 1402+++8EFA~ LD A,(IX+TonB) 1403+++8EFA~ LD C,(HL) 1404+++8EFA~ LD (IX+TonB),C 1405+++8EFA~ LD (HL),A 1406+++8EFA~ INC HL 1407+++8EFA~ LD A,(IX+TonB+1) 1408+++8EFA~ LD C,(HL) 1409+++8EFA~ LD (IX+TonB+1),C 1410+++8EFA~ LD (HL),A 1411+++8EFA~ LD A,(DE) 1412+++8EFA~ INC DE 1413+++8EFA~ LD C,A 1414+++8EFA~ ADD HL,BC 1415+++8EFA~ LD A,(IX+AmplB) 1416+++8EFA~ LD C,(HL) 1417+++8EFA~ LD (IX+AmplB),C 1418+++8EFA~ LD (HL),A 1419+++8EFA~ LD A,(DE) 1420+++8EFA~ INC DE 1421+++8EFA~ LD (RxCA1),A 1422+++8EFA~ XOR 8 1423+++8EFA~ LD (RxCA2),A 1424+++8EFA~ LD A,(DE) 1425+++8EFA~ AND (IX+Mixer) 1426+++8EFA~ LD E,A 1427+++8EFA~ LD A,(IX+Mixer) 1428+++8EFA~ RxCA1 DB #E6 1429+++8EFA~ AND %010010 1430+++8EFA~ OR E 1431+++8EFA~ LD E,A 1432+++8EFA~ LD A,(IX+Mixer) 1433+++8EFA~ AND %010010 1434+++8EFA~ RxCA2 OR E 1435+++8EFA~ OR E 1436+++8EFA~ LD (IX+Mixer),A 1437+++8EFA~ ABC 1438+++8EFA~ ENDIF 1439+++8EFA~ 1440+++8EFA~ XOR A 1441+++8EFA~ LD DE,#FFBF 1442+++8EFA~ 1443+++8EFA~ IF ACBBAC 1444+++8EFA~ LD BC,#FFFD 1445+++8EFA~ PUSH IX 1446+++8EFA~ POP HL 1447+++8EFA~ ENDIF 1448+++8EFA~ 1449+++8EFA~ LOUT 1450+++8EFA~ IFDEF ONtfm 1451+++8EFA~ INF 1452+++8EFA~ JP M,$-2 1453+++8EFA~ ENDIF 1454+++8EFA~ OUT (C),A 1455+++8EFA~ IFDEF ONtfm 1456+++8EFA~ INF 1457+++8EFA~ JP M,$-2 1458+++8EFA~ ENDIF 1459+++8EFA~ LD B,E 1460+++8EFA~ OUTI 1461+++8EFA~ LD B,D 1462+++8EFA~ INC A 1463+++8EFA~ CP 13 1464+++8EFA~ JR NZ,LOUT 1465+++8EFA~ IFDEF ONtfm 1466+++8EFA~ INF 1467+++8EFA~ JP M,$-2 1468+++8EFA~ ENDIF 1469+++8EFA~ OUT (C),A 1470+++8EFA~ LD A,(HL) 1471+++8EFA~ AND A 1472+++8EFA~ RET M 1473+++8EFA~ IFDEF ONtfm 1474+++8EFA~ INF 1475+++8EFA~ JP M,$-2 1476+++8EFA~ ENDIF 1477+++8EFA~ LD B,E 1478+++8EFA~ OUT (C),A 1479+++8EFA~ RET 1480+++8EFA~ 1481+++8EFA~ IF ACBBAC 1482+++8EFA~ CHTABLE EQU $-4 1483+++8EFA~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8EFA~ ENDIF 1485+++8EFA~ 1486+++8EFA~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8EFA~ DB TCNEW_0-T_ 1488+++8EFA~ DB (T_OLD_0-T1_)*2+1 1489+++8EFA~ DB TCOLD_0-T_ 1490+++8EFA~ DB (T_NEW_1-T1_)*2+1 1491+++8EFA~ DB TCNEW_1-T_ 1492+++8EFA~ DB (T_OLD_1-T1_)*2+1 1493+++8EFA~ DB TCOLD_1-T_ 1494+++8EFA~ DB (T_NEW_2-T1_)*2 1495+++8EFA~ DB TCNEW_2-T_ 1496+++8EFA~ DB (T_OLD_2-T1_)*2 1497+++8EFA~ DB TCOLD_2-T_ 1498+++8EFA~ DB (T_NEW_3-T1_)*2 1499+++8EFA~ DB TCNEW_3-T_ 1500+++8EFA~ DB (T_OLD_3-T1_)*2 1501+++8EFA~ DB TCOLD_3-T_ 1502+++8EFA~ 1503+++8EFA~ T_ 1504+++8EFA~ 1505+++8EFA~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8EFA~ DB #18+1,#24+1,#3C+1,0 1507+++8EFA~ TCOLD_1 DB #5C+1,0 1508+++8EFA~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8EFA~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8EFA~ TCNEW_3 DB #56+1 1511+++8EFA~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8EFA~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8EFA~ DB #BC+1,#BE+1,0 1514+++8EFA~ TCNEW_1 EQU TCOLD_1 1515+++8EFA~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8EFA~ DB #BA+1,#BC+1,#BE+1,0 1517+++8EFA~ 1518+++8EFA~ PT3EMPTYORN EQU $-1 1519+++8EFA~ DB 1,0 1520+++8EFA~ 1521+++8EFA~ ;first 12 values of tone tables (packed) 1522+++8EFA~ 1523+++8EFA~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8EFA~ DB #0755-#06EC 1525+++8EFA~ DB #07C5-#0755 1526+++8EFA~ DB #083B-#07C5 1527+++8EFA~ DB #08B8-#083B 1528+++8EFA~ DB #093D-#08B8 1529+++8EFA~ DB #09CA-#093D 1530+++8EFA~ DB #0A5F-#09CA 1531+++8EFA~ DB #0AFC-#0A5F 1532+++8EFA~ DB #0BA4-#0AFC 1533+++8EFA~ DB #0C55-#0BA4 1534+++8EFA~ DB #0D10-#0C55 1535+++8EFA~ DB #066D*2/256,#066D*2&255 1536+++8EFA~ DB #06CF-#066D 1537+++8EFA~ DB #0737-#06CF 1538+++8EFA~ DB #07A4-#0737 1539+++8EFA~ DB #0819-#07A4 1540+++8EFA~ DB #0894-#0819 1541+++8EFA~ DB #0917-#0894 1542+++8EFA~ DB #09A1-#0917 1543+++8EFA~ DB #0A33-#09A1 1544+++8EFA~ DB #0ACF-#0A33 1545+++8EFA~ DB #0B73-#0ACF 1546+++8EFA~ DB #0C22-#0B73 1547+++8EFA~ DB #0CDA-#0C22 1548+++8EFA~ DB #0704*2/256,#0704*2&255 1549+++8EFA~ DB #076E-#0704 1550+++8EFA~ DB #07E0-#076E 1551+++8EFA~ DB #0858-#07E0 1552+++8EFA~ DB #08D6-#0858 1553+++8EFA~ DB #095C-#08D6 1554+++8EFA~ DB #09EC-#095C 1555+++8EFA~ DB #0A82-#09EC 1556+++8EFA~ DB #0B22-#0A82 1557+++8EFA~ DB #0BCC-#0B22 1558+++8EFA~ DB #0C80-#0BCC 1559+++8EFA~ DB #0D3E-#0C80 1560+++8EFA~ DB #07E0*2/256,#07E0*2&255 1561+++8EFA~ DB #0858-#07E0 1562+++8EFA~ DB #08E0-#0858 1563+++8EFA~ DB #0960-#08E0 1564+++8EFA~ DB #09F0-#0960 1565+++8EFA~ DB #0A88-#09F0 1566+++8EFA~ DB #0B28-#0A88 1567+++8EFA~ DB #0BD8-#0B28 1568+++8EFA~ DB #0C80-#0BD8 1569+++8EFA~ DB #0D60-#0C80 1570+++8EFA~ DB #0E10-#0D60 1571+++8EFA~ DB #0EF8-#0E10 1572+++8EFA~ 1573+++8EFA~ ;vars from here can be stripped 1574+++8EFA~ ;you can move VARS to any other address 1575+++8EFA~ 1576+++8EFA~ VARS 1577+++8EFA~ 1578+++8EFA~ is_ts DB 0 1579+++8EFA~ 1580+++8EFA~ ;ChannelsVars 1581+++8EFA~ STRUCT CHP 1582+++8EFA~ ;reset group 1583+++8EFA~ PsInOr DB 0 1584+++8EFA~ PsInSm DB 0 1585+++8EFA~ CrAmSl DB 0 1586+++8EFA~ CrNsSl DB 0 1587+++8EFA~ CrEnSl DB 0 1588+++8EFA~ TSlCnt DB 0 1589+++8EFA~ CrTnSl DW 0 1590+++8EFA~ TnAcc DW 0 1591+++8EFA~ COnOff DB 0 1592+++8EFA~ ;reset group 1593+++8EFA~ 1594+++8EFA~ OnOffD DB 0 1595+++8EFA~ 1596+++8EFA~ ;IX for PTDECOD here (+12) 1597+++8EFA~ OffOnD DB 0 1598+++8EFA~ OrnPtr DW 0 1599+++8EFA~ SamPtr DW 0 1600+++8EFA~ NNtSkp DB 0 1601+++8EFA~ Note DB 0 1602+++8EFA~ SlToNt DB 0 1603+++8EFA~ Env_En DB 0 1604+++8EFA~ Flags DB 0 1605+++8EFA~ ;Enabled - 0, SimpleGliss - 2 1606+++8EFA~ TnSlDl DB 0 1607+++8EFA~ TSlStp DW 0 1608+++8EFA~ TnDelt DW 0 1609+++8EFA~ NtSkCn DB 0 1610+++8EFA~ Volume DB 0 1611+++8EFA~ ENDS 1612+++8EFA~ 1613+++8EFA~ STRUCT VRS 1614+++8EFA~ 1615+++8EFA~ ;IF not works in STRUCT in SjASM :( 1616+++8EFA~ ; IF CurPosCounter 1617+++8EFA~ CurPos DB 0 1618+++8EFA~ PosSub DB 0 1619+++8EFA~ ; ENDIF 1620+++8EFA~ 1621+++8EFA~ ModNum DB 0 ;bit0: ChipNum 1622+++8EFA~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8EFA~ 1624+++8EFA~ ChanA DS CHP 1625+++8EFA~ ChanB DS CHP 1626+++8EFA~ ChanC DS CHP 1627+++8EFA~ 1628+++8EFA~ ;GlobalVars 1629+++8EFA~ MODADDR DW 0 1630+++8EFA~ OrnPtrs DW 0 1631+++8EFA~ SamPtrs DW 0 1632+++8EFA~ PatsPtr DW 0 1633+++8EFA~ AdInPtA DW 0 1634+++8EFA~ AdInPtB DW 0 1635+++8EFA~ AdInPtC DW 0 1636+++8EFA~ CrPsPtr DW 0 1637+++8EFA~ LPosPtr DW 0 1638+++8EFA~ Delay DB 0 1639+++8EFA~ DelyCnt DB 0 1640+++8EFA~ ESldAdd DW 0 1641+++8EFA~ CurESld DW 0 1642+++8EFA~ Env_Del DB 0 1643+++8EFA~ CurEDel DB 0 1644+++8EFA~ Ns_Base DB 0 1645+++8EFA~ AddToNs DB 0 1646+++8EFA~ AddToEn DB 0 1647+++8EFA~ EnvBase DW 0 1648+++8EFA~ AYREGS DS 14 1649+++8EFA~ ENDS 1650+++8EFA~ 1651+++8EFA~ VARS1 DS VRS 1652+++8EFA~ VARS2 DS VRS 1653+++8EFA~ 1654+++8EFA~ VT_ EQU $-16 1655+++8EFA~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8EFA~ 1657+++8EFA~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8EFA~ 1659+++8EFA~ T_OLD_1 EQU T1_ 1660+++8EFA~ T_OLD_2 EQU T_OLD_1+24 1661+++8EFA~ T_OLD_3 EQU T_OLD_2+24 1662+++8EFA~ T_OLD_0 EQU T_OLD_3+2 1663+++8EFA~ T_NEW_0 EQU T_OLD_0 1664+++8EFA~ T_NEW_1 EQU T_OLD_1 1665+++8EFA~ T_NEW_2 EQU T_NEW_0+24 1666+++8EFA~ T_NEW_3 EQU T_OLD_3 1667+++8EFA~ 1668+++8EFA~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8EFA~ 1670+++8EFA~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8EFA~ 1672+++8EFA~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8EFA~ 1674+++8EFA~ VARSEND EQU $ 1675+++8EFA~ MDLADDR EQU $ 1676+++8EFA~ 1677+++8EFA~ DISPLAY "PTS player size=",$-START 1678+++8EFA~ 1679+++8EFA~ ;Release 0 steps: 1680+++8EFA~ ;04/21/2007 1681+++8EFA~ ;Works start (PTxPlay adaptation); first beta. 1682+++8EFA~ ;04/22/2007 1683+++8EFA~ ;Job finished; beta-testing. 1684+++8EFA~ ;04/23/2007 1685+++8EFA~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8EFA~ ;04/29/2007 1687+++8EFA~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8EFA~ ;modules of v3.7+. 1689+++8EFA~ 1690+++8EFA~ ;Size (minimal build for ZX Spectrum): 1691+++8EFA~ ;Code block #908 bytes 1692+++8EFA~ ;Variables #2BF bytes (can be stripped) 1693+++8EFA~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8EFA~ 1695+++8EFA~ ENDMOD 1696+++8EFA~ 1697+++8EFA endif 1698+++8EFA 0095++ 8EFA 0096++ 8EFA TS.End 0097++ 8EFA TS.Play=PTS.PLAY 0098++ 8EFA TS.Mute=PTS.MUTE 0099++ 8EFA 0100++ 8EFA display "TS module size: ",TS.End-TS.Start 0101++ 8EFA 0102++ 8EFA endif 0103++ 8EFA 0421+ 8EFA include "tfc.asm" 0001++ 8EFA ifndef _tfc_asm_defined 0002++ 8EFA define _tfc_asm_defined 0003++ 8EFA 0004++ 8EFA module TFC 0005++ 8EFA 0006++ 8EFA ; Original version by (C) Alone Coder 0007++ 8EFA ; SjasmPlus adaptation, code cleanup and size optimization by (C) Vitamin/CAIG 0008++ 8EFA 0009++ 8EFA ; Warning: no 60Hz modules support! 0010++ 8EFA 0011++ 8EFA ;TODO begin&end только в одном канале 0012++ 8EFA newtfm=1 ;0=revision A, 1=revision C 0013++ 8EFA 0014++ 8EFA if newtfm == 1 0015++ 8EFA statuschip0=%11111000 0016++ 8EFA statuschip1=%11111001 0017++ 8EFA else 0018++ 8EFA~ if newtfm == 2 ;US031DX 0019++ 8EFA~ statuschip0=%11111110 0020++ 8EFA~ statuschip1=%11111111 0021++ 8EFA~ else ;newtfm=0 0022++ 8EFA~ statuschip0=%11111100 0023++ 8EFA~ statuschip1=%11111101 0024++ 8EFA~ endif 0025++ 8EFA endif 0026++ 8EFA 0027++ 8EFA struct Header 0028++ 8EFA~ signature 0029++ 8EFA~ ds 6 0030++ 8EFA~ version ds 3 0031++ 8EFA~ intfreq db 0 0032++ 8EFA~ tfmptrs ds 12 0033++ 8EFA~ ssgptrs ds 12 0034++ 8EFA ends 0035++ 8EFA 0036++ 8EFA struct TFMData 0037++ 8EFA~ addr dw 0 0038++ 8EFA~ skip db 0 0039++ 8EFA~ blkcnt db 0 0040++ 8EFA~ blkretaddr 0041++ 8EFA~ db 0 0042++ 8EFA~ loopaddr 0043++ 8EFA~ db 0 0044++ 8EFA~ tfmlow db 0 0045++ 8EFA~ tfmhigh db 0 0046++ 8EFA ends 0047++ 8EFA 0048++ 8EFA macro WaitStatus 0049++ 8EFA~ if newtfm != 2 0050++ 8EFA~ inf 0051++ 8EFA~ jp m,$-2 0052++ 8EFA~ endif 0053++ 8EFA endm 0054++ 8EFA 0055++ 8EFA macro FM.OutReg Reg 0056++ 8EFA~ WaitStatus 0057++ 8EFA~ out (c),Reg 0058++ 8EFA endm 0059++ 8EFA 0060++ 8EFA macro FM.SelectReg Reg 0061++ 8EFA~ ld b,d 0062++ 8EFA~ FM.OutReg Reg 0063++ 8EFA endm 0064++ 8EFA 0065++ 8EFA macro FM.WriteReg Reg 0066++ 8EFA~ ld b,e 0067++ 8EFA~ FM.OutReg Reg 0068++ 8EFA endm 0069++ 8EFA 0070++ 8EFA Start 0071++ 8EFA 21 73 91 ld hl,End 0072++ 8EFD 18 2F jr Init 0073++ 8EFF C3 E1 8F jp Play 0074++ 8F02 C3 6A 8F jp Mute 0075++ 8F05 0076++ 8F05 ifdef HaveFormatCheck 0077++ 8F05 include "format.asm" 0001+++8F05 ;some format checking macros 0002+++8F05 ifndef _format_asm_defined 0003+++8F05~ define _format_asm_defined 0004+++8F05~ 0005+++8F05~ macro LessOrEqual number 0006+++8F05~ ld a,number 0007+++8F05~ cp (hl) 0008+++8F05~ inc hl 0009+++8F05~ ret c 0010+++8F05~ endm 0011+++8F05~ 0012+++8F05~ macro Greater number 0013+++8F05~ ld a,(hl) 0014+++8F05~ inc hl 0015+++8F05~ cp number 0016+++8F05~ ret c 0017+++8F05~ endm 0018+++8F05~ 0019+++8F05~ macro AnyByte 0020+++8F05~ inc hl 0021+++8F05~ endm 0022+++8F05~ 0023+++8F05~ macro AnyBytes count 0024+++8F05~ if count > 7 0025+++8F05~ ld a,l 0026+++8F05~ add a,count 0027+++8F05~ ld l,a 0028+++8F05~ adc a,h 0029+++8F05~ sub l 0030+++8F05~ ld h,a 0031+++8F05~ else 0032+++8F05~ dup count 0033+++8F05~ inc hl 0034+++8F05~ edup 0035+++8F05~ endif 0036+++8F05~ endm 0037+++8F05~ 0038+++8F05~ macro EqualTo number 0039+++8F05~ ld a,number 0040+++8F05~ cp (hl) 0041+++8F05~ inc hl 0042+++8F05~ ret nz 0043+++8F05~ endm 0044+++8F05~ 0045+++8F05 endif 0046+++8F05 0078++ 8F05 0079++ 8F05 ;in HL - module addr 0080++ 8F05 ;out Z - is tfc 0081++ 8F05 ;out C - 60 Hz (valid only if Z) 0082++ 8F05 CheckFormat 0083++ 8F05 EqualTo "T" 0083++ 8F05 3E 54 > ld a,number 0083++ 8F07 BE > cp (hl) 0083++ 8F08 23 > inc hl 0083++ 8F09 C0 > ret nz 0084++ 8F0A EqualTo "F" 0084++ 8F0A 3E 46 > ld a,number 0084++ 8F0C BE > cp (hl) 0084++ 8F0D 23 > inc hl 0084++ 8F0E C0 > ret nz 0085++ 8F0F EqualTo "M" 0085++ 8F0F 3E 4D > ld a,number 0085++ 8F11 BE > cp (hl) 0085++ 8F12 23 > inc hl 0085++ 8F13 C0 > ret nz 0086++ 8F14 EqualTo "c" 0086++ 8F14 3E 63 > ld a,number 0086++ 8F16 BE > cp (hl) 0086++ 8F17 23 > inc hl 0086++ 8F18 C0 > ret nz 0087++ 8F19 EqualTo "o" 0087++ 8F19 3E 6F > ld a,number 0087++ 8F1B BE > cp (hl) 0087++ 8F1C 23 > inc hl 0087++ 8F1D C0 > ret nz 0088++ 8F1E EqualTo "m" 0088++ 8F1E 3E 6D > ld a,number 0088++ 8F20 BE > cp (hl) 0088++ 8F21 23 > inc hl 0088++ 8F22 C0 > ret nz 0089++ 8F23 AnyBytes 3 0090++ 8F23 23 > inc hl 0090++ 8F24 23 > inc hl 0090++ 8F25 23 > inc hl 0090++ 8F26 7E ld a,(hl) 0091++ 8F27 FE 32 cp 50 0092++ 8F29 C8 ret z 0093++ 8F2A FE 3C cp 60 0094++ 8F2C 3F ccf 0095++ 8F2D C9 ret 0096++ 8F2E 0097++ 8F2E display "TFC checker size: ",$-CheckFormat 0098++ 8F2E endif 0099++ 8F2E 0100++ 8F2E ;HL - module addr 0101++ 8F2E Init 0102++ 8F2E EB exd 0103++ 8F2F 21 0A 00 ld hl,Header.tfmptrs 0104++ 8F32 19 add hl,de 0105++ 8F33 D9 exx 0106++ 8F34 0107++ 8F34 21 3B 91 ld hl,TFM.Init 0108++ 8F37 11 43 91 ld de,TFM.A 0109++ 8F3A 01 30 00 ld bc,6*TFMData 0110++ 8F3D ED B0 ldir 0111++ 8F3F 0112++ 8F3F 21 5E 8F ld hl,.tfminitab 0113++ 8F42 01 FD 06 ld bc,128*(.tfminitab_end-.tfminitab)+#fd 0114++ 8F45 .tfmini0 0115++ 8F45 11 54 8F ld de,.tfminiHL 0116++ 8F48 ED A0 ldi 0117++ 8F4A ED A0 ldi 0118++ 8F4C D9 exx 0119++ 8F4D 7E ld a,(hl) 0120++ 8F4E 23 inc hl 0121++ 8F4F E5 push hl 0122++ 8F50 66 ld h,(hl) 0123++ 8F51 6F ld l,a 0124++ 8F52 19 add hl,de 0125++ 8F53 .tfminiHL=$+1 0126++ 8F53 22 00 00 ld (0),hl 0127++ 8F56 E1 pop hl 0128++ 8F57 23 inc hl 0129++ 8F58 D9 exx 0130++ 8F59 10 EA djnz .tfmini0 0131++ 8F5B 0132++ 8F5B C3 6A 8F jp Mute 0133++ 8F5E 0134++ 8F5E .tfminitab 0135++ 8F5E 43 91 DW TFM.A.addr 0136++ 8F60 4B 91 DW TFM.B.addr 0137++ 8F62 53 91 DW TFM.C.addr 0138++ 8F64 5B 91 DW TFM.D.addr 0139++ 8F66 63 91 DW TFM.E.addr 0140++ 8F68 6B 91 DW TFM.F.addr 0141++ 8F6A .tfminitab_end 0142++ 8F6A 0143++ 8F6A Mute 0144++ 8F6A 11 BF FF ld de,#ffbf 0145++ 8F6D 0E FD ld c,#fd 0146++ 8F6F CD D9 8F call selChip0 0147++ 8F72 CD 78 8F call .tfminiPP 0148++ 8F75 CD DD 8F call selChip1 0149++ 8F78 .tfminiPP 0150++ 8F78 ; 0 -> (00..0D) 0151++ 8F78 21 00 00 ld hl,#0000 0152++ 8F7B 3E 0E ld a,#0e 0153++ 8F7D CD C0 8F call .writeregsset 0154++ 8F80 0155++ 8F80 ; 0 -> (30..3F) 0156++ 8F80 26 30 ld h,#30 0157++ 8F82 3E 40 ld a,#40 0158++ 8F84 CD C0 8F call .writeregsset 0159++ 8F87 0160++ 8F87 ; 0 -> (50..B4) 0161++ 8F87 26 50 ld h,#50 0162++ 8F89 3E B5 ld a,#b5 0163++ 8F8B CD C0 8F call .writeregsset 0164++ 8F8E 0165++ 8F8E ; 0F -> (80..8F) ;max speed to RR 0166++ 8F8E 21 0F 80 ld hl,#800f 0167++ 8F91 3E 90 ld a,#90 0168++ 8F93 CD C0 8F call .writeregsset 0169++ 8F96 0170++ 8F96 ; 0..2 -> 28, key off 0171++ 8F96 ; 2 -> 27 channel 3 mode 0172++ 8F96 21 00 28 ld hl,#2800 0173++ 8F99 CD C8 8F call .writereg 0174++ 8F9C 2C inc l 0175++ 8F9D CD C8 8F call .writereg 0176++ 8FA0 2C inc l 0177++ 8FA1 CD C8 8F call .writereg 0178++ 8FA4 25 dec h 0179++ 8FA5 CD C8 8F call .writereg 0180++ 8FA8 0181++ 8FA8 ; 7F -> (40..4F,2F,2D) 0182++ 8FA8 21 7F 40 ld hl,#407f 0183++ 8FAB 3E 50 ld a,#50 0184++ 8FAD CD C0 8F call .writeregsset 0185++ 8FB0 0186++ 8FB0 26 2F ld h,#2f 0187++ 8FB2 CD C8 8F call .writereg 0188++ 8FB5 0189++ 8FB5 26 2D ld h,#2d 0190++ 8FB7 CD C8 8F call .writereg 0191++ 8FBA 0192++ 8FBA 3E FF ld a,#ff ;выкл. FM 0193++ 8FBC .selRegA 0194++ 8FBC 42 ld b,d 0195++ 8FBD ED 79 out (c),a 0196++ 8FBF C9 ret 0197++ 8FC0 0198++ 8FC0 ;H=REG start 0199++ 8FC0 ;L=VALUE 0200++ 8FC0 ;A=REG end (not inclusive) 0201++ 8FC0 .writeregsset 0202++ 8FC0 CD C8 8F call .writereg 0203++ 8FC3 24 inc h 0204++ 8FC4 BC cp h 0205++ 8FC5 20 F9 jr nz,.writeregsset 0206++ 8FC7 C9 ret 0207++ 8FC8 ;H=REG 0208++ 8FC8 ;L=VALUE 0209++ 8FC8 .writereg 0210++ 8FC8 FM.SelectReg h 0210++ 8FC8 42 > ld b,d 0210++ 8FC9 ED 70 > inf 0210++ 8FCB FA C9 8F > jp m,$-2 0210++ 8FCE ED 61 > out (c),Reg 0211++ 8FD0 FM.WriteReg l 0211++ 8FD0 43 > ld b,e 0211++ 8FD1 ED 70 > inf 0211++ 8FD3 FA D1 8F > jp m,$-2 0211++ 8FD6 ED 69 > out (c),Reg 0212++ 8FD8 C9 ret 0213++ 8FD9 0214++ 8FD9 selChip0 0215++ 8FD9 3E F8 ld a,statuschip0 0216++ 8FDB 18 DF jr Mute.selRegA 0217++ 8FDD 0218++ 8FDD selChip1 0219++ 8FDD 3E F9 ld a,statuschip1 0220++ 8FDF 18 DB jr Mute.selRegA 0221++ 8FE1 0222++ 8FE1 Play 0223++ 8FE1 11 BF FF ld de,#FFBF 0224++ 8FE4 0E FD ld c,#FD 0225++ 8FE6 0226++ 8FE6 CD D9 8F call selChip0 0227++ 8FE9 0228++ 8FE9 AF xor a 0229++ 8FEA 08 exa 0230++ 8FEB DD 21 43 91 ld ix,TFM.A 0231++ 8FEF CD 26 90 call PlayChannel 0232++ 8FF2 3E 01 ld a,1 0233++ 8FF4 08 exa 0234++ 8FF5 DD 21 4B 91 ld ix,TFM.B 0235++ 8FF9 CD 26 90 call PlayChannel 0236++ 8FFC 3E 02 ld a,2 0237++ 8FFE 08 exa 0238++ 8FFF DD 21 53 91 ld ix,TFM.C 0239++ 9003 CD 26 90 call PlayChannel 0240++ 9006 0241++ 9006 CD DD 8F call selChip1 0242++ 9009 0243++ 9009 AF xor a 0244++ 900A 08 exa 0245++ 900B DD 21 5B 91 ld ix,TFM.D 0246++ 900F CD 26 90 call PlayChannel 0247++ 9012 3E 01 ld a,1 0248++ 9014 08 exa 0249++ 9015 DD 21 63 91 ld ix,TFM.E 0250++ 9019 CD 26 90 call PlayChannel 0251++ 901C 3E 02 ld a,2 0252++ 901E 08 exa 0253++ 901F DD 21 6B 91 ld ix,TFM.F 0254++ 9023 C3 26 90 jp PlayChannel 0255++ 9026 0256++ 9026 ;%11111111,-disp8 = данные кадра лежат по смещению -disp8 0257++ 9026 ;%111ttttt = skip 32..2 frames 0258++ 9026 ;%110ddddd = slide d-16 0259++ 9026 ;%11010000,frames,-disp16 = repeat block (skips = 1 frame) 0260++ 9026 ;%10111111,-disp16 = данные кадра лежат по смещению -disp16 0261++ 9026 ;%10NNNNNf = keyoff,[freq,]0..30 regs, keyon 0262++ 9026 ;%01111111 = end 0263++ 9026 ;%01111110 = begin 0264++ 9026 ;%01NNNNNf = keyoff,[freq,]0..31 regs 0265++ 9026 ;%00NNNNNf = [freq,]0..30 regs 0266++ 9026 bb=%01111110 0267++ 9026 be=%01111111 0268++ 9026 ;IX - data 0269++ 9026 ;DE - hi ports #FFBF 0270++ 9026 ;C - low port #FD 0271++ 9026 ;A' - fm channel 0272++ 9026 PlayChannel 0273++ 9026 DD 7E 02 ld a,(ix+TFMData.skip) 0274++ 9029 3C inc a 0275++ 902A C2 E9 90 jp nz,.skiper 0276++ 902D DD 7E 03 ld a,(ix+TFMData.blkcnt) 0277++ 9030 A7 and a 0278++ 9031 28 1D jr z,.noframe 0279++ 9033 DD 35 03 dec (ix+TFMData.blkcnt) 0280++ 9036 20 18 jr nz,.noframe 0281++ 9038 DD 6E 04 ld l,(ix+TFMData.blkretaddr) 0282++ 903B DD 66 05 ld h,(ix+TFMData.blkretaddr+1) 0283++ 903E 18 16 jr .tfmframe 0284++ 9040 .begin 0285++ 9040 DD 75 05 ld (ix+TFMData.loopaddr),l 0286++ 9043 DD 74 06 ld (ix+TFMData.loopaddr+1),h 0287++ 9046 18 0E jr .tfmframe 0288++ 9048 .end 0289++ 9048 DD 6E 05 ld l,(ix+TFMData.loopaddr) 0290++ 904B DD 66 06 ld h,(ix+TFMData.loopaddr+1) 0291++ 904E 18 06 jr .tfmframe 0292++ 9050 .noframe 0293++ 9050 DD 6E 00 ld l,(ix+TFMData.addr) 0294++ 9053 DD 66 01 ld h,(ix+TFMData.addr+1) 0295++ 9056 .tfmframe 0296++ 9056 7E ld a,(hl) 0297++ 9057 23 inc hl 0298++ 9058 FE 7E cp bb 0299++ 905A 28 E4 jr z,.begin 0300++ 905C FE 7F cp be 0301++ 905E 28 E8 jr z,.end 0302++ 9060 BB cp e ;#BF 0303++ 9061 D2 DC 90 jp NC,.HLskiper 0304++ 9064 ;TestKeyOff 0305++ 9064 F2 7D 90 jp P,.noffX 0306++ 9067 F5 push af 0307++ 9068 3E 28 ld a,#28 0308++ 906A FM.SelectReg a 0308++ 906A 42 > ld b,d 0308++ 906B ED 70 > inf 0308++ 906D FA 6B 90 > jp m,$-2 0308++ 9070 ED 79 > out (c),Reg 0309++ 9072 08 exa 0310++ 9073 FM.WriteReg a ;FMChannel 0310++ 9073 43 > ld b,e 0310++ 9074 ED 70 > inf 0310++ 9076 FA 74 90 > jp m,$-2 0310++ 9079 ED 79 > out (c),Reg 0311++ 907B 08 exa 0312++ 907C F1 pop af 0313++ 907D .noffX 0314++ 907D B7 OR a 0315++ 907E F5 push af 0316++ 907F ;TestFreq 0317++ 907F 1F RRA 0318++ 9080 30 12 jr NC,.nofrqX 0319++ 9082 0320++ 9082 46 ld b,(hl) 0321++ 9083 23 inc hl 0322++ 9084 4E ld c,(hl) 0323++ 9085 23 inc hl 0324++ 9086 DD 70 07 ld (ix+TFMData.tfmhigh),b 0325++ 9089 DD 71 06 ld (ix+TFMData.tfmlow),c 0326++ 908C C5 push bc 0327++ 908D E3 ex (sp),hl 0328++ 908E 0E FD ld c,#FD 0329++ 9090 CD FE 90 call .outTone 0330++ 9093 E1 pop hl 0331++ 9094 0332++ 9094 .nofrqX 0333++ 9094 E6 1F and #1F 0334++ 9096 C4 27 91 call nz,.OutRegs 0335++ 9099 CD D5 90 call .storeaddr 0336++ 909C F1 pop af 0337++ 909D F0 ret P 0338++ 909E ;.KeyOn 0339++ 909E 3E 28 ld a,#28 0340++ 90A0 FM.SelectReg a 0340++ 90A0 42 > ld b,d 0340++ 90A1 ED 70 > inf 0340++ 90A3 FA A1 90 > jp m,$-2 0340++ 90A6 ED 79 > out (c),Reg 0341++ 90A8 08 exa 0342++ 90A9 C6 F0 add a,#F0 0343++ 90AB FM.WriteReg a 0343++ 90AB 43 > ld b,e 0343++ 90AC ED 70 > inf 0343++ 90AE FA AC 90 > jp m,$-2 0343++ 90B1 ED 79 > out (c),Reg 0344++ 90B3 D6 F0 sub #F0 0345++ 90B5 08 exa 0346++ 90B6 C9 ret 0347++ 90B7 0348++ 90B7 .block 0349++ 90B7 7E ld a,(hl) ;N frames 0350++ 90B8 ;1 now, N-1 later 0351++ 90B8 ;skip command is used as 1 frame 0352++ 90B8 23 inc hl 0353++ 90B9 DD 77 03 ld (ix+TFMData.blkcnt),a 0354++ 90BC 46 ld b,(hl) 0355++ 90BD 23 inc hl 0356++ 90BE 4E ld c,(hl) ;disp 0357++ 90BF 23 inc hl 0358++ 90C0 DD 75 04 ld (ix+TFMData.blkretaddr),l 0359++ 90C3 DD 74 05 ld (ix+TFMData.blkretaddr+1),h 0360++ 90C6 .subframe 0361++ 90C6 09 add hl,bc 0362++ 90C7 0E FD ld c,#fd 0363++ 90C9 C3 56 90 jp .tfmframe 0364++ 90CC 0365++ 90CC .OLDfar 0366++ 90CC 46 ld b,(hl) 0367++ 90CD 23 inc hl 0368++ 90CE .OLDnear 0369++ 90CE 4E ld c,(hl) 0370++ 90CF 23 inc hl 0371++ 90D0 E5 push hl 0372++ 90D1 CD C6 90 call .subframe 0373++ 90D4 E1 pop hl 0374++ 90D5 .storeaddr 0375++ 90D5 DD 75 00 ld (ix+TFMData.addr),l 0376++ 90D8 DD 74 01 ld (ix+TFMData.addr+1),h 0377++ 90DB C9 ret 0378++ 90DC .HLskiper 0379++ 90DC 28 EE jr z,.OLDfar 0380++ 90DE FE E0 cp %11100000 0381++ 90E0 38 0B jr c,.slide 0382++ 90E2 47 ld b,a 0383++ 90E3 BA cp d ;#FF 0384++ 90E4 28 E8 jr z,.OLDnear 0385++ 90E6 CD D5 90 call .storeaddr 0386++ 90E9 DD 77 02 .skiper ld (ix+TFMData.skip),a 0387++ 90EC C9 ret 0388++ 90ED .slide 0389++ 90ED ;a=-64..-33 0390++ 90ED C6 30 add a,48 0391++ 90EF ;a=-16..15 0392++ 90EF 28 C6 jr z,.block 0393++ 90F1 DD 86 06 add a,(ix+TFMData.tfmlow) 0394++ 90F4 DD 77 06 ld (ix+TFMData.tfmlow),a 0395++ 90F7 CD D5 90 call .storeaddr 0396++ 90FA DD 66 07 ld h,(ix+TFMData.tfmhigh) 0397++ 90FD 6F ld l,a 0398++ 90FE .outTone 0399++ 90FE 08 exa 0400++ 90FF C6 A4 add a,#a4 0401++ 9101 FM.SelectReg a 0401++ 9101 42 > ld b,d 0401++ 9102 ED 70 > inf 0401++ 9104 FA 02 91 > jp m,$-2 0401++ 9107 ED 79 > out (c),Reg 0402++ 9109 FM.WriteReg h 0402++ 9109 43 > ld b,e 0402++ 910A ED 70 > inf 0402++ 910C FA 0A 91 > jp m,$-2 0402++ 910F ED 61 > out (c),Reg 0403++ 9111 D6 04 sub #04 ;#A0+channel 0404++ 9113 FM.SelectReg a 0404++ 9113 42 > ld b,d 0404++ 9114 ED 70 > inf 0404++ 9116 FA 14 91 > jp m,$-2 0404++ 9119 ED 79 > out (c),Reg 0405++ 911B FM.WriteReg l 0405++ 911B 43 > ld b,e 0405++ 911C ED 70 > inf 0405++ 911E FA 1C 91 > jp m,$-2 0405++ 9121 ED 69 > out (c),Reg 0406++ 9123 D6 A0 sub #a0 0407++ 9125 08 exa 0408++ 9126 C9 ret 0409++ 9127 0410++ 9127 42 .OutRegs ld b,d ;%11111xxx 0411++ 9128 WaitStatus 0411++ 9128 ED 70 > inf 0411++ 912A FA 28 91 > jp m,$-2 0412++ 912D ED A3 outi ;reg 0413++ 912F WaitStatus 0413++ 912F ED 70 > inf 0413++ 9131 FA 2F 91 > jp m,$-2 0414++ 9134 43 ld b,e ;#BF 0415++ 9135 ED A3 outi ;value 0416++ 9137 3D dec a 0417++ 9138 20 ED jr nz,.OutRegs ;в turbo jr=jp 0418++ 913A C9 ret 0419++ 913B 0420++ 913B TFM.Init TFMData 0,-1,0 0420++ 913B 0000FF0000000000 0421++ 9143 TFM.A TFMData 0421++ 9143 0000000000000000 0422++ 914B TFM.B TFMData 0422++ 914B 0000000000000000 0423++ 9153 TFM.C TFMData 0423++ 9153 0000000000000000 0424++ 915B TFM.D TFMData 0424++ 915B 0000000000000000 0425++ 9163 TFM.E TFMData 0425++ 9163 0000000000000000 0426++ 916B TFM.F TFMData 0426++ 916B 0000000000000000 0427++ 9173 0428++ 9173 endmod 0429++ 9173 TFC.End 0430++ 9173 0431++ 9173 display "TFC module size: ",TFC.End-TFC.Start 0432++ 9173 0433++ 9173 endif 0434++ 9173 0422+ 9173 MTC.End 0423+ 9173 display "MTC module size: ",MTC.End-MTC.Start 0424+ 9173 0425+ 9173 endif 0426+ 9173 0013 9173 0014 9173 module 0015 9173 ;incbin MTC_CYBERMOTION 0016 9173 ;incbin MTC_DRUMTEST 0017 9173 ;incbin MTC_MUG 0018 9173 ;incbin MTC_MYSTICAL 0019 9173 ;incbin MTC_NEWOLD 0020 9173 ;incbin MTC_SNEGURKA 0021 9173 incbin MTC_INDEEDREST 0022 BBAD 0023 BBAD savesna "test_mtc.sna",begin 0024 BBAD savebin "../mtc_8000.bin",player,module-player 0025 BBAD Value Label ------ - ----------------------------------------------------------- 0x6000 begin 0x8000 init 0x600D begin.loop 0x6014 begin.delay 0x8005 play 0x8008 mute 0x602C X begin.fail 0x8000 player 0x0005 X MTC.StreamType 0x0000 MTC.StreamType.PT3 0x0001 MTC.StreamType.PT2 0x0002 MTC.StreamType.TS 0x0003 MTC.StreamType.TFC 0x0004 MTC.StreamType.Unknown 0x000B MTC.StreamData 0x0000 MTC.StreamData.Type 0x0001 MTC.StreamData.Data1 0x0003 MTC.StreamData.Data2 0x0005 MTC.StreamData.Init 0x0007 MTC.StreamData.Play 0x0009 MTC.StreamData.Mute 0x8000 MTC.Start 0x9173 MTC.End 0x800B MTC.Init 0x8048 MTC.Play 0x8066 MTC.Mute 0x80BD MTC.Streams 0x8086 MTC.ParseChunk 0x0000 MTC.ChunkId.MTC1 0x811C MTC.ParseMTC1 0x81E6 MTC.MergeStreams 0x8022 MTC.Init.initstreams 0x8084 MTC.jp_bc 0x804C MTC.Play.playstreams 0x806A MTC.Mute.mutestreams 0x8100 MTC.ChunkId 0x8089 MTC.ParseChunk.checkid 0x80B4 MTC.ParseChunk.matched 0x001C MTC.ChunkId.Unknown 0x80B6 MTC.ParseChunk.getdata 0x0003 MTC.MinStreamsCount 0x80DE MTC.Streams.End 0x0004 MTC.ChunkId.TRCK 0x0008 MTC.ChunkId.DATA 0x000C X MTC.ChunkId.NAME 0x0010 X MTC.ChunkId.AUTH 0x0014 X MTC.ChunkId.ANNO 0x0018 X MTC.ChunkId.PROP 0x0006 MTC.MaxStreamsCount 0x811F MTC.ParseMTC1.nextchunk 0x8137 MTC.ParseTrack 0x813A MTC.ParseTrack.nextchunk 0x8156 MTC.ParseData 0x8162 MTC.ParseTFC 0x8184 MTC.ParseTS 0x8191 MTC.ParsePT2 0x81A4 MTC.ParsePT3 0x8F05 TFC.CheckFormat 0x8F2E TFC.Init 0x8FE1 TFC.Play 0x8F6A TFC.Mute 0x81C3 MTC.FillStream 0x8179 MTC.AddStream 0x8ECD TS.CheckFormatKnownSize 0x81B7 MTC.FillTS 0x8E7C PT2.CheckFormat 0x8E77 PT2.Init 0x81BD MTC.FillPts 0x8E30 PT3.CheckFormat 0x8E2B PT3.Init 0x8EB7 TS.Init 0x8A88 PTS.PLAY 0x825A PTS.MUTE 0x81F2 MTC.Sort 0x81FA MTC.Sort.cycle 0x8219 MTC.Sort.end 0x8212 MTC.Sort.next 0x8206 MTC.Sort.swapitems 0x821D X MTC.Merge 0x8223 MTC.Merge.cycle 0x8231 MTC.Merge.perform 0x824A MTC.Merge.generic 0x824C MTC.Merge.copyitems 0x0030 X PTS.Release 0x0000 PTS.CurPosCounter 0x0000 PTS.ACBBAC 0x0000 PTS.LoopChecker 0x0000 PTS.Id 0x0000 PTS.Basic 0x0000 PTS.TonA 0x0002 PTS.TonB 0x0004 PTS.TonC 0x0006 PTS.Noise 0x0007 PTS.Mixer 0x0008 PTS.AmplA 0x0009 PTS.AmplB 0x000A PTS.AmplC 0x000B PTS.Env 0x000D PTS.EnvTp 0x8259 PTS.START 0x0001 X PTS.SETUP.NOLOOP 0x0002 PTS.SETUP.PT2 0x0004 X PTS.SETUP.ACB 0x0008 X PTS.SETUP.BAC 0x0010 PTS.SETUP.TS02 0x0020 PTS.SETUP.TSPT3 0x8259 PTS.SETUP 0x8B6D PTS.VARS1 0x0079 PTS.VRS.AYREGS 0x8BF4 PTS.VARS2 0x8A9C PTS.ROUT 0x826C PTS.INIT 0x8B6C PTS.VARS 0x8C7B PTS.VAR0END 0x0062 PTS.VRS.AdInPtA 0x8315 PTS.I_PT2 0x845E PTS.INITPT3 0x8852 PTS.e_ 0x8831 PTS.SamCnv 0x87FC PTS.OrnCP 0x8828 PTS.SamCP 0x87FF PTS.OrnLD 0x882B PTS.SamLD 0x8822 PTS.SamClc2 0x82B9 PTS.L20 0x82BB PTS.L21 0x86CF PTS.Version 0x830A PTS.NOTS 0x82FE PTS.TwoPT3s 0x0087 PTS.VRS 0x0002 PTS.VRS.ModNum 0x8993 PTS.TSSub 0x8301 PTS.AlCoTS_ 0x8B6C PTS.is_ts 0x861B PTS.PT3PD 0x8B34 PTS.PT3EMPTYORN 0x835D PTS.INITCOMMON 0x8496 PTS.INITPT2 0x8354 PTS.NOTS2 0x8555 PTS.PT2PD 0x8C8A PTS.PT2EMPTYORN 0x8506 PTS.PTDEC 0x8995 PTS.PsCalc 0x8B37 PTS.T_PACK 0x8C7B PTS.T1_ 0x836B PTS.TP_0 0x8377 PTS.TP_1 0x837E PTS.TP_2 0x006D PTS.VRS.DelyCnt 0x0003 PTS.VRS.ChanA 0x001B PTS.CHP.NtSkCn 0x0020 PTS.VRS.ChanB 0x003D PTS.VRS.ChanC 0x000D PTS.CHP.OrnPtr 0x8AE4 PTS.NT_DATA 0x83EF PTS.L3 0x8AF4 PTS.T_ 0x8D6B PTS.NT_ 0x83DE PTS.L1 0x83EB PTS.L2 0x8B00 PTS.TCOLD_1 0x8410 PTS.CORR_1 0x8425 PTS.TC_EXIT 0x841E PTS.CORR_2 0x8434 PTS.M1 0x8445 PTS.M2 0x8C6B PTS.VT_ 0x843D PTS.INITV2 0x8444 PTS.INITV1 0x8458 PTS.M3 0x84D1 PTS.SETMDAD 0x006C PTS.VRS.Delay 0x84DF PTS.SETCPPT 0x84E6 PTS.SETLPPT 0x84CA PTS.SETPTPT 0x84D8 PTS.SETORPT 0x848F PTS.SETSMPT 0x005E PTS.VRS.SamPtrs 0x0060 PTS.VRS.PatsPtr 0x005A PTS.VRS.MODADDR 0x005C PTS.VRS.OrnPtrs 0x0068 PTS.VRS.CrPsPtr 0x006A PTS.VRS.LPosPtr 0x84ED PTS.SETENBS 0x0077 PTS.VRS.EnvBase 0x84F4 PTS.SETESLD 0x0070 PTS.VRS.CurESld 0x84FB PTS.GETIX 0x8502 PTS.PTDECOD 0x8508 PTS.PD2_SAM 0x879E PTS.SETSAM 0x8557 PTS.PD2_LOOP 0x850D PTS.PD2_EOff 0x0014 PTS.CHP.Env_En 0x8512 PTS.PD2_ENV 0x8524 PTS.PD2_ORN 0x877F PTS.SETORN 0x8529 PTS.PD2_SKIP 0x0011 PTS.CHP.NNtSkp 0x852F PTS.PD2_VOL 0x001C PTS.CHP.Volume 0x8538 PTS.PD2_DEL 0x874F PTS.C_DELAY 0x853D PTS.PD2_GLIS 0x0015 PTS.CHP.Flags 0x0016 PTS.CHP.TnSlDl 0x0005 PTS.CHP.TSlCnt 0x0017 PTS.CHP.TSlStp 0x8556 PTS.PD2_LP2 0x859C PTS.PD2_REL 0x85A1 PTS.PD2_NOTE 0x867E PTS.PD_FIN 0x858C PTS.PD2_PORT 0x8597 PTS.PD2_STOP 0x0003 PTS.CHP.CrNsSl 0x85CD PTS.PD2_EXIT 0x0012 PTS.CHP.Note 0x86B7 PTS.PrNote 0x85CC PTS.NOGLIS2 0x85C8 PTS.NOPORT2 0x86DE PTS.LoStep 0x8699 PTS.SETPORT 0x0001 PTS.CHP.PsInSm 0x0000 PTS.CHP.PsInOr 0x0006 PTS.CHP.CrTnSl 0x85DC PTS.PD_OrSm 0x85E3 PTS.PD_SAM_ 0x85E6 PTS.PD_SAM 0x862A PTS.PD_LOOP 0x85EB PTS.PD_VOL 0x862D PTS.PD_LP2 0x85F4 PTS.PD_EOff 0x85FC PTS.PD_SorE 0x8606 PTS.PD_ENV 0x8764 PTS.SETENV 0x860B PTS.PD_ORN 0x8610 PTS.PD_ESAM 0x86D4 PTS.PrSlide 0x865F PTS.PD_REL 0x8665 PTS.PD_NOTE 0x865A PTS.PD_NOIS 0x87BA PTS.SPCCOMS 0x0074 PTS.VRS.Ns_Base 0x866D PTS.PD_RES 0x867B PTS.PDSP_ 0x8685 PTS.C_PORTM 0x0013 PTS.CHP.SlToNt 0x0019 PTS.CHP.TnDelt 0x86DD PTS.OLDPRTM 0x86E3 PTS.NOSIG 0x86ED PTS.SET_STP 0x000A PTS.CHP.COnOff 0x86F9 PTS.C_GLISS 0x870C PTS.GL36 0x8716 PTS.C_SMPOS 0x871C PTS.C_ORPOS 0x8722 PTS.C_VIBRT 0x000B PTS.CHP.OnOffD 0x000C PTS.CHP.OffOnD 0x873A PTS.C_ENGLS 0x0072 PTS.VRS.Env_Del 0x0073 PTS.VRS.CurEDel 0x006E PTS.VRS.ESldAdd 0x879D PTS.C_NOP 0x000F PTS.CHP.SamPtr 0x87DA PTS.CHREGS 0x8A17 PTS.Ampl 0x892D PTS.CH_EXIT 0x8876 PTS.CSP_ 0x8800 PTS.CH_ORPS 0x880B PTS.CH_NTP 0x8811 PTS.CH_NOK 0x882C PTS.CH_SMPS 0x0008 PTS.CHP.TnAcc 0x8863 PTS.CH_NOAC 0x88BE PTS.CH_AMP 0x88A9 PTS.CH_STPP 0x0002 PTS.CHP.CrAmSl 0x88D8 PTS.CH_NOAM 0x88D0 PTS.CH_AMIN 0x88D5 PTS.CH_SVAM 0x88E1 PTS.CH_APOS 0x88E7 PTS.CH_VOL 0x88F2 X PTS.CH_ENV 0x88F9 PTS.CH_NOEN 0x891B PTS.NO_ENSL 0x0004 PTS.CHP.CrEnSl 0x8913 PTS.NO_ENAC 0x0076 PTS.VRS.AddToEn 0x8929 PTS.CH_MIX 0x0075 PTS.VRS.AddToNs 0x894D PTS.CH_ONDL 0x8951 PTS.PLAY_ 0x8A04 PTS.PL2 0x89D0 PTS.PL1B 0x89C4 PTS.PL1A 0x8988 PTS.PLNLP 0x8995 PTS.NoAlCo 0x89C1 PTS.PSP_ 0x0064 PTS.VRS.AdInPtB 0x0066 PTS.VRS.AdInPtC 0x89E7 PTS.PL1C 0x89FE PTS.PL1D 0x8A9C PTS.PL_nts 0x8AA7 X PTS.r_nts 0x8AB8 PTS.ROUT_ 0x8ABC PTS.LOUT 0x8CAD PTS.T_NEW_0 0x8B1E PTS.TCNEW_0 0x8CAD PTS.T_OLD_0 0x8AF4 PTS.TCOLD_0 0x8C7B PTS.T_NEW_1 0x8B00 PTS.TCNEW_1 0x8C7B PTS.T_OLD_1 0x8CC5 PTS.T_NEW_2 0x8B29 PTS.TCNEW_2 0x8C93 PTS.T_OLD_2 0x8B02 PTS.TCOLD_2 0x8CAB PTS.T_NEW_3 0x8B14 PTS.TCNEW_3 0x8CAB PTS.T_OLD_3 0x8B15 PTS.TCOLD_3 0x001D PTS.CHP 0x0000 X PTS.VRS.CurPos 0x0001 X PTS.VRS.PosSub 0x8E2B X PTS.VARSEND 0x8E2B X PTS.MDLADDR 0x00CB X PT3.Header 0x0000 X PT3.Header.Id 0x000D X PT3.Header.Subversion 0x000E X PT3.Header.Description 0x0062 X PT3.Header.Mode 0x0063 PT3.Header.FreqTable 0x0064 X PT3.Header.Tempo 0x0065 X PT3.Header.Length 0x0066 X PT3.Header.Loop 0x0067 X PT3.Header.Patterns 0x0069 PT3.Header.Samples 0x00A9 PT3.Header.Ornaments 0x00C9 PT3.Header.Positions 0x8E2B PT3.Start 0x8E4B PT3.CheckFormat.samples 0x8E55 PT3.CheckFormat.ornaments 0x8E65 PT3.CheckFormat.positions 0x8E6A PT3.CheckFormat.div3 0x8E72 PT3.CheckFormat.posok 0x8E74 X PT3.CheckFormat.fail 0x8A88 X PT3.Play 0x825A X PT3.Mute 0x8E77 PT3.End 0x0085 X PT2.Header 0x0000 X PT2.Header.Tempo 0x0001 X PT2.Header.Length 0x0002 X PT2.Header.Loop 0x0003 PT2.Header.Samples 0x0043 X PT2.Header.Ornaments 0x0063 PT2.Header.Patterns 0x0065 PT2.Header.Name 0x0083 PT2.Header.Positions 0x8E77 PT2.Start 0x8E8D PT2.CheckFormat.samorns 0x8EA9 PT2.CheckFormat.positions 0x8EB4 X PT2.CheckFormat.fail 0x8A88 X PT2.Play 0x825A X PT2.Mute 0x8EB7 PT2.End 0x0010 X TS.Footer 0x0000 X TS.Footer.Sign1 0x0004 X TS.Footer.Size1 0x0006 X TS.Footer.Sign2 0x000A X TS.Footer.Size2 0x000C X TS.Footer.Sign3 0x8EB7 TS.Start 0x8EBC TS.CheckFormat 0x8EBF TS.CheckFormat.findfooter 0x8ECE TS.CheckFooter 0x8EFA TS.End 0x8A88 X TS.Play 0x825A X TS.Mute 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 0x8EFA TFC.Start 0x9173 TFC.End 0x913B TFC.TFM.Init 0x9143 TFC.TFM.A 0x8F5E TFC.Init.tfminitab 0x8F6A TFC.Init.tfminitab_end 0x8F45 TFC.Init.tfmini0 0x8F54 TFC.Init.tfminiHL 0x9143 TFC.TFM.A.addr 0x914B TFC.TFM.B.addr 0x9153 TFC.TFM.C.addr 0x915B TFC.TFM.D.addr 0x9163 TFC.TFM.E.addr 0x916B TFC.TFM.F.addr 0x8FD9 TFC.selChip0 0x8F78 TFC.Mute.tfminiPP 0x8FDD TFC.selChip1 0x8FC0 TFC.Mute.writeregsset 0x8FC8 TFC.Mute.writereg 0x8FBC TFC.Mute.selRegA 0x9026 TFC.PlayChannel 0x914B TFC.TFM.B 0x9153 TFC.TFM.C 0x915B TFC.TFM.D 0x9163 TFC.TFM.E 0x916B TFC.TFM.F 0x007E TFC.bb 0x007F TFC.be 0x90E9 TFC.PlayChannel.skiper 0x9050 TFC.PlayChannel.noframe 0x9056 TFC.PlayChannel.tfmframe 0x9040 TFC.PlayChannel.begin 0x9048 TFC.PlayChannel.end 0x90DC TFC.PlayChannel.HLskiper 0x907D TFC.PlayChannel.noffX 0x9094 TFC.PlayChannel.nofrqX 0x90FE TFC.PlayChannel.outTone 0x9127 TFC.PlayChannel.OutRegs 0x90D5 TFC.PlayChannel.storeaddr 0x90B7 TFC.PlayChannel.block 0x90C6 TFC.PlayChannel.subframe 0x90CC TFC.PlayChannel.OLDfar 0x90CE TFC.PlayChannel.OLDnear 0x90ED TFC.PlayChannel.slide 0x913B X TFC.TFM.Init.addr 0x913D X TFC.TFM.Init.skip 0x913E X TFC.TFM.Init.blkcnt 0x913F X TFC.TFM.Init.blkretaddr 0x9140 X TFC.TFM.Init.loopaddr 0x9141 X TFC.TFM.Init.tfmlow 0x9142 X TFC.TFM.Init.tfmhigh 0x9145 X TFC.TFM.A.skip 0x9146 X TFC.TFM.A.blkcnt 0x9147 X TFC.TFM.A.blkretaddr 0x9148 X TFC.TFM.A.loopaddr 0x9149 X TFC.TFM.A.tfmlow 0x914A X TFC.TFM.A.tfmhigh 0x914D X TFC.TFM.B.skip 0x914E X TFC.TFM.B.blkcnt 0x914F X TFC.TFM.B.blkretaddr 0x9150 X TFC.TFM.B.loopaddr 0x9151 X TFC.TFM.B.tfmlow 0x9152 X TFC.TFM.B.tfmhigh 0x9155 X TFC.TFM.C.skip 0x9156 X TFC.TFM.C.blkcnt 0x9157 X TFC.TFM.C.blkretaddr 0x9158 X TFC.TFM.C.loopaddr 0x9159 X TFC.TFM.C.tfmlow 0x915A X TFC.TFM.C.tfmhigh 0x915D X TFC.TFM.D.skip 0x915E X TFC.TFM.D.blkcnt 0x915F X TFC.TFM.D.blkretaddr 0x9160 X TFC.TFM.D.loopaddr 0x9161 X TFC.TFM.D.tfmlow 0x9162 X TFC.TFM.D.tfmhigh 0x9165 X TFC.TFM.E.skip 0x9166 X TFC.TFM.E.blkcnt 0x9167 X TFC.TFM.E.blkretaddr 0x9168 X TFC.TFM.E.loopaddr 0x9169 X TFC.TFM.E.tfmlow 0x916A X TFC.TFM.E.tfmhigh 0x916D X TFC.TFM.F.skip 0x916E X TFC.TFM.F.blkcnt 0x916F X TFC.TFM.F.blkretaddr 0x9170 X TFC.TFM.F.loopaddr 0x9171 X TFC.TFM.F.tfmlow 0x9172 X TFC.TFM.F.tfmhigh 0x9173 module