home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-10-08 | 5.6 KB | 199 lines | [04] ASCII Text (0x0000) |
- ; GUITAR.SC0: APPLE GUITAR - BY ERIC RANGELL
- ;
- ; RESPONDS TO KEYBOARD INPUT:
- ; TYPE: ZSXDCVGBHNJM , OA/SA choose chord OA=minor SA=7th
- ; TO SELECT: C#D#EF#G#A#B
- ;
- ; number keys 6 5 4 3 2 1 used to play strings
- ;
- ; left/right arrow keys used to move fingers before string played,
- ; as in a bass run.
- ;
- ;=======================================
- COUT EQU $FDED ;APPLE CHARACTER OUTPUT ROUTINE
- MIDIOUT EQU $C0A9 ;MIDI OUTPUT REGISTER. (MIDIOUT-1 = STATUS REG)
- KEYIN EQU $C000 ;APPLE KEYBOARD INPUT REGISTER
- KEYSTRB EQU $C010 ;APPLE KEYBOARD STROBE TO RESET KEYIN AFTER READ
- BUTTON0 EQU $C061 ;PADDLE BUTTON 0 (OPEN APPLE KEY)
- BUTTON1 EQU $C062 ;PADDLE BUTTON 1 (SOLID APPLE KEY)
- ;
- ORG $6000
- ;initialize midi
- LDA #$13
- STA MIDIOUT-1
- LDA #$11
- STA MIDIOUT-1
- ;SET UP GUITAR SOUND
- LDA #$C0
- JSR XMIT
- LDA #$08
- JSR XMIT
- LDA #$09
- JSR XMIT
- ;GET KEYBOARD INPUT
- LDA #$8D
- JSR COUT
- LDA #$BE
- JSR COUT
- WAITKEY LDA KEYIN
- BPL WAITKEY
- LDA KEYSTRB
- AND #$7F
- STA USERKEY
- LDA BUTTON0
- AND #$80 ;HI BIT HAS STATUS OF BUTTONS
- STA OA
- LDA BUTTON1
- AND #$80
- STA SA
- LDA USERKEY
- CMP #$1B ;IF USER HIT ESC, EXIT.
- BEQ GETOUT
- JSR PRCSKEY
- JMP WAITKEY
- GETOUT RTS
- ;=================================
- ;SEND MIDI BYTE SUBROUTINE
- XMIT STA MIDIOUT
- WAITXMIT LDA MIDIOUT-1
- AND #$02
- BEQ WAITXMIT
- RTS
- ;===================================
- PRCSKEY LDX KEYTABL
- NEXTKEY LDA KEYTABL,X
- AND #$7F
- CMP USERKEY
- BEQ GOTIT
- DEX
- BNE NEXTKEY
- RTS ;NO MATCH FOUND- DO NOTHING
- GOTIT STX KEYNUM
- LDA KEYNUM
- CMP #15 ;CHECK IF LETTER A-G
- BCC CHORDCHG
- CMP #21
- BCC STRING ;IF PLAYING A STRING
- BEQ LEFT ;OR AN ARROW
- CMP #22
- BEQ RIGHT
- RTS ;INVALID KEY- DO NOTHING
- ;===============================
- LEFT INC ADJUST
- RTS
- ;===============================
- RIGHT DEC ADJUST
- RTS
- ;===============================
- STRING LDA KEYNUM
- SEC
- SBC #15 ;CONVERT TO 0-5 RANGE
- TAX
- LDA #$90 ;NOTE ON WITH CURRENT VALUE
- JSR XMIT
- LDA CURRNUMS,X
- CLC
- ADC ADJUST ;IF USER ADJUSTED FINGER LEFT/RIGHT
- STA CURRNUMS,X ;SAVE USER'S ADJUSTMENT
- JSR XMIT
- LDA #$40
- JSR XMIT
- LDA #$00 ;AND ZERO ADJUSTMENT REGISTER
- STA ADJUST
- RTS
- ;=========================================
- CHORDCHG LDX KEYNUM ;PRINT KEY
- LDA KEYMAP1,X
- JSR COUT
- LDA KEYMAP2,X
- JSR COUT
- LDA #$A0
- JSR COUT
- LDX KEYNUM ;RANGE OF 1-14
- DEX ;0-13
- TXA
- ASL A ;*2 = 0-26
- CLC
- ADC KEYNUM
- SEC
- SBC #$01 ;ADD ONE MORE TO GET *3
- ASL A ;*2 TO GET *6. NOW IN RANGE 0-78
- TAX ;SAVE OFFSET IN X
- LDA OA
- BNE MINORSET ;DETERMINE WHICH CHORD TYPE TO SET UP
- LDA SA
- BNE SEVENSET
- BEQ MAJORSET
- ;
- MAJORSET LDY #$00 ;FOR EACH STRING
- ADDLOOP1 LDA MAJOR,X ;GET OFFSET OF FINGER
- CLC
- ADC BASENUMS,Y ;ADD TO BASE
- STA CURRNUMS,Y
- INX ;GET NEXT OFFSET FOR NEXT STRING
- INY
- CPY #$06
- BCC ADDLOOP1
- LDA #$CD ;PRINT "MA "
- JSR COUT
- LDA #$C1
- JSR COUT
- JSR PRNTCHRD
- RTS
- ;
- MINORSET LDY #$00
- ADDLOOP2 LDA MINOR,X
- CLC
- ADC BASENUMS,Y
- STA CURRNUMS,Y
- INX
- INY
- CPY #$06
- BCC ADDLOOP2
- LDA #$CD ;PRINT "MI "
- JSR COUT
- LDA #$C9
- JSR COUT
- JSR PRNTCHRD
- RTS
- ;
- SEVENSET LDY #$00
- ADDLOOP3 LDA SEVENTH,X
- CLC
- ADC BASENUMS,Y
- STA CURRNUMS,Y
- INX
- INY
- CPY #$06
- BCC ADDLOOP3
- LDA #$B7 ;PRINT "7 "
- JSR COUT
- LDA #$A0
- JSR COUT
- JSR PRNTCHRD
- RTS
- ;
- PRNTCHRD LDA #$BA
- JSR COUT
- LDX #$00
- PRNTLOOP LDA #$A0
- JSR COUT
- LDA CURRNUMS,X ;GET NOTES OF CHORD
- ASL A ;GET OFFSET TO MIDI CHAR TABLE
- TAY
- LDA MIDINOTE,Y
- JSR COUT
- INY
- LDA MIDINOTE,Y
- JSR COUT
- INX
- CPX #$06
- BNE PRNTLOOP
- LDA #$8D
- JSR COUT
- LDA #$BE
- JSR COUT
- RTS
- ;
- CHN GUITAR.SC1
-