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 "uni.asm" 0001+ 8000 ifndef _uni_asm_defined 0002+ 8000 define _uni_asm_defined 0003+ 8000 0004+ 8000 module UNI 0005+ 8000 21 73 92 ld hl,End 0006+ 8003 18 06 jr Init 0007+ 8005 C3 00 00 Play jp 0 0008+ 8008 C3 00 00 Mute jp 0 0009+ 800B 0010+ 800B Init ;check most stable first 0011+ 800B CD 28 80 call .tryMTC 0012+ 800E C4 39 80 call nz,.tryTFC 0013+ 8011 C4 4A 80 call nz,.tryTS 0014+ 8014 C4 5B 80 call nz,.tryPT2 0015+ 8017 C4 6C 80 call nz,.tryPT3 0016+ 801A C8 ret z 0017+ 801B 21 34 00 ld hl,52 0018+ 801F 54 5D ld d,h,e,l 0019+ 8020 22 06 80 .addr ld (Play+1),hl 0020+ 8023 ED 53 09 80 ld (Mute+1),de 0021+ 8027 C9 ret 0022+ 8028 0023+ 8028 .tryMTC 0024+ 8028 E5 push hl 0025+ 8029 CD 7D 80 call MTC.CheckFormat 0026+ 802C E1 pop hl 0027+ 802D C0 ret nz 0028+ 802E CD 9C 80 call MTC.Init 0029+ 8031 21 D9 80 ld hl,MTC.Play 0030+ 8034 11 F7 80 ld de,MTC.Mute 0031+ 8037 18 E7 jr .addr 0032+ 8039 0033+ 8039 .tryTFC 0034+ 8039 E5 push hl 0035+ 803A CD 05 90 call TFC.CheckFormat 0036+ 803D E1 pop hl 0037+ 803E C0 ret nz 0038+ 803F CD 2E 90 call TFC.Init 0039+ 8042 21 E1 90 ld hl,TFC.Play 0040+ 8045 11 6A 90 ld de,TFC.Mute 0041+ 8048 18 D6 jr .addr 0042+ 804A 0043+ 804A .tryTS 0044+ 804A E5 push hl 0045+ 804B CD BC 8F call TS.CheckFormat 0046+ 804E E1 pop hl 0047+ 804F C0 ret nz 0048+ 8050 CD B7 8F call TS.Init 0049+ 8053 21 88 8B ld hl,TS.Play 0050+ 8056 11 5A 83 ld de,TS.Mute 0051+ 8059 18 C5 jr .addr 0052+ 805B 0053+ 805B .tryPT2 0054+ 805B E5 push hl 0055+ 805C CD 7C 8F call PT2.CheckFormat 0056+ 805F E1 pop hl 0057+ 8060 C0 ret nz 0058+ 8061 CD 77 8F call PT2.Init 0059+ 8064 21 88 8B ld hl,PT2.Play 0060+ 8067 11 5A 83 ld de,PT2.Mute 0061+ 806A 18 B4 jr .addr 0062+ 806C 0063+ 806C .tryPT3 0064+ 806C E5 push hl 0065+ 806D CD 30 8F call PT3.CheckFormat 0066+ 8070 E1 pop hl 0067+ 8071 C0 ret nz 0068+ 8072 CD 2B 8F call PT3.Init 0069+ 8075 21 88 8B ld hl,PT3.Play 0070+ 8078 11 5A 83 ld de,PT3.Mute 0071+ 807B 18 A3 jr .addr 0072+ 807D 0073+ 807D endmod 0074+ 807D 0075+ 807D define HaveFormatCheck 0076+ 807D define NoPrologue 0077+ 807D include "mtc.asm" 0001++ 807D ifndef _mtc_asm_defined 0002++ 807D define _mtc_asm_defined 0003++ 807D 0004++ 807D module MTC 0005++ 807D 0006++ 807D ;enum-like 0007++ 807D struct StreamType 0008++ 807D~ PT3 db 0 0009++ 807D~ PT2 db 0 0010++ 807D~ TS db 0 0011++ 807D~ TFC db 0 0012++ 807D~ Unknown db 0 0013++ 807D ends 0014++ 807D 0015++ 807D struct StreamData 0016++ 807D~ Type db 0 0017++ 807D~ Data1 dw 0 0018++ 807D~ Data2 dw 0 0019++ 807D~ Init dw 0 0020++ 807D~ Play dw 0 0021++ 807D~ Mute dw 0 0022++ 807D ends 0023++ 807D 0024++ 807D Start 0025++ 807D ifndef NoPrologue 0026++ 807D~ ld hl,End 0027++ 807D~ jr Init 0028++ 807D~ jp Play 0029++ 807D~ jp Mute 0030++ 807D endif 0031++ 807D 0032++ 807D ifdef HaveFormatCheck 0033++ 807D 0034++ 807D include "format.asm" 0001+++807D ;some format checking macros 0002+++807D ifndef _format_asm_defined 0003+++807D define _format_asm_defined 0004+++807D 0005+++807D macro LessOrEqual number 0006+++807D~ ld a,number 0007+++807D~ cp (hl) 0008+++807D~ inc hl 0009+++807D~ ret c 0010+++807D endm 0011+++807D 0012+++807D macro Greater number 0013+++807D~ ld a,(hl) 0014+++807D~ inc hl 0015+++807D~ cp number 0016+++807D~ ret c 0017+++807D endm 0018+++807D 0019+++807D macro AnyByte 0020+++807D~ inc hl 0021+++807D endm 0022+++807D 0023+++807D macro AnyBytes count 0024+++807D~ if count > 7 0025+++807D~ ld a,l 0026+++807D~ add a,count 0027+++807D~ ld l,a 0028+++807D~ adc a,h 0029+++807D~ sub l 0030+++807D~ ld h,a 0031+++807D~ else 0032+++807D~ dup count 0033+++807D~ inc hl 0034+++807D~ edup 0035+++807D~ endif 0036+++807D endm 0037+++807D 0038+++807D macro EqualTo number 0039+++807D~ ld a,number 0040+++807D~ cp (hl) 0041+++807D~ inc hl 0042+++807D~ ret nz 0043+++807D endm 0044+++807D 0045+++807D endif 0046+++807D 0035++ 807D 0036++ 807D ;in HL - module addr 0037++ 807D ;out Z - is mtc 0038++ 807D CheckFormat 0039++ 807D EqualTo "M" 0039++ 807D 3E 4D > ld a,number 0039++ 807F BE > cp (hl) 0039++ 8080 23 > inc hl 0039++ 8081 C0 > ret nz 0040++ 8082 EqualTo "T" 0040++ 8082 3E 54 > ld a,number 0040++ 8084 BE > cp (hl) 0040++ 8085 23 > inc hl 0040++ 8086 C0 > ret nz 0041++ 8087 EqualTo "C" 0041++ 8087 3E 43 > ld a,number 0041++ 8089 BE > cp (hl) 0041++ 808A 23 > inc hl 0041++ 808B C0 > ret nz 0042++ 808C EqualTo "1" 0042++ 808C 3E 31 > ld a,number 0042++ 808E BE > cp (hl) 0042++ 808F 23 > inc hl 0042++ 8090 C0 > ret nz 0043++ 8091 EqualTo 0 0043++ 8091 3E 00 > ld a,number 0043++ 8093 BE > cp (hl) 0043++ 8094 23 > inc hl 0043++ 8095 C0 > ret nz 0044++ 8096 EqualTo 0 0044++ 8096 3E 00 > ld a,number 0044++ 8098 BE > cp (hl) 0044++ 8099 23 > inc hl 0044++ 809A C0 > ret nz 0045++ 809B C9 ret 0046++ 809C 0047++ 809C display "MTC checker size: ",$-CheckFormat 0048++ 809C 0049++ 809C endif 0050++ 809C 0051++ 809C ;in HL - module addr 0052++ 809C DD 21 4E 81 Init ld ix,Streams 0053++ 80A0 DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown 0054++ 80A4 CD 17 81 call ParseChunk 0055++ 80A7 FE 00 cp ChunkId.MTC1 0056++ 80A9 CC 1C 82 call z,ParseMTC1 0057++ 80AC CD E6 82 call MergeStreams 0058++ 80AF DD 21 4E 81 ld ix,Streams 0059++ 80B3 .initstreams 0060++ 80B3 DD 7E 00 ld a,(ix+StreamData.Type) 0061++ 80B6 FE 04 cp StreamType.Unknown 0062++ 80B8 C8 ret z 0063++ 80B9 DD 6E 01 ld l,(ix+StreamData.Data1) 0064++ 80BC DD 66 02 ld h,(ix+StreamData.Data1+1) 0065++ 80BF DD 5E 03 ld e,(ix+StreamData.Data2) 0066++ 80C2 DD 56 04 ld d,(ix+StreamData.Data2+1) 0067++ 80C5 DD 4E 05 ld c,(ix+StreamData.Init) 0068++ 80C8 DD 46 06 ld b,(ix+StreamData.Init+1) 0069++ 80CB DD E5 push ix 0070++ 80CD CD 15 81 call jp_bc 0071++ 80D0 DD E1 pop ix 0072++ 80D2 01 0B 00 ld bc,StreamData 0073++ 80D5 DD 09 add ix,bc 0074++ 80D7 18 DA jr .initstreams 0075++ 80D9 0076++ 80D9 DD 21 4E 81 Play ld ix,Streams 0077++ 80DD .playstreams 0078++ 80DD DD 7E 00 ld a,(ix+StreamData.Type) 0079++ 80E0 FE 04 cp StreamType.Unknown 0080++ 80E2 C8 ret z 0081++ 80E3 DD 4E 07 ld c,(ix+StreamData.Play) 0082++ 80E6 DD 46 08 ld b,(ix+StreamData.Play+1) 0083++ 80E9 DD E5 push ix 0084++ 80EB CD 15 81 call jp_bc 0085++ 80EE DD E1 pop ix 0086++ 80F0 01 0B 00 ld bc,StreamData 0087++ 80F3 DD 09 add ix,bc 0088++ 80F5 18 E6 jr .playstreams 0089++ 80F7 0090++ 80F7 DD 21 4E 81 Mute ld ix,Streams 0091++ 80FB .mutestreams 0092++ 80FB DD 7E 00 ld a,(ix+StreamData.Type) 0093++ 80FE FE 04 cp StreamType.Unknown 0094++ 8100 C8 ret z 0095++ 8101 DD 4E 09 ld c,(ix+StreamData.Mute) 0096++ 8104 DD 46 0A ld b,(ix+StreamData.Mute+1) 0097++ 8107 DD E5 push ix 0098++ 8109 CD 15 81 call jp_bc 0099++ 810C DD E1 pop ix 0100++ 810E 01 0B 00 ld bc,StreamData 0101++ 8111 DD 09 add ix,bc 0102++ 8113 18 E6 jr .mutestreams 0103++ 8115 0104++ 8115 C5 jp_bc push bc 0105++ 8116 C9 ret 0106++ 8117 0107++ 8117 ;in hl - chunk start 0108++ 8117 ;out a - chunkid 0109++ 8117 ;out hl - chunk data start 0110++ 8117 ;out bc - chunk data size 0111++ 8117 ;corrupt de 0112++ 8117 ParseChunk 0113++ 8117 11 00 82 ld de,ChunkId 0114++ 811A .checkid 0115++ 811A 06 04 ld b,4 0116++ 811C dup 4 0117++ 811C 1A > ld a,(de) 0118++ 811D 1C > inc e 0119++ 811E BE > cp (hl) 0120++ 811F 23 > inc hl 0121++ 8120 20 01 > jr nz,$+3 0122++ 8122 05 > dec b 0117++ 8123 1A > ld a,(de) 0118++ 8124 1C > inc e 0119++ 8125 BE > cp (hl) 0120++ 8126 23 > inc hl 0121++ 8127 20 01 > jr nz,$+3 0122++ 8129 05 > dec b 0117++ 812A 1A > ld a,(de) 0118++ 812B 1C > inc e 0119++ 812C BE > cp (hl) 0120++ 812D 23 > inc hl 0121++ 812E 20 01 > jr nz,$+3 0122++ 8130 05 > dec b 0117++ 8131 1A > ld a,(de) 0118++ 8132 1C > inc e 0119++ 8133 BE > cp (hl) 0120++ 8134 23 > inc hl 0121++ 8135 20 01 > jr nz,$+3 0122++ 8137 05 > dec b 0124++ 8138 ;nz if last byte is not matched 0125++ 8138 ;nz if b != 0 (not all bytes matched) 0126++ 8138 7B ld a,e 0127++ 8139 28 0A jr z,.matched 0128++ 813B FE 1C cp ChunkId.Unknown 0129++ 813D 28 08 jr z,.getdata 0130++ 8142 2B 2B 2B 2B dec hl,hl,hl,hl 0131++ 8143 18 D5 jr .checkid 0132++ 8145 .matched 0133++ 8145 D6 04 sub 4 0134++ 8147 .getdata 0135++ 8147 ;skip higher bytes of size, assume they are zero 0136++ 8147 23 inc hl 0137++ 8148 23 inc hl 0138++ 8149 46 ld b,(hl) 0139++ 814A 23 inc hl 0140++ 814B 4E ld c,(hl) 0141++ 814C 23 inc hl 0142++ 814D C9 ret 0143++ 814E 0144++ 814E ;put streams in gap 0145++ 814E Streams 0146++ 814E MinStreamsCount=3 ;approx: ts+tfm 0147++ 814E 00 ds MinStreamsCount*StreamData ;approx 0148++ 816F Streams.End 0149++ 816F display "MTC: loosed ",256-low $," bytes" 0150++ 816F 00 align 256 0151++ 8200 0152++ 8200 ChunkId 0153++ 8200 .MTC1=low $ 0154++ 8200 4D 54 43 31 db "MTC1" 0155++ 8204 .TRCK=low $ 0156++ 8204 54 52 43 4B db "TRCK" 0157++ 8208 .DATA=low $ 0158++ 8208 44 41 54 41 db "DATA" 0159++ 820C .NAME=low $ 0160++ 820C 4E 41 4D 45 db "NAME" 0161++ 8210 .AUTH=low $ 0162++ 8210 41 55 54 48 db "AUTH" 0163++ 8214 .ANNO=low $ 0164++ 8214 41 4E 4E 4F db "ANNO" 0165++ 8218 .PROP=low $ 0166++ 8218 50 52 4F 50 db "PROP" 0167++ 821C .Unknown=low $ 0168++ 821C 0169++ 821C MaxStreamsCount=(ChunkId-Streams)/StreamData 0170++ 821C display "MTC: max streams ",MaxStreamsCount 0171++ 821C 0172++ 821C macro MoveNextChunk 0173++ 821C~ ;chunk is always aligned at word boundary, so correct odd length 0174++ 821C~ push bc 0175++ 821C~ pop af 0176++ 821C~ adc hl,bc 0177++ 821C endm 0178++ 821C 0179++ 821C ;in hl - content 0180++ 821C ;in bc - size 0181++ 821C ParseMTC1 0182++ 821C E5 push hl 0183++ 821D 09 add hl,bc 0184++ 821E E3 ex (sp),hl 0185++ 821F ; (sp) - end of avail data 0186++ 821F .nextchunk 0187++ 821F CD 17 81 call ParseChunk 0188++ 8222 E5 C5 push hl,bc 0189++ 8224 FE 04 cp ChunkId.TRCK 0190++ 8226 CC 37 82 call z,ParseTrack 0191++ 8229 C1 E1 pop bc,hl 0192++ 822B MoveNextChunk 0192++ 822B C5 > push bc 0192++ 822C F1 > pop af 0192++ 822D ED 4A > adc hl,bc 0193++ 822F C1 pop bc 0194++ 8230 ;hl- end of chunk 0195++ 8230 ;de- end of avail 0196++ 8230 ED 42 sbc hl,bc 0197++ 8232 C8 ret z ;last chunk 0198++ 8233 09 add hl,bc 0199++ 8234 C5 push bc 0200++ 8235 18 E8 jr .nextchunk 0201++ 8237 0202++ 8237 ;in hl - content 0203++ 8237 ;in bc - size 0204++ 8237 ParseTrack 0205++ 8237 E5 push hl 0206++ 8238 09 add hl,bc 0207++ 8239 E3 ex (sp),hl 0208++ 823A ; (sp) - end of avail data 0209++ 823A .nextchunk 0210++ 823A CD 17 81 call ParseChunk 0211++ 823D E5 C5 push hl,bc 0212++ 823F FE 08 cp ChunkId.DATA 0213++ 8241 CC 56 82 call z,ParseData 0214++ 8244 08 exa 0215++ 8245 C1 E1 pop bc,hl 0216++ 8247 MoveNextChunk 0216++ 8247 C5 > push bc 0216++ 8248 F1 > pop af 0216++ 8249 ED 4A > adc hl,bc 0217++ 824B C1 pop bc 0218++ 824C 08 exa 0219++ 824D C8 ret z ;data is parsed 0220++ 824E ;hl- end of chunk 0221++ 824E ;de- end of avail 0222++ 824E A7 and a 0223++ 824F ED 42 sbc hl,bc 0224++ 8251 C8 ret z ;last chunk 0225++ 8252 09 add hl,bc 0226++ 8253 C5 push bc 0227++ 8254 18 E4 jr .nextchunk 0228++ 8256 0229++ 8256 ;in hl - content 0230++ 8256 ;in bc - size 0231++ 8256 ;out Z - data parsed and added as stream 0232++ 8256 ParseData 0233++ 8256 CD 62 82 call ParseTFC 0234++ 8259 C4 84 82 call nz,ParseTS 0235++ 825C C4 91 82 call nz,ParsePT2 0236++ 825F 20 43 jr nz,ParsePT3 0237++ 8261 C9 ret 0238++ 8262 0239++ 8262 ParseTFC 0240++ 8262 E5 C5 push hl,bc 0241++ 8264 CD 05 90 call TFC.CheckFormat 0242++ 8267 C1 E1 pop bc,hl 0243++ 8269 C0 ret nz 0244++ 826A 3E 03 ld a,StreamType.TFC 0245++ 826C D9 exx 0246++ 826D 21 2E 90 ld hl,TFC.Init 0247++ 8270 11 E1 90 ld de,TFC.Play 0248++ 8273 01 6A 90 ld bc,TFC.Mute 0249++ 8276 CD C3 82 call FillStream 0250++ 8279 AddStream 0251++ 8279 01 0B 00 ld bc,StreamData 0252++ 827C DD 09 add ix,bc 0253++ 827E DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown 0254++ 8282 AF xor a;set Z 0255++ 8283 C9 ret 0256++ 8284 0257++ 8284 ParseTS 0258++ 8284 E5 C5 push hl,bc 0259++ 8286 CD CD 8F call TS.CheckFormatKnownSize 0260++ 8289 C1 E1 pop bc,hl 0261++ 828B C0 ret nz 0262++ 828C CD B7 82 call FillTS 0263++ 828F 18 E8 jr AddStream 0264++ 8291 0265++ 8291 ParsePT2 0266++ 8291 E5 C5 push hl,bc 0267++ 8293 CD 7C 8F call PT2.CheckFormat 0268++ 8296 C1 E1 pop bc,hl 0269++ 8298 C0 ret nz 0270++ 8299 3E 01 ld a,StreamType.PT2 0271++ 829B D9 exx 0272++ 829C 21 77 8F ld hl,PT2.Init 0273++ 829F CD BD 82 call FillPts 0274++ 82A2 18 D5 jr AddStream 0275++ 82A4 0276++ 82A4 ParsePT3 0277++ 82A4 E5 C5 push hl,bc 0278++ 82A6 CD 30 8F call PT3.CheckFormat 0279++ 82A9 C1 E1 pop bc,hl 0280++ 82AB C0 ret nz 0281++ 82AC 3E 00 ld a,StreamType.PT3 0282++ 82AE D9 exx 0283++ 82AF 21 2B 8F ld hl,PT3.Init 0284++ 82B2 CD BD 82 call FillPts 0285++ 82B5 18 C2 jr AddStream 0286++ 82B7 0287++ 82B7 3E 02 FillTS ld a,StreamType.TS 0288++ 82B9 D9 exx 0289++ 82BA 21 B7 8F ld hl,TS.Init 0290++ 82BD 11 88 8B FillPts ld de,PTS.PLAY 0291++ 82C0 01 5A 83 ld bc,PTS.MUTE 0292++ 82C3 FillStream 0293++ 82C3 DD 77 00 ld (ix+StreamData.Type),a 0294++ 82C6 DD 75 05 ld (ix+StreamData.Init),l 0295++ 82C9 DD 74 06 ld (ix+StreamData.Init+1),h 0296++ 82CC DD 73 07 ld (ix+StreamData.Play),e 0297++ 82CF DD 72 08 ld (ix+StreamData.Play+1),d 0298++ 82D2 DD 71 09 ld (ix+StreamData.Mute),c 0299++ 82D5 DD 70 0A ld (ix+StreamData.Mute+1),b 0300++ 82D8 D9 exx 0301++ 82D9 DD 75 01 ld (ix+StreamData.Data1),l 0302++ 82DC DD 74 02 ld (ix+StreamData.Data1+1),h 0303++ 82DF DD 73 03 ld (ix+StreamData.Data2),e 0304++ 82E2 DD 72 04 ld (ix+StreamData.Data2+1),d 0305++ 82E5 C9 ret 0306++ 82E6 0307++ 82E6 ;some business-logic related to supported players 0308++ 82E6 MergeStreams 0309++ 82E6 3A 4E 81 ld a,(Streams+StreamData.Type) 0310++ 82E9 FE 04 cp StreamType.Unknown 0311++ 82EB C8 ret z ;no streams 0312++ 82EC 3A 59 81 ld a,(Streams+StreamData+StreamData.Type) 0313++ 82EF FE 04 cp StreamType.Unknown 0314++ 82F1 C8 ret z ;single stream 0315++ 82F2 0316++ 82F2 ;sort streams according to type, use simple bubblesort 0317++ 82F2 Sort 0318++ 82F2 assert 0 == ((Streams ^ Streams.End) >> 8) 0319++ 82F2 assert 0 == StreamData.Type 0320++ 82F2 11 4E 81 ld de,Streams 0321++ 82F5 21 59 81 ld hl,Streams+StreamData 0322++ 82F8 0E 00 ld c,0;swaps mark 0323++ 82FA .cycle 0324++ 82FA 1A ld a,(de) 0325++ 82FB FE 04 cp StreamType.Unknown 0326++ 82FD 28 1A jr z,.end 0327++ 82FF BE cp (hl) 0328++ 8300 38 10 jr c,.next 0329++ 8302 28 0E jr z,.next 0330++ 8304 06 0B ld b,StreamData 0331++ 8306 .swapitems 0332++ 8306 1A ld a,(de) 0333++ 8307 4E ld c,(hl) 0334++ 8308 77 ld (hl),a 0335++ 8309 79 ld a,c 0336++ 830A 12 ld (de),a 0337++ 830B 2C inc l 0338++ 830C 1C inc e 0339++ 830D 10 F7 djnz .swapitems 0340++ 830F 4C ld c,h 0341++ 8310 18 E8 jr .cycle 0342++ 8312 .next 0343++ 8312 5D ld e,l 0344++ 8313 7D ld a,l 0345++ 8314 C6 0B add a,StreamData 0346++ 8316 6F ld l,a 0347++ 8317 18 E1 jr .cycle 0348++ 8319 .end 0349++ 8319 79 ld a,c 0350++ 831A A7 and a 0351++ 831B 20 D5 jr nz,Sort 0352++ 831D ;try merge streams 0353++ 831D ; X X merged to X (last is taken) 0354++ 831D ; PT3 PT3 merged to TS 0355++ 831D Merge 0356++ 831D assert 0 == StreamData.Type 0357++ 831D 11 4E 81 ld de,Streams 0358++ 8320 21 59 81 ld hl,Streams+StreamData 0359++ 8323 .cycle 0360++ 8323 1A ld a,(de) 0361++ 8324 FE 04 cp StreamType.Unknown 0362++ 8326 C8 ret z 0363++ 8327 BE cp (hl) 0364++ 8328 28 07 jr z,.perform 0365++ 832A 5D ld e,l 0366++ 832B 7D ld a,l 0367++ 832C C6 0B add a,StreamData 0368++ 832E 6F ld l,a 0369++ 832F 18 F2 jr .cycle 0370++ 8331 .perform 0371++ 8331 FE 00 cp StreamType.PT3 0372++ 8333 20 15 jr nz,.generic 0373++ 8335 ;merge PT3 streams to TS 0374++ 8335 E5 D5 push hl,de 0375++ 8337 E5 D5 push hl,de 0376++ 8339 2C inc l 0377++ 833A 5E ld e,(hl) 0378++ 833B 2C inc l 0379++ 833C 56 ld d,(hl) ;data1 0380++ 833D E1 pop hl 0381++ 833E 2C inc l 0382++ 833F 7E ld a,(hl) 0383++ 8340 2C inc l 0384++ 8341 66 ld h,(hl) 0385++ 8342 6F ld l,a ;data2 0386++ 8343 DD E1 pop ix 0387++ 8345 CD B7 82 call FillTS 0388++ 8348 D1 E1 pop de,hl 0389++ 834A .generic 0390++ 834A ;for other types just take last one 0391++ 834A 06 0B ld b,StreamData 0392++ 834C .copyitems 0393++ 834C 7E ld a,(hl) 0394++ 834D 12 ld (de),a 0395++ 834E 2C inc l 0396++ 834F 1C inc e 0397++ 8350 10 FA djnz .copyitems 0398++ 8352 1A ld a,(de) 0399++ 8353 FE 04 cp StreamType.Unknown 0400++ 8355 20 F3 jr nz,.generic 0401++ 8357 18 8D jr MergeStreams 0402++ 8359 0403++ 8359 endmod 0404++ 8359 0405++ 8359 ifndef NoPrologue 0406++ 8359~ define NoPrologue 0407++ 8359 endif 0408++ 8359 0409++ 8359 ifndef HaveFormatCheck 0410++ 8359~ define HaveFormatCheck 0411++ 8359 endif 0412++ 8359 0413++ 8359 ifndef ONtfm 0414++ 8359 define ONtfm 0415++ 8359 endif 0416++ 8359 0417++ 8359 include "PTSPlay.asm" 0001+++8359 ifndef _pts_asm_defined 0002+++8359 define _pts_asm_defined 0003+++8359 0004+++8359 MODULE PTS 0005+++8359 0006+++8359 ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8359 ;(c)2004-2007 S.V.Bulba 0008+++8359 ;Specially for AlCo 0009+++8359 ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8359 0011+++8359 ;Release number 0012+++8359 Release EQU "0" 0013+++8359 0014+++8359 ;Conditional assembly 0015+++8359 ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8359 CurPosCounter=0 0017+++8359 ;2) Allow channels allocation bits at (SETUP) 0018+++8359 ACBBAC=0 0019+++8359 ;3) Allow loop checking and disabling 0020+++8359 LoopChecker=0 0021+++8359 ;4) Insert official identificator 0022+++8359 Id=0 0023+++8359 ;5) Set IY for correct return to ZX Basic 0024+++8359 Basic=0 0025+++8359 0026+++8359 ;Features 0027+++8359 ;-------- 0028+++8359 ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8359 ; address). 0030+++8359 ;-Variables (VARS) can be located at any address (not only after 0031+++8359 ; code block). 0032+++8359 ;-INIT subprogram checks PT3-module version and rightly 0033+++8359 ; generates both note and volume tables outside of code block 0034+++8359 ; (in VARS). 0035+++8359 ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8359 ; PT3 module version). 0037+++8359 ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8359 ; and higher). 0039+++8359 ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8359 ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8359 ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8359 ;-See also notes at the end of this source code. 0043+++8359 0044+++8359 ;Limitations 0045+++8359 ;----------- 0046+++8359 ;-Can run in RAM only (self-modified code is used). 0047+++8359 ;-PT2 position list must be end by #FF marker only. 0048+++8359 0049+++8359 ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8359 ;into RAM or INIT subprogram was not called before. 0051+++8359 0052+++8359 ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8359 ;playing 0054+++8359 0055+++8359 TonA EQU 0 0056+++8359 TonB EQU 2 0057+++8359 TonC EQU 4 0058+++8359 Noise EQU 6 0059+++8359 Mixer EQU 7 0060+++8359 AmplA EQU 8 0061+++8359 AmplB EQU 9 0062+++8359 AmplC EQU 10 0063+++8359 Env EQU 11 0064+++8359 EnvTp EQU 13 0065+++8359 0066+++8359 START 0067+++8359 0068+++8359 SETUP.NOLOOP EQU 1 0069+++8359 SETUP.PT2 EQU 2 0070+++8359 SETUP.ACB EQU 4 0071+++8359 SETUP.BAC EQU 8 0072+++8359 SETUP.TS02 EQU 16 0073+++8359 SETUP.TSPT3 EQU 32 0074+++8359 0075+++8359 00 SETUP DB 0 ;set bit0, if you want to play without looping 0076+++835A ;(optional); 0077+++835A ;set bit1 for PT2 and reset for PT3 before 0078+++835A ;calling INIT; 0079+++835A ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++835A ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++835A ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++835A ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++835A ;documented and must be converted to new standard. 0084+++835A ;bit6 is set each time, when loop point of 2nd TS 0085+++835A ;module is passed (optional). 0086+++835A ;bit7 is set each time, when loop point of 1st TS 0087+++835A ;or of single module is passed (optional). 0088+++835A 0089+++835A ;Identifier 0090+++835A IF Id 0091+++835A~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++835A ENDIF 0093+++835A 0094+++835A IF LoopChecker 0095+++835A~ CHECKLP LD HL,SETUP 0096+++835A~ BIT 0,(IY-100+VRS.ModNum) 0097+++835A~ JR Z,CHL1 0098+++835A~ SET 6,(HL) 0099+++835A~ JR CHL2 0100+++835A~ CHL1 SET 7,(HL) 0101+++835A~ CHL2 BIT 0,(HL) 0102+++835A~ RET Z 0103+++835A~ POP HL 0104+++835A~ INC (IY-100+VRS.DelyCnt) 0105+++835A~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++835A~ XOR A 0107+++835A~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++835A~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++835A~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++835A~ RET 0111+++835A ENDIF 0112+++835A 0113+++835A AF MUTE XOR A 0114+++835B 67 LD H,A 0115+++835C 6F LD L,A 0116+++835D 32 EE 8C LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8360 22 EF 8C LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8363 32 75 8D LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8366 22 76 8D LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8369 C3 9C 8B JP ROUT 0121+++836C 0122+++836C INIT 0123+++836C ;HL - AddressOfModule 0124+++836C ;DE - AddresOf2ndModule 0125+++836C ;A - mode 0126+++836C D5 PUSH DE 0127+++836D E5 PUSH HL 0128+++836E 21 6C 8C LD HL,VARS 0129+++8371 36 00 LD (HL),0 0130+++8373 11 6D 8C LD DE,VARS+1 0131+++8376 01 0E 01 LD BC,VAR0END-VARS-1 0132+++8379 ED B0 LDIR 0133+++837B 23 INC HL 0134+++837C 22 CF 8C LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++837F 22 56 8D LD (VARS2+VRS.AdInPtA),HL 0136+++8382 0137+++8382 E1 POP HL 0138+++8383 FD 21 D1 8C LD IY,VARS1+100 0139+++8387 32 59 83 LD (SETUP),A 0140+++838A E6 02 AND SETUP.PT2 0141+++838C C2 15 84 JP NZ,I_PT2 0142+++838F 0143+++838F CD 5E 85 CALL INITPT3 0144+++8392 21 18 1F LD HL,(e_-SamCnv-2)*256+#18 0145+++8395 22 31 89 LD (SamCnv),HL 0146+++8398 3E BA LD A,#BA 0147+++839A 32 FC 88 LD (OrnCP),A 0148+++839D 32 28 89 LD (SamCP),A 0149+++83A0 3E 7B LD A,#7B 0150+++83A2 32 FF 88 LD (OrnLD),A 0151+++83A5 32 2B 89 LD (SamLD),A 0152+++83A8 3E 87 LD A,#87 0153+++83AA 32 22 89 LD (SamClc2),A 0154+++83AD E1 POP HL 0155+++83AE ;Use version and ton table of 1st module 0156+++83AE DD 7E A9 LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++83B1 D6 30 SUB #30 0158+++83B3 38 04 JR C,L20 0159+++83B5 FE 0A CP 10 0160+++83B7 38 02 JR C,L21 0161+++83B9 3E 06 L20 LD A,6 0162+++83BB 32 CF 87 L21 LD (Version),A 0163+++83BE F5 PUSH AF ;VolTable version 0164+++83BF FE 04 CP 4 0165+++83C1 DD 7E FF LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++83C4 17 RLA 0167+++83C5 E6 07 AND 7 0168+++83C7 F5 PUSH AF ;NoteTable number 0169+++83C8 0170+++83C8 FD 21 58 8D LD IY,VARS2+100 0171+++83CC 3A 59 83 LD A,(SETUP) 0172+++83CF E6 30 AND SETUP.TS02|SETUP.TSPT3 0173+++83D1 28 37 JR Z,NOTS 0174+++83D3 FE 10 CP SETUP.TS02 0175+++83D5 28 27 JR Z,TwoPT3s 0176+++83D7 3A CF 87 LD A,(Version) 0177+++83DA FE 07 CP 7 0178+++83DC 38 2C JR C,NOTS 0179+++83DE DD 7E FE LD A,(IX+98-100) ;ALCO TS MARKER 0180+++83E1 FE 20 CP #20 0181+++83E3 28 25 JR Z,NOTS 0182+++83E5 21 6D 8C LD HL,VARS1 0183+++83E8 11 F4 8C LD DE,VARS2 0184+++83EB 01 87 00 LD BC,VRS 0185+++83EE ED B0 LDIR 0186+++83F0 FD CB 9E CE SET 1,(IY-100+VRS.ModNum) 0187+++83F4 4F LD C,A 0188+++83F5 87 ADD A,A 0189+++83F6 81 ADD A,C 0190+++83F7 D6 02 SUB 2 0191+++83F9 32 93 8A LD (TSSub),A 0192+++83FC 18 03 JR AlCoTS_ 0193+++83FE CD 5E 85 TwoPT3s CALL INITPT3 0194+++8401 3E 01 AlCoTS_ LD A,1 0195+++8403 32 6C 8C LD (is_ts),A 0196+++8406 FD CB 9E C6 SET 0,(IY-100+VRS.ModNum) 0197+++840A 0198+++840A 01 1B 87 NOTS LD BC,PT3PD 0199+++840D 21 00 00 LD HL,0 0200+++8410 11 34 8C LD DE,PT3EMPTYORN 0201+++8413 18 48 JR INITCOMMON 0202+++8415 0203+++8415 CD 96 85 I_PT2 CALL INITPT2 0204+++8418 21 CB 51 LD HL,#51CB 0205+++841B 22 31 89 LD (SamCnv),HL 0206+++841E 3E BB LD A,#BB 0207+++8420 32 FC 88 LD (OrnCP),A 0208+++8423 32 28 89 LD (SamCP),A 0209+++8426 3E 7A LD A,#7A 0210+++8428 32 FF 88 LD (OrnLD),A 0211+++842B 32 2B 89 LD (SamLD),A 0212+++842E 3E 80 LD A,#80 0213+++8430 32 22 89 LD (SamClc2),A 0214+++8433 E1 POP HL 0215+++8434 3E 05 LD A,5 0216+++8436 32 CF 87 LD (Version),A 0217+++8439 F5 PUSH AF 0218+++843A 3E 02 LD A,2 0219+++843C F5 PUSH AF 0220+++843D 0221+++843D 3A 59 83 LD A,(SETUP) 0222+++8440 E6 30 AND SETUP.TS02|SETUP.TSPT3 0223+++8442 28 10 JR Z,NOTS2 0224+++8444 0225+++8444 FD 21 58 8D LD IY,VARS2+100 0226+++8448 3E 01 LD A,1 0227+++844A 32 6C 8C LD (is_ts),A 0228+++844D FD CB 9E C6 SET 0,(IY-100+VRS.ModNum) 0229+++8451 CD 96 85 CALL INITPT2 0230+++8454 0231+++8454 01 55 86 NOTS2 LD BC,PT2PD 0232+++8457 21 87 86 LD HL,#8687 0233+++845A 11 8A 8D LD DE,PT2EMPTYORN 0234+++845D 0235+++845D INITCOMMON 0236+++845D 0237+++845D IF Basic 0238+++845D~ LD IY,#5C3A 0239+++845D ENDIF 0240+++845D 0241+++845D ED 43 06 86 LD (PTDEC),BC 0242+++8461 22 95 8A LD (PsCalc),HL 0243+++8464 D5 PUSH DE 0244+++8465 0245+++8465 ;note table data depacker 0246+++8465 ;(c) Ivan Roshin 0247+++8465 11 37 8C LD DE,T_PACK 0248+++8468 01 DC 8D LD BC,T1_+(2*49)-1 0249+++846B 1A TP_0 LD A,(DE) 0250+++846C 13 INC DE 0251+++846D FE 1E CP 15*2 0252+++846F 30 06 JR NC,TP_1 0253+++8471 67 LD H,A 0254+++8472 1A LD A,(DE) 0255+++8473 6F LD L,A 0256+++8474 13 INC DE 0257+++8475 18 07 JR TP_2 0258+++8477 D5 TP_1 PUSH DE 0259+++8478 16 00 LD D,0 0260+++847A 5F LD E,A 0261+++847B 19 ADD HL,DE 0262+++847C 19 ADD HL,DE 0263+++847D D1 POP DE 0264+++847E 7C TP_2 LD A,H 0265+++847F 02 LD (BC),A 0266+++8480 0B DEC BC 0267+++8481 7D LD A,L 0268+++8482 02 LD (BC),A 0269+++8483 0B DEC BC 0270+++8484 D6 F0 SUB (#F8*2)&255 0271+++8486 20 E3 JR NZ,TP_0 0272+++8488 0273+++8488 3C INC A 0274+++8489 32 DA 8C LD (VARS1+VRS.DelyCnt),A 0275+++848C 32 61 8D LD (VARS2+VRS.DelyCnt),A 0276+++848F 21 01 F0 LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8492 22 8B 8C LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8495 22 A8 8C LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8498 22 C5 8C LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++849B 22 12 8D LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++849E 22 2F 8D LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++84A1 22 4C 8D LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++84A4 E1 POP HL 0284+++84A5 22 7D 8C LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++84A8 22 9A 8C LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++84AB 22 B7 8C LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++84AE 22 04 8D LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++84B1 22 21 8D LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++84B4 22 3E 8D LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++84B7 0291+++84B7 F1 POP AF 0292+++84B8 0293+++84B8 ;NoteTableCreator (c) Ivan Roshin 0294+++84B8 ;A - NoteTableNumber*2+VersionForNoteTable 0295+++84B8 ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++84B8 0297+++84B8 21 E4 8B LD HL,NT_DATA 0298+++84BB 16 00 LD D,0 0299+++84BD 87 ADD A,A 0300+++84BE 5F LD E,A 0301+++84BF 19 ADD HL,DE 0302+++84C0 5E LD E,(HL) 0303+++84C1 23 INC HL 0304+++84C2 CB 3B SRL E 0305+++84C4 9F SBC A,A 0306+++84C5 E6 A7 AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++84C7 32 EF 84 LD (L3),A 0308+++84CA EB EX DE,HL 0309+++84CB 01 7B 8D LD BC,T1_ 0310+++84CE 09 ADD HL,BC 0311+++84CF 0312+++84CF 1A LD A,(DE) 0313+++84D0 C6 F4 ADD A,T_&255 0314+++84D2 4F LD C,A 0315+++84D3 CE 8B ADC A,T_/256 0316+++84D5 91 SUB C 0317+++84D6 47 LD B,A 0318+++84D7 C5 PUSH BC 0319+++84D8 11 6B 8E LD DE,NT_ 0320+++84DB D5 PUSH DE 0321+++84DC 0322+++84DC 06 0C LD B,12 0323+++84DE C5 L1 PUSH BC 0324+++84DF 4E LD C,(HL) 0325+++84E0 23 INC HL 0326+++84E1 E5 PUSH HL 0327+++84E2 46 LD B,(HL) 0328+++84E3 0329+++84E3 D5 PUSH DE 0330+++84E4 EB EX DE,HL 0331+++84E5 11 17 00 LD DE,23 0332+++84E8 DD 26 08 LD IXH,8 0333+++84EB 0334+++84EB CB 38 L2 SRL B 0335+++84ED CB 19 RR C 0336+++84EF 19 L3 DB #19 ;AND A or NOP 0337+++84F0 79 LD A,C 0338+++84F1 8A ADC A,D ;=ADC 0 0339+++84F2 77 LD (HL),A 0340+++84F3 23 INC HL 0341+++84F4 78 LD A,B 0342+++84F5 8A ADC A,D 0343+++84F6 77 LD (HL),A 0344+++84F7 19 ADD HL,DE 0345+++84F8 DD 25 DEC IXH 0346+++84FA 20 EF JR NZ,L2 0347+++84FC 0348+++84FC D1 POP DE 0349+++84FD 13 INC DE 0350+++84FE 13 INC DE 0351+++84FF E1 POP HL 0352+++8500 23 INC HL 0353+++8501 C1 POP BC 0354+++8502 10 DA DJNZ L1 0355+++8504 0356+++8504 E1 POP HL 0357+++8505 D1 POP DE 0358+++8506 0359+++8506 7B LD A,E 0360+++8507 FE 00 CP TCOLD_1&255 0361+++8509 20 05 JR NZ,CORR_1 0362+++850B 3E FD LD A,#FD 0363+++850D 32 99 8E LD (NT_+#2E),A 0364+++8510 0365+++8510 1A CORR_1 LD A,(DE) 0366+++8511 A7 AND A 0367+++8512 28 11 JR Z,TC_EXIT 0368+++8514 1F RRA 0369+++8515 F5 PUSH AF 0370+++8516 87 ADD A,A 0371+++8517 4F LD C,A 0372+++8518 09 ADD HL,BC 0373+++8519 F1 POP AF 0374+++851A 30 02 JR NC,CORR_2 0375+++851C 35 DEC (HL) 0376+++851D 35 DEC (HL) 0377+++851E 34 CORR_2 INC (HL) 0378+++851F A7 AND A 0379+++8520 ED 42 SBC HL,BC 0380+++8522 13 INC DE 0381+++8523 18 EB JR CORR_1 0382+++8525 0383+++8525 TC_EXIT 0384+++8525 0385+++8525 F1 POP AF 0386+++8526 0387+++8526 ;VolTableCreator (c) Ivan Roshin 0388+++8526 ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8526 ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8526 0391+++8526 FE 05 CP 5 0392+++8528 21 11 00 LD HL,#11 0393+++852B 54 LD D,H 0394+++852C 5C LD E,H 0395+++852D 3E 17 LD A,#17 0396+++852F 30 03 JR NC,M1 0397+++8531 2D DEC L 0398+++8532 5D LD E,L 0399+++8533 AF XOR A 0400+++8534 32 45 85 M1 LD (M2),A 0401+++8537 0402+++8537 DD 21 7B 8D LD IX,VT_+16 0403+++853B 0404+++853B 0E 0F LD C,#F 0405+++853D E5 INITV2 PUSH HL 0406+++853E 0407+++853E 19 ADD HL,DE 0408+++853F EB EX DE,HL 0409+++8540 ED 62 SBC HL,HL 0410+++8542 0411+++8542 06 10 LD B,#10 0412+++8544 7D INITV1 LD A,L 0413+++8545 7D M2 DB #7D 0414+++8546 7C LD A,H 0415+++8547 CE 00 ADC A,0 0416+++8549 DD 77 00 LD (IX),A 0417+++854C DD 23 INC IX 0418+++854E 19 ADD HL,DE 0419+++854F 10 F3 DJNZ INITV1 0420+++8551 0421+++8551 E1 POP HL 0422+++8552 7B LD A,E 0423+++8553 FE 77 CP #77 0424+++8555 20 01 JR NZ,M3 0425+++8557 1C INC E 0426+++8558 0D M3 DEC C 0427+++8559 20 E2 JR NZ,INITV2 0428+++855B 0429+++855B C3 9C 8B JP ROUT 0430+++855E 0431+++855E CD D1 85 INITPT3 CALL SETMDAD 0432+++8561 E5 PUSH HL 0433+++8562 11 64 00 LD DE,100 0434+++8565 19 ADD HL,DE 0435+++8566 7E LD A,(HL) 0436+++8567 FD 77 08 LD (IY-100+VRS.Delay),A 0437+++856A E5 PUSH HL 0438+++856B DD E1 POP IX 0439+++856D 19 ADD HL,DE 0440+++856E CD DF 85 CALL SETCPPT 0441+++8571 DD 5E 02 LD E,(IX+102-100) 0442+++8574 23 INC HL 0443+++8575 0444+++8575 IF CurPosCounter 0445+++8575~ LD (IY-100+VRS.PosSub),L 0446+++8575 ENDIF 0447+++8575 0448+++8575 19 ADD HL,DE 0449+++8576 CD E6 85 CALL SETLPPT 0450+++8579 D1 POP DE 0451+++857A DD 6E 03 LD L,(IX+103-100) 0452+++857D DD 66 04 LD H,(IX+104-100) 0453+++8580 19 ADD HL,DE 0454+++8581 CD CA 85 CALL SETPTPT 0455+++8584 21 A9 00 LD HL,169 0456+++8587 19 ADD HL,DE 0457+++8588 CD D8 85 CALL SETORPT 0458+++858B 21 69 00 LD HL,105 0459+++858E 19 ADD HL,DE 0460+++858F 0461+++858F FD 75 FA SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8592 FD 74 FB LD (IY-100+VRS.SamPtrs+1),H 0463+++8595 C9 RET 0464+++8596 0465+++8596 7E INITPT2 LD A,(HL) 0466+++8597 FD 77 08 LD (IY-100+VRS.Delay),A 0467+++859A E5 PUSH HL 0468+++859B E5 PUSH HL 0469+++859C E5 PUSH HL 0470+++859D 23 INC HL 0471+++859E 23 INC HL 0472+++859F 7E LD A,(HL) 0473+++85A0 23 INC HL 0474+++85A1 CD 8F 85 CALL SETSMPT 0475+++85A4 5E LD E,(HL) 0476+++85A5 23 INC HL 0477+++85A6 56 LD D,(HL) 0478+++85A7 E1 POP HL 0479+++85A8 A7 AND A 0480+++85A9 ED 52 SBC HL,DE 0481+++85AB CD D1 85 CALL SETMDAD 0482+++85AE E1 POP HL 0483+++85AF 11 43 00 LD DE,67 0484+++85B2 19 ADD HL,DE 0485+++85B3 CD D8 85 CALL SETORPT 0486+++85B6 1E 20 LD E,32 0487+++85B8 19 ADD HL,DE 0488+++85B9 4E LD C,(HL) 0489+++85BA 23 INC HL 0490+++85BB 46 LD B,(HL) 0491+++85BC 1E 1E LD E,30 0492+++85BE 19 ADD HL,DE 0493+++85BF CD DF 85 CALL SETCPPT 0494+++85C2 5F LD E,A 0495+++85C3 23 INC HL 0496+++85C4 0497+++85C4 IF CurPosCounter 0498+++85C4~ LD (IY-100+VRS.PosSub),L 0499+++85C4 ENDIF 0500+++85C4 0501+++85C4 19 ADD HL,DE 0502+++85C5 CD E6 85 CALL SETLPPT 0503+++85C8 E1 POP HL 0504+++85C9 09 ADD HL,BC 0505+++85CA 0506+++85CA FD 75 FC SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++85CD FD 74 FD LD (IY-100+VRS.PatsPtr+1),H 0508+++85D0 C9 RET 0509+++85D1 0510+++85D1 FD 75 F6 SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++85D4 FD 74 F7 LD (IY-100+VRS.MODADDR+1),H 0512+++85D7 C9 RET 0513+++85D8 0514+++85D8 FD 75 F8 SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++85DB FD 74 F9 LD (IY-100+VRS.OrnPtrs+1),H 0516+++85DE C9 RET 0517+++85DF 0518+++85DF FD 75 04 SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++85E2 FD 74 05 LD (IY-100+VRS.CrPsPtr+1),H 0520+++85E5 C9 RET 0521+++85E6 0522+++85E6 FD 75 06 SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++85E9 FD 74 07 LD (IY-100+VRS.LPosPtr+1),H 0524+++85EC C9 RET 0525+++85ED 0526+++85ED FD 75 13 SETENBS LD (IY-100+VRS.EnvBase),L 0527+++85F0 FD 74 14 LD (IY-100+VRS.EnvBase+1),H 0528+++85F3 C9 RET 0529+++85F4 0530+++85F4 FD 75 0C SETESLD LD (IY-100+VRS.CurESld),L 0531+++85F7 FD 74 0D LD (IY-100+VRS.CurESld+1),H 0532+++85FA C9 RET 0533+++85FB 0534+++85FB FD E5 GETIX PUSH IY 0535+++85FD DD E1 POP IX 0536+++85FF DD 19 ADD IX,DE 0537+++8601 C9 RET 0538+++8602 0539+++8602 CD FB 85 PTDECOD CALL GETIX 0540+++8605 PTDEC EQU $+1 0541+++8605 C3 C3 C3 JP #C3C3 0542+++8608 0543+++8608 ;PT2 pattern decoder 0544+++8608 CD 9E 88 PD2_SAM CALL SETSAM 0545+++860B 18 4A JR PD2_LOOP 0546+++860D 0547+++860D DD 77 08 PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8610 18 45 JR PD2_LOOP 0549+++8612 0550+++8612 DD 36 08 10 PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8616 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8619 0A LD A,(BC) 0553+++861A 03 INC BC 0554+++861B 6F LD L,A 0555+++861C 0A LD A,(BC) 0556+++861D 03 INC BC 0557+++861E 67 LD H,A 0558+++861F CD ED 85 CALL SETENBS 0559+++8622 18 33 JR PD2_LOOP 0560+++8624 0561+++8624 CD 7F 88 PD2_ORN CALL SETORN 0562+++8627 18 2E JR PD2_LOOP 0563+++8629 0564+++8629 3C PD2_SKIP INC A 0565+++862A DD 77 05 LD (IX-12+CHP.NNtSkp),A 0566+++862D 18 28 JR PD2_LOOP 0567+++862F 0568+++862F 0F PD2_VOL RRCA 0569+++8630 0F RRCA 0570+++8631 0F RRCA 0571+++8632 0F RRCA 0572+++8633 DD 77 10 LD (IX-12+CHP.Volume),A 0573+++8636 18 1F JR PD2_LOOP 0574+++8638 0575+++8638 CD 4F 88 PD2_DEL CALL C_DELAY 0576+++863B 18 1A JR PD2_LOOP 0577+++863D 0578+++863D DD CB 09 D6 PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8641 3C INC A 0580+++8642 DD 77 0A LD (IX-12+CHP.TnSlDl),A 0581+++8645 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0582+++8648 0A LD A,(BC) 0583+++8649 03 INC BC 0584+++864A DD 77 0B LD (IX-12+CHP.TSlStp),A 0585+++864D 87 ADD A,A 0586+++864E 9F SBC A,A 0587+++864F DD 77 0C LD (IX-12+CHP.TSlStp+1),A 0588+++8652 37 SCF 0589+++8653 18 01 JR PD2_LP2 0590+++8655 0591+++8655 A7 PT2PD AND A 0592+++8656 0593+++8656 08 PD2_LP2 EX AF,AF' 0594+++8657 0595+++8657 0A PD2_LOOP LD A,(BC) 0596+++8658 03 INC BC 0597+++8659 C6 20 ADD A,#20 0598+++865B 28 3F JR Z,PD2_REL 0599+++865D 38 A9 JR C,PD2_SAM 0600+++865F C6 60 ADD A,96 0601+++8661 38 3E JR C,PD2_NOTE 0602+++8663 3C INC A 0603+++8664 28 A7 JR Z,PD2_EOff 0604+++8666 C6 0F ADD A,15 0605+++8668 CA 7E 87 JP Z,PD_FIN 0606+++866B 38 A5 JR C,PD2_ENV 0607+++866D C6 10 ADD A,#10 0608+++866F 38 B3 JR C,PD2_ORN 0609+++8671 C6 40 ADD A,#40 0610+++8673 38 B4 JR C,PD2_SKIP 0611+++8675 C6 10 ADD A,#10 0612+++8677 38 B6 JR C,PD2_VOL 0613+++8679 3C INC A 0614+++867A 28 BC JR Z,PD2_DEL 0615+++867C 3C INC A 0616+++867D 28 BE JR Z,PD2_GLIS 0617+++867F 3C INC A 0618+++8680 28 0A JR Z,PD2_PORT 0619+++8682 3C INC A 0620+++8683 28 12 JR Z,PD2_STOP 0621+++8685 0A LD A,(BC) 0622+++8686 03 INC BC 0623+++8687 DD 77 F7 LD (IX-12+CHP.CrNsSl),A 0624+++868A 18 CB JR PD2_LOOP 0625+++868C 0626+++868C DD CB 09 96 PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8690 0A LD A,(BC) 0628+++8691 03 INC BC 0629+++8692 03 INC BC ;ignoring precalc delta to right sound 0630+++8693 03 INC BC 0631+++8694 37 SCF 0632+++8695 18 BF JR PD2_LP2 0633+++8697 0634+++8697 DD 77 F9 PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++869A 18 BB JR PD2_LOOP 0636+++869C 0637+++869C DD 77 09 PD2_REL LD (IX-12+CHP.Flags),A 0638+++869F 18 2C JR PD2_EXIT 0639+++86A1 0640+++86A1 6F PD2_NOTE LD L,A 0641+++86A2 DD 7E 06 LD A,(IX-12+CHP.Note) 0642+++86A5 32 B8 87 LD (PrNote+1),A 0643+++86A8 DD 75 06 LD (IX-12+CHP.Note),L 0644+++86AB AF XOR A 0645+++86AC DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0646+++86AF DD CB 09 C6 SET 0,(IX-12+CHP.Flags) 0647+++86B3 08 EX AF,AF' 0648+++86B4 30 16 JR NC,NOGLIS2 0649+++86B6 DD CB 09 56 BIT 2,(IX-12+CHP.Flags) 0650+++86BA 20 0C JR NZ,NOPORT2 0651+++86BC 32 DE 87 LD (LoStep),A 0652+++86BF 87 ADD A,A 0653+++86C0 9F SBC A,A 0654+++86C1 08 EX AF,AF' 0655+++86C2 67 LD H,A 0656+++86C3 6F LD L,A 0657+++86C4 3C INC A 0658+++86C5 CD 99 87 CALL SETPORT 0659+++86C8 DD 36 F9 01 NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++86CC AF NOGLIS2 XOR A 0661+++86CD 0662+++86CD 0663+++86CD DD 77 F5 PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++86D0 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0665+++86D3 DD 77 FA LD (IX-12+CHP.CrTnSl),A 0666+++86D6 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A 0667+++86D9 C3 7E 87 JP PD_FIN 0668+++86DC 0669+++86DC ;PT3 pattern decoder 0670+++86DC DD 36 08 00 PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++86E0 CD 7F 88 CALL SETORN 0672+++86E3 0A PD_SAM_ LD A,(BC) 0673+++86E4 03 INC BC 0674+++86E5 0F RRCA 0675+++86E6 0676+++86E6 CD 9E 88 PD_SAM CALL SETSAM 0677+++86E9 18 3F JR PD_LOOP 0678+++86EB 0679+++86EB 0F PD_VOL RRCA 0680+++86EC 0F RRCA 0681+++86ED 0F RRCA 0682+++86EE 0F RRCA 0683+++86EF DD 77 10 LD (IX-12+CHP.Volume),A 0684+++86F2 18 39 JR PD_LP2 0685+++86F4 0686+++86F4 DD 77 08 PD_EOff LD (IX-12+CHP.Env_En),A 0687+++86F7 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0688+++86FA 18 31 JR PD_LP2 0689+++86FC 0690+++86FC 3D PD_SorE DEC A 0691+++86FD 20 07 JR NZ,PD_ENV 0692+++86FF 0A LD A,(BC) 0693+++8700 03 INC BC 0694+++8701 DD 77 05 LD (IX-12+CHP.NNtSkp),A 0695+++8704 18 27 JR PD_LP2 0696+++8706 0697+++8706 CD 64 88 PD_ENV CALL SETENV 0698+++8709 18 22 JR PD_LP2 0699+++870B 0700+++870B CD 7F 88 PD_ORN CALL SETORN 0701+++870E 18 1A JR PD_LOOP 0702+++8710 0703+++8710 DD 77 08 PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8713 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0705+++8716 C4 64 88 CALL NZ,SETENV 0706+++8719 18 C8 JR PD_SAM_ 0707+++871B 0708+++871B DD 7E 06 PT3PD LD A,(IX-12+CHP.Note) 0709+++871E 32 B8 87 LD (PrNote+1),A 0710+++8721 DD 6E FA LD L,(IX-12+CHP.CrTnSl) 0711+++8724 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1) 0712+++8727 22 D5 87 LD (PrSlide+1),HL 0713+++872A 0714+++872A 11 10 20 PD_LOOP LD DE,#2010 0715+++872D 0A PD_LP2 LD A,(BC) 0716+++872E 03 INC BC 0717+++872F 83 ADD A,E 0718+++8730 38 AA JR C,PD_OrSm 0719+++8732 82 ADD A,D 0720+++8733 28 49 JR Z,PD_FIN 0721+++8735 38 AF JR C,PD_SAM 0722+++8737 83 ADD A,E 0723+++8738 28 25 JR Z,PD_REL 0724+++873A 38 AF JR C,PD_VOL 0725+++873C 83 ADD A,E 0726+++873D 28 B5 JR Z,PD_EOff 0727+++873F 38 BB JR C,PD_SorE 0728+++8741 C6 60 ADD A,96 0729+++8743 38 20 JR C,PD_NOTE 0730+++8745 83 ADD A,E 0731+++8746 38 C3 JR C,PD_ORN 0732+++8748 82 ADD A,D 0733+++8749 38 0F JR C,PD_NOIS 0734+++874B 83 ADD A,E 0735+++874C 38 C2 JR C,PD_ESAM 0736+++874E 87 ADD A,A 0737+++874F 5F LD E,A 0738+++8750 21 DA 67 LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8753 19 ADD HL,DE 0740+++8754 5E LD E,(HL) 0741+++8755 23 INC HL 0742+++8756 56 LD D,(HL) 0743+++8757 D5 PUSH DE 0744+++8758 18 D0 JR PD_LOOP 0745+++875A 0746+++875A FD 77 10 PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++875D 18 CE JR PD_LP2 0748+++875F 0749+++875F DD CB 09 86 PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8763 18 08 JR PD_RES 0751+++8765 0752+++8765 DD 77 06 PD_NOTE LD (IX-12+CHP.Note),A 0753+++8768 DD CB 09 C6 SET 0,(IX-12+CHP.Flags) 0754+++876C AF XOR A 0755+++876D 0756+++876D ED 73 7C 87 PD_RES LD (PDSP_+1),SP 0757+++8771 DD F9 LD SP,IX 0758+++8773 67 LD H,A 0759+++8774 6F LD L,A 0760+++8775 E5 PUSH HL 0761+++8776 E5 PUSH HL 0762+++8777 E5 PUSH HL 0763+++8778 E5 PUSH HL 0764+++8779 E5 PUSH HL 0765+++877A E5 PUSH HL 0766+++877B 31 31 31 PDSP_ LD SP,#3131 0767+++877E 0768+++877E DD 7E 05 PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8781 DD 77 0F LD (IX-12+CHP.NtSkCn),A 0770+++8784 C9 RET 0771+++8785 0772+++8785 0A C_PORTM LD A,(BC) 0773+++8786 03 INC BC 0774+++8787 ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8787 ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8787 03 INC BC 0777+++8788 03 INC BC 0778+++8789 08 EX AF,AF' 0779+++878A 0A LD A,(BC) ;SIGNED TONE STEP 0780+++878B 03 INC BC 0781+++878C 32 DE 87 LD (LoStep),A 0782+++878F 0A LD A,(BC) 0783+++8790 03 INC BC 0784+++8791 A7 AND A 0785+++8792 08 EX AF,AF' 0786+++8793 DD 6E FA LD L,(IX-12+CHP.CrTnSl) 0787+++8796 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1) 0788+++8799 0789+++8799 ;Set portamento variables 0790+++8799 ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8799 0792+++8799 DD CB 09 96 SETPORT RES 2,(IX-12+CHP.Flags) 0793+++879D DD 77 0A LD (IX-12+CHP.TnSlDl),A 0794+++87A0 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0795+++87A3 E5 PUSH HL 0796+++87A4 11 6B 8E LD DE,NT_ 0797+++87A7 DD 7E 06 LD A,(IX-12+CHP.Note) 0798+++87AA DD 77 07 LD (IX-12+CHP.SlToNt),A 0799+++87AD 87 ADD A,A 0800+++87AE 6F LD L,A 0801+++87AF 26 00 LD H,0 0802+++87B1 19 ADD HL,DE 0803+++87B2 7E LD A,(HL) 0804+++87B3 23 INC HL 0805+++87B4 66 LD H,(HL) 0806+++87B5 6F LD L,A 0807+++87B6 E5 PUSH HL 0808+++87B7 3E 3E PrNote LD A,#3E 0809+++87B9 DD 77 06 LD (IX-12+CHP.Note),A 0810+++87BC 87 ADD A,A 0811+++87BD 6F LD L,A 0812+++87BE 26 00 LD H,0 0813+++87C0 19 ADD HL,DE 0814+++87C1 5E LD E,(HL) 0815+++87C2 23 INC HL 0816+++87C3 56 LD D,(HL) 0817+++87C4 E1 POP HL 0818+++87C5 ED 52 SBC HL,DE 0819+++87C7 DD 75 0D LD (IX-12+CHP.TnDelt),L 0820+++87CA DD 74 0E LD (IX-12+CHP.TnDelt+1),H 0821+++87CD D1 POP DE 0822+++87CE Version EQU $+1 0823+++87CE 3E 3E LD A,#3E 0824+++87D0 FE 06 CP 6 0825+++87D2 38 09 JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++87D4 11 11 11 PrSlide LD DE,#1111 0827+++87D7 DD 73 FA LD (IX-12+CHP.CrTnSl),E 0828+++87DA DD 72 FB LD (IX-12+CHP.CrTnSl+1),D 0829+++87DD LoStep EQU $+1 0830+++87DD 3E 3E OLDPRTM LD A,#3E 0831+++87DF 08 EX AF,AF' 0832+++87E0 28 01 JR Z,NOSIG 0833+++87E2 EB EX DE,HL 0834+++87E3 ED 52 NOSIG SBC HL,DE 0835+++87E5 F2 ED 87 JP P,SET_STP 0836+++87E8 2F CPL 0837+++87E9 08 EX AF,AF' 0838+++87EA ED 44 NEG 0839+++87EC 08 EX AF,AF' 0840+++87ED DD 77 0C SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++87F0 08 EX AF,AF' 0842+++87F1 DD 77 0B LD (IX-12+CHP.TSlStp),A 0843+++87F4 DD 36 FE 00 LD (IX-12+CHP.COnOff),0 0844+++87F8 C9 RET 0845+++87F9 0846+++87F9 DD CB 09 D6 C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++87FD 0A LD A,(BC) 0848+++87FE 03 INC BC 0849+++87FF DD 77 0A LD (IX-12+CHP.TnSlDl),A 0850+++8802 A7 AND A 0851+++8803 20 07 JR NZ,GL36 0852+++8805 3A CF 87 LD A,(Version) ;AlCo PT3.7+ 0853+++8808 FE 07 CP 7 0854+++880A 9F SBC A,A 0855+++880B 3C INC A 0856+++880C DD 77 F9 GL36 LD (IX-12+CHP.TSlCnt),A 0857+++880F 0A LD A,(BC) 0858+++8810 03 INC BC 0859+++8811 08 EX AF,AF' 0860+++8812 0A LD A,(BC) 0861+++8813 03 INC BC 0862+++8814 18 D7 JR SET_STP 0863+++8816 0864+++8816 0A C_SMPOS LD A,(BC) 0865+++8817 03 INC BC 0866+++8818 DD 77 F5 LD (IX-12+CHP.PsInSm),A 0867+++881B C9 RET 0868+++881C 0869+++881C 0A C_ORPOS LD A,(BC) 0870+++881D 03 INC BC 0871+++881E DD 77 F4 LD (IX-12+CHP.PsInOr),A 0872+++8821 C9 RET 0873+++8822 0874+++8822 0A C_VIBRT LD A,(BC) 0875+++8823 03 INC BC 0876+++8824 DD 77 FF LD (IX-12+CHP.OnOffD),A 0877+++8827 DD 77 FE LD (IX-12+CHP.COnOff),A 0878+++882A 0A LD A,(BC) 0879+++882B 03 INC BC 0880+++882C DD 77 00 LD (IX-12+CHP.OffOnD),A 0881+++882F AF XOR A 0882+++8830 DD 77 F9 LD (IX-12+CHP.TSlCnt),A 0883+++8833 DD 77 FA LD (IX-12+CHP.CrTnSl),A 0884+++8836 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A 0885+++8839 C9 RET 0886+++883A 0887+++883A 0A C_ENGLS LD A,(BC) 0888+++883B 03 INC BC 0889+++883C FD 77 0E LD (IY-100+VRS.Env_Del),A 0890+++883F FD 77 0F LD (IY-100+VRS.CurEDel),A 0891+++8842 0A LD A,(BC) 0892+++8843 03 INC BC 0893+++8844 6F LD L,A 0894+++8845 0A LD A,(BC) 0895+++8846 03 INC BC 0896+++8847 67 LD H,A 0897+++8848 FD 75 0A LD (IY-100+VRS.ESldAdd),L 0898+++884B FD 74 0B LD (IY-100+VRS.ESldAdd+1),H 0899+++884E C9 RET 0900+++884F 0901+++884F 0A C_DELAY LD A,(BC) 0902+++8850 03 INC BC 0903+++8851 FD 77 08 LD (IY-100+VRS.Delay),A 0904+++8854 21 F6 8C LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8857 CB 4E BIT 1,(HL) 0906+++8859 C8 RET Z 0907+++885A 32 D9 8C LD (VARS1+VRS.Delay),A 0908+++885D 32 DA 8C LD (VARS1+VRS.DelyCnt),A 0909+++8860 32 60 8D LD (VARS2+VRS.Delay),A 0910+++8863 C9 RET 0911+++8864 0912+++8864 DD 73 08 SETENV LD (IX-12+CHP.Env_En),E 0913+++8867 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++886A 0A LD A,(BC) 0915+++886B 03 INC BC 0916+++886C 67 LD H,A 0917+++886D 0A LD A,(BC) 0918+++886E 03 INC BC 0919+++886F 6F LD L,A 0920+++8870 CD ED 85 CALL SETENBS 0921+++8873 AF XOR A 0922+++8874 DD 77 F4 LD (IX-12+CHP.PsInOr),A 0923+++8877 FD 77 0F LD (IY-100+VRS.CurEDel),A 0924+++887A 67 LD H,A 0925+++887B 6F LD L,A 0926+++887C C3 F4 85 JP SETESLD 0927+++887F 0928+++887F 87 SETORN ADD A,A 0929+++8880 5F LD E,A 0930+++8881 16 00 LD D,0 0931+++8883 DD 72 F4 LD (IX-12+CHP.PsInOr),D 0932+++8886 FD 6E F8 LD L,(IY-100+VRS.OrnPtrs) 0933+++8889 FD 66 F9 LD H,(IY-100+VRS.OrnPtrs+1) 0934+++888C 19 ADD HL,DE 0935+++888D 5E LD E,(HL) 0936+++888E 23 INC HL 0937+++888F 56 LD D,(HL) 0938+++8890 FD 6E F6 LD L,(IY-100+VRS.MODADDR) 0939+++8893 FD 66 F7 LD H,(IY-100+VRS.MODADDR+1) 0940+++8896 19 ADD HL,DE 0941+++8897 DD 75 01 LD (IX-12+CHP.OrnPtr),L 0942+++889A DD 74 02 LD (IX-12+CHP.OrnPtr+1),H 0943+++889D C9 C_NOP RET 0944+++889E 0945+++889E 87 SETSAM ADD A,A 0946+++889F 5F LD E,A 0947+++88A0 16 00 LD D,0 0948+++88A2 FD 6E FA LD L,(IY-100+VRS.SamPtrs); 0949+++88A5 FD 66 FB LD H,(IY-100+VRS.SamPtrs+1); 0950+++88A8 19 ADD HL,DE 0951+++88A9 5E LD E,(HL) 0952+++88AA 23 INC HL 0953+++88AB 56 LD D,(HL) 0954+++88AC FD 6E F6 LD L,(IY-100+VRS.MODADDR) 0955+++88AF FD 66 F7 LD H,(IY-100+VRS.MODADDR+1) 0956+++88B2 19 ADD HL,DE 0957+++88B3 DD 75 03 LD (IX-12+CHP.SamPtr),L 0958+++88B6 DD 74 04 LD (IX-12+CHP.SamPtr+1),H 0959+++88B9 C9 RET 0960+++88BA 0961+++88BA ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++88BA 9D 88 SPCCOMS DW C_NOP 0963+++88BC F9 87 DW C_GLISS 0964+++88BE 85 87 DW C_PORTM 0965+++88C0 16 88 DW C_SMPOS 0966+++88C2 1C 88 DW C_ORPOS 0967+++88C4 22 88 DW C_VIBRT 0968+++88C6 9D 88 DW C_NOP 0969+++88C8 9D 88 DW C_NOP 0970+++88CA 3A 88 DW C_ENGLS 0971+++88CC 4F 88 DW C_DELAY 0972+++88CE 9D 88 DW C_NOP 0973+++88D0 9D 88 DW C_NOP 0974+++88D2 9D 88 DW C_NOP 0975+++88D4 9D 88 DW C_NOP 0976+++88D6 9D 88 DW C_NOP 0977+++88D8 9D 88 DW C_NOP 0978+++88DA 0979+++88DA CD FB 85 CHREGS CALL GETIX 0980+++88DD AF XOR A 0981+++88DE 32 17 8B LD (Ampl),A 0982+++88E1 DD CB 15 46 BIT 0,(IX+CHP.Flags) 0983+++88E5 E5 PUSH HL 0984+++88E6 CA 2D 8A JP Z,CH_EXIT 0985+++88E9 ED 73 77 89 LD (CSP_+1),SP 0986+++88ED DD 6E 0D LD L,(IX+CHP.OrnPtr) 0987+++88F0 DD 66 0E LD H,(IX+CHP.OrnPtr+1) 0988+++88F3 F9 LD SP,HL 0989+++88F4 D1 POP DE 0990+++88F5 67 LD H,A 0991+++88F6 DD 7E 00 LD A,(IX+CHP.PsInOr) 0992+++88F9 6F LD L,A 0993+++88FA 39 ADD HL,SP 0994+++88FB 3C INC A 0995+++88FC ;PT2 PT3 0996+++88FC 3C OrnCP INC A ;CP E CP D 0997+++88FD 38 01 JR C,CH_ORPS 0998+++88FF 01 OrnLD DB 1 ;LD A,D LD A,E 0999+++8900 DD 77 00 CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8903 DD 7E 12 LD A,(IX+CHP.Note) 1001+++8906 86 ADD A,(HL) 1002+++8907 F2 0B 89 JP P,CH_NTP 1003+++890A AF XOR A 1004+++890B FE 60 CH_NTP CP 96 1005+++890D 38 02 JR C,CH_NOK 1006+++890F 3E 5F LD A,95 1007+++8911 87 CH_NOK ADD A,A 1008+++8912 08 EX AF,AF' 1009+++8913 DD 6E 0F LD L,(IX+CHP.SamPtr) 1010+++8916 DD 66 10 LD H,(IX+CHP.SamPtr+1) 1011+++8919 F9 LD SP,HL 1012+++891A D1 POP DE 1013+++891B 26 00 LD H,0 1014+++891D DD 7E 01 LD A,(IX+CHP.PsInSm) 1015+++8920 47 LD B,A 1016+++8921 87 ADD A,A 1017+++8922 87 SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8923 6F LD L,A 1019+++8924 39 ADD HL,SP 1020+++8925 F9 LD SP,HL 1021+++8926 78 LD A,B 1022+++8927 3C INC A 1023+++8928 ;PT2 PT3 1024+++8928 3C SamCP INC A ;CP E CP D 1025+++8929 38 01 JR C,CH_SMPS 1026+++892B 01 SamLD DB 1 ;LD A,D LD A,E 1027+++892C DD 77 01 CH_SMPS LD (IX+CHP.PsInSm),A 1028+++892F C1 POP BC 1029+++8930 E1 POP HL 1030+++8931 1031+++8931 ;Convert PT2 sample to PT3 1032+++8931 ;PT2 PT3 1033+++8931 E1 SamCnv POP HL ;BIT 2,C JR e_ 1034+++8932 E1 POP HL 1035+++8933 60 LD H,B 1036+++8934 20 06 JR NZ,$+8 1037+++8936 EB EX DE,HL 1038+++8937 A7 AND A 1039+++8938 ED 62 SBC HL,HL 1040+++893A ED 52 SBC HL,DE 1041+++893C 51 LD D,C 1042+++893D CB 19 RR C 1043+++893F 9F SBC A,A 1044+++8940 2F CPL 1045+++8941 E6 3E AND #3E 1046+++8943 CB 19 RR C 1047+++8945 CB 18 RR B 1048+++8947 A1 AND C 1049+++8948 4F LD C,A 1050+++8949 78 LD A,B 1051+++894A 1F RRA 1052+++894B 1F RRA 1053+++894C CB 1A RR D 1054+++894E 1F RRA 1055+++894F E6 9F AND #9F 1056+++8951 47 LD B,A 1057+++8952 1058+++8952 DD 5E 08 e_ LD E,(IX+CHP.TnAcc) 1059+++8955 DD 56 09 LD D,(IX+CHP.TnAcc+1) 1060+++8958 19 ADD HL,DE 1061+++8959 CB 70 BIT 6,B 1062+++895B 28 06 JR Z,CH_NOAC 1063+++895D DD 75 08 LD (IX+CHP.TnAcc),L 1064+++8960 DD 74 09 LD (IX+CHP.TnAcc+1),H 1065+++8963 EB CH_NOAC EX DE,HL 1066+++8964 08 EX AF,AF' 1067+++8965 C6 6B ADD A,NT_&255 1068+++8967 6F LD L,A 1069+++8968 CE 8E ADC A,NT_/256 1070+++896A 95 SUB L 1071+++896B 67 LD H,A 1072+++896C F9 LD SP,HL 1073+++896D E1 POP HL 1074+++896E 19 ADD HL,DE 1075+++896F DD 5E 06 LD E,(IX+CHP.CrTnSl) 1076+++8972 DD 56 07 LD D,(IX+CHP.CrTnSl+1) 1077+++8975 19 ADD HL,DE 1078+++8976 31 31 31 CSP_ LD SP,#3131 1079+++8979 E3 EX (SP),HL 1080+++897A AF XOR A 1081+++897B DD B6 05 OR (IX+CHP.TSlCnt) 1082+++897E 28 3E JR Z,CH_AMP 1083+++8980 DD 35 05 DEC (IX+CHP.TSlCnt) 1084+++8983 20 39 JR NZ,CH_AMP 1085+++8985 DD 7E 16 LD A,(IX+CHP.TnSlDl) 1086+++8988 DD 77 05 LD (IX+CHP.TSlCnt),A 1087+++898B DD 6E 17 LD L,(IX+CHP.TSlStp) 1088+++898E DD 66 18 LD H,(IX+CHP.TSlStp+1) 1089+++8991 7C LD A,H 1090+++8992 19 ADD HL,DE 1091+++8993 DD 75 06 LD (IX+CHP.CrTnSl),L 1092+++8996 DD 74 07 LD (IX+CHP.CrTnSl+1),H 1093+++8999 DD CB 15 56 BIT 2,(IX+CHP.Flags) 1094+++899D 20 1F JR NZ,CH_AMP 1095+++899F DD 5E 19 LD E,(IX+CHP.TnDelt) 1096+++89A2 DD 56 1A LD D,(IX+CHP.TnDelt+1) 1097+++89A5 A7 AND A 1098+++89A6 28 01 JR Z,CH_STPP 1099+++89A8 EB EX DE,HL 1100+++89A9 ED 52 CH_STPP SBC HL,DE 1101+++89AB FA BE 89 JP M,CH_AMP 1102+++89AE DD 7E 13 LD A,(IX+CHP.SlToNt) 1103+++89B1 DD 77 12 LD (IX+CHP.Note),A 1104+++89B4 AF XOR A 1105+++89B5 DD 77 05 LD (IX+CHP.TSlCnt),A 1106+++89B8 DD 77 06 LD (IX+CHP.CrTnSl),A 1107+++89BB DD 77 07 LD (IX+CHP.CrTnSl+1),A 1108+++89BE DD 7E 02 CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++89C1 CB 79 BIT 7,C 1110+++89C3 28 13 JR Z,CH_NOAM 1111+++89C5 CB 71 BIT 6,C 1112+++89C7 28 07 JR Z,CH_AMIN 1113+++89C9 FE 0F CP 15 1114+++89CB 28 0B JR Z,CH_NOAM 1115+++89CD 3C INC A 1116+++89CE 18 05 JR CH_SVAM 1117+++89D0 FE F1 CH_AMIN CP -15 1118+++89D2 28 04 JR Z,CH_NOAM 1119+++89D4 3D DEC A 1120+++89D5 DD 77 02 CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++89D8 6F CH_NOAM LD L,A 1122+++89D9 78 LD A,B 1123+++89DA E6 0F AND 15 1124+++89DC 85 ADD A,L 1125+++89DD F2 E1 89 JP P,CH_APOS 1126+++89E0 AF XOR A 1127+++89E1 FE 10 CH_APOS CP 16 1128+++89E3 38 02 JR C,CH_VOL 1129+++89E5 3E 0F LD A,15 1130+++89E7 DD B6 1C CH_VOL OR (IX+CHP.Volume) 1131+++89EA C6 6B ADD A,VT_&255 1132+++89EC 6F LD L,A 1133+++89ED CE 8D ADC A,VT_/256 1134+++89EF 95 SUB L 1135+++89F0 67 LD H,A 1136+++89F1 7E LD A,(HL) 1137+++89F2 CB 41 CH_ENV BIT 0,C 1138+++89F4 20 03 JR NZ,CH_NOEN 1139+++89F6 DD B6 14 OR (IX+CHP.Env_En) 1140+++89F9 32 17 8B CH_NOEN LD (Ampl),A 1141+++89FC CB 78 BIT 7,B 1142+++89FE 79 LD A,C 1143+++89FF 28 1A JR Z,NO_ENSL 1144+++8A01 17 RLA 1145+++8A02 17 RLA 1146+++8A03 CB 2F SRA A 1147+++8A05 CB 2F SRA A 1148+++8A07 CB 2F SRA A 1149+++8A09 DD 86 04 ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8A0C CB 68 BIT 5,B 1151+++8A0E 28 03 JR Z,NO_ENAC 1152+++8A10 DD 77 04 LD (IX+CHP.CrEnSl),A 1153+++8A13 FD 86 12 NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8A16 FD 77 12 LD (IY-100+VRS.AddToEn),A 1155+++8A19 18 0E JR CH_MIX 1156+++8A1B 1F NO_ENSL RRA 1157+++8A1C DD 86 03 ADD A,(IX+CHP.CrNsSl) 1158+++8A1F FD 77 11 LD (IY-100+VRS.AddToNs),A 1159+++8A22 CB 68 BIT 5,B 1160+++8A24 28 03 JR Z,CH_MIX 1161+++8A26 DD 77 03 LD (IX+CHP.CrNsSl),A 1162+++8A29 78 CH_MIX LD A,B 1163+++8A2A 1F RRA 1164+++8A2B E6 48 AND #48 1165+++8A2D FD B6 1C CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8A30 0F RRCA 1167+++8A31 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8A34 E1 POP HL 1169+++8A35 AF XOR A 1170+++8A36 DD B6 0A OR (IX+CHP.COnOff) 1171+++8A39 C8 RET Z 1172+++8A3A DD 35 0A DEC (IX+CHP.COnOff) 1173+++8A3D C0 RET NZ 1174+++8A3E DD AE 15 XOR (IX+CHP.Flags) 1175+++8A41 DD 77 15 LD (IX+CHP.Flags),A 1176+++8A44 1F RRA 1177+++8A45 DD 7E 0B LD A,(IX+CHP.OnOffD) 1178+++8A48 38 03 JR C,CH_ONDL 1179+++8A4A DD 7E 0C LD A,(IX+CHP.OffOnD) 1180+++8A4D DD 77 0A CH_ONDL LD (IX+CHP.COnOff),A 1181+++8A50 C9 RET 1182+++8A51 1183+++8A51 AF PLAY_ XOR A 1184+++8A52 FD 77 12 LD (IY-100+VRS.AddToEn),A 1185+++8A55 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8A58 3D DEC A 1187+++8A59 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8A5C FD 35 09 DEC (IY-100+VRS.DelyCnt) 1189+++8A5F C2 04 8B JP NZ,PL2 1190+++8A62 FD 35 BA DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8A65 20 69 JR NZ,PL1B 1192+++8A67 FD 4E FE LD C,(IY-100+VRS.AdInPtA) 1193+++8A6A FD 46 FF LD B,(IY-100+VRS.AdInPtA+1) 1194+++8A6D 0A LD A,(BC) 1195+++8A6E A7 AND A 1196+++8A6F 20 53 JR NZ,PL1A 1197+++8A71 57 LD D,A 1198+++8A72 FD 77 10 LD (IY-100+VRS.Ns_Base),A 1199+++8A75 FD 6E 04 LD L,(IY-100+VRS.CrPsPtr) 1200+++8A78 FD 66 05 LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8A7B 23 INC HL 1202+++8A7C 7E LD A,(HL) 1203+++8A7D 3C INC A 1204+++8A7E 20 08 JR NZ,PLNLP 1205+++8A80 1206+++8A80 IF LoopChecker 1207+++8A80~ CALL CHECKLP 1208+++8A80 ENDIF 1209+++8A80 1210+++8A80 FD 6E 06 LD L,(IY-100+VRS.LPosPtr) 1211+++8A83 FD 66 07 LD H,(IY-100+VRS.LPosPtr+1) 1212+++8A86 7E LD A,(HL) 1213+++8A87 3C INC A 1214+++8A88 CD DF 85 PLNLP CALL SETCPPT 1215+++8A8B 3D DEC A 1216+++8A8C FD CB 9E 4E BIT 1,(IY-100+VRS.ModNum) 1217+++8A90 28 03 JR Z,NoAlCo 1218+++8A92 TSSub EQU $+1 1219+++8A92 D6 D6 SUB #D6 1220+++8A94 2F CPL 1221+++8A95 NoAlCo 1222+++8A95 ;PT2 PT3 1223+++8A95 3D PsCalc DEC A ;ADD A,A NOP 1224+++8A96 3D DEC A ;ADD A,(HL) NOP 1225+++8A97 87 ADD A,A 1226+++8A98 5F LD E,A 1227+++8A99 CB 12 RL D 1228+++8A9B 1229+++8A9B IF CurPosCounter 1230+++8A9B~ LD A,L 1231+++8A9B~ SUB (IY-100+VRS.PosSub) 1232+++8A9B~ LD (IY-100+VRS.CurPos),A 1233+++8A9B ENDIF 1234+++8A9B 1235+++8A9B FD 6E FC LD L,(IY-100+VRS.PatsPtr) 1236+++8A9E FD 66 FD LD H,(IY-100+VRS.PatsPtr+1) 1237+++8AA1 19 ADD HL,DE 1238+++8AA2 FD 5E F6 LD E,(IY-100+VRS.MODADDR) 1239+++8AA5 FD 56 F7 LD D,(IY-100+VRS.MODADDR+1) 1240+++8AA8 ED 73 C2 8A LD (PSP_+1),SP 1241+++8AAC F9 LD SP,HL 1242+++8AAD E1 POP HL 1243+++8AAE 19 ADD HL,DE 1244+++8AAF 44 LD B,H 1245+++8AB0 4D LD C,L 1246+++8AB1 E1 POP HL 1247+++8AB2 19 ADD HL,DE 1248+++8AB3 FD 75 00 LD (IY-100+VRS.AdInPtB),L 1249+++8AB6 FD 74 01 LD (IY-100+VRS.AdInPtB+1),H 1250+++8AB9 E1 POP HL 1251+++8ABA 19 ADD HL,DE 1252+++8ABB FD 75 02 LD (IY-100+VRS.AdInPtC),L 1253+++8ABE FD 74 03 LD (IY-100+VRS.AdInPtC+1),H 1254+++8AC1 31 31 31 PSP_ LD SP,#3131 1255+++8AC4 11 AB FF PL1A LD DE,VRS.ChanA+12-100 1256+++8AC7 CD 02 86 CALL PTDECOD 1257+++8ACA FD 71 FE LD (IY-100+VRS.AdInPtA),C 1258+++8ACD FD 70 FF LD (IY-100+VRS.AdInPtA+1),B 1259+++8AD0 1260+++8AD0 FD 35 D7 PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8AD3 20 12 JR NZ,PL1C 1262+++8AD5 11 C8 FF LD DE,VRS.ChanB+12-100 1263+++8AD8 FD 4E 00 LD C,(IY-100+VRS.AdInPtB) 1264+++8ADB FD 46 01 LD B,(IY-100+VRS.AdInPtB+1) 1265+++8ADE CD 02 86 CALL PTDECOD 1266+++8AE1 FD 71 00 LD (IY-100+VRS.AdInPtB),C 1267+++8AE4 FD 70 01 LD (IY-100+VRS.AdInPtB+1),B 1268+++8AE7 1269+++8AE7 FD 35 F4 PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8AEA 20 12 JR NZ,PL1D 1271+++8AEC 11 E5 FF LD DE,VRS.ChanC+12-100 1272+++8AEF FD 4E 02 LD C,(IY-100+VRS.AdInPtC) 1273+++8AF2 FD 46 03 LD B,(IY-100+VRS.AdInPtC+1) 1274+++8AF5 CD 02 86 CALL PTDECOD 1275+++8AF8 FD 71 02 LD (IY-100+VRS.AdInPtC),C 1276+++8AFB FD 70 03 LD (IY-100+VRS.AdInPtC+1),B 1277+++8AFE 1278+++8AFE FD 7E 08 PL1D LD A,(IY-100+VRS.Delay) 1279+++8B01 FD 77 09 LD (IY-100+VRS.DelyCnt),A 1280+++8B04 1281+++8B04 11 9F FF PL2 LD DE,VRS.ChanA-100 1282+++8B07 FD 6E 15 LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8B0A FD 66 16 LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8B0D CD DA 88 CALL CHREGS 1285+++8B10 FD 75 15 LD (IY-100+VRS.AYREGS+TonA),L 1286+++8B13 FD 74 16 LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8B16 Ampl EQU $+1 1288+++8B16 3E 3E LD A,#3E 1289+++8B18 FD 77 1D LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8B1B 11 BC FF LD DE,VRS.ChanB-100 1291+++8B1E FD 6E 17 LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8B21 FD 66 18 LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8B24 CD DA 88 CALL CHREGS 1294+++8B27 FD 75 17 LD (IY-100+VRS.AYREGS+TonB),L 1295+++8B2A FD 74 18 LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8B2D 3A 17 8B LD A,(Ampl) 1297+++8B30 FD 77 1E LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8B33 11 D9 FF LD DE,VRS.ChanC-100 1299+++8B36 FD 6E 19 LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8B39 FD 66 1A LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8B3C CD DA 88 CALL CHREGS 1302+++8B3F FD 75 19 LD (IY-100+VRS.AYREGS+TonC),L 1303+++8B42 FD 74 1A LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8B45 3A 17 8B LD A,(Ampl) 1305+++8B48 FD 77 1F LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8B4B 1307+++8B4B FD 7E 10 LD A,(IY-100+VRS.Ns_Base) 1308+++8B4E FD 86 11 ADD (IY-100+VRS.AddToNs) 1309+++8B51 FD 77 1B LD (IY-100+VRS.AYREGS+Noise),A 1310+++8B54 1311+++8B54 FD 7E 12 LD A,(IY-100+VRS.AddToEn) 1312+++8B57 5F LD E,A 1313+++8B58 87 ADD A,A 1314+++8B59 9F SBC A,A 1315+++8B5A 57 LD D,A 1316+++8B5B FD 6E 13 LD L,(IY-100+VRS.EnvBase) 1317+++8B5E FD 66 14 LD H,(IY-100+VRS.EnvBase+1) 1318+++8B61 19 ADD HL,DE 1319+++8B62 FD 5E 0C LD E,(IY-100+VRS.CurESld) 1320+++8B65 FD 56 0D LD D,(IY-100+VRS.CurESld+1) 1321+++8B68 19 ADD HL,DE 1322+++8B69 FD 75 20 LD (IY-100+VRS.AYREGS+Env),L 1323+++8B6C FD 74 21 LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8B6F 1325+++8B6F AF XOR A 1326+++8B70 FD B6 0F OR (IY-100+VRS.CurEDel) 1327+++8B73 C8 RET Z 1328+++8B74 FD 35 0F DEC (IY-100+VRS.CurEDel) 1329+++8B77 C0 RET NZ 1330+++8B78 FD 7E 0E LD A,(IY-100+VRS.Env_Del) 1331+++8B7B FD 77 0F LD (IY-100+VRS.CurEDel),A 1332+++8B7E FD 6E 0A LD L,(IY-100+VRS.ESldAdd) 1333+++8B81 FD 66 0B LD H,(IY-100+VRS.ESldAdd+1) 1334+++8B84 19 ADD HL,DE 1335+++8B85 C3 F4 85 JP SETESLD 1336+++8B88 1337+++8B88 FD 21 D1 8C PLAY LD IY,VARS1+100 1338+++8B8C CD 51 8A CALL PLAY_ 1339+++8B8F 3A 6C 8C LD A,(is_ts) 1340+++8B92 A7 AND A 1341+++8B93 28 07 JR Z,PL_nts 1342+++8B95 FD 21 58 8D LD IY,VARS2+100 1343+++8B99 CD 51 8A CALL PLAY_ 1344+++8B9C PL_nts 1345+++8B9C IF Basic 1346+++8B9C~ LD IY,#5C3A 1347+++8B9C ENDIF 1348+++8B9C 1349+++8B9C 01 FD FF ROUT LD BC,#FFFD 1350+++8B9F 3A 6C 8C LD A,(is_ts) 1351+++8BA2 A7 AND A 1352+++8BA3 IFDEF ONtfm 1353+++8BA3 2E F9 LD L,#F9 1354+++8BA5 ED 69 OUT (C),L 1355+++8BA7 ELSE 1356+++8BA7~ JR Z,r_nts ;keep old standard 1357+++8BA7~ OUT (C),B 1358+++8BA7 ENDIF 1359+++8BA7 08 r_nts EX AF,AF' 1360+++8BA8 1361+++8BA8 IF ACBBAC 1362+++8BA8~ LD IX,VARS1+VRS.AYREGS 1363+++8BA8 ELSE 1364+++8BA8 21 E6 8C LD HL,VARS1+VRS.AYREGS 1365+++8BAB ENDIF 1366+++8BAB 1367+++8BAB CD B8 8B CALL ROUT_ 1368+++8BAE 08 EX AF,AF' 1369+++8BAF C8 RET Z 1370+++8BB0 42 LD B,D 1371+++8BB1 1372+++8BB1 IFDEF ONtfm 1373+++8BB1 3E F8 LD A,#F8 1374+++8BB3 ELSE 1375+++8BB3~ CPL 1376+++8BB3 ENDIF 1377+++8BB3 ED 79 OUT (C),A 1378+++8BB5 1379+++8BB5 IF ACBBAC 1380+++8BB5~ LD IX,VARS2+VRS.AYREGS 1381+++8BB5 ELSE 1382+++8BB5 21 6D 8D LD HL,VARS2+VRS.AYREGS 1383+++8BB8 ENDIF 1384+++8BB8 1385+++8BB8 ROUT_ 1386+++8BB8 IF ACBBAC 1387+++8BB8~ LD A,(SETUP) 1388+++8BB8~ AND 12 1389+++8BB8~ JR Z,ABC 1390+++8BB8~ ADD A,CHTABLE 1391+++8BB8~ LD E,A 1392+++8BB8~ ADC A,CHTABLE/256 1393+++8BB8~ SUB E 1394+++8BB8~ LD D,A 1395+++8BB8~ LD B,0 1396+++8BB8~ PUSH IX 1397+++8BB8~ POP HL 1398+++8BB8~ LD A,(DE) 1399+++8BB8~ INC DE 1400+++8BB8~ LD C,A 1401+++8BB8~ ADD HL,BC 1402+++8BB8~ LD A,(IX+TonB) 1403+++8BB8~ LD C,(HL) 1404+++8BB8~ LD (IX+TonB),C 1405+++8BB8~ LD (HL),A 1406+++8BB8~ INC HL 1407+++8BB8~ LD A,(IX+TonB+1) 1408+++8BB8~ LD C,(HL) 1409+++8BB8~ LD (IX+TonB+1),C 1410+++8BB8~ LD (HL),A 1411+++8BB8~ LD A,(DE) 1412+++8BB8~ INC DE 1413+++8BB8~ LD C,A 1414+++8BB8~ ADD HL,BC 1415+++8BB8~ LD A,(IX+AmplB) 1416+++8BB8~ LD C,(HL) 1417+++8BB8~ LD (IX+AmplB),C 1418+++8BB8~ LD (HL),A 1419+++8BB8~ LD A,(DE) 1420+++8BB8~ INC DE 1421+++8BB8~ LD (RxCA1),A 1422+++8BB8~ XOR 8 1423+++8BB8~ LD (RxCA2),A 1424+++8BB8~ LD A,(DE) 1425+++8BB8~ AND (IX+Mixer) 1426+++8BB8~ LD E,A 1427+++8BB8~ LD A,(IX+Mixer) 1428+++8BB8~ RxCA1 DB #E6 1429+++8BB8~ AND %010010 1430+++8BB8~ OR E 1431+++8BB8~ LD E,A 1432+++8BB8~ LD A,(IX+Mixer) 1433+++8BB8~ AND %010010 1434+++8BB8~ RxCA2 OR E 1435+++8BB8~ OR E 1436+++8BB8~ LD (IX+Mixer),A 1437+++8BB8~ ABC 1438+++8BB8 ENDIF 1439+++8BB8 1440+++8BB8 AF XOR A 1441+++8BB9 11 BF FF LD DE,#FFBF 1442+++8BBC 1443+++8BBC IF ACBBAC 1444+++8BBC~ LD BC,#FFFD 1445+++8BBC~ PUSH IX 1446+++8BBC~ POP HL 1447+++8BBC ENDIF 1448+++8BBC 1449+++8BBC LOUT 1450+++8BBC IFDEF ONtfm 1451+++8BBC ED 70 INF 1452+++8BBE FA BC 8B JP M,$-2 1453+++8BC1 ENDIF 1454+++8BC1 ED 79 OUT (C),A 1455+++8BC3 IFDEF ONtfm 1456+++8BC3 ED 70 INF 1457+++8BC5 FA C3 8B JP M,$-2 1458+++8BC8 ENDIF 1459+++8BC8 43 LD B,E 1460+++8BC9 ED A3 OUTI 1461+++8BCB 42 LD B,D 1462+++8BCC 3C INC A 1463+++8BCD FE 0D CP 13 1464+++8BCF 20 EB JR NZ,LOUT 1465+++8BD1 IFDEF ONtfm 1466+++8BD1 ED 70 INF 1467+++8BD3 FA D1 8B JP M,$-2 1468+++8BD6 ENDIF 1469+++8BD6 ED 79 OUT (C),A 1470+++8BD8 7E LD A,(HL) 1471+++8BD9 A7 AND A 1472+++8BDA F8 RET M 1473+++8BDB IFDEF ONtfm 1474+++8BDB ED 70 INF 1475+++8BDD FA DB 8B JP M,$-2 1476+++8BE0 ENDIF 1477+++8BE0 43 LD B,E 1478+++8BE1 ED 79 OUT (C),A 1479+++8BE3 C9 RET 1480+++8BE4 1481+++8BE4 IF ACBBAC 1482+++8BE4~ CHTABLE EQU $-4 1483+++8BE4~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8BE4 ENDIF 1485+++8BE4 1486+++8BE4 64 NT_DATA DB (T_NEW_0-T1_)*2 1487+++8BE5 2A DB TCNEW_0-T_ 1488+++8BE6 65 DB (T_OLD_0-T1_)*2+1 1489+++8BE7 00 DB TCOLD_0-T_ 1490+++8BE8 01 DB (T_NEW_1-T1_)*2+1 1491+++8BE9 0C DB TCNEW_1-T_ 1492+++8BEA 01 DB (T_OLD_1-T1_)*2+1 1493+++8BEB 0C DB TCOLD_1-T_ 1494+++8BEC 94 DB (T_NEW_2-T1_)*2 1495+++8BED 35 DB TCNEW_2-T_ 1496+++8BEE 30 DB (T_OLD_2-T1_)*2 1497+++8BEF 0E DB TCOLD_2-T_ 1498+++8BF0 60 DB (T_NEW_3-T1_)*2 1499+++8BF1 20 DB TCNEW_3-T_ 1500+++8BF2 60 DB (T_OLD_3-T1_)*2 1501+++8BF3 21 DB TCOLD_3-T_ 1502+++8BF4 1503+++8BF4 T_ 1504+++8BF4 1505+++8BF4 TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1505+++8BF4 0105090B0D0F1315 1506+++8BFC 19 25 3D 00 DB #18+1,#24+1,#3C+1,0 1507+++8C00 5D 00 TCOLD_1 DB #5C+1,0 1508+++8C02 TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1508+++8C02 31374D535F71828C9C 1509+++8C0B DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1509+++8C0B 9EA0A6A8AAACAEAE00 1510+++8C14 57 TCNEW_3 DB #56+1 1511+++8C15 TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1511+++8C15 1F2325292D2F33BF00 1512+++8C1E TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1512+++8C1E 1D2123272B2D3155 1513+++8C26 BD BF 00 DB #BC+1,#BE+1,0 1514+++8C29 TCNEW_1 EQU TCOLD_1 1515+++8C29 TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1515+++8C29 1B2125292B3B4D5F 1516+++8C31 BB BD BF 00 DB #BA+1,#BC+1,#BE+1,0 1517+++8C35 1518+++8C35 PT3EMPTYORN EQU $-1 1519+++8C35 01 00 DB 1,0 1520+++8C37 1521+++8C37 ;first 12 values of tone tables (packed) 1522+++8C37 1523+++8C37 0D D8 T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8C39 69 DB #0755-#06EC 1525+++8C3A 70 DB #07C5-#0755 1526+++8C3B 76 DB #083B-#07C5 1527+++8C3C 7D DB #08B8-#083B 1528+++8C3D 85 DB #093D-#08B8 1529+++8C3E 8D DB #09CA-#093D 1530+++8C3F 95 DB #0A5F-#09CA 1531+++8C40 9D DB #0AFC-#0A5F 1532+++8C41 A8 DB #0BA4-#0AFC 1533+++8C42 B1 DB #0C55-#0BA4 1534+++8C43 BB DB #0D10-#0C55 1535+++8C44 0C DA DB #066D*2/256,#066D*2&255 1536+++8C46 62 DB #06CF-#066D 1537+++8C47 68 DB #0737-#06CF 1538+++8C48 6D DB #07A4-#0737 1539+++8C49 75 DB #0819-#07A4 1540+++8C4A 7B DB #0894-#0819 1541+++8C4B 83 DB #0917-#0894 1542+++8C4C 8A DB #09A1-#0917 1543+++8C4D 92 DB #0A33-#09A1 1544+++8C4E 9C DB #0ACF-#0A33 1545+++8C4F A4 DB #0B73-#0ACF 1546+++8C50 AF DB #0C22-#0B73 1547+++8C51 B8 DB #0CDA-#0C22 1548+++8C52 0E 08 DB #0704*2/256,#0704*2&255 1549+++8C54 6A DB #076E-#0704 1550+++8C55 72 DB #07E0-#076E 1551+++8C56 78 DB #0858-#07E0 1552+++8C57 7E DB #08D6-#0858 1553+++8C58 86 DB #095C-#08D6 1554+++8C59 90 DB #09EC-#095C 1555+++8C5A 96 DB #0A82-#09EC 1556+++8C5B A0 DB #0B22-#0A82 1557+++8C5C AA DB #0BCC-#0B22 1558+++8C5D B4 DB #0C80-#0BCC 1559+++8C5E BE DB #0D3E-#0C80 1560+++8C5F 0F C0 DB #07E0*2/256,#07E0*2&255 1561+++8C61 78 DB #0858-#07E0 1562+++8C62 88 DB #08E0-#0858 1563+++8C63 80 DB #0960-#08E0 1564+++8C64 90 DB #09F0-#0960 1565+++8C65 98 DB #0A88-#09F0 1566+++8C66 A0 DB #0B28-#0A88 1567+++8C67 B0 DB #0BD8-#0B28 1568+++8C68 A8 DB #0C80-#0BD8 1569+++8C69 E0 DB #0D60-#0C80 1570+++8C6A B0 DB #0E10-#0D60 1571+++8C6B E8 DB #0EF8-#0E10 1572+++8C6C 1573+++8C6C ;vars from here can be stripped 1574+++8C6C ;you can move VARS to any other address 1575+++8C6C 1576+++8C6C VARS 1577+++8C6C 1578+++8C6C 00 is_ts DB 0 1579+++8C6D 1580+++8C6D ;ChannelsVars 1581+++8C6D STRUCT CHP 1582+++8C6D~ ;reset group 1583+++8C6D~ PsInOr DB 0 1584+++8C6D~ PsInSm DB 0 1585+++8C6D~ CrAmSl DB 0 1586+++8C6D~ CrNsSl DB 0 1587+++8C6D~ CrEnSl DB 0 1588+++8C6D~ TSlCnt DB 0 1589+++8C6D~ CrTnSl DW 0 1590+++8C6D~ TnAcc DW 0 1591+++8C6D~ COnOff DB 0 1592+++8C6D~ ;reset group 1593+++8C6D~ 1594+++8C6D~ OnOffD DB 0 1595+++8C6D~ 1596+++8C6D~ ;IX for PTDECOD here (+12) 1597+++8C6D~ OffOnD DB 0 1598+++8C6D~ OrnPtr DW 0 1599+++8C6D~ SamPtr DW 0 1600+++8C6D~ NNtSkp DB 0 1601+++8C6D~ Note DB 0 1602+++8C6D~ SlToNt DB 0 1603+++8C6D~ Env_En DB 0 1604+++8C6D~ Flags DB 0 1605+++8C6D~ ;Enabled - 0, SimpleGliss - 2 1606+++8C6D~ TnSlDl DB 0 1607+++8C6D~ TSlStp DW 0 1608+++8C6D~ TnDelt DW 0 1609+++8C6D~ NtSkCn DB 0 1610+++8C6D~ Volume DB 0 1611+++8C6D ENDS 1612+++8C6D 1613+++8C6D STRUCT VRS 1614+++8C6D~ 1615+++8C6D~ ;IF not works in STRUCT in SjASM :( 1616+++8C6D~ ; IF CurPosCounter 1617+++8C6D~ CurPos DB 0 1618+++8C6D~ PosSub DB 0 1619+++8C6D~ ; ENDIF 1620+++8C6D~ 1621+++8C6D~ ModNum DB 0 ;bit0: ChipNum 1622+++8C6D~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8C6D~ 1624+++8C6D~ ChanA DS CHP 1625+++8C6D~ ChanB DS CHP 1626+++8C6D~ ChanC DS CHP 1627+++8C6D~ 1628+++8C6D~ ;GlobalVars 1629+++8C6D~ MODADDR DW 0 1630+++8C6D~ OrnPtrs DW 0 1631+++8C6D~ SamPtrs DW 0 1632+++8C6D~ PatsPtr DW 0 1633+++8C6D~ AdInPtA DW 0 1634+++8C6D~ AdInPtB DW 0 1635+++8C6D~ AdInPtC DW 0 1636+++8C6D~ CrPsPtr DW 0 1637+++8C6D~ LPosPtr DW 0 1638+++8C6D~ Delay DB 0 1639+++8C6D~ DelyCnt DB 0 1640+++8C6D~ ESldAdd DW 0 1641+++8C6D~ CurESld DW 0 1642+++8C6D~ Env_Del DB 0 1643+++8C6D~ CurEDel DB 0 1644+++8C6D~ Ns_Base DB 0 1645+++8C6D~ AddToNs DB 0 1646+++8C6D~ AddToEn DB 0 1647+++8C6D~ EnvBase DW 0 1648+++8C6D~ AYREGS DS 14 1649+++8C6D ENDS 1650+++8C6D 1651+++8C6D 00 VARS1 DS VRS 1652+++8CF4 00 VARS2 DS VRS 1653+++8D7B 1654+++8D7B VT_ EQU $-16 1655+++8D7B 00 DS 256-16 ;CreatedVolumeTableAddress 1656+++8E6B 1657+++8E6B T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8E6B 1659+++8E6B T_OLD_1 EQU T1_ 1660+++8E6B T_OLD_2 EQU T_OLD_1+24 1661+++8E6B T_OLD_3 EQU T_OLD_2+24 1662+++8E6B T_OLD_0 EQU T_OLD_3+2 1663+++8E6B T_NEW_0 EQU T_OLD_0 1664+++8E6B T_NEW_1 EQU T_OLD_1 1665+++8E6B T_NEW_2 EQU T_NEW_0+24 1666+++8E6B T_NEW_3 EQU T_OLD_3 1667+++8E6B 1668+++8E6B PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8E6B 1670+++8E6B 00 NT_ DS 192 ;CreatedNoteTableAddress 1671+++8F2B 1672+++8F2B VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8F2B 1674+++8F2B VARSEND EQU $ 1675+++8F2B MDLADDR EQU $ 1676+++8F2B 1677+++8F2B DISPLAY "PTS player size=",$-START 1678+++8F2B 1679+++8F2B ;Release 0 steps: 1680+++8F2B ;04/21/2007 1681+++8F2B ;Works start (PTxPlay adaptation); first beta. 1682+++8F2B ;04/22/2007 1683+++8F2B ;Job finished; beta-testing. 1684+++8F2B ;04/23/2007 1685+++8F2B ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8F2B ;04/29/2007 1687+++8F2B ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8F2B ;modules of v3.7+. 1689+++8F2B 1690+++8F2B ;Size (minimal build for ZX Spectrum): 1691+++8F2B ;Code block #908 bytes 1692+++8F2B ;Variables #2BF bytes (can be stripped) 1693+++8F2B ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8F2B 1695+++8F2B ENDMOD 1696+++8F2B 1697+++8F2B endif 1698+++8F2B 0418++ 8F2B include "pt3.asm" 0001+++8F2B ifndef _pt3_asm_defined 0002+++8F2B define _pt3_asm_defined 0003+++8F2B 0004+++8F2B module PT3 0005+++8F2B 0006+++8F2B struct Header 0007+++8F2B~ Id ds 13 ; usually 'Protracker 3.' 0008+++8F2B~ Subversion 0009+++8F2B~ db 0 0010+++8F2B~ Description 0011+++8F2B~ ds 84 ; usually ' compilation of ' + Name[32] + ' by ' + Author[32] 0012+++8F2B~ Mode db 0 0013+++8F2B~ FreqTable 0014+++8F2B~ db 0 ;assume 0..04 0015+++8F2B~ Tempo db 0 ;01-ff 0016+++8F2B~ Length db 0 0017+++8F2B~ Loop db 0 0018+++8F2B~ Patterns 0019+++8F2B~ dw 0 ;? 00-01 0020+++8F2B~ Samples 0021+++8F2B~ ds 64 ;(? 00-bf}{32} 0022+++8F2B~ Ornaments 0023+++8F2B~ ds 32 ;(? 00-d9){16} 0024+++8F2B~ Positions 0025+++8F2B~ db 0 ;*3&00-fe 0026+++8F2B~ db 0 ;*3|ff 0027+++8F2B ends 0028+++8F2B 0029+++8F2B Start 0030+++8F2B ifndef NoPrologue 0031+++8F2B~ ld hl,End 0032+++8F2B~ jr Init 0033+++8F2B~ jp PTS.PLAY 0034+++8F2B~ jp PTS.MUTE 0035+++8F2B endif 0036+++8F2B 0037+++8F2B 3E 20 Init ld a,PTS.SETUP.TSPT3 0038+++8F2D C3 6C 83 jp PTS.INIT 0039+++8F30 0040+++8F30 ifdef HaveFormatCheck 0041+++8F30 include "format.asm" 0001+++8F30 ;some format checking macros 0002+++8F30 ifndef _format_asm_defined 0003+++8F30~ define _format_asm_defined 0004+++8F30~ 0005+++8F30~ macro LessOrEqual number 0006+++8F30~ ld a,number 0007+++8F30~ cp (hl) 0008+++8F30~ inc hl 0009+++8F30~ ret c 0010+++8F30~ endm 0011+++8F30~ 0012+++8F30~ macro Greater number 0013+++8F30~ ld a,(hl) 0014+++8F30~ inc hl 0015+++8F30~ cp number 0016+++8F30~ ret c 0017+++8F30~ endm 0018+++8F30~ 0019+++8F30~ macro AnyByte 0020+++8F30~ inc hl 0021+++8F30~ endm 0022+++8F30~ 0023+++8F30~ macro AnyBytes count 0024+++8F30~ if count > 7 0025+++8F30~ ld a,l 0026+++8F30~ add a,count 0027+++8F30~ ld l,a 0028+++8F30~ adc a,h 0029+++8F30~ sub l 0030+++8F30~ ld h,a 0031+++8F30~ else 0032+++8F30~ dup count 0033+++8F30~ inc hl 0034+++8F30~ edup 0035+++8F30~ endif 0036+++8F30~ endm 0037+++8F30~ 0038+++8F30~ macro EqualTo number 0039+++8F30~ ld a,number 0040+++8F30~ cp (hl) 0041+++8F30~ inc hl 0042+++8F30~ ret nz 0043+++8F30~ endm 0044+++8F30~ 0045+++8F30 endif 0046+++8F30 0042+++8F30 0043+++8F30 ;in HL - module addr 0044+++8F30 ;out Z - is pt3 0045+++8F30 CheckFormat 0046+++8F30 ; meta 0047+++8F30 AnyBytes Header.FreqTable 0047+++8F30 7D > ld a,l 0047+++8F31 C6 63 > add a,count 0047+++8F33 6F > ld l,a 0047+++8F34 8C > adc a,h 0047+++8F35 95 > sub l 0047+++8F36 67 > ld h,a 0048+++8F37 ;FreqTable 0049+++8F37 LessOrEqual 4 0049+++8F37 3E 04 > ld a,number 0049+++8F39 BE > cp (hl) 0049+++8F3A 23 > inc hl 0049+++8F3B D8 > ret c 0050+++8F3C ;Tempo 0051+++8F3C Greater 1 0051+++8F3C 7E > ld a,(hl) 0051+++8F3D 23 > inc hl 0051+++8F3E FE 01 > cp number 0051+++8F40 D8 > ret c 0052+++8F41 ;Length 0053+++8F41 AnyByte 0053+++8F41 23 > inc hl 0054+++8F42 ;Loop 0055+++8F42 AnyByte 0055+++8F42 23 > inc hl 0056+++8F43 ;Patterns 0057+++8F43 AnyByte 0057+++8F43 23 > inc hl 0058+++8F44 LessOrEqual 1 0058+++8F44 3E 01 > ld a,number 0058+++8F46 BE > cp (hl) 0058+++8F47 23 > inc hl 0058+++8F48 D8 > ret c 0059+++8F49 ;Samples 0060+++8F49 06 20 ld b,(Header.Ornaments-Header.Samples)/2 0061+++8F4B .samples 0062+++8F4B AnyByte 0062+++8F4B 23 > inc hl 0063+++8F4C LessOrEqual #bf 0063+++8F4C 3E BF > ld a,number 0063+++8F4E BE > cp (hl) 0063+++8F4F 23 > inc hl 0063+++8F50 D8 > ret c 0064+++8F51 10 F8 djnz .samples 0065+++8F53 ;Ornaments 0066+++8F53 06 10 ld b,(Header.Positions-Header.Ornaments)/2 0067+++8F55 .ornaments 0068+++8F55 AnyByte 0068+++8F55 23 > inc hl 0069+++8F56 LessOrEqual #d9 0069+++8F56 3E D9 > ld a,number 0069+++8F58 BE > cp (hl) 0069+++8F59 23 > inc hl 0069+++8F5A D8 > ret c 0070+++8F5B 10 F8 djnz .ornaments 0071+++8F5D ;Positions 0072+++8F5D ;255 at first position is denied 0073+++8F5D LessOrEqual 254 0073+++8F5D 3E FE > ld a,number 0073+++8F5F BE > cp (hl) 0073+++8F60 23 > inc hl 0073+++8F61 D8 > ret c 0074+++8F62 06 00 ld b,0 0075+++8F64 2B dec hl 0076+++8F65 .positions 0077+++8F65 7E ld a,(hl) 0078+++8F66 23 inc hl 0079+++8F67 FE FF cp 255 0080+++8F69 C8 ret z ;finish 0081+++8F6A ;check is multiple of 3 0082+++8F6A A7 .div3 and a 0083+++8F6B 28 05 jr z,.posok 0084+++8F6D D6 03 sub 3 0085+++8F6F D8 ret c 0086+++8F70 20 F8 jr nz,.div3 0087+++8F72 10 F1 .posok djnz .positions 0088+++8F74 ;fall through 0089+++8F74 7C .fail ld a,h 0090+++8F75 A7 and a ;reset Z 0091+++8F76 C9 ret 0092+++8F77 0093+++8F77 display "PT3 checker size: ",$-CheckFormat 0094+++8F77 endif 0095+++8F77 0096+++8F77 endmod 0097+++8F77 0098+++8F77 include "PTSPlay.asm" 0001+++8F77 ifndef _pts_asm_defined 0002+++8F77~ define _pts_asm_defined 0003+++8F77~ 0004+++8F77~ MODULE PTS 0005+++8F77~ 0006+++8F77~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8F77~ ;(c)2004-2007 S.V.Bulba 0008+++8F77~ ;Specially for AlCo 0009+++8F77~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8F77~ 0011+++8F77~ ;Release number 0012+++8F77~ Release EQU "0" 0013+++8F77~ 0014+++8F77~ ;Conditional assembly 0015+++8F77~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8F77~ CurPosCounter=0 0017+++8F77~ ;2) Allow channels allocation bits at (SETUP) 0018+++8F77~ ACBBAC=0 0019+++8F77~ ;3) Allow loop checking and disabling 0020+++8F77~ LoopChecker=0 0021+++8F77~ ;4) Insert official identificator 0022+++8F77~ Id=0 0023+++8F77~ ;5) Set IY for correct return to ZX Basic 0024+++8F77~ Basic=0 0025+++8F77~ 0026+++8F77~ ;Features 0027+++8F77~ ;-------- 0028+++8F77~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8F77~ ; address). 0030+++8F77~ ;-Variables (VARS) can be located at any address (not only after 0031+++8F77~ ; code block). 0032+++8F77~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8F77~ ; generates both note and volume tables outside of code block 0034+++8F77~ ; (in VARS). 0035+++8F77~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8F77~ ; PT3 module version). 0037+++8F77~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8F77~ ; and higher). 0039+++8F77~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8F77~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8F77~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8F77~ ;-See also notes at the end of this source code. 0043+++8F77~ 0044+++8F77~ ;Limitations 0045+++8F77~ ;----------- 0046+++8F77~ ;-Can run in RAM only (self-modified code is used). 0047+++8F77~ ;-PT2 position list must be end by #FF marker only. 0048+++8F77~ 0049+++8F77~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8F77~ ;into RAM or INIT subprogram was not called before. 0051+++8F77~ 0052+++8F77~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8F77~ ;playing 0054+++8F77~ 0055+++8F77~ TonA EQU 0 0056+++8F77~ TonB EQU 2 0057+++8F77~ TonC EQU 4 0058+++8F77~ Noise EQU 6 0059+++8F77~ Mixer EQU 7 0060+++8F77~ AmplA EQU 8 0061+++8F77~ AmplB EQU 9 0062+++8F77~ AmplC EQU 10 0063+++8F77~ Env EQU 11 0064+++8F77~ EnvTp EQU 13 0065+++8F77~ 0066+++8F77~ START 0067+++8F77~ 0068+++8F77~ SETUP.NOLOOP EQU 1 0069+++8F77~ SETUP.PT2 EQU 2 0070+++8F77~ SETUP.ACB EQU 4 0071+++8F77~ SETUP.BAC EQU 8 0072+++8F77~ SETUP.TS02 EQU 16 0073+++8F77~ SETUP.TSPT3 EQU 32 0074+++8F77~ 0075+++8F77~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8F77~ ;(optional); 0077+++8F77~ ;set bit1 for PT2 and reset for PT3 before 0078+++8F77~ ;calling INIT; 0079+++8F77~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8F77~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8F77~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8F77~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8F77~ ;documented and must be converted to new standard. 0084+++8F77~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8F77~ ;module is passed (optional). 0086+++8F77~ ;bit7 is set each time, when loop point of 1st TS 0087+++8F77~ ;or of single module is passed (optional). 0088+++8F77~ 0089+++8F77~ ;Identifier 0090+++8F77~ IF Id 0091+++8F77~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8F77~ ENDIF 0093+++8F77~ 0094+++8F77~ IF LoopChecker 0095+++8F77~ CHECKLP LD HL,SETUP 0096+++8F77~ BIT 0,(IY-100+VRS.ModNum) 0097+++8F77~ JR Z,CHL1 0098+++8F77~ SET 6,(HL) 0099+++8F77~ JR CHL2 0100+++8F77~ CHL1 SET 7,(HL) 0101+++8F77~ CHL2 BIT 0,(HL) 0102+++8F77~ RET Z 0103+++8F77~ POP HL 0104+++8F77~ INC (IY-100+VRS.DelyCnt) 0105+++8F77~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8F77~ XOR A 0107+++8F77~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8F77~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8F77~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8F77~ RET 0111+++8F77~ ENDIF 0112+++8F77~ 0113+++8F77~ MUTE XOR A 0114+++8F77~ LD H,A 0115+++8F77~ LD L,A 0116+++8F77~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8F77~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8F77~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8F77~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8F77~ JP ROUT 0121+++8F77~ 0122+++8F77~ INIT 0123+++8F77~ ;HL - AddressOfModule 0124+++8F77~ ;DE - AddresOf2ndModule 0125+++8F77~ ;A - mode 0126+++8F77~ PUSH DE 0127+++8F77~ PUSH HL 0128+++8F77~ LD HL,VARS 0129+++8F77~ LD (HL),0 0130+++8F77~ LD DE,VARS+1 0131+++8F77~ LD BC,VAR0END-VARS-1 0132+++8F77~ LDIR 0133+++8F77~ INC HL 0134+++8F77~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8F77~ LD (VARS2+VRS.AdInPtA),HL 0136+++8F77~ 0137+++8F77~ POP HL 0138+++8F77~ LD IY,VARS1+100 0139+++8F77~ LD (SETUP),A 0140+++8F77~ AND SETUP.PT2 0141+++8F77~ JP NZ,I_PT2 0142+++8F77~ 0143+++8F77~ CALL INITPT3 0144+++8F77~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8F77~ LD (SamCnv),HL 0146+++8F77~ LD A,#BA 0147+++8F77~ LD (OrnCP),A 0148+++8F77~ LD (SamCP),A 0149+++8F77~ LD A,#7B 0150+++8F77~ LD (OrnLD),A 0151+++8F77~ LD (SamLD),A 0152+++8F77~ LD A,#87 0153+++8F77~ LD (SamClc2),A 0154+++8F77~ POP HL 0155+++8F77~ ;Use version and ton table of 1st module 0156+++8F77~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8F77~ SUB #30 0158+++8F77~ JR C,L20 0159+++8F77~ CP 10 0160+++8F77~ JR C,L21 0161+++8F77~ L20 LD A,6 0162+++8F77~ L21 LD (Version),A 0163+++8F77~ PUSH AF ;VolTable version 0164+++8F77~ CP 4 0165+++8F77~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8F77~ RLA 0167+++8F77~ AND 7 0168+++8F77~ PUSH AF ;NoteTable number 0169+++8F77~ 0170+++8F77~ LD IY,VARS2+100 0171+++8F77~ LD A,(SETUP) 0172+++8F77~ AND SETUP.TS02|SETUP.TSPT3 0173+++8F77~ JR Z,NOTS 0174+++8F77~ CP SETUP.TS02 0175+++8F77~ JR Z,TwoPT3s 0176+++8F77~ LD A,(Version) 0177+++8F77~ CP 7 0178+++8F77~ JR C,NOTS 0179+++8F77~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8F77~ CP #20 0181+++8F77~ JR Z,NOTS 0182+++8F77~ LD HL,VARS1 0183+++8F77~ LD DE,VARS2 0184+++8F77~ LD BC,VRS 0185+++8F77~ LDIR 0186+++8F77~ SET 1,(IY-100+VRS.ModNum) 0187+++8F77~ LD C,A 0188+++8F77~ ADD A,A 0189+++8F77~ ADD A,C 0190+++8F77~ SUB 2 0191+++8F77~ LD (TSSub),A 0192+++8F77~ JR AlCoTS_ 0193+++8F77~ TwoPT3s CALL INITPT3 0194+++8F77~ AlCoTS_ LD A,1 0195+++8F77~ LD (is_ts),A 0196+++8F77~ SET 0,(IY-100+VRS.ModNum) 0197+++8F77~ 0198+++8F77~ NOTS LD BC,PT3PD 0199+++8F77~ LD HL,0 0200+++8F77~ LD DE,PT3EMPTYORN 0201+++8F77~ JR INITCOMMON 0202+++8F77~ 0203+++8F77~ I_PT2 CALL INITPT2 0204+++8F77~ LD HL,#51CB 0205+++8F77~ LD (SamCnv),HL 0206+++8F77~ LD A,#BB 0207+++8F77~ LD (OrnCP),A 0208+++8F77~ LD (SamCP),A 0209+++8F77~ LD A,#7A 0210+++8F77~ LD (OrnLD),A 0211+++8F77~ LD (SamLD),A 0212+++8F77~ LD A,#80 0213+++8F77~ LD (SamClc2),A 0214+++8F77~ POP HL 0215+++8F77~ LD A,5 0216+++8F77~ LD (Version),A 0217+++8F77~ PUSH AF 0218+++8F77~ LD A,2 0219+++8F77~ PUSH AF 0220+++8F77~ 0221+++8F77~ LD A,(SETUP) 0222+++8F77~ AND SETUP.TS02|SETUP.TSPT3 0223+++8F77~ JR Z,NOTS2 0224+++8F77~ 0225+++8F77~ LD IY,VARS2+100 0226+++8F77~ LD A,1 0227+++8F77~ LD (is_ts),A 0228+++8F77~ SET 0,(IY-100+VRS.ModNum) 0229+++8F77~ CALL INITPT2 0230+++8F77~ 0231+++8F77~ NOTS2 LD BC,PT2PD 0232+++8F77~ LD HL,#8687 0233+++8F77~ LD DE,PT2EMPTYORN 0234+++8F77~ 0235+++8F77~ INITCOMMON 0236+++8F77~ 0237+++8F77~ IF Basic 0238+++8F77~ LD IY,#5C3A 0239+++8F77~ ENDIF 0240+++8F77~ 0241+++8F77~ LD (PTDEC),BC 0242+++8F77~ LD (PsCalc),HL 0243+++8F77~ PUSH DE 0244+++8F77~ 0245+++8F77~ ;note table data depacker 0246+++8F77~ ;(c) Ivan Roshin 0247+++8F77~ LD DE,T_PACK 0248+++8F77~ LD BC,T1_+(2*49)-1 0249+++8F77~ TP_0 LD A,(DE) 0250+++8F77~ INC DE 0251+++8F77~ CP 15*2 0252+++8F77~ JR NC,TP_1 0253+++8F77~ LD H,A 0254+++8F77~ LD A,(DE) 0255+++8F77~ LD L,A 0256+++8F77~ INC DE 0257+++8F77~ JR TP_2 0258+++8F77~ TP_1 PUSH DE 0259+++8F77~ LD D,0 0260+++8F77~ LD E,A 0261+++8F77~ ADD HL,DE 0262+++8F77~ ADD HL,DE 0263+++8F77~ POP DE 0264+++8F77~ TP_2 LD A,H 0265+++8F77~ LD (BC),A 0266+++8F77~ DEC BC 0267+++8F77~ LD A,L 0268+++8F77~ LD (BC),A 0269+++8F77~ DEC BC 0270+++8F77~ SUB (#F8*2)&255 0271+++8F77~ JR NZ,TP_0 0272+++8F77~ 0273+++8F77~ INC A 0274+++8F77~ LD (VARS1+VRS.DelyCnt),A 0275+++8F77~ LD (VARS2+VRS.DelyCnt),A 0276+++8F77~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8F77~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8F77~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8F77~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8F77~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8F77~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8F77~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8F77~ POP HL 0284+++8F77~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8F77~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8F77~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8F77~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8F77~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8F77~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8F77~ 0291+++8F77~ POP AF 0292+++8F77~ 0293+++8F77~ ;NoteTableCreator (c) Ivan Roshin 0294+++8F77~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8F77~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8F77~ 0297+++8F77~ LD HL,NT_DATA 0298+++8F77~ LD D,0 0299+++8F77~ ADD A,A 0300+++8F77~ LD E,A 0301+++8F77~ ADD HL,DE 0302+++8F77~ LD E,(HL) 0303+++8F77~ INC HL 0304+++8F77~ SRL E 0305+++8F77~ SBC A,A 0306+++8F77~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8F77~ LD (L3),A 0308+++8F77~ EX DE,HL 0309+++8F77~ LD BC,T1_ 0310+++8F77~ ADD HL,BC 0311+++8F77~ 0312+++8F77~ LD A,(DE) 0313+++8F77~ ADD A,T_&255 0314+++8F77~ LD C,A 0315+++8F77~ ADC A,T_/256 0316+++8F77~ SUB C 0317+++8F77~ LD B,A 0318+++8F77~ PUSH BC 0319+++8F77~ LD DE,NT_ 0320+++8F77~ PUSH DE 0321+++8F77~ 0322+++8F77~ LD B,12 0323+++8F77~ L1 PUSH BC 0324+++8F77~ LD C,(HL) 0325+++8F77~ INC HL 0326+++8F77~ PUSH HL 0327+++8F77~ LD B,(HL) 0328+++8F77~ 0329+++8F77~ PUSH DE 0330+++8F77~ EX DE,HL 0331+++8F77~ LD DE,23 0332+++8F77~ LD IXH,8 0333+++8F77~ 0334+++8F77~ L2 SRL B 0335+++8F77~ RR C 0336+++8F77~ L3 DB #19 ;AND A or NOP 0337+++8F77~ LD A,C 0338+++8F77~ ADC A,D ;=ADC 0 0339+++8F77~ LD (HL),A 0340+++8F77~ INC HL 0341+++8F77~ LD A,B 0342+++8F77~ ADC A,D 0343+++8F77~ LD (HL),A 0344+++8F77~ ADD HL,DE 0345+++8F77~ DEC IXH 0346+++8F77~ JR NZ,L2 0347+++8F77~ 0348+++8F77~ POP DE 0349+++8F77~ INC DE 0350+++8F77~ INC DE 0351+++8F77~ POP HL 0352+++8F77~ INC HL 0353+++8F77~ POP BC 0354+++8F77~ DJNZ L1 0355+++8F77~ 0356+++8F77~ POP HL 0357+++8F77~ POP DE 0358+++8F77~ 0359+++8F77~ LD A,E 0360+++8F77~ CP TCOLD_1&255 0361+++8F77~ JR NZ,CORR_1 0362+++8F77~ LD A,#FD 0363+++8F77~ LD (NT_+#2E),A 0364+++8F77~ 0365+++8F77~ CORR_1 LD A,(DE) 0366+++8F77~ AND A 0367+++8F77~ JR Z,TC_EXIT 0368+++8F77~ RRA 0369+++8F77~ PUSH AF 0370+++8F77~ ADD A,A 0371+++8F77~ LD C,A 0372+++8F77~ ADD HL,BC 0373+++8F77~ POP AF 0374+++8F77~ JR NC,CORR_2 0375+++8F77~ DEC (HL) 0376+++8F77~ DEC (HL) 0377+++8F77~ CORR_2 INC (HL) 0378+++8F77~ AND A 0379+++8F77~ SBC HL,BC 0380+++8F77~ INC DE 0381+++8F77~ JR CORR_1 0382+++8F77~ 0383+++8F77~ TC_EXIT 0384+++8F77~ 0385+++8F77~ POP AF 0386+++8F77~ 0387+++8F77~ ;VolTableCreator (c) Ivan Roshin 0388+++8F77~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8F77~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8F77~ 0391+++8F77~ CP 5 0392+++8F77~ LD HL,#11 0393+++8F77~ LD D,H 0394+++8F77~ LD E,H 0395+++8F77~ LD A,#17 0396+++8F77~ JR NC,M1 0397+++8F77~ DEC L 0398+++8F77~ LD E,L 0399+++8F77~ XOR A 0400+++8F77~ M1 LD (M2),A 0401+++8F77~ 0402+++8F77~ LD IX,VT_+16 0403+++8F77~ 0404+++8F77~ LD C,#F 0405+++8F77~ INITV2 PUSH HL 0406+++8F77~ 0407+++8F77~ ADD HL,DE 0408+++8F77~ EX DE,HL 0409+++8F77~ SBC HL,HL 0410+++8F77~ 0411+++8F77~ LD B,#10 0412+++8F77~ INITV1 LD A,L 0413+++8F77~ M2 DB #7D 0414+++8F77~ LD A,H 0415+++8F77~ ADC A,0 0416+++8F77~ LD (IX),A 0417+++8F77~ INC IX 0418+++8F77~ ADD HL,DE 0419+++8F77~ DJNZ INITV1 0420+++8F77~ 0421+++8F77~ POP HL 0422+++8F77~ LD A,E 0423+++8F77~ CP #77 0424+++8F77~ JR NZ,M3 0425+++8F77~ INC E 0426+++8F77~ M3 DEC C 0427+++8F77~ JR NZ,INITV2 0428+++8F77~ 0429+++8F77~ JP ROUT 0430+++8F77~ 0431+++8F77~ INITPT3 CALL SETMDAD 0432+++8F77~ PUSH HL 0433+++8F77~ LD DE,100 0434+++8F77~ ADD HL,DE 0435+++8F77~ LD A,(HL) 0436+++8F77~ LD (IY-100+VRS.Delay),A 0437+++8F77~ PUSH HL 0438+++8F77~ POP IX 0439+++8F77~ ADD HL,DE 0440+++8F77~ CALL SETCPPT 0441+++8F77~ LD E,(IX+102-100) 0442+++8F77~ INC HL 0443+++8F77~ 0444+++8F77~ IF CurPosCounter 0445+++8F77~ LD (IY-100+VRS.PosSub),L 0446+++8F77~ ENDIF 0447+++8F77~ 0448+++8F77~ ADD HL,DE 0449+++8F77~ CALL SETLPPT 0450+++8F77~ POP DE 0451+++8F77~ LD L,(IX+103-100) 0452+++8F77~ LD H,(IX+104-100) 0453+++8F77~ ADD HL,DE 0454+++8F77~ CALL SETPTPT 0455+++8F77~ LD HL,169 0456+++8F77~ ADD HL,DE 0457+++8F77~ CALL SETORPT 0458+++8F77~ LD HL,105 0459+++8F77~ ADD HL,DE 0460+++8F77~ 0461+++8F77~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8F77~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8F77~ RET 0464+++8F77~ 0465+++8F77~ INITPT2 LD A,(HL) 0466+++8F77~ LD (IY-100+VRS.Delay),A 0467+++8F77~ PUSH HL 0468+++8F77~ PUSH HL 0469+++8F77~ PUSH HL 0470+++8F77~ INC HL 0471+++8F77~ INC HL 0472+++8F77~ LD A,(HL) 0473+++8F77~ INC HL 0474+++8F77~ CALL SETSMPT 0475+++8F77~ LD E,(HL) 0476+++8F77~ INC HL 0477+++8F77~ LD D,(HL) 0478+++8F77~ POP HL 0479+++8F77~ AND A 0480+++8F77~ SBC HL,DE 0481+++8F77~ CALL SETMDAD 0482+++8F77~ POP HL 0483+++8F77~ LD DE,67 0484+++8F77~ ADD HL,DE 0485+++8F77~ CALL SETORPT 0486+++8F77~ LD E,32 0487+++8F77~ ADD HL,DE 0488+++8F77~ LD C,(HL) 0489+++8F77~ INC HL 0490+++8F77~ LD B,(HL) 0491+++8F77~ LD E,30 0492+++8F77~ ADD HL,DE 0493+++8F77~ CALL SETCPPT 0494+++8F77~ LD E,A 0495+++8F77~ INC HL 0496+++8F77~ 0497+++8F77~ IF CurPosCounter 0498+++8F77~ LD (IY-100+VRS.PosSub),L 0499+++8F77~ ENDIF 0500+++8F77~ 0501+++8F77~ ADD HL,DE 0502+++8F77~ CALL SETLPPT 0503+++8F77~ POP HL 0504+++8F77~ ADD HL,BC 0505+++8F77~ 0506+++8F77~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8F77~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8F77~ RET 0509+++8F77~ 0510+++8F77~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8F77~ LD (IY-100+VRS.MODADDR+1),H 0512+++8F77~ RET 0513+++8F77~ 0514+++8F77~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8F77~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8F77~ RET 0517+++8F77~ 0518+++8F77~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8F77~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8F77~ RET 0521+++8F77~ 0522+++8F77~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8F77~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8F77~ RET 0525+++8F77~ 0526+++8F77~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8F77~ LD (IY-100+VRS.EnvBase+1),H 0528+++8F77~ RET 0529+++8F77~ 0530+++8F77~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8F77~ LD (IY-100+VRS.CurESld+1),H 0532+++8F77~ RET 0533+++8F77~ 0534+++8F77~ GETIX PUSH IY 0535+++8F77~ POP IX 0536+++8F77~ ADD IX,DE 0537+++8F77~ RET 0538+++8F77~ 0539+++8F77~ PTDECOD CALL GETIX 0540+++8F77~ PTDEC EQU $+1 0541+++8F77~ JP #C3C3 0542+++8F77~ 0543+++8F77~ ;PT2 pattern decoder 0544+++8F77~ PD2_SAM CALL SETSAM 0545+++8F77~ JR PD2_LOOP 0546+++8F77~ 0547+++8F77~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8F77~ JR PD2_LOOP 0549+++8F77~ 0550+++8F77~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8F77~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8F77~ LD A,(BC) 0553+++8F77~ INC BC 0554+++8F77~ LD L,A 0555+++8F77~ LD A,(BC) 0556+++8F77~ INC BC 0557+++8F77~ LD H,A 0558+++8F77~ CALL SETENBS 0559+++8F77~ JR PD2_LOOP 0560+++8F77~ 0561+++8F77~ PD2_ORN CALL SETORN 0562+++8F77~ JR PD2_LOOP 0563+++8F77~ 0564+++8F77~ PD2_SKIP INC A 0565+++8F77~ LD (IX-12+CHP.NNtSkp),A 0566+++8F77~ JR PD2_LOOP 0567+++8F77~ 0568+++8F77~ PD2_VOL RRCA 0569+++8F77~ RRCA 0570+++8F77~ RRCA 0571+++8F77~ RRCA 0572+++8F77~ LD (IX-12+CHP.Volume),A 0573+++8F77~ JR PD2_LOOP 0574+++8F77~ 0575+++8F77~ PD2_DEL CALL C_DELAY 0576+++8F77~ JR PD2_LOOP 0577+++8F77~ 0578+++8F77~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8F77~ INC A 0580+++8F77~ LD (IX-12+CHP.TnSlDl),A 0581+++8F77~ LD (IX-12+CHP.TSlCnt),A 0582+++8F77~ LD A,(BC) 0583+++8F77~ INC BC 0584+++8F77~ LD (IX-12+CHP.TSlStp),A 0585+++8F77~ ADD A,A 0586+++8F77~ SBC A,A 0587+++8F77~ LD (IX-12+CHP.TSlStp+1),A 0588+++8F77~ SCF 0589+++8F77~ JR PD2_LP2 0590+++8F77~ 0591+++8F77~ PT2PD AND A 0592+++8F77~ 0593+++8F77~ PD2_LP2 EX AF,AF' 0594+++8F77~ 0595+++8F77~ PD2_LOOP LD A,(BC) 0596+++8F77~ INC BC 0597+++8F77~ ADD A,#20 0598+++8F77~ JR Z,PD2_REL 0599+++8F77~ JR C,PD2_SAM 0600+++8F77~ ADD A,96 0601+++8F77~ JR C,PD2_NOTE 0602+++8F77~ INC A 0603+++8F77~ JR Z,PD2_EOff 0604+++8F77~ ADD A,15 0605+++8F77~ JP Z,PD_FIN 0606+++8F77~ JR C,PD2_ENV 0607+++8F77~ ADD A,#10 0608+++8F77~ JR C,PD2_ORN 0609+++8F77~ ADD A,#40 0610+++8F77~ JR C,PD2_SKIP 0611+++8F77~ ADD A,#10 0612+++8F77~ JR C,PD2_VOL 0613+++8F77~ INC A 0614+++8F77~ JR Z,PD2_DEL 0615+++8F77~ INC A 0616+++8F77~ JR Z,PD2_GLIS 0617+++8F77~ INC A 0618+++8F77~ JR Z,PD2_PORT 0619+++8F77~ INC A 0620+++8F77~ JR Z,PD2_STOP 0621+++8F77~ LD A,(BC) 0622+++8F77~ INC BC 0623+++8F77~ LD (IX-12+CHP.CrNsSl),A 0624+++8F77~ JR PD2_LOOP 0625+++8F77~ 0626+++8F77~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8F77~ LD A,(BC) 0628+++8F77~ INC BC 0629+++8F77~ INC BC ;ignoring precalc delta to right sound 0630+++8F77~ INC BC 0631+++8F77~ SCF 0632+++8F77~ JR PD2_LP2 0633+++8F77~ 0634+++8F77~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8F77~ JR PD2_LOOP 0636+++8F77~ 0637+++8F77~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8F77~ JR PD2_EXIT 0639+++8F77~ 0640+++8F77~ PD2_NOTE LD L,A 0641+++8F77~ LD A,(IX-12+CHP.Note) 0642+++8F77~ LD (PrNote+1),A 0643+++8F77~ LD (IX-12+CHP.Note),L 0644+++8F77~ XOR A 0645+++8F77~ LD (IX-12+CHP.TSlCnt),A 0646+++8F77~ SET 0,(IX-12+CHP.Flags) 0647+++8F77~ EX AF,AF' 0648+++8F77~ JR NC,NOGLIS2 0649+++8F77~ BIT 2,(IX-12+CHP.Flags) 0650+++8F77~ JR NZ,NOPORT2 0651+++8F77~ LD (LoStep),A 0652+++8F77~ ADD A,A 0653+++8F77~ SBC A,A 0654+++8F77~ EX AF,AF' 0655+++8F77~ LD H,A 0656+++8F77~ LD L,A 0657+++8F77~ INC A 0658+++8F77~ CALL SETPORT 0659+++8F77~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8F77~ NOGLIS2 XOR A 0661+++8F77~ 0662+++8F77~ 0663+++8F77~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8F77~ LD (IX-12+CHP.PsInOr),A 0665+++8F77~ LD (IX-12+CHP.CrTnSl),A 0666+++8F77~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8F77~ JP PD_FIN 0668+++8F77~ 0669+++8F77~ ;PT3 pattern decoder 0670+++8F77~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8F77~ CALL SETORN 0672+++8F77~ PD_SAM_ LD A,(BC) 0673+++8F77~ INC BC 0674+++8F77~ RRCA 0675+++8F77~ 0676+++8F77~ PD_SAM CALL SETSAM 0677+++8F77~ JR PD_LOOP 0678+++8F77~ 0679+++8F77~ PD_VOL RRCA 0680+++8F77~ RRCA 0681+++8F77~ RRCA 0682+++8F77~ RRCA 0683+++8F77~ LD (IX-12+CHP.Volume),A 0684+++8F77~ JR PD_LP2 0685+++8F77~ 0686+++8F77~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8F77~ LD (IX-12+CHP.PsInOr),A 0688+++8F77~ JR PD_LP2 0689+++8F77~ 0690+++8F77~ PD_SorE DEC A 0691+++8F77~ JR NZ,PD_ENV 0692+++8F77~ LD A,(BC) 0693+++8F77~ INC BC 0694+++8F77~ LD (IX-12+CHP.NNtSkp),A 0695+++8F77~ JR PD_LP2 0696+++8F77~ 0697+++8F77~ PD_ENV CALL SETENV 0698+++8F77~ JR PD_LP2 0699+++8F77~ 0700+++8F77~ PD_ORN CALL SETORN 0701+++8F77~ JR PD_LOOP 0702+++8F77~ 0703+++8F77~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8F77~ LD (IX-12+CHP.PsInOr),A 0705+++8F77~ CALL NZ,SETENV 0706+++8F77~ JR PD_SAM_ 0707+++8F77~ 0708+++8F77~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8F77~ LD (PrNote+1),A 0710+++8F77~ LD L,(IX-12+CHP.CrTnSl) 0711+++8F77~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8F77~ LD (PrSlide+1),HL 0713+++8F77~ 0714+++8F77~ PD_LOOP LD DE,#2010 0715+++8F77~ PD_LP2 LD A,(BC) 0716+++8F77~ INC BC 0717+++8F77~ ADD A,E 0718+++8F77~ JR C,PD_OrSm 0719+++8F77~ ADD A,D 0720+++8F77~ JR Z,PD_FIN 0721+++8F77~ JR C,PD_SAM 0722+++8F77~ ADD A,E 0723+++8F77~ JR Z,PD_REL 0724+++8F77~ JR C,PD_VOL 0725+++8F77~ ADD A,E 0726+++8F77~ JR Z,PD_EOff 0727+++8F77~ JR C,PD_SorE 0728+++8F77~ ADD A,96 0729+++8F77~ JR C,PD_NOTE 0730+++8F77~ ADD A,E 0731+++8F77~ JR C,PD_ORN 0732+++8F77~ ADD A,D 0733+++8F77~ JR C,PD_NOIS 0734+++8F77~ ADD A,E 0735+++8F77~ JR C,PD_ESAM 0736+++8F77~ ADD A,A 0737+++8F77~ LD E,A 0738+++8F77~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8F77~ ADD HL,DE 0740+++8F77~ LD E,(HL) 0741+++8F77~ INC HL 0742+++8F77~ LD D,(HL) 0743+++8F77~ PUSH DE 0744+++8F77~ JR PD_LOOP 0745+++8F77~ 0746+++8F77~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8F77~ JR PD_LP2 0748+++8F77~ 0749+++8F77~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8F77~ JR PD_RES 0751+++8F77~ 0752+++8F77~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8F77~ SET 0,(IX-12+CHP.Flags) 0754+++8F77~ XOR A 0755+++8F77~ 0756+++8F77~ PD_RES LD (PDSP_+1),SP 0757+++8F77~ LD SP,IX 0758+++8F77~ LD H,A 0759+++8F77~ LD L,A 0760+++8F77~ PUSH HL 0761+++8F77~ PUSH HL 0762+++8F77~ PUSH HL 0763+++8F77~ PUSH HL 0764+++8F77~ PUSH HL 0765+++8F77~ PUSH HL 0766+++8F77~ PDSP_ LD SP,#3131 0767+++8F77~ 0768+++8F77~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8F77~ LD (IX-12+CHP.NtSkCn),A 0770+++8F77~ RET 0771+++8F77~ 0772+++8F77~ C_PORTM LD A,(BC) 0773+++8F77~ INC BC 0774+++8F77~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8F77~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8F77~ INC BC 0777+++8F77~ INC BC 0778+++8F77~ EX AF,AF' 0779+++8F77~ LD A,(BC) ;SIGNED TONE STEP 0780+++8F77~ INC BC 0781+++8F77~ LD (LoStep),A 0782+++8F77~ LD A,(BC) 0783+++8F77~ INC BC 0784+++8F77~ AND A 0785+++8F77~ EX AF,AF' 0786+++8F77~ LD L,(IX-12+CHP.CrTnSl) 0787+++8F77~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8F77~ 0789+++8F77~ ;Set portamento variables 0790+++8F77~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8F77~ 0792+++8F77~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8F77~ LD (IX-12+CHP.TnSlDl),A 0794+++8F77~ LD (IX-12+CHP.TSlCnt),A 0795+++8F77~ PUSH HL 0796+++8F77~ LD DE,NT_ 0797+++8F77~ LD A,(IX-12+CHP.Note) 0798+++8F77~ LD (IX-12+CHP.SlToNt),A 0799+++8F77~ ADD A,A 0800+++8F77~ LD L,A 0801+++8F77~ LD H,0 0802+++8F77~ ADD HL,DE 0803+++8F77~ LD A,(HL) 0804+++8F77~ INC HL 0805+++8F77~ LD H,(HL) 0806+++8F77~ LD L,A 0807+++8F77~ PUSH HL 0808+++8F77~ PrNote LD A,#3E 0809+++8F77~ LD (IX-12+CHP.Note),A 0810+++8F77~ ADD A,A 0811+++8F77~ LD L,A 0812+++8F77~ LD H,0 0813+++8F77~ ADD HL,DE 0814+++8F77~ LD E,(HL) 0815+++8F77~ INC HL 0816+++8F77~ LD D,(HL) 0817+++8F77~ POP HL 0818+++8F77~ SBC HL,DE 0819+++8F77~ LD (IX-12+CHP.TnDelt),L 0820+++8F77~ LD (IX-12+CHP.TnDelt+1),H 0821+++8F77~ POP DE 0822+++8F77~ Version EQU $+1 0823+++8F77~ LD A,#3E 0824+++8F77~ CP 6 0825+++8F77~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8F77~ PrSlide LD DE,#1111 0827+++8F77~ LD (IX-12+CHP.CrTnSl),E 0828+++8F77~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8F77~ LoStep EQU $+1 0830+++8F77~ OLDPRTM LD A,#3E 0831+++8F77~ EX AF,AF' 0832+++8F77~ JR Z,NOSIG 0833+++8F77~ EX DE,HL 0834+++8F77~ NOSIG SBC HL,DE 0835+++8F77~ JP P,SET_STP 0836+++8F77~ CPL 0837+++8F77~ EX AF,AF' 0838+++8F77~ NEG 0839+++8F77~ EX AF,AF' 0840+++8F77~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8F77~ EX AF,AF' 0842+++8F77~ LD (IX-12+CHP.TSlStp),A 0843+++8F77~ LD (IX-12+CHP.COnOff),0 0844+++8F77~ RET 0845+++8F77~ 0846+++8F77~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8F77~ LD A,(BC) 0848+++8F77~ INC BC 0849+++8F77~ LD (IX-12+CHP.TnSlDl),A 0850+++8F77~ AND A 0851+++8F77~ JR NZ,GL36 0852+++8F77~ LD A,(Version) ;AlCo PT3.7+ 0853+++8F77~ CP 7 0854+++8F77~ SBC A,A 0855+++8F77~ INC A 0856+++8F77~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8F77~ LD A,(BC) 0858+++8F77~ INC BC 0859+++8F77~ EX AF,AF' 0860+++8F77~ LD A,(BC) 0861+++8F77~ INC BC 0862+++8F77~ JR SET_STP 0863+++8F77~ 0864+++8F77~ C_SMPOS LD A,(BC) 0865+++8F77~ INC BC 0866+++8F77~ LD (IX-12+CHP.PsInSm),A 0867+++8F77~ RET 0868+++8F77~ 0869+++8F77~ C_ORPOS LD A,(BC) 0870+++8F77~ INC BC 0871+++8F77~ LD (IX-12+CHP.PsInOr),A 0872+++8F77~ RET 0873+++8F77~ 0874+++8F77~ C_VIBRT LD A,(BC) 0875+++8F77~ INC BC 0876+++8F77~ LD (IX-12+CHP.OnOffD),A 0877+++8F77~ LD (IX-12+CHP.COnOff),A 0878+++8F77~ LD A,(BC) 0879+++8F77~ INC BC 0880+++8F77~ LD (IX-12+CHP.OffOnD),A 0881+++8F77~ XOR A 0882+++8F77~ LD (IX-12+CHP.TSlCnt),A 0883+++8F77~ LD (IX-12+CHP.CrTnSl),A 0884+++8F77~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8F77~ RET 0886+++8F77~ 0887+++8F77~ C_ENGLS LD A,(BC) 0888+++8F77~ INC BC 0889+++8F77~ LD (IY-100+VRS.Env_Del),A 0890+++8F77~ LD (IY-100+VRS.CurEDel),A 0891+++8F77~ LD A,(BC) 0892+++8F77~ INC BC 0893+++8F77~ LD L,A 0894+++8F77~ LD A,(BC) 0895+++8F77~ INC BC 0896+++8F77~ LD H,A 0897+++8F77~ LD (IY-100+VRS.ESldAdd),L 0898+++8F77~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8F77~ RET 0900+++8F77~ 0901+++8F77~ C_DELAY LD A,(BC) 0902+++8F77~ INC BC 0903+++8F77~ LD (IY-100+VRS.Delay),A 0904+++8F77~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8F77~ BIT 1,(HL) 0906+++8F77~ RET Z 0907+++8F77~ LD (VARS1+VRS.Delay),A 0908+++8F77~ LD (VARS1+VRS.DelyCnt),A 0909+++8F77~ LD (VARS2+VRS.Delay),A 0910+++8F77~ RET 0911+++8F77~ 0912+++8F77~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8F77~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8F77~ LD A,(BC) 0915+++8F77~ INC BC 0916+++8F77~ LD H,A 0917+++8F77~ LD A,(BC) 0918+++8F77~ INC BC 0919+++8F77~ LD L,A 0920+++8F77~ CALL SETENBS 0921+++8F77~ XOR A 0922+++8F77~ LD (IX-12+CHP.PsInOr),A 0923+++8F77~ LD (IY-100+VRS.CurEDel),A 0924+++8F77~ LD H,A 0925+++8F77~ LD L,A 0926+++8F77~ JP SETESLD 0927+++8F77~ 0928+++8F77~ SETORN ADD A,A 0929+++8F77~ LD E,A 0930+++8F77~ LD D,0 0931+++8F77~ LD (IX-12+CHP.PsInOr),D 0932+++8F77~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8F77~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8F77~ ADD HL,DE 0935+++8F77~ LD E,(HL) 0936+++8F77~ INC HL 0937+++8F77~ LD D,(HL) 0938+++8F77~ LD L,(IY-100+VRS.MODADDR) 0939+++8F77~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8F77~ ADD HL,DE 0941+++8F77~ LD (IX-12+CHP.OrnPtr),L 0942+++8F77~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8F77~ C_NOP RET 0944+++8F77~ 0945+++8F77~ SETSAM ADD A,A 0946+++8F77~ LD E,A 0947+++8F77~ LD D,0 0948+++8F77~ LD L,(IY-100+VRS.SamPtrs); 0949+++8F77~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8F77~ ADD HL,DE 0951+++8F77~ LD E,(HL) 0952+++8F77~ INC HL 0953+++8F77~ LD D,(HL) 0954+++8F77~ LD L,(IY-100+VRS.MODADDR) 0955+++8F77~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8F77~ ADD HL,DE 0957+++8F77~ LD (IX-12+CHP.SamPtr),L 0958+++8F77~ LD (IX-12+CHP.SamPtr+1),H 0959+++8F77~ RET 0960+++8F77~ 0961+++8F77~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8F77~ SPCCOMS DW C_NOP 0963+++8F77~ DW C_GLISS 0964+++8F77~ DW C_PORTM 0965+++8F77~ DW C_SMPOS 0966+++8F77~ DW C_ORPOS 0967+++8F77~ DW C_VIBRT 0968+++8F77~ DW C_NOP 0969+++8F77~ DW C_NOP 0970+++8F77~ DW C_ENGLS 0971+++8F77~ DW C_DELAY 0972+++8F77~ DW C_NOP 0973+++8F77~ DW C_NOP 0974+++8F77~ DW C_NOP 0975+++8F77~ DW C_NOP 0976+++8F77~ DW C_NOP 0977+++8F77~ DW C_NOP 0978+++8F77~ 0979+++8F77~ CHREGS CALL GETIX 0980+++8F77~ XOR A 0981+++8F77~ LD (Ampl),A 0982+++8F77~ BIT 0,(IX+CHP.Flags) 0983+++8F77~ PUSH HL 0984+++8F77~ JP Z,CH_EXIT 0985+++8F77~ LD (CSP_+1),SP 0986+++8F77~ LD L,(IX+CHP.OrnPtr) 0987+++8F77~ LD H,(IX+CHP.OrnPtr+1) 0988+++8F77~ LD SP,HL 0989+++8F77~ POP DE 0990+++8F77~ LD H,A 0991+++8F77~ LD A,(IX+CHP.PsInOr) 0992+++8F77~ LD L,A 0993+++8F77~ ADD HL,SP 0994+++8F77~ INC A 0995+++8F77~ ;PT2 PT3 0996+++8F77~ OrnCP INC A ;CP E CP D 0997+++8F77~ JR C,CH_ORPS 0998+++8F77~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8F77~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8F77~ LD A,(IX+CHP.Note) 1001+++8F77~ ADD A,(HL) 1002+++8F77~ JP P,CH_NTP 1003+++8F77~ XOR A 1004+++8F77~ CH_NTP CP 96 1005+++8F77~ JR C,CH_NOK 1006+++8F77~ LD A,95 1007+++8F77~ CH_NOK ADD A,A 1008+++8F77~ EX AF,AF' 1009+++8F77~ LD L,(IX+CHP.SamPtr) 1010+++8F77~ LD H,(IX+CHP.SamPtr+1) 1011+++8F77~ LD SP,HL 1012+++8F77~ POP DE 1013+++8F77~ LD H,0 1014+++8F77~ LD A,(IX+CHP.PsInSm) 1015+++8F77~ LD B,A 1016+++8F77~ ADD A,A 1017+++8F77~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8F77~ LD L,A 1019+++8F77~ ADD HL,SP 1020+++8F77~ LD SP,HL 1021+++8F77~ LD A,B 1022+++8F77~ INC A 1023+++8F77~ ;PT2 PT3 1024+++8F77~ SamCP INC A ;CP E CP D 1025+++8F77~ JR C,CH_SMPS 1026+++8F77~ SamLD DB 1 ;LD A,D LD A,E 1027+++8F77~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8F77~ POP BC 1029+++8F77~ POP HL 1030+++8F77~ 1031+++8F77~ ;Convert PT2 sample to PT3 1032+++8F77~ ;PT2 PT3 1033+++8F77~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8F77~ POP HL 1035+++8F77~ LD H,B 1036+++8F77~ JR NZ,$+8 1037+++8F77~ EX DE,HL 1038+++8F77~ AND A 1039+++8F77~ SBC HL,HL 1040+++8F77~ SBC HL,DE 1041+++8F77~ LD D,C 1042+++8F77~ RR C 1043+++8F77~ SBC A,A 1044+++8F77~ CPL 1045+++8F77~ AND #3E 1046+++8F77~ RR C 1047+++8F77~ RR B 1048+++8F77~ AND C 1049+++8F77~ LD C,A 1050+++8F77~ LD A,B 1051+++8F77~ RRA 1052+++8F77~ RRA 1053+++8F77~ RR D 1054+++8F77~ RRA 1055+++8F77~ AND #9F 1056+++8F77~ LD B,A 1057+++8F77~ 1058+++8F77~ e_ LD E,(IX+CHP.TnAcc) 1059+++8F77~ LD D,(IX+CHP.TnAcc+1) 1060+++8F77~ ADD HL,DE 1061+++8F77~ BIT 6,B 1062+++8F77~ JR Z,CH_NOAC 1063+++8F77~ LD (IX+CHP.TnAcc),L 1064+++8F77~ LD (IX+CHP.TnAcc+1),H 1065+++8F77~ CH_NOAC EX DE,HL 1066+++8F77~ EX AF,AF' 1067+++8F77~ ADD A,NT_&255 1068+++8F77~ LD L,A 1069+++8F77~ ADC A,NT_/256 1070+++8F77~ SUB L 1071+++8F77~ LD H,A 1072+++8F77~ LD SP,HL 1073+++8F77~ POP HL 1074+++8F77~ ADD HL,DE 1075+++8F77~ LD E,(IX+CHP.CrTnSl) 1076+++8F77~ LD D,(IX+CHP.CrTnSl+1) 1077+++8F77~ ADD HL,DE 1078+++8F77~ CSP_ LD SP,#3131 1079+++8F77~ EX (SP),HL 1080+++8F77~ XOR A 1081+++8F77~ OR (IX+CHP.TSlCnt) 1082+++8F77~ JR Z,CH_AMP 1083+++8F77~ DEC (IX+CHP.TSlCnt) 1084+++8F77~ JR NZ,CH_AMP 1085+++8F77~ LD A,(IX+CHP.TnSlDl) 1086+++8F77~ LD (IX+CHP.TSlCnt),A 1087+++8F77~ LD L,(IX+CHP.TSlStp) 1088+++8F77~ LD H,(IX+CHP.TSlStp+1) 1089+++8F77~ LD A,H 1090+++8F77~ ADD HL,DE 1091+++8F77~ LD (IX+CHP.CrTnSl),L 1092+++8F77~ LD (IX+CHP.CrTnSl+1),H 1093+++8F77~ BIT 2,(IX+CHP.Flags) 1094+++8F77~ JR NZ,CH_AMP 1095+++8F77~ LD E,(IX+CHP.TnDelt) 1096+++8F77~ LD D,(IX+CHP.TnDelt+1) 1097+++8F77~ AND A 1098+++8F77~ JR Z,CH_STPP 1099+++8F77~ EX DE,HL 1100+++8F77~ CH_STPP SBC HL,DE 1101+++8F77~ JP M,CH_AMP 1102+++8F77~ LD A,(IX+CHP.SlToNt) 1103+++8F77~ LD (IX+CHP.Note),A 1104+++8F77~ XOR A 1105+++8F77~ LD (IX+CHP.TSlCnt),A 1106+++8F77~ LD (IX+CHP.CrTnSl),A 1107+++8F77~ LD (IX+CHP.CrTnSl+1),A 1108+++8F77~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8F77~ BIT 7,C 1110+++8F77~ JR Z,CH_NOAM 1111+++8F77~ BIT 6,C 1112+++8F77~ JR Z,CH_AMIN 1113+++8F77~ CP 15 1114+++8F77~ JR Z,CH_NOAM 1115+++8F77~ INC A 1116+++8F77~ JR CH_SVAM 1117+++8F77~ CH_AMIN CP -15 1118+++8F77~ JR Z,CH_NOAM 1119+++8F77~ DEC A 1120+++8F77~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8F77~ CH_NOAM LD L,A 1122+++8F77~ LD A,B 1123+++8F77~ AND 15 1124+++8F77~ ADD A,L 1125+++8F77~ JP P,CH_APOS 1126+++8F77~ XOR A 1127+++8F77~ CH_APOS CP 16 1128+++8F77~ JR C,CH_VOL 1129+++8F77~ LD A,15 1130+++8F77~ CH_VOL OR (IX+CHP.Volume) 1131+++8F77~ ADD A,VT_&255 1132+++8F77~ LD L,A 1133+++8F77~ ADC A,VT_/256 1134+++8F77~ SUB L 1135+++8F77~ LD H,A 1136+++8F77~ LD A,(HL) 1137+++8F77~ CH_ENV BIT 0,C 1138+++8F77~ JR NZ,CH_NOEN 1139+++8F77~ OR (IX+CHP.Env_En) 1140+++8F77~ CH_NOEN LD (Ampl),A 1141+++8F77~ BIT 7,B 1142+++8F77~ LD A,C 1143+++8F77~ JR Z,NO_ENSL 1144+++8F77~ RLA 1145+++8F77~ RLA 1146+++8F77~ SRA A 1147+++8F77~ SRA A 1148+++8F77~ SRA A 1149+++8F77~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8F77~ BIT 5,B 1151+++8F77~ JR Z,NO_ENAC 1152+++8F77~ LD (IX+CHP.CrEnSl),A 1153+++8F77~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8F77~ LD (IY-100+VRS.AddToEn),A 1155+++8F77~ JR CH_MIX 1156+++8F77~ NO_ENSL RRA 1157+++8F77~ ADD A,(IX+CHP.CrNsSl) 1158+++8F77~ LD (IY-100+VRS.AddToNs),A 1159+++8F77~ BIT 5,B 1160+++8F77~ JR Z,CH_MIX 1161+++8F77~ LD (IX+CHP.CrNsSl),A 1162+++8F77~ CH_MIX LD A,B 1163+++8F77~ RRA 1164+++8F77~ AND #48 1165+++8F77~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8F77~ RRCA 1167+++8F77~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8F77~ POP HL 1169+++8F77~ XOR A 1170+++8F77~ OR (IX+CHP.COnOff) 1171+++8F77~ RET Z 1172+++8F77~ DEC (IX+CHP.COnOff) 1173+++8F77~ RET NZ 1174+++8F77~ XOR (IX+CHP.Flags) 1175+++8F77~ LD (IX+CHP.Flags),A 1176+++8F77~ RRA 1177+++8F77~ LD A,(IX+CHP.OnOffD) 1178+++8F77~ JR C,CH_ONDL 1179+++8F77~ LD A,(IX+CHP.OffOnD) 1180+++8F77~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8F77~ RET 1182+++8F77~ 1183+++8F77~ PLAY_ XOR A 1184+++8F77~ LD (IY-100+VRS.AddToEn),A 1185+++8F77~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8F77~ DEC A 1187+++8F77~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8F77~ DEC (IY-100+VRS.DelyCnt) 1189+++8F77~ JP NZ,PL2 1190+++8F77~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8F77~ JR NZ,PL1B 1192+++8F77~ LD C,(IY-100+VRS.AdInPtA) 1193+++8F77~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8F77~ LD A,(BC) 1195+++8F77~ AND A 1196+++8F77~ JR NZ,PL1A 1197+++8F77~ LD D,A 1198+++8F77~ LD (IY-100+VRS.Ns_Base),A 1199+++8F77~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8F77~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8F77~ INC HL 1202+++8F77~ LD A,(HL) 1203+++8F77~ INC A 1204+++8F77~ JR NZ,PLNLP 1205+++8F77~ 1206+++8F77~ IF LoopChecker 1207+++8F77~ CALL CHECKLP 1208+++8F77~ ENDIF 1209+++8F77~ 1210+++8F77~ LD L,(IY-100+VRS.LPosPtr) 1211+++8F77~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8F77~ LD A,(HL) 1213+++8F77~ INC A 1214+++8F77~ PLNLP CALL SETCPPT 1215+++8F77~ DEC A 1216+++8F77~ BIT 1,(IY-100+VRS.ModNum) 1217+++8F77~ JR Z,NoAlCo 1218+++8F77~ TSSub EQU $+1 1219+++8F77~ SUB #D6 1220+++8F77~ CPL 1221+++8F77~ NoAlCo 1222+++8F77~ ;PT2 PT3 1223+++8F77~ PsCalc DEC A ;ADD A,A NOP 1224+++8F77~ DEC A ;ADD A,(HL) NOP 1225+++8F77~ ADD A,A 1226+++8F77~ LD E,A 1227+++8F77~ RL D 1228+++8F77~ 1229+++8F77~ IF CurPosCounter 1230+++8F77~ LD A,L 1231+++8F77~ SUB (IY-100+VRS.PosSub) 1232+++8F77~ LD (IY-100+VRS.CurPos),A 1233+++8F77~ ENDIF 1234+++8F77~ 1235+++8F77~ LD L,(IY-100+VRS.PatsPtr) 1236+++8F77~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8F77~ ADD HL,DE 1238+++8F77~ LD E,(IY-100+VRS.MODADDR) 1239+++8F77~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8F77~ LD (PSP_+1),SP 1241+++8F77~ LD SP,HL 1242+++8F77~ POP HL 1243+++8F77~ ADD HL,DE 1244+++8F77~ LD B,H 1245+++8F77~ LD C,L 1246+++8F77~ POP HL 1247+++8F77~ ADD HL,DE 1248+++8F77~ LD (IY-100+VRS.AdInPtB),L 1249+++8F77~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8F77~ POP HL 1251+++8F77~ ADD HL,DE 1252+++8F77~ LD (IY-100+VRS.AdInPtC),L 1253+++8F77~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8F77~ PSP_ LD SP,#3131 1255+++8F77~ PL1A LD DE,VRS.ChanA+12-100 1256+++8F77~ CALL PTDECOD 1257+++8F77~ LD (IY-100+VRS.AdInPtA),C 1258+++8F77~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8F77~ 1260+++8F77~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8F77~ JR NZ,PL1C 1262+++8F77~ LD DE,VRS.ChanB+12-100 1263+++8F77~ LD C,(IY-100+VRS.AdInPtB) 1264+++8F77~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8F77~ CALL PTDECOD 1266+++8F77~ LD (IY-100+VRS.AdInPtB),C 1267+++8F77~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8F77~ 1269+++8F77~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8F77~ JR NZ,PL1D 1271+++8F77~ LD DE,VRS.ChanC+12-100 1272+++8F77~ LD C,(IY-100+VRS.AdInPtC) 1273+++8F77~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8F77~ CALL PTDECOD 1275+++8F77~ LD (IY-100+VRS.AdInPtC),C 1276+++8F77~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8F77~ 1278+++8F77~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8F77~ LD (IY-100+VRS.DelyCnt),A 1280+++8F77~ 1281+++8F77~ PL2 LD DE,VRS.ChanA-100 1282+++8F77~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8F77~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8F77~ CALL CHREGS 1285+++8F77~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8F77~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8F77~ Ampl EQU $+1 1288+++8F77~ LD A,#3E 1289+++8F77~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8F77~ LD DE,VRS.ChanB-100 1291+++8F77~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8F77~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8F77~ CALL CHREGS 1294+++8F77~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8F77~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8F77~ LD A,(Ampl) 1297+++8F77~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8F77~ LD DE,VRS.ChanC-100 1299+++8F77~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8F77~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8F77~ CALL CHREGS 1302+++8F77~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8F77~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8F77~ LD A,(Ampl) 1305+++8F77~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8F77~ 1307+++8F77~ LD A,(IY-100+VRS.Ns_Base) 1308+++8F77~ ADD (IY-100+VRS.AddToNs) 1309+++8F77~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8F77~ 1311+++8F77~ LD A,(IY-100+VRS.AddToEn) 1312+++8F77~ LD E,A 1313+++8F77~ ADD A,A 1314+++8F77~ SBC A,A 1315+++8F77~ LD D,A 1316+++8F77~ LD L,(IY-100+VRS.EnvBase) 1317+++8F77~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8F77~ ADD HL,DE 1319+++8F77~ LD E,(IY-100+VRS.CurESld) 1320+++8F77~ LD D,(IY-100+VRS.CurESld+1) 1321+++8F77~ ADD HL,DE 1322+++8F77~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8F77~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8F77~ 1325+++8F77~ XOR A 1326+++8F77~ OR (IY-100+VRS.CurEDel) 1327+++8F77~ RET Z 1328+++8F77~ DEC (IY-100+VRS.CurEDel) 1329+++8F77~ RET NZ 1330+++8F77~ LD A,(IY-100+VRS.Env_Del) 1331+++8F77~ LD (IY-100+VRS.CurEDel),A 1332+++8F77~ LD L,(IY-100+VRS.ESldAdd) 1333+++8F77~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8F77~ ADD HL,DE 1335+++8F77~ JP SETESLD 1336+++8F77~ 1337+++8F77~ PLAY LD IY,VARS1+100 1338+++8F77~ CALL PLAY_ 1339+++8F77~ LD A,(is_ts) 1340+++8F77~ AND A 1341+++8F77~ JR Z,PL_nts 1342+++8F77~ LD IY,VARS2+100 1343+++8F77~ CALL PLAY_ 1344+++8F77~ PL_nts 1345+++8F77~ IF Basic 1346+++8F77~ LD IY,#5C3A 1347+++8F77~ ENDIF 1348+++8F77~ 1349+++8F77~ ROUT LD BC,#FFFD 1350+++8F77~ LD A,(is_ts) 1351+++8F77~ AND A 1352+++8F77~ IFDEF ONtfm 1353+++8F77~ LD L,#F9 1354+++8F77~ OUT (C),L 1355+++8F77~ ELSE 1356+++8F77~ JR Z,r_nts ;keep old standard 1357+++8F77~ OUT (C),B 1358+++8F77~ ENDIF 1359+++8F77~ r_nts EX AF,AF' 1360+++8F77~ 1361+++8F77~ IF ACBBAC 1362+++8F77~ LD IX,VARS1+VRS.AYREGS 1363+++8F77~ ELSE 1364+++8F77~ LD HL,VARS1+VRS.AYREGS 1365+++8F77~ ENDIF 1366+++8F77~ 1367+++8F77~ CALL ROUT_ 1368+++8F77~ EX AF,AF' 1369+++8F77~ RET Z 1370+++8F77~ LD B,D 1371+++8F77~ 1372+++8F77~ IFDEF ONtfm 1373+++8F77~ LD A,#F8 1374+++8F77~ ELSE 1375+++8F77~ CPL 1376+++8F77~ ENDIF 1377+++8F77~ OUT (C),A 1378+++8F77~ 1379+++8F77~ IF ACBBAC 1380+++8F77~ LD IX,VARS2+VRS.AYREGS 1381+++8F77~ ELSE 1382+++8F77~ LD HL,VARS2+VRS.AYREGS 1383+++8F77~ ENDIF 1384+++8F77~ 1385+++8F77~ ROUT_ 1386+++8F77~ IF ACBBAC 1387+++8F77~ LD A,(SETUP) 1388+++8F77~ AND 12 1389+++8F77~ JR Z,ABC 1390+++8F77~ ADD A,CHTABLE 1391+++8F77~ LD E,A 1392+++8F77~ ADC A,CHTABLE/256 1393+++8F77~ SUB E 1394+++8F77~ LD D,A 1395+++8F77~ LD B,0 1396+++8F77~ PUSH IX 1397+++8F77~ POP HL 1398+++8F77~ LD A,(DE) 1399+++8F77~ INC DE 1400+++8F77~ LD C,A 1401+++8F77~ ADD HL,BC 1402+++8F77~ LD A,(IX+TonB) 1403+++8F77~ LD C,(HL) 1404+++8F77~ LD (IX+TonB),C 1405+++8F77~ LD (HL),A 1406+++8F77~ INC HL 1407+++8F77~ LD A,(IX+TonB+1) 1408+++8F77~ LD C,(HL) 1409+++8F77~ LD (IX+TonB+1),C 1410+++8F77~ LD (HL),A 1411+++8F77~ LD A,(DE) 1412+++8F77~ INC DE 1413+++8F77~ LD C,A 1414+++8F77~ ADD HL,BC 1415+++8F77~ LD A,(IX+AmplB) 1416+++8F77~ LD C,(HL) 1417+++8F77~ LD (IX+AmplB),C 1418+++8F77~ LD (HL),A 1419+++8F77~ LD A,(DE) 1420+++8F77~ INC DE 1421+++8F77~ LD (RxCA1),A 1422+++8F77~ XOR 8 1423+++8F77~ LD (RxCA2),A 1424+++8F77~ LD A,(DE) 1425+++8F77~ AND (IX+Mixer) 1426+++8F77~ LD E,A 1427+++8F77~ LD A,(IX+Mixer) 1428+++8F77~ RxCA1 DB #E6 1429+++8F77~ AND %010010 1430+++8F77~ OR E 1431+++8F77~ LD E,A 1432+++8F77~ LD A,(IX+Mixer) 1433+++8F77~ AND %010010 1434+++8F77~ RxCA2 OR E 1435+++8F77~ OR E 1436+++8F77~ LD (IX+Mixer),A 1437+++8F77~ ABC 1438+++8F77~ ENDIF 1439+++8F77~ 1440+++8F77~ XOR A 1441+++8F77~ LD DE,#FFBF 1442+++8F77~ 1443+++8F77~ IF ACBBAC 1444+++8F77~ LD BC,#FFFD 1445+++8F77~ PUSH IX 1446+++8F77~ POP HL 1447+++8F77~ ENDIF 1448+++8F77~ 1449+++8F77~ LOUT 1450+++8F77~ IFDEF ONtfm 1451+++8F77~ INF 1452+++8F77~ JP M,$-2 1453+++8F77~ ENDIF 1454+++8F77~ OUT (C),A 1455+++8F77~ IFDEF ONtfm 1456+++8F77~ INF 1457+++8F77~ JP M,$-2 1458+++8F77~ ENDIF 1459+++8F77~ LD B,E 1460+++8F77~ OUTI 1461+++8F77~ LD B,D 1462+++8F77~ INC A 1463+++8F77~ CP 13 1464+++8F77~ JR NZ,LOUT 1465+++8F77~ IFDEF ONtfm 1466+++8F77~ INF 1467+++8F77~ JP M,$-2 1468+++8F77~ ENDIF 1469+++8F77~ OUT (C),A 1470+++8F77~ LD A,(HL) 1471+++8F77~ AND A 1472+++8F77~ RET M 1473+++8F77~ IFDEF ONtfm 1474+++8F77~ INF 1475+++8F77~ JP M,$-2 1476+++8F77~ ENDIF 1477+++8F77~ LD B,E 1478+++8F77~ OUT (C),A 1479+++8F77~ RET 1480+++8F77~ 1481+++8F77~ IF ACBBAC 1482+++8F77~ CHTABLE EQU $-4 1483+++8F77~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8F77~ ENDIF 1485+++8F77~ 1486+++8F77~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8F77~ DB TCNEW_0-T_ 1488+++8F77~ DB (T_OLD_0-T1_)*2+1 1489+++8F77~ DB TCOLD_0-T_ 1490+++8F77~ DB (T_NEW_1-T1_)*2+1 1491+++8F77~ DB TCNEW_1-T_ 1492+++8F77~ DB (T_OLD_1-T1_)*2+1 1493+++8F77~ DB TCOLD_1-T_ 1494+++8F77~ DB (T_NEW_2-T1_)*2 1495+++8F77~ DB TCNEW_2-T_ 1496+++8F77~ DB (T_OLD_2-T1_)*2 1497+++8F77~ DB TCOLD_2-T_ 1498+++8F77~ DB (T_NEW_3-T1_)*2 1499+++8F77~ DB TCNEW_3-T_ 1500+++8F77~ DB (T_OLD_3-T1_)*2 1501+++8F77~ DB TCOLD_3-T_ 1502+++8F77~ 1503+++8F77~ T_ 1504+++8F77~ 1505+++8F77~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8F77~ DB #18+1,#24+1,#3C+1,0 1507+++8F77~ TCOLD_1 DB #5C+1,0 1508+++8F77~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8F77~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8F77~ TCNEW_3 DB #56+1 1511+++8F77~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8F77~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8F77~ DB #BC+1,#BE+1,0 1514+++8F77~ TCNEW_1 EQU TCOLD_1 1515+++8F77~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8F77~ DB #BA+1,#BC+1,#BE+1,0 1517+++8F77~ 1518+++8F77~ PT3EMPTYORN EQU $-1 1519+++8F77~ DB 1,0 1520+++8F77~ 1521+++8F77~ ;first 12 values of tone tables (packed) 1522+++8F77~ 1523+++8F77~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8F77~ DB #0755-#06EC 1525+++8F77~ DB #07C5-#0755 1526+++8F77~ DB #083B-#07C5 1527+++8F77~ DB #08B8-#083B 1528+++8F77~ DB #093D-#08B8 1529+++8F77~ DB #09CA-#093D 1530+++8F77~ DB #0A5F-#09CA 1531+++8F77~ DB #0AFC-#0A5F 1532+++8F77~ DB #0BA4-#0AFC 1533+++8F77~ DB #0C55-#0BA4 1534+++8F77~ DB #0D10-#0C55 1535+++8F77~ DB #066D*2/256,#066D*2&255 1536+++8F77~ DB #06CF-#066D 1537+++8F77~ DB #0737-#06CF 1538+++8F77~ DB #07A4-#0737 1539+++8F77~ DB #0819-#07A4 1540+++8F77~ DB #0894-#0819 1541+++8F77~ DB #0917-#0894 1542+++8F77~ DB #09A1-#0917 1543+++8F77~ DB #0A33-#09A1 1544+++8F77~ DB #0ACF-#0A33 1545+++8F77~ DB #0B73-#0ACF 1546+++8F77~ DB #0C22-#0B73 1547+++8F77~ DB #0CDA-#0C22 1548+++8F77~ DB #0704*2/256,#0704*2&255 1549+++8F77~ DB #076E-#0704 1550+++8F77~ DB #07E0-#076E 1551+++8F77~ DB #0858-#07E0 1552+++8F77~ DB #08D6-#0858 1553+++8F77~ DB #095C-#08D6 1554+++8F77~ DB #09EC-#095C 1555+++8F77~ DB #0A82-#09EC 1556+++8F77~ DB #0B22-#0A82 1557+++8F77~ DB #0BCC-#0B22 1558+++8F77~ DB #0C80-#0BCC 1559+++8F77~ DB #0D3E-#0C80 1560+++8F77~ DB #07E0*2/256,#07E0*2&255 1561+++8F77~ DB #0858-#07E0 1562+++8F77~ DB #08E0-#0858 1563+++8F77~ DB #0960-#08E0 1564+++8F77~ DB #09F0-#0960 1565+++8F77~ DB #0A88-#09F0 1566+++8F77~ DB #0B28-#0A88 1567+++8F77~ DB #0BD8-#0B28 1568+++8F77~ DB #0C80-#0BD8 1569+++8F77~ DB #0D60-#0C80 1570+++8F77~ DB #0E10-#0D60 1571+++8F77~ DB #0EF8-#0E10 1572+++8F77~ 1573+++8F77~ ;vars from here can be stripped 1574+++8F77~ ;you can move VARS to any other address 1575+++8F77~ 1576+++8F77~ VARS 1577+++8F77~ 1578+++8F77~ is_ts DB 0 1579+++8F77~ 1580+++8F77~ ;ChannelsVars 1581+++8F77~ STRUCT CHP 1582+++8F77~ ;reset group 1583+++8F77~ PsInOr DB 0 1584+++8F77~ PsInSm DB 0 1585+++8F77~ CrAmSl DB 0 1586+++8F77~ CrNsSl DB 0 1587+++8F77~ CrEnSl DB 0 1588+++8F77~ TSlCnt DB 0 1589+++8F77~ CrTnSl DW 0 1590+++8F77~ TnAcc DW 0 1591+++8F77~ COnOff DB 0 1592+++8F77~ ;reset group 1593+++8F77~ 1594+++8F77~ OnOffD DB 0 1595+++8F77~ 1596+++8F77~ ;IX for PTDECOD here (+12) 1597+++8F77~ OffOnD DB 0 1598+++8F77~ OrnPtr DW 0 1599+++8F77~ SamPtr DW 0 1600+++8F77~ NNtSkp DB 0 1601+++8F77~ Note DB 0 1602+++8F77~ SlToNt DB 0 1603+++8F77~ Env_En DB 0 1604+++8F77~ Flags DB 0 1605+++8F77~ ;Enabled - 0, SimpleGliss - 2 1606+++8F77~ TnSlDl DB 0 1607+++8F77~ TSlStp DW 0 1608+++8F77~ TnDelt DW 0 1609+++8F77~ NtSkCn DB 0 1610+++8F77~ Volume DB 0 1611+++8F77~ ENDS 1612+++8F77~ 1613+++8F77~ STRUCT VRS 1614+++8F77~ 1615+++8F77~ ;IF not works in STRUCT in SjASM :( 1616+++8F77~ ; IF CurPosCounter 1617+++8F77~ CurPos DB 0 1618+++8F77~ PosSub DB 0 1619+++8F77~ ; ENDIF 1620+++8F77~ 1621+++8F77~ ModNum DB 0 ;bit0: ChipNum 1622+++8F77~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8F77~ 1624+++8F77~ ChanA DS CHP 1625+++8F77~ ChanB DS CHP 1626+++8F77~ ChanC DS CHP 1627+++8F77~ 1628+++8F77~ ;GlobalVars 1629+++8F77~ MODADDR DW 0 1630+++8F77~ OrnPtrs DW 0 1631+++8F77~ SamPtrs DW 0 1632+++8F77~ PatsPtr DW 0 1633+++8F77~ AdInPtA DW 0 1634+++8F77~ AdInPtB DW 0 1635+++8F77~ AdInPtC DW 0 1636+++8F77~ CrPsPtr DW 0 1637+++8F77~ LPosPtr DW 0 1638+++8F77~ Delay DB 0 1639+++8F77~ DelyCnt DB 0 1640+++8F77~ ESldAdd DW 0 1641+++8F77~ CurESld DW 0 1642+++8F77~ Env_Del DB 0 1643+++8F77~ CurEDel DB 0 1644+++8F77~ Ns_Base DB 0 1645+++8F77~ AddToNs DB 0 1646+++8F77~ AddToEn DB 0 1647+++8F77~ EnvBase DW 0 1648+++8F77~ AYREGS DS 14 1649+++8F77~ ENDS 1650+++8F77~ 1651+++8F77~ VARS1 DS VRS 1652+++8F77~ VARS2 DS VRS 1653+++8F77~ 1654+++8F77~ VT_ EQU $-16 1655+++8F77~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8F77~ 1657+++8F77~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8F77~ 1659+++8F77~ T_OLD_1 EQU T1_ 1660+++8F77~ T_OLD_2 EQU T_OLD_1+24 1661+++8F77~ T_OLD_3 EQU T_OLD_2+24 1662+++8F77~ T_OLD_0 EQU T_OLD_3+2 1663+++8F77~ T_NEW_0 EQU T_OLD_0 1664+++8F77~ T_NEW_1 EQU T_OLD_1 1665+++8F77~ T_NEW_2 EQU T_NEW_0+24 1666+++8F77~ T_NEW_3 EQU T_OLD_3 1667+++8F77~ 1668+++8F77~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8F77~ 1670+++8F77~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8F77~ 1672+++8F77~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8F77~ 1674+++8F77~ VARSEND EQU $ 1675+++8F77~ MDLADDR EQU $ 1676+++8F77~ 1677+++8F77~ DISPLAY "PTS player size=",$-START 1678+++8F77~ 1679+++8F77~ ;Release 0 steps: 1680+++8F77~ ;04/21/2007 1681+++8F77~ ;Works start (PTxPlay adaptation); first beta. 1682+++8F77~ ;04/22/2007 1683+++8F77~ ;Job finished; beta-testing. 1684+++8F77~ ;04/23/2007 1685+++8F77~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8F77~ ;04/29/2007 1687+++8F77~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8F77~ ;modules of v3.7+. 1689+++8F77~ 1690+++8F77~ ;Size (minimal build for ZX Spectrum): 1691+++8F77~ ;Code block #908 bytes 1692+++8F77~ ;Variables #2BF bytes (can be stripped) 1693+++8F77~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8F77~ 1695+++8F77~ ENDMOD 1696+++8F77~ 1697+++8F77 endif 1698+++8F77 0099+++8F77 PT3.Play=PTS.PLAY 0100+++8F77 PT3.Mute=PTS.MUTE 0101+++8F77 PT3.End 0102+++8F77 0103+++8F77 display "PT3 module size: ",PT3.End-PT3.Start 0104+++8F77 0105+++8F77 endif 0106+++8F77 0419++ 8F77 include "pt2.asm" 0001+++8F77 ifndef _pt2_asm_defined 0002+++8F77 define _pt2_asm_defined 0003+++8F77 0004+++8F77 module PT2 0005+++8F77 0006+++8F77 struct Header 0007+++8F77~ Tempo db 0 ;02-ff 0008+++8F77~ Length db 0 ;01-ff 0009+++8F77~ Loop db 0 ;00-fe 0010+++8F77~ Samples 0011+++8F77~ ds 64 ;(? 00-36){32} 0012+++8F77~ Ornaments 0013+++8F77~ ds 32 ;(? 00-36){16} 0014+++8F77~ Patterns 0015+++8F77~ dw 0 ;? 00-01 0016+++8F77~ Name ds 30 ;? 0017+++8F77~ Positions 0018+++8F77~ db 0 ;00-1f 0019+++8F77~ db 0 ;ff|00-1f 0020+++8F77 ends 0021+++8F77 0022+++8F77 Start 0023+++8F77 ifndef NoPrologue 0024+++8F77~ ld hl,End 0025+++8F77~ jr Init 0026+++8F77~ jp PTS.PLAY 0027+++8F77~ jp PTS.MUTE 0028+++8F77 endif 0029+++8F77 0030+++8F77 3E 02 Init ld a,PTS.SETUP.PT2 0031+++8F79 C3 6C 83 jp PTS.INIT 0032+++8F7C 0033+++8F7C ifdef HaveFormatCheck 0034+++8F7C include "format.asm" 0001+++8F7C ;some format checking macros 0002+++8F7C ifndef _format_asm_defined 0003+++8F7C~ define _format_asm_defined 0004+++8F7C~ 0005+++8F7C~ macro LessOrEqual number 0006+++8F7C~ ld a,number 0007+++8F7C~ cp (hl) 0008+++8F7C~ inc hl 0009+++8F7C~ ret c 0010+++8F7C~ endm 0011+++8F7C~ 0012+++8F7C~ macro Greater number 0013+++8F7C~ ld a,(hl) 0014+++8F7C~ inc hl 0015+++8F7C~ cp number 0016+++8F7C~ ret c 0017+++8F7C~ endm 0018+++8F7C~ 0019+++8F7C~ macro AnyByte 0020+++8F7C~ inc hl 0021+++8F7C~ endm 0022+++8F7C~ 0023+++8F7C~ macro AnyBytes count 0024+++8F7C~ if count > 7 0025+++8F7C~ ld a,l 0026+++8F7C~ add a,count 0027+++8F7C~ ld l,a 0028+++8F7C~ adc a,h 0029+++8F7C~ sub l 0030+++8F7C~ ld h,a 0031+++8F7C~ else 0032+++8F7C~ dup count 0033+++8F7C~ inc hl 0034+++8F7C~ edup 0035+++8F7C~ endif 0036+++8F7C~ endm 0037+++8F7C~ 0038+++8F7C~ macro EqualTo number 0039+++8F7C~ ld a,number 0040+++8F7C~ cp (hl) 0041+++8F7C~ inc hl 0042+++8F7C~ ret nz 0043+++8F7C~ endm 0044+++8F7C~ 0045+++8F7C endif 0046+++8F7C 0035+++8F7C 0036+++8F7C ;in HL - module addr 0037+++8F7C ;out Z - is pt2 0038+++8F7C CheckFormat 0039+++8F7C ;Tempo 0040+++8F7C Greater 2 0040+++8F7C 7E > ld a,(hl) 0040+++8F7D 23 > inc hl 0040+++8F7E FE 02 > cp number 0040+++8F80 D8 > ret c 0041+++8F81 ;Length 0042+++8F81 Greater 1 0042+++8F81 7E > ld a,(hl) 0042+++8F82 23 > inc hl 0042+++8F83 FE 01 > cp number 0042+++8F85 D8 > ret c 0043+++8F86 ;Loop 0044+++8F86 LessOrEqual 254 0044+++8F86 3E FE > ld a,number 0044+++8F88 BE > cp (hl) 0044+++8F89 23 > inc hl 0044+++8F8A D8 > ret c 0045+++8F8B ;Samples+Ornaments 0046+++8F8B 06 30 ld b,(Header.Patterns-Header.Samples)/2 0047+++8F8D .samorns 0048+++8F8D AnyByte 0048+++8F8D 23 > inc hl 0049+++8F8E LessOrEqual #36 0049+++8F8E 3E 36 > ld a,number 0049+++8F90 BE > cp (hl) 0049+++8F91 23 > inc hl 0049+++8F92 D8 > ret c 0050+++8F93 10 F8 djnz .samorns 0051+++8F95 ;Patterns 0052+++8F95 AnyByte 0052+++8F95 23 > inc hl 0053+++8F96 LessOrEqual 1 0053+++8F96 3E 01 > ld a,number 0053+++8F98 BE > cp (hl) 0053+++8F99 23 > inc hl 0053+++8F9A D8 > ret c 0054+++8F9B ;Name 0055+++8F9B AnyBytes Header.Positions-Header.Name 0055+++8F9B 7D > ld a,l 0055+++8F9C C6 1E > add a,count 0055+++8F9E 6F > ld l,a 0055+++8F9F 8C > adc a,h 0055+++8FA0 95 > sub l 0055+++8FA1 67 > ld h,a 0056+++8FA2 ;Positions 0057+++8FA2 ;first should be not marker 0058+++8FA2 LessOrEqual #1f 0058+++8FA2 3E 1F > ld a,number 0058+++8FA4 BE > cp (hl) 0058+++8FA5 23 > inc hl 0058+++8FA6 D8 > ret c 0059+++8FA7 06 FF ld b,255 ;max positions 0060+++8FA9 .positions 0061+++8FA9 7E ld a,(hl) 0062+++8FAA FE FF cp 255 0063+++8FAC C8 ret z ;finish 0064+++8FAD LessOrEqual #1f 0064+++8FAD 3E 1F > ld a,number 0064+++8FAF BE > cp (hl) 0064+++8FB0 23 > inc hl 0064+++8FB1 D8 > ret c 0065+++8FB2 10 F5 djnz .positions 0066+++8FB4 ;fall through 0067+++8FB4 7C .fail ld a,h 0068+++8FB5 A7 and a ;reset Z 0069+++8FB6 C9 ret 0070+++8FB7 0071+++8FB7 display "PT2 checker size: ",$-CheckFormat 0072+++8FB7 endif 0073+++8FB7 0074+++8FB7 endmod 0075+++8FB7 0076+++8FB7 include "PTSPlay.asm" 0001+++8FB7 ifndef _pts_asm_defined 0002+++8FB7~ define _pts_asm_defined 0003+++8FB7~ 0004+++8FB7~ MODULE PTS 0005+++8FB7~ 0006+++8FB7~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8FB7~ ;(c)2004-2007 S.V.Bulba 0008+++8FB7~ ;Specially for AlCo 0009+++8FB7~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8FB7~ 0011+++8FB7~ ;Release number 0012+++8FB7~ Release EQU "0" 0013+++8FB7~ 0014+++8FB7~ ;Conditional assembly 0015+++8FB7~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8FB7~ CurPosCounter=0 0017+++8FB7~ ;2) Allow channels allocation bits at (SETUP) 0018+++8FB7~ ACBBAC=0 0019+++8FB7~ ;3) Allow loop checking and disabling 0020+++8FB7~ LoopChecker=0 0021+++8FB7~ ;4) Insert official identificator 0022+++8FB7~ Id=0 0023+++8FB7~ ;5) Set IY for correct return to ZX Basic 0024+++8FB7~ Basic=0 0025+++8FB7~ 0026+++8FB7~ ;Features 0027+++8FB7~ ;-------- 0028+++8FB7~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8FB7~ ; address). 0030+++8FB7~ ;-Variables (VARS) can be located at any address (not only after 0031+++8FB7~ ; code block). 0032+++8FB7~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8FB7~ ; generates both note and volume tables outside of code block 0034+++8FB7~ ; (in VARS). 0035+++8FB7~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8FB7~ ; PT3 module version). 0037+++8FB7~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8FB7~ ; and higher). 0039+++8FB7~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8FB7~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8FB7~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8FB7~ ;-See also notes at the end of this source code. 0043+++8FB7~ 0044+++8FB7~ ;Limitations 0045+++8FB7~ ;----------- 0046+++8FB7~ ;-Can run in RAM only (self-modified code is used). 0047+++8FB7~ ;-PT2 position list must be end by #FF marker only. 0048+++8FB7~ 0049+++8FB7~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8FB7~ ;into RAM or INIT subprogram was not called before. 0051+++8FB7~ 0052+++8FB7~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8FB7~ ;playing 0054+++8FB7~ 0055+++8FB7~ TonA EQU 0 0056+++8FB7~ TonB EQU 2 0057+++8FB7~ TonC EQU 4 0058+++8FB7~ Noise EQU 6 0059+++8FB7~ Mixer EQU 7 0060+++8FB7~ AmplA EQU 8 0061+++8FB7~ AmplB EQU 9 0062+++8FB7~ AmplC EQU 10 0063+++8FB7~ Env EQU 11 0064+++8FB7~ EnvTp EQU 13 0065+++8FB7~ 0066+++8FB7~ START 0067+++8FB7~ 0068+++8FB7~ SETUP.NOLOOP EQU 1 0069+++8FB7~ SETUP.PT2 EQU 2 0070+++8FB7~ SETUP.ACB EQU 4 0071+++8FB7~ SETUP.BAC EQU 8 0072+++8FB7~ SETUP.TS02 EQU 16 0073+++8FB7~ SETUP.TSPT3 EQU 32 0074+++8FB7~ 0075+++8FB7~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8FB7~ ;(optional); 0077+++8FB7~ ;set bit1 for PT2 and reset for PT3 before 0078+++8FB7~ ;calling INIT; 0079+++8FB7~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8FB7~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8FB7~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8FB7~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8FB7~ ;documented and must be converted to new standard. 0084+++8FB7~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8FB7~ ;module is passed (optional). 0086+++8FB7~ ;bit7 is set each time, when loop point of 1st TS 0087+++8FB7~ ;or of single module is passed (optional). 0088+++8FB7~ 0089+++8FB7~ ;Identifier 0090+++8FB7~ IF Id 0091+++8FB7~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8FB7~ ENDIF 0093+++8FB7~ 0094+++8FB7~ IF LoopChecker 0095+++8FB7~ CHECKLP LD HL,SETUP 0096+++8FB7~ BIT 0,(IY-100+VRS.ModNum) 0097+++8FB7~ JR Z,CHL1 0098+++8FB7~ SET 6,(HL) 0099+++8FB7~ JR CHL2 0100+++8FB7~ CHL1 SET 7,(HL) 0101+++8FB7~ CHL2 BIT 0,(HL) 0102+++8FB7~ RET Z 0103+++8FB7~ POP HL 0104+++8FB7~ INC (IY-100+VRS.DelyCnt) 0105+++8FB7~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8FB7~ XOR A 0107+++8FB7~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8FB7~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8FB7~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8FB7~ RET 0111+++8FB7~ ENDIF 0112+++8FB7~ 0113+++8FB7~ MUTE XOR A 0114+++8FB7~ LD H,A 0115+++8FB7~ LD L,A 0116+++8FB7~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8FB7~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8FB7~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8FB7~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8FB7~ JP ROUT 0121+++8FB7~ 0122+++8FB7~ INIT 0123+++8FB7~ ;HL - AddressOfModule 0124+++8FB7~ ;DE - AddresOf2ndModule 0125+++8FB7~ ;A - mode 0126+++8FB7~ PUSH DE 0127+++8FB7~ PUSH HL 0128+++8FB7~ LD HL,VARS 0129+++8FB7~ LD (HL),0 0130+++8FB7~ LD DE,VARS+1 0131+++8FB7~ LD BC,VAR0END-VARS-1 0132+++8FB7~ LDIR 0133+++8FB7~ INC HL 0134+++8FB7~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8FB7~ LD (VARS2+VRS.AdInPtA),HL 0136+++8FB7~ 0137+++8FB7~ POP HL 0138+++8FB7~ LD IY,VARS1+100 0139+++8FB7~ LD (SETUP),A 0140+++8FB7~ AND SETUP.PT2 0141+++8FB7~ JP NZ,I_PT2 0142+++8FB7~ 0143+++8FB7~ CALL INITPT3 0144+++8FB7~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8FB7~ LD (SamCnv),HL 0146+++8FB7~ LD A,#BA 0147+++8FB7~ LD (OrnCP),A 0148+++8FB7~ LD (SamCP),A 0149+++8FB7~ LD A,#7B 0150+++8FB7~ LD (OrnLD),A 0151+++8FB7~ LD (SamLD),A 0152+++8FB7~ LD A,#87 0153+++8FB7~ LD (SamClc2),A 0154+++8FB7~ POP HL 0155+++8FB7~ ;Use version and ton table of 1st module 0156+++8FB7~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8FB7~ SUB #30 0158+++8FB7~ JR C,L20 0159+++8FB7~ CP 10 0160+++8FB7~ JR C,L21 0161+++8FB7~ L20 LD A,6 0162+++8FB7~ L21 LD (Version),A 0163+++8FB7~ PUSH AF ;VolTable version 0164+++8FB7~ CP 4 0165+++8FB7~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8FB7~ RLA 0167+++8FB7~ AND 7 0168+++8FB7~ PUSH AF ;NoteTable number 0169+++8FB7~ 0170+++8FB7~ LD IY,VARS2+100 0171+++8FB7~ LD A,(SETUP) 0172+++8FB7~ AND SETUP.TS02|SETUP.TSPT3 0173+++8FB7~ JR Z,NOTS 0174+++8FB7~ CP SETUP.TS02 0175+++8FB7~ JR Z,TwoPT3s 0176+++8FB7~ LD A,(Version) 0177+++8FB7~ CP 7 0178+++8FB7~ JR C,NOTS 0179+++8FB7~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8FB7~ CP #20 0181+++8FB7~ JR Z,NOTS 0182+++8FB7~ LD HL,VARS1 0183+++8FB7~ LD DE,VARS2 0184+++8FB7~ LD BC,VRS 0185+++8FB7~ LDIR 0186+++8FB7~ SET 1,(IY-100+VRS.ModNum) 0187+++8FB7~ LD C,A 0188+++8FB7~ ADD A,A 0189+++8FB7~ ADD A,C 0190+++8FB7~ SUB 2 0191+++8FB7~ LD (TSSub),A 0192+++8FB7~ JR AlCoTS_ 0193+++8FB7~ TwoPT3s CALL INITPT3 0194+++8FB7~ AlCoTS_ LD A,1 0195+++8FB7~ LD (is_ts),A 0196+++8FB7~ SET 0,(IY-100+VRS.ModNum) 0197+++8FB7~ 0198+++8FB7~ NOTS LD BC,PT3PD 0199+++8FB7~ LD HL,0 0200+++8FB7~ LD DE,PT3EMPTYORN 0201+++8FB7~ JR INITCOMMON 0202+++8FB7~ 0203+++8FB7~ I_PT2 CALL INITPT2 0204+++8FB7~ LD HL,#51CB 0205+++8FB7~ LD (SamCnv),HL 0206+++8FB7~ LD A,#BB 0207+++8FB7~ LD (OrnCP),A 0208+++8FB7~ LD (SamCP),A 0209+++8FB7~ LD A,#7A 0210+++8FB7~ LD (OrnLD),A 0211+++8FB7~ LD (SamLD),A 0212+++8FB7~ LD A,#80 0213+++8FB7~ LD (SamClc2),A 0214+++8FB7~ POP HL 0215+++8FB7~ LD A,5 0216+++8FB7~ LD (Version),A 0217+++8FB7~ PUSH AF 0218+++8FB7~ LD A,2 0219+++8FB7~ PUSH AF 0220+++8FB7~ 0221+++8FB7~ LD A,(SETUP) 0222+++8FB7~ AND SETUP.TS02|SETUP.TSPT3 0223+++8FB7~ JR Z,NOTS2 0224+++8FB7~ 0225+++8FB7~ LD IY,VARS2+100 0226+++8FB7~ LD A,1 0227+++8FB7~ LD (is_ts),A 0228+++8FB7~ SET 0,(IY-100+VRS.ModNum) 0229+++8FB7~ CALL INITPT2 0230+++8FB7~ 0231+++8FB7~ NOTS2 LD BC,PT2PD 0232+++8FB7~ LD HL,#8687 0233+++8FB7~ LD DE,PT2EMPTYORN 0234+++8FB7~ 0235+++8FB7~ INITCOMMON 0236+++8FB7~ 0237+++8FB7~ IF Basic 0238+++8FB7~ LD IY,#5C3A 0239+++8FB7~ ENDIF 0240+++8FB7~ 0241+++8FB7~ LD (PTDEC),BC 0242+++8FB7~ LD (PsCalc),HL 0243+++8FB7~ PUSH DE 0244+++8FB7~ 0245+++8FB7~ ;note table data depacker 0246+++8FB7~ ;(c) Ivan Roshin 0247+++8FB7~ LD DE,T_PACK 0248+++8FB7~ LD BC,T1_+(2*49)-1 0249+++8FB7~ TP_0 LD A,(DE) 0250+++8FB7~ INC DE 0251+++8FB7~ CP 15*2 0252+++8FB7~ JR NC,TP_1 0253+++8FB7~ LD H,A 0254+++8FB7~ LD A,(DE) 0255+++8FB7~ LD L,A 0256+++8FB7~ INC DE 0257+++8FB7~ JR TP_2 0258+++8FB7~ TP_1 PUSH DE 0259+++8FB7~ LD D,0 0260+++8FB7~ LD E,A 0261+++8FB7~ ADD HL,DE 0262+++8FB7~ ADD HL,DE 0263+++8FB7~ POP DE 0264+++8FB7~ TP_2 LD A,H 0265+++8FB7~ LD (BC),A 0266+++8FB7~ DEC BC 0267+++8FB7~ LD A,L 0268+++8FB7~ LD (BC),A 0269+++8FB7~ DEC BC 0270+++8FB7~ SUB (#F8*2)&255 0271+++8FB7~ JR NZ,TP_0 0272+++8FB7~ 0273+++8FB7~ INC A 0274+++8FB7~ LD (VARS1+VRS.DelyCnt),A 0275+++8FB7~ LD (VARS2+VRS.DelyCnt),A 0276+++8FB7~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8FB7~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8FB7~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8FB7~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8FB7~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8FB7~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8FB7~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8FB7~ POP HL 0284+++8FB7~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8FB7~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8FB7~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8FB7~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8FB7~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8FB7~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8FB7~ 0291+++8FB7~ POP AF 0292+++8FB7~ 0293+++8FB7~ ;NoteTableCreator (c) Ivan Roshin 0294+++8FB7~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8FB7~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8FB7~ 0297+++8FB7~ LD HL,NT_DATA 0298+++8FB7~ LD D,0 0299+++8FB7~ ADD A,A 0300+++8FB7~ LD E,A 0301+++8FB7~ ADD HL,DE 0302+++8FB7~ LD E,(HL) 0303+++8FB7~ INC HL 0304+++8FB7~ SRL E 0305+++8FB7~ SBC A,A 0306+++8FB7~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8FB7~ LD (L3),A 0308+++8FB7~ EX DE,HL 0309+++8FB7~ LD BC,T1_ 0310+++8FB7~ ADD HL,BC 0311+++8FB7~ 0312+++8FB7~ LD A,(DE) 0313+++8FB7~ ADD A,T_&255 0314+++8FB7~ LD C,A 0315+++8FB7~ ADC A,T_/256 0316+++8FB7~ SUB C 0317+++8FB7~ LD B,A 0318+++8FB7~ PUSH BC 0319+++8FB7~ LD DE,NT_ 0320+++8FB7~ PUSH DE 0321+++8FB7~ 0322+++8FB7~ LD B,12 0323+++8FB7~ L1 PUSH BC 0324+++8FB7~ LD C,(HL) 0325+++8FB7~ INC HL 0326+++8FB7~ PUSH HL 0327+++8FB7~ LD B,(HL) 0328+++8FB7~ 0329+++8FB7~ PUSH DE 0330+++8FB7~ EX DE,HL 0331+++8FB7~ LD DE,23 0332+++8FB7~ LD IXH,8 0333+++8FB7~ 0334+++8FB7~ L2 SRL B 0335+++8FB7~ RR C 0336+++8FB7~ L3 DB #19 ;AND A or NOP 0337+++8FB7~ LD A,C 0338+++8FB7~ ADC A,D ;=ADC 0 0339+++8FB7~ LD (HL),A 0340+++8FB7~ INC HL 0341+++8FB7~ LD A,B 0342+++8FB7~ ADC A,D 0343+++8FB7~ LD (HL),A 0344+++8FB7~ ADD HL,DE 0345+++8FB7~ DEC IXH 0346+++8FB7~ JR NZ,L2 0347+++8FB7~ 0348+++8FB7~ POP DE 0349+++8FB7~ INC DE 0350+++8FB7~ INC DE 0351+++8FB7~ POP HL 0352+++8FB7~ INC HL 0353+++8FB7~ POP BC 0354+++8FB7~ DJNZ L1 0355+++8FB7~ 0356+++8FB7~ POP HL 0357+++8FB7~ POP DE 0358+++8FB7~ 0359+++8FB7~ LD A,E 0360+++8FB7~ CP TCOLD_1&255 0361+++8FB7~ JR NZ,CORR_1 0362+++8FB7~ LD A,#FD 0363+++8FB7~ LD (NT_+#2E),A 0364+++8FB7~ 0365+++8FB7~ CORR_1 LD A,(DE) 0366+++8FB7~ AND A 0367+++8FB7~ JR Z,TC_EXIT 0368+++8FB7~ RRA 0369+++8FB7~ PUSH AF 0370+++8FB7~ ADD A,A 0371+++8FB7~ LD C,A 0372+++8FB7~ ADD HL,BC 0373+++8FB7~ POP AF 0374+++8FB7~ JR NC,CORR_2 0375+++8FB7~ DEC (HL) 0376+++8FB7~ DEC (HL) 0377+++8FB7~ CORR_2 INC (HL) 0378+++8FB7~ AND A 0379+++8FB7~ SBC HL,BC 0380+++8FB7~ INC DE 0381+++8FB7~ JR CORR_1 0382+++8FB7~ 0383+++8FB7~ TC_EXIT 0384+++8FB7~ 0385+++8FB7~ POP AF 0386+++8FB7~ 0387+++8FB7~ ;VolTableCreator (c) Ivan Roshin 0388+++8FB7~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8FB7~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8FB7~ 0391+++8FB7~ CP 5 0392+++8FB7~ LD HL,#11 0393+++8FB7~ LD D,H 0394+++8FB7~ LD E,H 0395+++8FB7~ LD A,#17 0396+++8FB7~ JR NC,M1 0397+++8FB7~ DEC L 0398+++8FB7~ LD E,L 0399+++8FB7~ XOR A 0400+++8FB7~ M1 LD (M2),A 0401+++8FB7~ 0402+++8FB7~ LD IX,VT_+16 0403+++8FB7~ 0404+++8FB7~ LD C,#F 0405+++8FB7~ INITV2 PUSH HL 0406+++8FB7~ 0407+++8FB7~ ADD HL,DE 0408+++8FB7~ EX DE,HL 0409+++8FB7~ SBC HL,HL 0410+++8FB7~ 0411+++8FB7~ LD B,#10 0412+++8FB7~ INITV1 LD A,L 0413+++8FB7~ M2 DB #7D 0414+++8FB7~ LD A,H 0415+++8FB7~ ADC A,0 0416+++8FB7~ LD (IX),A 0417+++8FB7~ INC IX 0418+++8FB7~ ADD HL,DE 0419+++8FB7~ DJNZ INITV1 0420+++8FB7~ 0421+++8FB7~ POP HL 0422+++8FB7~ LD A,E 0423+++8FB7~ CP #77 0424+++8FB7~ JR NZ,M3 0425+++8FB7~ INC E 0426+++8FB7~ M3 DEC C 0427+++8FB7~ JR NZ,INITV2 0428+++8FB7~ 0429+++8FB7~ JP ROUT 0430+++8FB7~ 0431+++8FB7~ INITPT3 CALL SETMDAD 0432+++8FB7~ PUSH HL 0433+++8FB7~ LD DE,100 0434+++8FB7~ ADD HL,DE 0435+++8FB7~ LD A,(HL) 0436+++8FB7~ LD (IY-100+VRS.Delay),A 0437+++8FB7~ PUSH HL 0438+++8FB7~ POP IX 0439+++8FB7~ ADD HL,DE 0440+++8FB7~ CALL SETCPPT 0441+++8FB7~ LD E,(IX+102-100) 0442+++8FB7~ INC HL 0443+++8FB7~ 0444+++8FB7~ IF CurPosCounter 0445+++8FB7~ LD (IY-100+VRS.PosSub),L 0446+++8FB7~ ENDIF 0447+++8FB7~ 0448+++8FB7~ ADD HL,DE 0449+++8FB7~ CALL SETLPPT 0450+++8FB7~ POP DE 0451+++8FB7~ LD L,(IX+103-100) 0452+++8FB7~ LD H,(IX+104-100) 0453+++8FB7~ ADD HL,DE 0454+++8FB7~ CALL SETPTPT 0455+++8FB7~ LD HL,169 0456+++8FB7~ ADD HL,DE 0457+++8FB7~ CALL SETORPT 0458+++8FB7~ LD HL,105 0459+++8FB7~ ADD HL,DE 0460+++8FB7~ 0461+++8FB7~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8FB7~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8FB7~ RET 0464+++8FB7~ 0465+++8FB7~ INITPT2 LD A,(HL) 0466+++8FB7~ LD (IY-100+VRS.Delay),A 0467+++8FB7~ PUSH HL 0468+++8FB7~ PUSH HL 0469+++8FB7~ PUSH HL 0470+++8FB7~ INC HL 0471+++8FB7~ INC HL 0472+++8FB7~ LD A,(HL) 0473+++8FB7~ INC HL 0474+++8FB7~ CALL SETSMPT 0475+++8FB7~ LD E,(HL) 0476+++8FB7~ INC HL 0477+++8FB7~ LD D,(HL) 0478+++8FB7~ POP HL 0479+++8FB7~ AND A 0480+++8FB7~ SBC HL,DE 0481+++8FB7~ CALL SETMDAD 0482+++8FB7~ POP HL 0483+++8FB7~ LD DE,67 0484+++8FB7~ ADD HL,DE 0485+++8FB7~ CALL SETORPT 0486+++8FB7~ LD E,32 0487+++8FB7~ ADD HL,DE 0488+++8FB7~ LD C,(HL) 0489+++8FB7~ INC HL 0490+++8FB7~ LD B,(HL) 0491+++8FB7~ LD E,30 0492+++8FB7~ ADD HL,DE 0493+++8FB7~ CALL SETCPPT 0494+++8FB7~ LD E,A 0495+++8FB7~ INC HL 0496+++8FB7~ 0497+++8FB7~ IF CurPosCounter 0498+++8FB7~ LD (IY-100+VRS.PosSub),L 0499+++8FB7~ ENDIF 0500+++8FB7~ 0501+++8FB7~ ADD HL,DE 0502+++8FB7~ CALL SETLPPT 0503+++8FB7~ POP HL 0504+++8FB7~ ADD HL,BC 0505+++8FB7~ 0506+++8FB7~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8FB7~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8FB7~ RET 0509+++8FB7~ 0510+++8FB7~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8FB7~ LD (IY-100+VRS.MODADDR+1),H 0512+++8FB7~ RET 0513+++8FB7~ 0514+++8FB7~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8FB7~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8FB7~ RET 0517+++8FB7~ 0518+++8FB7~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8FB7~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8FB7~ RET 0521+++8FB7~ 0522+++8FB7~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8FB7~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8FB7~ RET 0525+++8FB7~ 0526+++8FB7~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8FB7~ LD (IY-100+VRS.EnvBase+1),H 0528+++8FB7~ RET 0529+++8FB7~ 0530+++8FB7~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8FB7~ LD (IY-100+VRS.CurESld+1),H 0532+++8FB7~ RET 0533+++8FB7~ 0534+++8FB7~ GETIX PUSH IY 0535+++8FB7~ POP IX 0536+++8FB7~ ADD IX,DE 0537+++8FB7~ RET 0538+++8FB7~ 0539+++8FB7~ PTDECOD CALL GETIX 0540+++8FB7~ PTDEC EQU $+1 0541+++8FB7~ JP #C3C3 0542+++8FB7~ 0543+++8FB7~ ;PT2 pattern decoder 0544+++8FB7~ PD2_SAM CALL SETSAM 0545+++8FB7~ JR PD2_LOOP 0546+++8FB7~ 0547+++8FB7~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8FB7~ JR PD2_LOOP 0549+++8FB7~ 0550+++8FB7~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8FB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8FB7~ LD A,(BC) 0553+++8FB7~ INC BC 0554+++8FB7~ LD L,A 0555+++8FB7~ LD A,(BC) 0556+++8FB7~ INC BC 0557+++8FB7~ LD H,A 0558+++8FB7~ CALL SETENBS 0559+++8FB7~ JR PD2_LOOP 0560+++8FB7~ 0561+++8FB7~ PD2_ORN CALL SETORN 0562+++8FB7~ JR PD2_LOOP 0563+++8FB7~ 0564+++8FB7~ PD2_SKIP INC A 0565+++8FB7~ LD (IX-12+CHP.NNtSkp),A 0566+++8FB7~ JR PD2_LOOP 0567+++8FB7~ 0568+++8FB7~ PD2_VOL RRCA 0569+++8FB7~ RRCA 0570+++8FB7~ RRCA 0571+++8FB7~ RRCA 0572+++8FB7~ LD (IX-12+CHP.Volume),A 0573+++8FB7~ JR PD2_LOOP 0574+++8FB7~ 0575+++8FB7~ PD2_DEL CALL C_DELAY 0576+++8FB7~ JR PD2_LOOP 0577+++8FB7~ 0578+++8FB7~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8FB7~ INC A 0580+++8FB7~ LD (IX-12+CHP.TnSlDl),A 0581+++8FB7~ LD (IX-12+CHP.TSlCnt),A 0582+++8FB7~ LD A,(BC) 0583+++8FB7~ INC BC 0584+++8FB7~ LD (IX-12+CHP.TSlStp),A 0585+++8FB7~ ADD A,A 0586+++8FB7~ SBC A,A 0587+++8FB7~ LD (IX-12+CHP.TSlStp+1),A 0588+++8FB7~ SCF 0589+++8FB7~ JR PD2_LP2 0590+++8FB7~ 0591+++8FB7~ PT2PD AND A 0592+++8FB7~ 0593+++8FB7~ PD2_LP2 EX AF,AF' 0594+++8FB7~ 0595+++8FB7~ PD2_LOOP LD A,(BC) 0596+++8FB7~ INC BC 0597+++8FB7~ ADD A,#20 0598+++8FB7~ JR Z,PD2_REL 0599+++8FB7~ JR C,PD2_SAM 0600+++8FB7~ ADD A,96 0601+++8FB7~ JR C,PD2_NOTE 0602+++8FB7~ INC A 0603+++8FB7~ JR Z,PD2_EOff 0604+++8FB7~ ADD A,15 0605+++8FB7~ JP Z,PD_FIN 0606+++8FB7~ JR C,PD2_ENV 0607+++8FB7~ ADD A,#10 0608+++8FB7~ JR C,PD2_ORN 0609+++8FB7~ ADD A,#40 0610+++8FB7~ JR C,PD2_SKIP 0611+++8FB7~ ADD A,#10 0612+++8FB7~ JR C,PD2_VOL 0613+++8FB7~ INC A 0614+++8FB7~ JR Z,PD2_DEL 0615+++8FB7~ INC A 0616+++8FB7~ JR Z,PD2_GLIS 0617+++8FB7~ INC A 0618+++8FB7~ JR Z,PD2_PORT 0619+++8FB7~ INC A 0620+++8FB7~ JR Z,PD2_STOP 0621+++8FB7~ LD A,(BC) 0622+++8FB7~ INC BC 0623+++8FB7~ LD (IX-12+CHP.CrNsSl),A 0624+++8FB7~ JR PD2_LOOP 0625+++8FB7~ 0626+++8FB7~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8FB7~ LD A,(BC) 0628+++8FB7~ INC BC 0629+++8FB7~ INC BC ;ignoring precalc delta to right sound 0630+++8FB7~ INC BC 0631+++8FB7~ SCF 0632+++8FB7~ JR PD2_LP2 0633+++8FB7~ 0634+++8FB7~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8FB7~ JR PD2_LOOP 0636+++8FB7~ 0637+++8FB7~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8FB7~ JR PD2_EXIT 0639+++8FB7~ 0640+++8FB7~ PD2_NOTE LD L,A 0641+++8FB7~ LD A,(IX-12+CHP.Note) 0642+++8FB7~ LD (PrNote+1),A 0643+++8FB7~ LD (IX-12+CHP.Note),L 0644+++8FB7~ XOR A 0645+++8FB7~ LD (IX-12+CHP.TSlCnt),A 0646+++8FB7~ SET 0,(IX-12+CHP.Flags) 0647+++8FB7~ EX AF,AF' 0648+++8FB7~ JR NC,NOGLIS2 0649+++8FB7~ BIT 2,(IX-12+CHP.Flags) 0650+++8FB7~ JR NZ,NOPORT2 0651+++8FB7~ LD (LoStep),A 0652+++8FB7~ ADD A,A 0653+++8FB7~ SBC A,A 0654+++8FB7~ EX AF,AF' 0655+++8FB7~ LD H,A 0656+++8FB7~ LD L,A 0657+++8FB7~ INC A 0658+++8FB7~ CALL SETPORT 0659+++8FB7~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8FB7~ NOGLIS2 XOR A 0661+++8FB7~ 0662+++8FB7~ 0663+++8FB7~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8FB7~ LD (IX-12+CHP.PsInOr),A 0665+++8FB7~ LD (IX-12+CHP.CrTnSl),A 0666+++8FB7~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8FB7~ JP PD_FIN 0668+++8FB7~ 0669+++8FB7~ ;PT3 pattern decoder 0670+++8FB7~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8FB7~ CALL SETORN 0672+++8FB7~ PD_SAM_ LD A,(BC) 0673+++8FB7~ INC BC 0674+++8FB7~ RRCA 0675+++8FB7~ 0676+++8FB7~ PD_SAM CALL SETSAM 0677+++8FB7~ JR PD_LOOP 0678+++8FB7~ 0679+++8FB7~ PD_VOL RRCA 0680+++8FB7~ RRCA 0681+++8FB7~ RRCA 0682+++8FB7~ RRCA 0683+++8FB7~ LD (IX-12+CHP.Volume),A 0684+++8FB7~ JR PD_LP2 0685+++8FB7~ 0686+++8FB7~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8FB7~ LD (IX-12+CHP.PsInOr),A 0688+++8FB7~ JR PD_LP2 0689+++8FB7~ 0690+++8FB7~ PD_SorE DEC A 0691+++8FB7~ JR NZ,PD_ENV 0692+++8FB7~ LD A,(BC) 0693+++8FB7~ INC BC 0694+++8FB7~ LD (IX-12+CHP.NNtSkp),A 0695+++8FB7~ JR PD_LP2 0696+++8FB7~ 0697+++8FB7~ PD_ENV CALL SETENV 0698+++8FB7~ JR PD_LP2 0699+++8FB7~ 0700+++8FB7~ PD_ORN CALL SETORN 0701+++8FB7~ JR PD_LOOP 0702+++8FB7~ 0703+++8FB7~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8FB7~ LD (IX-12+CHP.PsInOr),A 0705+++8FB7~ CALL NZ,SETENV 0706+++8FB7~ JR PD_SAM_ 0707+++8FB7~ 0708+++8FB7~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8FB7~ LD (PrNote+1),A 0710+++8FB7~ LD L,(IX-12+CHP.CrTnSl) 0711+++8FB7~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8FB7~ LD (PrSlide+1),HL 0713+++8FB7~ 0714+++8FB7~ PD_LOOP LD DE,#2010 0715+++8FB7~ PD_LP2 LD A,(BC) 0716+++8FB7~ INC BC 0717+++8FB7~ ADD A,E 0718+++8FB7~ JR C,PD_OrSm 0719+++8FB7~ ADD A,D 0720+++8FB7~ JR Z,PD_FIN 0721+++8FB7~ JR C,PD_SAM 0722+++8FB7~ ADD A,E 0723+++8FB7~ JR Z,PD_REL 0724+++8FB7~ JR C,PD_VOL 0725+++8FB7~ ADD A,E 0726+++8FB7~ JR Z,PD_EOff 0727+++8FB7~ JR C,PD_SorE 0728+++8FB7~ ADD A,96 0729+++8FB7~ JR C,PD_NOTE 0730+++8FB7~ ADD A,E 0731+++8FB7~ JR C,PD_ORN 0732+++8FB7~ ADD A,D 0733+++8FB7~ JR C,PD_NOIS 0734+++8FB7~ ADD A,E 0735+++8FB7~ JR C,PD_ESAM 0736+++8FB7~ ADD A,A 0737+++8FB7~ LD E,A 0738+++8FB7~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8FB7~ ADD HL,DE 0740+++8FB7~ LD E,(HL) 0741+++8FB7~ INC HL 0742+++8FB7~ LD D,(HL) 0743+++8FB7~ PUSH DE 0744+++8FB7~ JR PD_LOOP 0745+++8FB7~ 0746+++8FB7~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8FB7~ JR PD_LP2 0748+++8FB7~ 0749+++8FB7~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8FB7~ JR PD_RES 0751+++8FB7~ 0752+++8FB7~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8FB7~ SET 0,(IX-12+CHP.Flags) 0754+++8FB7~ XOR A 0755+++8FB7~ 0756+++8FB7~ PD_RES LD (PDSP_+1),SP 0757+++8FB7~ LD SP,IX 0758+++8FB7~ LD H,A 0759+++8FB7~ LD L,A 0760+++8FB7~ PUSH HL 0761+++8FB7~ PUSH HL 0762+++8FB7~ PUSH HL 0763+++8FB7~ PUSH HL 0764+++8FB7~ PUSH HL 0765+++8FB7~ PUSH HL 0766+++8FB7~ PDSP_ LD SP,#3131 0767+++8FB7~ 0768+++8FB7~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8FB7~ LD (IX-12+CHP.NtSkCn),A 0770+++8FB7~ RET 0771+++8FB7~ 0772+++8FB7~ C_PORTM LD A,(BC) 0773+++8FB7~ INC BC 0774+++8FB7~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8FB7~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8FB7~ INC BC 0777+++8FB7~ INC BC 0778+++8FB7~ EX AF,AF' 0779+++8FB7~ LD A,(BC) ;SIGNED TONE STEP 0780+++8FB7~ INC BC 0781+++8FB7~ LD (LoStep),A 0782+++8FB7~ LD A,(BC) 0783+++8FB7~ INC BC 0784+++8FB7~ AND A 0785+++8FB7~ EX AF,AF' 0786+++8FB7~ LD L,(IX-12+CHP.CrTnSl) 0787+++8FB7~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8FB7~ 0789+++8FB7~ ;Set portamento variables 0790+++8FB7~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8FB7~ 0792+++8FB7~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8FB7~ LD (IX-12+CHP.TnSlDl),A 0794+++8FB7~ LD (IX-12+CHP.TSlCnt),A 0795+++8FB7~ PUSH HL 0796+++8FB7~ LD DE,NT_ 0797+++8FB7~ LD A,(IX-12+CHP.Note) 0798+++8FB7~ LD (IX-12+CHP.SlToNt),A 0799+++8FB7~ ADD A,A 0800+++8FB7~ LD L,A 0801+++8FB7~ LD H,0 0802+++8FB7~ ADD HL,DE 0803+++8FB7~ LD A,(HL) 0804+++8FB7~ INC HL 0805+++8FB7~ LD H,(HL) 0806+++8FB7~ LD L,A 0807+++8FB7~ PUSH HL 0808+++8FB7~ PrNote LD A,#3E 0809+++8FB7~ LD (IX-12+CHP.Note),A 0810+++8FB7~ ADD A,A 0811+++8FB7~ LD L,A 0812+++8FB7~ LD H,0 0813+++8FB7~ ADD HL,DE 0814+++8FB7~ LD E,(HL) 0815+++8FB7~ INC HL 0816+++8FB7~ LD D,(HL) 0817+++8FB7~ POP HL 0818+++8FB7~ SBC HL,DE 0819+++8FB7~ LD (IX-12+CHP.TnDelt),L 0820+++8FB7~ LD (IX-12+CHP.TnDelt+1),H 0821+++8FB7~ POP DE 0822+++8FB7~ Version EQU $+1 0823+++8FB7~ LD A,#3E 0824+++8FB7~ CP 6 0825+++8FB7~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8FB7~ PrSlide LD DE,#1111 0827+++8FB7~ LD (IX-12+CHP.CrTnSl),E 0828+++8FB7~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8FB7~ LoStep EQU $+1 0830+++8FB7~ OLDPRTM LD A,#3E 0831+++8FB7~ EX AF,AF' 0832+++8FB7~ JR Z,NOSIG 0833+++8FB7~ EX DE,HL 0834+++8FB7~ NOSIG SBC HL,DE 0835+++8FB7~ JP P,SET_STP 0836+++8FB7~ CPL 0837+++8FB7~ EX AF,AF' 0838+++8FB7~ NEG 0839+++8FB7~ EX AF,AF' 0840+++8FB7~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8FB7~ EX AF,AF' 0842+++8FB7~ LD (IX-12+CHP.TSlStp),A 0843+++8FB7~ LD (IX-12+CHP.COnOff),0 0844+++8FB7~ RET 0845+++8FB7~ 0846+++8FB7~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8FB7~ LD A,(BC) 0848+++8FB7~ INC BC 0849+++8FB7~ LD (IX-12+CHP.TnSlDl),A 0850+++8FB7~ AND A 0851+++8FB7~ JR NZ,GL36 0852+++8FB7~ LD A,(Version) ;AlCo PT3.7+ 0853+++8FB7~ CP 7 0854+++8FB7~ SBC A,A 0855+++8FB7~ INC A 0856+++8FB7~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8FB7~ LD A,(BC) 0858+++8FB7~ INC BC 0859+++8FB7~ EX AF,AF' 0860+++8FB7~ LD A,(BC) 0861+++8FB7~ INC BC 0862+++8FB7~ JR SET_STP 0863+++8FB7~ 0864+++8FB7~ C_SMPOS LD A,(BC) 0865+++8FB7~ INC BC 0866+++8FB7~ LD (IX-12+CHP.PsInSm),A 0867+++8FB7~ RET 0868+++8FB7~ 0869+++8FB7~ C_ORPOS LD A,(BC) 0870+++8FB7~ INC BC 0871+++8FB7~ LD (IX-12+CHP.PsInOr),A 0872+++8FB7~ RET 0873+++8FB7~ 0874+++8FB7~ C_VIBRT LD A,(BC) 0875+++8FB7~ INC BC 0876+++8FB7~ LD (IX-12+CHP.OnOffD),A 0877+++8FB7~ LD (IX-12+CHP.COnOff),A 0878+++8FB7~ LD A,(BC) 0879+++8FB7~ INC BC 0880+++8FB7~ LD (IX-12+CHP.OffOnD),A 0881+++8FB7~ XOR A 0882+++8FB7~ LD (IX-12+CHP.TSlCnt),A 0883+++8FB7~ LD (IX-12+CHP.CrTnSl),A 0884+++8FB7~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8FB7~ RET 0886+++8FB7~ 0887+++8FB7~ C_ENGLS LD A,(BC) 0888+++8FB7~ INC BC 0889+++8FB7~ LD (IY-100+VRS.Env_Del),A 0890+++8FB7~ LD (IY-100+VRS.CurEDel),A 0891+++8FB7~ LD A,(BC) 0892+++8FB7~ INC BC 0893+++8FB7~ LD L,A 0894+++8FB7~ LD A,(BC) 0895+++8FB7~ INC BC 0896+++8FB7~ LD H,A 0897+++8FB7~ LD (IY-100+VRS.ESldAdd),L 0898+++8FB7~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8FB7~ RET 0900+++8FB7~ 0901+++8FB7~ C_DELAY LD A,(BC) 0902+++8FB7~ INC BC 0903+++8FB7~ LD (IY-100+VRS.Delay),A 0904+++8FB7~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8FB7~ BIT 1,(HL) 0906+++8FB7~ RET Z 0907+++8FB7~ LD (VARS1+VRS.Delay),A 0908+++8FB7~ LD (VARS1+VRS.DelyCnt),A 0909+++8FB7~ LD (VARS2+VRS.Delay),A 0910+++8FB7~ RET 0911+++8FB7~ 0912+++8FB7~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8FB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8FB7~ LD A,(BC) 0915+++8FB7~ INC BC 0916+++8FB7~ LD H,A 0917+++8FB7~ LD A,(BC) 0918+++8FB7~ INC BC 0919+++8FB7~ LD L,A 0920+++8FB7~ CALL SETENBS 0921+++8FB7~ XOR A 0922+++8FB7~ LD (IX-12+CHP.PsInOr),A 0923+++8FB7~ LD (IY-100+VRS.CurEDel),A 0924+++8FB7~ LD H,A 0925+++8FB7~ LD L,A 0926+++8FB7~ JP SETESLD 0927+++8FB7~ 0928+++8FB7~ SETORN ADD A,A 0929+++8FB7~ LD E,A 0930+++8FB7~ LD D,0 0931+++8FB7~ LD (IX-12+CHP.PsInOr),D 0932+++8FB7~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8FB7~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8FB7~ ADD HL,DE 0935+++8FB7~ LD E,(HL) 0936+++8FB7~ INC HL 0937+++8FB7~ LD D,(HL) 0938+++8FB7~ LD L,(IY-100+VRS.MODADDR) 0939+++8FB7~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8FB7~ ADD HL,DE 0941+++8FB7~ LD (IX-12+CHP.OrnPtr),L 0942+++8FB7~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8FB7~ C_NOP RET 0944+++8FB7~ 0945+++8FB7~ SETSAM ADD A,A 0946+++8FB7~ LD E,A 0947+++8FB7~ LD D,0 0948+++8FB7~ LD L,(IY-100+VRS.SamPtrs); 0949+++8FB7~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8FB7~ ADD HL,DE 0951+++8FB7~ LD E,(HL) 0952+++8FB7~ INC HL 0953+++8FB7~ LD D,(HL) 0954+++8FB7~ LD L,(IY-100+VRS.MODADDR) 0955+++8FB7~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8FB7~ ADD HL,DE 0957+++8FB7~ LD (IX-12+CHP.SamPtr),L 0958+++8FB7~ LD (IX-12+CHP.SamPtr+1),H 0959+++8FB7~ RET 0960+++8FB7~ 0961+++8FB7~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8FB7~ SPCCOMS DW C_NOP 0963+++8FB7~ DW C_GLISS 0964+++8FB7~ DW C_PORTM 0965+++8FB7~ DW C_SMPOS 0966+++8FB7~ DW C_ORPOS 0967+++8FB7~ DW C_VIBRT 0968+++8FB7~ DW C_NOP 0969+++8FB7~ DW C_NOP 0970+++8FB7~ DW C_ENGLS 0971+++8FB7~ DW C_DELAY 0972+++8FB7~ DW C_NOP 0973+++8FB7~ DW C_NOP 0974+++8FB7~ DW C_NOP 0975+++8FB7~ DW C_NOP 0976+++8FB7~ DW C_NOP 0977+++8FB7~ DW C_NOP 0978+++8FB7~ 0979+++8FB7~ CHREGS CALL GETIX 0980+++8FB7~ XOR A 0981+++8FB7~ LD (Ampl),A 0982+++8FB7~ BIT 0,(IX+CHP.Flags) 0983+++8FB7~ PUSH HL 0984+++8FB7~ JP Z,CH_EXIT 0985+++8FB7~ LD (CSP_+1),SP 0986+++8FB7~ LD L,(IX+CHP.OrnPtr) 0987+++8FB7~ LD H,(IX+CHP.OrnPtr+1) 0988+++8FB7~ LD SP,HL 0989+++8FB7~ POP DE 0990+++8FB7~ LD H,A 0991+++8FB7~ LD A,(IX+CHP.PsInOr) 0992+++8FB7~ LD L,A 0993+++8FB7~ ADD HL,SP 0994+++8FB7~ INC A 0995+++8FB7~ ;PT2 PT3 0996+++8FB7~ OrnCP INC A ;CP E CP D 0997+++8FB7~ JR C,CH_ORPS 0998+++8FB7~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8FB7~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8FB7~ LD A,(IX+CHP.Note) 1001+++8FB7~ ADD A,(HL) 1002+++8FB7~ JP P,CH_NTP 1003+++8FB7~ XOR A 1004+++8FB7~ CH_NTP CP 96 1005+++8FB7~ JR C,CH_NOK 1006+++8FB7~ LD A,95 1007+++8FB7~ CH_NOK ADD A,A 1008+++8FB7~ EX AF,AF' 1009+++8FB7~ LD L,(IX+CHP.SamPtr) 1010+++8FB7~ LD H,(IX+CHP.SamPtr+1) 1011+++8FB7~ LD SP,HL 1012+++8FB7~ POP DE 1013+++8FB7~ LD H,0 1014+++8FB7~ LD A,(IX+CHP.PsInSm) 1015+++8FB7~ LD B,A 1016+++8FB7~ ADD A,A 1017+++8FB7~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8FB7~ LD L,A 1019+++8FB7~ ADD HL,SP 1020+++8FB7~ LD SP,HL 1021+++8FB7~ LD A,B 1022+++8FB7~ INC A 1023+++8FB7~ ;PT2 PT3 1024+++8FB7~ SamCP INC A ;CP E CP D 1025+++8FB7~ JR C,CH_SMPS 1026+++8FB7~ SamLD DB 1 ;LD A,D LD A,E 1027+++8FB7~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8FB7~ POP BC 1029+++8FB7~ POP HL 1030+++8FB7~ 1031+++8FB7~ ;Convert PT2 sample to PT3 1032+++8FB7~ ;PT2 PT3 1033+++8FB7~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8FB7~ POP HL 1035+++8FB7~ LD H,B 1036+++8FB7~ JR NZ,$+8 1037+++8FB7~ EX DE,HL 1038+++8FB7~ AND A 1039+++8FB7~ SBC HL,HL 1040+++8FB7~ SBC HL,DE 1041+++8FB7~ LD D,C 1042+++8FB7~ RR C 1043+++8FB7~ SBC A,A 1044+++8FB7~ CPL 1045+++8FB7~ AND #3E 1046+++8FB7~ RR C 1047+++8FB7~ RR B 1048+++8FB7~ AND C 1049+++8FB7~ LD C,A 1050+++8FB7~ LD A,B 1051+++8FB7~ RRA 1052+++8FB7~ RRA 1053+++8FB7~ RR D 1054+++8FB7~ RRA 1055+++8FB7~ AND #9F 1056+++8FB7~ LD B,A 1057+++8FB7~ 1058+++8FB7~ e_ LD E,(IX+CHP.TnAcc) 1059+++8FB7~ LD D,(IX+CHP.TnAcc+1) 1060+++8FB7~ ADD HL,DE 1061+++8FB7~ BIT 6,B 1062+++8FB7~ JR Z,CH_NOAC 1063+++8FB7~ LD (IX+CHP.TnAcc),L 1064+++8FB7~ LD (IX+CHP.TnAcc+1),H 1065+++8FB7~ CH_NOAC EX DE,HL 1066+++8FB7~ EX AF,AF' 1067+++8FB7~ ADD A,NT_&255 1068+++8FB7~ LD L,A 1069+++8FB7~ ADC A,NT_/256 1070+++8FB7~ SUB L 1071+++8FB7~ LD H,A 1072+++8FB7~ LD SP,HL 1073+++8FB7~ POP HL 1074+++8FB7~ ADD HL,DE 1075+++8FB7~ LD E,(IX+CHP.CrTnSl) 1076+++8FB7~ LD D,(IX+CHP.CrTnSl+1) 1077+++8FB7~ ADD HL,DE 1078+++8FB7~ CSP_ LD SP,#3131 1079+++8FB7~ EX (SP),HL 1080+++8FB7~ XOR A 1081+++8FB7~ OR (IX+CHP.TSlCnt) 1082+++8FB7~ JR Z,CH_AMP 1083+++8FB7~ DEC (IX+CHP.TSlCnt) 1084+++8FB7~ JR NZ,CH_AMP 1085+++8FB7~ LD A,(IX+CHP.TnSlDl) 1086+++8FB7~ LD (IX+CHP.TSlCnt),A 1087+++8FB7~ LD L,(IX+CHP.TSlStp) 1088+++8FB7~ LD H,(IX+CHP.TSlStp+1) 1089+++8FB7~ LD A,H 1090+++8FB7~ ADD HL,DE 1091+++8FB7~ LD (IX+CHP.CrTnSl),L 1092+++8FB7~ LD (IX+CHP.CrTnSl+1),H 1093+++8FB7~ BIT 2,(IX+CHP.Flags) 1094+++8FB7~ JR NZ,CH_AMP 1095+++8FB7~ LD E,(IX+CHP.TnDelt) 1096+++8FB7~ LD D,(IX+CHP.TnDelt+1) 1097+++8FB7~ AND A 1098+++8FB7~ JR Z,CH_STPP 1099+++8FB7~ EX DE,HL 1100+++8FB7~ CH_STPP SBC HL,DE 1101+++8FB7~ JP M,CH_AMP 1102+++8FB7~ LD A,(IX+CHP.SlToNt) 1103+++8FB7~ LD (IX+CHP.Note),A 1104+++8FB7~ XOR A 1105+++8FB7~ LD (IX+CHP.TSlCnt),A 1106+++8FB7~ LD (IX+CHP.CrTnSl),A 1107+++8FB7~ LD (IX+CHP.CrTnSl+1),A 1108+++8FB7~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8FB7~ BIT 7,C 1110+++8FB7~ JR Z,CH_NOAM 1111+++8FB7~ BIT 6,C 1112+++8FB7~ JR Z,CH_AMIN 1113+++8FB7~ CP 15 1114+++8FB7~ JR Z,CH_NOAM 1115+++8FB7~ INC A 1116+++8FB7~ JR CH_SVAM 1117+++8FB7~ CH_AMIN CP -15 1118+++8FB7~ JR Z,CH_NOAM 1119+++8FB7~ DEC A 1120+++8FB7~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8FB7~ CH_NOAM LD L,A 1122+++8FB7~ LD A,B 1123+++8FB7~ AND 15 1124+++8FB7~ ADD A,L 1125+++8FB7~ JP P,CH_APOS 1126+++8FB7~ XOR A 1127+++8FB7~ CH_APOS CP 16 1128+++8FB7~ JR C,CH_VOL 1129+++8FB7~ LD A,15 1130+++8FB7~ CH_VOL OR (IX+CHP.Volume) 1131+++8FB7~ ADD A,VT_&255 1132+++8FB7~ LD L,A 1133+++8FB7~ ADC A,VT_/256 1134+++8FB7~ SUB L 1135+++8FB7~ LD H,A 1136+++8FB7~ LD A,(HL) 1137+++8FB7~ CH_ENV BIT 0,C 1138+++8FB7~ JR NZ,CH_NOEN 1139+++8FB7~ OR (IX+CHP.Env_En) 1140+++8FB7~ CH_NOEN LD (Ampl),A 1141+++8FB7~ BIT 7,B 1142+++8FB7~ LD A,C 1143+++8FB7~ JR Z,NO_ENSL 1144+++8FB7~ RLA 1145+++8FB7~ RLA 1146+++8FB7~ SRA A 1147+++8FB7~ SRA A 1148+++8FB7~ SRA A 1149+++8FB7~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8FB7~ BIT 5,B 1151+++8FB7~ JR Z,NO_ENAC 1152+++8FB7~ LD (IX+CHP.CrEnSl),A 1153+++8FB7~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8FB7~ LD (IY-100+VRS.AddToEn),A 1155+++8FB7~ JR CH_MIX 1156+++8FB7~ NO_ENSL RRA 1157+++8FB7~ ADD A,(IX+CHP.CrNsSl) 1158+++8FB7~ LD (IY-100+VRS.AddToNs),A 1159+++8FB7~ BIT 5,B 1160+++8FB7~ JR Z,CH_MIX 1161+++8FB7~ LD (IX+CHP.CrNsSl),A 1162+++8FB7~ CH_MIX LD A,B 1163+++8FB7~ RRA 1164+++8FB7~ AND #48 1165+++8FB7~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8FB7~ RRCA 1167+++8FB7~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8FB7~ POP HL 1169+++8FB7~ XOR A 1170+++8FB7~ OR (IX+CHP.COnOff) 1171+++8FB7~ RET Z 1172+++8FB7~ DEC (IX+CHP.COnOff) 1173+++8FB7~ RET NZ 1174+++8FB7~ XOR (IX+CHP.Flags) 1175+++8FB7~ LD (IX+CHP.Flags),A 1176+++8FB7~ RRA 1177+++8FB7~ LD A,(IX+CHP.OnOffD) 1178+++8FB7~ JR C,CH_ONDL 1179+++8FB7~ LD A,(IX+CHP.OffOnD) 1180+++8FB7~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8FB7~ RET 1182+++8FB7~ 1183+++8FB7~ PLAY_ XOR A 1184+++8FB7~ LD (IY-100+VRS.AddToEn),A 1185+++8FB7~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8FB7~ DEC A 1187+++8FB7~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8FB7~ DEC (IY-100+VRS.DelyCnt) 1189+++8FB7~ JP NZ,PL2 1190+++8FB7~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8FB7~ JR NZ,PL1B 1192+++8FB7~ LD C,(IY-100+VRS.AdInPtA) 1193+++8FB7~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8FB7~ LD A,(BC) 1195+++8FB7~ AND A 1196+++8FB7~ JR NZ,PL1A 1197+++8FB7~ LD D,A 1198+++8FB7~ LD (IY-100+VRS.Ns_Base),A 1199+++8FB7~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8FB7~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8FB7~ INC HL 1202+++8FB7~ LD A,(HL) 1203+++8FB7~ INC A 1204+++8FB7~ JR NZ,PLNLP 1205+++8FB7~ 1206+++8FB7~ IF LoopChecker 1207+++8FB7~ CALL CHECKLP 1208+++8FB7~ ENDIF 1209+++8FB7~ 1210+++8FB7~ LD L,(IY-100+VRS.LPosPtr) 1211+++8FB7~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8FB7~ LD A,(HL) 1213+++8FB7~ INC A 1214+++8FB7~ PLNLP CALL SETCPPT 1215+++8FB7~ DEC A 1216+++8FB7~ BIT 1,(IY-100+VRS.ModNum) 1217+++8FB7~ JR Z,NoAlCo 1218+++8FB7~ TSSub EQU $+1 1219+++8FB7~ SUB #D6 1220+++8FB7~ CPL 1221+++8FB7~ NoAlCo 1222+++8FB7~ ;PT2 PT3 1223+++8FB7~ PsCalc DEC A ;ADD A,A NOP 1224+++8FB7~ DEC A ;ADD A,(HL) NOP 1225+++8FB7~ ADD A,A 1226+++8FB7~ LD E,A 1227+++8FB7~ RL D 1228+++8FB7~ 1229+++8FB7~ IF CurPosCounter 1230+++8FB7~ LD A,L 1231+++8FB7~ SUB (IY-100+VRS.PosSub) 1232+++8FB7~ LD (IY-100+VRS.CurPos),A 1233+++8FB7~ ENDIF 1234+++8FB7~ 1235+++8FB7~ LD L,(IY-100+VRS.PatsPtr) 1236+++8FB7~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8FB7~ ADD HL,DE 1238+++8FB7~ LD E,(IY-100+VRS.MODADDR) 1239+++8FB7~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8FB7~ LD (PSP_+1),SP 1241+++8FB7~ LD SP,HL 1242+++8FB7~ POP HL 1243+++8FB7~ ADD HL,DE 1244+++8FB7~ LD B,H 1245+++8FB7~ LD C,L 1246+++8FB7~ POP HL 1247+++8FB7~ ADD HL,DE 1248+++8FB7~ LD (IY-100+VRS.AdInPtB),L 1249+++8FB7~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8FB7~ POP HL 1251+++8FB7~ ADD HL,DE 1252+++8FB7~ LD (IY-100+VRS.AdInPtC),L 1253+++8FB7~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8FB7~ PSP_ LD SP,#3131 1255+++8FB7~ PL1A LD DE,VRS.ChanA+12-100 1256+++8FB7~ CALL PTDECOD 1257+++8FB7~ LD (IY-100+VRS.AdInPtA),C 1258+++8FB7~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8FB7~ 1260+++8FB7~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8FB7~ JR NZ,PL1C 1262+++8FB7~ LD DE,VRS.ChanB+12-100 1263+++8FB7~ LD C,(IY-100+VRS.AdInPtB) 1264+++8FB7~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8FB7~ CALL PTDECOD 1266+++8FB7~ LD (IY-100+VRS.AdInPtB),C 1267+++8FB7~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8FB7~ 1269+++8FB7~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8FB7~ JR NZ,PL1D 1271+++8FB7~ LD DE,VRS.ChanC+12-100 1272+++8FB7~ LD C,(IY-100+VRS.AdInPtC) 1273+++8FB7~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8FB7~ CALL PTDECOD 1275+++8FB7~ LD (IY-100+VRS.AdInPtC),C 1276+++8FB7~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8FB7~ 1278+++8FB7~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8FB7~ LD (IY-100+VRS.DelyCnt),A 1280+++8FB7~ 1281+++8FB7~ PL2 LD DE,VRS.ChanA-100 1282+++8FB7~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8FB7~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8FB7~ CALL CHREGS 1285+++8FB7~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8FB7~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8FB7~ Ampl EQU $+1 1288+++8FB7~ LD A,#3E 1289+++8FB7~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8FB7~ LD DE,VRS.ChanB-100 1291+++8FB7~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8FB7~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8FB7~ CALL CHREGS 1294+++8FB7~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8FB7~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8FB7~ LD A,(Ampl) 1297+++8FB7~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8FB7~ LD DE,VRS.ChanC-100 1299+++8FB7~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8FB7~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8FB7~ CALL CHREGS 1302+++8FB7~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8FB7~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8FB7~ LD A,(Ampl) 1305+++8FB7~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8FB7~ 1307+++8FB7~ LD A,(IY-100+VRS.Ns_Base) 1308+++8FB7~ ADD (IY-100+VRS.AddToNs) 1309+++8FB7~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8FB7~ 1311+++8FB7~ LD A,(IY-100+VRS.AddToEn) 1312+++8FB7~ LD E,A 1313+++8FB7~ ADD A,A 1314+++8FB7~ SBC A,A 1315+++8FB7~ LD D,A 1316+++8FB7~ LD L,(IY-100+VRS.EnvBase) 1317+++8FB7~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8FB7~ ADD HL,DE 1319+++8FB7~ LD E,(IY-100+VRS.CurESld) 1320+++8FB7~ LD D,(IY-100+VRS.CurESld+1) 1321+++8FB7~ ADD HL,DE 1322+++8FB7~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8FB7~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8FB7~ 1325+++8FB7~ XOR A 1326+++8FB7~ OR (IY-100+VRS.CurEDel) 1327+++8FB7~ RET Z 1328+++8FB7~ DEC (IY-100+VRS.CurEDel) 1329+++8FB7~ RET NZ 1330+++8FB7~ LD A,(IY-100+VRS.Env_Del) 1331+++8FB7~ LD (IY-100+VRS.CurEDel),A 1332+++8FB7~ LD L,(IY-100+VRS.ESldAdd) 1333+++8FB7~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8FB7~ ADD HL,DE 1335+++8FB7~ JP SETESLD 1336+++8FB7~ 1337+++8FB7~ PLAY LD IY,VARS1+100 1338+++8FB7~ CALL PLAY_ 1339+++8FB7~ LD A,(is_ts) 1340+++8FB7~ AND A 1341+++8FB7~ JR Z,PL_nts 1342+++8FB7~ LD IY,VARS2+100 1343+++8FB7~ CALL PLAY_ 1344+++8FB7~ PL_nts 1345+++8FB7~ IF Basic 1346+++8FB7~ LD IY,#5C3A 1347+++8FB7~ ENDIF 1348+++8FB7~ 1349+++8FB7~ ROUT LD BC,#FFFD 1350+++8FB7~ LD A,(is_ts) 1351+++8FB7~ AND A 1352+++8FB7~ IFDEF ONtfm 1353+++8FB7~ LD L,#F9 1354+++8FB7~ OUT (C),L 1355+++8FB7~ ELSE 1356+++8FB7~ JR Z,r_nts ;keep old standard 1357+++8FB7~ OUT (C),B 1358+++8FB7~ ENDIF 1359+++8FB7~ r_nts EX AF,AF' 1360+++8FB7~ 1361+++8FB7~ IF ACBBAC 1362+++8FB7~ LD IX,VARS1+VRS.AYREGS 1363+++8FB7~ ELSE 1364+++8FB7~ LD HL,VARS1+VRS.AYREGS 1365+++8FB7~ ENDIF 1366+++8FB7~ 1367+++8FB7~ CALL ROUT_ 1368+++8FB7~ EX AF,AF' 1369+++8FB7~ RET Z 1370+++8FB7~ LD B,D 1371+++8FB7~ 1372+++8FB7~ IFDEF ONtfm 1373+++8FB7~ LD A,#F8 1374+++8FB7~ ELSE 1375+++8FB7~ CPL 1376+++8FB7~ ENDIF 1377+++8FB7~ OUT (C),A 1378+++8FB7~ 1379+++8FB7~ IF ACBBAC 1380+++8FB7~ LD IX,VARS2+VRS.AYREGS 1381+++8FB7~ ELSE 1382+++8FB7~ LD HL,VARS2+VRS.AYREGS 1383+++8FB7~ ENDIF 1384+++8FB7~ 1385+++8FB7~ ROUT_ 1386+++8FB7~ IF ACBBAC 1387+++8FB7~ LD A,(SETUP) 1388+++8FB7~ AND 12 1389+++8FB7~ JR Z,ABC 1390+++8FB7~ ADD A,CHTABLE 1391+++8FB7~ LD E,A 1392+++8FB7~ ADC A,CHTABLE/256 1393+++8FB7~ SUB E 1394+++8FB7~ LD D,A 1395+++8FB7~ LD B,0 1396+++8FB7~ PUSH IX 1397+++8FB7~ POP HL 1398+++8FB7~ LD A,(DE) 1399+++8FB7~ INC DE 1400+++8FB7~ LD C,A 1401+++8FB7~ ADD HL,BC 1402+++8FB7~ LD A,(IX+TonB) 1403+++8FB7~ LD C,(HL) 1404+++8FB7~ LD (IX+TonB),C 1405+++8FB7~ LD (HL),A 1406+++8FB7~ INC HL 1407+++8FB7~ LD A,(IX+TonB+1) 1408+++8FB7~ LD C,(HL) 1409+++8FB7~ LD (IX+TonB+1),C 1410+++8FB7~ LD (HL),A 1411+++8FB7~ LD A,(DE) 1412+++8FB7~ INC DE 1413+++8FB7~ LD C,A 1414+++8FB7~ ADD HL,BC 1415+++8FB7~ LD A,(IX+AmplB) 1416+++8FB7~ LD C,(HL) 1417+++8FB7~ LD (IX+AmplB),C 1418+++8FB7~ LD (HL),A 1419+++8FB7~ LD A,(DE) 1420+++8FB7~ INC DE 1421+++8FB7~ LD (RxCA1),A 1422+++8FB7~ XOR 8 1423+++8FB7~ LD (RxCA2),A 1424+++8FB7~ LD A,(DE) 1425+++8FB7~ AND (IX+Mixer) 1426+++8FB7~ LD E,A 1427+++8FB7~ LD A,(IX+Mixer) 1428+++8FB7~ RxCA1 DB #E6 1429+++8FB7~ AND %010010 1430+++8FB7~ OR E 1431+++8FB7~ LD E,A 1432+++8FB7~ LD A,(IX+Mixer) 1433+++8FB7~ AND %010010 1434+++8FB7~ RxCA2 OR E 1435+++8FB7~ OR E 1436+++8FB7~ LD (IX+Mixer),A 1437+++8FB7~ ABC 1438+++8FB7~ ENDIF 1439+++8FB7~ 1440+++8FB7~ XOR A 1441+++8FB7~ LD DE,#FFBF 1442+++8FB7~ 1443+++8FB7~ IF ACBBAC 1444+++8FB7~ LD BC,#FFFD 1445+++8FB7~ PUSH IX 1446+++8FB7~ POP HL 1447+++8FB7~ ENDIF 1448+++8FB7~ 1449+++8FB7~ LOUT 1450+++8FB7~ IFDEF ONtfm 1451+++8FB7~ INF 1452+++8FB7~ JP M,$-2 1453+++8FB7~ ENDIF 1454+++8FB7~ OUT (C),A 1455+++8FB7~ IFDEF ONtfm 1456+++8FB7~ INF 1457+++8FB7~ JP M,$-2 1458+++8FB7~ ENDIF 1459+++8FB7~ LD B,E 1460+++8FB7~ OUTI 1461+++8FB7~ LD B,D 1462+++8FB7~ INC A 1463+++8FB7~ CP 13 1464+++8FB7~ JR NZ,LOUT 1465+++8FB7~ IFDEF ONtfm 1466+++8FB7~ INF 1467+++8FB7~ JP M,$-2 1468+++8FB7~ ENDIF 1469+++8FB7~ OUT (C),A 1470+++8FB7~ LD A,(HL) 1471+++8FB7~ AND A 1472+++8FB7~ RET M 1473+++8FB7~ IFDEF ONtfm 1474+++8FB7~ INF 1475+++8FB7~ JP M,$-2 1476+++8FB7~ ENDIF 1477+++8FB7~ LD B,E 1478+++8FB7~ OUT (C),A 1479+++8FB7~ RET 1480+++8FB7~ 1481+++8FB7~ IF ACBBAC 1482+++8FB7~ CHTABLE EQU $-4 1483+++8FB7~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8FB7~ ENDIF 1485+++8FB7~ 1486+++8FB7~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8FB7~ DB TCNEW_0-T_ 1488+++8FB7~ DB (T_OLD_0-T1_)*2+1 1489+++8FB7~ DB TCOLD_0-T_ 1490+++8FB7~ DB (T_NEW_1-T1_)*2+1 1491+++8FB7~ DB TCNEW_1-T_ 1492+++8FB7~ DB (T_OLD_1-T1_)*2+1 1493+++8FB7~ DB TCOLD_1-T_ 1494+++8FB7~ DB (T_NEW_2-T1_)*2 1495+++8FB7~ DB TCNEW_2-T_ 1496+++8FB7~ DB (T_OLD_2-T1_)*2 1497+++8FB7~ DB TCOLD_2-T_ 1498+++8FB7~ DB (T_NEW_3-T1_)*2 1499+++8FB7~ DB TCNEW_3-T_ 1500+++8FB7~ DB (T_OLD_3-T1_)*2 1501+++8FB7~ DB TCOLD_3-T_ 1502+++8FB7~ 1503+++8FB7~ T_ 1504+++8FB7~ 1505+++8FB7~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8FB7~ DB #18+1,#24+1,#3C+1,0 1507+++8FB7~ TCOLD_1 DB #5C+1,0 1508+++8FB7~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8FB7~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8FB7~ TCNEW_3 DB #56+1 1511+++8FB7~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8FB7~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8FB7~ DB #BC+1,#BE+1,0 1514+++8FB7~ TCNEW_1 EQU TCOLD_1 1515+++8FB7~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8FB7~ DB #BA+1,#BC+1,#BE+1,0 1517+++8FB7~ 1518+++8FB7~ PT3EMPTYORN EQU $-1 1519+++8FB7~ DB 1,0 1520+++8FB7~ 1521+++8FB7~ ;first 12 values of tone tables (packed) 1522+++8FB7~ 1523+++8FB7~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8FB7~ DB #0755-#06EC 1525+++8FB7~ DB #07C5-#0755 1526+++8FB7~ DB #083B-#07C5 1527+++8FB7~ DB #08B8-#083B 1528+++8FB7~ DB #093D-#08B8 1529+++8FB7~ DB #09CA-#093D 1530+++8FB7~ DB #0A5F-#09CA 1531+++8FB7~ DB #0AFC-#0A5F 1532+++8FB7~ DB #0BA4-#0AFC 1533+++8FB7~ DB #0C55-#0BA4 1534+++8FB7~ DB #0D10-#0C55 1535+++8FB7~ DB #066D*2/256,#066D*2&255 1536+++8FB7~ DB #06CF-#066D 1537+++8FB7~ DB #0737-#06CF 1538+++8FB7~ DB #07A4-#0737 1539+++8FB7~ DB #0819-#07A4 1540+++8FB7~ DB #0894-#0819 1541+++8FB7~ DB #0917-#0894 1542+++8FB7~ DB #09A1-#0917 1543+++8FB7~ DB #0A33-#09A1 1544+++8FB7~ DB #0ACF-#0A33 1545+++8FB7~ DB #0B73-#0ACF 1546+++8FB7~ DB #0C22-#0B73 1547+++8FB7~ DB #0CDA-#0C22 1548+++8FB7~ DB #0704*2/256,#0704*2&255 1549+++8FB7~ DB #076E-#0704 1550+++8FB7~ DB #07E0-#076E 1551+++8FB7~ DB #0858-#07E0 1552+++8FB7~ DB #08D6-#0858 1553+++8FB7~ DB #095C-#08D6 1554+++8FB7~ DB #09EC-#095C 1555+++8FB7~ DB #0A82-#09EC 1556+++8FB7~ DB #0B22-#0A82 1557+++8FB7~ DB #0BCC-#0B22 1558+++8FB7~ DB #0C80-#0BCC 1559+++8FB7~ DB #0D3E-#0C80 1560+++8FB7~ DB #07E0*2/256,#07E0*2&255 1561+++8FB7~ DB #0858-#07E0 1562+++8FB7~ DB #08E0-#0858 1563+++8FB7~ DB #0960-#08E0 1564+++8FB7~ DB #09F0-#0960 1565+++8FB7~ DB #0A88-#09F0 1566+++8FB7~ DB #0B28-#0A88 1567+++8FB7~ DB #0BD8-#0B28 1568+++8FB7~ DB #0C80-#0BD8 1569+++8FB7~ DB #0D60-#0C80 1570+++8FB7~ DB #0E10-#0D60 1571+++8FB7~ DB #0EF8-#0E10 1572+++8FB7~ 1573+++8FB7~ ;vars from here can be stripped 1574+++8FB7~ ;you can move VARS to any other address 1575+++8FB7~ 1576+++8FB7~ VARS 1577+++8FB7~ 1578+++8FB7~ is_ts DB 0 1579+++8FB7~ 1580+++8FB7~ ;ChannelsVars 1581+++8FB7~ STRUCT CHP 1582+++8FB7~ ;reset group 1583+++8FB7~ PsInOr DB 0 1584+++8FB7~ PsInSm DB 0 1585+++8FB7~ CrAmSl DB 0 1586+++8FB7~ CrNsSl DB 0 1587+++8FB7~ CrEnSl DB 0 1588+++8FB7~ TSlCnt DB 0 1589+++8FB7~ CrTnSl DW 0 1590+++8FB7~ TnAcc DW 0 1591+++8FB7~ COnOff DB 0 1592+++8FB7~ ;reset group 1593+++8FB7~ 1594+++8FB7~ OnOffD DB 0 1595+++8FB7~ 1596+++8FB7~ ;IX for PTDECOD here (+12) 1597+++8FB7~ OffOnD DB 0 1598+++8FB7~ OrnPtr DW 0 1599+++8FB7~ SamPtr DW 0 1600+++8FB7~ NNtSkp DB 0 1601+++8FB7~ Note DB 0 1602+++8FB7~ SlToNt DB 0 1603+++8FB7~ Env_En DB 0 1604+++8FB7~ Flags DB 0 1605+++8FB7~ ;Enabled - 0, SimpleGliss - 2 1606+++8FB7~ TnSlDl DB 0 1607+++8FB7~ TSlStp DW 0 1608+++8FB7~ TnDelt DW 0 1609+++8FB7~ NtSkCn DB 0 1610+++8FB7~ Volume DB 0 1611+++8FB7~ ENDS 1612+++8FB7~ 1613+++8FB7~ STRUCT VRS 1614+++8FB7~ 1615+++8FB7~ ;IF not works in STRUCT in SjASM :( 1616+++8FB7~ ; IF CurPosCounter 1617+++8FB7~ CurPos DB 0 1618+++8FB7~ PosSub DB 0 1619+++8FB7~ ; ENDIF 1620+++8FB7~ 1621+++8FB7~ ModNum DB 0 ;bit0: ChipNum 1622+++8FB7~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8FB7~ 1624+++8FB7~ ChanA DS CHP 1625+++8FB7~ ChanB DS CHP 1626+++8FB7~ ChanC DS CHP 1627+++8FB7~ 1628+++8FB7~ ;GlobalVars 1629+++8FB7~ MODADDR DW 0 1630+++8FB7~ OrnPtrs DW 0 1631+++8FB7~ SamPtrs DW 0 1632+++8FB7~ PatsPtr DW 0 1633+++8FB7~ AdInPtA DW 0 1634+++8FB7~ AdInPtB DW 0 1635+++8FB7~ AdInPtC DW 0 1636+++8FB7~ CrPsPtr DW 0 1637+++8FB7~ LPosPtr DW 0 1638+++8FB7~ Delay DB 0 1639+++8FB7~ DelyCnt DB 0 1640+++8FB7~ ESldAdd DW 0 1641+++8FB7~ CurESld DW 0 1642+++8FB7~ Env_Del DB 0 1643+++8FB7~ CurEDel DB 0 1644+++8FB7~ Ns_Base DB 0 1645+++8FB7~ AddToNs DB 0 1646+++8FB7~ AddToEn DB 0 1647+++8FB7~ EnvBase DW 0 1648+++8FB7~ AYREGS DS 14 1649+++8FB7~ ENDS 1650+++8FB7~ 1651+++8FB7~ VARS1 DS VRS 1652+++8FB7~ VARS2 DS VRS 1653+++8FB7~ 1654+++8FB7~ VT_ EQU $-16 1655+++8FB7~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8FB7~ 1657+++8FB7~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8FB7~ 1659+++8FB7~ T_OLD_1 EQU T1_ 1660+++8FB7~ T_OLD_2 EQU T_OLD_1+24 1661+++8FB7~ T_OLD_3 EQU T_OLD_2+24 1662+++8FB7~ T_OLD_0 EQU T_OLD_3+2 1663+++8FB7~ T_NEW_0 EQU T_OLD_0 1664+++8FB7~ T_NEW_1 EQU T_OLD_1 1665+++8FB7~ T_NEW_2 EQU T_NEW_0+24 1666+++8FB7~ T_NEW_3 EQU T_OLD_3 1667+++8FB7~ 1668+++8FB7~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8FB7~ 1670+++8FB7~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8FB7~ 1672+++8FB7~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8FB7~ 1674+++8FB7~ VARSEND EQU $ 1675+++8FB7~ MDLADDR EQU $ 1676+++8FB7~ 1677+++8FB7~ DISPLAY "PTS player size=",$-START 1678+++8FB7~ 1679+++8FB7~ ;Release 0 steps: 1680+++8FB7~ ;04/21/2007 1681+++8FB7~ ;Works start (PTxPlay adaptation); first beta. 1682+++8FB7~ ;04/22/2007 1683+++8FB7~ ;Job finished; beta-testing. 1684+++8FB7~ ;04/23/2007 1685+++8FB7~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8FB7~ ;04/29/2007 1687+++8FB7~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8FB7~ ;modules of v3.7+. 1689+++8FB7~ 1690+++8FB7~ ;Size (minimal build for ZX Spectrum): 1691+++8FB7~ ;Code block #908 bytes 1692+++8FB7~ ;Variables #2BF bytes (can be stripped) 1693+++8FB7~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8FB7~ 1695+++8FB7~ ENDMOD 1696+++8FB7~ 1697+++8FB7 endif 1698+++8FB7 0077+++8FB7 0078+++8FB7 PT2.Play=PTS.PLAY 0079+++8FB7 PT2.Mute=PTS.MUTE 0080+++8FB7 PT2.End 0081+++8FB7 0082+++8FB7 display "PT2 module size: ",PT2.End-PT2.Start 0083+++8FB7 endif 0084+++8FB7 0420++ 8FB7 include "ts.asm" 0001+++8FB7 ifndef _ts_asm_defined 0002+++8FB7 define _ts_asm_defined 0003+++8FB7 0004+++8FB7 module TS 0005+++8FB7 0006+++8FB7 struct Footer 0007+++8FB7~ Sign1 DS 4 0008+++8FB7~ Size1 DW 0 0009+++8FB7~ Sign2 DS 4 0010+++8FB7~ Size2 DW 0 0011+++8FB7~ Sign3 DS 4 0012+++8FB7 ENDS 0013+++8FB7 0014+++8FB7 Start 0015+++8FB7 ifndef NoPrologue 0016+++8FB7~ ld hl,End 0017+++8FB7~ jr .init 0018+++8FB7~ jp PTS.PLAY 0019+++8FB7~ jp PTS.MUTE 0020+++8FB7~ .init call CheckFormat 0021+++8FB7~ ;ignore invalids 0022+++8FB7 endif 0023+++8FB7 0024+++8FB7 3E 10 Init ld a,PTS.SETUP.TS02 0025+++8FB9 C3 6C 83 jp PTS.INIT 0026+++8FBC 0027+++8FBC ;in HL - module addr 0028+++8FBC ;out Z - is ts 0029+++8FBC ;out HL/DE modules offsets (valid only if Z) 0030+++8FBC CheckFormat 0031+++8FBD 54 5D ld d,h,e,l 0032+++8FBE 14 inc d ;skip 256 bytes 0033+++8FBF .findfooter 0034+++8FC0 62 6B ld h,d,l,e 0035+++8FC1 CD CE 8F call CheckFooter 0036+++8FC4 C8 ret z 0037+++8FC5 1C inc e 0038+++8FC6 20 F7 jr nz,.findfooter 0039+++8FC8 14 inc d 0040+++8FC9 20 F4 jr nz,.findfooter 0041+++8FCB 1C inc e ;reset Z 0042+++8FCC ;hl/de are invalid!!! 0043+++8FCC C9 ret 0044+++8FCD 0045+++8FCD ;in HL - module addr 0046+++8FCD ;in BC - module size 0047+++8FCD ;out Z - is ts 0048+++8FCD ;out HL/DE - modules offsets (valid only if Z) 0049+++8FCD ifdef HaveFormatCheck 0050+++8FCD CheckFormatKnownSize 0051+++8FCD 09 add hl,bc 0052+++8FCE endif 0053+++8FCE CheckFooter 0054+++8FCE 2B dec hl 0055+++8FCF 7E ld a,(hl) 0056+++8FD0 FE 53 cp "S" 0057+++8FD2 C0 ret nz 0058+++8FD3 2B dec hl 0059+++8FD4 7E ld a,(hl) 0060+++8FD5 FE 54 cp "T" 0061+++8FD7 C0 ret nz 0062+++8FD8 2B dec hl 0063+++8FD9 7E ld a,(hl) 0064+++8FDA FE 32 cp "2" 0065+++8FDC C0 ret nz 0066+++8FDD 2B dec hl 0067+++8FDE 7E ld a,(hl) 0068+++8FDF FE 30 cp "0" 0069+++8FE1 C0 ret nz 0070+++8FE2 2B dec hl 0071+++8FE3 56 ld d,(hl) 0072+++8FE4 2B dec hl 0073+++8FE5 5E ld e,(hl) ;Size2 0074+++8FE9 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign2 0075+++8FEA 2B dec hl 0076+++8FEB 46 ld b,(hl) 0077+++8FEC 2B dec hl 0078+++8FED 4E ld c,(hl) ;Size1 0079+++8FF1 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign1 0080+++8FF2 0081+++8FF2 ED 52 sbc hl,de 0082+++8FF4 54 ld d,h 0083+++8FF5 5D ld e,l 0084+++8FF6 ED 42 sbc hl,bc 0085+++8FF8 AF xor a 0086+++8FF9 C9 ret 0087+++8FFA 0088+++8FFA ifdef HaveFormatCheck 0089+++8FFA display "TS checker size: ",$-CheckFormat 0090+++8FFA endif 0091+++8FFA 0092+++8FFA endmod 0093+++8FFA 0094+++8FFA include "PTSPlay.asm" 0001+++8FFA ifndef _pts_asm_defined 0002+++8FFA~ define _pts_asm_defined 0003+++8FFA~ 0004+++8FFA~ MODULE PTS 0005+++8FFA~ 0006+++8FFA~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum 0007+++8FFA~ ;(c)2004-2007 S.V.Bulba 0008+++8FFA~ ;Specially for AlCo 0009+++8FFA~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/) 0010+++8FFA~ 0011+++8FFA~ ;Release number 0012+++8FFA~ Release EQU "0" 0013+++8FFA~ 0014+++8FFA~ ;Conditional assembly 0015+++8FFA~ ;1) Current position counters at (Vars1+0) and (Vars2+0) 0016+++8FFA~ CurPosCounter=0 0017+++8FFA~ ;2) Allow channels allocation bits at (SETUP) 0018+++8FFA~ ACBBAC=0 0019+++8FFA~ ;3) Allow loop checking and disabling 0020+++8FFA~ LoopChecker=0 0021+++8FFA~ ;4) Insert official identificator 0022+++8FFA~ Id=0 0023+++8FFA~ ;5) Set IY for correct return to ZX Basic 0024+++8FFA~ Basic=0 0025+++8FFA~ 0026+++8FFA~ ;Features 0027+++8FFA~ ;-------- 0028+++8FFA~ ;-Can be compiled at any address (i.e. no need rounding ORG 0029+++8FFA~ ; address). 0030+++8FFA~ ;-Variables (VARS) can be located at any address (not only after 0031+++8FFA~ ; code block). 0032+++8FFA~ ;-INIT subprogram checks PT3-module version and rightly 0033+++8FFA~ ; generates both note and volume tables outside of code block 0034+++8FFA~ ; (in VARS). 0035+++8FFA~ ;-Two portamento (spc. command 3xxx) algorithms (depending of 0036+++8FFA~ ; PT3 module version). 0037+++8FFA~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7 0038+++8FFA~ ; and higher). 0039+++8FFA~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). 0040+++8FFA~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard. 0041+++8FFA~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes. 0042+++8FFA~ ;-See also notes at the end of this source code. 0043+++8FFA~ 0044+++8FFA~ ;Limitations 0045+++8FFA~ ;----------- 0046+++8FFA~ ;-Can run in RAM only (self-modified code is used). 0047+++8FFA~ ;-PT2 position list must be end by #FF marker only. 0048+++8FFA~ 0049+++8FFA~ ;Warning!!! PLAY subprogram can crash if no module are loaded 0050+++8FFA~ ;into RAM or INIT subprogram was not called before. 0051+++8FFA~ 0052+++8FFA~ ;Call MUTE or INIT one more time to mute sound after stopping 0053+++8FFA~ ;playing 0054+++8FFA~ 0055+++8FFA~ TonA EQU 0 0056+++8FFA~ TonB EQU 2 0057+++8FFA~ TonC EQU 4 0058+++8FFA~ Noise EQU 6 0059+++8FFA~ Mixer EQU 7 0060+++8FFA~ AmplA EQU 8 0061+++8FFA~ AmplB EQU 9 0062+++8FFA~ AmplC EQU 10 0063+++8FFA~ Env EQU 11 0064+++8FFA~ EnvTp EQU 13 0065+++8FFA~ 0066+++8FFA~ START 0067+++8FFA~ 0068+++8FFA~ SETUP.NOLOOP EQU 1 0069+++8FFA~ SETUP.PT2 EQU 2 0070+++8FFA~ SETUP.ACB EQU 4 0071+++8FFA~ SETUP.BAC EQU 8 0072+++8FFA~ SETUP.TS02 EQU 16 0073+++8FFA~ SETUP.TSPT3 EQU 32 0074+++8FFA~ 0075+++8FFA~ SETUP DB 0 ;set bit0, if you want to play without looping 0076+++8FFA~ ;(optional); 0077+++8FFA~ ;set bit1 for PT2 and reset for PT3 before 0078+++8FFA~ ;calling INIT; 0079+++8FFA~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional); 0080+++8FFA~ ;bits4-5: %00-no TS, %01-2 modules TS, %10- 0081+++8FFA~ ;autodetect PT3 TS-format by AlCo (PT 3.7+); 0082+++8FFA~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not 0083+++8FFA~ ;documented and must be converted to new standard. 0084+++8FFA~ ;bit6 is set each time, when loop point of 2nd TS 0085+++8FFA~ ;module is passed (optional). 0086+++8FFA~ ;bit7 is set each time, when loop point of 1st TS 0087+++8FFA~ ;or of single module is passed (optional). 0088+++8FFA~ 0089+++8FFA~ ;Identifier 0090+++8FFA~ IF Id 0091+++8FFA~ DB "=UniPT2/PT3/TS-Player r.",Release,"=" 0092+++8FFA~ ENDIF 0093+++8FFA~ 0094+++8FFA~ IF LoopChecker 0095+++8FFA~ CHECKLP LD HL,SETUP 0096+++8FFA~ BIT 0,(IY-100+VRS.ModNum) 0097+++8FFA~ JR Z,CHL1 0098+++8FFA~ SET 6,(HL) 0099+++8FFA~ JR CHL2 0100+++8FFA~ CHL1 SET 7,(HL) 0101+++8FFA~ CHL2 BIT 0,(HL) 0102+++8FFA~ RET Z 0103+++8FFA~ POP HL 0104+++8FFA~ INC (IY-100+VRS.DelyCnt) 0105+++8FFA~ INC (IY-100+VRS.ChanA+CHP.NtSkCn) 0106+++8FFA~ XOR A 0107+++8FFA~ LD (IY-100+VRS.AYREGS+AmplA),A 0108+++8FFA~ LD (IY-100+VRS.AYREGS+AmplB),A 0109+++8FFA~ LD (IY-100+VRS.AYREGS+AmplC),A 0110+++8FFA~ RET 0111+++8FFA~ ENDIF 0112+++8FFA~ 0113+++8FFA~ MUTE XOR A 0114+++8FFA~ LD H,A 0115+++8FFA~ LD L,A 0116+++8FFA~ LD (VARS1+VRS.AYREGS+AmplA),A 0117+++8FFA~ LD (VARS1+VRS.AYREGS+AmplB),HL 0118+++8FFA~ LD (VARS2+VRS.AYREGS+AmplA),A 0119+++8FFA~ LD (VARS2+VRS.AYREGS+AmplB),HL 0120+++8FFA~ JP ROUT 0121+++8FFA~ 0122+++8FFA~ INIT 0123+++8FFA~ ;HL - AddressOfModule 0124+++8FFA~ ;DE - AddresOf2ndModule 0125+++8FFA~ ;A - mode 0126+++8FFA~ PUSH DE 0127+++8FFA~ PUSH HL 0128+++8FFA~ LD HL,VARS 0129+++8FFA~ LD (HL),0 0130+++8FFA~ LD DE,VARS+1 0131+++8FFA~ LD BC,VAR0END-VARS-1 0132+++8FFA~ LDIR 0133+++8FFA~ INC HL 0134+++8FFA~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero 0135+++8FFA~ LD (VARS2+VRS.AdInPtA),HL 0136+++8FFA~ 0137+++8FFA~ POP HL 0138+++8FFA~ LD IY,VARS1+100 0139+++8FFA~ LD (SETUP),A 0140+++8FFA~ AND SETUP.PT2 0141+++8FFA~ JP NZ,I_PT2 0142+++8FFA~ 0143+++8FFA~ CALL INITPT3 0144+++8FFA~ LD HL,(e_-SamCnv-2)*256+#18 0145+++8FFA~ LD (SamCnv),HL 0146+++8FFA~ LD A,#BA 0147+++8FFA~ LD (OrnCP),A 0148+++8FFA~ LD (SamCP),A 0149+++8FFA~ LD A,#7B 0150+++8FFA~ LD (OrnLD),A 0151+++8FFA~ LD (SamLD),A 0152+++8FFA~ LD A,#87 0153+++8FFA~ LD (SamClc2),A 0154+++8FFA~ POP HL 0155+++8FFA~ ;Use version and ton table of 1st module 0156+++8FFA~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER 0157+++8FFA~ SUB #30 0158+++8FFA~ JR C,L20 0159+++8FFA~ CP 10 0160+++8FFA~ JR C,L21 0161+++8FFA~ L20 LD A,6 0162+++8FFA~ L21 LD (Version),A 0163+++8FFA~ PUSH AF ;VolTable version 0164+++8FFA~ CP 4 0165+++8FFA~ LD A,(IX+99-100) ;TONE TABLE NUMBER 0166+++8FFA~ RLA 0167+++8FFA~ AND 7 0168+++8FFA~ PUSH AF ;NoteTable number 0169+++8FFA~ 0170+++8FFA~ LD IY,VARS2+100 0171+++8FFA~ LD A,(SETUP) 0172+++8FFA~ AND SETUP.TS02|SETUP.TSPT3 0173+++8FFA~ JR Z,NOTS 0174+++8FFA~ CP SETUP.TS02 0175+++8FFA~ JR Z,TwoPT3s 0176+++8FFA~ LD A,(Version) 0177+++8FFA~ CP 7 0178+++8FFA~ JR C,NOTS 0179+++8FFA~ LD A,(IX+98-100) ;ALCO TS MARKER 0180+++8FFA~ CP #20 0181+++8FFA~ JR Z,NOTS 0182+++8FFA~ LD HL,VARS1 0183+++8FFA~ LD DE,VARS2 0184+++8FFA~ LD BC,VRS 0185+++8FFA~ LDIR 0186+++8FFA~ SET 1,(IY-100+VRS.ModNum) 0187+++8FFA~ LD C,A 0188+++8FFA~ ADD A,A 0189+++8FFA~ ADD A,C 0190+++8FFA~ SUB 2 0191+++8FFA~ LD (TSSub),A 0192+++8FFA~ JR AlCoTS_ 0193+++8FFA~ TwoPT3s CALL INITPT3 0194+++8FFA~ AlCoTS_ LD A,1 0195+++8FFA~ LD (is_ts),A 0196+++8FFA~ SET 0,(IY-100+VRS.ModNum) 0197+++8FFA~ 0198+++8FFA~ NOTS LD BC,PT3PD 0199+++8FFA~ LD HL,0 0200+++8FFA~ LD DE,PT3EMPTYORN 0201+++8FFA~ JR INITCOMMON 0202+++8FFA~ 0203+++8FFA~ I_PT2 CALL INITPT2 0204+++8FFA~ LD HL,#51CB 0205+++8FFA~ LD (SamCnv),HL 0206+++8FFA~ LD A,#BB 0207+++8FFA~ LD (OrnCP),A 0208+++8FFA~ LD (SamCP),A 0209+++8FFA~ LD A,#7A 0210+++8FFA~ LD (OrnLD),A 0211+++8FFA~ LD (SamLD),A 0212+++8FFA~ LD A,#80 0213+++8FFA~ LD (SamClc2),A 0214+++8FFA~ POP HL 0215+++8FFA~ LD A,5 0216+++8FFA~ LD (Version),A 0217+++8FFA~ PUSH AF 0218+++8FFA~ LD A,2 0219+++8FFA~ PUSH AF 0220+++8FFA~ 0221+++8FFA~ LD A,(SETUP) 0222+++8FFA~ AND SETUP.TS02|SETUP.TSPT3 0223+++8FFA~ JR Z,NOTS2 0224+++8FFA~ 0225+++8FFA~ LD IY,VARS2+100 0226+++8FFA~ LD A,1 0227+++8FFA~ LD (is_ts),A 0228+++8FFA~ SET 0,(IY-100+VRS.ModNum) 0229+++8FFA~ CALL INITPT2 0230+++8FFA~ 0231+++8FFA~ NOTS2 LD BC,PT2PD 0232+++8FFA~ LD HL,#8687 0233+++8FFA~ LD DE,PT2EMPTYORN 0234+++8FFA~ 0235+++8FFA~ INITCOMMON 0236+++8FFA~ 0237+++8FFA~ IF Basic 0238+++8FFA~ LD IY,#5C3A 0239+++8FFA~ ENDIF 0240+++8FFA~ 0241+++8FFA~ LD (PTDEC),BC 0242+++8FFA~ LD (PsCalc),HL 0243+++8FFA~ PUSH DE 0244+++8FFA~ 0245+++8FFA~ ;note table data depacker 0246+++8FFA~ ;(c) Ivan Roshin 0247+++8FFA~ LD DE,T_PACK 0248+++8FFA~ LD BC,T1_+(2*49)-1 0249+++8FFA~ TP_0 LD A,(DE) 0250+++8FFA~ INC DE 0251+++8FFA~ CP 15*2 0252+++8FFA~ JR NC,TP_1 0253+++8FFA~ LD H,A 0254+++8FFA~ LD A,(DE) 0255+++8FFA~ LD L,A 0256+++8FFA~ INC DE 0257+++8FFA~ JR TP_2 0258+++8FFA~ TP_1 PUSH DE 0259+++8FFA~ LD D,0 0260+++8FFA~ LD E,A 0261+++8FFA~ ADD HL,DE 0262+++8FFA~ ADD HL,DE 0263+++8FFA~ POP DE 0264+++8FFA~ TP_2 LD A,H 0265+++8FFA~ LD (BC),A 0266+++8FFA~ DEC BC 0267+++8FFA~ LD A,L 0268+++8FFA~ LD (BC),A 0269+++8FFA~ DEC BC 0270+++8FFA~ SUB (#F8*2)&255 0271+++8FFA~ JR NZ,TP_0 0272+++8FFA~ 0273+++8FFA~ INC A 0274+++8FFA~ LD (VARS1+VRS.DelyCnt),A 0275+++8FFA~ LD (VARS2+VRS.DelyCnt),A 0276+++8FFA~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn 0277+++8FFA~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL 0278+++8FFA~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL 0279+++8FFA~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL 0280+++8FFA~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL 0281+++8FFA~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL 0282+++8FFA~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL 0283+++8FFA~ POP HL 0284+++8FFA~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL 0285+++8FFA~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL 0286+++8FFA~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL 0287+++8FFA~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL 0288+++8FFA~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL 0289+++8FFA~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL 0290+++8FFA~ 0291+++8FFA~ POP AF 0292+++8FFA~ 0293+++8FFA~ ;NoteTableCreator (c) Ivan Roshin 0294+++8FFA~ ;A - NoteTableNumber*2+VersionForNoteTable 0295+++8FFA~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) 0296+++8FFA~ 0297+++8FFA~ LD HL,NT_DATA 0298+++8FFA~ LD D,0 0299+++8FFA~ ADD A,A 0300+++8FFA~ LD E,A 0301+++8FFA~ ADD HL,DE 0302+++8FFA~ LD E,(HL) 0303+++8FFA~ INC HL 0304+++8FFA~ SRL E 0305+++8FFA~ SBC A,A 0306+++8FFA~ AND #A7 ;#00 (NOP) or #A7 (AND A) 0307+++8FFA~ LD (L3),A 0308+++8FFA~ EX DE,HL 0309+++8FFA~ LD BC,T1_ 0310+++8FFA~ ADD HL,BC 0311+++8FFA~ 0312+++8FFA~ LD A,(DE) 0313+++8FFA~ ADD A,T_&255 0314+++8FFA~ LD C,A 0315+++8FFA~ ADC A,T_/256 0316+++8FFA~ SUB C 0317+++8FFA~ LD B,A 0318+++8FFA~ PUSH BC 0319+++8FFA~ LD DE,NT_ 0320+++8FFA~ PUSH DE 0321+++8FFA~ 0322+++8FFA~ LD B,12 0323+++8FFA~ L1 PUSH BC 0324+++8FFA~ LD C,(HL) 0325+++8FFA~ INC HL 0326+++8FFA~ PUSH HL 0327+++8FFA~ LD B,(HL) 0328+++8FFA~ 0329+++8FFA~ PUSH DE 0330+++8FFA~ EX DE,HL 0331+++8FFA~ LD DE,23 0332+++8FFA~ LD IXH,8 0333+++8FFA~ 0334+++8FFA~ L2 SRL B 0335+++8FFA~ RR C 0336+++8FFA~ L3 DB #19 ;AND A or NOP 0337+++8FFA~ LD A,C 0338+++8FFA~ ADC A,D ;=ADC 0 0339+++8FFA~ LD (HL),A 0340+++8FFA~ INC HL 0341+++8FFA~ LD A,B 0342+++8FFA~ ADC A,D 0343+++8FFA~ LD (HL),A 0344+++8FFA~ ADD HL,DE 0345+++8FFA~ DEC IXH 0346+++8FFA~ JR NZ,L2 0347+++8FFA~ 0348+++8FFA~ POP DE 0349+++8FFA~ INC DE 0350+++8FFA~ INC DE 0351+++8FFA~ POP HL 0352+++8FFA~ INC HL 0353+++8FFA~ POP BC 0354+++8FFA~ DJNZ L1 0355+++8FFA~ 0356+++8FFA~ POP HL 0357+++8FFA~ POP DE 0358+++8FFA~ 0359+++8FFA~ LD A,E 0360+++8FFA~ CP TCOLD_1&255 0361+++8FFA~ JR NZ,CORR_1 0362+++8FFA~ LD A,#FD 0363+++8FFA~ LD (NT_+#2E),A 0364+++8FFA~ 0365+++8FFA~ CORR_1 LD A,(DE) 0366+++8FFA~ AND A 0367+++8FFA~ JR Z,TC_EXIT 0368+++8FFA~ RRA 0369+++8FFA~ PUSH AF 0370+++8FFA~ ADD A,A 0371+++8FFA~ LD C,A 0372+++8FFA~ ADD HL,BC 0373+++8FFA~ POP AF 0374+++8FFA~ JR NC,CORR_2 0375+++8FFA~ DEC (HL) 0376+++8FFA~ DEC (HL) 0377+++8FFA~ CORR_2 INC (HL) 0378+++8FFA~ AND A 0379+++8FFA~ SBC HL,BC 0380+++8FFA~ INC DE 0381+++8FFA~ JR CORR_1 0382+++8FFA~ 0383+++8FFA~ TC_EXIT 0384+++8FFA~ 0385+++8FFA~ POP AF 0386+++8FFA~ 0387+++8FFA~ ;VolTableCreator (c) Ivan Roshin 0388+++8FFA~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; 0389+++8FFA~ ;5.. - 2.x,3.5x..3.6x..VTII1.0) 0390+++8FFA~ 0391+++8FFA~ CP 5 0392+++8FFA~ LD HL,#11 0393+++8FFA~ LD D,H 0394+++8FFA~ LD E,H 0395+++8FFA~ LD A,#17 0396+++8FFA~ JR NC,M1 0397+++8FFA~ DEC L 0398+++8FFA~ LD E,L 0399+++8FFA~ XOR A 0400+++8FFA~ M1 LD (M2),A 0401+++8FFA~ 0402+++8FFA~ LD IX,VT_+16 0403+++8FFA~ 0404+++8FFA~ LD C,#F 0405+++8FFA~ INITV2 PUSH HL 0406+++8FFA~ 0407+++8FFA~ ADD HL,DE 0408+++8FFA~ EX DE,HL 0409+++8FFA~ SBC HL,HL 0410+++8FFA~ 0411+++8FFA~ LD B,#10 0412+++8FFA~ INITV1 LD A,L 0413+++8FFA~ M2 DB #7D 0414+++8FFA~ LD A,H 0415+++8FFA~ ADC A,0 0416+++8FFA~ LD (IX),A 0417+++8FFA~ INC IX 0418+++8FFA~ ADD HL,DE 0419+++8FFA~ DJNZ INITV1 0420+++8FFA~ 0421+++8FFA~ POP HL 0422+++8FFA~ LD A,E 0423+++8FFA~ CP #77 0424+++8FFA~ JR NZ,M3 0425+++8FFA~ INC E 0426+++8FFA~ M3 DEC C 0427+++8FFA~ JR NZ,INITV2 0428+++8FFA~ 0429+++8FFA~ JP ROUT 0430+++8FFA~ 0431+++8FFA~ INITPT3 CALL SETMDAD 0432+++8FFA~ PUSH HL 0433+++8FFA~ LD DE,100 0434+++8FFA~ ADD HL,DE 0435+++8FFA~ LD A,(HL) 0436+++8FFA~ LD (IY-100+VRS.Delay),A 0437+++8FFA~ PUSH HL 0438+++8FFA~ POP IX 0439+++8FFA~ ADD HL,DE 0440+++8FFA~ CALL SETCPPT 0441+++8FFA~ LD E,(IX+102-100) 0442+++8FFA~ INC HL 0443+++8FFA~ 0444+++8FFA~ IF CurPosCounter 0445+++8FFA~ LD (IY-100+VRS.PosSub),L 0446+++8FFA~ ENDIF 0447+++8FFA~ 0448+++8FFA~ ADD HL,DE 0449+++8FFA~ CALL SETLPPT 0450+++8FFA~ POP DE 0451+++8FFA~ LD L,(IX+103-100) 0452+++8FFA~ LD H,(IX+104-100) 0453+++8FFA~ ADD HL,DE 0454+++8FFA~ CALL SETPTPT 0455+++8FFA~ LD HL,169 0456+++8FFA~ ADD HL,DE 0457+++8FFA~ CALL SETORPT 0458+++8FFA~ LD HL,105 0459+++8FFA~ ADD HL,DE 0460+++8FFA~ 0461+++8FFA~ SETSMPT LD (IY-100+VRS.SamPtrs),L 0462+++8FFA~ LD (IY-100+VRS.SamPtrs+1),H 0463+++8FFA~ RET 0464+++8FFA~ 0465+++8FFA~ INITPT2 LD A,(HL) 0466+++8FFA~ LD (IY-100+VRS.Delay),A 0467+++8FFA~ PUSH HL 0468+++8FFA~ PUSH HL 0469+++8FFA~ PUSH HL 0470+++8FFA~ INC HL 0471+++8FFA~ INC HL 0472+++8FFA~ LD A,(HL) 0473+++8FFA~ INC HL 0474+++8FFA~ CALL SETSMPT 0475+++8FFA~ LD E,(HL) 0476+++8FFA~ INC HL 0477+++8FFA~ LD D,(HL) 0478+++8FFA~ POP HL 0479+++8FFA~ AND A 0480+++8FFA~ SBC HL,DE 0481+++8FFA~ CALL SETMDAD 0482+++8FFA~ POP HL 0483+++8FFA~ LD DE,67 0484+++8FFA~ ADD HL,DE 0485+++8FFA~ CALL SETORPT 0486+++8FFA~ LD E,32 0487+++8FFA~ ADD HL,DE 0488+++8FFA~ LD C,(HL) 0489+++8FFA~ INC HL 0490+++8FFA~ LD B,(HL) 0491+++8FFA~ LD E,30 0492+++8FFA~ ADD HL,DE 0493+++8FFA~ CALL SETCPPT 0494+++8FFA~ LD E,A 0495+++8FFA~ INC HL 0496+++8FFA~ 0497+++8FFA~ IF CurPosCounter 0498+++8FFA~ LD (IY-100+VRS.PosSub),L 0499+++8FFA~ ENDIF 0500+++8FFA~ 0501+++8FFA~ ADD HL,DE 0502+++8FFA~ CALL SETLPPT 0503+++8FFA~ POP HL 0504+++8FFA~ ADD HL,BC 0505+++8FFA~ 0506+++8FFA~ SETPTPT LD (IY-100+VRS.PatsPtr),L 0507+++8FFA~ LD (IY-100+VRS.PatsPtr+1),H 0508+++8FFA~ RET 0509+++8FFA~ 0510+++8FFA~ SETMDAD LD (IY-100+VRS.MODADDR),L 0511+++8FFA~ LD (IY-100+VRS.MODADDR+1),H 0512+++8FFA~ RET 0513+++8FFA~ 0514+++8FFA~ SETORPT LD (IY-100+VRS.OrnPtrs),L 0515+++8FFA~ LD (IY-100+VRS.OrnPtrs+1),H 0516+++8FFA~ RET 0517+++8FFA~ 0518+++8FFA~ SETCPPT LD (IY-100+VRS.CrPsPtr),L 0519+++8FFA~ LD (IY-100+VRS.CrPsPtr+1),H 0520+++8FFA~ RET 0521+++8FFA~ 0522+++8FFA~ SETLPPT LD (IY-100+VRS.LPosPtr),L 0523+++8FFA~ LD (IY-100+VRS.LPosPtr+1),H 0524+++8FFA~ RET 0525+++8FFA~ 0526+++8FFA~ SETENBS LD (IY-100+VRS.EnvBase),L 0527+++8FFA~ LD (IY-100+VRS.EnvBase+1),H 0528+++8FFA~ RET 0529+++8FFA~ 0530+++8FFA~ SETESLD LD (IY-100+VRS.CurESld),L 0531+++8FFA~ LD (IY-100+VRS.CurESld+1),H 0532+++8FFA~ RET 0533+++8FFA~ 0534+++8FFA~ GETIX PUSH IY 0535+++8FFA~ POP IX 0536+++8FFA~ ADD IX,DE 0537+++8FFA~ RET 0538+++8FFA~ 0539+++8FFA~ PTDECOD CALL GETIX 0540+++8FFA~ PTDEC EQU $+1 0541+++8FFA~ JP #C3C3 0542+++8FFA~ 0543+++8FFA~ ;PT2 pattern decoder 0544+++8FFA~ PD2_SAM CALL SETSAM 0545+++8FFA~ JR PD2_LOOP 0546+++8FFA~ 0547+++8FFA~ PD2_EOff LD (IX-12+CHP.Env_En),A 0548+++8FFA~ JR PD2_LOOP 0549+++8FFA~ 0550+++8FFA~ PD2_ENV LD (IX-12+CHP.Env_En),16 0551+++8FFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 0552+++8FFA~ LD A,(BC) 0553+++8FFA~ INC BC 0554+++8FFA~ LD L,A 0555+++8FFA~ LD A,(BC) 0556+++8FFA~ INC BC 0557+++8FFA~ LD H,A 0558+++8FFA~ CALL SETENBS 0559+++8FFA~ JR PD2_LOOP 0560+++8FFA~ 0561+++8FFA~ PD2_ORN CALL SETORN 0562+++8FFA~ JR PD2_LOOP 0563+++8FFA~ 0564+++8FFA~ PD2_SKIP INC A 0565+++8FFA~ LD (IX-12+CHP.NNtSkp),A 0566+++8FFA~ JR PD2_LOOP 0567+++8FFA~ 0568+++8FFA~ PD2_VOL RRCA 0569+++8FFA~ RRCA 0570+++8FFA~ RRCA 0571+++8FFA~ RRCA 0572+++8FFA~ LD (IX-12+CHP.Volume),A 0573+++8FFA~ JR PD2_LOOP 0574+++8FFA~ 0575+++8FFA~ PD2_DEL CALL C_DELAY 0576+++8FFA~ JR PD2_LOOP 0577+++8FFA~ 0578+++8FFA~ PD2_GLIS SET 2,(IX-12+CHP.Flags) 0579+++8FFA~ INC A 0580+++8FFA~ LD (IX-12+CHP.TnSlDl),A 0581+++8FFA~ LD (IX-12+CHP.TSlCnt),A 0582+++8FFA~ LD A,(BC) 0583+++8FFA~ INC BC 0584+++8FFA~ LD (IX-12+CHP.TSlStp),A 0585+++8FFA~ ADD A,A 0586+++8FFA~ SBC A,A 0587+++8FFA~ LD (IX-12+CHP.TSlStp+1),A 0588+++8FFA~ SCF 0589+++8FFA~ JR PD2_LP2 0590+++8FFA~ 0591+++8FFA~ PT2PD AND A 0592+++8FFA~ 0593+++8FFA~ PD2_LP2 EX AF,AF' 0594+++8FFA~ 0595+++8FFA~ PD2_LOOP LD A,(BC) 0596+++8FFA~ INC BC 0597+++8FFA~ ADD A,#20 0598+++8FFA~ JR Z,PD2_REL 0599+++8FFA~ JR C,PD2_SAM 0600+++8FFA~ ADD A,96 0601+++8FFA~ JR C,PD2_NOTE 0602+++8FFA~ INC A 0603+++8FFA~ JR Z,PD2_EOff 0604+++8FFA~ ADD A,15 0605+++8FFA~ JP Z,PD_FIN 0606+++8FFA~ JR C,PD2_ENV 0607+++8FFA~ ADD A,#10 0608+++8FFA~ JR C,PD2_ORN 0609+++8FFA~ ADD A,#40 0610+++8FFA~ JR C,PD2_SKIP 0611+++8FFA~ ADD A,#10 0612+++8FFA~ JR C,PD2_VOL 0613+++8FFA~ INC A 0614+++8FFA~ JR Z,PD2_DEL 0615+++8FFA~ INC A 0616+++8FFA~ JR Z,PD2_GLIS 0617+++8FFA~ INC A 0618+++8FFA~ JR Z,PD2_PORT 0619+++8FFA~ INC A 0620+++8FFA~ JR Z,PD2_STOP 0621+++8FFA~ LD A,(BC) 0622+++8FFA~ INC BC 0623+++8FFA~ LD (IX-12+CHP.CrNsSl),A 0624+++8FFA~ JR PD2_LOOP 0625+++8FFA~ 0626+++8FFA~ PD2_PORT RES 2,(IX-12+CHP.Flags) 0627+++8FFA~ LD A,(BC) 0628+++8FFA~ INC BC 0629+++8FFA~ INC BC ;ignoring precalc delta to right sound 0630+++8FFA~ INC BC 0631+++8FFA~ SCF 0632+++8FFA~ JR PD2_LP2 0633+++8FFA~ 0634+++8FFA~ PD2_STOP LD (IX-12+CHP.TSlCnt),A 0635+++8FFA~ JR PD2_LOOP 0636+++8FFA~ 0637+++8FFA~ PD2_REL LD (IX-12+CHP.Flags),A 0638+++8FFA~ JR PD2_EXIT 0639+++8FFA~ 0640+++8FFA~ PD2_NOTE LD L,A 0641+++8FFA~ LD A,(IX-12+CHP.Note) 0642+++8FFA~ LD (PrNote+1),A 0643+++8FFA~ LD (IX-12+CHP.Note),L 0644+++8FFA~ XOR A 0645+++8FFA~ LD (IX-12+CHP.TSlCnt),A 0646+++8FFA~ SET 0,(IX-12+CHP.Flags) 0647+++8FFA~ EX AF,AF' 0648+++8FFA~ JR NC,NOGLIS2 0649+++8FFA~ BIT 2,(IX-12+CHP.Flags) 0650+++8FFA~ JR NZ,NOPORT2 0651+++8FFA~ LD (LoStep),A 0652+++8FFA~ ADD A,A 0653+++8FFA~ SBC A,A 0654+++8FFA~ EX AF,AF' 0655+++8FFA~ LD H,A 0656+++8FFA~ LD L,A 0657+++8FFA~ INC A 0658+++8FFA~ CALL SETPORT 0659+++8FFA~ NOPORT2 LD (IX-12+CHP.TSlCnt),1 0660+++8FFA~ NOGLIS2 XOR A 0661+++8FFA~ 0662+++8FFA~ 0663+++8FFA~ PD2_EXIT LD (IX-12+CHP.PsInSm),A 0664+++8FFA~ LD (IX-12+CHP.PsInOr),A 0665+++8FFA~ LD (IX-12+CHP.CrTnSl),A 0666+++8FFA~ LD (IX-12+CHP.CrTnSl+1),A 0667+++8FFA~ JP PD_FIN 0668+++8FFA~ 0669+++8FFA~ ;PT3 pattern decoder 0670+++8FFA~ PD_OrSm LD (IX-12+CHP.Env_En),0 0671+++8FFA~ CALL SETORN 0672+++8FFA~ PD_SAM_ LD A,(BC) 0673+++8FFA~ INC BC 0674+++8FFA~ RRCA 0675+++8FFA~ 0676+++8FFA~ PD_SAM CALL SETSAM 0677+++8FFA~ JR PD_LOOP 0678+++8FFA~ 0679+++8FFA~ PD_VOL RRCA 0680+++8FFA~ RRCA 0681+++8FFA~ RRCA 0682+++8FFA~ RRCA 0683+++8FFA~ LD (IX-12+CHP.Volume),A 0684+++8FFA~ JR PD_LP2 0685+++8FFA~ 0686+++8FFA~ PD_EOff LD (IX-12+CHP.Env_En),A 0687+++8FFA~ LD (IX-12+CHP.PsInOr),A 0688+++8FFA~ JR PD_LP2 0689+++8FFA~ 0690+++8FFA~ PD_SorE DEC A 0691+++8FFA~ JR NZ,PD_ENV 0692+++8FFA~ LD A,(BC) 0693+++8FFA~ INC BC 0694+++8FFA~ LD (IX-12+CHP.NNtSkp),A 0695+++8FFA~ JR PD_LP2 0696+++8FFA~ 0697+++8FFA~ PD_ENV CALL SETENV 0698+++8FFA~ JR PD_LP2 0699+++8FFA~ 0700+++8FFA~ PD_ORN CALL SETORN 0701+++8FFA~ JR PD_LOOP 0702+++8FFA~ 0703+++8FFA~ PD_ESAM LD (IX-12+CHP.Env_En),A 0704+++8FFA~ LD (IX-12+CHP.PsInOr),A 0705+++8FFA~ CALL NZ,SETENV 0706+++8FFA~ JR PD_SAM_ 0707+++8FFA~ 0708+++8FFA~ PT3PD LD A,(IX-12+CHP.Note) 0709+++8FFA~ LD (PrNote+1),A 0710+++8FFA~ LD L,(IX-12+CHP.CrTnSl) 0711+++8FFA~ LD H,(IX-12+CHP.CrTnSl+1) 0712+++8FFA~ LD (PrSlide+1),HL 0713+++8FFA~ 0714+++8FFA~ PD_LOOP LD DE,#2010 0715+++8FFA~ PD_LP2 LD A,(BC) 0716+++8FFA~ INC BC 0717+++8FFA~ ADD A,E 0718+++8FFA~ JR C,PD_OrSm 0719+++8FFA~ ADD A,D 0720+++8FFA~ JR Z,PD_FIN 0721+++8FFA~ JR C,PD_SAM 0722+++8FFA~ ADD A,E 0723+++8FFA~ JR Z,PD_REL 0724+++8FFA~ JR C,PD_VOL 0725+++8FFA~ ADD A,E 0726+++8FFA~ JR Z,PD_EOff 0727+++8FFA~ JR C,PD_SorE 0728+++8FFA~ ADD A,96 0729+++8FFA~ JR C,PD_NOTE 0730+++8FFA~ ADD A,E 0731+++8FFA~ JR C,PD_ORN 0732+++8FFA~ ADD A,D 0733+++8FFA~ JR C,PD_NOIS 0734+++8FFA~ ADD A,E 0735+++8FFA~ JR C,PD_ESAM 0736+++8FFA~ ADD A,A 0737+++8FFA~ LD E,A 0738+++8FFA~ LD HL,(SPCCOMS+#FF20-#2000)&65535 0739+++8FFA~ ADD HL,DE 0740+++8FFA~ LD E,(HL) 0741+++8FFA~ INC HL 0742+++8FFA~ LD D,(HL) 0743+++8FFA~ PUSH DE 0744+++8FFA~ JR PD_LOOP 0745+++8FFA~ 0746+++8FFA~ PD_NOIS LD (IY-100+VRS.Ns_Base),A 0747+++8FFA~ JR PD_LP2 0748+++8FFA~ 0749+++8FFA~ PD_REL RES 0,(IX-12+CHP.Flags) 0750+++8FFA~ JR PD_RES 0751+++8FFA~ 0752+++8FFA~ PD_NOTE LD (IX-12+CHP.Note),A 0753+++8FFA~ SET 0,(IX-12+CHP.Flags) 0754+++8FFA~ XOR A 0755+++8FFA~ 0756+++8FFA~ PD_RES LD (PDSP_+1),SP 0757+++8FFA~ LD SP,IX 0758+++8FFA~ LD H,A 0759+++8FFA~ LD L,A 0760+++8FFA~ PUSH HL 0761+++8FFA~ PUSH HL 0762+++8FFA~ PUSH HL 0763+++8FFA~ PUSH HL 0764+++8FFA~ PUSH HL 0765+++8FFA~ PUSH HL 0766+++8FFA~ PDSP_ LD SP,#3131 0767+++8FFA~ 0768+++8FFA~ PD_FIN LD A,(IX-12+CHP.NNtSkp) 0769+++8FFA~ LD (IX-12+CHP.NtSkCn),A 0770+++8FFA~ RET 0771+++8FFA~ 0772+++8FFA~ C_PORTM LD A,(BC) 0773+++8FFA~ INC BC 0774+++8FFA~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE 0775+++8FFA~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION) 0776+++8FFA~ INC BC 0777+++8FFA~ INC BC 0778+++8FFA~ EX AF,AF' 0779+++8FFA~ LD A,(BC) ;SIGNED TONE STEP 0780+++8FFA~ INC BC 0781+++8FFA~ LD (LoStep),A 0782+++8FFA~ LD A,(BC) 0783+++8FFA~ INC BC 0784+++8FFA~ AND A 0785+++8FFA~ EX AF,AF' 0786+++8FFA~ LD L,(IX-12+CHP.CrTnSl) 0787+++8FFA~ LD H,(IX-12+CHP.CrTnSl+1) 0788+++8FFA~ 0789+++8FFA~ ;Set portamento variables 0790+++8FFA~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl 0791+++8FFA~ 0792+++8FFA~ SETPORT RES 2,(IX-12+CHP.Flags) 0793+++8FFA~ LD (IX-12+CHP.TnSlDl),A 0794+++8FFA~ LD (IX-12+CHP.TSlCnt),A 0795+++8FFA~ PUSH HL 0796+++8FFA~ LD DE,NT_ 0797+++8FFA~ LD A,(IX-12+CHP.Note) 0798+++8FFA~ LD (IX-12+CHP.SlToNt),A 0799+++8FFA~ ADD A,A 0800+++8FFA~ LD L,A 0801+++8FFA~ LD H,0 0802+++8FFA~ ADD HL,DE 0803+++8FFA~ LD A,(HL) 0804+++8FFA~ INC HL 0805+++8FFA~ LD H,(HL) 0806+++8FFA~ LD L,A 0807+++8FFA~ PUSH HL 0808+++8FFA~ PrNote LD A,#3E 0809+++8FFA~ LD (IX-12+CHP.Note),A 0810+++8FFA~ ADD A,A 0811+++8FFA~ LD L,A 0812+++8FFA~ LD H,0 0813+++8FFA~ ADD HL,DE 0814+++8FFA~ LD E,(HL) 0815+++8FFA~ INC HL 0816+++8FFA~ LD D,(HL) 0817+++8FFA~ POP HL 0818+++8FFA~ SBC HL,DE 0819+++8FFA~ LD (IX-12+CHP.TnDelt),L 0820+++8FFA~ LD (IX-12+CHP.TnDelt+1),H 0821+++8FFA~ POP DE 0822+++8FFA~ Version EQU $+1 0823+++8FFA~ LD A,#3E 0824+++8FFA~ CP 6 0825+++8FFA~ JR C,OLDPRTM ;Old 3xxx for PT v3.5- 0826+++8FFA~ PrSlide LD DE,#1111 0827+++8FFA~ LD (IX-12+CHP.CrTnSl),E 0828+++8FFA~ LD (IX-12+CHP.CrTnSl+1),D 0829+++8FFA~ LoStep EQU $+1 0830+++8FFA~ OLDPRTM LD A,#3E 0831+++8FFA~ EX AF,AF' 0832+++8FFA~ JR Z,NOSIG 0833+++8FFA~ EX DE,HL 0834+++8FFA~ NOSIG SBC HL,DE 0835+++8FFA~ JP P,SET_STP 0836+++8FFA~ CPL 0837+++8FFA~ EX AF,AF' 0838+++8FFA~ NEG 0839+++8FFA~ EX AF,AF' 0840+++8FFA~ SET_STP LD (IX-12+CHP.TSlStp+1),A 0841+++8FFA~ EX AF,AF' 0842+++8FFA~ LD (IX-12+CHP.TSlStp),A 0843+++8FFA~ LD (IX-12+CHP.COnOff),0 0844+++8FFA~ RET 0845+++8FFA~ 0846+++8FFA~ C_GLISS SET 2,(IX-12+CHP.Flags) 0847+++8FFA~ LD A,(BC) 0848+++8FFA~ INC BC 0849+++8FFA~ LD (IX-12+CHP.TnSlDl),A 0850+++8FFA~ AND A 0851+++8FFA~ JR NZ,GL36 0852+++8FFA~ LD A,(Version) ;AlCo PT3.7+ 0853+++8FFA~ CP 7 0854+++8FFA~ SBC A,A 0855+++8FFA~ INC A 0856+++8FFA~ GL36 LD (IX-12+CHP.TSlCnt),A 0857+++8FFA~ LD A,(BC) 0858+++8FFA~ INC BC 0859+++8FFA~ EX AF,AF' 0860+++8FFA~ LD A,(BC) 0861+++8FFA~ INC BC 0862+++8FFA~ JR SET_STP 0863+++8FFA~ 0864+++8FFA~ C_SMPOS LD A,(BC) 0865+++8FFA~ INC BC 0866+++8FFA~ LD (IX-12+CHP.PsInSm),A 0867+++8FFA~ RET 0868+++8FFA~ 0869+++8FFA~ C_ORPOS LD A,(BC) 0870+++8FFA~ INC BC 0871+++8FFA~ LD (IX-12+CHP.PsInOr),A 0872+++8FFA~ RET 0873+++8FFA~ 0874+++8FFA~ C_VIBRT LD A,(BC) 0875+++8FFA~ INC BC 0876+++8FFA~ LD (IX-12+CHP.OnOffD),A 0877+++8FFA~ LD (IX-12+CHP.COnOff),A 0878+++8FFA~ LD A,(BC) 0879+++8FFA~ INC BC 0880+++8FFA~ LD (IX-12+CHP.OffOnD),A 0881+++8FFA~ XOR A 0882+++8FFA~ LD (IX-12+CHP.TSlCnt),A 0883+++8FFA~ LD (IX-12+CHP.CrTnSl),A 0884+++8FFA~ LD (IX-12+CHP.CrTnSl+1),A 0885+++8FFA~ RET 0886+++8FFA~ 0887+++8FFA~ C_ENGLS LD A,(BC) 0888+++8FFA~ INC BC 0889+++8FFA~ LD (IY-100+VRS.Env_Del),A 0890+++8FFA~ LD (IY-100+VRS.CurEDel),A 0891+++8FFA~ LD A,(BC) 0892+++8FFA~ INC BC 0893+++8FFA~ LD L,A 0894+++8FFA~ LD A,(BC) 0895+++8FFA~ INC BC 0896+++8FFA~ LD H,A 0897+++8FFA~ LD (IY-100+VRS.ESldAdd),L 0898+++8FFA~ LD (IY-100+VRS.ESldAdd+1),H 0899+++8FFA~ RET 0900+++8FFA~ 0901+++8FFA~ C_DELAY LD A,(BC) 0902+++8FFA~ INC BC 0903+++8FFA~ LD (IY-100+VRS.Delay),A 0904+++8FFA~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS 0905+++8FFA~ BIT 1,(HL) 0906+++8FFA~ RET Z 0907+++8FFA~ LD (VARS1+VRS.Delay),A 0908+++8FFA~ LD (VARS1+VRS.DelyCnt),A 0909+++8FFA~ LD (VARS2+VRS.Delay),A 0910+++8FFA~ RET 0911+++8FFA~ 0912+++8FFA~ SETENV LD (IX-12+CHP.Env_En),E 0913+++8FFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 0914+++8FFA~ LD A,(BC) 0915+++8FFA~ INC BC 0916+++8FFA~ LD H,A 0917+++8FFA~ LD A,(BC) 0918+++8FFA~ INC BC 0919+++8FFA~ LD L,A 0920+++8FFA~ CALL SETENBS 0921+++8FFA~ XOR A 0922+++8FFA~ LD (IX-12+CHP.PsInOr),A 0923+++8FFA~ LD (IY-100+VRS.CurEDel),A 0924+++8FFA~ LD H,A 0925+++8FFA~ LD L,A 0926+++8FFA~ JP SETESLD 0927+++8FFA~ 0928+++8FFA~ SETORN ADD A,A 0929+++8FFA~ LD E,A 0930+++8FFA~ LD D,0 0931+++8FFA~ LD (IX-12+CHP.PsInOr),D 0932+++8FFA~ LD L,(IY-100+VRS.OrnPtrs) 0933+++8FFA~ LD H,(IY-100+VRS.OrnPtrs+1) 0934+++8FFA~ ADD HL,DE 0935+++8FFA~ LD E,(HL) 0936+++8FFA~ INC HL 0937+++8FFA~ LD D,(HL) 0938+++8FFA~ LD L,(IY-100+VRS.MODADDR) 0939+++8FFA~ LD H,(IY-100+VRS.MODADDR+1) 0940+++8FFA~ ADD HL,DE 0941+++8FFA~ LD (IX-12+CHP.OrnPtr),L 0942+++8FFA~ LD (IX-12+CHP.OrnPtr+1),H 0943+++8FFA~ C_NOP RET 0944+++8FFA~ 0945+++8FFA~ SETSAM ADD A,A 0946+++8FFA~ LD E,A 0947+++8FFA~ LD D,0 0948+++8FFA~ LD L,(IY-100+VRS.SamPtrs); 0949+++8FFA~ LD H,(IY-100+VRS.SamPtrs+1); 0950+++8FFA~ ADD HL,DE 0951+++8FFA~ LD E,(HL) 0952+++8FFA~ INC HL 0953+++8FFA~ LD D,(HL) 0954+++8FFA~ LD L,(IY-100+VRS.MODADDR) 0955+++8FFA~ LD H,(IY-100+VRS.MODADDR+1) 0956+++8FFA~ ADD HL,DE 0957+++8FFA~ LD (IX-12+CHP.SamPtr),L 0958+++8FFA~ LD (IX-12+CHP.SamPtr+1),H 0959+++8FFA~ RET 0960+++8FFA~ 0961+++8FFA~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES 0962+++8FFA~ SPCCOMS DW C_NOP 0963+++8FFA~ DW C_GLISS 0964+++8FFA~ DW C_PORTM 0965+++8FFA~ DW C_SMPOS 0966+++8FFA~ DW C_ORPOS 0967+++8FFA~ DW C_VIBRT 0968+++8FFA~ DW C_NOP 0969+++8FFA~ DW C_NOP 0970+++8FFA~ DW C_ENGLS 0971+++8FFA~ DW C_DELAY 0972+++8FFA~ DW C_NOP 0973+++8FFA~ DW C_NOP 0974+++8FFA~ DW C_NOP 0975+++8FFA~ DW C_NOP 0976+++8FFA~ DW C_NOP 0977+++8FFA~ DW C_NOP 0978+++8FFA~ 0979+++8FFA~ CHREGS CALL GETIX 0980+++8FFA~ XOR A 0981+++8FFA~ LD (Ampl),A 0982+++8FFA~ BIT 0,(IX+CHP.Flags) 0983+++8FFA~ PUSH HL 0984+++8FFA~ JP Z,CH_EXIT 0985+++8FFA~ LD (CSP_+1),SP 0986+++8FFA~ LD L,(IX+CHP.OrnPtr) 0987+++8FFA~ LD H,(IX+CHP.OrnPtr+1) 0988+++8FFA~ LD SP,HL 0989+++8FFA~ POP DE 0990+++8FFA~ LD H,A 0991+++8FFA~ LD A,(IX+CHP.PsInOr) 0992+++8FFA~ LD L,A 0993+++8FFA~ ADD HL,SP 0994+++8FFA~ INC A 0995+++8FFA~ ;PT2 PT3 0996+++8FFA~ OrnCP INC A ;CP E CP D 0997+++8FFA~ JR C,CH_ORPS 0998+++8FFA~ OrnLD DB 1 ;LD A,D LD A,E 0999+++8FFA~ CH_ORPS LD (IX+CHP.PsInOr),A 1000+++8FFA~ LD A,(IX+CHP.Note) 1001+++8FFA~ ADD A,(HL) 1002+++8FFA~ JP P,CH_NTP 1003+++8FFA~ XOR A 1004+++8FFA~ CH_NTP CP 96 1005+++8FFA~ JR C,CH_NOK 1006+++8FFA~ LD A,95 1007+++8FFA~ CH_NOK ADD A,A 1008+++8FFA~ EX AF,AF' 1009+++8FFA~ LD L,(IX+CHP.SamPtr) 1010+++8FFA~ LD H,(IX+CHP.SamPtr+1) 1011+++8FFA~ LD SP,HL 1012+++8FFA~ POP DE 1013+++8FFA~ LD H,0 1014+++8FFA~ LD A,(IX+CHP.PsInSm) 1015+++8FFA~ LD B,A 1016+++8FFA~ ADD A,A 1017+++8FFA~ SamClc2 ADD A,A ;or ADD A,B for PT2 1018+++8FFA~ LD L,A 1019+++8FFA~ ADD HL,SP 1020+++8FFA~ LD SP,HL 1021+++8FFA~ LD A,B 1022+++8FFA~ INC A 1023+++8FFA~ ;PT2 PT3 1024+++8FFA~ SamCP INC A ;CP E CP D 1025+++8FFA~ JR C,CH_SMPS 1026+++8FFA~ SamLD DB 1 ;LD A,D LD A,E 1027+++8FFA~ CH_SMPS LD (IX+CHP.PsInSm),A 1028+++8FFA~ POP BC 1029+++8FFA~ POP HL 1030+++8FFA~ 1031+++8FFA~ ;Convert PT2 sample to PT3 1032+++8FFA~ ;PT2 PT3 1033+++8FFA~ SamCnv POP HL ;BIT 2,C JR e_ 1034+++8FFA~ POP HL 1035+++8FFA~ LD H,B 1036+++8FFA~ JR NZ,$+8 1037+++8FFA~ EX DE,HL 1038+++8FFA~ AND A 1039+++8FFA~ SBC HL,HL 1040+++8FFA~ SBC HL,DE 1041+++8FFA~ LD D,C 1042+++8FFA~ RR C 1043+++8FFA~ SBC A,A 1044+++8FFA~ CPL 1045+++8FFA~ AND #3E 1046+++8FFA~ RR C 1047+++8FFA~ RR B 1048+++8FFA~ AND C 1049+++8FFA~ LD C,A 1050+++8FFA~ LD A,B 1051+++8FFA~ RRA 1052+++8FFA~ RRA 1053+++8FFA~ RR D 1054+++8FFA~ RRA 1055+++8FFA~ AND #9F 1056+++8FFA~ LD B,A 1057+++8FFA~ 1058+++8FFA~ e_ LD E,(IX+CHP.TnAcc) 1059+++8FFA~ LD D,(IX+CHP.TnAcc+1) 1060+++8FFA~ ADD HL,DE 1061+++8FFA~ BIT 6,B 1062+++8FFA~ JR Z,CH_NOAC 1063+++8FFA~ LD (IX+CHP.TnAcc),L 1064+++8FFA~ LD (IX+CHP.TnAcc+1),H 1065+++8FFA~ CH_NOAC EX DE,HL 1066+++8FFA~ EX AF,AF' 1067+++8FFA~ ADD A,NT_&255 1068+++8FFA~ LD L,A 1069+++8FFA~ ADC A,NT_/256 1070+++8FFA~ SUB L 1071+++8FFA~ LD H,A 1072+++8FFA~ LD SP,HL 1073+++8FFA~ POP HL 1074+++8FFA~ ADD HL,DE 1075+++8FFA~ LD E,(IX+CHP.CrTnSl) 1076+++8FFA~ LD D,(IX+CHP.CrTnSl+1) 1077+++8FFA~ ADD HL,DE 1078+++8FFA~ CSP_ LD SP,#3131 1079+++8FFA~ EX (SP),HL 1080+++8FFA~ XOR A 1081+++8FFA~ OR (IX+CHP.TSlCnt) 1082+++8FFA~ JR Z,CH_AMP 1083+++8FFA~ DEC (IX+CHP.TSlCnt) 1084+++8FFA~ JR NZ,CH_AMP 1085+++8FFA~ LD A,(IX+CHP.TnSlDl) 1086+++8FFA~ LD (IX+CHP.TSlCnt),A 1087+++8FFA~ LD L,(IX+CHP.TSlStp) 1088+++8FFA~ LD H,(IX+CHP.TSlStp+1) 1089+++8FFA~ LD A,H 1090+++8FFA~ ADD HL,DE 1091+++8FFA~ LD (IX+CHP.CrTnSl),L 1092+++8FFA~ LD (IX+CHP.CrTnSl+1),H 1093+++8FFA~ BIT 2,(IX+CHP.Flags) 1094+++8FFA~ JR NZ,CH_AMP 1095+++8FFA~ LD E,(IX+CHP.TnDelt) 1096+++8FFA~ LD D,(IX+CHP.TnDelt+1) 1097+++8FFA~ AND A 1098+++8FFA~ JR Z,CH_STPP 1099+++8FFA~ EX DE,HL 1100+++8FFA~ CH_STPP SBC HL,DE 1101+++8FFA~ JP M,CH_AMP 1102+++8FFA~ LD A,(IX+CHP.SlToNt) 1103+++8FFA~ LD (IX+CHP.Note),A 1104+++8FFA~ XOR A 1105+++8FFA~ LD (IX+CHP.TSlCnt),A 1106+++8FFA~ LD (IX+CHP.CrTnSl),A 1107+++8FFA~ LD (IX+CHP.CrTnSl+1),A 1108+++8FFA~ CH_AMP LD A,(IX+CHP.CrAmSl) 1109+++8FFA~ BIT 7,C 1110+++8FFA~ JR Z,CH_NOAM 1111+++8FFA~ BIT 6,C 1112+++8FFA~ JR Z,CH_AMIN 1113+++8FFA~ CP 15 1114+++8FFA~ JR Z,CH_NOAM 1115+++8FFA~ INC A 1116+++8FFA~ JR CH_SVAM 1117+++8FFA~ CH_AMIN CP -15 1118+++8FFA~ JR Z,CH_NOAM 1119+++8FFA~ DEC A 1120+++8FFA~ CH_SVAM LD (IX+CHP.CrAmSl),A 1121+++8FFA~ CH_NOAM LD L,A 1122+++8FFA~ LD A,B 1123+++8FFA~ AND 15 1124+++8FFA~ ADD A,L 1125+++8FFA~ JP P,CH_APOS 1126+++8FFA~ XOR A 1127+++8FFA~ CH_APOS CP 16 1128+++8FFA~ JR C,CH_VOL 1129+++8FFA~ LD A,15 1130+++8FFA~ CH_VOL OR (IX+CHP.Volume) 1131+++8FFA~ ADD A,VT_&255 1132+++8FFA~ LD L,A 1133+++8FFA~ ADC A,VT_/256 1134+++8FFA~ SUB L 1135+++8FFA~ LD H,A 1136+++8FFA~ LD A,(HL) 1137+++8FFA~ CH_ENV BIT 0,C 1138+++8FFA~ JR NZ,CH_NOEN 1139+++8FFA~ OR (IX+CHP.Env_En) 1140+++8FFA~ CH_NOEN LD (Ampl),A 1141+++8FFA~ BIT 7,B 1142+++8FFA~ LD A,C 1143+++8FFA~ JR Z,NO_ENSL 1144+++8FFA~ RLA 1145+++8FFA~ RLA 1146+++8FFA~ SRA A 1147+++8FFA~ SRA A 1148+++8FFA~ SRA A 1149+++8FFA~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW 1150+++8FFA~ BIT 5,B 1151+++8FFA~ JR Z,NO_ENAC 1152+++8FFA~ LD (IX+CHP.CrEnSl),A 1153+++8FFA~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE 1154+++8FFA~ LD (IY-100+VRS.AddToEn),A 1155+++8FFA~ JR CH_MIX 1156+++8FFA~ NO_ENSL RRA 1157+++8FFA~ ADD A,(IX+CHP.CrNsSl) 1158+++8FFA~ LD (IY-100+VRS.AddToNs),A 1159+++8FFA~ BIT 5,B 1160+++8FFA~ JR Z,CH_MIX 1161+++8FFA~ LD (IX+CHP.CrNsSl),A 1162+++8FFA~ CH_MIX LD A,B 1163+++8FFA~ RRA 1164+++8FFA~ AND #48 1165+++8FFA~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer) 1166+++8FFA~ RRCA 1167+++8FFA~ LD (IY-100+VRS.AYREGS+Mixer),A 1168+++8FFA~ POP HL 1169+++8FFA~ XOR A 1170+++8FFA~ OR (IX+CHP.COnOff) 1171+++8FFA~ RET Z 1172+++8FFA~ DEC (IX+CHP.COnOff) 1173+++8FFA~ RET NZ 1174+++8FFA~ XOR (IX+CHP.Flags) 1175+++8FFA~ LD (IX+CHP.Flags),A 1176+++8FFA~ RRA 1177+++8FFA~ LD A,(IX+CHP.OnOffD) 1178+++8FFA~ JR C,CH_ONDL 1179+++8FFA~ LD A,(IX+CHP.OffOnD) 1180+++8FFA~ CH_ONDL LD (IX+CHP.COnOff),A 1181+++8FFA~ RET 1182+++8FFA~ 1183+++8FFA~ PLAY_ XOR A 1184+++8FFA~ LD (IY-100+VRS.AddToEn),A 1185+++8FFA~ LD (IY-100+VRS.AYREGS+Mixer),A 1186+++8FFA~ DEC A 1187+++8FFA~ LD (IY-100+VRS.AYREGS+EnvTp),A 1188+++8FFA~ DEC (IY-100+VRS.DelyCnt) 1189+++8FFA~ JP NZ,PL2 1190+++8FFA~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn) 1191+++8FFA~ JR NZ,PL1B 1192+++8FFA~ LD C,(IY-100+VRS.AdInPtA) 1193+++8FFA~ LD B,(IY-100+VRS.AdInPtA+1) 1194+++8FFA~ LD A,(BC) 1195+++8FFA~ AND A 1196+++8FFA~ JR NZ,PL1A 1197+++8FFA~ LD D,A 1198+++8FFA~ LD (IY-100+VRS.Ns_Base),A 1199+++8FFA~ LD L,(IY-100+VRS.CrPsPtr) 1200+++8FFA~ LD H,(IY-100+VRS.CrPsPtr+1) 1201+++8FFA~ INC HL 1202+++8FFA~ LD A,(HL) 1203+++8FFA~ INC A 1204+++8FFA~ JR NZ,PLNLP 1205+++8FFA~ 1206+++8FFA~ IF LoopChecker 1207+++8FFA~ CALL CHECKLP 1208+++8FFA~ ENDIF 1209+++8FFA~ 1210+++8FFA~ LD L,(IY-100+VRS.LPosPtr) 1211+++8FFA~ LD H,(IY-100+VRS.LPosPtr+1) 1212+++8FFA~ LD A,(HL) 1213+++8FFA~ INC A 1214+++8FFA~ PLNLP CALL SETCPPT 1215+++8FFA~ DEC A 1216+++8FFA~ BIT 1,(IY-100+VRS.ModNum) 1217+++8FFA~ JR Z,NoAlCo 1218+++8FFA~ TSSub EQU $+1 1219+++8FFA~ SUB #D6 1220+++8FFA~ CPL 1221+++8FFA~ NoAlCo 1222+++8FFA~ ;PT2 PT3 1223+++8FFA~ PsCalc DEC A ;ADD A,A NOP 1224+++8FFA~ DEC A ;ADD A,(HL) NOP 1225+++8FFA~ ADD A,A 1226+++8FFA~ LD E,A 1227+++8FFA~ RL D 1228+++8FFA~ 1229+++8FFA~ IF CurPosCounter 1230+++8FFA~ LD A,L 1231+++8FFA~ SUB (IY-100+VRS.PosSub) 1232+++8FFA~ LD (IY-100+VRS.CurPos),A 1233+++8FFA~ ENDIF 1234+++8FFA~ 1235+++8FFA~ LD L,(IY-100+VRS.PatsPtr) 1236+++8FFA~ LD H,(IY-100+VRS.PatsPtr+1) 1237+++8FFA~ ADD HL,DE 1238+++8FFA~ LD E,(IY-100+VRS.MODADDR) 1239+++8FFA~ LD D,(IY-100+VRS.MODADDR+1) 1240+++8FFA~ LD (PSP_+1),SP 1241+++8FFA~ LD SP,HL 1242+++8FFA~ POP HL 1243+++8FFA~ ADD HL,DE 1244+++8FFA~ LD B,H 1245+++8FFA~ LD C,L 1246+++8FFA~ POP HL 1247+++8FFA~ ADD HL,DE 1248+++8FFA~ LD (IY-100+VRS.AdInPtB),L 1249+++8FFA~ LD (IY-100+VRS.AdInPtB+1),H 1250+++8FFA~ POP HL 1251+++8FFA~ ADD HL,DE 1252+++8FFA~ LD (IY-100+VRS.AdInPtC),L 1253+++8FFA~ LD (IY-100+VRS.AdInPtC+1),H 1254+++8FFA~ PSP_ LD SP,#3131 1255+++8FFA~ PL1A LD DE,VRS.ChanA+12-100 1256+++8FFA~ CALL PTDECOD 1257+++8FFA~ LD (IY-100+VRS.AdInPtA),C 1258+++8FFA~ LD (IY-100+VRS.AdInPtA+1),B 1259+++8FFA~ 1260+++8FFA~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn) 1261+++8FFA~ JR NZ,PL1C 1262+++8FFA~ LD DE,VRS.ChanB+12-100 1263+++8FFA~ LD C,(IY-100+VRS.AdInPtB) 1264+++8FFA~ LD B,(IY-100+VRS.AdInPtB+1) 1265+++8FFA~ CALL PTDECOD 1266+++8FFA~ LD (IY-100+VRS.AdInPtB),C 1267+++8FFA~ LD (IY-100+VRS.AdInPtB+1),B 1268+++8FFA~ 1269+++8FFA~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn) 1270+++8FFA~ JR NZ,PL1D 1271+++8FFA~ LD DE,VRS.ChanC+12-100 1272+++8FFA~ LD C,(IY-100+VRS.AdInPtC) 1273+++8FFA~ LD B,(IY-100+VRS.AdInPtC+1) 1274+++8FFA~ CALL PTDECOD 1275+++8FFA~ LD (IY-100+VRS.AdInPtC),C 1276+++8FFA~ LD (IY-100+VRS.AdInPtC+1),B 1277+++8FFA~ 1278+++8FFA~ PL1D LD A,(IY-100+VRS.Delay) 1279+++8FFA~ LD (IY-100+VRS.DelyCnt),A 1280+++8FFA~ 1281+++8FFA~ PL2 LD DE,VRS.ChanA-100 1282+++8FFA~ LD L,(IY-100+VRS.AYREGS+TonA) 1283+++8FFA~ LD H,(IY-100+VRS.AYREGS+TonA+1) 1284+++8FFA~ CALL CHREGS 1285+++8FFA~ LD (IY-100+VRS.AYREGS+TonA),L 1286+++8FFA~ LD (IY-100+VRS.AYREGS+TonA+1),H 1287+++8FFA~ Ampl EQU $+1 1288+++8FFA~ LD A,#3E 1289+++8FFA~ LD (IY-100+VRS.AYREGS+AmplA),A 1290+++8FFA~ LD DE,VRS.ChanB-100 1291+++8FFA~ LD L,(IY-100+VRS.AYREGS+TonB) 1292+++8FFA~ LD H,(IY-100+VRS.AYREGS+TonB+1) 1293+++8FFA~ CALL CHREGS 1294+++8FFA~ LD (IY-100+VRS.AYREGS+TonB),L 1295+++8FFA~ LD (IY-100+VRS.AYREGS+TonB+1),H 1296+++8FFA~ LD A,(Ampl) 1297+++8FFA~ LD (IY-100+VRS.AYREGS+AmplB),A 1298+++8FFA~ LD DE,VRS.ChanC-100 1299+++8FFA~ LD L,(IY-100+VRS.AYREGS+TonC) 1300+++8FFA~ LD H,(IY-100+VRS.AYREGS+TonC+1) 1301+++8FFA~ CALL CHREGS 1302+++8FFA~ LD (IY-100+VRS.AYREGS+TonC),L 1303+++8FFA~ LD (IY-100+VRS.AYREGS+TonC+1),H 1304+++8FFA~ LD A,(Ampl) 1305+++8FFA~ LD (IY-100+VRS.AYREGS+AmplC),A 1306+++8FFA~ 1307+++8FFA~ LD A,(IY-100+VRS.Ns_Base) 1308+++8FFA~ ADD (IY-100+VRS.AddToNs) 1309+++8FFA~ LD (IY-100+VRS.AYREGS+Noise),A 1310+++8FFA~ 1311+++8FFA~ LD A,(IY-100+VRS.AddToEn) 1312+++8FFA~ LD E,A 1313+++8FFA~ ADD A,A 1314+++8FFA~ SBC A,A 1315+++8FFA~ LD D,A 1316+++8FFA~ LD L,(IY-100+VRS.EnvBase) 1317+++8FFA~ LD H,(IY-100+VRS.EnvBase+1) 1318+++8FFA~ ADD HL,DE 1319+++8FFA~ LD E,(IY-100+VRS.CurESld) 1320+++8FFA~ LD D,(IY-100+VRS.CurESld+1) 1321+++8FFA~ ADD HL,DE 1322+++8FFA~ LD (IY-100+VRS.AYREGS+Env),L 1323+++8FFA~ LD (IY-100+VRS.AYREGS+Env+1),H 1324+++8FFA~ 1325+++8FFA~ XOR A 1326+++8FFA~ OR (IY-100+VRS.CurEDel) 1327+++8FFA~ RET Z 1328+++8FFA~ DEC (IY-100+VRS.CurEDel) 1329+++8FFA~ RET NZ 1330+++8FFA~ LD A,(IY-100+VRS.Env_Del) 1331+++8FFA~ LD (IY-100+VRS.CurEDel),A 1332+++8FFA~ LD L,(IY-100+VRS.ESldAdd) 1333+++8FFA~ LD H,(IY-100+VRS.ESldAdd+1) 1334+++8FFA~ ADD HL,DE 1335+++8FFA~ JP SETESLD 1336+++8FFA~ 1337+++8FFA~ PLAY LD IY,VARS1+100 1338+++8FFA~ CALL PLAY_ 1339+++8FFA~ LD A,(is_ts) 1340+++8FFA~ AND A 1341+++8FFA~ JR Z,PL_nts 1342+++8FFA~ LD IY,VARS2+100 1343+++8FFA~ CALL PLAY_ 1344+++8FFA~ PL_nts 1345+++8FFA~ IF Basic 1346+++8FFA~ LD IY,#5C3A 1347+++8FFA~ ENDIF 1348+++8FFA~ 1349+++8FFA~ ROUT LD BC,#FFFD 1350+++8FFA~ LD A,(is_ts) 1351+++8FFA~ AND A 1352+++8FFA~ IFDEF ONtfm 1353+++8FFA~ LD L,#F9 1354+++8FFA~ OUT (C),L 1355+++8FFA~ ELSE 1356+++8FFA~ JR Z,r_nts ;keep old standard 1357+++8FFA~ OUT (C),B 1358+++8FFA~ ENDIF 1359+++8FFA~ r_nts EX AF,AF' 1360+++8FFA~ 1361+++8FFA~ IF ACBBAC 1362+++8FFA~ LD IX,VARS1+VRS.AYREGS 1363+++8FFA~ ELSE 1364+++8FFA~ LD HL,VARS1+VRS.AYREGS 1365+++8FFA~ ENDIF 1366+++8FFA~ 1367+++8FFA~ CALL ROUT_ 1368+++8FFA~ EX AF,AF' 1369+++8FFA~ RET Z 1370+++8FFA~ LD B,D 1371+++8FFA~ 1372+++8FFA~ IFDEF ONtfm 1373+++8FFA~ LD A,#F8 1374+++8FFA~ ELSE 1375+++8FFA~ CPL 1376+++8FFA~ ENDIF 1377+++8FFA~ OUT (C),A 1378+++8FFA~ 1379+++8FFA~ IF ACBBAC 1380+++8FFA~ LD IX,VARS2+VRS.AYREGS 1381+++8FFA~ ELSE 1382+++8FFA~ LD HL,VARS2+VRS.AYREGS 1383+++8FFA~ ENDIF 1384+++8FFA~ 1385+++8FFA~ ROUT_ 1386+++8FFA~ IF ACBBAC 1387+++8FFA~ LD A,(SETUP) 1388+++8FFA~ AND 12 1389+++8FFA~ JR Z,ABC 1390+++8FFA~ ADD A,CHTABLE 1391+++8FFA~ LD E,A 1392+++8FFA~ ADC A,CHTABLE/256 1393+++8FFA~ SUB E 1394+++8FFA~ LD D,A 1395+++8FFA~ LD B,0 1396+++8FFA~ PUSH IX 1397+++8FFA~ POP HL 1398+++8FFA~ LD A,(DE) 1399+++8FFA~ INC DE 1400+++8FFA~ LD C,A 1401+++8FFA~ ADD HL,BC 1402+++8FFA~ LD A,(IX+TonB) 1403+++8FFA~ LD C,(HL) 1404+++8FFA~ LD (IX+TonB),C 1405+++8FFA~ LD (HL),A 1406+++8FFA~ INC HL 1407+++8FFA~ LD A,(IX+TonB+1) 1408+++8FFA~ LD C,(HL) 1409+++8FFA~ LD (IX+TonB+1),C 1410+++8FFA~ LD (HL),A 1411+++8FFA~ LD A,(DE) 1412+++8FFA~ INC DE 1413+++8FFA~ LD C,A 1414+++8FFA~ ADD HL,BC 1415+++8FFA~ LD A,(IX+AmplB) 1416+++8FFA~ LD C,(HL) 1417+++8FFA~ LD (IX+AmplB),C 1418+++8FFA~ LD (HL),A 1419+++8FFA~ LD A,(DE) 1420+++8FFA~ INC DE 1421+++8FFA~ LD (RxCA1),A 1422+++8FFA~ XOR 8 1423+++8FFA~ LD (RxCA2),A 1424+++8FFA~ LD A,(DE) 1425+++8FFA~ AND (IX+Mixer) 1426+++8FFA~ LD E,A 1427+++8FFA~ LD A,(IX+Mixer) 1428+++8FFA~ RxCA1 DB #E6 1429+++8FFA~ AND %010010 1430+++8FFA~ OR E 1431+++8FFA~ LD E,A 1432+++8FFA~ LD A,(IX+Mixer) 1433+++8FFA~ AND %010010 1434+++8FFA~ RxCA2 OR E 1435+++8FFA~ OR E 1436+++8FFA~ LD (IX+Mixer),A 1437+++8FFA~ ABC 1438+++8FFA~ ENDIF 1439+++8FFA~ 1440+++8FFA~ XOR A 1441+++8FFA~ LD DE,#FFBF 1442+++8FFA~ 1443+++8FFA~ IF ACBBAC 1444+++8FFA~ LD BC,#FFFD 1445+++8FFA~ PUSH IX 1446+++8FFA~ POP HL 1447+++8FFA~ ENDIF 1448+++8FFA~ 1449+++8FFA~ LOUT 1450+++8FFA~ IFDEF ONtfm 1451+++8FFA~ INF 1452+++8FFA~ JP M,$-2 1453+++8FFA~ ENDIF 1454+++8FFA~ OUT (C),A 1455+++8FFA~ IFDEF ONtfm 1456+++8FFA~ INF 1457+++8FFA~ JP M,$-2 1458+++8FFA~ ENDIF 1459+++8FFA~ LD B,E 1460+++8FFA~ OUTI 1461+++8FFA~ LD B,D 1462+++8FFA~ INC A 1463+++8FFA~ CP 13 1464+++8FFA~ JR NZ,LOUT 1465+++8FFA~ IFDEF ONtfm 1466+++8FFA~ INF 1467+++8FFA~ JP M,$-2 1468+++8FFA~ ENDIF 1469+++8FFA~ OUT (C),A 1470+++8FFA~ LD A,(HL) 1471+++8FFA~ AND A 1472+++8FFA~ RET M 1473+++8FFA~ IFDEF ONtfm 1474+++8FFA~ INF 1475+++8FFA~ JP M,$-2 1476+++8FFA~ ENDIF 1477+++8FFA~ LD B,E 1478+++8FFA~ OUT (C),A 1479+++8FFA~ RET 1480+++8FFA~ 1481+++8FFA~ IF ACBBAC 1482+++8FFA~ CHTABLE EQU $-4 1483+++8FFA~ DB 4,5,15,%001001,0,7,7,%100100 1484+++8FFA~ ENDIF 1485+++8FFA~ 1486+++8FFA~ NT_DATA DB (T_NEW_0-T1_)*2 1487+++8FFA~ DB TCNEW_0-T_ 1488+++8FFA~ DB (T_OLD_0-T1_)*2+1 1489+++8FFA~ DB TCOLD_0-T_ 1490+++8FFA~ DB (T_NEW_1-T1_)*2+1 1491+++8FFA~ DB TCNEW_1-T_ 1492+++8FFA~ DB (T_OLD_1-T1_)*2+1 1493+++8FFA~ DB TCOLD_1-T_ 1494+++8FFA~ DB (T_NEW_2-T1_)*2 1495+++8FFA~ DB TCNEW_2-T_ 1496+++8FFA~ DB (T_OLD_2-T1_)*2 1497+++8FFA~ DB TCOLD_2-T_ 1498+++8FFA~ DB (T_NEW_3-T1_)*2 1499+++8FFA~ DB TCNEW_3-T_ 1500+++8FFA~ DB (T_OLD_3-T1_)*2 1501+++8FFA~ DB TCOLD_3-T_ 1502+++8FFA~ 1503+++8FFA~ T_ 1504+++8FFA~ 1505+++8FFA~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 1506+++8FFA~ DB #18+1,#24+1,#3C+1,0 1507+++8FFA~ TCOLD_1 DB #5C+1,0 1508+++8FFA~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C 1509+++8FFA~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0 1510+++8FFA~ TCNEW_3 DB #56+1 1511+++8FFA~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 1512+++8FFA~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 1513+++8FFA~ DB #BC+1,#BE+1,0 1514+++8FFA~ TCNEW_1 EQU TCOLD_1 1515+++8FFA~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1 1516+++8FFA~ DB #BA+1,#BC+1,#BE+1,0 1517+++8FFA~ 1518+++8FFA~ PT3EMPTYORN EQU $-1 1519+++8FFA~ DB 1,0 1520+++8FFA~ 1521+++8FFA~ ;first 12 values of tone tables (packed) 1522+++8FFA~ 1523+++8FFA~ T_PACK DB #06EC*2/256,#06EC*2&255 1524+++8FFA~ DB #0755-#06EC 1525+++8FFA~ DB #07C5-#0755 1526+++8FFA~ DB #083B-#07C5 1527+++8FFA~ DB #08B8-#083B 1528+++8FFA~ DB #093D-#08B8 1529+++8FFA~ DB #09CA-#093D 1530+++8FFA~ DB #0A5F-#09CA 1531+++8FFA~ DB #0AFC-#0A5F 1532+++8FFA~ DB #0BA4-#0AFC 1533+++8FFA~ DB #0C55-#0BA4 1534+++8FFA~ DB #0D10-#0C55 1535+++8FFA~ DB #066D*2/256,#066D*2&255 1536+++8FFA~ DB #06CF-#066D 1537+++8FFA~ DB #0737-#06CF 1538+++8FFA~ DB #07A4-#0737 1539+++8FFA~ DB #0819-#07A4 1540+++8FFA~ DB #0894-#0819 1541+++8FFA~ DB #0917-#0894 1542+++8FFA~ DB #09A1-#0917 1543+++8FFA~ DB #0A33-#09A1 1544+++8FFA~ DB #0ACF-#0A33 1545+++8FFA~ DB #0B73-#0ACF 1546+++8FFA~ DB #0C22-#0B73 1547+++8FFA~ DB #0CDA-#0C22 1548+++8FFA~ DB #0704*2/256,#0704*2&255 1549+++8FFA~ DB #076E-#0704 1550+++8FFA~ DB #07E0-#076E 1551+++8FFA~ DB #0858-#07E0 1552+++8FFA~ DB #08D6-#0858 1553+++8FFA~ DB #095C-#08D6 1554+++8FFA~ DB #09EC-#095C 1555+++8FFA~ DB #0A82-#09EC 1556+++8FFA~ DB #0B22-#0A82 1557+++8FFA~ DB #0BCC-#0B22 1558+++8FFA~ DB #0C80-#0BCC 1559+++8FFA~ DB #0D3E-#0C80 1560+++8FFA~ DB #07E0*2/256,#07E0*2&255 1561+++8FFA~ DB #0858-#07E0 1562+++8FFA~ DB #08E0-#0858 1563+++8FFA~ DB #0960-#08E0 1564+++8FFA~ DB #09F0-#0960 1565+++8FFA~ DB #0A88-#09F0 1566+++8FFA~ DB #0B28-#0A88 1567+++8FFA~ DB #0BD8-#0B28 1568+++8FFA~ DB #0C80-#0BD8 1569+++8FFA~ DB #0D60-#0C80 1570+++8FFA~ DB #0E10-#0D60 1571+++8FFA~ DB #0EF8-#0E10 1572+++8FFA~ 1573+++8FFA~ ;vars from here can be stripped 1574+++8FFA~ ;you can move VARS to any other address 1575+++8FFA~ 1576+++8FFA~ VARS 1577+++8FFA~ 1578+++8FFA~ is_ts DB 0 1579+++8FFA~ 1580+++8FFA~ ;ChannelsVars 1581+++8FFA~ STRUCT CHP 1582+++8FFA~ ;reset group 1583+++8FFA~ PsInOr DB 0 1584+++8FFA~ PsInSm DB 0 1585+++8FFA~ CrAmSl DB 0 1586+++8FFA~ CrNsSl DB 0 1587+++8FFA~ CrEnSl DB 0 1588+++8FFA~ TSlCnt DB 0 1589+++8FFA~ CrTnSl DW 0 1590+++8FFA~ TnAcc DW 0 1591+++8FFA~ COnOff DB 0 1592+++8FFA~ ;reset group 1593+++8FFA~ 1594+++8FFA~ OnOffD DB 0 1595+++8FFA~ 1596+++8FFA~ ;IX for PTDECOD here (+12) 1597+++8FFA~ OffOnD DB 0 1598+++8FFA~ OrnPtr DW 0 1599+++8FFA~ SamPtr DW 0 1600+++8FFA~ NNtSkp DB 0 1601+++8FFA~ Note DB 0 1602+++8FFA~ SlToNt DB 0 1603+++8FFA~ Env_En DB 0 1604+++8FFA~ Flags DB 0 1605+++8FFA~ ;Enabled - 0, SimpleGliss - 2 1606+++8FFA~ TnSlDl DB 0 1607+++8FFA~ TSlStp DW 0 1608+++8FFA~ TnDelt DW 0 1609+++8FFA~ NtSkCn DB 0 1610+++8FFA~ Volume DB 0 1611+++8FFA~ ENDS 1612+++8FFA~ 1613+++8FFA~ STRUCT VRS 1614+++8FFA~ 1615+++8FFA~ ;IF not works in STRUCT in SjASM :( 1616+++8FFA~ ; IF CurPosCounter 1617+++8FFA~ CurPos DB 0 1618+++8FFA~ PosSub DB 0 1619+++8FFA~ ; ENDIF 1620+++8FFA~ 1621+++8FFA~ ModNum DB 0 ;bit0: ChipNum 1622+++8FFA~ ;bit1: 1-reversed patterns order (AlCo TS) 1623+++8FFA~ 1624+++8FFA~ ChanA DS CHP 1625+++8FFA~ ChanB DS CHP 1626+++8FFA~ ChanC DS CHP 1627+++8FFA~ 1628+++8FFA~ ;GlobalVars 1629+++8FFA~ MODADDR DW 0 1630+++8FFA~ OrnPtrs DW 0 1631+++8FFA~ SamPtrs DW 0 1632+++8FFA~ PatsPtr DW 0 1633+++8FFA~ AdInPtA DW 0 1634+++8FFA~ AdInPtB DW 0 1635+++8FFA~ AdInPtC DW 0 1636+++8FFA~ CrPsPtr DW 0 1637+++8FFA~ LPosPtr DW 0 1638+++8FFA~ Delay DB 0 1639+++8FFA~ DelyCnt DB 0 1640+++8FFA~ ESldAdd DW 0 1641+++8FFA~ CurESld DW 0 1642+++8FFA~ Env_Del DB 0 1643+++8FFA~ CurEDel DB 0 1644+++8FFA~ Ns_Base DB 0 1645+++8FFA~ AddToNs DB 0 1646+++8FFA~ AddToEn DB 0 1647+++8FFA~ EnvBase DW 0 1648+++8FFA~ AYREGS DS 14 1649+++8FFA~ ENDS 1650+++8FFA~ 1651+++8FFA~ VARS1 DS VRS 1652+++8FFA~ VARS2 DS VRS 1653+++8FFA~ 1654+++8FFA~ VT_ EQU $-16 1655+++8FFA~ DS 256-16 ;CreatedVolumeTableAddress 1656+++8FFA~ 1657+++8FFA~ T1_ EQU VT_+16 ;Tone tables data depacked here 1658+++8FFA~ 1659+++8FFA~ T_OLD_1 EQU T1_ 1660+++8FFA~ T_OLD_2 EQU T_OLD_1+24 1661+++8FFA~ T_OLD_3 EQU T_OLD_2+24 1662+++8FFA~ T_OLD_0 EQU T_OLD_3+2 1663+++8FFA~ T_NEW_0 EQU T_OLD_0 1664+++8FFA~ T_NEW_1 EQU T_OLD_1 1665+++8FFA~ T_NEW_2 EQU T_NEW_0+24 1666+++8FFA~ T_NEW_3 EQU T_OLD_3 1667+++8FFA~ 1668+++8FFA~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence 1669+++8FFA~ 1670+++8FFA~ NT_ DS 192 ;CreatedNoteTableAddress 1671+++8FFA~ 1672+++8FFA~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1 1673+++8FFA~ 1674+++8FFA~ VARSEND EQU $ 1675+++8FFA~ MDLADDR EQU $ 1676+++8FFA~ 1677+++8FFA~ DISPLAY "PTS player size=",$-START 1678+++8FFA~ 1679+++8FFA~ ;Release 0 steps: 1680+++8FFA~ ;04/21/2007 1681+++8FFA~ ;Works start (PTxPlay adaptation); first beta. 1682+++8FFA~ ;04/22/2007 1683+++8FFA~ ;Job finished; beta-testing. 1684+++8FFA~ ;04/23/2007 1685+++8FFA~ ;PT v3.7 TS mode corrected (after AlCo remarks). 1686+++8FFA~ ;04/29/2007 1687+++8FFA~ ;Added 1.XX and 2.XX special commands interpretation for PT3 1688+++8FFA~ ;modules of v3.7+. 1689+++8FFA~ 1690+++8FFA~ ;Size (minimal build for ZX Spectrum): 1691+++8FFA~ ;Code block #908 bytes 1692+++8FFA~ ;Variables #2BF bytes (can be stripped) 1693+++8FFA~ ;Total size #908+#2BF=#BC7 (3015) bytes 1694+++8FFA~ 1695+++8FFA~ ENDMOD 1696+++8FFA~ 1697+++8FFA endif 1698+++8FFA 0095+++8FFA 0096+++8FFA TS.End 0097+++8FFA TS.Play=PTS.PLAY 0098+++8FFA TS.Mute=PTS.MUTE 0099+++8FFA 0100+++8FFA display "TS module size: ",TS.End-TS.Start 0101+++8FFA 0102+++8FFA endif 0103+++8FFA 0421++ 8FFA include "tfc.asm" 0001+++8FFA ifndef _tfc_asm_defined 0002+++8FFA define _tfc_asm_defined 0003+++8FFA 0004+++8FFA module TFC 0005+++8FFA 0006+++8FFA ; Original version by (C) Alone Coder 0007+++8FFA ; SjasmPlus adaptation, code cleanup and size optimization by (C) Vitamin/CAIG 0008+++8FFA 0009+++8FFA ; Warning: no 60Hz modules support! 0010+++8FFA 0011+++8FFA ;TODO begin&end только в одном канале 0012+++8FFA newtfm=1 ;0=revision A, 1=revision C 0013+++8FFA 0014+++8FFA if newtfm == 1 0015+++8FFA statuschip0=%11111000 0016+++8FFA statuschip1=%11111001 0017+++8FFA else 0018+++8FFA~ if newtfm == 2 ;US031DX 0019+++8FFA~ statuschip0=%11111110 0020+++8FFA~ statuschip1=%11111111 0021+++8FFA~ else ;newtfm=0 0022+++8FFA~ statuschip0=%11111100 0023+++8FFA~ statuschip1=%11111101 0024+++8FFA~ endif 0025+++8FFA endif 0026+++8FFA 0027+++8FFA struct Header 0028+++8FFA~ signature 0029+++8FFA~ ds 6 0030+++8FFA~ version ds 3 0031+++8FFA~ intfreq db 0 0032+++8FFA~ tfmptrs ds 12 0033+++8FFA~ ssgptrs ds 12 0034+++8FFA ends 0035+++8FFA 0036+++8FFA struct TFMData 0037+++8FFA~ addr dw 0 0038+++8FFA~ skip db 0 0039+++8FFA~ blkcnt db 0 0040+++8FFA~ blkretaddr 0041+++8FFA~ db 0 0042+++8FFA~ loopaddr 0043+++8FFA~ db 0 0044+++8FFA~ tfmlow db 0 0045+++8FFA~ tfmhigh db 0 0046+++8FFA ends 0047+++8FFA 0048+++8FFA macro WaitStatus 0049+++8FFA~ if newtfm != 2 0050+++8FFA~ inf 0051+++8FFA~ jp m,$-2 0052+++8FFA~ endif 0053+++8FFA endm 0054+++8FFA 0055+++8FFA macro FM.OutReg Reg 0056+++8FFA~ WaitStatus 0057+++8FFA~ out (c),Reg 0058+++8FFA endm 0059+++8FFA 0060+++8FFA macro FM.SelectReg Reg 0061+++8FFA~ ld b,d 0062+++8FFA~ FM.OutReg Reg 0063+++8FFA endm 0064+++8FFA 0065+++8FFA macro FM.WriteReg Reg 0066+++8FFA~ ld b,e 0067+++8FFA~ FM.OutReg Reg 0068+++8FFA endm 0069+++8FFA 0070+++8FFA Start 0071+++8FFA 21 73 92 ld hl,End 0072+++8FFD 18 2F jr Init 0073+++8FFF C3 E1 90 jp Play 0074+++9002 C3 6A 90 jp Mute 0075+++9005 0076+++9005 ifdef HaveFormatCheck 0077+++9005 include "format.asm" 0001+++9005 ;some format checking macros 0002+++9005 ifndef _format_asm_defined 0003+++9005~ define _format_asm_defined 0004+++9005~ 0005+++9005~ macro LessOrEqual number 0006+++9005~ ld a,number 0007+++9005~ cp (hl) 0008+++9005~ inc hl 0009+++9005~ ret c 0010+++9005~ endm 0011+++9005~ 0012+++9005~ macro Greater number 0013+++9005~ ld a,(hl) 0014+++9005~ inc hl 0015+++9005~ cp number 0016+++9005~ ret c 0017+++9005~ endm 0018+++9005~ 0019+++9005~ macro AnyByte 0020+++9005~ inc hl 0021+++9005~ endm 0022+++9005~ 0023+++9005~ macro AnyBytes count 0024+++9005~ if count > 7 0025+++9005~ ld a,l 0026+++9005~ add a,count 0027+++9005~ ld l,a 0028+++9005~ adc a,h 0029+++9005~ sub l 0030+++9005~ ld h,a 0031+++9005~ else 0032+++9005~ dup count 0033+++9005~ inc hl 0034+++9005~ edup 0035+++9005~ endif 0036+++9005~ endm 0037+++9005~ 0038+++9005~ macro EqualTo number 0039+++9005~ ld a,number 0040+++9005~ cp (hl) 0041+++9005~ inc hl 0042+++9005~ ret nz 0043+++9005~ endm 0044+++9005~ 0045+++9005 endif 0046+++9005 0078+++9005 0079+++9005 ;in HL - module addr 0080+++9005 ;out Z - is tfc 0081+++9005 ;out C - 60 Hz (valid only if Z) 0082+++9005 CheckFormat 0083+++9005 EqualTo "T" 0083+++9005 3E 54 > ld a,number 0083+++9007 BE > cp (hl) 0083+++9008 23 > inc hl 0083+++9009 C0 > ret nz 0084+++900A EqualTo "F" 0084+++900A 3E 46 > ld a,number 0084+++900C BE > cp (hl) 0084+++900D 23 > inc hl 0084+++900E C0 > ret nz 0085+++900F EqualTo "M" 0085+++900F 3E 4D > ld a,number 0085+++9011 BE > cp (hl) 0085+++9012 23 > inc hl 0085+++9013 C0 > ret nz 0086+++9014 EqualTo "c" 0086+++9014 3E 63 > ld a,number 0086+++9016 BE > cp (hl) 0086+++9017 23 > inc hl 0086+++9018 C0 > ret nz 0087+++9019 EqualTo "o" 0087+++9019 3E 6F > ld a,number 0087+++901B BE > cp (hl) 0087+++901C 23 > inc hl 0087+++901D C0 > ret nz 0088+++901E EqualTo "m" 0088+++901E 3E 6D > ld a,number 0088+++9020 BE > cp (hl) 0088+++9021 23 > inc hl 0088+++9022 C0 > ret nz 0089+++9023 AnyBytes 3 0090+++9023 23 > inc hl 0090+++9024 23 > inc hl 0090+++9025 23 > inc hl 0090+++9026 7E ld a,(hl) 0091+++9027 FE 32 cp 50 0092+++9029 C8 ret z 0093+++902A FE 3C cp 60 0094+++902C 3F ccf 0095+++902D C9 ret 0096+++902E 0097+++902E display "TFC checker size: ",$-CheckFormat 0098+++902E endif 0099+++902E 0100+++902E ;HL - module addr 0101+++902E Init 0102+++902E EB exd 0103+++902F 21 0A 00 ld hl,Header.tfmptrs 0104+++9032 19 add hl,de 0105+++9033 D9 exx 0106+++9034 0107+++9034 21 3B 92 ld hl,TFM.Init 0108+++9037 11 43 92 ld de,TFM.A 0109+++903A 01 30 00 ld bc,6*TFMData 0110+++903D ED B0 ldir 0111+++903F 0112+++903F 21 5E 90 ld hl,.tfminitab 0113+++9042 01 FD 06 ld bc,128*(.tfminitab_end-.tfminitab)+#fd 0114+++9045 .tfmini0 0115+++9045 11 54 90 ld de,.tfminiHL 0116+++9048 ED A0 ldi 0117+++904A ED A0 ldi 0118+++904C D9 exx 0119+++904D 7E ld a,(hl) 0120+++904E 23 inc hl 0121+++904F E5 push hl 0122+++9050 66 ld h,(hl) 0123+++9051 6F ld l,a 0124+++9052 19 add hl,de 0125+++9053 .tfminiHL=$+1 0126+++9053 22 00 00 ld (0),hl 0127+++9056 E1 pop hl 0128+++9057 23 inc hl 0129+++9058 D9 exx 0130+++9059 10 EA djnz .tfmini0 0131+++905B 0132+++905B C3 6A 90 jp Mute 0133+++905E 0134+++905E .tfminitab 0135+++905E 43 92 DW TFM.A.addr 0136+++9060 4B 92 DW TFM.B.addr 0137+++9062 53 92 DW TFM.C.addr 0138+++9064 5B 92 DW TFM.D.addr 0139+++9066 63 92 DW TFM.E.addr 0140+++9068 6B 92 DW TFM.F.addr 0141+++906A .tfminitab_end 0142+++906A 0143+++906A Mute 0144+++906A 11 BF FF ld de,#ffbf 0145+++906D 0E FD ld c,#fd 0146+++906F CD D9 90 call selChip0 0147+++9072 CD 78 90 call .tfminiPP 0148+++9075 CD DD 90 call selChip1 0149+++9078 .tfminiPP 0150+++9078 ; 0 -> (00..0D) 0151+++9078 21 00 00 ld hl,#0000 0152+++907B 3E 0E ld a,#0e 0153+++907D CD C0 90 call .writeregsset 0154+++9080 0155+++9080 ; 0 -> (30..3F) 0156+++9080 26 30 ld h,#30 0157+++9082 3E 40 ld a,#40 0158+++9084 CD C0 90 call .writeregsset 0159+++9087 0160+++9087 ; 0 -> (50..B4) 0161+++9087 26 50 ld h,#50 0162+++9089 3E B5 ld a,#b5 0163+++908B CD C0 90 call .writeregsset 0164+++908E 0165+++908E ; 0F -> (80..8F) ;max speed to RR 0166+++908E 21 0F 80 ld hl,#800f 0167+++9091 3E 90 ld a,#90 0168+++9093 CD C0 90 call .writeregsset 0169+++9096 0170+++9096 ; 0..2 -> 28, key off 0171+++9096 ; 2 -> 27 channel 3 mode 0172+++9096 21 00 28 ld hl,#2800 0173+++9099 CD C8 90 call .writereg 0174+++909C 2C inc l 0175+++909D CD C8 90 call .writereg 0176+++90A0 2C inc l 0177+++90A1 CD C8 90 call .writereg 0178+++90A4 25 dec h 0179+++90A5 CD C8 90 call .writereg 0180+++90A8 0181+++90A8 ; 7F -> (40..4F,2F,2D) 0182+++90A8 21 7F 40 ld hl,#407f 0183+++90AB 3E 50 ld a,#50 0184+++90AD CD C0 90 call .writeregsset 0185+++90B0 0186+++90B0 26 2F ld h,#2f 0187+++90B2 CD C8 90 call .writereg 0188+++90B5 0189+++90B5 26 2D ld h,#2d 0190+++90B7 CD C8 90 call .writereg 0191+++90BA 0192+++90BA 3E FF ld a,#ff ;выкл. FM 0193+++90BC .selRegA 0194+++90BC 42 ld b,d 0195+++90BD ED 79 out (c),a 0196+++90BF C9 ret 0197+++90C0 0198+++90C0 ;H=REG start 0199+++90C0 ;L=VALUE 0200+++90C0 ;A=REG end (not inclusive) 0201+++90C0 .writeregsset 0202+++90C0 CD C8 90 call .writereg 0203+++90C3 24 inc h 0204+++90C4 BC cp h 0205+++90C5 20 F9 jr nz,.writeregsset 0206+++90C7 C9 ret 0207+++90C8 ;H=REG 0208+++90C8 ;L=VALUE 0209+++90C8 .writereg 0210+++90C8 FM.SelectReg h 0210+++90C8 42 > ld b,d 0210+++90C9 ED 70 > inf 0210+++90CB FA C9 90 > jp m,$-2 0210+++90CE ED 61 > out (c),Reg 0211+++90D0 FM.WriteReg l 0211+++90D0 43 > ld b,e 0211+++90D1 ED 70 > inf 0211+++90D3 FA D1 90 > jp m,$-2 0211+++90D6 ED 69 > out (c),Reg 0212+++90D8 C9 ret 0213+++90D9 0214+++90D9 selChip0 0215+++90D9 3E F8 ld a,statuschip0 0216+++90DB 18 DF jr Mute.selRegA 0217+++90DD 0218+++90DD selChip1 0219+++90DD 3E F9 ld a,statuschip1 0220+++90DF 18 DB jr Mute.selRegA 0221+++90E1 0222+++90E1 Play 0223+++90E1 11 BF FF ld de,#FFBF 0224+++90E4 0E FD ld c,#FD 0225+++90E6 0226+++90E6 CD D9 90 call selChip0 0227+++90E9 0228+++90E9 AF xor a 0229+++90EA 08 exa 0230+++90EB DD 21 43 92 ld ix,TFM.A 0231+++90EF CD 26 91 call PlayChannel 0232+++90F2 3E 01 ld a,1 0233+++90F4 08 exa 0234+++90F5 DD 21 4B 92 ld ix,TFM.B 0235+++90F9 CD 26 91 call PlayChannel 0236+++90FC 3E 02 ld a,2 0237+++90FE 08 exa 0238+++90FF DD 21 53 92 ld ix,TFM.C 0239+++9103 CD 26 91 call PlayChannel 0240+++9106 0241+++9106 CD DD 90 call selChip1 0242+++9109 0243+++9109 AF xor a 0244+++910A 08 exa 0245+++910B DD 21 5B 92 ld ix,TFM.D 0246+++910F CD 26 91 call PlayChannel 0247+++9112 3E 01 ld a,1 0248+++9114 08 exa 0249+++9115 DD 21 63 92 ld ix,TFM.E 0250+++9119 CD 26 91 call PlayChannel 0251+++911C 3E 02 ld a,2 0252+++911E 08 exa 0253+++911F DD 21 6B 92 ld ix,TFM.F 0254+++9123 C3 26 91 jp PlayChannel 0255+++9126 0256+++9126 ;%11111111,-disp8 = данные кадра лежат по смещению -disp8 0257+++9126 ;%111ttttt = skip 32..2 frames 0258+++9126 ;%110ddddd = slide d-16 0259+++9126 ;%11010000,frames,-disp16 = repeat block (skips = 1 frame) 0260+++9126 ;%10111111,-disp16 = данные кадра лежат по смещению -disp16 0261+++9126 ;%10NNNNNf = keyoff,[freq,]0..30 regs, keyon 0262+++9126 ;%01111111 = end 0263+++9126 ;%01111110 = begin 0264+++9126 ;%01NNNNNf = keyoff,[freq,]0..31 regs 0265+++9126 ;%00NNNNNf = [freq,]0..30 regs 0266+++9126 bb=%01111110 0267+++9126 be=%01111111 0268+++9126 ;IX - data 0269+++9126 ;DE - hi ports #FFBF 0270+++9126 ;C - low port #FD 0271+++9126 ;A' - fm channel 0272+++9126 PlayChannel 0273+++9126 DD 7E 02 ld a,(ix+TFMData.skip) 0274+++9129 3C inc a 0275+++912A C2 E9 91 jp nz,.skiper 0276+++912D DD 7E 03 ld a,(ix+TFMData.blkcnt) 0277+++9130 A7 and a 0278+++9131 28 1D jr z,.noframe 0279+++9133 DD 35 03 dec (ix+TFMData.blkcnt) 0280+++9136 20 18 jr nz,.noframe 0281+++9138 DD 6E 04 ld l,(ix+TFMData.blkretaddr) 0282+++913B DD 66 05 ld h,(ix+TFMData.blkretaddr+1) 0283+++913E 18 16 jr .tfmframe 0284+++9140 .begin 0285+++9140 DD 75 05 ld (ix+TFMData.loopaddr),l 0286+++9143 DD 74 06 ld (ix+TFMData.loopaddr+1),h 0287+++9146 18 0E jr .tfmframe 0288+++9148 .end 0289+++9148 DD 6E 05 ld l,(ix+TFMData.loopaddr) 0290+++914B DD 66 06 ld h,(ix+TFMData.loopaddr+1) 0291+++914E 18 06 jr .tfmframe 0292+++9150 .noframe 0293+++9150 DD 6E 00 ld l,(ix+TFMData.addr) 0294+++9153 DD 66 01 ld h,(ix+TFMData.addr+1) 0295+++9156 .tfmframe 0296+++9156 7E ld a,(hl) 0297+++9157 23 inc hl 0298+++9158 FE 7E cp bb 0299+++915A 28 E4 jr z,.begin 0300+++915C FE 7F cp be 0301+++915E 28 E8 jr z,.end 0302+++9160 BB cp e ;#BF 0303+++9161 D2 DC 91 jp NC,.HLskiper 0304+++9164 ;TestKeyOff 0305+++9164 F2 7D 91 jp P,.noffX 0306+++9167 F5 push af 0307+++9168 3E 28 ld a,#28 0308+++916A FM.SelectReg a 0308+++916A 42 > ld b,d 0308+++916B ED 70 > inf 0308+++916D FA 6B 91 > jp m,$-2 0308+++9170 ED 79 > out (c),Reg 0309+++9172 08 exa 0310+++9173 FM.WriteReg a ;FMChannel 0310+++9173 43 > ld b,e 0310+++9174 ED 70 > inf 0310+++9176 FA 74 91 > jp m,$-2 0310+++9179 ED 79 > out (c),Reg 0311+++917B 08 exa 0312+++917C F1 pop af 0313+++917D .noffX 0314+++917D B7 OR a 0315+++917E F5 push af 0316+++917F ;TestFreq 0317+++917F 1F RRA 0318+++9180 30 12 jr NC,.nofrqX 0319+++9182 0320+++9182 46 ld b,(hl) 0321+++9183 23 inc hl 0322+++9184 4E ld c,(hl) 0323+++9185 23 inc hl 0324+++9186 DD 70 07 ld (ix+TFMData.tfmhigh),b 0325+++9189 DD 71 06 ld (ix+TFMData.tfmlow),c 0326+++918C C5 push bc 0327+++918D E3 ex (sp),hl 0328+++918E 0E FD ld c,#FD 0329+++9190 CD FE 91 call .outTone 0330+++9193 E1 pop hl 0331+++9194 0332+++9194 .nofrqX 0333+++9194 E6 1F and #1F 0334+++9196 C4 27 92 call nz,.OutRegs 0335+++9199 CD D5 91 call .storeaddr 0336+++919C F1 pop af 0337+++919D F0 ret P 0338+++919E ;.KeyOn 0339+++919E 3E 28 ld a,#28 0340+++91A0 FM.SelectReg a 0340+++91A0 42 > ld b,d 0340+++91A1 ED 70 > inf 0340+++91A3 FA A1 91 > jp m,$-2 0340+++91A6 ED 79 > out (c),Reg 0341+++91A8 08 exa 0342+++91A9 C6 F0 add a,#F0 0343+++91AB FM.WriteReg a 0343+++91AB 43 > ld b,e 0343+++91AC ED 70 > inf 0343+++91AE FA AC 91 > jp m,$-2 0343+++91B1 ED 79 > out (c),Reg 0344+++91B3 D6 F0 sub #F0 0345+++91B5 08 exa 0346+++91B6 C9 ret 0347+++91B7 0348+++91B7 .block 0349+++91B7 7E ld a,(hl) ;N frames 0350+++91B8 ;1 now, N-1 later 0351+++91B8 ;skip command is used as 1 frame 0352+++91B8 23 inc hl 0353+++91B9 DD 77 03 ld (ix+TFMData.blkcnt),a 0354+++91BC 46 ld b,(hl) 0355+++91BD 23 inc hl 0356+++91BE 4E ld c,(hl) ;disp 0357+++91BF 23 inc hl 0358+++91C0 DD 75 04 ld (ix+TFMData.blkretaddr),l 0359+++91C3 DD 74 05 ld (ix+TFMData.blkretaddr+1),h 0360+++91C6 .subframe 0361+++91C6 09 add hl,bc 0362+++91C7 0E FD ld c,#fd 0363+++91C9 C3 56 91 jp .tfmframe 0364+++91CC 0365+++91CC .OLDfar 0366+++91CC 46 ld b,(hl) 0367+++91CD 23 inc hl 0368+++91CE .OLDnear 0369+++91CE 4E ld c,(hl) 0370+++91CF 23 inc hl 0371+++91D0 E5 push hl 0372+++91D1 CD C6 91 call .subframe 0373+++91D4 E1 pop hl 0374+++91D5 .storeaddr 0375+++91D5 DD 75 00 ld (ix+TFMData.addr),l 0376+++91D8 DD 74 01 ld (ix+TFMData.addr+1),h 0377+++91DB C9 ret 0378+++91DC .HLskiper 0379+++91DC 28 EE jr z,.OLDfar 0380+++91DE FE E0 cp %11100000 0381+++91E0 38 0B jr c,.slide 0382+++91E2 47 ld b,a 0383+++91E3 BA cp d ;#FF 0384+++91E4 28 E8 jr z,.OLDnear 0385+++91E6 CD D5 91 call .storeaddr 0386+++91E9 DD 77 02 .skiper ld (ix+TFMData.skip),a 0387+++91EC C9 ret 0388+++91ED .slide 0389+++91ED ;a=-64..-33 0390+++91ED C6 30 add a,48 0391+++91EF ;a=-16..15 0392+++91EF 28 C6 jr z,.block 0393+++91F1 DD 86 06 add a,(ix+TFMData.tfmlow) 0394+++91F4 DD 77 06 ld (ix+TFMData.tfmlow),a 0395+++91F7 CD D5 91 call .storeaddr 0396+++91FA DD 66 07 ld h,(ix+TFMData.tfmhigh) 0397+++91FD 6F ld l,a 0398+++91FE .outTone 0399+++91FE 08 exa 0400+++91FF C6 A4 add a,#a4 0401+++9201 FM.SelectReg a 0401+++9201 42 > ld b,d 0401+++9202 ED 70 > inf 0401+++9204 FA 02 92 > jp m,$-2 0401+++9207 ED 79 > out (c),Reg 0402+++9209 FM.WriteReg h 0402+++9209 43 > ld b,e 0402+++920A ED 70 > inf 0402+++920C FA 0A 92 > jp m,$-2 0402+++920F ED 61 > out (c),Reg 0403+++9211 D6 04 sub #04 ;#A0+channel 0404+++9213 FM.SelectReg a 0404+++9213 42 > ld b,d 0404+++9214 ED 70 > inf 0404+++9216 FA 14 92 > jp m,$-2 0404+++9219 ED 79 > out (c),Reg 0405+++921B FM.WriteReg l 0405+++921B 43 > ld b,e 0405+++921C ED 70 > inf 0405+++921E FA 1C 92 > jp m,$-2 0405+++9221 ED 69 > out (c),Reg 0406+++9223 D6 A0 sub #a0 0407+++9225 08 exa 0408+++9226 C9 ret 0409+++9227 0410+++9227 42 .OutRegs ld b,d ;%11111xxx 0411+++9228 WaitStatus 0411+++9228 ED 70 > inf 0411+++922A FA 28 92 > jp m,$-2 0412+++922D ED A3 outi ;reg 0413+++922F WaitStatus 0413+++922F ED 70 > inf 0413+++9231 FA 2F 92 > jp m,$-2 0414+++9234 43 ld b,e ;#BF 0415+++9235 ED A3 outi ;value 0416+++9237 3D dec a 0417+++9238 20 ED jr nz,.OutRegs ;в turbo jr=jp 0418+++923A C9 ret 0419+++923B 0420+++923B TFM.Init TFMData 0,-1,0 0420+++923B 0000FF0000000000 0421+++9243 TFM.A TFMData 0421+++9243 0000000000000000 0422+++924B TFM.B TFMData 0422+++924B 0000000000000000 0423+++9253 TFM.C TFMData 0423+++9253 0000000000000000 0424+++925B TFM.D TFMData 0424+++925B 0000000000000000 0425+++9263 TFM.E TFMData 0425+++9263 0000000000000000 0426+++926B TFM.F TFMData 0426+++926B 0000000000000000 0427+++9273 0428+++9273 endmod 0429+++9273 TFC.End 0430+++9273 0431+++9273 display "TFC module size: ",TFC.End-TFC.Start 0432+++9273 0433+++9273 endif 0434+++9273 0422++ 9273 MTC.End 0423++ 9273 display "MTC module size: ",MTC.End-MTC.Start 0424++ 9273 0425++ 9273 endif 0426++ 9273 0078+ 9273 UNI.End 0079+ 9273 display "UNI module size: ",UNI.End-UNI.Init 0080+ 9273 endif 0081+ 9273 0013 9273 0014 9273 module 0015 9273 ;incbin MTC_CYBERMOTION 0016 9273 ;incbin MTC_DRUMTEST 0017 9273 ;incbin MTC_MUG 0018 9273 incbin MTC_MYSTICAL 0019 B60B ;incbin MTC_NEWOLD 0020 B60B ;incbin MTC_SNEGURKA 0021 B60B ;incbin TFC_CYBERMOTION 0022 B60B ;incbin TFC_DRUMTEST 0023 B60B ;incbin TFC_MUG 0024 B60B ;incbin TFC_MYSTICAL 0025 B60B ;incbin TFC_NEWOLD 0026 B60B ;incbin TFC_SNEGURKA 0027 B60B ;incbin PT3_DRUMTEST 0028 B60B ;incbin PT3_MYSTICAL 0029 B60B ;incbin PT3_NEWOLD 0030 B60B ;incbin PT3_SNEGURKA 0031 B60B ;incbin TS_INEEDREST 0032 B60B ;incbin PT2_PITON 0033 B60B 0034 B60B savesna "test_uni.sna",begin 0035 B60B savebin "../uni_8000.bin",player,module-player 0036 B60B Value Label ------ - ----------------------------------------------------------- 0x6000 begin 0x8000 init 0x600D begin.loop 0x6014 begin.delay 0x8005 play 0x8008 mute 0x602C X begin.fail 0x8000 player 0x9273 UNI.End 0x800B UNI.Init 0x8005 UNI.Play 0x8008 UNI.Mute 0x8028 UNI.Init.tryMTC 0x8039 UNI.Init.tryTFC 0x804A UNI.Init.tryTS 0x805B UNI.Init.tryPT2 0x806C UNI.Init.tryPT3 0x8020 UNI.Init.addr 0x807D MTC.CheckFormat 0x809C MTC.Init 0x80D9 MTC.Play 0x80F7 MTC.Mute 0x9005 TFC.CheckFormat 0x902E TFC.Init 0x90E1 TFC.Play 0x906A TFC.Mute 0x8FBC TS.CheckFormat 0x8FB7 TS.Init 0x8B88 TS.Play 0x835A TS.Mute 0x8F7C PT2.CheckFormat 0x8F77 PT2.Init 0x8B88 PT2.Play 0x835A PT2.Mute 0x8F30 PT3.CheckFormat 0x8F2B PT3.Init 0x8B88 PT3.Play 0x835A PT3.Mute 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 0x807D MTC.Start 0x814E MTC.Streams 0x8117 MTC.ParseChunk 0x0000 MTC.ChunkId.MTC1 0x821C MTC.ParseMTC1 0x82E6 MTC.MergeStreams 0x80B3 MTC.Init.initstreams 0x8115 MTC.jp_bc 0x80DD MTC.Play.playstreams 0x80FB MTC.Mute.mutestreams 0x8200 MTC.ChunkId 0x811A MTC.ParseChunk.checkid 0x8145 MTC.ParseChunk.matched 0x001C MTC.ChunkId.Unknown 0x8147 MTC.ParseChunk.getdata 0x0003 MTC.MinStreamsCount 0x816F 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 0x0010 MTC.MaxStreamsCount 0x821F MTC.ParseMTC1.nextchunk 0x8237 MTC.ParseTrack 0x823A MTC.ParseTrack.nextchunk 0x8256 MTC.ParseData 0x8262 MTC.ParseTFC 0x8284 MTC.ParseTS 0x8291 MTC.ParsePT2 0x82A4 MTC.ParsePT3 0x82C3 MTC.FillStream 0x8279 MTC.AddStream 0x8FCD TS.CheckFormatKnownSize 0x82B7 MTC.FillTS 0x82BD MTC.FillPts 0x8B88 PTS.PLAY 0x835A PTS.MUTE 0x82F2 MTC.Sort 0x82FA MTC.Sort.cycle 0x8319 MTC.Sort.end 0x8312 MTC.Sort.next 0x8306 MTC.Sort.swapitems 0x831D X MTC.Merge 0x8323 MTC.Merge.cycle 0x8331 MTC.Merge.perform 0x834A MTC.Merge.generic 0x834C 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 0x8359 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 0x8359 PTS.SETUP 0x8C6D PTS.VARS1 0x0079 PTS.VRS.AYREGS 0x8CF4 PTS.VARS2 0x8B9C PTS.ROUT 0x836C PTS.INIT 0x8C6C PTS.VARS 0x8D7B PTS.VAR0END 0x0062 PTS.VRS.AdInPtA 0x8415 PTS.I_PT2 0x855E PTS.INITPT3 0x8952 PTS.e_ 0x8931 PTS.SamCnv 0x88FC PTS.OrnCP 0x8928 PTS.SamCP 0x88FF PTS.OrnLD 0x892B PTS.SamLD 0x8922 PTS.SamClc2 0x83B9 PTS.L20 0x83BB PTS.L21 0x87CF PTS.Version 0x840A PTS.NOTS 0x83FE PTS.TwoPT3s 0x0087 PTS.VRS 0x0002 PTS.VRS.ModNum 0x8A93 PTS.TSSub 0x8401 PTS.AlCoTS_ 0x8C6C PTS.is_ts 0x871B PTS.PT3PD 0x8C34 PTS.PT3EMPTYORN 0x845D PTS.INITCOMMON 0x8596 PTS.INITPT2 0x8454 PTS.NOTS2 0x8655 PTS.PT2PD 0x8D8A PTS.PT2EMPTYORN 0x8606 PTS.PTDEC 0x8A95 PTS.PsCalc 0x8C37 PTS.T_PACK 0x8D7B PTS.T1_ 0x846B PTS.TP_0 0x8477 PTS.TP_1 0x847E 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 0x8BE4 PTS.NT_DATA 0x84EF PTS.L3 0x8BF4 PTS.T_ 0x8E6B PTS.NT_ 0x84DE PTS.L1 0x84EB PTS.L2 0x8C00 PTS.TCOLD_1 0x8510 PTS.CORR_1 0x8525 PTS.TC_EXIT 0x851E PTS.CORR_2 0x8534 PTS.M1 0x8545 PTS.M2 0x8D6B PTS.VT_ 0x853D PTS.INITV2 0x8544 PTS.INITV1 0x8558 PTS.M3 0x85D1 PTS.SETMDAD 0x006C PTS.VRS.Delay 0x85DF PTS.SETCPPT 0x85E6 PTS.SETLPPT 0x85CA PTS.SETPTPT 0x85D8 PTS.SETORPT 0x858F 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 0x85ED PTS.SETENBS 0x0077 PTS.VRS.EnvBase 0x85F4 PTS.SETESLD 0x0070 PTS.VRS.CurESld 0x85FB PTS.GETIX 0x8602 PTS.PTDECOD 0x8608 PTS.PD2_SAM 0x889E PTS.SETSAM 0x8657 PTS.PD2_LOOP 0x860D PTS.PD2_EOff 0x0014 PTS.CHP.Env_En 0x8612 PTS.PD2_ENV 0x8624 PTS.PD2_ORN 0x887F PTS.SETORN 0x8629 PTS.PD2_SKIP 0x0011 PTS.CHP.NNtSkp 0x862F PTS.PD2_VOL 0x001C PTS.CHP.Volume 0x8638 PTS.PD2_DEL 0x884F PTS.C_DELAY 0x863D PTS.PD2_GLIS 0x0015 PTS.CHP.Flags 0x0016 PTS.CHP.TnSlDl 0x0005 PTS.CHP.TSlCnt 0x0017 PTS.CHP.TSlStp 0x8656 PTS.PD2_LP2 0x869C PTS.PD2_REL 0x86A1 PTS.PD2_NOTE 0x877E PTS.PD_FIN 0x868C PTS.PD2_PORT 0x8697 PTS.PD2_STOP 0x0003 PTS.CHP.CrNsSl 0x86CD PTS.PD2_EXIT 0x0012 PTS.CHP.Note 0x87B7 PTS.PrNote 0x86CC PTS.NOGLIS2 0x86C8 PTS.NOPORT2 0x87DE PTS.LoStep 0x8799 PTS.SETPORT 0x0001 PTS.CHP.PsInSm 0x0000 PTS.CHP.PsInOr 0x0006 PTS.CHP.CrTnSl 0x86DC PTS.PD_OrSm 0x86E3 PTS.PD_SAM_ 0x86E6 PTS.PD_SAM 0x872A PTS.PD_LOOP 0x86EB PTS.PD_VOL 0x872D PTS.PD_LP2 0x86F4 PTS.PD_EOff 0x86FC PTS.PD_SorE 0x8706 PTS.PD_ENV 0x8864 PTS.SETENV 0x870B PTS.PD_ORN 0x8710 PTS.PD_ESAM 0x87D4 PTS.PrSlide 0x875F PTS.PD_REL 0x8765 PTS.PD_NOTE 0x875A PTS.PD_NOIS 0x88BA PTS.SPCCOMS 0x0074 PTS.VRS.Ns_Base 0x876D PTS.PD_RES 0x877B PTS.PDSP_ 0x8785 PTS.C_PORTM 0x0013 PTS.CHP.SlToNt 0x0019 PTS.CHP.TnDelt 0x87DD PTS.OLDPRTM 0x87E3 PTS.NOSIG 0x87ED PTS.SET_STP 0x000A PTS.CHP.COnOff 0x87F9 PTS.C_GLISS 0x880C PTS.GL36 0x8816 PTS.C_SMPOS 0x881C PTS.C_ORPOS 0x8822 PTS.C_VIBRT 0x000B PTS.CHP.OnOffD 0x000C PTS.CHP.OffOnD 0x883A PTS.C_ENGLS 0x0072 PTS.VRS.Env_Del 0x0073 PTS.VRS.CurEDel 0x006E PTS.VRS.ESldAdd 0x889D PTS.C_NOP 0x000F PTS.CHP.SamPtr 0x88DA PTS.CHREGS 0x8B17 PTS.Ampl 0x8A2D PTS.CH_EXIT 0x8976 PTS.CSP_ 0x8900 PTS.CH_ORPS 0x890B PTS.CH_NTP 0x8911 PTS.CH_NOK 0x892C PTS.CH_SMPS 0x0008 PTS.CHP.TnAcc 0x8963 PTS.CH_NOAC 0x89BE PTS.CH_AMP 0x89A9 PTS.CH_STPP 0x0002 PTS.CHP.CrAmSl 0x89D8 PTS.CH_NOAM 0x89D0 PTS.CH_AMIN 0x89D5 PTS.CH_SVAM 0x89E1 PTS.CH_APOS 0x89E7 PTS.CH_VOL 0x89F2 X PTS.CH_ENV 0x89F9 PTS.CH_NOEN 0x8A1B PTS.NO_ENSL 0x0004 PTS.CHP.CrEnSl 0x8A13 PTS.NO_ENAC 0x0076 PTS.VRS.AddToEn 0x8A29 PTS.CH_MIX 0x0075 PTS.VRS.AddToNs 0x8A4D PTS.CH_ONDL 0x8A51 PTS.PLAY_ 0x8B04 PTS.PL2 0x8AD0 PTS.PL1B 0x8AC4 PTS.PL1A 0x8A88 PTS.PLNLP 0x8A95 PTS.NoAlCo 0x8AC1 PTS.PSP_ 0x0064 PTS.VRS.AdInPtB 0x0066 PTS.VRS.AdInPtC 0x8AE7 PTS.PL1C 0x8AFE PTS.PL1D 0x8B9C PTS.PL_nts 0x8BA7 X PTS.r_nts 0x8BB8 PTS.ROUT_ 0x8BBC PTS.LOUT 0x8DAD PTS.T_NEW_0 0x8C1E PTS.TCNEW_0 0x8DAD PTS.T_OLD_0 0x8BF4 PTS.TCOLD_0 0x8D7B PTS.T_NEW_1 0x8C00 PTS.TCNEW_1 0x8D7B PTS.T_OLD_1 0x8DC5 PTS.T_NEW_2 0x8C29 PTS.TCNEW_2 0x8D93 PTS.T_OLD_2 0x8C02 PTS.TCOLD_2 0x8DAB PTS.T_NEW_3 0x8C14 PTS.TCNEW_3 0x8DAB PTS.T_OLD_3 0x8C15 PTS.TCOLD_3 0x001D PTS.CHP 0x0000 X PTS.VRS.CurPos 0x0001 X PTS.VRS.PosSub 0x8F2B X PTS.VARSEND 0x8F2B 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 0x8F2B PT3.Start 0x8F4B PT3.CheckFormat.samples 0x8F55 PT3.CheckFormat.ornaments 0x8F65 PT3.CheckFormat.positions 0x8F6A PT3.CheckFormat.div3 0x8F72 PT3.CheckFormat.posok 0x8F74 X PT3.CheckFormat.fail 0x8F77 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 0x8F77 PT2.Start 0x8F8D PT2.CheckFormat.samorns 0x8FA9 PT2.CheckFormat.positions 0x8FB4 X PT2.CheckFormat.fail 0x8FB7 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 0x8FB7 TS.Start 0x8FBF TS.CheckFormat.findfooter 0x8FCE TS.CheckFooter 0x8FFA TS.End 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 0x8FFA TFC.Start 0x9273 TFC.End 0x923B TFC.TFM.Init 0x9243 TFC.TFM.A 0x905E TFC.Init.tfminitab 0x906A TFC.Init.tfminitab_end 0x9045 TFC.Init.tfmini0 0x9054 TFC.Init.tfminiHL 0x9243 TFC.TFM.A.addr 0x924B TFC.TFM.B.addr 0x9253 TFC.TFM.C.addr 0x925B TFC.TFM.D.addr 0x9263 TFC.TFM.E.addr 0x926B TFC.TFM.F.addr 0x90D9 TFC.selChip0 0x9078 TFC.Mute.tfminiPP 0x90DD TFC.selChip1 0x90C0 TFC.Mute.writeregsset 0x90C8 TFC.Mute.writereg 0x90BC TFC.Mute.selRegA 0x9126 TFC.PlayChannel 0x924B TFC.TFM.B 0x9253 TFC.TFM.C 0x925B TFC.TFM.D 0x9263 TFC.TFM.E 0x926B TFC.TFM.F 0x007E TFC.bb 0x007F TFC.be 0x91E9 TFC.PlayChannel.skiper 0x9150 TFC.PlayChannel.noframe 0x9156 TFC.PlayChannel.tfmframe 0x9140 TFC.PlayChannel.begin 0x9148 TFC.PlayChannel.end 0x91DC TFC.PlayChannel.HLskiper 0x917D TFC.PlayChannel.noffX 0x9194 TFC.PlayChannel.nofrqX 0x91FE TFC.PlayChannel.outTone 0x9227 TFC.PlayChannel.OutRegs 0x91D5 TFC.PlayChannel.storeaddr 0x91B7 TFC.PlayChannel.block 0x91C6 TFC.PlayChannel.subframe 0x91CC TFC.PlayChannel.OLDfar 0x91CE TFC.PlayChannel.OLDnear 0x91ED TFC.PlayChannel.slide 0x923B X TFC.TFM.Init.addr 0x923D X TFC.TFM.Init.skip 0x923E X TFC.TFM.Init.blkcnt 0x923F X TFC.TFM.Init.blkretaddr 0x9240 X TFC.TFM.Init.loopaddr 0x9241 X TFC.TFM.Init.tfmlow 0x9242 X TFC.TFM.Init.tfmhigh 0x9245 X TFC.TFM.A.skip 0x9246 X TFC.TFM.A.blkcnt 0x9247 X TFC.TFM.A.blkretaddr 0x9248 X TFC.TFM.A.loopaddr 0x9249 X TFC.TFM.A.tfmlow 0x924A X TFC.TFM.A.tfmhigh 0x924D X TFC.TFM.B.skip 0x924E X TFC.TFM.B.blkcnt 0x924F X TFC.TFM.B.blkretaddr 0x9250 X TFC.TFM.B.loopaddr 0x9251 X TFC.TFM.B.tfmlow 0x9252 X TFC.TFM.B.tfmhigh 0x9255 X TFC.TFM.C.skip 0x9256 X TFC.TFM.C.blkcnt 0x9257 X TFC.TFM.C.blkretaddr 0x9258 X TFC.TFM.C.loopaddr 0x9259 X TFC.TFM.C.tfmlow 0x925A X TFC.TFM.C.tfmhigh 0x925D X TFC.TFM.D.skip 0x925E X TFC.TFM.D.blkcnt 0x925F X TFC.TFM.D.blkretaddr 0x9260 X TFC.TFM.D.loopaddr 0x9261 X TFC.TFM.D.tfmlow 0x9262 X TFC.TFM.D.tfmhigh 0x9265 X TFC.TFM.E.skip 0x9266 X TFC.TFM.E.blkcnt 0x9267 X TFC.TFM.E.blkretaddr 0x9268 X TFC.TFM.E.loopaddr 0x9269 X TFC.TFM.E.tfmlow 0x926A X TFC.TFM.E.tfmhigh 0x926D X TFC.TFM.F.skip 0x926E X TFC.TFM.F.blkcnt 0x926F X TFC.TFM.F.blkretaddr 0x9270 X TFC.TFM.F.loopaddr 0x9271 X TFC.TFM.F.tfmlow 0x9272 X TFC.TFM.F.tfmhigh 0x9273 MTC.End 0x9273 module