[Thomson] Lecture du répertoire d'une carte SD

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

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

Super Daniel 8)
Je peux tester ton loader si tu a besoin !
Carl
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par 6502man »

Ca commence à être très intéressant :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

Quand le curseur arrive en bas de l'écran la liste scrolle vers le haut, et si on revient en haut elle scrolle vers le bas.

Il y aura une limitation à 80 ou 90 fichiers, car je veux que les noms longs tiennent en mémoire sur MO5. Et aussi, en FAT32, je préfère éviter de parcourir la FAT pour rechercher tous les fragments de répertoire, seul le premier cluster sera exploré. Avec des clusters de 16K et des noms de fichiers pas trop trop longs ça fait quand même pas mal. Dans tous les cas, si le nom de fichier dépasse 39 caractères je le tronque pour qu'il tienne dans une seule ligne d'écran.

Dans un premier temps, il me reste à calculer le numéro de secteur en fonction du numéro de cluster, du nombre de secteurs par cluster et du type de carte. L'opération n'est pas compliquée, mais sur 32 bits c'est toujours plus un peu plus difficile avec un 6809. Dans quelques jours le programme sera terminé pour TO8, il restera à l'adapter pour MO et à le tester sur un maximum de machines.

@carl : je compte sur toi pour les tests, mais avant je dois finir le calcul, probablement pas avant la fin de l'année à cause des fêtes.

@sam : quand le programme fonctionnera, tu pourras sans problème ajouter toutes les fonctions désirée, la licence le permet :wink:
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

Premiers tests de fonctionnement du programme de sélection aujourd'hui, correction de deux petits bugs, et ça marche :D

Enfin, ça marche avec le TO8. Et tous les cas de figure n'ont pas encore été testés : carte SD ou SDHC, partitionnée ou pas, FAT16 ou FAT32. Mais normalement ça doit être bon, j'avais fait des tests de lecture de répertoire dans toutes les configurations. Reste à rendre le programme compatible TO/MO, et peut-être aussi à repousser les limites de cette première version :
- Noms longs tronqués à 39 caractères
- Seul le répertoire principal est exploré
- Seuls les 91 premiers fichiers sont retenus
- En FAT16 tout le répertoire principal est traité (dans la limite de 91 fichiers).
- En FAT32 seul le premier cluster du répertoire principal est traité (dans la limite de 91 fichiers).

Le programme de lancement est SDSEL.BAS. Il appelle SDLOGO.BIN (image à afficher) et SDSEL.BIN (programme de sélection).

Code : Tout sélectionner

5 'SDSEL version 20141226
10 CLS:CLEAR,&H9AFF:LOCATE0,23,0
20 SCREEN0,7,7:LOADM"SDLOGO":COLOR8
30 PRINT"Fleches bas et haut, ";
40 PRINT"ENTREE pour valider";:COLOR0
50 LOADM"SDSEL",,R:CLS
60 PRINT"Nouvelle disquette :":DIR

Code : Tout sélectionner

/**************************************************\
*                   S D S E L                      * 
*           (c) 2014 - 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 provisoire fonctionne uniquement sur
* TO. La version MO est en cours de programmation.
* Restrictions :
* - 91 fichiers au plus dans le repertoire principal
* - En FAT32 limitation au 1er cluster du repertoire

/**************************************************\
*                Version 2014.12.26                *
\**************************************************/
* Historique
* 2014.12.26 calcul du LBA et changement d'image
* 2014.12.19 affichage des noms longs en FAT16
* 2014.12.09 debut du developpement

*------------------------------------------------------
* DEFINITION DES EQUIVALENCES
*------------------------------------------------------
BUFADD  EQU $4F       adresse du buffer du secteur
SD_LB0  EQU $8E       adresse du LBA du fichier .sd 
CMDXX   EQU $93       adresse du secteur a lire
SD_TYP  EQU $92       type de carte SD=0 SDHC=1

*------------------------------------------------------
* INITIALISATIONS EN FONCTION DE L'ORDINATEUR
*------------------------------------------------------
  ORG   $9B00 
INIT
  PSHS  U,Y,X,DP,B,A,CC                  
  ORCC  #$50          desactive les interruptions 
  LDA   #$60          valeur initialisation DP pour TO
  LDX   #$1F40        adresse pour test RAM ou ROM
  LDB   ,X            lecture adresse X
  COM   ,X            tente de modifier adresse X
  CMPB  ,X            test modification adresse X
  BEQ   INIT1         pas de difference -> TO
  COM   ,X            retablissement adresse X
  LDA   #$20          valeur initialisation DP pour MO
  LDD   #$A02B        adresse fonction RS512
  STD   RS512         stockage adresse
