[Thomson] SDDRIVE

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

MSX45
Messages : 30
Inscription : 09 août 2016 17:28
Localisation : ORLEANS

Re: [Thomson] SDDRIVE

Message par MSX45 »

Ça m’intéresse
Donc on peut faire une carte SD en FAT32 de 1Go avec alloc 64Ko

J'ai essayé de faire un override de la table d'allocation avec format g: /fs:fat32 /a:64K
Ça me met "la taille de cluster spécifiée est trop grande pour FAT32"

Comment avez vous fait ?
__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ »

Chez moi la boite dialogue de w10 permet de choisir autre chose que la taille de cluster par défaut (sur clef USB du moins, mais je vois pas pourquoi ce serait différent sur une carte SD car le système de fichier est indépendant sur support physique.)
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
MSX45
Messages : 30
Inscription : 09 août 2016 17:28
Localisation : ORLEANS

Re: [Thomson] SDDRIVE

Message par MSX45 »

J'ai essayé mes cartes SD en FAT32 avec WIN10 , je vois les même tables d'allocations que WIN7

Donc pas mieux avec WIN10....

Je me demande comment hlide a réussi
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

Méfiez-vous quand même du programme sddrive.sel. Son analyse de la carte SD pour trouver les entrées du répertoire est très simpliste et ne tient pas compte de toutes les subtilités des systèmes de fichiers. En particulier en FAT32, le répertoire peut être réparti dans plusieurs clusters chaînés par la FAT, mais sddrive.sel ne traite que le premier cluster. Je donne ci-dessous les sources du programme pour que vous puissiez apprécier sa médiocrité. Il n'est pas interdit de l'améliorer :wink:

Code : Tout sélectionner

/**************************************************\
*             S D D R I V E _ S E L                * 
*           (c) 2019 - Daniel Coulom               *  
*           http://dcmoto.free.fr/                 *
*           http://forum.system-cfg.com/           *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune  garantie  et *
* sans  engager  la  responsabilité  de  l'auteur. *
* Vous  pouvez  l' utiliser,  le  modifier  et  le *
* diffuser librement, en conservant cette  licence *
* et les références de l'auteur dans   toutes  les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/

* Ce programme permet de selectionner un fichier .sd 
* dans une liste deroulante et de monter l'image.
* Cette version est compatible avec les cartes SD
* et SDHC sur MO et sur TO
* Restrictions :
* - 364 fichiers maxi dans le repertoire principal
* - En FAT32 limitation supplementaire en fonction
*   de la taille de l'unite d'allocation et de la
*   taille des noms longs :
*   4096 = environ 32 fichiers de 39 caracteres  
*   8192 = environ 64 fichiers de 39 caracteres
*   16Ko = environ 128 fichiers de 39 caracteres
*   32Ko = environ 256 fichiers de 39 caracteres
*
* Occupation memoire :
* - programme en $9000-$9CFF
* - buffer lecture secteur en $9D00-$9EFF
* - pile systeme deplacee en $9F00-$9FFF 
* - table des noms en $5000-$8FFF (MO)
*                  ou $A000-$DFFF (TO)
* Pour appeler le programme SDDRIVE_SEL en BASIC
* faire CLEAR,&H4FFF (MO) ou CLEAR,&H8FFF (TO)
*
* Nota :
* La pile systeme est deplacee en $9CFF pour eviter 
* que la routine d'affichage d'un caractere (WCHAR) 
* ecrase les zones de travail du controleur SDDRIVE
* (SD_LB0, SD_TYP, SD_CMD et SD_LBA)    
    
/**************************************************\
*                Version 2019.06.04                *
\**************************************************/
* Historique
* 2019.06.04 Initialisation banque TO7/70 en BASIC 128
* 2019.05.21 Utilisation des quatre fleches + ENTREE
* 2019.02.12 Adresse du buffer dans Y pour RS512
* 2018.11.09 Annulation de la modification 2018.11.08
* 2018.11.08 LBA et type carte stockes dans secteur 1
* 2018.07.02 Deplacement SD_TYP, SD_LB0, SD_LBA
* 2018.05.24 Selection video couleur MO avant retour
* 2018.01.04 $HE02E/$HA02E devient $HE025/$HA025
* 2017.12.18 Effacement ecran apres selection
* 2017.12.17 Test TO/MO par la valeur en $FFF2
* 2017.12.15 Affichage de messages d'aide MO et TO
* 2017.12.14 Deplacement de la pile systeme en $9CFF
* 2017.12.14 Deplacement table des noms MO en $5000 
* 2017.12.14 Deplacement buffer de lecture en $9D00 
* 2017.12.10 Deplacement de la pile systeme en $9FFF
* 2017.12.08 Version initiale issue de SDSEL

*------------------------------------------------------
* DEFINITION DES ZONES DE TRAVAIL EN RAM
*------------------------------------------------------
SD_LB0  EQU $51       adresse du LBA du fichier .sd 
SD_TYP  EQU $57       type de carte SD=0 SDHC=1
SD_CMD  EQU $8E       adresse du code commande
SD_LBA  EQU $8F       adresse du LBA du secteur a lire

*------------------------------------------------------
* INITIALISATIONS EN FONCTION DE L'ORDINATEUR
*------------------------------------------------------
  ORG   $9000 
INIT
  STS   SAVES         sauvegarde du registre S
  LDS   #$9CFF        nouvelle valeur du registre S            
  ORCC  #$50          desactive les interruptions 
  LDA   #$60          valeur initialisation DP pour TO
  LDB   >$FFF2        poids fort du vecteur SWI3
  BPL   INIT0         positif --> TO 

