Konference: Počítač SHARP MZ-800 a emulátory
Od: | Michal Hučík |
Datum: | 16.1.2012 16: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)]