Conversion Jeux Thomson TO au format SD
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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 ?
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
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: Conversion Jeux Thomson TO au format SD
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 :
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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.
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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.
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
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: Conversion Jeux Thomson TO au format SD
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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
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: Conversion Jeux Thomson TO au format SD
Autre problème de conversion de fd vers sd : Les Dieux de la Glisse
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.
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.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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 leDonc 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....)
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
(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
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: Conversion Jeux Thomson TO au format SD
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.
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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
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
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: Conversion Jeux Thomson TO au format SD
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 :
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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
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: Conversion Jeux Thomson TO au format SD
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.
Les zones utilisées par SDDRIVE pour stocker des variables qui ne doivent pas être écrasées sont :
$6051-$6054
$6057
$608E-$609A
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
$6051-$6054
$6057
$608E-$609A
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7988
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Conversion Jeux Thomson TO au format SD
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.
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
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: Conversion Jeux Thomson TO au format SD
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é.
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.
L'obstacle augmente mon ardeur.