Brányi László

 

Enterprise 128-as

ROM visszafejtése

 

0. szegmens

 

 

NOVOTRADE RT.

1989

 

 

Lektorálta: Lukács János

Szerkesztette: Stankovics János

SCAN&OCR: gafz, 2006

 

 

A kiadásért felel RÉNYI GÁBOR,

a Novotrade Rt. vezérigazgatója

Budapest, 1989

ISBN 963 585 037 9

Copyright @ Brányi László, 1989

 

 

TARTALOMJEGYZÉK.

 

 

Bevezető

 1. Start, a rendszer inicializálása

 2. EXOS rutinok

 3. Blokkolvasó rutinok

 4. Blokkíró rutinok

 5. VIDEO eszközkezelő rutinok

 6. SOUND eszközkezelő rutinok

 7. KEYBOARD eszközkezelő rutinok

 8. EDITOR eszközkezelő rutinok

 9. Keresztreferencia táblázatok

    9.1 A programban lévő címek keresztreferencia táblázata

    9.2 IN/OUT címek

    9.3 EXOS rutinok keresztreferencia táblázata

    9.4 Indexregiszterekkel címzett memóriacímek

        keresztreferencia táblázata

10. Karakterkészlet

11. Billentyűzet mátrix

12. Sorparaméter-blokk (line parameter blokk)

Tartalomjegyzék

 

 

BEVEZETŐ

 

 

Ez a könyv az ENTERPRISE 128 számítógép ROM-jainak leírásával foglalkozik. Ebben a kötetben található az EXOS leírása, valamint a képet előállító VIDEO, a hangot előállító SOUND, a billentyűzetet kezelő KEYBOARD és a szöveget kezel& EDITOR leírása is. Ezek a 0. szegmensen levő ROM-ban (ROM 0) találhatók. A további kötetekbe kerül az EXOS folytatása, a szövegszerkesztő, a BASIC segédrutinok, az angol és a német BASIC interpreter.

 

 

A mikroprocesszor

 

Az ENTERPRISE 128 számítógép Z80A mikroprocesszorral működik, amely az egyik legelterjedtebb és legtöbb utasítást tartalmazó 8 bites processzor napjainkban. órajele maximum 4 MHz. Ez a processzor a 16 bites címzésével egyszerre csak 64 Kbyte memóriát tud kezelni, de az ENTERPRISE-ban a lapozásos módszerrel 256*16Kb=4Mb memória kezelésére is képessé tették.

 

 

A memória

 

A Z80A processzor egyszerre 64 Kbyte memóriát tud kezelni, amit felosztottak 16 Kbyte-os lapokra (PAGE 0,...,PAGE 3 - ezek a könyvben P0,...,P3-mal vannak jelölve). A kiosztás a következő:

 

 lapszám    memóriacím     portcím

 

P0  0.lap   0000h-3FFFh   B0h = 176

P1  1.lap   4000h-7FFFh   B1h = 177

P2  2.lap   8000h-BFFFh   B2h = 178

P3  3.lap   C000h-FFFFh   B3h = 179

 

A 16 Kbyte-os lapokra tehető 16 Kbyte-nyi cserélhető memória, amit szegmensnek nevezünk. A gépben 256 db szegmens van, ami 4 Mbyte nagyságú memóriát biztosít. Bármelyik szegmens belapozható a 4 lap bármelyikére vagy ugyanaz mind a 4 lapra egyszerre. Minden laphoz tartozik egy 8 bites I/O lapregiszter, a Z80-as egy I/O portján, amelynek értéke meghatározza az adott lapon elérhető szegmenst.

A B0h portcímre kiküldött érték határozza meg, hogy melyik szegmens kerüljön a 0. lapra. A B1h port az 1.lap, a B2h port a 2.lap, a B3h port a 3. lap értékét határozza meg. A gépen található szegmenseknek állandó azonosító számaik vannak, ezek:

 

00h      ROM 0

01h      ROM 1

02h      Rendszernek fenntartva (a 02h a 0., 03h az 1. szeg-

03h      menssel egyezik meg jelenleg)

04h-07h  Cartridge-ban található 64 Kbyte memória, általában

         04h-ra angol BASIC, 05h-ra német BASIC kerül

20h-21h  Általában itt található a diszkkezelő program

F8h-FFh  RAM, FFh-t (melyet rendszerszegmensnek nevezünk) álta-

         lában a 2. lapra lapozza be az operációs rendszer. Itt

         találhatók olyan lényeges dolgok, mint a rendszervál-

         tozók, rendszerveremtár, RAM és ROM szegmenslisták,

         stb.

 

FCh-FFh-ig terjedő szegmenseket a NICK chip is használja a kép előállítására, így ezek VIDEO RAM feladatot is ellátnak.

 

 

A DAVE chip

 

A DAVE chip a következő funkciókat látja el:

 

1. Hang generálása (3 hang + 1 zajcsatorna} sztereóban

2. Memórialapozások vezérlése

3. Megszakítások vezérlése (2 belső és 2 külső megszakítás)

4. Reset áramkör vezérlése

5. Be/kimeneti kapujelek

6. 1 MHz-es órajel generálása

7. Várakozási ciklusok generálása

 

 

A NICK chip

 

A NICK chip a kép előállítására szolgál. Egy képen belül többféle módot enged meg. Ez a chip az ENTERPRISE 128-as FCh, FDh, FEh, FFh szegmensen lévő memóriáját képes címezni, de a többit már nem. A NICK chip ezt a 64 K-t közvetlenül címzi anélkül, hogy a DAVE chip lapregisztereit használná.

 

 

RESET

 

Z80A  A processzort alaphelyzetbe a RESET input jele állítja.

      Ekkor a következő alaphelyzet áll elő:

      PC                 = 00000h

      I                  = 0

      R                  = 0

      Megszakítási mód   = 0 (IM0)

      Megszakítási maszk = Minden IT tiltott

 

DAVE  Mind a 22 belső regiszter törlődik.

      Következmény: mivel B0h,B1h,B2h és B3h portokra 0 kerül,

      így a 0.,1.,2. és 3.lapra a ROM0 kerül.

 

 

EXOS a csatornaalapú operációs rendszer

 

Az EXOS (Extendable Operating System) az Enterprise számítógép bővíthető operációs rendszere. Illesztési lehetőséget biztosít az alkalmazói program és a gép hardvere között, valamint ellátja a tárkezelés feladatát is.

Az EXOS fő jellemzője a csatornaalapú I/O (In/Out=Be/Ki) rendszer, amely a perifériakezelők készletéből áll - ami azt jelenti, hogy egy adott perifériával folytatott információcseréhez először egy csatornát kell megnyitni.

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.

A csatorna megnyitásához meg kell adni az EXOS számára a kért periféria nevét, az egy byte-os csatornaszámot, néhány esetben pedig be kell állítani az eszköz EXOS változóit is. Ez a perifériához egy kommunikációs utat (csatornát) 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 a berendezésnek.

A csatornák mindaddig nyitva maradnak, ameddig a felhasználó le nem zárja ezeket vagy resetet nem hajt végre.

A be- és kiviteli rendszer perifériatípustól független kommunikációt tesz lehetővé számos beépített eszközzel, továbbá a felhasználói kiegészítő, pótlólagos perifériakezelőkkel is. A perifériakezelő (eszközkezelő) olyan gépi kódú program, amely tartalmazza az általa kiszolgált eszköz vezérléséhez szükséges összes rutint (alprogramot), mely szabványos illesztési lehetőséget (interface-t) nyújt az EXOS felé.

Jelen leírás az EXOS 2.1-es változatát tartalmazza.

 

A visszafejtésről

 

Bekapcsoláskor, illetve RESET esetén .a gép a ROM0-t mind a négy lapra (P0,...,P3) belapozza. Ilyenkor a Z80-as processzor a 0000h címen indul, azaz eloször a 0. lap 1. utasítását hajtja végre:

 

0000  F3        DI

 

Van, amikor a processzor a ROM0-t az 1. lapon látja (pl.: az eszközlánc elkészítésekor), van amikor a 2. lapon, de legtöbb esetben a 3. lapon.

Ezért a ROM visszafejtés úgy készült, mintha a ROM0 állandóan a 3. lapon lenne. Ahol ez nem így van ott ezt jeleztem.

 

Keresztreferencia

 

A könyv végén található egy keresztreferencia (hivatkozási) táblázat, amelyből megtudhatjuk, hogy az egyes rutinokat, változókat hol és hányszor használja a program. E táblázat segítséget nyújt a programok, valamint a ROM rutinok megértésében és követésében.

 

Jelölések

 

A könyvben található számok, ha nem áll mögöttük betű, tízes, ha 'h' betű áll mögöttük, akkor tizenhatos (hexadecimális), ha 'b' betű, akkor kettes (bináris) számrendszerben vannak. (Kivétel a visszafejtésben a cím és a byte-ok tartalma, mivel itt nincs 'h' betű a tizenhatos számrendszerbeli szám után.)

'*'-gal Jelöltem a beugrási pontokat és a táblázat címeit, amelyek a programban találhatók.

'+' jellel azokat a beugrási pontokat Jelöltem, amelyek a program áthelyezése után válnak értelmessé.

b0, b1, ... kifejezések az adott szám kettes számrendszerbeli alakjában az 1., 2., ... helyi értékén álló számot jelölik.

 

Végül szeretnék köszönetet mondani mindazoknak, akik munkámat segítették: Dr Sz. Lukács Jánosnak, a kötet lektorának hasznos tanácsaiért, Tarr Kálmánnénak és Erdősi Zoltánnénak, a NOVOTRADE kiadó munkatársainak, hogy lehetővé tették könyvem megjelenését, valamint feleségemnek, Brányiné Mokos Anikónak, aki áldozatos munkával megfelelő körülményeket teremtett számomra, és aki a kötet gépelésében, megírásában is segítségemre volt.

 

Brányi László

 

 

1. START, A RENDSZER INICIALIZÁLÁSA

 

 

