Enterprise Forever  |  :HUN  |  Programozás  |  Topic: EXOS kompatibilis memória kezelés
Author Topic: EXOS kompatibilis memória kezelés  (Read 8662 times)« previous next »
Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« on: 2008.November.12. 22:38:18 »

Povi kérdezte, de talán másnak is hasznos lehet, így ime bővebben kifejtve a memória kezelési téma, amolyan ENTERPRESS cikk pótlóként

Az ENTERPRISE a maga korában, sőt talán a 8 bites gépek történetében nézve összességében is egyedülálló módon rugalmasan bővíthetőre lett megtervezve, így pl a maximálisan kezelhető memória méret az akkoriban szinte elképzelhetetlen 4 megabájtban lett meghatározva.
Mindez ráadásul nagyon tisztán, áttekinthetően lett megoldva: a Z80 64K-s címtartományát felosztjuk 4 db 16K-s lapra, a 4 megabájtot pedig 256 db 16K-s szegmensre. És bármelyik szegmenst belapozhatjuk bármelyik lapra, sőt még azt is megtudhatjuk, hogy melyik lapra melyik szegmens lett belapozva. Sok más gépen csak irigykedni lehet egy ilyen egyszerűen használható rendszerre, majd egyszer a Spectrum programok átírása kapcsán részletezem, hogy milyen "barkácsolással" lett a Spectrum 48-ból 128-as gép, ill. milyen további ronda barkácsolásokkal érték el az oroszok, hogy 256K esetleg 1 mega memória használatát... de a szocialista kistestvér, azaz a TVC esetén is jelentősen lebutítani és egyben bonyolítani a rendszert, csak, hogy pár logikai kaput megspóroljanak...

Persze a hw lehetőség kevés, kell mindehhez egy olyan operációs rendszer, ami mindezt tudja kezelni, kihasználni. Szerencsére mi egy igazán remek rendszert kaptunk, amely teljességgel rászolgált az Enterprise eXtendable Operating System névre!
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, nyílvántartás vezetése az aktuálisan foglalt ill. szabad memória területekről.
Akárcsak egy mai modern operációs rendszer esetén!
A kortárs gépeken nem is igazán lehet operációs rendszerről beszélni, memóriakezelés is gyakorlatilag csak a BASIC interpreteren belül létezik, változók stb-k nyilvántartása. Így pl egy Spectrum program se tudhatja meg rendszerszinten, hogy 48-as, 128-as vagy netán egy orosz Scorpion 256-os gépen fut.
Itt ha nem érdekel minket a BASIC, gyakorlatilag nincs semmi más amire figyelni kéne, ráadásul minden fix, és változatlan, a képernyő memória is teljesen rögzített helyen van, semmi akadálya a "POKE-PEEK" stílusú programozásnak
Enterprise esetén egyrészt alapból is több többé-kevésbé különböző géptípus került kiadásra (64, 128, EXOS 2.0 és 2.1, angol és német), másrészt a különböző bővítésekkel számtalanra növekedett a különböző létező konfigurációk száma.

Sajnos a cég sikertelensége azzal is járt, hogy nem volt hivatalos támogatás, oktatás, cikkek, könyvek, arra vonatkozóan, hogy ezt a kitűnő rendszert hogyan is kell helyesen kihasználni, hogyan kell megfelelően programozni. Így a géppel foglalkozó programozók leginkább a más gépeken megszokott fix környezetet használó stílust vették át, az elérhető dokumentációkból csak annyit hasznosítva, hogy egyes fix(nek gondolt) pontokat megkeressék. Ez nálunk különösen jellemző volt, egyrészt mivel a legjobban eltérő EP64-es nálunk nem került forgalomba, másrészt a hivatalos dokumentációk is csak késve és nem túl jó minőségben fordítva jelentek meg. Ráadásul a megjelent könyvek, cikkek nagyrésze is ezt a fix memória konfigurációs "POKE-PEEK" stílust hirdette.

