Problème possible avec CMPA sur DCAlice 2024.03.24

Couvre tous les domaines de l'émulation logicielle ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

StevanR
Messages : 11
Inscription : 11 mai 2024 09:14

Problème possible avec CMPA sur DCAlice 2024.03.24

Message par StevanR »

Bonjour,

Ce message s'adresse principalement à Daniel, auteur de l'émulateur DCAlice 2024.03.24.

Je voulais signaler une différence d'exécution pour le code en assembleur d'exemple suivant, entre d'un côté l'émulateur DCAlice 2024.03.24, et de l'autre l'émulateur Malice 0.40 et un vrai ordinateur Alice 32 :

Code : Tout sélectionner

      CMPA #$FE
      BNE TSTK0
      INC QK
TSTK0 ...
Sur l'émulateur DCAlice 2024.03.24, le test avec l'instruction CMPA donne un résultat qui peut être vrai ou faux. C'est ce qui est attendu. Par contre, sur l'émulateur Malice 0.40 ainsi que sur un vrai Alice 32, le résultat du test est toujours faux.

En corrigeant le code de la façon suivante, en utilisant BITA plutôt que CMPA, j'obtiens le résultat attendu, qui peut être vrai ou faux, sur les deux émulateurs ainsi que sur le vrai Alice 32 :

Code : Tout sélectionner

      BITA #$01
      BNE TSTK0
      INC QK
TSTK0 ...
J'imagine que ces différences d'exécution sont liées à la gestion des flags du registre P du processeur 6803, entre les deux émulateurs et la vraie machine. Mais le temps et (et surtout !) la compétence me manquent trop pour pousser plus loin les investigations.

A titre d'exemples, en pièces jointes vous trouverez :
- le fichier pdf intitulé "différences CMPA et BITA.pdf", contenant les listings de deux programmes d'exemple en Basic, identiques sauf pour la routine en assembleur à laquelle ils font appel. Dans le premier programme, la routine en assembleur utilise l'instruction CMPA. Dans le second programme, elle utilise BITA. Figurent aussi dans ce fichier pdf les listings des deux versions de la routine en assembleur, l'une utilisant CMPA et l'autre BITA ;
- le fichier "test clavier 1.txt", à renommer en ".k7", contenant le programme en Basic avec la routine utilisant CMPA , qui fonctionnement correctement seulement sur DCAlice 2024.03.24 ;
- le fichier "test clavier 2.txt", à renommer en ".k7", contenant le programme en Basic avec la routine utilisant BITA, qui fonctionne correctement sur les deux émulateurs et probablement sur le vrai Alice 32.

J'espère ne pas avoir été trop confus dans mes explications. N'hésitez pas à demander des clarifications.

Enfin merci à Olipix qui a conduit des tests sur un vrai Alice 32.
Pièces jointes
différences CMPA et BITA.pdf
(58.16 Kio) Téléchargé 3 fois
test clavier 1.txt
(1.19 Kio) Téléchargé 2 fois
test clavier 2.txt
(1.18 Kio) Téléchargé 2 fois
__sam__
Messages : 8137
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par __sam__ »

Sur l'émulateur DCAlice 2024.03.24, le test avec l'instruction CMPA donne un résultat qui peut être vrai ou faux. C'est ce qui est attendu. Par contre, sur l'émulateur Malice 0.40 ainsi que sur un vrai Alice 32, le résultat du test est toujours faux.

Code : Tout sélectionner

11 4EFD 86FD LDAA #$FD
12 4EFF B70002 STAA $02
13 4F02 B6BFFF LDAA $BFFF
14 4F05 81FE CMPA #$FE
15 4F07 2603 BNE TSTK0
16 4F09 7C4F49 INC QK
17
18 4F0C 86F7 TSTK0 LDAA #$F7
Le test est à faux sur le vrai Alice parce que $BFFF ne retourne probablement pas $FE sur la machine réeele. J'ai vu sur la très mauvaise numérisation du manuel technique qu'à cette adresse seuls les bits 0 à 6 5 ([EDIT] correction pour les 6 bits donc de 0 à 5 et pas 0 à 6 comme incorrectement écrit dans la doc) sont en entrée et ont donc une valeur bien définie en fonction de l'appui sur le clavier. Si, sur machine réelle, les bit b7b6 sont à autre chose que 00, le test du code retournera faux tout le temps.