Amikor a számítógépet feszültség alá helyezzük, akkor hidegindítást hajt végre. Ilyenkor a rendszer alapállapotba kerül. Az inicializáló program ellenőrzi a gépben lévő RAM-okat és ROM-okat, létrehozza a rendszerváltozók területét, rendszerprogramokat másol a RAM-ba. Inicializálja az eszközöket, meghívja a ROM-okat a 8-as inicializálási akciókóddal. Ezt követően lefut a bejelentkező program, a legvégén pedig meghívja a ROM-okat az 1-es hidegindítási akciókóddal.

A gép akkor is hidegindítást hajt végre, ha megnyomjuk a RESET gombot és az RST_ADDR változóban 0 van. Ugyanez játszódik le, ha az RST_ADDR változóban 0-tól különböző érték található, de a rendszerszegmens B217h címén és a ROM C3AAh címén lévő 59 byte különböző.

Ugyanígy hidegindítást hajt végre, ha a RESET jelzőben be van állítva a hidegindítást jelző bit és meghívjuk az RST 30h/00h (EXOS 0) rutint.

 

Ha megnyomjuk a RESET gombot és az RST_ADDR változóban 0-tól különböző érték található, valamint a RAM B217h címén lévő 59 byte megegyezik a ROM-ban lévő mintával, akkor melegindítást hajt végre a számítógép. Ilyenkor nem végzi el a RAM-ok vizsgálatát és a ROM-ok keresését. A felhasználónak kiutalt összes memória és az eszközkezelők is megmaradnak. Ezzel szemben lezárja az összes csatornát, felszabadítja a csatorna RAM területét és újra inicializálja az eszközöket. Ezek után a program az RST_ADDR változóban megadott címen folytatódik.

 

Bekapcsoláskor, amikor hidegindítás történik, vagy na megnyomjuk a RESET gombot a Z80-as processzor a 00000h címen található programot hajtja végre. Ebben az esetben a ROM0 a P0,P1,P2 és a P3-as lapon is megtalálható.

Szintén a ROM0 elején lévő rutint hajtja végre az RST 30h/00h (EXOS 0) hidegindítási kód esetén. Ilyenkor a P3-ra lapozza be a ROM0-t és a 0C000h címen indítja azt.

 

A program először letiltja a megszakításokat majd beállítja az 1-es megszakítási üzemmódot. Ennek hatására minden megszakításkor (ha engedélyezett) a 38h címen lévő rutint hajtja végre. Ezt követi a hardver jellemzők beállításához tartozó érték A-ba töltése.

 

* C000  F3        DI                  Megszakítások letiltása

  4001  ED56      IM    1             1-es megszakítási üzemmód

                                      beállítása

  C003  3E04      LD    A,004h        0000 0100b

                                      b0   -> 64k beépített RAM

                                      b1   -> 8 MHz-es óra

                                      b2-b3 -> várakozás M1-nél

                                               kivéve a video

                                               RAM-ot

 

  Az inicializálást a P3-un is megtalálható ROM0-ban folytatja.

 

  C005  C32EC0    JP    0C02Eh        Ugrás a P3-ra

 

Az  eszközlánc kezdőcíme (első a VIDEO XX_SIZE címe, ilyenkor a

ROM0 P1-en van).

 

  C008  8057      DEFW  05780h        (P3-on a 0D780h-nak felel

                                      meg)

 

RST 030h/17-34 végrehajtó rutinjainak belépési pontja

 

* C00A  82C6      DEFW  0C682h        EXOS 17 Csatorna átirá-

                                              nyítása másikra

                                              olvasáskor

  C00C  81C6      DEFW  0C681h        EXOS 18 Csatorna átirá-

                                              nyítása másikra

                                              íráskor

  C00E  E5C7      DEFW  0C7E5h        EXOS 19 Alapértelmezés-

                                              ként használt

                                              eszköz nevének

                                              beállítása

  C010  08C8      DEFW  0C808h        EXOS 20 Rendszerállapot

                                              lekérdezése

  C012  98C6      DEFW  0C698h        EXOS 21 Eszköz beláncolá-

                                              sa

  C014  F2C6      DEFW  0C6F2h        EXOS 22 EXOS határvonal

                                              kiolvasása

  C016  FCC6      DEFW  0C6FCh        EXOS 23 Felhasználói ha-

                                              tárvonal beállí-

                                              tása

  C018  0EC7      DEFW  0C70Eh        EXOS 24 Szegmens igénylé-

                                              se

  C01A  8EC7      DEFW  0C78Eh        EXOS 25 Szegmens felsza-

                                              badítása

  C01C  18C8      DEFW  0C818h        EXOS 26 Rendszerbővítések

                                              végigkérdezése

  C01E  5ECD      DEFW  0CD5Eh        EXOS 27 Csatornapuffer

                                              (RAM) igénylése

  C020  3AC9      DEFW  0C93Ah        EXOS 28 Hibakód értelme-

                                              zése

  C022  5FC9      DEFW  0C95Fh        EXOS 29 Modul betöltése

  C024  2CCB      DEFW  0CB2Ch        EXOS 30 Áthelyezhető mo-

                                              dul betöltése

 

  ( A-ban 0-nak-kell lenni )

 

  C026  3FCB      DEFW  0CB3Fh        EXOS 31 óra beállítása

  C028  40CB      DEFW  0CB40h        EXOS 32 óra lekérdezése

  C02A  3DCB      DEFW  0CB3Dh        EXOS 33 Dátum beállítása

  C02C  3ECB      DEFW  0CB3Eh        EXOS 34 Dátum lekérdezése

 

 

Inicializáló rutin folytatása, de már a P3-on lévő ROM0-ban.

Először azt vizsgálja, hogy a 4. szegmensen 'TEST _ROM' szöveggel kezdődő ROM van-e, mert ha igen, akkor abbahagyja az inicializálást és a bővítő ROM 00008h-as címére ugrik. Ez lehetővé teszi, hogy egy teljesen új operációs rendszerrel működjön a számítógép, vagy tesztelje a gépet.

 

* C02E  D3BF      OUT   (0BFh),A      RAM/frekvencia/várakozás

                                      beállítása

  C030  3E04      LD    A,004h        4. szegmens

                                      (bővítőkártya)

  C032  D3B0      OUT   (0B0h),A      P0-ra belapozása

  C034  210000    LD    HL,00000h     Kezdőcím

  C037  11F6C1    LD    DE,0C1F6h     "TEST-ROM" szöveg címe

  C03A  0608      LD    B,008h        Szöveg hossza 8 byte

* C03C  1A        LD    A,(DE)        Szöveg ellenőrzése

  C03D  BE        CP    (HL)

  C03E  23        INC   HL            Mutatók növelése

  C03F  13        INC   DE

  C040  2003      JR    NZ,0C045h     Ha eltérés van, akkor

                                      folytatódik az iniciali-

                                      zálás

  C042  10F8      DJNZ  0C03Ch        Ellenőrzés folytatása

  C044  E9        JP    (HL)          Ugrás a bővítő 00008h cí-

                                      mére

 

Inicializálás folytatása. Megvizsgálja a felhasználói meleg indítási rutin címet az RST_ADDR változóban. Ha itt 0 található, akkor hidegindítás történik.

 

* C045  3EFF      LD    A,0FFh        255: rendszerszegmens

  C047  D3B2      OUT   (0B2h),A      P2-re és

  C049  D3B1      OUT   (0B1h),A      P1-re belapozása

  C04B  2AF8BF    LD    HL,(0BFF8h)   RST_ADDR felhasználói

  C04E  7C        LD    A,H           melegindítási rutin

                                      címének vizsgálata.

  C04F  B5        OR    L             Ha 0 => nincs rutin

  C050  2117B2    LD    HL,0B217h     Verem címének

  C053  F9        LD    SP,HL         beállítása

  C054  2810      JR    Z,0C066h      Ugrás, ha RST_ADDR=0

 

  Ha  az RST_ADDR változóban 0-tól különböző cím van, akkor két

  eset  lehetséges. Vagy hidegindítást, vagy melegindítást hajt

  végre a gép. Ez attól függ, hogy a P2-re belapozott rendszer-

  szegmens  B217h  címén és a P3-ra belapozott ROM0 C3AAh címén

  lévő  59  byte (rutin és a készítők neve) megegyezik-e. Ez az

  ellenőrzés  azért  fontos, mert bekapcsoláskor is lehet, hogy

  nem  0 cím kerül az RST_ADDR változóba, mivel ilyenkor vélet-

  lenszerűen töltődik fel a memória.

 

  C056  11AAC3    LD    DE,0C3AAh     Rutinnak és a készítők

                                      nevének címe

  C059  063B      LD    B,03Bh        Ellenőrizendő byte-ok

                                      száma 59

* C05B  1A        LD    A,(DE)        Ellenőrzés

  C05C  BE        CP    (HL)

  C05D  2007      JR    NZ,0C066h     Ha van eltérés => hideg-

                                      indítás

  C05F  23        INC   HL            Mutatók

  C060  13        INC DE              növelése

  C061  10F8      DJNZ  0C05Bh        Ellenőrzés folytatása

 

  Ha  a  terület  hibátlan,  akkor végrehajtja a melegindítást.

  Ebben  az esetben a resetjelző 10h állásával (csatornák lezá-

  rása  és  eszközök  újraláncolása)  meghívja  az  RST 30h/00h

  (EXOS  0)  rutint.  Az, hogy ezt a rutint kell meghívni a Z=1

  jelző állása jelzi.

 

  C063  C339c1    JP    0C139h        Ugrás a melegindítást

                                      végrehajtó részre

 

Elsőnek a 255-ös szegmenst (rendszerszegmenst) ellenőrzi, mely a P1-re van belapozva. Az ellenőrzés alatt szükséges verem a még ellenőrizetlen 254. szeqmensen van, melyet a P2-re lapoz be. Az ellenőrzés nem látszik, mivel a VIDEO eszköz nincs még inicializálva.

 

