MILC logo

IndexVorigeVolgendeLeeg

De diskette nader bekeken
Genic Clubguide, 00-00-00


    
                  DE DISKETTE NADER BEKEKEN

In dit artikel  wil  ik  proberen  wat  meer  helderheid  te
scheppen over  de  diskette.  Ik  ga  hier  natuurlijk  geen
verhaal houden over LOAD, SAVE en MERGE, het zal  meer  gaan
over SEKTOREN, de FAT etc. Om aan te geven wat  er  ongeveer
vertelt  gaat  worden,  met  onderstaande  kennis  moet  het
2ogelijk zijn een  programma  als  DISKIT  van  FILOSOFT  te
schrijven. Maar nu genoeg inleiding, aan de slag:

                     De diskette zelf

Om  een  diskette  te  gebruiken  moet  hij   eerst   worden
geformateerd. Dit houdt in dat er sporen op de schijf worden
geschreven,  ook  wel  tracks   genoemd.   Bij   enkelzijdig
formateren hebben we te maken met 80 tracks, en bij  dubbel-
zijdig met 80 tracks aan de bovenkant en 80  tracks  aan  de
onderkant.

Deze tracks zijn onderverdeeld in elk 9 sektoren  dat  houdt
dus in dat als we met een  enkelzijdige  diskette  te  maken
hebben, we 80 tracks * 9 = 720 sektoren hebben. Zo'n  sektor
is als volgt opgebouwd :

1. Sektor nummer   (Ook wel sektor identifier)
2. Data area       (Hier is ruimte voor 512 bytes )
3. Ruimte tussen twee sektoren

Deze liggen achter elkaar op  een  track  samen  met  nog  8
andere sektoren. Dus als we weer een sommetje maken voor  de
enkelzijdige disk: 720 sektoren * 512 bytes = 368640 bytes.

Als er een programma op de schijf wordt gezet  komt  dit  op
verschillende sektoren te staan.  Er  moet  dus  ook  op  de
diskette staan,  welke  sektoren  het  programma  in  beslag
neemt. Om te weten waar dit staat moeten we eerst  wat  meer
over de diskette weten.

De diskette is onderverdeeld in vier verschillende  gebieden
: 1. De BOOT-sektor
  2. De Directory
  3. De FAT ( File Allocation Table )
  4. Het eigenlijke opslag-gebied voor programma's

We zullen ze een voor een uitgebreid bespreken .

                      De BOOT-sektor

Dit is sektor 0 op de schijf, de eerste sektor. Hierop staat
een heleboel standaard-informatie:

1. Type             : 3 bytes ( Altijd EB of E9 )
2. Naam             : 8 bytes
3. Bytes / Sector   : 2 bytes ( Altijd 512 )
4. Sekt. / Kluster  : 1 byte
5. Reserved Sectors : 2 bytes ( Sektoren die geen data -area
                                zijn . bv. de BOOT -sector )
6. Nr.FAT's         : 1 byte  ( Aantal FATS )
7. Directory entries: 2 bytes ( Maximaal  aantal  files   in
                                directory )
8. Sectors on disk  : 2 bytes
9. Med. Descriptor  : 1 byte
10.Sektors / FAT    : 2 bytes ( Aantal sektoren per FAT )
11.Sektors / track  : 2 bytes ( Altijd 9 )
12.Aantal Zijden    : 2 bytes
13.Hidden Sektors   : 2 bytes ( Wordt niet gebruikt )
14.De BOOT - routine

De BOOT-sektor  kan  gewoon  vanuit  basic  gelezen  worden,
hierbij maken wij gebruik  van  het  commando  DSKI$  (x,y).
Waarbij x het drivenummer is en y het sektor nummer. Bij dit
commando maken we gebruik van een zogenaamde dummy:

A$=DSKI$ (1,0)

In a$ staat nu niks, in de adressen F351 en F352 staat  waar
de sektor in het geheugen is opgeslagen. Hieronder volgt een
programma om de BOOT-sektor te lezen:

10 A$=DSKI$(1,0) :' Haal sektor van diskette
20 AD=PEEK (&HF351) + 256 * PEEK (&HF352) : ' Adres
30 FOR A=0 TO 7 : NM$=NM$+CHR$(PEEK(AD+3+A)) : NEXT A ' Naam
40 PRINT "Naam             : ";NM$
50 PRINT "Bytes / Sektor   :";PEEK(AD+11)+256*PEEK(AD+12)
60 PRINT "Sektors / Kluster:";PEEK(AD+13)

