Na jo sokat osszeolvasgattam az exos konyv elso fejezetebol, nem biztos hogy mindent ertek, de lett egy ralatasom a dologra, hatha le tudom irni roveiden, szakszerubben, hogy mit akarok.
Tehat azt szeretnem elerni hogy lehessen olyan uj programokat irni, ill. meglevo programokat atirni ( pld. gyari jatekok, demok, rajzprogramok ), amiket aztan a kulonbozo jelenleg is hasznalt programokbol le lehetne futtatni oly modon, hogy az adott jatekbol ki lehessen lepni, es a program amibol lefuttattuk, ott folytassa a futasat, mintha le sem futtattuk volna az adott jatekot.
Tehat mint megtudtam exos futasa kozben mindig van egy "aktualis alkalmazoi program". A kovetkezoekben ezt AAP -nek hivom majd. Amikor basic- ben vagyunk, akkor a basic az AAP, amikor a wp- ben vagyunk akkor a wp az AAP, amikor az epdos- ban akkor az epdos az AAP.
Namost en ugy szeretnek lefuttatni egy demo vagy jatekprogramot az elobb emlitett programokbol ( tehat mikor valamelyik kozuluk az AAP ), hogy miutan lefuttattam az adott jatekot vagy demot, abbol vissza tudjak lepni abba az AAP- be, amibol lefuttattam.
Ehhez tulajdonkepp az kell, hogy ne valtozzon meg az AAP, maradjon az a program, amibol lefuttattam a jatekot/demot.
Sot meg egy dolog kene hogy teljesuljon, megpedig az, hogy egy ilyen kilepni kepesre megirt/atirt jatek a jelenlegi, hagyomanyos modokon is futtathato legyen, ne csak specialis rendzserbovitovel rendelkezo gepen, vagy ilyesmi. tehat ha nekem van egy kilepni kepes jatekom, azt ugyanugy tolthessem/futtathassom a basic start/load parancsokkal vagy az exdos :load -al, vagy a wp f1- el, vagy barmivel amivel csak programot szoktunk futtatni. A felhasznalo negativat ne tapasztaljon, csak vagy ki tud lepni egy programbol, vagy nem, de ne kelljen fejben tartania, hogy ez egy kilepni kepes program, vagy hogy ezt most maskepp kell inditani, vagy ilyesmi.
Namost ha jol ertettem meg az exos tolteset akkor 2 helyen lehet azt specializalni.
Az egyik hogy az enterprise file formatum modul fejleceben a modul fejlec tipust 31- nel nagyobb ertekre allitom. Ekkor az exos azt nem fogja felismerni tolteskor, es vegig fogja probalni a rendszerbovitoket hogy ezt a fejlec tipust valamelyik be tudja- e tolteni. Ide akkor lehetne irni egy rendszerbovitot, ami felismerne, hogy ez egy ilyen visszateresre alkalmas program, es korrekt modon lefuttathatna, majd mikor a program hozza visszatert, akkor o is visszaterhetne abba az AAP- be ahonnan a toltes ki volt adva.
Ennek a modszernek az lenne a lenyegi hianyossaga ( azon kivul hogy egy gyari program atirasahoz modul fejlecet is valtoztatni kene ), hogy a mi mostmar sajat modul fejlec tipusu programunkat csak akkor tudnank betolteni, ha meglenne hozza egy rendszeren az a rendszerbovito, ami kezeli a fejlec tipusunkat. tehat egy rendzserbovito nelkuli gepen az adott program nem indulna el. ezt nem szeretnem en, ahogy irtam, egy felhasznalonak legyen mindegy hogy ez most meg "hagyomanyos" program, vagy kilepni kepes program, o csak futtat es ha adottak a feltetelek akkor a program kilephet, ha nem adottak, akkor nem lephet ki, de lefutni mindig fusson le. Nem beszelve arrol, hogy ezeket a fejlec azonosito szamokat hogyan lehet szinkronizali egymashoz, hogy 2 kulonbozo rendszerbovito ne ugyanarra a fejlec azonosito szamra figyeljen, es toltogessek be egymas moduljait ?
A masik lehetoseg az lenne, hogy a modul fejlecet 2- esre allitanank ( ahogy zozo korabban javasolta ) mert ezzel elbanik az exos, nem kell hozza, hogy egy kulon rendszerbovito legen a gepen, a betoltodesehez. Na igen am, de ez csak akkor igaz ( ha jol ertem ), ha az adott AAP kezelni tudna a 2-es fejlecu modult, ugyanis az exos csak formailag banik el ezzel a modultipussal, a betoltesi hely meghatarozasa a hivo felre van bizva ( jelen esetben ugye ez az AAP lenne ). Szoval vegeredmenyben itt meg rosszabb a helyzet, mert itt nemcsak egy rendszerbovito kene jelen legyen az adott gepen, mint az elozo peldaban, hanem az osszes programunkat ( wp, basic, epdos, stb. ) fel kene kesziteni az ilyen alkalmazasok betoltesere, ami sok program csrejet jelenteni, romokban is, szoval teljesen ertelmetlennek tunik.
Nekem ugy tunik, hogy az egyetlen jo lehetoseg az lenne a dologra, ha egy ilyen "kilepni is kepes" program az maradna 5- os fejlecu program, ami akkor nyilvan ugyanugy toltodne es futna hagyomanyos modon futtatva mint eddig, de lenne keszitve egy rendszerbovito, aminek van egy :run vagy :call kommand sztringje, ami egy tetszoleges 5- os fejlecu programot kepes lenne betolteni es lefuttatni oly modon, hogy nem valtja at az AAP- t az aktualis programra.
Ugy gondolnam ezt kivitelezni, hogy mikor meghivodna a :run program.com vagy :call program.com rendszerbovito kommand, akkor a rendszerbovito nem hivna exos "load_module" rendszerhivast, hanem a megnyitott csatornabol o olvasna be a headert, ellenorizne hogy 5- os programrol van szo, es betoltene exos- tol igenyelt szegmensekre, es gepi kodu call utasitassal hivna meg a 100H- as cimet.
Innentol mar a kilepesre felkeszitett megirt/atirt program felelossege lenne a hardvert ( irq, cpu, mamorialapok, minden ) korrekten "lekapcsolni" az exosrol, majd futni, es kilepeskor korrekten mindent visszaadni az exosnak, majd ret- tel visszaterni.
Ennek a modszernek megegy elonye lenne: mivel van egy sajat rendszerbovitonk ehhez, ezert annak lehetnek exos valtozoi, es egy ilyen exos valtozoban jelezni tudjuk a futo programnak, hogy visszatereses modon lett futtatva, nem pedig a hagyomanyos betoltokkel. Igy a program tudja majd azt is, hogy o most kilephet- e, vagy pedig mivel exos futtatta le, nem a :run rendszerbovito, ezert mar "nincs hova" visszaterjen hiszen o lett az AAP.
Ennek a modszernek tahat a vegeredmenye sztm. a kovetkezo lenne:
- egy atiratlan, hagyomanyos 5- os fejlecu program is futtathato lenne a :run rendszerbovito kommandunkkal ( de termeszetesen nem tudna kilepni, hiszen nem ugy lett megirva, de lefutna )
- egy kilepesesre atirt/megirt program is futtathato lenne a normal eddigi osszes betoltesi modunkon ( de termesztesen nem tudna kilepni, hisz hagyomanyos futtataskor "nem lenne hova", hisz megszunt az eredeti AAP ami futtatta )
- ha viszont a :run rendszerbovito kommandunkkal futtatnank egy olyan programot ami fel is lett keszitve ra, akkor a programbol siman visszaterhetnenk abba az AAP- be, amibol kiadtuk a :run- t
Vegeredmenynek pedig mindennemu mas program megvaltoztatasa nelkul pld. a kovetkezo kulonbseg lenne:
epdos- ban benavigalnek egy program konyvtaraba, ha ugye ott az adott konyvtarban beirom hogy:
:load batman.com
akkor a batman futtatasa utan, reszetelnem kell a gepet, ujra elinditanom az epdos- t, es ujra vissza kell navigalnom a batmanra az epdossal, vagy epp a batman utani jatekra
viszont ha el lenne keszitve ez a rendszerbovito, es a batman is fel lenne keszitve ra, akkor mikor a batmant futtattam a
:run batman.com
kommanddal, es kileptem belole, mondjuk esc hatasara, akkor ott talalnam magam az epdosban, ahol beirtam a kommandomat, fellephetnek egy konyvtarral a kovetkezo jatekra.
Ez persze a gyakorlatban nem sokat jelentene, hiszen csak 1-2 ilyen jatek lenne, de az elvi lehetosege meg lenne teremtve a dolognak.
Na hat ha rovidebb nem is lett, de osszeszedettebb es szakszerubb lett remelem.
Most jo lenne akkor ha valami exos guru akkor rabolintana, hogy jol gondolom ezeket, erdemes belekezdeni a megvalositasaba technikailag ertve, mert mukodni fog, vagy pedig valamit nem ertek, es ez nem fog mukodni.