; ; 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 MAINLOOP 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 SEC SBC #$01 BCS JOY1 LDA XTABLE,X STA JOYX LDA YTABLE,Y STA JOYY ; 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 CHKPDL1C STPRVX LDY JOYXPREV STY JOYXPRV2 STA JOYXPREV ; LDY XUPDBYTE ;STORE PADDLE VALUE IN MESSAGE STA XMSG0,Y ; SEND1 LDA XMSG0 JSR XMITBYTE LDA XMSG1 JSR XMITBYTE LDA XMSG2 JSR XMITBYTE ; CHKPDL1C LDA JOYY CMP JOYYPREV ;DID PADDLE Y CHANGE BEQ JMPBACKJ CMP JOYYPRV2 ;CHK PREVIOUS 2 VALUES OF PDLY BEQ JMPBACKJ BNE STPRVY JMPBACKJ JMP JMPBACK STPRVY LDY JOYYPREV STY JOYYPRV2 STA JOYYPREV ; LDY YUPDBYTE ;STORE PADDLE VALUE IN MESSAGE STA YMSG0,Y ; LDA YMSG0 JSR XMITBYTE LDA YMSG1 JSR XMITBYTE LDA YMSG2 JSR XMITBYTE ; 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 ; XMITBYTE STA $C0A9 WTD1A LDA $C0A8 AND #$02 BEQ WTD1A RTS ; XTABLE DFB 10,10,12,12,14,14,16,16,18,18,20,20 DFB 22,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,38,40,40 DFB 42,42,44,44,46,46,48,48,50,50,52,52,54,54,56,56,58,58,60,60 DFB 62,62,64,64,68,68,70,70,72,72,74,74,76,76,80,80,82,82,84,84 DFB 86,86,88,88,90,90,92,92,94,94,96,96,98,98,100,100,102,102,104,104 DFB 106,106,108,108,110,110,112,112,114,114,116,116,118,118,120,120 DFB 122,122,124,124,126,126,126,126,126,126,126,126,126,126,126,126 YTABLE DFB 126,126,124,124,122,122 DFB 120,120,118,118,116,116,114,114,112,112,110,110,108,108,106,106 DFB 104,104,102,102,100,100,98,98,96,96,94,94,92,90,90,88,88,86,86 DFB 84,84,82,82,80,80,78,78,76,76,74,74,72,72,70,70,68,68,64,64,62,62 DFB 60,60,58,58,56,56,54,54,52,52,50,50,48,48,46,46,44,44,42,42,40,40 DFB 38,38,36,36,34,34,32,32,30,30,28,28,26,26,24,24,22,22,20,20 DFB 18,18,16,16,14,14,12,12,10,10,8,8,6,6,4,4,2,2,0,0 ;