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