Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
 Welcome to our latest new user Lunasoft ! (Registered 2018-12-15) You are not logged in 
CSDb User Forums


Forums > C64 Coding > NEOS mouse, losing my hair...
2018-09-30 11:57
jamiefuller

Registered: Mar 2018
Posts: 23
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

 
... 22 posts hidden. Click here to view all posts....
 
2018-09-30 19:58
JackAsser

Registered: Jun 2002
Posts: 1472
Quote: never seen this in the time i worked on micromys, its just rock stable here =P

This was with a micromys... same with 1351. So perhaps it is my ADCs then?
2018-09-30 20:01
Groepaz

Registered: Dec 2001
Posts: 8920
no idea really. v4 has some problems, but those are related to the wraparound of the counter, so you will see a "jump" of two pixels instead of one every now and then - but that should be it.

perhaps check with another C64? :)
2018-09-30 20:05
JackAsser

Registered: Jun 2002
Posts: 1472
Quote: no idea really. v4 has some problems, but those are related to the wraparound of the counter, so you will see a "jump" of two pixels instead of one every now and then - but that should be it.

perhaps check with another C64? :)


Yes. This is a v2 iirc. My sid chip sounds borked anyway. It got a taste of an Amiga powersupply (c128 have the same connector). Maybe that fried the ADCs abit also. :)
2018-09-30 20:08
Groepaz

Registered: Dec 2001
Posts: 8920
LOL
2018-10-01 13:20
MagerValp

Registered: Dec 2001
Posts: 943
@JackAsser: I saw the same thing as you regarding jitter, and dividing by two doesn't help. In my driver I decrease the delta by one (decrement if positive delta, increment for negative), which gets rid of it.
2018-10-01 13:28
JackAsser

Registered: Jun 2002
Posts: 1472
Quote: @JackAsser: I saw the same thing as you regarding jitter, and dividing by two doesn't help. In my driver I decrease the delta by one (decrement if positive delta, increment for negative), which gets rid of it.

Yes, dividing doesn't help as the jitter is additive. Increasing / Decreasing like you do will remove the possibility for very slow motion though. I did that first but was very unsatisfied by the result. I have a more elaborate filtering in place now.
2018-10-01 13:43
Groepaz

Registered: Dec 2001
Posts: 8920
i find this really surprising to hear... never heard about this problem, and i've used/tested a lot of mouse things in the time i worked in micromys, tested on various C64s too. *shrug*. perhaps change the ADC caps? :)
2018-10-01 13:50
JackAsser

Registered: Jun 2002
Posts: 1472
Quote: i find this really surprising to hear... never heard about this problem, and i've used/tested a lot of mouse things in the time i worked in micromys, tested on various C64s too. *shrug*. perhaps change the ADC caps? :)

Yeah, I'll investigate it further from a HW standpoint. Meanwhile my SW solution will remain in place.
2018-10-01 14:01
Groepaz

Registered: Dec 2001
Posts: 8920
it actually makes sense to get a +/- 1 additive jitter due to how the ADC works.(*) and i really wonder now why i never saw this happen :)

(*) actually due to how the ADC _and_ the mouse works... you'd expect it to get even worse. which probably is the reason for why bit 0 is undefined for the mouse data. but... but... *shrug*
2018-10-01 14:35
JackAsser

Registered: Jun 2002
Posts: 1472
Quote: it actually makes sense to get a +/- 1 additive jitter due to how the ADC works.(*) and i really wonder now why i never saw this happen :)

(*) actually due to how the ADC _and_ the mouse works... you'd expect it to get even worse. which probably is the reason for why bit 0 is undefined for the mouse data. but... but... *shrug*


I only observe a 0/+1 jitter. If I poll POTX and output the value to screen I can see it wiggle between say $12 and $13. If I move the mouse ever so slightly it will wiggle between $13 and $14. Also the jitter is not everywhere but only between frequent spans within the valid values perfectly repetitive. I can f.e. have it rock solid between say (values just made up here because I don't know the exact value) 10-17, the jitterish numbers between 18-1f, then stable again between 20-27 etc.
Previous - 1 | 2 | 3 | 4 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Dymo/G★P
ZeSmasher/F4CG
deizi
Alakran_64
Mythus/Delysid
Guests online: 28
Top Demos
1 Uncensored  (9.7)
2 Comaland 100%  (9.7)
3 Unboxed  (9.7)
4 Edge of Disgrace  (9.7)
5 Coma Light 13  (9.6)
6 The Shores of Reflec..  (9.6)
7 Lunatico  (9.6)
8 Wonderland XII  (9.6)
9 Old Men in Used Cars  (9.5)
10 C=Bit 18  (9.5)
Top onefile Demos
1 Smile to the Sky  (10)
2 Arok 20 Invitation  (9.6)
3 Daah, Those Acid Pil..  (9.5)
4 FMX Music Demo  (9.5)
5 Crystal Gazer  (9.5)
6 Pandemoniac Part 2 o..  (9.5)
7 Dawnfall V1.1  (9.5)
8 Rewind  (9.5)
9 Party Horse  (9.4)
10 Dawnfall  (9.4)
Top Groups
1 Oxyron  (9.4)
2 Booze Design  (9.4)
3 Censor Design  (9.4)
4 Finnish Gold  (9.3)
5 The Transfer Team  (9.3)
Top Mega Swappers
1 Aslive  (9.4)
2 R.C.S.  (9.3)
3 Dishy  (9.2)
4 Nightshade  (9.1)
5 Calypso  (9.0)

Home - Disclaimer
Copyright © No Name 2001-2018
Page generated in: 0.062 sec.