* C066  3EFE      LD    A,0FEh        254. szegmens

  C068  D3B2      OUT   (0B2h),A      P2-re belapozása

  C06A  AF        XOR   A             A=0 Szín kódja (fekete)

  C06B  D381      OUT   (081h),A      Keretszín (BORDER) beál-

                                      lítása feketére

  C06D  CDFEC1    CALL  0C1FEh        P1-en lévo RAM ellenőrzé-

                                      se és 0-val feltöltése

  C070  203D      JR    NZ,0C0AFh     Ha hibás a RAM => keret-

                                      szín villogtatása

 

  A  hibátlan  rendszerszegmenst  belapozza  P2-re, beállítja a

  veremhatár értékét ás inicializálja a VIDEO eszközt. A STATUS

  sor bal margóját 11-re, jobb marqóját 51-re állítja.

 

  C072  3D        DEC   A             255: rendszerszegmens

  C073  D3B2      OUT   (0B2h),A      P2-re belapozása

  C075  213BAC    LD    HL,0AC3Bh     Alapértékre állítja a

  C078  22FABF    LD    (0BFFAh),HL   STACK_LIMIT (verem-

                                      határ) változót

  C07B  CD60D2    CALL  0D260h        Video inicializálása

  C07E  210B73    LD    HL,0730Bh     01 110011 00 001011b

                                           33h       0Bh

  C081  2202B9    LD    (0B902h},HL   STATUS sor

                                      bal margó = 11

                                      jobb margó = 51-re

                                      állítása

 

  Ezután összeadja a  ROM0  és  ROM1 byte-jait. Ha az ellenőrző

  összeg nem 0, akkor a STATUS sorba kiírja az 'INTERNAL CHECK-

  SUM  ERROR'  szöveget,  és a keret villogtatásával a rendszer

  leáll.

 

  C084  AF        XOR   A             A=0 Regiszterek

  C085  67        LD    H,A           H=0 törlése

  C086  6F        LD    L,A           L=0

  C087  47        LD    B,A           B=0

  C088  4F        LD    C,A           C=0

  C089  D3B0      OUT   (0B0h},A      0. szegmens (ROM0) P0-ra

                                      lapozása

  C08B  3C        INC   A             A=1

  C08C  D3B1      OUT   (0B1h),A      1. szegmens (ROMI) P1-re

                                      lapozása

* C08E  0A        LD    A,(BC)        ROM byte-jainak

  C08F  03        INC   BC            ellenőrző összege

  C090  5F        LD    E,A

  C091  0A        LD    A,(BC)        DE=(BC/BC+1)

  C092  03        INC   BC

  C093  57        LD    D,A

  C094  19        ADD   HL,DE         HL=HL+DE

  C095  CB78      BIT   7,B           Cím vizsgálata

  C097  28F5      JR    Z,0C08Eh      Ha van még => ugrás visz-

                                      sza

  C099  7C        LD    A,H           összeg vizsgálata

  C09A  B5        OR    L

  C09B  219CC1    LD    HL,0C19Ch     "INTERNAL CHECKSUM ERROR"

                                      szöveg címe

  C09E  011700    LD    BC,00017h     Hibaüzenet hossza 23 byte

  C0A1  2005      JR    NZ,0C0A8h     Ha az összeg nem 0, akkor

                                      ugrás a hibaüzenetet ki-

                                      író rutinba

 

  Ha  az  ellenőrző  összeg  0,  akkor a STATUS sorba kiírja az

  'EXOS 2.1         TESTING       ERROR'  szöveget, bár az 'ER-

  ROR' betűi nem látszanak, mivel azok háttérszínűek.

 

  C0A3  217AC1    LD    HL,0C17Ah     "EXOS 2.1         TESTING

                                             ERROR" szöveg címe

  C0A6  0E22      LD    C,022h        Szöveg hossza 34 byte

* C0A8  11BCBE    LD    DE,0BEBCh     Szöveg STATUS sorba

  C0AB  EDB0      LDIR                másolása

  C0AD  2805      JR    Z,0C0B4h      Ugrás, ha nincs hiba

* C0AF  3D        DEC   A             Hiba esetén keretszín

  C0B0  D381      OUT   (081h},A      villogtatása

  C0B2  18FB      JR    0C0AFh

 

Most következik a hibátlan RAM szegmensek táblázatának elkészítése. Első a 255-ös rendszerszegmens, melyet már ellenőrzött.

 

  C0B4  AF        XOR   A             =0 Fekete szín kódja A-ba

  C0B5  320BB9    LD    (0B90Bh),A    STATUS sor COL3 byte-ba

                                      fekete szín kódja kerül,

                                      így az 'ERROR' szöveg

                                      háttérszínű lesz

  C0B8  3EFF      LD    A,0FFh        A=255: rendszerszegmens

                                      száma

  C0BA  21D0AB    LD    HL,0ABD0h     Hibátlan RAM szegmensek

                                      táblázatának kezdőcíme

  C0BD  77        LD    (HL),A        Első a 255-ös rendszer-

                                      szegmens

  C0BE  229ABF    LD    (0BF9Ah),HL   Táblázat végcímének vál-

                                      tozóba történő letárolása

  C0C1  D9        EXX                 Vesszős regiszterek

  C0C2  110100    LD    DE,00001h     Ellenőrzés kezdőértékének

                                      beállítása

                                      E=1 egy szegmens hibátlan

                                          (rendszerszegmens)

                                      D=0 nem működő szegmensek

                                          száma

 

RAM-ok ellenőrzése. Első a 254-es számú, utolsó a 8-as, melyet ellenőrzéskor a P1-re ( 04000h-07FFFh ) lapoz be. Ha a RAM hibátlan, akkor felveszi a táblázatba.

 

* C0C5  3D        DEC   A             Szegmensszám csökkentése

  C0C6  D3B1      OUT   (0B1h),A      Ellenőrizendő szegmens

                                      P1-re belapozása

  C0C8  F5        PUSH  AF            Szegmensszám elmentése

  C0C9  210040    LD    HL,04000h     Ellenőrzés kezdőcíme

  C0CC  7E        LD    A,(HL)        A-ba RAM tartalma

  C0CD  2F        CPL                 Komplemens A-ba

  C0CE  77        LD    (HL),A        és RAM-ba

  C0CF  BE        CP    (HL)          összehasonlítás A-val

  C0D0  2014      JR    NZ,0C0E6h     Ugrás, ha nem egyezik

                                      (ROM vagy hibás RAM)

  C0D2  CDFEC1    CALL  0C1FEh        P1-en lévő RAM ellenőrzé-

                                      se és 0-val feltöltése

  C0D5  2807      JR    Z,0C0DEh      Ugrás, ha hibátlan a RAM

  C0D7  3E49      LD    A,049h        Színkód = 73 (RED)

  C0D9  320BB9    LD    (0B90Bh),A    STATUS sor COL3 byte-ba

                                      'ERROR' felirat láthatóvá

                                      tétele

  C0DC  1808      JR    0C0E6h        Tárolás átugrása

 

* C0DE  15        DEC   D             Nem működő szegmensek

                                      számát csökkenti

  C0DF  1C        INC   E             Hibátlan szegmensek szá-

                                      mának növelése

  C0E0  D9        EXX                 Vessző nélküli reg.-ek

  C0E1  2B        DEC   HL            Táblázat címének csökken-

                                      tése

  C0E2  DBB1      IN    A,(0B1h)      P1-en lévő szegmens

                                      száma A-ba, majd

  C0E4  77        LD    (HL),A        letárolása a táblázatba

                                      (használható a RAM)

  C0E5  D9        EXX                 Vesszős regiszterek

* C0E6  F1        POP   AF            Szegmensszám visszatölté-

                                      se a veremből A-ba

  C0E7  FE08      CP    008h          Szegmensszám vizsgálata

  C0E9  20DA      JR    NZ,0C0C5h     Ugrás vissza, ha 8-nál

                                      nagyobb

 

  A  rendszer  csak  akkor indul el, ha van legalább 2 hibátlan

  szegmens.  A  legkisebb sorszámút a P0-ra lapozza be. Ez lesz

  az USR_P0 (nullás lapszegmens).

 

  C0EB  ED53A3BF  LD    (0BFA3h),DE   Működő és nem működő RAM

                                      szegmensek számának letá-

                                      rolása

  C0EF  1D        DEC   E             Hibátlan szegmensek szá-

                                      mának csökkentése

  C0F0  28BD      JR    Z,0C0AFh      Ha csak 1 szegmens jó,

                                      akkor keret villogtatása

                                      (rendszer nem indul el)

  C0F2  1D        DEC   E             Hibátlan szegmensek szá-

                                      mának csökkentése

  C0F3  219FBF    LD    HL,0BF9Fh     0-ás lap és rendszer-

  C0F6  73        LD    (HL),E        szegmensen kívül hasz-

                                      nálható szegmensszám

                                      letárolása

  C0F7  2EA2      LD    L,0A2h        [HL=BFA2h] rendszer

  C0F9  34        INC   (HL)          részére kijelölt

                                      szegmensek számának

                                      növelése

  C0FA  D9        EXX                 Vessző nélküli regiszte-

                                      rek

  C0FB  7E        LD    A,(HL)        Legkisebb sorszámú

  C0FC  32FCBF    LD    (0BFFCh),A    szegmens lesz az USR_P0

 

  Most  következik  a  ROM-ok táblázatának elkészítése. Ehhez a

  ROM első 8 byte-jában az 'EXOS_ROM' feliratnak kell szerepel-

  nie. A 256 szegmens közül azonban csak az 0F0h,0E0h,...,020h,

  010h  és  a  7,6,5,4-es sorszámút ellenőrzi. (Ezért található

  általában  a  BASIC_UK  a 4-es és BASIC_BRD az 5-ös, a lemez-

  kezelő EXDOS_UK a 020h és EXDOS_BRD a 21h szegmenseken).

 

  C0FF  229CBF    LD    (0BF9Ch),HL   EXOS_ROM-ok táblázatának

                                      vége=RAM-ok táblázatának

                                      kezdőcíme, letárolása

  C102  AF        XOR   A             A=0 Vége jel

                                      Z=1 Ha a ROM kisebb szeg-

                                      mensszámon is megtalálha-

                                      tó, akkor nem veszi fel a

                                      táblázatba

  C103  CDE8C1    CALL  0C1E8h        (HL)=A és HL=HL-4

                                      Szegmensszám letárolása

                                      és a paraméterek helyének

                                      átlépése

  C106  3EF0      LD    A,0F0h        Első ellenőrizendő szeg-

                                      mens száma A-ba

