mirror of https://github.com/zxdos/zxuno.git
747 lines
23 KiB
NASM
747 lines
23 KiB
NASM
; SPECTRUM PSG proPLAYER V 0.2 - WYZ 07.09.2011
|
|
; VER AL FINAL PARA DATOS PROPIOS:
|
|
|
|
; ISR LLAMA A:
|
|
inicio: ld (vari+2), ix
|
|
call rout
|
|
ld hl, psg_reg
|
|
ld de, psg_reg_sec
|
|
ld bc, 14
|
|
ldir
|
|
ld hl, interr
|
|
bit 2, (hl) ;esta activado el efecto?
|
|
jr z, finop2
|
|
ld hl,(PUNTERO_SONIDO)
|
|
ld a,(hl)
|
|
cp $ff
|
|
jr z, finson
|
|
ld (psg_reg_sec+2),a
|
|
inc hl
|
|
ld a,(hl)
|
|
rrca
|
|
rrca
|
|
rrca
|
|
rrca
|
|
and 00001111b
|
|
ld (psg_reg_sec+3),a
|
|
ld a,(hl)
|
|
and 00001111b
|
|
ld (psg_reg_sec+9),a
|
|
inc hl
|
|
ld a,(hl)
|
|
and a
|
|
jr z, noruid
|
|
ld (psg_reg_sec+6),a
|
|
ld a, 10101000b
|
|
jr siruid
|
|
noruid ld a, 10111000b
|
|
siruid ld (psg_reg_sec+7),a
|
|
inc hl
|
|
ld (PUNTERO_SONIDO),hl
|
|
jr finopla
|
|
finson ld hl, interr
|
|
res 2, (hl)
|
|
ld a, 10111000b
|
|
ld (psg_reg+7), a
|
|
|
|
;play __________________________________________________
|
|
finopla ld hl, interr ;play bit 1 on?
|
|
finop2 bit 1, (hl)
|
|
ret z
|
|
;tempo
|
|
inc l
|
|
; ld hl, ttempo ;contador tempo
|
|
inc (hl)
|
|
ld a, (tempo)
|
|
sub (hl)
|
|
jr nz, pautas
|
|
ld (hl), a
|
|
|
|
;INTERPRETA
|
|
ld iy, psg_reg
|
|
ld ix, puntero_a
|
|
ld bc, psg_reg+8
|
|
call localiza_nota
|
|
ld iy, psg_reg+2
|
|
ld ix, puntero_b
|
|
ld bc, psg_reg+9
|
|
call localiza_nota
|
|
ld iy, psg_reg+4
|
|
ld ix, puntero_c
|
|
ld bc, psg_reg+10
|
|
call localiza_nota
|
|
ld ix, puntero_p ;el canal de efectos enmascara otro canal
|
|
call localiza_efecto
|
|
|
|
;pautas
|
|
pautas: ld iy, psg_reg+0
|
|
ld ix, puntero_p_a
|
|
ld hl, psg_reg+8
|
|
call pauta ;pauta canal a
|
|
ld iy, psg_reg+2
|
|
ld ix, puntero_p_b
|
|
ld hl, psg_reg+9
|
|
call pauta ;pauta canal b
|
|
ld iy, psg_reg+4
|
|
ld ix, puntero_p_c
|
|
ld hl, psg_reg+10 ;pauta canal c
|
|
|
|
; PAUTA DE LOS 3 CANALES
|
|
; IN:(IX):PUNTERO DE LA PAUTA
|
|
; (HL):REGISTRO DE VOLUMEN
|
|
; (IY):REGISTROS DE FRECUENCIA
|
|
|
|
; FORMATO PAUTA
|
|
; 7 6 5 4 3-0 3-0
|
|
; BYTE 1 (LOOP|OCT-1|OCT+1|ORNMT|VOL) - BYTE 2 ( | | | |PITCH/NOTA)
|
|
|
|
pauta: bit 4, (hl) ;si la envolvente esta activada no actua pauta
|
|
ret nz
|
|
ld a, (iy+0)
|
|
ld b, (iy+1)
|
|
or b
|
|
ret z
|
|
push hl
|
|
pcajp4: ld l, (ix+0)
|
|
ld h, (ix+1)
|
|
ld a, (hl)
|
|
bit 7, a ;loop / el resto de bits no afectan
|
|
jr z, pcajp0
|
|
and 00011111B ;máximo loop pauta (0,32)x2!!!-> para ornamentos
|
|
rlca ;x2
|
|
ld d, 0
|
|
ld e, a
|
|
sbc hl, de
|
|
ld a, (hl)
|
|
pcajp0: bit 6, a ;octava -1
|
|
jr z, pcajp1
|
|
ld e, (iy+0)
|
|
ld d, (iy+1)
|
|
and a
|
|
rrc d
|
|
rr e
|
|
ld (iy+0), e
|
|
ld (iy+1), d
|
|
jr pcajp2
|
|
pcajp1: bit 5, a ;octava +1
|
|
jr z, pcajp2
|
|
ld e, (iy+0)
|
|
ld d, (iy+1)
|
|
and a
|
|
rlc e
|
|
rl d
|
|
ld (iy+0), e
|
|
ld (iy+1), d
|
|
pcajp2: ld a, (hl)
|
|
bit 4, a
|
|
jr nz, pcajp6 ;ornamentos seleccionados
|
|
inc hl ;funcion pitch de frecuencia
|
|
push hl
|
|
ld e, a
|
|
ld a, (hl) ;pitch de frecuencia
|
|
ld l, a
|
|
and a
|
|
ld a, e
|
|
jr z, ornmj1
|
|
ld a, (iy+0) ;si la frecuencia es 0 no hay pitch
|
|
add a, (iy+1)
|
|
and a
|
|
ld a, e
|
|
jr z, ornmj1
|
|
bit 7, l
|
|
jr z, ornneg
|
|
ld h, $ff
|
|
jr pcajp3
|
|
ornneg: ld h, 0
|
|
pcajp3: ld e, (iy+0)
|
|
ld d, (iy+1)
|
|
adc hl, de
|
|
ld (iy+0), l
|
|
ld (iy+1), h
|
|
jr ornmj1
|
|
pcajp6: inc hl ;funcion ornamentos
|
|
push hl
|
|
push af
|
|
ld a, (ix+24) ;recupera registro de nota en el canal
|
|
ld e, (hl)
|
|
adc a, e ;+- nota
|
|
call tabla_notas
|
|
pop af
|
|
ornmj1: pop hl
|
|
inc hl
|
|
ld (ix+0), l
|
|
ld (ix+1), h
|
|
pcajp5: pop hl
|
|
and 00001111B ;volumen final
|
|
ld (hl), a
|
|
ret
|
|
|
|
;carga una cancion
|
|
;in:(a)=nº de cancion
|
|
cancio: ld hl, interr ;carga cancion
|
|
set 1, (hl) ;reproduce cancion
|
|
ld hl, song_1
|
|
ld a, (hl)
|
|
ld (tempo), a
|
|
; xor a
|
|
; ld (ttempo), a
|
|
|
|
;header byte 1
|
|
;(-|-|-|-|-|-|-|loop)
|
|
|
|
inc hl ;loop 1=on/0=off?
|
|
ld a, (hl)
|
|
bit 0, a
|
|
jr z, nptjp0
|
|
push hl
|
|
ld hl, interr
|
|
set 4, (hl)
|
|
pop hl
|
|
nptjp0: inc hl ;2 bytes reservados
|
|
inc hl
|
|
inc hl
|
|
|
|
;busca y guarda inicio de los canales en el modulo mus
|
|
|
|
ld (puntero_p_deca), hl
|
|
ld e, $3f ;codigo intrumento 0
|
|
ld b, $ff ;el modulo debe tener una longitud menor de $ff00 ... o_o!
|
|
bgicm1: xor a ;busca el byte 0
|
|
cpir
|
|
dec hl
|
|
dec hl
|
|
ld a, e ;es el instrumento 0??
|
|
cp (hl)
|
|
inc hl
|
|
inc hl
|
|
jr z, bgicm1
|
|
ld (puntero_p_decb), hl
|
|
bgicm2: xor a ;busca el byte 0
|
|
cpir
|
|
dec hl
|
|
dec hl
|
|
ld a, e
|
|
cp (hl) ;es el instrumento 0??
|
|
inc hl
|
|
inc hl
|
|
jr z, bgicm2
|
|
ld (puntero_p_decc), hl
|
|
bgicm3: xor a ;busca el byte 0
|
|
cpir
|
|
dec hl
|
|
dec hl
|
|
ld a, e
|
|
cp (hl) ;es el instrumento 0??
|
|
inc hl
|
|
inc hl
|
|
jr z, bgicm3
|
|
ld (puntero_p_decp), hl
|
|
|
|
;lee datos de las notas
|
|
;(|)(|||||) longitud\nota
|
|
; init_decoder:
|
|
ld de, (canal_a)
|
|
ld (puntero_a), de
|
|
ld hl, (puntero_p_deca)
|
|
call decode_canal ;canal a
|
|
ld (puntero_deca), hl
|
|
ld de, (canal_b)
|
|
ld (puntero_b), de
|
|
ld hl, (puntero_p_decb)
|
|
call decode_canal ;canal b
|
|
ld (puntero_decb), hl
|
|
ld de, (canal_c)
|
|
ld (puntero_c), de
|
|
ld hl, (puntero_p_decc)
|
|
call decode_canal ;canal c
|
|
ld (puntero_decc), hl
|
|
ld de, (canal_p)
|
|
ld (puntero_p), de
|
|
ld hl, (puntero_p_decp)
|
|
call decode_canal ;canal p
|
|
ld (puntero_decp), hl
|
|
ret
|
|
|
|
|
|
;DECODIFICA NOTAS DE UN CANAL
|
|
;IN (DE)=DIRECCION DESTINO
|
|
;NOTA=0 FIN CANAL
|
|
;NOTA=1 SILENCIO
|
|
;NOTA=2 PUNTILLO
|
|
;NOTA=3 COMANDO I
|
|
|
|
decode_canal:
|
|
LD A,(HL)
|
|
AND A ;FIN DEL CANAL?
|
|
JR Z,FIN_DEC_CANAL
|
|
CALL GETLEN
|
|
|
|
CP 00000001B ;ES SILENCIO?
|
|
JR NZ,NO_SILENCIO
|
|
SET 6,A
|
|
JR NO_MODIFICA
|
|
|
|
NO_SILENCIO:
|
|
CP 00111110B ;ES PUNTILLO?
|
|
JR NZ,NO_PUNTILLO
|
|
OR A
|
|
RRC B
|
|
XOR A
|
|
JR NO_MODIFICA
|
|
|
|
NO_PUNTILLO:
|
|
CP 00111111B ;ES COMANDO?
|
|
JR NZ,NO_MODIFICA
|
|
BIT 0,B ;COMADO=INSTRUMENTO?
|
|
JR Z,NO_INSTRUMENTO
|
|
LD A,11000001B ;CODIGO DE INSTRUMENTO
|
|
LD (DE),A
|
|
INC HL
|
|
INC DE
|
|
LD A,(HL) ;Nº DE INSTRUMENTO
|
|
LD (DE),A
|
|
INC DE
|
|
INC HL
|
|
JR decode_canal
|
|
|
|
NO_INSTRUMENTO:
|
|
BIT 2,B
|
|
JR Z,NO_ENVOLVENTE
|
|
LD A,11000100B ;CODIGO ENVOLVENTE
|
|
LD (DE),A
|
|
INC DE
|
|
INC HL
|
|
LD A,(HL)
|
|
LD (DE),A
|
|
INC DE
|
|
INC HL
|
|
JR decode_canal
|
|
|
|
NO_ENVOLVENTE:
|
|
BIT 1,B
|
|
JR Z,NO_MODIFICA
|
|
LD A,11000010B ;CODIGO EFECTO
|
|
LD (DE),A
|
|
INC HL
|
|
INC DE
|
|
LD A,(HL)
|
|
CALL GETLEN
|
|
|
|
NO_MODIFICA:
|
|
LD (DE),A
|
|
INC DE
|
|
XOR A
|
|
DJNZ NO_MODIFICA
|
|
SET 7,A
|
|
SET 0,A
|
|
LD (DE),A
|
|
INC DE
|
|
INC HL
|
|
RET ;** JR DECODE_CANAL
|
|
|
|
FIN_DEC_CANAL:
|
|
SET 7,A
|
|
LD (DE),A
|
|
INC DE
|
|
RET
|
|
|
|
GETLEN: LD B,A
|
|
AND 00111111B
|
|
PUSH AF
|
|
LD A,B
|
|
AND 11000000B
|
|
RLCA
|
|
RLCA
|
|
INC A
|
|
LD B,A
|
|
LD A,10000000B
|
|
DCBC0: RLCA
|
|
DJNZ DCBC0
|
|
LD B,A
|
|
POP AF
|
|
RET
|
|
|
|
;LOCALIZA NOTA CANAL A
|
|
;IN (puntero_a)
|
|
|
|
localiza_nota:
|
|
LD L,(IX) ;HL=(PUNTERO_A_C_B)
|
|
LD H,(IX+1)
|
|
LD A,(HL)
|
|
AND 11000000B ;COMANDO?
|
|
CP 11000000B
|
|
JR NZ,LNJP0
|
|
|
|
;BIT(0)=INSTRUMENTO
|
|
|
|
COMANDOS: LD A,(HL)
|
|
BIT 0,A ;INSTRUMENTO
|
|
JR Z,COM_EFECTO
|
|
|
|
INC HL
|
|
LD A,(HL) ;Nº DE PAUTA
|
|
INC HL
|
|
LD (IX),L
|
|
LD (IX+1),H
|
|
LD HL,TABLA_PAUTAS
|
|
CALL ext_word
|
|
LD (IX+PUNTERO_P_A0-puntero_a),L
|
|
LD (IX+PUNTERO_P_A0-puntero_a+1),H
|
|
LD (IX+puntero_p_a-puntero_a),L
|
|
LD (IX+puntero_p_a-puntero_a+1),H
|
|
LD L,C
|
|
LD H,B
|
|
RES 4,(HL) ;APAGA EFECTO ENVOLVENTE
|
|
XOR A
|
|
LD (psg_reg_sec+13),A
|
|
LD (psg_reg+13),A
|
|
JR localiza_nota
|
|
|
|
COM_EFECTO: BIT 1,A ;EFECTO DE SONIDO
|
|
JR Z,COM_ENVOLVENTE
|
|
|
|
INC HL
|
|
LD A,(HL)
|
|
INC HL
|
|
LD (IX),L
|
|
LD (IX+1),H
|
|
;INICIA EL SONIDO Nº (A)
|
|
INICIA_SONIDO:
|
|
LD HL,TABLA_SONIDOS
|
|
CALL ext_word
|
|
LD (PUNTERO_SONIDO),HL
|
|
LD HL,interr
|
|
SET 2,(HL)
|
|
RET
|
|
|
|
COM_ENVOLVENTE:
|
|
|
|
BIT 2,A
|
|
RET Z ;IGNORA - ERROR
|
|
|
|
INC HL
|
|
LD A,(HL) ;CARGA CODIGO DE ENVOLVENTE
|
|
LD (ENVOLVENTE),A
|
|
INC HL
|
|
LD (IX),L
|
|
LD (IX+1),H
|
|
LD L,C
|
|
LD H,B
|
|
LD (HL),00010000B ;ENCIENDE EFECTO ENVOLVENTE
|
|
JR localiza_nota
|
|
|
|
LNJP0: LD A,(HL)
|
|
INC HL
|
|
BIT 7,A
|
|
JR Z,NO_FIN_CANAL_A ;
|
|
BIT 0,A
|
|
JR Z,FIN_CANAL_A
|
|
|
|
FIN_NOTA_A: LD E,(IX+canal_a-puntero_a)
|
|
LD D,(IX+canal_a-puntero_a+1) ;PUNTERO BUFFER AL INICIO
|
|
LD (IX),E
|
|
LD (IX+1),D
|
|
LD L,(IX+puntero_deca-puntero_a) ;CARGA PUNTERO DECODER
|
|
LD H,(IX+puntero_deca-puntero_a+1)
|
|
PUSH BC
|
|
CALL decode_canal ;DECODIFICA CANAL
|
|
POP BC
|
|
LD (IX+puntero_deca-puntero_a),L ;GUARDA PUNTERO DECODER
|
|
LD (IX+puntero_deca-puntero_a+1),H
|
|
JP localiza_nota
|
|
|
|
FIN_CANAL_A:
|
|
LD HL,interr ;LOOP?
|
|
BIT 4,(HL)
|
|
JR NZ,FCA_CONT
|
|
poff: xor a
|
|
ld (interr), a
|
|
ld hl, psg_reg
|
|
ld de, psg_reg+1
|
|
ld bc, 14*2-1
|
|
ld (hl), a
|
|
ldir
|
|
rout: ld de, $ffc0
|
|
ld bc, $fffe
|
|
ld hl, psg_reg_sec+13
|
|
xor a
|
|
cpd
|
|
jr nz, qout
|
|
sout: ld a, 12
|
|
lout: out (c), a
|
|
ld b, e
|
|
outd
|
|
ld b, d
|
|
dec a
|
|
jp p, lout
|
|
ret
|
|
qout: ld a, 13
|
|
out (c), a
|
|
inc l
|
|
ld b, e
|
|
outd
|
|
xor a
|
|
ld (psg_reg_sec+13), a
|
|
ld (psg_reg+13), a
|
|
jr sout
|
|
|
|
|
|
FCA_CONT: LD L,(IX+puntero_p_deca-puntero_a) ;CARGA PUNTERO INICIAL DECODER
|
|
LD H,(IX+puntero_p_deca-puntero_a+1)
|
|
LD (IX+puntero_deca-puntero_a),L
|
|
LD (IX+puntero_deca-puntero_a+1),H
|
|
JR FIN_NOTA_A
|
|
|
|
NO_FIN_CANAL_A:
|
|
LD (IX),L ;(PUNTERO_A_B_C)=HL GUARDA PUNTERO
|
|
LD (IX+1),H
|
|
AND A ;NO REPRODUCE NOTA SI NOTA=0
|
|
JR Z,FIN_RUTINA
|
|
BIT 6,A ;SILENCIO?
|
|
JR Z,NO_SILENCIO_A
|
|
LD A,(BC)
|
|
AND 00010000B
|
|
JR NZ,SILENCIO_ENVOLVENTE
|
|
XOR A
|
|
LD (BC),A ;RESET VOLUMEN DEL CORRESPODIENTE CHIP
|
|
LD (IY+0),A
|
|
LD (IY+1),A
|
|
RET
|
|
|
|
SILENCIO_ENVOLVENTE:
|
|
LD A,$FF
|
|
LD (psg_reg+11),A
|
|
LD (psg_reg+12),A
|
|
XOR A
|
|
LD (psg_reg+13),A
|
|
LD (IY+0),A
|
|
LD (IY+1),A
|
|
RET
|
|
|
|
NO_SILENCIO_A:
|
|
LD (IX+REG_NOTA_A-puntero_a),A ;REGISTRO DE LA NOTA DEL CANAL
|
|
CALL NOTA ;REPRODUCE NOTA
|
|
LD L,(IX+PUNTERO_P_A0-puntero_a) ;HL=(PUNTERO_P_A0) RESETEA PAUTA
|
|
LD H,(IX+PUNTERO_P_A0-puntero_a+1)
|
|
LD (IX+puntero_p_a-puntero_a),L ;(PUNTERO_P_A)=HL
|
|
LD (IX+puntero_p_a-puntero_a+1),H
|
|
FIN_RUTINA:
|
|
RET
|
|
|
|
;LOCALIZA EFECTO
|
|
;IN HL=(PUNTERO_P)
|
|
|
|
localiza_efecto:
|
|
LD L,(IX+0) ;HL=(PUNTERO_P)
|
|
LD H,(IX+1)
|
|
LD A,(HL)
|
|
CP 11000010B
|
|
JR NZ,LEJP0
|
|
|
|
INC HL
|
|
LD A,(HL)
|
|
INC HL
|
|
LD (IX+00),L
|
|
LD (IX+01),H
|
|
CALL INICIA_SONIDO
|
|
RET
|
|
|
|
LEJP0: INC HL
|
|
BIT 7,A
|
|
JR Z,NO_FIN_CANAL_P ;
|
|
BIT 0,A
|
|
JR Z,FIN_CANAL_P
|
|
|
|
FIN_NOTA_P:
|
|
LD DE,(canal_p)
|
|
LD (IX+0),E
|
|
LD (IX+1),D
|
|
LD HL,(puntero_decp) ;CARGA PUNTERO DECODER
|
|
PUSH BC
|
|
CALL decode_canal ;DECODIFICA CANAL
|
|
POP BC
|
|
LD (puntero_decp),HL ;GUARDA PUNTERO DECODER
|
|
JP localiza_efecto
|
|
|
|
FIN_CANAL_P:
|
|
LD HL,(puntero_p_decp) ;CARGA PUNTERO INICIAL DECODER
|
|
LD (puntero_decp),HL
|
|
JR FIN_NOTA_P
|
|
|
|
NO_FIN_CANAL_P:
|
|
LD (IX+0),L ;(PUNTERO_A_B_C)=HL GUARDA PUNTERO
|
|
LD (IX+1),H
|
|
RET
|
|
|
|
;NOTA : REPRODUCE UNA NOTA
|
|
;IN (A)=CODIGO DE LA NOTA
|
|
; (IY)=REGISTROS DE FRECUENCIA
|
|
|
|
|
|
NOTA: LD L,C
|
|
LD H,B
|
|
BIT 4,(HL)
|
|
LD B,A
|
|
JR NZ,ENVOLVENTES
|
|
LD A,B
|
|
tabla_notas:
|
|
LD HL,DATOS_NOTAS ;BUSCA FRECUENCIA
|
|
CALL ext_word
|
|
LD (IY+0),L
|
|
LD (IY+1),H
|
|
RET
|
|
|
|
;IN (A)=CODIGO DE LA ENVOLVENTE
|
|
; (IY)=REGISTRO DE FRECUENCIA
|
|
|
|
ENVOLVENTES:
|
|
LD HL,DATOS_NOTAS ;BUSCA FRECUENCIA
|
|
CALL ext_word
|
|
|
|
LD A,(ENVOLVENTE) ;FRECUENCIA DEL CANAL ON/OFF
|
|
LOCALIZA_ENV:
|
|
RRA
|
|
JR FRECUENCIA_OFF
|
|
LD (IY+0),L
|
|
LD (IY+1),H
|
|
JR CONT_ENV
|
|
|
|
FRECUENCIA_OFF:
|
|
LD HL,$0000
|
|
LD (IY+0),L
|
|
LD (IY+1),H
|
|
|
|
;CALCULO DEL RATIO (OCTAVA ARRIBA)
|
|
|
|
CONT_ENV: PUSH AF
|
|
PUSH BC
|
|
AND 00000011B
|
|
LD B,A
|
|
INC B
|
|
XOR A
|
|
OCTBC01: ADD A,12 ;INCREMENTA OCTAVAS
|
|
DJNZ OCTBC01
|
|
POP BC ;RECUPERA CODIGO DE LA NOTA
|
|
ADD A,B ;EN REGISTRO A CODIGO NOTA
|
|
|
|
LD HL,DATOS_NOTAS ;BUSCA FRECUENCIA
|
|
CALL ext_word
|
|
|
|
LD A,L
|
|
LD (psg_reg+11),A
|
|
LD A,H
|
|
AND 00000011B
|
|
LD (psg_reg+12),A
|
|
POP AF ;SELECCION FORMA DE ENVOLVENTE
|
|
|
|
RRA
|
|
AND 00000110B ;$08,$0A,$0C,$0E
|
|
ADD A,8
|
|
LD (psg_reg+13),A
|
|
|
|
RET
|
|
|
|
;EXTRAE UN WORD DE UNA TABLA
|
|
;IN:(HL)=DIRECCION TABLA
|
|
; (A)= POSICION
|
|
;OUT(HL)=WORD
|
|
|
|
ext_word: LD D,0
|
|
RLCA
|
|
LD E,A
|
|
ADD HL,DE
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
EX DE,HL
|
|
RET
|
|
|
|
|
|
; VARIABLES__________________________
|
|
|
|
|
|
interr: defb 00 ;INTERRUPTORES 1=ON 0=OFF
|
|
;BIT 0=CARGA CANCION ON/OFF
|
|
;BIT 1=PLAYER ON/OFF
|
|
;BIT 2=SONIDOS ON/OFF
|
|
;BIT 3=EFECTOS ON/OFF
|
|
ttempo: defb 00 ;DB CONTADOR TEMPO
|
|
tempo: defb 00 ;DB TEMPO
|
|
puntero_a: defw 00 ;DW PUNTERO DEL CANAL A
|
|
puntero_b: defw 00 ;DW PUNTERO DEL CANAL B
|
|
puntero_c: defw 00 ;DW PUNTERO DEL CANAL C
|
|
|
|
canal_a: defw buffers_canales ;DW DIRECION DE INICIO DE LA MUSICA A
|
|
canal_b: defw buffers_canales+$30 ;DW DIRECION DE INICIO DE LA MUSICA B
|
|
canal_c: defw buffers_canales+$60 ;DW DIRECION DE INICIO DE LA MUSICA C
|
|
|
|
puntero_p_a: defw 00 ;DW PUNTERO PAUTA CANAL A
|
|
puntero_p_b: defw 00 ;DW PUNTERO PAUTA CANAL B
|
|
puntero_p_c: defw 00 ;DW PUNTERO PAUTA CANAL C
|
|
|
|
PUNTERO_P_A0: defw 00 ;DW INI PUNTERO PAUTA CANAL A
|
|
PUNTERO_P_B0: defw 00 ;DW INI PUNTERO PAUTA CANAL B
|
|
PUNTERO_P_C0: defw 00 ;DW INI PUNTERO PAUTA CANAL C
|
|
|
|
|
|
puntero_p_deca: defw 00 ;DW PUNTERO DE INICIO DEL DECODER CANAL A
|
|
puntero_p_decb: defw 00 ;DW PUNTERO DE INICIO DEL DECODER CANAL B
|
|
puntero_p_decc: defw 00 ;DW PUNTERO DE INICIO DEL DECODER CANAL C
|
|
|
|
puntero_deca: defw 00 ;DW PUNTERO DECODER CANAL A
|
|
puntero_decb: defw 00 ;DW PUNTERO DECODER CANAL B
|
|
puntero_decc: defw 00 ;DW PUNTERO DECODER CANAL C
|
|
|
|
REG_NOTA_A: defb 00 ;DB REGISTRO DE LA NOTA EN EL CANAL A
|
|
defb 00 ;VACIO
|
|
REG_NOTA_B: defb 00 ;DB REGISTRO DE LA NOTA EN EL CANAL B
|
|
defb 00 ;VACIO
|
|
REG_NOTA_C: defb 00 ;DB REGISTRO DE LA NOTA EN EL CANAL C
|
|
defb 00 ;VACIO
|
|
|
|
;CANAL DE EFECTOS - ENMASCARA OTRO CANAL
|
|
|
|
puntero_p: defw 00 ;DW PUNTERO DEL CANAL EFECTOS
|
|
canal_p: defw buffers_canales+$90 ;DW DIRECION DE INICIO DE LOS EFECTOS
|
|
puntero_p_decp: defw 00 ;DW PUNTERO DE INICIO DEL DECODER CANAL P
|
|
puntero_decp: defw 00 ;DW PUNTERO DECODER CANAL P
|
|
|
|
psg_reg: defs 14 ;DB (11) BUFFER DE REGISTROS DEL PSG
|
|
psg_reg_sec: defs 14 ;DB (11) BUFFER SECUNDARIO DE REGISTROS DEL PSG
|
|
|
|
|
|
|
|
;ENVOLVENTE_A EQU $D033 ;DB
|
|
;ENVOLVENTE_B EQU $D034 ;DB
|
|
;ENVOLVENTE_C EQU $D035 ;DB
|
|
|
|
|
|
;EFECTOS DE SONIDO
|
|
|
|
N_SONIDO: defb 0 ;DB : NUMERO DE SONIDO
|
|
PUNTERO_SONIDO: defw 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
|
|
|
|
;EFECTOS
|
|
|
|
N_EFECTO: defb 0 ;DB : NUMERO DE SONIDO
|
|
PUNTERO_EFECTO: defw 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
|
|
CANAL_EFECTOS: defb 1 ; CANAL DE SFX
|
|
ENVOLVENTE: defb 0 ;DB : FORMA DE LA ENVOLVENTE
|
|
;BIT 0 : FRECUENCIA CANAL ON/OFF
|
|
;BIT 1-2 : RATIO
|
|
;BIT 3-3 : FORMA
|
|
|
|
;BUFFER_DEC: defb $00
|
|
|
|
;************************* mucha atencion!!!!
|
|
; aqui se decodifica la cancion hay que dejar suficiente espacio libre.
|
|
;*************************
|
|
|
|
;; INCLUIR LOS DATOS DE LA MUSICA (PATTERNS/EFFECTS)
|
|
|
|
include song.mus.asm
|
|
song_1 incbin song1.mus
|
|
|
|
;; NADA A PARTIR DE AQUI!!!
|
|
buffers_canales:
|