 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
