MILC logo

IndexVorigeVolgendeLeeg

Disk cursus (1)
Genic Clubguide, 00-00-00


    
NIEUWE CURSUS:

                D I S K   C U R S U S   ( 1 )
               ===============================

Zoals beloofd op de vorige ClubGuide  start  ik  vanaf  deze
ClubGuide met een nieuwe cursus over diskgebruik op MSX.  De
cursus  zal  vooralsnog  alleen   MSXDOS1/Disk   Basic   1.0
behandelen. Misschien zal ik over een  tijdje  ook  aandacht
besteden aan MSXDOS2, maar dat kan ik nu nog  niet  beloven.
Om te beginnen leg ik u eerst uit hoe een  MSX  diskette  is
ingedeeld.


                    DE 3.5 INCH DISKETTE

MSX computers maken gebruik van de 3.5" disk. Deze  diskette
kan enkelzijdig of dubbelzijdig zijn. De offici‰le  naam  is
MF-1DD voor enkelzijdig  of  MF-2DD  voor  dubbelzijdig.  MF
staat voor MicroFloppydisk, DD staat voor Double Density.

Elke zijde bevat 80 tracks, die elk weer onderverdeeld  zijn
in 9 sectoren. In totaal zijn er dus 9 * 80 =  720  sectoren
op ‚‚n kant. Elke sector kan 512 bytes bevatten, waardoor de
opslag van een dubbelzijdige diskette 2 * 9 * 80 * 512 = 720
kB bedraagt.

U heeft misschien wel eens de kreet "Ongeformatteerd  1  MB"
op een disk zien staan. Als u de disk formatteert,  schrijft
de diskdrive de sectoren  op  de  diskette.  Er  worden  ook
checksums op de disk gezet, zodat de drive bij elke lees- of
schrijfoperatie kan checken of alles  goed  is  gegaan.  Dat
kost veel diskruimte, u houdt van de 1 MB "slechts"  720  kB
over.

Wij zullen ons in deze cursus niet bezighouden met wat  zich
tussen de sectoren afspeelt. De grens ligt bij de  sectoren.
Het is mogelijk om met directe I/O  communicatie  tussen  de
sectoren te lezen/schrijven, dat wordt veel voor het  (ont-)
beveiligen van diskettes gebruikt. Wij gaan daar niet verder
op in.

Er zijn een aantal  niveaus  waarop  je  een  diskette  kunt
benaderen: sectoren, clusters en bestanden. We  beginnen  nu
met sectoren.


                 SECTOREN LEZEN EN SCHRIJVEN

De BIOS routine voor het lezen  en  schrijven  van  sectoren
doet bij gebruik  van  de  diskdrive  al  het  werk.  Als  u
bijvoorbeeld een bestand wilt  lezen  geeft  u  de  computer
daartoe opdracht via MSX DOS, Disk Basic of BDOS  calls.  In
de diskrom bevinden zich routines die  alles  herleiden  tot
het lezen en/of schrijven van sectoren. Die routines  roepen
steeds de BIOS  routine  aan  om  een  sector  te  lezen  of
te schrijven.

De BIOS routine heet PHYDIO (Physical Disk I/O) en staat  op
adres &H144. De routine gebruikt de volgende registers:

A:  drivenummer (A = 0, B = 1, etc.)
B:  aantal sectoren
C:  media ID (&HF8 voor enkelz. of &HF9 voor dubbelzijdig)
HL: RAM adres
DE: nummer van eerste sector

U kunt met de C-flag aangeven of u wilt lezen of schrijven:

NC: lezen
C:  schrijven

Nadat u met  LD  instrukties  de  registers  van  de  juiste
waarden hebt voorzien kunt u de routine aanroepen met:

CALL &H144

Alle registers worden veranderd. Als de  routine  terugkeert
met de carry hoog, dan is er iets fout gegaan. B  bevat  het
aantal nog te laden/saven sectoren en A bevat  de  foutcode.
De volgende foutcodes zijn mogelijk:

0   Protected
2   Not ready
4   Data error
6   Seek error
8   Record not found
10  Write error
12  Bad parameter
14  Out of memory
16  Overig

Voor  alle  duidelijkheid  nog  even  een   voorbeeld.   Dit
voorbeeld leest de bootsector van de disk in drive A  in  en
zet die vanaf adres &HD000.

; DEMONSTRATIE PHYDIO

ORG  &HC000        ; startadres
LD   A,0           ; drive A
LD   BC,&H01F9     ; 1 sector, dubbelzijdige disk (F9)
LD   HL,&HD000     ; startadres
LD   DE,0          ; bootsector is sector 0
OR   A             ; wis carry = lezen
CALL &H144         ; roep de routine aan
RET  NC            ; klaar als geen fout
CALL &HC0          ; BEEP als fout
RET


                         FORMATTEREN

De tweede en laatste BIOS call is FORMAT. Deze routine staat
op adres &H147 en doet precies hetzelfde als CALL FORMAT. De
computer  vraagt  zoals  gebruikelijk  om  drive  en  aantal
zijden. U roept de routine aan door  CALL  &H147.  In  Basic
kunt u in plaats van _FORMAT dus ook DEFUSR=&H147:  U=USR(0)
gebruiken.

Bij het  formatteren  worden  er  sectoren  op  de  diskette
geschreven. Bootsector, FAT en directory worden  ge‹nitiali-
seerd.


                        DE BOOTSECTOR

De eerste sector van een diskette heet de bootsector, in het
Nederlands  "opstartsector".  Deze  sector  bevat   algemene
informatie over de diskette en de opstartroutine.

Als u de computer opstart met een disk in de drive, dan  zal
de computer de bootsector inlezen en vanaf adres  &HC000  in
het  RAM  geheugen  zetten.  De  computer  geeft  daarna  de
besturing over aan de routine die op adres &HC01E begint.

Het eerste stuk van de bootsector (0-&H1D)  is  gereserveerd
voor gegevens over de disk. De bytes 00-02 zijn een  erfenis
van andere systemen waarop de disk kan draaien,  zij  hebben
op  MSX  geen  betekenis.

De  eerste  bytes  van  de  bootsector  hebben  de  volgende
betekenis:

------------------------------------------------------------
00       &HE9 of &HEB (JUMP instruktie voor 8086 processor)
01-02    Eventueel beginadres van de MS-DOS boot strap
03-0A    8 ASCII tekens waarin normaal de merknaam van de
         drive staat waarop de disk is geformatteerd
0B-0C    Aantal bytes per sector (512)
0D       Aantal sectoren per cluster (2)
0E-0F    Aantal gereserveerde sectoren (2)
10       Aantal FAT's (2)
11-12    Maximum aantal files in de directory (112)
13-14    Totaal aantal sectoren per diskette (720 of 1440)
15       ID-byte (&HF8 of &HF9)
16-17    Aantal sectoren per FAT (2 of 3)
18-19    Aantal sectoren per track (9)
1A-1B    Aantal magneetkoppen (= aantal zijdes, 1 of 2)
1C-1D    Aantal "verborgen" sectoren (0)
1E-?     Bootroutine
------------------------------------------------------------

Tussen haakjes staat steeds de standaardwaarde. De  diskette
is behalve in sectoren ook nog eens  in  clusters  verdeeld.
Een cluster bestaat uit twee sectoren. Er  kunnen  dus  1024
bytes, oftewel 1 kB, in een cluster worden opgeslagen.

U kunt in Basic met  het  commando  DSKF(drive)  het  aantal
vrije clusters van een diskette opvragen. U zult merken  dat
er bij een geformatteerde dubbelzijdige diskette geen 720 kB
vrij is, zoals u zou verwachten. Nee, er is slechts 713  kB.
Nu zult u denken: waar is die 7 kB gebleven? Het antwoord is
heel simpel: de bootsector (1), FAT  (6)  en  directory  (7)
gebruiken samen 14 sectoren. In die 7  kB  kunnen  dus  geen
bestanden meer worden opgeslagen.

Bij diskettes die door  Disk  Basic  V1.0  of  MSXDOS1  zijn
geformatteerd 'kijkt' de bootroutine (die vanaf &H1C  in  de
bootsector staat) of MSXDOS1 op de disk aanwezig is. Als dat
zo is, dan wordt MSXDOS1 vanaf &H100  geladen  en  geeft  de
computer de besturing over aan MSXDOS1.

In het andere  geval  wordt  de  besturing  verder  door  de
computer gaat, die zal proberen AUTOEXEC.BAS van de diskette
te RUNnen. Als dat ook niet lukt, dan  springt  de  computer
naar Basic.


                    COMMERCIELE SOFTWARE

Als u met een diskmonitor in de bootsector  van  commerci‰le
software kijkt, dan zult  u  vaak  rare  dingen  aantreffen.
Meestal staan er zeer vreemde dingen,  zoals  diskettes  met
2367 zijdes (!!). De naam van het spel of het nummer van  de
disk staan ook vaak in de bootsector. Kijkt u maar eens  met
een sectormonitor in de bootsector van  Japanse  spellen.  U
kunt dan ook zien  dat  Falcom  een  eigen  soort  directory
gebruikt (zie bijvoorbeeld Ys III, Wanderers from Ys).

U kunt van zulke diskettes vaak niet de  filelist  opvragen.
Logisch, want de computer raakt aardig in de war als de  FAT
volgens de bootsector uit 65536 sectoren bestaat!  U  krijgt
dan bij een FILES of DSKF(0) opdracht  de  foutmelding  Disk
I/O error. De disk is dan niet kapot, de diskrom kan  alleen
niet de juiste opdracht uitvoeren.


                      FAT EN DIRECTORY

De volgende keer gaan we verder met de FAT en de  directory.
Er zal dan een programma op de ClubGuide staan dat van  elke
file op een disk niet alleen naam, extensie, tijd, datum  en
filegrootte geeft, maar ook in welke clusters/  sectoren  de
file staat. Dat is vooral handig om te weten als u  met  een
diskmonitor in de file wilt gaan "knoeien".

Als u nog suggesties heeft voor deze cursus, dan kunt u  mij
een briefje sturen.  Ik  ga  er  bijvoorbeeld  van  uit  dat
iedereen wel een sectormonitor heeft. Laat het weten als dat
niet zo is, dan plaats ik er alsnog  ‚‚n  op  de  ClubGuide.
Stuur uw vragen, suggesties of opmerkingen naar:

                       Stichting GENIC
                     T.a.v. Stefan Boer
                         Postbus 258
                       8470 AE Wolvega

                    Tot de volgende keer!

                                              Stefan Boer

    

Index

Vorige

Volgende