* C108  CDB3C1    CALL  0C1B3h        'EXOS_ROM' szöveg elle-

                                      nőrzése az A-ban megadott

                                      szegmensen. Ha ROM, akkor

                                      a táblázatba beírja a

                                      szegmens számát

  C10B  D610      SUB   010h          A=A-16 Következő szeg-

                                      mensszám beállítása

                                      (F0h,E0h,..,10h)

  C10D  20F9      JR    NZ,0C108h     Ha még nem 0, akkor ugrás

                                      vissza

  C10F  3E08      LD    A,008h        A=8 Első ellenőrizendő

                                      szegmens száma+1 A-ba

* C111  3D        DEC   A             A=A-1 Következő szegmens-

                                      szám beállítása (7,6,5,4)

  C112  BF        CP    A             Z=1 Ha a ROM kisebb szeg-

                                      mensszámon is megtalálha-

                                      tó, akkor nem veszi fel a

                                      táblázatba

  C113  CDB3C1    CALL  0C1B3h        'EXOS_ROM' szöveg elle-

                                      nőrzése az A-ban megadott

                                      szegmensen. Ha új ROM,

                                      akkor táblázatba való

                                      felvétele

  C116  FE04      CP    004h          Szegmensszám ellenőrzése

  C118  20F7      JR    NZ,0C111h     Ugrás, ha még 4-nél na-

                                      gyobb

  C11A  3E01      LD    A,001h        A=1 Utolsó a ROM1

  C11C  CDE8C1    CALL  0C1E8h        (HL)=A és HL=HL-4

                                      Szegmensszám letárolása

                                      és a paraméterek helyének

                                      átlépése

  C11F  2297BF    LD    (0BF97h),HL   A táblázat kezdőcíme=

  C122  2295BF    LD    (0BF95h),HL   az eszközterület végé-

                                      nek címe

 

  A  most  következő rész 4 rendszerváltozót hoz létre és állít

  alapállapotba.

 

  C125  3E02      LD    A,002h        A=2 Alapérték

  C127  32E8BF    LD    (0BFE8h),A    (LV_TAPE)=2 40mV

  C12A  EEA5      XOR   0A5h          10100101b maszk

  C12C  327EBF    LD    (0BF7Eh),A    (BF7Eh)=A7h

  C12F  EEA8      XOR   0A8h          10101000b maszk

  C131  32D5BF    LD    (0BFD5h),A    (BAUD_SER)=0Fh Alapérték

                                      Átviteli sebesség

                                      9600 bit/sec

  C134  AF        XOR   A             A=0

  C135  3D        DEC   A             Z=0 'ROM1-es reset rutin

                                      kell' jelzése

                                      A=255 Alapérték

  C136  32E7BF    LD    (0BFE7h),A    (PROTECT)=255 Védett

* C139  0E10      LD    C,010h        Resetjelző beállítás.

                                      (Eszközök újraláncolása,

                                      a felhasználó eszközei

                                      megmaradnak)

 

Az USR_P0 változóban megadott szegmens P0-ra lapozása után a rutinokat és a készítők nevét RAM-ba másolja, majd verembe tölti az RST_ADDR változóban megadott értéket visszatérési címnek.

Ha a Z jelző értéke 1, akkor az RST 30h/00h (EXOS 0) rutint hívja a C-ben megadott resetjelzővel. Z=0 esetén a ROM1-en lévő inicializáló rutint hajtja végre.

 

* C13B  D9        EXX                 Vesszős regiszterek

  C13C  3AFCBF    LD    A,(0BFFCh)    USR_P0 változóban meg-

                                      adott adott szegmens

  C13F  D3B0      OUT   (0B0h},A      P0-ra belapozása

 

  A  kilapozott  szegmensen  lévő  rutint hívó szubrutint, és a

  készítők nevét RAM-ba másolja.

 

  C141  21AAC3    LD    HL,0C3AAh     Átmásolandó terület kez-

                                      dőcíme

  C144  1117B2    LD    DE,0B217h     Célcím 0B217h

  C147  013B00    LD    BC,0003Bh     Byte-ok száma 59

  C14A  EDB0      LDIR                RAM-ba másolás

 

  RST és visszatérési rutinok RAM-ba másolása

 

  C14C  113000    LD    DE,00030h     Célcím 30h

  C14F  0E2B      LD    C,02Bh        Byte-ok száma 43

  C151  EDB0      LDIR                RAM-ba másolás

 

  Visszatérési cím a RST_ADDR változóban megadott érték.

 

  C153  2AF8BF    LD    HL,(0BFF8h)   RST_ADDR változóban

                                      megadott érték

  C156  E5        PUSH  HL            verembe töltése

                                      visszatérési címnek

  C157  ED43F8BF  LD    (0BFF8h),BC   RST_ADDR=0 (cím törlése)

  C15B  3E80      LD    A,080h        A=128 'Át kell térni a

                                      rendszerveremtárra' jel-

                                      zése

  C15D  3279BF    LD    (0BF79h),A    Jelző letárolása

 

  Ha  Z=0,  akkor a ROM1-ben lévő inicializáló rutint hívja. Ez

  írja  ki  az  'ENTERPRISE' feliratot, ha nem törölt a kiírást

  engedélyező változó. Sorra meghívja a ROM-okat az 1-es hideg-

  indítás  akciókóddal,  amíg  valamelyik át nem veszi a vezér-

  lést.  Ha  egyik  sem vette át a vezérlést, akkor elindítja a

  beépített szövegszerkesztő (WP) programot.

  Ha  Z=1,  akkor  az  RST 30h/00 (EXOS 0) rutint hívja a C-ben

  megadott resetjelzővel.

 

  C160  3E06      LD    A,006h        ROM1-es műveleti kód

                                      (6-os => RESET)

  C162  C240CB    JP    NZ,0CB40h     Ha Z jelző 0, akkor ugrás

                                      a ROM1-et hívó rutinra

  C165  D9        EXX                 Vessző nélküli regiszte-

                                      rek

  Cl66  AF        XOR   A             A=0 műveleti kód (rend-

                                      szer újraindítása)

                                      Cy=0 'EXOS x rutin végre-

                                      hajtása' - jelzés

  C167  C34200    JP    00042h        Ugrás az EXOS x rutinba

 

Az A regiszterben lévő szám felső 4 bitjének hexadecimális karakterré átalakítása és letárolása a HL-ben megadott címre.

 

* C16A  07        RLCA                Az alsó 4 bit felső

  C16B  07        RLCA                4 bitbe léptetése és

  C16C  07        RLCA                a felső 4 bit alsó

  C16D  07        RLCA                4 bitbe léptetése

  C16E  F5        PUSH  AF            A elmentése a verembe

  C16F  E60F      AND   00Fh          Alsó 4 bit marad

                                      ( felsők türlése )

 

  ASCII kóddá átalakítás és letárolás

 

  C171  C690      ADD   A,090h        A=A+90h

  C173  27        DAA                 Decimális korrekció

  C174  CE40      ADC   A,040h        A=A+40h

  C176  27        DAA                 Decimális korrekció

  C177  77        LD    (HL),A        (HL)=A letárolás

  C178  F1        POP   AF            A visszatöltése a verem-

                                      ből

  C179  C9        RET

 

RAM teszt alatt kiírandó szöveg (ERROR betűk legfelső bitje beállított (b7=1), így a karakterek a COL0 és COL1 helyett a COL2 és COL3-ban megadott színekkel lesznek megjelenítve).

 

* C17A  45584F53 20322E31 20202020    'EXOS 2.1    '

  0186  20202020 54455354 494E4720    '    TESTING '

  C192  20202020 20C5D2D2 CFD2        '     ERROR'

 

Hibaüzenet szövege

 

* C19C  C9CED4C5 D2CEC1CC A0C3C8C5    'INTERNAL CHE'

  C1A8  C3CBD3D5 CDA0C5D2 D2CFD2      'CKSUM ERROR'

 

Szegmens elején lévő 'EXOS_ROM' szöveg ellen&rzése

        Be:       A-ban az ellenőrizendő szegmens száma

                  Z=1 esetén megnézi, hogy kisebb szegmens-

                      számon is megtalálható-e a ROM. Ha igen,

                      akkor nem írja be a táblázatba.

 

* C1B3  D3B1      OUT   (0B1h),A      Ellenőrizendő szegmens

                                      P1-re belapozása

  C1B5  F5        PUSH  AF            Szegmensszám és Z jelző

                                      verembe mentése

  C1B6  D9        EXX                 Vesszős regiszterek

  C1B7  210040    LD    HL,04000h     Kezdőcím

  C1BA  11EEC1    LD    DE,0C1EEh     'EXOS_ROM' szöveg címe

  C1BD  0608      LD    B,008h        Szöveg hossza 8 byte

* C1BF  1A        LD    A,(DE)        Szöveg ellenőrzése

  C1C0  BE        CP    (HL)

  C1C1  23        INC   HL            Mutatók növelése

  C1C2  13        INC   DE

  C1C3  201E      JR    NZ,0C1E3h     Visszatérés, ha van elté-

                                      rés

  C1C5  10F8      DJNZ  0C1BFh

  C1C7  F1        POP   AF            Szegmensszám és Z jelző

                                      visszatöltése

  C1C8  201D      JR    NZ,0C1E7h     Ha Z=0, ugrás letárolásra

  C1CA  F5        PUSH  AF            Szegmensszám elmentése

  C1CB  08        EX    AF,AF'

