VIC_SPRITE_MSB=$D010 VIC_SPRITE_ENABLE=$D015 VIC_SPRITE_YEXPAND=$D017 VIC_SPRITE_PRIORITY=$D01B VIC_SPRITE_MULTICOLOUR=$D01C VIC_SPRITE_XEXPAND=$D01D VIC_BORDERCOLOUR=$D020 VIC_BGCOLOUR= $D021 VIC_BGCOLOUR_MC1=$D022 VIC_BGCOLOUR_MC2=$D023 VIC_SPRITE_MC1= $D025 VIC_SPRITE_MC2= $D026 CIA_1 = $dc00 ; CIA#1 (Port Register A) CIA_2 = $dc01 ; CIA#2 (Port Register B) CIA_ddra = $dc02 ; CIA#1 (Data Direction Register A) CIA_ddrb = $dc03 ; CIA#2 (Data Direction Register B) XPADDLE= $d419 MOUSEX= $0400 MOUSEY= $0401 MOUSEX_SPEED= $0428 ;$19 MOUSEY_SPEED= $0429 ;$1a MDBUTTON= $0459 ; 10 SYS2064 *=$0801 BYTE $0B, $08, $0A, $00, $9E, $32, $30, $36, $34, $00, $00, $00 *=$0810 init ; copy sprite data to sprite location ldy #$3F @in10 lda spritedata,y sta $0340,y dey bpl @in10 lda #$0D ;set sprite pointer sta $07F8 lda #$01 ;switch on sprite 1 sta VIC_SPRITE_ENABLE lda #$07 ;set sprite colour to yellow sta $D027 lda #%01111111 sta $DC0D ;"Switch off" interrupts signals from CIA-1 and $D011 sta $D011 ;Clear most significant bit in VIC's raster register lda #$51 sta $D012 ; set raster to occour 1 lines down lda #<irq_handler sta $0314 ; set low bit of start lda #>irq_handler sta $0315 ; set high bit of start lda #%00000001 sta $D01A @endloop jmp @endloop irq_handler LDA #$00 STA VIC_BORDERCOLOUR jsr handlekeyboard jsr handlemouseneos JSR DRAWSPRITE INC VIC_BORDERCOLOUR asl $D019 JMP $EA31 DRAWSPRITE lda MOUSEX clc adc #$0C asl a pha bcc @ds10 lda VIC_SPRITE_MSB ora #$01 bne @ds20 @ds10 lda VIC_SPRITE_MSB and #$FE @ds20 sta VIC_SPRITE_MSB pla sta $D000 ; sprite X clc lda MOUSEY adc #$32 sta $D001 ; sprite y rts handlekeyboard lda #$0 sta CIA_ddra ;Port A data direction register. lda #$0 sta CIA_ddrb ;Port B data direction register. @up lda #%11111101 ; sta CIA_1 lda CIA_2 ; load column information and #%00000010 ; test 'w' key bne @noup ; zero flag is not set -> skip next command inc VIC_BGCOLOUR @noup rts handlemouseneos @LC020 jsr @LC100 lda #$00 bcc @LC029 lda #$02 @LC029 sta MDBUTTON jsr @LC190 lda CIA_2 ; left button and #$10 BNE @RT INC MDBUTTON @RT rts @LC100 ; READ MOUSE lda #$10 sta CIA_ddrb ;Port B data direction register. LDA #$ef sta CIA_2 ;PORT B lda CIA_2 ;PORT B, read 4 bits asl a asl a asl a asl a sta MOUSEX_SPEED ; TIMES BY 16 AND STORE AT $19 LDA #$10 sta CIA_2 lda CIA_2 ; read 4 bits and #$0F ora MOUSEX_SPEED sta MOUSEX_SPEED LDA #$EF sta CIA_2 lda CIA_2 asl a asl a asl a asl a sta MOUSEY_SPEED LDA #$10 sta CIA_2 lda CIA_2 and #$0F ora MOUSEY_SPEED sta MOUSEY_SPEED lda XPADDLE cmp #$FF rts @LC190 ; TRANSLATE BASED ON SPEED lda MOUSEX_SPEED bmi @LC1A2 sec lda MOUSEX sbc MOUSEX_SPEED bcs @LC1AF lda #$00 beq @LC1AF @LC1A2 sec lda MOUSEX sbc MOUSEX_SPEED bcs @LC1AD cmp #$A0 bcc @LC1AF @LC1AD lda #$9F @LC1AF sta MOUSEX lda MOUSEY_SPEED bmi @LC1C0 sec lda MOUSEY sbc MOUSEY_SPEED bcs @LC1CD lda #$00 beq @LC1CD @LC1C0 sec lda MOUSEY sbc MOUSEY_SPEED bcs @LC1CB cmp #$C8 bcc @LC1CD @LC1CB lda #$C7 @LC1CD sta MOUSEY rts spritedata byte $FC,$00,$00,$F0,$00,$00,$F0,$00,$00,$D8,$00,$00,$8C,$00,$00,$86,$00,$00,$03 bytes 63
handlekeyboard lda #$ff ; output sta CIA_ddra ; $DC02, Port A data direction register. lda #$0 sta CIA_ddrb ; $DC03, Port B data direction register.
check the test program in the VICE repo:
But, is the other control port not an option? This would likely help.