?login_element?

Subversion Repositories NedoOS

Rev

Rev 835 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         module pt3player
  2. ; SPECTRUM PSG PLAYER V 3.7 - WYZ 2006
  3.  
  4. ; ENSAMBLAR CON AsMSX 1.1
  5.  
  6. ; CARACTERISTICAS
  7. ; 5 OCTAVAS:            O[2-6]=60 NOTAS
  8. ; 4 LONGITUDES DE NOTA: L[0-3]+PUNTILLO
  9. ; PUNTILLO
  10. ; COMANDOS:     T:TEMPO
  11. ;               I:INSTRUMENTO
  12. ;               S:REPRODUCTOR DE EFECTOS CANAL C
  13.  
  14.  
  15. ; LOS DATOS QUE HAY QUE VARIAR :
  16.  
  17. ; * N║ DE CANCION.
  18. ; * TABLA DE CANCIONES
  19.  
  20. ; POR HACER
  21. ; - ELEGIR CANAL DE EFECTOS
  22.  
  23.  
  24. ; MUSICA DATOS INICIALES
  25. INIT
  26. ;HL=song
  27.                                 ;DI
  28.                 ;LD      A,0             ;* CANCION Nж 0
  29. ;CARGA UNA CANCION
  30. ;IN:[A]=N║ DE CANCION
  31. ;CARGA_CANCION:  
  32.                                 ;PUSH AF
  33.                 LD A,10111000b
  34.                 LD [PSG_REG+7],A
  35.                 ;POP AF
  36.                         push hl
  37.                 LD      HL,INTERR       ;CARGA CANCION
  38.                 SET     1,[HL]          ;REPRODUCE CANCION
  39.                 ;LD      HL,SONG
  40.                 ;LD      [HL],A          ;N║ A
  41.                 XOR     A
  42.                 LD      [TTEMPO],A
  43.  
  44. ;DECODIFICAR
  45. ;IN-> INTERR 0 ON
  46. ;     SONG
  47. ;CARGA CANCION SI/NO
  48.  
  49. ;DECODE_SONG:  
  50.                                 ;LD      A,[SONG]
  51. ;LEE CABECERA DE LA CANCION
  52. ;BYTE 0=TEMPO
  53.                 ;LD      HL,TABLA_SONG
  54.                 ;CALL    EXT_WORD
  55.                         pop hl
  56.                 LD      A,[HL]
  57.                 LD      [TEMPO],A
  58.                
  59. ;N║ DE PAUTA DEL CANAL A,B,C  
  60.  
  61.                 LD      IX,PUNTERO_P_A
  62.                 CALL    SET_PAUTA
  63.                 LD      IX,PUNTERO_P_B
  64.                 CALL    SET_PAUTA
  65.                 LD      IX,PUNTERO_P_C
  66.                 CALL    SET_PAUTA
  67.                                
  68.                
  69. ;LEE DATOS DE LAS NOTAS
  70. ;[|][|||||] LONGITUD\NOTA
  71.  
  72.                 LD      DE,[CANAL_A]
  73.                 LD      [PUNTERO_A],DE
  74.                 CALL    DECODE_CANAL    ;CANAL A
  75.                 LD      [CANAL_B],DE
  76.                 LD      [PUNTERO_B],DE
  77.                 CALL    DECODE_CANAL    ;CANAL B
  78.                 LD      [CANAL_C],DE
  79.                 LD      [PUNTERO_C],DE
  80.                 CALL    DECODE_CANAL    ;CANAL C
  81.                 LD      [CANAL_P],DE
  82.                 LD      [PUNTERO_P],DE
  83.                 CALL    DECODE_CANAL    ;CANAL P
  84.                 ;EI
  85.                 RET
  86.  
  87.  
  88. ;___________________________________________________________
  89.  
  90.                 DB      "PSG PLAYER BY WYZ'06"
  91.  
  92. ;___________________________________________________________
  93.  
  94.  
  95. MUTE
  96.         XOR A
  97.         LD H,A
  98.         LD L,A
  99.         LD (PSG_REG+8),A
  100.         LD (PSG_REG+9),HL
  101.         JP ROUT
  102.  
  103.  
  104.  
  105.  
  106. ;___________________________________________________________
  107.  
  108. PLAY
  109. ;INICIO:
  110.                                 CALL    PLAY_MUS
  111.                 ;CALL    REPRODUCE_SONIDO
  112.                 ;CALL    REPRODUCE_EFECTO_A
  113.                 ;CALL    REPRODUCE_EFECTO_B
  114.                 ;CALL    REPRODUCE_EFECTO_C
  115.                 JP   ROUT
  116.  
  117.  
  118. ;INICIA EL SONIDO N║ [A]
  119.  
  120. INICIA_SONIDO:  LD      HL,TABLA_SONIDOS
  121.                 CALL    EXT_WORD
  122.                 LD      [PUNTERO_SONIDO],HL
  123.                 LD      HL,INTERR
  124.                 SET     2,[HL]
  125.                 RET
  126.  
  127. SILENCIAPLAYER:
  128.                 LD HL,PSG_REG
  129.                 LD DE,PSG_REG+1
  130.                 LD BC,12
  131.                 LD [HL],0
  132.                 LDIR
  133.                 LD A,10111111b
  134.                 LD [PSG_REG+7],A
  135.                 CALL ROUT
  136.                 LD HL,INTERR
  137.                 RES 1,[HL]
  138.                 RET
  139.  
  140.  
  141. ;INICIA PAUTA PARA UN CANAL
  142. ;IN [A]:  N║ DE PAUTA
  143. ;   [IX]: PUNTERO PAUTA
  144.  
  145. SET_PAUTA:      INC     HL
  146.                 LD      A,[HL]
  147.                 PUSH    HL
  148.                 LD      HL,TABLA_PAUTAS
  149.                 CALL    EXT_WORD
  150.                 LD      [IX+0],L
  151.                 LD      [IX+1],H
  152.                 LD      [IX+6],L
  153.                 LD      [IX+7],H
  154.                 POP     HL
  155.                 RET
  156.  
  157. ;DECODIFICA NOTAS DE UN CANAL
  158. ;IN [DE]=DIRECCION DESTINO
  159. ;NOTA=0 FIN CANAL
  160. ;NOTA=1 SILENCIO
  161. ;NOTA=2 PUNTILLO
  162. ;NOTA=3 COMANDO I
  163.  
  164. DECODE_CANAL:   INC     HL
  165.                 LD      A,[HL]
  166.                 AND     A               ;FIN DEL CANAL?
  167.                 JR      Z,FIN_DEC_CANAL
  168.                 CALL    GETLEN
  169.  
  170.                 CP      00000001B       ;ES SILENCIO?
  171.                 JR      NZ,NO_SILENCIO
  172.                 SET     6,A
  173.                 JR      NO_MODIFICA
  174.                
  175. NO_SILENCIO:    CP      00111110B       ;ES PUNTILLO?
  176.                 JR      NZ,NO_PUNTILLO
  177.                 OR      A
  178.                 RRC     B
  179.                 XOR     A
  180.                 JR      NO_MODIFICA
  181.  
  182. NO_PUNTILLO:    CP      00111111B       ;ES COMANDO?
  183.                 JR      NZ,NO_MODIFICA
  184.                 BIT     0,B             ;COMADO=INSTRUMENTO?
  185.                 JR      Z,NO_INSTRUMENTO  
  186.                 LD      A,11000001B     ;CODIGO DE INSTRUMENTO    
  187.                 LD      [DE],A
  188.                 INC     HL
  189.                 INC     DE
  190.                 LD      A,[HL]          ;N║ DE INSTRUMENTO
  191.                 LD      [DE],A
  192.                 INC     DE
  193.                 JR      DECODE_CANAL
  194.  
  195. NO_INSTRUMENTO: BIT     2,B
  196.                 JR      Z,NO_ENVOLVENTE
  197.                 LD      A,11000100B     ;CODIGO ENVOLVENTE
  198.                 LD      [DE],A
  199.                 INC     DE
  200.                 JR      DECODE_CANAL
  201.      
  202. NO_ENVOLVENTE:  BIT     1,B
  203.                 JR      Z,NO_MODIFICA
  204.                 LD      A,11000010B     ;CODIGO EFECTO
  205.                 LD      [DE],A                
  206.                 INC     HL
  207.                 INC     DE                    
  208.                 LD      A,[HL]
  209.                 CALL    GETLEN
  210.  
  211. NO_MODIFICA:    LD      [DE],A
  212.                 INC     DE
  213.                 XOR     A
  214.                 DJNZ    NO_MODIFICA
  215.                 JR      DECODE_CANAL
  216.  
  217. FIN_DEC_CANAL:  SET     7,A
  218.                 LD      [DE],A
  219.                 INC     DE
  220.                 RET
  221.  
  222. GETLEN:         LD      B,A
  223.                 AND     00111111B
  224.                 PUSH    AF
  225.                 LD      A,B
  226.                 AND     11000000B
  227.                 RLCA
  228.                 RLCA
  229.                 INC     A
  230.                 LD      B,A
  231.                 LD      A,10000000B
  232. DCBC0:          RLCA
  233.                 DJNZ    DCBC0
  234.                 LD      B,A
  235.                 POP     AF
  236.                 RET
  237.  
  238.  
  239.  
  240.  
  241. ;PLAY __________________________________________________
  242.  
  243.  
  244. PLAY_MUS:       LD      HL,INTERR       ;PLAY BIT 1 ON?
  245.                 BIT     1,[HL]
  246.                 RET     Z
  247. ;TEMPO
  248.                 LD      HL,TTEMPO       ;CONTADOR TEMPO
  249.                 INC     [HL]
  250.                 LD      A,[TEMPO]
  251.                 CP      [HL]
  252.                 JR      NZ,PAUTAS
  253.                 LD      [HL],0
  254.                
  255. ;INTERPRETA    
  256.                 LD      IY,PSG_REG
  257.                 LD      IX,PUNTERO_A
  258.                 LD      BC,PSG_REG+8
  259.                 CALL    LOCALIZA_NOTA
  260.                 LD      IY,PSG_REG+2
  261.                 LD      IX,PUNTERO_B
  262.                 LD      BC,PSG_REG+9
  263.                 CALL    LOCALIZA_NOTA
  264.                 LD      IY,PSG_REG+4
  265.                 LD      IX,PUNTERO_C
  266.                 LD      BC,PSG_REG+10
  267.                 CALL    LOCALIZA_NOTA
  268.                 LD      IX,PUNTERO_P    ;EL CANAL DE EFECTOS ENMASCARA OTRO CANAL
  269.                 CALL    LOCALIZA_EFECTO            
  270.  
  271. ;PAUTAS
  272.                
  273. PAUTAS:         LD      IY,PSG_REG+0
  274.                 LD      IX,PUNTERO_P_A
  275.                 LD      HL,PSG_REG+8
  276.                 CALL    PAUTA           ;PAUTA CANAL A
  277.                 LD      IY,PSG_REG+2
  278.                 LD      IX,PUNTERO_P_B
  279.                 LD      HL,PSG_REG+9
  280.                 CALL    PAUTA           ;PAUTA CANAL B
  281.                 LD      IY,PSG_REG+4
  282.                 LD      IX,PUNTERO_P_C
  283.                 LD      HL,PSG_REG+10
  284.                 CALL    PAUTA           ;PAUTA CANAL C
  285.  
  286.                 RET
  287.                
  288. ;REPRODUCE EFECTOS DE SONIDO
  289.  
  290. REPRODUCE_SONIDO:
  291.  
  292.                 LD      HL,INTERR  
  293.                 BIT     2,[HL]          ;ESTA ACTIVADO EL EFECTO?
  294.                 RET     Z
  295.                 LD      HL,[PUNTERO_SONIDO]
  296.                 LD      A,[HL]
  297.                 CP      $FF
  298.                 JR      Z,FIN_SONIDO
  299.                 LD      [PSG_REG+0],A
  300.                 INC     HL
  301.                 LD      A,[HL]
  302.                 RRCA
  303.                 RRCA
  304.                 RRCA
  305.                 RRCA
  306.                 AND     00001111B
  307.                 LD      [PSG_REG+1],A
  308.                 LD      A,[HL]
  309.                 AND     00001111B
  310.                 LD      [PSG_REG+8],A
  311.                 INC     HL
  312.                 LD      A,[HL]
  313.                 AND     A
  314.                 JR      Z,NO_RUIDO
  315.                 LD      [PSG_REG+6],A
  316.                 ;         XXCBAXXX
  317.                 LD      A,10011000B
  318.                 JR      SI_RUIDO
  319. NO_RUIDO:       LD      A,10111000B
  320. SI_RUIDO:       LD      [PSG_REG+7],A
  321.        
  322.                 INC     HL
  323.                 LD      [PUNTERO_SONIDO],HL
  324.                 RET
  325. FIN_SONIDO:     LD      HL,INTERR
  326.                 RES     2,[HL]
  327.  
  328. FIN_NOPLAYER:   XOR     A
  329.                 LD      [PSG_REG+0],A
  330.                 LD      [PSG_REG+1],A
  331.                 LD      A,10111000B
  332.                 LD      [PSG_REG+7],A
  333.                 RET
  334.  
  335. ;VUELCA BUFFER DE SONIDO AL PSG
  336.  
  337. ROUT:          ; LD   A,[PSG_REG+0]
  338.                ; XOR   1
  339.                ; LD   [PSG_REG+0],A
  340.  
  341.                 XOR     A
  342. ROUT_A0:        LD      DE,$FFBF
  343.                 LD      BC,$FFFD
  344.                 LD      HL,PSG_REG
  345. LOUT:           OUT     (C),A
  346.                 LD      B,E
  347.                 OUTI
  348.                 LD      B,D
  349.                 INC     A
  350.                 CP      13
  351.                 JR      NZ,LOUT
  352.                 OUT     (C),A
  353.                 LD      A,[HL]
  354.                 AND     A
  355.                 RET     Z
  356.                 LD      B,E
  357.                 OUT     (C),A
  358.                 XOR     A
  359.                 LD      [PSG_REG+13],A
  360.                 RET
  361.  
  362.  
  363. ;LOCALIZA NOTA CANAL A
  364. ;IN [PUNTERO_A]
  365.  
  366. LOCALIZA_NOTA:  LD      L,[IX+0]       ;HL=[PUNTERO_A_C_B]
  367.                 LD      H,[IX+1]
  368.                 LD      A,[HL]
  369.                 AND     11000000B      ;COMANDO?
  370.                 CP      11000000B
  371.                 JR      NZ,LNJP0
  372.  
  373. ;BIT[0]=INSTRUMENTO
  374.                
  375. COMANDOS:       LD      A,[HL]
  376.                 BIT     0,A             ;INSTRUMENTO
  377.                 JR      Z,COM_EFECTO
  378.  
  379.                 INC     HL
  380.                 LD      A,[HL]          ;N║ DE PAUTA
  381.                 INC     HL
  382.                 LD      [IX+00],L
  383.                 LD      [IX+01],H
  384.                 LD      HL,TABLA_PAUTAS
  385.                 CALL    EXT_WORD
  386.                 LD      [IX+18],L
  387.                 LD      [IX+19],H
  388.                 LD      [IX+12],L
  389.                 LD      [IX+13],H
  390.                 LD      L,C
  391.                 LD      H,B
  392.                 RES     4,[HL]        ;APAGA EFECTO ENVOLVENTE ********** TEMP╥RAL
  393.                 XOR     A
  394.                 LD      [PSG_REG+13],A
  395.                 JR      LOCALIZA_NOTA
  396.  
  397. COM_EFECTO:     BIT     1,A             ;EFECTO DE SONIDO
  398.                 JR      Z,COM_ENVOLVENTE
  399.  
  400.                 INC     HL
  401.                 LD      A,[HL]
  402.                 INC     HL
  403.                 LD      [IX+00],L
  404.                 LD      [IX+01],H
  405.                 CALL    INICIA_SONIDO
  406.                 RET
  407.  
  408. COM_ENVOLVENTE: BIT     2,A
  409.                 RET     Z               ;IGNORA - ERROR
  410.  
  411.            
  412.                 INC     HL
  413.                 LD      [IX+00],L
  414.                 LD      [IX+01],H
  415.                 LD      L,C
  416.                 LD      H,B
  417.                 SET     4,[HL]          ;ENCIEN EFECTO ENVOLVENTE ********** TEMP╥RAL
  418.                 JR      LOCALIZA_NOTA
  419.  
  420.              
  421. LNJP0:          LD      A,[HL]
  422.                 INC     HL
  423.                 BIT     7,A
  424.                 JR      Z,NO_FIN_CANAL_A
  425.                 LD      L,[IX+6]        ;HL=[CANAL_A_B_C] REINICIA CANAL
  426.                 LD      H,[IX+7]
  427.                 LD      [IX+00H],L
  428.                 LD      [IX+01H],H
  429.                 JR      LOCALIZA_NOTA
  430.                
  431. NO_FIN_CANAL_A: LD      [IX+0],L        ;[PUNTERO_A_B_C]=HL GUARDA PUNTERO
  432.                 LD      [IX+1],H
  433.                 AND     A               ;NO REPRODUCE NOTA SI NOTA=0
  434.                 JR      Z,FIN_RUTINA
  435.                 BIT     6,A             ;SILENCIO?
  436.                 JR      Z,NO_SILENCIO_A
  437.                 XOR     A
  438.                 LD   [BC],A
  439.                 LD   [PSG_REG+13],A   ;ENVOLVENTE OFF
  440.                 CALL    NOTA
  441.                 RET
  442. NO_SILENCIO_A:
  443.                 CALL    NOTA            ;REPRODUCE NOTA
  444.  
  445.                 LD      L,[IX+18]       ; HL=[PUNTERO_P_A0] RESETEA PAUTA
  446.                 LD      H,[IX+19]
  447.                 LD      [IX+12],L       ;[PUNTERO_P_A]=HL
  448.                 LD      [IX+13],H
  449. FIN_RUTINA:     RET
  450.  
  451. ;LOCALIZA EFECTO
  452. ;IN HL=[PUNTERO_P]
  453.  
  454. LOCALIZA_EFECTO:LD      L,[IX+0]       ;HL=[PUNTERO_P]
  455.                 LD      H,[IX+1]
  456.                 LD      A,[HL]
  457.                 CP      11000010B
  458.                 JR      NZ,LEJP0
  459.  
  460.                 INC     HL
  461.                 LD      A,[HL]
  462.                 INC     HL
  463.                 LD      [IX+00],L
  464.                 LD      [IX+01],H
  465.                 CALL    INICIA_SONIDO
  466.                 RET
  467.            
  468.              
  469. LEJP0:          INC     HL
  470.                 BIT     7,A
  471.                 JR      Z,NO_FIN_CANAL_P
  472.                 LD      L,[IX+2]        ;HL=[CANAL_P] REINICIA CANAL
  473.                 LD      H,[IX+3]
  474.                 LD      [IX+00H],L
  475.                 LD      [IX+01H],H
  476.                 JR      LOCALIZA_EFECTO
  477.                
  478. NO_FIN_CANAL_P: LD      [IX+0],L        ;[PUNTERO_A_B_C]=HL GUARDA PUNTERO
  479.                 LD      [IX+1],H
  480.                 RET
  481.  
  482. ; PAUTA DE LOS 3 CANALES
  483. ; IN:[IX]:PUNTERO DE LA PAUTA
  484. ;    [HL]:REGISTRO DE VOLUMEN
  485. ;    [IY]:REGISTROS DE FRECUENCIA
  486.  
  487. PAUTA:        
  488.                 BIT     4,[HL]        ;SI LA ENVOLVENTE ESTA ACTIVADA NO ACTUA PAUTA
  489.                 RET     NZ
  490.                 PUSH   HL
  491.                 LD      L,[IX+0]
  492.                 LD      H,[IX+1]
  493.                 LD      A,[HL]
  494.                
  495.                 BIT     7,A      ;LOOP
  496.                 JR      Z,PCAJP0
  497.                 AND     00001111B       ;LOOP PAUTA [0,15]
  498.                 LD      D,0
  499.                 LD      E,A
  500.                 SBC     HL,DE
  501.                 LD      A,[HL]
  502.  
  503. PCAJP0:         BIT   6,A      ;OCTAVA -1
  504.                 JR   Z,PCAJP1
  505.                 LD   E,[IY+0]
  506.                 LD   D,[IY+1]
  507.  
  508.                 RR   D
  509.                 RR   E
  510.                 LD   [IY+0],E
  511.                 LD   [IY+1],D
  512.                 JR   PCAJP2
  513.  
  514. PCAJP1:         BIT   5,A      ;OCTAVA +1
  515.                 JR   Z,PCAJP2
  516.                 LD   E,[IY+0]
  517.                 LD   D,[IY+1]
  518.            
  519.                 RL   E
  520.                 RL   D
  521.                 LD   [IY+0],E
  522.                 LD   [IY+1],D      
  523.  
  524.  
  525. PCAJP2:         INC     HL
  526.                 LD      [IX+0],L
  527.                 LD      [IX+1],H
  528.                 POP   HL
  529.                 AND   00001111B
  530.                 LD      [HL],A
  531.                 RET
  532.  
  533. ;NOTA : REPRODUCE UNA NOTA
  534. ;IN [A]=CODIGO DE LA NOTA
  535. ;   [IY]=REGISTROS DE FRECUENCIA
  536.  
  537.  
  538. NOTA:           LD      L,C
  539.                 LD      H,B
  540.                 BIT     4,[HL]
  541.                 JR      NZ,EVOLVENTES
  542.                 LD      B,A
  543.                 LD      HL,DATOS_NOTAS
  544.                 RLCA                    ;X2
  545.                 LD      D,0
  546.                 LD      E,A
  547.                 ADD     HL,DE
  548.                 LD      A,[HL]
  549.                 LD      [IY+0],A
  550.                 INC     HL
  551.                 LD      A,[HL]
  552.                 LD      [IY+1],A
  553.                 RET
  554.  
  555. ;IN [A]=CODIGO DE LA ENVOLVENTE
  556. ;   [IY]=REGISTRO DE FRECUENCIA
  557.  
  558. EVOLVENTES:     LD      HL,DATOS_ENV
  559.                 LD      E,A
  560.                 LD      D,0
  561.                 ADD     HL,DE
  562.                 LD      A,[HL]
  563.                 LD      [PSG_REG+11],A
  564.                 LD      A,$0C
  565.                 LD      [PSG_REG+13],A
  566.                 XOR     A
  567.                 LD      [IY+0],A
  568.                 LD      [IY+1],A
  569.                 LD      [PSG_REG+12],A
  570.                 RET
  571.  
  572.  
  573.  
  574.  
  575.                 ;SOUND C,A
  576.  
  577. ;SOUND:          PUSH    AF
  578. ;                LD      A,C
  579. ;                OUT     [$A0],A
  580. ;                POP     AF
  581. ;                OUT     [$A1],A
  582. ;                RET
  583.  
  584. ;LEE REGISTRO PSG
  585. ;IN  [A]=REGISTRO
  586. ;OUT [A]=VALOR
  587.  
  588. ;IN_SOUND:       OUT     [$A0],A
  589. ;                IN      A,[$A2]
  590. ;                RET
  591.  
  592. ;EXTRAE UN WORD DE UNA TABLA
  593. ;IN:[HL]=DIRECCION TABLA
  594. ;   [A]= POSICION
  595. ;OUT[HL]=WORD
  596.  
  597. EXT_WORD:       LD      D,0
  598.                 SLA     A               ;*2
  599.                 LD      E,A
  600.                 ADD     HL,DE
  601.                 LD      E,[HL]
  602.                 INC     HL
  603.                 LD      D,[HL]
  604.                 EX      DE,HL
  605.                 RET
  606.  
  607.  
  608. ; *************************************************************************************************************************
  609.  
  610. ;INICIA EL SONIDO N║ [B] EN EL CANAL [C]
  611.  
  612. INICIA_EFECTO:  ;LD A,10111000b
  613.                 ;LD [PSG_REG+7],A
  614.  
  615.                 LD   A,C
  616.                 CP   0
  617.                 JP   Z,INICIA_EFECTO_A
  618.                 CP   1
  619.                 JP   Z,INICIA_EFECTO_B
  620.                 CP   2
  621.                 JP   Z,INICIA_EFECTO_C
  622.                 RET
  623. ;________________________________________________________
  624.  
  625.  
  626. ;REPRODUCE_EFECTO:
  627.  
  628. ;                CALL   REPRODUCE_EFECTO_A
  629. ;                CALL   REPRODUCE_EFECTO_B
  630. ;                CALL   REPRODUCE_EFECTO_C
  631. ;                CALL   ROUT
  632. ;                RET
  633.  
  634. ;________________________________________________________
  635.  
  636. INICIA_EFECTO_A:LD      A,B
  637.                 LD      HL,TABLA_EFECTOS
  638.                 CALL    EXT_WORD
  639.                 LD      [PUNTERO_EFECTO_A],HL
  640.                 LD      HL,INTERR
  641.                 SET     3,[HL]
  642.                 RET
  643.  
  644.  
  645. ;REPRODUCE EFECTOS CANAL A
  646.  
  647. REPRODUCE_EFECTO_A:
  648.                 LD      HL,INTERR
  649.                 BIT     3,[HL]          ;ESTA ACTIVADO EL EFECTO?
  650.                 RET     Z
  651.                 LD      HL,[PUNTERO_EFECTO_A]
  652.                 LD      A,[HL]
  653.                 CP      $FF
  654.                 JR      Z,FIN_EFECTO_A
  655.                 LD      [PSG_REG+0],A
  656.                 INC     HL
  657.                 LD      A,[HL]
  658.                 RRCA
  659.                 RRCA
  660.                 RRCA
  661.                 RRCA
  662.                 AND     00001111B
  663.                 LD      [PSG_REG+1],A
  664.                 LD      A,[HL]
  665.                 AND     00001111B
  666.                 LD      [PSG_REG+8],A
  667.  
  668.                 INC     HL
  669.                 LD      [PUNTERO_EFECTO_A],HL
  670.                 RET
  671. FIN_EFECTO_A:   LD      HL,INTERR
  672.                 RES     3,[HL]
  673.                 XOR     A
  674.                 LD      [PSG_REG+0],A
  675.                 LD      [PSG_REG+1],A
  676.                 LD   [PSG_REG+8],A
  677.                 RET
  678.  
  679. ;________________________________________________________
  680.  
  681. INICIA_EFECTO_B:
  682.                 LD   A,B
  683.                 LD      HL,TABLA_EFECTOS
  684.                 CALL    EXT_WORD
  685.                 LD      [PUNTERO_EFECTO_B],HL
  686.                 LD      HL,INTERR
  687.                 SET     4,[HL]
  688.                 RET
  689.  
  690. ;REPRODUCE EFECTOS CANAL B
  691.  
  692. REPRODUCE_EFECTO_B:
  693.  
  694.                 LD      HL,INTERR
  695.                 BIT     4,[HL]          ;ESTA ACTIVADO EL EFECTO?
  696.                 RET     Z
  697.                 LD      HL,[PUNTERO_EFECTO_B]
  698.                 LD      A,[HL]
  699.                 CP      $FF
  700.                 JR      Z,FIN_EFECTO_B
  701.                 LD      [PSG_REG+2],A
  702.                 INC     HL
  703.                 LD      A,[HL]
  704.                 RRCA
  705.                 RRCA
  706.                 RRCA
  707.                 RRCA
  708.                 AND     00001111B
  709.                 LD      [PSG_REG+3],A
  710.                 LD      A,[HL]
  711.                 AND     00001111B
  712.                 LD      [PSG_REG+9],A
  713.        
  714.                 INC     HL
  715.                 LD      [PUNTERO_EFECTO_B],HL
  716.                 RET
  717. FIN_EFECTO_B:   LD      HL,INTERR
  718.                 RES     4,[HL]
  719.                 XOR     A
  720.                 LD      [PSG_REG+2],A
  721.                 LD      [PSG_REG+3],A
  722.                 LD   [PSG_REG+9],A
  723.                 RET
  724.  
  725. ;________________________________________________________
  726.  
  727. INICIA_EFECTO_C:
  728.                 LD   A,B
  729.                 LD      HL,TABLA_EFECTOS
  730.                 CALL    EXT_WORD
  731.                 LD      [PUNTERO_EFECTO_C],HL
  732.                 LD      HL,INTERR
  733.                 SET     5,[HL]
  734.                 RET
  735.  
  736. ;REPRODUCE EFECTOS CANAL C
  737.  
  738. REPRODUCE_EFECTO_C:
  739.  
  740.                 LD      HL,INTERR
  741.                 BIT     5,[HL]          ;ESTA ACTIVADO EL EFECTO?
  742.                 RET     Z
  743.                 LD      HL,[PUNTERO_EFECTO_C]
  744.                 LD      A,[HL]
  745.                 CP      $FF
  746.                 JR      Z,FIN_EFECTO_C
  747.                 LD      [PSG_REG+4],A
  748.                 INC     HL
  749.                 LD      A,[HL]
  750.                 RRCA
  751.                 RRCA
  752.                 RRCA
  753.                 RRCA
  754.                 AND     00001111B
  755.                 LD      [PSG_REG+5],A
  756.                 LD      A,[HL]
  757.                 AND     00001111B
  758.                 LD      [PSG_REG+10],A
  759.        
  760.                 INC     HL
  761.                 LD      [PUNTERO_EFECTO_C],HL
  762.                 RET
  763. FIN_EFECTO_C:   LD      HL,INTERR
  764.                 RES     5,[HL]
  765.                 XOR     A      
  766.                 LD      [PSG_REG+4],A
  767.                 LD      [PSG_REG+5],A
  768.                 LD      [PSG_REG+10],A
  769.                 RET      
  770.  
  771. ;________________________________________________________
  772.  
  773. ;FX N║:         0   1   2   3   4   5   6   7   8   9           A
  774.  
  775. TABLA_EFECTOS:  DW  EFECTO0, EFECTO1, EFECTO2, EFECTO3, EFECTO4, EFECTO5, EFECTO6, EFECTO7, EFECTO8
  776.  
  777. ; Y estos son los efectos empleados en el juego:
  778.  
  779. ; [0] Caэda del salto
  780. EFECTO0:                DB      $51,$1A
  781.                                 DB      $E8,$1B
  782.                                 DB      $80,$2B
  783.                                 DB      $FF  
  784.                                
  785. ; [1] Quitar vida
  786. EFECTO1:                DB      $25,$1C
  787.                                 DB      $30,$2E
  788.                                 DB      $00,$00
  789.                                 DB      $A8,$0A
  790.                                 DB      $C5,$1A
  791.                                 DB      $00,$00
  792.                                 DB      $37,$1C
  793.                                 DB      $C5,$1C
  794.                                 DB      $00,$00
  795.                                 DB      $25,$18
  796.                                 DB      $30,$26
  797.                                 DB      $FF
  798.                                
  799. ; [2] Arrastrar en cinta
  800. EFECTO2:                DB      $80,$2E,$00
  801.                                 DB      $00,$0A,$04
  802.                                 DB      $FF    
  803.                                
  804. ; [3] Coger tesoro
  805. EFECTO3:                DB      $1F,$0B
  806.                                 DB      $1A,$0C
  807.                                 DB      $1F,$0D
  808.                                 DB      $16,$0E
  809.                                 DB      $1F,$0E
  810.                                 DB      $0D,$0D
  811.                                 DB      $1F,$0C
  812.                                 DB      $0D,$0B
  813.                                 DB      $00,$00
  814.                                 DB      $00,$00
  815.                                 DB      $1F,$08
  816.                                 DB      $1A,$09
  817.                                 DB      $1F,$0A
  818.                                 DB      $16,$0B
  819.                                 DB      $1F,$0B
  820.                                 DB      $0D,$0A
  821.                                 DB      $1F,$09
  822.                                 DB      $0D,$07
  823.                                 DB      $00,$00
  824.                                 DB      $00,$00
  825.                                 DB      $1F,$06
  826.                                 DB      $1A,$07
  827.                                 DB      $1F,$08
  828.                                 DB      $16,$08
  829.                                 DB      $1F,$07
  830.                                 DB      $0D,$06
  831.                                 DB      $1F,$05
  832.                                 DB      $FF
  833.        
  834. ; [4] ?
  835. EFECTO4:                DB      $00,$0C,$03
  836.                                 DB      $FF
  837.                                
  838. ; [5] Coger vida
  839. EFECTO5:                DB      $1A,$0E
  840.                                 DB      $1A,$0E
  841.                                 DB      $00,$00
  842.                                 DB      $1A,$0A
  843.                                 DB      $1A,$0A
  844.                                 DB      $00,$00
  845.                                 DB      $1A,$0C
  846.                                 DB      $1A,$0C
  847.                                 DB      $00,$00
  848.                                 DB      $1A,$08
  849.                                 DB      $1A,$08
  850.                                 DB      $FF
  851.                                
  852. ; [6] ?
  853. EFECTO6:                DB      $00,$2C,$00
  854.                                 DB      $00,$0A,$04
  855.                                 DB      $FF    
  856.                                
  857. ; [7] Salto largo
  858. EFECTO7:                DB      $C3,$0E
  859.                                 DB      $CC,$0D
  860.                                 DB      $D5,$0A
  861.                                 DB      $DE,$06
  862.                                 DB      $35,$03
  863.                                 DB      $50,$0B
  864.                                 DB      $47,$0C
  865.                                 DB      $3E,$08
  866.                                 DB      $FF
  867.                                
  868. ; [8] Salto alto
  869. EFECTO8:                DB      $58,$0D
  870.                                 DB      $50,$0B
  871.                                 DB      $47,$0A
  872.                                 DB      $3E,$06
  873.                                 DB      $35,$03
  874.                                 DB      $50,$09
  875.                                 DB      $47,$0A
  876.                                 DB      $3E,$07
  877.                                 DB      $FF    
  878.                
  879. ; AQU═ VAN LOS DATOS DE LOS EFECTOS. HAY QUE ACORDARSE DE A╤ADIR LA ETIQUETA A LA TABLA TABLA_EFECTOS QUE
  880. ; HAY JUSTO ARRIBA DE ESTE TEXTO <****>
  881.  
  882. ;EFECTOS
  883.  
  884. N_EFECTO:        DB      0             ;DB : NUMERO DE SONIDO
  885. PUNTERO_EFECTO_A:DW      0             ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
  886. PUNTERO_EFECTO_B:DW      0             ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
  887. PUNTERO_EFECTO_C:DW      0             ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
  888.  
  889. ;BANCO DE INSTRUMENTOS 2 BYTES POR INT.
  890.  
  891. ;[0][RET 2 OFFSET]
  892. ;[1][+-PITCH]
  893.  
  894. ;BANCO DE INSTRUMENTOS 2 BYTES POR INT.
  895.  
  896. ;[0][RET 2 OFFSET]
  897. ;[1][+-PITCH]
  898.  
  899.  
  900. ; A partir de aquэ es donde se incluyen los tiestos especэficos para
  901. ; cada juego: los datos con los efectos de sonido y las canciones
  902. ; generadas del WYZ Tracker de Agus.
  903.  
  904.  
  905. ;*************************************************************
  906. ;** PAUTAS                                                  **
  907. ;*************************************************************
  908.  
  909. TABLA_PAUTAS:   DW  PAUTA_2,PAUTA_3,PAUTA_4,PAUTA_5,PAUTA_6,PAUTA_7,PAUTA_8,PAUTA_9,PAUTA_10 ;,PAUTA_11,PAUTA_12,PAUTA_13
  910.  
  911. PAUTA_2:        DB      46,13,12,11,129
  912. PAUTA_3:        DB      8,74,11,43,10,72,8,40,8,132
  913. PAUTA_4:        DB      4,71,8,40,8,70,5,37,5,69,132
  914. PAUTA_5:        DB      72,10,11,12,11,10,9,8,129
  915. PAUTA_6:        DB      69,6,7,7,5,5,129
  916. PAUTA_7:        DB      5,70,6,37,4,3,129
  917. PAUTA_8:        DB      43,12,12,12,12,11,11,11,11,10,10,10,10,11,11,11,11,144
  918. PAUTA_9:        DB      78,44,10,8,7,129
  919. PAUTA_10:       DB      75,41,8,7,6,129
  920.  
  921. ;*************************************************************
  922. ;** EFECTOS DE SONIDO                                       **
  923. ;*************************************************************
  924.  
  925. TABLA_SONIDOS:  DW      SONIDO1,SONIDO2,SONIDO3,SONIDO4 ;,SONIDO5,SONIDO6,SONIDO7,SONIDO8, SONIDO9,SONIDO10,SONIDO11
  926.  
  927. ; Estos son los sonidos que exporta el Tracker de Augus y que se corresponden con las bateras:
  928.  
  929. SONIDO1:        DB      209,63,0,209,78,0,69,109,0,255
  930. SONIDO2:        DB      69,47,0,232,44,5,0,57,2,255
  931. SONIDO3:        DB      0,11,1,0,6,1,255
  932. SONIDO4:        DB      186,58,0,0,102,0,162,131,0,255
  933.  
  934. ;*************************************************************
  935. ;** CANCIONES                                               **
  936. ;*************************************************************
  937.  
  938. ;TABLA_SONG:     DW      SONG_0, SONG_1, SONG_2 , SONG_3, SONG_4, SONG_5, SONG_6, SONG_7, SONG_8, SONG_9          
  939.  
  940. ;*************************************************************
  941. ;** NOTAS Y ENVOLVENTES                                     **
  942. ;*************************************************************
  943.  
  944. DATOS_NOTAS:    INCBIN "NOTAS.DAT"        ;DATOS DE LAS NOTAS
  945. DATOS_ENV:      INCBIN "ENV.DAT"          ;DATOS DE LAS ENVOLVENTES
  946.  
  947. ; INCLUIR AQU═ LOS FICHEROS DE LAS CANCIONES. ACORD┴NDOSE DE PONER LAS ETIQUETAS
  948. ; EN LA TABLA TABLA_SONG UNAS LINEAS M┴S ARRIBA DE ESTE TEXTO <****>
  949.  
  950.  
  951.  
  952. ; VARIABLES__________________________
  953.  
  954. INTERR:         DB     00               ;INTERRUPTORES 1=ON 0=OFF
  955.                                         ;BIT 0=CARGA CANCION ON/OFF
  956.                                         ;BIT 1=PLAYER ON/OFF
  957.                                         ;BIT 2=SONIDOS ON/OFF
  958.                                         ;BIT 3=EFECTOS ON/OFF
  959.  
  960. ;MUSICA **** EL ORDEN DE LAS VARIABLES ES FIJO ******
  961.  
  962.  
  963.  
  964. ;SONG:           DB     00               ;DBN║ DE CANCION
  965. TEMPO:          DB     00               ;DB TEMPO
  966. TTEMPO:         DB     00               ;DB CONTADOR TEMPO
  967. PUNTERO_A:      DW     00               ;DW PUNTERO DEL CANAL A
  968. PUNTERO_B:      DW     00               ;DW PUNTERO DEL CANAL B
  969. PUNTERO_C:      DW     00               ;DW PUNTERO DEL CANAL C
  970.  
  971. CANAL_A:        DW     BUFFER_DEC       ;DW DIRECION DE INICIO DE LA MUSICA A
  972. CANAL_B:        DW     00               ;DW DIRECION DE INICIO DE LA MUSICA B
  973. CANAL_C:        DW     00               ;DW DIRECION DE INICIO DE LA MUSICA C
  974.  
  975. PUNTERO_P_A:    DW     00               ;DW PUNTERO PAUTA CANAL A
  976. PUNTERO_P_B:    DW     00               ;DW PUNTERO PAUTA CANAL B
  977. PUNTERO_P_C:    DW     00               ;DW PUNTERO PAUTA CANAL C
  978.  
  979. PUNTERO_P_A0:   DW     00               ;DW INI PUNTERO PAUTA CANAL A
  980. PUNTERO_P_B0:   DW     00               ;DW INI PUNTERO PAUTA CANAL B
  981. PUNTERO_P_C0:   DW     00               ;DW INI PUNTERO PAUTA CANAL C
  982.  
  983. ;CANAL DE EFECTOS - ENMASCARA OTRO CANAL
  984.  
  985. PUNTERO_P:      DW     00              ;DW PUNTERO DEL CANAL EFECTOS
  986. CANAL_P:        DW     00              ;DW DIRECION DE INICIO DE LOS EFECTOS
  987.  
  988. 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
  989.  
  990. ;ENVOLVENTE_A    EQU     $D033           ;DB
  991. ;ENVOLVENTE_B    EQU     $D034           ;DB
  992. ;ENVOLVENTE_C    EQU     $D035           ;DB
  993.  
  994. ;EFECTOS DE SONIDO
  995.  
  996. N_SONIDO:       DB      0               ;DB : NUMERO DE SONIDO
  997. PUNTERO_SONIDO: DW      0               ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
  998.  
  999. ;EFECTOS
  1000.  
  1001. PUNTERO_EFECTO: DW      0               ;DW : PUNTERO DEL SONIDO QUE SE REPRODUCE
  1002.  
  1003. ;BUFFER_DEC:     DB      $00      
  1004.  
  1005. ;************************* mucha atencion!!!!
  1006. ; aqui se decodifica la cancion hay que dejar suficiente espacio libre.
  1007. ;*************************
  1008.  
  1009. ; Esto va en su propia pсgina, asэn que queda hasta el final de la RAM :P
  1010. MDLADDR EQU $
  1011.         endmodule
  1012.