INIT1
  TFR   A,DP          DP = $20(MO) ou $60(TO)
  LBSR  LINIT         raz ligne 

*------------------------------------------------------
* LECTURE DU PREMIER SECTEUR DE LA CARTE (MBR ou BOOT)
*------------------------------------------------------
  LDD   #BUFFER       adresse du buffer
  STD   <BUFADD       stockage adresse buffer 
  LDD   #$0000        numero du secteur a lire
  STD   <CMDXX+1      adresse physique (poids fort)
  STD   <CMDXX+3      adresse physique (poids faible)
  JSR   [RS512]       lecture secteur 512 octets
  LDD   #$55AA        Signature secteur
  CMPD  BUFFER+$1FE   Test signature
  LBNE  RETOUR        Signature incorrecte
  LSL   BUFFER+$1BE   Boot indicator 
  BNE   ABOOT1        Pas de MBR, donc boot record
  LDA   BUFFER+$1C7   LBA partition pds fort    ex: $xx
  LDB   BUFFER+$1C6   LBA partition pds faible  ex: $xx
  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   <CMDXX+3      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   <CMDXX+2      adresse = numero secteur * $200  
  CLRB                raz registre A
  STB   <CMDXX+4      raz dernier octet adresse
RBOOT1 
  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
  LDD   #$55AA        Signature secteur
  CMPD  BUFFER+$1FE   Test signature
  LBNE  RETOUR        Signature incorrecte
ABOOT1
  CLRA                
  LDB   BUFFER+$0D    Nombre de secteurs par cluster
  STD   CSIZ2         Stockage nbre secteurs par cluster
  LDA   BUFFER+$0F    Blocs reserves pds fort   ex: $00
  LDB   BUFFER+$0E    Blocs reserves pds faible ex: $04
  STD   RSECT         stockage nbre secteurs reserves
* taille FAT (en FAT16) dans D  
  LDA   BUFFER+$17    Fat16 size pds fort       ex: $00
  LDB   BUFFER+$16    Fat16 size pds faible     ex: $F2
  STD   BUFFER+$16    stockage taille FAT16
  BNE   ABOOT2        FAT16 si different de zero  
* taille FAT (en FAT32) dans D  
* 2 octets poids fort ignores (simplification abusive ?)
  LDA   BUFFER+$25    Fat32 size pds fort       ex: $03
  LDB   BUFFER+$24    Fat32 size pds faible     ex: $AB
* taille totale fonction du nombre de FATs
ABOOT2
  DEC   BUFFER+$10    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
ABOOT3   
  ADDD  RSECT         ajout nombre de secteurs reserves
  ADDD  PSECT         ajout secteur de debut de partition
  STD   DSECT         stockage secteur debut directory
  LDA   BUFFER+$12    nbre entrees directory (poids fort)
  LDB   BUFFER+$11    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   <CMDXX+3      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   <CMDXX+2      LBA multiplie par $100
  CLRB
  STB   <CMDXX+4      octet de poids faible a zero
RDSEC1
  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
  STY   TFIN          stockage adresse
  LBSR  LINIT         raz ligne suivante
RDIR9
  LEAX  32,X          Adresse entree suivante
  CMPX  #BUFFER+$200  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  LOCATE        positionnement du curseur
  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
  JSR   $E806         lecture du clavier
  CMPB  #$0D          ENTREE
  BEQ   SETLBA        changement image disquette
  CMPB  #$0A          fleche bas
  BEQ   CLAV1         ligne suivante 
  CMPB  #$0B          fleche haut
  BEQ   CLAV2         ligne precedente 
  BRA   CLAV          nouveau test
CLAV1  
  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
  LEAY  -720,Y        adresse 16 lignes plus haut  
  CMPY  TTOP          comparaison 1ere affichee 
  BNE   AFFIC         nouvel affichage
  LEAY  45,Y          ligne suivante
  STY   TTOP          remonte la liste des noms
  BRA   AFFIC         nouvel affichage 
CLAV2  
  LDY   TSEL          adresse ligne selectionnee
  CMPY  TDEB          test debut de table 
  BEQ   CLAV          ne rien faire en debut de table
  LEAY  -45,Y         adresse ligne precedente
  STY   TSEL          stockage nouvelle adresse
  LEAY  45,Y          adresse ligne suivante
  CMPY  TTOP          comparaison 1ere affichee 
  BNE   AFFIC         nouvel affichage
  LEAY  -45,Y         ligne precedente
  STY   TTOP          descend le laiste des noms
  BRA   AFFIC         nouvel affichage

