Format CP/M 2.2

From Atariki

Revision as of 20:19, 24 gru 2007; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Format dyskietki zastosowany w Indus CP/M 2.2 i przeznaczony do użycia ze stacjami Indus GT, LDW Super 2000 i CA-2001. Format dyskietki CP/M 2.2 ma to do siebie, że część parametrów dysku jest z góry narzucona przez BIOS właściwy dla danej implementacji systemu. W praktyce uniemożliwia to wymianę danych tą drogą pomiędzy poszczególnymi implementacjami CP/M.

Spis treści

Cechy ogólne

  • Dopuszczalne wielkości sektorów fizycznych: 128 i 256 bajtów
  • Wielkość sektora logicznego (bloku): 1024 bajty
  • Maksymalna pojemność filesystemu: 65536 bloków (64 MB)
  • Maksymalna wielkość pliku: nieograniczona
  • Maksymalna liczba plików na dysku: 63
  • Struktura katalogowa: jednopoziomowa
  • Maksymalna liczba plików w katalogu: 63
  • Nazwa pliku: 8+3
  • Metoda linkowania plików: indywidualne mapy plików
  • Metoda alokacji sektorów: zależna od BIOS-u

Jednostka alokacji

Jednostkę alokacji stanowi blok liczący osiem sektorów w SD i cztery w DD (czyli 1k). Całkowita pojemność dyskietki w SD i DD wynosi odpowiednio 85 i 171 jednostek alokacji.

Jedną ze stosowanych jednostek miar jest "rekord". Jest to umowna wielkość wynosząca 128 bajtów (historycznie: wielkość sektora na dyskietce ośmiocalowej).

DPB

Parametry dysku przechowywane są w tzw. DPB (ang. disk parameter block). Jego struktura jest następująca:

OffsetOpis
$00-$01

Liczba 128-bajtowych rekordów na ścieżkę: 18 w SD i 36 w DD.

$02

Tzw. block shift: $03 dla bloku 1k.

$03

Tzw. block mask: $0F dla bloku 1k.

$04

Tzw. extent mask (patrz niżej). W Indus CP/M 2.2 wynosi $00.

$05-$06

Liczba bloków na dysku, odjąć 1: 84 w SD i 170 w DD.

$07-$08

Liczba wpisów w katalogu, odjąć 1. W Indus CP/M: 63.

$09-$0A

Mapa alokacji katalogu. Interpretowana jest jako seria bitów (mł. bajt w kolejności 7-0, potem starszy bajt tak samo) reprezentująca 16 kolejnych sektorów na ścieżce znajdującej się za ścieżkami zarezerwowanymi (patrz niżej). Bit ustawiony oznacza, że odpowiadający mu sektor zajęty jest na katalog.

$0B-$0C

Liczba wpisów w katalogu, podzielona przez 4 i zaokrąglona w górę. W Indus CP/M 2.2: 16.

$0D-$0E

Liczba ścieżek zarezerwowanych. W Indus CP/M 2.2: 2.

DPB nie jest zapisany nigdzie na dysku - BIOS tworzy go sobie w pamięci po zalogowaniu dyskietki. Tak samo tworzona jest mapa alokacji sektorów pozwalająca na przypisywanie wolnych sektorów do nowo tworzonych plików.

Katalog

Jeden wpis katalogowy liczy 32 bajty. Jego struktura jest następująca:

OffsetOpis
$00

Liczba z zakresu 0-15: kod użytkownika (ang. user number). Pozwala to na istnienie wielu plików o tej samej nazwie na jednej dyskietce. Poszczególni użytkownicy nie "widzą" plików tworzonych przez innych.

Gdy kod użytkownika jest równy $E5, oznacza to plik skasowany.

$01-$08

Nazwa pliku.

$09-$0B

Rozszerzenie nazwy pliku. Musi się składać z 7-bitowych znaków ASCII. Gdy pierwszy bajt rozszerzenia ma ustawiony bit 7, oznacza to, że plik jest zabezpieczony przed zapisem. To samo w drugim bajcie oznacza "plik systemowy" (czyli ukryty).

$0C

Młodszy bajt tzw. extent counter (patrz niżej).

$0D

Bajt zarezerwowany, równy $00.

$0E

Starszy bajt extent counter. Gdy długość pliku jest większa niż to być może wykazane w pojedycznym wpisie katalogowym (czyli, na dyskietce, ponad 16k), tworzone są następne wpisy dotyczące tego samego pliku. Do ich odróżniania służy extent counter, według wzoru: entry_number = ((32 * extent_counter_hi) + extent_counter_lo) / (extent_mask + 1).

$0F

Record count. Liczba rekordów pliku obejmowana przez ten wpis katalogowy, wg. wzoru: (extent_counter & extent_mask) * 128 + record_count. Gdy record count ma wartość $80, oznacza to, że bieżący wpis katalogowy jest całkowicie wypełniony, a dalsza część pliku jest opisana przez następny wpis opiewający na ten sam plik. Wpisy rozróżniane są na podstawie wartości extent counter (patrz wyżej).

$10-$1F

Numery kolejnych bloków zajętych przez plik. Gdy całkowita liczba bloków na dysku jest mniejsza niż 256, numery bloków są jednobajtowe, w przeciwnym razie dwubajtowe (młodszy/starszy). Wartość $00 oznacza blok nieprzypisany.

Zobacz też


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools