Co se mě podařilo zjistit o formátech disket, používaných na počítači SHARP MZ-800 verze 1.0 ===================================================================== 1. Diskety systému SHARP P-CP/M 80 ---------------------------------- Formáty disket: |-----------------------------------------------------------------| | označení | kapacita | počet | sektorů | systémových | položek | | | (kB) | stop | na stopu | stop | adresáře | |----------+----------+-------+----------+-------------+----------| | 2DMZ800 | 312 | 79 | 32 | 1 | 64 | | 1DIBMPC | 156 | 40 | 32 | 1 | 64 | | 2DIBMPC | 316 | 80 | 32 | 1 | 64 | | 2DMZ80B | 340 | 35 | 80 | 1 | 128 | | 2DM3500 | 296 | 40 | 64 | 3 | 128 | | 2DM5500 | 304 | 40 | 64 | 2 | 128 | |-----------------------------------------------------------------| Disk Parameter Block (DPB) je oproti standartnímu CP/M upraven takto: $E100 DPB logického disku A: $E10F přiřazení fyzického disku a jeho parametry - Bity 0 a 1 označují fyzický disk. Takto lze jednomu fyzickému disku přiřadit více disků logických s různými formáty. - Bity 2 až 7 určují další parametry disku. Pro jednotlivé formáty jsou použity následující hodnoty: 2DMZ800\ adresy sektorů 1-10h, bez prokládání, stopa 1DIBMPC | 011110 je na jedné straně, číslování stop od 2DIBMPC/ kraje ke středu a na druhé straně od středu ke kraji 2DMZ80B 000011 adresy sektorů 1-0Ah, 8Bh-94h, neprokládané, stopa zabírá obě strany diskety (druhá strana je označena jedničkou v 7. bitu adresy sektoru). 2DMZ3500\ 001000 adresy sektorů 1-10h, 81h-92h, neprokládané, 2DMZ5500/ stopa zabírá obě strany. Pro čtení disket formátu CP/M LEC (Lamač) je potřeba kromě DPB upravit diskeditorem i uvedený byte takto: 001110DD - adresy sektorů 1-12h, 81h-92h, neprokládané, stopa zabírá obě strany. DD označuje zvolený fyzický disk. Tento formát je použitelný pro diskety kapacity 720kB. Pro nižší kapacity je nutno změnit adresy sektorů. Bohužel, vymezený prostor je příliš malý pro zapsání sektorů na disketách HD (1440kB). $E110-$E13F Vlastní popis fyzických sektorů, jak bylo uvedeno výše. $E140 Logický disk B: $E180 Logický disk C: $E1C0 Logický disk D: 2. Diskety formátu SHARP (formát používaný ROM počítače) -------------------------------------------------------- Data jsou na disketě uložena následovně: stopa/sektor 0/1 Je-li zde inicializační program, musí mít 1. byte (typ souboru) hodnotu 03 a název inicializačního programu musí začínat IPLPRO (2. až 7. byte). Od 8. po 17. byte je vlastní název inicializačního programu, 18. byte musí být 0Dh. Další byty mají tento význam: 19 hodnota 01h označuje soubor chráněný proti zápisu 20 ??? 21, 22 délka programu 23, 24 zaváděcí adresa 25, 26 startovací adresa 27-30 ??? 31, 32 z těchto bytů lze vypočítat první stopu a sektor, odkud je uložen soubor na disku. (Uvedený formát je použit i pro jednotlivé položky adresáře diskety. Adresář začíná na 1 stopě, 1 sektoru, ale až od 33 bytu. Každá položka adresáře tedy zabírá 32 bytů.) Dále je na 0. stopě až po sektor 14 včetně místo pro uložení vlastního inicializačního programu. Ten však může začínat i kdekoliv jinde ve volné oblasti disku. 0/16 1. byte Číslo disku 2. byte Číslo sektoru, kde začíná volná oblast pro uložení souborů (standartně 30h, tedy 3. stopa, 1. sektor.) 3. a 4. byte Počet dosud obsazených sektorů 5. a 6. byte Počet stop a sektorů na disku, čili formát diskety. Standartně FFh, 04h (80 stop, 16 sektorů ~ 320 kB). Při použití formátu 640 kB (160 stop, 16 sektorů) je nutno tyto byty opravit na FFh, 09h, ovšem až PO ZKOPÍROVÁNÍ systému. I když je totiž systém kopírován také z formátu 640kB, dojde při přepisu k nastavení na formát 320kB :-( 7. byte Zde začíná bitová mapa obsazení jednotlivých sektorů. Pro uvolnění místa na disku po vymazání souboru nestačí pouze nastavit typ souboru v adresáři na 00h, ale je nutné opravit i tuto mapu, jinak je daná oblast stále obsazená. Použitá velikost mapy však omezuje maximální využitelnou kapacitu disku na 512 kB, takže při naformátování na 640 Kb nelze posledních 128 kB využít :-( Pouze v některých případech se podaří zapsat ještě jeden soubor, který může část této oblasti využít. Pak jsou ale problémy s jeho vymazáním (systém hlásí chybu). 1/1 1. byte Maximální počet položek v adresáři včetně systémového souboru. 2. byte Znovu číslo disku ??? 1/16 Zde začíná adresář diskety. Údaje o uložených souborech začínají 33. bytem tohoto sektoru, každý záznam má 32 bytů. Adresář končí na 8 sektoru této stopy. Z toho plyne, že na disk lze uložit maximálně 63 souborů libovolných a jeden systémový soubor. Celkově lze říct, že používaný systém souborů a uložení dat na disku má několik vad a nevýhod: Díky použití bitové mapy pro označení toho, které sektory jsou obsazené nelze při použití upravené formátovací utility (FDFORMAT160) využít celou takto dosaženou kapacitu diskety. Přitom použití bitové mapy je vlastně zbytečné. Uvážíme-li totiž, že soubory jsou na disku uloženy spojitě, lze ze známé délky souboru a známého počátku uložení souboru na disku (obojí je v adresářové položce) kdykoliv sestavit mapu obsazení disku. Nevím však o žádném programu nebo utilitě, který by takto se soubory zacházel. Zmíněné spojité uložení navíc znemožňuje využití menších volných míst na disku, takže když například máme na disku volných třeba 100 kB v 10 blocích po 10 kB (pro zjednodušení), tak na disketu zapíšeme pouze soubory do velikosti 10 kb. Systém totiž není schopen rozdělit velký soubor do několika menších bloků, a hlavně si toto rozdělení nemá kam napsat. Snad by to mohlo být možné u datavých souborů v BASICu, kde je na konci každého sektoru odkaz na sektor následující (nebo 00 00, což znamená konec souboru). Jediným řešením, jak toto místo uvolnit, je zkopírovat obsah diskety, ovšem po jednotlivých souborech. Tedy aspoň do doby, než někdo napíše nějaký "setřásací program", který posune všechny soubory na začátek disku (a správně upraví odkazy v datových souborech). Nakonec, nějaký pěkný program pro komplexní správu disket a souborů (formátování, kopírování, mazání, "setřásání" atd.) velmi citelně chybí. ======================================================================== Výše uvedené informace nejsou výsledkem nějakého podrobného bádání, ale vznikly pouze jako vedlejší efekt při řešení některých problémů, na které jsem při práci narazil. Mohou být tedy neúplné, zkreslené nebo i vysloveně špatné. Navíc už jsou nějaký ten rok staré, takže jsem možná na něco, co jsem si tenkrát nenapsal, zapomněl. Pokud má někdo nějaké podrobnější, přesnější nebo doplňující údaje, budu velmi rád, když mě je pošle. Tomáš Nehybka FidoNet: 2:421/25.21