* C1CC  08        EX    AF,AF'        Szegmens száma A-ba

  C1CD  3D        DEC   A             Szegmensszám csökkentése

  C1CE  FE04      CP    004h          Szegmensszám vizsgálata

  C1D0  3814      JR    C,0C1E6h      Ugrás, ha 4-nél kisebb

                                      (letárolás)

 

  Első 64 byte-ot hasonlítja össze

 

  C1D2  D3B0      OUT   (0B0h),A      Belapozás P0-ra

  C1D4  ED62      SBC   HL,HL         HL=0

  C1D6  110040    LD    DE,04000h     DE=16384

  C1D9  42        LD    B,D           B=40h=64 Ellenőrizendő

                                      byte-ok száma

  C1DA  08        EX    AF,AF'        Szegmens számának elmen-

                                      tése

* C1DB  1A        LD    A,(DE)        P0 és P1 összehasonlí-

  C1DC  BE        CP    (HL)          tása

  C1DD  20ED      JR    NZ,0C1CCh     Ugrás, ha nem ugyanaz

                                      (következő szegmens elle-

                                      nőrzése)

  C1DF  23        INC   HL            Címek

  C1E0  13        INC   DE            növelése

  C1E1  10F8      DJNZ  0C1DBh        Ugrás vissza, összehason-

                                      lítás folytatása

* C1E3  F1        POP   AF            Szegmensszám visszatölté-

                                      se A-ba

  C1E4  D9        EXX                 Eredeti regiszterek

  C1E5  C9        RET

 

* C1E6  F1        POP   AF            Szegmensszám visszatölté-

                                      se A-ba

* C1E7  D9        EXX                 Eredeti regiszterek

  C1E8  77        LD    (HL),A        Szegmensszám letárolása

  C1E9  2B        DEC   HL            HL=HL-4

  C1EA  2B        DEC   HL            Táblázat következő

  C1EB  2B        DEC   HL            elemének címe HL-be

  C1EC  2B        DEC   HL

  C1ED  C9        RET

 

ROM-ok azonosításához ellenőrző szövegek

 

* C1EE  45584F53 5F524F4D             'EXOS_ROM'

 

* C1F6  54455354 5F524F4D             'TEST ROM'

 

P1-en  lévő  RAM  ellenőrzése és 0-val feltöltése.

        Eredmény: Z=1 lesz, ha hibátlan.

 

* C1FE  14        INC   D             Nem működő szegmensek

                                      számának növelése

  C1FF  DBB1      IN    A,(0B1h)      P1-en lévő szegmens száma

                                      A-ba

  C201  21D5BE    LD    HL,0BED5h     A vizsgálandó szegmens

  C204  CD6AC1    CALL  0C16Ah        számának kiírása a kép-

  C207  23        INC   HL            ernyő státuszsorába

  C208  CD6AC1    CALL  0C16Ah        hexadecimális alakban

  C20B  3209B9    LD    (0B909h),A    Szegmens száma, mint

                                      színkód a STATUS sor COL1

                                      byte-jába

  C20E  210040    LD    HL,04000h     Vizsgált szegmens P1-es

                                      kezdőcíme

  C211  0100C0    LD    BC,0C000h     ROM0 P3-as kezdőcíme

* C214  0A        LD    A,(BC}        Átmásolás P3-ról P1-re

  C215  77        LD    (HL),A

  C216  BE        CP    (HL)          Ellenőrzés

  C217  C0        RET   NZ            Hiba esetén (pl. ROM)

                                      visszatérés

  C218  2F        CPL                 Komplemens

  C219  77        LD    (HL),A        Letárolás

  C21A  23        INC   HL            Címek növelése

  C21B  03        INC   BC

  C21C  CB78      BIT   7,B           Cím vizsgálata

  C21E  20F4      JR    NZ,0C214h     Ugrás vissza, ha még

                                      nincs vége a lapnak

 

Visszafelé haladva 0-val tölti fel a RAM-ot és újra ellenőrzi byte-okat.

 

* C220  0B        DEC   BC            Címek csökkentése

  C221  2B        DEC   HL

  C222  CB74      BIT   6,H           Ellenőrzött byte-ok szá-

                                      mának vizsgálata

  C224  C8        RET   Z             Visszatérés, ha a teljes

                                      szegmens használható RAM-

                                      nak

  C225  0A        LD    A,(BC)

  C226  86        ADD   A,(HL)

  C227  3C        INC   A

  C228  77        LD    (HL),A        0-val feltöltés

  C229  C0        RET   NZ            Hibás RAM esetén vissza-

                                      térés

  C22A  18F4      JR    0C220h        Feltöltés folytatása

 

 

2. EXOS RUTINOK

 

 

BFxxh rendszerváltozók táblázata törléshez

 

        xx                            változó

 

* C22C  F2        DEFB  0F2h          BFF2h  FLAG_SOFT_IRQ

  C22D  E9        DEFB  0E9h          BFE9h  REM1

  C22E  EA        DEFB  0EAh          BFEAh  REM2

  C22F  DF        DEFB  0DFh          BFDFh  ST_FLAG

  C230  D8        DEFB  0D8h          BFD8h  NET_IRQ

  C231  D2        DEFB  0D2h          BFD2h  WAIT_SND

  C232  CD        DEFB  0CDh          BFCDh  STOP_IRQ

  C233  CA        DEFB  0CAh          BFCAh  TIMER

  C234  C9        DEFB  0C9h          BFC9h  DEF_CHAN

  C235  C8        DEFB  0C8h          BFC8h  DEF_TYPE

  C236  89        DEFB  089h          BF89h  Pufferigénylés

                                             jelző.

  C237  A5        DEFB  0A5h          BFA5h  Csatornaszám + 1

  C238  BC        DEFB  0BCh          BFBCh  Csatornalánc első

                                             elemét tartalmazó

                                             szegmens száma

 

  C239  00        DEFB  000h          Végejelző

 

Resetjelző b4=1 vagy b5=1 beállítás esetén itt lép be.

b4=1  felszabadítja  az összes csatorna RAM-ot és inicializálja

      az összes eszközt.

b5=1  hatása ugyanaz, mint a b4-es, de újraszerkeszti az összes

      beépített  és bővítő eszközt és ROM-ot. Az eszközszegmen-

      sek kijelölt állapota nem szűnik meg.

 

* C23A  F5        PUSH  AF            Resetjelző elmentése

* C23B  CD55C7    CALL  0C755h        Felszabadítja a kiutalt

                                      RAM szegmens-t

  C23E  20FB      JR    NZ,0C23Bh     Ugrás vissza, ha még nem

                                      végejel

  C240  212CC2    LD    HL,0C22Ch     Rendszerváltozók tábláza-

                                      tának kezdőcíme

  C243  AF        XOR   A             A-ba 0 töltése törléshez

  C244  11F3BF    LD    DE,0BFF3h     Első a PORTB5-ös változó

* C247  12        LD    (DE),A        Lenullázás

  C248  5E        LD    E,(HL)        Változó címe_low

  C249  23        INC   HL            Mutató növelése

  C24A  BB        CP    E             Cím vizsgálata

  C24B  20FA      JR    NZ,0C247h     Ugrás vissza, ha nem vég-

                                      jel

  C24D  D3B5      OUT   (0B5h),A      0 kiküldése

  C24F  D3B6      OUT   (0B6h),A

  C251  3D        DEC   A             A=255

  C252  32CEBF    LD    (0BFCEh),A    (KEY_IRQ)=255

  C255  32DABF    LD    (0BFDAh),A    (MATCH_NET)=255

  C258  32D9BF    LD    (0BFD9h),A    (CHAN_NET}=255

  C25B  2178BF    LD    HL,0BF78h     Változó címe

  C25E  7E        LD    A,(HL)        Jelző A-ba

  C25F  B7        OR    A             Vizsgálata

  C260  CCE2C2    CALL  Z,0C2E2h      Ha 0, akkor ROM-ok RAM

                                      igényeinek teljesítése

  C263  F1        POP   AF            Resetjelző visszatöltése

                                      A-ba

  C264  F281C2    JP    P,0C281h      Ugrás, ha a resetjelzőben

                                      b5=0 volt

 

  b5=1 esetén elkészíti az eszközláncot. Először a ROM0-ban lé-

  vő  eszközöket  láncolja be, majd az EXOS_ROM-ok táblázatában

  található ROM-okban szereplő eszközök következnek.

 

  C267  2A95BF    LD    HL,(0BF95h)   Eszközterület végcím

  C26A  2293BF    LD    (0BF93h),HL   kezd&címként való

                                      letárolása

  C26D  AF        XOR   A             A=0

  C26E  32BFBF    LD    (0BFBFh),A    =0 Eszközlánc törlése

  C271  2A97BF    LD    HL,(0BF97h)   ROM-ok táblázatának kez-

                                      dőcíme

* C274  E5        PUSH  HL            Verembe

  C275  CDA5C5    CALL  0C5A5h        A-ban megadott szegmens-

                                      számú ROM-ban lévő esz-

                                      közlánc kezdőcímének

                                      vizsgálata, ha nem 0,

                                      akkor beláncolás

  C278  El        POP   HL            Táblázat címének vissza-

                                      töltése HL-be

  C279  23        INC   HL            HL=HL+4

  C27A  23        INC   HL            Táblázat következő

  C27B  23        INC   HL            elemének címe HL-be

  C27C  23        INC   HL

  C27D  7E        LD    A,(HL)        ROM szegmensszámának

  C27E  B7        OR    A             vizsgálata

  C27F  20F3      JR    NZ,0C274h     Ugrás vissza, ha van még

                                      ROM

