Conversion Jeux Thomson TO au format SD

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Répondre
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

C'est vraiment curieux ce comportement du clavier.. Je me demande si ca ne serait pas en relation avec le bug/curiosité du flag E=1 positionné par le système quand il lance le bootloader. Flag E qui est maintenu tout le long jusqu'à la première interruption autorisée par le GETC ce qui trash la pile au moment du RTI (qui croit que l'interruption est une IRQ alors que c'est une FIRQ, bref qui dépile trop).. enfin c'est tout un mic-mac terrible que j'avais identifié sur TO9 au dans "In the Shadow of the Thomson" il y a une paire d'année. Mess me semblait à l'époque le plus fidèle pour ces bugs là. Faudrait voir si l'appui sur une touche de HNY2013 fait freezer MESS-TO7/70 comme la vraie machine... (a suivre)

Par contre je ne pense pas que ce soit un problème propre au format SD. Où positionner les recherches sur ce soucis du coup ?
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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Je ne vois rien d'anormal dans le programme HNY2013 lui-même. Il appelle $E806 de façon parfaitement légitime et le système se bloque. Ça ressemble à un bug du TO7/70. Et un bug (au second degré) de dcmoto qui ne reproduit pas le bug du TO7/70. Mais il n'y a aucune certitude tant que le problème n'est pas précisément identifié.

Il est clair que ça n'a aucun rapport avec SDDRIVE ni avec la conversion des jeux Thomson au format SD.

Je viens de vérifier le code du RTI dans dcmoto, il teste bien le flag E pour dépiler les bons registres :

Code : Tout sélectionner

void Rti_6809()           /* return from interrupt */
{
 Puls(0x01);              /* depile CC                            */
 if(CC&0x80) Puls(0xfe);  /* si E=1 depile A, B, DP, X, Y, U, PC  */
 else Puls(0x80);         /* sinon (E=0) depile PC                */
}
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Un truc est clair dans le bit E du CCR: le lire ne donne pas d'info pertinente car au retour du RTI on ne récupère jamais la valeur qu'il avait avant l'interruption.

Ce bit est purement un truc interne au CPU et ne peut pas être utilisé logiciellement pour faire un test pertinent. Cette valeur là se trouve en fait stockée sur la pile. Aussi, on peut trouver curieux un programme qui lirait la valeur du bit E pour décider quelque chose. Ca n'a aucun sens. Le seul sens que je vois, serait en mode debug pas à pas: si on le voit passer de 0 à 1 entre deux instructions, cela signifie qu'une IRQ s'est produite entre ces deux instructions (car le RTI ne le restore pas à 0 mais laisse visible la dernière valeur retrouvée sur la pile).

Hum, je ne sais pas si je suis très clair après tout... mais le truc est que ce bit E ne peut pas être considéré comme un bit "stable" ou "préservé". Sa valeur n'a de durée de vie utile qu'au sein du mécanisme d'interruption (IRQ/FIRQ/SWIx, qui le set/clr juste avant de pousser CC sur la pile) et de retour (RTI qui le récupère depuis la pile le test et c'est tout). Nulle part ailleurs la valeur de E n'est utilisée. Ce bit n'a même pas besoin d'être visible en vrai et pourrait rester interne au CPU.
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
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Heu sinon, j'ai testé HNY2013.fd sous mess/TO770 et je confirme qu'il freeze sur l'appui d'une touche. De ce que j'observe quand cela se produit, c'est assez rigolo: à la fin de la routine qui joue le son, on tombe sur un RTI, qui nous refait partir en interruption timer. En gros: on tourne en boucle sur une interruption qui est toujours levée quand on appuie sur une touche. Il semblerait que la cause soit le bit 0 de $E7C0 qui reste à 1 qui provoque cette boucle d'interruption. Effectivement le player ne touche pas à $E7C0 donc l'état de son b0 reste inchangé.

Donc bref, en résumé rapide de ce que j'observe: quand on appuie sur une touche, je crois que les routines du clavier mettent b0=1 dans $E7C0, là dessus vient l'interruption du player qui au RTI repart dans le code d'interruption du moniteur. Or comme b0=1 encore et toujours, on repart dans le player. Ce qu'il se passe est qu'une interruption apparait à un endroit du code de gestion clavier du TO7 qui mets b0=1 dans $E7C0 sans espoir de le faire passer à b0=0 plus loin. Ca part en boucle quand l'interruption arrive dans la gestion de GETC. Le truc curieux est que le player bloque les IRQ sur TO7 lors des appels à GETC pour éviter cela. Visiblement ca marche sur DCMOTO (qui ne freeze pas), mais pas sur MESS ni sur la machine réelle (qui freezent tout deux). Serait-ce le code de détection TO7/70 qui bug ?

