home *** CD-ROM | disk | FTP | other *** search
/ Mega Magazine 5 / Mega_Magazine_05_19xx___nl_Side_B.atr / sampling.lzh / PLAY4VOL.SRC < prev    next >
Text File  |  1988-09-01  |  3KB  |  203 lines

  1. *************************************
  2. *                                   *
  3. *         - SAMPLE PLAYER -         *
  4. *                                   *
  5. *        WITH VOLUME CONTROL        *
  6. *   DONE BY FRANKENSTEIN 18/10/92   *
  7. *                                   *
  8. *************************************
  9.  
  10. SPBEG    EQU $0700
  11. SPEND    EQU $B400
  12.  
  13. ZP    EQU $F0        (AND $F1)
  14. END    EQU $F2        (AND $F3)
  15. VOLUME    EQU $F4
  16. COUNT    EQU $F5
  17.  
  18. TAB0123    EQU $BA00
  19. TAB4567    EQU $BB00
  20.  
  21.     ORG $B400
  22.  
  23. *------------------------------------
  24. * MAIN LOOP
  25. *------------------------------------
  26.  
  27.     LDA #%00010000
  28.     STA VOLUME
  29.  
  30.     JSR MAKTAB
  31.     JSR INTOFF
  32.  
  33. LOOP    LDA #SPBEG:L
  34.     STA ZP
  35.     LDA #SPBEG:H
  36.     STA ZP+1
  37.  
  38.     LDA #SPEND:L
  39.     STA END
  40.     LDA #SPEND:H
  41.     STA END+1
  42.  
  43.     LDA #0
  44.     STA COUNT
  45.     STA $D400
  46.  
  47.     JSR PLAY
  48.     JMP LOOP
  49.  
  50.     JSR INTON
  51.     RTS
  52.  
  53. *------------------------------------
  54. * CREATE LOOKUP TABLES:
  55. *
  56. * FOR 4-BIT SAMPLES:
  57. *
  58. * TAB0123: ----xxxx
  59. * TAB4567: xxxx----
  60. *
  61. * x      : BITS USED TO LOOKUP
  62. * -      : DOESN'T MATTER BITS
  63. *
  64. * SETS VOLUME ONLY BIT IN TABLES TOO!
  65. *------------------------------------
  66.  
  67. * 4-BIT TABLES (8/4=2)
  68.  
  69. MAKTAB    LDX #0
  70.  
  71. N0123    TXA
  72.     AND #%00001111
  73.     ORA #%00010000
  74.     STA TAB0123,X
  75.     INX
  76.     BNE N0123
  77.  
  78. N4567    TXA
  79.     AND #%11110000
  80.     LSR
  81.     LSR
  82.     LSR
  83.     LSR
  84.     ORA #%00010000
  85.     STA TAB4567,X
  86.     INX
  87.     BNE N4567
  88.  
  89.     RTS
  90.  
  91. *------------------------------------
  92. * INTERRUPTS OFF
  93. *------------------------------------
  94.  
  95. INTOFF    LDA #0
  96.     STA $D20E
  97.     STA $D40E
  98.     RTS
  99.  
  100. *------------------------------------
  101. * INTERRUPTS ON
  102. *------------------------------------
  103.  
  104. INTON    LDA 16
  105.     STA $D20E
  106.     LDA #$C0
  107.     STA $D40E
  108.     RTS
  109.  
  110. *------------------------------------
  111. * THIS ROUTINE PLAYS 4-BIT SAMPLES
  112. * SELECT/OPTION FOR VOLUME CONTROL
  113. *------------------------------------
  114.  
  115. PLAY    LDY #0
  116.  
  117. * PLAY: xxxx0000
  118.  
  119. NOHO    LDA (ZP),Y
  120.     TAX
  121.     LDA TAB4567,X
  122.     LDX VOLUME
  123.  
  124.     STA $D40A
  125.     STA $D201
  126.     STA $D203
  127.     STX $D205
  128.     STX $D207
  129.  
  130. *------------------------------------
  131. * VOLUME CONTROL BY SELECT/OPTION
  132. *------------------------------------
  133.  
  134.     INC COUNT    ; DELAY
  135.     BEQ YOVOL
  136.  
  137.     LDA #8
  138.     STA $D01F
  139.     BNE EXITVC
  140.  
  141. YOVOL    LDX VOLUME
  142.  
  143.     LDA $D01F
  144.     EOR #%00000111
  145.     BEQ EXITVC
  146.  
  147.     CMP #%00000100    ; OPTION
  148.     BNE OPTNO
  149.  
  150. * OPTION = VOLUME UP
  151.  
  152.     CPX #%00011111    ; MAX.VOL?
  153.     BEQ EXITVC
  154.     INX
  155.     BNE STORE
  156.  
  157. * SELECT = VOLUME DOWN
  158.  
  159. OPTNO    CMP #%00000010    ; SELECT
  160.     BNE EXITVC
  161.  
  162.     CPX #%00010000    ; MIN.VOL?
  163.     BEQ EXITVC
  164.     DEX
  165.  
  166. STORE    STX VOLUME
  167.     TXA
  168.     ASL
  169.     STA $D01A
  170.  
  171. * PLAY: 0000xxxx
  172.  
  173. EXITVC    LDA (ZP),Y
  174.     TAX
  175.     LDA TAB0123,X
  176.     LDX VOLUME
  177.  
  178.     STA $D40A
  179.     STA $D201
  180.     STA $D203
  181.     STX $D205
  182.     STX $D207
  183.  
  184. *------------------------------------
  185. * GET NEXT BYTE FROM DATA
  186. *------------------------------------
  187.  
  188. NEXBT    INC ZP
  189.     BNE NOWAY
  190.     INC ZP+1
  191.  
  192. NOWAY    LDA ZP+1
  193.     CMP END+1
  194.     BNE NOHO
  195.     LDA ZP
  196.     CMP END
  197.     BNE NOHO
  198.  
  199.     RTS
  200.  
  201. * VARS
  202.  
  203. LEN    DFB 0,0¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