*------------------------------------------------------
* INITIALISATION LBA POUR CHANGEMENT IMAGE DISQUETTE
*------------------------------------------------------
SETLBA
  LDY   TSEL          adresse ligne selectionnee
  LDA   CSIZE         nombre de secteurs par cluster
  LSRA                divise par 2 
* multiplication par le nombre de secteurs/cluster  
SETLB1
  LSL   44,Y          decalage octet 4
  ROL   43,Y          decalage octet 3
  ROL   42,Y          decalage octet 2
  ROL   41,Y          decalage octet 1
  LSRA                division compteur par 2
  BNE   SETLB1        nouvelle boucle
* ajout du secteur du cluster zero 
  LDD   FSECT         numero secteur cluster zero
  ADDB  44,Y          ajout octet 4 
  ADCA  #0            ajout retenue
  ADDA  43,Y          ajout octet 3
  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   SETLB2        carte SDHC, sinon calcul pour SD
* initialisation LBA du fichier pour carte SD
  CLRB                zero  
  STB   <SD_LB0+3     octet 4 a zero
  LDB   42,Y          octet de poids fort
  STB   <SD_LB0       octet 1
  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   RETOUR        pas de retenue
  INC   <SD_LB0       ajout retenue
  BRA   RETOUR        retour au Basic
* initialisation LBA du fichier pour carte SDHC
SETLB2
  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

*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
RETOUR
  PULS  CC,A,B,DP,X,Y,U,PC

*------------------------------------------------------
* 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

*------------------------------------------------------
* 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

*------------------------------------------------------
* 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
  JSR   $E803         affichage 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
  JSR   $E803         envoi caractere
  LDB   #$5C          inverse video
  JSR   $E803         envoi caractere
  RTS

*------------------------------------------------------
* POSITIONNEMENT CURSEUR AU DEBUT DE LA LIGNE 6
*------------------------------------------------------
LOCATE
  LDB   #$1F          code de positionnement
  JSR   $E803         envoi caractere
  LDB   #$46          ligne 6
  JSR   $E803         envoi caractere
  LDB   #$41          colonne 1
  JSR   $E803         envoi caractere
  RTS

*------------------------------------------------------
* 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

*------------------------------------------------------
* Zones de TRAVAIL
*------------------------------------------------------
RS512
  FDB   $E02B         fonction de lecture secteur
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    
TDEB
  FDB   $A000         adresse debut table des noms
TFIN
  FDB   $A000         adresse fin table des noms
TTOP
  FDB   $A000         adresse nom en haut d'ecran
TSEL
  FDB   $A000         adresse nom selectionne
BUFFER  

  END
sdsel_20141226.zip
(6.45 Kio) Téléchargé 86 fois
Attention, ce n'est pas un produit fini, juste un échantillon du travail en cours, sans aucune garantie. Il y a encore beaucoup de tests à faire et d'améliorations à apporter. Contrôleur CS91-280 obligatoirement en version 2014.12.08 ou plus récente.
Attention aussi à cette EPROM version 2014.12.08 : elle fonctionne bien sur TO, par contre il y a une correction à faire pour MO. Je publierai une nouvelle version dès que possible.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

Je viens de faire quelques essais : ( TO8 + 256Ko + CTRL CS91-280 + firmware cs91280_20141208.bin + µSD 2Go FAT16)

- Pour la partir contrôleur + interfaçe SD + image boot.sd => OK pas de soucis
- Lancement du programme SDSEL => Ok pas de soucis
- la navigation dans le répertoire de la SD => pas de soucis
- le lancement des logiciels sur la 1ere page => pas de soucis
- le lancement des logiciels après un défilement vers le haut (quand tu arrives en bas de page) => disquette vierge ?
Image6.jpg
Image6.jpg (32.63 Kio) Consulté 2864 fois
Image5.jpg
Image5.jpg (46.92 Kio) Consulté 2864 fois
Image4.jpg
Image4.jpg (48.92 Kio) Consulté 2864 fois
Image3.jpg
Image3.jpg (28.87 Kio) Consulté 2864 fois
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

un autre test mais je ne sais pas si c'est vraiment un soucis de SD ou bien que le jeu se plante ?
Out of mémory
mystere ile perdu.jpg
mystere ile perdu.jpg (175.58 Kio) Consulté 2864 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

Merci pour les tests 8)
Reste à vérifier les cas douteux. En particulier déterminer si le problème après un scroll est imputable à SDSEL ou à la disquette sélectionnée. Je ferai des tests de mon côté, mais avant il faut que je trouve le bug de la nouvelle EPROM qui plante le MO6.

Pour la disquette provocant le message out of memory, il faudrait tenter un CLEAR avant de lancer le jeu.