* C281  ED5B93BF  LD    DE,(0BF93h)   Csatornaterület végének

                                      címe DE-be

  C285  21BDBF    LD    HL,0BFBDh     Csatornalánc mutató bá-

                                      ziscíme

  C288  AF        XOR   A             CY=0

  C289  ED52      SBC   HL,DE

  C28B  22B4BF    LD    (0BFB4h),HL   Eredmény letárolása

  C28E  19        ADD   HL,DE         Cím visszaállítása

  C28F  CBF2      SET   6,D           Cím átalakítása

  C291  ED538DBF  LD (0BF8Dh),DE      Lánccím letárolása

  C295  CBBA      RES   7,1           DE-ben lévő cím P1-es

                                      címmé alakítása

  C297  3D        DEC   A             =255: Rendszerszegmens

  C298  D3B1      OUT   (0B1h),A      P1-re belapozása

  C29A  CD36C6    CALL  0C636h        DE-ben lévő lánccím HL

                                      általi címre letárolása

                                      új kezdőcímnek

  C29D  EB        EX    DE,HL         HL áttöltése DE-be

  C29E  1B        DEC   DE            -1 Cím csökkentése

  C29F  21DCC2    LD    HL,0C2DCh     Táblázat végének címe

  C2A2  010800    LD    BC,00008h     Hossza 8 byte

  C2A5  EDB8      LDDR                Átmásolás

  C2A7  EB        EX    DE,HL         DE-ben lévő cím áttöltése

                                      HL-be

  C2A8  CBB4      RES   6,H

  C2AA  2291BF    LD    (0BF91h),HL   EXOS-határvonal címének

                                      letárolása

  C2AD  11DDC2    LD    DE,0C2DDh     '[4]TAPE' szöveg címe

  C2B0  CDE8C7    CALL  0C7E8h        Alapeszköz nevének beál-

                                      lítása

  C2B3  3E14      LD    A,014h        00010100b alapérték

  C2B5  32C5BF    LD    (0BFC5h),A    IRQ_ENABLE_STATE B4h port

                                      értéke - a megszakítások

                                      engedélyezése/tiltása

  C2B8  D3B4      OUT   (0B4h),A      b4=1 video megszakítás

                                      b2=1 1Hz engedélyezése

  C2BA  21C0BF    LD    HL,0BFC0h     Eszközlánc címmutató

                                      báziscíme HL-be

* C2BD  CD47C6    CALL  0C647h        Láncolási cím HL-be,

                                      szegmens száma A-ba. Ha A

                                      nem 0, akkor P1-re bela-

                                      pozza

  C2C0  E5        PUSH  HL            Beolvasott cím elmentése

  C2C1  F5        PUSH  AF            Szegmens számának elmen-

                                      tése

  C2C2  3E0C      LD    A,00Ch        Eszközkezelő alprogram

                                      sorszáma (inicializálás)

  C2C4  C43EC5    CALL  NZ,0C53Eh     Ha nincs vége a láncnak,

                                      akkor alprogram hívása

  C2C7  F1        POP   AF            Szegmens számának vissza-

                                      töltése A-ba

  C2C8  El        POP   HL            Cím visszatöltése HL-be

  C2C9  D3B1      OUT   (0B1h),A      Szegmens P1-re belapozása

  C2CB  20F0      JR    NZ,0C2BDh     Ugrás vissza, ha nincs

                                      még vége az eszközláncnak

  C2CD  0E08      LD    C,008h        'inicializálás' akciókód

  C2CF  CDABC8    CALL  0C8ABh        Rendszerbővítők hívása

 

  .NOFN 'AZ ESZKÖZ NEM IGÉNYLI A HÍVÁST' - hibaüzenet

 

  VIDEO       Csatornaállapot beállítása

  SOUND       Karakter olvasása

              Blokk olvasása

              Csatornaállapot olvasása

              Csatornaállapot beállítása

 

  KEYBOARD    Karakter írása

              Blokk írása

              Csatornaállapot beállítása

  EDITOR      Csatornaállapot beállítása

 

* C2D2  3EE7      LD    A,0E7h        Hibaüzenet kódja

  C2D4  C9        RET

 

Alapértelmezésként használt 'TAPE' eszköz csatorna leírója

 

  C2D5  00        DEFB  000h

  C2D6  00        DEFB  000h

  C2D7  0C        DEFB  00Ch

  C2D8  00        DEFB  000h

  C2D9  0C        DEFB  00Ch

  C2DA  00        DEFB  000h

  C2DB  00        DEFB  000h

* C2DC  01        DEFB  001h

 

* C2DD  04        DEFB  004h          Szöveg hossza

  C2DE  54415045                      'TAPE'

 

ROM-ok RAM igényeinek teljesítése.

 

* C2E2  34        INC   (HL)          Jelző értékének növelése

  C2E3  2A9CBF    LD    HL,(0BF9Ch)   ROM-ok táblázatának vége

  C2E6  E5        PUSH  HL            Táblázat címe verembe

* C2E7  E1        POP   HL            Táblázat címe veremből

* C2E8  2B        DEC   HL

  C2E9  2B        DEC   HL            HL=HL-3

  C2EA  2B        DEC   HL            Paraméterek átlépése

* C2EB  2B        DEC   HL            HL=HL-1

  C2EC  7E        LD    A,(HL)        ROM szegmens száma A-ba

  C2ED  B7        OR    A             Szegmensszám vizsgálata

  C2EE  C8        RET   Z             Ha 0, akkor táblázat vé-

                                      ge, visszatérés

  C2EF  E5        PUSH  HL            Táblázat aktuális címének

                                      elmentése

  C2F0  0E07      LD    C,007h        'RAM kijelölés' akciókód-

                                      ja C-be

  C2F2  210AC0    LD    HL,0C00Ah     ROM-ok belépési pontja

  C2F5  CD17B2    CALL  0B217h        Rutin hívása

  C2F8  79        LD    A,C           Visszaküldött érték

  C2F9  B7        OR    A             vizsgálata

  C2FA  20EB      JR    NZ,0C2E7h     Ugrás, ha nem kell RAM

  C2FC  78        LD    A,B           RAM típusjelz& A-ba

  C2FD  42        LD    B,D           Szükséges byte-ok

  C2FE  4B        LD    C,E           száma

  C2FF  0F        RRCA                b1 Cy-be

  C300  F5        PUSH  AF            RAM típusjelző elmentése

  C301  3019      JR    NC,0C310h

 

  P2-es lapon lévő RAM-ra van szükség. Ilyenkor a rendszerszeg-

  mensen van a szabad terület.

 

  C303  2A95BF    LD    HL,(0BF95h)   ROM-ok RAM területének

                                      kezdőcíme HL-be

  C306  B7        OR    A             Cy=0

  C307  ED42      SBC   HL,BC         Szükséges byte-ok számá-

                                      nak levonása

  C309  3811      JR    C,0C31Ch      Ugrás, ha betelt a szeg-

                                      mens

  C30B  11E883    LD    DE,083E8h     Rendszer számára

  C30E  ED52      SBC   HL,DE         szükséges hely (03E8h)

                                      levonása

  C310  380A      JR    C,0C31Ch      Ugrás, ha betelt a szeg-

                                      mens

  C312  19        ADD   HL,DE         Eredeti cím visszaállítá-

                                      sa

  C313  2295BF    LD    (0BF95h),HL   RAM terület új kezdőcímé-

                                      nek letárolása

  C316  F1        POP   AF            RAM típusjelző visszatöl-

                                      tése

  C317  0F        RRCA                b1 Cy-be

  C318  3EFF      LD    A,0FFh        A=255: Rendszerszegmens

  C31A  1817      JR    0C333h

 

 

* C31C  F1        POP   AF            RAM típusjelző visszatöl-

                                      tése

  C31D  0F        RRCA                b1 Cy-be

  C31E  F5        PUSH  AF            RAM típusjelző elmentése

  C31F  3022      JR    NC,0C343h

 

  P1-es lapon lévő RAM-ra van szükség.

 

  C321  CD49C3    CALL  0C349h        BC-ben megadott RAM igény

                                      vizsgálata és lefoglalá-

                                      sa, ha lehet

  C324  201D      JR    NZ,0C343h     Ugrás, ha nincs elég hely

  C326  220340    LD    (04003h),HL   RAM szegmensen lévő sza-

                                      bad terület új végcíme

  C329  EB        EX    DE,HL         DE=HL

  C32A  210540    LD    HL,04005h     Jelzőbyte címe

  C32D  CBC6      SET   0,(HL)        Jelzőbyte beállítása

  C32F  DBB1      IN    A,(0B1h)      P1-en lévő szegmens száma

                                      A-ba

  C331  EB        EX    DE,HL         HL=DE

  C332  F1        POP   AF            RAM típusjelző visszatöl-

                                      tése

* C333  3004      JR    NC,0C339h

  C335  CBBC      RES   7,H           HL-ben lévő cím P1-es

  C337  CBF4      SET   6,H           címmé alakítása

* C339  EB        EX    DE,HL         DE-be terület címe

  C33A  E1        POP   HL            Táblázat címének HL-be

                                      visszatöltése

  C33B  2B        DEC   HL            Cím csökkentése

  C33C  77        LD    (HL),A        Szegmensszám letárolása

  C33D  2B        DEC   HL            Cím csökkentése

  C33E  72        LD    (HL),D        Terület címének

  C33F  2B        DEC   HL            letárolása

  C340  73        LD    (HL),E

  C341  18A8      JR    0C2EBh        Következő ROM RAM igényé-

                                      nek vizsgálata

 

 

* C343  F1        POP   AF            Regiszterek

  C344  E1        POP   HL            visszatöltése

  C345  36FF      LD    (HL),0FFh     Rendszerszegmens

  C347  18917     JR    0C2E8h        Következő ROM RAM igényé-

                                      nek teljesítése

 

BC regiszterben megadott (egy szegmensen lévő) RAM igény lefoglalása, ha lehet.

        Eredmény: Z=0 lesz, ha kevés a memória

 

