home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / pdoseric.hdv / SOURCE / GUITAR.SC0.txt < prev    next >
Text File  |  2020-08-13  |  6KB  |  199 lines

  1. ; GUITAR.SC0:  APPLE GUITAR - BY ERIC RANGELL
  2. ;
  3. ; RESPONDS TO KEYBOARD INPUT:
  4. ;   TYPE:      ZSXDCVGBHNJM , OA/SA choose chord OA=minor SA=7th
  5. ;   TO SELECT: C#D#EF#G#A#B 
  6. ;
  7. ; number keys 6 5 4 3 2 1 used to play strings
  8. ;
  9. ; left/right arrow keys used to move fingers before string played,
  10. ; as in a bass run.
  11. ;
  12. ;=======================================
  13. COUT     EQU       $FDED     ;APPLE CHARACTER OUTPUT ROUTINE
  14. MIDIOUT  EQU       $C0A9     ;MIDI OUTPUT REGISTER. (MIDIOUT-1 = STATUS REG)
  15. KEYIN    EQU       $C000     ;APPLE KEYBOARD INPUT REGISTER
  16. KEYSTRB  EQU       $C010     ;APPLE KEYBOARD STROBE TO RESET KEYIN AFTER READ
  17. BUTTON0  EQU       $C061     ;PADDLE BUTTON 0 (OPEN APPLE KEY)
  18. BUTTON1  EQU       $C062     ;PADDLE BUTTON 1 (SOLID APPLE KEY)
  19. ;         
  20.          ORG       $6000
  21. ;initialize midi
  22.          LDA       #$13
  23.          STA       MIDIOUT-1
  24.          LDA       #$11
  25.          STA       MIDIOUT-1
  26. ;SET UP GUITAR SOUND
  27.          LDA       #$C0
  28.          JSR       XMIT
  29.          LDA       #$08
  30.          JSR       XMIT
  31.          LDA       #$09
  32.          JSR       XMIT
  33. ;GET KEYBOARD INPUT
  34.          LDA       #$8D
  35.          JSR       COUT
  36.          LDA       #$BE
  37.          JSR       COUT
  38. WAITKEY  LDA       KEYIN
  39.          BPL       WAITKEY
  40.          LDA       KEYSTRB
  41.          AND       #$7F
  42.          STA       USERKEY
  43.          LDA       BUTTON0
  44.          AND       #$80      ;HI BIT HAS STATUS OF BUTTONS
  45.          STA       OA
  46.          LDA       BUTTON1
  47.          AND       #$80
  48.          STA       SA
  49.          LDA       USERKEY
  50.          CMP       #$1B      ;IF USER HIT ESC, EXIT.
  51.          BEQ       GETOUT
  52.          JSR       PRCSKEY
  53.          JMP       WAITKEY
  54. GETOUT   RTS
  55. ;=================================
  56. ;SEND MIDI BYTE SUBROUTINE
  57. XMIT     STA       MIDIOUT
  58. WAITXMIT LDA       MIDIOUT-1
  59.          AND       #$02
  60.          BEQ       WAITXMIT
  61.          RTS
  62. ;===================================
  63. PRCSKEY  LDX       KEYTABL
  64. NEXTKEY  LDA       KEYTABL,X
  65.          AND       #$7F
  66.          CMP       USERKEY
  67.          BEQ       GOTIT
  68.          DEX
  69.          BNE       NEXTKEY
  70.          RTS                 ;NO MATCH FOUND- DO NOTHING
  71. GOTIT    STX       KEYNUM
  72.          LDA       KEYNUM
  73.          CMP       #15       ;CHECK IF LETTER A-G
  74.          BCC       CHORDCHG
  75.          CMP       #21
  76.          BCC       STRING    ;IF PLAYING A STRING
  77.          BEQ       LEFT      ;OR AN ARROW
  78.          CMP       #22
  79.          BEQ       RIGHT
  80.          RTS                 ;INVALID KEY- DO NOTHING
  81. ;===============================
  82. LEFT     INC       ADJUST
  83.          RTS
  84. ;===============================
  85. RIGHT    DEC       ADJUST
  86.          RTS
  87. ;===============================
  88. STRING   LDA       KEYNUM
  89.          SEC
  90.          SBC       #15       ;CONVERT TO 0-5 RANGE
  91.          TAX
  92.          LDA       #$90      ;NOTE ON WITH CURRENT VALUE
  93.          JSR       XMIT
  94.          LDA       CURRNUMS,X
  95.          CLC
  96.          ADC       ADJUST    ;IF USER ADJUSTED FINGER LEFT/RIGHT
  97.          STA       CURRNUMS,X          ;SAVE USER'S ADJUSTMENT
  98.          JSR       XMIT
  99.          LDA       #$40
  100.          JSR       XMIT
  101.          LDA       #$00      ;AND ZERO ADJUSTMENT REGISTER
  102.          STA       ADJUST
  103.          RTS
  104. ;=========================================
  105. CHORDCHG LDX       KEYNUM    ;PRINT KEY
  106.          LDA       KEYMAP1,X
  107.          JSR       COUT
  108.          LDA       KEYMAP2,X
  109.          JSR       COUT
  110.          LDA       #$A0
  111.          JSR       COUT
  112.          LDX       KEYNUM    ;RANGE OF 1-14
  113.          DEX                 ;0-13
  114.          TXA
  115.          ASL       A         ;*2 = 0-26
  116.          CLC
  117.          ADC       KEYNUM
  118.          SEC
  119.          SBC       #$01      ;ADD ONE MORE TO GET *3
  120.          ASL       A         ;*2 TO GET *6.  NOW IN RANGE 0-78
  121.          TAX                 ;SAVE OFFSET IN X
  122.          LDA       OA        
  123.          BNE       MINORSET  ;DETERMINE WHICH CHORD TYPE TO SET UP
  124.          LDA       SA
  125.          BNE       SEVENSET
  126.          BEQ       MAJORSET
  127. ;
  128. MAJORSET LDY       #$00      ;FOR EACH STRING
  129. ADDLOOP1 LDA       MAJOR,X   ;GET OFFSET OF FINGER
  130.          CLC
  131.          ADC       BASENUMS,Y         ;ADD TO BASE
  132.          STA       CURRNUMS,Y
  133.          INX                 ;GET NEXT OFFSET FOR NEXT STRING
  134.          INY
  135.          CPY       #$06
  136.          BCC       ADDLOOP1
  137.          LDA       #$CD      ;PRINT "MA "
  138.          JSR       COUT
  139.          LDA       #$C1
  140.          JSR       COUT
  141.          JSR       PRNTCHRD
  142.          RTS
  143. ;
  144. MINORSET LDY       #$00
  145. ADDLOOP2 LDA       MINOR,X
  146.          CLC
  147.          ADC       BASENUMS,Y
  148.          STA       CURRNUMS,Y
  149.          INX
  150.          INY
  151.          CPY       #$06
  152.          BCC       ADDLOOP2
  153.          LDA       #$CD      ;PRINT "MI "
  154.          JSR       COUT
  155.          LDA       #$C9
  156.          JSR       COUT
  157.          JSR       PRNTCHRD
  158.          RTS
  159. ;
  160. SEVENSET LDY       #$00
  161. ADDLOOP3 LDA       SEVENTH,X
  162.          CLC
  163.          ADC       BASENUMS,Y
  164.          STA       CURRNUMS,Y
  165.          INX
  166.          INY
  167.          CPY       #$06
  168.          BCC       ADDLOOP3
  169.          LDA       #$B7      ;PRINT "7 "
  170.          JSR       COUT
  171.          LDA       #$A0
  172.          JSR       COUT
  173.          JSR       PRNTCHRD
  174.          RTS
  175. ;
  176. PRNTCHRD LDA       #$BA
  177.          JSR       COUT
  178.          LDX       #$00
  179. PRNTLOOP LDA       #$A0
  180.          JSR       COUT
  181.          LDA       CURRNUMS,X          ;GET NOTES OF CHORD
  182.          ASL       A                   ;GET OFFSET TO MIDI CHAR TABLE
  183.          TAY
  184.          LDA       MIDINOTE,Y
  185.          JSR       COUT
  186.          INY
  187.          LDA       MIDINOTE,Y
  188.          JSR       COUT
  189.          INX
  190.          CPX       #$06
  191.          BNE       PRNTLOOP
  192.          LDA       #$8D
  193.          JSR       COUT
  194.          LDA       #$BE
  195.          JSR       COUT
  196.          RTS      
  197. ;
  198.          CHN       GUITAR.SC1
  199.