[Thomson] SD2DSK, création de disquette sur TO8D

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
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

[Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

La méthode la plus fiable et la plus rapide pour créer une disquette Thomson à partir d'un fichier "image de disquette" sur PC était jusqu'à aujourd'hui SDTRANSFERT : http://dcmoto.free.fr/programmes/sdtransfert/index.html

Elle nécessite une interface SDMOTO, que tout le monde ne possède pas. Elle impose de saisir en hexadécimal l'adresse physique du fichier .fd, il serait plus simple de le choisir dans une liste.

Comme il y a de plus en plus d'utilisateurs de SDDRIVE (126 vendus au 02/12/2020) j'ai programmé aujourd'hui l'application SD2DSK. Elle permet, avec SDDRIVE, de créer une disquette Thomson sur TO8, TO8D ou TO9+ à partir d'un fichier .sd de la carte microSD de SDDRIVE.

L'application SD2DSK donne la liste des fichiers de la carte (exactement comme sddrive.sel). On choisit le fichier .sd dans la liste et il initialise automatiquement la disquette physique. Voici le fichier .sd de la première version de test (02/12/2020) :
sddrive_sd2dsk_20201202.zip
(26.08 Kio) Téléchargé 114 fois

Il y a toutefois un petit problème dans cette première version : la copie de la première face est bonne, par contre la deuxième face n'est pas créée, le programme s'arrête sur une erreur d'écriture dès le premier secteur (erreur 4 retournée en $604E). Je n'ai pas encore réussi à corriger, car tout fonctionne bien dans l'émulateur dcmoto. Le problème se produit uniquement avec la machine réelle. Je donne ci-dessous la routine de copie, si vous voulez m'aider à résoudre ce bug :

Code : Tout sélectionner

;------------------------------------------------------
; COPIE DU FICHIER .SD SUR LA DISQUETTE (2 FACES)
;------------------------------------------------------
COPIE
  LDY   #CLS           ; caractere $0C
  LBSR  WSTR           ; effacement ecran 
  CLRA                 ; face 0 
  STA   <$49           ; stockage numero d'unite

; selection contrôleur interne
  BSR   SAVSD          ; sauvegarde infos carte SD 
  BSR   RESDSK         ; restauration infos disquette 
  LDB   $6081          ; valeur de $E7E7
  ANDB  #$7F           ; b7=0 pour controleur interne
  STB   $6081          ; selectionne le
  STB   $E7E7          ; controleur interne

; initialisation contrôleur interne
COPIE0
  LDA   #$01           ; code initialisation controleur
  STA   <$48           ; stockage code fonction
  JSR   $E004          ; appel DKCONT 

; lecture piste fichier .sd  
COPIE1
  BSR   SAVDSK         ; sauvegarde infos disquette 
  BSR   RESSD          ; restauration infos carte SD 
  CLRA                 ; piste 0
  STA   <$4A           ; zero
  STA   <$4B           ; numero de piste
COPIE2
  LDB   $6081          ; valeur de $E7E7
  ORB   #$80           ; b7=1 pour controleur externe
  STB   $6081          ; selectionne le
  STB   $E7E7          ; controleur externe
  LDA   #$02           ; code lecture secteur
  STA   <$48           ; stockage code fonction
  LDA   #$01           ; premier secteur
  STA   <$4C           ; numero secteur
  LDY   #$A000         ; banque memoire
  STY   <$4F           ; adresse buffer
COPIE3
  JSR   $E004          ; appel DKCONT 
  LDA   <$4C           ; numero secteur
  CMPA  #$10           ; test fin de piste 
  BEQ   COPIE4         ; fin du transfert de la piste
  INCA                 ; secteur suivant
  STA   <$4C           ; stockage numero secteur
  LEAY  $100,Y         ; buffer secteur suivant 
  STY   <$4F           ; stockage adresse buffer
  BRA   COPIE3

; ecriture piste disquette  
COPIE4
  BSR   SAVSD          ; sauvegarde infos carte SD 
  BSR   RESDSK         ; restauration infos disquette 
  LDB   $6081          ; valeur de $E7E7
  ANDB  #$7F           ; b7=0 pour controleur interne
  STB   $6081          ; selectionne le
  STB   $E7E7          ; controleur interne
  LDA   #$08           ; code ecriture secteur
  STA   <$48           ; stockage code fonction
  LDA   #$01           ; premier secteur
  STA   <$4C           ; numero secteur
  LDY   #$A000         ; banque memoire
  STY   <$4F           ; adresse buffer
COPIE5
  JSR   $E004          ; appel DKCONT        
  TST   <$4E           ; test code retour
  BNE   ERRDSK         ; erreur disk
  LDA   <$4C           ; numero secteur
  CMPA  #$10           ; test fin de piste 
  BEQ   COPIE6         ; fin du transfert de la piste
  INCA                 ; secteur suivant
  STA   <$4C           ; stockage numero secteur
  LEAY  $100,Y         ; buffer secteur suivant 
  STY   <$4F           ; stockage adresse buffer
  BRA   COPIE5         ; secteur suivant
COPIE6
  LDY   #POINT         ; caractere '.'
  BSR   WSTR           ; affichage d'un point 
  LDA   <$4B           ; numero de piste
  CMPA  #$4F           ; test derniere piste
  BEQ   COPIE8         ; fin de la copie de la face
  INCA                 ; piste suivante 
  STA   <$4B           ; numero de piste
  BRA   COPIE2         ; piste suivante

; fin du transfert de la face
COPIE8
  LDY   #SAUT          ; $0D,$0A,$00
  BSR   WSTR           ; saut de ligne 
  LDA   <$49           ; numero d'unite
  BNE   COPIE9         ; fin de disquette
  INCA                 ; face suivante
  STA   <$49           ; stockage numero d'unite
  LBRA  COPIE1         ; copie face 1
COPIE9
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par __sam__ »

Question idiote avant de regarder le source, mais sait-on jamais: ta face 1 est-elle formatée sur le thomson ??
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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Oui, bien sûr, elle est formatée. J'ai vérifié qu'il n'y avait pas d'erreur en faisant BACKUP0TO1 et BACKUP1TO0.
J'avais pensé à un débordement de pile, mais comme ça marche dans dcmoto ce n'est pas ça.
Ça doit être un truc tout bête, car je n'utilise qu'une seule fonction très simple : DKCONT avec le code opération 8 (écriture secteur).
Il y a peut-être quelque chose de spécial à faire quand on change de face ?

Le programme complet est ici :
sddrive_sd2dsk_source.zip
(7.99 Kio) Téléchargé 106 fois
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par __sam__ »

Plusieurs choses me viennent à l'esprit:
1) l'entrelacement n'est peut-être pas le même entre la face 0 et la face 1. Je pense que cela n'impacte que la vitesse pour trouver le secteur lors des lectures/écritures.

