[THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Modérateurs : Papy.G, fneck, Carl
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Il ne suffit pas de mettre un point d'arrêt quand le programme est en cours d'exécution, car il peut passer plusieurs fois au même point d'arrêt avec des états différents. On peut seulement comparer la RAM au premier passage à un point d'arrêt. Si les deux émulateurs n'ont pas effectué exactement le même nombre d'instructions, même si l'adresse est identique, le contenu de la RAM est différent.
Je n'ai toujours pas compris la finalité de l'opération. Si le jeu fonctionne exactement pareil dans les deux émulateurs et avec la vraie machine, que demander de plus ? S'il y a un bug dans un émulateur il faut le signaler et l'auteur corrigera.
Je n'ai toujours pas compris la finalité de l'opération. Si le jeu fonctionne exactement pareil dans les deux émulateurs et avec la vraie machine, que demander de plus ? S'il y a un bug dans un émulateur il faut le signaler et l'auteur corrigera.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Olivier avec un Z, as tu essayé sur une vraie machine dans ta lourde tâche Ou à comprendre comment le programme fonctionne?
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
La vraie machine, elle n'est pas disponible... ni sur Ebay ni sur le Bon Coin... à moins d'avoir 500 euros à mettre pour un TO8D dispo en Angleterre...
Donc en attendant, je me raccroche comme je peux aux émulateurs disponibles et j'essaye de voir lequel serait le plus proche de la vraie machine.
Je vais aller désassembler les Passagers du Vent pour comprendre si c'est le programme qui influe, par exemple, sur la sélection de la Page Ram ou si c'est plutôt l'émulateur et/ou la ROM qui oriente le choix du programme.
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Si tu ne connais pas la vraie machine, la tâche va être difficile.
Les émulateurs sont tous différents, c'est ce qui fait leur originalité. Mais en aucun cas ils modifient la ROM virtuelle.
[edit] infos inutiles
Dernière modification par jasz le 22 déc. 2020 18:47, modifié 1 fois.
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Au risque de passer pour un lourdaud, je n'ai toujours pas compris le problème.
Y a-t-il un problème quand on exécute Les Passagers du Vent avec Teo ?
Y a-t-il un problème quand on exécute Les Passagers du Vent avec dcmoto ?
Y a-t-il une différence de comportement entre les deux émulateurs ?
Si oui quelle est-elle ?
Sinon pourquoi vouloir comparer les contenus de la RAM ?
L'émulateur le plus proche de la vraie machine est Teo, car il émule le contrôleur de disquette. Dans dcmoto il y a seulement un détournement des points d'entrées du contrôleur.
Y a-t-il un problème quand on exécute Les Passagers du Vent avec Teo ?
Y a-t-il un problème quand on exécute Les Passagers du Vent avec dcmoto ?
Y a-t-il une différence de comportement entre les deux émulateurs ?
Si oui quelle est-elle ?
Sinon pourquoi vouloir comparer les contenus de la RAM ?
L'émulateur le plus proche de la vraie machine est Teo, car il émule le contrôleur de disquette. Dans dcmoto il y a seulement un détournement des points d'entrées du contrôleur.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7925
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Une remarque au passage à propos des numérotations. Si l'un affiche 2 et l'autre 3, cela ne signifie pas forcement des pages ram différentes. Tout dépends s'ils commencent à compter à partir de 0 ou de 1 peut-être. C'est d'autant plus évident que le numéro de banque pour le basic ne correspond pas à la banque physique et qu'il y a là aussi un décalage.
Donc la question serait plutôt de s'assurer que les numéros affichés correspondent à la même chose ou pas (banque physique, ou banque pour le basic, numérotation de 0 à 31 ou de 1 à 32 ).
Donc la question serait plutôt de s'assurer que les numéros affichés correspondent à la même chose ou pas (banque physique, ou banque pour le basic, numérotation de 0 à 31 ou de 1 à 32 ).
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: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Dans dcmoto le numéro de banque est la valeur écrite dans le registre $E7E5, de $00 à $1F (de 0 à 31).
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7925
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
J'ai l'impression que c'est pareil pour teo 1.8.5.
A noter au niveau de la fidélité de l'émulation, teo a l'air de simuler le fonctionnement du 6809 au tick d'horloge et valeur sortie sur le bus de donnée près. Cela signifie que TEO ne va lire ou écrire les données en mémoire précisément à la bonne microseconde (pour ce que j'ai pu en juger dans l'émul)
A noter au niveau de la fidélité de l'émulation, teo a l'air de simuler le fonctionnement du 6809 au tick d'horloge et valeur sortie sur le bus de donnée près. Cela signifie que TEO ne va lire ou écrire les données en mémoire précisément à la bonne microseconde (pour ce que j'ai pu en juger dans l'émul)
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: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
ce n'est pas une impression, c'est le gros update d'il y a quelques années. Dans la mesure ce ce qui est documenté, l'émulation du 6809 est fait par top d'horloge (depuis 2014 dans les sources), ca doit faire la 1.8.3 il me semble
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Comme prévu le plus dur était de trouver un moyen de compiler avec un windows moderne en compatibilité win9x et avec des outils libres.
A force j'ai trouvé les outils nécessaires (dont principalement TDM GCC 4.9 en 32 bits et le spinoff moderne de DEV C++).
Il y a donc une BETA de la version 1.8.5 windows sur sourceforge :
https://sourceforge.net/projects/teoemu ... dows/BETA/
avec chargement/sauvegarde de snapshot dans le debugger (appel par F12)
et modif dans le calcul de la taille des sections du snapshot (méthode un peu différente du patch, qui devrait être générique)
A force j'ai trouvé les outils nécessaires (dont principalement TDM GCC 4.9 en 32 bits et le spinoff moderne de DEV C++).
Il y a donc une BETA de la version 1.8.5 windows sur sourceforge :
https://sourceforge.net/projects/teoemu ... dows/BETA/
avec chargement/sauvegarde de snapshot dans le debugger (appel par F12)
et modif dans le calcul de la taille des sections du snapshot (méthode un peu différente du patch, qui devrait être générique)
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Merci pour cette nouvelle mouture de l'émulateur.
J'ai pu tester la création / chargement des Snapshots et tout semble fonctionner correctement (peut être que le message 'OK' que l'on reçoit après la création du fichier n'est pas indispensable, j'ai tendance à plutôt privilégier les messagebox lors des erreurs).
J'ai pu également valider que le bug sur le format de sauvegarde avait été corrigé. Merci pour ta réactivité.
J'ai vu que la taille de l'exe avait sensiblement augmentée (270 KB vs 20 MB). Est-ce du à la nouvelle méthode de compilation ? (linkage statique des composants Allegro ? Présence des infos de Debug ?)
Dans la version précédent, j'avais un Bug lié au son. J'ai un PC qui des fois à des conflits pour l'attribution du device de sortie sonore ce qui fait que l'appel à l'API Win 32 waveOutOpen() échoue. Lorsque cela est le cas et que je lance Teo, l'émulateur démarre, sa fenêtre principale s'affiche mais visiblement le code n'atteint pas la boucle des événements GetMessage() / TranslateMessage() / DispatchMessage() car je n'arrive pas à quitter le programme via les boutons de l'interface et je dois killer le process. Est-ce que la gestion du son en version Windows du programme est géré côté Allegro ou directement géré par le code de l'émulateur ?
Olivier
J'ai pu tester la création / chargement des Snapshots et tout semble fonctionner correctement (peut être que le message 'OK' que l'on reçoit après la création du fichier n'est pas indispensable, j'ai tendance à plutôt privilégier les messagebox lors des erreurs).
J'ai pu également valider que le bug sur le format de sauvegarde avait été corrigé. Merci pour ta réactivité.
J'ai vu que la taille de l'exe avait sensiblement augmentée (270 KB vs 20 MB). Est-ce du à la nouvelle méthode de compilation ? (linkage statique des composants Allegro ? Présence des infos de Debug ?)
Dans la version précédent, j'avais un Bug lié au son. J'ai un PC qui des fois à des conflits pour l'attribution du device de sortie sonore ce qui fait que l'appel à l'API Win 32 waveOutOpen() échoue. Lorsque cela est le cas et que je lance Teo, l'émulateur démarre, sa fenêtre principale s'affiche mais visiblement le code n'atteint pas la boucle des événements GetMessage() / TranslateMessage() / DispatchMessage() car je n'arrive pas à quitter le programme via les boutons de l'interface et je dois killer le process. Est-ce que la gestion du son en version Windows du programme est géré côté Allegro ou directement géré par le code de l'émulateur ?
Olivier
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
J'ai eu besoin d'aller décoder le Basic 512 des TO-MO et n'ayant pas trouvé de documentation bas niveau, j'ai fait un peu de reverse-engineering pour extraire le format en mémoire. Je publie ici une fiche technique pour ceux (dont le robot google) qui en aurait besoin.
- Adresse en mémoire du code basic : $A001
- Format d'une ligne :
WORD line_length; /* Format Big Endian, longueur totale de la ligne incluant line_length, line_number, line_data et end_of_line */
WORD line_number; /* Format Big Endian, numéro de la ligne */
BYTE line_data[]; /* N bytes codant les données de la ligne (N = line_length - 5) */
BYTE end_of_line; /* Toujours 0x00 */
- Fin du programme : Une ligne où line_length est à 0x0000.
Les données d'une lignes sont composées :
- de Tokens doubles (Constante 0xFF + Token Byte avec le Bit 7 à 1 => Tableau tab_token_ff[]
- de Tokens simples (Token Byte avec le Bit 7 à 1 => Tableau tab_token[])
- de caractères spéciaux (Accents, Caractères monétaires, Flèches... Constante 0x16 + 1 ou 2 octets, cf Manuel Technique p 171)
- de caractères ascii (tout le reste).
Tableaux des Tokens :
Exemple de Code Basic décodé :
Olivier
- Adresse en mémoire du code basic : $A001
- Format d'une ligne :
WORD line_length; /* Format Big Endian, longueur totale de la ligne incluant line_length, line_number, line_data et end_of_line */
WORD line_number; /* Format Big Endian, numéro de la ligne */
BYTE line_data[]; /* N bytes codant les données de la ligne (N = line_length - 5) */
BYTE end_of_line; /* Toujours 0x00 */
- Fin du programme : Une ligne où line_length est à 0x0000.
Les données d'une lignes sont composées :
- de Tokens doubles (Constante 0xFF + Token Byte avec le Bit 7 à 1 => Tableau tab_token_ff[]
- de Tokens simples (Token Byte avec le Bit 7 à 1 => Tableau tab_token[])
- de caractères spéciaux (Accents, Caractères monétaires, Flèches... Constante 0x16 + 1 ou 2 octets, cf Manuel Technique p 171)
- de caractères ascii (tout le reste).
Tableaux des Tokens :
Code : Tout sélectionner
/** TOKEN [80-FE] **/
char *tab_token[128] =
{
/* 0 8 */ /* 1 9 */ /* 2 A */ /* 3 B */ /* 4 C */ /* 5 D */ /* 6 E */ /* 7 F */
/* 8 */ "END", "FOR", "NEXT", "DATA", "DIM", "READ", "LET", "GO",
"RUN", "IF", "RESTORE", "RETURN", "REM", "'", "STOP", "ELSE",
/* 9 */ "TRON", "TROFF", "DEFSTR", "DEFINT", "DEFSNG", "DEFDBL", "ON", "WAIT",
"ERROR", "RESUME", "AUTO", "DELETE", "LOCATE", "CLS", "CONSOLE", "PSET",
/* A */ "MOTOR", "SKIPF", "EXEC", "BEEP", "COLOR", "LINE", "BOX", "UNMASK",
"ATTRB", "DEF", "POKE", "PRINT", "CONT", "LIST", "CLEAR", "INTERVAL",
/* B */ "KEY", "NEW", "SAVE", "LOAD", "MERGE", "OPEN", "CLOSE", "INPEN",
"PEN", "PLAY", "TAB(", "TO", "SUB", "FN", "SPC(", "USING",
/* C */ "USR", "ERL", "ERR", "OFF", "THEN", "NOT", "STEP", "+",
"-", "*", "/", "^", "AND", "OR", "XOR", "EQV",
/* D */ "IMP", "MOD", "@", ">", "=", "<", "DSKINI", "DSKO$",
"KILL", "NAME", "FIELD", "LSET", "RSET", "PUT", "GET", "VERIFY",
/* E */ "DEVICE", "DIR", "FILES", "WRITE", "UNLOAD", "BACKUP", "COPY", "CIRCLE",
"PAINT", "RESET", "RENUM", "SWAP", "?EC?", "WINDOW", "PATTERN", "DO",
/* F */ "LOOP", "EXIT", "INMOUSE", "MOUSE", "CHAIN", "COMMON", "SEARCH", "FWD",
"TURTLE", "?F9?", "?FA?", "?FB?", "?FC?", "?FD?", "?FE?", "?FF?",
};
/** TOKEN FF+[80-C0] **/
char *tab_token_ff[128] =
{
/* 0 8 */ /* 1 9 */ /* 2 A */ /* 3 B */ /* 4 C */ /* 5 D */ /* 6 E */ /* 7 F */
/* 8 */ "SGN", "INT", "ABS", "FRE", "SQR", "LOG", "EXP", "COS",
"SIN", "TAN", "PEEK", "LEN", "STR$", "VAL", "ASC", "CHR$",
/* 9 */ "EOF", "CINT", "CSNG", "CDBL", "FIX", "HEX$", "OCT$", "STICK",
"STRIG", "GR$", "LEFT$", "RIGHT$", "MID$", "INSTR", "VARPTR", "RND",
/* A */ "INKEY$", "INPUT", "CSRLIN", "POINT", "SCREEN", "POS", "PTRIG", "DSKF",
"CVI", "CVS", "CVD", "MKI$", "MKS$", "MKD$", "LOC", "LOF",
/* B */ "SPACE$", "STRING$", "DSKI$", "FKEY$", "MIN", "MAX", "ATN", "CRUNCH$",
"MTRIG", "EVAL", "PALETTE", "BANK", "HEAD", "ROT", "SHOW", "ZOOM",
/* C */ "TRACE", "?C1?", "?C2?", "?C3?", "?C4?", "?C5?", "?C6?", "?C7?",
"?C8?", "?C9?", "?CA?", "?CB?", "?CC?", "?CD?", "?CE?", "?CF?",
/* D */ "?D0?", "?D1?", "?D2?", "?D3?", "?D4?", "?D5?", "?D6?", "?D7?",
"?D8?", "?D9?", "?DA?", "?DB?", "?DC?", "?DD?", "?DE?", "?DF?",
/* E */ "?E0?", "?E1?", "?E2?", "?E3?", "?E4?", "?E5?", "?E6?", "?E7?",
"?E8?", "?E9?", "?EA?", "?EB?", "?EC?", "?ED?", "?EE?", "?EF?",
/* F */ "?F0?", "?F1?", "?F2?", "?F3?", "?F4?", "?F5?", "?F6?", "?F7?",
"?F8?", "?F9?", "?FA?", "?FB?", "?FC?", "?FD?", "?FE?", "?FF?"
};
Code : Tout sélectionner
10 PRINT "LINE 10"
20 PRINT "LINE 20"
30 PRINT "LINE 30"
40 PRINT "LINE 40"
50 PRINT "LINE 50"
A001 00 10 00 0A AB 20 22 4C 49 4E 45 20 31 30 22 00 ..... "LINE 10".
10 PRINT "LINE 10"
A011 00 10 00 14 AB 20 22 4C 49 4E 45 20 32 30 22 00 ..... "LINE 20".
20 PRINT "LINE 20"
A021 00 10 00 1E AB 20 22 4C 49 4E 45 20 33 30 22 00 ..... "LINE 30".
30 PRINT "LINE 30"
A031 00 10 00 28 AB 20 22 4C 49 4E 45 20 34 30 22 00 ...(. "LINE 40".
40 PRINT "LINE 40"
A041 00 10 00 32 AB 20 22 4C 49 4E 45 20 35 30 22 00 ...2. "LINE 50".
50 PRINT "LINE 50"
A051 00 00
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Effectivement le binaire est beaucoup plus large que nécessaire, je suppose que c'est l'option -g3 qui provoque ça, je vais aussi stripper l'exécutable car il y a pas mal de parties non utilisées dans allegro. => la prochaine beta et la version définitive seront plus raisonnables (sans doute +- 1Mo pour le binaire seul).
Pour les boites d'alerte effectivement c'était pratique pendant le dev mais pas tellement à l'usage (surtout pour le load) => je vais supprimer s'il n'y a pas d'erreur, en version linux je n'ai pas mis ces alertes.
Dans les versions windows et DOS l'image et le son sont gérées par allegro avec une notion de driver interne à la librairie. Pour l'image ce sera par ordre de priorité DirectX (direct draw plus précisément) puis GDI. Pour le son je pense que c'est directSound puis Waveout
Pour les boites d'alerte effectivement c'était pratique pendant le dev mais pas tellement à l'usage (surtout pour le load) => je vais supprimer s'il n'y a pas d'erreur, en version linux je n'ai pas mis ces alertes.
Dans les versions windows et DOS l'image et le son sont gérées par allegro avec une notion de driver interne à la librairie. Pour l'image ce sera par ordre de priorité DirectX (direct draw plus précisément) puis GDI. Pour le son je pense que c'est directSound puis Waveout
Re: [THOMSON - TEO Windows 1.8.4] Bug Report / Demande d'amélioration
Nouveau binaire dispo.
Petite modif ici (comme sur les version unix) si la disquette placée dans le slot 0 est double face (formats .hfe et .fd) alors le slot 1 (correspondant à la seconde face du premier lecteur TO8) est directement remplie avec le même fichier et la bonne face. => ça devrait correspondre à l'usage majoritaire. Pas de changement pour le SAP qui est un format ne comportant qu'une face.
Petite modif ici (comme sur les version unix) si la disquette placée dans le slot 0 est double face (formats .hfe et .fd) alors le slot 1 (correspondant à la seconde face du premier lecteur TO8) est directement remplie avec le même fichier et la bonne face. => ça devrait correspondre à l'usage majoritaire. Pas de changement pour le SAP qui est un format ne comportant qu'une face.