Mi lakik a cartridge-ben?

Sok félreértés, legenda kering a cartridge lehetőségeiről, volt aki négy foglalatos panelt keresett, amelybe egyszerre hatféle programot akart behelyezni. A "homály" eloszlatására nézzük meg részletesen, mis is az a cartridge, hogyan illeszkedik a számítógép memória-rendszerébe, és milyen lehetőségek állnak azok előtt, akik szeretnék kihasználni az ez irányú bővítési lehetőségeket.
Az ENTERPRISE "agya", a Zilog cég Z-80 mikroprocesszora 16 vezetéken címzi meg a lehetséges 2^16 =65536=64KB memóriahelyet. Ennek ellenére az ENTERPRISE összesen 4 megabájt, azaz 4096KB memóriát tud kezelni. A gépben ebből ténylegesen csak 48KB (német nyelvű gépnél 64KB) ROM (csak olvasható memória a rendszerprogramok tárolására) és 128KB RAM (írható-olvasható memória a képernyő, a változók, az adatok és a "mi programjaink" számára) található, de a többi hely is betölthető a kapható többféle bővítőkártya segítségével. Hogyan lehetséges ez?
Válasszuk kétfelé a címvezetékeket!! Az alsó csoportba tartozzon az alacsonyabb helyiértékű 14, amely így 2^14=16KB memóriát címez, a második csoport két címvezetéke pedig meghatározza, hogy a lehetséges 4*16KB-ból éppen melyikről van szó. Így a Z-80 64KB memóriáját felosztottuk négy darab, egyenként 16KB-os "lapra". A tényleges címek:

0. lap:
0000h -
3FFFh
( 0 -
16383)
1. lap:
4000h -
7FFFh
(16384 -
32767)
2. lap:
8000h -
BFFFh
(32768 -
49151)
3. lap:
C000h -
FFFFh
(49152 -
65535)

A gép tetvezői a két legmagasabb helyiértékű címvezetéket "ellopták", és ezek segítségével egy nyolcbites lapregisztert (page register) aktivizálnak, amelynek nyolc kimenete a processzor maradék 14 címvezetékével együtt 22 vezetéken címzi a memóriát, (2^22=4M). A négy lapregiszter megmutatja, hogy a hozzájuk tartozó lapon a 4M memória melyik 16KB-s szelete - szakszóval szegmense - hátható". Így tehát a processzor 16KB-s lapjain a memória négy tetszőleges 16KB-ja szegmense foglalhat helyet, akár egyazon szegmens mind a négy lapon. A lapregiszterek tartalma természetesen változtatható, így ha egy program teleírt már egy szegmenst, annak helyére újabb 16KB üres memóriát (ha még van ilyen) lapozhat be. A négy lapregiszter a következő port-címeken helyezkedik el:

Kísérletképpen megnézhetjük, hogy melyik lapon éppen melyik szegmens található BASIC-ben a PRINT IN(176),IN(177),IN(178), IN(179) utasítással.
Összefoglalva: a Z-80 processzor 64KB-s címtartománya négy 16KB lapra, a 4MB memória 256 16KB-s szegmensre osztódik, és a lapregiszterek tartalmának változtatásával a négy lapra bármelyik négy szegmenst belapozhatjuk.
Nézzük ezek után, hogyan épül fel gépünk memóriája! A RAM-terület felülről lefelé terjed, a legmagasabb nyolc szegmensen található. A legutolsó, FFh (255) számú szegmens a legfontosabb, ez az ún. rendszerszegmens. Ha ez hibás, a gép el sem indul. A közvetlenül alatta lévő három szegmenssel együtt alkotják a gép alaplapján található 64Kt, amelyhez a NICK video-vezérlő is hozzáférhet, ezért itt tárolódik a kép is. Az FBh-től F8h-ig terjedő második 64KB egy külön kis áramköri lapon található, alaphelyzetben ide kerülnek a (pl. Basic) programok. A fenti hexadecimális szegmenssorszámokat láthatjuk a gép bekapcsolás utáni memória-tesztelése közben: pl. a "TESTING FB" felirat azt jelenti, hogy a gép éppen az FBh (251) számú szegmenet vizsgálja.
A csak olvasható memória alulról fölfelé halad. A 0. és 1. szegmensen található a gépbe beépített operációs rendszer, az EXOS , és a WP szövegszerkesztő. A 2. és 3. szegmensen a 0. és az 1. ismétlődik, ez a terület későbbi bővítéseknek van fenntartva. Most érkeztünk el a cartridge-hoz: ebben találhatók a 4-7. szegmensek. Az összes többi szegmens az alapgépben üres. Gyakorlatilag a cartridge-ben is csak két szegmens van kihasználva. Kétnyelvű gépen a 4. szegmensen van az angol Basic-értelmező, az 5. szegmensen a német bővítő. Angol gépeken mindkét szegmensben ugyanúgy a Basic-interpreter látszik, a könnyebb bővíthetőség kedvéért. Mint látjuk, a cartridge-ben négy szegmensnyi, azaz 64KB helyünk van. Hogyan használható ez bővítésre?