Bon ca mérite encore un peu d'exploration, mais le fait que sous MESS on retrouve le blocage permettra de comprendre définitivement ce qu'il se produit.
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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

__sam__ a écrit : 03 févr. 2021 01:40 Serait-ce le code de détection TO7/70 qui bug ?
J'ai vérifié dans dcmoto, le TO7/70 est bien détecté.
Avec le vrai TO7/70, PRINTPEEK(&HFFF0) donne 1, donc il est aussi bien détecté.
Avec le debugger de dcmoto tout fonctionne, on ne trouvera rien de plus. Le seul espoir est de debugger dans MESS.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Je propose de parler du problème de freeze sur ce fil séparé. Peut-être que les admin pourraient éventuellement déplacer les messages précédents là bas ?
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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Autre problème de conversion de fd vers sd : Les Dieux de la Glisse
les-dieux-de-la-glisse_to8.zip
(161.23 Kio) Téléchargé 122 fois
Le fichier .fd fonctionne bien.
Le fichier .sd plante au chargement

Le chargement utilise le "scratchdos" du contrôleur.
Il fonctionne avec le contrôleur interne des TO8, TO8D et TO9+, mais pas avec le contrôleur externe SDDRIVE.
Je soupçonne un bug de SDDRIVE, mais j'ai du mal à le localiser. Toute aide sera la bienvenue.

01.png
01.png (45.24 Kio) Consulté 5904 fois
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Le FD présente un problème avec la version DCMoto 2021.03.12 sur TO8 + CD90-351.

Je fais:
1) Une épreuve >> Saut à ski
2) Nom Joueurs >> je saisis A (une seule lettre), puis Entrer
3) Jeux

Apparait alors le message "Erreur Disque", et si on appuie sur une touche ca refait "Erreur disque".. on peu appuyer plusieurs fois et ca affiche "Chargement terminé" et plante totale du jeu (reboot nécessaire voire automatique).

La version SD plante bien avant tout cela dès le "Chargement en cours..." après la page de présentation "infograme". Cela bloque dans le

Code : Tout sélectionner

