block
Description
Implémentation des mots de gestion de fichiers par blocs.
NOTES:
1) Les blocs sont de 1024 caractères par tradition car à l'époque où
Charles Moore a développé ce système il l'utilisait pour stocker
les écrans du moniteur sous forme de texte source. Le moniteur qu'il
utilisait affichait 16 lignes de 64 caractères donc 1024 caractères.
Son éditeur de texte fonctionnait par pages écran.
2) La numérotation des blocs de stockage commence à 1.
BLK ( -- a-addr)
Variable système qui contient le no de bloc actuellement interprété.
arguments:
aucun
retourne:
a-addr adresse de la variable _blk
SCR ( -- a-addr )
variable système contenant le dernier numéro de bloc affiché à l'écran.
arguments:
aucun
retourne:
a-addr adresse de la variable SCR.
BLKDEV ( -- a-addr )
variable contenant l'adresse du descripteur de périphérique
de stockage actif. Le périphérique de stockage peut-être sélectionné
avec la phrase:
device BLKEV !
où device est l'un des périphériques suivants: EEPROM, SDCARD, XRAM
XRAM est la RAM externe SPI il s'agit donc d'un stockage temporaire.
arguments:
aucun
retourne:
a-addr Adresse de la variable BLKDEV
UPDATE ( -- )
Marque le bloc courant comme étant modifié. Le bloc courant est le dernier
à avoir été passé en paramètre à l'une de fonctions BLOCK ou BUFFER.
SAVE-BUFFERS ou FLUSH doit-être invoqué pour sauvegarder les modifications.
arguments:
aucun
retourne:
rien
BUFFER ( n+ -- a-addr )
Retourne l'adresse d'un bloc de données. Si aucun buffer n'est disponible
libère celui qui à la plus petite valeur UPDATED.
Contrairement à BLOCK il n'y a pas de lecture du périphérique de stockage.
le contenu du buffer est mis à zéro.
arguments:
n+ numéro du bloc.
retourne:
a-addr Adresse début de la zone de données.
BLOCK ( n+ -- a-addr )
Lit un bloc d'un périphérique de stockage vers un buffer. Libère un buffer au besoin.
Le périphérique est celui déterminé par la variable BLKDEV.
arguments:
n+ no. du bloc requis.
retourne:
a-addr Adresse du début de la zone de données.
TEXT-BLOCK ( n+ -- c-addr u )
Charge un bloc et filtre le bloc pour traitement en mode texte.
Le bloc est tronquée au premier caractère non valide.
Les caractères acceptés sont 32..126|VK_CR
arguments:
n+ Numéro du bloc.
retourne:
c-addr Adresse du premier caractère.
u Nombre de caractères.
LOAD ( i*x n+ -- j*x )
Évalue un bloc. Si le bloc n'est pas déjà dans un buffer il est chargé
à partir du périphérique désigné par BLKDEV. Le numéro du bloc évalué
est enregistré dans la variable BLK.
arguments:
i*x État de la pile des arguments avant l'évalutaion du bloc n+.
n+ Numéro du bloc à évaluer.
retourne:
j*x État de la pile des arguments après l'évaluation du bloc n+.
SAVE-BUFFERS ( -- )
Sauvegarde tous les buffers qui ont été modifiés.
arguments:
aucun
retourne:
rien
EMPTY-BUFFERS ( -- )
Libère tous les buffers sans sauvegarder.
arguments:
aucun
retourne:
rien
FLUSH ( -- )
Sauvegarde tous les buffers et les libères.
arguments:
aucun
retourne:
rien
LIST ( n+ -- )
Affiche le contenu du bloc à l'écran. Si le bloc n'est pas déjà dans un buffer
il est chargé à partir du périphérique désigné par BLKDEV. L'affichage s'arrête
sitôt qu'un caractère autre que 32..126|VK_CR est rencontré.
arguments:
n+ numéro du bloc
retourne:
rien
THRU ( i*x u1 u2 -- j*x )
Interprétation des blocs u1 à u2 . LOAD est appellé pour chacun des blocs dans la séquence.
arguments:
i*x État initial de pile.
u1 premier bloc à interpréter.
u2 dernier bloc à interpréter.
retourne:
j*x État de la pile après l'interprétation des blocs.
Description
Les périphériques de stockage sont définis par une table contenant
les CFA des fonctions de bases.
nom | description |
DEVID | Identifiant du périphérique. XRAM =3 EEPROM=4
SDCARD=5 |
BLK-READ | Lecture d'un bloc. |
BLK-WRITE | Écriture d'un bloc. |
BLK>ADR | Conversion numéro de bloc en adresse. |
BLK-VALID? | Valide le numéro de bloc. |
Il y a 3 périphériques de stockage, XRAM, EEPROM et SDCARD.
XRAM est la RAM SPI externe il s'agit donc d'un stockage temporaire.
DEVID ( a-addr -- n )
Constante, Identifiant le périphérique.
arguments:
a-addr Adresse descripteur de périphérique de stockage.
retourne:
n Indentifiant du périphérique {SPI_RAM=3, SPI_EEPROM=4, SD_CARD=5}
BLK-READ ( a-addr1 ud a-addr2 -- )
Lecture d'un bloc du périphérique de stockage.
arguments:
a-addr1 Adresse du premier octet du tampon RAM recevant les donnnées.
ud Adresse absolue sur le périphérique de stockage.
a-addr2 Adresse du descripteur de périphérique.
retourne:
rien
BLK-WRITE ( a-addr1 ud a-addr2 -- n )
Écriture d'un bloc sur le périphérique de stockage.
arguments:
a-addr1 Adresse du premier octet du tampon RAM contenant les donnnées.
ud Adresse absolue sur le périphérique de stockage.
a-addr2 Adresse du descripteur de périphérique.
retourne:
rien
BLK>ADR ( n+ -- ud )
Convertie un numéro de bloc en adresse absolue sur le périphérique de stockage.
Dans le cas du périphérique SDCARD c'est le numéro de secteur qui est retourné.
Les secteurs sont numérotés à partir de zéro.
arguments:
n+ Numéro du bloc.
a-addr Adresse du descripteur de périphérique de stockage.
retourne:
ud Adresse début du bloc sur le périphérique.
BLK-VALID? ( n+ a-addr -- f )
Vérifie la validité d'un no. de bloc.
arguments:
n+ Numéro du bloc.
a-addr Adresse du descripteur de périphérique.
retourne:
f Indicateur booléen vrai si le numéro est valide.
Index