*------------------------------------------------------
* Initialisations speciales pour MO
*------------------------------------------------------
  LDD   #$A02B        adresse fonction RS512
  STD   RS512         stockage adresse
  LDD   #$5000        adresse de la table des noms
  STD   TDEB          adresse debut de table
  STD   TFIN          adresse fin de table
  STD   TTOP          adresse nom en haut de l'ecran
  STD   TSEL          adresse nom selectionne
  LDD   #$9000        adresse table des noms + $4000
  STD   TMAX          adresse haute de la table des noms
  LDD   #$3F82        affichage caractere MO = SWI #$82
  STD   WCHAR         modification routine affichage
  LDB   #$8A          lecture clavier MO = SWI #$8A
  STD   RCHAR         modification routine lecture
  LDB   #$7B          code inversion video pour MO
  STB   INVER1+1      modification code inversion video
  LDA   #$20          valeur initialisation DP pour MO
  BRA   INIT1         initialisation de l'ecran 

*------------------------------------------------------
* Initialisation banque memoire TO7/70 en BASIC 128
*------------------------------------------------------
INIT0
  LDB   #$38          caractere 8
  CMPB  >$0009        test du 8 de BASIC 128
  BNE   INIT1         ce n'est pas le BASIC 128 
  LDB   $E7CB         charger DDRB
  ANDB  #$FB          RAZ bit 2
  STB   $E7CB         modifier DDRB
  LDB   #$0F          valeur pour premiere banque RAM
  STB   $E7C9         stocker dans PORTB 
  LDB   $E7CB         charger DDRB
  ORB   #$04          positionner bit 2
  STB   $E7CB         modifier DDRB
  
*------------------------------------------------------
* Initialisation de l'ecran
*------------------------------------------------------
INIT1
  TFR   A,DP          DP = $20(MO) ou $60(TO)
  SUBA  #$20          adresse ecran poids fort
  CLRB                adresse ecran poids faible   
  TFR   D,X           debut ecran
  ADDD  #$0500        taille du logo
  PSHS  B,A           empilage adresse fin logo
  LDY   #ECRAN        adresse chaine initialisation ecran
  LBSR  WSTR          affichage d'une chaine 

*------------------------------------------------------
* Affichage du logo SDDRIVE
*------------------------------------------------------
LOGO
  LDY   #SDLOGO       index donnees
LOGO1
  LDB   #$01          nombre octets identiques 
  LDA   ,Y+           lecture octet donnee
  BEQ   LOGO9         fin des donnees
  CMPA  #$20          nombre maxi repetitions
  BHI   LOGO2         ce n'est pas une repetition  
  TFR   A,B           nombre de repetitions
  LDA   ,Y+           lecture octet donnee
LOGO2
  ADDA  #$41          ajouter 65
LOGO3
  STA   ,X            afficher l'octet donnee
  LEAX  $28,X         passage ligne suivante  
  CMPX  ,S            fin du logo dans l'ecran
  BLO   LOGO4         fin non encore atteinte
  LEAX  -$4FF,X       debut colonne suivante
LOGO4  
  DECB                decrementation compteur
  BNE   LOGO3         nouvelle repetition
  BRA   LOGO1         sequence suivante
LOGO9
  PULS  A,B           depilage D 
  
*------------------------------------------------------
* LECTURE DU PREMIER SECTEUR DE LA CARTE (MBR ou BOOT)
* Table des partitions en $1BE-$1FD
* Premiere partition en $1BE-$1CD
* - $1BE = Boot Indicator ($00=inactif, $80=actif)
* - $1BF-$1C1 = Starting CHS values
* - $1C2 = Partition type descriptor
*          04: FAT16 size less than 32 MB
*          06: FAT16 size greater or equal 32 MB
*          0B: FAT32
* - $1C3-$1C5 = Ending CHS values
* - $1C6-$1C9 = Starting sector
* - $1CA-$1CD = Partition size in sectors
* Signature en $1FE-$1FF = $55AA
*------------------------------------------------------
  LBSR  LINIT         raz ligne 
  LDD   #$0000        numero du secteur a lire
  STD   <SD_LBA       adresse physique (poids fort)
  STD   <SD_LBA+2     adresse physique (poids faible)
  LDY   >BUFFER       adresse du buffer
  JSR   [RS512]       lecture secteur 512 octets
  LDX   >BUFFER       adresse du buffer
  LDD   #$55AA        Signature secteur
  CMPD  $1FE,X        Test signature
  LBNE  ERROR         Signature incorrecte
* astuce pour differencier un MBR d'un Boot Sector
* le MBR a toujours $80 ou $00 en $1BE (pas certain)   
  LSL   $1BE,X        Boot indicator 
  BNE   ABOOT1        Pas de MBR, donc boot record
* seule la premiere partition est exploree,
* son numero de secteur doit tenir dans deux octets
  LDA   $1C7,X        LBA partition pds fort    
  LDB   $1C6,X        LBA partition pds faible  
  STD   PSECT         stockage secteur debut partition
  
*------------------------------------------------------
* Lecture du Boot Record
* Premier secteur au debut de la partition
* Registre D = numero secteur de debut de partition
*------------------------------------------------------
RBOOT
  STD   <SD_LBA+2     stockage pour CMD17 si carte SDHC
  TST   <SD_TYP       test du type de carte
  BNE   RBOOT1        carte SDHC, sinon calcul pour SD
  ASLB                multiplie par 2 (poids faible)  
  ROLA                multiplie par 2 (poids fort)
  STD   <SD_LBA+1     adresse = numero secteur * $200  
  CLRB                raz registre A
  STB   <SD_LBA+3     raz dernier octet adresse
RBOOT1 
  LDY   >BUFFER       adresse du buffer
  JSR   [RS512]       lecture du secteur de 512 octets

