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