15. 9. 2009

Z archivu MB Maniax: Matrix OS

V prosinci roku 2004 vyšel na SpeccyWebu článek o systému Matrix, který plánovali pánové Tritol a PVL. I když (pokud je mi známo) světlo světa nespatřil, myšlenky v následujícím textu jsou pořád platné a jak se tak množí navzájem totálně odlišné systémy pro divIDE, přijdou mi ještě platnější.

Úvod - proč Matrix
Jak známo, klasickým softwareovým základem ZX Spectra je jeho ROMka. Ač stará nějakých 17 let, stále dostačující. Splňuje základní věc, kterou by splňovat měla, a to spouštění programů. Dále je v ní interpret BASICa, takže poskytuje daleko víc, než je vlastně bezpodmíněčně nutné. Co se nahrávání programů týče,podporuje pouze kazetový magnetofon - záznamové medium z dob jejího vzniku.Časem samozřejmě vznikala jiná záznamová zařízení, z nichž nejpraktičtější je jistě disketová mechanika. Způsobů připojení je několik, ale každé nějakým způsobem nahradilo nahrávání programů. Nepotřebujete vyměňovat ROM, většinou jen připojíte a jedete (no prostě Plug and Play, ne? to je takový ten ideál, který se marně snaží alespoň z části napodobit výrobci PeCí - bezúspešně).
Vezmeme-li ale v úvahu jednotlivé diskové systémy, každý je světem jen sám pro sebe. Dnes je situace taková, že každý se drží svého systému, protože si na něj zvykl, nebo oceňuje některé jeho přednosti. Tuto situaci třeba měnit není, a si každý zůstane u svého. Jediný problém, který je třeba vždy vyřešit, je přenos dat.


Samozřejmě je možné pro každý systém napsat konverzní program. Ale.. Jsou prostě důvody proč to prakticky možné není. Na mě známých systémech existuje většinou konverzní program do jediného jiného systému. Jelikož tím systémem byl většinou MSDOS, byla vlastně šance přenosu mezi systémy navzájem, ale náročná. Nejprve export, poté import.
V současné době - nástupu harddisku - je potřeba vymyslet nový systém souborů (FS - File System), který bude koncipován na větší diskové kapacity, než bylo třeba u disketových mechanik. S novým FS tedy opět vznikne nový systém. Jelikož ale HDD sám o sobě není tak uplně soběstačný a stejně většina lidí nějakou tu disketovku má, budou chtít aby jim systém podporoval oboje.