*------------------------------------------------------
* Analyse du Boot Sector
* $1FE-$1FF: $55AA (signature)
* $00B-$00C: nombre d'octets par secteur (512)
* $00D: nombre de secteurs par cluster
* $00E-$00F: nombre de secteurs reserves
* $010: nombre de FATs
* $011-$012: nombre entrees directory (FAT16 seulement)
* $016-$017: nombre secteurs FAT (FAT16 seulement)
* $024-$027: nombre secteurs FAT (FAT32 seulement)
* $02C-$02D: numero cluster directory (FAT32)
* Attention: le debut des donnees commence au cluster 2
* - En FAT16: apres la directory
* - En FAT32: apres les FATs
* Pour faciliter les calculs, on retranche 2 fois le
* nombre de secteurs par cluster au debut des donnees.
* 
* Calcul du secteur physique du repertoire principal
* = numero du secteur de debut de partition
* + nombre de secteurs reserves
* + nombre de secteurs FAT * nombre de FAT
*
* Calcul du secteur physique du cluster zero
* = numero du secteur du debut du repertoire principal
* + nombre d'entrees repertoire / 16 (0 en FAT32)
* - nombre de secteurs par cluster * 2
*
*------------------------------------------------------
ABOOT
  LDX   >BUFFER       adresse du buffer
  LDD   #$55AA        Signature secteur
  CMPD  $1FE,X        Test signature
  LBNE  ERROR         Signature incorrecte
ABOOT1
  CLRA                
  LDB   $0D,X         Nombre de secteurs par cluster
  STD   CSIZ2         Stockage nbre secteurs par cluster
  LDA   $0F,X         Blocs reserves pds fort   ex: $00
  LDB   $0E,X         Blocs reserves pds faible ex: $04
  STD   RSECT         stockage nbre secteurs reserves
* taille FAT (en FAT16) dans D  
  LDA   $17,X         Fat16 size pds fort       ex: $00
  LDB   $16,X         Fat16 size pds faible     ex: $F2
  STD   $16,X         stockage taille FAT16
  BNE   ABOOT2        FAT16 si different de zero  
* taille FAT (en FAT32) dans D  
* 2 octets poids fort ignores (simplification abusive ?)
  LDA   $25,X         Fat32 size pds fort       ex: $03
  LDB   $24,X         Fat32 size pds faible     ex: $AB
* taille totale fonction du nombre de FATs
ABOOT2
  DEC   $10,X         Nombre de FAT             ex: $02
  BEQ   ABOOT3        Une seule FAT
  ASLB                FAT size multiplie par 2  ex: $E4 
  ROLA                FAT size multiplie par 2  ex: $01
* Le registre D contient le nombre de secteurs des FATs
* Les calculs suivants sont faux si le premier numero de
* secteur des donnees ne tient pas dans deux octets 
ABOOT3   
  ADDD  RSECT         ajout nombre de secteurs reserves
  ADDD  PSECT         ajout secteur de debut de partition
  STD   DSECT         stockage secteur debut directory
  LDA   $12,X         nbre entrees directory (poids fort)
  LDB   $11,X         nbre entrees directory (poids faible)
  LSRA                division par 16
  RORB                pour obtenir
  LSRA                le nombre de secteurs
  RORB                de la directory
  LSRA                En FAT32 le nombre d'entrees  
  RORB                de la directory est nul
  LSRA                Le debut des donnees (cluster 2)
  RORB                commence apres les FATs 
  ADDD  DSECT         ajout secteur debut directory
  SUBD  CSIZ2         retrancher le nbre secteurs/cluster 
  SUBD  CSIZ2         retrancher le nbre secteurs/cluster 
  STD   FSECT         stockage numero secteur du cluster 0
  LDD   DSECT         secteur de debut de directory

*------------------------------------------------------
* LECTURE DE LA DIRECTORY
* D contient le numero du secteur a lire
*------------------------------------------------------
RDSECT
  STD   <SD_LBA+2     stockage pour la commande 17
  TST   <SD_TYP       type de carte 0=SD 1=SDHC
  BNE   RDSEC1        carte SDHC
  ASLB                LBA multiplie par 2 
  ROLA                LBA multiplie par 2
  STD   <SD_LBA+1     LBA multiplie par $100
  CLRB
  STB   <SD_LBA+3     octet de poids faible a zero
RDSEC1
  LDY   >BUFFER       adresse du buffer
  JSR   [RS512]       Lecture du secteur 
  LDX   >BUFFER       Adresse du buffer

*------------------------------------------------------
* LECTURE DES ENTREES DE LA DIRECTORY
* Le registre X pointe sur l'entree en cours 
*------------------------------------------------------
RDIR1  
  LDB   ,X            lecture premier octet
  LBEQ  AFFIC         $00 = fin de repertoire
  CMPB  #$E5          $E5 = entree annulee
  BEQ   RDIR9         entree suivante
  LDB   11,X          lecture attribut
  ANDB  #$0F          selection demi-octet droit 
  CMPB  #$0F          attribut #$0F ?
  BNE   RDIR6         entree pour nom court
  LBSR  LNAME         entree pour nom long
  BRA   RDIR9         entree suivante       
RDIR6
  LBSR  GETLBA        recherche du LBA
  LDB   [TFIN]        premier caractere du nom
  CMPB  #$20          test espace
  BNE   RDIR7         non : il y a un nom long
  LBSR  SNAME         oui : decodage nom court 
RDIR7
  LDY   TFIN          adresse ligne courante
  LEAY  45,Y          adresse ligne suivante
  CMPY  TMAX          test taille de la table
  BHI   AFFIC         table pleine
  STY   TFIN          stockage adresse
  LBSR  LINIT         raz ligne suivante
RDIR9
  LEAX  32,X          Adresse entree suivante
  CMPX  FINBUF        Fin du buffer
  BNE   RDIR1         Traitement entree suivante
* lecture secteur suivant
  LDD   DSECT         secteur debut directory 
  ADDD  #$0001        secteur suivant  
  STD   DSECT         nouveau debut directory 
  BRA   RDSECT        lecture secteur directory

*------------------------------------------------------
* AFFICHAGE D'UNE LISTE DE 16 NOMS
*------------------------------------------------------
AFFIC
  LBSR  LOCAT6        positionnement ligne 6
  LDB   #$10          compteur de boucles
  PSHS  B             empilage compteur
  LDY   TTOP          adresse premier nom
