ThKattanek / emu64

C64 Emulator
https://www.thorsten-kattanek.de/index.php/projekte/emu64
GNU General Public License v2.0
37 stars 5 forks source link

Problem mit Cursor-Tasten und Shift #196

Closed Zirias closed 4 years ago

Zirias commented 4 years ago

Hi Thorsten,

ich habe noch ein seltsames Problem gefunden. Bei einem Doc-Viewer, den ich gerade baue, funktionieren CRSR-up und CRSR-left (also die cursor keys mit shift) nicht wie erwartet. Das Ergebnis ist aber sehr seltsam:

PC-Taste up führt zu CRSR-down PC-Taste down + left shift führt zu CRSR-down PC-Taste up oder down + right shift führt zu CRSR-up (analog für left vs right)

Sehr verwirrendes Issue :)

Ich kann leider (noch) kein .PRG bereitstellen, weil das ganze noch nicht released ist. Aber hier mal der Code, den ich zur Tastaturabfrage (hier kombiniert mit beiden Joysticks) nutze:

scrolldone:    lda     CIA1_PRB
                sta     js_current
                cmp     #$ff
                bne     skipkb
                lda     #$0
                sta     shiftstate
                dec     CIA1_DDRA
                lda     #$bf
                sta     CIA1_PRA
                lda     CIA1_PRB
                and     #$10
                beq     haveshift
                lda     #$fb
                sta     CIA1_PRA
                lda     CIA1_PRB
                and     #$80
                beq     haveshift
checkcrsr:     lda     #$fe
                sta     CIA1_PRA
                lda     CIA1_PRB
                asl
                bcc     kb_down
                and     #$8
                beq     kb_right
                lda     #$7f
                sta     CIA1_PRA
                lda     CIA1_PRB
                and     #$10
                bne     nokey
                lda     #$ef
                bne     checkjs2
nokey:         lda     #$ff
                bne     checkjs2
haveshift:     inc     shiftstate
                bne     checkcrsr
kb_down:       lda     #$fe
                bne     applyshift
kb_right:      lda     #$fb
applyshift:    sec
                ldx     shiftstate
                bne     checkjs2
                rol
checkjs2:      inc     CIA1_DDRA
skipkb:        and     CIA1_PRA
                and     js_current
                sta     js_current
                eor     #$ff
                sta     js_nextmask
                lda     js_current
                ora     js_mask
                lsr
                bcc     js_up
                lsr
                bcc     js_down
                lsr
                bcc     js_left
                lsr
                bcc     js_right
                lsr
                bcc     js_fire

Privat könnte ich das .PRG zum testen natürlich gern schicken...

ThKattanek commented 4 years ago

Danke Felix, der Code Schnipsel sollte mir reichen um das nachzuvollziehen. Schaue ich mir an.

Zirias commented 4 years ago

Hey, ich habe gerade entdeckt, dass mein Code buggy ist. Der funktioniert einfach nicht mit left-shift, und ich bin bisher an der echten Maschine nie auf die Idee gekommen, left-shift für die cursor tasten zu benutzen. Also, nichts zu fixen hier, der Unterschied ist einfach, dass dein Emu die "geshifteten" cursor-tasten mit left-shift emuliert und vice das offenbar mit right-shift tut, und beides ist natürlich ok! Sorry für den "noise" :)

Zirias commented 4 years ago

Side note: war einfach ein tippfehler hier

               lda     #$fb
               sta     CIA1_PRA

das hätte #$fd sein müssen, dann klappt's auch mit dem emu64 :)

Ich glaube die meisten User der echten Maschine nehmen right-shift für die cursor-keys weil es eben direkt daneben liegt, also vielleicht wäre das die naheliegendere Wahl beim emulieren. Auf der anderen Seite, ohne emu64 hätte ich den Bug vielleicht nicht vor dem Release bemerkt ;)