Milyen problémák adódnak ebből?
- az anno hírhedt angol-német gépek közötti inkompatibilitás, mind ennek volt köszönhető. Ez különösen a BASIC-gépi kód keverék programokra volt jellemző. Ennek köszönhető sok össsze-vissza barkácsolt, kapcsolóval megspékelt cartridge...
- olyan programok amik nem futnak memóriabővítővel ellátott gépen (ha jól emlékszem a Jano féle átíratok élen jártak ebben...)
- olyan programok amik összeakadnak egyes ROM bővítésekkel
- külön kiemelve, hogy volt olyan is, ami a közismert TAPE: problémán túl se mentek lemezes géppel, mert egész egyszerűn beleírt az EXDOS-nak kiutalt területbe. Ezek ugyan már át lettek bütykölve, de a dolog most fokozottan megismétlődik a vinyóvezérlővel, hiszen itt még több terület lesz lefoglalva a rendszerszegmensben, és itt különösen nem egészséges ha beleírunk a lefoglalt memóriába, akár nagyobb adatvesztés is lehet a vége!
A "Világ EP tulajdonosai egyesüljetek" mozgalmunk keretében került előtérbe az a probléma, hogy a létező EP programok kb 98%-a nem fut EP64-en, annak ellenére, hogy jelentős részük fizikailag beférne a 64K-ba! És hiába vesz mondjuk egy MICROTEAM kártyát az EP64 tulajdonos, az így 576K-ra növelt memóriával se fog futni a 128-as programoknak még mindig vagy 96%-a... mivel az F8-FB szegmensek nem léteznek egy ilyen gépen. (Sajnos az ep128emu egyik hiányossága, hogy ilyen "lukas" memória konfigurációkat nem lehet emulálni, ezt csak EP32-ben lehet megcsinálni.) F8-FB szegmensek megvalósítása után még mindig sok programnak gondot okozna az EXOS 2.0

