Files
2026-08-31 21:04:48 +03:00

8322 lines
334 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 "mtc.asm"
0001+ 8000 ifndef _mtc_asm_defined
0002+ 8000 define _mtc_asm_defined
0003+ 8000
0004+ 8000 module MTC
0005+ 8000
0006+ 8000 ;enum-like
0007+ 8000 struct StreamType
0008+ 8000~ PT3 db 0
0009+ 8000~ PT2 db 0
0010+ 8000~ TS db 0
0011+ 8000~ TFC db 0
0012+ 8000~ Unknown db 0
0013+ 8000 ends
0014+ 8000
0015+ 8000 struct StreamData
0016+ 8000~ Type db 0
0017+ 8000~ Data1 dw 0
0018+ 8000~ Data2 dw 0
0019+ 8000~ Init dw 0
0020+ 8000~ Play dw 0
0021+ 8000~ Mute dw 0
0022+ 8000 ends
0023+ 8000
0024+ 8000 Start
0025+ 8000 ifndef NoPrologue
0026+ 8000 21 73 91 ld hl,End
0027+ 8003 18 06 jr Init
0028+ 8005 C3 48 80 jp Play
0029+ 8008 C3 66 80 jp Mute
0030+ 800B endif
0031+ 800B
0032+ 800B ifdef HaveFormatCheck
0033+ 800B~
0034+ 800B~ include "format.asm"
0035+ 800B~
0036+ 800B~ ;in HL - module addr
0037+ 800B~ ;out Z - is mtc
0038+ 800B~ CheckFormat
0039+ 800B~ EqualTo "M"
0040+ 800B~ EqualTo "T"
0041+ 800B~ EqualTo "C"
0042+ 800B~ EqualTo "1"
0043+ 800B~ EqualTo 0
0044+ 800B~ EqualTo 0
0045+ 800B~ ret
0046+ 800B~
0047+ 800B~ display "MTC checker size: ",$-CheckFormat
0048+ 800B~ 0049+ 800B endif
0050+ 800B
0051+ 800B ;in HL - module addr
0052+ 800B DD 21 BD 80 Init ld ix,Streams
0053+ 800F DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown
0054+ 8013 CD 86 80 call ParseChunk
0055+ 8016 FE 00 cp ChunkId.MTC1
0056+ 8018 CC 1C 81 call z,ParseMTC1
0057+ 801B CD E6 81 call MergeStreams
0058+ 801E DD 21 BD 80 ld ix,Streams
0059+ 8022 .initstreams
0060+ 8022 DD 7E 00 ld a,(ix+StreamData.Type)
0061+ 8025 FE 04 cp StreamType.Unknown
0062+ 8027 C8 ret z
0063+ 8028 DD 6E 01 ld l,(ix+StreamData.Data1)
0064+ 802B DD 66 02 ld h,(ix+StreamData.Data1+1)
0065+ 802E DD 5E 03 ld e,(ix+StreamData.Data2)
0066+ 8031 DD 56 04 ld d,(ix+StreamData.Data2+1)
0067+ 8034 DD 4E 05 ld c,(ix+StreamData.Init)
0068+ 8037 DD 46 06 ld b,(ix+StreamData.Init+1)
0069+ 803A DD E5 push ix
0070+ 803C CD 84 80 call jp_bc
0071+ 803F DD E1 pop ix
0072+ 8041 01 0B 00 ld bc,StreamData
0073+ 8044 DD 09 add ix,bc
0074+ 8046 18 DA jr .initstreams
0075+ 8048
0076+ 8048 DD 21 BD 80 Play ld ix,Streams
0077+ 804C .playstreams
0078+ 804C DD 7E 00 ld a,(ix+StreamData.Type)
0079+ 804F FE 04 cp StreamType.Unknown
0080+ 8051 C8 ret z
0081+ 8052 DD 4E 07 ld c,(ix+StreamData.Play)
0082+ 8055 DD 46 08 ld b,(ix+StreamData.Play+1)
0083+ 8058 DD E5 push ix
0084+ 805A CD 84 80 call jp_bc
0085+ 805D DD E1 pop ix
0086+ 805F 01 0B 00 ld bc,StreamData
0087+ 8062 DD 09 add ix,bc
0088+ 8064 18 E6 jr .playstreams
0089+ 8066
0090+ 8066 DD 21 BD 80 Mute ld ix,Streams
0091+ 806A .mutestreams
0092+ 806A DD 7E 00 ld a,(ix+StreamData.Type)
0093+ 806D FE 04 cp StreamType.Unknown
0094+ 806F C8 ret z
0095+ 8070 DD 4E 09 ld c,(ix+StreamData.Mute)
0096+ 8073 DD 46 0A ld b,(ix+StreamData.Mute+1)
0097+ 8076 DD E5 push ix
0098+ 8078 CD 84 80 call jp_bc
0099+ 807B DD E1 pop ix
0100+ 807D 01 0B 00 ld bc,StreamData
0101+ 8080 DD 09 add ix,bc
0102+ 8082 18 E6 jr .mutestreams
0103+ 8084
0104+ 8084 C5 jp_bc push bc
0105+ 8085 C9 ret
0106+ 8086
0107+ 8086 ;in hl - chunk start
0108+ 8086 ;out a - chunkid
0109+ 8086 ;out hl - chunk data start
0110+ 8086 ;out bc - chunk data size
0111+ 8086 ;corrupt de
0112+ 8086 ParseChunk
0113+ 8086 11 00 81 ld de,ChunkId
0114+ 8089 .checkid
0115+ 8089 06 04 ld b,4
0116+ 808B dup 4
0117+ 808B 1A > ld a,(de)
0118+ 808C 1C > inc e
0119+ 808D BE > cp (hl)
0120+ 808E 23 > inc hl
0121+ 808F 20 01 > jr nz,$+3
0122+ 8091 05 > dec b
0117+ 8092 1A > ld a,(de)
0118+ 8093 1C > inc e
0119+ 8094 BE > cp (hl)
0120+ 8095 23 > inc hl
0121+ 8096 20 01 > jr nz,$+3
0122+ 8098 05 > dec b
0117+ 8099 1A > ld a,(de)
0118+ 809A 1C > inc e
0119+ 809B BE > cp (hl)
0120+ 809C 23 > inc hl
0121+ 809D 20 01 > jr nz,$+3
0122+ 809F 05 > dec b
0117+ 80A0 1A > ld a,(de)
0118+ 80A1 1C > inc e
0119+ 80A2 BE > cp (hl)
0120+ 80A3 23 > inc hl
0121+ 80A4 20 01 > jr nz,$+3
0122+ 80A6 05 > dec b
0124+ 80A7 ;nz if last byte is not matched
0125+ 80A7 ;nz if b != 0 (not all bytes matched)
0126+ 80A7 7B ld a,e
0127+ 80A8 28 0A jr z,.matched
0128+ 80AA FE 1C cp ChunkId.Unknown
0129+ 80AC 28 08 jr z,.getdata
0130+ 80B1 2B 2B 2B 2B dec hl,hl,hl,hl
0131+ 80B2 18 D5 jr .checkid
0132+ 80B4 .matched
0133+ 80B4 D6 04 sub 4
0134+ 80B6 .getdata
0135+ 80B6 ;skip higher bytes of size, assume they are zero
0136+ 80B6 23 inc hl
0137+ 80B7 23 inc hl
0138+ 80B8 46 ld b,(hl)
0139+ 80B9 23 inc hl
0140+ 80BA 4E ld c,(hl)
0141+ 80BB 23 inc hl
0142+ 80BC C9 ret
0143+ 80BD
0144+ 80BD ;put streams in gap
0145+ 80BD Streams
0146+ 80BD MinStreamsCount=3 ;approx: ts+tfm
0147+ 80BD 00 ds MinStreamsCount*StreamData ;approx
0148+ 80DE Streams.End
0149+ 80DE display "MTC: loosed ",256-low $," bytes"
0150+ 80DE 00 align 256
0151+ 8100
0152+ 8100 ChunkId
0153+ 8100 .MTC1=low $
0154+ 8100 4D 54 43 31 db "MTC1"
0155+ 8104 .TRCK=low $
0156+ 8104 54 52 43 4B db "TRCK"
0157+ 8108 .DATA=low $
0158+ 8108 44 41 54 41 db "DATA"
0159+ 810C .NAME=low $
0160+ 810C 4E 41 4D 45 db "NAME"
0161+ 8110 .AUTH=low $
0162+ 8110 41 55 54 48 db "AUTH"
0163+ 8114 .ANNO=low $
0164+ 8114 41 4E 4E 4F db "ANNO"
0165+ 8118 .PROP=low $
0166+ 8118 50 52 4F 50 db "PROP"
0167+ 811C .Unknown=low $
0168+ 811C
0169+ 811C MaxStreamsCount=(ChunkId-Streams)/StreamData
0170+ 811C display "MTC: max streams ",MaxStreamsCount
0171+ 811C
0172+ 811C macro MoveNextChunk
0173+ 811C~ ;chunk is always aligned at word boundary, so correct odd length
0174+ 811C~ push bc
0175+ 811C~ pop af
0176+ 811C~ adc hl,bc
0177+ 811C endm
0178+ 811C
0179+ 811C ;in hl - content
0180+ 811C ;in bc - size
0181+ 811C ParseMTC1
0182+ 811C E5 push hl
0183+ 811D 09 add hl,bc
0184+ 811E E3 ex (sp),hl
0185+ 811F ; (sp) - end of avail data
0186+ 811F .nextchunk
0187+ 811F CD 86 80 call ParseChunk
0188+ 8122 E5 C5 push hl,bc
0189+ 8124 FE 04 cp ChunkId.TRCK
0190+ 8126 CC 37 81 call z,ParseTrack
0191+ 8129 C1 E1 pop bc,hl
0192+ 812B MoveNextChunk
0192+ 812B C5 > push bc
0192+ 812C F1 > pop af
0192+ 812D ED 4A > adc hl,bc
0193+ 812F C1 pop bc
0194+ 8130 ;hl- end of chunk
0195+ 8130 ;de- end of avail
0196+ 8130 ED 42 sbc hl,bc
0197+ 8132 C8 ret z ;last chunk
0198+ 8133 09 add hl,bc
0199+ 8134 C5 push bc
0200+ 8135 18 E8 jr .nextchunk
0201+ 8137
0202+ 8137 ;in hl - content
0203+ 8137 ;in bc - size
0204+ 8137 ParseTrack
0205+ 8137 E5 push hl
0206+ 8138 09 add hl,bc
0207+ 8139 E3 ex (sp),hl
0208+ 813A ; (sp) - end of avail data
0209+ 813A .nextchunk
0210+ 813A CD 86 80 call ParseChunk
0211+ 813D E5 C5 push hl,bc
0212+ 813F FE 08 cp ChunkId.DATA
0213+ 8141 CC 56 81 call z,ParseData
0214+ 8144 08 exa
0215+ 8145 C1 E1 pop bc,hl
0216+ 8147 MoveNextChunk
0216+ 8147 C5 > push bc
0216+ 8148 F1 > pop af
0216+ 8149 ED 4A > adc hl,bc
0217+ 814B C1 pop bc
0218+ 814C 08 exa
0219+ 814D C8 ret z ;data is parsed
0220+ 814E ;hl- end of chunk
0221+ 814E ;de- end of avail
0222+ 814E A7 and a
0223+ 814F ED 42 sbc hl,bc
0224+ 8151 C8 ret z ;last chunk
0225+ 8152 09 add hl,bc
0226+ 8153 C5 push bc
0227+ 8154 18 E4 jr .nextchunk
0228+ 8156
0229+ 8156 ;in hl - content
0230+ 8156 ;in bc - size
0231+ 8156 ;out Z - data parsed and added as stream
0232+ 8156 ParseData
0233+ 8156 CD 62 81 call ParseTFC
0234+ 8159 C4 84 81 call nz,ParseTS
0235+ 815C C4 91 81 call nz,ParsePT2
0236+ 815F 20 43 jr nz,ParsePT3
0237+ 8161 C9 ret
0238+ 8162
0239+ 8162 ParseTFC
0240+ 8162 E5 C5 push hl,bc
0241+ 8164 CD 05 8F call TFC.CheckFormat
0242+ 8167 C1 E1 pop bc,hl
0243+ 8169 C0 ret nz
0244+ 816A 3E 03 ld a,StreamType.TFC
0245+ 816C D9 exx
0246+ 816D 21 2E 8F ld hl,TFC.Init
0247+ 8170 11 E1 8F ld de,TFC.Play
0248+ 8173 01 6A 8F ld bc,TFC.Mute
0249+ 8176 CD C3 81 call FillStream
0250+ 8179 AddStream
0251+ 8179 01 0B 00 ld bc,StreamData
0252+ 817C DD 09 add ix,bc
0253+ 817E DD 36 00 04 ld (ix+StreamData.Type),StreamType.Unknown
0254+ 8182 AF xor a;set Z
0255+ 8183 C9 ret
0256+ 8184
0257+ 8184 ParseTS
0258+ 8184 E5 C5 push hl,bc
0259+ 8186 CD CD 8E call TS.CheckFormatKnownSize
0260+ 8189 C1 E1 pop bc,hl
0261+ 818B C0 ret nz
0262+ 818C CD B7 81 call FillTS
0263+ 818F 18 E8 jr AddStream
0264+ 8191
0265+ 8191 ParsePT2
0266+ 8191 E5 C5 push hl,bc
0267+ 8193 CD 7C 8E call PT2.CheckFormat
0268+ 8196 C1 E1 pop bc,hl
0269+ 8198 C0 ret nz
0270+ 8199 3E 01 ld a,StreamType.PT2
0271+ 819B D9 exx
0272+ 819C 21 77 8E ld hl,PT2.Init
0273+ 819F CD BD 81 call FillPts
0274+ 81A2 18 D5 jr AddStream
0275+ 81A4
0276+ 81A4 ParsePT3
0277+ 81A4 E5 C5 push hl,bc
0278+ 81A6 CD 30 8E call PT3.CheckFormat
0279+ 81A9 C1 E1 pop bc,hl
0280+ 81AB C0 ret nz
0281+ 81AC 3E 00 ld a,StreamType.PT3
0282+ 81AE D9 exx
0283+ 81AF 21 2B 8E ld hl,PT3.Init
0284+ 81B2 CD BD 81 call FillPts
0285+ 81B5 18 C2 jr AddStream
0286+ 81B7
0287+ 81B7 3E 02 FillTS ld a,StreamType.TS
0288+ 81B9 D9 exx
0289+ 81BA 21 B7 8E ld hl,TS.Init
0290+ 81BD 11 88 8A FillPts ld de,PTS.PLAY
0291+ 81C0 01 5A 82 ld bc,PTS.MUTE
0292+ 81C3 FillStream
0293+ 81C3 DD 77 00 ld (ix+StreamData.Type),a
0294+ 81C6 DD 75 05 ld (ix+StreamData.Init),l
0295+ 81C9 DD 74 06 ld (ix+StreamData.Init+1),h
0296+ 81CC DD 73 07 ld (ix+StreamData.Play),e
0297+ 81CF DD 72 08 ld (ix+StreamData.Play+1),d
0298+ 81D2 DD 71 09 ld (ix+StreamData.Mute),c
0299+ 81D5 DD 70 0A ld (ix+StreamData.Mute+1),b
0300+ 81D8 D9 exx
0301+ 81D9 DD 75 01 ld (ix+StreamData.Data1),l
0302+ 81DC DD 74 02 ld (ix+StreamData.Data1+1),h
0303+ 81DF DD 73 03 ld (ix+StreamData.Data2),e
0304+ 81E2 DD 72 04 ld (ix+StreamData.Data2+1),d
0305+ 81E5 C9 ret
0306+ 81E6
0307+ 81E6 ;some business-logic related to supported players
0308+ 81E6 MergeStreams
0309+ 81E6 3A BD 80 ld a,(Streams+StreamData.Type)
0310+ 81E9 FE 04 cp StreamType.Unknown
0311+ 81EB C8 ret z ;no streams
0312+ 81EC 3A C8 80 ld a,(Streams+StreamData+StreamData.Type)
0313+ 81EF FE 04 cp StreamType.Unknown
0314+ 81F1 C8 ret z ;single stream
0315+ 81F2
0316+ 81F2 ;sort streams according to type, use simple bubblesort
0317+ 81F2 Sort
0318+ 81F2 assert 0 == ((Streams ^ Streams.End) >> 8)
0319+ 81F2 assert 0 == StreamData.Type
0320+ 81F2 11 BD 80 ld de,Streams
0321+ 81F5 21 C8 80 ld hl,Streams+StreamData
0322+ 81F8 0E 00 ld c,0;swaps mark
0323+ 81FA .cycle
0324+ 81FA 1A ld a,(de)
0325+ 81FB FE 04 cp StreamType.Unknown
0326+ 81FD 28 1A jr z,.end
0327+ 81FF BE cp (hl)
0328+ 8200 38 10 jr c,.next
0329+ 8202 28 0E jr z,.next
0330+ 8204 06 0B ld b,StreamData
0331+ 8206 .swapitems
0332+ 8206 1A ld a,(de)
0333+ 8207 4E ld c,(hl)
0334+ 8208 77 ld (hl),a
0335+ 8209 79 ld a,c
0336+ 820A 12 ld (de),a
0337+ 820B 2C inc l
0338+ 820C 1C inc e
0339+ 820D 10 F7 djnz .swapitems
0340+ 820F 4C ld c,h
0341+ 8210 18 E8 jr .cycle
0342+ 8212 .next
0343+ 8212 5D ld e,l
0344+ 8213 7D ld a,l
0345+ 8214 C6 0B add a,StreamData
0346+ 8216 6F ld l,a
0347+ 8217 18 E1 jr .cycle
0348+ 8219 .end
0349+ 8219 79 ld a,c
0350+ 821A A7 and a
0351+ 821B 20 D5 jr nz,Sort
0352+ 821D ;try merge streams
0353+ 821D ; X X merged to X (last is taken)
0354+ 821D ; PT3 PT3 merged to TS
0355+ 821D Merge
0356+ 821D assert 0 == StreamData.Type
0357+ 821D 11 BD 80 ld de,Streams
0358+ 8220 21 C8 80 ld hl,Streams+StreamData
0359+ 8223 .cycle
0360+ 8223 1A ld a,(de)
0361+ 8224 FE 04 cp StreamType.Unknown
0362+ 8226 C8 ret z
0363+ 8227 BE cp (hl)
0364+ 8228 28 07 jr z,.perform
0365+ 822A 5D ld e,l
0366+ 822B 7D ld a,l
0367+ 822C C6 0B add a,StreamData
0368+ 822E 6F ld l,a
0369+ 822F 18 F2 jr .cycle
0370+ 8231 .perform
0371+ 8231 FE 00 cp StreamType.PT3
0372+ 8233 20 15 jr nz,.generic
0373+ 8235 ;merge PT3 streams to TS
0374+ 8235 E5 D5 push hl,de
0375+ 8237 E5 D5 push hl,de
0376+ 8239 2C inc l
0377+ 823A 5E ld e,(hl)
0378+ 823B 2C inc l
0379+ 823C 56 ld d,(hl) ;data1
0380+ 823D E1 pop hl
0381+ 823E 2C inc l
0382+ 823F 7E ld a,(hl)
0383+ 8240 2C inc l
0384+ 8241 66 ld h,(hl)
0385+ 8242 6F ld l,a ;data2
0386+ 8243 DD E1 pop ix
0387+ 8245 CD B7 81 call FillTS
0388+ 8248 D1 E1 pop de,hl
0389+ 824A .generic
0390+ 824A ;for other types just take last one
0391+ 824A 06 0B ld b,StreamData
0392+ 824C .copyitems
0393+ 824C 7E ld a,(hl)
0394+ 824D 12 ld (de),a
0395+ 824E 2C inc l
0396+ 824F 1C inc e
0397+ 8250 10 FA djnz .copyitems
0398+ 8252 1A ld a,(de)
0399+ 8253 FE 04 cp StreamType.Unknown
0400+ 8255 20 F3 jr nz,.generic
0401+ 8257 18 8D jr MergeStreams
0402+ 8259
0403+ 8259 endmod
0404+ 8259
0405+ 8259 ifndef NoPrologue
0406+ 8259 define NoPrologue
0407+ 8259 endif
0408+ 8259
0409+ 8259 ifndef HaveFormatCheck
0410+ 8259 define HaveFormatCheck
0411+ 8259 endif
0412+ 8259
0413+ 8259 ifndef ONtfm
0414+ 8259 define ONtfm
0415+ 8259 endif
0416+ 8259
0417+ 8259 include "PTSPlay.asm"
0001++ 8259 ifndef _pts_asm_defined
0002++ 8259 define _pts_asm_defined
0003++ 8259
0004++ 8259 MODULE PTS
0005++ 8259
0006++ 8259 ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum
0007++ 8259 ;(c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>
0008++ 8259 ;Specially for AlCo
0009++ 8259 ;http://bulba.untergrund.net/ (http://bulba.at.kz/)
0010++ 8259
0011++ 8259 ;Release number
0012++ 8259 Release EQU "0"
0013++ 8259
0014++ 8259 ;Conditional assembly
0015++ 8259 ;1) Current position counters at (Vars1+0) and (Vars2+0)
0016++ 8259 CurPosCounter=0
0017++ 8259 ;2) Allow channels allocation bits at (SETUP)
0018++ 8259 ACBBAC=0
0019++ 8259 ;3) Allow loop checking and disabling
0020++ 8259 LoopChecker=0
0021++ 8259 ;4) Insert official identificator
0022++ 8259 Id=0
0023++ 8259 ;5) Set IY for correct return to ZX Basic
0024++ 8259 Basic=0
0025++ 8259
0026++ 8259 ;Features
0027++ 8259 ;--------
0028++ 8259 ;-Can be compiled at any address (i.e. no need rounding ORG
0029++ 8259 ; address).
0030++ 8259 ;-Variables (VARS) can be located at any address (not only after
0031++ 8259 ; code block).
0032++ 8259 ;-INIT subprogram checks PT3-module version and rightly
0033++ 8259 ; generates both note and volume tables outside of code block
0034++ 8259 ; (in VARS).
0035++ 8259 ;-Two portamento (spc. command 3xxx) algorithms (depending of
0036++ 8259 ; PT3 module version).
0037++ 8259 ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
0038++ 8259 ; and higher).
0039++ 8259 ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
0040++ 8259 ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard.
0041++ 8259 ;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
0042++ 8259 ;-See also notes at the end of this source code.
0043++ 8259
0044++ 8259 ;Limitations
0045++ 8259 ;-----------
0046++ 8259 ;-Can run in RAM only (self-modified code is used).
0047++ 8259 ;-PT2 position list must be end by #FF marker only.
0048++ 8259
0049++ 8259 ;Warning!!! PLAY subprogram can crash if no module are loaded
0050++ 8259 ;into RAM or INIT subprogram was not called before.
0051++ 8259
0052++ 8259 ;Call MUTE or INIT one more time to mute sound after stopping
0053++ 8259 ;playing
0054++ 8259
0055++ 8259 TonA EQU 0
0056++ 8259 TonB EQU 2
0057++ 8259 TonC EQU 4
0058++ 8259 Noise EQU 6
0059++ 8259 Mixer EQU 7
0060++ 8259 AmplA EQU 8
0061++ 8259 AmplB EQU 9
0062++ 8259 AmplC EQU 10
0063++ 8259 Env EQU 11
0064++ 8259 EnvTp EQU 13
0065++ 8259
0066++ 8259 START
0067++ 8259
0068++ 8259 SETUP.NOLOOP EQU 1
0069++ 8259 SETUP.PT2 EQU 2
0070++ 8259 SETUP.ACB EQU 4
0071++ 8259 SETUP.BAC EQU 8
0072++ 8259 SETUP.TS02 EQU 16
0073++ 8259 SETUP.TSPT3 EQU 32
0074++ 8259
0075++ 8259 00 SETUP DB 0 ;set bit0, if you want to play without looping
0076++ 825A ;(optional);
0077++ 825A ;set bit1 for PT2 and reset for PT3 before
0078++ 825A ;calling INIT;
0079++ 825A ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional);
0080++ 825A ;bits4-5: %00-no TS, %01-2 modules TS, %10-
0081++ 825A ;autodetect PT3 TS-format by AlCo (PT 3.7+);
0082++ 825A ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not
0083++ 825A ;documented and must be converted to new standard.
0084++ 825A ;bit6 is set each time, when loop point of 2nd TS
0085++ 825A ;module is passed (optional).
0086++ 825A ;bit7 is set each time, when loop point of 1st TS
0087++ 825A ;or of single module is passed (optional).
0088++ 825A
0089++ 825A ;Identifier
0090++ 825A IF Id
0091++ 825A~ DB "=UniPT2/PT3/TS-Player r.",Release,"="
0092++ 825A ENDIF
0093++ 825A
0094++ 825A IF LoopChecker
0095++ 825A~ CHECKLP LD HL,SETUP
0096++ 825A~ BIT 0,(IY-100+VRS.ModNum)
0097++ 825A~ JR Z,CHL1
0098++ 825A~ SET 6,(HL)
0099++ 825A~ JR CHL2
0100++ 825A~ CHL1 SET 7,(HL)
0101++ 825A~ CHL2 BIT 0,(HL)
0102++ 825A~ RET Z
0103++ 825A~ POP HL
0104++ 825A~ INC (IY-100+VRS.DelyCnt)
0105++ 825A~ INC (IY-100+VRS.ChanA+CHP.NtSkCn)
0106++ 825A~ XOR A
0107++ 825A~ LD (IY-100+VRS.AYREGS+AmplA),A
0108++ 825A~ LD (IY-100+VRS.AYREGS+AmplB),A
0109++ 825A~ LD (IY-100+VRS.AYREGS+AmplC),A
0110++ 825A~ RET
0111++ 825A ENDIF
0112++ 825A
0113++ 825A AF MUTE XOR A
0114++ 825B 67 LD H,A
0115++ 825C 6F LD L,A
0116++ 825D 32 EE 8B LD (VARS1+VRS.AYREGS+AmplA),A
0117++ 8260 22 EF 8B LD (VARS1+VRS.AYREGS+AmplB),HL
0118++ 8263 32 75 8C LD (VARS2+VRS.AYREGS+AmplA),A
0119++ 8266 22 76 8C LD (VARS2+VRS.AYREGS+AmplB),HL
0120++ 8269 C3 9C 8A JP ROUT
0121++ 826C
0122++ 826C INIT
0123++ 826C ;HL - AddressOfModule
0124++ 826C ;DE - AddresOf2ndModule
0125++ 826C ;A - mode
0126++ 826C D5 PUSH DE
0127++ 826D E5 PUSH HL
0128++ 826E 21 6C 8B LD HL,VARS
0129++ 8271 36 00 LD (HL),0
0130++ 8273 11 6D 8B LD DE,VARS+1
0131++ 8276 01 0E 01 LD BC,VAR0END-VARS-1
0132++ 8279 ED B0 LDIR
0133++ 827B 23 INC HL
0134++ 827C 22 CF 8B LD (VARS1+VRS.AdInPtA),HL ;ptr to zero
0135++ 827F 22 56 8C LD (VARS2+VRS.AdInPtA),HL
0136++ 8282
0137++ 8282 E1 POP HL
0138++ 8283 FD 21 D1 8B LD IY,VARS1+100
0139++ 8287 32 59 82 LD (SETUP),A
0140++ 828A E6 02 AND SETUP.PT2
0141++ 828C C2 15 83 JP NZ,I_PT2
0142++ 828F
0143++ 828F CD 5E 84 CALL INITPT3
0144++ 8292 21 18 1F LD HL,(e_-SamCnv-2)*256+#18
0145++ 8295 22 31 88 LD (SamCnv),HL
0146++ 8298 3E BA LD A,#BA
0147++ 829A 32 FC 87 LD (OrnCP),A
0148++ 829D 32 28 88 LD (SamCP),A
0149++ 82A0 3E 7B LD A,#7B
0150++ 82A2 32 FF 87 LD (OrnLD),A
0151++ 82A5 32 2B 88 LD (SamLD),A
0152++ 82A8 3E 87 LD A,#87
0153++ 82AA 32 22 88 LD (SamClc2),A
0154++ 82AD E1 POP HL
0155++ 82AE ;Use version and ton table of 1st module
0156++ 82AE DD 7E A9 LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
0157++ 82B1 D6 30 SUB #30
0158++ 82B3 38 04 JR C,L20
0159++ 82B5 FE 0A CP 10
0160++ 82B7 38 02 JR C,L21
0161++ 82B9 3E 06 L20 LD A,6
0162++ 82BB 32 CF 86 L21 LD (Version),A
0163++ 82BE F5 PUSH AF ;VolTable version
0164++ 82BF FE 04 CP 4
0165++ 82C1 DD 7E FF LD A,(IX+99-100) ;TONE TABLE NUMBER
0166++ 82C4 17 RLA
0167++ 82C5 E6 07 AND 7
0168++ 82C7 F5 PUSH AF ;NoteTable number
0169++ 82C8
0170++ 82C8 FD 21 58 8C LD IY,VARS2+100
0171++ 82CC 3A 59 82 LD A,(SETUP)
0172++ 82CF E6 30 AND SETUP.TS02|SETUP.TSPT3
0173++ 82D1 28 37 JR Z,NOTS
0174++ 82D3 FE 10 CP SETUP.TS02
0175++ 82D5 28 27 JR Z,TwoPT3s
0176++ 82D7 3A CF 86 LD A,(Version)
0177++ 82DA FE 07 CP 7
0178++ 82DC 38 2C JR C,NOTS
0179++ 82DE DD 7E FE LD A,(IX+98-100) ;ALCO TS MARKER
0180++ 82E1 FE 20 CP #20
0181++ 82E3 28 25 JR Z,NOTS
0182++ 82E5 21 6D 8B LD HL,VARS1
0183++ 82E8 11 F4 8B LD DE,VARS2
0184++ 82EB 01 87 00 LD BC,VRS
0185++ 82EE ED B0 LDIR
0186++ 82F0 FD CB 9E CE SET 1,(IY-100+VRS.ModNum)
0187++ 82F4 4F LD C,A
0188++ 82F5 87 ADD A,A
0189++ 82F6 81 ADD A,C
0190++ 82F7 D6 02 SUB 2
0191++ 82F9 32 93 89 LD (TSSub),A
0192++ 82FC 18 03 JR AlCoTS_
0193++ 82FE CD 5E 84 TwoPT3s CALL INITPT3
0194++ 8301 3E 01 AlCoTS_ LD A,1
0195++ 8303 32 6C 8B LD (is_ts),A
0196++ 8306 FD CB 9E C6 SET 0,(IY-100+VRS.ModNum)
0197++ 830A
0198++ 830A 01 1B 86 NOTS LD BC,PT3PD
0199++ 830D 21 00 00 LD HL,0
0200++ 8310 11 34 8B LD DE,PT3EMPTYORN
0201++ 8313 18 48 JR INITCOMMON
0202++ 8315
0203++ 8315 CD 96 84 I_PT2 CALL INITPT2
0204++ 8318 21 CB 51 LD HL,#51CB
0205++ 831B 22 31 88 LD (SamCnv),HL
0206++ 831E 3E BB LD A,#BB
0207++ 8320 32 FC 87 LD (OrnCP),A
0208++ 8323 32 28 88 LD (SamCP),A
0209++ 8326 3E 7A LD A,#7A
0210++ 8328 32 FF 87 LD (OrnLD),A
0211++ 832B 32 2B 88 LD (SamLD),A
0212++ 832E 3E 80 LD A,#80
0213++ 8330 32 22 88 LD (SamClc2),A
0214++ 8333 E1 POP HL
0215++ 8334 3E 05 LD A,5
0216++ 8336 32 CF 86 LD (Version),A
0217++ 8339 F5 PUSH AF
0218++ 833A 3E 02 LD A,2
0219++ 833C F5 PUSH AF
0220++ 833D
0221++ 833D 3A 59 82 LD A,(SETUP)
0222++ 8340 E6 30 AND SETUP.TS02|SETUP.TSPT3
0223++ 8342 28 10 JR Z,NOTS2
0224++ 8344
0225++ 8344 FD 21 58 8C LD IY,VARS2+100
0226++ 8348 3E 01 LD A,1
0227++ 834A 32 6C 8B LD (is_ts),A
0228++ 834D FD CB 9E C6 SET 0,(IY-100+VRS.ModNum)
0229++ 8351 CD 96 84 CALL INITPT2
0230++ 8354
0231++ 8354 01 55 85 NOTS2 LD BC,PT2PD
0232++ 8357 21 87 86 LD HL,#8687
0233++ 835A 11 8A 8C LD DE,PT2EMPTYORN
0234++ 835D
0235++ 835D INITCOMMON
0236++ 835D
0237++ 835D IF Basic
0238++ 835D~ LD IY,#5C3A
0239++ 835D ENDIF
0240++ 835D
0241++ 835D ED 43 06 85 LD (PTDEC),BC
0242++ 8361 22 95 89 LD (PsCalc),HL
0243++ 8364 D5 PUSH DE
0244++ 8365
0245++ 8365 ;note table data depacker
0246++ 8365 ;(c) Ivan Roshin
0247++ 8365 11 37 8B LD DE,T_PACK
0248++ 8368 01 DC 8C LD BC,T1_+(2*49)-1
0249++ 836B 1A TP_0 LD A,(DE)
0250++ 836C 13 INC DE
0251++ 836D FE 1E CP 15*2
0252++ 836F 30 06 JR NC,TP_1
0253++ 8371 67 LD H,A
0254++ 8372 1A LD A,(DE)
0255++ 8373 6F LD L,A
0256++ 8374 13 INC DE
0257++ 8375 18 07 JR TP_2
0258++ 8377 D5 TP_1 PUSH DE
0259++ 8378 16 00 LD D,0
0260++ 837A 5F LD E,A
0261++ 837B 19 ADD HL,DE
0262++ 837C 19 ADD HL,DE
0263++ 837D D1 POP DE
0264++ 837E 7C TP_2 LD A,H
0265++ 837F 02 LD (BC),A
0266++ 8380 0B DEC BC
0267++ 8381 7D LD A,L
0268++ 8382 02 LD (BC),A
0269++ 8383 0B DEC BC
0270++ 8384 D6 F0 SUB (#F8*2)&255
0271++ 8386 20 E3 JR NZ,TP_0
0272++ 8388
0273++ 8388 3C INC A
0274++ 8389 32 DA 8B LD (VARS1+VRS.DelyCnt),A
0275++ 838C 32 61 8C LD (VARS2+VRS.DelyCnt),A
0276++ 838F 21 01 F0 LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
0277++ 8392 22 8B 8B LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL
0278++ 8395 22 A8 8B LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL
0279++ 8398 22 C5 8B LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL
0280++ 839B 22 12 8C LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL
0281++ 839E 22 2F 8C LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL
0282++ 83A1 22 4C 8C LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL
0283++ 83A4 E1 POP HL
0284++ 83A5 22 7D 8B LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL
0285++ 83A8 22 9A 8B LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL
0286++ 83AB 22 B7 8B LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL
0287++ 83AE 22 04 8C LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL
0288++ 83B1 22 21 8C LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL
0289++ 83B4 22 3E 8C LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL
0290++ 83B7
0291++ 83B7 F1 POP AF
0292++ 83B8
0293++ 83B8 ;NoteTableCreator (c) Ivan Roshin
0294++ 83B8 ;A - NoteTableNumber*2+VersionForNoteTable
0295++ 83B8 ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
0296++ 83B8
0297++ 83B8 21 E4 8A LD HL,NT_DATA
0298++ 83BB 16 00 LD D,0
0299++ 83BD 87 ADD A,A
0300++ 83BE 5F LD E,A
0301++ 83BF 19 ADD HL,DE
0302++ 83C0 5E LD E,(HL)
0303++ 83C1 23 INC HL
0304++ 83C2 CB 3B SRL E
0305++ 83C4 9F SBC A,A
0306++ 83C5 E6 A7 AND #A7 ;#00 (NOP) or #A7 (AND A)
0307++ 83C7 32 EF 83 LD (L3),A
0308++ 83CA EB EX DE,HL
0309++ 83CB 01 7B 8C LD BC,T1_
0310++ 83CE 09 ADD HL,BC
0311++ 83CF
0312++ 83CF 1A LD A,(DE)
0313++ 83D0 C6 F4 ADD A,T_&255
0314++ 83D2 4F LD C,A
0315++ 83D3 CE 8A ADC A,T_/256
0316++ 83D5 91 SUB C
0317++ 83D6 47 LD B,A
0318++ 83D7 C5 PUSH BC
0319++ 83D8 11 6B 8D LD DE,NT_
0320++ 83DB D5 PUSH DE
0321++ 83DC
0322++ 83DC 06 0C LD B,12
0323++ 83DE C5 L1 PUSH BC
0324++ 83DF 4E LD C,(HL)
0325++ 83E0 23 INC HL
0326++ 83E1 E5 PUSH HL
0327++ 83E2 46 LD B,(HL)
0328++ 83E3
0329++ 83E3 D5 PUSH DE
0330++ 83E4 EB EX DE,HL
0331++ 83E5 11 17 00 LD DE,23
0332++ 83E8 DD 26 08 LD IXH,8
0333++ 83EB
0334++ 83EB CB 38 L2 SRL B
0335++ 83ED CB 19 RR C
0336++ 83EF 19 L3 DB #19 ;AND A or NOP
0337++ 83F0 79 LD A,C
0338++ 83F1 8A ADC A,D ;=ADC 0
0339++ 83F2 77 LD (HL),A
0340++ 83F3 23 INC HL
0341++ 83F4 78 LD A,B
0342++ 83F5 8A ADC A,D
0343++ 83F6 77 LD (HL),A
0344++ 83F7 19 ADD HL,DE
0345++ 83F8 DD 25 DEC IXH
0346++ 83FA 20 EF JR NZ,L2
0347++ 83FC
0348++ 83FC D1 POP DE
0349++ 83FD 13 INC DE
0350++ 83FE 13 INC DE
0351++ 83FF E1 POP HL
0352++ 8400 23 INC HL
0353++ 8401 C1 POP BC
0354++ 8402 10 DA DJNZ L1
0355++ 8404
0356++ 8404 E1 POP HL
0357++ 8405 D1 POP DE
0358++ 8406
0359++ 8406 7B LD A,E
0360++ 8407 FE 00 CP TCOLD_1&255
0361++ 8409 20 05 JR NZ,CORR_1
0362++ 840B 3E FD LD A,#FD
0363++ 840D 32 99 8D LD (NT_+#2E),A
0364++ 8410
0365++ 8410 1A CORR_1 LD A,(DE)
0366++ 8411 A7 AND A
0367++ 8412 28 11 JR Z,TC_EXIT
0368++ 8414 1F RRA
0369++ 8415 F5 PUSH AF
0370++ 8416 87 ADD A,A
0371++ 8417 4F LD C,A
0372++ 8418 09 ADD HL,BC
0373++ 8419 F1 POP AF
0374++ 841A 30 02 JR NC,CORR_2
0375++ 841C 35 DEC (HL)
0376++ 841D 35 DEC (HL)
0377++ 841E 34 CORR_2 INC (HL)
0378++ 841F A7 AND A
0379++ 8420 ED 42 SBC HL,BC
0380++ 8422 13 INC DE
0381++ 8423 18 EB JR CORR_1
0382++ 8425
0383++ 8425 TC_EXIT
0384++ 8425
0385++ 8425 F1 POP AF
0386++ 8426
0387++ 8426 ;VolTableCreator (c) Ivan Roshin
0388++ 8426 ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
0389++ 8426 ;5.. - 2.x,3.5x..3.6x..VTII1.0)
0390++ 8426
0391++ 8426 FE 05 CP 5
0392++ 8428 21 11 00 LD HL,#11
0393++ 842B 54 LD D,H
0394++ 842C 5C LD E,H
0395++ 842D 3E 17 LD A,#17
0396++ 842F 30 03 JR NC,M1
0397++ 8431 2D DEC L
0398++ 8432 5D LD E,L
0399++ 8433 AF XOR A
0400++ 8434 32 45 84 M1 LD (M2),A
0401++ 8437
0402++ 8437 DD 21 7B 8C LD IX,VT_+16
0403++ 843B
0404++ 843B 0E 0F LD C,#F
0405++ 843D E5 INITV2 PUSH HL
0406++ 843E
0407++ 843E 19 ADD HL,DE
0408++ 843F EB EX DE,HL
0409++ 8440 ED 62 SBC HL,HL
0410++ 8442
0411++ 8442 06 10 LD B,#10
0412++ 8444 7D INITV1 LD A,L
0413++ 8445 7D M2 DB #7D
0414++ 8446 7C LD A,H
0415++ 8447 CE 00 ADC A,0
0416++ 8449 DD 77 00 LD (IX),A
0417++ 844C DD 23 INC IX
0418++ 844E 19 ADD HL,DE
0419++ 844F 10 F3 DJNZ INITV1
0420++ 8451
0421++ 8451 E1 POP HL
0422++ 8452 7B LD A,E
0423++ 8453 FE 77 CP #77
0424++ 8455 20 01 JR NZ,M3
0425++ 8457 1C INC E
0426++ 8458 0D M3 DEC C
0427++ 8459 20 E2 JR NZ,INITV2
0428++ 845B
0429++ 845B C3 9C 8A JP ROUT
0430++ 845E
0431++ 845E CD D1 84 INITPT3 CALL SETMDAD
0432++ 8461 E5 PUSH HL
0433++ 8462 11 64 00 LD DE,100
0434++ 8465 19 ADD HL,DE
0435++ 8466 7E LD A,(HL)
0436++ 8467 FD 77 08 LD (IY-100+VRS.Delay),A
0437++ 846A E5 PUSH HL
0438++ 846B DD E1 POP IX
0439++ 846D 19 ADD HL,DE
0440++ 846E CD DF 84 CALL SETCPPT
0441++ 8471 DD 5E 02 LD E,(IX+102-100)
0442++ 8474 23 INC HL
0443++ 8475
0444++ 8475 IF CurPosCounter
0445++ 8475~ LD (IY-100+VRS.PosSub),L
0446++ 8475 ENDIF
0447++ 8475
0448++ 8475 19 ADD HL,DE
0449++ 8476 CD E6 84 CALL SETLPPT
0450++ 8479 D1 POP DE
0451++ 847A DD 6E 03 LD L,(IX+103-100)
0452++ 847D DD 66 04 LD H,(IX+104-100)
0453++ 8480 19 ADD HL,DE
0454++ 8481 CD CA 84 CALL SETPTPT
0455++ 8484 21 A9 00 LD HL,169
0456++ 8487 19 ADD HL,DE
0457++ 8488 CD D8 84 CALL SETORPT
0458++ 848B 21 69 00 LD HL,105
0459++ 848E 19 ADD HL,DE
0460++ 848F
0461++ 848F FD 75 FA SETSMPT LD (IY-100+VRS.SamPtrs),L
0462++ 8492 FD 74 FB LD (IY-100+VRS.SamPtrs+1),H
0463++ 8495 C9 RET
0464++ 8496
0465++ 8496 7E INITPT2 LD A,(HL)
0466++ 8497 FD 77 08 LD (IY-100+VRS.Delay),A
0467++ 849A E5 PUSH HL
0468++ 849B E5 PUSH HL
0469++ 849C E5 PUSH HL
0470++ 849D 23 INC HL
0471++ 849E 23 INC HL
0472++ 849F 7E LD A,(HL)
0473++ 84A0 23 INC HL
0474++ 84A1 CD 8F 84 CALL SETSMPT
0475++ 84A4 5E LD E,(HL)
0476++ 84A5 23 INC HL
0477++ 84A6 56 LD D,(HL)
0478++ 84A7 E1 POP HL
0479++ 84A8 A7 AND A
0480++ 84A9 ED 52 SBC HL,DE
0481++ 84AB CD D1 84 CALL SETMDAD
0482++ 84AE E1 POP HL
0483++ 84AF 11 43 00 LD DE,67
0484++ 84B2 19 ADD HL,DE
0485++ 84B3 CD D8 84 CALL SETORPT
0486++ 84B6 1E 20 LD E,32
0487++ 84B8 19 ADD HL,DE
0488++ 84B9 4E LD C,(HL)
0489++ 84BA 23 INC HL
0490++ 84BB 46 LD B,(HL)
0491++ 84BC 1E 1E LD E,30
0492++ 84BE 19 ADD HL,DE
0493++ 84BF CD DF 84 CALL SETCPPT
0494++ 84C2 5F LD E,A
0495++ 84C3 23 INC HL
0496++ 84C4
0497++ 84C4 IF CurPosCounter
0498++ 84C4~ LD (IY-100+VRS.PosSub),L
0499++ 84C4 ENDIF
0500++ 84C4
0501++ 84C4 19 ADD HL,DE
0502++ 84C5 CD E6 84 CALL SETLPPT
0503++ 84C8 E1 POP HL
0504++ 84C9 09 ADD HL,BC
0505++ 84CA
0506++ 84CA FD 75 FC SETPTPT LD (IY-100+VRS.PatsPtr),L
0507++ 84CD FD 74 FD LD (IY-100+VRS.PatsPtr+1),H
0508++ 84D0 C9 RET
0509++ 84D1
0510++ 84D1 FD 75 F6 SETMDAD LD (IY-100+VRS.MODADDR),L
0511++ 84D4 FD 74 F7 LD (IY-100+VRS.MODADDR+1),H
0512++ 84D7 C9 RET
0513++ 84D8
0514++ 84D8 FD 75 F8 SETORPT LD (IY-100+VRS.OrnPtrs),L
0515++ 84DB FD 74 F9 LD (IY-100+VRS.OrnPtrs+1),H
0516++ 84DE C9 RET
0517++ 84DF
0518++ 84DF FD 75 04 SETCPPT LD (IY-100+VRS.CrPsPtr),L
0519++ 84E2 FD 74 05 LD (IY-100+VRS.CrPsPtr+1),H
0520++ 84E5 C9 RET
0521++ 84E6
0522++ 84E6 FD 75 06 SETLPPT LD (IY-100+VRS.LPosPtr),L
0523++ 84E9 FD 74 07 LD (IY-100+VRS.LPosPtr+1),H
0524++ 84EC C9 RET
0525++ 84ED
0526++ 84ED FD 75 13 SETENBS LD (IY-100+VRS.EnvBase),L
0527++ 84F0 FD 74 14 LD (IY-100+VRS.EnvBase+1),H
0528++ 84F3 C9 RET
0529++ 84F4
0530++ 84F4 FD 75 0C SETESLD LD (IY-100+VRS.CurESld),L
0531++ 84F7 FD 74 0D LD (IY-100+VRS.CurESld+1),H
0532++ 84FA C9 RET
0533++ 84FB
0534++ 84FB FD E5 GETIX PUSH IY
0535++ 84FD DD E1 POP IX
0536++ 84FF DD 19 ADD IX,DE
0537++ 8501 C9 RET
0538++ 8502
0539++ 8502 CD FB 84 PTDECOD CALL GETIX
0540++ 8505 PTDEC EQU $+1
0541++ 8505 C3 C3 C3 JP #C3C3
0542++ 8508
0543++ 8508 ;PT2 pattern decoder
0544++ 8508 CD 9E 87 PD2_SAM CALL SETSAM
0545++ 850B 18 4A JR PD2_LOOP
0546++ 850D
0547++ 850D DD 77 08 PD2_EOff LD (IX-12+CHP.Env_En),A
0548++ 8510 18 45 JR PD2_LOOP
0549++ 8512
0550++ 8512 DD 36 08 10 PD2_ENV LD (IX-12+CHP.Env_En),16
0551++ 8516 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A
0552++ 8519 0A LD A,(BC)
0553++ 851A 03 INC BC
0554++ 851B 6F LD L,A
0555++ 851C 0A LD A,(BC)
0556++ 851D 03 INC BC
0557++ 851E 67 LD H,A
0558++ 851F CD ED 84 CALL SETENBS
0559++ 8522 18 33 JR PD2_LOOP
0560++ 8524
0561++ 8524 CD 7F 87 PD2_ORN CALL SETORN
0562++ 8527 18 2E JR PD2_LOOP
0563++ 8529
0564++ 8529 3C PD2_SKIP INC A
0565++ 852A DD 77 05 LD (IX-12+CHP.NNtSkp),A
0566++ 852D 18 28 JR PD2_LOOP
0567++ 852F
0568++ 852F 0F PD2_VOL RRCA
0569++ 8530 0F RRCA
0570++ 8531 0F RRCA
0571++ 8532 0F RRCA
0572++ 8533 DD 77 10 LD (IX-12+CHP.Volume),A
0573++ 8536 18 1F JR PD2_LOOP
0574++ 8538
0575++ 8538 CD 4F 87 PD2_DEL CALL C_DELAY
0576++ 853B 18 1A JR PD2_LOOP
0577++ 853D
0578++ 853D DD CB 09 D6 PD2_GLIS SET 2,(IX-12+CHP.Flags)
0579++ 8541 3C INC A
0580++ 8542 DD 77 0A LD (IX-12+CHP.TnSlDl),A
0581++ 8545 DD 77 F9 LD (IX-12+CHP.TSlCnt),A
0582++ 8548 0A LD A,(BC)
0583++ 8549 03 INC BC
0584++ 854A DD 77 0B LD (IX-12+CHP.TSlStp),A
0585++ 854D 87 ADD A,A
0586++ 854E 9F SBC A,A
0587++ 854F DD 77 0C LD (IX-12+CHP.TSlStp+1),A
0588++ 8552 37 SCF
0589++ 8553 18 01 JR PD2_LP2
0590++ 8555
0591++ 8555 A7 PT2PD AND A
0592++ 8556
0593++ 8556 08 PD2_LP2 EX AF,AF'
0594++ 8557
0595++ 8557 0A PD2_LOOP LD A,(BC)
0596++ 8558 03 INC BC
0597++ 8559 C6 20 ADD A,#20
0598++ 855B 28 3F JR Z,PD2_REL
0599++ 855D 38 A9 JR C,PD2_SAM
0600++ 855F C6 60 ADD A,96
0601++ 8561 38 3E JR C,PD2_NOTE
0602++ 8563 3C INC A
0603++ 8564 28 A7 JR Z,PD2_EOff
0604++ 8566 C6 0F ADD A,15
0605++ 8568 CA 7E 86 JP Z,PD_FIN
0606++ 856B 38 A5 JR C,PD2_ENV
0607++ 856D C6 10 ADD A,#10
0608++ 856F 38 B3 JR C,PD2_ORN
0609++ 8571 C6 40 ADD A,#40
0610++ 8573 38 B4 JR C,PD2_SKIP
0611++ 8575 C6 10 ADD A,#10
0612++ 8577 38 B6 JR C,PD2_VOL
0613++ 8579 3C INC A
0614++ 857A 28 BC JR Z,PD2_DEL
0615++ 857C 3C INC A
0616++ 857D 28 BE JR Z,PD2_GLIS
0617++ 857F 3C INC A
0618++ 8580 28 0A JR Z,PD2_PORT
0619++ 8582 3C INC A
0620++ 8583 28 12 JR Z,PD2_STOP
0621++ 8585 0A LD A,(BC)
0622++ 8586 03 INC BC
0623++ 8587 DD 77 F7 LD (IX-12+CHP.CrNsSl),A
0624++ 858A 18 CB JR PD2_LOOP
0625++ 858C
0626++ 858C DD CB 09 96 PD2_PORT RES 2,(IX-12+CHP.Flags)
0627++ 8590 0A LD A,(BC)
0628++ 8591 03 INC BC
0629++ 8592 03 INC BC ;ignoring precalc delta to right sound
0630++ 8593 03 INC BC
0631++ 8594 37 SCF
0632++ 8595 18 BF JR PD2_LP2
0633++ 8597
0634++ 8597 DD 77 F9 PD2_STOP LD (IX-12+CHP.TSlCnt),A
0635++ 859A 18 BB JR PD2_LOOP
0636++ 859C
0637++ 859C DD 77 09 PD2_REL LD (IX-12+CHP.Flags),A
0638++ 859F 18 2C JR PD2_EXIT
0639++ 85A1
0640++ 85A1 6F PD2_NOTE LD L,A
0641++ 85A2 DD 7E 06 LD A,(IX-12+CHP.Note)
0642++ 85A5 32 B8 86 LD (PrNote+1),A
0643++ 85A8 DD 75 06 LD (IX-12+CHP.Note),L
0644++ 85AB AF XOR A
0645++ 85AC DD 77 F9 LD (IX-12+CHP.TSlCnt),A
0646++ 85AF DD CB 09 C6 SET 0,(IX-12+CHP.Flags)
0647++ 85B3 08 EX AF,AF'
0648++ 85B4 30 16 JR NC,NOGLIS2
0649++ 85B6 DD CB 09 56 BIT 2,(IX-12+CHP.Flags)
0650++ 85BA 20 0C JR NZ,NOPORT2
0651++ 85BC 32 DE 86 LD (LoStep),A
0652++ 85BF 87 ADD A,A
0653++ 85C0 9F SBC A,A
0654++ 85C1 08 EX AF,AF'
0655++ 85C2 67 LD H,A
0656++ 85C3 6F LD L,A
0657++ 85C4 3C INC A
0658++ 85C5 CD 99 86 CALL SETPORT
0659++ 85C8 DD 36 F9 01 NOPORT2 LD (IX-12+CHP.TSlCnt),1
0660++ 85CC AF NOGLIS2 XOR A
0661++ 85CD
0662++ 85CD
0663++ 85CD DD 77 F5 PD2_EXIT LD (IX-12+CHP.PsInSm),A
0664++ 85D0 DD 77 F4 LD (IX-12+CHP.PsInOr),A
0665++ 85D3 DD 77 FA LD (IX-12+CHP.CrTnSl),A
0666++ 85D6 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A
0667++ 85D9 C3 7E 86 JP PD_FIN
0668++ 85DC
0669++ 85DC ;PT3 pattern decoder
0670++ 85DC DD 36 08 00 PD_OrSm LD (IX-12+CHP.Env_En),0
0671++ 85E0 CD 7F 87 CALL SETORN
0672++ 85E3 0A PD_SAM_ LD A,(BC)
0673++ 85E4 03 INC BC
0674++ 85E5 0F RRCA
0675++ 85E6
0676++ 85E6 CD 9E 87 PD_SAM CALL SETSAM
0677++ 85E9 18 3F JR PD_LOOP
0678++ 85EB
0679++ 85EB 0F PD_VOL RRCA
0680++ 85EC 0F RRCA
0681++ 85ED 0F RRCA
0682++ 85EE 0F RRCA
0683++ 85EF DD 77 10 LD (IX-12+CHP.Volume),A
0684++ 85F2 18 39 JR PD_LP2
0685++ 85F4
0686++ 85F4 DD 77 08 PD_EOff LD (IX-12+CHP.Env_En),A
0687++ 85F7 DD 77 F4 LD (IX-12+CHP.PsInOr),A
0688++ 85FA 18 31 JR PD_LP2
0689++ 85FC
0690++ 85FC 3D PD_SorE DEC A
0691++ 85FD 20 07 JR NZ,PD_ENV
0692++ 85FF 0A LD A,(BC)
0693++ 8600 03 INC BC
0694++ 8601 DD 77 05 LD (IX-12+CHP.NNtSkp),A
0695++ 8604 18 27 JR PD_LP2
0696++ 8606
0697++ 8606 CD 64 87 PD_ENV CALL SETENV
0698++ 8609 18 22 JR PD_LP2
0699++ 860B
0700++ 860B CD 7F 87 PD_ORN CALL SETORN
0701++ 860E 18 1A JR PD_LOOP
0702++ 8610
0703++ 8610 DD 77 08 PD_ESAM LD (IX-12+CHP.Env_En),A
0704++ 8613 DD 77 F4 LD (IX-12+CHP.PsInOr),A
0705++ 8616 C4 64 87 CALL NZ,SETENV
0706++ 8619 18 C8 JR PD_SAM_
0707++ 861B
0708++ 861B DD 7E 06 PT3PD LD A,(IX-12+CHP.Note)
0709++ 861E 32 B8 86 LD (PrNote+1),A
0710++ 8621 DD 6E FA LD L,(IX-12+CHP.CrTnSl)
0711++ 8624 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1)
0712++ 8627 22 D5 86 LD (PrSlide+1),HL
0713++ 862A
0714++ 862A 11 10 20 PD_LOOP LD DE,#2010
0715++ 862D 0A PD_LP2 LD A,(BC)
0716++ 862E 03 INC BC
0717++ 862F 83 ADD A,E
0718++ 8630 38 AA JR C,PD_OrSm
0719++ 8632 82 ADD A,D
0720++ 8633 28 49 JR Z,PD_FIN
0721++ 8635 38 AF JR C,PD_SAM
0722++ 8637 83 ADD A,E
0723++ 8638 28 25 JR Z,PD_REL
0724++ 863A 38 AF JR C,PD_VOL
0725++ 863C 83 ADD A,E
0726++ 863D 28 B5 JR Z,PD_EOff
0727++ 863F 38 BB JR C,PD_SorE
0728++ 8641 C6 60 ADD A,96
0729++ 8643 38 20 JR C,PD_NOTE
0730++ 8645 83 ADD A,E
0731++ 8646 38 C3 JR C,PD_ORN
0732++ 8648 82 ADD A,D
0733++ 8649 38 0F JR C,PD_NOIS
0734++ 864B 83 ADD A,E
0735++ 864C 38 C2 JR C,PD_ESAM
0736++ 864E 87 ADD A,A
0737++ 864F 5F LD E,A
0738++ 8650 21 DA 66 LD HL,(SPCCOMS+#FF20-#2000)&65535
0739++ 8653 19 ADD HL,DE
0740++ 8654 5E LD E,(HL)
0741++ 8655 23 INC HL
0742++ 8656 56 LD D,(HL)
0743++ 8657 D5 PUSH DE
0744++ 8658 18 D0 JR PD_LOOP
0745++ 865A
0746++ 865A FD 77 10 PD_NOIS LD (IY-100+VRS.Ns_Base),A
0747++ 865D 18 CE JR PD_LP2
0748++ 865F
0749++ 865F DD CB 09 86 PD_REL RES 0,(IX-12+CHP.Flags)
0750++ 8663 18 08 JR PD_RES
0751++ 8665
0752++ 8665 DD 77 06 PD_NOTE LD (IX-12+CHP.Note),A
0753++ 8668 DD CB 09 C6 SET 0,(IX-12+CHP.Flags)
0754++ 866C AF XOR A
0755++ 866D
0756++ 866D ED 73 7C 86 PD_RES LD (PDSP_+1),SP
0757++ 8671 DD F9 LD SP,IX
0758++ 8673 67 LD H,A
0759++ 8674 6F LD L,A
0760++ 8675 E5 PUSH HL
0761++ 8676 E5 PUSH HL
0762++ 8677 E5 PUSH HL
0763++ 8678 E5 PUSH HL
0764++ 8679 E5 PUSH HL
0765++ 867A E5 PUSH HL
0766++ 867B 31 31 31 PDSP_ LD SP,#3131
0767++ 867E
0768++ 867E DD 7E 05 PD_FIN LD A,(IX-12+CHP.NNtSkp)
0769++ 8681 DD 77 0F LD (IX-12+CHP.NtSkCn),A
0770++ 8684 C9 RET
0771++ 8685
0772++ 8685 0A C_PORTM LD A,(BC)
0773++ 8686 03 INC BC
0774++ 8687 ;SKIP PRECALCULATED TONE DELTA (BECAUSE
0775++ 8687 ;CANNOT BE RIGHT AFTER PT3 COMPILATION)
0776++ 8687 03 INC BC
0777++ 8688 03 INC BC
0778++ 8689 08 EX AF,AF'
0779++ 868A 0A LD A,(BC) ;SIGNED TONE STEP
0780++ 868B 03 INC BC
0781++ 868C 32 DE 86 LD (LoStep),A
0782++ 868F 0A LD A,(BC)
0783++ 8690 03 INC BC
0784++ 8691 A7 AND A
0785++ 8692 08 EX AF,AF'
0786++ 8693 DD 6E FA LD L,(IX-12+CHP.CrTnSl)
0787++ 8696 DD 66 FB LD H,(IX-12+CHP.CrTnSl+1)
0788++ 8699
0789++ 8699 ;Set portamento variables
0790++ 8699 ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
0791++ 8699
0792++ 8699 DD CB 09 96 SETPORT RES 2,(IX-12+CHP.Flags)
0793++ 869D DD 77 0A LD (IX-12+CHP.TnSlDl),A
0794++ 86A0 DD 77 F9 LD (IX-12+CHP.TSlCnt),A
0795++ 86A3 E5 PUSH HL
0796++ 86A4 11 6B 8D LD DE,NT_
0797++ 86A7 DD 7E 06 LD A,(IX-12+CHP.Note)
0798++ 86AA DD 77 07 LD (IX-12+CHP.SlToNt),A
0799++ 86AD 87 ADD A,A
0800++ 86AE 6F LD L,A
0801++ 86AF 26 00 LD H,0
0802++ 86B1 19 ADD HL,DE
0803++ 86B2 7E LD A,(HL)
0804++ 86B3 23 INC HL
0805++ 86B4 66 LD H,(HL)
0806++ 86B5 6F LD L,A
0807++ 86B6 E5 PUSH HL
0808++ 86B7 3E 3E PrNote LD A,#3E
0809++ 86B9 DD 77 06 LD (IX-12+CHP.Note),A
0810++ 86BC 87 ADD A,A
0811++ 86BD 6F LD L,A
0812++ 86BE 26 00 LD H,0
0813++ 86C0 19 ADD HL,DE
0814++ 86C1 5E LD E,(HL)
0815++ 86C2 23 INC HL
0816++ 86C3 56 LD D,(HL)
0817++ 86C4 E1 POP HL
0818++ 86C5 ED 52 SBC HL,DE
0819++ 86C7 DD 75 0D LD (IX-12+CHP.TnDelt),L
0820++ 86CA DD 74 0E LD (IX-12+CHP.TnDelt+1),H
0821++ 86CD D1 POP DE
0822++ 86CE Version EQU $+1
0823++ 86CE 3E 3E LD A,#3E
0824++ 86D0 FE 06 CP 6
0825++ 86D2 38 09 JR C,OLDPRTM ;Old 3xxx for PT v3.5-
0826++ 86D4 11 11 11 PrSlide LD DE,#1111
0827++ 86D7 DD 73 FA LD (IX-12+CHP.CrTnSl),E
0828++ 86DA DD 72 FB LD (IX-12+CHP.CrTnSl+1),D
0829++ 86DD LoStep EQU $+1
0830++ 86DD 3E 3E OLDPRTM LD A,#3E
0831++ 86DF 08 EX AF,AF'
0832++ 86E0 28 01 JR Z,NOSIG
0833++ 86E2 EB EX DE,HL
0834++ 86E3 ED 52 NOSIG SBC HL,DE
0835++ 86E5 F2 ED 86 JP P,SET_STP
0836++ 86E8 2F CPL
0837++ 86E9 08 EX AF,AF'
0838++ 86EA ED 44 NEG
0839++ 86EC 08 EX AF,AF'
0840++ 86ED DD 77 0C SET_STP LD (IX-12+CHP.TSlStp+1),A
0841++ 86F0 08 EX AF,AF'
0842++ 86F1 DD 77 0B LD (IX-12+CHP.TSlStp),A
0843++ 86F4 DD 36 FE 00 LD (IX-12+CHP.COnOff),0
0844++ 86F8 C9 RET
0845++ 86F9
0846++ 86F9 DD CB 09 D6 C_GLISS SET 2,(IX-12+CHP.Flags)
0847++ 86FD 0A LD A,(BC)
0848++ 86FE 03 INC BC
0849++ 86FF DD 77 0A LD (IX-12+CHP.TnSlDl),A
0850++ 8702 A7 AND A
0851++ 8703 20 07 JR NZ,GL36
0852++ 8705 3A CF 86 LD A,(Version) ;AlCo PT3.7+
0853++ 8708 FE 07 CP 7
0854++ 870A 9F SBC A,A
0855++ 870B 3C INC A
0856++ 870C DD 77 F9 GL36 LD (IX-12+CHP.TSlCnt),A
0857++ 870F 0A LD A,(BC)
0858++ 8710 03 INC BC
0859++ 8711 08 EX AF,AF'
0860++ 8712 0A LD A,(BC)
0861++ 8713 03 INC BC
0862++ 8714 18 D7 JR SET_STP
0863++ 8716
0864++ 8716 0A C_SMPOS LD A,(BC)
0865++ 8717 03 INC BC
0866++ 8718 DD 77 F5 LD (IX-12+CHP.PsInSm),A
0867++ 871B C9 RET
0868++ 871C
0869++ 871C 0A C_ORPOS LD A,(BC)
0870++ 871D 03 INC BC
0871++ 871E DD 77 F4 LD (IX-12+CHP.PsInOr),A
0872++ 8721 C9 RET
0873++ 8722
0874++ 8722 0A C_VIBRT LD A,(BC)
0875++ 8723 03 INC BC
0876++ 8724 DD 77 FF LD (IX-12+CHP.OnOffD),A
0877++ 8727 DD 77 FE LD (IX-12+CHP.COnOff),A
0878++ 872A 0A LD A,(BC)
0879++ 872B 03 INC BC
0880++ 872C DD 77 00 LD (IX-12+CHP.OffOnD),A
0881++ 872F AF XOR A
0882++ 8730 DD 77 F9 LD (IX-12+CHP.TSlCnt),A
0883++ 8733 DD 77 FA LD (IX-12+CHP.CrTnSl),A
0884++ 8736 DD 77 FB LD (IX-12+CHP.CrTnSl+1),A
0885++ 8739 C9 RET
0886++ 873A
0887++ 873A 0A C_ENGLS LD A,(BC)
0888++ 873B 03 INC BC
0889++ 873C FD 77 0E LD (IY-100+VRS.Env_Del),A
0890++ 873F FD 77 0F LD (IY-100+VRS.CurEDel),A
0891++ 8742 0A LD A,(BC)
0892++ 8743 03 INC BC
0893++ 8744 6F LD L,A
0894++ 8745 0A LD A,(BC)
0895++ 8746 03 INC BC
0896++ 8747 67 LD H,A
0897++ 8748 FD 75 0A LD (IY-100+VRS.ESldAdd),L
0898++ 874B FD 74 0B LD (IY-100+VRS.ESldAdd+1),H
0899++ 874E C9 RET
0900++ 874F
0901++ 874F 0A C_DELAY LD A,(BC)
0902++ 8750 03 INC BC
0903++ 8751 FD 77 08 LD (IY-100+VRS.Delay),A
0904++ 8754 21 F6 8B LD HL,VARS2+VRS.ModNum ;if AlCo_TS
0905++ 8757 CB 4E BIT 1,(HL)
0906++ 8759 C8 RET Z
0907++ 875A 32 D9 8B LD (VARS1+VRS.Delay),A
0908++ 875D 32 DA 8B LD (VARS1+VRS.DelyCnt),A
0909++ 8760 32 60 8C LD (VARS2+VRS.Delay),A
0910++ 8763 C9 RET
0911++ 8764
0912++ 8764 DD 73 08 SETENV LD (IX-12+CHP.Env_En),E
0913++ 8767 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A
0914++ 876A 0A LD A,(BC)
0915++ 876B 03 INC BC
0916++ 876C 67 LD H,A
0917++ 876D 0A LD A,(BC)
0918++ 876E 03 INC BC
0919++ 876F 6F LD L,A
0920++ 8770 CD ED 84 CALL SETENBS
0921++ 8773 AF XOR A
0922++ 8774 DD 77 F4 LD (IX-12+CHP.PsInOr),A
0923++ 8777 FD 77 0F LD (IY-100+VRS.CurEDel),A
0924++ 877A 67 LD H,A
0925++ 877B 6F LD L,A
0926++ 877C C3 F4 84 JP SETESLD
0927++ 877F
0928++ 877F 87 SETORN ADD A,A
0929++ 8780 5F LD E,A
0930++ 8781 16 00 LD D,0
0931++ 8783 DD 72 F4 LD (IX-12+CHP.PsInOr),D
0932++ 8786 FD 6E F8 LD L,(IY-100+VRS.OrnPtrs)
0933++ 8789 FD 66 F9 LD H,(IY-100+VRS.OrnPtrs+1)
0934++ 878C 19 ADD HL,DE
0935++ 878D 5E LD E,(HL)
0936++ 878E 23 INC HL
0937++ 878F 56 LD D,(HL)
0938++ 8790 FD 6E F6 LD L,(IY-100+VRS.MODADDR)
0939++ 8793 FD 66 F7 LD H,(IY-100+VRS.MODADDR+1)
0940++ 8796 19 ADD HL,DE
0941++ 8797 DD 75 01 LD (IX-12+CHP.OrnPtr),L
0942++ 879A DD 74 02 LD (IX-12+CHP.OrnPtr+1),H
0943++ 879D C9 C_NOP RET
0944++ 879E
0945++ 879E 87 SETSAM ADD A,A
0946++ 879F 5F LD E,A
0947++ 87A0 16 00 LD D,0
0948++ 87A2 FD 6E FA LD L,(IY-100+VRS.SamPtrs);
0949++ 87A5 FD 66 FB LD H,(IY-100+VRS.SamPtrs+1);
0950++ 87A8 19 ADD HL,DE
0951++ 87A9 5E LD E,(HL)
0952++ 87AA 23 INC HL
0953++ 87AB 56 LD D,(HL)
0954++ 87AC FD 6E F6 LD L,(IY-100+VRS.MODADDR)
0955++ 87AF FD 66 F7 LD H,(IY-100+VRS.MODADDR+1)
0956++ 87B2 19 ADD HL,DE
0957++ 87B3 DD 75 03 LD (IX-12+CHP.SamPtr),L
0958++ 87B6 DD 74 04 LD (IX-12+CHP.SamPtr+1),H
0959++ 87B9 C9 RET
0960++ 87BA
0961++ 87BA ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
0962++ 87BA 9D 87 SPCCOMS DW C_NOP
0963++ 87BC F9 86 DW C_GLISS
0964++ 87BE 85 86 DW C_PORTM
0965++ 87C0 16 87 DW C_SMPOS
0966++ 87C2 1C 87 DW C_ORPOS
0967++ 87C4 22 87 DW C_VIBRT
0968++ 87C6 9D 87 DW C_NOP
0969++ 87C8 9D 87 DW C_NOP
0970++ 87CA 3A 87 DW C_ENGLS
0971++ 87CC 4F 87 DW C_DELAY
0972++ 87CE 9D 87 DW C_NOP
0973++ 87D0 9D 87 DW C_NOP
0974++ 87D2 9D 87 DW C_NOP
0975++ 87D4 9D 87 DW C_NOP
0976++ 87D6 9D 87 DW C_NOP
0977++ 87D8 9D 87 DW C_NOP
0978++ 87DA
0979++ 87DA CD FB 84 CHREGS CALL GETIX
0980++ 87DD AF XOR A
0981++ 87DE 32 17 8A LD (Ampl),A
0982++ 87E1 DD CB 15 46 BIT 0,(IX+CHP.Flags)
0983++ 87E5 E5 PUSH HL
0984++ 87E6 CA 2D 89 JP Z,CH_EXIT
0985++ 87E9 ED 73 77 88 LD (CSP_+1),SP
0986++ 87ED DD 6E 0D LD L,(IX+CHP.OrnPtr)
0987++ 87F0 DD 66 0E LD H,(IX+CHP.OrnPtr+1)
0988++ 87F3 F9 LD SP,HL
0989++ 87F4 D1 POP DE
0990++ 87F5 67 LD H,A
0991++ 87F6 DD 7E 00 LD A,(IX+CHP.PsInOr)
0992++ 87F9 6F LD L,A
0993++ 87FA 39 ADD HL,SP
0994++ 87FB 3C INC A
0995++ 87FC ;PT2 PT3
0996++ 87FC 3C OrnCP INC A ;CP E CP D
0997++ 87FD 38 01 JR C,CH_ORPS
0998++ 87FF 01 OrnLD DB 1 ;LD A,D LD A,E
0999++ 8800 DD 77 00 CH_ORPS LD (IX+CHP.PsInOr),A
1000++ 8803 DD 7E 12 LD A,(IX+CHP.Note)
1001++ 8806 86 ADD A,(HL)
1002++ 8807 F2 0B 88 JP P,CH_NTP
1003++ 880A AF XOR A
1004++ 880B FE 60 CH_NTP CP 96
1005++ 880D 38 02 JR C,CH_NOK
1006++ 880F 3E 5F LD A,95
1007++ 8811 87 CH_NOK ADD A,A
1008++ 8812 08 EX AF,AF'
1009++ 8813 DD 6E 0F LD L,(IX+CHP.SamPtr)
1010++ 8816 DD 66 10 LD H,(IX+CHP.SamPtr+1)
1011++ 8819 F9 LD SP,HL
1012++ 881A D1 POP DE
1013++ 881B 26 00 LD H,0
1014++ 881D DD 7E 01 LD A,(IX+CHP.PsInSm)
1015++ 8820 47 LD B,A
1016++ 8821 87 ADD A,A
1017++ 8822 87 SamClc2 ADD A,A ;or ADD A,B for PT2
1018++ 8823 6F LD L,A
1019++ 8824 39 ADD HL,SP
1020++ 8825 F9 LD SP,HL
1021++ 8826 78 LD A,B
1022++ 8827 3C INC A
1023++ 8828 ;PT2 PT3
1024++ 8828 3C SamCP INC A ;CP E CP D
1025++ 8829 38 01 JR C,CH_SMPS
1026++ 882B 01 SamLD DB 1 ;LD A,D LD A,E
1027++ 882C DD 77 01 CH_SMPS LD (IX+CHP.PsInSm),A
1028++ 882F C1 POP BC
1029++ 8830 E1 POP HL
1030++ 8831
1031++ 8831 ;Convert PT2 sample to PT3
1032++ 8831 ;PT2 PT3
1033++ 8831 E1 SamCnv POP HL ;BIT 2,C JR e_
1034++ 8832 E1 POP HL
1035++ 8833 60 LD H,B
1036++ 8834 20 06 JR NZ,$+8
1037++ 8836 EB EX DE,HL
1038++ 8837 A7 AND A
1039++ 8838 ED 62 SBC HL,HL
1040++ 883A ED 52 SBC HL,DE
1041++ 883C 51 LD D,C
1042++ 883D CB 19 RR C
1043++ 883F 9F SBC A,A
1044++ 8840 2F CPL
1045++ 8841 E6 3E AND #3E
1046++ 8843 CB 19 RR C
1047++ 8845 CB 18 RR B
1048++ 8847 A1 AND C
1049++ 8848 4F LD C,A
1050++ 8849 78 LD A,B
1051++ 884A 1F RRA
1052++ 884B 1F RRA
1053++ 884C CB 1A RR D
1054++ 884E 1F RRA
1055++ 884F E6 9F AND #9F
1056++ 8851 47 LD B,A
1057++ 8852
1058++ 8852 DD 5E 08 e_ LD E,(IX+CHP.TnAcc)
1059++ 8855 DD 56 09 LD D,(IX+CHP.TnAcc+1)
1060++ 8858 19 ADD HL,DE
1061++ 8859 CB 70 BIT 6,B
1062++ 885B 28 06 JR Z,CH_NOAC
1063++ 885D DD 75 08 LD (IX+CHP.TnAcc),L
1064++ 8860 DD 74 09 LD (IX+CHP.TnAcc+1),H
1065++ 8863 EB CH_NOAC EX DE,HL
1066++ 8864 08 EX AF,AF'
1067++ 8865 C6 6B ADD A,NT_&255
1068++ 8867 6F LD L,A
1069++ 8868 CE 8D ADC A,NT_/256
1070++ 886A 95 SUB L
1071++ 886B 67 LD H,A
1072++ 886C F9 LD SP,HL
1073++ 886D E1 POP HL
1074++ 886E 19 ADD HL,DE
1075++ 886F DD 5E 06 LD E,(IX+CHP.CrTnSl)
1076++ 8872 DD 56 07 LD D,(IX+CHP.CrTnSl+1)
1077++ 8875 19 ADD HL,DE
1078++ 8876 31 31 31 CSP_ LD SP,#3131
1079++ 8879 E3 EX (SP),HL
1080++ 887A AF XOR A
1081++ 887B DD B6 05 OR (IX+CHP.TSlCnt)
1082++ 887E 28 3E JR Z,CH_AMP
1083++ 8880 DD 35 05 DEC (IX+CHP.TSlCnt)
1084++ 8883 20 39 JR NZ,CH_AMP
1085++ 8885 DD 7E 16 LD A,(IX+CHP.TnSlDl)
1086++ 8888 DD 77 05 LD (IX+CHP.TSlCnt),A
1087++ 888B DD 6E 17 LD L,(IX+CHP.TSlStp)
1088++ 888E DD 66 18 LD H,(IX+CHP.TSlStp+1)
1089++ 8891 7C LD A,H
1090++ 8892 19 ADD HL,DE
1091++ 8893 DD 75 06 LD (IX+CHP.CrTnSl),L
1092++ 8896 DD 74 07 LD (IX+CHP.CrTnSl+1),H
1093++ 8899 DD CB 15 56 BIT 2,(IX+CHP.Flags)
1094++ 889D 20 1F JR NZ,CH_AMP
1095++ 889F DD 5E 19 LD E,(IX+CHP.TnDelt)
1096++ 88A2 DD 56 1A LD D,(IX+CHP.TnDelt+1)
1097++ 88A5 A7 AND A
1098++ 88A6 28 01 JR Z,CH_STPP
1099++ 88A8 EB EX DE,HL
1100++ 88A9 ED 52 CH_STPP SBC HL,DE
1101++ 88AB FA BE 88 JP M,CH_AMP
1102++ 88AE DD 7E 13 LD A,(IX+CHP.SlToNt)
1103++ 88B1 DD 77 12 LD (IX+CHP.Note),A
1104++ 88B4 AF XOR A
1105++ 88B5 DD 77 05 LD (IX+CHP.TSlCnt),A
1106++ 88B8 DD 77 06 LD (IX+CHP.CrTnSl),A
1107++ 88BB DD 77 07 LD (IX+CHP.CrTnSl+1),A
1108++ 88BE DD 7E 02 CH_AMP LD A,(IX+CHP.CrAmSl)
1109++ 88C1 CB 79 BIT 7,C
1110++ 88C3 28 13 JR Z,CH_NOAM
1111++ 88C5 CB 71 BIT 6,C
1112++ 88C7 28 07 JR Z,CH_AMIN
1113++ 88C9 FE 0F CP 15
1114++ 88CB 28 0B JR Z,CH_NOAM
1115++ 88CD 3C INC A
1116++ 88CE 18 05 JR CH_SVAM
1117++ 88D0 FE F1 CH_AMIN CP -15
1118++ 88D2 28 04 JR Z,CH_NOAM
1119++ 88D4 3D DEC A
1120++ 88D5 DD 77 02 CH_SVAM LD (IX+CHP.CrAmSl),A
1121++ 88D8 6F CH_NOAM LD L,A
1122++ 88D9 78 LD A,B
1123++ 88DA E6 0F AND 15
1124++ 88DC 85 ADD A,L
1125++ 88DD F2 E1 88 JP P,CH_APOS
1126++ 88E0 AF XOR A
1127++ 88E1 FE 10 CH_APOS CP 16
1128++ 88E3 38 02 JR C,CH_VOL
1129++ 88E5 3E 0F LD A,15
1130++ 88E7 DD B6 1C CH_VOL OR (IX+CHP.Volume)
1131++ 88EA C6 6B ADD A,VT_&255
1132++ 88EC 6F LD L,A
1133++ 88ED CE 8C ADC A,VT_/256
1134++ 88EF 95 SUB L
1135++ 88F0 67 LD H,A
1136++ 88F1 7E LD A,(HL)
1137++ 88F2 CB 41 CH_ENV BIT 0,C
1138++ 88F4 20 03 JR NZ,CH_NOEN
1139++ 88F6 DD B6 14 OR (IX+CHP.Env_En)
1140++ 88F9 32 17 8A CH_NOEN LD (Ampl),A
1141++ 88FC CB 78 BIT 7,B
1142++ 88FE 79 LD A,C
1143++ 88FF 28 1A JR Z,NO_ENSL
1144++ 8901 17 RLA
1145++ 8902 17 RLA
1146++ 8903 CB 2F SRA A
1147++ 8905 CB 2F SRA A
1148++ 8907 CB 2F SRA A
1149++ 8909 DD 86 04 ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
1150++ 890C CB 68 BIT 5,B
1151++ 890E 28 03 JR Z,NO_ENAC
1152++ 8910 DD 77 04 LD (IX+CHP.CrEnSl),A
1153++ 8913 FD 86 12 NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE
1154++ 8916 FD 77 12 LD (IY-100+VRS.AddToEn),A
1155++ 8919 18 0E JR CH_MIX
1156++ 891B 1F NO_ENSL RRA
1157++ 891C DD 86 03 ADD A,(IX+CHP.CrNsSl)
1158++ 891F FD 77 11 LD (IY-100+VRS.AddToNs),A
1159++ 8922 CB 68 BIT 5,B
1160++ 8924 28 03 JR Z,CH_MIX
1161++ 8926 DD 77 03 LD (IX+CHP.CrNsSl),A
1162++ 8929 78 CH_MIX LD A,B
1163++ 892A 1F RRA
1164++ 892B E6 48 AND #48
1165++ 892D FD B6 1C CH_EXIT OR (IY-100+VRS.AYREGS+Mixer)
1166++ 8930 0F RRCA
1167++ 8931 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A
1168++ 8934 E1 POP HL
1169++ 8935 AF XOR A
1170++ 8936 DD B6 0A OR (IX+CHP.COnOff)
1171++ 8939 C8 RET Z
1172++ 893A DD 35 0A DEC (IX+CHP.COnOff)
1173++ 893D C0 RET NZ
1174++ 893E DD AE 15 XOR (IX+CHP.Flags)
1175++ 8941 DD 77 15 LD (IX+CHP.Flags),A
1176++ 8944 1F RRA
1177++ 8945 DD 7E 0B LD A,(IX+CHP.OnOffD)
1178++ 8948 38 03 JR C,CH_ONDL
1179++ 894A DD 7E 0C LD A,(IX+CHP.OffOnD)
1180++ 894D DD 77 0A CH_ONDL LD (IX+CHP.COnOff),A
1181++ 8950 C9 RET
1182++ 8951
1183++ 8951 AF PLAY_ XOR A
1184++ 8952 FD 77 12 LD (IY-100+VRS.AddToEn),A
1185++ 8955 FD 77 1C LD (IY-100+VRS.AYREGS+Mixer),A
1186++ 8958 3D DEC A
1187++ 8959 FD 77 22 LD (IY-100+VRS.AYREGS+EnvTp),A
1188++ 895C FD 35 09 DEC (IY-100+VRS.DelyCnt)
1189++ 895F C2 04 8A JP NZ,PL2
1190++ 8962 FD 35 BA DEC (IY-100+VRS.ChanA+CHP.NtSkCn)
1191++ 8965 20 69 JR NZ,PL1B
1192++ 8967 FD 4E FE LD C,(IY-100+VRS.AdInPtA)
1193++ 896A FD 46 FF LD B,(IY-100+VRS.AdInPtA+1)
1194++ 896D 0A LD A,(BC)
1195++ 896E A7 AND A
1196++ 896F 20 53 JR NZ,PL1A
1197++ 8971 57 LD D,A
1198++ 8972 FD 77 10 LD (IY-100+VRS.Ns_Base),A
1199++ 8975 FD 6E 04 LD L,(IY-100+VRS.CrPsPtr)
1200++ 8978 FD 66 05 LD H,(IY-100+VRS.CrPsPtr+1)
1201++ 897B 23 INC HL
1202++ 897C 7E LD A,(HL)
1203++ 897D 3C INC A
1204++ 897E 20 08 JR NZ,PLNLP
1205++ 8980
1206++ 8980 IF LoopChecker
1207++ 8980~ CALL CHECKLP
1208++ 8980 ENDIF
1209++ 8980
1210++ 8980 FD 6E 06 LD L,(IY-100+VRS.LPosPtr)
1211++ 8983 FD 66 07 LD H,(IY-100+VRS.LPosPtr+1)
1212++ 8986 7E LD A,(HL)
1213++ 8987 3C INC A
1214++ 8988 CD DF 84 PLNLP CALL SETCPPT
1215++ 898B 3D DEC A
1216++ 898C FD CB 9E 4E BIT 1,(IY-100+VRS.ModNum)
1217++ 8990 28 03 JR Z,NoAlCo
1218++ 8992 TSSub EQU $+1
1219++ 8992 D6 D6 SUB #D6
1220++ 8994 2F CPL
1221++ 8995 NoAlCo
1222++ 8995 ;PT2 PT3
1223++ 8995 3D PsCalc DEC A ;ADD A,A NOP
1224++ 8996 3D DEC A ;ADD A,(HL) NOP
1225++ 8997 87 ADD A,A
1226++ 8998 5F LD E,A
1227++ 8999 CB 12 RL D
1228++ 899B
1229++ 899B IF CurPosCounter
1230++ 899B~ LD A,L
1231++ 899B~ SUB (IY-100+VRS.PosSub)
1232++ 899B~ LD (IY-100+VRS.CurPos),A
1233++ 899B ENDIF
1234++ 899B
1235++ 899B FD 6E FC LD L,(IY-100+VRS.PatsPtr)
1236++ 899E FD 66 FD LD H,(IY-100+VRS.PatsPtr+1)
1237++ 89A1 19 ADD HL,DE
1238++ 89A2 FD 5E F6 LD E,(IY-100+VRS.MODADDR)
1239++ 89A5 FD 56 F7 LD D,(IY-100+VRS.MODADDR+1)
1240++ 89A8 ED 73 C2 89 LD (PSP_+1),SP
1241++ 89AC F9 LD SP,HL
1242++ 89AD E1 POP HL
1243++ 89AE 19 ADD HL,DE
1244++ 89AF 44 LD B,H
1245++ 89B0 4D LD C,L
1246++ 89B1 E1 POP HL
1247++ 89B2 19 ADD HL,DE
1248++ 89B3 FD 75 00 LD (IY-100+VRS.AdInPtB),L
1249++ 89B6 FD 74 01 LD (IY-100+VRS.AdInPtB+1),H
1250++ 89B9 E1 POP HL
1251++ 89BA 19 ADD HL,DE
1252++ 89BB FD 75 02 LD (IY-100+VRS.AdInPtC),L
1253++ 89BE FD 74 03 LD (IY-100+VRS.AdInPtC+1),H
1254++ 89C1 31 31 31 PSP_ LD SP,#3131
1255++ 89C4 11 AB FF PL1A LD DE,VRS.ChanA+12-100
1256++ 89C7 CD 02 85 CALL PTDECOD
1257++ 89CA FD 71 FE LD (IY-100+VRS.AdInPtA),C
1258++ 89CD FD 70 FF LD (IY-100+VRS.AdInPtA+1),B
1259++ 89D0
1260++ 89D0 FD 35 D7 PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn)
1261++ 89D3 20 12 JR NZ,PL1C
1262++ 89D5 11 C8 FF LD DE,VRS.ChanB+12-100
1263++ 89D8 FD 4E 00 LD C,(IY-100+VRS.AdInPtB)
1264++ 89DB FD 46 01 LD B,(IY-100+VRS.AdInPtB+1)
1265++ 89DE CD 02 85 CALL PTDECOD
1266++ 89E1 FD 71 00 LD (IY-100+VRS.AdInPtB),C
1267++ 89E4 FD 70 01 LD (IY-100+VRS.AdInPtB+1),B
1268++ 89E7
1269++ 89E7 FD 35 F4 PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn)
1270++ 89EA 20 12 JR NZ,PL1D
1271++ 89EC 11 E5 FF LD DE,VRS.ChanC+12-100
1272++ 89EF FD 4E 02 LD C,(IY-100+VRS.AdInPtC)
1273++ 89F2 FD 46 03 LD B,(IY-100+VRS.AdInPtC+1)
1274++ 89F5 CD 02 85 CALL PTDECOD
1275++ 89F8 FD 71 02 LD (IY-100+VRS.AdInPtC),C
1276++ 89FB FD 70 03 LD (IY-100+VRS.AdInPtC+1),B
1277++ 89FE
1278++ 89FE FD 7E 08 PL1D LD A,(IY-100+VRS.Delay)
1279++ 8A01 FD 77 09 LD (IY-100+VRS.DelyCnt),A
1280++ 8A04
1281++ 8A04 11 9F FF PL2 LD DE,VRS.ChanA-100
1282++ 8A07 FD 6E 15 LD L,(IY-100+VRS.AYREGS+TonA)
1283++ 8A0A FD 66 16 LD H,(IY-100+VRS.AYREGS+TonA+1)
1284++ 8A0D CD DA 87 CALL CHREGS
1285++ 8A10 FD 75 15 LD (IY-100+VRS.AYREGS+TonA),L
1286++ 8A13 FD 74 16 LD (IY-100+VRS.AYREGS+TonA+1),H
1287++ 8A16 Ampl EQU $+1
1288++ 8A16 3E 3E LD A,#3E
1289++ 8A18 FD 77 1D LD (IY-100+VRS.AYREGS+AmplA),A
1290++ 8A1B 11 BC FF LD DE,VRS.ChanB-100
1291++ 8A1E FD 6E 17 LD L,(IY-100+VRS.AYREGS+TonB)
1292++ 8A21 FD 66 18 LD H,(IY-100+VRS.AYREGS+TonB+1)
1293++ 8A24 CD DA 87 CALL CHREGS
1294++ 8A27 FD 75 17 LD (IY-100+VRS.AYREGS+TonB),L
1295++ 8A2A FD 74 18 LD (IY-100+VRS.AYREGS+TonB+1),H
1296++ 8A2D 3A 17 8A LD A,(Ampl)
1297++ 8A30 FD 77 1E LD (IY-100+VRS.AYREGS+AmplB),A
1298++ 8A33 11 D9 FF LD DE,VRS.ChanC-100
1299++ 8A36 FD 6E 19 LD L,(IY-100+VRS.AYREGS+TonC)
1300++ 8A39 FD 66 1A LD H,(IY-100+VRS.AYREGS+TonC+1)
1301++ 8A3C CD DA 87 CALL CHREGS
1302++ 8A3F FD 75 19 LD (IY-100+VRS.AYREGS+TonC),L
1303++ 8A42 FD 74 1A LD (IY-100+VRS.AYREGS+TonC+1),H
1304++ 8A45 3A 17 8A LD A,(Ampl)
1305++ 8A48 FD 77 1F LD (IY-100+VRS.AYREGS+AmplC),A
1306++ 8A4B
1307++ 8A4B FD 7E 10 LD A,(IY-100+VRS.Ns_Base)
1308++ 8A4E FD 86 11 ADD (IY-100+VRS.AddToNs)
1309++ 8A51 FD 77 1B LD (IY-100+VRS.AYREGS+Noise),A
1310++ 8A54
1311++ 8A54 FD 7E 12 LD A,(IY-100+VRS.AddToEn)
1312++ 8A57 5F LD E,A
1313++ 8A58 87 ADD A,A
1314++ 8A59 9F SBC A,A
1315++ 8A5A 57 LD D,A
1316++ 8A5B FD 6E 13 LD L,(IY-100+VRS.EnvBase)
1317++ 8A5E FD 66 14 LD H,(IY-100+VRS.EnvBase+1)
1318++ 8A61 19 ADD HL,DE
1319++ 8A62 FD 5E 0C LD E,(IY-100+VRS.CurESld)
1320++ 8A65 FD 56 0D LD D,(IY-100+VRS.CurESld+1)
1321++ 8A68 19 ADD HL,DE
1322++ 8A69 FD 75 20 LD (IY-100+VRS.AYREGS+Env),L
1323++ 8A6C FD 74 21 LD (IY-100+VRS.AYREGS+Env+1),H
1324++ 8A6F
1325++ 8A6F AF XOR A
1326++ 8A70 FD B6 0F OR (IY-100+VRS.CurEDel)
1327++ 8A73 C8 RET Z
1328++ 8A74 FD 35 0F DEC (IY-100+VRS.CurEDel)
1329++ 8A77 C0 RET NZ
1330++ 8A78 FD 7E 0E LD A,(IY-100+VRS.Env_Del)
1331++ 8A7B FD 77 0F LD (IY-100+VRS.CurEDel),A
1332++ 8A7E FD 6E 0A LD L,(IY-100+VRS.ESldAdd)
1333++ 8A81 FD 66 0B LD H,(IY-100+VRS.ESldAdd+1)
1334++ 8A84 19 ADD HL,DE
1335++ 8A85 C3 F4 84 JP SETESLD
1336++ 8A88
1337++ 8A88 FD 21 D1 8B PLAY LD IY,VARS1+100
1338++ 8A8C CD 51 89 CALL PLAY_
1339++ 8A8F 3A 6C 8B LD A,(is_ts)
1340++ 8A92 A7 AND A
1341++ 8A93 28 07 JR Z,PL_nts
1342++ 8A95 FD 21 58 8C LD IY,VARS2+100
1343++ 8A99 CD 51 89 CALL PLAY_
1344++ 8A9C PL_nts
1345++ 8A9C IF Basic
1346++ 8A9C~ LD IY,#5C3A
1347++ 8A9C ENDIF
1348++ 8A9C
1349++ 8A9C 01 FD FF ROUT LD BC,#FFFD
1350++ 8A9F 3A 6C 8B LD A,(is_ts)
1351++ 8AA2 A7 AND A
1352++ 8AA3 IFDEF ONtfm
1353++ 8AA3 2E F9 LD L,#F9
1354++ 8AA5 ED 69 OUT (C),L
1355++ 8AA7 ELSE
1356++ 8AA7~ JR Z,r_nts ;keep old standard
1357++ 8AA7~ OUT (C),B
1358++ 8AA7 ENDIF
1359++ 8AA7 08 r_nts EX AF,AF'
1360++ 8AA8
1361++ 8AA8 IF ACBBAC
1362++ 8AA8~ LD IX,VARS1+VRS.AYREGS
1363++ 8AA8 ELSE
1364++ 8AA8 21 E6 8B LD HL,VARS1+VRS.AYREGS
1365++ 8AAB ENDIF
1366++ 8AAB
1367++ 8AAB CD B8 8A CALL ROUT_
1368++ 8AAE 08 EX AF,AF'
1369++ 8AAF C8 RET Z
1370++ 8AB0 42 LD B,D
1371++ 8AB1
1372++ 8AB1 IFDEF ONtfm
1373++ 8AB1 3E F8 LD A,#F8
1374++ 8AB3 ELSE
1375++ 8AB3~ CPL
1376++ 8AB3 ENDIF
1377++ 8AB3 ED 79 OUT (C),A
1378++ 8AB5
1379++ 8AB5 IF ACBBAC
1380++ 8AB5~ LD IX,VARS2+VRS.AYREGS
1381++ 8AB5 ELSE
1382++ 8AB5 21 6D 8C LD HL,VARS2+VRS.AYREGS
1383++ 8AB8 ENDIF
1384++ 8AB8
1385++ 8AB8 ROUT_
1386++ 8AB8 IF ACBBAC
1387++ 8AB8~ LD A,(SETUP)
1388++ 8AB8~ AND 12
1389++ 8AB8~ JR Z,ABC
1390++ 8AB8~ ADD A,CHTABLE
1391++ 8AB8~ LD E,A
1392++ 8AB8~ ADC A,CHTABLE/256
1393++ 8AB8~ SUB E
1394++ 8AB8~ LD D,A
1395++ 8AB8~ LD B,0
1396++ 8AB8~ PUSH IX
1397++ 8AB8~ POP HL
1398++ 8AB8~ LD A,(DE)
1399++ 8AB8~ INC DE
1400++ 8AB8~ LD C,A
1401++ 8AB8~ ADD HL,BC
1402++ 8AB8~ LD A,(IX+TonB)
1403++ 8AB8~ LD C,(HL)
1404++ 8AB8~ LD (IX+TonB),C
1405++ 8AB8~ LD (HL),A
1406++ 8AB8~ INC HL
1407++ 8AB8~ LD A,(IX+TonB+1)
1408++ 8AB8~ LD C,(HL)
1409++ 8AB8~ LD (IX+TonB+1),C
1410++ 8AB8~ LD (HL),A
1411++ 8AB8~ LD A,(DE)
1412++ 8AB8~ INC DE
1413++ 8AB8~ LD C,A
1414++ 8AB8~ ADD HL,BC
1415++ 8AB8~ LD A,(IX+AmplB)
1416++ 8AB8~ LD C,(HL)
1417++ 8AB8~ LD (IX+AmplB),C
1418++ 8AB8~ LD (HL),A
1419++ 8AB8~ LD A,(DE)
1420++ 8AB8~ INC DE
1421++ 8AB8~ LD (RxCA1),A
1422++ 8AB8~ XOR 8
1423++ 8AB8~ LD (RxCA2),A
1424++ 8AB8~ LD A,(DE)
1425++ 8AB8~ AND (IX+Mixer)
1426++ 8AB8~ LD E,A
1427++ 8AB8~ LD A,(IX+Mixer)
1428++ 8AB8~ RxCA1 DB #E6
1429++ 8AB8~ AND %010010
1430++ 8AB8~ OR E
1431++ 8AB8~ LD E,A
1432++ 8AB8~ LD A,(IX+Mixer)
1433++ 8AB8~ AND %010010
1434++ 8AB8~ RxCA2 OR E
1435++ 8AB8~ OR E
1436++ 8AB8~ LD (IX+Mixer),A
1437++ 8AB8~ ABC
1438++ 8AB8 ENDIF
1439++ 8AB8
1440++ 8AB8 AF XOR A
1441++ 8AB9 11 BF FF LD DE,#FFBF
1442++ 8ABC
1443++ 8ABC IF ACBBAC
1444++ 8ABC~ LD BC,#FFFD
1445++ 8ABC~ PUSH IX
1446++ 8ABC~ POP HL
1447++ 8ABC ENDIF
1448++ 8ABC
1449++ 8ABC LOUT
1450++ 8ABC IFDEF ONtfm
1451++ 8ABC ED 70 INF
1452++ 8ABE FA BC 8A JP M,$-2
1453++ 8AC1 ENDIF
1454++ 8AC1 ED 79 OUT (C),A
1455++ 8AC3 IFDEF ONtfm
1456++ 8AC3 ED 70 INF
1457++ 8AC5 FA C3 8A JP M,$-2
1458++ 8AC8 ENDIF
1459++ 8AC8 43 LD B,E
1460++ 8AC9 ED A3 OUTI
1461++ 8ACB 42 LD B,D
1462++ 8ACC 3C INC A
1463++ 8ACD FE 0D CP 13
1464++ 8ACF 20 EB JR NZ,LOUT
1465++ 8AD1 IFDEF ONtfm
1466++ 8AD1 ED 70 INF
1467++ 8AD3 FA D1 8A JP M,$-2
1468++ 8AD6 ENDIF
1469++ 8AD6 ED 79 OUT (C),A
1470++ 8AD8 7E LD A,(HL)
1471++ 8AD9 A7 AND A
1472++ 8ADA F8 RET M
1473++ 8ADB IFDEF ONtfm
1474++ 8ADB ED 70 INF
1475++ 8ADD FA DB 8A JP M,$-2
1476++ 8AE0 ENDIF
1477++ 8AE0 43 LD B,E
1478++ 8AE1 ED 79 OUT (C),A
1479++ 8AE3 C9 RET
1480++ 8AE4
1481++ 8AE4 IF ACBBAC
1482++ 8AE4~ CHTABLE EQU $-4
1483++ 8AE4~ DB 4,5,15,%001001,0,7,7,%100100
1484++ 8AE4 ENDIF
1485++ 8AE4
1486++ 8AE4 64 NT_DATA DB (T_NEW_0-T1_)*2
1487++ 8AE5 2A DB TCNEW_0-T_
1488++ 8AE6 65 DB (T_OLD_0-T1_)*2+1
1489++ 8AE7 00 DB TCOLD_0-T_
1490++ 8AE8 01 DB (T_NEW_1-T1_)*2+1
1491++ 8AE9 0C DB TCNEW_1-T_
1492++ 8AEA 01 DB (T_OLD_1-T1_)*2+1
1493++ 8AEB 0C DB TCOLD_1-T_
1494++ 8AEC 94 DB (T_NEW_2-T1_)*2
1495++ 8AED 35 DB TCNEW_2-T_
1496++ 8AEE 30 DB (T_OLD_2-T1_)*2
1497++ 8AEF 0E DB TCOLD_2-T_
1498++ 8AF0 60 DB (T_NEW_3-T1_)*2
1499++ 8AF1 20 DB TCNEW_3-T_
1500++ 8AF2 60 DB (T_OLD_3-T1_)*2
1501++ 8AF3 21 DB TCOLD_3-T_
1502++ 8AF4
1503++ 8AF4 T_
1504++ 8AF4
1505++ 8AF4 TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
1505++ 8AF4 0105090B0D0F1315
1506++ 8AFC 19 25 3D 00 DB #18+1,#24+1,#3C+1,0
1507++ 8B00 5D 00 TCOLD_1 DB #5C+1,0
1508++ 8B02 TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
1508++ 8B02 31374D535F71828C9C
1509++ 8B0B DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
1509++ 8B0B 9EA0A6A8AAACAEAE00
1510++ 8B14 57 TCNEW_3 DB #56+1
1511++ 8B15 TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
1511++ 8B15 1F2325292D2F33BF00
1512++ 8B1E TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
1512++ 8B1E 1D2123272B2D3155
1513++ 8B26 BD BF 00 DB #BC+1,#BE+1,0
1514++ 8B29 TCNEW_1 EQU TCOLD_1
1515++ 8B29 TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
1515++ 8B29 1B2125292B3B4D5F
1516++ 8B31 BB BD BF 00 DB #BA+1,#BC+1,#BE+1,0
1517++ 8B35
1518++ 8B35 PT3EMPTYORN EQU $-1
1519++ 8B35 01 00 DB 1,0
1520++ 8B37
1521++ 8B37 ;first 12 values of tone tables (packed)
1522++ 8B37
1523++ 8B37 0D D8 T_PACK DB #06EC*2/256,#06EC*2&255
1524++ 8B39 69 DB #0755-#06EC
1525++ 8B3A 70 DB #07C5-#0755
1526++ 8B3B 76 DB #083B-#07C5
1527++ 8B3C 7D DB #08B8-#083B
1528++ 8B3D 85 DB #093D-#08B8
1529++ 8B3E 8D DB #09CA-#093D
1530++ 8B3F 95 DB #0A5F-#09CA
1531++ 8B40 9D DB #0AFC-#0A5F
1532++ 8B41 A8 DB #0BA4-#0AFC
1533++ 8B42 B1 DB #0C55-#0BA4
1534++ 8B43 BB DB #0D10-#0C55
1535++ 8B44 0C DA DB #066D*2/256,#066D*2&255
1536++ 8B46 62 DB #06CF-#066D
1537++ 8B47 68 DB #0737-#06CF
1538++ 8B48 6D DB #07A4-#0737
1539++ 8B49 75 DB #0819-#07A4
1540++ 8B4A 7B DB #0894-#0819
1541++ 8B4B 83 DB #0917-#0894
1542++ 8B4C 8A DB #09A1-#0917
1543++ 8B4D 92 DB #0A33-#09A1
1544++ 8B4E 9C DB #0ACF-#0A33
1545++ 8B4F A4 DB #0B73-#0ACF
1546++ 8B50 AF DB #0C22-#0B73
1547++ 8B51 B8 DB #0CDA-#0C22
1548++ 8B52 0E 08 DB #0704*2/256,#0704*2&255
1549++ 8B54 6A DB #076E-#0704
1550++ 8B55 72 DB #07E0-#076E
1551++ 8B56 78 DB #0858-#07E0
1552++ 8B57 7E DB #08D6-#0858
1553++ 8B58 86 DB #095C-#08D6
1554++ 8B59 90 DB #09EC-#095C
1555++ 8B5A 96 DB #0A82-#09EC
1556++ 8B5B A0 DB #0B22-#0A82
1557++ 8B5C AA DB #0BCC-#0B22
1558++ 8B5D B4 DB #0C80-#0BCC
1559++ 8B5E BE DB #0D3E-#0C80
1560++ 8B5F 0F C0 DB #07E0*2/256,#07E0*2&255
1561++ 8B61 78 DB #0858-#07E0
1562++ 8B62 88 DB #08E0-#0858
1563++ 8B63 80 DB #0960-#08E0
1564++ 8B64 90 DB #09F0-#0960
1565++ 8B65 98 DB #0A88-#09F0
1566++ 8B66 A0 DB #0B28-#0A88
1567++ 8B67 B0 DB #0BD8-#0B28
1568++ 8B68 A8 DB #0C80-#0BD8
1569++ 8B69 E0 DB #0D60-#0C80
1570++ 8B6A B0 DB #0E10-#0D60
1571++ 8B6B E8 DB #0EF8-#0E10
1572++ 8B6C
1573++ 8B6C ;vars from here can be stripped
1574++ 8B6C ;you can move VARS to any other address
1575++ 8B6C
1576++ 8B6C VARS
1577++ 8B6C
1578++ 8B6C 00 is_ts DB 0
1579++ 8B6D
1580++ 8B6D ;ChannelsVars
1581++ 8B6D STRUCT CHP
1582++ 8B6D~ ;reset group
1583++ 8B6D~ PsInOr DB 0
1584++ 8B6D~ PsInSm DB 0
1585++ 8B6D~ CrAmSl DB 0
1586++ 8B6D~ CrNsSl DB 0
1587++ 8B6D~ CrEnSl DB 0
1588++ 8B6D~ TSlCnt DB 0
1589++ 8B6D~ CrTnSl DW 0
1590++ 8B6D~ TnAcc DW 0
1591++ 8B6D~ COnOff DB 0
1592++ 8B6D~ ;reset group
1593++ 8B6D~ 1594++ 8B6D~ OnOffD DB 0
1595++ 8B6D~ 1596++ 8B6D~ ;IX for PTDECOD here (+12)
1597++ 8B6D~ OffOnD DB 0
1598++ 8B6D~ OrnPtr DW 0
1599++ 8B6D~ SamPtr DW 0
1600++ 8B6D~ NNtSkp DB 0
1601++ 8B6D~ Note DB 0
1602++ 8B6D~ SlToNt DB 0
1603++ 8B6D~ Env_En DB 0
1604++ 8B6D~ Flags DB 0
1605++ 8B6D~ ;Enabled - 0, SimpleGliss - 2
1606++ 8B6D~ TnSlDl DB 0
1607++ 8B6D~ TSlStp DW 0
1608++ 8B6D~ TnDelt DW 0
1609++ 8B6D~ NtSkCn DB 0
1610++ 8B6D~ Volume DB 0
1611++ 8B6D ENDS
1612++ 8B6D
1613++ 8B6D STRUCT VRS
1614++ 8B6D~ 1615++ 8B6D~ ;IF not works in STRUCT in SjASM :(
1616++ 8B6D~ ; IF CurPosCounter
1617++ 8B6D~ CurPos DB 0
1618++ 8B6D~ PosSub DB 0
1619++ 8B6D~ ; ENDIF
1620++ 8B6D~ 1621++ 8B6D~ ModNum DB 0 ;bit0: ChipNum
1622++ 8B6D~ ;bit1: 1-reversed patterns order (AlCo TS)
1623++ 8B6D~ 1624++ 8B6D~ ChanA DS CHP
1625++ 8B6D~ ChanB DS CHP
1626++ 8B6D~ ChanC DS CHP
1627++ 8B6D~ 1628++ 8B6D~ ;GlobalVars
1629++ 8B6D~ MODADDR DW 0
1630++ 8B6D~ OrnPtrs DW 0
1631++ 8B6D~ SamPtrs DW 0
1632++ 8B6D~ PatsPtr DW 0
1633++ 8B6D~ AdInPtA DW 0
1634++ 8B6D~ AdInPtB DW 0
1635++ 8B6D~ AdInPtC DW 0
1636++ 8B6D~ CrPsPtr DW 0
1637++ 8B6D~ LPosPtr DW 0
1638++ 8B6D~ Delay DB 0
1639++ 8B6D~ DelyCnt DB 0
1640++ 8B6D~ ESldAdd DW 0
1641++ 8B6D~ CurESld DW 0
1642++ 8B6D~ Env_Del DB 0
1643++ 8B6D~ CurEDel DB 0
1644++ 8B6D~ Ns_Base DB 0
1645++ 8B6D~ AddToNs DB 0
1646++ 8B6D~ AddToEn DB 0
1647++ 8B6D~ EnvBase DW 0
1648++ 8B6D~ AYREGS DS 14
1649++ 8B6D ENDS
1650++ 8B6D
1651++ 8B6D 00 VARS1 DS VRS
1652++ 8BF4 00 VARS2 DS VRS
1653++ 8C7B
1654++ 8C7B VT_ EQU $-16
1655++ 8C7B 00 DS 256-16 ;CreatedVolumeTableAddress
1656++ 8D6B
1657++ 8D6B T1_ EQU VT_+16 ;Tone tables data depacked here
1658++ 8D6B
1659++ 8D6B T_OLD_1 EQU T1_
1660++ 8D6B T_OLD_2 EQU T_OLD_1+24
1661++ 8D6B T_OLD_3 EQU T_OLD_2+24
1662++ 8D6B T_OLD_0 EQU T_OLD_3+2
1663++ 8D6B T_NEW_0 EQU T_OLD_0
1664++ 8D6B T_NEW_1 EQU T_OLD_1
1665++ 8D6B T_NEW_2 EQU T_NEW_0+24
1666++ 8D6B T_NEW_3 EQU T_OLD_3
1667++ 8D6B
1668++ 8D6B PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
1669++ 8D6B
1670++ 8D6B 00 NT_ DS 192 ;CreatedNoteTableAddress
1671++ 8E2B
1672++ 8E2B VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
1673++ 8E2B
1674++ 8E2B VARSEND EQU $
1675++ 8E2B MDLADDR EQU $
1676++ 8E2B
1677++ 8E2B DISPLAY "PTS player size=",$-START
1678++ 8E2B
1679++ 8E2B ;Release 0 steps:
1680++ 8E2B ;04/21/2007
1681++ 8E2B ;Works start (PTxPlay adaptation); first beta.
1682++ 8E2B ;04/22/2007
1683++ 8E2B ;Job finished; beta-testing.
1684++ 8E2B ;04/23/2007
1685++ 8E2B ;PT v3.7 TS mode corrected (after AlCo remarks).
1686++ 8E2B ;04/29/2007
1687++ 8E2B ;Added 1.XX and 2.XX special commands interpretation for PT3
1688++ 8E2B ;modules of v3.7+.
1689++ 8E2B
1690++ 8E2B ;Size (minimal build for ZX Spectrum):
1691++ 8E2B ;Code block #908 bytes
1692++ 8E2B ;Variables #2BF bytes (can be stripped)
1693++ 8E2B ;Total size #908+#2BF=#BC7 (3015) bytes
1694++ 8E2B
1695++ 8E2B ENDMOD
1696++ 8E2B
1697++ 8E2B endif
1698++ 8E2B
0418+ 8E2B include "pt3.asm"
0001++ 8E2B ifndef _pt3_asm_defined
0002++ 8E2B define _pt3_asm_defined
0003++ 8E2B
0004++ 8E2B module PT3
0005++ 8E2B
0006++ 8E2B struct Header
0007++ 8E2B~ Id ds 13 ; usually 'Protracker 3.'
0008++ 8E2B~ Subversion
0009++ 8E2B~ db 0
0010++ 8E2B~ Description
0011++ 8E2B~ ds 84 ; usually ' compilation of ' + Name[32] + ' by ' + Author[32]
0012++ 8E2B~ Mode db 0
0013++ 8E2B~ FreqTable
0014++ 8E2B~ db 0 ;assume 0..04
0015++ 8E2B~ Tempo db 0 ;01-ff
0016++ 8E2B~ Length db 0
0017++ 8E2B~ Loop db 0
0018++ 8E2B~ Patterns
0019++ 8E2B~ dw 0 ;? 00-01
0020++ 8E2B~ Samples
0021++ 8E2B~ ds 64 ;(? 00-bf}{32}
0022++ 8E2B~ Ornaments
0023++ 8E2B~ ds 32 ;(? 00-d9){16}
0024++ 8E2B~ Positions
0025++ 8E2B~ db 0 ;*3&00-fe
0026++ 8E2B~ db 0 ;*3|ff
0027++ 8E2B ends
0028++ 8E2B
0029++ 8E2B Start
0030++ 8E2B ifndef NoPrologue
0031++ 8E2B~ ld hl,End
0032++ 8E2B~ jr Init
0033++ 8E2B~ jp PTS.PLAY
0034++ 8E2B~ jp PTS.MUTE
0035++ 8E2B endif
0036++ 8E2B
0037++ 8E2B 3E 20 Init ld a,PTS.SETUP.TSPT3
0038++ 8E2D C3 6C 82 jp PTS.INIT
0039++ 8E30
0040++ 8E30 ifdef HaveFormatCheck
0041++ 8E30 include "format.asm"
0001+++8E30 ;some format checking macros
0002+++8E30 ifndef _format_asm_defined
0003+++8E30 define _format_asm_defined
0004+++8E30
0005+++8E30 macro LessOrEqual number
0006+++8E30~ ld a,number
0007+++8E30~ cp (hl)
0008+++8E30~ inc hl
0009+++8E30~ ret c
0010+++8E30 endm
0011+++8E30
0012+++8E30 macro Greater number
0013+++8E30~ ld a,(hl)
0014+++8E30~ inc hl
0015+++8E30~ cp number
0016+++8E30~ ret c
0017+++8E30 endm
0018+++8E30
0019+++8E30 macro AnyByte
0020+++8E30~ inc hl
0021+++8E30 endm
0022+++8E30
0023+++8E30 macro AnyBytes count
0024+++8E30~ if count > 7
0025+++8E30~ ld a,l
0026+++8E30~ add a,count
0027+++8E30~ ld l,a
0028+++8E30~ adc a,h
0029+++8E30~ sub l
0030+++8E30~ ld h,a
0031+++8E30~ else
0032+++8E30~ dup count
0033+++8E30~ inc hl
0034+++8E30~ edup
0035+++8E30~ endif
0036+++8E30 endm
0037+++8E30
0038+++8E30 macro EqualTo number
0039+++8E30~ ld a,number
0040+++8E30~ cp (hl)
0041+++8E30~ inc hl
0042+++8E30~ ret nz
0043+++8E30 endm
0044+++8E30
0045+++8E30 endif
0046+++8E30
0042++ 8E30
0043++ 8E30 ;in HL - module addr
0044++ 8E30 ;out Z - is pt3
0045++ 8E30 CheckFormat
0046++ 8E30 ; meta
0047++ 8E30 AnyBytes Header.FreqTable
0047++ 8E30 7D > ld a,l
0047++ 8E31 C6 63 > add a,count
0047++ 8E33 6F > ld l,a
0047++ 8E34 8C > adc a,h
0047++ 8E35 95 > sub l
0047++ 8E36 67 > ld h,a
0048++ 8E37 ;FreqTable
0049++ 8E37 LessOrEqual 4
0049++ 8E37 3E 04 > ld a,number
0049++ 8E39 BE > cp (hl)
0049++ 8E3A 23 > inc hl
0049++ 8E3B D8 > ret c
0050++ 8E3C ;Tempo
0051++ 8E3C Greater 1
0051++ 8E3C 7E > ld a,(hl)
0051++ 8E3D 23 > inc hl
0051++ 8E3E FE 01 > cp number
0051++ 8E40 D8 > ret c
0052++ 8E41 ;Length
0053++ 8E41 AnyByte
0053++ 8E41 23 > inc hl
0054++ 8E42 ;Loop
0055++ 8E42 AnyByte
0055++ 8E42 23 > inc hl
0056++ 8E43 ;Patterns
0057++ 8E43 AnyByte
0057++ 8E43 23 > inc hl
0058++ 8E44 LessOrEqual 1
0058++ 8E44 3E 01 > ld a,number
0058++ 8E46 BE > cp (hl)
0058++ 8E47 23 > inc hl
0058++ 8E48 D8 > ret c
0059++ 8E49 ;Samples
0060++ 8E49 06 20 ld b,(Header.Ornaments-Header.Samples)/2
0061++ 8E4B .samples
0062++ 8E4B AnyByte
0062++ 8E4B 23 > inc hl
0063++ 8E4C LessOrEqual #bf
0063++ 8E4C 3E BF > ld a,number
0063++ 8E4E BE > cp (hl)
0063++ 8E4F 23 > inc hl
0063++ 8E50 D8 > ret c
0064++ 8E51 10 F8 djnz .samples
0065++ 8E53 ;Ornaments
0066++ 8E53 06 10 ld b,(Header.Positions-Header.Ornaments)/2
0067++ 8E55 .ornaments
0068++ 8E55 AnyByte
0068++ 8E55 23 > inc hl
0069++ 8E56 LessOrEqual #d9
0069++ 8E56 3E D9 > ld a,number
0069++ 8E58 BE > cp (hl)
0069++ 8E59 23 > inc hl
0069++ 8E5A D8 > ret c
0070++ 8E5B 10 F8 djnz .ornaments
0071++ 8E5D ;Positions
0072++ 8E5D ;255 at first position is denied
0073++ 8E5D LessOrEqual 254
0073++ 8E5D 3E FE > ld a,number
0073++ 8E5F BE > cp (hl)
0073++ 8E60 23 > inc hl
0073++ 8E61 D8 > ret c
0074++ 8E62 06 00 ld b,0
0075++ 8E64 2B dec hl
0076++ 8E65 .positions
0077++ 8E65 7E ld a,(hl)
0078++ 8E66 23 inc hl
0079++ 8E67 FE FF cp 255
0080++ 8E69 C8 ret z ;finish
0081++ 8E6A ;check is multiple of 3
0082++ 8E6A A7 .div3 and a
0083++ 8E6B 28 05 jr z,.posok
0084++ 8E6D D6 03 sub 3
0085++ 8E6F D8 ret c
0086++ 8E70 20 F8 jr nz,.div3
0087++ 8E72 10 F1 .posok djnz .positions
0088++ 8E74 ;fall through
0089++ 8E74 7C .fail ld a,h
0090++ 8E75 A7 and a ;reset Z
0091++ 8E76 C9 ret
0092++ 8E77
0093++ 8E77 display "PT3 checker size: ",$-CheckFormat
0094++ 8E77 endif
0095++ 8E77
0096++ 8E77 endmod
0097++ 8E77
0098++ 8E77 include "PTSPlay.asm"
0001+++8E77 ifndef _pts_asm_defined
0002+++8E77~ define _pts_asm_defined
0003+++8E77~ 0004+++8E77~ MODULE PTS
0005+++8E77~
0006+++8E77~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum
0007+++8E77~ ;(c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>
0008+++8E77~ ;Specially for AlCo
0009+++8E77~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/)
0010+++8E77~ 0011+++8E77~ ;Release number
0012+++8E77~ Release EQU "0"
0013+++8E77~ 0014+++8E77~ ;Conditional assembly
0015+++8E77~ ;1) Current position counters at (Vars1+0) and (Vars2+0)
0016+++8E77~ CurPosCounter=0
0017+++8E77~ ;2) Allow channels allocation bits at (SETUP)
0018+++8E77~ ACBBAC=0
0019+++8E77~ ;3) Allow loop checking and disabling
0020+++8E77~ LoopChecker=0
0021+++8E77~ ;4) Insert official identificator
0022+++8E77~ Id=0
0023+++8E77~ ;5) Set IY for correct return to ZX Basic
0024+++8E77~ Basic=0
0025+++8E77~ 0026+++8E77~ ;Features
0027+++8E77~ ;--------
0028+++8E77~ ;-Can be compiled at any address (i.e. no need rounding ORG
0029+++8E77~ ; address).
0030+++8E77~ ;-Variables (VARS) can be located at any address (not only after
0031+++8E77~ ; code block).
0032+++8E77~ ;-INIT subprogram checks PT3-module version and rightly
0033+++8E77~ ; generates both note and volume tables outside of code block
0034+++8E77~ ; (in VARS).
0035+++8E77~ ;-Two portamento (spc. command 3xxx) algorithms (depending of
0036+++8E77~ ; PT3 module version).
0037+++8E77~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
0038+++8E77~ ; and higher).
0039+++8E77~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
0040+++8E77~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard.
0041+++8E77~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
0042+++8E77~ ;-See also notes at the end of this source code.
0043+++8E77~ 0044+++8E77~ ;Limitations
0045+++8E77~ ;-----------
0046+++8E77~ ;-Can run in RAM only (self-modified code is used).
0047+++8E77~ ;-PT2 position list must be end by #FF marker only.
0048+++8E77~ 0049+++8E77~ ;Warning!!! PLAY subprogram can crash if no module are loaded
0050+++8E77~ ;into RAM or INIT subprogram was not called before.
0051+++8E77~ 0052+++8E77~ ;Call MUTE or INIT one more time to mute sound after stopping
0053+++8E77~ ;playing
0054+++8E77~ 0055+++8E77~ TonA EQU 0
0056+++8E77~ TonB EQU 2
0057+++8E77~ TonC EQU 4
0058+++8E77~ Noise EQU 6
0059+++8E77~ Mixer EQU 7
0060+++8E77~ AmplA EQU 8
0061+++8E77~ AmplB EQU 9
0062+++8E77~ AmplC EQU 10
0063+++8E77~ Env EQU 11
0064+++8E77~ EnvTp EQU 13
0065+++8E77~ 0066+++8E77~ START
0067+++8E77~ 0068+++8E77~ SETUP.NOLOOP EQU 1
0069+++8E77~ SETUP.PT2 EQU 2
0070+++8E77~ SETUP.ACB EQU 4
0071+++8E77~ SETUP.BAC EQU 8
0072+++8E77~ SETUP.TS02 EQU 16
0073+++8E77~ SETUP.TSPT3 EQU 32
0074+++8E77~ 0075+++8E77~ SETUP DB 0 ;set bit0, if you want to play without looping
0076+++8E77~ ;(optional);
0077+++8E77~ ;set bit1 for PT2 and reset for PT3 before
0078+++8E77~ ;calling INIT;
0079+++8E77~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional);
0080+++8E77~ ;bits4-5: %00-no TS, %01-2 modules TS, %10-
0081+++8E77~ ;autodetect PT3 TS-format by AlCo (PT 3.7+);
0082+++8E77~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not
0083+++8E77~ ;documented and must be converted to new standard.
0084+++8E77~ ;bit6 is set each time, when loop point of 2nd TS
0085+++8E77~ ;module is passed (optional).
0086+++8E77~ ;bit7 is set each time, when loop point of 1st TS
0087+++8E77~ ;or of single module is passed (optional).
0088+++8E77~ 0089+++8E77~ ;Identifier
0090+++8E77~ IF Id
0091+++8E77~ DB "=UniPT2/PT3/TS-Player r.",Release,"="
0092+++8E77~ ENDIF
0093+++8E77~ 0094+++8E77~ IF LoopChecker
0095+++8E77~ CHECKLP LD HL,SETUP
0096+++8E77~ BIT 0,(IY-100+VRS.ModNum)
0097+++8E77~ JR Z,CHL1
0098+++8E77~ SET 6,(HL)
0099+++8E77~ JR CHL2
0100+++8E77~ CHL1 SET 7,(HL)
0101+++8E77~ CHL2 BIT 0,(HL)
0102+++8E77~ RET Z
0103+++8E77~ POP HL
0104+++8E77~ INC (IY-100+VRS.DelyCnt)
0105+++8E77~ INC (IY-100+VRS.ChanA+CHP.NtSkCn)
0106+++8E77~ XOR A
0107+++8E77~ LD (IY-100+VRS.AYREGS+AmplA),A
0108+++8E77~ LD (IY-100+VRS.AYREGS+AmplB),A
0109+++8E77~ LD (IY-100+VRS.AYREGS+AmplC),A
0110+++8E77~ RET
0111+++8E77~ ENDIF
0112+++8E77~ 0113+++8E77~ MUTE XOR A
0114+++8E77~ LD H,A
0115+++8E77~ LD L,A
0116+++8E77~ LD (VARS1+VRS.AYREGS+AmplA),A
0117+++8E77~ LD (VARS1+VRS.AYREGS+AmplB),HL
0118+++8E77~ LD (VARS2+VRS.AYREGS+AmplA),A
0119+++8E77~ LD (VARS2+VRS.AYREGS+AmplB),HL
0120+++8E77~ JP ROUT
0121+++8E77~ 0122+++8E77~ INIT
0123+++8E77~ ;HL - AddressOfModule
0124+++8E77~ ;DE - AddresOf2ndModule
0125+++8E77~ ;A - mode
0126+++8E77~ PUSH DE
0127+++8E77~ PUSH HL
0128+++8E77~ LD HL,VARS
0129+++8E77~ LD (HL),0
0130+++8E77~ LD DE,VARS+1
0131+++8E77~ LD BC,VAR0END-VARS-1
0132+++8E77~ LDIR
0133+++8E77~ INC HL
0134+++8E77~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero
0135+++8E77~ LD (VARS2+VRS.AdInPtA),HL
0136+++8E77~ 0137+++8E77~ POP HL
0138+++8E77~ LD IY,VARS1+100
0139+++8E77~ LD (SETUP),A
0140+++8E77~ AND SETUP.PT2
0141+++8E77~ JP NZ,I_PT2
0142+++8E77~ 0143+++8E77~ CALL INITPT3
0144+++8E77~ LD HL,(e_-SamCnv-2)*256+#18
0145+++8E77~ LD (SamCnv),HL
0146+++8E77~ LD A,#BA
0147+++8E77~ LD (OrnCP),A
0148+++8E77~ LD (SamCP),A
0149+++8E77~ LD A,#7B
0150+++8E77~ LD (OrnLD),A
0151+++8E77~ LD (SamLD),A
0152+++8E77~ LD A,#87
0153+++8E77~ LD (SamClc2),A
0154+++8E77~ POP HL
0155+++8E77~ ;Use version and ton table of 1st module
0156+++8E77~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
0157+++8E77~ SUB #30
0158+++8E77~ JR C,L20
0159+++8E77~ CP 10
0160+++8E77~ JR C,L21
0161+++8E77~ L20 LD A,6
0162+++8E77~ L21 LD (Version),A
0163+++8E77~ PUSH AF ;VolTable version
0164+++8E77~ CP 4
0165+++8E77~ LD A,(IX+99-100) ;TONE TABLE NUMBER
0166+++8E77~ RLA
0167+++8E77~ AND 7
0168+++8E77~ PUSH AF ;NoteTable number
0169+++8E77~ 0170+++8E77~ LD IY,VARS2+100
0171+++8E77~ LD A,(SETUP)
0172+++8E77~ AND SETUP.TS02|SETUP.TSPT3
0173+++8E77~ JR Z,NOTS
0174+++8E77~ CP SETUP.TS02
0175+++8E77~ JR Z,TwoPT3s
0176+++8E77~ LD A,(Version)
0177+++8E77~ CP 7
0178+++8E77~ JR C,NOTS
0179+++8E77~ LD A,(IX+98-100) ;ALCO TS MARKER
0180+++8E77~ CP #20
0181+++8E77~ JR Z,NOTS
0182+++8E77~ LD HL,VARS1
0183+++8E77~ LD DE,VARS2
0184+++8E77~ LD BC,VRS
0185+++8E77~ LDIR
0186+++8E77~ SET 1,(IY-100+VRS.ModNum)
0187+++8E77~ LD C,A
0188+++8E77~ ADD A,A
0189+++8E77~ ADD A,C
0190+++8E77~ SUB 2
0191+++8E77~ LD (TSSub),A
0192+++8E77~ JR AlCoTS_
0193+++8E77~ TwoPT3s CALL INITPT3
0194+++8E77~ AlCoTS_ LD A,1
0195+++8E77~ LD (is_ts),A
0196+++8E77~ SET 0,(IY-100+VRS.ModNum)
0197+++8E77~ 0198+++8E77~ NOTS LD BC,PT3PD
0199+++8E77~ LD HL,0
0200+++8E77~ LD DE,PT3EMPTYORN
0201+++8E77~ JR INITCOMMON
0202+++8E77~ 0203+++8E77~ I_PT2 CALL INITPT2
0204+++8E77~ LD HL,#51CB
0205+++8E77~ LD (SamCnv),HL
0206+++8E77~ LD A,#BB
0207+++8E77~ LD (OrnCP),A
0208+++8E77~ LD (SamCP),A
0209+++8E77~ LD A,#7A
0210+++8E77~ LD (OrnLD),A
0211+++8E77~ LD (SamLD),A
0212+++8E77~ LD A,#80
0213+++8E77~ LD (SamClc2),A
0214+++8E77~ POP HL
0215+++8E77~ LD A,5
0216+++8E77~ LD (Version),A
0217+++8E77~ PUSH AF
0218+++8E77~ LD A,2
0219+++8E77~ PUSH AF
0220+++8E77~ 0221+++8E77~ LD A,(SETUP)
0222+++8E77~ AND SETUP.TS02|SETUP.TSPT3
0223+++8E77~ JR Z,NOTS2
0224+++8E77~ 0225+++8E77~ LD IY,VARS2+100
0226+++8E77~ LD A,1
0227+++8E77~ LD (is_ts),A
0228+++8E77~ SET 0,(IY-100+VRS.ModNum)
0229+++8E77~ CALL INITPT2
0230+++8E77~ 0231+++8E77~ NOTS2 LD BC,PT2PD
0232+++8E77~ LD HL,#8687
0233+++8E77~ LD DE,PT2EMPTYORN
0234+++8E77~ 0235+++8E77~ INITCOMMON
0236+++8E77~ 0237+++8E77~ IF Basic
0238+++8E77~ LD IY,#5C3A
0239+++8E77~ ENDIF
0240+++8E77~ 0241+++8E77~ LD (PTDEC),BC
0242+++8E77~ LD (PsCalc),HL
0243+++8E77~ PUSH DE
0244+++8E77~ 0245+++8E77~ ;note table data depacker
0246+++8E77~ ;(c) Ivan Roshin
0247+++8E77~ LD DE,T_PACK
0248+++8E77~ LD BC,T1_+(2*49)-1
0249+++8E77~ TP_0 LD A,(DE)
0250+++8E77~ INC DE
0251+++8E77~ CP 15*2
0252+++8E77~ JR NC,TP_1
0253+++8E77~ LD H,A
0254+++8E77~ LD A,(DE)
0255+++8E77~ LD L,A
0256+++8E77~ INC DE
0257+++8E77~ JR TP_2
0258+++8E77~ TP_1 PUSH DE
0259+++8E77~ LD D,0
0260+++8E77~ LD E,A
0261+++8E77~ ADD HL,DE
0262+++8E77~ ADD HL,DE
0263+++8E77~ POP DE
0264+++8E77~ TP_2 LD A,H
0265+++8E77~ LD (BC),A
0266+++8E77~ DEC BC
0267+++8E77~ LD A,L
0268+++8E77~ LD (BC),A
0269+++8E77~ DEC BC
0270+++8E77~ SUB (#F8*2)&255
0271+++8E77~ JR NZ,TP_0
0272+++8E77~ 0273+++8E77~ INC A
0274+++8E77~ LD (VARS1+VRS.DelyCnt),A
0275+++8E77~ LD (VARS2+VRS.DelyCnt),A
0276+++8E77~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
0277+++8E77~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL
0278+++8E77~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL
0279+++8E77~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL
0280+++8E77~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL
0281+++8E77~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL
0282+++8E77~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL
0283+++8E77~ POP HL
0284+++8E77~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL
0285+++8E77~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL
0286+++8E77~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL
0287+++8E77~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL
0288+++8E77~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL
0289+++8E77~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL
0290+++8E77~ 0291+++8E77~ POP AF
0292+++8E77~ 0293+++8E77~ ;NoteTableCreator (c) Ivan Roshin
0294+++8E77~ ;A - NoteTableNumber*2+VersionForNoteTable
0295+++8E77~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
0296+++8E77~ 0297+++8E77~ LD HL,NT_DATA
0298+++8E77~ LD D,0
0299+++8E77~ ADD A,A
0300+++8E77~ LD E,A
0301+++8E77~ ADD HL,DE
0302+++8E77~ LD E,(HL)
0303+++8E77~ INC HL
0304+++8E77~ SRL E
0305+++8E77~ SBC A,A
0306+++8E77~ AND #A7 ;#00 (NOP) or #A7 (AND A)
0307+++8E77~ LD (L3),A
0308+++8E77~ EX DE,HL
0309+++8E77~ LD BC,T1_
0310+++8E77~ ADD HL,BC
0311+++8E77~ 0312+++8E77~ LD A,(DE)
0313+++8E77~ ADD A,T_&255
0314+++8E77~ LD C,A
0315+++8E77~ ADC A,T_/256
0316+++8E77~ SUB C
0317+++8E77~ LD B,A
0318+++8E77~ PUSH BC
0319+++8E77~ LD DE,NT_
0320+++8E77~ PUSH DE
0321+++8E77~ 0322+++8E77~ LD B,12
0323+++8E77~ L1 PUSH BC
0324+++8E77~ LD C,(HL)
0325+++8E77~ INC HL
0326+++8E77~ PUSH HL
0327+++8E77~ LD B,(HL)
0328+++8E77~ 0329+++8E77~ PUSH DE
0330+++8E77~ EX DE,HL
0331+++8E77~ LD DE,23
0332+++8E77~ LD IXH,8
0333+++8E77~ 0334+++8E77~ L2 SRL B
0335+++8E77~ RR C
0336+++8E77~ L3 DB #19 ;AND A or NOP
0337+++8E77~ LD A,C
0338+++8E77~ ADC A,D ;=ADC 0
0339+++8E77~ LD (HL),A
0340+++8E77~ INC HL
0341+++8E77~ LD A,B
0342+++8E77~ ADC A,D
0343+++8E77~ LD (HL),A
0344+++8E77~ ADD HL,DE
0345+++8E77~ DEC IXH
0346+++8E77~ JR NZ,L2
0347+++8E77~ 0348+++8E77~ POP DE
0349+++8E77~ INC DE
0350+++8E77~ INC DE
0351+++8E77~ POP HL
0352+++8E77~ INC HL
0353+++8E77~ POP BC
0354+++8E77~ DJNZ L1
0355+++8E77~ 0356+++8E77~ POP HL
0357+++8E77~ POP DE
0358+++8E77~ 0359+++8E77~ LD A,E
0360+++8E77~ CP TCOLD_1&255
0361+++8E77~ JR NZ,CORR_1
0362+++8E77~ LD A,#FD
0363+++8E77~ LD (NT_+#2E),A
0364+++8E77~ 0365+++8E77~ CORR_1 LD A,(DE)
0366+++8E77~ AND A
0367+++8E77~ JR Z,TC_EXIT
0368+++8E77~ RRA
0369+++8E77~ PUSH AF
0370+++8E77~ ADD A,A
0371+++8E77~ LD C,A
0372+++8E77~ ADD HL,BC
0373+++8E77~ POP AF
0374+++8E77~ JR NC,CORR_2
0375+++8E77~ DEC (HL)
0376+++8E77~ DEC (HL)
0377+++8E77~ CORR_2 INC (HL)
0378+++8E77~ AND A
0379+++8E77~ SBC HL,BC
0380+++8E77~ INC DE
0381+++8E77~ JR CORR_1
0382+++8E77~ 0383+++8E77~ TC_EXIT
0384+++8E77~ 0385+++8E77~ POP AF
0386+++8E77~ 0387+++8E77~ ;VolTableCreator (c) Ivan Roshin
0388+++8E77~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
0389+++8E77~ ;5.. - 2.x,3.5x..3.6x..VTII1.0)
0390+++8E77~ 0391+++8E77~ CP 5
0392+++8E77~ LD HL,#11
0393+++8E77~ LD D,H
0394+++8E77~ LD E,H
0395+++8E77~ LD A,#17
0396+++8E77~ JR NC,M1
0397+++8E77~ DEC L
0398+++8E77~ LD E,L
0399+++8E77~ XOR A
0400+++8E77~ M1 LD (M2),A
0401+++8E77~ 0402+++8E77~ LD IX,VT_+16
0403+++8E77~ 0404+++8E77~ LD C,#F
0405+++8E77~ INITV2 PUSH HL
0406+++8E77~ 0407+++8E77~ ADD HL,DE
0408+++8E77~ EX DE,HL
0409+++8E77~ SBC HL,HL
0410+++8E77~ 0411+++8E77~ LD B,#10
0412+++8E77~ INITV1 LD A,L
0413+++8E77~ M2 DB #7D
0414+++8E77~ LD A,H
0415+++8E77~ ADC A,0
0416+++8E77~ LD (IX),A
0417+++8E77~ INC IX
0418+++8E77~ ADD HL,DE
0419+++8E77~ DJNZ INITV1
0420+++8E77~ 0421+++8E77~ POP HL
0422+++8E77~ LD A,E
0423+++8E77~ CP #77
0424+++8E77~ JR NZ,M3
0425+++8E77~ INC E
0426+++8E77~ M3 DEC C
0427+++8E77~ JR NZ,INITV2
0428+++8E77~ 0429+++8E77~ JP ROUT
0430+++8E77~ 0431+++8E77~ INITPT3 CALL SETMDAD
0432+++8E77~ PUSH HL
0433+++8E77~ LD DE,100
0434+++8E77~ ADD HL,DE
0435+++8E77~ LD A,(HL)
0436+++8E77~ LD (IY-100+VRS.Delay),A
0437+++8E77~ PUSH HL
0438+++8E77~ POP IX
0439+++8E77~ ADD HL,DE
0440+++8E77~ CALL SETCPPT
0441+++8E77~ LD E,(IX+102-100)
0442+++8E77~ INC HL
0443+++8E77~ 0444+++8E77~ IF CurPosCounter
0445+++8E77~ LD (IY-100+VRS.PosSub),L
0446+++8E77~ ENDIF
0447+++8E77~ 0448+++8E77~ ADD HL,DE
0449+++8E77~ CALL SETLPPT
0450+++8E77~ POP DE
0451+++8E77~ LD L,(IX+103-100)
0452+++8E77~ LD H,(IX+104-100)
0453+++8E77~ ADD HL,DE
0454+++8E77~ CALL SETPTPT
0455+++8E77~ LD HL,169
0456+++8E77~ ADD HL,DE
0457+++8E77~ CALL SETORPT
0458+++8E77~ LD HL,105
0459+++8E77~ ADD HL,DE
0460+++8E77~ 0461+++8E77~ SETSMPT LD (IY-100+VRS.SamPtrs),L
0462+++8E77~ LD (IY-100+VRS.SamPtrs+1),H
0463+++8E77~ RET
0464+++8E77~ 0465+++8E77~ INITPT2 LD A,(HL)
0466+++8E77~ LD (IY-100+VRS.Delay),A
0467+++8E77~ PUSH HL
0468+++8E77~ PUSH HL
0469+++8E77~ PUSH HL
0470+++8E77~ INC HL
0471+++8E77~ INC HL
0472+++8E77~ LD A,(HL)
0473+++8E77~ INC HL
0474+++8E77~ CALL SETSMPT
0475+++8E77~ LD E,(HL)
0476+++8E77~ INC HL
0477+++8E77~ LD D,(HL)
0478+++8E77~ POP HL
0479+++8E77~ AND A
0480+++8E77~ SBC HL,DE
0481+++8E77~ CALL SETMDAD
0482+++8E77~ POP HL
0483+++8E77~ LD DE,67
0484+++8E77~ ADD HL,DE
0485+++8E77~ CALL SETORPT
0486+++8E77~ LD E,32
0487+++8E77~ ADD HL,DE
0488+++8E77~ LD C,(HL)
0489+++8E77~ INC HL
0490+++8E77~ LD B,(HL)
0491+++8E77~ LD E,30
0492+++8E77~ ADD HL,DE
0493+++8E77~ CALL SETCPPT
0494+++8E77~ LD E,A
0495+++8E77~ INC HL
0496+++8E77~ 0497+++8E77~ IF CurPosCounter
0498+++8E77~ LD (IY-100+VRS.PosSub),L
0499+++8E77~ ENDIF
0500+++8E77~ 0501+++8E77~ ADD HL,DE
0502+++8E77~ CALL SETLPPT
0503+++8E77~ POP HL
0504+++8E77~ ADD HL,BC
0505+++8E77~ 0506+++8E77~ SETPTPT LD (IY-100+VRS.PatsPtr),L
0507+++8E77~ LD (IY-100+VRS.PatsPtr+1),H
0508+++8E77~ RET
0509+++8E77~ 0510+++8E77~ SETMDAD LD (IY-100+VRS.MODADDR),L
0511+++8E77~ LD (IY-100+VRS.MODADDR+1),H
0512+++8E77~ RET
0513+++8E77~ 0514+++8E77~ SETORPT LD (IY-100+VRS.OrnPtrs),L
0515+++8E77~ LD (IY-100+VRS.OrnPtrs+1),H
0516+++8E77~ RET
0517+++8E77~ 0518+++8E77~ SETCPPT LD (IY-100+VRS.CrPsPtr),L
0519+++8E77~ LD (IY-100+VRS.CrPsPtr+1),H
0520+++8E77~ RET
0521+++8E77~ 0522+++8E77~ SETLPPT LD (IY-100+VRS.LPosPtr),L
0523+++8E77~ LD (IY-100+VRS.LPosPtr+1),H
0524+++8E77~ RET
0525+++8E77~ 0526+++8E77~ SETENBS LD (IY-100+VRS.EnvBase),L
0527+++8E77~ LD (IY-100+VRS.EnvBase+1),H
0528+++8E77~ RET
0529+++8E77~ 0530+++8E77~ SETESLD LD (IY-100+VRS.CurESld),L
0531+++8E77~ LD (IY-100+VRS.CurESld+1),H
0532+++8E77~ RET
0533+++8E77~ 0534+++8E77~ GETIX PUSH IY
0535+++8E77~ POP IX
0536+++8E77~ ADD IX,DE
0537+++8E77~ RET
0538+++8E77~ 0539+++8E77~ PTDECOD CALL GETIX
0540+++8E77~ PTDEC EQU $+1
0541+++8E77~ JP #C3C3
0542+++8E77~ 0543+++8E77~ ;PT2 pattern decoder
0544+++8E77~ PD2_SAM CALL SETSAM
0545+++8E77~ JR PD2_LOOP
0546+++8E77~ 0547+++8E77~ PD2_EOff LD (IX-12+CHP.Env_En),A
0548+++8E77~ JR PD2_LOOP
0549+++8E77~ 0550+++8E77~ PD2_ENV LD (IX-12+CHP.Env_En),16
0551+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A
0552+++8E77~ LD A,(BC)
0553+++8E77~ INC BC
0554+++8E77~ LD L,A
0555+++8E77~ LD A,(BC)
0556+++8E77~ INC BC
0557+++8E77~ LD H,A
0558+++8E77~ CALL SETENBS
0559+++8E77~ JR PD2_LOOP
0560+++8E77~ 0561+++8E77~ PD2_ORN CALL SETORN
0562+++8E77~ JR PD2_LOOP
0563+++8E77~ 0564+++8E77~ PD2_SKIP INC A
0565+++8E77~ LD (IX-12+CHP.NNtSkp),A
0566+++8E77~ JR PD2_LOOP
0567+++8E77~ 0568+++8E77~ PD2_VOL RRCA
0569+++8E77~ RRCA
0570+++8E77~ RRCA
0571+++8E77~ RRCA
0572+++8E77~ LD (IX-12+CHP.Volume),A
0573+++8E77~ JR PD2_LOOP
0574+++8E77~ 0575+++8E77~ PD2_DEL CALL C_DELAY
0576+++8E77~ JR PD2_LOOP
0577+++8E77~ 0578+++8E77~ PD2_GLIS SET 2,(IX-12+CHP.Flags)
0579+++8E77~ INC A
0580+++8E77~ LD (IX-12+CHP.TnSlDl),A
0581+++8E77~ LD (IX-12+CHP.TSlCnt),A
0582+++8E77~ LD A,(BC)
0583+++8E77~ INC BC
0584+++8E77~ LD (IX-12+CHP.TSlStp),A
0585+++8E77~ ADD A,A
0586+++8E77~ SBC A,A
0587+++8E77~ LD (IX-12+CHP.TSlStp+1),A
0588+++8E77~ SCF
0589+++8E77~ JR PD2_LP2
0590+++8E77~ 0591+++8E77~ PT2PD AND A
0592+++8E77~ 0593+++8E77~ PD2_LP2 EX AF,AF'
0594+++8E77~ 0595+++8E77~ PD2_LOOP LD A,(BC)
0596+++8E77~ INC BC
0597+++8E77~ ADD A,#20
0598+++8E77~ JR Z,PD2_REL
0599+++8E77~ JR C,PD2_SAM
0600+++8E77~ ADD A,96
0601+++8E77~ JR C,PD2_NOTE
0602+++8E77~ INC A
0603+++8E77~ JR Z,PD2_EOff
0604+++8E77~ ADD A,15
0605+++8E77~ JP Z,PD_FIN
0606+++8E77~ JR C,PD2_ENV
0607+++8E77~ ADD A,#10
0608+++8E77~ JR C,PD2_ORN
0609+++8E77~ ADD A,#40
0610+++8E77~ JR C,PD2_SKIP
0611+++8E77~ ADD A,#10
0612+++8E77~ JR C,PD2_VOL
0613+++8E77~ INC A
0614+++8E77~ JR Z,PD2_DEL
0615+++8E77~ INC A
0616+++8E77~ JR Z,PD2_GLIS
0617+++8E77~ INC A
0618+++8E77~ JR Z,PD2_PORT
0619+++8E77~ INC A
0620+++8E77~ JR Z,PD2_STOP
0621+++8E77~ LD A,(BC)
0622+++8E77~ INC BC
0623+++8E77~ LD (IX-12+CHP.CrNsSl),A
0624+++8E77~ JR PD2_LOOP
0625+++8E77~ 0626+++8E77~ PD2_PORT RES 2,(IX-12+CHP.Flags)
0627+++8E77~ LD A,(BC)
0628+++8E77~ INC BC
0629+++8E77~ INC BC ;ignoring precalc delta to right sound
0630+++8E77~ INC BC
0631+++8E77~ SCF
0632+++8E77~ JR PD2_LP2
0633+++8E77~ 0634+++8E77~ PD2_STOP LD (IX-12+CHP.TSlCnt),A
0635+++8E77~ JR PD2_LOOP
0636+++8E77~ 0637+++8E77~ PD2_REL LD (IX-12+CHP.Flags),A
0638+++8E77~ JR PD2_EXIT
0639+++8E77~ 0640+++8E77~ PD2_NOTE LD L,A
0641+++8E77~ LD A,(IX-12+CHP.Note)
0642+++8E77~ LD (PrNote+1),A
0643+++8E77~ LD (IX-12+CHP.Note),L
0644+++8E77~ XOR A
0645+++8E77~ LD (IX-12+CHP.TSlCnt),A
0646+++8E77~ SET 0,(IX-12+CHP.Flags)
0647+++8E77~ EX AF,AF'
0648+++8E77~ JR NC,NOGLIS2
0649+++8E77~ BIT 2,(IX-12+CHP.Flags)
0650+++8E77~ JR NZ,NOPORT2
0651+++8E77~ LD (LoStep),A
0652+++8E77~ ADD A,A
0653+++8E77~ SBC A,A
0654+++8E77~ EX AF,AF'
0655+++8E77~ LD H,A
0656+++8E77~ LD L,A
0657+++8E77~ INC A
0658+++8E77~ CALL SETPORT
0659+++8E77~ NOPORT2 LD (IX-12+CHP.TSlCnt),1
0660+++8E77~ NOGLIS2 XOR A
0661+++8E77~ 0662+++8E77~ 0663+++8E77~ PD2_EXIT LD (IX-12+CHP.PsInSm),A
0664+++8E77~ LD (IX-12+CHP.PsInOr),A
0665+++8E77~ LD (IX-12+CHP.CrTnSl),A
0666+++8E77~ LD (IX-12+CHP.CrTnSl+1),A
0667+++8E77~ JP PD_FIN
0668+++8E77~ 0669+++8E77~ ;PT3 pattern decoder
0670+++8E77~ PD_OrSm LD (IX-12+CHP.Env_En),0
0671+++8E77~ CALL SETORN
0672+++8E77~ PD_SAM_ LD A,(BC)
0673+++8E77~ INC BC
0674+++8E77~ RRCA
0675+++8E77~ 0676+++8E77~ PD_SAM CALL SETSAM
0677+++8E77~ JR PD_LOOP
0678+++8E77~ 0679+++8E77~ PD_VOL RRCA
0680+++8E77~ RRCA
0681+++8E77~ RRCA
0682+++8E77~ RRCA
0683+++8E77~ LD (IX-12+CHP.Volume),A
0684+++8E77~ JR PD_LP2
0685+++8E77~
0686+++8E77~ PD_EOff LD (IX-12+CHP.Env_En),A
0687+++8E77~ LD (IX-12+CHP.PsInOr),A
0688+++8E77~ JR PD_LP2
0689+++8E77~ 0690+++8E77~ PD_SorE DEC A
0691+++8E77~ JR NZ,PD_ENV
0692+++8E77~ LD A,(BC)
0693+++8E77~ INC BC
0694+++8E77~ LD (IX-12+CHP.NNtSkp),A
0695+++8E77~ JR PD_LP2
0696+++8E77~ 0697+++8E77~ PD_ENV CALL SETENV
0698+++8E77~ JR PD_LP2
0699+++8E77~ 0700+++8E77~ PD_ORN CALL SETORN
0701+++8E77~ JR PD_LOOP
0702+++8E77~ 0703+++8E77~ PD_ESAM LD (IX-12+CHP.Env_En),A
0704+++8E77~ LD (IX-12+CHP.PsInOr),A
0705+++8E77~ CALL NZ,SETENV
0706+++8E77~ JR PD_SAM_
0707+++8E77~ 0708+++8E77~ PT3PD LD A,(IX-12+CHP.Note)
0709+++8E77~ LD (PrNote+1),A
0710+++8E77~ LD L,(IX-12+CHP.CrTnSl)
0711+++8E77~ LD H,(IX-12+CHP.CrTnSl+1)
0712+++8E77~ LD (PrSlide+1),HL
0713+++8E77~ 0714+++8E77~ PD_LOOP LD DE,#2010
0715+++8E77~ PD_LP2 LD A,(BC)
0716+++8E77~ INC BC
0717+++8E77~ ADD A,E
0718+++8E77~ JR C,PD_OrSm
0719+++8E77~ ADD A,D
0720+++8E77~ JR Z,PD_FIN
0721+++8E77~ JR C,PD_SAM
0722+++8E77~ ADD A,E
0723+++8E77~ JR Z,PD_REL
0724+++8E77~ JR C,PD_VOL
0725+++8E77~ ADD A,E
0726+++8E77~ JR Z,PD_EOff
0727+++8E77~ JR C,PD_SorE
0728+++8E77~ ADD A,96
0729+++8E77~ JR C,PD_NOTE
0730+++8E77~ ADD A,E
0731+++8E77~ JR C,PD_ORN
0732+++8E77~ ADD A,D
0733+++8E77~ JR C,PD_NOIS
0734+++8E77~ ADD A,E
0735+++8E77~ JR C,PD_ESAM
0736+++8E77~ ADD A,A
0737+++8E77~ LD E,A
0738+++8E77~ LD HL,(SPCCOMS+#FF20-#2000)&65535
0739+++8E77~ ADD HL,DE
0740+++8E77~ LD E,(HL)
0741+++8E77~ INC HL
0742+++8E77~ LD D,(HL)
0743+++8E77~ PUSH DE
0744+++8E77~ JR PD_LOOP
0745+++8E77~ 0746+++8E77~ PD_NOIS LD (IY-100+VRS.Ns_Base),A
0747+++8E77~ JR PD_LP2
0748+++8E77~ 0749+++8E77~ PD_REL RES 0,(IX-12+CHP.Flags)
0750+++8E77~ JR PD_RES
0751+++8E77~ 0752+++8E77~ PD_NOTE LD (IX-12+CHP.Note),A
0753+++8E77~ SET 0,(IX-12+CHP.Flags)
0754+++8E77~ XOR A
0755+++8E77~ 0756+++8E77~ PD_RES LD (PDSP_+1),SP
0757+++8E77~ LD SP,IX
0758+++8E77~ LD H,A
0759+++8E77~ LD L,A
0760+++8E77~ PUSH HL
0761+++8E77~ PUSH HL
0762+++8E77~ PUSH HL
0763+++8E77~ PUSH HL
0764+++8E77~ PUSH HL
0765+++8E77~ PUSH HL
0766+++8E77~ PDSP_ LD SP,#3131
0767+++8E77~ 0768+++8E77~ PD_FIN LD A,(IX-12+CHP.NNtSkp)
0769+++8E77~ LD (IX-12+CHP.NtSkCn),A
0770+++8E77~ RET
0771+++8E77~ 0772+++8E77~ C_PORTM LD A,(BC)
0773+++8E77~ INC BC
0774+++8E77~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE
0775+++8E77~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION)
0776+++8E77~ INC BC
0777+++8E77~ INC BC
0778+++8E77~ EX AF,AF'
0779+++8E77~ LD A,(BC) ;SIGNED TONE STEP
0780+++8E77~ INC BC
0781+++8E77~ LD (LoStep),A
0782+++8E77~ LD A,(BC)
0783+++8E77~ INC BC
0784+++8E77~ AND A
0785+++8E77~ EX AF,AF'
0786+++8E77~ LD L,(IX-12+CHP.CrTnSl)
0787+++8E77~ LD H,(IX-12+CHP.CrTnSl+1)
0788+++8E77~ 0789+++8E77~ ;Set portamento variables
0790+++8E77~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
0791+++8E77~ 0792+++8E77~ SETPORT RES 2,(IX-12+CHP.Flags)
0793+++8E77~ LD (IX-12+CHP.TnSlDl),A
0794+++8E77~ LD (IX-12+CHP.TSlCnt),A
0795+++8E77~ PUSH HL
0796+++8E77~ LD DE,NT_
0797+++8E77~ LD A,(IX-12+CHP.Note)
0798+++8E77~ LD (IX-12+CHP.SlToNt),A
0799+++8E77~ ADD A,A
0800+++8E77~ LD L,A
0801+++8E77~ LD H,0
0802+++8E77~ ADD HL,DE
0803+++8E77~ LD A,(HL)
0804+++8E77~ INC HL
0805+++8E77~ LD H,(HL)
0806+++8E77~ LD L,A
0807+++8E77~ PUSH HL
0808+++8E77~ PrNote LD A,#3E
0809+++8E77~ LD (IX-12+CHP.Note),A
0810+++8E77~ ADD A,A
0811+++8E77~ LD L,A
0812+++8E77~ LD H,0
0813+++8E77~ ADD HL,DE
0814+++8E77~ LD E,(HL)
0815+++8E77~ INC HL
0816+++8E77~ LD D,(HL)
0817+++8E77~ POP HL
0818+++8E77~ SBC HL,DE
0819+++8E77~ LD (IX-12+CHP.TnDelt),L
0820+++8E77~ LD (IX-12+CHP.TnDelt+1),H
0821+++8E77~ POP DE
0822+++8E77~ Version EQU $+1
0823+++8E77~ LD A,#3E
0824+++8E77~ CP 6
0825+++8E77~ JR C,OLDPRTM ;Old 3xxx for PT v3.5-
0826+++8E77~ PrSlide LD DE,#1111
0827+++8E77~ LD (IX-12+CHP.CrTnSl),E
0828+++8E77~ LD (IX-12+CHP.CrTnSl+1),D
0829+++8E77~ LoStep EQU $+1
0830+++8E77~ OLDPRTM LD A,#3E
0831+++8E77~ EX AF,AF'
0832+++8E77~ JR Z,NOSIG
0833+++8E77~ EX DE,HL
0834+++8E77~ NOSIG SBC HL,DE
0835+++8E77~ JP P,SET_STP
0836+++8E77~ CPL
0837+++8E77~ EX AF,AF'
0838+++8E77~ NEG
0839+++8E77~ EX AF,AF'
0840+++8E77~ SET_STP LD (IX-12+CHP.TSlStp+1),A
0841+++8E77~ EX AF,AF'
0842+++8E77~ LD (IX-12+CHP.TSlStp),A
0843+++8E77~ LD (IX-12+CHP.COnOff),0
0844+++8E77~ RET
0845+++8E77~ 0846+++8E77~ C_GLISS SET 2,(IX-12+CHP.Flags)
0847+++8E77~ LD A,(BC)
0848+++8E77~ INC BC
0849+++8E77~ LD (IX-12+CHP.TnSlDl),A
0850+++8E77~ AND A
0851+++8E77~ JR NZ,GL36
0852+++8E77~ LD A,(Version) ;AlCo PT3.7+
0853+++8E77~ CP 7
0854+++8E77~ SBC A,A
0855+++8E77~ INC A
0856+++8E77~ GL36 LD (IX-12+CHP.TSlCnt),A
0857+++8E77~ LD A,(BC)
0858+++8E77~ INC BC
0859+++8E77~ EX AF,AF'
0860+++8E77~ LD A,(BC)
0861+++8E77~ INC BC
0862+++8E77~ JR SET_STP
0863+++8E77~ 0864+++8E77~ C_SMPOS LD A,(BC)
0865+++8E77~ INC BC
0866+++8E77~ LD (IX-12+CHP.PsInSm),A
0867+++8E77~ RET
0868+++8E77~ 0869+++8E77~ C_ORPOS LD A,(BC)
0870+++8E77~ INC BC
0871+++8E77~ LD (IX-12+CHP.PsInOr),A
0872+++8E77~ RET
0873+++8E77~ 0874+++8E77~ C_VIBRT LD A,(BC)
0875+++8E77~ INC BC
0876+++8E77~ LD (IX-12+CHP.OnOffD),A
0877+++8E77~ LD (IX-12+CHP.COnOff),A
0878+++8E77~ LD A,(BC)
0879+++8E77~ INC BC
0880+++8E77~ LD (IX-12+CHP.OffOnD),A
0881+++8E77~ XOR A
0882+++8E77~ LD (IX-12+CHP.TSlCnt),A
0883+++8E77~ LD (IX-12+CHP.CrTnSl),A
0884+++8E77~ LD (IX-12+CHP.CrTnSl+1),A
0885+++8E77~ RET
0886+++8E77~ 0887+++8E77~ C_ENGLS LD A,(BC)
0888+++8E77~ INC BC
0889+++8E77~ LD (IY-100+VRS.Env_Del),A
0890+++8E77~ LD (IY-100+VRS.CurEDel),A
0891+++8E77~ LD A,(BC)
0892+++8E77~ INC BC
0893+++8E77~ LD L,A
0894+++8E77~ LD A,(BC)
0895+++8E77~ INC BC
0896+++8E77~ LD H,A
0897+++8E77~ LD (IY-100+VRS.ESldAdd),L
0898+++8E77~ LD (IY-100+VRS.ESldAdd+1),H
0899+++8E77~ RET
0900+++8E77~ 0901+++8E77~ C_DELAY LD A,(BC)
0902+++8E77~ INC BC
0903+++8E77~ LD (IY-100+VRS.Delay),A
0904+++8E77~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS
0905+++8E77~ BIT 1,(HL)
0906+++8E77~ RET Z
0907+++8E77~ LD (VARS1+VRS.Delay),A
0908+++8E77~ LD (VARS1+VRS.DelyCnt),A
0909+++8E77~ LD (VARS2+VRS.Delay),A
0910+++8E77~ RET
0911+++8E77~
0912+++8E77~ SETENV LD (IX-12+CHP.Env_En),E
0913+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A
0914+++8E77~ LD A,(BC)
0915+++8E77~ INC BC
0916+++8E77~ LD H,A
0917+++8E77~ LD A,(BC)
0918+++8E77~ INC BC
0919+++8E77~ LD L,A
0920+++8E77~ CALL SETENBS
0921+++8E77~ XOR A
0922+++8E77~ LD (IX-12+CHP.PsInOr),A
0923+++8E77~ LD (IY-100+VRS.CurEDel),A
0924+++8E77~ LD H,A
0925+++8E77~ LD L,A
0926+++8E77~ JP SETESLD
0927+++8E77~ 0928+++8E77~ SETORN ADD A,A
0929+++8E77~ LD E,A
0930+++8E77~ LD D,0
0931+++8E77~ LD (IX-12+CHP.PsInOr),D
0932+++8E77~ LD L,(IY-100+VRS.OrnPtrs)
0933+++8E77~ LD H,(IY-100+VRS.OrnPtrs+1)
0934+++8E77~ ADD HL,DE
0935+++8E77~ LD E,(HL)
0936+++8E77~ INC HL
0937+++8E77~ LD D,(HL)
0938+++8E77~ LD L,(IY-100+VRS.MODADDR)
0939+++8E77~ LD H,(IY-100+VRS.MODADDR+1)
0940+++8E77~ ADD HL,DE
0941+++8E77~ LD (IX-12+CHP.OrnPtr),L
0942+++8E77~ LD (IX-12+CHP.OrnPtr+1),H
0943+++8E77~ C_NOP RET
0944+++8E77~ 0945+++8E77~ SETSAM ADD A,A
0946+++8E77~ LD E,A
0947+++8E77~ LD D,0
0948+++8E77~ LD L,(IY-100+VRS.SamPtrs);
0949+++8E77~ LD H,(IY-100+VRS.SamPtrs+1);
0950+++8E77~ ADD HL,DE
0951+++8E77~ LD E,(HL)
0952+++8E77~ INC HL
0953+++8E77~ LD D,(HL)
0954+++8E77~ LD L,(IY-100+VRS.MODADDR)
0955+++8E77~ LD H,(IY-100+VRS.MODADDR+1)
0956+++8E77~ ADD HL,DE
0957+++8E77~ LD (IX-12+CHP.SamPtr),L
0958+++8E77~ LD (IX-12+CHP.SamPtr+1),H
0959+++8E77~ RET
0960+++8E77~ 0961+++8E77~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
0962+++8E77~ SPCCOMS DW C_NOP
0963+++8E77~ DW C_GLISS
0964+++8E77~ DW C_PORTM
0965+++8E77~ DW C_SMPOS
0966+++8E77~ DW C_ORPOS
0967+++8E77~ DW C_VIBRT
0968+++8E77~ DW C_NOP
0969+++8E77~ DW C_NOP
0970+++8E77~ DW C_ENGLS
0971+++8E77~ DW C_DELAY
0972+++8E77~ DW C_NOP
0973+++8E77~ DW C_NOP
0974+++8E77~ DW C_NOP
0975+++8E77~ DW C_NOP
0976+++8E77~ DW C_NOP
0977+++8E77~ DW C_NOP
0978+++8E77~ 0979+++8E77~ CHREGS CALL GETIX
0980+++8E77~ XOR A
0981+++8E77~ LD (Ampl),A
0982+++8E77~ BIT 0,(IX+CHP.Flags)
0983+++8E77~ PUSH HL
0984+++8E77~ JP Z,CH_EXIT
0985+++8E77~ LD (CSP_+1),SP
0986+++8E77~ LD L,(IX+CHP.OrnPtr)
0987+++8E77~ LD H,(IX+CHP.OrnPtr+1)
0988+++8E77~ LD SP,HL
0989+++8E77~ POP DE
0990+++8E77~ LD H,A
0991+++8E77~ LD A,(IX+CHP.PsInOr)
0992+++8E77~ LD L,A
0993+++8E77~ ADD HL,SP
0994+++8E77~ INC A
0995+++8E77~ ;PT2 PT3
0996+++8E77~ OrnCP INC A ;CP E CP D
0997+++8E77~ JR C,CH_ORPS
0998+++8E77~ OrnLD DB 1 ;LD A,D LD A,E
0999+++8E77~ CH_ORPS LD (IX+CHP.PsInOr),A
1000+++8E77~ LD A,(IX+CHP.Note)
1001+++8E77~ ADD A,(HL)
1002+++8E77~ JP P,CH_NTP
1003+++8E77~ XOR A
1004+++8E77~ CH_NTP CP 96
1005+++8E77~ JR C,CH_NOK
1006+++8E77~ LD A,95
1007+++8E77~ CH_NOK ADD A,A
1008+++8E77~ EX AF,AF'
1009+++8E77~ LD L,(IX+CHP.SamPtr)
1010+++8E77~ LD H,(IX+CHP.SamPtr+1)
1011+++8E77~ LD SP,HL
1012+++8E77~ POP DE
1013+++8E77~ LD H,0
1014+++8E77~ LD A,(IX+CHP.PsInSm)
1015+++8E77~ LD B,A
1016+++8E77~ ADD A,A
1017+++8E77~ SamClc2 ADD A,A ;or ADD A,B for PT2
1018+++8E77~ LD L,A
1019+++8E77~ ADD HL,SP
1020+++8E77~ LD SP,HL
1021+++8E77~ LD A,B
1022+++8E77~ INC A
1023+++8E77~ ;PT2 PT3
1024+++8E77~ SamCP INC A ;CP E CP D
1025+++8E77~ JR C,CH_SMPS
1026+++8E77~ SamLD DB 1 ;LD A,D LD A,E
1027+++8E77~ CH_SMPS LD (IX+CHP.PsInSm),A
1028+++8E77~ POP BC
1029+++8E77~ POP HL
1030+++8E77~ 1031+++8E77~ ;Convert PT2 sample to PT3
1032+++8E77~ ;PT2 PT3
1033+++8E77~ SamCnv POP HL ;BIT 2,C JR e_
1034+++8E77~ POP HL
1035+++8E77~ LD H,B
1036+++8E77~ JR NZ,$+8
1037+++8E77~ EX DE,HL
1038+++8E77~ AND A
1039+++8E77~ SBC HL,HL
1040+++8E77~ SBC HL,DE
1041+++8E77~ LD D,C
1042+++8E77~ RR C
1043+++8E77~ SBC A,A
1044+++8E77~ CPL
1045+++8E77~ AND #3E
1046+++8E77~ RR C
1047+++8E77~ RR B
1048+++8E77~ AND C
1049+++8E77~ LD C,A
1050+++8E77~ LD A,B
1051+++8E77~ RRA
1052+++8E77~ RRA
1053+++8E77~ RR D
1054+++8E77~ RRA
1055+++8E77~ AND #9F
1056+++8E77~ LD B,A
1057+++8E77~ 1058+++8E77~ e_ LD E,(IX+CHP.TnAcc)
1059+++8E77~ LD D,(IX+CHP.TnAcc+1)
1060+++8E77~ ADD HL,DE
1061+++8E77~ BIT 6,B
1062+++8E77~ JR Z,CH_NOAC
1063+++8E77~ LD (IX+CHP.TnAcc),L
1064+++8E77~ LD (IX+CHP.TnAcc+1),H
1065+++8E77~ CH_NOAC EX DE,HL
1066+++8E77~ EX AF,AF'
1067+++8E77~ ADD A,NT_&255
1068+++8E77~ LD L,A
1069+++8E77~ ADC A,NT_/256
1070+++8E77~ SUB L
1071+++8E77~ LD H,A
1072+++8E77~ LD SP,HL
1073+++8E77~ POP HL
1074+++8E77~ ADD HL,DE
1075+++8E77~ LD E,(IX+CHP.CrTnSl)
1076+++8E77~ LD D,(IX+CHP.CrTnSl+1)
1077+++8E77~ ADD HL,DE
1078+++8E77~ CSP_ LD SP,#3131
1079+++8E77~ EX (SP),HL
1080+++8E77~ XOR A
1081+++8E77~ OR (IX+CHP.TSlCnt)
1082+++8E77~ JR Z,CH_AMP
1083+++8E77~ DEC (IX+CHP.TSlCnt)
1084+++8E77~ JR NZ,CH_AMP
1085+++8E77~ LD A,(IX+CHP.TnSlDl)
1086+++8E77~ LD (IX+CHP.TSlCnt),A
1087+++8E77~ LD L,(IX+CHP.TSlStp)
1088+++8E77~ LD H,(IX+CHP.TSlStp+1)
1089+++8E77~ LD A,H
1090+++8E77~ ADD HL,DE
1091+++8E77~ LD (IX+CHP.CrTnSl),L
1092+++8E77~ LD (IX+CHP.CrTnSl+1),H
1093+++8E77~ BIT 2,(IX+CHP.Flags)
1094+++8E77~ JR NZ,CH_AMP
1095+++8E77~ LD E,(IX+CHP.TnDelt)
1096+++8E77~ LD D,(IX+CHP.TnDelt+1)
1097+++8E77~ AND A
1098+++8E77~ JR Z,CH_STPP
1099+++8E77~ EX DE,HL
1100+++8E77~ CH_STPP SBC HL,DE
1101+++8E77~ JP M,CH_AMP
1102+++8E77~ LD A,(IX+CHP.SlToNt)
1103+++8E77~ LD (IX+CHP.Note),A
1104+++8E77~ XOR A
1105+++8E77~ LD (IX+CHP.TSlCnt),A
1106+++8E77~ LD (IX+CHP.CrTnSl),A
1107+++8E77~ LD (IX+CHP.CrTnSl+1),A
1108+++8E77~ CH_AMP LD A,(IX+CHP.CrAmSl)
1109+++8E77~ BIT 7,C
1110+++8E77~ JR Z,CH_NOAM
1111+++8E77~ BIT 6,C
1112+++8E77~ JR Z,CH_AMIN
1113+++8E77~ CP 15
1114+++8E77~ JR Z,CH_NOAM
1115+++8E77~ INC A
1116+++8E77~ JR CH_SVAM
1117+++8E77~ CH_AMIN CP -15
1118+++8E77~ JR Z,CH_NOAM
1119+++8E77~ DEC A
1120+++8E77~ CH_SVAM LD (IX+CHP.CrAmSl),A
1121+++8E77~ CH_NOAM LD L,A
1122+++8E77~ LD A,B
1123+++8E77~ AND 15
1124+++8E77~ ADD A,L
1125+++8E77~ JP P,CH_APOS
1126+++8E77~ XOR A
1127+++8E77~ CH_APOS CP 16
1128+++8E77~ JR C,CH_VOL
1129+++8E77~ LD A,15
1130+++8E77~ CH_VOL OR (IX+CHP.Volume)
1131+++8E77~ ADD A,VT_&255
1132+++8E77~ LD L,A
1133+++8E77~ ADC A,VT_/256
1134+++8E77~ SUB L
1135+++8E77~ LD H,A
1136+++8E77~ LD A,(HL)
1137+++8E77~ CH_ENV BIT 0,C
1138+++8E77~ JR NZ,CH_NOEN
1139+++8E77~ OR (IX+CHP.Env_En)
1140+++8E77~ CH_NOEN LD (Ampl),A
1141+++8E77~ BIT 7,B
1142+++8E77~ LD A,C
1143+++8E77~ JR Z,NO_ENSL
1144+++8E77~ RLA
1145+++8E77~ RLA
1146+++8E77~ SRA A
1147+++8E77~ SRA A
1148+++8E77~ SRA A
1149+++8E77~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
1150+++8E77~ BIT 5,B
1151+++8E77~ JR Z,NO_ENAC
1152+++8E77~ LD (IX+CHP.CrEnSl),A
1153+++8E77~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE
1154+++8E77~ LD (IY-100+VRS.AddToEn),A
1155+++8E77~ JR CH_MIX
1156+++8E77~ NO_ENSL RRA
1157+++8E77~ ADD A,(IX+CHP.CrNsSl)
1158+++8E77~ LD (IY-100+VRS.AddToNs),A
1159+++8E77~ BIT 5,B
1160+++8E77~ JR Z,CH_MIX
1161+++8E77~ LD (IX+CHP.CrNsSl),A
1162+++8E77~ CH_MIX LD A,B
1163+++8E77~ RRA
1164+++8E77~ AND #48
1165+++8E77~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer)
1166+++8E77~ RRCA
1167+++8E77~ LD (IY-100+VRS.AYREGS+Mixer),A
1168+++8E77~ POP HL
1169+++8E77~ XOR A
1170+++8E77~ OR (IX+CHP.COnOff)
1171+++8E77~ RET Z
1172+++8E77~ DEC (IX+CHP.COnOff)
1173+++8E77~ RET NZ
1174+++8E77~ XOR (IX+CHP.Flags)
1175+++8E77~ LD (IX+CHP.Flags),A
1176+++8E77~ RRA
1177+++8E77~ LD A,(IX+CHP.OnOffD)
1178+++8E77~ JR C,CH_ONDL
1179+++8E77~ LD A,(IX+CHP.OffOnD)
1180+++8E77~ CH_ONDL LD (IX+CHP.COnOff),A
1181+++8E77~ RET
1182+++8E77~ 1183+++8E77~ PLAY_ XOR A
1184+++8E77~ LD (IY-100+VRS.AddToEn),A
1185+++8E77~ LD (IY-100+VRS.AYREGS+Mixer),A
1186+++8E77~ DEC A
1187+++8E77~ LD (IY-100+VRS.AYREGS+EnvTp),A
1188+++8E77~ DEC (IY-100+VRS.DelyCnt)
1189+++8E77~ JP NZ,PL2
1190+++8E77~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn)
1191+++8E77~ JR NZ,PL1B
1192+++8E77~ LD C,(IY-100+VRS.AdInPtA)
1193+++8E77~ LD B,(IY-100+VRS.AdInPtA+1)
1194+++8E77~ LD A,(BC)
1195+++8E77~ AND A
1196+++8E77~ JR NZ,PL1A
1197+++8E77~ LD D,A
1198+++8E77~ LD (IY-100+VRS.Ns_Base),A
1199+++8E77~ LD L,(IY-100+VRS.CrPsPtr)
1200+++8E77~ LD H,(IY-100+VRS.CrPsPtr+1)
1201+++8E77~ INC HL
1202+++8E77~ LD A,(HL)
1203+++8E77~ INC A
1204+++8E77~ JR NZ,PLNLP
1205+++8E77~ 1206+++8E77~ IF LoopChecker
1207+++8E77~ CALL CHECKLP
1208+++8E77~ ENDIF
1209+++8E77~ 1210+++8E77~ LD L,(IY-100+VRS.LPosPtr)
1211+++8E77~ LD H,(IY-100+VRS.LPosPtr+1)
1212+++8E77~ LD A,(HL)
1213+++8E77~ INC A
1214+++8E77~ PLNLP CALL SETCPPT
1215+++8E77~ DEC A
1216+++8E77~ BIT 1,(IY-100+VRS.ModNum)
1217+++8E77~ JR Z,NoAlCo
1218+++8E77~ TSSub EQU $+1
1219+++8E77~ SUB #D6
1220+++8E77~ CPL
1221+++8E77~ NoAlCo
1222+++8E77~ ;PT2 PT3
1223+++8E77~ PsCalc DEC A ;ADD A,A NOP
1224+++8E77~ DEC A ;ADD A,(HL) NOP
1225+++8E77~ ADD A,A
1226+++8E77~ LD E,A
1227+++8E77~ RL D
1228+++8E77~ 1229+++8E77~ IF CurPosCounter
1230+++8E77~ LD A,L
1231+++8E77~ SUB (IY-100+VRS.PosSub)
1232+++8E77~ LD (IY-100+VRS.CurPos),A
1233+++8E77~ ENDIF
1234+++8E77~ 1235+++8E77~ LD L,(IY-100+VRS.PatsPtr)
1236+++8E77~ LD H,(IY-100+VRS.PatsPtr+1)
1237+++8E77~ ADD HL,DE
1238+++8E77~ LD E,(IY-100+VRS.MODADDR)
1239+++8E77~ LD D,(IY-100+VRS.MODADDR+1)
1240+++8E77~ LD (PSP_+1),SP
1241+++8E77~ LD SP,HL
1242+++8E77~ POP HL
1243+++8E77~ ADD HL,DE
1244+++8E77~ LD B,H
1245+++8E77~ LD C,L
1246+++8E77~ POP HL
1247+++8E77~ ADD HL,DE
1248+++8E77~ LD (IY-100+VRS.AdInPtB),L
1249+++8E77~ LD (IY-100+VRS.AdInPtB+1),H
1250+++8E77~ POP HL
1251+++8E77~ ADD HL,DE
1252+++8E77~ LD (IY-100+VRS.AdInPtC),L
1253+++8E77~ LD (IY-100+VRS.AdInPtC+1),H
1254+++8E77~ PSP_ LD SP,#3131
1255+++8E77~ PL1A LD DE,VRS.ChanA+12-100
1256+++8E77~ CALL PTDECOD
1257+++8E77~ LD (IY-100+VRS.AdInPtA),C
1258+++8E77~ LD (IY-100+VRS.AdInPtA+1),B
1259+++8E77~ 1260+++8E77~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn)
1261+++8E77~ JR NZ,PL1C
1262+++8E77~ LD DE,VRS.ChanB+12-100
1263+++8E77~ LD C,(IY-100+VRS.AdInPtB)
1264+++8E77~ LD B,(IY-100+VRS.AdInPtB+1)
1265+++8E77~ CALL PTDECOD
1266+++8E77~ LD (IY-100+VRS.AdInPtB),C
1267+++8E77~ LD (IY-100+VRS.AdInPtB+1),B
1268+++8E77~ 1269+++8E77~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn)
1270+++8E77~ JR NZ,PL1D
1271+++8E77~ LD DE,VRS.ChanC+12-100
1272+++8E77~ LD C,(IY-100+VRS.AdInPtC)
1273+++8E77~ LD B,(IY-100+VRS.AdInPtC+1)
1274+++8E77~ CALL PTDECOD
1275+++8E77~ LD (IY-100+VRS.AdInPtC),C
1276+++8E77~ LD (IY-100+VRS.AdInPtC+1),B
1277+++8E77~ 1278+++8E77~ PL1D LD A,(IY-100+VRS.Delay)
1279+++8E77~ LD (IY-100+VRS.DelyCnt),A
1280+++8E77~ 1281+++8E77~ PL2 LD DE,VRS.ChanA-100
1282+++8E77~ LD L,(IY-100+VRS.AYREGS+TonA)
1283+++8E77~ LD H,(IY-100+VRS.AYREGS+TonA+1)
1284+++8E77~ CALL CHREGS
1285+++8E77~ LD (IY-100+VRS.AYREGS+TonA),L
1286+++8E77~ LD (IY-100+VRS.AYREGS+TonA+1),H
1287+++8E77~ Ampl EQU $+1
1288+++8E77~ LD A,#3E
1289+++8E77~ LD (IY-100+VRS.AYREGS+AmplA),A
1290+++8E77~ LD DE,VRS.ChanB-100
1291+++8E77~ LD L,(IY-100+VRS.AYREGS+TonB)
1292+++8E77~ LD H,(IY-100+VRS.AYREGS+TonB+1)
1293+++8E77~ CALL CHREGS
1294+++8E77~ LD (IY-100+VRS.AYREGS+TonB),L
1295+++8E77~ LD (IY-100+VRS.AYREGS+TonB+1),H
1296+++8E77~ LD A,(Ampl)
1297+++8E77~ LD (IY-100+VRS.AYREGS+AmplB),A
1298+++8E77~ LD DE,VRS.ChanC-100
1299+++8E77~ LD L,(IY-100+VRS.AYREGS+TonC)
1300+++8E77~ LD H,(IY-100+VRS.AYREGS+TonC+1)
1301+++8E77~ CALL CHREGS
1302+++8E77~ LD (IY-100+VRS.AYREGS+TonC),L
1303+++8E77~ LD (IY-100+VRS.AYREGS+TonC+1),H
1304+++8E77~ LD A,(Ampl)
1305+++8E77~ LD (IY-100+VRS.AYREGS+AmplC),A
1306+++8E77~ 1307+++8E77~ LD A,(IY-100+VRS.Ns_Base)
1308+++8E77~ ADD (IY-100+VRS.AddToNs)
1309+++8E77~ LD (IY-100+VRS.AYREGS+Noise),A
1310+++8E77~ 1311+++8E77~ LD A,(IY-100+VRS.AddToEn)
1312+++8E77~ LD E,A
1313+++8E77~ ADD A,A
1314+++8E77~ SBC A,A
1315+++8E77~ LD D,A
1316+++8E77~ LD L,(IY-100+VRS.EnvBase)
1317+++8E77~ LD H,(IY-100+VRS.EnvBase+1)
1318+++8E77~ ADD HL,DE
1319+++8E77~ LD E,(IY-100+VRS.CurESld)
1320+++8E77~ LD D,(IY-100+VRS.CurESld+1)
1321+++8E77~ ADD HL,DE
1322+++8E77~ LD (IY-100+VRS.AYREGS+Env),L
1323+++8E77~ LD (IY-100+VRS.AYREGS+Env+1),H
1324+++8E77~ 1325+++8E77~ XOR A
1326+++8E77~ OR (IY-100+VRS.CurEDel)
1327+++8E77~ RET Z
1328+++8E77~ DEC (IY-100+VRS.CurEDel)
1329+++8E77~ RET NZ
1330+++8E77~ LD A,(IY-100+VRS.Env_Del)
1331+++8E77~ LD (IY-100+VRS.CurEDel),A
1332+++8E77~ LD L,(IY-100+VRS.ESldAdd)
1333+++8E77~ LD H,(IY-100+VRS.ESldAdd+1)
1334+++8E77~ ADD HL,DE
1335+++8E77~ JP SETESLD
1336+++8E77~ 1337+++8E77~ PLAY LD IY,VARS1+100
1338+++8E77~ CALL PLAY_
1339+++8E77~ LD A,(is_ts)
1340+++8E77~ AND A
1341+++8E77~ JR Z,PL_nts
1342+++8E77~ LD IY,VARS2+100
1343+++8E77~ CALL PLAY_
1344+++8E77~ PL_nts
1345+++8E77~ IF Basic
1346+++8E77~ LD IY,#5C3A
1347+++8E77~ ENDIF
1348+++8E77~ 1349+++8E77~ ROUT LD BC,#FFFD
1350+++8E77~ LD A,(is_ts)
1351+++8E77~ AND A
1352+++8E77~ IFDEF ONtfm
1353+++8E77~ LD L,#F9
1354+++8E77~ OUT (C),L
1355+++8E77~ ELSE
1356+++8E77~ JR Z,r_nts ;keep old standard
1357+++8E77~ OUT (C),B
1358+++8E77~ ENDIF
1359+++8E77~ r_nts EX AF,AF'
1360+++8E77~ 1361+++8E77~ IF ACBBAC
1362+++8E77~ LD IX,VARS1+VRS.AYREGS
1363+++8E77~ ELSE
1364+++8E77~ LD HL,VARS1+VRS.AYREGS
1365+++8E77~ ENDIF
1366+++8E77~ 1367+++8E77~ CALL ROUT_
1368+++8E77~ EX AF,AF'
1369+++8E77~ RET Z
1370+++8E77~ LD B,D
1371+++8E77~ 1372+++8E77~ IFDEF ONtfm
1373+++8E77~ LD A,#F8
1374+++8E77~ ELSE
1375+++8E77~ CPL
1376+++8E77~ ENDIF
1377+++8E77~ OUT (C),A
1378+++8E77~ 1379+++8E77~ IF ACBBAC
1380+++8E77~ LD IX,VARS2+VRS.AYREGS
1381+++8E77~ ELSE
1382+++8E77~ LD HL,VARS2+VRS.AYREGS
1383+++8E77~ ENDIF
1384+++8E77~ 1385+++8E77~ ROUT_
1386+++8E77~ IF ACBBAC
1387+++8E77~ LD A,(SETUP)
1388+++8E77~ AND 12
1389+++8E77~ JR Z,ABC
1390+++8E77~ ADD A,CHTABLE
1391+++8E77~ LD E,A
1392+++8E77~ ADC A,CHTABLE/256
1393+++8E77~ SUB E
1394+++8E77~ LD D,A
1395+++8E77~ LD B,0
1396+++8E77~ PUSH IX
1397+++8E77~ POP HL
1398+++8E77~ LD A,(DE)
1399+++8E77~ INC DE
1400+++8E77~ LD C,A
1401+++8E77~ ADD HL,BC
1402+++8E77~ LD A,(IX+TonB)
1403+++8E77~ LD C,(HL)
1404+++8E77~ LD (IX+TonB),C
1405+++8E77~ LD (HL),A
1406+++8E77~ INC HL
1407+++8E77~ LD A,(IX+TonB+1)
1408+++8E77~ LD C,(HL)
1409+++8E77~ LD (IX+TonB+1),C
1410+++8E77~ LD (HL),A
1411+++8E77~ LD A,(DE)
1412+++8E77~ INC DE
1413+++8E77~ LD C,A
1414+++8E77~ ADD HL,BC
1415+++8E77~ LD A,(IX+AmplB)
1416+++8E77~ LD C,(HL)
1417+++8E77~ LD (IX+AmplB),C
1418+++8E77~ LD (HL),A
1419+++8E77~ LD A,(DE)
1420+++8E77~ INC DE
1421+++8E77~ LD (RxCA1),A
1422+++8E77~ XOR 8
1423+++8E77~ LD (RxCA2),A
1424+++8E77~ LD A,(DE)
1425+++8E77~ AND (IX+Mixer)
1426+++8E77~ LD E,A
1427+++8E77~ LD A,(IX+Mixer)
1428+++8E77~ RxCA1 DB #E6
1429+++8E77~ AND %010010
1430+++8E77~ OR E
1431+++8E77~ LD E,A
1432+++8E77~ LD A,(IX+Mixer)
1433+++8E77~ AND %010010
1434+++8E77~ RxCA2 OR E
1435+++8E77~ OR E
1436+++8E77~ LD (IX+Mixer),A
1437+++8E77~ ABC
1438+++8E77~ ENDIF
1439+++8E77~ 1440+++8E77~ XOR A
1441+++8E77~ LD DE,#FFBF
1442+++8E77~ 1443+++8E77~ IF ACBBAC
1444+++8E77~ LD BC,#FFFD
1445+++8E77~ PUSH IX
1446+++8E77~ POP HL
1447+++8E77~ ENDIF
1448+++8E77~ 1449+++8E77~ LOUT
1450+++8E77~ IFDEF ONtfm
1451+++8E77~ INF
1452+++8E77~ JP M,$-2
1453+++8E77~ ENDIF
1454+++8E77~ OUT (C),A
1455+++8E77~ IFDEF ONtfm
1456+++8E77~ INF
1457+++8E77~ JP M,$-2
1458+++8E77~ ENDIF
1459+++8E77~ LD B,E
1460+++8E77~ OUTI
1461+++8E77~ LD B,D
1462+++8E77~ INC A
1463+++8E77~ CP 13
1464+++8E77~ JR NZ,LOUT
1465+++8E77~ IFDEF ONtfm
1466+++8E77~ INF
1467+++8E77~ JP M,$-2
1468+++8E77~ ENDIF
1469+++8E77~ OUT (C),A
1470+++8E77~ LD A,(HL)
1471+++8E77~ AND A
1472+++8E77~ RET M
1473+++8E77~ IFDEF ONtfm
1474+++8E77~ INF
1475+++8E77~ JP M,$-2
1476+++8E77~ ENDIF
1477+++8E77~ LD B,E
1478+++8E77~ OUT (C),A
1479+++8E77~ RET
1480+++8E77~ 1481+++8E77~ IF ACBBAC
1482+++8E77~ CHTABLE EQU $-4
1483+++8E77~ DB 4,5,15,%001001,0,7,7,%100100
1484+++8E77~ ENDIF
1485+++8E77~ 1486+++8E77~ NT_DATA DB (T_NEW_0-T1_)*2
1487+++8E77~ DB TCNEW_0-T_
1488+++8E77~ DB (T_OLD_0-T1_)*2+1
1489+++8E77~ DB TCOLD_0-T_
1490+++8E77~ DB (T_NEW_1-T1_)*2+1
1491+++8E77~ DB TCNEW_1-T_
1492+++8E77~ DB (T_OLD_1-T1_)*2+1
1493+++8E77~ DB TCOLD_1-T_
1494+++8E77~ DB (T_NEW_2-T1_)*2
1495+++8E77~ DB TCNEW_2-T_
1496+++8E77~ DB (T_OLD_2-T1_)*2
1497+++8E77~ DB TCOLD_2-T_
1498+++8E77~ DB (T_NEW_3-T1_)*2
1499+++8E77~ DB TCNEW_3-T_
1500+++8E77~ DB (T_OLD_3-T1_)*2
1501+++8E77~ DB TCOLD_3-T_
1502+++8E77~ 1503+++8E77~ T_
1504+++8E77~ 1505+++8E77~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
1506+++8E77~ DB #18+1,#24+1,#3C+1,0
1507+++8E77~ TCOLD_1 DB #5C+1,0
1508+++8E77~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
1509+++8E77~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
1510+++8E77~ TCNEW_3 DB #56+1
1511+++8E77~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
1512+++8E77~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
1513+++8E77~ DB #BC+1,#BE+1,0
1514+++8E77~ TCNEW_1 EQU TCOLD_1
1515+++8E77~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
1516+++8E77~ DB #BA+1,#BC+1,#BE+1,0
1517+++8E77~ 1518+++8E77~ PT3EMPTYORN EQU $-1
1519+++8E77~ DB 1,0
1520+++8E77~ 1521+++8E77~ ;first 12 values of tone tables (packed)
1522+++8E77~ 1523+++8E77~ T_PACK DB #06EC*2/256,#06EC*2&255
1524+++8E77~ DB #0755-#06EC
1525+++8E77~ DB #07C5-#0755
1526+++8E77~ DB #083B-#07C5
1527+++8E77~ DB #08B8-#083B
1528+++8E77~ DB #093D-#08B8
1529+++8E77~ DB #09CA-#093D
1530+++8E77~ DB #0A5F-#09CA
1531+++8E77~ DB #0AFC-#0A5F
1532+++8E77~ DB #0BA4-#0AFC
1533+++8E77~ DB #0C55-#0BA4
1534+++8E77~ DB #0D10-#0C55
1535+++8E77~ DB #066D*2/256,#066D*2&255
1536+++8E77~ DB #06CF-#066D
1537+++8E77~ DB #0737-#06CF
1538+++8E77~ DB #07A4-#0737
1539+++8E77~ DB #0819-#07A4
1540+++8E77~ DB #0894-#0819
1541+++8E77~ DB #0917-#0894
1542+++8E77~ DB #09A1-#0917
1543+++8E77~ DB #0A33-#09A1
1544+++8E77~ DB #0ACF-#0A33
1545+++8E77~ DB #0B73-#0ACF
1546+++8E77~ DB #0C22-#0B73
1547+++8E77~ DB #0CDA-#0C22
1548+++8E77~ DB #0704*2/256,#0704*2&255
1549+++8E77~ DB #076E-#0704
1550+++8E77~ DB #07E0-#076E
1551+++8E77~ DB #0858-#07E0
1552+++8E77~ DB #08D6-#0858
1553+++8E77~ DB #095C-#08D6
1554+++8E77~ DB #09EC-#095C
1555+++8E77~ DB #0A82-#09EC
1556+++8E77~ DB #0B22-#0A82
1557+++8E77~ DB #0BCC-#0B22
1558+++8E77~ DB #0C80-#0BCC
1559+++8E77~ DB #0D3E-#0C80
1560+++8E77~ DB #07E0*2/256,#07E0*2&255
1561+++8E77~ DB #0858-#07E0
1562+++8E77~ DB #08E0-#0858
1563+++8E77~ DB #0960-#08E0
1564+++8E77~ DB #09F0-#0960
1565+++8E77~ DB #0A88-#09F0
1566+++8E77~ DB #0B28-#0A88
1567+++8E77~ DB #0BD8-#0B28
1568+++8E77~ DB #0C80-#0BD8
1569+++8E77~ DB #0D60-#0C80
1570+++8E77~ DB #0E10-#0D60
1571+++8E77~ DB #0EF8-#0E10
1572+++8E77~ 1573+++8E77~ ;vars from here can be stripped
1574+++8E77~ ;you can move VARS to any other address
1575+++8E77~ 1576+++8E77~ VARS
1577+++8E77~ 1578+++8E77~ is_ts DB 0
1579+++8E77~ 1580+++8E77~ ;ChannelsVars
1581+++8E77~ STRUCT CHP
1582+++8E77~ ;reset group
1583+++8E77~ PsInOr DB 0
1584+++8E77~ PsInSm DB 0
1585+++8E77~ CrAmSl DB 0
1586+++8E77~ CrNsSl DB 0
1587+++8E77~ CrEnSl DB 0
1588+++8E77~ TSlCnt DB 0
1589+++8E77~ CrTnSl DW 0
1590+++8E77~ TnAcc DW 0
1591+++8E77~ COnOff DB 0
1592+++8E77~ ;reset group
1593+++8E77~ 1594+++8E77~ OnOffD DB 0
1595+++8E77~ 1596+++8E77~ ;IX for PTDECOD here (+12)
1597+++8E77~ OffOnD DB 0
1598+++8E77~ OrnPtr DW 0
1599+++8E77~ SamPtr DW 0
1600+++8E77~ NNtSkp DB 0
1601+++8E77~ Note DB 0
1602+++8E77~ SlToNt DB 0
1603+++8E77~ Env_En DB 0
1604+++8E77~ Flags DB 0
1605+++8E77~ ;Enabled - 0, SimpleGliss - 2
1606+++8E77~ TnSlDl DB 0
1607+++8E77~ TSlStp DW 0
1608+++8E77~ TnDelt DW 0
1609+++8E77~ NtSkCn DB 0
1610+++8E77~ Volume DB 0
1611+++8E77~ ENDS
1612+++8E77~ 1613+++8E77~ STRUCT VRS
1614+++8E77~ 1615+++8E77~ ;IF not works in STRUCT in SjASM :(
1616+++8E77~ ; IF CurPosCounter
1617+++8E77~ CurPos DB 0
1618+++8E77~ PosSub DB 0
1619+++8E77~ ; ENDIF
1620+++8E77~ 1621+++8E77~ ModNum DB 0 ;bit0: ChipNum
1622+++8E77~ ;bit1: 1-reversed patterns order (AlCo TS)
1623+++8E77~ 1624+++8E77~ ChanA DS CHP
1625+++8E77~ ChanB DS CHP
1626+++8E77~ ChanC DS CHP
1627+++8E77~ 1628+++8E77~ ;GlobalVars
1629+++8E77~ MODADDR DW 0
1630+++8E77~ OrnPtrs DW 0
1631+++8E77~ SamPtrs DW 0
1632+++8E77~ PatsPtr DW 0
1633+++8E77~ AdInPtA DW 0
1634+++8E77~ AdInPtB DW 0
1635+++8E77~ AdInPtC DW 0
1636+++8E77~ CrPsPtr DW 0
1637+++8E77~ LPosPtr DW 0
1638+++8E77~ Delay DB 0
1639+++8E77~ DelyCnt DB 0
1640+++8E77~ ESldAdd DW 0
1641+++8E77~ CurESld DW 0
1642+++8E77~ Env_Del DB 0
1643+++8E77~ CurEDel DB 0
1644+++8E77~ Ns_Base DB 0
1645+++8E77~ AddToNs DB 0
1646+++8E77~ AddToEn DB 0
1647+++8E77~ EnvBase DW 0
1648+++8E77~ AYREGS DS 14
1649+++8E77~ ENDS
1650+++8E77~ 1651+++8E77~ VARS1 DS VRS
1652+++8E77~ VARS2 DS VRS
1653+++8E77~ 1654+++8E77~ VT_ EQU $-16
1655+++8E77~ DS 256-16 ;CreatedVolumeTableAddress
1656+++8E77~ 1657+++8E77~ T1_ EQU VT_+16 ;Tone tables data depacked here
1658+++8E77~ 1659+++8E77~ T_OLD_1 EQU T1_
1660+++8E77~ T_OLD_2 EQU T_OLD_1+24
1661+++8E77~ T_OLD_3 EQU T_OLD_2+24
1662+++8E77~ T_OLD_0 EQU T_OLD_3+2
1663+++8E77~ T_NEW_0 EQU T_OLD_0
1664+++8E77~ T_NEW_1 EQU T_OLD_1
1665+++8E77~ T_NEW_2 EQU T_NEW_0+24
1666+++8E77~ T_NEW_3 EQU T_OLD_3
1667+++8E77~ 1668+++8E77~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
1669+++8E77~ 1670+++8E77~ NT_ DS 192 ;CreatedNoteTableAddress
1671+++8E77~ 1672+++8E77~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
1673+++8E77~ 1674+++8E77~ VARSEND EQU $
1675+++8E77~ MDLADDR EQU $
1676+++8E77~ 1677+++8E77~ DISPLAY "PTS player size=",$-START
1678+++8E77~ 1679+++8E77~ ;Release 0 steps:
1680+++8E77~ ;04/21/2007
1681+++8E77~ ;Works start (PTxPlay adaptation); first beta.
1682+++8E77~ ;04/22/2007
1683+++8E77~ ;Job finished; beta-testing.
1684+++8E77~ ;04/23/2007
1685+++8E77~ ;PT v3.7 TS mode corrected (after AlCo remarks).
1686+++8E77~ ;04/29/2007
1687+++8E77~ ;Added 1.XX and 2.XX special commands interpretation for PT3
1688+++8E77~ ;modules of v3.7+.
1689+++8E77~ 1690+++8E77~ ;Size (minimal build for ZX Spectrum):
1691+++8E77~ ;Code block #908 bytes
1692+++8E77~ ;Variables #2BF bytes (can be stripped)
1693+++8E77~ ;Total size #908+#2BF=#BC7 (3015) bytes
1694+++8E77~ 1695+++8E77~ ENDMOD
1696+++8E77~ 1697+++8E77 endif
1698+++8E77
0099++ 8E77 PT3.Play=PTS.PLAY
0100++ 8E77 PT3.Mute=PTS.MUTE
0101++ 8E77 PT3.End
0102++ 8E77
0103++ 8E77 display "PT3 module size: ",PT3.End-PT3.Start
0104++ 8E77
0105++ 8E77 endif
0106++ 8E77
0419+ 8E77 include "pt2.asm"
0001++ 8E77 ifndef _pt2_asm_defined
0002++ 8E77 define _pt2_asm_defined
0003++ 8E77
0004++ 8E77 module PT2
0005++ 8E77
0006++ 8E77 struct Header
0007++ 8E77~ Tempo db 0 ;02-ff
0008++ 8E77~ Length db 0 ;01-ff
0009++ 8E77~ Loop db 0 ;00-fe
0010++ 8E77~ Samples
0011++ 8E77~ ds 64 ;(? 00-36){32}
0012++ 8E77~ Ornaments
0013++ 8E77~ ds 32 ;(? 00-36){16}
0014++ 8E77~ Patterns
0015++ 8E77~ dw 0 ;? 00-01
0016++ 8E77~ Name ds 30 ;?
0017++ 8E77~ Positions
0018++ 8E77~ db 0 ;00-1f
0019++ 8E77~ db 0 ;ff|00-1f
0020++ 8E77 ends
0021++ 8E77
0022++ 8E77 Start
0023++ 8E77 ifndef NoPrologue
0024++ 8E77~ ld hl,End
0025++ 8E77~ jr Init
0026++ 8E77~ jp PTS.PLAY
0027++ 8E77~ jp PTS.MUTE
0028++ 8E77 endif
0029++ 8E77
0030++ 8E77 3E 02 Init ld a,PTS.SETUP.PT2
0031++ 8E79 C3 6C 82 jp PTS.INIT
0032++ 8E7C
0033++ 8E7C ifdef HaveFormatCheck
0034++ 8E7C include "format.asm"
0001+++8E7C ;some format checking macros
0002+++8E7C ifndef _format_asm_defined
0003+++8E7C~ define _format_asm_defined
0004+++8E7C~ 0005+++8E7C~ macro LessOrEqual number
0006+++8E7C~ ld a,number
0007+++8E7C~ cp (hl)
0008+++8E7C~ inc hl
0009+++8E7C~ ret c
0010+++8E7C~ endm
0011+++8E7C~
0012+++8E7C~ macro Greater number
0013+++8E7C~ ld a,(hl)
0014+++8E7C~ inc hl
0015+++8E7C~ cp number
0016+++8E7C~ ret c
0017+++8E7C~ endm
0018+++8E7C~
0019+++8E7C~ macro AnyByte
0020+++8E7C~ inc hl
0021+++8E7C~ endm
0022+++8E7C~
0023+++8E7C~ macro AnyBytes count
0024+++8E7C~ if count > 7
0025+++8E7C~ ld a,l
0026+++8E7C~ add a,count
0027+++8E7C~ ld l,a
0028+++8E7C~ adc a,h
0029+++8E7C~ sub l
0030+++8E7C~ ld h,a
0031+++8E7C~ else
0032+++8E7C~ dup count
0033+++8E7C~ inc hl
0034+++8E7C~ edup
0035+++8E7C~ endif
0036+++8E7C~ endm
0037+++8E7C~
0038+++8E7C~ macro EqualTo number
0039+++8E7C~ ld a,number
0040+++8E7C~ cp (hl)
0041+++8E7C~ inc hl
0042+++8E7C~ ret nz
0043+++8E7C~ endm
0044+++8E7C~ 0045+++8E7C endif
0046+++8E7C
0035++ 8E7C
0036++ 8E7C ;in HL - module addr
0037++ 8E7C ;out Z - is pt2
0038++ 8E7C CheckFormat
0039++ 8E7C ;Tempo
0040++ 8E7C Greater 2
0040++ 8E7C 7E > ld a,(hl)
0040++ 8E7D 23 > inc hl
0040++ 8E7E FE 02 > cp number
0040++ 8E80 D8 > ret c
0041++ 8E81 ;Length
0042++ 8E81 Greater 1
0042++ 8E81 7E > ld a,(hl)
0042++ 8E82 23 > inc hl
0042++ 8E83 FE 01 > cp number
0042++ 8E85 D8 > ret c
0043++ 8E86 ;Loop
0044++ 8E86 LessOrEqual 254
0044++ 8E86 3E FE > ld a,number
0044++ 8E88 BE > cp (hl)
0044++ 8E89 23 > inc hl
0044++ 8E8A D8 > ret c
0045++ 8E8B ;Samples+Ornaments
0046++ 8E8B 06 30 ld b,(Header.Patterns-Header.Samples)/2
0047++ 8E8D .samorns
0048++ 8E8D AnyByte
0048++ 8E8D 23 > inc hl
0049++ 8E8E LessOrEqual #36
0049++ 8E8E 3E 36 > ld a,number
0049++ 8E90 BE > cp (hl)
0049++ 8E91 23 > inc hl
0049++ 8E92 D8 > ret c
0050++ 8E93 10 F8 djnz .samorns
0051++ 8E95 ;Patterns
0052++ 8E95 AnyByte
0052++ 8E95 23 > inc hl
0053++ 8E96 LessOrEqual 1
0053++ 8E96 3E 01 > ld a,number
0053++ 8E98 BE > cp (hl)
0053++ 8E99 23 > inc hl
0053++ 8E9A D8 > ret c
0054++ 8E9B ;Name
0055++ 8E9B AnyBytes Header.Positions-Header.Name
0055++ 8E9B 7D > ld a,l
0055++ 8E9C C6 1E > add a,count
0055++ 8E9E 6F > ld l,a
0055++ 8E9F 8C > adc a,h
0055++ 8EA0 95 > sub l
0055++ 8EA1 67 > ld h,a
0056++ 8EA2 ;Positions
0057++ 8EA2 ;first should be not marker
0058++ 8EA2 LessOrEqual #1f
0058++ 8EA2 3E 1F > ld a,number
0058++ 8EA4 BE > cp (hl)
0058++ 8EA5 23 > inc hl
0058++ 8EA6 D8 > ret c
0059++ 8EA7 06 FF ld b,255 ;max positions
0060++ 8EA9 .positions
0061++ 8EA9 7E ld a,(hl)
0062++ 8EAA FE FF cp 255
0063++ 8EAC C8 ret z ;finish
0064++ 8EAD LessOrEqual #1f
0064++ 8EAD 3E 1F > ld a,number
0064++ 8EAF BE > cp (hl)
0064++ 8EB0 23 > inc hl
0064++ 8EB1 D8 > ret c
0065++ 8EB2 10 F5 djnz .positions
0066++ 8EB4 ;fall through
0067++ 8EB4 7C .fail ld a,h
0068++ 8EB5 A7 and a ;reset Z
0069++ 8EB6 C9 ret
0070++ 8EB7
0071++ 8EB7 display "PT2 checker size: ",$-CheckFormat
0072++ 8EB7 endif
0073++ 8EB7
0074++ 8EB7 endmod
0075++ 8EB7
0076++ 8EB7 include "PTSPlay.asm"
0001+++8EB7 ifndef _pts_asm_defined
0002+++8EB7~ define _pts_asm_defined
0003+++8EB7~ 0004+++8EB7~ MODULE PTS
0005+++8EB7~
0006+++8EB7~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum
0007+++8EB7~ ;(c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>
0008+++8EB7~ ;Specially for AlCo
0009+++8EB7~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/)
0010+++8EB7~ 0011+++8EB7~ ;Release number
0012+++8EB7~ Release EQU "0"
0013+++8EB7~ 0014+++8EB7~ ;Conditional assembly
0015+++8EB7~ ;1) Current position counters at (Vars1+0) and (Vars2+0)
0016+++8EB7~ CurPosCounter=0
0017+++8EB7~ ;2) Allow channels allocation bits at (SETUP)
0018+++8EB7~ ACBBAC=0
0019+++8EB7~ ;3) Allow loop checking and disabling
0020+++8EB7~ LoopChecker=0
0021+++8EB7~ ;4) Insert official identificator
0022+++8EB7~ Id=0
0023+++8EB7~ ;5) Set IY for correct return to ZX Basic
0024+++8EB7~ Basic=0
0025+++8EB7~ 0026+++8EB7~ ;Features
0027+++8EB7~ ;--------
0028+++8EB7~ ;-Can be compiled at any address (i.e. no need rounding ORG
0029+++8EB7~ ; address).
0030+++8EB7~ ;-Variables (VARS) can be located at any address (not only after
0031+++8EB7~ ; code block).
0032+++8EB7~ ;-INIT subprogram checks PT3-module version and rightly
0033+++8EB7~ ; generates both note and volume tables outside of code block
0034+++8EB7~ ; (in VARS).
0035+++8EB7~ ;-Two portamento (spc. command 3xxx) algorithms (depending of
0036+++8EB7~ ; PT3 module version).
0037+++8EB7~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
0038+++8EB7~ ; and higher).
0039+++8EB7~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
0040+++8EB7~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard.
0041+++8EB7~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
0042+++8EB7~ ;-See also notes at the end of this source code.
0043+++8EB7~ 0044+++8EB7~ ;Limitations
0045+++8EB7~ ;-----------
0046+++8EB7~ ;-Can run in RAM only (self-modified code is used).
0047+++8EB7~ ;-PT2 position list must be end by #FF marker only.
0048+++8EB7~ 0049+++8EB7~ ;Warning!!! PLAY subprogram can crash if no module are loaded
0050+++8EB7~ ;into RAM or INIT subprogram was not called before.
0051+++8EB7~ 0052+++8EB7~ ;Call MUTE or INIT one more time to mute sound after stopping
0053+++8EB7~ ;playing
0054+++8EB7~ 0055+++8EB7~ TonA EQU 0
0056+++8EB7~ TonB EQU 2
0057+++8EB7~ TonC EQU 4
0058+++8EB7~ Noise EQU 6
0059+++8EB7~ Mixer EQU 7
0060+++8EB7~ AmplA EQU 8
0061+++8EB7~ AmplB EQU 9
0062+++8EB7~ AmplC EQU 10
0063+++8EB7~ Env EQU 11
0064+++8EB7~ EnvTp EQU 13
0065+++8EB7~ 0066+++8EB7~ START
0067+++8EB7~ 0068+++8EB7~ SETUP.NOLOOP EQU 1
0069+++8EB7~ SETUP.PT2 EQU 2
0070+++8EB7~ SETUP.ACB EQU 4
0071+++8EB7~ SETUP.BAC EQU 8
0072+++8EB7~ SETUP.TS02 EQU 16
0073+++8EB7~ SETUP.TSPT3 EQU 32
0074+++8EB7~ 0075+++8EB7~ SETUP DB 0 ;set bit0, if you want to play without looping
0076+++8EB7~ ;(optional);
0077+++8EB7~ ;set bit1 for PT2 and reset for PT3 before
0078+++8EB7~ ;calling INIT;
0079+++8EB7~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional);
0080+++8EB7~ ;bits4-5: %00-no TS, %01-2 modules TS, %10-
0081+++8EB7~ ;autodetect PT3 TS-format by AlCo (PT 3.7+);
0082+++8EB7~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not
0083+++8EB7~ ;documented and must be converted to new standard.
0084+++8EB7~ ;bit6 is set each time, when loop point of 2nd TS
0085+++8EB7~ ;module is passed (optional).
0086+++8EB7~ ;bit7 is set each time, when loop point of 1st TS
0087+++8EB7~ ;or of single module is passed (optional).
0088+++8EB7~ 0089+++8EB7~ ;Identifier
0090+++8EB7~ IF Id
0091+++8EB7~ DB "=UniPT2/PT3/TS-Player r.",Release,"="
0092+++8EB7~ ENDIF
0093+++8EB7~ 0094+++8EB7~ IF LoopChecker
0095+++8EB7~ CHECKLP LD HL,SETUP
0096+++8EB7~ BIT 0,(IY-100+VRS.ModNum)
0097+++8EB7~ JR Z,CHL1
0098+++8EB7~ SET 6,(HL)
0099+++8EB7~ JR CHL2
0100+++8EB7~ CHL1 SET 7,(HL)
0101+++8EB7~ CHL2 BIT 0,(HL)
0102+++8EB7~ RET Z
0103+++8EB7~ POP HL
0104+++8EB7~ INC (IY-100+VRS.DelyCnt)
0105+++8EB7~ INC (IY-100+VRS.ChanA+CHP.NtSkCn)
0106+++8EB7~ XOR A
0107+++8EB7~ LD (IY-100+VRS.AYREGS+AmplA),A
0108+++8EB7~ LD (IY-100+VRS.AYREGS+AmplB),A
0109+++8EB7~ LD (IY-100+VRS.AYREGS+AmplC),A
0110+++8EB7~ RET
0111+++8EB7~ ENDIF
0112+++8EB7~ 0113+++8EB7~ MUTE XOR A
0114+++8EB7~ LD H,A
0115+++8EB7~ LD L,A
0116+++8EB7~ LD (VARS1+VRS.AYREGS+AmplA),A
0117+++8EB7~ LD (VARS1+VRS.AYREGS+AmplB),HL
0118+++8EB7~ LD (VARS2+VRS.AYREGS+AmplA),A
0119+++8EB7~ LD (VARS2+VRS.AYREGS+AmplB),HL
0120+++8EB7~ JP ROUT
0121+++8EB7~ 0122+++8EB7~ INIT
0123+++8EB7~ ;HL - AddressOfModule
0124+++8EB7~ ;DE - AddresOf2ndModule
0125+++8EB7~ ;A - mode
0126+++8EB7~ PUSH DE
0127+++8EB7~ PUSH HL
0128+++8EB7~ LD HL,VARS
0129+++8EB7~ LD (HL),0
0130+++8EB7~ LD DE,VARS+1
0131+++8EB7~ LD BC,VAR0END-VARS-1
0132+++8EB7~ LDIR
0133+++8EB7~ INC HL
0134+++8EB7~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero
0135+++8EB7~ LD (VARS2+VRS.AdInPtA),HL
0136+++8EB7~ 0137+++8EB7~ POP HL
0138+++8EB7~ LD IY,VARS1+100
0139+++8EB7~ LD (SETUP),A
0140+++8EB7~ AND SETUP.PT2
0141+++8EB7~ JP NZ,I_PT2
0142+++8EB7~ 0143+++8EB7~ CALL INITPT3
0144+++8EB7~ LD HL,(e_-SamCnv-2)*256+#18
0145+++8EB7~ LD (SamCnv),HL
0146+++8EB7~ LD A,#BA
0147+++8EB7~ LD (OrnCP),A
0148+++8EB7~ LD (SamCP),A
0149+++8EB7~ LD A,#7B
0150+++8EB7~ LD (OrnLD),A
0151+++8EB7~ LD (SamLD),A
0152+++8EB7~ LD A,#87
0153+++8EB7~ LD (SamClc2),A
0154+++8EB7~ POP HL
0155+++8EB7~ ;Use version and ton table of 1st module
0156+++8EB7~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
0157+++8EB7~ SUB #30
0158+++8EB7~ JR C,L20
0159+++8EB7~ CP 10
0160+++8EB7~ JR C,L21
0161+++8EB7~ L20 LD A,6
0162+++8EB7~ L21 LD (Version),A
0163+++8EB7~ PUSH AF ;VolTable version
0164+++8EB7~ CP 4
0165+++8EB7~ LD A,(IX+99-100) ;TONE TABLE NUMBER
0166+++8EB7~ RLA
0167+++8EB7~ AND 7
0168+++8EB7~ PUSH AF ;NoteTable number
0169+++8EB7~ 0170+++8EB7~ LD IY,VARS2+100
0171+++8EB7~ LD A,(SETUP)
0172+++8EB7~ AND SETUP.TS02|SETUP.TSPT3
0173+++8EB7~ JR Z,NOTS
0174+++8EB7~ CP SETUP.TS02
0175+++8EB7~ JR Z,TwoPT3s
0176+++8EB7~ LD A,(Version)
0177+++8EB7~ CP 7
0178+++8EB7~ JR C,NOTS
0179+++8EB7~ LD A,(IX+98-100) ;ALCO TS MARKER
0180+++8EB7~ CP #20
0181+++8EB7~ JR Z,NOTS
0182+++8EB7~ LD HL,VARS1
0183+++8EB7~ LD DE,VARS2
0184+++8EB7~ LD BC,VRS
0185+++8EB7~ LDIR
0186+++8EB7~ SET 1,(IY-100+VRS.ModNum)
0187+++8EB7~ LD C,A
0188+++8EB7~ ADD A,A
0189+++8EB7~ ADD A,C
0190+++8EB7~ SUB 2
0191+++8EB7~ LD (TSSub),A
0192+++8EB7~ JR AlCoTS_
0193+++8EB7~ TwoPT3s CALL INITPT3
0194+++8EB7~ AlCoTS_ LD A,1
0195+++8EB7~ LD (is_ts),A
0196+++8EB7~ SET 0,(IY-100+VRS.ModNum)
0197+++8EB7~ 0198+++8EB7~ NOTS LD BC,PT3PD
0199+++8EB7~ LD HL,0
0200+++8EB7~ LD DE,PT3EMPTYORN
0201+++8EB7~ JR INITCOMMON
0202+++8EB7~ 0203+++8EB7~ I_PT2 CALL INITPT2
0204+++8EB7~ LD HL,#51CB
0205+++8EB7~ LD (SamCnv),HL
0206+++8EB7~ LD A,#BB
0207+++8EB7~ LD (OrnCP),A
0208+++8EB7~ LD (SamCP),A
0209+++8EB7~ LD A,#7A
0210+++8EB7~ LD (OrnLD),A
0211+++8EB7~ LD (SamLD),A
0212+++8EB7~ LD A,#80
0213+++8EB7~ LD (SamClc2),A
0214+++8EB7~ POP HL
0215+++8EB7~ LD A,5
0216+++8EB7~ LD (Version),A
0217+++8EB7~ PUSH AF
0218+++8EB7~ LD A,2
0219+++8EB7~ PUSH AF
0220+++8EB7~ 0221+++8EB7~ LD A,(SETUP)
0222+++8EB7~ AND SETUP.TS02|SETUP.TSPT3
0223+++8EB7~ JR Z,NOTS2
0224+++8EB7~ 0225+++8EB7~ LD IY,VARS2+100
0226+++8EB7~ LD A,1
0227+++8EB7~ LD (is_ts),A
0228+++8EB7~ SET 0,(IY-100+VRS.ModNum)
0229+++8EB7~ CALL INITPT2
0230+++8EB7~ 0231+++8EB7~ NOTS2 LD BC,PT2PD
0232+++8EB7~ LD HL,#8687
0233+++8EB7~ LD DE,PT2EMPTYORN
0234+++8EB7~ 0235+++8EB7~ INITCOMMON
0236+++8EB7~ 0237+++8EB7~ IF Basic
0238+++8EB7~ LD IY,#5C3A
0239+++8EB7~ ENDIF
0240+++8EB7~ 0241+++8EB7~ LD (PTDEC),BC
0242+++8EB7~ LD (PsCalc),HL
0243+++8EB7~ PUSH DE
0244+++8EB7~ 0245+++8EB7~ ;note table data depacker
0246+++8EB7~ ;(c) Ivan Roshin
0247+++8EB7~ LD DE,T_PACK
0248+++8EB7~ LD BC,T1_+(2*49)-1
0249+++8EB7~ TP_0 LD A,(DE)
0250+++8EB7~ INC DE
0251+++8EB7~ CP 15*2
0252+++8EB7~ JR NC,TP_1
0253+++8EB7~ LD H,A
0254+++8EB7~ LD A,(DE)
0255+++8EB7~ LD L,A
0256+++8EB7~ INC DE
0257+++8EB7~ JR TP_2
0258+++8EB7~ TP_1 PUSH DE
0259+++8EB7~ LD D,0
0260+++8EB7~ LD E,A
0261+++8EB7~ ADD HL,DE
0262+++8EB7~ ADD HL,DE
0263+++8EB7~ POP DE
0264+++8EB7~ TP_2 LD A,H
0265+++8EB7~ LD (BC),A
0266+++8EB7~ DEC BC
0267+++8EB7~ LD A,L
0268+++8EB7~ LD (BC),A
0269+++8EB7~ DEC BC
0270+++8EB7~ SUB (#F8*2)&255
0271+++8EB7~ JR NZ,TP_0
0272+++8EB7~ 0273+++8EB7~ INC A
0274+++8EB7~ LD (VARS1+VRS.DelyCnt),A
0275+++8EB7~ LD (VARS2+VRS.DelyCnt),A
0276+++8EB7~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
0277+++8EB7~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL
0278+++8EB7~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL
0279+++8EB7~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL
0280+++8EB7~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL
0281+++8EB7~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL
0282+++8EB7~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL
0283+++8EB7~ POP HL
0284+++8EB7~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL
0285+++8EB7~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL
0286+++8EB7~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL
0287+++8EB7~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL
0288+++8EB7~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL
0289+++8EB7~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL
0290+++8EB7~ 0291+++8EB7~ POP AF
0292+++8EB7~ 0293+++8EB7~ ;NoteTableCreator (c) Ivan Roshin
0294+++8EB7~ ;A - NoteTableNumber*2+VersionForNoteTable
0295+++8EB7~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
0296+++8EB7~ 0297+++8EB7~ LD HL,NT_DATA
0298+++8EB7~ LD D,0
0299+++8EB7~ ADD A,A
0300+++8EB7~ LD E,A
0301+++8EB7~ ADD HL,DE
0302+++8EB7~ LD E,(HL)
0303+++8EB7~ INC HL
0304+++8EB7~ SRL E
0305+++8EB7~ SBC A,A
0306+++8EB7~ AND #A7 ;#00 (NOP) or #A7 (AND A)
0307+++8EB7~ LD (L3),A
0308+++8EB7~ EX DE,HL
0309+++8EB7~ LD BC,T1_
0310+++8EB7~ ADD HL,BC
0311+++8EB7~ 0312+++8EB7~ LD A,(DE)
0313+++8EB7~ ADD A,T_&255
0314+++8EB7~ LD C,A
0315+++8EB7~ ADC A,T_/256
0316+++8EB7~ SUB C
0317+++8EB7~ LD B,A
0318+++8EB7~ PUSH BC
0319+++8EB7~ LD DE,NT_
0320+++8EB7~ PUSH DE
0321+++8EB7~ 0322+++8EB7~ LD B,12
0323+++8EB7~ L1 PUSH BC
0324+++8EB7~ LD C,(HL)
0325+++8EB7~ INC HL
0326+++8EB7~ PUSH HL
0327+++8EB7~ LD B,(HL)
0328+++8EB7~ 0329+++8EB7~ PUSH DE
0330+++8EB7~ EX DE,HL
0331+++8EB7~ LD DE,23
0332+++8EB7~ LD IXH,8
0333+++8EB7~ 0334+++8EB7~ L2 SRL B
0335+++8EB7~ RR C
0336+++8EB7~ L3 DB #19 ;AND A or NOP
0337+++8EB7~ LD A,C
0338+++8EB7~ ADC A,D ;=ADC 0
0339+++8EB7~ LD (HL),A
0340+++8EB7~ INC HL
0341+++8EB7~ LD A,B
0342+++8EB7~ ADC A,D
0343+++8EB7~ LD (HL),A
0344+++8EB7~ ADD HL,DE
0345+++8EB7~ DEC IXH
0346+++8EB7~ JR NZ,L2
0347+++8EB7~ 0348+++8EB7~ POP DE
0349+++8EB7~ INC DE
0350+++8EB7~ INC DE
0351+++8EB7~ POP HL
0352+++8EB7~ INC HL
0353+++8EB7~ POP BC
0354+++8EB7~ DJNZ L1
0355+++8EB7~ 0356+++8EB7~ POP HL
0357+++8EB7~ POP DE
0358+++8EB7~ 0359+++8EB7~ LD A,E
0360+++8EB7~ CP TCOLD_1&255
0361+++8EB7~ JR NZ,CORR_1
0362+++8EB7~ LD A,#FD
0363+++8EB7~ LD (NT_+#2E),A
0364+++8EB7~ 0365+++8EB7~ CORR_1 LD A,(DE)
0366+++8EB7~ AND A
0367+++8EB7~ JR Z,TC_EXIT
0368+++8EB7~ RRA
0369+++8EB7~ PUSH AF
0370+++8EB7~ ADD A,A
0371+++8EB7~ LD C,A
0372+++8EB7~ ADD HL,BC
0373+++8EB7~ POP AF
0374+++8EB7~ JR NC,CORR_2
0375+++8EB7~ DEC (HL)
0376+++8EB7~ DEC (HL)
0377+++8EB7~ CORR_2 INC (HL)
0378+++8EB7~ AND A
0379+++8EB7~ SBC HL,BC
0380+++8EB7~ INC DE
0381+++8EB7~ JR CORR_1
0382+++8EB7~ 0383+++8EB7~ TC_EXIT
0384+++8EB7~ 0385+++8EB7~ POP AF
0386+++8EB7~ 0387+++8EB7~ ;VolTableCreator (c) Ivan Roshin
0388+++8EB7~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
0389+++8EB7~ ;5.. - 2.x,3.5x..3.6x..VTII1.0)
0390+++8EB7~ 0391+++8EB7~ CP 5
0392+++8EB7~ LD HL,#11
0393+++8EB7~ LD D,H
0394+++8EB7~ LD E,H
0395+++8EB7~ LD A,#17
0396+++8EB7~ JR NC,M1
0397+++8EB7~ DEC L
0398+++8EB7~ LD E,L
0399+++8EB7~ XOR A
0400+++8EB7~ M1 LD (M2),A
0401+++8EB7~ 0402+++8EB7~ LD IX,VT_+16
0403+++8EB7~ 0404+++8EB7~ LD C,#F
0405+++8EB7~ INITV2 PUSH HL
0406+++8EB7~ 0407+++8EB7~ ADD HL,DE
0408+++8EB7~ EX DE,HL
0409+++8EB7~ SBC HL,HL
0410+++8EB7~ 0411+++8EB7~ LD B,#10
0412+++8EB7~ INITV1 LD A,L
0413+++8EB7~ M2 DB #7D
0414+++8EB7~ LD A,H
0415+++8EB7~ ADC A,0
0416+++8EB7~ LD (IX),A
0417+++8EB7~ INC IX
0418+++8EB7~ ADD HL,DE
0419+++8EB7~ DJNZ INITV1
0420+++8EB7~ 0421+++8EB7~ POP HL
0422+++8EB7~ LD A,E
0423+++8EB7~ CP #77
0424+++8EB7~ JR NZ,M3
0425+++8EB7~ INC E
0426+++8EB7~ M3 DEC C
0427+++8EB7~ JR NZ,INITV2
0428+++8EB7~ 0429+++8EB7~ JP ROUT
0430+++8EB7~ 0431+++8EB7~ INITPT3 CALL SETMDAD
0432+++8EB7~ PUSH HL
0433+++8EB7~ LD DE,100
0434+++8EB7~ ADD HL,DE
0435+++8EB7~ LD A,(HL)
0436+++8EB7~ LD (IY-100+VRS.Delay),A
0437+++8EB7~ PUSH HL
0438+++8EB7~ POP IX
0439+++8EB7~ ADD HL,DE
0440+++8EB7~ CALL SETCPPT
0441+++8EB7~ LD E,(IX+102-100)
0442+++8EB7~ INC HL
0443+++8EB7~ 0444+++8EB7~ IF CurPosCounter
0445+++8EB7~ LD (IY-100+VRS.PosSub),L
0446+++8EB7~ ENDIF
0447+++8EB7~ 0448+++8EB7~ ADD HL,DE
0449+++8EB7~ CALL SETLPPT
0450+++8EB7~ POP DE
0451+++8EB7~ LD L,(IX+103-100)
0452+++8EB7~ LD H,(IX+104-100)
0453+++8EB7~ ADD HL,DE
0454+++8EB7~ CALL SETPTPT
0455+++8EB7~ LD HL,169
0456+++8EB7~ ADD HL,DE
0457+++8EB7~ CALL SETORPT
0458+++8EB7~ LD HL,105
0459+++8EB7~ ADD HL,DE
0460+++8EB7~ 0461+++8EB7~ SETSMPT LD (IY-100+VRS.SamPtrs),L
0462+++8EB7~ LD (IY-100+VRS.SamPtrs+1),H
0463+++8EB7~ RET
0464+++8EB7~ 0465+++8EB7~ INITPT2 LD A,(HL)
0466+++8EB7~ LD (IY-100+VRS.Delay),A
0467+++8EB7~ PUSH HL
0468+++8EB7~ PUSH HL
0469+++8EB7~ PUSH HL
0470+++8EB7~ INC HL
0471+++8EB7~ INC HL
0472+++8EB7~ LD A,(HL)
0473+++8EB7~ INC HL
0474+++8EB7~ CALL SETSMPT
0475+++8EB7~ LD E,(HL)
0476+++8EB7~ INC HL
0477+++8EB7~ LD D,(HL)
0478+++8EB7~ POP HL
0479+++8EB7~ AND A
0480+++8EB7~ SBC HL,DE
0481+++8EB7~ CALL SETMDAD
0482+++8EB7~ POP HL
0483+++8EB7~ LD DE,67
0484+++8EB7~ ADD HL,DE
0485+++8EB7~ CALL SETORPT
0486+++8EB7~ LD E,32
0487+++8EB7~ ADD HL,DE
0488+++8EB7~ LD C,(HL)
0489+++8EB7~ INC HL
0490+++8EB7~ LD B,(HL)
0491+++8EB7~ LD E,30
0492+++8EB7~ ADD HL,DE
0493+++8EB7~ CALL SETCPPT
0494+++8EB7~ LD E,A
0495+++8EB7~ INC HL
0496+++8EB7~ 0497+++8EB7~ IF CurPosCounter
0498+++8EB7~ LD (IY-100+VRS.PosSub),L
0499+++8EB7~ ENDIF
0500+++8EB7~ 0501+++8EB7~ ADD HL,DE
0502+++8EB7~ CALL SETLPPT
0503+++8EB7~ POP HL
0504+++8EB7~ ADD HL,BC
0505+++8EB7~ 0506+++8EB7~ SETPTPT LD (IY-100+VRS.PatsPtr),L
0507+++8EB7~ LD (IY-100+VRS.PatsPtr+1),H
0508+++8EB7~ RET
0509+++8EB7~ 0510+++8EB7~ SETMDAD LD (IY-100+VRS.MODADDR),L
0511+++8EB7~ LD (IY-100+VRS.MODADDR+1),H
0512+++8EB7~ RET
0513+++8EB7~ 0514+++8EB7~ SETORPT LD (IY-100+VRS.OrnPtrs),L
0515+++8EB7~ LD (IY-100+VRS.OrnPtrs+1),H
0516+++8EB7~ RET
0517+++8EB7~ 0518+++8EB7~ SETCPPT LD (IY-100+VRS.CrPsPtr),L
0519+++8EB7~ LD (IY-100+VRS.CrPsPtr+1),H
0520+++8EB7~ RET
0521+++8EB7~ 0522+++8EB7~ SETLPPT LD (IY-100+VRS.LPosPtr),L
0523+++8EB7~ LD (IY-100+VRS.LPosPtr+1),H
0524+++8EB7~ RET
0525+++8EB7~ 0526+++8EB7~ SETENBS LD (IY-100+VRS.EnvBase),L
0527+++8EB7~ LD (IY-100+VRS.EnvBase+1),H
0528+++8EB7~ RET
0529+++8EB7~ 0530+++8EB7~ SETESLD LD (IY-100+VRS.CurESld),L
0531+++8EB7~ LD (IY-100+VRS.CurESld+1),H
0532+++8EB7~ RET
0533+++8EB7~ 0534+++8EB7~ GETIX PUSH IY
0535+++8EB7~ POP IX
0536+++8EB7~ ADD IX,DE
0537+++8EB7~ RET
0538+++8EB7~ 0539+++8EB7~ PTDECOD CALL GETIX
0540+++8EB7~ PTDEC EQU $+1
0541+++8EB7~ JP #C3C3
0542+++8EB7~ 0543+++8EB7~ ;PT2 pattern decoder
0544+++8EB7~ PD2_SAM CALL SETSAM
0545+++8EB7~ JR PD2_LOOP
0546+++8EB7~ 0547+++8EB7~ PD2_EOff LD (IX-12+CHP.Env_En),A
0548+++8EB7~ JR PD2_LOOP
0549+++8EB7~ 0550+++8EB7~ PD2_ENV LD (IX-12+CHP.Env_En),16
0551+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A
0552+++8EB7~ LD A,(BC)
0553+++8EB7~ INC BC
0554+++8EB7~ LD L,A
0555+++8EB7~ LD A,(BC)
0556+++8EB7~ INC BC
0557+++8EB7~ LD H,A
0558+++8EB7~ CALL SETENBS
0559+++8EB7~ JR PD2_LOOP
0560+++8EB7~ 0561+++8EB7~ PD2_ORN CALL SETORN
0562+++8EB7~ JR PD2_LOOP
0563+++8EB7~ 0564+++8EB7~ PD2_SKIP INC A
0565+++8EB7~ LD (IX-12+CHP.NNtSkp),A
0566+++8EB7~ JR PD2_LOOP
0567+++8EB7~ 0568+++8EB7~ PD2_VOL RRCA
0569+++8EB7~ RRCA
0570+++8EB7~ RRCA
0571+++8EB7~ RRCA
0572+++8EB7~ LD (IX-12+CHP.Volume),A
0573+++8EB7~ JR PD2_LOOP
0574+++8EB7~ 0575+++8EB7~ PD2_DEL CALL C_DELAY
0576+++8EB7~ JR PD2_LOOP
0577+++8EB7~ 0578+++8EB7~ PD2_GLIS SET 2,(IX-12+CHP.Flags)
0579+++8EB7~ INC A
0580+++8EB7~ LD (IX-12+CHP.TnSlDl),A
0581+++8EB7~ LD (IX-12+CHP.TSlCnt),A
0582+++8EB7~ LD A,(BC)
0583+++8EB7~ INC BC
0584+++8EB7~ LD (IX-12+CHP.TSlStp),A
0585+++8EB7~ ADD A,A
0586+++8EB7~ SBC A,A
0587+++8EB7~ LD (IX-12+CHP.TSlStp+1),A
0588+++8EB7~ SCF
0589+++8EB7~ JR PD2_LP2
0590+++8EB7~ 0591+++8EB7~ PT2PD AND A
0592+++8EB7~ 0593+++8EB7~ PD2_LP2 EX AF,AF'
0594+++8EB7~ 0595+++8EB7~ PD2_LOOP LD A,(BC)
0596+++8EB7~ INC BC
0597+++8EB7~ ADD A,#20
0598+++8EB7~ JR Z,PD2_REL
0599+++8EB7~ JR C,PD2_SAM
0600+++8EB7~ ADD A,96
0601+++8EB7~ JR C,PD2_NOTE
0602+++8EB7~ INC A
0603+++8EB7~ JR Z,PD2_EOff
0604+++8EB7~ ADD A,15
0605+++8EB7~ JP Z,PD_FIN
0606+++8EB7~ JR C,PD2_ENV
0607+++8EB7~ ADD A,#10
0608+++8EB7~ JR C,PD2_ORN
0609+++8EB7~ ADD A,#40
0610+++8EB7~ JR C,PD2_SKIP
0611+++8EB7~ ADD A,#10
0612+++8EB7~ JR C,PD2_VOL
0613+++8EB7~ INC A
0614+++8EB7~ JR Z,PD2_DEL
0615+++8EB7~ INC A
0616+++8EB7~ JR Z,PD2_GLIS
0617+++8EB7~ INC A
0618+++8EB7~ JR Z,PD2_PORT
0619+++8EB7~ INC A
0620+++8EB7~ JR Z,PD2_STOP
0621+++8EB7~ LD A,(BC)
0622+++8EB7~ INC BC
0623+++8EB7~ LD (IX-12+CHP.CrNsSl),A
0624+++8EB7~ JR PD2_LOOP
0625+++8EB7~ 0626+++8EB7~ PD2_PORT RES 2,(IX-12+CHP.Flags)
0627+++8EB7~ LD A,(BC)
0628+++8EB7~ INC BC
0629+++8EB7~ INC BC ;ignoring precalc delta to right sound
0630+++8EB7~ INC BC
0631+++8EB7~ SCF
0632+++8EB7~ JR PD2_LP2
0633+++8EB7~ 0634+++8EB7~ PD2_STOP LD (IX-12+CHP.TSlCnt),A
0635+++8EB7~ JR PD2_LOOP
0636+++8EB7~ 0637+++8EB7~ PD2_REL LD (IX-12+CHP.Flags),A
0638+++8EB7~ JR PD2_EXIT
0639+++8EB7~ 0640+++8EB7~ PD2_NOTE LD L,A
0641+++8EB7~ LD A,(IX-12+CHP.Note)
0642+++8EB7~ LD (PrNote+1),A
0643+++8EB7~ LD (IX-12+CHP.Note),L
0644+++8EB7~ XOR A
0645+++8EB7~ LD (IX-12+CHP.TSlCnt),A
0646+++8EB7~ SET 0,(IX-12+CHP.Flags)
0647+++8EB7~ EX AF,AF'
0648+++8EB7~ JR NC,NOGLIS2
0649+++8EB7~ BIT 2,(IX-12+CHP.Flags)
0650+++8EB7~ JR NZ,NOPORT2
0651+++8EB7~ LD (LoStep),A
0652+++8EB7~ ADD A,A
0653+++8EB7~ SBC A,A
0654+++8EB7~ EX AF,AF'
0655+++8EB7~ LD H,A
0656+++8EB7~ LD L,A
0657+++8EB7~ INC A
0658+++8EB7~ CALL SETPORT
0659+++8EB7~ NOPORT2 LD (IX-12+CHP.TSlCnt),1
0660+++8EB7~ NOGLIS2 XOR A
0661+++8EB7~ 0662+++8EB7~ 0663+++8EB7~ PD2_EXIT LD (IX-12+CHP.PsInSm),A
0664+++8EB7~ LD (IX-12+CHP.PsInOr),A
0665+++8EB7~ LD (IX-12+CHP.CrTnSl),A
0666+++8EB7~ LD (IX-12+CHP.CrTnSl+1),A
0667+++8EB7~ JP PD_FIN
0668+++8EB7~ 0669+++8EB7~ ;PT3 pattern decoder
0670+++8EB7~ PD_OrSm LD (IX-12+CHP.Env_En),0
0671+++8EB7~ CALL SETORN
0672+++8EB7~ PD_SAM_ LD A,(BC)
0673+++8EB7~ INC BC
0674+++8EB7~ RRCA
0675+++8EB7~ 0676+++8EB7~ PD_SAM CALL SETSAM
0677+++8EB7~ JR PD_LOOP
0678+++8EB7~ 0679+++8EB7~ PD_VOL RRCA
0680+++8EB7~ RRCA
0681+++8EB7~ RRCA
0682+++8EB7~ RRCA
0683+++8EB7~ LD (IX-12+CHP.Volume),A
0684+++8EB7~ JR PD_LP2
0685+++8EB7~
0686+++8EB7~ PD_EOff LD (IX-12+CHP.Env_En),A
0687+++8EB7~ LD (IX-12+CHP.PsInOr),A
0688+++8EB7~ JR PD_LP2
0689+++8EB7~ 0690+++8EB7~ PD_SorE DEC A
0691+++8EB7~ JR NZ,PD_ENV
0692+++8EB7~ LD A,(BC)
0693+++8EB7~ INC BC
0694+++8EB7~ LD (IX-12+CHP.NNtSkp),A
0695+++8EB7~ JR PD_LP2
0696+++8EB7~ 0697+++8EB7~ PD_ENV CALL SETENV
0698+++8EB7~ JR PD_LP2
0699+++8EB7~ 0700+++8EB7~ PD_ORN CALL SETORN
0701+++8EB7~ JR PD_LOOP
0702+++8EB7~ 0703+++8EB7~ PD_ESAM LD (IX-12+CHP.Env_En),A
0704+++8EB7~ LD (IX-12+CHP.PsInOr),A
0705+++8EB7~ CALL NZ,SETENV
0706+++8EB7~ JR PD_SAM_
0707+++8EB7~ 0708+++8EB7~ PT3PD LD A,(IX-12+CHP.Note)
0709+++8EB7~ LD (PrNote+1),A
0710+++8EB7~ LD L,(IX-12+CHP.CrTnSl)
0711+++8EB7~ LD H,(IX-12+CHP.CrTnSl+1)
0712+++8EB7~ LD (PrSlide+1),HL
0713+++8EB7~ 0714+++8EB7~ PD_LOOP LD DE,#2010
0715+++8EB7~ PD_LP2 LD A,(BC)
0716+++8EB7~ INC BC
0717+++8EB7~ ADD A,E
0718+++8EB7~ JR C,PD_OrSm
0719+++8EB7~ ADD A,D
0720+++8EB7~ JR Z,PD_FIN
0721+++8EB7~ JR C,PD_SAM
0722+++8EB7~ ADD A,E
0723+++8EB7~ JR Z,PD_REL
0724+++8EB7~ JR C,PD_VOL
0725+++8EB7~ ADD A,E
0726+++8EB7~ JR Z,PD_EOff
0727+++8EB7~ JR C,PD_SorE
0728+++8EB7~ ADD A,96
0729+++8EB7~ JR C,PD_NOTE
0730+++8EB7~ ADD A,E
0731+++8EB7~ JR C,PD_ORN
0732+++8EB7~ ADD A,D
0733+++8EB7~ JR C,PD_NOIS
0734+++8EB7~ ADD A,E
0735+++8EB7~ JR C,PD_ESAM
0736+++8EB7~ ADD A,A
0737+++8EB7~ LD E,A
0738+++8EB7~ LD HL,(SPCCOMS+#FF20-#2000)&65535
0739+++8EB7~ ADD HL,DE
0740+++8EB7~ LD E,(HL)
0741+++8EB7~ INC HL
0742+++8EB7~ LD D,(HL)
0743+++8EB7~ PUSH DE
0744+++8EB7~ JR PD_LOOP
0745+++8EB7~ 0746+++8EB7~ PD_NOIS LD (IY-100+VRS.Ns_Base),A
0747+++8EB7~ JR PD_LP2
0748+++8EB7~ 0749+++8EB7~ PD_REL RES 0,(IX-12+CHP.Flags)
0750+++8EB7~ JR PD_RES
0751+++8EB7~ 0752+++8EB7~ PD_NOTE LD (IX-12+CHP.Note),A
0753+++8EB7~ SET 0,(IX-12+CHP.Flags)
0754+++8EB7~ XOR A
0755+++8EB7~ 0756+++8EB7~ PD_RES LD (PDSP_+1),SP
0757+++8EB7~ LD SP,IX
0758+++8EB7~ LD H,A
0759+++8EB7~ LD L,A
0760+++8EB7~ PUSH HL
0761+++8EB7~ PUSH HL
0762+++8EB7~ PUSH HL
0763+++8EB7~ PUSH HL
0764+++8EB7~ PUSH HL
0765+++8EB7~ PUSH HL
0766+++8EB7~ PDSP_ LD SP,#3131
0767+++8EB7~ 0768+++8EB7~ PD_FIN LD A,(IX-12+CHP.NNtSkp)
0769+++8EB7~ LD (IX-12+CHP.NtSkCn),A
0770+++8EB7~ RET
0771+++8EB7~ 0772+++8EB7~ C_PORTM LD A,(BC)
0773+++8EB7~ INC BC
0774+++8EB7~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE
0775+++8EB7~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION)
0776+++8EB7~ INC BC
0777+++8EB7~ INC BC
0778+++8EB7~ EX AF,AF'
0779+++8EB7~ LD A,(BC) ;SIGNED TONE STEP
0780+++8EB7~ INC BC
0781+++8EB7~ LD (LoStep),A
0782+++8EB7~ LD A,(BC)
0783+++8EB7~ INC BC
0784+++8EB7~ AND A
0785+++8EB7~ EX AF,AF'
0786+++8EB7~ LD L,(IX-12+CHP.CrTnSl)
0787+++8EB7~ LD H,(IX-12+CHP.CrTnSl+1)
0788+++8EB7~ 0789+++8EB7~ ;Set portamento variables
0790+++8EB7~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
0791+++8EB7~ 0792+++8EB7~ SETPORT RES 2,(IX-12+CHP.Flags)
0793+++8EB7~ LD (IX-12+CHP.TnSlDl),A
0794+++8EB7~ LD (IX-12+CHP.TSlCnt),A
0795+++8EB7~ PUSH HL
0796+++8EB7~ LD DE,NT_
0797+++8EB7~ LD A,(IX-12+CHP.Note)
0798+++8EB7~ LD (IX-12+CHP.SlToNt),A
0799+++8EB7~ ADD A,A
0800+++8EB7~ LD L,A
0801+++8EB7~ LD H,0
0802+++8EB7~ ADD HL,DE
0803+++8EB7~ LD A,(HL)
0804+++8EB7~ INC HL
0805+++8EB7~ LD H,(HL)
0806+++8EB7~ LD L,A
0807+++8EB7~ PUSH HL
0808+++8EB7~ PrNote LD A,#3E
0809+++8EB7~ LD (IX-12+CHP.Note),A
0810+++8EB7~ ADD A,A
0811+++8EB7~ LD L,A
0812+++8EB7~ LD H,0
0813+++8EB7~ ADD HL,DE
0814+++8EB7~ LD E,(HL)
0815+++8EB7~ INC HL
0816+++8EB7~ LD D,(HL)
0817+++8EB7~ POP HL
0818+++8EB7~ SBC HL,DE
0819+++8EB7~ LD (IX-12+CHP.TnDelt),L
0820+++8EB7~ LD (IX-12+CHP.TnDelt+1),H
0821+++8EB7~ POP DE
0822+++8EB7~ Version EQU $+1
0823+++8EB7~ LD A,#3E
0824+++8EB7~ CP 6
0825+++8EB7~ JR C,OLDPRTM ;Old 3xxx for PT v3.5-
0826+++8EB7~ PrSlide LD DE,#1111
0827+++8EB7~ LD (IX-12+CHP.CrTnSl),E
0828+++8EB7~ LD (IX-12+CHP.CrTnSl+1),D
0829+++8EB7~ LoStep EQU $+1
0830+++8EB7~ OLDPRTM LD A,#3E
0831+++8EB7~ EX AF,AF'
0832+++8EB7~ JR Z,NOSIG
0833+++8EB7~ EX DE,HL
0834+++8EB7~ NOSIG SBC HL,DE
0835+++8EB7~ JP P,SET_STP
0836+++8EB7~ CPL
0837+++8EB7~ EX AF,AF'
0838+++8EB7~ NEG
0839+++8EB7~ EX AF,AF'
0840+++8EB7~ SET_STP LD (IX-12+CHP.TSlStp+1),A
0841+++8EB7~ EX AF,AF'
0842+++8EB7~ LD (IX-12+CHP.TSlStp),A
0843+++8EB7~ LD (IX-12+CHP.COnOff),0
0844+++8EB7~ RET
0845+++8EB7~ 0846+++8EB7~ C_GLISS SET 2,(IX-12+CHP.Flags)
0847+++8EB7~ LD A,(BC)
0848+++8EB7~ INC BC
0849+++8EB7~ LD (IX-12+CHP.TnSlDl),A
0850+++8EB7~ AND A
0851+++8EB7~ JR NZ,GL36
0852+++8EB7~ LD A,(Version) ;AlCo PT3.7+
0853+++8EB7~ CP 7
0854+++8EB7~ SBC A,A
0855+++8EB7~ INC A
0856+++8EB7~ GL36 LD (IX-12+CHP.TSlCnt),A
0857+++8EB7~ LD A,(BC)
0858+++8EB7~ INC BC
0859+++8EB7~ EX AF,AF'
0860+++8EB7~ LD A,(BC)
0861+++8EB7~ INC BC
0862+++8EB7~ JR SET_STP
0863+++8EB7~ 0864+++8EB7~ C_SMPOS LD A,(BC)
0865+++8EB7~ INC BC
0866+++8EB7~ LD (IX-12+CHP.PsInSm),A
0867+++8EB7~ RET
0868+++8EB7~ 0869+++8EB7~ C_ORPOS LD A,(BC)
0870+++8EB7~ INC BC
0871+++8EB7~ LD (IX-12+CHP.PsInOr),A
0872+++8EB7~ RET
0873+++8EB7~ 0874+++8EB7~ C_VIBRT LD A,(BC)
0875+++8EB7~ INC BC
0876+++8EB7~ LD (IX-12+CHP.OnOffD),A
0877+++8EB7~ LD (IX-12+CHP.COnOff),A
0878+++8EB7~ LD A,(BC)
0879+++8EB7~ INC BC
0880+++8EB7~ LD (IX-12+CHP.OffOnD),A
0881+++8EB7~ XOR A
0882+++8EB7~ LD (IX-12+CHP.TSlCnt),A
0883+++8EB7~ LD (IX-12+CHP.CrTnSl),A
0884+++8EB7~ LD (IX-12+CHP.CrTnSl+1),A
0885+++8EB7~ RET
0886+++8EB7~ 0887+++8EB7~ C_ENGLS LD A,(BC)
0888+++8EB7~ INC BC
0889+++8EB7~ LD (IY-100+VRS.Env_Del),A
0890+++8EB7~ LD (IY-100+VRS.CurEDel),A
0891+++8EB7~ LD A,(BC)
0892+++8EB7~ INC BC
0893+++8EB7~ LD L,A
0894+++8EB7~ LD A,(BC)
0895+++8EB7~ INC BC
0896+++8EB7~ LD H,A
0897+++8EB7~ LD (IY-100+VRS.ESldAdd),L
0898+++8EB7~ LD (IY-100+VRS.ESldAdd+1),H
0899+++8EB7~ RET
0900+++8EB7~ 0901+++8EB7~ C_DELAY LD A,(BC)
0902+++8EB7~ INC BC
0903+++8EB7~ LD (IY-100+VRS.Delay),A
0904+++8EB7~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS
0905+++8EB7~ BIT 1,(HL)
0906+++8EB7~ RET Z
0907+++8EB7~ LD (VARS1+VRS.Delay),A
0908+++8EB7~ LD (VARS1+VRS.DelyCnt),A
0909+++8EB7~ LD (VARS2+VRS.Delay),A
0910+++8EB7~ RET
0911+++8EB7~
0912+++8EB7~ SETENV LD (IX-12+CHP.Env_En),E
0913+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A
0914+++8EB7~ LD A,(BC)
0915+++8EB7~ INC BC
0916+++8EB7~ LD H,A
0917+++8EB7~ LD A,(BC)
0918+++8EB7~ INC BC
0919+++8EB7~ LD L,A
0920+++8EB7~ CALL SETENBS
0921+++8EB7~ XOR A
0922+++8EB7~ LD (IX-12+CHP.PsInOr),A
0923+++8EB7~ LD (IY-100+VRS.CurEDel),A
0924+++8EB7~ LD H,A
0925+++8EB7~ LD L,A
0926+++8EB7~ JP SETESLD
0927+++8EB7~ 0928+++8EB7~ SETORN ADD A,A
0929+++8EB7~ LD E,A
0930+++8EB7~ LD D,0
0931+++8EB7~ LD (IX-12+CHP.PsInOr),D
0932+++8EB7~ LD L,(IY-100+VRS.OrnPtrs)
0933+++8EB7~ LD H,(IY-100+VRS.OrnPtrs+1)
0934+++8EB7~ ADD HL,DE
0935+++8EB7~ LD E,(HL)
0936+++8EB7~ INC HL
0937+++8EB7~ LD D,(HL)
0938+++8EB7~ LD L,(IY-100+VRS.MODADDR)
0939+++8EB7~ LD H,(IY-100+VRS.MODADDR+1)
0940+++8EB7~ ADD HL,DE
0941+++8EB7~ LD (IX-12+CHP.OrnPtr),L
0942+++8EB7~ LD (IX-12+CHP.OrnPtr+1),H
0943+++8EB7~ C_NOP RET
0944+++8EB7~ 0945+++8EB7~ SETSAM ADD A,A
0946+++8EB7~ LD E,A
0947+++8EB7~ LD D,0
0948+++8EB7~ LD L,(IY-100+VRS.SamPtrs);
0949+++8EB7~ LD H,(IY-100+VRS.SamPtrs+1);
0950+++8EB7~ ADD HL,DE
0951+++8EB7~ LD E,(HL)
0952+++8EB7~ INC HL
0953+++8EB7~ LD D,(HL)
0954+++8EB7~ LD L,(IY-100+VRS.MODADDR)
0955+++8EB7~ LD H,(IY-100+VRS.MODADDR+1)
0956+++8EB7~ ADD HL,DE
0957+++8EB7~ LD (IX-12+CHP.SamPtr),L
0958+++8EB7~ LD (IX-12+CHP.SamPtr+1),H
0959+++8EB7~ RET
0960+++8EB7~ 0961+++8EB7~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
0962+++8EB7~ SPCCOMS DW C_NOP
0963+++8EB7~ DW C_GLISS
0964+++8EB7~ DW C_PORTM
0965+++8EB7~ DW C_SMPOS
0966+++8EB7~ DW C_ORPOS
0967+++8EB7~ DW C_VIBRT
0968+++8EB7~ DW C_NOP
0969+++8EB7~ DW C_NOP
0970+++8EB7~ DW C_ENGLS
0971+++8EB7~ DW C_DELAY
0972+++8EB7~ DW C_NOP
0973+++8EB7~ DW C_NOP
0974+++8EB7~ DW C_NOP
0975+++8EB7~ DW C_NOP
0976+++8EB7~ DW C_NOP
0977+++8EB7~ DW C_NOP
0978+++8EB7~ 0979+++8EB7~ CHREGS CALL GETIX
0980+++8EB7~ XOR A
0981+++8EB7~ LD (Ampl),A
0982+++8EB7~ BIT 0,(IX+CHP.Flags)
0983+++8EB7~ PUSH HL
0984+++8EB7~ JP Z,CH_EXIT
0985+++8EB7~ LD (CSP_+1),SP
0986+++8EB7~ LD L,(IX+CHP.OrnPtr)
0987+++8EB7~ LD H,(IX+CHP.OrnPtr+1)
0988+++8EB7~ LD SP,HL
0989+++8EB7~ POP DE
0990+++8EB7~ LD H,A
0991+++8EB7~ LD A,(IX+CHP.PsInOr)
0992+++8EB7~ LD L,A
0993+++8EB7~ ADD HL,SP
0994+++8EB7~ INC A
0995+++8EB7~ ;PT2 PT3
0996+++8EB7~ OrnCP INC A ;CP E CP D
0997+++8EB7~ JR C,CH_ORPS
0998+++8EB7~ OrnLD DB 1 ;LD A,D LD A,E
0999+++8EB7~ CH_ORPS LD (IX+CHP.PsInOr),A
1000+++8EB7~ LD A,(IX+CHP.Note)
1001+++8EB7~ ADD A,(HL)
1002+++8EB7~ JP P,CH_NTP
1003+++8EB7~ XOR A
1004+++8EB7~ CH_NTP CP 96
1005+++8EB7~ JR C,CH_NOK
1006+++8EB7~ LD A,95
1007+++8EB7~ CH_NOK ADD A,A
1008+++8EB7~ EX AF,AF'
1009+++8EB7~ LD L,(IX+CHP.SamPtr)
1010+++8EB7~ LD H,(IX+CHP.SamPtr+1)
1011+++8EB7~ LD SP,HL
1012+++8EB7~ POP DE
1013+++8EB7~ LD H,0
1014+++8EB7~ LD A,(IX+CHP.PsInSm)
1015+++8EB7~ LD B,A
1016+++8EB7~ ADD A,A
1017+++8EB7~ SamClc2 ADD A,A ;or ADD A,B for PT2
1018+++8EB7~ LD L,A
1019+++8EB7~ ADD HL,SP
1020+++8EB7~ LD SP,HL
1021+++8EB7~ LD A,B
1022+++8EB7~ INC A
1023+++8EB7~ ;PT2 PT3
1024+++8EB7~ SamCP INC A ;CP E CP D
1025+++8EB7~ JR C,CH_SMPS
1026+++8EB7~ SamLD DB 1 ;LD A,D LD A,E
1027+++8EB7~ CH_SMPS LD (IX+CHP.PsInSm),A
1028+++8EB7~ POP BC
1029+++8EB7~ POP HL
1030+++8EB7~ 1031+++8EB7~ ;Convert PT2 sample to PT3
1032+++8EB7~ ;PT2 PT3
1033+++8EB7~ SamCnv POP HL ;BIT 2,C JR e_
1034+++8EB7~ POP HL
1035+++8EB7~ LD H,B
1036+++8EB7~ JR NZ,$+8
1037+++8EB7~ EX DE,HL
1038+++8EB7~ AND A
1039+++8EB7~ SBC HL,HL
1040+++8EB7~ SBC HL,DE
1041+++8EB7~ LD D,C
1042+++8EB7~ RR C
1043+++8EB7~ SBC A,A
1044+++8EB7~ CPL
1045+++8EB7~ AND #3E
1046+++8EB7~ RR C
1047+++8EB7~ RR B
1048+++8EB7~ AND C
1049+++8EB7~ LD C,A
1050+++8EB7~ LD A,B
1051+++8EB7~ RRA
1052+++8EB7~ RRA
1053+++8EB7~ RR D
1054+++8EB7~ RRA
1055+++8EB7~ AND #9F
1056+++8EB7~ LD B,A
1057+++8EB7~ 1058+++8EB7~ e_ LD E,(IX+CHP.TnAcc)
1059+++8EB7~ LD D,(IX+CHP.TnAcc+1)
1060+++8EB7~ ADD HL,DE
1061+++8EB7~ BIT 6,B
1062+++8EB7~ JR Z,CH_NOAC
1063+++8EB7~ LD (IX+CHP.TnAcc),L
1064+++8EB7~ LD (IX+CHP.TnAcc+1),H
1065+++8EB7~ CH_NOAC EX DE,HL
1066+++8EB7~ EX AF,AF'
1067+++8EB7~ ADD A,NT_&255
1068+++8EB7~ LD L,A
1069+++8EB7~ ADC A,NT_/256
1070+++8EB7~ SUB L
1071+++8EB7~ LD H,A
1072+++8EB7~ LD SP,HL
1073+++8EB7~ POP HL
1074+++8EB7~ ADD HL,DE
1075+++8EB7~ LD E,(IX+CHP.CrTnSl)
1076+++8EB7~ LD D,(IX+CHP.CrTnSl+1)
1077+++8EB7~ ADD HL,DE
1078+++8EB7~ CSP_ LD SP,#3131
1079+++8EB7~ EX (SP),HL
1080+++8EB7~ XOR A
1081+++8EB7~ OR (IX+CHP.TSlCnt)
1082+++8EB7~ JR Z,CH_AMP
1083+++8EB7~ DEC (IX+CHP.TSlCnt)
1084+++8EB7~ JR NZ,CH_AMP
1085+++8EB7~ LD A,(IX+CHP.TnSlDl)
1086+++8EB7~ LD (IX+CHP.TSlCnt),A
1087+++8EB7~ LD L,(IX+CHP.TSlStp)
1088+++8EB7~ LD H,(IX+CHP.TSlStp+1)
1089+++8EB7~ LD A,H
1090+++8EB7~ ADD HL,DE
1091+++8EB7~ LD (IX+CHP.CrTnSl),L
1092+++8EB7~ LD (IX+CHP.CrTnSl+1),H
1093+++8EB7~ BIT 2,(IX+CHP.Flags)
1094+++8EB7~ JR NZ,CH_AMP
1095+++8EB7~ LD E,(IX+CHP.TnDelt)
1096+++8EB7~ LD D,(IX+CHP.TnDelt+1)
1097+++8EB7~ AND A
1098+++8EB7~ JR Z,CH_STPP
1099+++8EB7~ EX DE,HL
1100+++8EB7~ CH_STPP SBC HL,DE
1101+++8EB7~ JP M,CH_AMP
1102+++8EB7~ LD A,(IX+CHP.SlToNt)
1103+++8EB7~ LD (IX+CHP.Note),A
1104+++8EB7~ XOR A
1105+++8EB7~ LD (IX+CHP.TSlCnt),A
1106+++8EB7~ LD (IX+CHP.CrTnSl),A
1107+++8EB7~ LD (IX+CHP.CrTnSl+1),A
1108+++8EB7~ CH_AMP LD A,(IX+CHP.CrAmSl)
1109+++8EB7~ BIT 7,C
1110+++8EB7~ JR Z,CH_NOAM
1111+++8EB7~ BIT 6,C
1112+++8EB7~ JR Z,CH_AMIN
1113+++8EB7~ CP 15
1114+++8EB7~ JR Z,CH_NOAM
1115+++8EB7~ INC A
1116+++8EB7~ JR CH_SVAM
1117+++8EB7~ CH_AMIN CP -15
1118+++8EB7~ JR Z,CH_NOAM
1119+++8EB7~ DEC A
1120+++8EB7~ CH_SVAM LD (IX+CHP.CrAmSl),A
1121+++8EB7~ CH_NOAM LD L,A
1122+++8EB7~ LD A,B
1123+++8EB7~ AND 15
1124+++8EB7~ ADD A,L
1125+++8EB7~ JP P,CH_APOS
1126+++8EB7~ XOR A
1127+++8EB7~ CH_APOS CP 16
1128+++8EB7~ JR C,CH_VOL
1129+++8EB7~ LD A,15
1130+++8EB7~ CH_VOL OR (IX+CHP.Volume)
1131+++8EB7~ ADD A,VT_&255
1132+++8EB7~ LD L,A
1133+++8EB7~ ADC A,VT_/256
1134+++8EB7~ SUB L
1135+++8EB7~ LD H,A
1136+++8EB7~ LD A,(HL)
1137+++8EB7~ CH_ENV BIT 0,C
1138+++8EB7~ JR NZ,CH_NOEN
1139+++8EB7~ OR (IX+CHP.Env_En)
1140+++8EB7~ CH_NOEN LD (Ampl),A
1141+++8EB7~ BIT 7,B
1142+++8EB7~ LD A,C
1143+++8EB7~ JR Z,NO_ENSL
1144+++8EB7~ RLA
1145+++8EB7~ RLA
1146+++8EB7~ SRA A
1147+++8EB7~ SRA A
1148+++8EB7~ SRA A
1149+++8EB7~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
1150+++8EB7~ BIT 5,B
1151+++8EB7~ JR Z,NO_ENAC
1152+++8EB7~ LD (IX+CHP.CrEnSl),A
1153+++8EB7~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE
1154+++8EB7~ LD (IY-100+VRS.AddToEn),A
1155+++8EB7~ JR CH_MIX
1156+++8EB7~ NO_ENSL RRA
1157+++8EB7~ ADD A,(IX+CHP.CrNsSl)
1158+++8EB7~ LD (IY-100+VRS.AddToNs),A
1159+++8EB7~ BIT 5,B
1160+++8EB7~ JR Z,CH_MIX
1161+++8EB7~ LD (IX+CHP.CrNsSl),A
1162+++8EB7~ CH_MIX LD A,B
1163+++8EB7~ RRA
1164+++8EB7~ AND #48
1165+++8EB7~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer)
1166+++8EB7~ RRCA
1167+++8EB7~ LD (IY-100+VRS.AYREGS+Mixer),A
1168+++8EB7~ POP HL
1169+++8EB7~ XOR A
1170+++8EB7~ OR (IX+CHP.COnOff)
1171+++8EB7~ RET Z
1172+++8EB7~ DEC (IX+CHP.COnOff)
1173+++8EB7~ RET NZ
1174+++8EB7~ XOR (IX+CHP.Flags)
1175+++8EB7~ LD (IX+CHP.Flags),A
1176+++8EB7~ RRA
1177+++8EB7~ LD A,(IX+CHP.OnOffD)
1178+++8EB7~ JR C,CH_ONDL
1179+++8EB7~ LD A,(IX+CHP.OffOnD)
1180+++8EB7~ CH_ONDL LD (IX+CHP.COnOff),A
1181+++8EB7~ RET
1182+++8EB7~ 1183+++8EB7~ PLAY_ XOR A
1184+++8EB7~ LD (IY-100+VRS.AddToEn),A
1185+++8EB7~ LD (IY-100+VRS.AYREGS+Mixer),A
1186+++8EB7~ DEC A
1187+++8EB7~ LD (IY-100+VRS.AYREGS+EnvTp),A
1188+++8EB7~ DEC (IY-100+VRS.DelyCnt)
1189+++8EB7~ JP NZ,PL2
1190+++8EB7~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn)
1191+++8EB7~ JR NZ,PL1B
1192+++8EB7~ LD C,(IY-100+VRS.AdInPtA)
1193+++8EB7~ LD B,(IY-100+VRS.AdInPtA+1)
1194+++8EB7~ LD A,(BC)
1195+++8EB7~ AND A
1196+++8EB7~ JR NZ,PL1A
1197+++8EB7~ LD D,A
1198+++8EB7~ LD (IY-100+VRS.Ns_Base),A
1199+++8EB7~ LD L,(IY-100+VRS.CrPsPtr)
1200+++8EB7~ LD H,(IY-100+VRS.CrPsPtr+1)
1201+++8EB7~ INC HL
1202+++8EB7~ LD A,(HL)
1203+++8EB7~ INC A
1204+++8EB7~ JR NZ,PLNLP
1205+++8EB7~ 1206+++8EB7~ IF LoopChecker
1207+++8EB7~ CALL CHECKLP
1208+++8EB7~ ENDIF
1209+++8EB7~ 1210+++8EB7~ LD L,(IY-100+VRS.LPosPtr)
1211+++8EB7~ LD H,(IY-100+VRS.LPosPtr+1)
1212+++8EB7~ LD A,(HL)
1213+++8EB7~ INC A
1214+++8EB7~ PLNLP CALL SETCPPT
1215+++8EB7~ DEC A
1216+++8EB7~ BIT 1,(IY-100+VRS.ModNum)
1217+++8EB7~ JR Z,NoAlCo
1218+++8EB7~ TSSub EQU $+1
1219+++8EB7~ SUB #D6
1220+++8EB7~ CPL
1221+++8EB7~ NoAlCo
1222+++8EB7~ ;PT2 PT3
1223+++8EB7~ PsCalc DEC A ;ADD A,A NOP
1224+++8EB7~ DEC A ;ADD A,(HL) NOP
1225+++8EB7~ ADD A,A
1226+++8EB7~ LD E,A
1227+++8EB7~ RL D
1228+++8EB7~ 1229+++8EB7~ IF CurPosCounter
1230+++8EB7~ LD A,L
1231+++8EB7~ SUB (IY-100+VRS.PosSub)
1232+++8EB7~ LD (IY-100+VRS.CurPos),A
1233+++8EB7~ ENDIF
1234+++8EB7~ 1235+++8EB7~ LD L,(IY-100+VRS.PatsPtr)
1236+++8EB7~ LD H,(IY-100+VRS.PatsPtr+1)
1237+++8EB7~ ADD HL,DE
1238+++8EB7~ LD E,(IY-100+VRS.MODADDR)
1239+++8EB7~ LD D,(IY-100+VRS.MODADDR+1)
1240+++8EB7~ LD (PSP_+1),SP
1241+++8EB7~ LD SP,HL
1242+++8EB7~ POP HL
1243+++8EB7~ ADD HL,DE
1244+++8EB7~ LD B,H
1245+++8EB7~ LD C,L
1246+++8EB7~ POP HL
1247+++8EB7~ ADD HL,DE
1248+++8EB7~ LD (IY-100+VRS.AdInPtB),L
1249+++8EB7~ LD (IY-100+VRS.AdInPtB+1),H
1250+++8EB7~ POP HL
1251+++8EB7~ ADD HL,DE
1252+++8EB7~ LD (IY-100+VRS.AdInPtC),L
1253+++8EB7~ LD (IY-100+VRS.AdInPtC+1),H
1254+++8EB7~ PSP_ LD SP,#3131
1255+++8EB7~ PL1A LD DE,VRS.ChanA+12-100
1256+++8EB7~ CALL PTDECOD
1257+++8EB7~ LD (IY-100+VRS.AdInPtA),C
1258+++8EB7~ LD (IY-100+VRS.AdInPtA+1),B
1259+++8EB7~ 1260+++8EB7~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn)
1261+++8EB7~ JR NZ,PL1C
1262+++8EB7~ LD DE,VRS.ChanB+12-100
1263+++8EB7~ LD C,(IY-100+VRS.AdInPtB)
1264+++8EB7~ LD B,(IY-100+VRS.AdInPtB+1)
1265+++8EB7~ CALL PTDECOD
1266+++8EB7~ LD (IY-100+VRS.AdInPtB),C
1267+++8EB7~ LD (IY-100+VRS.AdInPtB+1),B
1268+++8EB7~ 1269+++8EB7~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn)
1270+++8EB7~ JR NZ,PL1D
1271+++8EB7~ LD DE,VRS.ChanC+12-100
1272+++8EB7~ LD C,(IY-100+VRS.AdInPtC)
1273+++8EB7~ LD B,(IY-100+VRS.AdInPtC+1)
1274+++8EB7~ CALL PTDECOD
1275+++8EB7~ LD (IY-100+VRS.AdInPtC),C
1276+++8EB7~ LD (IY-100+VRS.AdInPtC+1),B
1277+++8EB7~ 1278+++8EB7~ PL1D LD A,(IY-100+VRS.Delay)
1279+++8EB7~ LD (IY-100+VRS.DelyCnt),A
1280+++8EB7~ 1281+++8EB7~ PL2 LD DE,VRS.ChanA-100
1282+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonA)
1283+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonA+1)
1284+++8EB7~ CALL CHREGS
1285+++8EB7~ LD (IY-100+VRS.AYREGS+TonA),L
1286+++8EB7~ LD (IY-100+VRS.AYREGS+TonA+1),H
1287+++8EB7~ Ampl EQU $+1
1288+++8EB7~ LD A,#3E
1289+++8EB7~ LD (IY-100+VRS.AYREGS+AmplA),A
1290+++8EB7~ LD DE,VRS.ChanB-100
1291+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonB)
1292+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonB+1)
1293+++8EB7~ CALL CHREGS
1294+++8EB7~ LD (IY-100+VRS.AYREGS+TonB),L
1295+++8EB7~ LD (IY-100+VRS.AYREGS+TonB+1),H
1296+++8EB7~ LD A,(Ampl)
1297+++8EB7~ LD (IY-100+VRS.AYREGS+AmplB),A
1298+++8EB7~ LD DE,VRS.ChanC-100
1299+++8EB7~ LD L,(IY-100+VRS.AYREGS+TonC)
1300+++8EB7~ LD H,(IY-100+VRS.AYREGS+TonC+1)
1301+++8EB7~ CALL CHREGS
1302+++8EB7~ LD (IY-100+VRS.AYREGS+TonC),L
1303+++8EB7~ LD (IY-100+VRS.AYREGS+TonC+1),H
1304+++8EB7~ LD A,(Ampl)
1305+++8EB7~ LD (IY-100+VRS.AYREGS+AmplC),A
1306+++8EB7~ 1307+++8EB7~ LD A,(IY-100+VRS.Ns_Base)
1308+++8EB7~ ADD (IY-100+VRS.AddToNs)
1309+++8EB7~ LD (IY-100+VRS.AYREGS+Noise),A
1310+++8EB7~ 1311+++8EB7~ LD A,(IY-100+VRS.AddToEn)
1312+++8EB7~ LD E,A
1313+++8EB7~ ADD A,A
1314+++8EB7~ SBC A,A
1315+++8EB7~ LD D,A
1316+++8EB7~ LD L,(IY-100+VRS.EnvBase)
1317+++8EB7~ LD H,(IY-100+VRS.EnvBase+1)
1318+++8EB7~ ADD HL,DE
1319+++8EB7~ LD E,(IY-100+VRS.CurESld)
1320+++8EB7~ LD D,(IY-100+VRS.CurESld+1)
1321+++8EB7~ ADD HL,DE
1322+++8EB7~ LD (IY-100+VRS.AYREGS+Env),L
1323+++8EB7~ LD (IY-100+VRS.AYREGS+Env+1),H
1324+++8EB7~ 1325+++8EB7~ XOR A
1326+++8EB7~ OR (IY-100+VRS.CurEDel)
1327+++8EB7~ RET Z
1328+++8EB7~ DEC (IY-100+VRS.CurEDel)
1329+++8EB7~ RET NZ
1330+++8EB7~ LD A,(IY-100+VRS.Env_Del)
1331+++8EB7~ LD (IY-100+VRS.CurEDel),A
1332+++8EB7~ LD L,(IY-100+VRS.ESldAdd)
1333+++8EB7~ LD H,(IY-100+VRS.ESldAdd+1)
1334+++8EB7~ ADD HL,DE
1335+++8EB7~ JP SETESLD
1336+++8EB7~ 1337+++8EB7~ PLAY LD IY,VARS1+100
1338+++8EB7~ CALL PLAY_
1339+++8EB7~ LD A,(is_ts)
1340+++8EB7~ AND A
1341+++8EB7~ JR Z,PL_nts
1342+++8EB7~ LD IY,VARS2+100
1343+++8EB7~ CALL PLAY_
1344+++8EB7~ PL_nts
1345+++8EB7~ IF Basic
1346+++8EB7~ LD IY,#5C3A
1347+++8EB7~ ENDIF
1348+++8EB7~ 1349+++8EB7~ ROUT LD BC,#FFFD
1350+++8EB7~ LD A,(is_ts)
1351+++8EB7~ AND A
1352+++8EB7~ IFDEF ONtfm
1353+++8EB7~ LD L,#F9
1354+++8EB7~ OUT (C),L
1355+++8EB7~ ELSE
1356+++8EB7~ JR Z,r_nts ;keep old standard
1357+++8EB7~ OUT (C),B
1358+++8EB7~ ENDIF
1359+++8EB7~ r_nts EX AF,AF'
1360+++8EB7~ 1361+++8EB7~ IF ACBBAC
1362+++8EB7~ LD IX,VARS1+VRS.AYREGS
1363+++8EB7~ ELSE
1364+++8EB7~ LD HL,VARS1+VRS.AYREGS
1365+++8EB7~ ENDIF
1366+++8EB7~ 1367+++8EB7~ CALL ROUT_
1368+++8EB7~ EX AF,AF'
1369+++8EB7~ RET Z
1370+++8EB7~ LD B,D
1371+++8EB7~ 1372+++8EB7~ IFDEF ONtfm
1373+++8EB7~ LD A,#F8
1374+++8EB7~ ELSE
1375+++8EB7~ CPL
1376+++8EB7~ ENDIF
1377+++8EB7~ OUT (C),A
1378+++8EB7~ 1379+++8EB7~ IF ACBBAC
1380+++8EB7~ LD IX,VARS2+VRS.AYREGS
1381+++8EB7~ ELSE
1382+++8EB7~ LD HL,VARS2+VRS.AYREGS
1383+++8EB7~ ENDIF
1384+++8EB7~ 1385+++8EB7~ ROUT_
1386+++8EB7~ IF ACBBAC
1387+++8EB7~ LD A,(SETUP)
1388+++8EB7~ AND 12
1389+++8EB7~ JR Z,ABC
1390+++8EB7~ ADD A,CHTABLE
1391+++8EB7~ LD E,A
1392+++8EB7~ ADC A,CHTABLE/256
1393+++8EB7~ SUB E
1394+++8EB7~ LD D,A
1395+++8EB7~ LD B,0
1396+++8EB7~ PUSH IX
1397+++8EB7~ POP HL
1398+++8EB7~ LD A,(DE)
1399+++8EB7~ INC DE
1400+++8EB7~ LD C,A
1401+++8EB7~ ADD HL,BC
1402+++8EB7~ LD A,(IX+TonB)
1403+++8EB7~ LD C,(HL)
1404+++8EB7~ LD (IX+TonB),C
1405+++8EB7~ LD (HL),A
1406+++8EB7~ INC HL
1407+++8EB7~ LD A,(IX+TonB+1)
1408+++8EB7~ LD C,(HL)
1409+++8EB7~ LD (IX+TonB+1),C
1410+++8EB7~ LD (HL),A
1411+++8EB7~ LD A,(DE)
1412+++8EB7~ INC DE
1413+++8EB7~ LD C,A
1414+++8EB7~ ADD HL,BC
1415+++8EB7~ LD A,(IX+AmplB)
1416+++8EB7~ LD C,(HL)
1417+++8EB7~ LD (IX+AmplB),C
1418+++8EB7~ LD (HL),A
1419+++8EB7~ LD A,(DE)
1420+++8EB7~ INC DE
1421+++8EB7~ LD (RxCA1),A
1422+++8EB7~ XOR 8
1423+++8EB7~ LD (RxCA2),A
1424+++8EB7~ LD A,(DE)
1425+++8EB7~ AND (IX+Mixer)
1426+++8EB7~ LD E,A
1427+++8EB7~ LD A,(IX+Mixer)
1428+++8EB7~ RxCA1 DB #E6
1429+++8EB7~ AND %010010
1430+++8EB7~ OR E
1431+++8EB7~ LD E,A
1432+++8EB7~ LD A,(IX+Mixer)
1433+++8EB7~ AND %010010
1434+++8EB7~ RxCA2 OR E
1435+++8EB7~ OR E
1436+++8EB7~ LD (IX+Mixer),A
1437+++8EB7~ ABC
1438+++8EB7~ ENDIF
1439+++8EB7~ 1440+++8EB7~ XOR A
1441+++8EB7~ LD DE,#FFBF
1442+++8EB7~ 1443+++8EB7~ IF ACBBAC
1444+++8EB7~ LD BC,#FFFD
1445+++8EB7~ PUSH IX
1446+++8EB7~ POP HL
1447+++8EB7~ ENDIF
1448+++8EB7~ 1449+++8EB7~ LOUT
1450+++8EB7~ IFDEF ONtfm
1451+++8EB7~ INF
1452+++8EB7~ JP M,$-2
1453+++8EB7~ ENDIF
1454+++8EB7~ OUT (C),A
1455+++8EB7~ IFDEF ONtfm
1456+++8EB7~ INF
1457+++8EB7~ JP M,$-2
1458+++8EB7~ ENDIF
1459+++8EB7~ LD B,E
1460+++8EB7~ OUTI
1461+++8EB7~ LD B,D
1462+++8EB7~ INC A
1463+++8EB7~ CP 13
1464+++8EB7~ JR NZ,LOUT
1465+++8EB7~ IFDEF ONtfm
1466+++8EB7~ INF
1467+++8EB7~ JP M,$-2
1468+++8EB7~ ENDIF
1469+++8EB7~ OUT (C),A
1470+++8EB7~ LD A,(HL)
1471+++8EB7~ AND A
1472+++8EB7~ RET M
1473+++8EB7~ IFDEF ONtfm
1474+++8EB7~ INF
1475+++8EB7~ JP M,$-2
1476+++8EB7~ ENDIF
1477+++8EB7~ LD B,E
1478+++8EB7~ OUT (C),A
1479+++8EB7~ RET
1480+++8EB7~ 1481+++8EB7~ IF ACBBAC
1482+++8EB7~ CHTABLE EQU $-4
1483+++8EB7~ DB 4,5,15,%001001,0,7,7,%100100
1484+++8EB7~ ENDIF
1485+++8EB7~ 1486+++8EB7~ NT_DATA DB (T_NEW_0-T1_)*2
1487+++8EB7~ DB TCNEW_0-T_
1488+++8EB7~ DB (T_OLD_0-T1_)*2+1
1489+++8EB7~ DB TCOLD_0-T_
1490+++8EB7~ DB (T_NEW_1-T1_)*2+1
1491+++8EB7~ DB TCNEW_1-T_
1492+++8EB7~ DB (T_OLD_1-T1_)*2+1
1493+++8EB7~ DB TCOLD_1-T_
1494+++8EB7~ DB (T_NEW_2-T1_)*2
1495+++8EB7~ DB TCNEW_2-T_
1496+++8EB7~ DB (T_OLD_2-T1_)*2
1497+++8EB7~ DB TCOLD_2-T_
1498+++8EB7~ DB (T_NEW_3-T1_)*2
1499+++8EB7~ DB TCNEW_3-T_
1500+++8EB7~ DB (T_OLD_3-T1_)*2
1501+++8EB7~ DB TCOLD_3-T_
1502+++8EB7~ 1503+++8EB7~ T_
1504+++8EB7~ 1505+++8EB7~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
1506+++8EB7~ DB #18+1,#24+1,#3C+1,0
1507+++8EB7~ TCOLD_1 DB #5C+1,0
1508+++8EB7~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
1509+++8EB7~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
1510+++8EB7~ TCNEW_3 DB #56+1
1511+++8EB7~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
1512+++8EB7~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
1513+++8EB7~ DB #BC+1,#BE+1,0
1514+++8EB7~ TCNEW_1 EQU TCOLD_1
1515+++8EB7~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
1516+++8EB7~ DB #BA+1,#BC+1,#BE+1,0
1517+++8EB7~ 1518+++8EB7~ PT3EMPTYORN EQU $-1
1519+++8EB7~ DB 1,0
1520+++8EB7~ 1521+++8EB7~ ;first 12 values of tone tables (packed)
1522+++8EB7~ 1523+++8EB7~ T_PACK DB #06EC*2/256,#06EC*2&255
1524+++8EB7~ DB #0755-#06EC
1525+++8EB7~ DB #07C5-#0755
1526+++8EB7~ DB #083B-#07C5
1527+++8EB7~ DB #08B8-#083B
1528+++8EB7~ DB #093D-#08B8
1529+++8EB7~ DB #09CA-#093D
1530+++8EB7~ DB #0A5F-#09CA
1531+++8EB7~ DB #0AFC-#0A5F
1532+++8EB7~ DB #0BA4-#0AFC
1533+++8EB7~ DB #0C55-#0BA4
1534+++8EB7~ DB #0D10-#0C55
1535+++8EB7~ DB #066D*2/256,#066D*2&255
1536+++8EB7~ DB #06CF-#066D
1537+++8EB7~ DB #0737-#06CF
1538+++8EB7~ DB #07A4-#0737
1539+++8EB7~ DB #0819-#07A4
1540+++8EB7~ DB #0894-#0819
1541+++8EB7~ DB #0917-#0894
1542+++8EB7~ DB #09A1-#0917
1543+++8EB7~ DB #0A33-#09A1
1544+++8EB7~ DB #0ACF-#0A33
1545+++8EB7~ DB #0B73-#0ACF
1546+++8EB7~ DB #0C22-#0B73
1547+++8EB7~ DB #0CDA-#0C22
1548+++8EB7~ DB #0704*2/256,#0704*2&255
1549+++8EB7~ DB #076E-#0704
1550+++8EB7~ DB #07E0-#076E
1551+++8EB7~ DB #0858-#07E0
1552+++8EB7~ DB #08D6-#0858
1553+++8EB7~ DB #095C-#08D6
1554+++8EB7~ DB #09EC-#095C
1555+++8EB7~ DB #0A82-#09EC
1556+++8EB7~ DB #0B22-#0A82
1557+++8EB7~ DB #0BCC-#0B22
1558+++8EB7~ DB #0C80-#0BCC
1559+++8EB7~ DB #0D3E-#0C80
1560+++8EB7~ DB #07E0*2/256,#07E0*2&255
1561+++8EB7~ DB #0858-#07E0
1562+++8EB7~ DB #08E0-#0858
1563+++8EB7~ DB #0960-#08E0
1564+++8EB7~ DB #09F0-#0960
1565+++8EB7~ DB #0A88-#09F0
1566+++8EB7~ DB #0B28-#0A88
1567+++8EB7~ DB #0BD8-#0B28
1568+++8EB7~ DB #0C80-#0BD8
1569+++8EB7~ DB #0D60-#0C80
1570+++8EB7~ DB #0E10-#0D60
1571+++8EB7~ DB #0EF8-#0E10
1572+++8EB7~ 1573+++8EB7~ ;vars from here can be stripped
1574+++8EB7~ ;you can move VARS to any other address
1575+++8EB7~ 1576+++8EB7~ VARS
1577+++8EB7~ 1578+++8EB7~ is_ts DB 0
1579+++8EB7~ 1580+++8EB7~ ;ChannelsVars
1581+++8EB7~ STRUCT CHP
1582+++8EB7~ ;reset group
1583+++8EB7~ PsInOr DB 0
1584+++8EB7~ PsInSm DB 0
1585+++8EB7~ CrAmSl DB 0
1586+++8EB7~ CrNsSl DB 0
1587+++8EB7~ CrEnSl DB 0
1588+++8EB7~ TSlCnt DB 0
1589+++8EB7~ CrTnSl DW 0
1590+++8EB7~ TnAcc DW 0
1591+++8EB7~ COnOff DB 0
1592+++8EB7~ ;reset group
1593+++8EB7~ 1594+++8EB7~ OnOffD DB 0
1595+++8EB7~ 1596+++8EB7~ ;IX for PTDECOD here (+12)
1597+++8EB7~ OffOnD DB 0
1598+++8EB7~ OrnPtr DW 0
1599+++8EB7~ SamPtr DW 0
1600+++8EB7~ NNtSkp DB 0
1601+++8EB7~ Note DB 0
1602+++8EB7~ SlToNt DB 0
1603+++8EB7~ Env_En DB 0
1604+++8EB7~ Flags DB 0
1605+++8EB7~ ;Enabled - 0, SimpleGliss - 2
1606+++8EB7~ TnSlDl DB 0
1607+++8EB7~ TSlStp DW 0
1608+++8EB7~ TnDelt DW 0
1609+++8EB7~ NtSkCn DB 0
1610+++8EB7~ Volume DB 0
1611+++8EB7~ ENDS
1612+++8EB7~ 1613+++8EB7~ STRUCT VRS
1614+++8EB7~ 1615+++8EB7~ ;IF not works in STRUCT in SjASM :(
1616+++8EB7~ ; IF CurPosCounter
1617+++8EB7~ CurPos DB 0
1618+++8EB7~ PosSub DB 0
1619+++8EB7~ ; ENDIF
1620+++8EB7~ 1621+++8EB7~ ModNum DB 0 ;bit0: ChipNum
1622+++8EB7~ ;bit1: 1-reversed patterns order (AlCo TS)
1623+++8EB7~ 1624+++8EB7~ ChanA DS CHP
1625+++8EB7~ ChanB DS CHP
1626+++8EB7~ ChanC DS CHP
1627+++8EB7~ 1628+++8EB7~ ;GlobalVars
1629+++8EB7~ MODADDR DW 0
1630+++8EB7~ OrnPtrs DW 0
1631+++8EB7~ SamPtrs DW 0
1632+++8EB7~ PatsPtr DW 0
1633+++8EB7~ AdInPtA DW 0
1634+++8EB7~ AdInPtB DW 0
1635+++8EB7~ AdInPtC DW 0
1636+++8EB7~ CrPsPtr DW 0
1637+++8EB7~ LPosPtr DW 0
1638+++8EB7~ Delay DB 0
1639+++8EB7~ DelyCnt DB 0
1640+++8EB7~ ESldAdd DW 0
1641+++8EB7~ CurESld DW 0
1642+++8EB7~ Env_Del DB 0
1643+++8EB7~ CurEDel DB 0
1644+++8EB7~ Ns_Base DB 0
1645+++8EB7~ AddToNs DB 0
1646+++8EB7~ AddToEn DB 0
1647+++8EB7~ EnvBase DW 0
1648+++8EB7~ AYREGS DS 14
1649+++8EB7~ ENDS
1650+++8EB7~ 1651+++8EB7~ VARS1 DS VRS
1652+++8EB7~ VARS2 DS VRS
1653+++8EB7~ 1654+++8EB7~ VT_ EQU $-16
1655+++8EB7~ DS 256-16 ;CreatedVolumeTableAddress
1656+++8EB7~ 1657+++8EB7~ T1_ EQU VT_+16 ;Tone tables data depacked here
1658+++8EB7~ 1659+++8EB7~ T_OLD_1 EQU T1_
1660+++8EB7~ T_OLD_2 EQU T_OLD_1+24
1661+++8EB7~ T_OLD_3 EQU T_OLD_2+24
1662+++8EB7~ T_OLD_0 EQU T_OLD_3+2
1663+++8EB7~ T_NEW_0 EQU T_OLD_0
1664+++8EB7~ T_NEW_1 EQU T_OLD_1
1665+++8EB7~ T_NEW_2 EQU T_NEW_0+24
1666+++8EB7~ T_NEW_3 EQU T_OLD_3
1667+++8EB7~ 1668+++8EB7~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
1669+++8EB7~ 1670+++8EB7~ NT_ DS 192 ;CreatedNoteTableAddress
1671+++8EB7~ 1672+++8EB7~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
1673+++8EB7~ 1674+++8EB7~ VARSEND EQU $
1675+++8EB7~ MDLADDR EQU $
1676+++8EB7~ 1677+++8EB7~ DISPLAY "PTS player size=",$-START
1678+++8EB7~ 1679+++8EB7~ ;Release 0 steps:
1680+++8EB7~ ;04/21/2007
1681+++8EB7~ ;Works start (PTxPlay adaptation); first beta.
1682+++8EB7~ ;04/22/2007
1683+++8EB7~ ;Job finished; beta-testing.
1684+++8EB7~ ;04/23/2007
1685+++8EB7~ ;PT v3.7 TS mode corrected (after AlCo remarks).
1686+++8EB7~ ;04/29/2007
1687+++8EB7~ ;Added 1.XX and 2.XX special commands interpretation for PT3
1688+++8EB7~ ;modules of v3.7+.
1689+++8EB7~ 1690+++8EB7~ ;Size (minimal build for ZX Spectrum):
1691+++8EB7~ ;Code block #908 bytes
1692+++8EB7~ ;Variables #2BF bytes (can be stripped)
1693+++8EB7~ ;Total size #908+#2BF=#BC7 (3015) bytes
1694+++8EB7~ 1695+++8EB7~ ENDMOD
1696+++8EB7~ 1697+++8EB7 endif
1698+++8EB7
0077++ 8EB7
0078++ 8EB7 PT2.Play=PTS.PLAY
0079++ 8EB7 PT2.Mute=PTS.MUTE
0080++ 8EB7 PT2.End
0081++ 8EB7
0082++ 8EB7 display "PT2 module size: ",PT2.End-PT2.Start
0083++ 8EB7 endif
0084++ 8EB7
0420+ 8EB7 include "ts.asm"
0001++ 8EB7 ifndef _ts_asm_defined
0002++ 8EB7 define _ts_asm_defined
0003++ 8EB7
0004++ 8EB7 module TS
0005++ 8EB7
0006++ 8EB7 struct Footer
0007++ 8EB7~ Sign1 DS 4
0008++ 8EB7~ Size1 DW 0
0009++ 8EB7~ Sign2 DS 4
0010++ 8EB7~ Size2 DW 0
0011++ 8EB7~ Sign3 DS 4
0012++ 8EB7 ENDS
0013++ 8EB7
0014++ 8EB7 Start
0015++ 8EB7 ifndef NoPrologue
0016++ 8EB7~ ld hl,End
0017++ 8EB7~ jr .init
0018++ 8EB7~ jp PTS.PLAY
0019++ 8EB7~ jp PTS.MUTE
0020++ 8EB7~ .init call CheckFormat
0021++ 8EB7~ ;ignore invalids
0022++ 8EB7 endif
0023++ 8EB7
0024++ 8EB7 3E 10 Init ld a,PTS.SETUP.TS02
0025++ 8EB9 C3 6C 82 jp PTS.INIT
0026++ 8EBC
0027++ 8EBC ;in HL - module addr
0028++ 8EBC ;out Z - is ts
0029++ 8EBC ;out HL/DE modules offsets (valid only if Z)
0030++ 8EBC CheckFormat
0031++ 8EBD 54 5D ld d,h,e,l
0032++ 8EBE 14 inc d ;skip 256 bytes
0033++ 8EBF .findfooter
0034++ 8EC0 62 6B ld h,d,l,e
0035++ 8EC1 CD CE 8E call CheckFooter
0036++ 8EC4 C8 ret z
0037++ 8EC5 1C inc e
0038++ 8EC6 20 F7 jr nz,.findfooter
0039++ 8EC8 14 inc d
0040++ 8EC9 20 F4 jr nz,.findfooter
0041++ 8ECB 1C inc e ;reset Z
0042++ 8ECC ;hl/de are invalid!!!
0043++ 8ECC C9 ret
0044++ 8ECD
0045++ 8ECD ;in HL - module addr
0046++ 8ECD ;in BC - module size
0047++ 8ECD ;out Z - is ts
0048++ 8ECD ;out HL/DE - modules offsets (valid only if Z)
0049++ 8ECD ifdef HaveFormatCheck
0050++ 8ECD CheckFormatKnownSize
0051++ 8ECD 09 add hl,bc
0052++ 8ECE endif
0053++ 8ECE CheckFooter
0054++ 8ECE 2B dec hl
0055++ 8ECF 7E ld a,(hl)
0056++ 8ED0 FE 53 cp "S"
0057++ 8ED2 C0 ret nz
0058++ 8ED3 2B dec hl
0059++ 8ED4 7E ld a,(hl)
0060++ 8ED5 FE 54 cp "T"
0061++ 8ED7 C0 ret nz
0062++ 8ED8 2B dec hl
0063++ 8ED9 7E ld a,(hl)
0064++ 8EDA FE 32 cp "2"
0065++ 8EDC C0 ret nz
0066++ 8EDD 2B dec hl
0067++ 8EDE 7E ld a,(hl)
0068++ 8EDF FE 30 cp "0"
0069++ 8EE1 C0 ret nz
0070++ 8EE2 2B dec hl
0071++ 8EE3 56 ld d,(hl)
0072++ 8EE4 2B dec hl
0073++ 8EE5 5E ld e,(hl) ;Size2
0074++ 8EE9 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign2
0075++ 8EEA 2B dec hl
0076++ 8EEB 46 ld b,(hl)
0077++ 8EEC 2B dec hl
0078++ 8EED 4E ld c,(hl) ;Size1
0079++ 8EF1 2B 2B 2B 2B dec hl,hl,hl,hl;skip Sign1
0080++ 8EF2
0081++ 8EF2 ED 52 sbc hl,de
0082++ 8EF4 54 ld d,h
0083++ 8EF5 5D ld e,l
0084++ 8EF6 ED 42 sbc hl,bc
0085++ 8EF8 AF xor a
0086++ 8EF9 C9 ret
0087++ 8EFA
0088++ 8EFA ifdef HaveFormatCheck
0089++ 8EFA display "TS checker size: ",$-CheckFormat
0090++ 8EFA endif
0091++ 8EFA
0092++ 8EFA endmod
0093++ 8EFA
0094++ 8EFA include "PTSPlay.asm"
0001+++8EFA ifndef _pts_asm_defined
0002+++8EFA~ define _pts_asm_defined
0003+++8EFA~ 0004+++8EFA~ MODULE PTS
0005+++8EFA~
0006+++8EFA~ ;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum
0007+++8EFA~ ;(c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>
0008+++8EFA~ ;Specially for AlCo
0009+++8EFA~ ;http://bulba.untergrund.net/ (http://bulba.at.kz/)
0010+++8EFA~ 0011+++8EFA~ ;Release number
0012+++8EFA~ Release EQU "0"
0013+++8EFA~ 0014+++8EFA~ ;Conditional assembly
0015+++8EFA~ ;1) Current position counters at (Vars1+0) and (Vars2+0)
0016+++8EFA~ CurPosCounter=0
0017+++8EFA~ ;2) Allow channels allocation bits at (SETUP)
0018+++8EFA~ ACBBAC=0
0019+++8EFA~ ;3) Allow loop checking and disabling
0020+++8EFA~ LoopChecker=0
0021+++8EFA~ ;4) Insert official identificator
0022+++8EFA~ Id=0
0023+++8EFA~ ;5) Set IY for correct return to ZX Basic
0024+++8EFA~ Basic=0
0025+++8EFA~ 0026+++8EFA~ ;Features
0027+++8EFA~ ;--------
0028+++8EFA~ ;-Can be compiled at any address (i.e. no need rounding ORG
0029+++8EFA~ ; address).
0030+++8EFA~ ;-Variables (VARS) can be located at any address (not only after
0031+++8EFA~ ; code block).
0032+++8EFA~ ;-INIT subprogram checks PT3-module version and rightly
0033+++8EFA~ ; generates both note and volume tables outside of code block
0034+++8EFA~ ; (in VARS).
0035+++8EFA~ ;-Two portamento (spc. command 3xxx) algorithms (depending of
0036+++8EFA~ ; PT3 module version).
0037+++8EFA~ ;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
0038+++8EFA~ ; and higher).
0039+++8EFA~ ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
0040+++8EFA~ ;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard.
0041+++8EFA~ ;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
0042+++8EFA~ ;-See also notes at the end of this source code.
0043+++8EFA~ 0044+++8EFA~ ;Limitations
0045+++8EFA~ ;-----------
0046+++8EFA~ ;-Can run in RAM only (self-modified code is used).
0047+++8EFA~ ;-PT2 position list must be end by #FF marker only.
0048+++8EFA~ 0049+++8EFA~ ;Warning!!! PLAY subprogram can crash if no module are loaded
0050+++8EFA~ ;into RAM or INIT subprogram was not called before.
0051+++8EFA~ 0052+++8EFA~ ;Call MUTE or INIT one more time to mute sound after stopping
0053+++8EFA~ ;playing
0054+++8EFA~ 0055+++8EFA~ TonA EQU 0
0056+++8EFA~ TonB EQU 2
0057+++8EFA~ TonC EQU 4
0058+++8EFA~ Noise EQU 6
0059+++8EFA~ Mixer EQU 7
0060+++8EFA~ AmplA EQU 8
0061+++8EFA~ AmplB EQU 9
0062+++8EFA~ AmplC EQU 10
0063+++8EFA~ Env EQU 11
0064+++8EFA~ EnvTp EQU 13
0065+++8EFA~ 0066+++8EFA~ START
0067+++8EFA~ 0068+++8EFA~ SETUP.NOLOOP EQU 1
0069+++8EFA~ SETUP.PT2 EQU 2
0070+++8EFA~ SETUP.ACB EQU 4
0071+++8EFA~ SETUP.BAC EQU 8
0072+++8EFA~ SETUP.TS02 EQU 16
0073+++8EFA~ SETUP.TSPT3 EQU 32
0074+++8EFA~ 0075+++8EFA~ SETUP DB 0 ;set bit0, if you want to play without looping
0076+++8EFA~ ;(optional);
0077+++8EFA~ ;set bit1 for PT2 and reset for PT3 before
0078+++8EFA~ ;calling INIT;
0079+++8EFA~ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional);
0080+++8EFA~ ;bits4-5: %00-no TS, %01-2 modules TS, %10-
0081+++8EFA~ ;autodetect PT3 TS-format by AlCo (PT 3.7+);
0082+++8EFA~ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not
0083+++8EFA~ ;documented and must be converted to new standard.
0084+++8EFA~ ;bit6 is set each time, when loop point of 2nd TS
0085+++8EFA~ ;module is passed (optional).
0086+++8EFA~ ;bit7 is set each time, when loop point of 1st TS
0087+++8EFA~ ;or of single module is passed (optional).
0088+++8EFA~ 0089+++8EFA~ ;Identifier
0090+++8EFA~ IF Id
0091+++8EFA~ DB "=UniPT2/PT3/TS-Player r.",Release,"="
0092+++8EFA~ ENDIF
0093+++8EFA~ 0094+++8EFA~ IF LoopChecker
0095+++8EFA~ CHECKLP LD HL,SETUP
0096+++8EFA~ BIT 0,(IY-100+VRS.ModNum)
0097+++8EFA~ JR Z,CHL1
0098+++8EFA~ SET 6,(HL)
0099+++8EFA~ JR CHL2
0100+++8EFA~ CHL1 SET 7,(HL)
0101+++8EFA~ CHL2 BIT 0,(HL)
0102+++8EFA~ RET Z
0103+++8EFA~ POP HL
0104+++8EFA~ INC (IY-100+VRS.DelyCnt)
0105+++8EFA~ INC (IY-100+VRS.ChanA+CHP.NtSkCn)
0106+++8EFA~ XOR A
0107+++8EFA~ LD (IY-100+VRS.AYREGS+AmplA),A
0108+++8EFA~ LD (IY-100+VRS.AYREGS+AmplB),A
0109+++8EFA~ LD (IY-100+VRS.AYREGS+AmplC),A
0110+++8EFA~ RET
0111+++8EFA~ ENDIF
0112+++8EFA~ 0113+++8EFA~ MUTE XOR A
0114+++8EFA~ LD H,A
0115+++8EFA~ LD L,A
0116+++8EFA~ LD (VARS1+VRS.AYREGS+AmplA),A
0117+++8EFA~ LD (VARS1+VRS.AYREGS+AmplB),HL
0118+++8EFA~ LD (VARS2+VRS.AYREGS+AmplA),A
0119+++8EFA~ LD (VARS2+VRS.AYREGS+AmplB),HL
0120+++8EFA~ JP ROUT
0121+++8EFA~ 0122+++8EFA~ INIT
0123+++8EFA~ ;HL - AddressOfModule
0124+++8EFA~ ;DE - AddresOf2ndModule
0125+++8EFA~ ;A - mode
0126+++8EFA~ PUSH DE
0127+++8EFA~ PUSH HL
0128+++8EFA~ LD HL,VARS
0129+++8EFA~ LD (HL),0
0130+++8EFA~ LD DE,VARS+1
0131+++8EFA~ LD BC,VAR0END-VARS-1
0132+++8EFA~ LDIR
0133+++8EFA~ INC HL
0134+++8EFA~ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero
0135+++8EFA~ LD (VARS2+VRS.AdInPtA),HL
0136+++8EFA~ 0137+++8EFA~ POP HL
0138+++8EFA~ LD IY,VARS1+100
0139+++8EFA~ LD (SETUP),A
0140+++8EFA~ AND SETUP.PT2
0141+++8EFA~ JP NZ,I_PT2
0142+++8EFA~ 0143+++8EFA~ CALL INITPT3
0144+++8EFA~ LD HL,(e_-SamCnv-2)*256+#18
0145+++8EFA~ LD (SamCnv),HL
0146+++8EFA~ LD A,#BA
0147+++8EFA~ LD (OrnCP),A
0148+++8EFA~ LD (SamCP),A
0149+++8EFA~ LD A,#7B
0150+++8EFA~ LD (OrnLD),A
0151+++8EFA~ LD (SamLD),A
0152+++8EFA~ LD A,#87
0153+++8EFA~ LD (SamClc2),A
0154+++8EFA~ POP HL
0155+++8EFA~ ;Use version and ton table of 1st module
0156+++8EFA~ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
0157+++8EFA~ SUB #30
0158+++8EFA~ JR C,L20
0159+++8EFA~ CP 10
0160+++8EFA~ JR C,L21
0161+++8EFA~ L20 LD A,6
0162+++8EFA~ L21 LD (Version),A
0163+++8EFA~ PUSH AF ;VolTable version
0164+++8EFA~ CP 4
0165+++8EFA~ LD A,(IX+99-100) ;TONE TABLE NUMBER
0166+++8EFA~ RLA
0167+++8EFA~ AND 7
0168+++8EFA~ PUSH AF ;NoteTable number
0169+++8EFA~ 0170+++8EFA~ LD IY,VARS2+100
0171+++8EFA~ LD A,(SETUP)
0172+++8EFA~ AND SETUP.TS02|SETUP.TSPT3
0173+++8EFA~ JR Z,NOTS
0174+++8EFA~ CP SETUP.TS02
0175+++8EFA~ JR Z,TwoPT3s
0176+++8EFA~ LD A,(Version)
0177+++8EFA~ CP 7
0178+++8EFA~ JR C,NOTS
0179+++8EFA~ LD A,(IX+98-100) ;ALCO TS MARKER
0180+++8EFA~ CP #20
0181+++8EFA~ JR Z,NOTS
0182+++8EFA~ LD HL,VARS1
0183+++8EFA~ LD DE,VARS2
0184+++8EFA~ LD BC,VRS
0185+++8EFA~ LDIR
0186+++8EFA~ SET 1,(IY-100+VRS.ModNum)
0187+++8EFA~ LD C,A
0188+++8EFA~ ADD A,A
0189+++8EFA~ ADD A,C
0190+++8EFA~ SUB 2
0191+++8EFA~ LD (TSSub),A
0192+++8EFA~ JR AlCoTS_
0193+++8EFA~ TwoPT3s CALL INITPT3
0194+++8EFA~ AlCoTS_ LD A,1
0195+++8EFA~ LD (is_ts),A
0196+++8EFA~ SET 0,(IY-100+VRS.ModNum)
0197+++8EFA~ 0198+++8EFA~ NOTS LD BC,PT3PD
0199+++8EFA~ LD HL,0
0200+++8EFA~ LD DE,PT3EMPTYORN
0201+++8EFA~ JR INITCOMMON
0202+++8EFA~ 0203+++8EFA~ I_PT2 CALL INITPT2
0204+++8EFA~ LD HL,#51CB
0205+++8EFA~ LD (SamCnv),HL
0206+++8EFA~ LD A,#BB
0207+++8EFA~ LD (OrnCP),A
0208+++8EFA~ LD (SamCP),A
0209+++8EFA~ LD A,#7A
0210+++8EFA~ LD (OrnLD),A
0211+++8EFA~ LD (SamLD),A
0212+++8EFA~ LD A,#80
0213+++8EFA~ LD (SamClc2),A
0214+++8EFA~ POP HL
0215+++8EFA~ LD A,5
0216+++8EFA~ LD (Version),A
0217+++8EFA~ PUSH AF
0218+++8EFA~ LD A,2
0219+++8EFA~ PUSH AF
0220+++8EFA~ 0221+++8EFA~ LD A,(SETUP)
0222+++8EFA~ AND SETUP.TS02|SETUP.TSPT3
0223+++8EFA~ JR Z,NOTS2
0224+++8EFA~ 0225+++8EFA~ LD IY,VARS2+100
0226+++8EFA~ LD A,1
0227+++8EFA~ LD (is_ts),A
0228+++8EFA~ SET 0,(IY-100+VRS.ModNum)
0229+++8EFA~ CALL INITPT2
0230+++8EFA~ 0231+++8EFA~ NOTS2 LD BC,PT2PD
0232+++8EFA~ LD HL,#8687
0233+++8EFA~ LD DE,PT2EMPTYORN
0234+++8EFA~ 0235+++8EFA~ INITCOMMON
0236+++8EFA~ 0237+++8EFA~ IF Basic
0238+++8EFA~ LD IY,#5C3A
0239+++8EFA~ ENDIF
0240+++8EFA~ 0241+++8EFA~ LD (PTDEC),BC
0242+++8EFA~ LD (PsCalc),HL
0243+++8EFA~ PUSH DE
0244+++8EFA~ 0245+++8EFA~ ;note table data depacker
0246+++8EFA~ ;(c) Ivan Roshin
0247+++8EFA~ LD DE,T_PACK
0248+++8EFA~ LD BC,T1_+(2*49)-1
0249+++8EFA~ TP_0 LD A,(DE)
0250+++8EFA~ INC DE
0251+++8EFA~ CP 15*2
0252+++8EFA~ JR NC,TP_1
0253+++8EFA~ LD H,A
0254+++8EFA~ LD A,(DE)
0255+++8EFA~ LD L,A
0256+++8EFA~ INC DE
0257+++8EFA~ JR TP_2
0258+++8EFA~ TP_1 PUSH DE
0259+++8EFA~ LD D,0
0260+++8EFA~ LD E,A
0261+++8EFA~ ADD HL,DE
0262+++8EFA~ ADD HL,DE
0263+++8EFA~ POP DE
0264+++8EFA~ TP_2 LD A,H
0265+++8EFA~ LD (BC),A
0266+++8EFA~ DEC BC
0267+++8EFA~ LD A,L
0268+++8EFA~ LD (BC),A
0269+++8EFA~ DEC BC
0270+++8EFA~ SUB (#F8*2)&255
0271+++8EFA~ JR NZ,TP_0
0272+++8EFA~ 0273+++8EFA~ INC A
0274+++8EFA~ LD (VARS1+VRS.DelyCnt),A
0275+++8EFA~ LD (VARS2+VRS.DelyCnt),A
0276+++8EFA~ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
0277+++8EFA~ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL
0278+++8EFA~ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL
0279+++8EFA~ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL
0280+++8EFA~ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL
0281+++8EFA~ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL
0282+++8EFA~ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL
0283+++8EFA~ POP HL
0284+++8EFA~ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL
0285+++8EFA~ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL
0286+++8EFA~ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL
0287+++8EFA~ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL
0288+++8EFA~ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL
0289+++8EFA~ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL
0290+++8EFA~ 0291+++8EFA~ POP AF
0292+++8EFA~ 0293+++8EFA~ ;NoteTableCreator (c) Ivan Roshin
0294+++8EFA~ ;A - NoteTableNumber*2+VersionForNoteTable
0295+++8EFA~ ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
0296+++8EFA~ 0297+++8EFA~ LD HL,NT_DATA
0298+++8EFA~ LD D,0
0299+++8EFA~ ADD A,A
0300+++8EFA~ LD E,A
0301+++8EFA~ ADD HL,DE
0302+++8EFA~ LD E,(HL)
0303+++8EFA~ INC HL
0304+++8EFA~ SRL E
0305+++8EFA~ SBC A,A
0306+++8EFA~ AND #A7 ;#00 (NOP) or #A7 (AND A)
0307+++8EFA~ LD (L3),A
0308+++8EFA~ EX DE,HL
0309+++8EFA~ LD BC,T1_
0310+++8EFA~ ADD HL,BC
0311+++8EFA~ 0312+++8EFA~ LD A,(DE)
0313+++8EFA~ ADD A,T_&255
0314+++8EFA~ LD C,A
0315+++8EFA~ ADC A,T_/256
0316+++8EFA~ SUB C
0317+++8EFA~ LD B,A
0318+++8EFA~ PUSH BC
0319+++8EFA~ LD DE,NT_
0320+++8EFA~ PUSH DE
0321+++8EFA~ 0322+++8EFA~ LD B,12
0323+++8EFA~ L1 PUSH BC
0324+++8EFA~ LD C,(HL)
0325+++8EFA~ INC HL
0326+++8EFA~ PUSH HL
0327+++8EFA~ LD B,(HL)
0328+++8EFA~ 0329+++8EFA~ PUSH DE
0330+++8EFA~ EX DE,HL
0331+++8EFA~ LD DE,23
0332+++8EFA~ LD IXH,8
0333+++8EFA~ 0334+++8EFA~ L2 SRL B
0335+++8EFA~ RR C
0336+++8EFA~ L3 DB #19 ;AND A or NOP
0337+++8EFA~ LD A,C
0338+++8EFA~ ADC A,D ;=ADC 0
0339+++8EFA~ LD (HL),A
0340+++8EFA~ INC HL
0341+++8EFA~ LD A,B
0342+++8EFA~ ADC A,D
0343+++8EFA~ LD (HL),A
0344+++8EFA~ ADD HL,DE
0345+++8EFA~ DEC IXH
0346+++8EFA~ JR NZ,L2
0347+++8EFA~ 0348+++8EFA~ POP DE
0349+++8EFA~ INC DE
0350+++8EFA~ INC DE
0351+++8EFA~ POP HL
0352+++8EFA~ INC HL
0353+++8EFA~ POP BC
0354+++8EFA~ DJNZ L1
0355+++8EFA~ 0356+++8EFA~ POP HL
0357+++8EFA~ POP DE
0358+++8EFA~ 0359+++8EFA~ LD A,E
0360+++8EFA~ CP TCOLD_1&255
0361+++8EFA~ JR NZ,CORR_1
0362+++8EFA~ LD A,#FD
0363+++8EFA~ LD (NT_+#2E),A
0364+++8EFA~ 0365+++8EFA~ CORR_1 LD A,(DE)
0366+++8EFA~ AND A
0367+++8EFA~ JR Z,TC_EXIT
0368+++8EFA~ RRA
0369+++8EFA~ PUSH AF
0370+++8EFA~ ADD A,A
0371+++8EFA~ LD C,A
0372+++8EFA~ ADD HL,BC
0373+++8EFA~ POP AF
0374+++8EFA~ JR NC,CORR_2
0375+++8EFA~ DEC (HL)
0376+++8EFA~ DEC (HL)
0377+++8EFA~ CORR_2 INC (HL)
0378+++8EFA~ AND A
0379+++8EFA~ SBC HL,BC
0380+++8EFA~ INC DE
0381+++8EFA~ JR CORR_1
0382+++8EFA~ 0383+++8EFA~ TC_EXIT
0384+++8EFA~ 0385+++8EFA~ POP AF
0386+++8EFA~ 0387+++8EFA~ ;VolTableCreator (c) Ivan Roshin
0388+++8EFA~ ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
0389+++8EFA~ ;5.. - 2.x,3.5x..3.6x..VTII1.0)
0390+++8EFA~ 0391+++8EFA~ CP 5
0392+++8EFA~ LD HL,#11
0393+++8EFA~ LD D,H
0394+++8EFA~ LD E,H
0395+++8EFA~ LD A,#17
0396+++8EFA~ JR NC,M1
0397+++8EFA~ DEC L
0398+++8EFA~ LD E,L
0399+++8EFA~ XOR A
0400+++8EFA~ M1 LD (M2),A
0401+++8EFA~ 0402+++8EFA~ LD IX,VT_+16
0403+++8EFA~ 0404+++8EFA~ LD C,#F
0405+++8EFA~ INITV2 PUSH HL
0406+++8EFA~ 0407+++8EFA~ ADD HL,DE
0408+++8EFA~ EX DE,HL
0409+++8EFA~ SBC HL,HL
0410+++8EFA~ 0411+++8EFA~ LD B,#10
0412+++8EFA~ INITV1 LD A,L
0413+++8EFA~ M2 DB #7D
0414+++8EFA~ LD A,H
0415+++8EFA~ ADC A,0
0416+++8EFA~ LD (IX),A
0417+++8EFA~ INC IX
0418+++8EFA~ ADD HL,DE
0419+++8EFA~ DJNZ INITV1
0420+++8EFA~ 0421+++8EFA~ POP HL
0422+++8EFA~ LD A,E
0423+++8EFA~ CP #77
0424+++8EFA~ JR NZ,M3
0425+++8EFA~ INC E
0426+++8EFA~ M3 DEC C
0427+++8EFA~ JR NZ,INITV2
0428+++8EFA~ 0429+++8EFA~ JP ROUT
0430+++8EFA~ 0431+++8EFA~ INITPT3 CALL SETMDAD
0432+++8EFA~ PUSH HL
0433+++8EFA~ LD DE,100
0434+++8EFA~ ADD HL,DE
0435+++8EFA~ LD A,(HL)
0436+++8EFA~ LD (IY-100+VRS.Delay),A
0437+++8EFA~ PUSH HL
0438+++8EFA~ POP IX
0439+++8EFA~ ADD HL,DE
0440+++8EFA~ CALL SETCPPT
0441+++8EFA~ LD E,(IX+102-100)
0442+++8EFA~ INC HL
0443+++8EFA~ 0444+++8EFA~ IF CurPosCounter
0445+++8EFA~ LD (IY-100+VRS.PosSub),L
0446+++8EFA~ ENDIF
0447+++8EFA~ 0448+++8EFA~ ADD HL,DE
0449+++8EFA~ CALL SETLPPT
0450+++8EFA~ POP DE
0451+++8EFA~ LD L,(IX+103-100)
0452+++8EFA~ LD H,(IX+104-100)
0453+++8EFA~ ADD HL,DE
0454+++8EFA~ CALL SETPTPT
0455+++8EFA~ LD HL,169
0456+++8EFA~ ADD HL,DE
0457+++8EFA~ CALL SETORPT
0458+++8EFA~ LD HL,105
0459+++8EFA~ ADD HL,DE
0460+++8EFA~ 0461+++8EFA~ SETSMPT LD (IY-100+VRS.SamPtrs),L
0462+++8EFA~ LD (IY-100+VRS.SamPtrs+1),H
0463+++8EFA~ RET
0464+++8EFA~ 0465+++8EFA~ INITPT2 LD A,(HL)
0466+++8EFA~ LD (IY-100+VRS.Delay),A
0467+++8EFA~ PUSH HL
0468+++8EFA~ PUSH HL
0469+++8EFA~ PUSH HL
0470+++8EFA~ INC HL
0471+++8EFA~ INC HL
0472+++8EFA~ LD A,(HL)
0473+++8EFA~ INC HL
0474+++8EFA~ CALL SETSMPT
0475+++8EFA~ LD E,(HL)
0476+++8EFA~ INC HL
0477+++8EFA~ LD D,(HL)
0478+++8EFA~ POP HL
0479+++8EFA~ AND A
0480+++8EFA~ SBC HL,DE
0481+++8EFA~ CALL SETMDAD
0482+++8EFA~ POP HL
0483+++8EFA~ LD DE,67
0484+++8EFA~ ADD HL,DE
0485+++8EFA~ CALL SETORPT
0486+++8EFA~ LD E,32
0487+++8EFA~ ADD HL,DE
0488+++8EFA~ LD C,(HL)
0489+++8EFA~ INC HL
0490+++8EFA~ LD B,(HL)
0491+++8EFA~ LD E,30
0492+++8EFA~ ADD HL,DE
0493+++8EFA~ CALL SETCPPT
0494+++8EFA~ LD E,A
0495+++8EFA~ INC HL
0496+++8EFA~ 0497+++8EFA~ IF CurPosCounter
0498+++8EFA~ LD (IY-100+VRS.PosSub),L
0499+++8EFA~ ENDIF
0500+++8EFA~ 0501+++8EFA~ ADD HL,DE
0502+++8EFA~ CALL SETLPPT
0503+++8EFA~ POP HL
0504+++8EFA~ ADD HL,BC
0505+++8EFA~ 0506+++8EFA~ SETPTPT LD (IY-100+VRS.PatsPtr),L
0507+++8EFA~ LD (IY-100+VRS.PatsPtr+1),H
0508+++8EFA~ RET
0509+++8EFA~ 0510+++8EFA~ SETMDAD LD (IY-100+VRS.MODADDR),L
0511+++8EFA~ LD (IY-100+VRS.MODADDR+1),H
0512+++8EFA~ RET
0513+++8EFA~ 0514+++8EFA~ SETORPT LD (IY-100+VRS.OrnPtrs),L
0515+++8EFA~ LD (IY-100+VRS.OrnPtrs+1),H
0516+++8EFA~ RET
0517+++8EFA~ 0518+++8EFA~ SETCPPT LD (IY-100+VRS.CrPsPtr),L
0519+++8EFA~ LD (IY-100+VRS.CrPsPtr+1),H
0520+++8EFA~ RET
0521+++8EFA~ 0522+++8EFA~ SETLPPT LD (IY-100+VRS.LPosPtr),L
0523+++8EFA~ LD (IY-100+VRS.LPosPtr+1),H
0524+++8EFA~ RET
0525+++8EFA~ 0526+++8EFA~ SETENBS LD (IY-100+VRS.EnvBase),L
0527+++8EFA~ LD (IY-100+VRS.EnvBase+1),H
0528+++8EFA~ RET
0529+++8EFA~ 0530+++8EFA~ SETESLD LD (IY-100+VRS.CurESld),L
0531+++8EFA~ LD (IY-100+VRS.CurESld+1),H
0532+++8EFA~ RET
0533+++8EFA~ 0534+++8EFA~ GETIX PUSH IY
0535+++8EFA~ POP IX
0536+++8EFA~ ADD IX,DE
0537+++8EFA~ RET
0538+++8EFA~ 0539+++8EFA~ PTDECOD CALL GETIX
0540+++8EFA~ PTDEC EQU $+1
0541+++8EFA~ JP #C3C3
0542+++8EFA~ 0543+++8EFA~ ;PT2 pattern decoder
0544+++8EFA~ PD2_SAM CALL SETSAM
0545+++8EFA~ JR PD2_LOOP
0546+++8EFA~ 0547+++8EFA~ PD2_EOff LD (IX-12+CHP.Env_En),A
0548+++8EFA~ JR PD2_LOOP
0549+++8EFA~ 0550+++8EFA~ PD2_ENV LD (IX-12+CHP.Env_En),16
0551+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A
0552+++8EFA~ LD A,(BC)
0553+++8EFA~ INC BC
0554+++8EFA~ LD L,A
0555+++8EFA~ LD A,(BC)
0556+++8EFA~ INC BC
0557+++8EFA~ LD H,A
0558+++8EFA~ CALL SETENBS
0559+++8EFA~ JR PD2_LOOP
0560+++8EFA~ 0561+++8EFA~ PD2_ORN CALL SETORN
0562+++8EFA~ JR PD2_LOOP
0563+++8EFA~ 0564+++8EFA~ PD2_SKIP INC A
0565+++8EFA~ LD (IX-12+CHP.NNtSkp),A
0566+++8EFA~ JR PD2_LOOP
0567+++8EFA~ 0568+++8EFA~ PD2_VOL RRCA
0569+++8EFA~ RRCA
0570+++8EFA~ RRCA
0571+++8EFA~ RRCA
0572+++8EFA~ LD (IX-12+CHP.Volume),A
0573+++8EFA~ JR PD2_LOOP
0574+++8EFA~ 0575+++8EFA~ PD2_DEL CALL C_DELAY
0576+++8EFA~ JR PD2_LOOP
0577+++8EFA~ 0578+++8EFA~ PD2_GLIS SET 2,(IX-12+CHP.Flags)
0579+++8EFA~ INC A
0580+++8EFA~ LD (IX-12+CHP.TnSlDl),A
0581+++8EFA~ LD (IX-12+CHP.TSlCnt),A
0582+++8EFA~ LD A,(BC)
0583+++8EFA~ INC BC
0584+++8EFA~ LD (IX-12+CHP.TSlStp),A
0585+++8EFA~ ADD A,A
0586+++8EFA~ SBC A,A
0587+++8EFA~ LD (IX-12+CHP.TSlStp+1),A
0588+++8EFA~ SCF
0589+++8EFA~ JR PD2_LP2
0590+++8EFA~ 0591+++8EFA~ PT2PD AND A
0592+++8EFA~ 0593+++8EFA~ PD2_LP2 EX AF,AF'
0594+++8EFA~ 0595+++8EFA~ PD2_LOOP LD A,(BC)
0596+++8EFA~ INC BC
0597+++8EFA~ ADD A,#20
0598+++8EFA~ JR Z,PD2_REL
0599+++8EFA~ JR C,PD2_SAM
0600+++8EFA~ ADD A,96
0601+++8EFA~ JR C,PD2_NOTE
0602+++8EFA~ INC A
0603+++8EFA~ JR Z,PD2_EOff
0604+++8EFA~ ADD A,15
0605+++8EFA~ JP Z,PD_FIN
0606+++8EFA~ JR C,PD2_ENV
0607+++8EFA~ ADD A,#10
0608+++8EFA~ JR C,PD2_ORN
0609+++8EFA~ ADD A,#40
0610+++8EFA~ JR C,PD2_SKIP
0611+++8EFA~ ADD A,#10
0612+++8EFA~ JR C,PD2_VOL
0613+++8EFA~ INC A
0614+++8EFA~ JR Z,PD2_DEL
0615+++8EFA~ INC A
0616+++8EFA~ JR Z,PD2_GLIS
0617+++8EFA~ INC A
0618+++8EFA~ JR Z,PD2_PORT
0619+++8EFA~ INC A
0620+++8EFA~ JR Z,PD2_STOP
0621+++8EFA~ LD A,(BC)
0622+++8EFA~ INC BC
0623+++8EFA~ LD (IX-12+CHP.CrNsSl),A
0624+++8EFA~ JR PD2_LOOP
0625+++8EFA~ 0626+++8EFA~ PD2_PORT RES 2,(IX-12+CHP.Flags)
0627+++8EFA~ LD A,(BC)
0628+++8EFA~ INC BC
0629+++8EFA~ INC BC ;ignoring precalc delta to right sound
0630+++8EFA~ INC BC
0631+++8EFA~ SCF
0632+++8EFA~ JR PD2_LP2
0633+++8EFA~ 0634+++8EFA~ PD2_STOP LD (IX-12+CHP.TSlCnt),A
0635+++8EFA~ JR PD2_LOOP
0636+++8EFA~ 0637+++8EFA~ PD2_REL LD (IX-12+CHP.Flags),A
0638+++8EFA~ JR PD2_EXIT
0639+++8EFA~ 0640+++8EFA~ PD2_NOTE LD L,A
0641+++8EFA~ LD A,(IX-12+CHP.Note)
0642+++8EFA~ LD (PrNote+1),A
0643+++8EFA~ LD (IX-12+CHP.Note),L
0644+++8EFA~ XOR A
0645+++8EFA~ LD (IX-12+CHP.TSlCnt),A
0646+++8EFA~ SET 0,(IX-12+CHP.Flags)
0647+++8EFA~ EX AF,AF'
0648+++8EFA~ JR NC,NOGLIS2
0649+++8EFA~ BIT 2,(IX-12+CHP.Flags)
0650+++8EFA~ JR NZ,NOPORT2
0651+++8EFA~ LD (LoStep),A
0652+++8EFA~ ADD A,A
0653+++8EFA~ SBC A,A
0654+++8EFA~ EX AF,AF'
0655+++8EFA~ LD H,A
0656+++8EFA~ LD L,A
0657+++8EFA~ INC A
0658+++8EFA~ CALL SETPORT
0659+++8EFA~ NOPORT2 LD (IX-12+CHP.TSlCnt),1
0660+++8EFA~ NOGLIS2 XOR A
0661+++8EFA~ 0662+++8EFA~ 0663+++8EFA~ PD2_EXIT LD (IX-12+CHP.PsInSm),A
0664+++8EFA~ LD (IX-12+CHP.PsInOr),A
0665+++8EFA~ LD (IX-12+CHP.CrTnSl),A
0666+++8EFA~ LD (IX-12+CHP.CrTnSl+1),A
0667+++8EFA~ JP PD_FIN
0668+++8EFA~ 0669+++8EFA~ ;PT3 pattern decoder
0670+++8EFA~ PD_OrSm LD (IX-12+CHP.Env_En),0
0671+++8EFA~ CALL SETORN
0672+++8EFA~ PD_SAM_ LD A,(BC)
0673+++8EFA~ INC BC
0674+++8EFA~ RRCA
0675+++8EFA~ 0676+++8EFA~ PD_SAM CALL SETSAM
0677+++8EFA~ JR PD_LOOP
0678+++8EFA~ 0679+++8EFA~ PD_VOL RRCA
0680+++8EFA~ RRCA
0681+++8EFA~ RRCA
0682+++8EFA~ RRCA
0683+++8EFA~ LD (IX-12+CHP.Volume),A
0684+++8EFA~ JR PD_LP2
0685+++8EFA~
0686+++8EFA~ PD_EOff LD (IX-12+CHP.Env_En),A
0687+++8EFA~ LD (IX-12+CHP.PsInOr),A
0688+++8EFA~ JR PD_LP2
0689+++8EFA~ 0690+++8EFA~ PD_SorE DEC A
0691+++8EFA~ JR NZ,PD_ENV
0692+++8EFA~ LD A,(BC)
0693+++8EFA~ INC BC
0694+++8EFA~ LD (IX-12+CHP.NNtSkp),A
0695+++8EFA~ JR PD_LP2
0696+++8EFA~ 0697+++8EFA~ PD_ENV CALL SETENV
0698+++8EFA~ JR PD_LP2
0699+++8EFA~ 0700+++8EFA~ PD_ORN CALL SETORN
0701+++8EFA~ JR PD_LOOP
0702+++8EFA~ 0703+++8EFA~ PD_ESAM LD (IX-12+CHP.Env_En),A
0704+++8EFA~ LD (IX-12+CHP.PsInOr),A
0705+++8EFA~ CALL NZ,SETENV
0706+++8EFA~ JR PD_SAM_
0707+++8EFA~ 0708+++8EFA~ PT3PD LD A,(IX-12+CHP.Note)
0709+++8EFA~ LD (PrNote+1),A
0710+++8EFA~ LD L,(IX-12+CHP.CrTnSl)
0711+++8EFA~ LD H,(IX-12+CHP.CrTnSl+1)
0712+++8EFA~ LD (PrSlide+1),HL
0713+++8EFA~ 0714+++8EFA~ PD_LOOP LD DE,#2010
0715+++8EFA~ PD_LP2 LD A,(BC)
0716+++8EFA~ INC BC
0717+++8EFA~ ADD A,E
0718+++8EFA~ JR C,PD_OrSm
0719+++8EFA~ ADD A,D
0720+++8EFA~ JR Z,PD_FIN
0721+++8EFA~ JR C,PD_SAM
0722+++8EFA~ ADD A,E
0723+++8EFA~ JR Z,PD_REL
0724+++8EFA~ JR C,PD_VOL
0725+++8EFA~ ADD A,E
0726+++8EFA~ JR Z,PD_EOff
0727+++8EFA~ JR C,PD_SorE
0728+++8EFA~ ADD A,96
0729+++8EFA~ JR C,PD_NOTE
0730+++8EFA~ ADD A,E
0731+++8EFA~ JR C,PD_ORN
0732+++8EFA~ ADD A,D
0733+++8EFA~ JR C,PD_NOIS
0734+++8EFA~ ADD A,E
0735+++8EFA~ JR C,PD_ESAM
0736+++8EFA~ ADD A,A
0737+++8EFA~ LD E,A
0738+++8EFA~ LD HL,(SPCCOMS+#FF20-#2000)&65535
0739+++8EFA~ ADD HL,DE
0740+++8EFA~ LD E,(HL)
0741+++8EFA~ INC HL
0742+++8EFA~ LD D,(HL)
0743+++8EFA~ PUSH DE
0744+++8EFA~ JR PD_LOOP
0745+++8EFA~ 0746+++8EFA~ PD_NOIS LD (IY-100+VRS.Ns_Base),A
0747+++8EFA~ JR PD_LP2
0748+++8EFA~ 0749+++8EFA~ PD_REL RES 0,(IX-12+CHP.Flags)
0750+++8EFA~ JR PD_RES
0751+++8EFA~ 0752+++8EFA~ PD_NOTE LD (IX-12+CHP.Note),A
0753+++8EFA~ SET 0,(IX-12+CHP.Flags)
0754+++8EFA~ XOR A
0755+++8EFA~ 0756+++8EFA~ PD_RES LD (PDSP_+1),SP
0757+++8EFA~ LD SP,IX
0758+++8EFA~ LD H,A
0759+++8EFA~ LD L,A
0760+++8EFA~ PUSH HL
0761+++8EFA~ PUSH HL
0762+++8EFA~ PUSH HL
0763+++8EFA~ PUSH HL
0764+++8EFA~ PUSH HL
0765+++8EFA~ PUSH HL
0766+++8EFA~ PDSP_ LD SP,#3131
0767+++8EFA~ 0768+++8EFA~ PD_FIN LD A,(IX-12+CHP.NNtSkp)
0769+++8EFA~ LD (IX-12+CHP.NtSkCn),A
0770+++8EFA~ RET
0771+++8EFA~ 0772+++8EFA~ C_PORTM LD A,(BC)
0773+++8EFA~ INC BC
0774+++8EFA~ ;SKIP PRECALCULATED TONE DELTA (BECAUSE
0775+++8EFA~ ;CANNOT BE RIGHT AFTER PT3 COMPILATION)
0776+++8EFA~ INC BC
0777+++8EFA~ INC BC
0778+++8EFA~ EX AF,AF'
0779+++8EFA~ LD A,(BC) ;SIGNED TONE STEP
0780+++8EFA~ INC BC
0781+++8EFA~ LD (LoStep),A
0782+++8EFA~ LD A,(BC)
0783+++8EFA~ INC BC
0784+++8EFA~ AND A
0785+++8EFA~ EX AF,AF'
0786+++8EFA~ LD L,(IX-12+CHP.CrTnSl)
0787+++8EFA~ LD H,(IX-12+CHP.CrTnSl+1)
0788+++8EFA~ 0789+++8EFA~ ;Set portamento variables
0790+++8EFA~ ;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
0791+++8EFA~ 0792+++8EFA~ SETPORT RES 2,(IX-12+CHP.Flags)
0793+++8EFA~ LD (IX-12+CHP.TnSlDl),A
0794+++8EFA~ LD (IX-12+CHP.TSlCnt),A
0795+++8EFA~ PUSH HL
0796+++8EFA~ LD DE,NT_
0797+++8EFA~ LD A,(IX-12+CHP.Note)
0798+++8EFA~ LD (IX-12+CHP.SlToNt),A
0799+++8EFA~ ADD A,A
0800+++8EFA~ LD L,A
0801+++8EFA~ LD H,0
0802+++8EFA~ ADD HL,DE
0803+++8EFA~ LD A,(HL)
0804+++8EFA~ INC HL
0805+++8EFA~ LD H,(HL)
0806+++8EFA~ LD L,A
0807+++8EFA~ PUSH HL
0808+++8EFA~ PrNote LD A,#3E
0809+++8EFA~ LD (IX-12+CHP.Note),A
0810+++8EFA~ ADD A,A
0811+++8EFA~ LD L,A
0812+++8EFA~ LD H,0
0813+++8EFA~ ADD HL,DE
0814+++8EFA~ LD E,(HL)
0815+++8EFA~ INC HL
0816+++8EFA~ LD D,(HL)
0817+++8EFA~ POP HL
0818+++8EFA~ SBC HL,DE
0819+++8EFA~ LD (IX-12+CHP.TnDelt),L
0820+++8EFA~ LD (IX-12+CHP.TnDelt+1),H
0821+++8EFA~ POP DE
0822+++8EFA~ Version EQU $+1
0823+++8EFA~ LD A,#3E
0824+++8EFA~ CP 6
0825+++8EFA~ JR C,OLDPRTM ;Old 3xxx for PT v3.5-
0826+++8EFA~ PrSlide LD DE,#1111
0827+++8EFA~ LD (IX-12+CHP.CrTnSl),E
0828+++8EFA~ LD (IX-12+CHP.CrTnSl+1),D
0829+++8EFA~ LoStep EQU $+1
0830+++8EFA~ OLDPRTM LD A,#3E
0831+++8EFA~ EX AF,AF'
0832+++8EFA~ JR Z,NOSIG
0833+++8EFA~ EX DE,HL
0834+++8EFA~ NOSIG SBC HL,DE
0835+++8EFA~ JP P,SET_STP
0836+++8EFA~ CPL
0837+++8EFA~ EX AF,AF'
0838+++8EFA~ NEG
0839+++8EFA~ EX AF,AF'
0840+++8EFA~ SET_STP LD (IX-12+CHP.TSlStp+1),A
0841+++8EFA~ EX AF,AF'
0842+++8EFA~ LD (IX-12+CHP.TSlStp),A
0843+++8EFA~ LD (IX-12+CHP.COnOff),0
0844+++8EFA~ RET
0845+++8EFA~ 0846+++8EFA~ C_GLISS SET 2,(IX-12+CHP.Flags)
0847+++8EFA~ LD A,(BC)
0848+++8EFA~ INC BC
0849+++8EFA~ LD (IX-12+CHP.TnSlDl),A
0850+++8EFA~ AND A
0851+++8EFA~ JR NZ,GL36
0852+++8EFA~ LD A,(Version) ;AlCo PT3.7+
0853+++8EFA~ CP 7
0854+++8EFA~ SBC A,A
0855+++8EFA~ INC A
0856+++8EFA~ GL36 LD (IX-12+CHP.TSlCnt),A
0857+++8EFA~ LD A,(BC)
0858+++8EFA~ INC BC
0859+++8EFA~ EX AF,AF'
0860+++8EFA~ LD A,(BC)
0861+++8EFA~ INC BC
0862+++8EFA~ JR SET_STP
0863+++8EFA~ 0864+++8EFA~ C_SMPOS LD A,(BC)
0865+++8EFA~ INC BC
0866+++8EFA~ LD (IX-12+CHP.PsInSm),A
0867+++8EFA~ RET
0868+++8EFA~ 0869+++8EFA~ C_ORPOS LD A,(BC)
0870+++8EFA~ INC BC
0871+++8EFA~ LD (IX-12+CHP.PsInOr),A
0872+++8EFA~ RET
0873+++8EFA~ 0874+++8EFA~ C_VIBRT LD A,(BC)
0875+++8EFA~ INC BC
0876+++8EFA~ LD (IX-12+CHP.OnOffD),A
0877+++8EFA~ LD (IX-12+CHP.COnOff),A
0878+++8EFA~ LD A,(BC)
0879+++8EFA~ INC BC
0880+++8EFA~ LD (IX-12+CHP.OffOnD),A
0881+++8EFA~ XOR A
0882+++8EFA~ LD (IX-12+CHP.TSlCnt),A
0883+++8EFA~ LD (IX-12+CHP.CrTnSl),A
0884+++8EFA~ LD (IX-12+CHP.CrTnSl+1),A
0885+++8EFA~ RET
0886+++8EFA~ 0887+++8EFA~ C_ENGLS LD A,(BC)
0888+++8EFA~ INC BC
0889+++8EFA~ LD (IY-100+VRS.Env_Del),A
0890+++8EFA~ LD (IY-100+VRS.CurEDel),A
0891+++8EFA~ LD A,(BC)
0892+++8EFA~ INC BC
0893+++8EFA~ LD L,A
0894+++8EFA~ LD A,(BC)
0895+++8EFA~ INC BC
0896+++8EFA~ LD H,A
0897+++8EFA~ LD (IY-100+VRS.ESldAdd),L
0898+++8EFA~ LD (IY-100+VRS.ESldAdd+1),H
0899+++8EFA~ RET
0900+++8EFA~ 0901+++8EFA~ C_DELAY LD A,(BC)
0902+++8EFA~ INC BC
0903+++8EFA~ LD (IY-100+VRS.Delay),A
0904+++8EFA~ LD HL,VARS2+VRS.ModNum ;if AlCo_TS
0905+++8EFA~ BIT 1,(HL)
0906+++8EFA~ RET Z
0907+++8EFA~ LD (VARS1+VRS.Delay),A
0908+++8EFA~ LD (VARS1+VRS.DelyCnt),A
0909+++8EFA~ LD (VARS2+VRS.Delay),A
0910+++8EFA~ RET
0911+++8EFA~
0912+++8EFA~ SETENV LD (IX-12+CHP.Env_En),E
0913+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A
0914+++8EFA~ LD A,(BC)
0915+++8EFA~ INC BC
0916+++8EFA~ LD H,A
0917+++8EFA~ LD A,(BC)
0918+++8EFA~ INC BC
0919+++8EFA~ LD L,A
0920+++8EFA~ CALL SETENBS
0921+++8EFA~ XOR A
0922+++8EFA~ LD (IX-12+CHP.PsInOr),A
0923+++8EFA~ LD (IY-100+VRS.CurEDel),A
0924+++8EFA~ LD H,A
0925+++8EFA~ LD L,A
0926+++8EFA~ JP SETESLD
0927+++8EFA~ 0928+++8EFA~ SETORN ADD A,A
0929+++8EFA~ LD E,A
0930+++8EFA~ LD D,0
0931+++8EFA~ LD (IX-12+CHP.PsInOr),D
0932+++8EFA~ LD L,(IY-100+VRS.OrnPtrs)
0933+++8EFA~ LD H,(IY-100+VRS.OrnPtrs+1)
0934+++8EFA~ ADD HL,DE
0935+++8EFA~ LD E,(HL)
0936+++8EFA~ INC HL
0937+++8EFA~ LD D,(HL)
0938+++8EFA~ LD L,(IY-100+VRS.MODADDR)
0939+++8EFA~ LD H,(IY-100+VRS.MODADDR+1)
0940+++8EFA~ ADD HL,DE
0941+++8EFA~ LD (IX-12+CHP.OrnPtr),L
0942+++8EFA~ LD (IX-12+CHP.OrnPtr+1),H
0943+++8EFA~ C_NOP RET
0944+++8EFA~ 0945+++8EFA~ SETSAM ADD A,A
0946+++8EFA~ LD E,A
0947+++8EFA~ LD D,0
0948+++8EFA~ LD L,(IY-100+VRS.SamPtrs);
0949+++8EFA~ LD H,(IY-100+VRS.SamPtrs+1);
0950+++8EFA~ ADD HL,DE
0951+++8EFA~ LD E,(HL)
0952+++8EFA~ INC HL
0953+++8EFA~ LD D,(HL)
0954+++8EFA~ LD L,(IY-100+VRS.MODADDR)
0955+++8EFA~ LD H,(IY-100+VRS.MODADDR+1)
0956+++8EFA~ ADD HL,DE
0957+++8EFA~ LD (IX-12+CHP.SamPtr),L
0958+++8EFA~ LD (IX-12+CHP.SamPtr+1),H
0959+++8EFA~ RET
0960+++8EFA~ 0961+++8EFA~ ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
0962+++8EFA~ SPCCOMS DW C_NOP
0963+++8EFA~ DW C_GLISS
0964+++8EFA~ DW C_PORTM
0965+++8EFA~ DW C_SMPOS
0966+++8EFA~ DW C_ORPOS
0967+++8EFA~ DW C_VIBRT
0968+++8EFA~ DW C_NOP
0969+++8EFA~ DW C_NOP
0970+++8EFA~ DW C_ENGLS
0971+++8EFA~ DW C_DELAY
0972+++8EFA~ DW C_NOP
0973+++8EFA~ DW C_NOP
0974+++8EFA~ DW C_NOP
0975+++8EFA~ DW C_NOP
0976+++8EFA~ DW C_NOP
0977+++8EFA~ DW C_NOP
0978+++8EFA~ 0979+++8EFA~ CHREGS CALL GETIX
0980+++8EFA~ XOR A
0981+++8EFA~ LD (Ampl),A
0982+++8EFA~ BIT 0,(IX+CHP.Flags)
0983+++8EFA~ PUSH HL
0984+++8EFA~ JP Z,CH_EXIT
0985+++8EFA~ LD (CSP_+1),SP
0986+++8EFA~ LD L,(IX+CHP.OrnPtr)
0987+++8EFA~ LD H,(IX+CHP.OrnPtr+1)
0988+++8EFA~ LD SP,HL
0989+++8EFA~ POP DE
0990+++8EFA~ LD H,A
0991+++8EFA~ LD A,(IX+CHP.PsInOr)
0992+++8EFA~ LD L,A
0993+++8EFA~ ADD HL,SP
0994+++8EFA~ INC A
0995+++8EFA~ ;PT2 PT3
0996+++8EFA~ OrnCP INC A ;CP E CP D
0997+++8EFA~ JR C,CH_ORPS
0998+++8EFA~ OrnLD DB 1 ;LD A,D LD A,E
0999+++8EFA~ CH_ORPS LD (IX+CHP.PsInOr),A
1000+++8EFA~ LD A,(IX+CHP.Note)
1001+++8EFA~ ADD A,(HL)
1002+++8EFA~ JP P,CH_NTP
1003+++8EFA~ XOR A
1004+++8EFA~ CH_NTP CP 96
1005+++8EFA~ JR C,CH_NOK
1006+++8EFA~ LD A,95
1007+++8EFA~ CH_NOK ADD A,A
1008+++8EFA~ EX AF,AF'
1009+++8EFA~ LD L,(IX+CHP.SamPtr)
1010+++8EFA~ LD H,(IX+CHP.SamPtr+1)
1011+++8EFA~ LD SP,HL
1012+++8EFA~ POP DE
1013+++8EFA~ LD H,0
1014+++8EFA~ LD A,(IX+CHP.PsInSm)
1015+++8EFA~ LD B,A
1016+++8EFA~ ADD A,A
1017+++8EFA~ SamClc2 ADD A,A ;or ADD A,B for PT2
1018+++8EFA~ LD L,A
1019+++8EFA~ ADD HL,SP
1020+++8EFA~ LD SP,HL
1021+++8EFA~ LD A,B
1022+++8EFA~ INC A
1023+++8EFA~ ;PT2 PT3
1024+++8EFA~ SamCP INC A ;CP E CP D
1025+++8EFA~ JR C,CH_SMPS
1026+++8EFA~ SamLD DB 1 ;LD A,D LD A,E
1027+++8EFA~ CH_SMPS LD (IX+CHP.PsInSm),A
1028+++8EFA~ POP BC
1029+++8EFA~ POP HL
1030+++8EFA~ 1031+++8EFA~ ;Convert PT2 sample to PT3
1032+++8EFA~ ;PT2 PT3
1033+++8EFA~ SamCnv POP HL ;BIT 2,C JR e_
1034+++8EFA~ POP HL
1035+++8EFA~ LD H,B
1036+++8EFA~ JR NZ,$+8
1037+++8EFA~ EX DE,HL
1038+++8EFA~ AND A
1039+++8EFA~ SBC HL,HL
1040+++8EFA~ SBC HL,DE
1041+++8EFA~ LD D,C
1042+++8EFA~ RR C
1043+++8EFA~ SBC A,A
1044+++8EFA~ CPL
1045+++8EFA~ AND #3E
1046+++8EFA~ RR C
1047+++8EFA~ RR B
1048+++8EFA~ AND C
1049+++8EFA~ LD C,A
1050+++8EFA~ LD A,B
1051+++8EFA~ RRA
1052+++8EFA~ RRA
1053+++8EFA~ RR D
1054+++8EFA~ RRA
1055+++8EFA~ AND #9F
1056+++8EFA~ LD B,A
1057+++8EFA~ 1058+++8EFA~ e_ LD E,(IX+CHP.TnAcc)
1059+++8EFA~ LD D,(IX+CHP.TnAcc+1)
1060+++8EFA~ ADD HL,DE
1061+++8EFA~ BIT 6,B
1062+++8EFA~ JR Z,CH_NOAC
1063+++8EFA~ LD (IX+CHP.TnAcc),L
1064+++8EFA~ LD (IX+CHP.TnAcc+1),H
1065+++8EFA~ CH_NOAC EX DE,HL
1066+++8EFA~ EX AF,AF'
1067+++8EFA~ ADD A,NT_&255
1068+++8EFA~ LD L,A
1069+++8EFA~ ADC A,NT_/256
1070+++8EFA~ SUB L
1071+++8EFA~ LD H,A
1072+++8EFA~ LD SP,HL
1073+++8EFA~ POP HL
1074+++8EFA~ ADD HL,DE
1075+++8EFA~ LD E,(IX+CHP.CrTnSl)
1076+++8EFA~ LD D,(IX+CHP.CrTnSl+1)
1077+++8EFA~ ADD HL,DE
1078+++8EFA~ CSP_ LD SP,#3131
1079+++8EFA~ EX (SP),HL
1080+++8EFA~ XOR A
1081+++8EFA~ OR (IX+CHP.TSlCnt)
1082+++8EFA~ JR Z,CH_AMP
1083+++8EFA~ DEC (IX+CHP.TSlCnt)
1084+++8EFA~ JR NZ,CH_AMP
1085+++8EFA~ LD A,(IX+CHP.TnSlDl)
1086+++8EFA~ LD (IX+CHP.TSlCnt),A
1087+++8EFA~ LD L,(IX+CHP.TSlStp)
1088+++8EFA~ LD H,(IX+CHP.TSlStp+1)
1089+++8EFA~ LD A,H
1090+++8EFA~ ADD HL,DE
1091+++8EFA~ LD (IX+CHP.CrTnSl),L
1092+++8EFA~ LD (IX+CHP.CrTnSl+1),H
1093+++8EFA~ BIT 2,(IX+CHP.Flags)
1094+++8EFA~ JR NZ,CH_AMP
1095+++8EFA~ LD E,(IX+CHP.TnDelt)
1096+++8EFA~ LD D,(IX+CHP.TnDelt+1)
1097+++8EFA~ AND A
1098+++8EFA~ JR Z,CH_STPP
1099+++8EFA~ EX DE,HL
1100+++8EFA~ CH_STPP SBC HL,DE
1101+++8EFA~ JP M,CH_AMP
1102+++8EFA~ LD A,(IX+CHP.SlToNt)
1103+++8EFA~ LD (IX+CHP.Note),A
1104+++8EFA~ XOR A
1105+++8EFA~ LD (IX+CHP.TSlCnt),A
1106+++8EFA~ LD (IX+CHP.CrTnSl),A
1107+++8EFA~ LD (IX+CHP.CrTnSl+1),A
1108+++8EFA~ CH_AMP LD A,(IX+CHP.CrAmSl)
1109+++8EFA~ BIT 7,C
1110+++8EFA~ JR Z,CH_NOAM
1111+++8EFA~ BIT 6,C
1112+++8EFA~ JR Z,CH_AMIN
1113+++8EFA~ CP 15
1114+++8EFA~ JR Z,CH_NOAM
1115+++8EFA~ INC A
1116+++8EFA~ JR CH_SVAM
1117+++8EFA~ CH_AMIN CP -15
1118+++8EFA~ JR Z,CH_NOAM
1119+++8EFA~ DEC A
1120+++8EFA~ CH_SVAM LD (IX+CHP.CrAmSl),A
1121+++8EFA~ CH_NOAM LD L,A
1122+++8EFA~ LD A,B
1123+++8EFA~ AND 15
1124+++8EFA~ ADD A,L
1125+++8EFA~ JP P,CH_APOS
1126+++8EFA~ XOR A
1127+++8EFA~ CH_APOS CP 16
1128+++8EFA~ JR C,CH_VOL
1129+++8EFA~ LD A,15
1130+++8EFA~ CH_VOL OR (IX+CHP.Volume)
1131+++8EFA~ ADD A,VT_&255
1132+++8EFA~ LD L,A
1133+++8EFA~ ADC A,VT_/256
1134+++8EFA~ SUB L
1135+++8EFA~ LD H,A
1136+++8EFA~ LD A,(HL)
1137+++8EFA~ CH_ENV BIT 0,C
1138+++8EFA~ JR NZ,CH_NOEN
1139+++8EFA~ OR (IX+CHP.Env_En)
1140+++8EFA~ CH_NOEN LD (Ampl),A
1141+++8EFA~ BIT 7,B
1142+++8EFA~ LD A,C
1143+++8EFA~ JR Z,NO_ENSL
1144+++8EFA~ RLA
1145+++8EFA~ RLA
1146+++8EFA~ SRA A
1147+++8EFA~ SRA A
1148+++8EFA~ SRA A
1149+++8EFA~ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
1150+++8EFA~ BIT 5,B
1151+++8EFA~ JR Z,NO_ENAC
1152+++8EFA~ LD (IX+CHP.CrEnSl),A
1153+++8EFA~ NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE
1154+++8EFA~ LD (IY-100+VRS.AddToEn),A
1155+++8EFA~ JR CH_MIX
1156+++8EFA~ NO_ENSL RRA
1157+++8EFA~ ADD A,(IX+CHP.CrNsSl)
1158+++8EFA~ LD (IY-100+VRS.AddToNs),A
1159+++8EFA~ BIT 5,B
1160+++8EFA~ JR Z,CH_MIX
1161+++8EFA~ LD (IX+CHP.CrNsSl),A
1162+++8EFA~ CH_MIX LD A,B
1163+++8EFA~ RRA
1164+++8EFA~ AND #48
1165+++8EFA~ CH_EXIT OR (IY-100+VRS.AYREGS+Mixer)
1166+++8EFA~ RRCA
1167+++8EFA~ LD (IY-100+VRS.AYREGS+Mixer),A
1168+++8EFA~ POP HL
1169+++8EFA~ XOR A
1170+++8EFA~ OR (IX+CHP.COnOff)
1171+++8EFA~ RET Z
1172+++8EFA~ DEC (IX+CHP.COnOff)
1173+++8EFA~ RET NZ
1174+++8EFA~ XOR (IX+CHP.Flags)
1175+++8EFA~ LD (IX+CHP.Flags),A
1176+++8EFA~ RRA
1177+++8EFA~ LD A,(IX+CHP.OnOffD)
1178+++8EFA~ JR C,CH_ONDL
1179+++8EFA~ LD A,(IX+CHP.OffOnD)
1180+++8EFA~ CH_ONDL LD (IX+CHP.COnOff),A
1181+++8EFA~ RET
1182+++8EFA~ 1183+++8EFA~ PLAY_ XOR A
1184+++8EFA~ LD (IY-100+VRS.AddToEn),A
1185+++8EFA~ LD (IY-100+VRS.AYREGS+Mixer),A
1186+++8EFA~ DEC A
1187+++8EFA~ LD (IY-100+VRS.AYREGS+EnvTp),A
1188+++8EFA~ DEC (IY-100+VRS.DelyCnt)
1189+++8EFA~ JP NZ,PL2
1190+++8EFA~ DEC (IY-100+VRS.ChanA+CHP.NtSkCn)
1191+++8EFA~ JR NZ,PL1B
1192+++8EFA~ LD C,(IY-100+VRS.AdInPtA)
1193+++8EFA~ LD B,(IY-100+VRS.AdInPtA+1)
1194+++8EFA~ LD A,(BC)
1195+++8EFA~ AND A
1196+++8EFA~ JR NZ,PL1A
1197+++8EFA~ LD D,A
1198+++8EFA~ LD (IY-100+VRS.Ns_Base),A
1199+++8EFA~ LD L,(IY-100+VRS.CrPsPtr)
1200+++8EFA~ LD H,(IY-100+VRS.CrPsPtr+1)
1201+++8EFA~ INC HL
1202+++8EFA~ LD A,(HL)
1203+++8EFA~ INC A
1204+++8EFA~ JR NZ,PLNLP
1205+++8EFA~ 1206+++8EFA~ IF LoopChecker
1207+++8EFA~ CALL CHECKLP
1208+++8EFA~ ENDIF
1209+++8EFA~ 1210+++8EFA~ LD L,(IY-100+VRS.LPosPtr)
1211+++8EFA~ LD H,(IY-100+VRS.LPosPtr+1)
1212+++8EFA~ LD A,(HL)
1213+++8EFA~ INC A
1214+++8EFA~ PLNLP CALL SETCPPT
1215+++8EFA~ DEC A
1216+++8EFA~ BIT 1,(IY-100+VRS.ModNum)
1217+++8EFA~ JR Z,NoAlCo
1218+++8EFA~ TSSub EQU $+1
1219+++8EFA~ SUB #D6
1220+++8EFA~ CPL
1221+++8EFA~ NoAlCo
1222+++8EFA~ ;PT2 PT3
1223+++8EFA~ PsCalc DEC A ;ADD A,A NOP
1224+++8EFA~ DEC A ;ADD A,(HL) NOP
1225+++8EFA~ ADD A,A
1226+++8EFA~ LD E,A
1227+++8EFA~ RL D
1228+++8EFA~ 1229+++8EFA~ IF CurPosCounter
1230+++8EFA~ LD A,L
1231+++8EFA~ SUB (IY-100+VRS.PosSub)
1232+++8EFA~ LD (IY-100+VRS.CurPos),A
1233+++8EFA~ ENDIF
1234+++8EFA~ 1235+++8EFA~ LD L,(IY-100+VRS.PatsPtr)
1236+++8EFA~ LD H,(IY-100+VRS.PatsPtr+1)
1237+++8EFA~ ADD HL,DE
1238+++8EFA~ LD E,(IY-100+VRS.MODADDR)
1239+++8EFA~ LD D,(IY-100+VRS.MODADDR+1)
1240+++8EFA~ LD (PSP_+1),SP
1241+++8EFA~ LD SP,HL
1242+++8EFA~ POP HL
1243+++8EFA~ ADD HL,DE
1244+++8EFA~ LD B,H
1245+++8EFA~ LD C,L
1246+++8EFA~ POP HL
1247+++8EFA~ ADD HL,DE
1248+++8EFA~ LD (IY-100+VRS.AdInPtB),L
1249+++8EFA~ LD (IY-100+VRS.AdInPtB+1),H
1250+++8EFA~ POP HL
1251+++8EFA~ ADD HL,DE
1252+++8EFA~ LD (IY-100+VRS.AdInPtC),L
1253+++8EFA~ LD (IY-100+VRS.AdInPtC+1),H
1254+++8EFA~ PSP_ LD SP,#3131
1255+++8EFA~ PL1A LD DE,VRS.ChanA+12-100
1256+++8EFA~ CALL PTDECOD
1257+++8EFA~ LD (IY-100+VRS.AdInPtA),C
1258+++8EFA~ LD (IY-100+VRS.AdInPtA+1),B
1259+++8EFA~ 1260+++8EFA~ PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn)
1261+++8EFA~ JR NZ,PL1C
1262+++8EFA~ LD DE,VRS.ChanB+12-100
1263+++8EFA~ LD C,(IY-100+VRS.AdInPtB)
1264+++8EFA~ LD B,(IY-100+VRS.AdInPtB+1)
1265+++8EFA~ CALL PTDECOD
1266+++8EFA~ LD (IY-100+VRS.AdInPtB),C
1267+++8EFA~ LD (IY-100+VRS.AdInPtB+1),B
1268+++8EFA~ 1269+++8EFA~ PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn)
1270+++8EFA~ JR NZ,PL1D
1271+++8EFA~ LD DE,VRS.ChanC+12-100
1272+++8EFA~ LD C,(IY-100+VRS.AdInPtC)
1273+++8EFA~ LD B,(IY-100+VRS.AdInPtC+1)
1274+++8EFA~ CALL PTDECOD
1275+++8EFA~ LD (IY-100+VRS.AdInPtC),C
1276+++8EFA~ LD (IY-100+VRS.AdInPtC+1),B
1277+++8EFA~ 1278+++8EFA~ PL1D LD A,(IY-100+VRS.Delay)
1279+++8EFA~ LD (IY-100+VRS.DelyCnt),A
1280+++8EFA~ 1281+++8EFA~ PL2 LD DE,VRS.ChanA-100
1282+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonA)
1283+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonA+1)
1284+++8EFA~ CALL CHREGS
1285+++8EFA~ LD (IY-100+VRS.AYREGS+TonA),L
1286+++8EFA~ LD (IY-100+VRS.AYREGS+TonA+1),H
1287+++8EFA~ Ampl EQU $+1
1288+++8EFA~ LD A,#3E
1289+++8EFA~ LD (IY-100+VRS.AYREGS+AmplA),A
1290+++8EFA~ LD DE,VRS.ChanB-100
1291+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonB)
1292+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonB+1)
1293+++8EFA~ CALL CHREGS
1294+++8EFA~ LD (IY-100+VRS.AYREGS+TonB),L
1295+++8EFA~ LD (IY-100+VRS.AYREGS+TonB+1),H
1296+++8EFA~ LD A,(Ampl)
1297+++8EFA~ LD (IY-100+VRS.AYREGS+AmplB),A
1298+++8EFA~ LD DE,VRS.ChanC-100
1299+++8EFA~ LD L,(IY-100+VRS.AYREGS+TonC)
1300+++8EFA~ LD H,(IY-100+VRS.AYREGS+TonC+1)
1301+++8EFA~ CALL CHREGS
1302+++8EFA~ LD (IY-100+VRS.AYREGS+TonC),L
1303+++8EFA~ LD (IY-100+VRS.AYREGS+TonC+1),H
1304+++8EFA~ LD A,(Ampl)
1305+++8EFA~ LD (IY-100+VRS.AYREGS+AmplC),A
1306+++8EFA~ 1307+++8EFA~ LD A,(IY-100+VRS.Ns_Base)
1308+++8EFA~ ADD (IY-100+VRS.AddToNs)
1309+++8EFA~ LD (IY-100+VRS.AYREGS+Noise),A
1310+++8EFA~ 1311+++8EFA~ LD A,(IY-100+VRS.AddToEn)
1312+++8EFA~ LD E,A
1313+++8EFA~ ADD A,A
1314+++8EFA~ SBC A,A
1315+++8EFA~ LD D,A
1316+++8EFA~ LD L,(IY-100+VRS.EnvBase)
1317+++8EFA~ LD H,(IY-100+VRS.EnvBase+1)
1318+++8EFA~ ADD HL,DE
1319+++8EFA~ LD E,(IY-100+VRS.CurESld)
1320+++8EFA~ LD D,(IY-100+VRS.CurESld+1)
1321+++8EFA~ ADD HL,DE
1322+++8EFA~ LD (IY-100+VRS.AYREGS+Env),L
1323+++8EFA~ LD (IY-100+VRS.AYREGS+Env+1),H
1324+++8EFA~ 1325+++8EFA~ XOR A
1326+++8EFA~ OR (IY-100+VRS.CurEDel)
1327+++8EFA~ RET Z
1328+++8EFA~ DEC (IY-100+VRS.CurEDel)
1329+++8EFA~ RET NZ
1330+++8EFA~ LD A,(IY-100+VRS.Env_Del)
1331+++8EFA~ LD (IY-100+VRS.CurEDel),A
1332+++8EFA~ LD L,(IY-100+VRS.ESldAdd)
1333+++8EFA~ LD H,(IY-100+VRS.ESldAdd+1)
1334+++8EFA~ ADD HL,DE
1335+++8EFA~ JP SETESLD
1336+++8EFA~ 1337+++8EFA~ PLAY LD IY,VARS1+100
1338+++8EFA~ CALL PLAY_
1339+++8EFA~ LD A,(is_ts)
1340+++8EFA~ AND A
1341+++8EFA~ JR Z,PL_nts
1342+++8EFA~ LD IY,VARS2+100
1343+++8EFA~ CALL PLAY_
1344+++8EFA~ PL_nts
1345+++8EFA~ IF Basic
1346+++8EFA~ LD IY,#5C3A
1347+++8EFA~ ENDIF
1348+++8EFA~ 1349+++8EFA~ ROUT LD BC,#FFFD
1350+++8EFA~ LD A,(is_ts)
1351+++8EFA~ AND A
1352+++8EFA~ IFDEF ONtfm
1353+++8EFA~ LD L,#F9
1354+++8EFA~ OUT (C),L
1355+++8EFA~ ELSE
1356+++8EFA~ JR Z,r_nts ;keep old standard
1357+++8EFA~ OUT (C),B
1358+++8EFA~ ENDIF
1359+++8EFA~ r_nts EX AF,AF'
1360+++8EFA~ 1361+++8EFA~ IF ACBBAC
1362+++8EFA~ LD IX,VARS1+VRS.AYREGS
1363+++8EFA~ ELSE
1364+++8EFA~ LD HL,VARS1+VRS.AYREGS
1365+++8EFA~ ENDIF
1366+++8EFA~ 1367+++8EFA~ CALL ROUT_
1368+++8EFA~ EX AF,AF'
1369+++8EFA~ RET Z
1370+++8EFA~ LD B,D
1371+++8EFA~ 1372+++8EFA~ IFDEF ONtfm
1373+++8EFA~ LD A,#F8
1374+++8EFA~ ELSE
1375+++8EFA~ CPL
1376+++8EFA~ ENDIF
1377+++8EFA~ OUT (C),A
1378+++8EFA~ 1379+++8EFA~ IF ACBBAC
1380+++8EFA~ LD IX,VARS2+VRS.AYREGS
1381+++8EFA~ ELSE
1382+++8EFA~ LD HL,VARS2+VRS.AYREGS
1383+++8EFA~ ENDIF
1384+++8EFA~ 1385+++8EFA~ ROUT_
1386+++8EFA~ IF ACBBAC
1387+++8EFA~ LD A,(SETUP)
1388+++8EFA~ AND 12
1389+++8EFA~ JR Z,ABC
1390+++8EFA~ ADD A,CHTABLE
1391+++8EFA~ LD E,A
1392+++8EFA~ ADC A,CHTABLE/256
1393+++8EFA~ SUB E
1394+++8EFA~ LD D,A
1395+++8EFA~ LD B,0
1396+++8EFA~ PUSH IX
1397+++8EFA~ POP HL
1398+++8EFA~ LD A,(DE)
1399+++8EFA~ INC DE
1400+++8EFA~ LD C,A
1401+++8EFA~ ADD HL,BC
1402+++8EFA~ LD A,(IX+TonB)
1403+++8EFA~ LD C,(HL)
1404+++8EFA~ LD (IX+TonB),C
1405+++8EFA~ LD (HL),A
1406+++8EFA~ INC HL
1407+++8EFA~ LD A,(IX+TonB+1)
1408+++8EFA~ LD C,(HL)
1409+++8EFA~ LD (IX+TonB+1),C
1410+++8EFA~ LD (HL),A
1411+++8EFA~ LD A,(DE)
1412+++8EFA~ INC DE
1413+++8EFA~ LD C,A
1414+++8EFA~ ADD HL,BC
1415+++8EFA~ LD A,(IX+AmplB)
1416+++8EFA~ LD C,(HL)
1417+++8EFA~ LD (IX+AmplB),C
1418+++8EFA~ LD (HL),A
1419+++8EFA~ LD A,(DE)
1420+++8EFA~ INC DE
1421+++8EFA~ LD (RxCA1),A
1422+++8EFA~ XOR 8
1423+++8EFA~ LD (RxCA2),A
1424+++8EFA~ LD A,(DE)
1425+++8EFA~ AND (IX+Mixer)
1426+++8EFA~ LD E,A
1427+++8EFA~ LD A,(IX+Mixer)
1428+++8EFA~ RxCA1 DB #E6
1429+++8EFA~ AND %010010
1430+++8EFA~ OR E
1431+++8EFA~ LD E,A
1432+++8EFA~ LD A,(IX+Mixer)
1433+++8EFA~ AND %010010
1434+++8EFA~ RxCA2 OR E
1435+++8EFA~ OR E
1436+++8EFA~ LD (IX+Mixer),A
1437+++8EFA~ ABC
1438+++8EFA~ ENDIF
1439+++8EFA~ 1440+++8EFA~ XOR A
1441+++8EFA~ LD DE,#FFBF
1442+++8EFA~ 1443+++8EFA~ IF ACBBAC
1444+++8EFA~ LD BC,#FFFD
1445+++8EFA~ PUSH IX
1446+++8EFA~ POP HL
1447+++8EFA~ ENDIF
1448+++8EFA~ 1449+++8EFA~ LOUT
1450+++8EFA~ IFDEF ONtfm
1451+++8EFA~ INF
1452+++8EFA~ JP M,$-2
1453+++8EFA~ ENDIF
1454+++8EFA~ OUT (C),A
1455+++8EFA~ IFDEF ONtfm
1456+++8EFA~ INF
1457+++8EFA~ JP M,$-2
1458+++8EFA~ ENDIF
1459+++8EFA~ LD B,E
1460+++8EFA~ OUTI
1461+++8EFA~ LD B,D
1462+++8EFA~ INC A
1463+++8EFA~ CP 13
1464+++8EFA~ JR NZ,LOUT
1465+++8EFA~ IFDEF ONtfm
1466+++8EFA~ INF
1467+++8EFA~ JP M,$-2
1468+++8EFA~ ENDIF
1469+++8EFA~ OUT (C),A
1470+++8EFA~ LD A,(HL)
1471+++8EFA~ AND A
1472+++8EFA~ RET M
1473+++8EFA~ IFDEF ONtfm
1474+++8EFA~ INF
1475+++8EFA~ JP M,$-2
1476+++8EFA~ ENDIF
1477+++8EFA~ LD B,E
1478+++8EFA~ OUT (C),A
1479+++8EFA~ RET
1480+++8EFA~ 1481+++8EFA~ IF ACBBAC
1482+++8EFA~ CHTABLE EQU $-4
1483+++8EFA~ DB 4,5,15,%001001,0,7,7,%100100
1484+++8EFA~ ENDIF
1485+++8EFA~ 1486+++8EFA~ NT_DATA DB (T_NEW_0-T1_)*2
1487+++8EFA~ DB TCNEW_0-T_
1488+++8EFA~ DB (T_OLD_0-T1_)*2+1
1489+++8EFA~ DB TCOLD_0-T_
1490+++8EFA~ DB (T_NEW_1-T1_)*2+1
1491+++8EFA~ DB TCNEW_1-T_
1492+++8EFA~ DB (T_OLD_1-T1_)*2+1
1493+++8EFA~ DB TCOLD_1-T_
1494+++8EFA~ DB (T_NEW_2-T1_)*2
1495+++8EFA~ DB TCNEW_2-T_
1496+++8EFA~ DB (T_OLD_2-T1_)*2
1497+++8EFA~ DB TCOLD_2-T_
1498+++8EFA~ DB (T_NEW_3-T1_)*2
1499+++8EFA~ DB TCNEW_3-T_
1500+++8EFA~ DB (T_OLD_3-T1_)*2
1501+++8EFA~ DB TCOLD_3-T_
1502+++8EFA~ 1503+++8EFA~ T_
1504+++8EFA~ 1505+++8EFA~ TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
1506+++8EFA~ DB #18+1,#24+1,#3C+1,0
1507+++8EFA~ TCOLD_1 DB #5C+1,0
1508+++8EFA~ TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
1509+++8EFA~ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
1510+++8EFA~ TCNEW_3 DB #56+1
1511+++8EFA~ TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
1512+++8EFA~ TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
1513+++8EFA~ DB #BC+1,#BE+1,0
1514+++8EFA~ TCNEW_1 EQU TCOLD_1
1515+++8EFA~ TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
1516+++8EFA~ DB #BA+1,#BC+1,#BE+1,0
1517+++8EFA~ 1518+++8EFA~ PT3EMPTYORN EQU $-1
1519+++8EFA~ DB 1,0
1520+++8EFA~ 1521+++8EFA~ ;first 12 values of tone tables (packed)
1522+++8EFA~ 1523+++8EFA~ T_PACK DB #06EC*2/256,#06EC*2&255
1524+++8EFA~ DB #0755-#06EC
1525+++8EFA~ DB #07C5-#0755
1526+++8EFA~ DB #083B-#07C5
1527+++8EFA~ DB #08B8-#083B
1528+++8EFA~ DB #093D-#08B8
1529+++8EFA~ DB #09CA-#093D
1530+++8EFA~ DB #0A5F-#09CA
1531+++8EFA~ DB #0AFC-#0A5F
1532+++8EFA~ DB #0BA4-#0AFC
1533+++8EFA~ DB #0C55-#0BA4
1534+++8EFA~ DB #0D10-#0C55
1535+++8EFA~ DB #066D*2/256,#066D*2&255
1536+++8EFA~ DB #06CF-#066D
1537+++8EFA~ DB #0737-#06CF
1538+++8EFA~ DB #07A4-#0737
1539+++8EFA~ DB #0819-#07A4
1540+++8EFA~ DB #0894-#0819
1541+++8EFA~ DB #0917-#0894
1542+++8EFA~ DB #09A1-#0917
1543+++8EFA~ DB #0A33-#09A1
1544+++8EFA~ DB #0ACF-#0A33
1545+++8EFA~ DB #0B73-#0ACF
1546+++8EFA~ DB #0C22-#0B73
1547+++8EFA~ DB #0CDA-#0C22
1548+++8EFA~ DB #0704*2/256,#0704*2&255
1549+++8EFA~ DB #076E-#0704
1550+++8EFA~ DB #07E0-#076E
1551+++8EFA~ DB #0858-#07E0
1552+++8EFA~ DB #08D6-#0858
1553+++8EFA~ DB #095C-#08D6
1554+++8EFA~ DB #09EC-#095C
1555+++8EFA~ DB #0A82-#09EC
1556+++8EFA~ DB #0B22-#0A82
1557+++8EFA~ DB #0BCC-#0B22
1558+++8EFA~ DB #0C80-#0BCC
1559+++8EFA~ DB #0D3E-#0C80
1560+++8EFA~ DB #07E0*2/256,#07E0*2&255
1561+++8EFA~ DB #0858-#07E0
1562+++8EFA~ DB #08E0-#0858
1563+++8EFA~ DB #0960-#08E0
1564+++8EFA~ DB #09F0-#0960
1565+++8EFA~ DB #0A88-#09F0
1566+++8EFA~ DB #0B28-#0A88
1567+++8EFA~ DB #0BD8-#0B28
1568+++8EFA~ DB #0C80-#0BD8
1569+++8EFA~ DB #0D60-#0C80
1570+++8EFA~ DB #0E10-#0D60
1571+++8EFA~ DB #0EF8-#0E10
1572+++8EFA~ 1573+++8EFA~ ;vars from here can be stripped
1574+++8EFA~ ;you can move VARS to any other address
1575+++8EFA~ 1576+++8EFA~ VARS
1577+++8EFA~ 1578+++8EFA~ is_ts DB 0
1579+++8EFA~ 1580+++8EFA~ ;ChannelsVars
1581+++8EFA~ STRUCT CHP
1582+++8EFA~ ;reset group
1583+++8EFA~ PsInOr DB 0
1584+++8EFA~ PsInSm DB 0
1585+++8EFA~ CrAmSl DB 0
1586+++8EFA~ CrNsSl DB 0
1587+++8EFA~ CrEnSl DB 0
1588+++8EFA~ TSlCnt DB 0
1589+++8EFA~ CrTnSl DW 0
1590+++8EFA~ TnAcc DW 0
1591+++8EFA~ COnOff DB 0
1592+++8EFA~ ;reset group
1593+++8EFA~ 1594+++8EFA~ OnOffD DB 0
1595+++8EFA~ 1596+++8EFA~ ;IX for PTDECOD here (+12)
1597+++8EFA~ OffOnD DB 0
1598+++8EFA~ OrnPtr DW 0
1599+++8EFA~ SamPtr DW 0
1600+++8EFA~ NNtSkp DB 0
1601+++8EFA~ Note DB 0
1602+++8EFA~ SlToNt DB 0
1603+++8EFA~ Env_En DB 0
1604+++8EFA~ Flags DB 0
1605+++8EFA~ ;Enabled - 0, SimpleGliss - 2
1606+++8EFA~ TnSlDl DB 0
1607+++8EFA~ TSlStp DW 0
1608+++8EFA~ TnDelt DW 0
1609+++8EFA~ NtSkCn DB 0
1610+++8EFA~ Volume DB 0
1611+++8EFA~ ENDS
1612+++8EFA~ 1613+++8EFA~ STRUCT VRS
1614+++8EFA~ 1615+++8EFA~ ;IF not works in STRUCT in SjASM :(
1616+++8EFA~ ; IF CurPosCounter
1617+++8EFA~ CurPos DB 0
1618+++8EFA~ PosSub DB 0
1619+++8EFA~ ; ENDIF
1620+++8EFA~ 1621+++8EFA~ ModNum DB 0 ;bit0: ChipNum
1622+++8EFA~ ;bit1: 1-reversed patterns order (AlCo TS)
1623+++8EFA~ 1624+++8EFA~ ChanA DS CHP
1625+++8EFA~ ChanB DS CHP
1626+++8EFA~ ChanC DS CHP
1627+++8EFA~ 1628+++8EFA~ ;GlobalVars
1629+++8EFA~ MODADDR DW 0
1630+++8EFA~ OrnPtrs DW 0
1631+++8EFA~ SamPtrs DW 0
1632+++8EFA~ PatsPtr DW 0
1633+++8EFA~ AdInPtA DW 0
1634+++8EFA~ AdInPtB DW 0
1635+++8EFA~ AdInPtC DW 0
1636+++8EFA~ CrPsPtr DW 0
1637+++8EFA~ LPosPtr DW 0
1638+++8EFA~ Delay DB 0
1639+++8EFA~ DelyCnt DB 0
1640+++8EFA~ ESldAdd DW 0
1641+++8EFA~ CurESld DW 0
1642+++8EFA~ Env_Del DB 0
1643+++8EFA~ CurEDel DB 0
1644+++8EFA~ Ns_Base DB 0
1645+++8EFA~ AddToNs DB 0
1646+++8EFA~ AddToEn DB 0
1647+++8EFA~ EnvBase DW 0
1648+++8EFA~ AYREGS DS 14
1649+++8EFA~ ENDS
1650+++8EFA~ 1651+++8EFA~ VARS1 DS VRS
1652+++8EFA~ VARS2 DS VRS
1653+++8EFA~ 1654+++8EFA~ VT_ EQU $-16
1655+++8EFA~ DS 256-16 ;CreatedVolumeTableAddress
1656+++8EFA~ 1657+++8EFA~ T1_ EQU VT_+16 ;Tone tables data depacked here
1658+++8EFA~ 1659+++8EFA~ T_OLD_1 EQU T1_
1660+++8EFA~ T_OLD_2 EQU T_OLD_1+24
1661+++8EFA~ T_OLD_3 EQU T_OLD_2+24
1662+++8EFA~ T_OLD_0 EQU T_OLD_3+2
1663+++8EFA~ T_NEW_0 EQU T_OLD_0
1664+++8EFA~ T_NEW_1 EQU T_OLD_1
1665+++8EFA~ T_NEW_2 EQU T_NEW_0+24
1666+++8EFA~ T_NEW_3 EQU T_OLD_3
1667+++8EFA~ 1668+++8EFA~ PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
1669+++8EFA~ 1670+++8EFA~ NT_ DS 192 ;CreatedNoteTableAddress
1671+++8EFA~ 1672+++8EFA~ VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
1673+++8EFA~ 1674+++8EFA~ VARSEND EQU $
1675+++8EFA~ MDLADDR EQU $
1676+++8EFA~ 1677+++8EFA~ DISPLAY "PTS player size=",$-START
1678+++8EFA~ 1679+++8EFA~ ;Release 0 steps:
1680+++8EFA~ ;04/21/2007
1681+++8EFA~ ;Works start (PTxPlay adaptation); first beta.
1682+++8EFA~ ;04/22/2007
1683+++8EFA~ ;Job finished; beta-testing.
1684+++8EFA~ ;04/23/2007
1685+++8EFA~ ;PT v3.7 TS mode corrected (after AlCo remarks).
1686+++8EFA~ ;04/29/2007
1687+++8EFA~ ;Added 1.XX and 2.XX special commands interpretation for PT3
1688+++8EFA~ ;modules of v3.7+.
1689+++8EFA~ 1690+++8EFA~ ;Size (minimal build for ZX Spectrum):
1691+++8EFA~ ;Code block #908 bytes
1692+++8EFA~ ;Variables #2BF bytes (can be stripped)
1693+++8EFA~ ;Total size #908+#2BF=#BC7 (3015) bytes
1694+++8EFA~ 1695+++8EFA~ ENDMOD
1696+++8EFA~ 1697+++8EFA endif
1698+++8EFA
0095++ 8EFA
0096++ 8EFA TS.End
0097++ 8EFA TS.Play=PTS.PLAY
0098++ 8EFA TS.Mute=PTS.MUTE
0099++ 8EFA
0100++ 8EFA display "TS module size: ",TS.End-TS.Start
0101++ 8EFA
0102++ 8EFA endif
0103++ 8EFA
0421+ 8EFA include "tfc.asm"
0001++ 8EFA ifndef _tfc_asm_defined
0002++ 8EFA define _tfc_asm_defined
0003++ 8EFA
0004++ 8EFA module TFC
0005++ 8EFA
0006++ 8EFA ; Original version by (C) Alone Coder
0007++ 8EFA ; SjasmPlus adaptation, code cleanup and size optimization by (C) Vitamin/CAIG
0008++ 8EFA
0009++ 8EFA ; Warning: no 60Hz modules support!
0010++ 8EFA
0011++ 8EFA ;TODO begin&end ⮫쪮 � ����� ������
0012++ 8EFA newtfm=1 ;0=revision A, 1=revision C
0013++ 8EFA
0014++ 8EFA if newtfm == 1
0015++ 8EFA statuschip0=%11111000
0016++ 8EFA statuschip1=%11111001
0017++ 8EFA else
0018++ 8EFA~ if newtfm == 2 ;US031DX
0019++ 8EFA~ statuschip0=%11111110
0020++ 8EFA~ statuschip1=%11111111
0021++ 8EFA~ else ;newtfm=0
0022++ 8EFA~ statuschip0=%11111100
0023++ 8EFA~ statuschip1=%11111101
0024++ 8EFA~ endif
0025++ 8EFA endif
0026++ 8EFA
0027++ 8EFA struct Header
0028++ 8EFA~ signature
0029++ 8EFA~ ds 6
0030++ 8EFA~ version ds 3
0031++ 8EFA~ intfreq db 0
0032++ 8EFA~ tfmptrs ds 12
0033++ 8EFA~ ssgptrs ds 12
0034++ 8EFA ends
0035++ 8EFA
0036++ 8EFA struct TFMData
0037++ 8EFA~ addr dw 0
0038++ 8EFA~ skip db 0
0039++ 8EFA~ blkcnt db 0
0040++ 8EFA~ blkretaddr
0041++ 8EFA~ db 0
0042++ 8EFA~ loopaddr
0043++ 8EFA~ db 0
0044++ 8EFA~ tfmlow db 0
0045++ 8EFA~ tfmhigh db 0
0046++ 8EFA ends
0047++ 8EFA
0048++ 8EFA macro WaitStatus
0049++ 8EFA~ if newtfm != 2
0050++ 8EFA~ inf
0051++ 8EFA~ jp m,$-2
0052++ 8EFA~ endif
0053++ 8EFA endm
0054++ 8EFA
0055++ 8EFA macro FM.OutReg Reg
0056++ 8EFA~ WaitStatus
0057++ 8EFA~ out (c),Reg
0058++ 8EFA endm
0059++ 8EFA
0060++ 8EFA macro FM.SelectReg Reg
0061++ 8EFA~ ld b,d
0062++ 8EFA~ FM.OutReg Reg
0063++ 8EFA endm
0064++ 8EFA
0065++ 8EFA macro FM.WriteReg Reg
0066++ 8EFA~ ld b,e
0067++ 8EFA~ FM.OutReg Reg
0068++ 8EFA endm
0069++ 8EFA
0070++ 8EFA Start
0071++ 8EFA 21 73 91 ld hl,End
0072++ 8EFD 18 2F jr Init
0073++ 8EFF C3 E1 8F jp Play
0074++ 8F02 C3 6A 8F jp Mute
0075++ 8F05
0076++ 8F05 ifdef HaveFormatCheck
0077++ 8F05 include "format.asm"
0001+++8F05 ;some format checking macros
0002+++8F05 ifndef _format_asm_defined
0003+++8F05~ define _format_asm_defined
0004+++8F05~ 0005+++8F05~ macro LessOrEqual number
0006+++8F05~ ld a,number
0007+++8F05~ cp (hl)
0008+++8F05~ inc hl
0009+++8F05~ ret c
0010+++8F05~ endm
0011+++8F05~
0012+++8F05~ macro Greater number
0013+++8F05~ ld a,(hl)
0014+++8F05~ inc hl
0015+++8F05~ cp number
0016+++8F05~ ret c
0017+++8F05~ endm
0018+++8F05~
0019+++8F05~ macro AnyByte
0020+++8F05~ inc hl
0021+++8F05~ endm
0022+++8F05~
0023+++8F05~ macro AnyBytes count
0024+++8F05~ if count > 7
0025+++8F05~ ld a,l
0026+++8F05~ add a,count
0027+++8F05~ ld l,a
0028+++8F05~ adc a,h
0029+++8F05~ sub l
0030+++8F05~ ld h,a
0031+++8F05~ else
0032+++8F05~ dup count
0033+++8F05~ inc hl
0034+++8F05~ edup
0035+++8F05~ endif
0036+++8F05~ endm
0037+++8F05~
0038+++8F05~ macro EqualTo number
0039+++8F05~ ld a,number
0040+++8F05~ cp (hl)
0041+++8F05~ inc hl
0042+++8F05~ ret nz
0043+++8F05~ endm
0044+++8F05~ 0045+++8F05 endif
0046+++8F05
0078++ 8F05
0079++ 8F05 ;in HL - module addr
0080++ 8F05 ;out Z - is tfc
0081++ 8F05 ;out C - 60 Hz (valid only if Z)
0082++ 8F05 CheckFormat
0083++ 8F05 EqualTo "T"
0083++ 8F05 3E 54 > ld a,number
0083++ 8F07 BE > cp (hl)
0083++ 8F08 23 > inc hl
0083++ 8F09 C0 > ret nz
0084++ 8F0A EqualTo "F"
0084++ 8F0A 3E 46 > ld a,number
0084++ 8F0C BE > cp (hl)
0084++ 8F0D 23 > inc hl
0084++ 8F0E C0 > ret nz
0085++ 8F0F EqualTo "M"
0085++ 8F0F 3E 4D > ld a,number
0085++ 8F11 BE > cp (hl)
0085++ 8F12 23 > inc hl
0085++ 8F13 C0 > ret nz
0086++ 8F14 EqualTo "c"
0086++ 8F14 3E 63 > ld a,number
0086++ 8F16 BE > cp (hl)
0086++ 8F17 23 > inc hl
0086++ 8F18 C0 > ret nz
0087++ 8F19 EqualTo "o"
0087++ 8F19 3E 6F > ld a,number
0087++ 8F1B BE > cp (hl)
0087++ 8F1C 23 > inc hl
0087++ 8F1D C0 > ret nz
0088++ 8F1E EqualTo "m"
0088++ 8F1E 3E 6D > ld a,number
0088++ 8F20 BE > cp (hl)
0088++ 8F21 23 > inc hl
0088++ 8F22 C0 > ret nz
0089++ 8F23 AnyBytes 3
0090++ 8F23 23 > inc hl
0090++ 8F24 23 > inc hl
0090++ 8F25 23 > inc hl
0090++ 8F26 7E ld a,(hl)
0091++ 8F27 FE 32 cp 50
0092++ 8F29 C8 ret z
0093++ 8F2A FE 3C cp 60
0094++ 8F2C 3F ccf
0095++ 8F2D C9 ret
0096++ 8F2E
0097++ 8F2E display "TFC checker size: ",$-CheckFormat
0098++ 8F2E endif
0099++ 8F2E
0100++ 8F2E ;HL - module addr
0101++ 8F2E Init
0102++ 8F2E EB exd
0103++ 8F2F 21 0A 00 ld hl,Header.tfmptrs
0104++ 8F32 19 add hl,de
0105++ 8F33 D9 exx
0106++ 8F34
0107++ 8F34 21 3B 91 ld hl,TFM.Init
0108++ 8F37 11 43 91 ld de,TFM.A
0109++ 8F3A 01 30 00 ld bc,6*TFMData
0110++ 8F3D ED B0 ldir
0111++ 8F3F
0112++ 8F3F 21 5E 8F ld hl,.tfminitab
0113++ 8F42 01 FD 06 ld bc,128*(.tfminitab_end-.tfminitab)+#fd
0114++ 8F45 .tfmini0
0115++ 8F45 11 54 8F ld de,.tfminiHL
0116++ 8F48 ED A0 ldi
0117++ 8F4A ED A0 ldi
0118++ 8F4C D9 exx
0119++ 8F4D 7E ld a,(hl)
0120++ 8F4E 23 inc hl
0121++ 8F4F E5 push hl
0122++ 8F50 66 ld h,(hl)
0123++ 8F51 6F ld l,a
0124++ 8F52 19 add hl,de
0125++ 8F53 .tfminiHL=$+1
0126++ 8F53 22 00 00 ld (0),hl
0127++ 8F56 E1 pop hl
0128++ 8F57 23 inc hl
0129++ 8F58 D9 exx
0130++ 8F59 10 EA djnz .tfmini0
0131++ 8F5B
0132++ 8F5B C3 6A 8F jp Mute
0133++ 8F5E
0134++ 8F5E .tfminitab
0135++ 8F5E 43 91 DW TFM.A.addr
0136++ 8F60 4B 91 DW TFM.B.addr
0137++ 8F62 53 91 DW TFM.C.addr
0138++ 8F64 5B 91 DW TFM.D.addr
0139++ 8F66 63 91 DW TFM.E.addr
0140++ 8F68 6B 91 DW TFM.F.addr
0141++ 8F6A .tfminitab_end
0142++ 8F6A
0143++ 8F6A Mute
0144++ 8F6A 11 BF FF ld de,#ffbf
0145++ 8F6D 0E FD ld c,#fd
0146++ 8F6F CD D9 8F call selChip0
0147++ 8F72 CD 78 8F call .tfminiPP
0148++ 8F75 CD DD 8F call selChip1
0149++ 8F78 .tfminiPP
0150++ 8F78 ; 0 -> (00..0D)
0151++ 8F78 21 00 00 ld hl,#0000
0152++ 8F7B 3E 0E ld a,#0e
0153++ 8F7D CD C0 8F call .writeregsset
0154++ 8F80
0155++ 8F80 ; 0 -> (30..3F)
0156++ 8F80 26 30 ld h,#30
0157++ 8F82 3E 40 ld a,#40
0158++ 8F84 CD C0 8F call .writeregsset
0159++ 8F87
0160++ 8F87 ; 0 -> (50..B4)
0161++ 8F87 26 50 ld h,#50
0162++ 8F89 3E B5 ld a,#b5
0163++ 8F8B CD C0 8F call .writeregsset
0164++ 8F8E
0165++ 8F8E ; 0F -> (80..8F) ;max speed to RR
0166++ 8F8E 21 0F 80 ld hl,#800f
0167++ 8F91 3E 90 ld a,#90
0168++ 8F93 CD C0 8F call .writeregsset
0169++ 8F96
0170++ 8F96 ; 0..2 -> 28, key off
0171++ 8F96 ; 2 -> 27 channel 3 mode
0172++ 8F96 21 00 28 ld hl,#2800
0173++ 8F99 CD C8 8F call .writereg
0174++ 8F9C 2C inc l
0175++ 8F9D CD C8 8F call .writereg
0176++ 8FA0 2C inc l
0177++ 8FA1 CD C8 8F call .writereg
0178++ 8FA4 25 dec h
0179++ 8FA5 CD C8 8F call .writereg
0180++ 8FA8
0181++ 8FA8 ; 7F -> (40..4F,2F,2D)
0182++ 8FA8 21 7F 40 ld hl,#407f
0183++ 8FAB 3E 50 ld a,#50
0184++ 8FAD CD C0 8F call .writeregsset
0185++ 8FB0
0186++ 8FB0 26 2F ld h,#2f
0187++ 8FB2 CD C8 8F call .writereg
0188++ 8FB5
0189++ 8FB5 26 2D ld h,#2d
0190++ 8FB7 CD C8 8F call .writereg
0191++ 8FBA
0192++ 8FBA 3E FF ld a,#ff ;�몫. FM
0193++ 8FBC .selRegA
0194++ 8FBC 42 ld b,d
0195++ 8FBD ED 79 out (c),a
0196++ 8FBF C9 ret
0197++ 8FC0
0198++ 8FC0 ;H=REG start
0199++ 8FC0 ;L=VALUE
0200++ 8FC0 ;A=REG end (not inclusive)
0201++ 8FC0 .writeregsset
0202++ 8FC0 CD C8 8F call .writereg
0203++ 8FC3 24 inc h
0204++ 8FC4 BC cp h
0205++ 8FC5 20 F9 jr nz,.writeregsset
0206++ 8FC7 C9 ret
0207++ 8FC8 ;H=REG
0208++ 8FC8 ;L=VALUE
0209++ 8FC8 .writereg
0210++ 8FC8 FM.SelectReg h
0210++ 8FC8 42 > ld b,d
0210++ 8FC9 ED 70 > inf
0210++ 8FCB FA C9 8F > jp m,$-2
0210++ 8FCE ED 61 > out (c),Reg
0211++ 8FD0 FM.WriteReg l
0211++ 8FD0 43 > ld b,e
0211++ 8FD1 ED 70 > inf
0211++ 8FD3 FA D1 8F > jp m,$-2
0211++ 8FD6 ED 69 > out (c),Reg
0212++ 8FD8 C9 ret
0213++ 8FD9
0214++ 8FD9 selChip0
0215++ 8FD9 3E F8 ld a,statuschip0
0216++ 8FDB 18 DF jr Mute.selRegA
0217++ 8FDD
0218++ 8FDD selChip1
0219++ 8FDD 3E F9 ld a,statuschip1
0220++ 8FDF 18 DB jr Mute.selRegA
0221++ 8FE1
0222++ 8FE1 Play
0223++ 8FE1 11 BF FF ld de,#FFBF
0224++ 8FE4 0E FD ld c,#FD
0225++ 8FE6
0226++ 8FE6 CD D9 8F call selChip0
0227++ 8FE9
0228++ 8FE9 AF xor a
0229++ 8FEA 08 exa
0230++ 8FEB DD 21 43 91 ld ix,TFM.A
0231++ 8FEF CD 26 90 call PlayChannel
0232++ 8FF2 3E 01 ld a,1
0233++ 8FF4 08 exa
0234++ 8FF5 DD 21 4B 91 ld ix,TFM.B
0235++ 8FF9 CD 26 90 call PlayChannel
0236++ 8FFC 3E 02 ld a,2
0237++ 8FFE 08 exa
0238++ 8FFF DD 21 53 91 ld ix,TFM.C
0239++ 9003 CD 26 90 call PlayChannel
0240++ 9006
0241++ 9006 CD DD 8F call selChip1
0242++ 9009
0243++ 9009 AF xor a
0244++ 900A 08 exa
0245++ 900B DD 21 5B 91 ld ix,TFM.D
0246++ 900F CD 26 90 call PlayChannel
0247++ 9012 3E 01 ld a,1
0248++ 9014 08 exa
0249++ 9015 DD 21 63 91 ld ix,TFM.E
0250++ 9019 CD 26 90 call PlayChannel
0251++ 901C 3E 02 ld a,2
0252++ 901E 08 exa
0253++ 901F DD 21 6B 91 ld ix,TFM.F
0254++ 9023 C3 26 90 jp PlayChannel
0255++ 9026
0256++ 9026 ;%11111111,-disp8 = ������ ����� ����� �� ᬥ饭�� -disp8
0257++ 9026 ;%111ttttt = skip 32..2 frames
0258++ 9026 ;%110ddddd = slide d-16
0259++ 9026 ;%11010000,frames,-disp16 = repeat block (skips = 1 frame)
0260++ 9026 ;%10111111,-disp16 = ������ ����� ����� �� ᬥ饭�� -disp16
0261++ 9026 ;%10NNNNNf = keyoff,[freq,]0..30 regs, keyon
0262++ 9026 ;%01111111 = end
0263++ 9026 ;%01111110 = begin
0264++ 9026 ;%01NNNNNf = keyoff,[freq,]0..31 regs
0265++ 9026 ;%00NNNNNf = [freq,]0..30 regs
0266++ 9026 bb=%01111110
0267++ 9026 be=%01111111
0268++ 9026 ;IX - data
0269++ 9026 ;DE - hi ports #FFBF
0270++ 9026 ;C - low port #FD
0271++ 9026 ;A' - fm channel
0272++ 9026 PlayChannel
0273++ 9026 DD 7E 02 ld a,(ix+TFMData.skip)
0274++ 9029 3C inc a
0275++ 902A C2 E9 90 jp nz,.skiper
0276++ 902D DD 7E 03 ld a,(ix+TFMData.blkcnt)
0277++ 9030 A7 and a
0278++ 9031 28 1D jr z,.noframe
0279++ 9033 DD 35 03 dec (ix+TFMData.blkcnt)
0280++ 9036 20 18 jr nz,.noframe
0281++ 9038 DD 6E 04 ld l,(ix+TFMData.blkretaddr)
0282++ 903B DD 66 05 ld h,(ix+TFMData.blkretaddr+1)
0283++ 903E 18 16 jr .tfmframe
0284++ 9040 .begin
0285++ 9040 DD 75 05 ld (ix+TFMData.loopaddr),l
0286++ 9043 DD 74 06 ld (ix+TFMData.loopaddr+1),h
0287++ 9046 18 0E jr .tfmframe
0288++ 9048 .end
0289++ 9048 DD 6E 05 ld l,(ix+TFMData.loopaddr)
0290++ 904B DD 66 06 ld h,(ix+TFMData.loopaddr+1)
0291++ 904E 18 06 jr .tfmframe
0292++ 9050 .noframe
0293++ 9050 DD 6E 00 ld l,(ix+TFMData.addr)
0294++ 9053 DD 66 01 ld h,(ix+TFMData.addr+1)
0295++ 9056 .tfmframe
0296++ 9056 7E ld a,(hl)
0297++ 9057 23 inc hl
0298++ 9058 FE 7E cp bb
0299++ 905A 28 E4 jr z,.begin
0300++ 905C FE 7F cp be
0301++ 905E 28 E8 jr z,.end
0302++ 9060 BB cp e ;#BF
0303++ 9061 D2 DC 90 jp NC,.HLskiper
0304++ 9064 ;TestKeyOff
0305++ 9064 F2 7D 90 jp P,.noffX
0306++ 9067 F5 push af
0307++ 9068 3E 28 ld a,#28
0308++ 906A FM.SelectReg a
0308++ 906A 42 > ld b,d
0308++ 906B ED 70 > inf
0308++ 906D FA 6B 90 > jp m,$-2
0308++ 9070 ED 79 > out (c),Reg
0309++ 9072 08 exa
0310++ 9073 FM.WriteReg a ;FMChannel
0310++ 9073 43 > ld b,e
0310++ 9074 ED 70 > inf
0310++ 9076 FA 74 90 > jp m,$-2
0310++ 9079 ED 79 > out (c),Reg
0311++ 907B 08 exa
0312++ 907C F1 pop af
0313++ 907D .noffX
0314++ 907D B7 OR a
0315++ 907E F5 push af
0316++ 907F ;TestFreq
0317++ 907F 1F RRA
0318++ 9080 30 12 jr NC,.nofrqX
0319++ 9082
0320++ 9082 46 ld b,(hl)
0321++ 9083 23 inc hl
0322++ 9084 4E ld c,(hl)
0323++ 9085 23 inc hl
0324++ 9086 DD 70 07 ld (ix+TFMData.tfmhigh),b
0325++ 9089 DD 71 06 ld (ix+TFMData.tfmlow),c
0326++ 908C C5 push bc
0327++ 908D E3 ex (sp),hl
0328++ 908E 0E FD ld c,#FD
0329++ 9090 CD FE 90 call .outTone
0330++ 9093 E1 pop hl
0331++ 9094
0332++ 9094 .nofrqX
0333++ 9094 E6 1F and #1F
0334++ 9096 C4 27 91 call nz,.OutRegs
0335++ 9099 CD D5 90 call .storeaddr
0336++ 909C F1 pop af
0337++ 909D F0 ret P
0338++ 909E ;.KeyOn
0339++ 909E 3E 28 ld a,#28
0340++ 90A0 FM.SelectReg a
0340++ 90A0 42 > ld b,d
0340++ 90A1 ED 70 > inf
0340++ 90A3 FA A1 90 > jp m,$-2
0340++ 90A6 ED 79 > out (c),Reg
0341++ 90A8 08 exa
0342++ 90A9 C6 F0 add a,#F0
0343++ 90AB FM.WriteReg a
0343++ 90AB 43 > ld b,e
0343++ 90AC ED 70 > inf
0343++ 90AE FA AC 90 > jp m,$-2
0343++ 90B1 ED 79 > out (c),Reg
0344++ 90B3 D6 F0 sub #F0
0345++ 90B5 08 exa
0346++ 90B6 C9 ret
0347++ 90B7
0348++ 90B7 .block
0349++ 90B7 7E ld a,(hl) ;N frames
0350++ 90B8 ;1 now, N-1 later
0351++ 90B8 ;skip command is used as 1 frame
0352++ 90B8 23 inc hl
0353++ 90B9 DD 77 03 ld (ix+TFMData.blkcnt),a
0354++ 90BC 46 ld b,(hl)
0355++ 90BD 23 inc hl
0356++ 90BE 4E ld c,(hl) ;disp
0357++ 90BF 23 inc hl
0358++ 90C0 DD 75 04 ld (ix+TFMData.blkretaddr),l
0359++ 90C3 DD 74 05 ld (ix+TFMData.blkretaddr+1),h
0360++ 90C6 .subframe
0361++ 90C6 09 add hl,bc
0362++ 90C7 0E FD ld c,#fd
0363++ 90C9 C3 56 90 jp .tfmframe
0364++ 90CC
0365++ 90CC .OLDfar
0366++ 90CC 46 ld b,(hl)
0367++ 90CD 23 inc hl
0368++ 90CE .OLDnear
0369++ 90CE 4E ld c,(hl)
0370++ 90CF 23 inc hl
0371++ 90D0 E5 push hl
0372++ 90D1 CD C6 90 call .subframe
0373++ 90D4 E1 pop hl
0374++ 90D5 .storeaddr
0375++ 90D5 DD 75 00 ld (ix+TFMData.addr),l
0376++ 90D8 DD 74 01 ld (ix+TFMData.addr+1),h
0377++ 90DB C9 ret
0378++ 90DC .HLskiper
0379++ 90DC 28 EE jr z,.OLDfar
0380++ 90DE FE E0 cp %11100000
0381++ 90E0 38 0B jr c,.slide
0382++ 90E2 47 ld b,a
0383++ 90E3 BA cp d ;#FF
0384++ 90E4 28 E8 jr z,.OLDnear
0385++ 90E6 CD D5 90 call .storeaddr
0386++ 90E9 DD 77 02 .skiper ld (ix+TFMData.skip),a
0387++ 90EC C9 ret
0388++ 90ED .slide
0389++ 90ED ;a=-64..-33
0390++ 90ED C6 30 add a,48
0391++ 90EF ;a=-16..15
0392++ 90EF 28 C6 jr z,.block
0393++ 90F1 DD 86 06 add a,(ix+TFMData.tfmlow)
0394++ 90F4 DD 77 06 ld (ix+TFMData.tfmlow),a
0395++ 90F7 CD D5 90 call .storeaddr
0396++ 90FA DD 66 07 ld h,(ix+TFMData.tfmhigh)
0397++ 90FD 6F ld l,a
0398++ 90FE .outTone
0399++ 90FE 08 exa
0400++ 90FF C6 A4 add a,#a4
0401++ 9101 FM.SelectReg a
0401++ 9101 42 > ld b,d
0401++ 9102 ED 70 > inf
0401++ 9104 FA 02 91 > jp m,$-2
0401++ 9107 ED 79 > out (c),Reg
0402++ 9109 FM.WriteReg h
0402++ 9109 43 > ld b,e
0402++ 910A ED 70 > inf
0402++ 910C FA 0A 91 > jp m,$-2
0402++ 910F ED 61 > out (c),Reg
0403++ 9111 D6 04 sub #04 ;#A0+channel
0404++ 9113 FM.SelectReg a
0404++ 9113 42 > ld b,d
0404++ 9114 ED 70 > inf
0404++ 9116 FA 14 91 > jp m,$-2
0404++ 9119 ED 79 > out (c),Reg
0405++ 911B FM.WriteReg l
0405++ 911B 43 > ld b,e
0405++ 911C ED 70 > inf
0405++ 911E FA 1C 91 > jp m,$-2
0405++ 9121 ED 69 > out (c),Reg
0406++ 9123 D6 A0 sub #a0
0407++ 9125 08 exa
0408++ 9126 C9 ret
0409++ 9127
0410++ 9127 42 .OutRegs ld b,d ;%11111xxx
0411++ 9128 WaitStatus
0411++ 9128 ED 70 > inf
0411++ 912A FA 28 91 > jp m,$-2
0412++ 912D ED A3 outi ;reg
0413++ 912F WaitStatus
0413++ 912F ED 70 > inf
0413++ 9131 FA 2F 91 > jp m,$-2
0414++ 9134 43 ld b,e ;#BF
0415++ 9135 ED A3 outi ;value
0416++ 9137 3D dec a
0417++ 9138 20 ED jr nz,.OutRegs ;� turbo jr=jp
0418++ 913A C9 ret
0419++ 913B
0420++ 913B TFM.Init TFMData 0,-1,0
0420++ 913B 0000FF0000000000
0421++ 9143 TFM.A TFMData
0421++ 9143 0000000000000000
0422++ 914B TFM.B TFMData
0422++ 914B 0000000000000000
0423++ 9153 TFM.C TFMData
0423++ 9153 0000000000000000
0424++ 915B TFM.D TFMData
0424++ 915B 0000000000000000
0425++ 9163 TFM.E TFMData
0425++ 9163 0000000000000000
0426++ 916B TFM.F TFMData
0426++ 916B 0000000000000000
0427++ 9173
0428++ 9173 endmod
0429++ 9173 TFC.End
0430++ 9173
0431++ 9173 display "TFC module size: ",TFC.End-TFC.Start
0432++ 9173
0433++ 9173 endif
0434++ 9173
0422+ 9173 MTC.End
0423+ 9173 display "MTC module size: ",MTC.End-MTC.Start
0424+ 9173
0425+ 9173 endif
0426+ 9173
0013 9173
0014 9173 module
0015 9173 ;incbin MTC_CYBERMOTION
0016 9173 ;incbin MTC_DRUMTEST
0017 9173 ;incbin MTC_MUG
0018 9173 ;incbin MTC_MYSTICAL
0019 9173 ;incbin MTC_NEWOLD
0020 9173 ;incbin MTC_SNEGURKA
0021 9173 incbin MTC_INDEEDREST
0022 BBAD
0023 BBAD savesna "test_mtc.sna",begin
0024 BBAD savebin "../mtc_8000.bin",player,module-player
0025 BBAD
Value Label
------ - -----------------------------------------------------------
0x6000 begin
0x8000 init
0x600D begin.loop
0x6014 begin.delay
0x8005 play
0x8008 mute
0x602C X begin.fail
0x8000 player
0x0005 X MTC.StreamType
0x0000 MTC.StreamType.PT3
0x0001 MTC.StreamType.PT2
0x0002 MTC.StreamType.TS
0x0003 MTC.StreamType.TFC
0x0004 MTC.StreamType.Unknown
0x000B MTC.StreamData
0x0000 MTC.StreamData.Type
0x0001 MTC.StreamData.Data1
0x0003 MTC.StreamData.Data2
0x0005 MTC.StreamData.Init
0x0007 MTC.StreamData.Play
0x0009 MTC.StreamData.Mute
0x8000 MTC.Start
0x9173 MTC.End
0x800B MTC.Init
0x8048 MTC.Play
0x8066 MTC.Mute
0x80BD MTC.Streams
0x8086 MTC.ParseChunk
0x0000 MTC.ChunkId.MTC1
0x811C MTC.ParseMTC1
0x81E6 MTC.MergeStreams
0x8022 MTC.Init.initstreams
0x8084 MTC.jp_bc
0x804C MTC.Play.playstreams
0x806A MTC.Mute.mutestreams
0x8100 MTC.ChunkId
0x8089 MTC.ParseChunk.checkid
0x80B4 MTC.ParseChunk.matched
0x001C MTC.ChunkId.Unknown
0x80B6 MTC.ParseChunk.getdata
0x0003 MTC.MinStreamsCount
0x80DE MTC.Streams.End
0x0004 MTC.ChunkId.TRCK
0x0008 MTC.ChunkId.DATA
0x000C X MTC.ChunkId.NAME
0x0010 X MTC.ChunkId.AUTH
0x0014 X MTC.ChunkId.ANNO
0x0018 X MTC.ChunkId.PROP
0x0006 MTC.MaxStreamsCount
0x811F MTC.ParseMTC1.nextchunk
0x8137 MTC.ParseTrack
0x813A MTC.ParseTrack.nextchunk
0x8156 MTC.ParseData
0x8162 MTC.ParseTFC
0x8184 MTC.ParseTS
0x8191 MTC.ParsePT2
0x81A4 MTC.ParsePT3
0x8F05 TFC.CheckFormat
0x8F2E TFC.Init
0x8FE1 TFC.Play
0x8F6A TFC.Mute
0x81C3 MTC.FillStream
0x8179 MTC.AddStream
0x8ECD TS.CheckFormatKnownSize
0x81B7 MTC.FillTS
0x8E7C PT2.CheckFormat
0x8E77 PT2.Init
0x81BD MTC.FillPts
0x8E30 PT3.CheckFormat
0x8E2B PT3.Init
0x8EB7 TS.Init
0x8A88 PTS.PLAY
0x825A PTS.MUTE
0x81F2 MTC.Sort
0x81FA MTC.Sort.cycle
0x8219 MTC.Sort.end
0x8212 MTC.Sort.next
0x8206 MTC.Sort.swapitems
0x821D X MTC.Merge
0x8223 MTC.Merge.cycle
0x8231 MTC.Merge.perform
0x824A MTC.Merge.generic
0x824C MTC.Merge.copyitems
0x0030 X PTS.Release
0x0000 PTS.CurPosCounter
0x0000 PTS.ACBBAC
0x0000 PTS.LoopChecker
0x0000 PTS.Id
0x0000 PTS.Basic
0x0000 PTS.TonA
0x0002 PTS.TonB
0x0004 PTS.TonC
0x0006 PTS.Noise
0x0007 PTS.Mixer
0x0008 PTS.AmplA
0x0009 PTS.AmplB
0x000A PTS.AmplC
0x000B PTS.Env
0x000D PTS.EnvTp
0x8259 PTS.START
0x0001 X PTS.SETUP.NOLOOP
0x0002 PTS.SETUP.PT2
0x0004 X PTS.SETUP.ACB
0x0008 X PTS.SETUP.BAC
0x0010 PTS.SETUP.TS02
0x0020 PTS.SETUP.TSPT3
0x8259 PTS.SETUP
0x8B6D PTS.VARS1
0x0079 PTS.VRS.AYREGS
0x8BF4 PTS.VARS2
0x8A9C PTS.ROUT
0x826C PTS.INIT
0x8B6C PTS.VARS
0x8C7B PTS.VAR0END
0x0062 PTS.VRS.AdInPtA
0x8315 PTS.I_PT2
0x845E PTS.INITPT3
0x8852 PTS.e_
0x8831 PTS.SamCnv
0x87FC PTS.OrnCP
0x8828 PTS.SamCP
0x87FF PTS.OrnLD
0x882B PTS.SamLD
0x8822 PTS.SamClc2
0x82B9 PTS.L20
0x82BB PTS.L21
0x86CF PTS.Version
0x830A PTS.NOTS
0x82FE PTS.TwoPT3s
0x0087 PTS.VRS
0x0002 PTS.VRS.ModNum
0x8993 PTS.TSSub
0x8301 PTS.AlCoTS_
0x8B6C PTS.is_ts
0x861B PTS.PT3PD
0x8B34 PTS.PT3EMPTYORN
0x835D PTS.INITCOMMON
0x8496 PTS.INITPT2
0x8354 PTS.NOTS2
0x8555 PTS.PT2PD
0x8C8A PTS.PT2EMPTYORN
0x8506 PTS.PTDEC
0x8995 PTS.PsCalc
0x8B37 PTS.T_PACK
0x8C7B PTS.T1_
0x836B PTS.TP_0
0x8377 PTS.TP_1
0x837E PTS.TP_2
0x006D PTS.VRS.DelyCnt
0x0003 PTS.VRS.ChanA
0x001B PTS.CHP.NtSkCn
0x0020 PTS.VRS.ChanB
0x003D PTS.VRS.ChanC
0x000D PTS.CHP.OrnPtr
0x8AE4 PTS.NT_DATA
0x83EF PTS.L3
0x8AF4 PTS.T_
0x8D6B PTS.NT_
0x83DE PTS.L1
0x83EB PTS.L2
0x8B00 PTS.TCOLD_1
0x8410 PTS.CORR_1
0x8425 PTS.TC_EXIT
0x841E PTS.CORR_2
0x8434 PTS.M1
0x8445 PTS.M2
0x8C6B PTS.VT_
0x843D PTS.INITV2
0x8444 PTS.INITV1
0x8458 PTS.M3
0x84D1 PTS.SETMDAD
0x006C PTS.VRS.Delay
0x84DF PTS.SETCPPT
0x84E6 PTS.SETLPPT
0x84CA PTS.SETPTPT
0x84D8 PTS.SETORPT
0x848F PTS.SETSMPT
0x005E PTS.VRS.SamPtrs
0x0060 PTS.VRS.PatsPtr
0x005A PTS.VRS.MODADDR
0x005C PTS.VRS.OrnPtrs
0x0068 PTS.VRS.CrPsPtr
0x006A PTS.VRS.LPosPtr
0x84ED PTS.SETENBS
0x0077 PTS.VRS.EnvBase
0x84F4 PTS.SETESLD
0x0070 PTS.VRS.CurESld
0x84FB PTS.GETIX
0x8502 PTS.PTDECOD
0x8508 PTS.PD2_SAM
0x879E PTS.SETSAM
0x8557 PTS.PD2_LOOP
0x850D PTS.PD2_EOff
0x0014 PTS.CHP.Env_En
0x8512 PTS.PD2_ENV
0x8524 PTS.PD2_ORN
0x877F PTS.SETORN
0x8529 PTS.PD2_SKIP
0x0011 PTS.CHP.NNtSkp
0x852F PTS.PD2_VOL
0x001C PTS.CHP.Volume
0x8538 PTS.PD2_DEL
0x874F PTS.C_DELAY
0x853D PTS.PD2_GLIS
0x0015 PTS.CHP.Flags
0x0016 PTS.CHP.TnSlDl
0x0005 PTS.CHP.TSlCnt
0x0017 PTS.CHP.TSlStp
0x8556 PTS.PD2_LP2
0x859C PTS.PD2_REL
0x85A1 PTS.PD2_NOTE
0x867E PTS.PD_FIN
0x858C PTS.PD2_PORT
0x8597 PTS.PD2_STOP
0x0003 PTS.CHP.CrNsSl
0x85CD PTS.PD2_EXIT
0x0012 PTS.CHP.Note
0x86B7 PTS.PrNote
0x85CC PTS.NOGLIS2
0x85C8 PTS.NOPORT2
0x86DE PTS.LoStep
0x8699 PTS.SETPORT
0x0001 PTS.CHP.PsInSm
0x0000 PTS.CHP.PsInOr
0x0006 PTS.CHP.CrTnSl
0x85DC PTS.PD_OrSm
0x85E3 PTS.PD_SAM_
0x85E6 PTS.PD_SAM
0x862A PTS.PD_LOOP
0x85EB PTS.PD_VOL
0x862D PTS.PD_LP2
0x85F4 PTS.PD_EOff
0x85FC PTS.PD_SorE
0x8606 PTS.PD_ENV
0x8764 PTS.SETENV
0x860B PTS.PD_ORN
0x8610 PTS.PD_ESAM
0x86D4 PTS.PrSlide
0x865F PTS.PD_REL
0x8665 PTS.PD_NOTE
0x865A PTS.PD_NOIS
0x87BA PTS.SPCCOMS
0x0074 PTS.VRS.Ns_Base
0x866D PTS.PD_RES
0x867B PTS.PDSP_
0x8685 PTS.C_PORTM
0x0013 PTS.CHP.SlToNt
0x0019 PTS.CHP.TnDelt
0x86DD PTS.OLDPRTM
0x86E3 PTS.NOSIG
0x86ED PTS.SET_STP
0x000A PTS.CHP.COnOff
0x86F9 PTS.C_GLISS
0x870C PTS.GL36
0x8716 PTS.C_SMPOS
0x871C PTS.C_ORPOS
0x8722 PTS.C_VIBRT
0x000B PTS.CHP.OnOffD
0x000C PTS.CHP.OffOnD
0x873A PTS.C_ENGLS
0x0072 PTS.VRS.Env_Del
0x0073 PTS.VRS.CurEDel
0x006E PTS.VRS.ESldAdd
0x879D PTS.C_NOP
0x000F PTS.CHP.SamPtr
0x87DA PTS.CHREGS
0x8A17 PTS.Ampl
0x892D PTS.CH_EXIT
0x8876 PTS.CSP_
0x8800 PTS.CH_ORPS
0x880B PTS.CH_NTP
0x8811 PTS.CH_NOK
0x882C PTS.CH_SMPS
0x0008 PTS.CHP.TnAcc
0x8863 PTS.CH_NOAC
0x88BE PTS.CH_AMP
0x88A9 PTS.CH_STPP
0x0002 PTS.CHP.CrAmSl
0x88D8 PTS.CH_NOAM
0x88D0 PTS.CH_AMIN
0x88D5 PTS.CH_SVAM
0x88E1 PTS.CH_APOS
0x88E7 PTS.CH_VOL
0x88F2 X PTS.CH_ENV
0x88F9 PTS.CH_NOEN
0x891B PTS.NO_ENSL
0x0004 PTS.CHP.CrEnSl
0x8913 PTS.NO_ENAC
0x0076 PTS.VRS.AddToEn
0x8929 PTS.CH_MIX
0x0075 PTS.VRS.AddToNs
0x894D PTS.CH_ONDL
0x8951 PTS.PLAY_
0x8A04 PTS.PL2
0x89D0 PTS.PL1B
0x89C4 PTS.PL1A
0x8988 PTS.PLNLP
0x8995 PTS.NoAlCo
0x89C1 PTS.PSP_
0x0064 PTS.VRS.AdInPtB
0x0066 PTS.VRS.AdInPtC
0x89E7 PTS.PL1C
0x89FE PTS.PL1D
0x8A9C PTS.PL_nts
0x8AA7 X PTS.r_nts
0x8AB8 PTS.ROUT_
0x8ABC PTS.LOUT
0x8CAD PTS.T_NEW_0
0x8B1E PTS.TCNEW_0
0x8CAD PTS.T_OLD_0
0x8AF4 PTS.TCOLD_0
0x8C7B PTS.T_NEW_1
0x8B00 PTS.TCNEW_1
0x8C7B PTS.T_OLD_1
0x8CC5 PTS.T_NEW_2
0x8B29 PTS.TCNEW_2
0x8C93 PTS.T_OLD_2
0x8B02 PTS.TCOLD_2
0x8CAB PTS.T_NEW_3
0x8B14 PTS.TCNEW_3
0x8CAB PTS.T_OLD_3
0x8B15 PTS.TCOLD_3
0x001D PTS.CHP
0x0000 X PTS.VRS.CurPos
0x0001 X PTS.VRS.PosSub
0x8E2B X PTS.VARSEND
0x8E2B X PTS.MDLADDR
0x00CB X PT3.Header
0x0000 X PT3.Header.Id
0x000D X PT3.Header.Subversion
0x000E X PT3.Header.Description
0x0062 X PT3.Header.Mode
0x0063 PT3.Header.FreqTable
0x0064 X PT3.Header.Tempo
0x0065 X PT3.Header.Length
0x0066 X PT3.Header.Loop
0x0067 X PT3.Header.Patterns
0x0069 PT3.Header.Samples
0x00A9 PT3.Header.Ornaments
0x00C9 PT3.Header.Positions
0x8E2B PT3.Start
0x8E4B PT3.CheckFormat.samples
0x8E55 PT3.CheckFormat.ornaments
0x8E65 PT3.CheckFormat.positions
0x8E6A PT3.CheckFormat.div3
0x8E72 PT3.CheckFormat.posok
0x8E74 X PT3.CheckFormat.fail
0x8A88 X PT3.Play
0x825A X PT3.Mute
0x8E77 PT3.End
0x0085 X PT2.Header
0x0000 X PT2.Header.Tempo
0x0001 X PT2.Header.Length
0x0002 X PT2.Header.Loop
0x0003 PT2.Header.Samples
0x0043 X PT2.Header.Ornaments
0x0063 PT2.Header.Patterns
0x0065 PT2.Header.Name
0x0083 PT2.Header.Positions
0x8E77 PT2.Start
0x8E8D PT2.CheckFormat.samorns
0x8EA9 PT2.CheckFormat.positions
0x8EB4 X PT2.CheckFormat.fail
0x8A88 X PT2.Play
0x825A X PT2.Mute
0x8EB7 PT2.End
0x0010 X TS.Footer
0x0000 X TS.Footer.Sign1
0x0004 X TS.Footer.Size1
0x0006 X TS.Footer.Sign2
0x000A X TS.Footer.Size2
0x000C X TS.Footer.Sign3
0x8EB7 TS.Start
0x8EBC TS.CheckFormat
0x8EBF TS.CheckFormat.findfooter
0x8ECE TS.CheckFooter
0x8EFA TS.End
0x8A88 X TS.Play
0x825A X TS.Mute
0x0001 TFC.newtfm
0x00F8 TFC.statuschip0
0x00F9 TFC.statuschip1
0x0022 X TFC.Header
0x0000 X TFC.Header.signature
0x0006 X TFC.Header.version
0x0009 X TFC.Header.intfreq
0x000A TFC.Header.tfmptrs
0x0016 X TFC.Header.ssgptrs
0x0008 TFC.TFMData
0x0000 TFC.TFMData.addr
0x0002 TFC.TFMData.skip
0x0003 TFC.TFMData.blkcnt
0x0004 TFC.TFMData.blkretaddr
0x0005 TFC.TFMData.loopaddr
0x0006 TFC.TFMData.tfmlow
0x0007 TFC.TFMData.tfmhigh
0x8EFA TFC.Start
0x9173 TFC.End
0x913B TFC.TFM.Init
0x9143 TFC.TFM.A
0x8F5E TFC.Init.tfminitab
0x8F6A TFC.Init.tfminitab_end
0x8F45 TFC.Init.tfmini0
0x8F54 TFC.Init.tfminiHL
0x9143 TFC.TFM.A.addr
0x914B TFC.TFM.B.addr
0x9153 TFC.TFM.C.addr
0x915B TFC.TFM.D.addr
0x9163 TFC.TFM.E.addr
0x916B TFC.TFM.F.addr
0x8FD9 TFC.selChip0
0x8F78 TFC.Mute.tfminiPP
0x8FDD TFC.selChip1
0x8FC0 TFC.Mute.writeregsset
0x8FC8 TFC.Mute.writereg
0x8FBC TFC.Mute.selRegA
0x9026 TFC.PlayChannel
0x914B TFC.TFM.B
0x9153 TFC.TFM.C
0x915B TFC.TFM.D
0x9163 TFC.TFM.E
0x916B TFC.TFM.F
0x007E TFC.bb
0x007F TFC.be
0x90E9 TFC.PlayChannel.skiper
0x9050 TFC.PlayChannel.noframe
0x9056 TFC.PlayChannel.tfmframe
0x9040 TFC.PlayChannel.begin
0x9048 TFC.PlayChannel.end
0x90DC TFC.PlayChannel.HLskiper
0x907D TFC.PlayChannel.noffX
0x9094 TFC.PlayChannel.nofrqX
0x90FE TFC.PlayChannel.outTone
0x9127 TFC.PlayChannel.OutRegs
0x90D5 TFC.PlayChannel.storeaddr
0x90B7 TFC.PlayChannel.block
0x90C6 TFC.PlayChannel.subframe
0x90CC TFC.PlayChannel.OLDfar
0x90CE TFC.PlayChannel.OLDnear
0x90ED TFC.PlayChannel.slide
0x913B X TFC.TFM.Init.addr
0x913D X TFC.TFM.Init.skip
0x913E X TFC.TFM.Init.blkcnt
0x913F X TFC.TFM.Init.blkretaddr
0x9140 X TFC.TFM.Init.loopaddr
0x9141 X TFC.TFM.Init.tfmlow
0x9142 X TFC.TFM.Init.tfmhigh
0x9145 X TFC.TFM.A.skip
0x9146 X TFC.TFM.A.blkcnt
0x9147 X TFC.TFM.A.blkretaddr
0x9148 X TFC.TFM.A.loopaddr
0x9149 X TFC.TFM.A.tfmlow
0x914A X TFC.TFM.A.tfmhigh
0x914D X TFC.TFM.B.skip
0x914E X TFC.TFM.B.blkcnt
0x914F X TFC.TFM.B.blkretaddr
0x9150 X TFC.TFM.B.loopaddr
0x9151 X TFC.TFM.B.tfmlow
0x9152 X TFC.TFM.B.tfmhigh
0x9155 X TFC.TFM.C.skip
0x9156 X TFC.TFM.C.blkcnt
0x9157 X TFC.TFM.C.blkretaddr
0x9158 X TFC.TFM.C.loopaddr
0x9159 X TFC.TFM.C.tfmlow
0x915A X TFC.TFM.C.tfmhigh
0x915D X TFC.TFM.D.skip
0x915E X TFC.TFM.D.blkcnt
0x915F X TFC.TFM.D.blkretaddr
0x9160 X TFC.TFM.D.loopaddr
0x9161 X TFC.TFM.D.tfmlow
0x9162 X TFC.TFM.D.tfmhigh
0x9165 X TFC.TFM.E.skip
0x9166 X TFC.TFM.E.blkcnt
0x9167 X TFC.TFM.E.blkretaddr
0x9168 X TFC.TFM.E.loopaddr
0x9169 X TFC.TFM.E.tfmlow
0x916A X TFC.TFM.E.tfmhigh
0x916D X TFC.TFM.F.skip
0x916E X TFC.TFM.F.blkcnt
0x916F X TFC.TFM.F.blkretaddr
0x9170 X TFC.TFM.F.loopaddr
0x9171 X TFC.TFM.F.tfmlow
0x9172 X TFC.TFM.F.tfmhigh
0x9173 module