Files
ZiFi/_src/zxstuff-master/players/test/test_uni.lst
T
2026-08-31 21:04:48 +03:00

8494 lines
341 KiB
Plaintext

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 <vorobey@mail.khstu.ru>
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 <vorobey@mail.khstu.ru>
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 <vorobey@mail.khstu.ru>
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 <vorobey@mail.khstu.ru>
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