És amire nem került sor, de hatalmas balhé lett volna: ha kijött volna a tervezett szuper EP az EXOS 3.0-val, várhatóan szintén rengeteg program nem működött volna vele...
Szintén lettek volna problémák, ha anno kiadják a vinyóvezérlőt (amit az eladatlan SZJA '88 készletek miatt visszatartottak...)

Ennyi áttekintés után mindjárt jönnek a részletek
Logged


Enterprise Forever
« on: 2008.November.12. 22:38:18 »

 Logged

endi
EP addict
*
Offline Offline

Hungary

Posts: 1029


OS:
Windows XP
Browser:
Opera 9.61


View Profile WWW
New Posts
« Reply #1 on: 2008.November.12. 22:45:35 »

Jó írás, várom a többit. Smiley
Az IM2 megszakításról is írhatnál, ugyanis ott is voltak különböző gépek. Ha jól emlékszem valami porton jött, hogy az IM2 rutin hol van, és ezen a porton a legtöbb gépen 0 volt. Azonban volt pár gép (pl. az enyém) amelyen ez a port random(!) értéket adott, ha jól emlékszem 255 és 254 érték váltakozott rajta. Emiatt aztán el is szálltak bizonyos átiratok.
Vagy valami ilyesmi volt, már nem emlékszem.
Logged


IstvanV
EP addict
*
Offline Offline

Posts: 2111

OS:
Linux (Suse)
Browser:
Konqueror 3.5.9


View Profile
New Posts
« Reply #2 on: 2008.November.12. 22:57:49 »

... mivel az F8-FB szegmensek nem léteznek egy ilyen gépen. (Sajnos az ep128emu egyik hiányossága, hogy ilyen "lukas" memória konfigurációkat nem lehet emulálni, ezt csak EP32-ben lehet megcsinálni.)
Valóban ds_icon_redface Meglepő módon azonban lehet olyan snapshot file-t készíteni, amelyet betöltve átmenetileg a fenti konfiguráció jönne létre, tehát bármelyik szegmens lehetne ROM, RAM, vagy üres, csak a GUI és a konfigurációs file nem teszi lehetővé a beállítását.
Logged

Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #3 on: 2008.November.13. 01:05:01 »

Akkor menjünk bele a részletekbe, először egy kis összefoglaló:
Van 4MB címtartományunk, ez fel van osztva 256 db 16K-s szegmensre. Meglepő módon 0-255-ig számozzuk őket, hexában 00-FF
Alapvetően bármelyik lehet RAM vagy ROM vagy maradhat üresen, kivéve amit maga az alaplap határoz meg: 00-03 az alaplapi ROM-hoz van rendelve, FC-FF pedig a szintén az alaplapi RAM-hoz, aminek kiemelt szerepe van, hiszen egyben a Nick chip által látott videómemória.
04-07 tartozik a cartridge foglalathoz, de itt akár RAM-ot is elhelyezhetünk. A 128-as gépekben helyett kapott egy plusz 64K-s bővítőpanel, ami F8-FB szegmenseket tartalmazza.
Ami még nagyon elterjedt: a MICROTEAM kártya 512K bővítése a 40-5F területet foglalja el. 320K-ra bővített gépben pedig EC-FB található a bővítőpanelen.
Itt érdekességként megjegyzem, hogy az egyik NASA&GUY demo (asszem valami Jean Michell Jarre digi zenét játszik), ilyen "EC-s" gépre íródott eredetileg, amin nagyon csodálkoztam anno, akkor még nem jelent meg az Enterpressben a 320K átalakítós cikk. És hiába volt MICROTEAM kártyával 640K-s gépem, mégse játszotta le a teljes zenét, hála a fix címes programozási stílusnak... aztán én meg átírtam, hogy a MICROTEAM kártyára eső szegmenseket használja, így végre meghallgathattam a teljes zenét

Ha a RAM-ot nézzük, egy 64K-s gépben van FC-FF. 128-asban F8-FF.
Ha a korábban emlegetett MICROTEAM+EP64 konfigot nézzük, akkor pedig 40-5F, FC-FF, ami darabra bőven jó, csak hiányzik az a bizonyos F8-FB, amire az EXOS-t nem használó 128-as gépen programozók által írt programok nagyrésze hivatkozik közvetlenül.

A helyes programozáshoz felejtsük is el ezeket a számokat, egyedül az FC-FF-et kell megjegyezni, kitüntetett videó memória mivoltuk miatt. A többiről csak annyit kell tudnunk, hogy nekünk hány darabra van szükségünk, a konkrét szegmensszámokat majd megmondja az EXOS!

Most nézzük az EXOS szerinti RAM felosztást: két szegmensnek van kitüntett szerepe, az egyik az FF ami a rendszerszegmens, és a legalacsonyabb sorszámú RAM szegmens ami a nulláslap szegmens. Itt található meg az EXOS hívások, ill a megszakítási program belépési pontja. És ide kerülnek 100H címtől töltve az 5-ös fejlécű programok is.
Egy 128-as gépen az az F8 szegmens. De ha pl van egy MICROTEAM kártyánk, akkor már a 40-es lesz az.
És ez máris gondot okoz sok programnak (általában a komplett módosított Spectrum ROM-ot tartalmazó béna átíratoknak)...
De bővítős gépen is lehet F8 a nulláslap, ha VENUS-t használunk, ill. az EPDOS 2.1-nek is van ilyen lehetősége.
Ez az eset meg egy másik adag programnak okoz gondot...

A maradék RAM négy csoportba tartozhat: rendszer, eszköz, felhasználói, szabad.
Ha pl csatornákat nyitunk meg, különösen ha nagy RAM igénnyel járó videó lapokat, akkor az EXOS elkezd lefelé terjeszkedni, és ha kihízza az FF szegmenst, akkor további szegmensek válhatnak rendszer által lefoglalttá.
A különböző beláncolt EXOS periféria kezelők által igényelt teljes RAM szegmensek az eszköz (device) kategóriában kerülnek lefoglalásra. Erre típikus példa a RAMDISK. Szintén ebben a kategóriába kerülnek lefoglalásra a betöltött rendszerbővítők által elfoglalt szegmensek is.
És végül van az aktív felhasználói program, ez lehet egy rendszerbővítő vagy egy 5-ös fejléccel betöltött "új alkalmazói program". Az ezek által igényelt szegmensek a felhasználói kategóriában kerülnek lefoglalásra.

Ami nagyon fontos: a felhasználói program csak felhasználói szegmenst tud felszabadítani, eszköz vagy rendszer szegmens felszabadításához nincs joga!

És ezzel el is érkeztünk ahhoz a bizonyos Spectrum Világ-os hibás módszerhez:
Code
        LD C,0FAH
       EXOS 25
       LD A,0FAH
       OUT (0B2H),A
 
Egyrészt a szándék dicséretes, hiszen nem csak bumm belapozza a szegmenst, hanem szabaddá teszi... csak sajnos a nem túl sikeres fordítású EXOS leírást félreértelmezve
Mert az EXOS 25 hívás csak akkor lesz sikeres, ha elötte az a szegmens nekünk, azaz felhasználóiként ki lett utalva. Ha az FAH már mondjuk a RAMDISK része, vagy egy betöltött EXOS bővítő van ott, akkor mivel eszköz szegmensnek van lefoglalva, hibajelzést kapunk vissza, hogy a szegmens nem szabadítható fel. A program viszont ennek ellenére nyugodtan neki áll használni.
És ott van még az a eset is, hogy nem is létezik ez a szegmens az adott konfigurációban, mert pl EP64-ről van szó...
A helyes megoldás itt az, hogy kérünk kiutalni egy szegmenst az EXOS-tól, és azt használjuk. Ha hibajelzést kapunk vissza, mert elfogyott a szabad memória, akkor azt a programtól függő módon le kell kezelni (pl kilépés, vagy lehet folytatni korlátozott funkcionalitással a program futását)
Code
        EXOS 24
       JP NZ,HIBA  
       LD A,C
       OUT (0B2H),A
 

Kicsit macerásabb, ha egy konkrét számú szegmensre vágyunk: ekkor ciklusban kell ismételgetni az EXOS 24 hívást, mindaddig amíg meg nem kapjuk a kívánt szegmenst, vagy pedig elfogy a memória, és ekkor megyünk a HIBA rutinra.
De erre a módszerre új program írása esetén csak egy esetben lehet szükség: ha videó szegmensre van szükség. Ekkor addig ismételjük a hívást ameddig FC vagy nagyobb szegmenst nem kapunk.
És akkor kell még ehhez a módszerhez folyamodni, ha egy régebbi fix címzéses programot akarunk kibővíteni úgy, hogy amit a program használ, az legyen szabályosan lefoglalva, mint ahogy ezt tettem tegnap a TUSKER-rel.
Ez volt Attus eredeti rutinja, amely az SpV módszeren alapult:
Code
                LD BC,5FAH
SZABAD          PUSH BC
               EXOS 25
               POP BC
               INC C
               DJNZ SZABAD
 
Ebből kiderül, hogy az FA-tól kell nekünk 5 szegmens, ill. késöbb kiderült, hogy az LPT táblát az FF szegmens elejére helyezi el.
És ime mindez helyesen:
Code
FOGLAL          EXOS 24
               JP NZ,HIBA
               LD A,C
               CP 0F9H
               JR NZ,FOGLAL
               LD BC,5FAH
EZKELL          PUSH BC
               EXOS 24
               LD A,C
               POP BC
               CP C
               JP NZ,HIBA
               INC C
               DJNZ EZKELL
               EXOS 24
               CP 7FH
               JP NZ,HIBA
               LD DE,3200
               EXOS 23
               JP NZ,HIBA
               LD L,0F9H
VISSZAAD        LD C,L
               EXOS 25
               DEC L
               JR NZ,VISSZAAD
 
Az elején addig foglalunk, amíg az F9-ig el nem jutunk. Ha közben kifogyunk a memóriából, akkor ugrás a HIBA-ra.
Ezután kérünk még 5 szegmenst, aminek FA,FB,FC,FD,FE-nek kell lennie, különben HIBA...
És még egyet igényelünk, itt már csak az FF jöhet, és "megosztott szegmens" hibajelzést kell kapnunk (ez a 7F hibakód), különben hiba.
És itt jön még egy fontos dolog: megosztott szegmens használata esetén meg kell mondanunk az EXOS-nak, hogy mi meddig akarunk terjeszkedni, erre szolgál az EXOS 23: felhasználói határ beállítása. Ha itt hibajelzést kapunk, akkor nincs annyi szabad hely amennyire nekünk szükségünk van, tehát ugrás a HIBA-ra.
Ha minden ok, akkor egy nem túl szép, nem túl gyors, de egyszerű módszerrel visszaadjuk a felesleges szegmenseket. Vagyis F9-től lefelé mindet megpróbáljuk felszabadítani, úgyis csak az fog sikerülni amit felhasználónak utaltak ki
A teljesen korrekt megoldás természetesen az, ha az elején eltároljuk sorban a kapott felesleges szegmenseket, és ezen lista alapján szabadítunk itt fel. Erre akkor van szükség, ha az 5-ös fejlécű programunk már nem fér el a nulláslapon, mert ekkor a további programszegmensek is felhasználóiként kerülnek lefoglalásra, és ezzel a primitív módszerrel azokat is felszabadítanánk, pedig azt nem lenne szabad. A TUSKER betöltő esetén nincs ilyen gond, jó így is

Ez volt a fix szegmensek használata szabályosan című fejezet, majd alvás után folyt köv
« Last Edit: 2008.November.13. 01:14:18 by Zozosoft » Logged


Attus
EP lover
*
Offline Offline

Hungary

Posts: 887


OS:
Linux
Browser:
Mozilla compatible


View Profile
New Posts
« Reply #4 on: 2008.November.13. 15:03:36 »

Ez volt a fix szegmensek használata szabályosan című fejezet, majd alvás után folyt köv
Szép volt Zozó! Smiley
Logged

Povi
EP user
*
Offline Offline

Hungary

Posts: 391


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #5 on: 2008.November.13. 20:28:33 »

Kicsit macerásabb, ha egy konkrét számú szegmensre vágyunk: ekkor ciklusban kell ismételgetni az EXOS 24 hívást, mindaddig amíg meg nem kapjuk a kívánt szegmenst, vagy pedig elfogy a memória, és ekkor megyünk a HIBA rutinra.
De erre a módszerre új program írása esetén csak egy esetben lehet szükség: ha videó szegmensre van szükség. Ekkor addig ismételjük a hívást ameddig FC vagy nagyobb szegmenst nem kapunk.

Konkrét szegmens igénylésére nincsen valami elegánsabb módszer? Mert így szélsőséges esetben akár 249 szegmenst is lefoglalhatunk magunknak, míg végre megkapjuk pl. a hőn áhított FC szegmensünket. És akkor ezután még fel kell szabadítani a fölöslegesen lefoglalt szegmenseket is, hátha kellenek még azok valamire...
Logged

*** Speicherplatz zu klein

Povi
EP user
*
Offline Offline

Hungary

Posts: 391


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #6 on: 2008.November.13. 20:43:43 »

Povi kérdezte, de talán másnak is hasznos lehet, így ime bővebben kifejtve a memória kezelési téma, amolyan ENTERPRESS cikk pótlóként
Kicsit OFF:
Igazából arra voltam kíváncsi, hogy hogyan lehet EXOS-kompatibilis Spectrum átiratokat készíteni, mert az SpV-ben megjelent cikk nem az. Smiley Főleg a képernyő emulálás probléma nekem (sose voltam LPT guru, az összes programom VIDEO: eszközt használ), nem igazán értem, mit miért lapozgatnak a kódban. Először FA a 2-es lapra, aztán FC az 1-esre. Majd később FB a 3-asra, majd FD az 1-esre. Most melyiken van a video-memória?!?! Az FC-n, vagy az FD-n?

Maga a memóriakezelés nem problémás, nézzétek meg az Atomix-et, EP64-en is elindul, EXOS 2.0 alatt, ha van elég memória (a 64kB nem elég Smiley), különben meg hibaüzenettel kilép. Anno ki is próbáltuk Zozoval igazi EP64-en is, persze memóriabővítéssel. (Az más kérdés, hogy EXOS 2.0 alatt soha nem jár le az idő, mert az EXOS 2.0 nem kezeli a felhasználói megszakítási rutint, de ez itt már tényleg OFF).
Logged

*** Speicherplatz zu klein

Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #7 on: 2008.November.13. 20:49:03 »

Konkrét szegmens igénylésére nincsen valami elegánsabb módszer? Mert így szélsőséges esetben akár 249 szegmenst is lefoglalhatunk magunknak, míg végre megkapjuk pl. a hőn áhított FC szegmensünket. És akkor ezután még fel kell szabadítani a fölöslegesen lefoglalt szegmenseket is, hátha kellenek még azok valamire...
Látom kapisgálod már a dolgot
Sajnos nincs ez egy pici hiányosság az EXOS-ban. Jó lenne ha külön lehetne jelezni, hogy videó szegmenst szeretnénk kérni.
Erre egyedül a periféria kezelő programon keresztül van lehetőség, ha videó periféria típust állítunk be.

Így jobb híján marad ez a ciklusos megoldás. Lehetséges még közvetlenül az EXOS rendszerterületeiben matatni, ezt több könyvben, cikkben tárgyalták is. De az ilyen programok máris elszállnak EXOS 2.0 esetén... esetleg meg lehetne írni külön két szubrutint EXOS 2.0 ill. 2.1 esetére. De mi van ha véletlenül mégis előkerül az a szuper EP, amit állítólag Kopácsy rejteget? Azon megint csak nem fognak futni az ilyen "kotorászós" programok...
Szóval szerintem jobb maradni a szabályos megoldásnál, az a pár tizedmásodperc futásidő amibe legrosszabb esetén kerülhet, nem egy nagy veszteség a kompatibilitás oltárán


Logged


Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #8 on: 2008.November.13. 20:50:45 »

Igazából arra voltam kíváncsi, hogy hogyan lehet EXOS-kompatibilis Spectrum átiratokat készíteni
Remélhetőleg ma eljutunk idáig a témában
Logged


Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #9 on: 2008.November.13. 23:06:51 »

Ott tartunk, hogy szeretnénk megszabadulni a fix szegmensszámoktól, ily módon a különböző konfigurációkhoz maximálisan alkalmazkodó programot írni. Nézzük mi a teendő ha memóriára van szükségünk?
Kezdetnek ott van a korábban emlegetett nulláslap. Ebből az EXOS a 0030-005BH területet használja, ill. az 5-ös fejlécű program ide kerül betöltésre 0100H címtől. A többi szabadon felhasználható az éppen aktív felhasználói program számára.
Mint korábban már említettem, a nulláslap szegmensszáma különböző lehet a különböző konfigurációkban, az aktuális számot megtudhatjuk a B0H  portról beolvasva, ill. a BFFCH címen lévő EXOS rendszerváltozó* is tartalmazza. Ez később még fontos lesz, amikor majd kicsit trükközünk a nulláslappal , de alapesetben nem szokás piszkálni
* a rendszerváltózók címe úgy érvenyes, ha az FFH rendszerszegmens a 2. lapra van lapozva.

Nézzük tovább, mi van ha a nulláslap már nem elég, vagy nem felel meg az igényeinknek?
Nagyon egyszerű, kérünk további szegmenseket az EXOS-tól. Mivel már nem ragaszkodunk a fix szegmensszámokhoz, sokkal egyszerűbb a dolog, minden amit kapunk, az jó nekünk Célszerű a kapott szegmensek számát eltárolni, későbbi lapozási műveletekhez nem árt tudni melyik szegmensekről van szó ill. majd kilépéskor fel kell szabadítanunk ezeket.
Egy lehetséges módszer, például foglaljunk le 4 szegmenst:
Code
                LD HL,RAMLISTA
               LD A,4
FOGLAL          EX AF,AF'        
               EXOS 24
               JP NZ,HIBA
               LD (HL),C
               INC HL
               EX AF,AF'
               DEC A
               JR NZ,FOGLAL
Késöbb pedig pl a 3. szegmensre így hivatkozhatunk:
Code
                LD A,(RAMLISTA+2)
               OUT (0B3H),A
 

Itt megemlítem azt is, hogy a Spectrum Világ cikksorozatának az elején, amikor a Spectrum kazetta beolvasó programot tárgyalják, még a helyes memóriakezelésről van szó:
Quote from: Spectrum Világ
EXOS 24 - Szegmens kijelölés. Memóriát célszerű az EXOS-tól kérni, mivel így biztosan nem kezd el más program is az általunk használni kívánt memóriában dolgozni. C regiszterben a kiutalt szegmens száma lesz. Programunk 3 db szegmenst foglal le, ez 48k, így minden SPECTRUM program belefér a tárba.
Sajnos a gyakorlati megvalósításba becsúszott egy kis hiba:
Code
          EXOS 24            ;Egy 16 kbyte meretu RAM szegmens lefoglalasa
         LD A,C             ;es belapozasa
         OUT (0B1H),A       ;az 1. lapra (4000H-7FFFH cimtartomany)
         EXOS 24            ;Meg ket szegmens lefoglalasa
         LD A,C             ;es belapozasa
         OUT (0B2H),A       ;Ezekre fog toltodni a program
         EXOS 24
         OUT (0B3H),A
 
Kimaradt a hibakezelés, így kevés memória esetén, hiába szól az EXOS, hogy elfogyott, a program nem veszi észre, és hibásan fog működni.

Ezzel a sima szegmens igényléses módszerrel már remekül el lehet lenni, ha nincs szükségünk képernyő kezelésre, ill. ha megoldjuk az EXOS videó kezelőjén keresztül. Ha viszont magunk akarjuk a képet létrehozni, saját LPT táblával, ahhoz saját videó szegmens(ek)re lesz szükségünk!
Itt kezdődnek a bonyadalmak...
Logged


Povi
EP user
*
Offline Offline

Hungary

Posts: 391


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #10 on: 2008.November.13. 23:12:24 »

Mindig a legizgalmasabb résznél marad abba a cikk, pont, mint egy brazil jellegű szappanopera! Smiley
(kéne csinálni új ENTERPRESS számokat - elég lenne csak pdf-ben is - hogy az ilyen cikkeket lehessen olvasgatni később is; a legjobb dolgok fél év múlva mindig elvesznek a fórum mélyén valahol...)
Logged

*** Speicherplatz zu klein

MrPrise
Administrator
EP addict
*
Offline Offline

Hungary

Posts: 2291


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #11 on: 2008.November.13. 23:20:45 »

a legjobb dolgok fél év múlva mindig elvesznek a fórum mélyén valahol...)
Ezért javasoltam már régebben, hogy a hasznos dolgokat össze kellene gyűjteni (egyelőre) a wiki-n.
Logged

Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #12 on: 2008.November.13. 23:21:39 »

