User Tools

Site Tools


p3xtraplayer

PT3 extreme player with fadeout


Syntax is for ASL.

; ProTracker3 Extreme (P3X) player for ZX Spectrum
; Copyright (c) 2004, 2007 S.V.Bulba (http://bulba.untergrund.net)
; formatted for Pasmo by Gasman
; optimized by Cheveron
; improved (fadeout added) and reformated for AS by mborik/GembaBoys (c) 2016
 
 
		cpu	z80undoc
		relaxed	on
 
 
		org	$8000
 
demo		di
		ld	hl,songdata
		call	p3x_initv0
demoloop	ei
		halt
		call	p3x_play
		jr	demoloop
 
 
 ; bit.0 if you want to play without looping
; bit.1 if you play looped but fadeout after few seconds
; bit.7 is set each time when loop is passed
p3x_setup:	db	2	; 2 - fadeout after loop | 1 - loop forever
 
;------------------------------------------------------------------------------
 
p3x_init:	ld	hl,songdata
p3x_initv0:	ld	(modaddr+1),hl
		ld	(mdaddr2+1),hl
		push	hl
		ld	de,100
		add	hl,de
		dec	hl
		ld	a,(hl)
		ld	(NoteTableMode+1),a
		inc	hl
		ld	a,(hl)
		ld	(Delay+1),a
		push	hl
		pop	ix
		add	hl,de
		ld	(CrPsPtr+1),hl
		ld	e,(ix+2)
		add	hl,de
		inc	hl
		ld	(LPosPtr+1),hl
		pop	de
		ld	l,(ix+3)
		ld	h,(ix+4)
		add	hl,de
		ld	(PatsPtr+1),hl
		ld	hl,$a9
		add	hl,de
		ld	(OrnPtrs+1),hl
		ld	hl,$69
		add	hl,de
		ld	(SamPtrs+1),hl
		ld	hl,p3x_setup
		res	7,(hl)
 
; note table data depacker
		ld	de,T_PACK
		ld	bc,T1_+(2*49)-1
tp_0:		ld	a,(de)
		inc	de
		cp	15*2
		jr	nc,tp_1
		ld	h,a
		ld	a,(de)
		ld	l,a
		inc	de
		jr	tp_2
tp_1:		push	de
		ld	d,0
		ld	e,a
		add	hl,de
		add	hl,de
		pop	de
tp_2:		ld	a,h
		ld	(bc),a
		dec	bc
		ld	a,l
		ld	(bc),a
		dec	bc
		sub	$f0
		jr	nz,tp_0
		ld	hl,vars
		ld	(hl),a
		ld	de,vars+1
		ld	bc,VAR0END-vars-1
		ldir
		ld	hl,$f001
		ld	(ChanA+CHP_NtSkCn),hl
		ld	(ChanB+CHP_NtSkCn),hl
		ld	(ChanC+CHP_NtSkCn),hl
		ld	hl,emptysamorn
		ld	(AdInPtA+1),hl
		ld	(ChanA+CHP_OrnPtr),hl
		ld	(ChanB+CHP_OrnPtr),hl
		ld	(ChanC+CHP_OrnPtr),hl
 
		ld	(p3x_globalvol+1),a
		ld	(chkfadeout+1),a
		inc	a
		ld	(DelyCnt),a
 
NoteTableMode:	ld	a,$3a
		rla
		and	7
 
; NoteTableCreator (c) Ivan Roshin
; A - NoteTableNumber * 2 + VersionForNoteTable
;	xx1b - 3.xx..3.4r
;	xx0b - 3.4x..3.6x - VortexTracker II --- P3X is always PT3.6
 
		ld	hl,nt_data
		push	de
		ld	d,b
		add	a,a
		ld	e,a
		add	hl,de
		ld	e,(hl)
		inc	hl
		srl	e
		sbc	a,a
		and	$a7	;#00 (NOP) or #A7 (AND A)
		ld	(l3),a
		ex	de,hl
		pop	bc	;bc = T1_
		add	hl,bc
		ld	a,(de)
		add	a,T_#256
		ld	c,a
		adc	a,T_/256
		sub	c
		ld	b,a
		push	bc
		ld	de,NT_
		push	de
		ld	b,12
l1:		push	bc
		ld	c,(hl)
		inc	hl
		push	hl
		ld	b,(hl)
		push	de
		ex	de,hl
		ld	de,$17
		ld	ixu,8
l2:		srl	b
		rr	c
l3:		add	hl,de	; will be replaced by AND A or NOP apparently
		ld	a,c
		adc	a,d
		ld	(hl),a
		inc	hl
		ld	a,b
		adc	a,d
		ld	(hl),a
		add	hl,de
		dec	ixu
		jr	nz,l2
 
		pop	de
		inc	de
		inc	de
		pop	hl
		inc	hl
		pop	bc
		djnz	l1
		pop	hl
		pop	de
		ld	a,e
		cp	TCOLD_1#256
		jr	nz,corr_1
		ld	a,$fd
		ld	(NT_+$02e),a
corr_1:		ld	a,(de)
		and	a
		jr	z,tc_exit
		rra
		push	af
		add	a,a
		ld	c,a
		add	hl,bc
		pop	af
		jr	nc,corr_2
		dec	(hl)
		dec	(hl)
corr_2:		inc	(hl)
		and	a
		sbc	hl,bc
		inc	de
		jr	corr_1
tc_exit:
 
; VolTableCreator (c) Ivan Roshin
; A - VersionForVolumeTable
;	(0..4 - v3.xx .. v3.4x
;	(5..  - v3.5x .. v3.6x - VortexTracker II
 
		ld	hl,17
		ld	d,h
		ld	e,h
		ld	ix,VT_+16
		ld	c,16
p3x_initv2:	push	hl
		add	hl,de
		ex	de,hl
		sbc	hl,hl
p3x_initv1:	ld	a,l
		ld	a,l
		ld	a,h
		adc	a,0
		ld	(ix+0),a
		inc	ix
		add	hl,de
		inc	c
		ld	a,c
		and	15
		jr	nz,p3x_initv1
		pop	hl
		ld	a,e
		cp	$77
		jr	nz,m3
		inc	e
m3:		ld	a,c
		and	a
		jr	nz,p3x_initv2
		jp	rout_a0
 
; pattern decoder
PD_OrSm:	ld	(ix+8),0
		call	setorn
		ld	a,(bc)
		inc	bc
		rrca
pd_sam:		add	a,a
pd_sam_:	ld	e,a
		ld	d,0
SamPtrs:	ld	hl,$2121
		add	hl,de
		ld	e,(hl)
		inc	hl
		ld	d,(hl)
modaddr:	ld	hl,$2121
		add	hl,de
		ld	(ix+3),l
		ld	(ix+4),h
		jr	pd_loop
 
pd_vol:		rlca
		rlca
		rlca
		rlca
		ld	(ix+16),a
		jr	pd_lp2
 
pd_eoff:	ld	(ix+8),a
		ld	(ix-12),a
		jr	pd_lp2
 
pd_SorE:	dec	a
		jr	nz,pd_env
		ld	a,(bc)
		inc	bc
		ld	(ix+5),a
		jr	pd_lp2
 
pd_env:		call	setenv
		jr	pd_lp2
 
pd_orn:		call	setorn
		jr	pd_loop
 
pd_esam:	ld	(ix+8),a
		ld	(ix-12),a
		call	nz,setenv
		ld	a,(bc)
		inc	bc
		jr	pd_sam_
 
ptdecod:	ld	a,(ix+6)
		ld	(PrNote+1),a
		ld	l,(ix-6)
		ld	h,(ix-5)
		ld	(PrSlide+1),hl
pd_loop:	ld	de,$2010
pd_lp2:		ld	a,(bc)
		inc	bc
		add	a,e
		jr	c,PD_OrSm
		add	a,d
		jr	z,pd_fin
		jr	c,pd_sam
		add	a,e
		jr	z,pd_rel
		jr	c,pd_vol
		add	a,e
		jr	z,pd_eoff
		jr	c,pd_SorE
		add	a,96
		jr	c,pd_note
		add	a,e
		jr	c,pd_orn
		add	a,d
		jr	c,pd_nois
		add	a,e
		jr	c,pd_esam
		add	a,a
		ld	e,a
		ld	hl,spccoms-$20e0
		add	hl,de
		ld	e,(hl)
		inc	hl
		ld	d,(hl)
		push	de
		jr	pd_loop
 
pd_nois:	ld	(ns_base),a
		jr	pd_lp2
 
pd_rel:		res	0,(ix+9)
		jr	pd_res
 
pd_note:	ld	(ix+6),a
		set	0,(ix+9)
		xor	a
pd_res:		ld	(pdsp_+1),sp
		ld	sp,ix
		ld	h,a
		ld	l,a
		push	hl
		push	hl
		push	hl
		push	hl
		push	hl
		push	hl
pdsp_:		ld	sp,$3131
pd_fin:		ld	a,(ix+5)
		ld	(ix+15),a
		ret
 
c_portm:	res	2,(ix+9)
		ld	a,(bc)
		inc	bc
		inc	bc
		inc	bc
		ld	(ix+10),a
		ld	(ix-7),a
		ld	de,NT_
		ld	a,(ix+6)
		ld	(ix+7),a
		add	a,a
		ld	l,a
		ld	h,0
		add	hl,de
		ld	a,(hl)
		inc	hl
		ld	h,(hl)
		ld	l,a
		push	hl
PrNote:		ld	a,$3e
		ld	(ix+6),a
		add	a,a
		ld	l,a
		ld	h,0
		add	hl,de
		ld	e,(hl)
		inc	hl
		ld	d,(hl)
		pop	hl
		sbc	hl,de
		ld	(ix+13),l
		ld	(ix+14),h
		ld	e,(ix-6)
		ld	d,(ix-5)
PrSlide:	ld	de,$1111
		ld	(ix-6),e
		ld	(ix-5),d
		ld	a,(bc)
		inc	bc
		ex	af,af'
		ld	a,(bc)
		inc	bc
		and	a
		jr	z,nosig
		ex	de,hl
nosig:		sbc	hl,de
		jp	p,set_stp
		cpl
		ex	af,af'
		neg
		ex	af,af'
set_stp:	ld	(ix+12),a
		ex	af,af'
		ld	(ix+11),a
		ld	(ix-2),0
		ret
 
c_gliss:	set	2,(ix+9)
		ld	a,(bc)
		inc	bc
		ld	(ix+10),a
		and	a
		jr	nz,gl36
		xor	a
gl36:		ld	(ix-7),a
		ld	a,(bc)
		inc	bc
		ex	af,af'
		ld	a,(bc)
		inc	bc
		jr	set_stp
 
c_smpos:	ld	a,(bc)
		inc	bc
		ld	(ix-11),a
		ret
 
c_orpos:	ld	a,(bc)
		inc	bc
		ld	(ix-12),a
		ret
 
c_vibrt:	ld	a,(bc)
		inc	bc
		ld	(ix-1),a
		ld	(ix-2),a
		ld	a,(bc)
		inc	bc
		ld	(ix+0),a
		xor	a
		ld	(ix-7),a
		ld	(ix-6),a
		ld	(ix-5),a
		ret
 
c_engls:	ld	a,(bc)
		inc	bc
		ld	(env_del+1),a
		ld	(CurEDel),a
		ld	a,(bc)
		inc	bc
		ld	l,a
		ld	a,(bc)
		inc	bc
		ld	h,a
		ld	(ESldAdd+1),hl
		ret
 
c_delay:	ld	a,(bc)
		inc	bc
		ld	(Delay+1),a
		ld	(DelyCnt),a	; bugfix by Lee_dC
		ret
 
setenv:		ld	(ix+8),e
		ld	(AYREGS+AR_EnvTp),a
		ld	a,(bc)
		inc	bc
		ld	h,a
		ld	a,(bc)
		inc	bc
		ld	l,a
		ld	(EnvBase),hl
		xor	a
		ld	(ix-12),a
		ld	(CurEDel),a
		ld	h,a
		ld	l,a
		ld	(CurESld),hl
c_nop:		ret
 
setorn:		add	a,a
		ld	e,a
		ld	d,0
		ld	(ix-12),d
OrnPtrs:	ld	hl,$2121
		add	hl,de
		ld	e,(hl)
		inc	hl
		ld	d,(hl)
mdaddr2:	ld	hl,$2121
		add	hl,de
		ld	(ix+1),l
		ld	(ix+2),h
		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:		xor	a
		ld	(Ampl),a
		bit	0,(ix+21)
		push	hl
		jp	z,ch_exit
		ld	(csp_+1),sp
		ld	l,(ix+13)
		ld	h,(ix+14)
		ld	sp,hl
		pop	de
		ld	h,a
		ld	a,(ix+0)
		ld	l,a
		add	hl,sp
		inc	a
		cp	d
		jr	c,ch_orps
		ld	a,e
ch_orps:	ld	(ix+0),a
		ld	a,(ix+18)
		add	a,(hl)
		jp	p,ch_ntp
		xor	a
ch_ntp:		cp	96
		jr	c,ch_nok
		ld	a,95
ch_nok:		add	a,a
		ex	af,af'
		ld	l,(ix+15)
		ld	h,(ix+16)
		ld	sp,hl
		pop	de
		ld	h,0
		ld	a,(ix+1)
		ld	b,a
		add	a,a
		add	a,a
		ld	l,a
		add	hl,sp
		ld	sp,hl
		ld	a,b
		inc	a
		cp	d
		jr	c,ch_smps
		ld	a,e
ch_smps:	ld	(ix+1),a
		pop	bc
		pop	hl
		ld	e,(ix+8)
		ld	d,(ix+9)
		add	hl,de
		bit	6,b
		jr	z,ch_noac
		ld	(ix+8),l
		ld	(ix+9),h
ch_noac:	ex	de,hl
		ex	af,af'
		ld	l,a
		ld	h,0
		ld	sp,NT_
		add	hl,sp
		ld	sp,hl
		pop	hl
		add	hl,de
		ld	e,(ix+6)
		ld	d,(ix+7)
		add	hl,de
csp_:		ld	sp,$3131
		ex	(sp),hl
		xor	a
		or	(ix+5)
		jr	z,ch_amp
		dec	(ix+5)
		jr	nz,ch_amp
		ld	a,(ix+22)
		ld	(ix+5),a
		ld	l,(ix+23)
		ld	h,(ix+24)
		ld	a,h
		add	hl,de
		ld	(ix+6),l
		ld	(ix+7),h
		bit	2,(ix+21)
		jr	nz,ch_amp
		ld	e,(ix+25)
		ld	d,(ix+26)
		and	a
		jr	z,ch_stpp
		ex	de,hl
ch_stpp:	sbc	hl,de
		jp	m,ch_amp
		ld	a,(ix+19)
		ld	(ix+18),a
		xor	a
		ld	(ix+5),a
		ld	(ix+6),a
		ld	(ix+7),a
ch_amp:		ld	a,(ix+2)
		bit	7,c
		jr	z,ch_noam
		bit	6,c
		jr	z,ch_amin
		cp	15
		jr	z,ch_noam
		inc	a
		jr	ch_svam
ch_amin:	cp	-15
		jr	z,ch_noam
		dec	a
ch_svam:	ld	(ix+2),a
ch_noam:	ld	l,a
		ld	a,b
		and	15
		add	a,l
		jp	p,ch_apos
		xor	a
ch_apos:	cp	16
		jr	c,ch_vol
		ld	a,15
ch_vol:		or	(ix+28)
		ld	l,a
		ld	h,0
		ld	de,VT_
		add	hl,de
		ld	e,(hl)
p3x_globalvol:	ld	a,0		; GLOBAL ATTENUATION
		cp	6		; ak je hodnota vacsia nez toto cislo
		jr	c,ch_globvol	; prestan prehravat obalky!
		set	0,c
ch_globvol:	sub	e
		jr	c,ch_env
		xor	a
ch_env:		neg
		bit	0,c
		jr	nz,ch_noen
		or	(ix+20)
ch_noen:	ld	(Ampl),a
		bit	7,b
		ld	a,c
		jr	z,no_ensl
		rla
		rla
		sra	a
		sra	a
		sra	a
		add	a,(ix+4)
		bit	5,b
		jr	z,no_enac
		ld	(ix+4),a
no_enac:	ld	hl,AddToEn+1
		add	a,(hl)
		ld	(hl),a
		jr	ch_mix
 
no_ensl:	rra
		add	a,(ix+3)
		ld	(AddToNs),a
		bit	5,b
		jr	z,ch_mix
		ld	(ix+3),a
ch_mix:		ld	a,b
		rra
		and	$48
ch_exit:	ld	hl,AYREGS+AR_Mixer
		or	(hl)
		rrca
		ld	(hl),a
		pop	hl
		xor	a
		or	(ix+10)
		ret	z
		dec	(ix+10)
		ret	nz
		xor	(ix+21)
		ld	(ix+21),a
		rra
		ld	a,(ix+11)
		jr	c,ch_ondl
		ld	a,(ix+12)
ch_ondl:	ld	(ix+10),a
		ret
 
 
p3x_play:	xor	a
		ld	(AddToEn+1),a
		ld	(AYREGS+AR_Mixer),a
		dec	a
		ld	(AYREGS+AR_EnvTp),a
		ld	hl,DelyCnt
		dec	(hl)
		jp	nz,pl2
		call	chkfadeout
		ld	hl,ChanA+CHP_NtSkCn
		dec	(hl)
		jr	nz,pl1b
AdInPtA:	ld	bc,$0101
		ld	a,(bc)
		and	a
		jr	nz,pl1a
		ld	d,a
		ld	(ns_base),a
CrPsPtr:	ld	hl,$2121
		inc	hl
		ld	a,(hl)
		inc	a
		jr	nz,plnlp
		call	checklp
LPosPtr:	ld	hl,$2121
		ld	a,(hl)
		inc	a
plnlp:		ld	(CrPsPtr+1),hl
		dec	a
		add	a,a
		ld	e,a
		rl	d
PatsPtr:	ld	hl,$2121
		add	hl,de
		ld	de,(modaddr+1)
		ld	(psp_+1),sp
		ld	sp,hl
		pop	hl
		add	hl,de
		ld	b,h
		ld	c,l
		pop	hl
		add	hl,de
		ld	(AdInPtB+1),hl
		pop	hl
		add	hl,de
		ld	(AdInPtC+1),hl
psp_:		ld	sp,$3131
pl1a:		ld	ix,ChanA+12
		call	ptdecod
		ld	(AdInPtA+1),bc
pl1b:		ld	hl,ChanB+CHP_NtSkCn
		dec	(hl)
		jr	nz,pl1c
		ld	ix,ChanB+12
AdInPtB:	ld	bc,$0101
		call	ptdecod
		ld	(AdInPtB+1),bc
pl1c:		ld	hl,ChanC+CHP_NtSkCn
		dec	(hl)
		jr	nz,pl1d
		ld	ix,ChanC+12
AdInPtC:	ld	bc,$0101
		call	ptdecod
		ld	(AdInPtC+1),bc
pl1d:
Delay:		ld	a,$3e
		ld	(DelyCnt),a
pl2:		ld	ix,ChanA
		ld	hl,(AYREGS+AR_TonA)
		call	chregs
		ld	(AYREGS+AR_TonA),hl
		ld	a,(Ampl)
		ld	(AYREGS+AR_AmplA),a
		ld	ix,ChanB
		ld	hl,(AYREGS+AR_TonB)
		call	chregs
		ld	(AYREGS+AR_TonB),hl
		ld	a,(Ampl)
		ld	(AYREGS+AR_AmplB),a
		ld	ix,ChanC
		ld	hl,(AYREGS+AR_TonC)
		call	chregs
		ld	(AYREGS+AR_TonC),hl
		ld	hl,(ns_base_AddToNs)
		ld	a,h
		add	a,l
		ld	(AYREGS+AR_Noise),a
 
AddToEn:	ld	a,$3e
		ld	e,a
		add	a,a
		sbc	a,a
		ld	d,a
		ld	hl,(EnvBase)
		add	hl,de
		ld	de,(CurESld)
		add	hl,de
		ld	(AYREGS+AR_Env),hl
 
		xor	a
		ld	hl,CurEDel
		or	(hl)
		jr	z,rout_a0
		dec	(hl)
		jr	nz,rout
env_del:	ld	a,$3e
		ld	(hl),a
ESldAdd:	ld	hl,$2121
		add	hl,de
		ld	(CurESld),hl
rout:		xor	a
rout_a0:	ld	de,$ffbf
		ld	bc,$fffd
		ld	hl,AYREGS
lout:		out	(c),a
		ld	b,e
		outi
		ld	b,d
		inc	a
		cp	13
		jr	nz,lout
		out	(c),a
		ld	a,(hl)
		and	a
		ret	m
		ld	b,e
		out	(c),a
		ret
 
checklp:	ld	hl,p3x_setup
		bit	0,(hl)
		jr	z,chkfadeout0
noloop:		set	7,(hl)
		pop	hl
		ld	hl,DelyCnt
		inc	(hl)
		ld	hl,ChanA+CHP_NtSkCn
		inc	(hl)
p3x_mute:	xor	a
		ld	h,a
		ld	l,a
		ld	(AYREGS+AR_AmplA),a
		ld	(AYREGS+AR_AmplB),hl
		jr	rout_a0
 
chkfadeout0:	bit	1,(hl)
		jr	nz,enablefade
		set	7,(hl)
		ret
 
;zavolat forcefade s 1 v akumulatore pre dohranie modulu fadeoutom
enablefade:	ld	a,48
forcefade:	ld	hl,chkfadeout+1
		inc	(hl)
		ld	hl,(CrPsPtr+1)
		ld	(resetfadeout+1),hl
		ld	(resetfadeout1+1),bc
		ld	(conutfadeout+1),a
		ld	(divfadeout+1),a
 
chkfadeout:	ld	a,0
		or	a
		ret	z
conutfadeout:	ld	a,$3e
		dec	a
		ld	(conutfadeout+1),a
		ret	nz
		ld	a,(p3x_globalvol+1)
		inc	a
		cp	16
		jr	z,resetfadeout
		ld	(p3x_globalvol+1),a
divfadeout:	ld	a,$3e
		srl	a
		ld	l,a
		srl	l
		add	a,l
		jr	nz,divfadeout1
		inc	a
divfadeout1:	ld	(conutfadeout+1),a
		ld	(divfadeout+1),a
		ret
 
resetfadeout:	ld	hl,$2121
		ld	(CrPsPtr+1),hl
resetfadeout1:	ld	hl,$2121
		ld	(AdInPtA+1),hl
		xor	a
		ld	(ChanA+CHP_NtSkCn),a
		ld	(chkfadeout+1),a
		ld	hl,p3x_setup
		dec	(hl)
		jr	noloop
 
;------------------------------------------------------------------------------
; note table data
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
		db	$12+1,$14+1,$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
		db	$9c,$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)#256,($06ec*2)#256
		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)#256
		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)#256
		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)#256
		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
 
