Theodore, l'émulateur Thomson (quasi) universel
Modérateurs : Papy.G, fneck, Carl
Re: Theodore, l'émulateur Thomson (quasi) universel
l'hypothèse de l'interruption non protégée par le loader à une phase critique me semble assez plausible. Si c'est le cas on devrait pouvoir planter aussi sur matériel d'origine en bougeant la souris ou en tapant sur le clavier pendant le chargement.
Mais je suis quand même surpris que cela plante à chaque fois sur ta machine, quelle distribution est la distribution, dans quelle version et quelle version de la lib gtk en particulier?
Mais je suis quand même surpris que cela plante à chaque fois sur ta machine, quelle distribution est la distribution, dans quelle version et quelle version de la lib gtk en particulier?
Re: Theodore, l'émulateur Thomson (quasi) universel
C'est presque certainement un problème d'interruption et de pile. Je me souviens d'un bug trouvé par __sam__ dans le moniteur du TO9, lié au bit E du registre CC. Il avait été corrigé en remplaçant ORCC #$50 par ORCC #$D0 dans le programme.
Pour Le Temps d'Une Histoire j'ai essayé, ça ne résout pas le problème et le programme se plante un peu plus loin.
J'ai aussi changé la valeur du registre S, mais là encore le jeu se plante après l'affichage de la première image.
Avec dcmoto et la version originale le chargement se plante assez souvent, il suffit d'insister et au bout d'un moment ça passe.
Le mystère reste entier, car si on exécute le jeu en mode debugger l'erreur ne se produit jamais, elle est donc difficile à tracer.
L'erreur se produit soit dans la boucle d'affichage de l'écran INFOGRAMES, en $6220 (peut-être pendant l'exécution du JSR $E803), soit un peu plus loin pendant le JSR $E004 :
[Edit]
Autre constatation :
- Le plantage aléatoire se produit uniquement si on clique sur la case B de l'écran d'accueil
- Si on tape B au clavier il n'y a jamais de plantage, au moins dans la dizaine d'essais effectués
Tous ces essais ont été réalisés avec la version 2019.04.11 de dcmoto.
Il n'est pas sûr que les autres versions aient exactement le même comportement.
Pour Le Temps d'Une Histoire j'ai essayé, ça ne résout pas le problème et le programme se plante un peu plus loin.
J'ai aussi changé la valeur du registre S, mais là encore le jeu se plante après l'affichage de la première image.
Avec dcmoto et la version originale le chargement se plante assez souvent, il suffit d'insister et au bout d'un moment ça passe.
Le mystère reste entier, car si on exécute le jeu en mode debugger l'erreur ne se produit jamais, elle est donc difficile à tracer.
L'erreur se produit soit dans la boucle d'affichage de l'écran INFOGRAMES, en $6220 (peut-être pendant l'exécution du JSR $E803), soit un peu plus loin pendant le JSR $E004 :
Code : Tout sélectionner
=============================
Secteur de boot
=============================
6200 1A50 ORCC #$50
6202 10CE61FE LDS #$61FE
6206 F6FFF0 LDB $FFF0
6209 C102 CMPB #$02 test ordinateur
620B 12 NOP (non utilise)
620C 12 NOP
620D 8E6256 LDX #$6256 adresse origine
6210 CE601A LDU #$601A adresse destination
6213 E680 LDB ,X+ <-- transfert chaine
6215 E7C0 STB ,U+ |
6217 5D TSTB |
6218 26F9 BNE $6213 -
621A 7F6019 CLR $6019 clear status
621D 8E625E LDX #$625E chaine affichage ecran INFOGRAMES
6220 E680 LDB ,X+ <--
6222 2705 BEQ $6229 -|-
6224 BDE803 JSR $E803 | | affichage caractere
6227 20F7 BRA $6220 - |
6229 CE6048 LDU #$6048 <-
622C 8E6300 LDX #$6300 adresse du buffer
622F 108E0002 LDY #$0002 piste-secteur
6233 AF47 STX $07,U
6235 10AF43 STY $03,U
6238 6F42 CLR $02,U
623A 860E LDA #$0E nombre de secteurs a lire
623C C602 LDB #$02 code operation
623E E7C4 STB ,U
6240 BDE004 JSR $E004 <- lecture d'un secteur
6243 250F BCS $6254 --|-> erreur de lecture
6245 4A DECA |
6246 2738 BEQ $6280 --|-> suite de l'execution
6248 6C44 INC $04,U | secteur suivant
624A AE47 LDX $07,U |
624C 30890100 LEAX $0100,X |
6250 AF47 STX $07,U | buffer suivant
6252 20EC BRA $6240 --
Autre constatation :
- Le plantage aléatoire se produit uniquement si on clique sur la case B de l'écran d'accueil
- Si on tape B au clavier il n'y a jamais de plantage, au moins dans la dizaine d'essais effectués
Tous ces essais ont été réalisés avec la version 2019.04.11 de dcmoto.
Il n'est pas sûr que les autres versions aient exactement le même comportement.
Dernière modification par Daniel le 16 avr. 2019 11:13, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Theodore, l'émulateur Thomson (quasi) universel
en désactivant souris et crayon optique je ne constate pas de plantage sur DCmoto (lancé via wine testé 5 ou 6 fois)
Re: Theodore, l'émulateur Thomson (quasi) universel
test effectué sur matériel réel, en l’occurrence un TO9+ avec lecteur HxC gotek, conversion image de SAP vers HFE
Le chargement est normal la plupart du temps mais en cliquant avec la souris de façon intensive pendant le chargement on obtient une corruption écran avec blocage ou non (comportement aléatoire). => conclusion : incompatibilité/bug du logiciel original dans des configurations particulières, aucun lien avec une éventuelle protection.
Le chargement est normal la plupart du temps mais en cliquant avec la souris de façon intensive pendant le chargement on obtient une corruption écran avec blocage ou non (comportement aléatoire). => conclusion : incompatibilité/bug du logiciel original dans des configurations particulières, aucun lien avec une éventuelle protection.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Theodore, l'émulateur Thomson (quasi) universel
Le TO9 est assez gourmand en pile lors des appels du moniteur, y compris dans le traitement des interruptions. Si je jeu est compatible avec le TO9 (du moins dans sa phase de lancement), ca permettrait peut-être d'avoir la plante plus souvent et de voir quelle routine du loader ou de l'afficheur d'image est en cause.
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: Theodore, l'émulateur Thomson (quasi) universel
Juste avant le plantage, la pile a été définie en $61FE. Il y a peut-être un conflit avec des routines qui utiliseraient des variables dans cette zone, normalement réservée au BASIC.
D'après ce que j'ai constaté, l'erreur a son origine dans l'affichage du premier écran (INFOGRAMES sur fond noir) ou dans le chargement du programme par appel de la fonction $E004. Soit ça plante et ne va pas plus loin (exécution de code invalide), soit ça continue et la suite est corrompue.
D'après ce que j'ai constaté, l'erreur a son origine dans l'affichage du premier écran (INFOGRAMES sur fond noir) ou dans le chargement du programme par appel de la fonction $E004. Soit ça plante et ne va pas plus loin (exécution de code invalide), soit ça continue et la suite est corrompue.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Theodore, l'émulateur Thomson (quasi) universel
traditionnellement on risque d'avoir le buffer disque par là. Il y a quoi en 604F-6050?
sur des disquettes en secteur de 128 octets pas de soucis mais en 256...
sur des disquettes en secteur de 128 octets pas de soucis mais en 256...
Re: Theodore, l'émulateur Thomson (quasi) universel
Je suis en Debian 9 64bits mais comme le deb fourni sur sourceforge est pour une distrib 32bits je lance Teo dans une VM qui est elle sous Debian 9 32bits. D'après ldd, teo utilise libgtk-3 qui est en version 3.22.11.
Le problème initial que j'avais rencontré avec la version "TOSEC" de "Le temps d'une histoire" était une protection utilisée par Infogrames (et que l'on retrouve dans d'autres titres Infogrames comme Dieux du stade 2 et Dossier Boerhaave). Une protection similaire, mais légèrement différente, existe aussi sur certains jeux FIL comm Atomik, Avenger et Way of the Tiger. Cette protection fait des appels directs au contrôleur de disquette pour lire une valeur située en dehors du champ de données d'une piste, et qui ne serait donc pas copiée en faisant une copie de disquette classique. Cette protection, quand elle n'était pas gérée, provoquait un plantage à l'affichage du premier écran graphique (donc vu de loin par temps de brouillard, au même moment que le problème trouvé par Daniel). J'ai implémentée une détection et un contournement automatique de ce type de protection.
Suite à ça, le temps d'une histoire fonctionne correctement avec Theodore.
Pour la version fd disponible sur dcmoto, j'imagine qu'elle a été déprotégée par Daniel. Elle fonctionne aussi correctement avec Theodore.
J'ai fait quelques essais et je n'arrive pas à reproduire le bug constaté par Daniel avec dcmoto. Je ne me fais pas d'illusion, ce n'est pas parce que Theodore émule mieux que dcmoto, c'est même sans doute le contraire, une émulation peut être un peu plus "approximative" qui permet peut être de passer à travers un "vrai" bug du logiciel ?
Cordialement,
Thomas
Re: Theodore, l'émulateur Thomson (quasi) universel
si je relis ton code je vois effectivement du contournement dans motoemulator.c à partir de la ligne 768 mais ce n'est pas une méthode très générique, elle est tenable pour une logitèque relativement limitée comme celle du thomson et surtout elle ne tient pas compte de l'information de protection qui peut exister dans un fichier sap (ce logiciel en particulier n'en a aucune, c'est donc un dump récent sans info de protection, vraisemblablement fait avec sap2)
[78:04]: Sect 05, Track 78, Format: 0x00, Protect 0x00
[78:05]: Sect 06, Track 78, Format: 0x00, Protect 0x00
[78:06]: Sect 07, Track 78, Format: 0x00, Protect 0x00
[78:07]: Sect 08, Track 78, Format: 0x00, Protect 0x00
ton support du SAP à proprement parler est strictement identique à la méhode par conversion, le contournement de la protection marchera de la même façon sur du fd/raw et du SAP.
teo émule actuellement en totalité le controleur de disquette et utilise des dumps complets avec tous les octets présents sur la piste à l'aide de l'outil CC90HFE. Le gros défaut (du point de vue du joueur) de cette méthode est qu'il faudrait re-dumper l'ensemble des disquettes (ou à la rigueur développer le codage de la protection sap vers le dump complet). Cela a été fait pour Bobo et quelques autres. Le site logicielsmoto.com contient quelques dump complets avec protection préservée.
[78:04]: Sect 05, Track 78, Format: 0x00, Protect 0x00
[78:05]: Sect 06, Track 78, Format: 0x00, Protect 0x00
[78:06]: Sect 07, Track 78, Format: 0x00, Protect 0x00
[78:07]: Sect 08, Track 78, Format: 0x00, Protect 0x00
ton support du SAP à proprement parler est strictement identique à la méhode par conversion, le contournement de la protection marchera de la même façon sur du fd/raw et du SAP.
teo émule actuellement en totalité le controleur de disquette et utilise des dumps complets avec tous les octets présents sur la piste à l'aide de l'outil CC90HFE. Le gros défaut (du point de vue du joueur) de cette méthode est qu'il faudrait re-dumper l'ensemble des disquettes (ou à la rigueur développer le codage de la protection sap vers le dump complet). Cela a été fait pour Bobo et quelques autres. Le site logicielsmoto.com contient quelques dump complets avec protection préservée.
Re: Theodore, l'émulateur Thomson (quasi) universel
Non, je tiens compte des infos de format et de protection secteur présents dans le fichier SAP. Theodore fait ainsi tourner des jeux SAP qui ne fonctionneraient pas avec une conversion directe en FD (et qui d'ailleurs ne fonctionnaient pas avec les premières versions de Theodore car il faisait justement une simple conversion SAP->FD). Cependant, à ma connaissance, l'information nécessaire pour "leurrer" la protection, même avec une émulation fidèle du contrôleur de disquette (ce que Theodore ne fait pas, en bon héritier des émulateurs dc), n'est pas présente dans le fichier SAP.
Concernant la dernière partie de ta phrase "le contournement de la protection marchera de la même façon sur du fd/raw et du SAP" : oui... mais en pratique non car les fichiers fd présents sur le site de Daniel sont à ma connaissance tous déprotégés.
Je ne prétends pas avoir la science infuse sur ce sujet, j'apprends par essai/erreur et en lisant la documentation, je ne peux malheureusement pas me baser sur mes connaissances des Thomson acquises à l'époque (j'avais 10 ans, je découvrais le basic... ), donc j'accepte toutes les remarques éclairées qui pourraient améliorer l'émulateur. Je ne souhaite cependant pas aller jusqu'à l'émulation fidèle des contrôleurs car je pense que cela me demanderait trop de travail pour un gain proche de 0.
Cordialement,
Thomas
Re: Theodore, l'émulateur Thomson (quasi) universel
ce que je dis c'est que cette image disque en particulier n'en a pas.
Ta méthode consiste à surveiller les instructions qui précèdent une lecture des registres du controleur floppy pour détecter un pattern et appliquer une action.
Les anciennes version de teo avaient une méthode un tout petit peu plus générique, lors de l'écriture d'une valeur dans le registre du controleur on passe dans un automate d'état qui permettra à chaque read de registre de controleur de sortir la valeur attendue. dans toute l'existence de cette méthode 2 variantes de protection hors moniteur ont été rencontrées.
pour le support sap ok je vois que le code d'erreur est remonté:
errcode = sap_readSector(&sap, p, s, buffer);
if (errcode != DISK_NO_ERROR) {Diskerror(errcode); return;}
après les dump sap qui comportent effectivement le code d'erreur sont rares dans la pratique car obtenus avec des outils qui n’existent plus (j'ai une vieille version de sap msdos et un 486 avec un vrai BIOS et un controleur disquette réél et non émulé, à l'occasion je peux tester si ces codes sont remplis mais il me semble que non).
Ta méthode consiste à surveiller les instructions qui précèdent une lecture des registres du controleur floppy pour détecter un pattern et appliquer une action.
Les anciennes version de teo avaient une méthode un tout petit peu plus générique, lors de l'écriture d'une valeur dans le registre du controleur on passe dans un automate d'état qui permettra à chaque read de registre de controleur de sortir la valeur attendue. dans toute l'existence de cette méthode 2 variantes de protection hors moniteur ont été rencontrées.
pour le support sap ok je vois que le code d'erreur est remonté:
errcode = sap_readSector(&sap, p, s, buffer);
if (errcode != DISK_NO_ERROR) {Diskerror(errcode); return;}
après les dump sap qui comportent effectivement le code d'erreur sont rares dans la pratique car obtenus avec des outils qui n’existent plus (j'ai une vieille version de sap msdos et un 486 avec un vrai BIOS et un controleur disquette réél et non émulé, à l'occasion je peux tester si ces codes sont remplis mais il me semble que non).
Re: Theodore, l'émulateur Thomson (quasi) universel
j'ajoute que l'information de protection est présente dans fichier sap mais elle n'est pas utilisée en émulation car une méthode plus simple existait. toutefois, il aurait existé des outils sur thomson et pc (dans le sens un thomson et un PC connectés) pour recréer des disquettes avec protection. Il devrait également être possible de le faire avec CC90HFE mais je ne l'ai pas experimenté dans ce sens (juste dans le sens archivage avec protection vers image HFE).
Re: Theodore, l'émulateur Thomson (quasi) universel
Le Temps d'Une Histoire, dans la version .fd du site dcmoto et dans la version .sap du site logicielsmoto, n'est pas protégé contre la copie. Les deux versions sont strictement identiques.
Si la disquette originale est protégée, elle a peut-être été mal déprotégée lors du transfert sur PC. Si quelqu'un a cette version originale il serait intéressant de l'analyser.
Si la disquette originale est protégée, elle a peut-être été mal déprotégée lors du transfert sur PC. Si quelqu'un a cette version originale il serait intéressant de l'analyser.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Theodore, l'émulateur Thomson (quasi) universel
Bonjour Daniel,
Le fichier SAP de la version "TOSEC" (https://archive.org/details/Thomson_TO8 ... 2012_04_23) est différent du SAP de logicielmoto (les empreintes SHA256 sont différentes). Le SAP "TOSEC" est protégé contre la copie.
Cordialement,
Thomas
Re: Theodore, l'émulateur Thomson (quasi) universel
Je ne crois pas : je viens de comparer les deux fichiers .sap, ils sont rigoureusement identiques.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.