Mindig a legizgalmasabb résznél marad abba a cikk, pont, mint egy brazil jellegű szappanopera! Smiley
Vacsorázni is kell valamikor
Quote
kéne csinálni új ENTERPRESS számokat - elég lenne csak pdf-ben is
Már javasoltam a Főszerkesztő úrnak, hogyha végzett a régi számok bedigitalizálásával, akkor lehetne újakat is csinálni
Logged


Zozosoft
EP addict
*
Offline Offline

Hungary

Posts: 5629


OS:
Windows XP
Browser:
Firefox 3.0.3


View Profile WWW
New Posts
« Reply #13 on: 2008.November.14. 00:23:10 »

Mi is a bonyadalom a videó szegmensekkel? Az egyik az amire Povi már rákérdezett: nem tudunk közvetlenül videószegmenst igényelni, így kénytelenek vagyunk a már megismert ciklusos igényelgetéses módszerhez folyamodni.

Quote
míg végre megkapjuk pl. a hőn áhított FC szegmensünket
Ez viszont megint helytelen hozzáállás. Mert áhítozhatunk rá, de EP64-en nem fogjuk megkapni, mivel az csücsül a nulláslapon.
Tehát a helyes hozzáállás az, hogy FC vagy nagyobb ami elfogadható. Jól eltesszük ennek is a számát, hol itt a gond? Az, hogy lesz itt még egy kis pluszmunkánk!
Általános célú szegmenseknél teljesen mindegy, hogy melyiket is kaptuk meg. Videó szegmens esetén ez már nem teljesen igaz!
A miérthez nézzük meg a Nick chip memória kezelését, amiről eddig még nem volt szó:
Azt már tudjuk, hogy az alaplapi 64K egyben a videómemória is. Ezt a Nick saját maga is címzi, az általa használ címeket nevezzük videócímeknek. Természetesen ezek is 0000-FFFFH tartományban lehetnek. De ezek a címek teljesen függetlenek a Z80 címeitől! A 0000-3FFFH tartomány jelenti az FCH szegmenst, 4000-7FFFH az FDH, 8000-BFFFH az FEH, C000-FFFFH az FFH. És ezek függetlenek attól, hogy a kérdéses szegmensek a Z80 számára hova vannak lapozva, vagy hogy egyáltalán be vannak-e lapozva.
Így amikor a videómemóriával végzünk műveleteket, szükséges lehet azt a címet amivel a Z80 érte el a kérdéses területet átszámolni videócímre a Nick számára.
És van még egy számolgatás, amire akkor van szükség amikor az LPT tábla címét adjuk meg a Nick chipnek, mivel itt csak 12 bitet adunk át.
Ezt legegyszerübben úgy lehet megspórolni, ha a 0000H videócímre tesszük az LPT táblát, vagyis az FC szegmens elejére, ahogy teszi ezt pl az SpV féle Spectrum átírat betöltő is.
Az LPT táblában pedig meg kell adnunk a képernyő adatok videócímét is. Az egyszerűség kedvéért az említett betöltő erre a célra az FD szegmenst használja, így 4000H videócímtől fog kezdődni a képernyő, ezt a kezdőcímet használja fixen az LPT generáló rutin.
Nekünk viszont pont az a célunk, hogy a fix szegmensszámoktól megszabaduljunk!

