; SPECTRUM PSG PLAYER V 3.7 - WYZ 2006 ; ENSAMBLAR CON AsMSX 1.1 ; CARACTERISTICAS ; 5 OCTAVAS: O[2-6]=60 NOTAS ; 4 LONGITUDES DE NOTA: L[0-3]+PUNTILLO ; PUNTILLO ; COMANDOS: T:TEMPO ; I:INSTRUMENTO ; S:REPRODUCTOR DE EFECTOS CANAL C ; LOS DATOS QUE HAY QUE VARIAR : ; * Nº DE CANCION. ; * TABLA DE CANCIONES ; POR HACER ; - ELEGIR CANAL DE EFECTOS ORG $C000 PLAYER: DI ; MUSICA DATOS INICIALES LD A,0 ;* CANCION Nº 0 CALL CARGA_CANCION EI LOOP: HALT CALL INICIO JR LOOP ;___________________________________________________________ DB "PSG PLAYER BY WYZ'06" ;___________________________________________________________ ;___________________________________________________________ INICIO: CALL PLAY CALL REPRODUCE_SONIDO CALL REPRODUCE_EFECTO_A CALL REPRODUCE_EFECTO_B CALL REPRODUCE_EFECTO_C CALL ROUT RET ;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 SILENCIAPLAYER: LD HL,PSG_REG LD DE,PSG_REG+1 LD BC,12 LD [HL],0 LDIR LD A,10111111b LD [PSG_REG+7],A CALL ROUT LD HL,INTERR RES 1,[HL] RET ;CARGA UNA CANCION ;IN:[A]=Nº DE CANCION CARGA_CANCION: PUSH AF LD A,10111000b LD [PSG_REG+7],A POP AF LD HL,INTERR ;CARGA CANCION SET 1,[HL] ;REPRODUCE CANCION LD HL,SONG LD [HL],A ;Nº A XOR A LD [TTEMPO],A ;DECODIFICAR ;IN-> INTERR 0 ON ; SONG ;CARGA CANCION SI/NO DECODE_SONG: LD A,[SONG] ;LEE CABECERA DE LA CANCION ;BYTE 0=TEMPO LD HL,TABLA_SONG CALL EXT_WORD LD A,[HL] LD [TEMPO],A ;Nº DE PAUTA DEL CANAL A,B,C LD IX,PUNTERO_P_A CALL SET_PAUTA LD IX,PUNTERO_P_B CALL SET_PAUTA LD IX,PUNTERO_P_C CALL SET_PAUTA ;LEE DATOS DE LAS NOTAS ;[|][|||||] LONGITUD\NOTA LD DE,[CANAL_A] LD [PUNTERO_A],DE CALL DECODE_CANAL ;CANAL A LD [CANAL_B],DE LD [PUNTERO_B],DE CALL DECODE_CANAL ;CANAL B LD [CANAL_C],DE LD [PUNTERO_C],DE CALL DECODE_CANAL ;CANAL C LD [CANAL_P],DE LD [PUNTERO_P],DE CALL DECODE_CANAL ;CANAL P RET ;INICIA PAUTA PARA UN CANAL ;IN [A]: Nº DE PAUTA ; [IX]: PUNTERO PAUTA SET_PAUTA: INC HL LD A,[HL] PUSH HL LD HL,TABLA_PAUTAS CALL EXT_WORD LD [IX+0],L LD [IX+1],H LD [IX+6],L LD [IX+7],H POP 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: INC HL 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 JR DECODE_CANAL NO_INSTRUMENTO: BIT 2,B JR Z,NO_ENVOLVENTE LD A,11000100B ;CODIGO ENVOLVENTE LD [DE],A INC DE 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 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 ;PLAY __________________________________________________ PLAY: LD HL,INTERR ;PLAY BIT 1 ON? BIT 1,[HL] RET Z ;TEMPO LD HL,TTEMPO ;CONTADOR TEMPO INC [HL] LD A,[TEMPO] CP [HL] JR NZ,PAUTAS LD [HL],0 ;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 CALL PAUTA ;PAUTA CANAL C RET ;REPRODUCE EFECTOS DE SONIDO REPRODUCE_SONIDO: LD HL,INTERR BIT 2,[HL] ;ESTA ACTIVADO EL EFECTO? RET Z LD HL,[PUNTERO_SONIDO] LD A,[HL] CP $FF JR Z,FIN_SONIDO LD [PSG_REG+4],A INC HL LD A,[HL] RRCA RRCA RRCA RRCA AND 00001111B LD [PSG_REG+5],A LD A,[HL] AND 00001111B LD [PSG_REG+10],A INC HL LD A,[HL] AND A JR Z,NO_RUIDO LD [PSG_REG+6],A ; XXCBAXXX LD A,10011000B JR SI_RUIDO NO_RUIDO: LD A,10111000B SI_RUIDO: LD [PSG_REG+7],A INC HL LD [PUNTERO_SONIDO],HL RET FIN_SONIDO: LD HL,INTERR RES 2,[HL] FIN_NOPLAYER: XOR A LD [PSG_REG+4],A LD [PSG_REG+5],A LD A,10111000B LD [PSG_REG+7],A RET ;VUELCA BUFFER DE SONIDO AL PSG ROUT: ; LD A,[PSG_REG+0] ; XOR 1 ; LD [PSG_REG+0],A XOR A ROUT_A0: LD DE,$FFBF LD BC,$FFFD LD HL,PSG_REG 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 Z LD B,E OUT [C],A XOR A LD [PSG_REG+13],A RET ;LOCALIZA NOTA CANAL A ;IN [PUNTERO_A] LOCALIZA_NOTA: LD L,[IX+0] ;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+00],L LD [IX+01],H LD HL,TABLA_PAUTAS CALL EXT_WORD LD [IX+18],L LD [IX+19],H LD [IX+12],L LD [IX+13],H LD L,C LD H,B RES 4,[HL] ;APAGA EFECTO ENVOLVENTE ********** TEMPÒRAL XOR 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+00],L LD [IX+01],H CALL INICIA_SONIDO RET COM_ENVOLVENTE: BIT 2,A RET Z ;IGNORA - ERROR INC HL LD [IX+00],L LD [IX+01],H LD L,C LD H,B SET 4,[HL] ;ENCIEN EFECTO ENVOLVENTE ********** TEMPÒRAL JR LOCALIZA_NOTA LNJP0: LD A,[HL] INC HL BIT 7,A JR Z,NO_FIN_CANAL_A LD L,[IX+6] ;HL=[CANAL_A_B_C] REINICIA CANAL LD H,[IX+7] LD [IX+00H],L LD [IX+01H],H JR LOCALIZA_NOTA NO_FIN_CANAL_A: LD [IX+0],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 XOR A LD [BC],A LD [PSG_REG+13],A ;ENVOLVENTE OFF CALL NOTA RET NO_SILENCIO_A: CALL NOTA ;REPRODUCE NOTA LD L,[IX+18] ; HL=[PUNTERO_P_A0] RESETEA PAUTA LD H,[IX+19] LD [IX+12],L ;[PUNTERO_P_A]=HL LD [IX+13],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 LD L,[IX+2] ;HL=[CANAL_P] REINICIA CANAL LD H,[IX+3] LD [IX+00H],L LD [IX+01H],H JR LOCALIZA_EFECTO NO_FIN_CANAL_P: LD [IX+0],L ;[PUNTERO_A_B_C]=HL GUARDA PUNTERO LD [IX+1],H RET ; PAUTA DE LOS 3 CANALES ; IN:[IX]:PUNTERO DE LA PAUTA ; [HL]:REGISTRO DE VOLUMEN ; [IY]:REGISTROS DE FRECUENCIA PAUTA: BIT 4,[HL] ;SI LA ENVOLVENTE ESTA ACTIVADA NO ACTUA PAUTA RET NZ PUSH HL LD L,[IX+0] LD H,[IX+1] LD A,[HL] BIT 7,A ;LOOP JR Z,PCAJP0 AND 00001111B ;LOOP PAUTA [0,15] 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] RR 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] RL E RL D LD [IY+0],E LD [IY+1],D PCAJP2: INC HL LD [IX+0],L LD [IX+1],H POP HL AND 00001111B LD [HL],A 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] JR NZ,EVOLVENTES LD B,A LD HL,DATOS_NOTAS RLCA ;X2 LD D,0 LD E,A ADD HL,DE LD A,[HL] LD [IY+0],A INC HL LD A,[HL] LD [IY+1],A RET ;IN [A]=CODIGO DE LA ENVOLVENTE ; [IY]=REGISTRO DE FRECUENCIA EVOLVENTES: LD HL,DATOS_ENV LD E,A LD D,0 ADD HL,DE LD A,[HL] LD [PSG_REG+11],A LD A,$0C LD [PSG_REG+13],A XOR A LD [IY+0],A LD [IY+1],A LD [PSG_REG+12],A RET ;SOUND C,A ;SOUND: PUSH AF ; LD A,C ; OUT [$A0],A ; POP AF ; OUT [$A1],A ; RET ;LEE REGISTRO PSG ;IN [A]=REGISTRO ;OUT [A]=VALOR ;IN_SOUND: OUT [$A0],A ; IN A,[$A2] ; RET ;EXTRAE UN WORD DE UNA TABLA ;IN:[HL]=DIRECCION TABLA ; [A]= POSICION ;OUT[HL]=WORD EXT_WORD: LD D,0 SLA A ;*2 LD E,A ADD HL,DE LD E,[HL] INC HL LD D,[HL] EX DE,HL RET ; ************************************************************************************************************************* ;INICIA EL SONIDO Nº [B] EN EL CANAL [C] INICIA_EFECTO: ;LD A,10111000b ;LD [PSG_REG+7],A LD A,C CP 0 JP Z,INICIA_EFECTO_A CP 1 JP Z,INICIA_EFECTO_B CP 2 JP Z,INICIA_EFECTO_C RET ;________________________________________________________ ;REPRODUCE_EFECTO: ; CALL REPRODUCE_EFECTO_A ; CALL REPRODUCE_EFECTO_B ; CALL REPRODUCE_EFECTO_C ; CALL ROUT ; RET ;________________________________________________________ INICIA_EFECTO_A:LD A,B LD HL,TABLA_EFECTOS CALL EXT_WORD LD [PUNTERO_EFECTO_A],HL LD HL,INTERR SET 3,[HL] RET ;REPRODUCE EFECTOS CANAL A REPRODUCE_EFECTO_A: LD HL,INTERR BIT 3,[HL] ;ESTA ACTIVADO EL EFECTO? RET Z LD HL,[PUNTERO_EFECTO_A] LD A,[HL] CP $FF JR Z,FIN_EFECTO_A LD [PSG_REG+0],A INC HL LD A,[HL] RRCA RRCA RRCA RRCA AND 00001111B LD [PSG_REG+1],A LD A,[HL] AND 00001111B LD [PSG_REG+8],A INC HL LD [PUNTERO_EFECTO_A],HL RET FIN_EFECTO_A: LD HL,INTERR RES 3,[HL] XOR A LD [PSG_REG+0],A LD [PSG_REG+1],A LD [PSG_REG+8],A RET ;________________________________________________________ INICIA_EFECTO_B: LD A,B LD HL,TABLA_EFECTOS CALL EXT_WORD LD [PUNTERO_EFECTO_B],HL LD HL,INTERR SET 4,[HL] RET ;REPRODUCE EFECTOS CANAL B REPRODUCE_EFECTO_B: LD HL,INTERR BIT 4,[HL] ;ESTA ACTIVADO EL EFECTO? RET Z LD HL,[PUNTERO_EFECTO_B] LD A,[HL] CP $FF JR Z,FIN_EFECTO_B LD [PSG_REG+2],A INC HL LD A,[HL] RRCA RRCA RRCA RRCA AND 00001111B LD [PSG_REG+3],A LD A,[HL] AND 00001111B LD [PSG_REG+9],A INC HL LD [PUNTERO_EFECTO_B],HL RET FIN_EFECTO_B: LD HL,INTERR RES 4,[HL] XOR A LD [PSG_REG+2],A LD [PSG_REG+3],A LD [PSG_REG+9],A RET ;________________________________________________________ INICIA_EFECTO_C: LD A,B LD HL,TABLA_EFECTOS CALL EXT_WORD LD [PUNTERO_EFECTO_C],HL LD HL,INTERR SET 5,[HL] RET ;REPRODUCE EFECTOS CANAL C REPRODUCE_EFECTO_C: LD HL,INTERR BIT 5,[HL] ;ESTA ACTIVADO EL EFECTO? RET Z LD HL,[PUNTERO_EFECTO_C] LD A,[HL] CP $FF JR Z,FIN_EFECTO_C LD [PSG_REG+4],A INC HL LD A,[HL] RRCA RRCA RRCA RRCA AND 00001111B LD [PSG_REG+5],A LD A,[HL] AND 00001111B LD [PSG_REG+10],A INC HL LD [PUNTERO_EFECTO_C],HL RET FIN_EFECTO_C: LD HL,INTERR RES 5,[HL] XOR A LD [PSG_REG+4],A LD [PSG_REG+5],A LD [PSG_REG+10],A RET ;________________________________________________________ ;FX Nº: 0 1 2 3 4 5 6 7 8 9 A TABLA_EFECTOS: DW EFECTO0, EFECTO1, EFECTO2, EFECTO3, EFECTO4, EFECTO5, EFECTO6, EFECTO7, EFECTO8 ; Y estos son los efectos empleados en el juego: ; [0] Caída del salto EFECTO0: DB $51,$1A DB $E8,$1B DB $80,$2B DB $FF ; [1] Quitar vida EFECTO1: DB $25,$1C DB $30,$2E DB $00,$00 DB $A8,$0A DB $C5,$1A DB $00,$00 DB $37,$1C DB $C5,$1C DB $00,$00 DB $25,$18 DB $30,$26 DB $FF ; [2] Arrastrar en cinta EFECTO2: DB $80,$2E,$00 DB $00,$0A,$04 DB $FF ; [3] Coger tesoro EFECTO3: DB $1F,$0B DB $1A,$0C DB $1F,$0D DB $16,$0E DB $1F,$0E DB $0D,$0D DB $1F,$0C DB $0D,$0B DB $00,$00 DB $00,$00 DB $1F,$08 DB $1A,$09 DB $1F,$0A DB $16,$0B DB $1F,$0B DB $0D,$0A DB $1F,$09 DB $0D,$07 DB $00,$00 DB $00,$00 DB $1F,$06 DB $1A,$07 DB $1F,$08 DB $16,$08 DB $1F,$07 DB $0D,$06 DB $1F,$05 DB $FF ; [4] ? EFECTO4: DB $00,$0C,$03 DB $FF ; [5] Coger vida EFECTO5: DB $1A,$0E DB $1A,$0E DB $00,$00 DB $1A,$0A DB $1A,$0A DB $00,$00 DB $1A,$0C DB $1A,$0C DB $00,$00 DB $1A,$08 DB $1A,$08 DB $FF ; [6] ? EFECTO6: DB $00,$2C,$00 DB $00,$0A,$04 DB $FF ; [7] Salto largo EFECTO7: DB $C3,$0E DB $CC,$0D DB $D5,$0A DB $DE,$06 DB $35,$03 DB $50,$0B DB $47,$0C DB $3E,$08 DB $FF ; [8] Salto alto EFECTO8: DB $58,$0D DB $50,$0B DB $47,$0A DB $3E,$06 DB $35,$03 DB $50,$09 DB $47,$0A DB $3E,$07 DB $FF ; AQUÍ VAN LOS DATOS DE LOS EFECTOS. HAY QUE ACORDARSE DE AÑADIR LA ETIQUETA A LA TABLA TABLA_EFECTOS QUE ; HAY JUSTO ARRIBA DE ESTE TEXTO <****> ;EFECTOS N_EFECTO: DB 0 ;DB : NUMERO DE SONIDO PUNTERO_EFECTO_A:DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE PUNTERO_EFECTO_B:DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE PUNTERO_EFECTO_C:DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE ;BANCO DE INSTRUMENTOS 2 BYTES POR INT. ;[0][RET 2 OFFSET] ;[1][+-PITCH] ;BANCO DE INSTRUMENTOS 2 BYTES POR INT. ;[0][RET 2 OFFSET] ;[1][+-PITCH] ; A partir de aquí es donde se incluyen los tiestos específicos para ; cada juego: los datos con los efectos de sonido y las canciones ; generadas del WYZ Tracker de Agus. ;************************************************************* ;** PAUTAS ** ;************************************************************* TABLA_PAUTAS: DW PAUTA_0,PAUTA_1,PAUTA_2,PAUTA_3,PAUTA_4,PAUTA_5 ;,PAUTA_6,PAUTA_7,PAUTA_8,PAUTA_9,PAUTA_10,PAUTA_11,PAUTA_12,PAUTA_13 PAUTA_0: DB 13,44,75,8,9,10,9,132 PAUTA_1: DB 40,73,9,9,40,8,8,7,130 PAUTA_2: DB 43,9,7,8,8,129 PAUTA_3: DB 7,8,7,5,129 PAUTA_4: DB 18,45,75,8,9,10,9,132 PAUTA_5: DB 19,45,75,8,9,10,9,132 ;************************************************************* ;** EFECTOS DE SONIDO ** ;************************************************************* TABLA_SONIDOS: DW SONIDO1,SONIDO2,SONIDO3 ;,SONIDO3,SONIDO4,SONIDO5,SONIDO6,SONIDO7,SONIDO8, SONIDO9,SONIDO10,SONIDO11 ; Estos son los sonidos que exporta el Tracker de Augus y que se corresponden con las bateras: SONIDO1: DB 0,58,2,0,90,0,232,89,0,0,118,0,255 SONIDO2: DB 162,43,0,232,41,1,23,40,1,69,23,2,209,6,2,116,4,2,255 SONIDO3: DB 0,11,1,255 ;************************************************************* ;** CANCIONES ** ;************************************************************* TABLA_SONG: DW SONG_0, SONG_1, SONG_2, SONG_3, SONG_4 ;, SONG_5, SONG_6, SONG_7, SONG_8 ;************************************************************* ;** NOTAS Y ENVOLVENTES ** ;************************************************************* DATOS_NOTAS: INCBIN "NOTAS.DAT" ;DATOS DE LAS NOTAS DATOS_ENV: INCBIN "ENV.DAT" ;DATOS DE LAS ENVOLVENTES ; INCLUIR AQUÍ LOS FICHEROS DE LAS CANCIONES. ACORDÁNDOSE DE PONER LAS ETIQUETAS ; EN LA TABLA TABLA_SONG UNAS LINEAS MÁS ARRIBA DE ESTE TEXTO <****> ; [0] Astro Ganga (pantalla de título) SONG_0: INCBIN "ganga.mus" ; [1] Astro Ganga Intro (Douko Kadeeee) SONG_1: INCBIN "ganga_intro.mus" ; [2] Ingame: Moonlite Aliens SONG_2: INCBIN "moonlite.mus" ; [3] Game Over SONG_3: INCBIN "ganga_gameover.mus" ; [4] Ending: The Duck and the Moon SONG_4: INCBIN "quezesto.mus" ; 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 ;MUSICA **** EL ORDEN DE LAS VARIABLES ES FIJO ****** SONG: DB 00 ;DBNº DE CANCION TEMPO: DB 00 ;DB TEMPO TTEMPO: DB 00 ;DB CONTADOR TEMPO PUNTERO_A: DW 00 ;DW PUNTERO DEL CANAL A PUNTERO_B: DW 00 ;DW PUNTERO DEL CANAL B PUNTERO_C: DW 00 ;DW PUNTERO DEL CANAL C CANAL_A: DW BUFFER_DEC ;DW DIRECION DE INICIO DE LA MUSICA A CANAL_B: DW 00 ;DW DIRECION DE INICIO DE LA MUSICA B CANAL_C: DW 00 ;DW DIRECION DE INICIO DE LA MUSICA C PUNTERO_P_A: DW 00 ;DW PUNTERO PAUTA CANAL A PUNTERO_P_B: DW 00 ;DW PUNTERO PAUTA CANAL B PUNTERO_P_C: DW 00 ;DW PUNTERO PAUTA CANAL C PUNTERO_P_A0: DW 00 ;DW INI PUNTERO PAUTA CANAL A PUNTERO_P_B0: DW 00 ;DW INI PUNTERO PAUTA CANAL B PUNTERO_P_C0: DW 00 ;DW INI PUNTERO PAUTA CANAL C ;CANAL DE EFECTOS - ENMASCARA OTRO CANAL PUNTERO_P: DW 00 ;DW PUNTERO DEL CANAL EFECTOS CANAL_P: DW 00 ;DW DIRECION DE INICIO DE LOS EFECTOS PSG_REG: DB 00,00,00,00,00,00,00,10111000B,00,00,00,00,00,00,00 ;DB [11] BUFFER DE REGISTROS DEL PSG ;ENVOLVENTE_A EQU $D033 ;DB ;ENVOLVENTE_B EQU $D034 ;DB ;ENVOLVENTE_C EQU $D035 ;DB ;EFECTOS DE SONIDO N_SONIDO: DB 0 ;DB : NUMERO DE SONIDO PUNTERO_SONIDO: DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE ;EFECTOS PUNTERO_EFECTO: DW 0 ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE BUFFER_DEC: DB $00 ;************************* mucha atencion!!!! ; aqui se decodifica la cancion hay que dejar suficiente espacio libre. ;************************* ; Esto va en su propia página, asín que queda hasta el final de la RAM :P