; ; 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 ; BUFFER DFB $00,$20 ; ;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 LDA BUFFER STA QHEAD STA QTAIL LDA BUFFER+1 STA QHEAD+1 STA QTAIL+1 JMP MAINLOOP ; CHKMIDI LDA $C0A8 ;CHK MIDI AND #$01 ;DID WE GET MIDI DATA BEQ WOUT3 ;NO - CONTINUE PROCESSING LDA $C0A9 ;YES- GET MIDI BYTE CMP #$F8 BCS CHKMIDI ;DON'T STORE REALTIME MSGS PHA WTD0 LDA $C0A8 AND #$02 BEQ WTD0 PLA STA $C0A9 JMP CHKMIDI WOUT3 RTS ; ; LDA $C0A8 ; AND #$01 ; BEQ WTD1 ; LDA $C0A9 ; CMP #$F8 ; BCS WTD1 ; DFB $92 ; DFB QHEAD ; INC QHEAD ; JMP WTD1 ;WOUT1 LDA QTAIL ; CMP QHEAD ; BEQ WOUT2 ; DFB $B2 ; DFB QTAIL ; STA $C0A9 ; INC QTAIL ; JMP WTD1 ;WOUT2 JMP CHKMIDI ;WOUT3 RTS ; MAINLOOP JSR CHKMIDI JOY0 LDX #$00 LDY #$00 LDA #$80 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 ; CHKMID1 LDA $C0A8 ;CHK MIDI AND #$01 ;DID WE GET MIDI DATA BEQ WOUT3J ;NO - CONTINUE PROCESSING LDA $C0A9 ;YES- GET MIDI BYTE CMP #$F8 BCS CHKMID1 ;DON'T STORE REALTIME MSGS PHA WTD1J LDA $C0A8 AND #$02 BEQ WTD1J PLA STA $C0A9 JMP CHKMID1 WOUT3J PLA ; SEC SBC #$01 BCS JOY1 LDA XTABLE,X STA JOYX LDA YTABLE,Y STA JOYY ; JSR CHKMIDI ; CHKPDL0C LDA JOYX CMP JOYXPREV ;DID PADDLE X CHANGE BEQ CHKM2J CMP JOYXPRV2 ;CHK PREVIOUS 2 VALUES OF PDLX BEQ CHKM2J BNE STPRVX CHKM2J JMP CHKM2 STPRVX LDY JOYXPREV STY JOYXPRV2 STA JOYXPREV ; LDY XUPDBYTE ;STORE PADDLE VALUE IN MESSAGE STA XMSG0,Y ; CHKM1A JSR CHKMIDI ; CHN JOYTEST.SC1