Az említett Spectrum képernyő előállításához két videószegmensre lesz szükségünk, egy kell az LPT táblának, egy pedig a Spectrum képernyőnek, ami egyben a Spectrumos memória első 16K-ja is lesz.
Mivel az LPT tábla nem tölt ki egy teljes szegmenst (szokásos Spectrum LPT tábla 3200 bájt), így ezt akár megosztott szegmensben is el lehet helyezni. Ezért a célszerű folyamat az, hogy az ismert módszer szerint addig igényelgetünk szegmenseket, amíg egy videó szegmenst nem kapunk, ezt eltesszük képernyőnek, a következőt pedig LPT-nek. Ha fordítva csinálnánk, akkor előfordulhatna, hogy a nem teljes szegmensnyi LPT tábla kap egy teljes szegmenst, a teljes szegmenst igénylő videómemória pedig lehet, hogy márt csak megosztottat kap, ami hibához vezet...

128-as gépen ezzel pont fordított konfiguráció jön létra, mint az SpV betöltőben: az FCH lesz a videószegmens, míg az FDH az LPT szegmens. Ezzel az eredeti Spectrum LPT építő rutin máris működésképtelenné vált, módosítani kell.

De erről majd holnap

Még annyit befejezőül, hogy hogyan számoljuk a videócímeket: kelleni fog a Z80-as cím, ill. a szegmensszám.
A Z80-as címből a legfelső két bitet "dobjuk ki", és helyére a szegmensszám alsó két bitjét kell betenni.

Amikor pedig az LPT címét mondjuk meg a Nick-nek, akkor az alsó 4 bitet kell "eldobni".

Logged


Povi
EP user
*
Offline Offline

Hungary

Posts: 391


OS:
Windows 2000
Browser:
Microsoft Internet Explorer 6.0


View Profile WWW
New Posts
« Reply #14 on: 2008.November.14. 10:30:33 »

ami egyben a Spectrumos memória első 16K-ja is lesz.

Hülye kérdés, de én nem tudom. Spectrumon akkor ezek szerint 0000-3FFF között a ROM van?
Logged

*** Speicherplatz zu klein

Enterprise Forever
« Reply #14 on: 2008.November.14. 10:30:33 »

 Logged
Tags:
Enterprise Forever  |  :HUN  |  Programozás  |  Topic: EXOS kompatibilis memória kezelés

Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks

Template made by Mr.Prise
Page created in 0.195 seconds with 25 queries.
Google visited last this page 2012.May.20. 23:19:53
Follow ep4ever_news on Twitter