Nézzük először, mi is az a bővítés? Az EXOS-t kicsit jobban ismerők tudják, hogy a "rezidens rendszerbővítő" olyan program, amely a 3. lapon, tehát a C000h-FFFFh memóriaterületen fut, egy "EXOS_ ROM" fejléccel rendelkezik, amelyet az esetleges új eszközleíró lánc kezdőcíme, majd -a C00Ah címen - a program belépési pontja (első utasítása) követ. Ilyen maga a Basic-értelmező, a német bővítés, vagy a sokak által ismert TurboASMON 1.5 is. Erről meggyőződhetőnk a következő rövid programmal:

100 FOR I=0 TO 7110
110 PRINT CHR$(SPEEK(5,I));
120 NEXT I
130 PRINT

Hogyan találja meg ezeket a bővítéseket a gép?
Bekapcsolás után az EXOS végignézi a szegmensek elejét, hogy talál-e ott "EXOS ROM" fejlécet. Ha nem, megy tovább, amíg végig nem ér a memórián. Ha talál, az adott szegmenst belapozza a 3. lapra, inicializálja a bővítő-programot, és beírja a bővítők listájába. (Hogy ez micsoda, a mi szempontunkból most mellékes.) Ebből a lényeg: az EXOS csak a szegmensek elejét nézi meg, azt sem mindegyiknek. Megnézi 4-7. (tehát a cartridge-ben lévő) szegmenseket, majd a 0-ra végződőeket, tehát a 10h-t, a 20h-ikat stb. (a szegmensszámok természetesen hexadecimálisan értendők.) Ha a cartridge-ben egyforma programokat talál, csak az alsót veszi figyelembe, a többi szegmensnél nem végez ilyen ellenőrzést. Mindebből következik, hogy hacsak nem alkalmazunk ravasz trükköket, egy szegmensben legfeljebb egy bővítés lehet, a cartridge-ben összesen tehát legfeljebb négy. Vannak azonban olyan programok is, amelyek csak két szegmensben férnek el, ilyen az említett turboASMON, vagy a Hisoft Pascal, ezek alkalmazása tovább csökkenti a lehetséges bővítések számát.
Tovább bonyolítja a helyzetet, ha valaki gyors memória-tesztet is szeretne, mondjuk mert nem győzi kivárni, amíg az 1 megabájtos memóriabővítőjét (64 szegmens!) az EXOS méltóztatik letesztelni. Erre az ad lehetőséget, hogy az EXOS memória-tesztelés előtt megnézi, hogy a 4. szegmensen szerepel-e "TEST ROM" fejléc. Ha igen, átadja a vezérlést az ott található programnak, ami a memória vizsgálata mellett, vagy akár helyett, sok minden egyebet is megtehet. Ez a lehetőség viszont kizárólag a 4. szegmensen adott. A problémák enyhítésére ügyes emberek a gyorsteszttel összeházasítottak különböző "rendes" bővítéseket, mint a MON, a GEN, vagy a legismertebb, a turboASMON 1.5, így kihasználták az egyébként veszendőbe menő 4. szegmenet is.

Ennyit a szoftver oldaláról, nézzük, mi a helyzet a hardverrel!

A rendelkezésre álló négy szegmens betöltésére különböző megoldások születtek. A hőskorban volt, aki az egyes kétnyelvű gépek kétfoglalatos cartridge-át alakította át pár vágás, és néhány új drót segítségével két 32KB-a EPROM befogadására. Mások háromfoglalatos panelt fejlesztettek ki, amely még éppen elfért a cartridge műanyag dobozában. Ráadásul ezen a panelen egy kapcsoló is volt, amellyel a második és a harmadik 32KB-s bővítés között lehetett választani (mivel egyszerre nem fértek el a rendelkezésre álló memóriahelyen). Az egyfoglalatos cartridge-be is beépítettek két EPROM-ot a panel két oldalára, a szükséges címkiválasztó IC-vel együtt. Talán említenem sem kell, hogy ezekhez a fejlesztésekhez (mint ahogy a többi 99,9%-ához) sem az 'a' Stúidiónak, sem a Centrumnak nem volt semmi köze.
Később szerencse a helyzet sokkal egyszerűbb lett: megjelentek a 27512 típusú, 64K kapacitású EPROM-ok 1000 Ft alatti áron, amelyek egymagukban kitöltik a rendelkezésre álló négy szegmensnyi memóriát. Így egyfoglalatos cartridge-ben is - minimális átalakítással - lehetővé vált a teljes tartomány kihasználása. A legnépszerűbb a gyorsteszt + turboASMON + BASIC + magyar bővítés összeállítás, de volt olyan felhasználó is, aki a BASIC-et eltette emlékbe, és helyébe a PASCAL-t égette be. Akinek pedig a cartridge-ben kihasználható négy szegmens nem elég, hozzájuthat olyan EPROM-bővítő kártyához is, amelyik a gép másik oldalához csatlakoztatható, és hat, egyenként akár 64K-s EPROM-ot képes illeszteni...
2 x 16K
2 x 16K + 1 x 32K
2 x 32K
1 x 64K (módosított)
2 x 64K (módosított)
2 x 32 K + 32K SRAM (módosított)
Enterpress 91/5 - Mészáros Gyula