Az Enterprise eXtendable Operating System (röviden: EXOS) az Enterprise számítógépek operációs rendszere, mely az Enterprise 64 modell megjelenésével vált publikussá. A szoftvert az Intelligent Sofware Ltd. fejlesztette a gépeket kiadó ELAN, majd Enterprise Computers számára.
Elnevezés A fejlesztés korai szakaszában az Intelligent Software szakemberei az EROS (Elan Rom Operating System) nevet adták a készülő operációs rendszernek. Az Enterprise marketinges szakembere változtatta a nevet EXOS-ra (Enterprise eXtendable Operating System).
Feladatkör, részegységek Az EXOS feladata az aktuális konfiguráció felderítése, a használható memória leltárba vétele, majd pedig a felhasználói programok ill. különböző rendszerösszetevők által támasztott memóriaigények kiszolgálása, nyilvántartás vezetése az aktuálisan foglalt, illetve szabad memóriaterületekről. A hasonló kategóriájú (8-bites) kortárs személyi számítógépeken nem igazán lehet beszélni operációs rendszerről (OS).
Feladatai kapcsán illesztési lehetőséget biztosít a felhasználói program (pl. a gyári IS-BASIC interpreter, vagy más parancsértelmező, illetve rendszerszoftver) és a gép hardvere között. Az EXOS fő jellemzői a csatornaalapú I/O interfész, valamint a bonyolult memóriakezelési lehetőségek. A I/O, más néven be- és kiviteli rendszer perifériatípustól független kommunikációt tesz lehetővé gépbe beépített (alaplapba integrált) eszközökkel, továbbá a felhasználói bővítőeszközökkel, perifériakezelőkkel is. Az Enterprise ROM-jában az EXOS-kernel (felügyelőprogram) mellett az alábbi, főként perifériakezelő eszközök találhatók meg:
Videokezelő, a szöveg és grafika kezeléséhez. Billentyűzetkezelő program, a botkormány, az automatikus ismétlés, valamint a programozható funkcióbillentyűk kezeléséhez. Szövegfeldolgozási lehetőségekkel is rendelkező képernyőszerkesztő (WP). Négyforrásos sztereó hanggenerátor. Magnó fájlkezelő. Centronics-kompatibilis párhuzamos illesztőegység. RS-232 típusú soros illesztőegység. Intelligent Net háromhuzalos hálózati illesztőegység.
Az EXOS működése Az EXOS futása során mindig jelen van egy felhasználói felület (Enterprise esetén ez valamilyen karakteres parancssori értelmező), ami ellátja a gép általános vezérlését. E programnak módjában áll hívni az EXOS-t, hogy valamelyik lehetőségét - például a csatorna I/O rendszert vagy a memória lefoglalási funkciót - igénybe vegye. Gyári konfigurációnál az aktuális felhasználói program, illetve felület vagy a beépített szövegfeldolgozó program (WP), vagy pedig az IS-BASIC értelmezőprogram ROM modulja, de lehet bármilyen más program is, ami a ROM bővítő modulról (cartridge) vagy magnóról a RAM-ba került betöltésre a rendszerindítás során.
I/O rendszer Az EXOS I/O rendszere perifériakezelők készletéből áll, melyek olyan gépi kódú programok, amelyek tartalmazzák az általuk kiszolgált eszközök vezérléséhez szükséges összes rutint (alprogramot vagy eljárást), és szabványos illesztési lehetőséget (interfészt) nyújtanak az OS felé. A perifériakezelő ténylegesen nem vezérel fizikai berendezést, viszont tisztán szoftver eszközökkel olyan perifériákra jellemző szolgáltatásai vannak, mint például karakterek olvasása vagy írása. Amikor az EXOS futni kezd, először is megkeresi az összes beépített perifériakezelőt és belső listát készít róluk. A lista tartalmazza a számítógéphez csatlakoztatott bővítő ROM-modulokban (cartridge-en), illetve vezérlőkártyákon fellelhető perifériakezelőket is. A listán szereplő minden egyes eszközt egy periférianév azonosít. Például: VIDEO, NET (hálózat) vagy KEYBOARD.
Az I/O rendszer csatornaalapú, ami azt jelenti, hogy egy adott perifériával folytatott információforgalmazáshoz először egy csatornát (pipe) kell megnyitni. A csatorna megnyitásához meg kell adni az EXOS számára a kért periféria nevét és az egy csatornaszámot. A csatorna a perifériához egy kommunikációs utat létesít, amelyen át karaktereket küldhetünk mindkét irányba, akár egyenként, akár pedig általunk meghatározott méretű blokkokban, továbbá speciális parancsokat adhatunk az eszköznek.
Egy fájlalapú perifériánál (pl. kazettánál vagy lemeznél) a csatornát egyetlen adatátviteli műveletre nyitják meg, majd újra lezárják. Egyéb perifériáknál (pl. billentyűzetnél) a csatornát célszerűen csak egyszer nyitják meg, majd az összes jövőbeni hozzáférés céljára egyszer s mindenkorra nyitva hagyják. Az EXOS lehetővé teszi, hogy egyidejűleg több csatornát nyissunk meg egyetlen perifériához, bár ezt bizonyos eszközök nem engedik meg. Így például a videokezelő tűri a sok csatorna megnyitását, a billentyűzetkezelő viszont csak egyet enged meg. A csatornák mindaddig megnyitva maradnak, ameddig a felhasználó le nem zárja ezeket. Egy csatorna megnyitásakor az EXOS csak annyi memóriaterületet utal ki, amennyit a periféria igényel a pufferek (átmeneti tárolók) és a változók részére.
Memóriakezelés Egy operációs rendszer alap funkcionalitását jelentő memóriakezelés az Enterprise megjelenését megelőzően, 8-bites mikroszámítógépek esetén gyakorlatilag csak a BASIC interpreteren belül létezett. Az EXOS esetén - a rendszer rugalmas bővíthetősége érdekében - a maximálisan kezelhető memória méret 4 megabájtban lett meghatározva. Az Enterprise számítógépek motorját képező Zilog Z80 mikroprocesszor 64 kilobájtos (röviden: KB vagy K) címtartományát az EXOS felosztja 4 db 16K-s lapra, a 4 megabájtot pedig 256 db 16K-s szegmensre. Bármelyik memóriaszegmens belapozható bármelyik lapra, a belapozott szegmens azonosítására alkalmas információkkal együtt. Ezt a memórialapozást és a kapcsolódó címdekódolást a DAVE chip végzi.
Amikor az EXOS működni kezd, megkeres és tesztel minden rendelkezésre álló memóriaszegmenst (RAM és ROM egyaránt), és listát készít róluk. A 0. lap első 256 bájtja bizonyos rendszerbelépési pontokat és rendszerprogramokat (gyakorlatilag az API-t), valamint olyan területeket tartalmaz, amelyek a CP/M emulálására fenntartottak. A nullás lap szegmens többi részét a rendszer nem használja és így az korlátlanul a felhasználó rendelkezésére áll. A rendszerbelépési pontok miatt (amelyek között megszakítási kezdőcím is van) a nullás lap szegmensnek állandóan belapozott állapotban kell lennie.
Az Enterprise számítógépek grafikai megjelenítésért felelős "társprocesszora", a NICK chip csak a belső négy memóriaszegmenst (azaz FCh-tól FFh-ig az első 64 KB-ot) képes megcímezni, azt viszont önállóan teszi, a DAVE chip funkcióinak igénybevétele nélkül. Emiatt ezekre a szegmensekre video-RAM, vagy videomemória néven is hivatkoznak. E szegmensek hozzáférése lassúbb, mivel a Z80-as processzor a címzést a NICK chip-hez kell szinkronizálja (megosztott memóriahozzáférés).
A 0FFh számú szegmenst, amely egyike a video-RAM szegmenseknek, mindig az EXOS használja, ezért ezt rendszerszegmensnek nevezzük, mely a rendszerváltozók, a rendszerveremtár (stack), a beépített perifériakezelő-változók, a sorparaméter-tábla, a RAM- és ROM-szegmenslisták, valamint a bővítő ROM-okhoz a rendelkezésre álló perifériák és a RAM-foglalás céljaira van fenntartva. Ez alatt található az ún. csatorna-RAM terület, melyben meghatározott méretű memóriaterület van hozzárendelve minden megnyitott állapotú csatornához. Az egyes területek nagyságát a csatornához tartozó eszköz határozza meg a csatorna megnyitásakor és néhány bájttól több kilobájtnyi méretig terjedhetnek. A csatorna-RAM területek mindig a rendszerszegmensben kezdődnek, de tetszés szerinti számú más szegmenst is lefoglalhatnak. A csatorna lezárásakor azonban az adott csatorna részére kiutalt memóriaterület szabaddá válik és így ez a tárkiosztás nem állandó jellegű.
Rendszerindítás A számítástechnikában általánosan alkalmazotthoz hasonlóan kétféle (újra)indítási módot ismer az Enterprise: hidegindítás (cold reset) és melegindítás (warm reset). A reset-áramkör a DAVE chip részét képezi.
Hidegindítási folyamat akkor játszódik le, amikor a gépet először feszültség alá helyezzük, vagy amikor a RESET gombot megnyomjuk (feltételezve, hogy a gomb megnyomása előtt melegindítási cím létrehozása nem történt). A hidegindítás során az EXOS először a 32k kapacitású belső ROM ellenőrző összeg (checksum) vizsgálatát végzi el. Sikeres vizsgálat után megkeresi a rendszerben fellelhető összes RAM-ot és végigvizsgálja (teszteli) a teljes 4 megabájtos címtartományt, szegmensenként és sikeres teszt esetén bejegyzést tesz a rendelkezésre álló RAM-szegmensek listájába. A teszt minden esetleges korábbi adatot töröl. A RAM-teszt után, a rendszer bővítő ROM-okat (cartridge, illetve beépített) keresve ismét végigvizsgálja a 4 MB memóriatartományt és erről ROM-listát készít. Ezután a rendszer különböző belső változókat hoz létre, beleértve a nullás lap szegmens elején található rendszerindítási pontokat is. Az I/O rendszer többi részének inicializálása ezt követően a beépített és bővítőeszközök inicializálásával, valamint az összes ROM-bővítés inicializálásával valósul meg. A következő mozzanat a kijelző program indítása, ami kiírja a villogó "ENTERPRISE" és az "Intelligent Software Ltd. Copyright" üzenetet a képernyőre. Ezek az üzenetek a képernyőn maradnak mindaddig, amíg a felhasználó le nem üt egy billentyűt. Billentyűleütésre a rendszer sorban hívja az egyes ROM-bővítéseket és a felhasználói felület (UI) végrehajt egy ún. EXOS indítás hívást, amivel jogot formál a teljes vezérlés átvételére.
Melegindítás szintén a RESET billentyű lenyomására lehetséges, feltéve, hogy a felhasználó előzetesen már létrehozott egy melegindítási címet, és ha a rendszerváltozók területe ép. A melegindítási cím a rendszerszegmens egy meghatározott helyét jelenti a nullás memórialapon (RAM) és a melegindítás befejezésekor ide fog átadódni a vezérlés. A melegindítási szekvencia nem végez RAM-vizsgálatot vagy ROM-keresést. A felhasználónak kiutalt összes memória ilyenkor ép marad és megmarad minden olyan rendszer-RAM-bővítés vagy felhasználói perifériakezelő is, ami előzetesen a rendszerhez volt kapcsolva. Ezzel szemben lezárásra kerül az összes csatorna, az összes csatlakoztatott eszköz újra inicializálódik, továbbá felszabadul minden olyan RAM, ami csatorna-RAM területként került kiosztásra. A RESET gomb kétszeri gyors megnyomásával mindig hidegindítás jön létre.
Rendszerhívások EXOS-hívás az RST 30h utasítás végrehajtásával valósítható meg. A vezérlésnek az EXOS fő ROM-jára való átadását, valamint annak a felhasználóhoz való visszatérését kezelő programot a 30h-tól az 5Bh-ig terjedő terület tartalmazza. Ezt a területet - kivéve a 3Dh és 3Eh címen található szoftvermegszakítási címet - a felhasználói felületnek módosítania nem szabad. A különböző EXOS-hívásokat egy egybájtos funkciókód határozza meg, ami közvetlenül az RST 30h utasítást követi. Az EXOS-hívások számára a paramétereket az A-, BC- és DE-regiszterekben adjuk át és ugyanezekben kapjuk vissza az eredményeket is. Az A-regiszter mindig állapotértéket hoz vissza, ami nulla, ha a hívás sikeres volt, és nem nulla, ha hiba vagy váratlan helyzet állt elő. Az EXOS, valahányszor hívásra kerül, mindig átvált egy, a rendszerszegmensben lévő belső rendszerveremtárra, ezért csak nagyon kevés helyet foglal le a felhasználó veremtárában. Pontosan 8 bájtnak mindig rendelkezésre kell állnia a veremtár tetején. Még ha nincs semmilyen EXOS-hívás, erre a területre akkor is szükség van a megszakítások kiszolgálásánál.
Kód Funkció 0 A rendszer reset 1 Csatorna megnyitása 2 Csatorna létrehozása 3 Csatorna lezárása 4 Csatorna megszüntetése 5 Karakter olvasása 6 Blokk olvasása 7 Karakter írása 8 Blokk írása 9 Csatorna olvasási állapota Kód Funkció 10 Csatornaállapot megadása és olvasása 11 Speciális funkció 16 EXOS-változó olvasása / írása / átbillentése 17 Csatorna megszerzése 18 Csatorna átirányítása 19 Alapértelmezésű egységnév beállítása 20 Rendszerállapot lekérdezése 21 Periféria felvétele 22 EXOS-határ olvasása 23 Felhasználói határ beállítása 24 Szegmens kijelölése