[Thomson] SDDRIVE
Modérateurs : Papy.G, fneck, Carl
Re: [Thomson] SDDRIVE
Ç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 ?
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 ?
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] SDDRIVE
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] SDDRIVE
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
Donc pas mieux avec WIN10....
Je me demande comment hlide a réussi
Re: [Thomson] SDDRIVE
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
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.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
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.
Re: [Thomson] SDDRIVE
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
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
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] SDDRIVE
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] SDDRIVE
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) ?
Et GuiFormat ne fonctionne pas avec ta carte 1Go ? il ne te propose pas une liste de taille d'allocation (64 Ko max) ?
Re: [Thomson] SDDRIVE
Code : Tout sélectionner
Microsoft states that a partition must contain at least 65,527 clusters to use the FAT32 file system
Re: [Thomson] SDDRIVE
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.
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.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
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 ?
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
Re: [Thomson] SDDRIVE
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.
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.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
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
Re: [Thomson] SDDRIVE
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
Re: [Thomson] SDDRIVE
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 ?
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.
L'obstacle augmente mon ardeur.