AFFIC1
  CMPY  TFIN          test fin de table
  BLS   AFFIC2        fin de table non depassee
  LEAY  -45,Y         rester en fin de table
AFFIC2
  LBSR  DISP          affichage d'une ligne 
  DEC   ,S            decrementation compteur
  BNE   AFFIC1        ligne suivante
  PULS  B             depilage compteur   

*------------------------------------------------------
* TEST DU CLAVIER
*------------------------------------------------------
CLAV
  BSR   RCHAR         lecture du clavier
  CMPB  #$0D          ENTREE
  LBEQ  SETLBA        changement image disquette
  CMPB  #$0A          fleche bas
  BEQ   BAS           ligne suivante 
  CMPB  #$0B          fleche haut
  BEQ   HAUT          ligne precedente 
  CMPB  #$09          fleche droite
  BEQ   DROITE        ecran suivant 
  CMPB  #$08          fleche gauche
  BEQ   GAUCHE        ecran precedent 
  BRA   CLAV          nouveau test

*------------------------------------------------------
* LECTURE DU CLAVIER (RETOUR DANS LE REGISTRE B)
* Version pour TO remplacee par SWI #$8A pour MO
*------------------------------------------------------
RCHAR
  JMP   $E806         lecture du clavier

*------------------------------------------------------
* TRAITEMENT FLECHE DROITE
*------------------------------------------------------
DROITE  
  LDY   TTOP          adresse haut ecran
  LEAY  720,Y         adresse haut ecran suivant
  CMPY  TFIN          test fin de table 
  BHI   CLAV          ne rien faire en fin de table
* changement d'ecran
  STY   TTOP          haut de l'ecran precedent
  STY   TSEL          stockage nouvelle adresse
  BRA   AFFIC         nouvel affichage ecran complet 

*------------------------------------------------------
* TRAITEMENT FLECHE GAUCHE
*------------------------------------------------------
GAUCHE  
  LDY   TTOP          adresse haut ecran
  LEAY  -720,Y        adresse haut ecran precedent
  CMPY  TDEB          test debut de table 
  BCS   CLAV          ne rien faire si plus petit
* changement d'ecran
  STY   TTOP          haut de l'ecran precedent
  STY   TSEL          stockage nouvelle adresse
  BRA   AFFIC         nouvel affichage ecran complet 

*------------------------------------------------------
* TRAITEMENT FLECHE VERS LE BAS
*------------------------------------------------------
BAS  
  LDY   TSEL          adresse ligne selectionnee
  LEAY  45,Y          adresse ligne suivante
  CMPY  TFIN          test fin de table 
  BEQ   CLAV          ne rien faire en fin de table
  STY   TSEL          stockage nouvelle adresse
* test de depassement bas ecran
  LDY   TTOP          adresse haut ecran
  LEAY  720,Y         adresse haut ecran suivant
  CMPY  TSEL          comparaison ligne selectionnee 
  BNE   BAS1          pas de changement d'ecran
* changement d'ecran
  STY   TTOP          haut de l'ecran suivant
  LBRA  AFFIC         nouvel affichage ecran complet 
* pas de changement d'ecran
BAS1  
  LDY   TSEL          adresse ligne selectionnee
  LEAY  -45,Y         adresse ligne precedente
  LBSR  LOCATY        positionnement sur la ligne
  LBSR  DISP          affichage ligne precedente
  LBSR  DISP          affichage ligne selectionnee
  LBRA  CLAV          retour au test du clavier 

*------------------------------------------------------
* TRAITEMENT FLECHE VERS LE HAUT
*------------------------------------------------------
HAUT  
  LDY   TSEL          adresse ligne selectionnee
  CMPY  TDEB          test debut de table 
  LBEQ  CLAV          ne rien faire en debut de table
  LEAY  -45,Y         adresse ligne precedente
  STY   TSEL          stockage nouvelle adresse
* test de depassement haut ecran
  LDY   TTOP          adresse haut ecran
  LEAY  -45,Y         adresse ligne precedente
  CMPY  TSEL          comparaison ligne selectionnee 
  BNE   HAUT1         pas de changement d'ecran
* changement d'ecran
  LEAY  -675,Y        adresse page precedente
  STY   TTOP          haut de l'ecran precedent
  LBRA  AFFIC         nouvel affichage ecran complet 
* pas de changement d'ecran
HAUT1  
  LDY   TSEL          adresse ligne selectionnee
  LBSR  LOCATY        positionnement sur la ligne
  LBSR  DISP          affichage ligne selectionnee
  LBSR  DISP          affichage ligne suivante
  LBRA  CLAV          retour au test du clavier 

*------------------------------------------------------
* INITIALISATION LBA POUR CHANGEMENT IMAGE DISQUETTE
*------------------------------------------------------
SETLBA
  LDY   TSEL          adresse ligne selectionnee
  LDA   CSIZE         nombre de secteurs par cluster
* multiplication par le nombre de secteurs/cluster  
SETLB1
  LSRA                divise par 2 
  BEQ   SETLB2
  LSL   44,Y          decalage octet 4
  ROL   43,Y          decalage octet 3
  ROL   42,Y          decalage octet 2
  ROL   41,Y          decalage octet 1
  BRA   SETLB1        nouvelle boucle
* ajout du secteur du cluster zero 
SETLB2
  LDD   FSECT         numero secteur cluster zero
  ADDB  44,Y          ajout octet 4 
  ADCA  43,Y          ajout octet 3 + retenue
  STD   43,Y          stockage octets 3 et 4
  LDD   41,Y          octets 1 et 2
  ADCB  #0            ajout retenue 
  ADCA  #0            ajout retenue
  STD   41,Y          stockage octets 1 et 2
  TST   <SD_TYP       test du type de carte
  BNE   SETLB4        carte SDHC, sinon calcul pour SD