* C349  B7        OR    A             A vizsgálata

  C34A  F5        PUSH  AF            A és a beállított jelzők

                                      elmentése

  C34B  2106C0    LD    HL,0C006h.    6 byte kell a szegmen-

  C34E  09        ADD   HL,BC         sen a rendszer részére

  C34F  3854      JR    C,0C3A5h      Verem ürítése és .NORAM

                                      'KEVÉS A MEMóRIA' - hiba-

                                      üzenet

  C351  2199BF    LD    HL,0BF99h     Szegmensszám mutató

  C354  DD210040  LD    IX,04000h     Utasítás átlépése

* C355  210040    LD    HL,04000h     Szegmensszám mutató

  C358  7E        LD    A,(HL)        Szegmens száma A-ba

  C359  B7        OR    A             Szegmensszám vizsgálata

  C35A  281C      JR    Z,0C378h      Ugrás, ha 0 (vége jel)

  C35C  D3B1      OUT   (0B1h),A      P1-re belapozás

  C35E  2A0340    LD    HL,(04003h)   Szabad terület vége

  C361  ED5B0140  LD    DE,(04001h)   Szabad terület kezdete

  C365  ED52      SBC   HL,DE         Szabad terület nagyságának

                                      kiszámítása

  C367  ED42      SBC   HL,BC         Szükséges hely levonása

  C369  38EA      JR    C,0C355h      Ha nincs elég hely a

                                      szegmensen, akkor a kö-

                                      vetkező szegmens vizsgá-

                                      lata

  C36B  F1        POP   AF            Jelzők visszatöltése

  C36C  F5        PUSH  AF            A és a jelzők elmentése

  C36D  202A      JR    NZ,0C399h     Ugrás, ha A-ban nem 0

                                      volt

  C36F  3A0540    LD    A,(04005h)    Jelzőbyte

  C372  CB4F      BIT   1,A           vizsgálata

  C374  20DF      JR    NZ,0C355h     Következő szegmensen lévő

                                      terület vizsgálata

  C376  1821      JR    0C399h        Szabad terület kezdőcímét

                                      HL-be tölti

 