2) la recherche de piste 0 (code $20) est peut-être nécessaire quand on change de face (je pense pas, mais bon).

3) la doc ne parle pas de vérifier la valeur à 0 de DK.STA, mais de tester la retenue qui est à 1 en cas d'erreur. Si ca se trouve tu as un truc en DK.STA qui n'est pas une vraie erreur (le code 04 indique secteur non trouvé).

4) enfin (et j'y crois plus) tu recopie [edit]le[/edit] flag "ROTAT" ($6058) lors du changement de piste.. Mais si le changement de piste est lent (typiquement passer de la piste 79 face 0 à la piste 0 face 1), le moteur se stoppe (c'est une tempo électronique il me semble), mais le flag est recopié à actif. Résultat: quand tu cherches à écrire la piste 0 / face 1: le contrôleur échoue avec une erreur "secteur pas trouvé" car il croit le lecteur toujours en état de rotation et ne le remets pas en marche (il peut-être encore en train de tourner un peu, mais pas à la bonne vitesse cependant). Il faudrait essayer de le passer [edit]à zéro[/edit] après sa copie lors du changement de face pour voir si le contrôleur le remets en route. Ca peut être le petit détail qui manque dans la manip.
Dernière modification par __sam__ le 03 déc. 2020 09:09, modifié 1 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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Le point 1) je n'y crois pas trop. L'entrelacement par défaut doit être 7 sur les deux faces, et même s'il est différent ça n'empêche pas de trouver le secteur. Au pire il faut une rotation de plus.

Le point 2) je ne pense pas, car j'ai essayé de faire un reset du contrôleur au changement de face et ça ne supprime pas l'erreur.

Le point 3) est beaucoup plus probable. Je vais faire des essais pour vérifier

Le point 4) est subtil. C'est aussi une bonne piste à suivre.

Merci pour l'aide. On résout les problèmes plus facilement en équipe que tout seul 8)
A suivre...
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Pour vérifier le point 3) j'ai remplacé le test de $604E par le test de CARRY (BCS) : La même erreur se produit.

Pour vérifier le point 4) j'ai modifié le programme pour commencer par copier la deuxième face :

Code : Tout sélectionner

;------------------------------------------------------
; COPIE DU FICHIER .SD SUR LA DISQUETTE (2 FACES)
;------------------------------------------------------
COPIE
  LDB   #$0C           ; caractere $0C
  LBSR  WCHAR          ; effacement ecran 
  LDA   #$01           ; face 1 
  STA   <$49           ; stockage numero d'unite
Le programme fonctionne dans dcmoto, par contre il sort toujours la même erreur sur la vraie machine : Erreur 4 = secteur non trouvé.
J'ai vérifié par des PEEKs :

Code : Tout sélectionner

$6048 = 8
$6049 = 1
$604A = 0
$604B = 0
$604C = 0
$604D = 0
$604E = 4
J'ai alors fait :

Code : Tout sélectionner

S$=DSKI$(1,0,1)
Device I/O Error
C'est donc la disquette qui est mauvaise :twisted:
De même BACKUP1TO0 donne maintenant Device I/O Error, alors qu'avant les tests cette commande avait marché. La disquette s'est donc détruite entre temps. Ce n'est pas de chance, mais j'aime mieux ça. Mon programme est bon 8)

