Abfrage Start/Select/Option
Verfasst: 04.05.2023 20:07
Ich hatte vor kurzem in meinem Haunted-House Port Projekt das Problem, dass auf Originalhardware die Auswahl der Spielstufe mit der Select Taste nicht sauber funktioniert hat. Es wurden immer gleich mehrere Spielstufen übersprungen, obwohl ich die Abfrage so programmiert habe, dass der Zähler erst nach dem wieder Loslassen der Taste inkrementiert wird. Im Emulator trat der Effekt nicht auf, hier wurde immer sauber pro Tastendruck um 1 erhöht. Ich konnte das Problem umgehen, indem ich nach der CONSOL Abfrage noch eine kleine Warteschleife von zwei V-Blanks (40 ms) eingefügt habe - wobei schon eine gereicht hätte)
Mir hat das aber keine Ruhe gelassen und ich bin dem Problem jetzt mal genauer auf die Spur gegangen.
Ich habe mal ein Miniprogramm geschrieben, das nur die Abfrage der SELECT Taste nachstellt. Und wie im eigentlichen Programm, das gleiche Problem: Altirra-Hui / Atari-Pfui
Hier mal im Videovergleich:
Meine Vermutung war ja, dass die Taster der Originalhardware einfach nachfedern/prellen. Und das ist auch so und ich konnte das so nachweisen:
Wieder ein Miniprogramm geschrieben:
Das Programm wartet auf das Drücken der Funktionstaste und speichert dann im Abstand von 15 Takzyklen die nächsten 255 Werte (Aufzeichnungszeit 2,165 ms)
Und so sah das Ergebnis aus:
05 = SELECT gedrückt
07 = keine Taste gedrückt
Wie man schön sehen kann, folgt auf den ersten Tstendruck 7*15 Takte eine Leerphase, dann noch zwei kleine Nachschwinger, bevor sich der Tastendruck stabil verhält.
In den meisten Programmen wird sich das nicht auswirken, denn das sind gerade mal 180 Taktzyklen oder nicht einmal ganz zwei Scan-Lines. Frägt man die Tasten also im VBI ab, gar kein Problem.
Hat man ein längeres Programm, auch kein Problem. Je nachdem wie energisch man die Taste drückt, treten auch mal mehr, mal weniger Nachschwinger auf.
Bei mir wurde es nur blöde, da fast mein komplettes Programm in einem DLI und dem VBI abläuft. Meine Hauptschleife ist nur sehr klein und besteht eigentlich nur aus der Überwachung der Funktionstasten.
Dadurch hat sich dann eben das Nachschwingen der Taste bemerkbar gemacht. Der Emulator hat dagegen ein sauberes Schaltverhalten und es treten auch bei meiner kurzen Hauptschleife keine Probleme auf.
Also: Problem erkannt - Problem gebannt.
Vielleicht hilft das ja mal noch jemand ....
Mir hat das aber keine Ruhe gelassen und ich bin dem Problem jetzt mal genauer auf die Spur gegangen.
Ich habe mal ein Miniprogramm geschrieben, das nur die Abfrage der SELECT Taste nachstellt. Und wie im eigentlichen Programm, das gleiche Problem: Altirra-Hui / Atari-Pfui
Hier mal im Videovergleich:
Meine Vermutung war ja, dass die Taster der Originalhardware einfach nachfedern/prellen. Und das ist auch so und ich konnte das so nachweisen:
Wieder ein Miniprogramm geschrieben:
Code: Alles auswählen
ORG $A000
;
TIMER: EQU $14
START: EQU $A000
PUFFER: EQU $0600
CONSOL: EQU $D01F
VCOUNT: EQU $D40B
;
LDA #8
STA CONSOL ; Nur zur Sicherheit die Eingänge Freischalten
LDX #0
LOOP1: LDA CONSOL ; Tasten abfragen
AND #%00000010 ; auf SLECT prüfen
BNE LOOP1 ; falls nicht gedrückt, weiter warten
LOOP2: LDA CONSOL ; falls gedrückt
STA PUFFER,X ; den Status der Funktionstasten 255 mal abspeichern
INX
BNE LOOP2
BRK
Und so sah das Ergebnis aus:
05 = SELECT gedrückt
07 = keine Taste gedrückt
Wie man schön sehen kann, folgt auf den ersten Tstendruck 7*15 Takte eine Leerphase, dann noch zwei kleine Nachschwinger, bevor sich der Tastendruck stabil verhält.
In den meisten Programmen wird sich das nicht auswirken, denn das sind gerade mal 180 Taktzyklen oder nicht einmal ganz zwei Scan-Lines. Frägt man die Tasten also im VBI ab, gar kein Problem.
Hat man ein längeres Programm, auch kein Problem. Je nachdem wie energisch man die Taste drückt, treten auch mal mehr, mal weniger Nachschwinger auf.
Bei mir wurde es nur blöde, da fast mein komplettes Programm in einem DLI und dem VBI abläuft. Meine Hauptschleife ist nur sehr klein und besteht eigentlich nur aus der Überwachung der Funktionstasten.
Dadurch hat sich dann eben das Nachschwingen der Taste bemerkbar gemacht. Der Emulator hat dagegen ein sauberes Schaltverhalten und es treten auch bei meiner kurzen Hauptschleife keine Probleme auf.
Also: Problem erkannt - Problem gebannt.
Vielleicht hilft das ja mal noch jemand ....