Created
July 6, 2025 10:09
-
-
Save svofski/ca57ff62c53afa66421f6e437a352eb8 to your computer and use it in GitHub Desktop.
PT3 player 8080 mnemonic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;Vortex Tracker II v1.0 PT3 player for MSX | |
| ;Adapted by Alfonso D. C. aka Dioniso <dioniso072@yahoo.es> | |
| ;09-Jan-05 | |
| ; | |
| ;8080 version by Ivan Gorodetsky 05-Jul-25 (PT3.7 support 06-Jul-25) | |
| ;8080 mnemonics conversion by Viacheslav Slavinsky 06-Jul-25 | |
| ; | |
| ;From: | |
| ;Vortex Tracker II v1.0 PT3 player for ZX Spectrum | |
| ;(c)2004 S.V.Bulba <vorobey@mail.khstu.ru> http://bulba.at.kz | |
| ;Release number | |
| Release: .equ '6' | |
| ;Features | |
| ;-------- | |
| ;-Can be compiled at any address (i.e. no need rounding .org | |
| ; address). | |
| ;-Variables (VARS) can be located at any address (not only after | |
| ;code block). | |
| ;-INIT subroutine detects module version and rightly generates | |
| ; both note and volume tables outside of code block (in VARS). | |
| ;-Two portamento (spc. command 3xxx) algorithms (depending of | |
| ; module version). | |
| ;-Any Tempo value are accepted (including Tempo=1 and Tempo=2). | |
| ;-Fully compatible with Ay_Emul PT3 player codes. | |
| ;-See also notes at the end of this source code. | |
| ;Limitations | |
| ;----------- | |
| ;-Can run in RAM only (self-modified code is used). | |
| ;Warning!!! PLAY subroutine can crash if no module are loaded | |
| ;into RAM or INIT subroutine was not called before. | |
| ;Call MUTE or INIT one more time to mute sound after stopping | |
| ;playing | |
| ;Entry and other points | |
| ;START initialization | |
| ;START+3 initialization with module address in HL | |
| ;START+6 play one quark | |
| ;START+9 mute | |
| ;START+12 setup and status flags | |
| ;START+13 pointer to current position value in PT3 module; | |
| ;After INIT (START+11) points to Postion0-1 (optimization) | |
| START: | |
| lxi h, MDLADDR ;Address of PT3 module | |
| jmp INIT ;START+3 | |
| jmp PLAY ;START+6 | |
| jmp MUTE ;START+9 | |
| SETUP: .db 0 ;set bit0 to 1, if you want to play without looping | |
| ;bit7 is set each time, when loop point is passed | |
| CrPsPtr: .dw 0 | |
| ;Identifier | |
| .db "=VTII PT3 Player r.",Release,"=" | |
| CHECKLP: | |
| lxi h, SETUP | |
| sta $+9 | |
| mov a, m | |
| ori 128 | |
| mov m, a | |
| rrc | |
| mvi a, 0 | |
| rnc | |
| pop h | |
| lxi h, DelyCnt | |
| inr m | |
| lxi h, ChanA+CHNPRM_NtSkCn | |
| inr m | |
| MUTE: xra a | |
| mov h, a | |
| mov l, a | |
| sta AYREGS+AR_AmplA | |
| shld AYREGS+AR_AmplB | |
| jmp ROUT_A0 | |
| INIT: | |
| ;HL - AddressOfModule | |
| shld MODADDR | |
| shld MDADDR2 | |
| push h | |
| lxi d, 100 | |
| dad d | |
| mov a, m | |
| sta Delay | |
| shld regIX | |
| dad d | |
| shld CrPsPtr | |
| push h | |
| lhld regIX | |
| inx h\ inx h | |
| mov e, m | |
| pop h | |
| dad d | |
| inx h | |
| shld LPosPtr | |
| lhld regIX | |
| inx h\ inx h\ inx h | |
| mov e, m | |
| inx h | |
| mov d, m | |
| xchg | |
| pop d | |
| dad d | |
| shld PatsPtr | |
| lxi h, 169 | |
| dad d | |
| shld OrnPtrs | |
| lxi h, 105 | |
| dad d | |
| shld SamPtrs | |
| lxi h, SETUP | |
| push h | |
| push psw | |
| mov a, m | |
| ani 01111111b | |
| mov m, a | |
| pop psw | |
| pop h | |
| ;note table data depacker | |
| lxi d, T_PACK | |
| lxi b, T1_+(2*49)-1 | |
| TP_0: | |
| ldax d | |
| inx d | |
| cpi 15*2 | |
| jnc TP_1 | |
| mov h, a | |
| ldax d | |
| mov l, a | |
| inx d | |
| jmp TP_2 | |
| TP_1: | |
| push d | |
| mvi d, 0 | |
| mov e, a | |
| dad d | |
| dad d | |
| pop d | |
| TP_2: | |
| mov a, h | |
| stax b | |
| dcx b | |
| mov a, l | |
| stax b | |
| dcx b | |
| sui $F0 | |
| jnz TP_0 | |
| lxi h, VARS | |
| mov m, a | |
| lxi d, VARS+1 | |
| lxi b, VAR0END-VARS-1 | |
| push psw | |
| LdirLoop: | |
| mov a, m | |
| stax d | |
| inx h | |
| inx d | |
| dcx b | |
| mov a, b | |
| ora c | |
| jnz LdirLoop | |
| pop psw | |
| inr a | |
| sta DelyCnt | |
| lxi h, $F001 ;H - CHNPRM_Volume, L - CHNPRM_NtSkCn | |
| shld ChanA+CHNPRM_NtSkCn | |
| shld ChanB+CHNPRM_NtSkCn | |
| shld ChanC+CHNPRM_NtSkCn | |
| lxi h, EMPTYSAMORN | |
| shld AdInPtA ;ptr to zero | |
| shld ChanA+CHNPRM_OrnPtr ;ornament 0 is "0,1,0" | |
| shld ChanB+CHNPRM_OrnPtr ;in all versions from | |
| shld ChanC+CHNPRM_OrnPtr ;3.xx to 3.6x ani VTII | |
| shld ChanA+CHNPRM_SamPtr ;S1 There is no default | |
| shld ChanB+CHNPRM_SamPtr ;S2 sample in PT3, so, you | |
| shld ChanC+CHNPRM_SamPtr ;S3 can comment S1,2,3; see | |
| ;also EMPTYSAMORN comment | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, 13-100 | |
| dad b | |
| mov a, m | |
| pop b | |
| pop h | |
| sui $30 | |
| jc L20 | |
| cpi 10 | |
| jc L21 | |
| L20: mvi a, 6 | |
| L21: sta Version | |
| push psw | |
| cpi 4 | |
| push h | |
| lhld regIX | |
| dcx h | |
| mov a, m | |
| pop h | |
| ral | |
| ani 7 | |
| ;NoteTableCreator (c) Ivan Roshin | |
| ;A - NoteTableNumber*2+VersionForNoteTable | |
| ;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0) | |
| lxi h, NT_DATA | |
| push d | |
| mov d, b | |
| add a | |
| mov e, a | |
| dad d | |
| mov e, m | |
| inx h | |
| sta $+8\ xra a\ ora e\ rar\ mov e, a\ mvi a, 0 | |
| sbb a | |
| ani $A7 ;$00 (NOP) ori $A7 (ana a) | |
| sta L3 | |
| xchg | |
| pop b ;BC=T1_ | |
| dad b | |
| ldax d | |
| lxi b, T_ | |
| add c | |
| mov c, a | |
| adc b | |
| sub c | |
| mov b, a | |
| push b | |
| lxi d, NT_ | |
| push d | |
| mvi b, 12 | |
| L1: | |
| push b | |
| mov c, m | |
| inx h | |
| push h | |
| mov b, m | |
| push d | |
| xchg | |
| lxi d, 23 | |
| push psw | |
| mvi a, 8 | |
| sta regIX+1 | |
| pop psw | |
| L2: | |
| sta $+11\ xra a\ ora b\ rar\ mov b, a | |
| mov a, c\ rar\ mov c, a\ mvi a, 0 | |
| L3: | |
| .db 0 | |
| mov a, c | |
| adc d ;=ADC 0 | |
| mov m, a | |
| inx h | |
| mov a, b | |
| adc d | |
| mov m, a | |
| dad d | |
| push h | |
| lxi h, regIX+1 | |
| dcr m | |
| pop h | |
| jnz L2 | |
| pop d | |
| inx d | |
| inx d | |
| pop h | |
| inx h | |
| pop b | |
| dcr b\ jnz L1 | |
| pop h | |
| pop d | |
| mov a, e | |
| push d | |
| lxi d, TCOLD_1 | |
| cmp e | |
| pop d | |
| jnz CORR_1 | |
| mvi a, $FD | |
| sta NT_+$2E | |
| CORR_1: | |
| ldax d | |
| ana a | |
| jz TC_EXIT | |
| rar | |
| push psw | |
| add a | |
| mov c, a | |
| dad b | |
| pop psw | |
| jnc CORR_2 | |
| dcr m | |
| dcr m | |
| CORR_2: | |
| inr m | |
| mov a, l\ sub c\ mov l, a | |
| mov a, h\ sbb b\ mov h, a | |
| inx d | |
| jmp CORR_1 | |
| TC_EXIT: | |
| pop psw | |
| ;VolTableCreator (c) Ivan Roshin | |
| ;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; | |
| ;5.. - 3.5x..3.6x..VTII1.0) | |
| cpi 5 | |
| lxi h, $11 | |
| mov d, h | |
| mov e, h | |
| mvi a, $17 | |
| jnc M1 | |
| dcr l | |
| mov e, l | |
| xra a | |
| M1: | |
| sta M2 | |
| push h | |
| lxi h, VT_+16 | |
| shld regIX | |
| pop h | |
| mvi c, $10 | |
| INITV2: | |
| push h | |
| dad d | |
| xchg | |
| lxi h, 0 | |
| INITV1: | |
| mov a, l | |
| M2: | |
| .db 0 | |
| mov a, h | |
| aci 0 | |
| push h | |
| lhld regIX | |
| mov m, a | |
| inx h | |
| shld regIX | |
| pop h | |
| dad d | |
| inr c | |
| mov a, c | |
| ani 15 | |
| jnz INITV1 | |
| pop h | |
| mov a, e | |
| cpi $77 | |
| jnz M3 | |
| inr e | |
| M3: | |
| mov a, c | |
| ana a | |
| jnz INITV2 | |
| jmp ROUT_A0 | |
| ;pattern decoder | |
| PD_OrSm: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Env_En | |
| dad b | |
| mvi m, 0 | |
| pop b | |
| pop h | |
| call SETORN | |
| ldax b | |
| inx b | |
| rrc | |
| PD_SAM: | |
| add a | |
| PD_SAM_: | |
| mov e, a | |
| mvi d, 0 | |
| SamPtrs: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| mov e, m | |
| inx h | |
| mov d, m | |
| MODADDR: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| xchg | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h | |
| mov m, e | |
| inx h | |
| mov m, d | |
| pop h | |
| xchg | |
| jmp PD_LOOP | |
| PD_VOL: | |
| rlc | |
| rlc | |
| rlc | |
| rlc | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Volume | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| jmp PD_LP2 | |
| PD_EOff: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Env_En | |
| dad b | |
| mov m, a | |
| lxi b, CHNPRM_PsInOr-CHNPRM_Env_En | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| jmp PD_LP2 | |
| PD_SorE: | |
| dcr a | |
| jnz PD_ENV | |
| ldax b | |
| inx b | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h\ inx h | |
| mov m, a | |
| pop h | |
| jmp PD_LP2 | |
| PD_ENV: call SETENV | |
| jmp PD_LP2 | |
| PD_ORN: call SETORN | |
| jmp PD_LOOP | |
| PD_ESAM: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Env_En | |
| dad b | |
| mov m, a | |
| lxi b, CHNPRM_PsInOr-CHNPRM_Env_En | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| cnz SETENV | |
| ldax b | |
| inx b | |
| jmp PD_SAM_ | |
| PTDECOD: | |
| lhld regIX | |
| lxi d, -12+CHNPRM_Note | |
| dad d | |
| mov a, m | |
| sta PrNote+1 | |
| lxi d, CHNPRM_CrTnSl-CHNPRM_Note | |
| dad d | |
| mov a, m | |
| inx h | |
| mov h, m | |
| mov l, a | |
| shld PrSlide+1 | |
| PD_LOOP: | |
| lxi d, $2010 | |
| PD_LP2: | |
| ldax b | |
| inx b | |
| add e | |
| jc PD_OrSm | |
| add d | |
| jz PD_FIN | |
| jc PD_SAM | |
| add e | |
| jz PD_REL | |
| jc PD_VOL | |
| add e | |
| jz PD_EOff | |
| jc PD_SorE | |
| adi 96 | |
| jc PD_NOTE | |
| add e | |
| jc PD_ORN | |
| add d | |
| jc PD_NOIS | |
| add e | |
| jc PD_ESAM | |
| add a | |
| mov e, a | |
| push d | |
| lxi d, $DF20 | |
| lxi h, SPCCOMS | |
| dad d | |
| pop d | |
| dad d | |
| mov e, m | |
| inx h | |
| mov d, m | |
| push d | |
| jmp PD_LOOP | |
| PD_NOIS: | |
| sta Ns_Base | |
| jmp PD_LP2 | |
| PD_REL: | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Flags | |
| dad b | |
| mov a, m | |
| ani 11111110b | |
| mov m, a | |
| pop b | |
| jmp PD_RES_ | |
| PD_NOTE: | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h\ inx h\ inx h | |
| mov m, a | |
| inx h\ inx h\ inx h | |
| mov a, m | |
| ori 1 | |
| mov m, a | |
| pop h | |
| PD_RES_: | |
| xra a | |
| PD_RES: | |
| lxi h, 0 | |
| dad sp | |
| shld PDSP_+1 | |
| lhld regIX | |
| sphl | |
| mov h, a | |
| mov l, a | |
| push h | |
| push h | |
| push h | |
| push h | |
| push h | |
| push h | |
| PDSP_: | |
| lxi sp, $3131 | |
| PD_FIN: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_NNtSkp | |
| dad b | |
| mov a, m | |
| lxi b, CHNPRM_NtSkCn-CHNPRM_NNtSkp | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| RET | |
| C_PORTM: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Flags | |
| dad b | |
| mov a, m | |
| ani 11111011b | |
| mov m, a | |
| pop b | |
| pop h | |
| ldax b | |
| inx b | |
| ;SKIP PRECALCULATED TONE DELTA (BECAUSE | |
| ;CANNOT BE RIGHT AFTER PT3 COMPILATION) | |
| inx b | |
| inx b | |
| lhld regIX | |
| lxi d, -12+CHNPRM_TnSlDl | |
| dad d | |
| mov m, a | |
| lxi d, CHNPRM_TSlCnt-CHNPRM_TnSlDl | |
| dad d | |
| mov m, a | |
| lxi d, CHNPRM_Note-CHNPRM_TSlCnt+CHNPRM_TnSlDl+12 | |
| dad d | |
| mov a, m | |
| lxi d, CHNPRM_SlToNt-CHNPRM_Note+CHNPRM_TSlCnt-CHNPRM_TnSlDl | |
| dad d | |
| mov m, a | |
| lxi d, NT_ | |
| add a | |
| mov l, a | |
| mvi h, 0 | |
| dad d | |
| mov a, m | |
| inx h | |
| mov h, m | |
| mov l, a | |
| push h | |
| PrNote: | |
| mvi a, $3E | |
| lhld regIX | |
| push b | |
| lxi b, -12+CHNPRM_Note | |
| dad b | |
| mov m, a | |
| pop b | |
| add a | |
| mov l, a | |
| mvi h, 0 | |
| dad d | |
| mov e, m | |
| inx h | |
| mov d, m | |
| pop h | |
| mov a, l\ sbb e\ mov l, a | |
| mov a, h\ sbb d\ mov h, a | |
| xchg | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_TnDelt | |
| dad b | |
| mov m, e | |
| inx h | |
| mov m, d | |
| lxi b, CHNPRM_CrTnSl-CHNPRM_TnDelt | |
| dad b | |
| mov c, m | |
| inx h | |
| mov b, m | |
| xchg | |
| mov e, c | |
| mov d, b | |
| pop b | |
| Version: .equ $+1 | |
| mvi a, $3E | |
| cpi 6 | |
| jc OLDPRTM ;Old 3xxx for PT v3.5- | |
| PrSlide: | |
| lxi d, $1111 | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_CrTnSl | |
| dad b | |
| mov m, e | |
| inx h | |
| mov m, d | |
| pop b | |
| pop h | |
| OLDPRTM: | |
| ldax b ;SIGNED TONE STEP | |
| inx b | |
| sta SetA2+1 | |
| ldax b | |
| inx b | |
| ana a | |
| jz NOSIG | |
| xchg | |
| NOSIG: | |
| sta $+10 | |
| mov a, l\ sbb e\ mov l, a | |
| mov a, h\ sbb d\ mov h, a | |
| mvi a, 0 | |
| jp SET_STP | |
| cma | |
| push psw | |
| lda SetA2+1 | |
| cma | |
| inr a | |
| sta SetA2+1 | |
| pop psw | |
| SET_STP: | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_TSlStp+1 | |
| dad b | |
| mov m, a | |
| dcx h | |
| SetA2: | |
| mvi m, 0 | |
| lxi b, CHNPRM_COnOff-CHNPRM_TSlStp | |
| dad b | |
| mvi m, 0 | |
| pop b | |
| pop h | |
| RET | |
| C_GLISS: | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, -12+CHNPRM_Flags | |
| dad d | |
| mov a, m | |
| ori 100b | |
| mov m, a | |
| ldax b | |
| inx b | |
| inx h | |
| mov m, a | |
| ana a | |
| jnz GL36 | |
| lda Version ;AlCo PT3.7+ | |
| cpi 7 | |
| sbb a | |
| inr a | |
| GL36: | |
| lxi d, CHNPRM_TSlCnt-CHNPRM_TnSlDl | |
| dad d | |
| mov m, a | |
| pop d | |
| pop h | |
| ldax b | |
| inx b | |
| sta SetA2+1 | |
| ldax b | |
| inx b | |
| jmp SET_STP | |
| C_SMPOS: | |
| ldax b | |
| inx b | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_PsInSm | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| RET | |
| C_ORPOS: | |
| ldax b | |
| inx b | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_PsInOr | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| RET | |
| C_VIBRT: | |
| ldax b | |
| inx b | |
| push h | |
| push d | |
| lhld regIX | |
| dcx h | |
| mov m, a | |
| dcx h | |
| mov m, a | |
| ldax b | |
| inx b | |
| inx h\ inx h | |
| mov m, a | |
| xra a | |
| lxi d, CHNPRM_TSlCnt-CHNPRM_OffOnD | |
| dad d | |
| mov m, a | |
| inx h | |
| mov m, a | |
| inx h | |
| mov m, a | |
| pop d | |
| pop h | |
| RET | |
| C_ENGLS: | |
| ldax b | |
| inx b | |
| sta Env_Del | |
| sta CurEDel | |
| ldax b | |
| inx b | |
| mov l, a | |
| ldax b | |
| inx b | |
| mov h, a | |
| shld ESldAdd | |
| RET | |
| C_DELAY: | |
| ldax b | |
| inx b | |
| sta Delay | |
| RET | |
| SETENV: | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_Env_En | |
| dad b | |
| mov m, e | |
| pop b | |
| sta AYREGS+AR_EnvTp | |
| ldax b | |
| inx b | |
| mov h, a | |
| ldax b | |
| inx b | |
| mov l, a | |
| shld EnvBase | |
| xra a | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_PsInOr | |
| dad b | |
| mov m, a | |
| pop b | |
| sta CurEDel | |
| mov h, a | |
| mov l, a | |
| shld CurESld | |
| C_NOP: RET | |
| SETORN: | |
| add a | |
| mov e, a | |
| mvi d, 0 | |
| push b | |
| lhld regIX | |
| lxi b, -12+CHNPRM_PsInOr | |
| dad b | |
| mov m, d | |
| pop b | |
| OrnPtrs: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| mov e, m | |
| inx h | |
| mov d, m | |
| MDADDR2: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| xchg | |
| push h | |
| push b | |
| lhld regIX | |
| inx h | |
| mov m, e | |
| inx h | |
| mov m, d | |
| pop b | |
| pop h | |
| xchg | |
| RET | |
| ;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES | |
| SPCCOMS: .dw C_NOP | |
| .dw C_GLISS | |
| .dw C_PORTM | |
| .dw C_SMPOS | |
| .dw C_ORPOS | |
| .dw C_VIBRT | |
| .dw C_NOP | |
| .dw C_NOP | |
| .dw C_ENGLS | |
| .dw C_DELAY | |
| .dw C_NOP | |
| .dw C_NOP | |
| .dw C_NOP | |
| .dw C_NOP | |
| .dw C_NOP | |
| .dw C_NOP | |
| CHREGS: | |
| xra a | |
| sta Ampl | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_Flags | |
| dad b | |
| sta $+7 | |
| mov a, m | |
| ani 1 | |
| mvi a, 0 | |
| pop b | |
| pop h | |
| push h | |
| jz CH_EXIT | |
| shld $+11 | |
| lxi h, 0 | |
| dad sp | |
| shld CSP_+1 | |
| lxi h, 0 | |
| xchg | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_OrnPtr | |
| dad b | |
| mov e, m | |
| inx h | |
| mov d, m | |
| pop b | |
| pop h | |
| xchg | |
| sphl | |
| pop d | |
| mov h, a | |
| shld $+8 | |
| lhld regIX | |
| mov a, m | |
| lxi h, 0 | |
| mov l, a | |
| dad sp | |
| inr a | |
| cmp d | |
| jc CH_ORPS | |
| mov a, e | |
| CH_ORPS: | |
| shld $+16 | |
| lhld regIX | |
| mov m, a | |
| mvi a, CHNPRM_Note | |
| add l | |
| mov l, a | |
| adc h | |
| sub l | |
| mov h, a | |
| mov a, m | |
| lxi h, 0 | |
| add m | |
| jp CH_NTP | |
| xra a | |
| CH_NTP: | |
| cpi 96 | |
| jc CH_NOK | |
| mvi a, 95 | |
| CH_NOK: | |
| add a | |
| sta SetA1+1 | |
| lhld regIX | |
| mvi a, CHNPRM_SamPtr | |
| add l | |
| mov l, a | |
| adc h | |
| sub l | |
| mov h, a | |
| shld $+4 | |
| lhld 0 | |
| sphl | |
| pop d | |
| mvi h, 0 | |
| shld $+9 | |
| lhld regIX | |
| inx h | |
| mov a, m | |
| lxi h, 0 | |
| mov b, a | |
| add a | |
| add a | |
| mov l, a | |
| dad sp | |
| sphl | |
| mov a, b | |
| inr a | |
| cmp d | |
| jc CH_SMPS | |
| mov a, e | |
| CH_SMPS: | |
| lhld regIX | |
| inx h | |
| mov m, a | |
| pop b | |
| pop h | |
| shld $+18 | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| inx h\ inx h\ inx h\ inx h | |
| mov e, m | |
| inx h | |
| mov d, m | |
| lxi h, 0 | |
| dad d | |
| sta $+7\ mvi a, 01000000b\ ana b\ mvi a, 0 | |
| jz CH_NOAC | |
| xchg | |
| shld $+18 | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| inx h\ inx h\ inx h\ inx h | |
| mov m, e | |
| inx h | |
| mov m, d | |
| lxi h, 0 | |
| xchg | |
| CH_NOAC: | |
| xchg | |
| SetA1: | |
| lxi h, 0 | |
| lxi sp, NT_ | |
| dad sp | |
| sphl | |
| pop h | |
| dad d | |
| shld $+16 | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| inx h\ inx h | |
| mov e, m | |
| inx h | |
| mov d, m | |
| lxi h, 0 | |
| dad d | |
| CSP_: | |
| lxi sp, $3131 | |
| xthl | |
| xra a | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h\ inx h | |
| ora m | |
| pop h | |
| jz CH_AMP | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h\ inx h | |
| dcr m | |
| pop h | |
| jnz CH_AMP | |
| xchg | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_TnSlDl | |
| dad b | |
| mov a, m | |
| inx h | |
| mov e, m | |
| inx h | |
| mov d, m | |
| lxi b, CHNPRM_TSlCnt-CHNPRM_TSlStp-1 | |
| dad b | |
| mov m, a | |
| pop b | |
| pop h | |
| xchg | |
| mov a, h | |
| dad d | |
| xchg | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_CrTnSl | |
| dad b | |
| mov m, e | |
| inx h | |
| mov m, d | |
| lxi b, CHNPRM_Flags-CHNPRM_CrTnSl-1 | |
| dad b | |
| sta $+7 | |
| mov a, m | |
| ani 100b | |
| mvi a, 0 | |
| pop b | |
| pop h | |
| xchg | |
| jnz CH_AMP | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_TnDelt | |
| dad b | |
| mov e, m | |
| inx h | |
| mov d, m | |
| pop b | |
| pop h | |
| ana a | |
| jz CH_STPP | |
| xchg | |
| CH_STPP: | |
| mov a, l\ sbb e\ mov l, a | |
| mov a, h\ sbb d\ mov h, a | |
| jm CH_AMP | |
| push h | |
| push b | |
| lhld regIX | |
| lxi b, CHNPRM_SlToNt | |
| dad b | |
| mov a, m | |
| dcx h | |
| mov m, a | |
| xra a | |
| lxi b, CHNPRM_TSlCnt-CHNPRM_Note | |
| dad b | |
| mov m, a | |
| inx h | |
| mov m, a | |
| inx h | |
| mov m, a | |
| pop b | |
| pop h | |
| CH_AMP: | |
| push h | |
| lhld regIX | |
| inx h\ inx h | |
| mov a, m | |
| pop h | |
| sta $+7\ mvi a, 10000000b\ ana c\ mvi a, 0 | |
| jz CH_NOAM | |
| sta $+7\ mvi a, 01000000b\ ana c\ mvi a, 0 | |
| jz CH_AMIN | |
| cpi 15 | |
| jz CH_NOAM | |
| inr a | |
| jmp CH_SVAM | |
| CH_AMIN: | |
| cpi -15 | |
| jz CH_NOAM | |
| dcr a | |
| CH_SVAM: | |
| push h | |
| lhld regIX | |
| inx h\ inx h | |
| mov m, a | |
| pop h | |
| CH_NOAM: | |
| mov l, a | |
| mov a, b | |
| ani 15 | |
| add l | |
| jp CH_APOS | |
| xra a | |
| CH_APOS: | |
| cpi 16 | |
| jc CH_VOL | |
| mvi a, 15 | |
| CH_VOL: | |
| lhld regIX | |
| lxi d, CHNPRM_Volume | |
| dad d | |
| ora m | |
| mov l, a | |
| mvi h, 0 | |
| lxi d, VT_ | |
| dad d | |
| mov a, m | |
| CH_ENV: | |
| sta $+7\ mvi a, 00000001b\ ana c\ mvi a, 0 | |
| jnz CH_NOEN | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_Env_En | |
| dad d | |
| ora m | |
| pop d | |
| pop h | |
| CH_NOEN: | |
| sta Ampl | |
| sta $+7\ mvi a, 10000000b\ ana b\ mvi a, 0 | |
| mov a, c | |
| jz NO_ENSL | |
| ral | |
| ral | |
| rlc\ rar\ rar | |
| rlc\ rar\ rar | |
| rlc\ rar\ rar | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| add m | |
| pop h | |
| sta $+7\ mvi a, 00100000b\ ana b\ mvi a, 0 | |
| jz NO_ENAC | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| mov m, a | |
| pop h | |
| NO_ENAC: | |
| lxi h, AddToEn | |
| add m ;BUG IN PT3 - NEED WORD HERE. | |
| ;FIX IT IN NEXT VERSION? | |
| mov m, a | |
| jmp CH_MIX | |
| NO_ENSL: | |
| rar | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| add m | |
| pop h | |
| sta AddToNs | |
| sta $+7\ mvi a, 00100000b\ ana b\ mvi a, 0 | |
| jz CH_MIX | |
| push h | |
| lhld regIX | |
| inx h\ inx h\ inx h\ inx h | |
| mov m, a | |
| pop h | |
| CH_MIX: mov a, b | |
| rar | |
| ani $48 | |
| CH_EXIT: | |
| lxi h, AYREGS+AR_Mixer | |
| ora m | |
| rrc | |
| mov m, a | |
| pop h | |
| xra a | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_COnOff | |
| dad d | |
| ora m | |
| pop d | |
| pop h | |
| rz | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_COnOff | |
| dad d | |
| dcr m | |
| pop d | |
| pop h | |
| rnz | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_Flags | |
| dad d | |
| xra m | |
| mov m, a | |
| lxi d, CHNPRM_OnOffD-CHNPRM_Flags | |
| dad d | |
| rar | |
| mov a, m | |
| pop d | |
| pop h | |
| jc CH_ONDL | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_OffOnD | |
| dad d | |
| mov a, m | |
| pop d | |
| pop h | |
| CH_ONDL: | |
| push h | |
| push d | |
| lhld regIX | |
| lxi d, CHNPRM_COnOff | |
| dad d | |
| mov m, a | |
| pop d | |
| pop h | |
| ret | |
| PLAY: | |
| xra a | |
| sta AddToEn | |
| sta AYREGS+AR_Mixer | |
| dcr a | |
| sta AYREGS+AR_EnvTp | |
| lxi h, DelyCnt | |
| dcr m | |
| jnz PL2 | |
| lxi h, ChanA+CHNPRM_NtSkCn | |
| dcr m | |
| jnz PL1B | |
| AdInPtA: .equ $+1 | |
| lxi b, $0101 | |
| ldax b | |
| ana a | |
| jnz PL1A | |
| mov d, a | |
| sta Ns_Base | |
| lhld CrPsPtr | |
| inx h | |
| mov a, m | |
| inr a | |
| jnz PLNLP | |
| call CHECKLP | |
| LPosPtr: .equ $+1 | |
| lxi h, $2121 | |
| mov a, m | |
| inr a | |
| PLNLP: shld CrPsPtr | |
| dcr a | |
| add a | |
| mov e, a | |
| sta $+7\ mov a, d\ ral\ mov d, a\ mvi a, 0 | |
| PatsPtr: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| xchg\ lhld MODADDR \ xchg | |
| shld $+11 | |
| lxi h, 0 | |
| dad sp | |
| shld PSP_+1 | |
| lxi h, 0 | |
| sphl | |
| pop h | |
| dad d | |
| mov b, h | |
| mov c, l | |
| pop h | |
| dad d | |
| shld AdInPtB | |
| pop h | |
| dad d | |
| shld AdInPtC | |
| PSP_: | |
| lxi sp, $3131 | |
| PL1A: | |
| lxi h, ChanA+12 | |
| shld regIX | |
| call PTDECOD | |
| push h\ mov l, c\ mov h, b\ shld AdInPtA\ pop h | |
| PL1B: | |
| lxi h, ChanB+CHNPRM_NtSkCn | |
| dcr m | |
| jnz PL1C | |
| lxi h, ChanB+12 | |
| shld regIX | |
| AdInPtB: .equ $+1 | |
| lxi b, $0101 | |
| call PTDECOD | |
| push h\ mov l, c\ mov h, b\ shld AdInPtB\ pop h | |
| PL1C: | |
| lxi h, ChanC+CHNPRM_NtSkCn | |
| dcr m | |
| jnz PL1D | |
| lxi h, ChanC+12 | |
| shld regIX | |
| AdInPtC: .equ $+1 | |
| lxi b, $0101 | |
| call PTDECOD | |
| push h\ mov l, c\ mov h, b\ shld AdInPtC\ pop h | |
| Delay: .equ $+1 | |
| PL1D: | |
| mvi a, $3E | |
| sta DelyCnt | |
| PL2: | |
| lxi h, ChanA | |
| shld regIX | |
| lhld AYREGS+AR_TonA | |
| call CHREGS | |
| shld AYREGS+AR_TonA | |
| lda Ampl | |
| sta AYREGS+AR_AmplA | |
| lxi h, ChanB | |
| shld regIX | |
| lhld AYREGS+AR_TonB | |
| call CHREGS | |
| shld AYREGS+AR_TonB | |
| lda Ampl | |
| sta AYREGS+AR_AmplB | |
| lxi h, ChanC | |
| shld regIX | |
| lhld AYREGS+AR_TonC | |
| call CHREGS | |
| shld AYREGS+AR_TonC | |
| lhld Ns_Base_AddToNs | |
| mov a, h | |
| add l | |
| sta AYREGS+AR_Noise | |
| AddToEn: .equ $+1 | |
| mvi a, $3E | |
| mov e, a | |
| add a | |
| sbb a | |
| mov d, a | |
| lhld EnvBase | |
| dad d | |
| xchg\ lhld CurESld \ xchg | |
| dad d | |
| shld AYREGS+AR_Env | |
| xra a | |
| lxi h, CurEDel | |
| ora m | |
| jz ROUT_A0 | |
| dcr m | |
| jnz ROUT | |
| Env_Del: .equ $+1 | |
| mvi a, $3E | |
| mov m, a | |
| ESldAdd: .equ $+1 | |
| lxi h, $2121 | |
| dad d | |
| shld CurESld | |
| ROUT: | |
| xra a | |
| ROUT_A0: | |
| mvi c, 14h | |
| lxi h, AYREGS | |
| LOUT: | |
| out 15h | |
| mov b, a | |
| mov a, m | |
| inx h | |
| out 14h | |
| mov a, b | |
| inr a | |
| cpi 13 | |
| jnz LOUT | |
| out 15h | |
| mov a, m | |
| ana a | |
| rm | |
| out 14h | |
| RET | |
| NT_DATA: | |
| .db (T_NEW_0-T1_)*2 | |
| .db TCNEW_0-T_ | |
| .db (T_OLD_0-T1_)*2+1 | |
| .db TCOLD_0-T_ | |
| .db (T_NEW_1-T1_)*2+1 | |
| .db TCNEW_1-T_ | |
| .db (T_OLD_1-T1_)*2+1 | |
| .db TCOLD_1-T_ | |
| .db (T_NEW_2-T1_)*2 | |
| .db TCNEW_2-T_ | |
| .db (T_OLD_2-T1_)*2 | |
| .db TCOLD_2-T_ | |
| .db (T_NEW_3-T1_)*2 | |
| .db TCNEW_3-T_ | |
| .db (T_OLD_3-T1_)*2 | |
| .db TCOLD_3-T_ | |
| T_: | |
| TCOLD_0: .db $00+1,$04+1,$08+1,$0A+1,$0C+1,$0E+1,$12+1,$14+1 | |
| .db $18+1,$24+1,$3C+1,0 | |
| TCOLD_1: .db $5C+1,0 | |
| TCOLD_2: .db $30+1,$36+1,$4C+1,$52+1,$5E+1,$70+1,$82,$8C,$9C | |
| .db $9E,$A0,$A6,$A8,$AA,$AC,$AE,$AE,0 | |
| TCNEW_3: .db $56+1 | |
| TCOLD_3: .db $1E+1,$22+1,$24+1,$28+1,$2C+1,$2E+1,$32+1,$BE+1,0 | |
| TCNEW_0: .db $1C+1,$20+1,$22+1,$26+1,$2A+1,$2C+1,$30+1,$54+1 | |
| .db $BC+1,$BE+1,0 | |
| TCNEW_1: .equ TCOLD_1 | |
| TCNEW_2: .db $1A+1,$20+1,$24+1,$28+1,$2A+1,$3A+1,$4C+1,$5E+1 | |
| .db $BA+1,$BC+1,$BE+1,0 | |
| EMPTYSAMORN: .equ $-1 | |
| .db 1,0,$90 ;delete $90 if you don't need default sample | |
| ;first 12 values of tone tables (packed) | |
| T_PACK: .db $06EC*2/256,$06EC*2 | |
| .db $0755-$06EC | |
| .db $07C5-$0755 | |
| .db $083B-$07C5 | |
| .db $08B8-$083B | |
| .db $093D-$08B8 | |
| .db $09CA-$093D | |
| .db $0A5F-$09CA | |
| .db $0AFC-$0A5F | |
| .db $0BA4-$0AFC | |
| .db $0C55-$0BA4 | |
| .db $0D10-$0C55 | |
| .db $066D*2/256,$066D*2 | |
| .db $06CF-$066D | |
| .db $0737-$06CF | |
| .db $07A4-$0737 | |
| .db $0819-$07A4 | |
| .db $0894-$0819 | |
| .db $0917-$0894 | |
| .db $09A1-$0917 | |
| .db $0A33-$09A1 | |
| .db $0ACF-$0A33 | |
| .db $0B73-$0ACF | |
| .db $0C22-$0B73 | |
| .db $0CDA-$0C22 | |
| .db $0704*2/256,$0704*2 | |
| .db $076E-$0704 | |
| .db $07E0-$076E | |
| .db $0858-$07E0 | |
| .db $08D6-$0858 | |
| .db $095C-$08D6 | |
| .db $09EC-$095C | |
| .db $0A82-$09EC | |
| .db $0B22-$0A82 | |
| .db $0BCC-$0B22 | |
| .db $0C80-$0BCC | |
| .db $0D3E-$0C80 | |
| .db $07E0*2/256,$07E0*2 | |
| .db $0858-$07E0 | |
| .db $08E0-$0858 | |
| .db $0960-$08E0 | |
| .db $09F0-$0960 | |
| .db $0A88-$09F0 | |
| .db $0B28-$0A88 | |
| .db $0BD8-$0B28 | |
| .db $0C80-$0BD8 | |
| .db $0D60-$0C80 | |
| .db $0E10-$0D60 | |
| .db $0EF8-$0E10 | |
| ;vars from here can be stripped | |
| ;you can move VARS to any other address | |
| VARS: | |
| ;ChannelsVars | |
| ;struc CHNPRM | |
| ;reset group | |
| CHNPRM_PsInOr: .equ 0 ;RESB 1 | |
| CHNPRM_PsInSm: .equ 1 ;RESB 1 | |
| CHNPRM_CrAmSl: .equ 2 ;RESB 1 | |
| CHNPRM_CrNsSl: .equ 3 ;RESB 1 | |
| CHNPRM_CrEnSl: .equ 4 ;RESB 1 | |
| CHNPRM_TSlCnt: .equ 5 ;RESB 1 | |
| CHNPRM_CrTnSl: .equ 6 ;RESW 1 | |
| CHNPRM_TnAcc: .equ 8 ;RESW 1 | |
| CHNPRM_COnOff: .equ 10 ;RESB 1 | |
| ;reset group | |
| CHNPRM_OnOffD: .equ 11 ;RESB 1 | |
| ;IX for PTDECOD here (+12) | |
| CHNPRM_OffOnD: .equ 12 ;RESB 1 | |
| CHNPRM_OrnPtr: .equ 13 ;RESW 1 | |
| CHNPRM_SamPtr: .equ 15 ;RESW 1 | |
| CHNPRM_NNtSkp: .equ 17 ;RESB 1 | |
| CHNPRM_Note: .equ 18 ;RESB 1 | |
| CHNPRM_SlToNt: .equ 19 ;RESB 1 | |
| CHNPRM_Env_En: .equ 20 ;RESB 1 | |
| CHNPRM_Flags: .equ 21 ;RESB 1 | |
| ;Enabled - 0,SimpleGliss - 2 | |
| CHNPRM_TnSlDl: .equ 22 ;RESB 1 | |
| CHNPRM_TSlStp: .equ 23 ;RESW 1 | |
| CHNPRM_TnDelt: .equ 25 ;RESW 1 | |
| CHNPRM_NtSkCn: .equ 27 ;RESB 1 | |
| CHNPRM_Volume: .equ 28 ;RESB 1 | |
| CHNPRM_Size .equ 29 ;RESB 1 | |
| ;endstruc | |
| ChanA: .ds CHNPRM_Size | |
| ChanB: .ds CHNPRM_Size | |
| ChanC: .ds CHNPRM_Size | |
| ;struc AR | |
| AR_TonA: .equ 0 ;RESW 1 | |
| AR_TonB: .equ 2 ;RESW 1 | |
| AR_TonC: .equ 4 ;RESW 1 | |
| AR_Noise: .equ 6 ;RESB 1 | |
| AR_Mixer: .equ 7 ;RESB 1 | |
| AR_AmplA: .equ 8 ;RESB 1 | |
| AR_AmplB: .equ 9 ;RESB 1 | |
| AR_AmplC: .equ 10 ;RESB 1 | |
| AR_Env: .equ 11 ;RESW 1 | |
| AR_EnvTp: .equ 13 ;RESB 1 | |
| ;endstruc | |
| ;GlobalVars | |
| DelyCnt: .db 0 | |
| CurESld: .dw 0 | |
| CurEDel: .db 0 | |
| Ns_Base_AddToNs: | |
| Ns_Base: .db 0 | |
| AddToNs: .db 0 | |
| AYREGS: | |
| VT_: .ds 256 ;CreatedVolumeTableAddress | |
| EnvBase: .equ VT_+14 | |
| T1_: .equ VT_+16 ;Tone tables data depacked here | |
| T_OLD_1: .equ T1_ | |
| T_OLD_2: .equ T_OLD_1+24 | |
| T_OLD_3: .equ T_OLD_2+24 | |
| T_OLD_0: .equ T_OLD_3+2 | |
| T_NEW_0: .equ T_OLD_0 | |
| T_NEW_1: .equ T_OLD_1 | |
| T_NEW_2: .equ T_NEW_0+24 | |
| T_NEW_3: .equ T_OLD_3 | |
| NT_: .ds 192 ;CreatedNoteTableAddress | |
| regIX .dw 0 | |
| ;local var | |
| Ampl: .equ AYREGS+AR_AmplC | |
| VAR0END: .equ VT_+16 ;INIT zeroes from VARS to VAR0END-1 | |
| VARSEND: .equ $ | |
| MDLADDR: .equ $ ;Place your song here. | |
| ;Release 0 steps: | |
| ;11.Sep.2004 - Note tables creator | |
| ;12.Sep.2004 - Volume tables creator; INIT subroutine | |
| ;13.Sep.2004 - Play counters, position counters | |
| ;14.Sep.2004 - Patterns decoder subroutine | |
| ;15.Sep.2004 - Resting (no code) | |
| ;16.Sep.2004 - CHREGS subroutine; global debugging; 1st stable | |
| ;version was born | |
| ;17.Sep.2004 - Debugging and optimization. First release! | |
| ;Release 1 steps: | |
| ;20.Sep.2004 - local vars moved to code (selfmodified code | |
| ;smaller and faster) | |
| ;22.Sep.2004 - added mute sound entry at START+8; position | |
| ;pointer moved to START+11; added setup and status byte at | |
| ;START+10 noloop mode and loop passed flags added | |
| ;Release 2 steps: | |
| ;28.Sep.2004 - Optimization: code around CHREGS's volume and | |
| ;vibrato faster now; zeroing PD_RES through stack; Ton and Ampl | |
| ;moved from channel vars to global ones; first position selector | |
| ;removed from INIT; optimization for packers(Ivan Roshin method) | |
| ;Release 3 steps: | |
| ;2.Oct.2004 - optimization in INIT and PD_LOOP (thanks to Ivan | |
| ;Roshin) | |
| ;4.Oct.2004 - load delay from (hl) in INIT (2 bytes shorter) | |
| ;5.Oct.2004 - optimization in PD_LOOP (->PD_LP2) | |
| ;7.Oct.2004 - swaping some commands for better packing | |
| ;Release 4 steps: | |
| ;9.Oct.2004 - optimization around LD HL,SPCCOMS (thanks to Ivan | |
| ;Roshin); in PTDECOD swapped BC and DE to optimize C_PORTM; | |
| ;removed sam and orn len and loop channel vars; CHREGS totally | |
| ;optimized | |
| ;Release 5 steps: | |
| ;11.Oct.2004 - PD_OrSm and C_PORTM optimized; Ivan Roshin's | |
| ;volume tables creator algorithm (51 bytes shorter than mine) | |
| ;12.Oct.2004 - Ivan Roshin's note tables creator algorithm (74 | |
| ;bytes shorter than mine) | |
| ;Release 6 steps: | |
| ;14.Oct.2004 - loop and next position calculations moved to INIT | |
| ;15.Oct.2004 - AdInPt moved to code | |
| ;19.Oct.2004 - Env_Del moved to code | |
| ;20.Oct.2004 - Version PUSH and POP (1 byte shorter, thanks to | |
| ;Ivan Roshin) | |
| ;22.Oct.2004 - Env_En moved from Flags' bit to byte (shorter and | |
| ;faster code) | |
| ;25.Oct.2004 - SETENV optimized | |
| ;29.Oct.2004 - Optimized around AddToEn (SBC A,A, thanks to Ivan | |
| ;Roshin) | |
| ;3.Nov.2004 - Note tables data was compressed; with depacker it | |
| ;is 9 bytes shorter than uncompressed (thanks to Ivan Roshin) | |
| ;4.Nov.2004 - default sample and ornament both are fixed now | |
| ;and placed into code block (6 bytes shorter) | |
| ;7.Nov.2004 - LD A,(Ns_Base):LD L,A changed to LD HL,(Ns_Base) | |
| ;(thanks to Dima Bystrov) | |
| ;9.Nov.2004 - Ns_Base and AddToNs are merged to Ns_Base_AddToNs; | |
| ;LD A,255 changed to DEC A (at start of PLAY); added ROUT_A0 | |
| ;12.Nov.2004 - NtSkCn&Volume are merged (8 bytes smaller init); | |
| ;LD BC,T1_ changed to PUSH DE...POP BC in note table creator | |
| ;19.Dec.2004 - NT_DATA reorganized (6 bytes shorter, thanks to | |
| ;Ivan Roshin); C_PORTM and C_GLISS are merged via SET_STP (48 | |
| ;tacts slower, but 8 bytes smaller, thanks to Ivan Roshin) | |
| ;09.Jan.2005 - Adapted to MSX by Alfonso D.C. a.k.a. Dioniso | |
| ;Notes: | |
| ;Pro Tracker 3.4r can not be detected by header, so PT3.4r tone | |
| ;tables realy used only for modules of 3.3 and older versions. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment