Konference: Počítač SHARP MZ-800 a emulátory

Od: Radek Suk
Datum: 2.2.2012 00:53
Předmět: Re: cp/m filesystem


Obecne muze byt vice polozek v adresari nez 64 ale neni bezne. Spise by 
chtelo rozvinout diskusi na nejakem konktretnim pripade.

Jinak existuje zavislost a to ta ze kdyz se kontroluje adresar coz se 
dela u FDD ale nedela se to napr. u Ramdisku tak CKS=(DRM+1)/4. Proto 
pri bezne diskete 720KB je DRM=127 a CKS=32.

EXM rika jak velkou pamet popisuje jedna polozka adresare. Bezne se 
popisuje 16KB ale pri vetsich ulozistich je to vice. Napr. pri kdyz je 
zde cislo 3 tak to znamena (3+1)*16=64KB - a tak jeden zaznam v adresari 
umi popsat 64KB dat.

Co se tyce uint8_t dext - tak zde se vyuziva 5 bitu a tak povolene cislo 
je 0..31. - Dalsi bity jsou ulozene v S2 a tam se vyuziva 4 bity. Jinak 
v CR se vyuziva 7 bitu - celkem kdyz to spocitas tak je to 16 bitu a to 
je 2^16*128=8MB a to je max. soubor v cp/m v2.2.

Az bude vice casu tak se chci podivat na to jak jaky system nastavuje RD 
a FDD. Zatim jsem nasel jiste nedostatky a az si potvrdim ze to spravne 
chapu tak bych to zde otevrel k diskusi.

Radek


Dne 1.2.2012 13:46, Michal Hučík (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
>
>
> Ahoj,
>
> postupuji dale a zacinam tedy pracovat na cp/m filesystemu, ktery je jiz
> mnohem variabilnejsi a u ktereho bude zajimave vytvorit i drivery pro
> RD, RD image a pripadne i pro IDE - nicmene prozatim je funkcni jen IDE8
> v NIPOSu.
>
> Jako zdroj informaci o specifikacich formatu jsem pouzil predevsim tuto
> stranku http://www.sharpmz.org/succpminfo06.htm
>
> Popis adresarove polozky jsem asi nejak prehlednul, nebo tam neni,
> nicmene snad jsem jej poskladal dobre i po pameti.
>
> I pres popis jsem bohuzel nejak nepochopil vyznam polozek EXM a CKS.
> Taky mi vrta hlavou informace, kterou tady pred nedavnem napsal tusim
> Radek, ze v cp/m na logickem disku nemuze byt vice jak 64 souboru. Pokud
> vite, muzete mi prosim pomoci zodpovedet tyto 3 veci?
>
> Tady jsou struktury uz s mym komentarem:
>
> #define FS_CPM_LSECTOR_SIZE 128
>
> typedef struct {
> uint16_t SPT; // SPT - sectors per track
> uint8_t BSH; // BSH - block shift = pocet cp/m log. sectoru v jednom
> fyzickem
> uint8_t BLM; // BLM - block mask = pocet cp/m log. sectoru v clusteru - 1
> uint8_t EXM; // EXM - extent mask ???
> uint16_t DSM; // DSM - highest block number = max. pocet clusteru -
> systemove bloky - 1
> uint16_t DRM; // DRM - highest directory entry number = max. pocet
> polozek adresare - 1
> uint16_t ALD; // ALD - bitmapa prvnich 16 clusteru, 15. bit = 0.
> cluster, '1' = pouzito jako directory
> uint16_t CKS; // CKS - Directory checksum ???
> uint16_t OFS; // OFS - poc. systemovych stop na zacatku disku, ktere
> preskocime
> } FS_CPM_DPB;
>
>
> /*
> * - fname, ani fext neni ukonceno zadnym specialnim znakem
> * - nepouzite znaky musi byt vyplneny mezerou (0x20)
> * - 7. bit 0. bajtu extenze indikuje priznak R/O
> * - 7. bit 1. bajtu extenze indikuje priznak SYS
> */
> typedef struct {
> uint8_t user; // 0 - 15, 0xe5 = smazana polozka
> uint8_t fname[8];
> uint8_t fext[3];
> uint8_t dext; // cislo extenze (muze jich byt opravdu 256?)
> uint8_t unused[2];
> uint8_t sectors;
> uint16_t clusters[8];
> } FS_CPM_DITEM;
>
>
>
> ---
>


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