Konference: Počítač SHARP MZ-800 a emulátory
| Od: | Michal Hučík |
| Datum: | 16.1.2012 15:40 |
| Předmět: | BASIC FD filesystem |
Ahoj,
kdyz uz jsem se pohrabal v tech FDC, tak jsem se rozhodl, ze bych mohl
dale pokracovat nejakou knihovnou pro praci se
vsemi soucasnymi souborovymi systemy, ktere jsou pouzivany na Sharpu.
Cilem by mely byt funkce, ktere by umoznily vypis
adresare, cteni, zapis, smazani souboru a podle moznosti FS take
nastaveni jeho atributu, ci prejmenovani. Jde mi
samozrejme predevsim o moznost bezproblemoveho prenosu souboru
odkudkoliv kamkoliv. Jakmile budou knihovny hotove, tak
by samozrejme nemel byt problem vymenit driver treba za takovy, ktery
bude obsluhovat primo DSK, nebo ramdisk, ci jeho
obraz z emulatoru.
Jako prvni jsem se pustil do sberu informaci o tom jak funguje zakladni
format BASIC disket. Tohle jsem posbiral v
pameti a take odsledoval pruzkumem obsahu disket. Potreboval bych
poradit predevsim u radku, na kterych jsou otazniky:
Predpoklad: BASIC zrejme nepodporuje HD diskety. Je navic limitovany
velikosti bitove mapy (250 bajtu) a proto lze na disketu v tomto
formatu pouzit pro data pouze 512 kB - 12 KB pro ucely systemu a
adresar = 500 kB max.
Soubory jsou ulozeny v sektorech kontinualne. To znamena, ze se po
smazani nekolika souboru muze stat, ze i kdyz je na
disku dostatek mista v kB, tak jiz neni mozne ukladat vetsi soubory,
protoze pro ne neni na diskete k dispozici
dostatecne velky souvisly blok volnych sektoru.
Format ma obracenou logiku zaznamu a proto se pro vypocet skutecne
logicke stopy musi udelat prevod pri kterem se u
(mz) logicke_stopy invertuje 0. bit (obracena strana diskety)
Format pouziva alokacni bloky, coz je 16 bitove cislo = (mz)
logicka_stopa * 16) + sector - 1
Zavadec:
=======
logicka stopa 1 (v mz 0), sector 1
offset size description
-------------------------------------------
0 1 0x03 - typ souboru zavadece (musi byt
0x03)
1 6 IPLPRO
7 12 <filename>
19 1 0x0d
20 2 <SIZE>
22 2 <START>
24 2 <EXEC>
26 4 ???? (nevyuzito?)
30 2 alokacni blok zacatku programu (pokud
je = 1, tak je zacatek ve 2 sektoru teto stopy a
program zavadece pak ovsem nesmi
byt vetsi jak 14 sektoru = 3584 bajtu = 0x0e00, jinak musi byt umisten v
souborove
casti disku)
32 224 ???? (nevyuzito? u nejake diskety jsem
od pozice 128 videl nejaky description v ASCII)
MZ disk info:
===========
logicka stopa 1 (v mz 0), sector 16
offset size description
-------------------------------------------
0 1 ???? (nejaka konstanta? nevyuzito?)
1 1 prvni alokacni blok, ktery je k
dispozici pro ulozeni filat
zpravidla 0x30 = 2. (v mz 3.)
stopa, 1. sektor
2 2 pocet obsazenych alokacnich bloku
(naformatovana disketa tady ma 0x30
= 3 cele stopy)
4 2 velikost disku v alokacnich blocich -
1 (u 720 kB diskety = 0x07ff )
6 250 bitova mapa disku, kazdy bit zastupuje
jeden konkretni alokacni blok, pokud je
nastaven, tak to znamena, ze misto
je obsazeno
Tady dochazi k limitu 250 * 8 =
maximalni pocet alokacnich bloku.
MZ adresar:
==========
logicka stopa 0 (v mz 1), sector 1 - 10
???? nasledujicich 6 sektoru ve stope je nevyuzito?
max pocet polozek adresare = 77 ????
V poslednim sektoru je 64 bajtu nevyuzito ????
offset size description
-------------------------------------------
0 1 0x80 ????
1 1 0x01 ????
2 30 ???? (nepouzito?)
32 xx polozky adresare
offset size description
-------------------------------------------
0 1 file typ - 0x00 = smazana polozka
1 16 <filename>
17 1 0x0d
18 2 ???? (nejaky atribut?)
20 2 <SIZE>
22 2 <START>
24 2 <EXEC>
26 4 ???? (nevyuzito?)
30 2 alokacni blok
Cela 3. (v mz 2.) stopa je nevyuzita ???? a od 2. (v mz 3.) stopy
zacinaji data prvniho souboru.
Potreboval bych poradit jak je to s atributy, pripadne souborovymi typy.
K cemu slouzi konstanty umistene v sectoru pred direktorarem a zda se
neco zajimaveho neskryva v bajtech, ktere jsem oznacil jako nepouzite.
Michal
Ostatní příspěvky vlákna:
[2012/1 (125)] [2012/2 (34)] [2012/3 (57)] [2012/4 (46)] [2012/5 (40)] [2012/6 (44)] [2012/7 (64)] [2012/8 (57)] [2012/9 (32)] [2012/10 (55)] [2012/11 (25)] [2012/12 (63)]
[1999 (1)]
[2000 (168)]
[2001 (733)]
[2002 (459)]
[2003 (654)]
[2004 (224)]
[2005 (105)]
[2006 (182)]
[2007 (201)]
[2008 (294)]
[2009 (363)]
[2010 (782)]
[2011 (522)]
[2012 (642)]
[2013 (442)]