Pues a ver si puedo.
Tienes razón. En el código SFX.ASM faltan los datos para alimentarlo. Vienen indicados en los comentarios al inicio pero es confuso... y tienes razón... no hay documentación!
Los pasos serían los siguientes para añadir SFX con el código del site:
1.- Crea tus SFX .... obvio!
2.- Create un índice de etiquetas de los SFX y las ordenas en la tabla de SFX:
3.- Utiliza este código modificado
Código: Seleccionar todo
;FUNCIONES DEL PLAYER DE FX
;___________________________
;INICIA FX
;REPRODUCE_EFECTO
;FIN_SONIDO
;VARIBLES Y FUNCIONES EXTERNAS
;_____________________________
;TABLA_EFECTOS DW TABLA DE DIRECCIONES DE LOS EFECTOS
;INTERR DB
;EXT_WORD FUNCION DE EXTRACCION DE LA DIRECCION DEL FX POR Nº DE ORDEN
; *** AJUSTAR CANAL DE EFECTOS ANTES DE INICIAR EL REPRODUCTOR / CANAL C POR DEFECTO
; *** LLAMAR EN CADA INTERRUPCION
; VARIABLES
;___________
;INTERR: DB 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
;EFECTOS
N_EFECTO EQU $E650 ;DB : NUMERO DE SONIDO
PUNTERO_EFECTO EQU $E651 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE;REPRODUCE EFECTOS
CANAL_EFECTOS EQU $E653 ;DB : 1:CANAL A - 2:CANAL B - OTRO:CANAL C
INICIA_EFECTO: LD A,B
LD HL,TABLA_EFECTOS
CALL EXT_WORD
LD [PUNTERO_EFECTO],HL
LD HL,INTERR
SET 3,[HL]
RET
REPRODUCE_EFECTO:
LD HL,INTERR
BIT 3,[HL] ;ESTA ACTIVADO EL EFECTO?
RET Z
LD HL,[PUNTERO_EFECTO]
LD A,[HL]
CP $FF
JP Z,FIN_EFECTO
LD B,A ;FRECUENCIA FINO
INC HL
LD A,[HL]
RRCA
RRCA
RRCA
RRCA
AND 00001111B
LD C,A ; FRECUENCIA GRAVE
;LD A,10111000B ; ELIMINA RUIDO
;LD [PSG_REG_SEC+7],A
LD A,[HL]
DEC A ;DEC A PARA BAJR VOLUMEN!!
;DEC A
AND 00001111B
LD D,A ;VOLUMEN
INC HL ;INCREMENTA Y GUARDA EL PUNTERO
LD [PUNTERO_EFECTO],HL
LD IX,PSG_REG_SEC
LD A,[CANAL_EFECTOS] ;SELECCION DE CANAL
CP 1
JR Z,RS_CANALA
CP 2
JR Z,RS_CANALB
RS_CANALC: LD [IX+4],B
LD [IX+5],C
LD [IX+10],D
RET
RS_CANALA: LD [IX+0],B
LD [IX+1],C
LD [IX+8],D
RET
RS_CANALB: LD [IX+2],B
LD [IX+3],C
LD [IX+9],D
RET
FIN_EFECTO: LD HL,INTERR
RES 3,[HL] ;DESACTIVA EFECTO
RET
TABLA_EFECTOS: DW
4.- Selecciona el canalde SFX introduciendo 1,2 o 3 en la variable CANAL_EFECTOS. El que menos te pise la música.
5.- Y lo mas importante de todo, hay que reproducirlo en cada interrupción. Asi que puedes integrarlo con el player de música de esta manera, en la rutina de inicio de player:
Código: Seleccionar todo
INICIO: CALL ROUT
CALL PLAY
LD HL,PSG_REG
LD DE,PSG_REG_SEC
LD BC,14
LDIR
CALL REPRODUCE_SONIDO
CALL REPRODUCE_EFECTO ; <---- asegurate que estás llamando al SFX player.
....
Las variables fijas las puedes recolocar donde quieras. Buscate unos bytes libres detras de las variables del player y ponlas allí con su etiqueta correspondiente:
Código: Seleccionar todo
;EFECTOS DE SONIDO
N_SONIDO: DB 0 ;DB : NUMERO DE SONIDO
PUNTERO_SONIDO: DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
;EFECTOS
N_EFECTO: DB 0 ;DB : NUMERO DE SONIDO
PUNTERO_EFECTO: DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
CANAL_EFECTOS: DB 0 ; CANAL DE SFX
La variable INTERR es común a los dos reproductores al igual que la rutina EXT_WORD.
Creo que no hay mas. De todas maneras informa si no te funciona por cualquier cosa.