De quoi s'agit-il ?
Les buffers sont stockes entre le .END. et le registre d'adresse 192 (0C0). Ils contiennent des informations, etats, alarmes, assignations, ... qui doivent rester accessibles, mais hors de la zone des programmes et des registres (R00...).
Chaque buffer est identifie par un id unique de 1 a 15. Une liste exhaustive de ces id:
Code : Tout sélectionner
1 - David Assembler : Labels
2 - David Assembler : Labels irresolus
3 - CCD : Taille du mot, seed, matrice courante (Idem ADVANTAGE)
7 - Extended IL
9 - XTRABOX : RGBUF de CGH ;)
10 - TIME : Alarmes
11 - Plotter
12 - HPILDEV
13 - CMT300
14 - ADVANTAGE : Donnees temporaires pour INTG et SOLVE)
- DATAFILE et RSU
15 - MAIN-FRAME : Assignations
Et oui, le MAIN-FRAME (MF) est d'une maturite epoustouflante !!!
En effet, quand on allume la machine, le MF va invalider tous les buffers (sauf le 15 qui est toujours stocke a partir de 0C0), puis il va appeller le vecteur de "Deep-Sleep Wake-Up" (adresse xFF9) de toutes les ROMs presentes. Celles-ci devront alors RE-valider leur buffer, sinon le MF le supprimera. Et voila, comment et pourquoi un buffer est detruit si la ROM est extraite de la machine
Et comment accede-t-on au buffer ?
En fait, le buffer n'est pas forcement accessible directement, mais sert de tampon ou de stockage d'etat a des fonctions des ROMs. Seul HPILDEV permet un acces direct au buffer; celui-ci etant utilise comme zone d'echange avec un peripherique HP-IL.
Les alarmes, par exemples, sont stokees dans le buffer du TIME. On ne peut pas les lires directement, mais on peut agir sur celles-ci via les instructions dediees.
A quoi ca ressemble un buffer ?
Un buffer est un espace d'au-moins 1 registre (7 octets) code comme suit:
Code : Tout sélectionner
BB LL x2 x3 x4 x5 x6
N0 y1 y2 y3 y4 y5 y6
LL est le nombre de registres de 01 a FF soit 255 registres (d'ou les 1771 octets max de BSIZEX dans le HPILDEV: 255 x 7 - 2 registres)
Les codes x2..x6 et 0..y6 sont les donnees utilisateurs. Il est conseille de ne jamais laisser de registre a la valeur 0, car celui-ci sera considere comme libre et donc recupere par ex. pour les programmes, d'ou un N non-nul. Le cas echeant (HPILDEV, RGBF), un n+1eme registre non nul est ajoute en fin de buffer. C'est aussi comme cela que le nombre de registres disponibles decroit quand on cree un buffer.
Ci dessous, le buffer de l'HPILDEV (cree par 14 BSIZEX):
Code : Tout sélectionner
> r 0c0 c4
Registers: R00 at 19C, SIZE 100
0C0: CC040000000000 <- Header (id 12 = C), 4 registres
0C1: 00000000000000 <- donnees
0C2: 00000000000000 <- donneee
0C3: 104D4F4E495452 <- String "MONITR" pour fin de buffer.
0C4: 00000000000000 <- Registre libre