| |
jamiefuller Account closed
Registered: Mar 2018 Posts: 25 |
NEOS mouse, losing my hair...
Hi All,
Please can anyone help, I am trying to read the signal from the NEOS mouse, I have this bit working based on some code from the c64-wiki and a working mouse pointer.
But no matter what I do it massively interferes with the keyboard.
I have heard the mouse works with GEOS so it must be theoretically possible (unless the NEOS only works with GEOS in joystick mode).
The source code is below and also on pastebin, I've tried to make it as readable as possible but my code isn't always the tidiest. :)
https://pastebin.com/SSbUbvhx
basically it runs every frame to poll the mouse, it puts the values into some variables (set to the screen in this example to make it visible)
the background colour should only change if the W key is being pressed, but it triggers even when not pressing due to the mouse.
Would be grateful of any advice.
Thanks
Jamie
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
|
|
... 41 posts hidden. Click here to view all posts.... |
| |
Oswald
Registered: Apr 2002 Posts: 5017 |
point taken :) |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1378 |
I started wondering if one could clear the interference by clocking the data some more before the mouse had a chance to move again, but then realised a) the lines are active low, so a delta of zero would actually be bad and b) the keyboard itself is going to produce spurious clocks from row or column 4.
So I dropped that idea before starting to write experimental code. |
| |
soci
Registered: Sep 2003 Posts: 473 |
Connect it to a user port 4 player adapter instead.
That's how I avoid keyboard interference of Amiga mice in Funkpaint. |
| |
JackAsser
Registered: Jun 2002 Posts: 1989 |
Quote: Connect it to a user port 4 player adapter instead.
That's how I avoid keyboard interference of Amiga mice in Funkpaint.
That is a viable solution indeed. I might just add that. Amiga mouse eats too much cpu I think. |
| |
Martin Piper
Registered: Nov 2007 Posts: 634 |
Does GEOS or any other software support the mouse without issue? |
| |
JackAsser
Registered: Jun 2002 Posts: 1989 |
Quote: Does GEOS or any other software support the mouse without issue?
Not as far as I know, also it’s even stated in the manual that the keyboard is in conflict. |
| |
JackAsser
Registered: Jun 2002 Posts: 1989 |
Quote: Connect it to a user port 4 player adapter instead.
That's how I avoid keyboard interference of Amiga mice in Funkpaint.
RMB is out of the question that way right? |
| |
soci
Registered: Sep 2003 Posts: 473 |
Depends. The PTV adapter will likely work without the right button.
With the adapter I use the right button could work on port 3. However it has all signals are routed through a CPLD which makes position transmission is impossible.
So in practice only the left button will be available and that blocks the position transmission while it's pressed.
As long as the interface uses short clicks only this is not a big problem. Dragging might be worked around by long-click lock style drag with click to release. |
| |
JackAsser
Registered: Jun 2002 Posts: 1989 |
Quote: Depends. The PTV adapter will likely work without the right button.
With the adapter I use the right button could work on port 3. However it has all signals are routed through a CPLD which makes position transmission is impossible.
So in practice only the left button will be available and that blocks the position transmission while it's pressed.
As long as the interface uses short clicks only this is not a big problem. Dragging might be worked around by long-click lock style drag with click to release.
That rules it out, no way I’m gonna support that kind of crap. :D |
| |
Martin Piper
Registered: Nov 2007 Posts: 634 |
Quote: Not as far as I know, also it’s even stated in the manual that the keyboard is in conflict.
Glad I never bought one of those then. |
Previous - 1 | 2 | 3 | 4 | 5 | 6 - Next |