Theodore, l'émulateur Thomson (quasi) universel

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

Modérateurs : Papy.G, fneck, Carl

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 16 avr. 2019 10:28

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?

Daniel
Messages : 11821
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Daniel » 16 avr. 2019 10:49

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 :

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 --
[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.
Modifié en dernier par Daniel le 16 avr. 2019 11:13, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 16 avr. 2019 11:06

en désactivant souris et crayon optique je ne constate pas de plantage sur DCmoto (lancé via wine testé 5 ou 6 fois)

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 16 avr. 2019 13:40

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).
IMG_6930.JPG
IMG_6930.JPG (45.47 Kio) Vu 209 fois
=> conclusion : incompatibilité/bug du logiciel original dans des configurations particulières, aucun lien avec une éventuelle protection.

__sam__
Messages : 4679
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par __sam__ » 16 avr. 2019 15:21

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 ^V^2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Daniel
Messages : 11821
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Daniel » 16 avr. 2019 15:42

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.
Daniel
L'obstacle augmente mon ardeur.

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 16 avr. 2019 15:55

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...

Zlika
Messages : 14
Enregistré le : 23 avr. 2018 12:52

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Zlika » 17 avr. 2019 17:19

gilles a écrit :
16 avr. 2019 10:28
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?
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

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 17 avr. 2019 18:22

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.

Zlika
Messages : 14
Enregistré le : 23 avr. 2018 12:52

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Zlika » 17 avr. 2019 18:34

gilles a écrit :
17 avr. 2019 18:22
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.
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

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 17 avr. 2019 19:07

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).

Avatar du membre
gilles
Messages : 1850
Enregistré le : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par gilles » 17 avr. 2019 19:13

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).

Daniel
Messages : 11821
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Daniel » 17 avr. 2019 20:01

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.
Daniel
L'obstacle augmente mon ardeur.

Zlika
Messages : 14
Enregistré le : 23 avr. 2018 12:52

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Zlika » 17 avr. 2019 22:00

Daniel a écrit :
17 avr. 2019 20:01
(...)
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

Daniel
Messages : 11821
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Theodore, l'émulateur Thomson (quasi) universel

Message par Daniel » 17 avr. 2019 22:17

Je ne crois pas : je viens de comparer les deux fichiers .sap, ils sont rigoureusement identiques.
Daniel
L'obstacle augmente mon ardeur.

Répondre