* initialisation LBA du fichier pour carte SD
SETLB3
  CLRB                zero  
  STB   <SD_LB0+3     octet 4 a zero
  LDB   42,Y          octet de poids fort
  LSLB                multiplie par 2
  STB   <SD_LB0       octet 1 (sans retenue)
  LDD   43,Y          octets 2 et 3
  LSLB                multiplication par 2
  ROLA                multiplication par 2
  STD   <SD_LB0+1     stockage octets 2 et 3
  BCC   RET_OK        stockage LBA dans la carte 
  INC   <SD_LB0       ajout retenue
  BRA   RET_OK        stockage LBA dans la carte
* initialisation LBA du fichier pour carte SDHC
SETLB4
  LDD   41,Y          deux octets de poids fort
  STD   <SD_LB0       stockage
  LDD   43,Y          deux octets de poids faible
  STD   <SD_LB0+2     stockage

*------------------------------------------------------
* AFFICHAGE MESSAGES D'INFORMATION ET D'AIDE
*------------------------------------------------------
RET_OK
  LDY   #INFO         adresse message de chargement
  BSR   WSTR          affichage d'une ligne 
  LDY   TSEL          adresse nom de la disquette
  LBSR  DISP          affichage d'une ligne 
  LDY   #AIDE         adresse aide tous modeles
  BSR   WSTR          affichage aide tous modeles
  TFR   DP,A          valeur registre DP
  SUBA  #$20          soustraire $20
  BNE   RET_TO        TO si non nul
RET_MO
  LDY   #AIDEMO       adresse aide MO
  BRA   RETOUR
RET_TO  
  LDY   #AIDETO       adresse aide TO
  
*------------------------------------------------------
* AFFICHAGE AIDE, SELECTION VIDEO COULEUR,
* RESTAURATION POINTEUR DE PILE ET RETOUR
*------------------------------------------------------
RETOUR
  BSR   WSTR          affichage aide specifique
  BSR   VIDEOC        selection video couleur MO
  ANDCC #$AF          active les interruptions 
  LDS   SAVES         restauration du registre S
  RTS

*------------------------------------------------------
* RETOUR EN ERREUR
*------------------------------------------------------
ERROR
  LDY   #ERREUR
  BSR   WSTR
  BRA   RETOUR

*------------------------------------------------------
* SELECTION PAGE VIDEO COULEUR POUR MO UNIQUEMENT
*------------------------------------------------------
VIDEOC  
  LDB   >$FFF2        poids fort du vecteur SWI3
  BPL   VIDEO9        positif --> TO 
  LDA   $A7C0         chargement PA du PIA systeme
  ANDA  #$FE          raz b0 (page video couleur) 
  STA   $A7C0         selection video couleur
VIDEO9
  RTS
  
*------------------------------------------------------
* LECTURE ET STOCKAGE DU CLUSTER DU FICHIER
*------------------------------------------------------
GETLBA
  LDY   TFIN          Y pointe sur la zone du nom
  LDA   21,X          cluster octet 1
  STA   41,Y          LBA octet 1
  LDA   20,X          cluster octet 2
  STA   42,Y          LBA octet 2
  LDA   27,X          cluster octet 3
  STA   43,Y          LBA octet 3
  LDA   26,X          cluster octet 4
  STA   44,Y          LBA octet 4
  RTS

*------------------------------------------------------
* AFFICHAGE CHAINE TERMINEE PAR ZERO (Adresse dans Y)
*------------------------------------------------------
WSTR
  LDB   ,Y+           caractere a ecrire
  BEQ   WSTR9         fin de la chainee
  BSR   WCHAR         envoi caractere
  BRA   WSTR          caractere suivant
WSTR9
  RTS

*------------------------------------------------------
* AFFICHAGE CARACTERE (CARACTERE DANS REGISTRE B)
* Version TO remplacee par SWI #$82 pour MO
*------------------------------------------------------
WCHAR
  JMP   $E803         envoi caractere

*------------------------------------------------------
* AFFICHAGE D'UNE LIGNE POINTEE PAR Y
* AU RETOUR Y POINTE SUR LA LIGNE SUIVANTE
*------------------------------------------------------
DISP
  CMPY  TSEL          test ligne selectionnee
  BNE   DISP1         ligne normale 
  BSR   INVERS        inversion video
DISP1
  LDA   #$29          nombre de caracteres 41
DISP2
  LDB   ,Y+           caractere a ecrire
  BSR   WCHAR         envoi caractere
  DECA                decrementation compteur
  BNE   DISP2         caractere suivant
  LEAY  -41,Y 
  CMPY  TSEL          test ligne selectionnee
  BNE   DISP9         ligne normale 
  BSR   INVERS        retablir video normale
DISP9  
  LEAY  45,Y          adresse ligne suivante
  RTS

*------------------------------------------------------
* INVERSION VIDEO
*------------------------------------------------------
INVERS
  LDB   #$1B          sequence d'echappement
  BSR   WCHAR         envoi caractere
INVER1
  LDB   #$5C          inverse video pour TO
*                     remplace par #$7B pour MO
  BSR   WCHAR         envoi caractere
  RTS

*------------------------------------------------------
* POSITIONNEMENT SUR LA LIGNE 6
*------------------------------------------------------
LOCAT6
  LDB   #$1F          code de positionnement
  BSR   WCHAR         envoi caractere
  LDB   #$46          ligne 6
  BSR   WCHAR         envoi caractere
  LDB   #$41          colonne 1
  BSR   WCHAR         envoi caractere
  RTS

*------------------------------------------------------
* POSITIONNEMENT SUR LA LIGNE POINTEE PAR Y
*------------------------------------------------------
LOCATY
  PSHS  Y             sauvegarde Y
  LDB   #$1F          code de positionnement
  BSR   WCHAR         envoi caractere
  LDB   #$46          code pour pointer ligne 6 
LOC1  
  CMPY  TTOP          comparaison a la premiere ligne
  BEQ   LOC2          positionnement ligne B
  INCB                numero ligne suivante
  LEAY  -45,Y         adresse ligne precedente
  BRA   LOC1          nouvelle boucle
