Konference: Počítač SHARP MZ-800 a emulátory
Od: | Michal Hučík |
Datum: | 13.5.2013 18:53 |
Předmět: | Re: MRS diskovy format |
Ahoj, RTK2 ? Nevedel jsem, ze Vlastik neco oficialne vydal, tak jsem ani
nehledal. Videl jsem vzdy jen nejake screenshoty ... Je to nekde na
scavu ke stazeni?
Co se tyka tech her, tak tam asi nema moc vyznam zkoumat jejich
souborovy system ... format bude zrejme stejny, jako u MRSu ci cp/m, ale
vnitrni organizaci ulozenych dat maji asi vic maskovanou.
U MRSu jsem prozatim z jeho filesystemu vyzkoumal toto:
1.) Data jsou ulozena komplementovane coz je u Sharpa nativni zpusob
ukladani na disk, takze pokud je chces cist jinde, tak musis obsah
sektoru invertovat.
Strany media jsou komplementovany (opet nativni Sharp pristup) a tedy se
ABSOLUTNI STOPY cisluji v obracenem poradi, nez fyzicke
0. stopa, 1. strana je 0. absolutni stopa
0. stopa, 0. strana je 1. absolutni stopa
1. stopa, 1. strana je 2. absolutni stopa
...
2.) Format 0. abolutni stopy je v Sharp formatu 16 x 256 bajtu.
3.) Nasledujici stopy jsou ve formatu 9 x 512 bajtu (u zminenych
Lemmings se lisi akorat jedna stopa, ktera obsahuje navic jeste jeden
sektor, ktery je tusim jeste navic ocislovan jako 12. - nepamatuji si uz
presne stopu, ani cislo toho sektoru)
4.) IPLPRO header MRSu odkazuje na 2 sektorovy mikro zavadec (512 bajtu)
ulozeny v 2. a 3. sektoru 0. absolutni stopy.
5.) MRS driver jsem podrobne nezkoumal, pro orientaci na disku pouziva
ABSOLUTNI SEKTOR, ktery spocita podle vyse zmineneho pradi stop. Velmi
specificky se musel zrejme vyporadat se Sharp boot stopou, kterou
zahrnuje do vypoctu absolutniho sektoru tak, jako kdyby mela 9 sektoru
po 512 B, coz samozrejme zadnym zpusobem nesedi. Predpokladam, ze se s
tim Vlastik asi nijak netrapil, protoze ze Sharp stopou pracuje jen
mikro zavadec, ktery natahne samotny system - ten zacina na 0. abolutni
stope 4. sektoru
6.) na 37. absolutnim sektoru je ulozena jakasi FAT tabulka, ktera
zabira 3 sektory
Kazdy bajt v teto FAT tabulce reprezentuje jeden absolutni sektor na disku.
Pokud ma tento bajt hodnotu 0xff (napr. po naformatovani, bez MRS
inicializace), tak je sektor povazovan za nedostupny. 0xff jsou po
inicializaci oznaceny sektory od zacatku disku, na kterych je ulozen
IPLPRO header, mikro zavadec a samotny MRS.
Pokud jsou na disku vadne sektory, tak jsou ve FAT oznaceny hodnotou
0xfe. Sektory ve kterych je ulozena FAT maji hodnotu 0xfa. Sektory
adresare maji hodnotu 0xfd. (Tady jsem objevil chybku - ve FAT jsou po
MRS inicializaci diskety oznaceny jen 2 sektory jako 0xfa a 7 sektoru
jako 0xfd. FS driver v MRSu zrejme udaj z tabulky ignoruje a pracuje
natvrdo s adresami techto sektoru :)
Bajty reprezentujici volne sektory disku maji hodnotu 0x00. Pouzite
sektory maji hodnotu, ktera odpovida poradovemu cislu polozky adresare.
Na 720 KB diskete neni delka teto FAT tabulky nijak vyznacena a po
inicializaci je predevsim cely 2. a 3. sektor FAT vyplneny hodnotou
0x00. Predpokladam, ze Vlastikuv driver pocita vzdy natvrdo s delkou (
80 stop ) * ( 2 strany ) * ( 9 sektoru ) = 1440 sektoru = 1140 bajtu FAT.
U disket o velikosti 360 KB se zrejme vyrovnal s chybejicima stopama
tak, ze horni polovinu FAT vyplnil hodnotou 0xff - to je vsak jen domenka.
7.) Ve 40. absolutnim sektoru zacina adresar, ktery ma delku 6 sektoru.
Kazda polozka adresare ma 32 bajtu.
Prvnich 8 znaku je jmeno souboru, ktere JE case sensitive a musi zacinat
znakem s vyssi hodnotou, nez 0x20 (mezera). Uvnitr jmena se vsak mezera
mezi jednotlivymi znaky muze vyskytovat. Pokud je jmeno kratsi, nez 8
znaku, tak je zprava vyplneno az do konce mezerami.
Pravdepodobne pokud nazev polozky zacina mezerou, tak je tato polozka
adresare povazovana za volnou (smazanou).
Na konci posledniho adresaroveho sektoru je nekolik polozek adresare
vyplneno hodnotou 0x1a. Predpokladam, ze takto oznacene polozky adresare
jsou fyzicky nedostupne. (Tedy nedostupne je asi vse co ma v prvnim
bajtu jmena znak s hodnotou mensi, nez 0x20.)
Za zminenymi 8 znaky jmena nasleduji 3 znaky extenze. Jsou tam vzdy
pouzita velka pismena. Extenze pravdepodobne nema zadny jiny, nez
informativni vyznam, kterym se sdeluje jak byly soubory ulozeny (tedy
jakym prikazem v MRSu).
MRS - zdrojovy kod
DAT - data ulozena odkudkoliv z RAM
RAM - ulozena 64 kB stranka RAM disku
SCR - soubory z MZpaintu do ktereho Vlastik implementoval svuj souborovy
system
MRS identifikuje duplicitu jmena na zaklade shody prvnich 8 znaku jmena,
bez ohledu na extenzi.
Jmena a extenze jsou ulozeny v kodovani SKUTECNE ASCII - nikoliv v te
Japonske zpatlanine co mame v ROM !
Nasleduje 1 bajt s poradovym cislem polozky. Prvni polozka tam ma 0x01,
druha 0x02 ... Pokud do polozky adresare ulozim jmeno souboru, tak timto
poradovym cislem jsou potom v ve FAT oznaceny sektory, ve kterych se
prislusny soubor rozleha.
Za poradovym cislem nasleduji 2 bajty s FILE START adresou - tedy adresa
prvniho bajtu v pameti, kam ma byt soubor pri nacteni ulozen.
Nasleduji 2 bajty ve kterych je pocet sektoru, ktere soubor teto polozky
zabira. (Soubory maji tedy vzdy delku v nasobcich 512.)
Pak nasleduje 6 bajtu, jejihz vyznam mi unika. Nektere polozky tam mely
vyplneny nejake hodnoty, jine tam maji 0x00. Zatim jsem jeste nezkousel
hazet bomby do rybnika, abych zjistil co se v techto 6 bajtech skryva.
Dalsi 2 bajty nam sdeluji FILE EXEC adresu na kterou se jumpne po
nacteni souboru prikazem "run" z MRSu.
Pak nasleduje dalsi obskurni blok 8 bajtu, o jejihz vyznamu nemam ani
tucha. Kazda polozka ma na tomto miste naprosto stejnou hodnotu: 4x 0x00
a pak 0xcd, 0x49, 0x02 a 0x21 ... Zrejme nejaky Vlastikuv vzkaz pro
dalsi generace Sharpistu :)
================
To je vse, co prozatim vim.
Jak uz jsem napsal, tak cca 4 posledni polozky adresare jsou v cele sve
delce vyplneny hodnotou 0x1a.
Samotne rozlozeni obsahu FAT nabizi moznost priradit sektory az pro 250
jedinecnych FILE_ID, ci jak to nazvat. Od Vlastika bych vsak ocekaval,
ze pri praci s tou tabulkou bude ve FS driveru pro test dosazitelnosti
sektoru testovat zda je obsah bajtu nenulovy a zaroven zda nema nastaven
7. bit, coz by pak odpovidalo jen 127 jedinecnym FILE_ID.
Do jednoho adresaroveho sektoru se vejde 16 polozek adresare. 16 * (6
sektoru) = 96 = 0x60 ... Posledni FILE_ID, ktere jsem videl v poslednim
sektoru pred tim 0x1a blokem bylo asi 0x5c - tedy o 4 polozky mene, nez
umoznuje plna delka adresare...
Jak to je uz dnes bohuzel netusi ani samotny Vlastik Vesely, ktereho
jsem se na souborovy system MRSu pred par lety ptal.
Kdysi jsem mel od Vlastika MRS, ktery umel inicializovat disketu se
systemem a nebo bez systemu a tedy mel o 4 sektory vice mista pro data.
Je mozne, ze od toho dvojiho formatu pozdeji upustil.
Nevim, zda jsem popsal srozumitelne to jak ten FS funguje. Prozatim jsem
si napsal jen funkce, kterymi ctu adresar. Pokud bych chtel precist
nejaky soubor z MRS diskety, tak nejprve v adresari vyhledam polozku s
jeho jmenem. Z polozky adresare si zjistim adresu kam se ma soubor
standardne ulozit a jaka je jeho pripadna spousteci adresa. Dale si
prevezmu poradove cislo (FILE_ID) teto polozky a pocet sektoru (BSIZE),
ktere soubor zabira.
Nasledne prochazim postupne sektory s FAT a v nich od zacatku az do
konce a hledam sektory - bajty obsahujici stejne FILE_ID jake ma muj
soubor. S kazdym nalezenym a prectenym sektorem snizim hodnotu BSIZE,
dokud nedojdu k nule. Tim jsem precetl soubor.
Michal
Dne 13.5.2013 12:26, Mikes Medek (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
> Ahoj,
>
> ja asi moc nepomuzu. Jedine co mam je MRS.dsk, RTK2.dsk a LEMMI.dsk, ktere
jsou asi ve stejnem formatu. Ale to ma vetsina. Jinak jsem neprisel na nic, co
bylo takto delane.
> Co Te vede k nazoru, ze existuji ruzne verze pro systemovy a datovy disk?
> Jestli si s tim chces hrat, tak to udelej podle sebe a treba se neco casem
objevi.
> Zatim drzim palce a budu rad, kdyz budes informovat.
>
> ---
> Pobyty na horách se slevou
> http://raketa.cz/slevy/pobyty/hory/
>
Ostatní příspěvky vlákna:
[2013/1 (17)] [2013/2 (52)] [2013/3 (60)] [2013/4 (68)] [2013/5 (60)] [2013/6 (42)] [2013/7 (9)] [2013/8 (48)] [2013/9 (1)] [2013/10 (40)] [2013/11 (45)]
[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)]