Alors cela appelle la routine KTST du moniteur MO5. Cette routine met le bit 7 du CCR du processeur à 1 si une touche et appuyée et à 0 sinon. Si c'est à 1, alors B contient la valeur du code ASCII de la touche (doc moniteur issue du "
manuel technique du mo5"). Le fait que tu obtienne 58 ou 48 n'est pas significatif car aucune touche n'est appuyée quand tu fais le test. J'imagine que la routine laisse dans B la valeur qu'il avait précédemment.
Corrolaire: la routine KEYF est intrinsèquement buggée car elle ne teste pas la valeur du flag processeur Z pour savoir si B contient un code ASCII interprétable ou n'importe quoi. (edit c'est faux, lire après)
[EDIT] MAIS, un grand MAIS, le commentaire dans
code source de la rom MO5 précise
Code : Tout sélectionner
* KEYTST est un test rapide des touches qui retourne avec : *
* Z=1 B=$34 (PAS DE TOUCHE ENFONCEE) *
* Z=0 B=NUMERO PHYSIOUE DE TOUCHE (UNE TOUCHE ENFONCEE) *
Donc il est possible de ne pas tester la valeur du flag Z mais tester par rapport à $34. Or ce $34 et suspect car le code source dit plus loin
Code : Tout sélectionner
KEYTST EQU *
LDD BLOCZ BLOCZ = 0000.
STD TEMP Flag pour les touches Basic, Control et Shift.
LDB #%01110010 Position de la derniere touche clavier (BASIC)
KBSCAN EQU *
STB PRB-PRA,U Envoi du code position de la touche
LDA PRB-PRA,U Out clavier (bit7=0 ==> touche enfoncee).
BMI NXTKEY NXTKEY : test de la touche suivante.
LDA #1 On va donc tester si BASIC,CTRL,SHIFT
CMPB #%01110010 BAS1C ? Flag=l
BEQ SAVFLG
LSLA Flag control = 2
CMPB #%01101010 Control ?
BEQ SAVFLG Oui, idem
LSLA Flag shift = 4
CMPB #%01110000 Shift ?
BNE EXREAD Non, c'est une autre touche du clavier.
SAVFLG EQU *
STA TEMP Positionne le flag.(Prior:CTRL,SHIFT,BASIC).
NXTKEY EQU *
INC TEMP+1 Touche suivante.
SUBB #2 Envoi code touche suivante :codes de 2 en 2.
BPL KBSCAN Sortie si aucune touche enfoncee.
EXREAD EQU *
LDD TEMP A = flag, B = numero de la touche dans TABASC
STD 3,S Sauvegarde dans la pile pour les appelants.
CMPB #$3A Z = 1 si pas de touche enfoncee.
RTS
que c'est $3A (se référer au CMPB final) Et $3A = 58.. c'est ce que tu recois.
Mais ce que cela dit aussi c'est que la doc du moniteur dans "
Le manuel technique du MO5" dit n'importe quoi. D'une part ca n'est pas un code ASCII qui est retourné mais un code physique. Ca n'est pas non plus le bit 7 qui est modifié, mais le bit Z (problème de TYPO lors de la saisie du texte par une secrétaire à l'époque? Le bit Z s'est transformé en bit 7 visuellement très similaire). Le commentaire du code source est aussi faux car il parle de $34 au lieur de $3A... là encore ca sent le pb de relecture de caractère car 4 et A sont visuellement très proches.
Bref en résumé la doc du FORTH indique un peu n'importe quoi à son tour ce qui n'est pas étonnant quand on voit les incohérences du code source et du commentaire. C'est bel et bien 3Ah (58 en décimal) qu'on récupère quand on appuie pas sur une touche.