Du coup je me demande si le problème n'est pas le CMPA, mais soit
  • l'émulation du statut des bit b7b6 par DCAlice,
  • soit si ce bit est ces bits sont "flottants", le fait de masquer les bits non utiles avant de faire le test.
C'est plus ou moins ce que fait le code avec le bita sur le 1er bit, mais il ne s'intéresse alors qu'à l'appui d'une touche quelconque dans une certaine ligne de la matrice clavier. Il faudrait plutôt alors ajouter un "or logique" #$C0 pour masquer le statut indéterminé des b7b6 pour tester une certaine touche dans une certaine ligne de la matrice clavier.

sam (my two cents)
Dernière modification par __sam__ le 11 juin 2024 19:20, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17646
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par Daniel »

Merci pour le signalement du bug, c'est essentiel pour faire progresser l'émulation.
L'explication de __sam__ est vraisemblablement la bonne.
DCALICE retournait à 1 le bit 7 inutilisé de $BFFF, alors que le vrai Alice doit le retourner à zéro (à vérifier).
Ci-dessous une nouvelle version avec le bit 7 à zéro. Résout-elle le problème ?
dcalice_20240611.zip
(139.08 Kio) Téléchargé 6 fois
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

$BFFF à 2 fonctions selon que l'on y écrive ou lise.

Il faut utiliser un masque avant de faire une comparaison après avoir lu cette adresse.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Daniel
Messages : 17646
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par Daniel »

Oui, c'est clair, puisque seuls les 7 bits de poids faible sont significatifs il ne faut pas tester le bit de poids fort.
Néanmoins, en le testant, ça a montré une différence entre le vrai Alice et dcalice, l'erreur a donc été utile 8)
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

Oui mais est ce que le résultat est toujours le même à la lecture sur le vrai Alice,
pas sur...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 8137
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par __sam__ »

C'est le composant "multiplexeur" qui est chargé de sortir le bit 7 vers le son, et de mettre 8 bits sur le bus de données en lecture à partir des 6 bits de la matrice clavier. Que mets-il sur les 2 bits manquants ? Mystère. C'est un gate-array je crois et il est fort possible que suivant la techno "silicium" de la logique interne, les niveau de tentions et de courant disponibles on y lise les dernières valeurs lues ou écrites sur le bus de données, ou une valeur flottante. C'est imprévisible. A la lecture il faut donc masquer ces bits comme indiqué plus haut pour ne pas être ennuyé avec leurs valeurs indéfinie (don't care).
image_2024-06-11_190717033.png
image_2024-06-11_190717033.png (138.13 Kio) Consulté 329 fois
image_2024-06-11_193118901.png
image_2024-06-11_193118901.png (415.9 Kio) Consulté 321 fois
image_2024-06-11_191439525.png
image_2024-06-11_191439525.png (48.42 Kio) Consulté 326 fois
En conclusion, le problème ici n'est pas tant le respect de la machine réelle par l'émulateur (ces bits sont indéfinis, le 6803 peut y lire un 0 ou un 1 logique un peu au pif), mais le code ASM qui ne tient pas compte de cela.

A noter: un truc n'est pas clair dans la doc: elle parle de 6 bits de 2^0 à 2^6. Il n'y aurait pas comme un problème ?
image_2024-06-11_191119732.png
image_2024-06-11_191119732.png (73.31 Kio) Consulté 328 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

En faite la doc n'est pas exacte concernant cette adresse $BFFF, pour la gestion du clavier c'est bien ca, par contre la sortie son c'est pas du 1 bit.
J'expliquerais mieux demain, la je ne vais pas avoir le temps ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 8137
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par __sam__ »