Il y a encore beaucoup de travail, mais les premiers résultats sont encourageants. On peut dire qu'une nouvelle étape de simplification du système est franchie : c'est la fin de bootaddress et de l'hexadécimal, qui rebutaient encore quelques utilisateurs.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

Je viens de faire un nouveau test en copiant 30 fois le même jeu (qui fonctionne :wink: )
WP_20141227_007[1].jpg
WP_20141227_007[1].jpg (58.38 Kio) Consulté 2857 fois
le jeu se lance jusqu'à copie 11
WP_20141227_008[1].jpg
WP_20141227_008[1].jpg (37.24 Kio) Consulté 2857 fois
puis à partir de copie 12 à 30, disquette vide
WP_20141227_010[1].jpg
WP_20141227_010[1].jpg (35.68 Kio) Consulté 2857 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

C'est une bonne piste pour trouver le bug. A priori un dépassement de capacité d'un registre dans le calcul d'adresse. J'ai simplifié en utilisant des compteurs de secteurs sur 16 bits, mais avec une carte SDHC ce n'est pas suffisant. Il faut faire tous les calculs sur 32 bits.

Quand les fichiers ont été copiés sur la carte, venait-elle d'être formatée ?
Sinon il faudrait faire un essai :
- sauvegarder tous les fichiers sur disque dur
- reformater la carte
- copier les fichiers en commençant par boot.sd puis les autres dans l'ordre des numéros
- faire un nouveau test de sdsel

Merci de ton aide 8)
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

erreur, ma carte SD est formatée en FAT 16
Image1.jpg
Image1.jpg (37.62 Kio) Consulté 2842 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

Bien vu Carl, il y avait une erreur dans le calcul de l'adresse, affectant l'octet de poids fort. Tant que cet octet était à zéro il était juste, mais toutes les adresses ne tenant pas sur trois octets étaient fausses. C'est pourquoi les premiers fichiers étaient bons, mais pas les derniers. J'ai corrigé.

Avec cette correction, et la correction de l'EPROM du contrôleur CS91-280 (voir l'autre fil de discussion), la sélection de fichiers .sd de la carte fonctionne avec les MO comme avec les TO, aussi bien sur carte SD que SDHC. J'ai mis à jour la page officielle du contrôleur CS91-280. En bas de la page il y a la description de la méthode de changement de disquette, avec un exemple de fichier boot.sd contenant le programme de sélection. J'ai mis aussi les sources du programme Basic et du programme assembleur.

http://dcmoto.free.fr/bricolage/cs91-280/index.html

Il y a un certains nombre de limitations données ci-dessous :

Code : Tout sélectionner

/**************************************************\
*                   S D S E L                      * 
*           (c) 2014 - 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 version TO, 273 en version MO 
* - En FAT32 limitation supplementaire 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
En FAT32, on peut choisir la taille de l'unité d'allocation au formatage. Si on utilise des noms courts on peut mettre 4 fois plus de fichiers.

Comme toujours ce programme est donné sans aucune garantie d'aucune sorte, par contre toutes les remarques sont les bienvenues. Je pense qu'il y a moyen d'optimiser la vitesse d'affichage et de défilement de la liste. Sur MO6 le mouvement du curseur semble plus long et il n'y a pas de répétition automatique sur les touches "flèches". En plus il y a un "beep" à chaque appui, qui ralentit encore le processus. Il faudrait abandonner la routine système de scrutation du clavier (beaucoup trop lente) et la reprogrammer.

La conclusion à retenir : adieu bootaddress, WinHex, les adresses physiques, l'hexadécimal et les POKE 8)
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
petitjd
Messages : 2007
Inscription : 23 oct. 2007 11:50

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par petitjd »

Bravo pour ce travail!
Punaise vivement que je puisse essayer ca, vivement la fin des vacances!
PetitJD
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par 6502man »

Superbe Daniel, c'est du travail de pro :D


Je suppose que sur TO8D il faut encore désactiver le contrôleur interne ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Carl »

Demain, nouveaux tests avec nouvelles version eprom + sdsel :wink:
Merci Daniel !

Carl
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Lecture du répertoire d'une carte SD

Message par Daniel »

La nouvelle version 2014.12.28 de l'EPROM apporte la compatibilité MO6.
Sur TO8 elle ne change rien : la version 2014.12.29 de SDSEL peut être testée aussi avec l'EPROM 2014.12.08, le résultat sera identique.
6502man a écrit :Je suppose que sur TO8D il faut encore désactiver le contrôleur interne ?
POKE&HE7E7,&HD4 et EXEC&HE025, ou débrancher la nappe du lecteur. C'est pourquoi je préfère tester sur TO8 ou MO6
Daniel
L'obstacle augmente mon ardeur.
Répondre