* C378  3C        INC   A             Z=0 Eszköz részére - jel-

                                      zése

  C379  08        EX    AF,AF'        Jelzők cseréje

  C37A  E5        PUSH  HL            Regiszterek

  C37B  C5        PUSH  BC            elmentése

  C37C  CD0EC7    CALL  0C70Eh        EXOS 24 szegmens igény-

                                      lése (Z' típusjelző)

  C37F  59        LD    E,C           Szabad szegmens száma

                                      E-be

  C380  C1        POP   BC            Regiszterek

  C381  E1        POP   HL            visszatöltése

  C382  B7        OR    A             Állapotjelző vizsgálata

  C383  2020      JR    NZ,0C3A5h     Verem ürítése és .NORAM

                                      'KEVÉS A MEMÓRIA' - hiba-

                                      üzenet

  C385  73        LD    (HL),E        Szabad szegmens száma a

                                      betelt RAM első byte-ba

  C386  7B        LD    A,E           Szabad szegmensszám A-ba

  C387  D3B1      OUT   (0B1h),A      Belapozása P1-re

  C389  AF        XOR   A             A=0

  C38A  62        LD    H,D           EXOS határvonal címének

                                      felső byte-ja H-ba

  C38B  6F        LD    L,A           L=0 Cím alsó byte-jába 0

  C38C  77        LD    (HL),A        =0     Szegmensszám

  C38D  23        INC   HL                   törlése

  C38E  3607      LD    (HL),007h     =7     Szabad terület

  C390  23        INC   HL                   kezdőcímének

  C391  74        LD    (HL),H               letárolása

  C392  23        INC   HL                   (xx07h)

  C393  77        LD    (HL),A        =0     Szabad terület

  C394  23        INC   HL                   végcímének

  C395  3680      LD    (HL),080h     =80h   letárolása

  C397  23        INC   HL                   (8000h)

  C398  77        LD    (HL),A        =0 Jelző törlése

 

Z jelző értékétől függően HL-be tölti a szabad terület kezdőcímét.

 

* C399  F1        POP   AF            Jelző visszatöltése

  C39A  2A0140    LD    HL,(04001h)   RAM szegmensen lévő sza-

                                      badterület kezdőcíme

  C39D  C8        RET   Z             Visszatérés, ha Z=1

  C39E  2A0340    LD    H,(04003h)    RAM szegmensen lévő sza-

                                      bad terület végének címe

                                      HL-be

  C3A1  ED42      SBC   HL,BC         Szükséges terület nagysá-

                                      gának levonása

  C3A3  AF        XOR   A             A=0 'Nincs hiba' és

                                      Z=1 'van szabad memória'

                                      jelzése

  C3A4  C9        RET

 

Visszatérési cím törlése után NORAM hibaüzenet

 

* C3A5  E1        POP   HL            Verem ürítése

 

  .NORAM 'KEVÉS A MEMóRIA' hibaüzenet

 

  C3A6  3EF7      LD    A,0F7h        Hibaüzenet kódja

  C3A8  B7        OR    A             Z=0

  C3A9  C9        RET

 

B217h-ra kerülő 59 byte. Rutin + a készítők neve.

Kilapozott szegmensen lévő rutint hívó szubrutin.

        Be:       A-ban szegmens száma, ami P3-ra kerül

                  HL-ben rutin belépési címe

                  A többi regiszterben paraméter lehet

  Visszatéréskor  a ROM0-t P3-ra lapozza.

                  A-ha az eredményt teszi

 

* C3AA  D3B3      OUT   (0B3h),A      [B217h] Kívánt lap P3-ra

                                      lapozása

  C3AC  08        EX    AF,AF'        [B219h] A-ba paraméter

                                      értéke

  C3AD  CD25B2    CALL  0B225h        [B21Ah] JP (HL) ugrás a

                                      rutinba

  C3B0  08        EX    AF,AF'        [B21Dh] A'-be paraméter

  C3B1  AF        XOR   A             [B21Eh] ROM0 szegmens

  C3B2  D3B3      OUT   (0B3h),A      [B21Fh] Belapozása P3-ra

  C3B4  08        EX    AF,AF'        [B221h] A-ba paraméter

  C3B5  C9        RET                 [B222h] Visszatérés

 

A regiszterben megadott szegmens belapozása P3-ra, majd ugrás a HL-ben megadott címre.

 

* C3B6  D3B3      OUT   (0B3h),A      [B223h] P3-ra belapozás

  C3B8  E9        JP    (HL)          [B225h] Ugrás a rutinba

 

        Be:       L-be P2-re lapozandó szegmens száma

                  H-ba P3-ra lapozandó szegmens száma

 

* C3B9  7C        LD    A,H           [B226h] Szegmensszám A-ba

  C3BA  D3B3      OUT   (0B3h),A      [B227h] P3-ra belapozás

  C3BC  7D        LD    A,L           [B229h] P2-re kerülő

                                      szegmens száma A-ba

  C3BD  2A7CBF    LD    HL,(0BF7Ch)   [B22Ah] HL visszatöltése

                                      az ideiglenes tárolóból

  C3C0  C35100    JP    00051h        [B22Dh]

 

Készítők neve (A P2-re lapozott rendszerszegmens B230h-as címére kerül)

 

  C3C3  57726974 74656E20 62793AA0    'Written by: '

  C3CF  CDF2ECA0 C2D4A0CE CDD6A0C7    'Mrl BT NMV G'

  C3DB  CEC8A0C3 C7C5A0C1 C5CC        'NH CGE AEL'

 

30h-ra kerülő 43 byte

  RST 30h/x (EXOS x) hívás rutinja

 

  C3E5  F3        DI                  [0030h] Megszakítások le-

                                      tiltása

  C3E6  325A00    LD    (0005Ah),A    [0031h] A regiszter ere-

                                      deti értékének elmentése

  C3E9  B7        OR    A             [0034h] Cy=0 nem megsza-

                                      kítás kezelés - jelzése

  C3EA  E3        EX    (SP),HL       [0035h] Visszatérési cím

                                      HL-be, HL eredeti értéke

                                      verembe

  C3EB  1807      JR    0C3F4h        [0036h] (JR 3Fh)

 

38h-ra kerül az IM1 megszakítás rutinja

 

+ C3ED  F5        PUSH  AF            [0038h] A elmentése ve-

                                      rembe

  C3EE  37        SCF                 [0039h] Cy=1 IM1 megsza-

                                      kítás lekezelésének jel-

                                      zése

  C3EF  1809      JR    0C3FAh        [003Ah] (JR 45h)

 

3Ch-ra kerül a felhasználói szoftver megszakítást kezelő rutinba való ugrás (0 esetén nincs felhasználói rutin)

 

+ C3F1  C30000    JP    00000h

 

3Fh-ra kerül az RST 30h/x (EXOS x) rutin folytatása

  Műveleti kód A-ba töltése, visszatérési cím módosítása.

 

* C3F4  7E        LD    A,(HL)        [003Fh] Műveleti kód A-ba

  C3F5  23        INC   HL            [0040h] Visszatérési cím

                                      növelése

  C3F6  E3        EX    (SP),HL       [0041h] Új visszatérési

                                      cím verembe, HL eredeti

                                      értékének visszatöltése

 

42h-ra kerül az RST 30h/x (EXOS x) folytatása. Kód letárolása.

        Be:       A-ban műveleti kód.

                  Veremben visszatérési cím

 

+ C3F7  325900    LD    (00059h),A    [0042h] Műveleti kód le-

                                      tárolása

 

 

45h-ra kerül  CY=0 esetén EXOS x végrehajtása

              CY=1 esetén IM1 megszakítás lekezelése

 

* C3FA  DBB3      IN    A,(0B3h)      [0045h] P3-on lévő szeg-

                                      mens száma A-ba

  C3FC  325500    LD    (00055h),A    [0047h] Letárolás

  C3FF  3E00      LD    A,000h        [004Ah] ROM0

  C401  D3B3      OUT   (0B3h),A      [004Ch] P3-ra belapozása

  C403  C310C4    JP    0C410h        [004Eh] Ugrás a végrehaj-

                                      tó rutinra

 

51h-ra kerül visszatérés a hívó rutintól függően.

        Be:       A-ban P2-re lapozandó szegmens száma

 

+ C406  D3B2      OUT   (0B2h),A      [51h] A-ban megadott

                                      szegmens P2-re belapozása

  C408  3E00      LD    A,000h        [53h] 0054h a hiba kódját

                                      vagy P2-n lévő szegmens

                                      számát tartalmazza

+ C40A  00        NOP                 [55h]

+ C40B  00        NOP                 [56h]

  C40C  C9        RET                 [57h]

 

Következő byte - relatív ugrás esetén - az ugrás nagysága.

('JR 3Ch' ugrás a felhasználói szoftver megszakítást kezelő rutinba)

 

  C40D  E3        DEFB  0E3h          [58h]

 

RST 30h műveleti kódjának tárolója

 

+ C40E  00        DEFB  000h          [59h]

 

A regiszter értékének ideiglenes tárolója

 

+ C40F  00        DEFB  000h          [5Ah]

 

Cy=0  esetén RST 30h végrehajtó rutin

        Be:       55h címen az eredetileg P3-on lévő szegmens

                      száma

                  59h címen a műveleti kód

                  5Ah címen eredetileg A-ban lévő érték

                      (csatorna száma)

                  veremben az új visszatérési cím

Cy=1  esetén IM1 megszakítást lekezelő rutin

        Be:       verem tetején AF regiszterpár értéke

                  alatta visszatérési cím

 

* C410  DBB2      IN    A,(0B2h)      P2-n lévő szegmens száma

                                      A-ba

  C412  325400    LD    (00054h),A    Letárolása visszalapozás-

                                      hoz

  C415  3EFF      LD    A,0FFh        255: Rendszerszegmens

  C417  D3B2      OUT   (0B2h),A      P2-re belapozása

  C419  227CBF    LD    (0BF7Ch),HL   HL regiszter értékének

                                      elmentése

  C41C  2179BF    LD    HL,0BF79h     Hívásjelzőt tartalmazó

                                      változó címe

  C41F  7E        LD    A,(HL)        Értéke A-ba

  C420  CB7F      BIT   7,A           Legfelső bit vizsgálata

  C422  CBFE      SET   7,(HL)        b7=1 'Rendszerveremtárra

                                      át kell térni' - jelzése

  C424  2007      JR    NZ,0C42Dh     Ugrás, ha nem kell áttér-

                                      ni a rendszerveremtárra

  C426  ED737ABF  LD    (0BF7Ah),SP   Veremmutató aktuális ér-

                                      tékének elmentése

  C42A  3117B2    LD    SP,0B217h     Új ideiglenes rendszerve-

                                      remcím beállítása

* C42D F5 PUSH AF Hívásjelz& értéke verembe C42E 17 Mi b7 törlése, jelzbk C42F B7 OR A beállítása C430 1F RRA Cy=0 EXOS x hívás Cy=1 IMI megszakítás ! lekezelése ! ~ Z=0 Eszközhívás C431 08 EX AF'AF' A' verembe T

C432 F5 PUSH AF ~ töltése C433 2AFEBF LD HL°(0BFFEh) USR P2 és P3 változó T - C436 E5 PUSH HL ~ értéke verembe C437 2A5400 LD HL,(00054h) Eredetileg P2-n lév6 C43A 22FEBF LD (0BFFEh),HL ! szegmens siáma ! ~ USR_P2 változóba C43D 21FDBF LD HL,0BFFDh USR_P1 változó címe C440 7E LD A,(HL) ' értéke A-ba ~ , C441 F5 PUSH AF ~ majd verembe C442 DBB1 IN A, (0B1h) Jelenleg P1-en lév~. ~ szegmens száma C444 77 LD (HL),A J USR_P1 változóba C445 2A7CBF LD HL,(0BF7Ch) HL regiszter eredeti értékének visszatöltése C448 E5 PUSH HL Majd verembe mentése C449 FDE5 PUSH IY T Indexregiszterek C44B DDE5 PUSH IX J verembe C44D 3EC9 LD A,0C9h 'RET' kódja C44F 325700 LD (00057h),A Letárolás C452 67 LD H,) H-ba utasításkód áttölté se C453 08 EX AF,AF' Hívásjelz~k A-ba C414 385C JR . C,0C4B2h Ha Cy=1, ugrás az IM1 megszakítást kezelU' ru tinra C456 3A5A00 LD A' 0005Ah Eredetileg A-ban lév~. ! érték (csatornaszám) C459 08 EX AF,AF' l A'-be töltése 2 8

 

 

C45A 3A5900 LD A,(00059h) Múveleti kód A-ba C45D FE10 CP 010h Kód vizsgálata C45F CAF9C8 JP Z,0C8F9h EXOS 16 - EXOS változó olvasása(0), írása(1), átállítása(2) C462 37 SCF Cy=1 C463 CD5600 CALL 00056h Megszakítást kezelA-fel használói rutin hívása, ha van C466 CD80C5 CALL 0C580h EXOS hívások szétválasz tása Ide térnek vissza az RST 30h/x (EXOS x) rutinok. Szegmensek visszaállítása, megszakítások lekezelése. * C469 F3 DI Megszakítások letiltása C46A 26B7 LD H,0B7h 'OR A' utasítás kódja a hibakód vizsgálatához * C46C 6F LD L,A Hibaüzenet kódja L-be Ide tér vissza az IM1 megszakítást kezel~ program. (Ilyenkor H-ban a 'POP AF' kódja található.) * C46D 225400 LD (00054h},HL Hibakód és utasításkód letárolása C470 DDE1 POP IX T Indexregiszterek C472 IDEI POP IY ~ visszatöltése C474 El POP HL HL verembe mentett ér tékének visszatöltése, i majd ideiglenes táro C475 227CBF LD (0BF7Ch>,HL ~ lóba letárolása C478 21FDBF LD HL,0BFFDh USR_P1 változó címe C47B 7E LD A (HL) Szegmensszám A-ba és ' T C47C D3B1 OUT (0B1h),A ~ P1-re belapozása C47E F1 POP AF USR_P1 változó értéke ve rembM A-ba C47F 77 LD (HL),A Szegmensszám letárolása C480 2AFEBF LD HL,(0BFFEh) USR_P2 és P3 változó ` értéke HL-be, majd ^ C483 E3 EX (SP)' ! HL / verembe' elmentett ~ érték HL-be C484 22FEBF LD (0BFFEh),HL HL letárolása USR_P2 és P3 változóba C487 E1 POP HL USR P2 és P3 változó el _ mentett értéke HL-be C488 F1 POP AF Eredetileg A-ban lév~} C489 08 EX AF,AF^ ~ érték (csatornaszám) ] A'-be töltése C48A F1 POP AF Hívásje= A-ba C48B 2022 JR NZ,0C4AFh Eszközhívás esetén visz - szatér és

 

 

A következ~- rész biztosítja, hogy szoftver megszakítás esetén (FLAG_SOFT_IRQ változóban lévU' kód, és SOFT_ISR változóban lév~> cím nem 0) visszatérés el~}tt végrehajtsa a felhasználó szoftver meqszakítást kezel~ rutinját.

C48D 3279BF LD (0BF79h),A Hívásjelz~ letárolása C490 3AF2BF LD A,(0BFF2h) h-1-H3_SOFT_IRQ Szoftver | ' megszakítás kódjának C493 B7 OR A J vizsgálata C494 2815 JR Z,0C4ABh Ugrás, ha A=0 <nincs meg szakítás} C496 32C7BF LD (0BFC7h},A CODE_SOFT_IRQ-ba kód le tárolása C499 AF XOR A A=0 C49A 32F2BF LD (0BFF2h),A =0 FLAG_SOFT_IRQ törlése C49D E5 FIAM HL P2-re és P3-ra lapozandó szegmens számának elmen tése verembe C49E 2A3D00 LD HL,(0003Dh) SOFT_ISR Felhasználói szoftver megszakítást C4A1 7C LD A,H ! kezel& rutin címének C4A2 B5 OR L ] vizsgálata C4A3 E1 POP HL Szegmensszámok visszatöl tése belapozáshoz C4A4 2805 JR Z,0C4ABh Ugrás, ha (SOFT_ISR}=0, ekkor nincs felhasználói megszakítást kezel~- rutin C4A6 3E18 LD A,018h `JR' kódjának letáro C4A8 325700 LD (00057h),A lása, így QR 3Ch'-val ~ ugrik a felhasználói J rutinba ugró utasításra • C4AB ED7B7ABF LD SP,(0BF7Ah) Veremmutató eredeti érté kének visszaállítása

Visszatérés - P2-re és P3-ra a HL-ben megadott sorszámú szegmensek belapozása, felhasználói szoftver megszakítást kezelU' rutin végrehajtása, ha van.

• C4AF C326B2 JP 0B226h

!Ml megszakítást lekezelv rutin Be: veremben AF, BF79h változó értéke (hívápjelW) és F, átalakított hívásjelz& és F, USR_P2 és P3 értéke, USR_P1 értéke és F, HL,IY,IX regiszterek értéke,, • C4B2 C5 PUS!f BC T BC és DE regiszterek C4B3 D5 PUSH DE ~ elmentése a verembe C4B4 D9 EXX . Vessz 's. regiszterek C4B5 C5 PUSH BC BC', DE`, HL' elC4B6 D5 PUSH DE ' mentése a verembe C ! ~n~ ~~ p//~~ m HL J 4B7 E5 PUSH

30

 

 

 

 

 

 

 

 

 

 

 

 

Készült a Somogy Megyei Nyomdaipari

Vállalat kaposvári üzemében -- 191688

Megjelent 54 (A/5) ív terjedelemben

Felelős vezető: Mike Ferenc Igazgató