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) |