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

  1. ; ********************************************
  2. ; * DRUMMACH.SRC - DRUM MACHINE OBJECT
  3. ; * (C) 1993, ERIC RANGELL
  4. ; ********************************************
  5. ;
  6. ;------------GLOBAL EQUATES
  7. RECEIVER EQU $FA
  8. MSG      EQU $FB
  9. MYOBJ    EQU $FD
  10. MYADRS   EQU $FE             ;WILL POINT TO 'BASE' WHEN OBJECT INVOKED
  11. ;
  12. USRVECT  EQU $0A             ;APPLESOFT USR VECTOR - USED TO CALL OBJECTS
  13. ;
  14. ;------------OBJECTS REFERENCED
  15. DRUMMACH EQU  11
  16. MOCKBRD  EQU  10             ;<=== MOCKINGBOARD INTERFACE
  17. ;
  18. ;------------OBJECT HEADER
  19.         ORG $6000
  20. ;
  21.         LDA #$00  ;CALL OBJECT SETUP ROUTINE
  22.         STA $FA
  23.         JSR $000A
  24.         DFB DRUMMACH        ;OBJECT NUMBER
  25.         DFB 0,0,0,0,0,0,0   ;SAVE AREA
  26. BASE    CLV
  27.         BVC CODE
  28. RETCODE DFB $00             ;RETURN CODE
  29. ;
  30. ;==========================================
  31. ; INTERNAL DATA MAINTAINED BY OBJECT:
  32. ;
  33. DRUM                DFB   $01          ; DRUM NUMBER
  34. ;
  35. ; INSTRUMENT DATA: NOISE PERIOD, COARSE TONE PERIOD
  36. ; 0=CYMBAL, 1=HIHAT, 2=SNARE, 3=TOMTOM, 4=BASSDRUM
  37. ;
  38. NOISE    DFB       $01,$01,$04,$10,$1F
  39. COARSE   DFB       $10,$02,$04,$02,$04
  40. ;
  41. DRUMMAP  DFB       $FF,60,52,44,36
  42. ;
  43. INITFLAG DFB 2     ;>0=INITIALIZE MKBD, WILL COUNT DOWN TO ZERO
  44. ;
  45. INITMSG  ASC 'I'
  46. POKEMSG  ASC 'P'
  47. REGISTER DFB $00
  48. DATA     DFB $00
  49. SPKRMSG  DFB 'S'
  50. SPEAKER  DFB $00   ; 0=LEFT 1=RIGHT
  51. ;==========================================
  52. ; METHODS:
  53. ;
  54. ;        D <DRUM #> = BANG DRUM (0-4)
  55. ;        N <MIDI NOTE#> = BANG DRUM CORRESPONDING TO MIDI NOTE #
  56. ;
  57. ;==========================================
  58. CODE     LDY #0
  59.          LDA (MSG),Y
  60.          CMP #'N'
  61.          BNE CODED
  62. ;
  63.          INY
  64.          LDA (MSG),Y        
  65.          AND #$7F
  66.          TAX
  67.          LDA #4
  68.          CLC
  69.          ADC #DRUMMAP-BASE
  70.          TAY
  71.          TXA
  72. LOOP     CMP (MYADRS),Y
  73.          BCC GOTIT
  74.          DEY
  75.          BNE LOOP
  76. GOTIT    TYA
  77.          SEC
  78.          SBC #DRUMMAP-BASE
  79.          LDY #DRUM-BASE
  80.          STA (MYADRS),Y
  81.          CLV
  82.          BVC DRUMNOW
  83. ;
  84. CODEEX   LDY #RETCODE-BASE
  85.          LDA #12
  86.          STA (MYADRS),Y
  87.          SEC   
  88.          RTS 
  89. ;
  90. ;--------
  91. CODED    CMP #'D'        
  92.          BNE CODEEX
  93.          LDY #1
  94.          LDA (MSG),Y
  95.          CMP #5
  96.          BCC STORIT
  97.          LDA #4
  98. STORIT   LDY #DRUM-BASE
  99.          STA (MYADRS),Y
  100. ;
  101. DRUMNOW  LDY #INITFLAG-BASE
  102.          LDA (MYADRS),Y
  103.          BEQ DONTINIT
  104.          SEC
  105.          SBC #1
  106.          STA (MYADRS),Y
  107.          BEQ PHASE2
  108. ;
  109.          LDA #MOCKBRD        ;INIT MOCK
  110.          STA RECEIVER
  111.          LDA #INITMSG-BASE
  112.          CLC
  113.          ADC MYADRS
  114.          STA MSG
  115.          LDA #00
  116.          ADC MYADRS+1
  117.          STA MSG+1
  118.          JSR USRVECT           
  119. ;
  120. PHASE2   LDA #16
  121.          LDY #DATA-BASE
  122.          STA (MYADRS),Y
  123.          LDA #8
  124.          LDY #REGISTER-BASE
  125.          STA (MYADRS),Y
  126. ;
  127.          LDA #MOCKBRD
  128.          STA RECEIVER
  129.          LDA #POKEMSG-BASE
  130.          CLC
  131.          ADC MYADRS
  132.          STA MSG
  133.          LDA #00
  134.          ADC MYADRS+1
  135.          STA MSG+1
  136.          JSR USRVECT           
  137. ;
  138.          LDA #16
  139.          LDY #DATA-BASE
  140.          STA (MYADRS),Y
  141.          LDA #9
  142.          LDY #REGISTER-BASE
  143.          STA (MYADRS),Y
  144. ;
  145.          LDA #MOCKBRD
  146.          STA RECEIVER
  147.          LDA #POKEMSG-BASE
  148.          CLC
  149.          ADC MYADRS
  150.          STA MSG
  151.          LDA #00
  152.          ADC MYADRS+1
  153.          STA MSG+1
  154.          JSR USRVECT           
  155. ;
  156.          CLV
  157.          BVC AROUND
  158. DONTINIT CLV
  159.          BVC DONTINI2
  160. ;
  161. AROUND   LDA #16
  162.          LDY #DATA-BASE
  163.          STA (MYADRS),Y
  164.          LDA #10
  165.          LDY #REGISTER-BASE
  166.          STA (MYADRS),Y
  167. ;
  168.          LDA #MOCKBRD
  169.          STA RECEIVER
  170.          LDA #POKEMSG-BASE
  171.          CLC
  172.          ADC MYADRS
  173.          STA MSG
  174.          LDA #00
  175.          ADC MYADRS+1
  176.          STA MSG+1
  177.          JSR USRVECT
  178. ;
  179.          LDA #$07            ;ENABLE=7 (ALL NOISE)
  180.          LDY #REGISTER-BASE
  181.          STA (MYADRS),Y
  182.          LDY #DATA-BASE
  183.          STA (MYADRS),Y
  184.          LDA #MOCKBRD
  185.          STA RECEIVER
  186.          LDA #POKEMSG-BASE
  187.          CLC
  188.          ADC MYADRS
  189.          STA MSG
  190.          LDA #00
  191.          ADC MYADRS+1
  192.          STA MSG+1
  193.          JSR USRVECT           
  194. ;                                      
  195. DONTINI2 LDY #DRUM-BASE
  196.          LDA (MYADRS),Y
  197.          CLC
  198.          ADC #NOISE-BASE
  199.          TAY
  200.          LDA (MYADRS),Y
  201.          LDY #DATA-BASE
  202.          STA (MYADRS),Y
  203.          LDA #6              ;NOISE PERIOD
  204.          LDY #REGISTER-BASE
  205.          STA (MYADRS),Y
  206. ;
  207.          LDA #MOCKBRD
  208.          STA RECEIVER
  209.          LDA #POKEMSG-BASE
  210.          CLC
  211.          ADC MYADRS
  212.          STA MSG
  213.          LDA #00
  214.          ADC MYADRS+1
  215.          STA MSG+1
  216.          JSR USRVECT           
  217. ;
  218.          LDY #DRUM-BASE
  219.          LDA (MYADRS),Y
  220.          CLC
  221.          ADC #COARSE-BASE
  222.          TAY
  223.          LDA (MYADRS),Y
  224.          LDY #DATA-BASE
  225.          STA (MYADRS),Y
  226.          LDA #12              ;COARSE PERIOD
  227.          LDY #REGISTER-BASE
  228.          STA (MYADRS),Y
  229. ;
  230.          LDA #MOCKBRD
  231.          STA RECEIVER
  232.          LDA #POKEMSG-BASE
  233.          CLC
  234.          ADC MYADRS
  235.          STA MSG
  236.          LDA #00
  237.          ADC MYADRS+1
  238.          STA MSG+1
  239.          JSR USRVECT           
  240. ;
  241.          LDA #9
  242.          LDY #DATA-BASE
  243.          STA (MYADRS),Y
  244.          LDA #13              ;ENV SHAPE
  245.          LDY #REGISTER-BASE
  246.          STA (MYADRS),Y
  247. ;
  248.          LDA #MOCKBRD
  249.          STA RECEIVER
  250.          LDA #POKEMSG-BASE
  251.          CLC
  252.          ADC MYADRS
  253.          STA MSG
  254.          LDA #00
  255.          ADC MYADRS+1
  256.          STA MSG+1
  257.          JSR USRVECT           
  258. ;
  259. ; TOGGLE SPEAKER 
  260. ;
  261.          LDY #SPEAKER-BASE
  262.          LDA (MYADRS),Y
  263.          EOR #1
  264.          STA (MYADRS),Y
  265. ;
  266.          LDA #MOCKBRD        ;SET SPEAKER
  267.          STA RECEIVER
  268.          LDA #SPKRMSG-BASE
  269.          CLC
  270.          ADC MYADRS
  271.          STA MSG
  272.          LDA #00
  273.          ADC MYADRS+1
  274.          STA MSG+1
  275.          JSR USRVECT           
  276. ;
  277.          RTS
  278.