Ne nous dis pas que tu va mettre du son dans les vidéos ? Petit cachotier. ;)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
StevanR
Messages : 11
Inscription : 11 mai 2024 09:14

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par StevanR »

Merci __sam__, Daniel et 6502man pour vous être intéressés à ce problème, et pour l'avoir a priori résolu aussi rapidement !

Ensuite j'avais mal cerné le problème, qui portait plutôt sur la gestion du port d'entrée des Alice 32/90. Mais cela ne vous a pas arrêtés...

Daniel, je confirme que ta version de l'émulateur DCAlice 2024_06_11 fonctionne comme l'émulateur Malice avec mes différents programmes de test.
Avatar de l’utilisateur
Dominique
Messages : 860
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par Dominique »

Parfait,

Merci à StevanR pour avoir soulevé le problème, et aux experts du forum pour être allé si loin dans l'analyse.
Daniel
Messages : 17646
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par Daniel »

Pour satisfaire complètement notre curiosité, il faudrait faire des tests intensifs avec le vrai Alice pour déterminer si le bit 7 de $BFFF est imprévisible ou toujours à zéro. En particulier écrire 0 dans le bit 7 et le relire, puis écrire 1 dans le bit 7 et le relire.

Je n'ai pas le courage de sortir tout le matériel pour faire le test, mais si un autre utilisateur d'Alice peut y consacrer un peu de temps c'est intéressant pour la connaissance de la machine.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

je pense pas que l'on puisse relire la même valeur en $BFFF
car ce sont 2 fonctions différentes (lecture => datas du clavier, écriture => son).

Je ferais des tests ce midi sur le 90 et ce soir je posterais le résultat ainsi que l'explication promise pour la partie son.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

Je n'ai pas eu assez de temps ce midi pour faire le test mais je le ferais demain après-midi j'aurais largement le temps de le faire.

Edit: j'ai supprimé une ânerie de ma part :oops:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
6502man
Messages : 12451
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Problème possible avec CMPA sur DCAlice 2024.03.24

Message par 6502man »

Voici le test sur avec un ALice 90
en vidéo :


J'écrit alternativement le bit 7 à 0 et 1, dessuite après je lit $BFFF,
Read change lorsque j'utilise le clavier .
Evidement on entend le son généré à chaque écriture du bit 7 à 1 ;)

Voila donc le bit 7 semble toujours lu à zéro ?

Le code ASM pour ceux qui voudrais tester de leurs côté :

Code : Tout sélectionner

;
;	(c)	6502MAN
;



OUTTX	.EQU $E7A8		; LDX = adresse chaine (terminé par null)
OUTCA	.EQU $F9C6		; LDAA = code ascii
SCANK	.EQU $F883		; <= LDAA = code ascii de la touche enfoncée Z = 0 aucun touche
CLS		.EQU $FBD6		; efface ecran	
CURSOR	.EQU $3280		; LDD = y,x du curseur

	
	.ORG $5000
	
	JSR CLS
Start
	LDD #$0408
	STD CURSOR
	LDX #Texte-1
	JSR OUTTX 	
	CLR VAL

Testing
	LDD #$0511
	STD CURSOR
	LDAA VAL
	STAA $BFFF
	LDAB $BFFF
		PSHB
	JSR HPRINT
	LDD #$0519
	STD CURSOR
		PULA
	JSR HPRINT
	LDAA VAL
	EORA #$80
	STAA VAL
	JMP Testing

	

	
Texte
	.DB "$BFFF  WRITE    READ"
	.DB 00

VAL
	.DB $00


;---------------------------------------	
;	print  HEXA number
HPRINT:
		PSHA
	LSRA
	LSRA
	LSRA
	LSRA
	JSR Hex2Asc
	JSR OUTCA
		PULA
	JSR Hex2Asc
	JSR OUTCA
	RTS

;---------------------------------------	
;	converti hexa en ascii
Hex2Asc:
	ANDA #$0F
	CMPA #$0A
	BPL LetAsc
	ADDA #$30
	RTS
LetAsc
	ADDA #$30+07
	RTS
	
	.END
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Répondre