Příkladem takového systému bude BS-DOS 400, na kterém se už (prý, možná, snad trochu, jestli vůbec .. no spíš ne .. ???) pracuje. Bude to samozřejmě pokrok, nebo to bude jeden systém a bude podporovat dva FS. Tohoto pokroku už dosáhly dokonce i PeCoidní všemi oblíbené Wokna (také podporují až dva, nebo snad dokonce až tři (!) FS.
Bude-li chtít někdo HDD s jiným systémem, nebo spíš bez něj, může klidně použít nový BS-DOS bez MB-02 a pracovat jen s hadrem. Nebo si napíše svůj OS pro HDD a svůj systém. A budou všichni zase tam, kde doposud. (jest-li ale vůbec aspoň tam). Snad s tím rozdílem, že bude-li na HDD existovat jen jeden FS, půjde připojit bez problémů k jinému systému (ale HDD neni primárně určen k přenášení a dokonce mu to škodí. Kdo nevěří může zkusit, ale znám jeden co cestu na DOXyCon'98 nevydržel).
Znáte někdo Unix? Jedna taková jedo odrůda, stará pár let (Linux) podporuje současně klidně 32 různých systémů souborů (někde psali).

Co z toho čistou spectráckou úvahou vyplývá?
Že to jde!
(Ono tedy mezi náma, konec klasické spectrácké úvahy má pokaždé stejné řešení)


Co je to Matrix
Možná bude lepší začít tím, co Matrix není. Takže za prvé určitě není samostatnou aplikací. Zrovna tak ale není jen BIOSem (basic input/output system). Je tedy něco mezi. Nám se nejvíce líbí jádro (kernel). Je to vlastně objekt, zapouzdřená skupina rutinek, které mají jeden vstupní
bod pro poskytované služby, které se budou povětšinou týkat práce se soubory, přičemž odstíní aplikaci od takových maličkostí, jako se kterým hw a fs se právě pracuje. O stejné možnosti se ale snažil už OPAT. Problém s OPATem ale byl, že byl příliš vázán na D40. Matrix by měl být více univerzálnější a hlavně by měl sám o sobě podporovat současně více druhů hw a fs.
Při realizaci a návrhu služeb Matrixu bereme nejvíce ohled na HDD, pak diskety a až pak hodně daleko kazetu. Toto pojetí se liší od přístupu BUSYho, NORa a jiných zastánců kazeáku, kteří zastávají názor, že kazeta je z historických důvodů na speccy základ a vše ostatní ji více méně přizpůsobují (viz např. BSDOS). Je nepopiratelné, že je výhodné, aby staré programy, nahrávající z kazety přes ROM, fungovaly bez jakéhokoli zásahu. To je hezká vlastnost BSDOSu a špatná D40 (proto jsem také pro D40 napsal TAPE Emulator).
Přesto se Matrix bude orientovat diskově, neboť považuji za snažší ohýbat diskové služby na kazetové, než obráceně! A krom toho, kazetové služby bude v podstatě potřebovat jediná aplikace - TAPE EMULATOR, pro ostatní bude jistě výhodnější zvolit diskové, takže to bude i ekonomičtější.
Zároveň hodlám programovat jen jednou, ale použitelné to chci mít pro více věcí. Základní představa je taková, že by šel Matrix použít jako součást jiného programu (jako měl sloužit OPAT, ale vzhledem k tomu, že Matrix bude kvůli svým možnostem daleko větší než OPAT, tak to vidím praktické jen u takových vyjímek jako File Comander apd.). Druhou možností je, že by Matrix ležel někde dole v ROM a aplikace by si ho volaly odtamtud přes RST. Jelikož většina programů potřebuje i klasickou ROM (Basic), tak ji předpokládáme jako základ, v ní bude definovaný vstupní bod, který zajistí přestránkování do stínové ROM s Matrixem, kde bude fungovat ono RST a zároveň bude fungovat i bod pro přestránkování do Basic ROM.
A jelikož potřebujete spustit o onu aplikaci samotnou, bude asi chtít, aby i Basic ROM byla upravena pro práci s Matrixem. Takže buď to bude obdoba D40 a podobných, které přidávají pár svých příkazů, nebo lépe to bude zmíněný TAPE Emulator, dokonce to může být něco tak rozsáhlého jako BSROM apd. To už je věcí názoru.


Mně osobně se zdá, že už je čas na něco uplně nového. Osobně stejně BASIC používám posledních X let pouze k nahrání jiného programu a musím říct, že k tomu fakt není určen (chybí historie příkazů a tak). Takže bych to viděl k napsání něčeho speciálního lépe vybaveného ke spouštění programů a práci se soubory - to už ale není záležitost Matrixu, přesto se tu o tom zmíním.
MASH (MAtrix SHel) by měl nabídnout příkazový interface k službám Matrixu (i kdyby na nic jiného, nějak se Matrix otestovat musí), bude se nacházet ve stejné ROM s Matrixem a k dispozici zůstane ale i Basic ROM, nebo tu bodou pravděpodobně potřebovat spuštěné programy.
Samotný MASH i MATRIX budou na Basic ROM nezávislý. Pokud bude takto nezávislý i váš program, nemusíte se stránkováním ROM zabývat. Jelikož MASH bude realizovat mnoho zajímavých funkcí, bude některé z nich poskytovat jako služby na dalších RST. Již dnes je jasné, že budou existovat programy, které budou vyžadovat jak Matrix tak MASH.
Říkám to zde proto, že takovýto program bude muset být s největší pravděpodobností spuštěn MASHem a nebude tedy stačit pouhá přítomnost MASHe v ROM. Takovýchto programů by ale podle mě mělo být málo, aby měl uživatel možnost volby a mohl pracovat třeba jen v lehce upravené Basic ROM. Tritol ale nedávno oznámil, že jeho fdisk bude MASH&MATRIX only, takže si radši začněte zvykat.


Vnitřní uspořádání Matrixu

Aby mohl MATRIX obsloužit více druhů hw i různé fs, je nezbytné jeho rozdělení do vrstev.
Software
Aplikační programy
Rozhraní služeb (SL)
Ovladače systému souborů (FS)
Ovladače fyzických zařízení (LL)
Hardware
Technické prostředky

Vrstva služeb (SL) bude vyřizovat takové ty formalitky. Vrstvy FS a LL mají každá jeden vstupní bod, ve které se však provede rozskok do rutiny podporující právě aktivní hw či fs.

Každý druh LL nebo FS bude mít své číslo, kterým se identifikuje mezi svými kolegy v dané vrstvě (tzv. MAJOR číslo). Důležité je dále zmínit ještě MINOR číslo, které identifikuje zařízení nebo fs v rámci jednoho MAJOR čísla.
ZařízeníMAJORMINOR
D40 Mechanika A10
D40 Mechanika B11
MB02 Mechanika A20
MB02 Mechanika B21
MB02 Mechanika C22
MB02 Mechanika D23
Obdobně to bude i u FS; v případě že mám hadr s pěti partition (3 ext2, 2 FAT16)
PartitionMAJORMINOR
hda1 (ext2)10
hda2 (FAT16)20
hda3 (FAT16)21
hda4 (ext2)11
hda5 (ext2)12
V praxi si to představuji asi takto (ukáži na příkladu):
  • Aplikace zavolá přes jednotné rozhraní službu (např. z otevřeného souboru XY přečti ABC bajtu)
  • Vrstva služeb, pouze zkontroluje správnost parametrů o nic moc víc asi ne (např. zda opravdu soubor XY je otevřen pro čtení)
  • Je-li vše v pořádku, nastaví MAJOR/MINOR čísla pro FS i LL.
  • Vrstva FS se stará o logickou organizaci file systému a potřebuje-li data, volá LL vrstvu.
  • LowLevel ovladač dle MINOR čísla zjistí o jaké konkrétní zařízení jde (master/slave, drive A/drive B, ..) a načte bajtíky z media.
Celý příklad byl trochu zjednodušen, praxe bude o malinko komplikovanější.


Výhody Matrixu a jeho vrstvené architektury
Napsat čtení sectoru a podobné lowlevel rutiny je strašně jednoduché. Takže není problém toto udělat za odpoledne pro kopu systémů.
Podpora FS je samozřejmě náročnější, ale je-li jednou udělaná, funguje na všech typech podporovaných zařízení.

Výhoda je vysoká přenositelnost, např. napíšu ovladaní D40 a IDE-IF, dále pak podporu pro MDOS, SFS a a nejsem měkej tak ještě MS-DOS. V tu chvíli budu schopen číst z harddisku partition typu MS-DOS i SFS, budu moc mít MDOS, MSDOS a SFS -ovské diskety (kvuli D40 jen DDčka). Pak to ve zdrojáku předám někomu s MB02 a ten v mžiku napíše rutinu pro obsluhu MB02. V tu chvíli je schopen do svého MB02 vrazit a číst disketu pro SFS, MSDOS a MDOS
(ale ne pro BS-DOS). A zrovna tak s HDD. Jestliže bude produktivní napiše práci s BSDOSem a bude číst i ten. (teď si vlastně uvědomuji že BS-DOS přejde na SFS, takže BS-DOSem myslím starší verze - pro příklad).

Pak mi to vše vrátí a já budu schopen číst z D40 i BS-DOSovský formát. Přineseli někdo ke mně MB02 a (to sice nejde, ale jako) připojíme ho současně s mou D40, bude mi fungovat vše naprosto na všem, jediný rozdíl bude že si budu moc dovolit HD disketu.

A k tomu stačí jediný jednoduchý File Manager, který používá řádně služby a budu schopen vše alespoň kopírovat.
Samozřejmostí a ztělesněnou jednoduchostí je upravení ZX ROM, aby místo z kazeáku nahrávala přes služby a mám TAPE Emulátor.

Nevýhodou je, že si nedokážu představit, jak upravit sekvenční přístup k souboru pro milovanou TAPE. Ta by dejme tomu podporovala jen čtení celých souborů. No spíše to dopadne tak, že Matrix s kazetou pracovat nebude umět ;-)

SpeccyFication

Matrix
Jeden vstupní bod.
Seznam služeb (coming soon)
hlavní vývoj: pvl, tnt
Budou existovat asi jen jedny zdrojáky, neboť nejčastější bude jeho umístění v ROM

Matrix ROM SpeccyFication
Matrix používá adresy 0-15360(15kB) a zásobník
Call pro přestránkování do ROM s Matrixem: #002B (43 Dec)
Call pro přestránkování do ROM s Basicem: #0013 (19 Dec)
Vstupní bod do Matrixu (RST 48)

MASH SpeccyFication
Shel který bude sloužit primárně k práci se soubory a spouštění programů. Řádkové rozhraní ke službám Matrixu.
MASH používá adresy 0-15360(15kB) a zásobník
Vstupní body pro služby MASHe (RST ?? ..)
Seznam služeb (coming soon)
hlavní vývoj: pvl

MAFIE - MAtrix FIle Exploder
File manager, tak jak je znáte ... zatím pouze v plánu, teoreticky by to mohlo být schopné mít zkompilován matrix v sobě a běhat na libovolném HW (i bez možnosti zápisu dolu do ROM).
hlavní vývoj: tnt(?)

Žádné komentáře: