Konference: Počítač SHARP MZ-800 a emulátory
Od: | Radek Suk |
Datum: | 2.2.2012 01: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)]