LOC2
  BSR   WCHAR         envoi caractere
  LDB   #$41          colonne 1
  BSR   WCHAR         envoi caractere
  PULS  Y,PC          retour

*------------------------------------------------------
* INITIALISATION NOUVELLE LIGNE DE 45 CARACTERES
* NOM(39 OCTETS) + CR + LF + ADRESSE(4 OCTETS)
*------------------------------------------------------
LINIT
  LDY   TFIN
  LDD   #$202D        espace et 45 boucles
LINIT1  
  STA   ,Y+           octet initialise a espace
  DECB                decrementation compteur
  BNE   LINIT1        octet suivant
  LDD   #$0D0A        CR+LF
  STD   -6,Y          ajout CR+LF
  RTS

*------------------------------------------------------
* EXTRACTION DES CARACTERES DU NOM COURT
*------------------------------------------------------
SNAME
  LDY   TFIN          Y pointe sur la zone du nom
  CLRB                compteur de caracteres
SNAME1  
  LDA   B,X           lecture caractere
  CMPA  #$20          test espace
  BEQ   SNAME3        ignorer les espaces
  CMPA  #$41          caractere A  
  BLO   SNAME2        copier si < A 
  CMPA  #$5A          caractere Z
  BHI   SNAME2        copier si > Z
  ORA   #$20          passer en minuscules 
SNAME2  
  STA   ,Y+           stockage caractere
SNAME3
  INCB                caractere suivant
  CMPB  #$08          huitieme caractere
  BNE   SNAME4        sinon rien de plus
  LDA   #$2E          ajouter un point
  STA   ,Y+           stockage point
SNAME4  
  CMPB  #$0B          onzieme caractere
  BNE   SNAME1        caractere suivant
  RTS

*------------------------------------------------------
* EXTRACTION DES CARACTERES DU NOM LONG
*------------------------------------------------------
LNAME
  LDY   TFIN          Y pointe sur la zone du nom
  LDA   #$0D          nbre de caracteres par entree
  LDB   ,X            sequence number
  ANDB  #$BF          slot number
  CMPB  #$03          comparaison avec 3
  BHI   LNAME9        Si superieur ne pas traiter
  MUL                 multiplier par 13
  SUBD  #$0D          moins 13 --> position 1er caractere
  LEAY  B,Y           Y pointe sur 1er caractere
  LDA   1,X           1er caractere
  STA   ,Y+           stockage
  LDA   3,X           2eme caractere
  STA   ,Y+           stockage
  LDA   5,X           3eme caractere
  STA   ,Y+           stockage
  LDA   7,X           4eme caractere
  STA   ,Y+           stockage
  LDA   9,X           5eme caractere
  STA   ,Y+           stockage
  LDA   14,X          6eme caractere
  STA   ,Y+           stockage
  LDA   16,X          7eme caractere
  STA   ,Y+           stockage
  LDA   18,X          8eme caractere
  STA   ,Y+           stockage
  LDA   20,X          9eme caractere
  STA   ,Y+           stockage
  LDA   22,X          10eme caractere
  STA   ,Y+           stockage
  LDA   24,X          11eme caractere
  STA   ,Y+           stockage
  LDA   28,X          12eme caractere
  STA   ,Y+           stockage
  LDA   30,X          13eme caractere
  STA   ,Y+           stockage
  LDB   #$0D          compteur pour 13 boucles
LNAME2
  LDA   ,-Y           caractere du nom
  BEQ   LNAME3        test $00
  INCA                transforme $FF en $00
  BNE   LNAME4        test $FF
LNAME3
  LDA   #$20          blanc remplace $00 et $FF        
  STA   ,Y            stockage dans le nom
LNAME4  
  DECB                decrementation compteur
  BNE   LNAME2        boucle suivante 
LNAME9  
  RTS

*------------------------------------------------------
* Initialisation ecran
*------------------------------------------------------
ECRAN
  FCB   $0C           effacement ecran   
  FCB   $1B,$20,$40   couleur noire
  FCB   $1B,$20,$57   fond blanc
  FCB   $1B,$67       bordure blanche
  FCB   $1F,$57,$41   locate 1,23
  FCB   $1B,$46       ecriture cyan
  FCC   "Utilisez les quatre fleches, puis ENTREE"
  FCB   $1F,$45,$41   locate 1,5
  FCB   $1B,$40,$00   ecriture noire 

*------------------------------------------------------
* Message d'information
*------------------------------------------------------
INFO
  FCB   $0C           effacement ecran   
  FCB   $1B,$20,$44   couleur bleu
  FCB   $1B,$20,$56   fond cyan
  FCB   $1B,$66       bordure cyan
  FCC   "Disquette chargee :"
  FCB   $0D,$0A,$00

*------------------------------------------------------
* Message d'aide
*------------------------------------------------------
AIDE
  FCB   $0D,$0A
  FCC   /Commandes utiles:/
  FCB   $0D,$0A
  FCC   /DIR                     'List directory/
  FCB   $0D,$0A
  FCC   /RUN"AUTO.BAT"           'Start program/
  FCB   $0D,$0A,$00
AIDEMO
  FCC   /EXEC&HA007              'Boot on disk/
  FCB   $0D,$0A
  FCC   /CLEAR,&H4FFF:EXEC&HA025 'Change disk/
  FCB   $0D,$0A,$0D,$0A,$00
AIDETO
  FCC   /EXEC&HE007              'Boot on disk/
  FCB   $0D,$0A
  FCC   /CLEAR,&H8FFF:EXEC&HE025 'Change disk/
  FCB   $0D,$0A,$0D,$0A,$00

*------------------------------------------------------
* Message d'erreur
*------------------------------------------------------
ERREUR
  FCB   $0C
  FCC   "  Format de la carte SD non reconnu"
  FCB   $0D,$0A,$0D,$0A,$00

