home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / SOURCE / DRUMMACH.SRC.txt < prev    next >
Text File  |  2020-08-13  |  7KB  |  231 lines

  1. ;
  2. ;DRUMMACH.SRC  - DRUM MACHINE SOUNDS THRU MOCKINGBOARD
  3. ;
  4. ;
  5. ;*==============================================================
  6. ;* ML.INTEGRATOR - integrates basic pgm and ml code @ $804
  7. ;* from NIBBLE, April 1990, (c) 1990 Stephen M. Hall, Mindcraft
  8. ;*==============================================================
  9. ;
  10.          ORG $0801
  11. ;
  12. TXTTAB   EQU $67
  13. BUF      EQU $200
  14. DOSVEC   EQU $3D0
  15. RUN      EQU $D566
  16. ;
  17. MSLOT               EQU   $C400
  18. MSTS                EQU   MSLOT
  19. MDTA                EQU   MSTS+1
  20. ;
  21. ;*===========*
  22. ;* SECTION 1 *
  23. ;*===========*
  24. ;
  25. BGN      JMP       STARTUP   ; *** SEE SECTION 4 ***
  26. ;===================================================
  27. ; BASIC INTERFACE: POKE 2055,DRUM NUMBER,  CALL 2052
  28. ;                  POKE 2056,SPEAKER ($00 OR $80)
  29. ;====================================================
  30.                     JMP   ORIGIN       ; CALL 2052
  31. ;
  32. DRUM                DFB   $01          ; POKE 2055, DRUM
  33. ;
  34. SPEAKER             DFB   $00      ;00=LEFT, 80=RIGHT
  35. ;
  36. REGISTER            DFB   $08          ; POKE 2057, REGISTER
  37. ;
  38. DATA                DFB   $00          ; POKE 2058, DATA
  39. ;
  40.                     JMP   POKEREG      ; CALL 2059
  41.                     JMP   INITMOCK     ; CALL 2062
  42. ;
  43. ORIGIN              LDA DRUM
  44.                     CMP #$0
  45.                     BCC EXIT
  46.                     CMP #$5
  47.                     BCS EXIT
  48.                     JSR INITMOCK
  49.                     JSR SETNOISE
  50.                     LDA DRUM
  51.                     TAX
  52.                     LDA NOISE,X
  53.                     STA DATA
  54.                     LDA #$06
  55.                     STA REGISTER
  56.                     JSR POKEREG
  57.                     LDA COARSE,X
  58.                     STA DATA
  59.                     LDA #$0C
  60.                     STA REGISTER
  61.                     JSR POKEREG
  62.                     JSR SOUNDNOW
  63. EXIT                RTS
  64. ;
  65. ; INSTRUMENT DATA: NOISE PERIOD, COARSE TONE PERIOD
  66. ;
  67. ;CYMBAL, HIHAT, SNARE, TOMTOM, BASSDRUM
  68. NOISE    DFB       $01,$01,$04,$10,$1F
  69. COARSE   DFB       $10,$02,$04,$02,$04
  70. ;
  71. ;====================================
  72. ; POKE REGISTER WITH DATA
  73. ;
  74. POKEREG             LDA   SPEAKER        ;GET SPEAKER (L/R) INTO Y
  75.                     AND   #$80
  76.                     TAY   
  77.                     LDA   REGISTER        ;GET REGISTER #
  78.                     AND   #$0F
  79.                     STA   MDTA,Y      
  80.                     LDA   #$07         ;SEND REGISTER #
  81.                     STA   MSTS,Y
  82.                     LDA   #$04
  83.                     STA   MSTS,Y
  84.                     LDA   DATA        ;GET DATA BYTE
  85.                     STA   MDTA,Y
  86.                     LDA   #$06         ;SEND DATA BYTE
  87.                     STA   MSTS,Y
  88.                     LDA   #$04
  89.                     STA   MSTS,Y
  90.                     RTS   
  91. ;
  92. INITMOCK            LDA   #$FF         ;INIT
  93.                     STA   MSLOT+$03
  94.                     STA   MSLOT+$83
  95.                     LDA   #$07
  96.                     STA   MSLOT+$02
  97.                     STA   MSLOT+$82
  98.                     LDA   #$00         ;RESET ALL PARMS TO 0
  99.                     STA   MSTS
  100.                     STA   MSLOT+$80
  101.                     LDA   #$04
  102.                     STA   MSTS
  103.                     STA   MSLOT+$80
  104.                     RTS
  105. ;
  106. ;;;ALLOW USER TO PICK SPEAKER
  107. ;;;                    LDA   #$00         ;SPEAKER= LEFT
  108. ;;;                    STA   SPEAKER
  109. SETNOISE            LDA   #$07         ;ENABLE
  110.                     STA   REGISTER
  111.                     LDA   #$07         ; ALL NOISE
  112.                     STA   DATA
  113.                     JSR   POKEREG        ;SEND IT 
  114.                     LDA   #$08
  115.                     STA   REGISTER
  116.                     LDA   #$10
  117.                     STA   DATA
  118.                     JSR   POKEREG
  119.                     INC   REGISTER
  120.                     JSR   POKEREG
  121.                     INC   REGISTER
  122.                     JSR   POKEREG
  123.                     RTS
  124. ;
  125. SOUNDNOW            LDA   #$0D
  126.                     STA   REGISTER
  127.                     LDA   #$09         ;ENVELOPE SHAPE
  128.                     STA   DATA
  129.                     JSR   POKEREG
  130.                     RTS   
  131. ;
  132. EOF                 BRK
  133. ;
  134. ;
  135. ;
  136. ;*===========*
  137. ;* SECTION 2 *
  138. ;*===========*
  139. ;this can be called at end of BASIC program using CALL 2049
  140. ;
  141. QUIT     LDA       #<BGN
  142.          STA       TXTTAB+1
  143.          LDA       #>BGN
  144.          STA       TXTTAB
  145.          LDA       #$00
  146.          STA       BGN
  147.          STA       BGN+1
  148.          STA       BGN+2
  149.          JMP       DOSVEC
  150. ;
  151. ;*===========*
  152. ;* SECTION 3 *
  153. ;*===========*
  154. ;this section gets written over by your BASIC program
  155. ;only used if running under DOS 3.3 - it is a one line program
  156. ;
  157. PGRM     BRK
  158.          DW        PGRM1
  159.          DW        $000A
  160.          DFB       $BA       ;TOKEN FOR PRINT
  161.          DFB       $22,$04   ;"ctrl-D
  162. ;
  163. ;*** EDASM SETS HI BIT OF ASCII CHARACTERS - WE'LL GET RID OF THEM LATER
  164. RUNCMD   ASC       'RUN '
  165.          ASC       'DRUMMACH.BAS'      ;CHANGE TO YOUR BASIC PGM NAME
  166. ;
  167.          DFB       $00       ;MARKER FOR END OF STATEMENT
  168. PGRM1    BRK
  169.          BRK
  170. ;
  171. ;*===========*
  172. ;* SECTION 4 *
  173. ;*===========*
  174. ;set up ptrs to new program and vector to quit exit
  175. ;
  176. STARTUP  LDA       #<PGRM+1
  177.          STA       TXTTAB+1
  178.          LDA       #>PGRM+1
  179.          STA       TXTTAB
  180.          LDA       #<QUIT
  181.          STA       BGN+2
  182.          LDA       #>QUIT
  183.          STA       BGN+1
  184. ;
  185. ; you can add extra stuff here
  186. ; ex: &vectors, reset vectors, interface initialization, welcome message
  187. ;
  188. ;*===========*
  189. ;* SECTION 5 *
  190. ;*===========*
  191. ;used to run the basic program from PRODOS - setup filename at bottom
  192. ;
  193.          LDA       $BF00
  194.          CMP       #$4C
  195.          BNE       NOPRODOS
  196.          LDX       CMD
  197.          INX
  198.          LDA       #$8D
  199. STR      STA       BUF-1,X
  200.          DEX
  201.          BMI       RUNPRO
  202.          LDA       CMD,X
  203.          JMP       STR
  204. ;
  205. RUNPRO   JSR       $BE03     ;BI VECTOR
  206.          LDA       $BE0F     ;IF ERROR
  207.          JSR       $BE0C     ;PRINT MSG
  208.          RTS
  209. ;
  210. ; ***================================*** 
  211. ; *** SET UP PRODOS RUN COMMAND HERE ***
  212. ; ***================================***
  213. CMD      DFB       16                  ; LENGTH OF STRING BELOW
  214.          ASC       'RUN DRUMMACH.BAS'  ; (EDASM SETS HI BITS FOR US)
  215. ;
  216. ; ***-----------------***
  217. ; *** DOS 3.3 ROUTINE ***
  218. ; ***-----------------***
  219. NOPRODOS LDX       #$00      ;FOR DOS 3.3, CONVERT PGM NAME TO 
  220. ASCLOOP  LDA       RUNCMD,X  ;ASCII WITH HI BIT CLEAR.
  221.          BEQ       RUNIT
  222.          AND       #$7F
  223.          STA       RUNCMD,X
  224.          INX
  225.          BNE       ASCLOOP
  226. ;
  227. RUNIT    JMP       RUN
  228.          BRK
  229. ;
  230.