CLEAR ,,&H7FFF:LOADM "BOOT",,R
Donc c'est l'execution de BOOT.BIN qui plante (point d'entrée $8034). Curieusement BOOT.BIN fait 666 octets... Ca sent le truc diabolique en dessous :)

(a suivre....)
Dernière modification par __sam__ le 12 mars 2021 18:35, modifié 2 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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Je n'ai jamais joué à ce jeu en version .fd, il y a probablement d'autres problèmes. La disquette que j'ai eue n'était pas neuve car il y avait des fichiers de scores enregistrés par les utilisateurs.

Dans un premier temps, je cherche à résoudre le problème de chargement en version .sd. C'est bien le fichier BOOT.BIN qui plante. Il utilise le minidos du contrôleur pour charger deux fichiers : INCLPAGE.BIN et PRESH1.BIN. Ensuite il devrait lancer l'exécution en $6400, mais il plante avant.

J'ai essayé de charger les deux fichiers avec le DOS normal, sans succès.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

__sam__ a écrit : 12 mars 2021 18:16 (a suivre....)
Ok je continue: je constate que le bootloader écrit des trucs en $60E7-$60E8, $60E9-$60EA, $60EB, $60ED-$60EE (bas de la pile système, la sienne étant déplacée avant $8000), c'est à dire dans une zone utilisée par SDDrive:

Code : Tout sélectionner

E5C5 109EE9     LDY    <$E9                6
E5C8 DEE7       LDU    <$E7                5
E5CA D6F0       LDB    <$F0                4
E5CC C103       CMPB   #$03                2
C'est ca qui plante à mon avis: SDDrive n'y retrouve pas ses affaires.

Il faudrait faire en sorte que le chargeur n'utilise pas les adresses "SDDrive".. j'ai tenté de les isoler ici:

Code : Tout sélectionner

8034 10CE7FFF   LDS    #$7FFF             
8038 1A50       ORCC   #$50               
803A F66081     LDB    $6081              
803D CA10       ORB    #$10               
803F F76081     STB    $6081             <== on revient sur le controleur externe, ouf! 
8042 F7E7E7     STB    $E7E7              
8045 8E8006     LDX    #$8006             
8048 6D84       TST    ,X                 
804A 2B56       BMI    $80A2              
804C EC81       LDD    ,X++               
804E 8030       SUBA   #$30               
8050 B760EF     STA    $60EF              
8053 C13A       CMPB   #$3A               
8055 1026005B   LBNE   $80B4              
8059 CE80B8     LDU    #$80B8             
805C C60D       LDB    #$0D               
805E BD82DF     JSR    $82DF              
8061 A680       LDA    ,X+                
8063 B7802D     STA    $802D              
8066 E680       LDB    ,X+                
8068 BD8030     JSR    $8030              
806B EC81       LDD    ,X++               
806D FD802E     STD    $802E              
8070 3410       PSHS   X                  
8072 4F         CLRA                      
8073 BD82E7     JSR    $82E7              
8076 BD80A9     JSR    $80A9              
8079 3404       PSHS   B                  
807B BD80A5     JSR    $80A5              
807E 1F02       TFR    D,Y                
8080 BD80A5     JSR    $80A5              
8083 F3802E     ADDD   $802E            
8086 1F01       TFR    D,X                
8088 E6E0       LDB    ,S+                
808A 260B       BNE    $8097              
808C BD80A9     JSR    $80A9              
808F E780       STB    ,X+                
8091 313F       LEAY   -$01,Y             
8093 26F7       BNE    $808C              
8095 20DF       BRA    $8076              
8097 7D802D     TST    $802D              
809A 2702       BEQ    $809E              
809C AD84       JSR    ,X                 
809E 3510       PULS   X                  
80A0 20A6       BRA    $8048              
80A2 7E6400     JMP    $6400              
80A5 8D02       BSR    $80A9              
80A7 1F98       TFR    B,A                
80A9 3402       PSHS   A                  
80AB 4F         CLRA                      
80AC BD833F     JSR    $833F              
80AF 3502       PULS   A                  
80B1 2501       BCS    $80B4              
80B3 39         RTS                       
80B4 7E8003     JMP    $8003              

555 octets vides à 0 ..
      
82DF A680       LDA    ,X+                <= algo de recopie.. ici on touche des trucs entre $60E0-$60FF
82E1 A7C0       STA    ,U+                
82E3 5A         DECB                      
82E4 26F9       BNE    $82DF              
82E6 39         RTS                       
82E7 3406       PSHS   B,A                
82E9 8601       LDA    #$01               
82EB 3470       PSHS   U,Y,X              
82ED 7F60F0     CLR    $60F0              
82F0 B760E6     STA    $60E6              <= pas utilisé par SDDrive ?
82F3 A666       LDA    $06,S              
82F5 BD8318     JSR    $8318              
82F8 3440       PSHS   U                  
82FA FF60E7     STU    $60E7              <= xxx Utilisé SDDrive
82FD 334B       LEAU   $0B,U              
82FF ECC1       LDD    ,U++               
8301 FD60EB     STD    $60EB             
8304 FF60E9     STU    $60E9              <= xxx Utilisé SDDrive
8307 33C90100   LEAU   $0100,U            
830B FF60ED     STU    $60ED              <= xxx Utilisé SDDrive
830E 3510       PULS   X                  
8310 A666       LDA    $06,S              
8312 8D15       BSR    $8329              
8314 3570       PULS   X,Y,U              
8316 3586       PULS   A,B,PC             
8318 3402       PSHS   A                  
831A CE8327     LDU    #$8327             
831D 48         ASLA                      
831E EEC6       LDU    A,U                
8320 C618       LDB    #$18               
8322 8E60E5     LDX    #$60E5             
8325 3582       PULS   A,PC               
8327 80B8       SUBA   #$B8               
8329 8DED       BSR    $8318              
832B 33C9020D   LEAU   $020D,U            
832F BD82DF     JSR    $82DF              
8332 39         RTS                       
8333 8DE3       BSR    $8318              
8335 33C9020D   LEAU   $020D,U            
8339 1E13       EXG    X,U                
833B BD82DF     JSR    $82DF              
833E 39         RTS                       
833F 347E       PSHS   U,Y,X,DP,B,A       <= je pense qu'ici débute la routine de chargement
8341 B780B7     STA    $80B7              
8344 BD8333     JSR    $8333              
8347 8660       LDA    #$60               
8349 1F8B       TFR    A,DP               
834B 8655       LDA    #$55               
834D B160FD     CMPA   $60FD              
8350 2719       BEQ    $836B              
8352 B760FD     STA    $60FD              
8355 8602       LDA    #$02               
8357 7D6080     TST    $6080              
835A 272D       BEQ    $8389              
835C 7F60F0     CLR    $60F0              
835F 8601       LDA    #$01               
8361 B76048     STA    $6048              
8364 BDE004     JSR    $E004              
8367 8602       LDA    #$02               
8369 251E       BCS    $8389              
836B F660EF     LDB    $60EF              
836E F76049     STB    $6049              
8371 BE60E9     LDX    $60E9              <= xxx Utilisé SDDrive
8374 BF604F     STX    $604F              
8377 8601       LDA    #$01               
8379 C602       LDB    #$02               
837B F76048     STB    $6048              
837E F660E6     LDB    $60E6              
8381 102700BC   LBEQ   $8441              
8385 C101       CMPB   #$01               
8387 2722       BEQ    $83AB              
8389 B760E5     STA    $60E5              
838C 7F60FD     CLR    $60FD             
838F 43         COMA                      
8390 2003       BRA    $8395              
8392 7F60E5     CLR    $60E5              
8395 3404       PSHS   B                  
8397 B680B7     LDA    $80B7              
839A BD8329     JSR    $8329              
839D B660E5     LDA    $60E5             
83A0 2703       BEQ    $83A5              
83A2 1A01       ORCC   #$01               
83A4 F51CFE     BITB   $1CFE              
83A7 3504       PULS   B                  
83A9 35FE       PULS   A,B,DP,X,Y,U,PC    
83AB 7D60F0     TST    $60F0             
83AE 260C       BNE    $83BC              
83B0 BD8491     JSR    $8491              
83B3 25D4       BCS    $8389              
83B5 8604       LDA    #$04               
83B7 5D         TSTB                      
83B8 27CF       BEQ    $8389              
83BA 201E       BRA    $83DA              
83BC BE60F3     LDX    $60F3             
83BF BC60F1     CMPX   $60F1            
83C2 2673       BNE    $8437              
83C4 B660F9     LDA    $60F9             <= xxx Utilisé SDDrive
83C7 B160F5     CMPA   $60F5              
83CA 270A       BEQ    $83D6              
83CC 222A       BHI    $83F8              
83CE 7F60E6     CLR    $60E6              
83D1 7F60F0     CLR    $60F0              
83D4 20BC       BRA    $8392              
83D6 8109       CMPA   #$09               
83D8 261E       BNE    $83F8              
83DA 10BE60ED   LDY    $60ED              
83DE BDE01F     JSR    $E01F              
83E1 F660F6     LDB    $60F6              
83E4 5C         INCB                      
83E5 A6A5       LDA    B,Y                
83E7 B760F6     STA    $60F6              
83EA C609       LDB    #$09               
83EC F760F9     STB    $60F9              <= xxx Utilisé SDDrive
83EF 81C0       CMPA   #$C0               
83F1 2505       BCS    $83F8              
83F3 840F       ANDA   #$0F               
83F5 B760F9     STA    $60F9              
83F8 BE60E9     LDX    $60E9              <= xxx Utilisé SDDrive
83FB BF60F3     STX    $60F3              
83FE CC4480     LDD    #$4480             
8401 B1E002     CMPA   $E002              
8404 2602       BNE    $8408              
8406 CB7F       ADDB   #$7F               
8408 B660F5     LDA    $60F5              
840B B160F9     CMPA   $60F9              <= xxx Utilisé SDDrive
840E 2503       BCS    $8413              
8410 FC60F7     LDD    $60F7              <= xxx Utilisé SDDrive
8413 4F         CLRA                      
8414 308B       LEAX   D,X                
8416 BF60F1     STX    $60F1              
8419 B660FA     LDA    $60FA              
841C 7C60FA     INC    $60FA              
841F 7C60F5     INC    $60F5              
8422 B7604C     STA    $604C              
8425 FC60FB     LDD    $60FB              
8428 FD604A     STD    $604A              
842B BDE004     JSR    $E004              
842E 8603       LDA    #$03               
8430 1025FF55   LBCS   $8389              
8434 BE60F3     LDX    $60F3              
8437 E680       LDB    ,X+                
8439 BF60F3     STX    $60F3              
843C E761       STB    $01,S              
843E 7E8392     JMP    $8392              
8441 8601       LDA    #$01               
8443 F660F0     LDB    $60F0              
8446 C502       BITB   #$02               
8448 1027FF3D   LBEQ   $8389              
844C BD8482     JSR    $8482              
844F 1025FF36   LBCS   $8389              
8453 10BE60ED   LDY    $60ED              
8457 B660F6     LDA    $60F6              
845A F660F5     LDB    $60F5              
845D C8C0       EORB   #$C0               
845F 4C         INCA                      
8460 E7A6       STB    A,Y                
8462 BDE010     JSR    $E010              
8465 1025FF20   LBCS   $8389              
8469 FC60F3     LDD    $60F3              
846C B360E9     SUBD   $60E9              <= xxx Utilisé SDDrive
846F ED2E       STD    $0E,Y              
8471 BDE016     JSR    $E016              
8474 1025FF11   LBCS   $8389              
8478 BDE022     JSR    $E022              
847B 1025FF0A   LBCS   $8389              
847F 7E8392     JMP    $8392              
8482 B660FA     LDA    $60FA              
8485 B7604C     STA    $604C              
8488 FC60FB     LDD    $60FB              
848B FD604A     STD    $604A              
848E 7EE016     JMP    $E016              
8491 F760F0     STB    $60F0              
8494 BDE00D     JSR    $E00D              
8497 2503       BCS    $849C              
8499 BDE010     JSR    $E010              
849C 39         RTS                       
Dernière modification par __sam__ le 12 mars 2021 19:16, 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
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Tout ce qui se trouve entre $E000 et $E6FF fait partie de SDDRIVE. Le code ci-dessus appartient à SDDRIVE, pas au fichier BOOT.BIN.
Le fichier BOOT.BIN est chargé en $8000 et exécuté à partie de $8034.
Le programme principal qui charge les deux fichiers binaires avec le minidos est entre $8034 et $80A4.

[Edit] Mais effectivement, tu as raison : BOOT.BIN écrase des zones de SDDRIVE :

Code : Tout sélectionner

833F 347E       PSHS   U,Y,X,DP,B,A       
8341 B780B7     STA    $80B7              
8344 BD8333     JSR    $8333              
8347 8660       LDA    #$60               
8349 1F8B       TFR    A,DP               
834B 8655       LDA    #$55               
834D B160FD     CMPA   $60FD        test lancement a chaud              
8350 2719       BEQ    $836B --     lancement a chaud         
8352 B760FD     STA    $60FD   |    indicateur lancement a chaud       
8355 8602       LDA    #$02    |    erreur 2       
8357 7D6080     TST    $6080   |    test presence controleur       
835A 272D       BEQ    $8389 --|--  erreur controleur           
835C 7F60F0     CLR    $60F0   |  |           
835F 8601       LDA    #$01    |  |          
8361 B76048     STA    $6048   |  | code reset controleur        
8364 BDE004     JSR    $E004   |  | operation disquette (reset)           
8367 8602       LDA    #$02    |  | erreur 2        
8369 251E       BCS    $8389 --|->| erreur controleur            
836B F660EF     LDB    $60EF <-   |          
836E F76049     STB    $6049      |        
8371 BE60E9     LDX    $60E9      | adresse buffer        
8374 BF604F     STX    $604F      | stockage adresse       
8377 8601       LDA    #$01       |        
8379 C602       LDB    #$02       | code lecture secteur        
837B F76048     STB    $6048      | stockage code operation       
837E F660E6     LDB    $60E6      |        
8381 102700BC   LBEQ   $8441 -----|->             
8385 C101       CMPB   #$01       |        
8387 2722       BEQ    $83AB -----|->             
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Ouui mon extrait était pas clair (j'édite le message en direct de mon débugging).. Je pense avoir isolé les adresses en collision (voir message plus haut). Peut-être que le patch des adresses SDDrive de $60E7, $60E9, $60ED vers $5FE7, $5FE9, $5FED dans BOOT.BIN peut suffire; mais il y a le problème RAMA/RAMB par là bas. Reste à savoir s'il y aurait des commutations de page vidéo durant le chargement. Je n'y crois pas beaucoup, mais le fait qu'ils utilisent la pile système pour stocker les infos de lecture/écriture + la taille 666 du loader, me laisse penser que ce sont de petits futés qui font tout pour embêter les gentils pirates que nous sommes.
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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Je vais commencé par patcher, on verra si ça suffit ou pas...
Il y a un truc que je ne comprend pas : Ils mettent $60 dans DP et n'utilisent pas l'adressage direct. Pourquoi ?
D'un autre côté c'est une chance, il sera plus facile de retrouver toutes les adresses en conflit en recherchant dans le fichier binaire.

[Edit] Finalement les adresses énumérées n'entrent pas en conflit avec SDDRIVE : ce sont des zones de communication avec le minidos.
Il est normal qu'elles soient utilisées par le programme de chargement pour communiquer avec le contrôleur.

Code : Tout sélectionner

; Zones de travail du controleur de disquette
DK_ERR  EQU $60e5      ; code erreur
DK_NAM  EQU $60e7      ; pointeur sur nom de fichier
DK_CAT  EQU $60e9      ; pointeur sur buffer
DK_TYP  EQU $60eb      ; type de fichier
DK_FLG  EQU $60ec      ; flag de fichier 
DK_FAT  EQU $60ed      ; adresse de la FAT
DK_MOD  EQU $60f0      ; code operation logique
DK_FIN  EQU $60f3      ; dernier bloc
DK_SCT  EQU $60f5      ; numero de secteur
DK_BLK  EQU $60f6      ; numero de bloc  
DK_TDS  EQU $60f7      ; nbre d'octets du dernier secteur du fichier
DK_IFA  EQU $60f9      ; numero de bloc alloue
DK_PSB  EQU $60fa      ; numero du premier secteur du bloc
DK_PBC  EQU $60fb      ; numero de piste du bloc courant
DK_BFR  EQU $6200      ; buffer de lecture/ecriture secteur
Les zones utilisées par SDDRIVE pour stocker des variables qui ne doivent pas être écrasées sont :
$6051-$6054
$6057
$608E-$609A
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Conversion Jeux Thomson TO au format SD

Message par __sam__ »

Argh, donc c'est pas ca alors :( Zut j'espérais bien.

Tiens un truc, quand je vois les zones à préservées pour le minidos, est-ce qu'il n'y aurait pas moyen que tu étendes, pour ce débug, le test du débuggeur en écriture pour couvrir 'ensemble de ces emplacements et détecter ainsi au plus tôt si ces zones sont écrasées.
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 : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Conversion Jeux Thomson TO au format SD

Message par Daniel »

Il y a des chances que l'erreur soit dans le "scratchdos" du contrôleur SDDRIVE, puisqu'il est différent de celui du TO8.
Au départ j'ai recopié le contrôleur CD90-640, en passant le nombre de pistes de 40 à 80 et en supprimant la simple densité.
Dernièrement j'ai fait une modification pour inverser les deux moitiés de FAT en RAM, et j'ai simplifié la routine d'allocation d'un bloc.
En comparant avec les routines du TO8 on devrait trouver des différences et peut-être la cause du plantage.
C'est probablement subtil, car "La Marque Jaune" se charge correctement depuis l'inversion de la FAT.
Les Dieux de la Glisse doivent avoir une autre particularité.

Code : Tout sélectionner

;------------------------------------------------------
; SCRATCH DOS
;------------------------------------------------------
SCRDOS
  FCC   "SCRATCH "
  FCC   "DOS"

;------------------------------------------------------
; FINTR = cloture d'ecriture
;------------------------------------------------------
FINTR
  LDB   <DK_MOD        ; code operation logique   
  CMPB  #$02
  BEQ   ECRFA          ; ecriture de la FAT
  DEC   <DK_MOD        ; code operation logique
  BSR   RECFI          ; ouverture fichier
  BCS   ECRFA9         ; erreur d'ouverture
  TSTB  
  BEQ   FINTR1
  LBSR  RECUP          ; effacement d'un fichier
  BCS   ECRFA9         ; erreur d'effacement
FINTR1
  INC   <DK_MOD        ; code operation logique
  BSR   RECFI          ; ouverture d'un fichier
  BCS   ECRFA9         ; erreur d'ouverture
  LDB   #$0a           ; boucle pour 11 octets
  LDX   <DK_NAM        ; pointeur sur nom+ext fichier
FINTR2
  LDA   B,X            ; octet du nom+extension 
  STA   B,Y            ; copie dans le repertoire
  DECB                 ; decremente indice
  BGE   FINTR2         ; octet suivant
  BSR   ECRSE          ; ecriture secteur
  BCS   ECRFA9         ; erreur d'ecriture

;------------------------------------------------------
; Ecriture de la FAT
;------------------------------------------------------
ECRFA
  LDX   <DK_FAT        ; adresse de la FAT
  BSR   INVFA          ; inversion de la FAT
  LDA   #$02           ; n° secteur de la FAT (sect 2)
  STA   <DK_SEC        ; stocke le numero de secteur
  LDB   #$14           ; piste de la FAT (piste 20)
  CLRA                 ; poids fort du numero de piste 
  STD   <DK_TRK        ; stocke le numero de piste
  STX   <DK_BUF        ; adresse du buffer secteur
  BSR   ECRSE          ; ecriture secteur
  BCS   ECRFA9         ; erreur ecriture
  CLR   <DK_MOD        ; indicateur cloture fichier
ECRFA9
  RTS   

;------------------------------------------------------
; LECFA = Chargement de la FAT
;------------------------------------------------------
LECFA
  LDX   <DK_FAT        ; adresse de la FAT
  STX   <DK_BUF        ; adresse du buffer secteur
  LDA   #$02           ; numero secteur a lire
  BSR   LSEC20         ; lecture secteur piste 20
  LEAX  128,X          ; ajout de $80
  STX   <DK_FAT        ; stocker le nouveau pointeur

;------------------------------------------------------
; INVFA = Inversion des deux moities de la FAT
; En entree X pointe au milieu du buffer de la FAT
; En sortie X pointe sur le buffer de la FAT 
;------------------------------------------------------
INVFA
  LDY   #$80           ; nombre de boucles
INVFA1    
  LDA   -128,X         ; octet premiere moitie 
  LDB   ,X             ; octet deuxieme moitie
  STB   -128,X         ; 2ere moitie dans 1ere
  STA   ,X+            ; 1ere moitie dans 2eme
  LEAY  -1,Y           ; decrementation compteur 
  BNE   INVFA1         ; nouvelle boucle
  LEAX  -$0100,X       ; X pointe sur le buffer de la FAT
  RTS                  ; retour

;------------------------------------------------------
; Sortie en erreur
;------------------------------------------------------
RETERR
  STA   <DK_ERR        ; code erreur
  COMA                 ; set carry
  COMA                 ; restaure valeur de A
  RTS   

;------------------------------------------------------
; Chargement 1er secteur catalogue
;------------------------------------------------------
LDIR0
  LDA   #$03           ; numero de secteur catalogue
  LDX   <DK_CAT        ; pointeur sur buffer
  STX   <DK_BUF        ; adresse buffer

;------------------------------------------------------
; Chargement secteur piste 20
;------------------------------------------------------
LSEC20
  STA   <DK_SEC        ; numero de secteur
  LDB   #$14           ; piste 20
  CLRA                 ; zero dans poids fort
  STD   <DK_TRK        ; numero de piste
  LDA   #$02           ; code operation lecture secteur
  BRA   SECTIO         ; operation sur secteur

;------------------------------------------------------
; ECRSE = Ecriture d'un secteur
;------------------------------------------------------
ECRSE
  LDA   #$08           ; code operation ecriture secteur

;------------------------------------------------------
; Operation sur secteur (code operation dans A)
;------------------------------------------------------
SECTIO
  STA   <DK_OPC        ; code operation
  LDY   <DK_CAT        ; pointeur sur buffer
  LBSR  OPTABL         ; execution fonction standard
  LDA   #$03           ; A=$03
  RTS   

;------------------------------------------------------
; RECFI = Ouverture d'un fichier
;------------------------------------------------------
RECFI
  BSR   LDIR0          ; charge 1er secteur catalogue 
RECFI1
  BCS   RETERR         ; sort si erreur
  LDX   #$0008         ; compteur de noms dans X
  LDY   <DK_CAT        ; pointeur sur buffer
RECFI2
  LDU   <DK_NAM        ; pointeur sur nom de fichier
  LDB   <DK_MOD        ; code operation logique
  CMPB  #$03
  BNE   RECFI3
  LEAU  SCRDOS,PCR     ; adresse du nom de fichier
RECFI3
  CLRB  
RECFI4
  CMPB  #$0b
  BCC   RECFI8
  LDA   B,Y            ; octet de la FAT
  CMPA  #$ff          
  BEQ   RECFI7
  INCB  
  CMPA  ,U+
  BEQ   RECFI4
  LEAY  $20,Y          ; adresse fichier suivant
  LEAX  -$01,X         ; decrementation indice 
  BNE   RECFI2         ; lecture entree suivante 
  INC   <DK_SEC        ; secteur suivant
  LDA   <DK_SEC        ; A = n° secteur
  CMPA  #$10           ; comparaison a 16
  BHI   RECFI7         ; superieur a 16
  LBSR  OPTABL         ; lecture secteur
  LDA   #$03           ; erreur I/O
  BRA   RECFI1         ; secteur suivant
RECFI7
  CLRB                 ; raz n° secteur
  BRA   RECFI9         ; sortie
RECFI8
  LDB   $0b,Y          ; type de fichier (catalogue)
  CMPB  <DK_TYP        ; type de fichier
  BNE   RECFI7
  LDB   $0c,Y          ; flag de fichier (catalogue)
  CMPB  <DK_FLG        ; flag de fichier
  BNE   RECFI7
  LDB   <DK_SEC        ; numero de secteur
  LDA   $0d,Y          ; numero de bloc (catalogue)
  STA   <DK_BLK        ; numero de bloc
  CLR   <DK_SCT        ; numero de secteur
  LDX   $0e,Y          ; taille dernier secteur (catalogue)
  STX   <DK_TDS        ; nbre d'octets du dernier secteur du fichier
  STY   <DK_PSB        ; numero du premier secteur du bloc
RECFI9
  STB   <DK_IFA        ; numero de bloc alloue
  CLRA
  RTS

;------------------------------------------------------
; ALLOD = allocation d'un fichier
;------------------------------------------------------
ALLOD
  LDY   <DK_FAT        ; adresse de la FAT
; BSR   ALLOB4         ; test place libre version CD90-640
  BSR   ALLOB          ; test place libre version carte SD
ALLOD1
  BCS   RECFI1         ; erreur plus de place
  STB   <DK_BLK        ; numero de bloc
  LBSR  LDIR0          ; charge debut directory
ALLOD2  
  BCS   ALLOD1         ; sortie en erreur
  LDY   <DK_CAT        ; pointeur sur buffer
  LDX   #$0008         ; compteur de noms dans X
ALLOD3
  LDB   ,Y             ; premier octet du nom 
  BEQ   ALLOD6         ; $00=fichier efface --> OK
  LDA   #$05
  CMPB  #$ff           ; test fin de repertoire
  BEQ   ALLOD6         ; $FF=fin de repertoire --> OK
  LEAY  $20,Y          ; entree suivante dans le repertoire 
  LEAX  -$01,X         ; decrementation compteur
  BNE   ALLOD3         ; traitement entree suivante
  INC   <DK_SEC        ; secteur suivant du repertoire
  LDA   <DK_SEC        ; A=numero de secteur
  CMPA  #$10           ; test 16
  BHI   ALLOD4         ; plus de place dans le repertoire
  LBSR  OPTABL         ; charge le secteur suivant 
  LDA   #$03           ; code erreur 3
  BRA   ALLOD2         ; sortie en erreur
ALLOD4
  LDA   #$05           ; code "disque plein"
ALLOD5
  BRA   ALLOD1         ; sort avec erreur
ALLOD6
  LDX   <DK_NAM        ; pointeur sur nom de fichier
  LDB   <DK_MOD        ; code operation logique
  CMPB  #$03
  BNE   ALLOD7
  LEAX  SCRDOS,PCR     ; adresse nom de fichier
ALLOD7
  LDB   #$0a           ; pour 11 octets (nom+extension)
ALLOD8
  LDA   B,X            ; recopie le nom et l'extension
  STA   B,Y            ; dans le catalogue
  DECB                 ; decrementation compteur
  BGE   ALLOD8         ; caractere suivant
  LDA   <DK_TYP        ; type de fichier 
  STA   $0b,Y          ; stocke en 12e position
  LDA   <DK_FLG        ; flag de fichier
  LDB   <DK_BLK        ; numero de bloc
  STD   $0c,Y          ; stocke en 13e position
  LBRA  ECRSE          ; ecriture du repertoire

;------------------------------------------------------
; ALLOB = allocation d'un bloc (version carte SD)
; Remarque : la FAT commence par un octet $00
; Il y a un décalage de 1 entre le numero de bloc
; et son indice dans la FAT (bloc 0 = indice 1)  
;------------------------------------------------------
ALLOB
  LDD   #$FF00          ; A=255 B=0
ALLOB1
  INCB                  ; bloc suivant
  CMPA  B,Y             ; bloc B libre ?
  BEQ   ALLOB2          ; oui ==> trouvé
  CMPB  #$A0            ; test dernier bloc  
  BNE   ALLOB1          ; bloc suivant 
  LDA   #$05            ; erreur pas de d'entrée trouvées
  LBRA  RETERR          ; sortie en erreur
ALLOB2
  CLR   B,Y             ; on marque le bloc comme occupé
  DECB                  ; mise a jour du
  STB   <DK_IFA         ; numero de bloc alloue
ALLOB9
  CLRA
  RTS

;------------------------------------------------------
; RECUP = effacement d'un fichier
;------------------------------------------------------
RECUP
  LDA   $0D,Y          ; numero du 1er bloc a liberer
  STA   <DK_BLK        ; numero de bloc
  CLR   ,Y             ; raz 1er caractere du nom de fichier
  LBSR  ECRSE          ; ecriture du repertoire 
  BCS   ALLOD5         ; erreur d'ecriture
  LDY   <DK_FAT        ; adresse de la FAT
  LDB   <DK_BLK        ; numero de bloc
RECUP1
  INCB                 ; bloc+1
  LDA   B,Y            ; A = octet de la FAT
  CLR   B,Y            ; octet FAT = $00
  DEC   B,Y            ; octet FAT = $FF (bloc libre)
  TFR   A,B            ; B = ancien octet de la FAT
  CMPA  #$c0           ; bloc de fin du fichier ?
  BCS   RECUP1         ; sinon bloc suivant
  BRA   ALLOB9         ; retour

;------------------------------------------------------
; MAJCL = Mise a jour cluster
;------------------------------------------------------
MAJCL
  LDB   <DK_BLK          ; numero du bloc                              
  CLRA                   ; A=0 
  LSRB                   ; divise par 2 (carry = b0) 
  STD   <DK_PBC          ; numero piste (carry inchange)
  INCA                   ; A=1          (carry inchange)
  STA   <DK_SCT          ; secteur=1    (carry inchange) 
  BCC   MAJCL9           ; branchement si n° de bloc pair
  LDA   #$09             ; secteur=9 pour les blocs impairs
MAJCL9
  STA   <DK_PSB          ; numero du premier secteur du bloc
  RTS   
Daniel
L'obstacle augmente mon ardeur.
Répondre