block

index
index principal

Description

Implémentation des mots de gestion de fichiers par blocs.
REF: http://lars.nocrew.org/forth2012/block.html
REF: http://lars.nocrew.org/dpans/dpans7.htm#7.6.1
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.
index principal

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
index
haut
index principal

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.
index
haut
index principal

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
index
haut
index principal

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   
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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+.
index
haut
index principal

SAVE-BUFFERS ( -- )

Sauvegarde tous les buffers qui ont été modifiés.

arguments:
aucun   
retourne:
rien   
index
haut
index principal

EMPTY-BUFFERS ( -- )

Libère tous les buffers sans sauvegarder.

arguments:
aucun   
retourne:
rien  
index
haut
index principal

FLUSH ( -- )

Sauvegarde tous les buffers et les libères.

arguments:
aucun   
retourne:
rien  
index
haut
index principal

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  
index
haut
index principal

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.
index
haut
index principal

Description

Les périphériques de stockage sont définis par une table contenant
les CFA des fonctions de bases.

nomdescription
DEVIDIdentifiant du périphérique.
XRAM =3
EEPROM=4
SDCARD=5
BLK-READLecture d'un bloc.
BLK-WRITEÉcriture d'un bloc.
BLK>ADRConversion 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.
index principal

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}
index
haut
index principal

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   
index
haut
index principal

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   
index
haut
index principal

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.
index
haut
index principal

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
haut
index principal

Index


haut
index principal