[Thomson] Lecture du répertoire d'une carte SD
Modérateurs : Papy.G, fneck, Carl
- 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
Super Daniel
Je peux tester ton loader si tu a besoin !
Carl
Je peux tester ton loader si tu a besoin !
Carl
Re: [Thomson] Lecture du répertoire d'une carte SD
Ca commence à être très intéressant
Re: [Thomson] Lecture du répertoire d'une carte SD
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
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
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] Lecture du répertoire d'une carte SD
Premiers tests de fonctionnement du programme de sélection aujourd'hui, correction de deux petits bugs, et ça marche
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).
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.
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
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.
L'obstacle augmente mon ardeur.
- 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
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 ?
- 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 ?
- 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
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
Out of mémory
Re: [Thomson] Lecture du répertoire d'une carte SD
Merci pour les tests
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.
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.
L'obstacle augmente mon ardeur.
- 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
Je viens de faire un nouveau test en copiant 30 fois le même jeu (qui fonctionne )
le jeu se lance jusqu'à copie 11
puis à partir de copie 12 à 30, disquette vide
le jeu se lance jusqu'à copie 11
puis à partir de copie 12 à 30, disquette vide
Re: [Thomson] Lecture du répertoire d'une carte SD
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
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
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- 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
erreur, ma carte SD est formatée en FAT 16
Re: [Thomson] Lecture du répertoire d'une carte SD
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 :
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
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
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
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] Lecture du répertoire d'une carte SD
Bravo pour ce travail!
Punaise vivement que je puisse essayer ca, vivement la fin des vacances!
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
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Re: [Thomson] Lecture du répertoire d'une carte SD
Superbe Daniel, c'est du travail de pro
Je suppose que sur TO8D il faut encore désactiver le contrôleur interne ?
Je suppose que sur TO8D il faut encore désactiver le contrôleur interne ?
- 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
Demain, nouveaux tests avec nouvelles version eprom + sdsel
Merci Daniel !
Carl
Merci Daniel !
Carl
Re: [Thomson] Lecture du répertoire d'une carte SD
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.
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.
POKE&HE7E7,&HD4 et EXEC&HE025, ou débrancher la nappe du lecteur. C'est pourquoi je préfère tester sur TO8 ou MO66502man a écrit :Je suppose que sur TO8D il faut encore désactiver le contrôleur interne ?
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.