;------------------------------------------------------------------------------
; channel data offsets
 
CHP_PsInOr	equ	0
CHP_PsInSm	equ	1
CHP_CrAmSl	equ	2
CHP_CrNsSl	equ	3
CHP_CrEnSl	equ	4
CHP_TSlCnt	equ	5
CHP_CrTnSl	equ	6
CHP_TnAcc	equ	8
CHP_COnOff	equ	10
CHP_OnOffD	equ	11
CHP_OffOnD	equ	12	; IX for PTDECOD here (+12)
CHP_OrnPtr	equ	13
CHP_SamPtr	equ	15
CHP_NNtSkp	equ	17
CHP_Note	equ	18
CHP_SlToNt	equ	19
CHP_Env_En	equ	20
CHP_Flags	equ	21
CHP_TnSlDl	equ	22	; Enabled - 0, SimpleGliss - 2
CHP_TSlStp	equ	23
CHP_TnDelt	equ	25
CHP_NtSkCn	equ	27
CHP_Volume	equ	28
 
AR_TonA		equ	0
AR_TonB		equ	2
AR_TonC		equ	4
AR_Noise	equ	6
AR_Mixer	equ	7
AR_AmplA	equ	8
AR_AmplB	equ	9
AR_AmplC	equ	10
AR_Env		equ	11
AR_EnvTp	equ	13
AR_Size		equ	14
 
 
;------------------------------------------------------------------------------
; variables are 541 bytes long
vars
ChanA		ds	29
ChanB		ds	29
ChanC		ds	29
 
 
; GlobalVars
DelyCnt		db	0
CurESld		dw	0
CurEDel		db	0
ns_base_AddToNs
ns_base		db	0
AddToNs		db	0
 
 
AYREGS		equ	$
Ampl		equ	AYREGS+AR_AmplC
 
VT_		ds	256		; Volume Table
NT_		ds	192		; Note Table
 
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
 
VAR0END		equ	T1_		; init zeroes from VARS to VAR0END-1
 
 
 
		org	$C000
 
;------------------------------------------------------------------------------
; music in ProTracker 3.6 (Vortex Tracker II) format
songdata	binclude "music.pt3"

Navigation: general . math . graphic . sound . system . other . back to start

p3xtraplayer.txt · Last modified: 2017/02/16 13:30 by darkbyte