*------------------------------------------------------
* Logo SDDRIVE avec compactage
* La chaine de caractere est terminee par un octet $00
* Si un octet est inferieur a $20, c'est le nombre de
* repetitions de l'octet suivant. Les octets utiles
* doivent être augmentes de $41.
* L'affichage se fait par colonne de gauche a droite
* et de haut en bas. 
*------------------------------------------------------
SDLOGO
  FDB   $15BF,$02DE,$02FE,$033E,$03BE,$FE02,$BFC2,$02CE
  FDB   $DE04,$FE02,$DECE,$C6C0,$07BF,$0ABE,$C23E,$04BE
  FDB   $02BB,$BD07,$BEDE,$C204,$BF0F,$BE7F,$03BF,$3FAF
  FDB   $BD06,$BE3E,$DE02,$CE0F,$BE07,$BF9F,$BB10,$BEBB
  FDB   $3F05,$BE0A,$BF3F,$9F02,$AF05,$B702,$AF02,$9F7F
  FDB   $02BF,$C003,$AF02,$9F0E,$BF03,$DE03,$FE03,$3E04
  FDB   $BE02,$FE03,$3EC6,$0BBF,$C23E,$0CBE,$3F03,$BEBB
  FDB   $B79F,$BFC6,$06BF,$C2C6,$FE0D,$BE9F,$BF9F,$3FBF
  FDB   $C0CE,$FEB7,$7FCE,$13BE,$BB7F,$04BF,$3BBB,$9FBF
  FDB   $CE12,$BEBD,$AF7F,$09BF,$BBBD,$0EBE,$BBB7,$9F3F
  FDB   $0FBF,$3F7F,$079F,$7F3F,$0DBF,$3E1E,$FF3E,$BE07
  FDB   $BFFE,$0EDF,$FE07,$BF02,$BE07,$BFBE,$0EBF,$BE07
  FDB   $BF02,$BE07,$BFBE,$0EBF,$BE07,$BF02,$BE07,$BFAF
  FDB   $C70C,$C3C7,$AF07,$BFBE,$7FEF,$C702,$C316,$C102
  FDB   $C3C7,$EF7F,$DE1E,$CFDE,$BE07,$BFCE,$06C7,$CE07
  FDB   $BFCE,$07C7,$B7BE,$07BF,$BE06,$BFBE,$07BF,$BE08
  FDB   $BFBE,$07BF,$BE06,$BFBE,$07BF,$BBC1,$C006,$BFBE
  FDB   $07BF,$BBC1,$04C0,$C1BB,$0ABF,$3FFF,$DFCF,$C7C6
  FDB   $AFCB,$C102,$C00E,$BF02,$C0C1,$CBAF,$FFDF,$CFC7
  FDB   $C3C1,$C0BE,$C604,$C30E,$430C,$C346,$BD1E,$C1BD
  FDB   $DECF,$C702,$C3C1,$02C0,$18BF,$BDC1,$C005,$BF3F
  FDB   $02FF,$DF02,$CFC7,$02C3,$C102,$C00F,$BF02,$3FFF
  FDB   $02DF,$CF02,$C7C3,$02C1,$C005,$BF3F,$02FF,$DF02
  FDB   $CFC7,$02C3,$C102,$C00F,$BF02,$3FFF,$02DF,$D002
  FDB   $C9C3,$07BF,$BE08,$BFC0,$02C1,$C302,$C7CF,$02DF
  FDB   $FF02,$3F04,$BF02,$C0C1,$02C3,$C7CF,$AFCE,$C7CF
  FDB   $02DF,$FF02,$3F04,$BF02,$C0C1,$02C3,$C702,$CFDF
  FDB   $02FF,$3F08,$BFBE,$C0C1,$02C3,$C702,$CFDF,$02FF
  FDB   $3F14,$BFCE,$1EC7,$CEBE,$07BF,$C603,$C3C6,$06BF
  FDB   $C603,$C3C6,$07BF,$02BE,$07BF,$BE03,$BFBE,$06BF
  FDB   $BE03,$BFBE,$07BF,$02BE,$07BF,$BE03,$BFBE,$06BF
  FDB   $BE03,$BFBE,$07BF,$02BE,$07BF,$BE03,$BFB7,$06C7
  FDB   $B703,$BFBE,$07BF,$02BE,$07C0,$BE0E,$BFBE,$07C0
  FDB   $BE00

*------------------------------------------------------
* Zones de TRAVAIL
*------------------------------------------------------
RS512
  FDB   $E02B         fonction de lecture secteur (TO)
CSIZ2
  FCB   $00           nombre de secteurs par cluster (sur 2 octets)
CSIZE
  FCB   $00           nombre de secteurs par cluster (sur 1 octet)
RSECT
  FDB   $0000         nombre de secteurs reserves
PSECT
  FDB   $0000         numero secteur debut partition
DSECT
  FDB   $0000         numero secteur debut directory
FSECT
  FDB   $0000         numero secteur de data cluster 0    
BUFFER
  FDB   $9D00         adresse buffer de lecture carte SD 
FINBUF
  FDB   $9F00         adresse de fin du buffer de lecture 
TDEB
  FDB   $A000         adresse debut table des noms (TO)
TFIN
  FDB   $A000         adresse fin table des noms
TTOP
  FDB   $A000         adresse nom en haut d'ecran (TO)
TSEL
  FDB   $A000         adresse nom selectionne (TO)
TMAX
  FDB   $E000         limite haute de la table des noms (TO)
SAVES
  FDB   $0000         sauvegarde du registre S

  END
 

Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [Thomson] SDDRIVE

Message par hlide »

MSX45 a écrit : 03 nov. 2019 09:07 Je me demande comment hlide a réussi
Si tu formates avec celui de Windows, tu n'arriveras à rien.

