home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
pdoseric.hdv
/
SOURCE
/
TESTCTRL.SRC.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
6KB
|
244 lines
;
; JOYCTRL - JOYSTICK MIDI CONTROLLERS WITH MIDI THRU
; NOTE: USES 65C02 INSTRUCTIONS!!!
;
XTOUT EQU $C064
YTOUT EQU $C065
PTRIG EQU $C070
;
QHEAD EQU $06
QTAIL EQU $08
;
ORG $6000
;
JMP STARTPGM
;
; PUBLIC VARIABLES:
;
XUPDBYTE DFB $02 ;WHICH BYTE OF THE MESSAGE TO UPDATE (1 OR 2)
XMSG0 DFB $E0 ;STATUS BYTE OF MESSAGE FOR X AXIS
XMSG1 DFB $00 ;DATABYTE 1
XMSG2 DFB $00 ;DATABYTE 2
;
YUPDBYTE DFB $02
YMSG0 DFB $B0
YMSG1 DFB $01 ;MODULATION
YMSG2 DFB $00
;
KEYDOWN DFB $00
PB0DOWN DFB $00
PB1DOWN DFB $00
;
;PRIVATE VARIABLES
;
ANOMSG0 DFB $B0
ANOMSG1 DFB 123
ANOMSG2 DFB $00
;
JOYX DFB $00
JOYY DFB $00
JOYXPREV DFB $00
JOYYPREV DFB $00
JOYXPRV2 DFB $00
JOYYPRV2 DFB $00
;
STARTPGM LDA #$13 ;INITIALIZE MIDI INTERFACE
STA $C0A8
LDA #$11
STA $C0A8
LDA #$0 ;INITIALIZE VARIABLES
STA KEYDOWN
STA PB0DOWN
STA PB1DOWN
;
MAINLOOP LDA $C0A8 ;CHK MIDI
AND #$01 ;DID WE GET MIDI DATA
BEQ JOY0 ;NO - CONTINUE PROCESSING
LDA $C0A9 ;YES- GET MIDI BYTE
CMP #$F8
BCS MAINLOOP ;DON'T STORE REALTIME MSGS
STA $C0A9
DFB $80 ;BRA
DFB $ED ;CHKMIDI
;
JOY0 LDX #$00
LDY #$00
LDA #$80
SEC
BIT PTRIG
JOY1 BIT XTOUT
BPL JOY2
INX
BNE JOY3
JOY2 NOP
NOP
JOY3 BIT YTOUT
BPL JOY4
INY
BNE JOY5
JOY4 NOP
NOP
JOY5 PHA
LDA $C0A8 ;CHECK MIDI
AND #$01
BEQ CONT1
LDA $C0A9 ;MIDI THRU
CMP #$F8
BCS CONT2A
STA $C0A9
CONT0 CLV
BVC CONT2
CONT1 NOP
NOP
CONT2A NOP
NOP
NOP
NOP
CONT2 PLA
SBC #$01
BCS JOY1
LDA XTABLE,X
STA JOYX
LDA YTABLE,Y
STA JOYY
;
CHKM1 LDA $C0A8 ;CHKMIDI
AND #$01 ;DID WE GET MIDI DATA
BEQ CHKPDL0C ;NO - CONTINUE PROCESSING
LDA $C0A9 ;YES- GET MIDI BYTE
CMP #$F8
BCS CHKM1 ;DON'T STORE REALTIME MSGS
STA $C0A9
DFB $80 ;BRA
DFB $ED ;CHKMIDI
;
CHKPDL0C LDA JOYX
CMP JOYXPREV ;DID PADDLE X CHANGE
BEQ CHKM2
CMP JOYXPRV2 ;CHK PREVIOUS 2 VALUES OF PDLX
BEQ CHKM2
LDY JOYXPREV
STY JOYXPRV2
STA JOYXPREV
;
LDY XUPDBYTE ;STORE PADDLE VALUE IN MESSAGE
STA XMSG0,Y
;
CHKM1A LDA $C0A8 ;CHKMIDI
AND #$01 ;DID WE GET MIDI DATA
BEQ SEND1 ;NO - CONTINUE PROCESSING
LDA $C0A9 ;YES- GET MIDI BYTE
CMP #$F8
BCS CHKM1A ;DON'T STORE REALTIME MSGS
STA $C0A9
DFB $80 ;BRA
DFB $ED ;CHKMIDI
;
SEND1 LDA XMSG0
STA $C0A9
WT1 LDA $C0A8
AND #$02
BEQ WT1
LDA XMSG1
STA $C0A9
WT2 LDA $C0A8
AND #$02
BEQ WT2
LDA XMSG2
STA $C0A9
WT3 LDA $C0A8
AND #$02
BEQ WT3
;
CHKM2 LDA $C0A8 ;CHKMIDI
AND #$01 ;DID WE GET MIDI DATA
BEQ CHKPDL1C ;NO - CONTINUE PROCESSING
LDA $C0A9 ;YES- GET MIDI BYTE
CMP #$F8
BCS CHKM2 ;DON'T STORE REALTIME MSGS
STA $C0A9
DFB $80 ;BRA
DFB $ED ;CHKMIDI
;
CHKPDL1C LDA JOYY
CMP JOYYPREV ;DID PADDLE Y CHANGE
BEQ JMPBACK
CMP JOYYPRV2 ;CHK PREVIOUS 2 VALUES OF PDLY
BEQ JMPBACK
LDY JOYYPREV
STY JOYYPRV2
STA JOYYPREV
;
LDY YUPDBYTE ;STORE PADDLE VALUE IN MESSAGE
STA YMSG0,Y
;
LDA YMSG0
STA $C0A9
WAIT1 LDA $C0A8
AND #$02
BEQ WAIT1
LDA YMSG1
STA $C0A9
WAIT2 LDA $C0A8
AND #$02
BEQ WAIT2
LDA YMSG2
STA $C0A9
WAIT3 LDA $C0A8
AND #$02
BEQ WAIT3
;
JMPBACK LDA $C061
BMI PB0
LDA $C062
BMI PB1
LDA $C000
BMI KEY
JMP MAINLOOP
;
PB0 LDA #$01
STA PB0DOWN
JSR ALLOFF
WAITUP0 LDA $C061
BMI WAITUP0
JMP MAINLOOP
;
PB1 LDA #$01
STA PB1DOWN
JSR ALLOFF
WAITUP1 LDA $C062
BMI WAITUP1
JMP MAINLOOP
;
KEY STA KEYDOWN
LDA $C010
RTS
;
ALLOFF LDA ANOMSG0
STA $C0A9
WA1 LDA $C0A8
AND #$02
BEQ WA1
LDA ANOMSG1
STA $C0A9
WA2 LDA $C0A8
AND #$02
BEQ WA2
LDA ANOMSG2
STA $C0A9
WA3 LDA $C0A8
AND #$02
BEQ WA3
RTS
;
XTABLE DFB 0,0,4,4,8,8,12,12,16,16,20,20,24,24,28,28
DFB 32,32,36,36,40,40,44,44,48,48,52,52,56,56,60,60
DFB 64,64,68,68,72,72,76,76,80,80,84,84,88,88,92,92
DFB 96,96,100,100,104,104,108,108,112,112,116,116,120
DFB 120,124,124,124,124,124,124,124,124,124,124
YTABLE DFB 124,124,120,120,116,116,112,112,108,108,104,104,100
DFB 100,96,96,92,92,88,88,84,84,80,80,76,76,72,72,68,68,64
DFB 64,60,60,56,56,52,52,48,48,44,44,40,40,36,36,32,32
DFB 28,28,24,24,20,20,16,16,12,12,8,8,4,4,0,0,0,0,0,0,0,0,0
;