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