U kunt  het  programma  zo  zelf  afmaken  met  bovenstaande
informatie. Met het kommando DSKI$ kunnen we natuurlijk elke
sektor  onderzoeken,  hieronder  vindt  U  een  heel  simpel
voorbeeld van een SEKTOR-monitor.

10 CLS : INPUT "WELKE SEKTOR ";A:I$=DSKI$(1,A):Q=0
20 AD=PEEK(&HF351)+256*PEEK(&HF352)
30 IF Q=1 THEN X=256 ELSE Q=1:X=0
40 FORI=0TO15:LOCATE 0,I:PRINT I*16;
50 FORJ=0TO15
60 LOCATE 10+J*3,I:PRINT HEX$(PEEK(AD+X+I*16+J));
70 LOCATE 64+J,I  :PRINT CHR$(PEEK(AD+X+I*16+J));
80 NEXTJ:NEXTI
90 A$=INPUT$(1):IF X=0 THEN CLS : GOTO 30 ELSE END

U vraagt zich wellicht af: "Waarom al deze  informatie  over
de BOOT-sektor?" Het  zal  U  duidelijk  worden  waarom  dit
onderwerp als eerste is behandeld. Het stelt U in staat, als
U  bijvoorbeeld  Uw  eigen  SEKTOR-monitor  maakt,  vast  te
stellen hoeveel sektoren zich op de diskette bevinden. En zo
zijn er nog veel meer toepassingen.


                       De Directory

In de directory staan alle gegevens van de bestanden die  op
de disk zijn opgeslagen.  De  gegevens  nemen  32  bytes  in
beslag per bestand, er passen dus 16 bestand-gegevens in een
sektor. De volgende gegevens van het  bestand  staan  in  de
directory:

1. File-naam               8 bytes
2. Extentie                3 bytes
3. File-attributen         1 byte   Altijd 00 onder MSX
4. Niet Gebruikt          10 bytes
5. Tijd                    2 bytes
6. Datum                   2 bytes
7. Eerste kluster van file 2 bytes
8. file grootte            4 bytes

Opmerkingen :

File-naam : Als  het eerste byte E5 bevat , is  dit  bestand
            gewist .
Tijd      : Is binair als volgt opgeslagen :
            MMMSSSSS en HHHHHMMM
            Waarbij "H" uren,"M" minuten en "S" seconden is.
Datum     : Is binair als volgt opgeslagen :
            MMMDDDDD en JJJJJJJM
            Waarbij "J" jaren,"M" maanden en "D" dagen is .
            Bij Jaren : 0=1980 en 20=2000 etc.

Uit  de  BOOT-sektor  kunnen  we  lezen  waar  de  directory
-sectoren zich op de schijf bevinden. In de directory  staat
ook, waar het eerste kluster van het programma zich bevindt.
En in de eerste byte van dit kluster  (Dat  uit  2  sektoren
bestaat, meestal), staat aangegeven wat voor soort programma
dit is. Bij een basic programma is dit eerste byte  FF,  bij
een ASCII bestand tussen 30 en 39, en  bij  een  machinetaal
programma FE.

Als we te maken hebben  met  een  machinetaal-programma  dan
staan in de 6 bytes daarna, achtereenvolgens het begin,  het
eind en het startadres van het programma.

Er is echter een probleem. Als we het kluster-nummer  hebben
weten  we  nog  niet  welke  sector  dit  betreft,  en   dit
sektor-nummer hebben  we  wel  degelijk  nodig  als  we  het
commando  DSKI$  willen  gebruiken.  Door  middel  van   een
ingewikkelde formule kunnen we dit echter wel berekenen:

Aantal FATs * Aantal sektoren + Aantal directory sectoren  +
Aantal  gereserveerde  sektoren   +   Aantal   gereserveerde
sektoren * Aantal sektoren per kluster - klusternummer =
HET SEKTORNUMMER

De volgende  keer  gaan  we  verder  met  onder  andere  een
programma waarin alle bovenstaande  gegevens  zullen  worden
toegepast.  Het  programma  toont  U  van   de   eerste   16
programma's op uw  diskette:  Naam,  grootte,  tijd,  datum,
cluster, type, sector en eventueel zelfs de begin , start en
eind adressen. Volgende keer gaan we ook  uitgebreid  verder
in op de FAT en behandelen we onderwerpen die  nooit  eerder
gepubliceerd zijn.

Voor Opmerkingen , suggesties , vragen en toevoegingen :

Ronald Egas
De Blauwe Wereld 53
1398 EP Muiden
02942-3813 ('s avonds en in de weekenden)

    

Index

Vorige

Volgende