Frage zu HELP Taste


Frage zu HELP Taste

von FlorianD » Mi 4. Aug 2010, 20:25
Hallo,

ich will folgendes machen: solange die HELP Taste gedrückt wird, soll ein Hilfebildschirm gezeigt werden.
Das will nur nicht so recht.

732 $02DC HELPFG
Bit 0, Bit 4 HELP
Bit 6 SHIFT
Bit 7 CTRL

ist gelatched, d.h. behält seinen Wert bis man wieder 0 reinschreibt.
Also HELPFG=0,
ich drücke die HELP-Taste, HELPFG=17, ich blende den Hilfeschirm ein,
ich schreibe 0 in HELPFG
da HELP gedrückt wird, sollte HELPFG jetzt wieder 17 sein
und warte, bis HELPFG=0
und weiter in meinem Programm

geht aber nicht. Was im OS sorgt dafür, dass HELP abgefragt und der Wert besetzt wird?

In 764 (CH, Tastaturcode) ist die Helptaste nicht enthalten. CONSOL 53279 auch nicht. Wird das im VBI geschrieben?

Re: Frage zu HELP Taste

von eda70 » Mi 4. Aug 2010, 21:32
Das Helpflag wird druch den Tastaturinterrupt geschrieben und aus KBCODE übernommen.
Ändert sich der Zustand zu schnell, wird es als Tastaturprellen interpretiert.
Vielleicht einfach kurz warten und dann das Flag auf 0 setzten.

Re: Frage zu HELP Taste

von Dietrich » Mi 4. Aug 2010, 21:48
Hi Florian,

die 17 wird erst wieder in HELPFG geschrieben, wenn Du erneut die Help-Taste drückst. Frage also in Deinem Help-Screen am besten ab, ob die letzte Taste (Help) immer noch gedrückt ist. Das geht mit dem Register SKSTAT=$D20F. Solange Bit 2 auf 0 steht, ist eine Taste gedrückt. Also etwa in Pseudo-Code so:
do (nothing) until peek($D20f) & 4 != 0

Ich mache das in YASH mit der Shift-Taste genauso (Bit 3 von SKSTAT)

Re: Frage zu HELP Taste

von FlorianD » Mi 4. Aug 2010, 22:30
KBCODE ist das Hardwareregister, CH ist das Schattenregister dazu. Weder im einen noch im anderen gibts einen Code für die HELP Taste. Der landet nur in 732 HELPFG. Aber wie kommt er dahin?

...Zeit vergeht...Florian grübelt...


Na also! Disassembeln des XL OS hats ergeben: ab $FC48
Code: Alles auswählen
FC4A: AD 09 D2  LDA $D209   ;KBCODE
FC4D: AA        TAX
FC4E: C9 9F     CMP #$9F
FC50: D0 0A     BNE $FC5C
FC52: AD FF 02  LDA $02FF   ;SSFLAG
FC55: 49 FF     EOR #$FF
FC57: 8D FF 02  STA $02FF   ;SSFLAG
FC5A: B0 11     BCS $FC6D
FC5C: 29 3F     AND #$3F
FC5E: C9 11     CMP #$11
FC60: D0 2E     BNE $FC90
FC62: 8E DC 02  STX $02DC   ;HELPFG


keine Ahnung was da genau vor sich geht, aber er lädt KBCODE, vergleicht auf CTRL-1 (CMP #$9F), dann kommt der SSFLAG Kram, dann blendet er die obersten 2 Bits (SHIFT und CTRL) aus (AND #$3F), vergleicht mit #$11 und wenns passt , Inhalt von X ab in HELPFG.

Kleiner Test hats bestätigt. Sehr gut! Ist schon im ATARI Wiki eingetragen.

Re: Frage zu HELP Taste

von FlorianD » Mi 4. Aug 2010, 22:54
Dietrich hat geschrieben:Hi Florian,

die 17 wird erst wieder in HELPFG geschrieben, wenn Du erneut die Help-Taste drückst. Frage also in Deinem Help-Screen am besten ab, ob die letzte Taste (Help) immer noch gedrückt ist. Das geht mit dem Register SKSTAT=$D20F. Solange Bit 2 auf 0 steht, ist eine Taste gedrückt. Also etwa in Pseudo-Code so:
do (nothing) until peek($D20f) & 4 != 0

Ich mache das in YASH mit der Shift-Taste genauso (Bit 3 von SKSTAT)


Danke Dietrich, genau DEN Tipp habe ich gesucht!!! Brauch ich auch noch an einer anderen Stelle... :-)

HELP kommt aus KBCODE und erscheint auch da als $11, $51 oder $91, wird aber nicht nach CH transferiert, sondern landet nur in HELPFG. Soll erst mal einer drauf kommen. DeReATARI, Mapping... und Intern Fehlanzeige. Aber ab jetzt im ATARI Wiki.