Ce genre d'aventure me décourage encore plus d'utiliser les disquettes. Vive les cartes SD !
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par __sam__ »

Bon, ca valait le coup de tester quand même. A noter que tester le CC en retour de $E004 est plus rapide (et court) que de tester DK.STA.
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
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Zebulon »

Bonjour Daniel. Concernant l'usage des disquettes c'est un peu ce que je crains même si pour l'instant j'ai misé dessus avec achat de disquettes en assez grande quantité et quelques lecteurs de secours pour vivre l'expérience "authentique". Je crains en effet comme discuté dans un autre fil d'avoir des problèmes de fiabilité du stockage au fil du temps où tout simplement de voir une disquette abîmée inopinément (ce qui devait bien se produire même il y a 30 ans) à cause d'une saleté ou autre. Je sais que tôt ou tard je viendrai à la carte SD...
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Après quelques essais infructueux j'ai réussi à trouver une bonne disquette et la copie a bien fonctionné.
La version définitive de SDDRIVE_SD2DSK a été ajoutée au site dcmoto : http://dcmoto.free.fr/index.html

Image Image

Code : Tout sélectionner

=================================================
SD2DSK - Transfert de fichier .sd sur disquette
Fonctionne sur TO8, TO8D et TO9+
Daniel Coulom - 03/12/2020
=================================================

Mode opératoire pour créer une disquette Thomson
avec SDDRIVE à partir d'un fichier .sd


-------------------------
Préparation
-------------------------

- Mettre une disquette avec les deux faces formatées dans
le premier lecteur de l'ordinateur TO8, TO8D ou TO9+.
Attention: le contenu sera entièrement remplacé.

- Mettre sur la carte de SDDRIVE le fichier sddrive_sd2dsk.sd
et le fichier .sd contenant l'image de la disquette à créer.
Supposons pour la suite qu'il se nomme disquette.sd.


-------------------------
Création de la disquette
-------------------------

- Lancer le BASIC 512 au menu d'accueil du TO8, TO8D ou TO9+.

- Lancer le programme de sélection de SDDRIVE:
POKE &HE7E7,$HD4
POKE &H6081,$HD4
EXEC &HE025
L'écran "SDDRIVE" donne la liste des fichiers de la carte.

- Dans la liste des fichiers sélectionner sdrive_sd2dsk.sd

- Lancer SD2DSK par la commande RUN"AUTO.BAT"
L'écran "SD2DSK" donne la liste des fichiers de la carte.

- Dans la liste des fichiers sélectionner disquette.sd
La copie de la première face commence.
Un point s'affiche pour chaque piste transférée.

- Après 80 pistes un saut de ligne indique le changement
de face et le transfert continue.

- Si une erreur de lecture de la carte SD ou une erreur
d'écriture de la disquette se produit, un message
d'erreur est affiché.

- S'il n'y a pas d'erreur, à la fin du transfert un
message s'affiche pour confirmer la copie.

- L'appui sur une touche permet de revenir au Basic.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par 6502man »

Merci Daniel, un outil bien pratique pour ceux qui veulent recrée de vraie disquette :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par fneck »

Dans ton programme, tu ne pourrais pas inclure une routine qui vérifierait la disquette et générerait un message approprié en cas d'erreur?
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Dans le programme SD2DSK, à chaque écriture d'un secteur il y a un test d'erreur.
S'il y a eu un problème le programme affiche un message d'erreur : "Erreur écriture disquette".
Le code erreur peut être affiché par une instruction BASIC : PRINT PEEK(&H604E).

Pour vérifier une disquette Thomson avant de l'utiliser il y a une commande très simple : BACKUP0TO1
Tous les secteurs sont copiés un par un et en cas d'erreur un message s'affiche : "Device I/O Error".
On peut facilement savoir où est l'erreur :
Face : PRINT PEEK(&H6049)
Piste : PRINT PEEK(&H604B)
Secteur : PRINT PEEK(&H604C)
Dernière modification par Daniel le 03 déc. 2020 20:58, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par __sam__ »

@Daniel Je crois que si tu positionne le bit 8 de la commande d'écriture dans DK.STA (donc #$88 si je ne m'abuse), le controller va faire une vérif lors de l'écriture. C'est plus lent, mais ca t'évites de modifier le code.
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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SD2DSK, création de disquette sur TO8D

Message par Daniel »

Ah oui, ça pourrait être une option à choisir par l'utilisateur. Exactement comme le VERIFYON du Basic.
Je le note pour une prochaine version. J'attends d'avoir quelques retours d'utilisateurs.

Je ne suis pas sûr que SD2DISK ait autant de succès que Mission: Liftoff :roll:
Les disquettes vont s'user et se démagnétiser, bientôt plus personne ne pourra les lire ou les écrire.
S'il en reste en bon état on les utilisera par nostalgie ou pour montrer aux enfants comment on chargeait les programmes au siècle dernier.
Daniel
L'obstacle augmente mon ardeur.
Répondre