J'utilise GuiFormat car j'avais besoin de forcer des SD de plus de 32 Go en FAT32 avec une taille de cluster en conséquence (avec une carte de 64 Go - dont j'ai une dizaine - il n'y avait pas moyen de la formatter autrement qu'en exFAT ou NTFS).

NOTE: après formatage le champ "Allocation unit size" se remet sur la taille minimale acceptable du cluster pour la quantité totale du SD. Je l'avais mis à 64 Ko et le log qui en a suivi pendant le formatage le prouve : 65536 octets (cluster size) x 974344 (total clusters) donne bien 64 Go.
guiformat.png
guiformat.png (17.02 Kio) Consulté 4497 fois
MSX45
Messages : 30
Inscription : 09 août 2016 17:28
Localisation : ORLEANS

Re: [Thomson] SDDRIVE

Message par MSX45 »

Je connais bien GuiFormat que j'utilise en complément avec Fat32Formatter

Mais le but c’était de mettre une carte SD FAT32 de 1Go en alloc 64Ko
Si tu remontes le post tu verras qu'on peut mettre sans problème une carte SD FAT32 de 8Go en alloc 64ko
Donc toutes cartes SD FAT32 >=8Go peut être mise en alloc 64Ko (donc pas de soucis pour une carte SD 64Go)

Si tu as une solution pour mettre une carte SD FAT32 de moins de 2Go en alloc 64Ko je suis preneur
(c'est juste pour s'amuser a contourner le système)

C'est marrant que la SD 64GO passe avec le SDDRIVE
Dans le descriptif de la SDDRIVE c'est noté que ça supporte jusqu’à 32Go
__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ »

MSX45 a écrit : 03 nov. 2019 14:03 C'est marrant que la SD 64GO passe avec le SDDRIVE
Dans le descriptif de la SDDRIVE c'est noté que ça supporte jusqu’à 32Go
Ben tu as donné indirectement l'explication je pense. De base une 64Go n'est possible qu'en NTFS et exFAT qui je pense ne sont pas supporté par le selecteur de fichier ce qui donne la remarque de Daniel dans le descriptif.
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
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [Thomson] SDDRIVE

Message par hlide »

Pas essayé avec SDDRIVE. A l'occasion je le ferais. Je l'ai testé avec le MZ-SD²CMT (qui lui non plus ne connaît exFAT ou NTFS). Je ne garantie pas que ça fonctionne avec n'importe autre logiciel (j'ai un Unicard qui n'a pas l'air d'aimer ces tailles).

Et GuiFormat ne fonctionne pas avec ta carte 1Go ? il ne te propose pas une liste de taille d'allocation (64 Ko max) ?
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [Thomson] SDDRIVE

Message par hlide »

Code : Tout sélectionner

Microsoft states that a partition must contain at least 65,527 clusters to use the FAT32 file system
1 Go (taille totale en octet) / 64 Ko (taille cluster en octet) = 16768 clusters. Ce qui est inférieur à cette limite.
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

MSX45 a écrit : 03 nov. 2019 14:03 Dans le descriptif de la SDDRIVE c'est noté que ça supporte jusqu’à 32Go
Pour préciser, SDDRIVE supporte les cartes de type microSD (parfois appelées microSDSC) et microSDHC.
Il ne supporte pas les cartes microSDXC ni les cartes microSDUC.

La taille maxi des cartes microSDHC est de 32Go, c'est pourquoi j'ai donné cette limite, c'est plus simple (tout le monde ne sait pas qu'il y a différents types de cartes). Au-delà de 32Go ce sont des cartes SDXC ou SDUC, elles ne sont pas supportées. Ce n'est pas la taille qui bloque, c'est la méthode d'indexation des secteurs.

Image Image Image Image

Remarquez qu'à raison de deux disquettes Thomson dans un fichier .sd de 2560Ko, il faut moins de 2Go pour stocker 1000 disquettes. L'utilisation d'une carte SDHC n'est même pas justifiée, une SD simple capacité suffit très largement.
Daniel
L'obstacle augmente mon ardeur.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: [Thomson] SDDRIVE

Message par Asic512 »

Bonjour,

Le jeu "La marque jaune" (téléchargé sur le site dcmoto au format fd) fonctionne sur l'émulateur dcmoto. Une fois converti au format sd via FD2SD il ne fonctionne ni sur l'émulateur ni sur TO8+SDDRIVE (le chargement s'enlise). Quelqu'un a-t-il eu la même expérience ?
Asic512
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

Les Ripoux et La Marque Jaune sont extrêmement bien protégés. J'ai déjà essayé sans succès de les faire fonctionner avec SDDRIVE :
viewtopic.php?f=18&t=8448&start=423

Je soupçonne des appels directs au contrôleur de disquette Thomson, mais je n'ai pas encore réussi à les trouver car les programmes sont cryptés. En théorie ce n'est pas impossible de contourner cette protection, mais en pratique c'est difficile. Il faudrait avoir beaucoup de temps et de motivation. S'il y a un amateur il aura toute notre reconnaissance.
Daniel
L'obstacle augmente mon ardeur.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: [Thomson] SDDRIVE

Message par Asic512 »

Je suis étonné pour les Ripoux : je l'ai fait fonctionner sur un TO8+SDDRIVE après conversion à partir de la compilation "Mégasofts".
Asic512
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: [Thomson] SDDRIVE

Message par Asic512 »

Autre question : que peut-on attendre de la cohabitation d'une cartouche et de SDDRIVE ? Sur mon TO8+SDDRIVE, j'ai une cartouche Colorpaint mais elle semble fonctionner très aléatoirement ...
Asic512
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

Il est possible que la compilation Megasoft avec Les Ripoux n'ait pas la même protection que la disquette originale du jeu. Il y a peut-être d'autres compilations avec une version de la Marque Jaune moins bien protégée. En particulier, à tout hasard, "Les Bandes Dessinées".

Il n'y a normalement aucune incompatibilité entre SDDRIVE et les cartouches, tant qu'elles utilisent les accès standard pour lire et écrire sur disquette. Par contre, si elles accèdent directement au contrôleur Thomson il peut y avoir un problème. Mais je n'ai encore jamais rencontré le cas. Quel est le problème précis avec Colorpaint ?
Daniel
L'obstacle augmente mon ardeur.
Répondre