[DCMOTO] TO8 sans extension 256k avec 32 banks ?
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
[DCMOTO] TO8 sans extension 256k avec 32 banks ?
Je me pose une question par rapport à une machine réelle et le comportement de DCMOTO (2022.10.04).
J'ai fait un programme (ASM) qui écrit un mot 16 bits "random" en $DFFE bank 0, puis il test la même adresse en bank 1. Si le mot est différent il test la même adresse en bank 2, etc. Si le mot est le même il en déduit le nombre de bank disponible dans la machine. (Le but est de trouver le nombre de banques présentes sur la machine sans écrire dedans, mais en utilisant un effet miroir/image fantôme).
Je m'attendais que sur un TO8 pourvu de seulement 256k, la bank 16, soit en réalité la bank 0 (effet miroir/fantôme) et le programme sortirait alors avec A=16 (car la banque 16 manquante "pointerait" sur la bank 0 -- grosse hypothèse). Or sous l'émul, ca affiche toujours A=32 banks. Un peu comme si la selection de la bank16 sélectionnait une vraie bank16 alors que la machine émulée n'a que les banks 0 à 15.
Est-ce le fonctionnement normal sur une machine réelle ? Sur quelle bank pointe la RAM $A000 si on sélectionne une bank inexistante ? J'ai présumé que ca pointait sur la BANK modulo MAXBANK, mais on a peut-être pas de phénomène de banque "miroir".
En image:
J'ai fait un programme (ASM) qui écrit un mot 16 bits "random" en $DFFE bank 0, puis il test la même adresse en bank 1. Si le mot est différent il test la même adresse en bank 2, etc. Si le mot est le même il en déduit le nombre de bank disponible dans la machine. (Le but est de trouver le nombre de banques présentes sur la machine sans écrire dedans, mais en utilisant un effet miroir/image fantôme).
Je m'attendais que sur un TO8 pourvu de seulement 256k, la bank 16, soit en réalité la bank 0 (effet miroir/fantôme) et le programme sortirait alors avec A=16 (car la banque 16 manquante "pointerait" sur la bank 0 -- grosse hypothèse). Or sous l'émul, ca affiche toujours A=32 banks. Un peu comme si la selection de la bank16 sélectionnait une vraie bank16 alors que la machine émulée n'a que les banks 0 à 15.
Est-ce le fonctionnement normal sur une machine réelle ? Sur quelle bank pointe la RAM $A000 si on sélectionne une bank inexistante ? J'ai présumé que ca pointait sur la BANK modulo MAXBANK, mais on a peut-être pas de phénomène de banque "miroir".
En image:
Dernière modification par __sam__ le 02 déc. 2022 21:08, modifié 3 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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Dans dcmoto, s'il n'y a pas d'extension mémoire, toute lecture des banques 16 à 31 retourne la valeur $FF.
Je ne me souviens plus pourquoi j'ai fait ça, mais la question de __sam__ est pertinente. Dès que possible je testerai avec la vraie machine.
Je ne me souviens plus pourquoi j'ai fait ça, mais la question de __sam__ est pertinente. Dès que possible je testerai avec la vraie machine.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Résultat du test sur TO8D
On écrit $3039 en banque 0 à l'adresse $DFFE, puis on lit le contenu de $DFFE dans chacune des banques
1) Sans extension mémoire
On lit $3039 en banque 0, $0000 dans les banques 1 à 15, $E6E6 dans les banques 16 à 31
2) Avec extension mémoire
On lit $3039 en banque 0, $0000 dans les banques 1 à 15, $00FF dans les banques 16 à 31
La valeur lue dans l'extension mémoire n'est pas la même avec tous les modèles. Par exemple, avec mon extension mémoire artisanale, on ne lit pas $00FF mais tantôt $0000 et tantôt $FFFF. C'est probablement dépendant des chips de RAM utilisés. Selon le modèle ils ne s'initialisent pas pareil à la mise sous tension.
Je modifierai la prochaine version de dcmoto pour reproduire ce comportement avec $E6E6 sans extension et $00FF avec l'extension officielle.
[Edit 19:00]
Voilà, c'est fait.
On écrit $3039 en banque 0 à l'adresse $DFFE, puis on lit le contenu de $DFFE dans chacune des banques
1) Sans extension mémoire
On lit $3039 en banque 0, $0000 dans les banques 1 à 15, $E6E6 dans les banques 16 à 31
2) Avec extension mémoire
On lit $3039 en banque 0, $0000 dans les banques 1 à 15, $00FF dans les banques 16 à 31
La valeur lue dans l'extension mémoire n'est pas la même avec tous les modèles. Par exemple, avec mon extension mémoire artisanale, on ne lit pas $00FF mais tantôt $0000 et tantôt $FFFF. C'est probablement dépendant des chips de RAM utilisés. Selon le modèle ils ne s'initialisent pas pareil à la mise sous tension.
Je modifierai la prochaine version de dcmoto pour reproduire ce comportement avec $E6E6 sans extension et $00FF avec l'extension officielle.
[Edit 19:00]
Voilà, c'est fait.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Ce n'est pas fini, il y a encore un truc curieux, le $E6E6 en l'absence d'extension mémoire n'est pas un nombre au hasard, c'est la couleur de l'écran BASIC.
Si on change la couleur par un SCREEN, ça change la valeur de $DFFE dans les banques inexistantes.
Par exemple SCREEN3,0 donne $D8D8 en $DFFE dans les banques 16 à 31.
C'est bizarre, car en mémoire video couleur il y a bien $D8 jusqu'en $5F3F, par contre $5FFE n'est pas initialisé par l'octet couleur.
J'espère que ce n'est pas une erreur dans le petit programme de test. Je le mets ici pour vérification.
TESTBANK.BIN
TESTBANK.BAS
Si on change la couleur par un SCREEN, ça change la valeur de $DFFE dans les banques inexistantes.
Par exemple SCREEN3,0 donne $D8D8 en $DFFE dans les banques 16 à 31.
C'est bizarre, car en mémoire video couleur il y a bien $D8 jusqu'en $5F3F, par contre $5FFE n'est pas initialisé par l'octet couleur.
J'espère que ce n'est pas une erreur dans le petit programme de test. Je le mets ici pour vérification.
TESTBANK.BIN
Code : Tout sélectionner
ORG $9000
PSHS U,Y,X,DP,B,A,CC
LDD #$0010
ORB >$6081
STB >$6081
STB >$E7E7
STA >$E7E5
LDX #$3039
STX $DFFE
LDY #$9800
STX ,Y
BOUCLE
INCA
CMPA #$20
BEQ FIN
STA >$E7E5
LDX $DFFE
LEAY 2,Y
STX ,Y
BRA BOUCLE
FIN
PULS CC,A,B,DP,X,Y,U,PC
END
TESTBANK.BAS
Code : Tout sélectionner
10 LOADM"TESTBANK",,R
20 PRINT:PRINT:A=&H9800
30 FORI%=0TO15
40 X=256*PEEK(A)+PEEK(A+1)
50 PRINTUSING"## ";I%;
60 PRINTRIGHT$(" "+HEX$(X),4);
70 X=256*PEEK(A+32)+PEEK(A+33)
80 PRINTUSING" ## ";I%+16;
90 PRINTRIGHT$(" "+HEX$(X),4)
99 A=A+2:NEXT:PRINT:PRINT
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
En l'absence de RAM on devrait trouver la dernière valeur présente sur le bus juste avant cette lecture. Sur pas mal de machines c'est la valeur de l'opcode, mais je suppose que sur thomson on a des chances de trouver le dernier octet lu en RAM pour l'affichage video (pendant la phase active de l'affichage)
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
C'est une hypothèse très plausible, elle explique parfaitement le résultat des tests.
En initialisant un écran (toujours le même) avec des lignes de couleurs différentes, la lecture d'une banque inexistante retourne l'une de ces couleurs, mais pas toujours la même. C'est probablement celle de la position du faisceau vidéo au moment de la lecture.
Du coup je vais renoncer à émuler fidèlement ce comportement. C'est théoriquement possible mais bien trop compliqué.
En conclusion, la question de __sam__, en apparence anodine, a permis de découvrir un mystère du TO8 encore jamais documenté.
En initialisant un écran (toujours le même) avec des lignes de couleurs différentes, la lecture d'une banque inexistante retourne l'une de ces couleurs, mais pas toujours la même. C'est probablement celle de la position du faisceau vidéo au moment de la lecture.
Du coup je vais renoncer à émuler fidèlement ce comportement. C'est théoriquement possible mais bien trop compliqué.
En conclusion, la question de __sam__, en apparence anodine, a permis de découvrir un mystère du TO8 encore jamais documenté.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Bon, ce qui est certain c'est que:
* il n'y a pas de bank miroir qui apparait. Exit mon hypothèse de travail. (Ca simplifie du coup)
* les banks absentes ne peuvent être écrites.
* le contenu lu dépends du rafraichissement de la RAMs qui ont eu lieu juste avant l'accès.
* C'est très difficile à émuler, et permet en principe de différencier une execution sur émulateur d'une autre sur machine réelle.
C'est intéressant tout cela
* il n'y a pas de bank miroir qui apparait. Exit mon hypothèse de travail. (Ca simplifie du coup)
* les banks absentes ne peuvent être écrites.
* le contenu lu dépends du rafraichissement de la RAMs qui ont eu lieu juste avant l'accès.
* C'est très difficile à émuler, et permet en principe de différencier une execution sur émulateur d'une autre sur machine réelle.
C'est intéressant tout cela
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Cette phrase me motive. Finalement dcmoto donnera la couleur à l'endroit du faisceau. J'ai tous les éléments pour cela.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Voici le résultat des tests avec le vrai TO8D (ou TO8) et avec la version 2022.12.04 de dcmoto.
Conditions des tests :
- Il n'y a pas d'extension mémoire 256K
- On écrit $3039 à l'adresse $DFFE de la banque 0
- On lit l'adresse $DFFE dans les banques 0 à 31
D'abord avec un écran de couleur uniforme :
TO8D DCMOTO 2022.12.04
Ensuite avec un écran bariolé.
A chaque exécution du programme le résultat est différent, car il dépend de la position du faisceau vidéo au moment de la lecture.
TO8D DCMOTO 2022.12.04
On peut affirmer sans grand risque que dcmoto est le seul émulateur TO8 à réagir comme la vraie machine
Conditions des tests :
- Il n'y a pas d'extension mémoire 256K
- On écrit $3039 à l'adresse $DFFE de la banque 0
- On lit l'adresse $DFFE dans les banques 0 à 31
D'abord avec un écran de couleur uniforme :
TO8D DCMOTO 2022.12.04
Ensuite avec un écran bariolé.
A chaque exécution du programme le résultat est différent, car il dépend de la position du faisceau vidéo au moment de la lecture.
TO8D DCMOTO 2022.12.04
On peut affirmer sans grand risque que dcmoto est le seul émulateur TO8 à réagir comme la vraie machine
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 2341
- Inscription : 06 avr. 2009 12:07
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Chapeau pour avoir trouvé ça
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
C'est une découverte à trois, chacun de notre côté nous n'aurions pas trouvé. Toute l'équipe mérite le compliment.
- __sam__ a posé la bonne question
- j'ai testé avec le matériel réel
- Gilles a eu l'idée géniale
- j'ai confirmé par de nouveaux tests
Cette découverte est d'autant plus géniale qu'elle est totalement inutile. Le grand public ne pourra pas comprendre notre satisfaction intellectuelle.
- __sam__ a posé la bonne question
- j'ai testé avec le matériel réel
- Gilles a eu l'idée géniale
- j'ai confirmé par de nouveaux tests
Cette découverte est d'autant plus géniale qu'elle est totalement inutile. Le grand public ne pourra pas comprendre notre satisfaction intellectuelle.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Bravo.
Peut-être inutile mais indispensable!
Peut-être inutile mais indispensable!
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Finalement la question que pose Sam à savoir "peut-on distinguer une exécution sur DCMOTO d'une sur une machine réelle" a-t-elle une réponse ?
Asic512
Re: [DCMOTO] TO8 sans extension 256k avec 32 banks ?
Oui, bien sûr, l'émulateur n'est pas et ne sera jamais parfait, il y aura toujours de subtiles différences. L'essentiel est que ces différences soient invisibles pour l'utilisateur moyen, c'est ce que je m'efforce de faire en corrigeant tous les comportements anormaux lorsqu'ils sont signalés.
Pour la lecture des banques de RAM inexistantes je crois que dcmoto est maintenant relativement semblable à la vraie machine en mode vidéo standard Thomson. C'est le seul testé. Dans d'autres modes il est possible que le comportement soit différent, il faudrait faire des tests plus approfondis pour le découvrir. Comme écrit dans mon post précédent, c'est totalement inutile de chercher, mais si quelqu'un veut le faire ça fera progresser la connaissance.
Pour la lecture des banques de RAM inexistantes je crois que dcmoto est maintenant relativement semblable à la vraie machine en mode vidéo standard Thomson. C'est le seul testé. Dans d'autres modes il est possible que le comportement soit différent, il faudrait faire des tests plus approfondis pour le découvrir. Comme écrit dans mon post précédent, c'est totalement inutile de chercher, mais si quelqu'un veut le faire ça fera progresser la connaissance.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.