ASMON (SIMON)
File-név: ASMON13.EXT / ASMON13.ROM Program neve: AsMon 1.3 |
1985 - SemiSoft Z80 Assembly fejlesztő rendszer |
File-név: ASMON15.EXT / ASMON15M.ROM / ASMEN15.ROM Program neve: AsMon 1.5 |
1985 - SemiSoft Z80 Assembly fejlesztő rendszer |
File-név: TASMON15.ROM Program neve: Turbo AsMon 1.5 |
1989 - SemiSoft Z80 Assembly fejlesztő rendszer |
Henrik Bendtsen programja az egyik legismertebb Assembler /
monitor / debugger program. Ismertsége, elterjedtsége elsősorban annak volt
köszönhető, hogy az egyik legrégebbi ilyen jellegű program. (Bár Hisoft Gen-Mon régebbi, az nem igazán biztosít komfortos munkát... Mondhatni igen fapados.)
A program 1.3-as változatát a gép fogalmazásának idején a Centrum áruházakban
meg lehetett vásárolni 1298 Forintért. A program mint "igásló" került
be a programot használók emlékezetébe, mivel sokmindent tud, de az lassan
és nem feltétlenül tökéletesen. (A későbbi magyar fejlesztések - mint pl. a FENASS,
HEASS- sokkal gyorsabb, kényelmesebb editorral rendelkeztek,
és a fordítás is lényegesen gyorsabb volt rajtuk.) Szerencsére a szerző kiadta a program forrásnyelvi listáját, így az 1.3-as változatot
továbbfejlesztették melyben
megpróbálták (több-kevesebb sikerrel) kijavítani a programban szereplő hibákat.
A programnak így háromféle változata létezik, de magyarországi forgalmazásban
csak az 1.3-as szerepelt. Mivel a 3 változat gyakorlatilag ugyanannak a programnak
a továbbfejlesztése, az egyes változatok nagyon hasonlítanak egymásra, így azokat
tárgyalhatjuk "egy kalap alatt", kitérve az egyes változatok közötti
különbségre.
AsMon 1.3
|
AsMen 1.5
|
Turbo AsMon 1.5
|
A program 3 részből áll. Tartalmaz egy monitor / debugger,
egy editor és egy makroassembler alprogramot. A program 1.3-as változata 6-os
formátumú (abszolút rendszerbővítő), az 1.5-ös változatok ROM-file formátumban
terjedtek, előkerült ugyan (utólag) betölthető változatban is. A program tartalmazza a VAR nevű bővítést is. Ezzel EXOS változók
irhatők/olvashatók. Aktivizálása a:
VARn,x
utasítással történik. "n" az EXOS változó száma, "x" az
új érték. Ha az "x" hiányzik, változó írás nem történik. Ha az "x"
helyett a "T" betű kerül beírásra, az EXOS változó átbillentése történik.
Minden esetben kiíródik a "Current value:" üzenet, és a változó új
értéke. Ha nem létezik ilyen EXOS változó, a "No such variable" hibaüzenet
íródik ki. Példa a VAR használatára:
:VAR27,255
(nem kell space!) a BORDER színe a 255 lesz.
A VAR bármely olyan programból hívható, amely parancsfüzért tud körbeadni.
A program indítása után a monitor rész Jelentkezik be. A képernyő alsó soraiban a regiszterlista látható. Mindegyik regiszterhez (kivéve az AF regisztert) memóriadump tartozik. (Memóriadump: a memóriatartalom számok formájában, általában ASCII alakban is.) Ez a regiszter értékénél kisebb címen kezdődik, a regiszter értékét két nyíl mutatja. A háttér regiszterkészlet használatakor a nyilak mellett egy "ALT REGS" üzenet látható. Az AF regiszternél a dump helyett a jelzőbitek vannak feltüntetve.
A képernyő felső harmadában további információk láthatóak, attól függően, melyik változatot használjuk. Valamennyi változatban láthatóak a következő információk: |
Az 1.5-ös változatokban a fentieken túl megjelenik a képernyőn
a program összes paraméterének az állapota is. (Editor options - a szerkesztő
beállításai, Disassemble options - a disassembler beállításai, Assemble
options - az assembler beállításai, PRINTER options - a nyomtató
beállításai).
A monitor üzemmódjait billentyű lenyomásával lehet elérni (nem kell utána ENTER).
Az alkalmazott számrendszert a CTRL+F8 billentyű lenyomásával lehet decimálisról
hexadecimálisra (és fordítva) váltani. Az addig beirt számok átíródnak a másik
számrendszerre.
Az editor
A program egyik alprogramja az editor (szerkesztő). Ide "E" paranccsal
lehet átlépni. Ekkor a program átvált 80 karakteres üzemmódba. Itt folyamatosan
szerkeszthető az assembly nyelvű forrásprogram. Az ENTER leütése a kurzor
mögötti sorokat lejjebb mozgatja és beszúr egy üres sort.
Az ALT+DEL letörli az adott sort, a többit előremozgatja. A SHIFT
+ DEL törli a sort, de az üres sor megmarad. A ERASE billentyű nem
a megszokott módon működik: törli a balra lévő karaktert, a kurzor balra mozog,
de a kurzortól jobbra lévő szöveget nem "húzza be", hanem a törlés
helyén szóköz marad.
A SHIFT + INS egy új sort szúr be a kurzor pozíciójába.
ALT+JOY FEL a szöveg legtetejére, ALT+JOY LE a szöveg legvégére
mozgatja a kurzort. A SHIFT + fel egy oldallal felfelé, a SHIFT +
le egy oldallal lefelé lapozza a képernyőt.
A funkcióbillentyűkkel lehet szerkesztési üzemmódokat választani. Ekkor egy
kis menüt ír ki, ebből a JOY-Jal lehet kijelölni a kívántat. Ezek a következők:
F1: | |
Find string: | A beírt szöveget keresi. A keresést a kurzor pozíciójától kezdi, és a szöveg végéig keres. |
Find &repl: | Szintén megkeresi a megadott szöveget, de megadhatjuk, mire cseréljük ki a keresett szöveget. |
Cont search: | Folytat/a a keresést az eredeti szöveggel. Ha a szerkesztett forráskódban a keresett szöveg többször is előfordulhat, ezzel folytathatjuk a keresést. |
Repl string: | A megtalált szöveget helyettesíti. |
Repl&cont: | Helyettesit és folytatja a keresést. |
F2: | |
Set tabmark: | Tabulátor beállítása. |
Res tabmark: | Tabulátor törlése. |
Clr tabmark: | A tabulátorok törlése. |
Stand tabm.: | Tabulátorok felfüggesztése. |
F3: | |
Mark start: | Blokk kezdete a kurzor helyén lesz. |
Mark end: | Blokk vége a kurzor helyén lesz. |
Copy block: | Az így kijelölt blokkot a kurzor helyére beszúrja. |
Del block: | A kijelölt blokkot törli. |
Prnt block: | A blokkot nyomtatóra küldi. |
Clr marks.: | Blokk kezdetének és végének törlése. |
F4: | |
Load flle: | Forrásszöveg betöltése (a meglévő programhoz fűzi). |
Save file: | A forrásszöveg kimentése. |
Save block: | A blokk kimentése. |
Kill text: | A forrásszöveg törlése (megerősítést vár: Delete text (y/n)). |
Turbo save: | A forrásszöveget tömörítve és sokkal gyorsabban menti ki, így a betöltés is gyorsabb. Csak az 1.5-ös verziókban! |
T. save bl | A forrásszöveg kijelölt blokkját menthetjük el tömörített formában. Csak az 1.5-ös verziókban! |
F6: | |
Text: | A forrásszöveg hosszának kiírása. |
Free: | A szabad memória nagyságának kiírása. |
F7: | |
Help: | A szerkesztő funkciók kiírása. |
F8: | |
Visszatér a monitorhoz. |
Az assembler
A szerkesztővel megírt forrásszöveget a futtatás előtt le kell fordítani. Ezt
monitor üzemmódból az "A" billentyűvel lehet elkezdeni. Ekkor az assembler
elemzi a szöveget, megpróbál végrehajtható kódot készíteni. Ezt két menetben
(PASS-ban) végzi. Az első menetben a szimbólumokat gyűjti ki egy táblázatba,
mindegyiknek megfeleltet egy értéket. A második menetben az így felállított
táblázat alapján teljesen lefordítja a forrásszöveget. Az assembler számára
az utasítást nem szabad a sor elején kezdeni, mert így szimbólumként értelmezi.
A szimbólum és az utasítások között SPACE vagy : kell, hogy álljon.
A megjegyzéseket ; után kell beírni. Az assemblerben a számok a következők
lehetnek: decimálisak (a végükön D), hexadecimálisak (a végükön H betű, csak
számmal kezdődhetnek), oktálisak (a végükön O betű), binárisak (a végükön B
betű). Ha egy szám végén nincs betű, akkor az alapértelmezés szerinti számrendszerben
próbálja értelmezni. Idézőjelek vagy aposztrófok közé zárt karakter (az értéke
a betű ASCII. kódja lesz), szimbólumok (szimbólum nem lehet regiszternév, feltételnév,
pl. NZ, BC, R, stb.), a $ karakter (a címszámláló fordítás közbeni aktuális
értéke).
A számokból matematikai műveletek is alkothatók. Ezek:
X + Y | összeadás |
X - Y | kivonás |
X * Y | szorzás |
X / Y | osztás |
X MOD Y | maradékfüggvény (X - INT(X / Y)) |
X SHR Y | X Y bittel jobbra rotálódik |
X SHL Y | X Y bittel balra rotálódik |
X AND Y | bináris "X és Y" művelet |
X OR Y | bináris "X vagy Y" művelet |
X XOR Y | bináris "X kizáró vagy Y" |
NOT X | egyes komplemens képzés (a biteket negálja) |
-A | kettes komplemens képzés |
LOW X | X alacsonyabb byte-ja |
HIGH X | X magasabb byte-ja |
Relációk:
X < Y, X > Y, X = Y, X <= Y, X >= Y, X<>Y
Kiértékelésnél prioritást is figyelembe vesz. (A műveleteket fontosságuk alapján hajtja végre.) A műveletekben zárójelek is alkalmazhatók. (Óvatosan kelt velük bánni, mivel a Z80 assembly-ben a zárójelek használva vannak!) Az assembler a normál Z80 utasításkészleten felül jónéhány direktívát is ismer . Támogatja a makrók feldolgozását, feltételes fordítást és beillesztést is lehetővé tesz.
Általános direktívák: (nem Z80 kódok, a fordítást vezérlik!):
ORG nn | A fordítási cím nn lesz, vagyis a program erre a címre töltve lesz működőképes. Ezzel kell a programot kezdeni. |
.PHASE nn |
nn címtől kezd el fordítani úgy, hogy közben az aktuális
fordítási számláló is növekszik. Hasznos olyan programoknál, amelyek olyan
szubrutint tartalmaznak, amelyek nem a betöltési címen futnak. Például:
egy ROM-ban futó program olyan alprogramot tartalmaz, amely később megváltozik.
Mivel a ROM-ban nem lehet felülírni a programot, ezért ki kell másolni
a RAM-ba. Viszont a RAM címe nem egyezik a ROM címével, ezért ezt a szubrutint
a RAM címére kell fordítani. Ekkor lehet alkalmazni a PHASE utasítást.
Az object kód betöltésekor az object kód az új helyre fog töltődni tehát,
nem célszerű ilyenkor használni. |
.DEPHASE | A fordítási számláló visszanyeri aktuálisértékét. |
END | Lezárja a forrást (a további sorokat figyelmen kívül hagyja) |
EXOS n | 0F7H,n byte-oknak felel meg (RST,30H,DEFB n) |
DEFB nn |
számot kiértékeli, 1 byte-ba sűríti és így tárolja. n
helyett több szám is állhat, vesszővel elválasztva. n lehet karaktersorozat
is, ekkor karakterenként kerül tárolásra. |
DB n | ld. DEFB |
DEFW un | Hasonló a DEFB-hez, de itt 2 byte-os szavak kerülnek tárolásra. |
DW nn | ld. DEFW |
DEFM "string" | A string karakterenként kerül tárolásra. |
DEFS nn | nn darab byte-ot üresen hagy. |
DS nn | ld. DEFS |
EQU nn | A címke helyén álló bármilyen szimbólum értéke nn lesz. |
INCLUDE név | Megkeresi a "név" nevű programot, blokkonként lefordítja és a főprogramba illeszti. |
Feltételes fordítás:
A fordítás során egyes programrészleteket bizonyos feltételtől függően ki lehet
hagyni, míg másokat le lehet fordítani, a BASIC IF,ELSE,ENDIF szerkezethez hasonlóan.
IF kif |
Ha a "kif" kifejezés igaz (értéke nem 0),
akkor az utasítások1 lesz lefordítva, míg ha hamis (értéke 0) akkor az
utasítások2. Az ENDIF lezárja a utasitások2 blokkot, az ezután következő
utasításokat mindig lefordítja. Utasítások1,2 több sorból is állhat. Megengedett
a feltételek egymásba ágyazása (max. 255)
|
IFT | Ugyanaz, mint az IF |
IFF | Hasonló az IF-hez, de itt az első blokk a feltétel hamissága esetén fordítódik le. |
IF1 | Az első menetben igaz az értéke, a 2. menetben hamis. |
IF2 |
A 2. menetben igaz, az elsőben hamis. Igen hasznos
nagy tömegű adat esetén, amiket nem kell kétszer fordítani, így gyorsul
a fordítás. (Ekkor az adatok után nem állhat címke!) |
A feltételek listázásakor kétféleképpen viselkedik a fordító: csak azt listázza ki, ami lefordításra került; mindkettőt kilistázza, de csak ahhoz ír kódokat, amit lefordított. Ezt a "List conditions YES/NO" opcióval lehet beállítani. A YES esetén mindent listáz, a NO esetén csak a lefordításra kerülőt. Ezt fordítás közben is lehet állítani direktívák segítségével:
.SFCOND | A feltételek listázását kikapcsolja (csak a lefordított utasításokat listázza) |
.LFCOND | A feltételek listázását bekapcsolja (a feltételes utasításokat is listázza) |
.TFCOND | Átkapcsolja a feltételek listázását (YES-ről NO-ra és viszont) |
Makró feldolgozás:
A makrók olyan névvel ellátott programrészletek, amelyekre később a nevükkel
hivatkozunk. Fordításkor az assembler amikor egy nem felismerhető utasítást
talál megpróbálja előkeresni a makró táblázatból. Ha itt sem találja, csak akkor
ad hibaüzenetet. Ebből következik, hogy makró névként nem használható normál
Z80 utasításnév, vagy direktíva. Makrót olyan programrészleteknél célszerű használni,
amik a programban sokszor előfordulnak, de bizonyos szempontok miatt (gyorsaság,
stb.) nem ajánlott szubrutint csinálni. A makrók ezenkívül még egyéb lehetőséget
is biztosítanak. A makrókat a szimbólumhoz hasonlóan kell definiálni:
név MACRO p1,p2 | Létrehoz egy "név" nevű makródefiníciót, az utána következő
sorokat nem fordítja le közvetlenül, hanem eltárolja a makró táblázatban.
A makrók definiálása tehát önmagában még ne eredményez semmiféle kódot.
Az így definiált makróra később a nevével hivatkozunk. p1 és p2 a híváskor
megadandó paraméterek. Ezek formális paraméterek, (nem címkék!) csak
a makrón belül van szerepük. Számuk tetszőleges lehet. Az itt felsorolt
paraméterek helyére fordítás közben az assembler a hívás helyéről olvas
paramétereket.
Figyelem! Az ASMON-ban van egy hiba: a MACRO direktívát tartalmazó sor végére nem szabad kommentet (megjegyzést) tenni, mert az ASMON ezt nem hajlandó elfogadni! |
||||||||
ENDM | Lezárja a makródefiníciót. Hasonló az END-hez, de itt csak a makró törzs záródik le, a fordítás folytatódik. | ||||||||
EXITM |
Hasonló az ENDM-hez, de míg az ENDM csak a blokk végén
állhat, az EXITM máshol is előfordulhat (a makrón belül). Így lehet például
feltételes makrókat csinálni. |
Fordítás közben nem a makró neve listázódik, hanem a makróból előállított szöveg. Egy példa:
TOLT | MACRO LD LD LD LDIR ENDM |
P1,P2,P3 HL,P1 DE,P2 BC,P3 |
Fordításkor erre a definícióra pl. a TOLT100,200,100 utasítással hivatkozunk. A kifejtés során az assembler ebből az utasításból ezt a programot fordítja le:
LD LD LD LDIR |
HL,100 DE,200 BC,100 |
Vagyis létrehoztunk egy utasítást, amely a megadott három címtől függő helyről a megadott címre, megadott mennyiségei adatot másol. A paraméterek helyén regiszterneveket is megadhatunk. A fordítás során listázáskor a kiírás formátumát is változtatni tudjuk. Erre direktívák szolgálnak. Általában a "." karakterrel kezdődő direktívák nem szólnak bele a lefordított kódba, csak a lista formátumát módosítják. Ezek:
.LIST |
Bekapcsolja a listázást. Ekkor a fordítási lista a
kővetkező alakban íródik ki: Fordítási cím, a lefordított kód (object),
a forrásszöveg. Bekapcsolt nyomtató esetén a printerre is kiíródik a lista.
|
.XLIST | Kikapcsolja a fordítási lista írását. |
.PRINTX string |
A "string" szöveget beírja a fordítási listába.
Ha a "string" első karaktere a "%" Jel, akkor az utána
álló szöveget kifejezésként értékeli ki és a számot írja a listába. |
.COMMENT ch |
A "ch" karaktert , keresi a következő sorokban,
és amíg meg nem találja, addig nem fordítja a szöveget, csak kiírja. |
TITLE string |
Nem ponttal kezdődik! Nyomtatónál a fejlécbe ezt a szöveget
Írja ki. Nyomtatásnál minden lap tetejére fejlécet ír. |
.RADIX n |
Az alapértelmezés szerinti számrendszer alapja n lesz.
Azokat a számokat, amelyeknek a végén nincs azonosító betű, ilyen számrendszerben
értékeli ki. |
Relokálható file-ok készítése ASMON-nal:
Mindenféle híresztelés ellenére tud korrekt relokálható fájlokat készíteni!!!
Csak a direktívák megfelelő használatát kell ismerni:
.SETRTP n |
futási lap beállítása n-re. Ez akkor kell, ha a program
valamely része a végrehajtáskor nem azon a lapon fog futni ahol a program.
Például egy EXOS bővítő átlapozza magát az 1. lapra és ott folytatja működését,
ekkor az egyes lapon futó szakasz elé kell egy .SETRTP 1 a helyes relokáció
érdekében.
|
.RESRTP | futási lap visszaállítása. Mikor az előző bővítő visszalapozza magát. |
.INIOFS |
a 2-es típusú fájlok inicializálási eltolás beállítására
szolgálna, de: TUDJA VALAKI, hogy milyen operandus kellene neki??? |
.ASEG | a következő utasításban szereplő 16 bites érték abszolút szónak kezelendő. |
.CSEG | a következő utasításban szereplő 16 bites érték áthelyezhető szónak kezelendő. |
A "következő utasítások" listája:
Példa a program átírására:
Eredeti: | Relokálható: |
LD A,255 LD BC,10 LD DE,TEXT CALL KIIR JP 100H |
LD A,255 .ASEG LD BC,10 .CSEG LD DE,TEXT .CSEG CALL KIIR .ASEG JP 100H |
Ha egy 6-os fejléccel fordított rendszerbővítőt betöltünk, az lefoglal a gép memóriájából 16 Kilobájtot. A relokálható fájl csak annyi helyet foglal, amennyire szüksége van. És még valami: a relokálható fájlokat nehezebb visszafejteni.
A Monitor:
A debugger viszonylag sokfajta lehetőséggel rendelkezik: itt végezhetjük
a program fordítását, lépésenkénti végrehajtását, futtatását: kezelhetjük a
portokat, vájkálhatunk a tárban stb. A fő feladata tehát, hogy segítsen programunkat
futtatható formába önteni, a hibákat kibogarászni (nem véletlenül hívják debugger-nek,
a "bug" ugyanis bogarat jelent).
Az ASMON összes parancsa a megfelelő billentyű leütésével aktivizálható. A parancsok
listáját a H (Help, segítség) billentyű lenyomásával kapuk meg. A parancsok
paraméterként számokat és szövegeket is várhatnak. A számokat hexadecimális
vagy decimális formában adhatjuk meg, a számrendszerek között a CTRL+F8 billentyűkkel
válthatunk. Ez a billentyűkombináció egyébként a szükséges helyeken mindig működik,
ugyanúgy, mint az [ESC], amellyel bármilyen helyzetből, bármelyik helyről visszaléphetünk
a parancssorba. Sok opció alapértelmezéssel rendelkezik, így ha az ott szereplő
érték számunkra megfelelő, akkor nincs más dolgunk, mint hogy az ENTER-t leüssük.
A (Assemble)
Az editor segítségével megírt forrásszöveget lefordítja, a meneteket Pass1,
Pass2 felirattal jelzi. Az elkövetett hibákat számolja. Csak "No error"
üzenet esetén keletkezik hibátlan kód. Opciói beállíthatók (ld. később).
B (Breakpoints)
2 db. töréspont beállítása. Futáskor a program erre a címre érve visszatér az
monitorba, a regisztertartalmak megőrződnek. Ezen a címen lévő byte-ot a debugger
lecseréli egy 0E7H kódra (RST 20H), így ilyen utasítás használata nem ajánlott.
C (Copy memory)
A Start: címtől End: végcímig tartó memóriablokkot a Destination: címre másolja.
(Lehet átfedés is.)
D (Dump memory)
Start: címtől a memória tartalom listázása CP/M formátumban: tárcím, 8 byte
hexa alakban, 8 byte ASCII formában, a 7. bit nélkül.
E (Edit source)
Belépés az ASMON editorába.
F (Fill memory)
A Start: címen kezdődő. End: címen végződő blokk feltöltése Value: értékű byte-tal.
G (Go -CALL PC)
PC értékére ugrás a B-vel megadott töréspontokkal. PC értéke a végrehajtás előtt
módosítható (Start:).
H (HELP function)
Segítség kiírása.
I (Set func key)
Funkció billentyűk definiálása. Key number: billentyű száma; Key string: idézőjelek
közé tett szó. (Hasonló a formátum a DEFB utasításhoz). Igaz, az editorba való
belépéskor a funkcióbillentyűk programozása törlődik, de a SHIFT-el együtt lenyomott
funkcióbillentyűk jelentése az editorban és az editorból való kilépés után is
megmarad. Ezen billentyűk számai 11h-tól 18h-ig terjednek.
Akár "billentyű makrókat" is írhatunk az egyparaméteres ASMON parancsokhoz.
Tegyük fel, hogy gyakran van szükségünk az 1000h címtől a listázásra. Nos nyomjuk
le az I-t, adjuk meg a 11-et (ez jelenti a SHIFT+F1-et), majd írjuk be "L1000".
(Az idézőjeleket is be kell gépelni, különben az ASMON a HEX ERROR hibaüzenetet
küldi.) Ezek után a listázáshoz elegendő a SHIFT+F1-et és az ENTER-t lenyomnunk.
J (Swap registers)
Felcseréli a regiszterkészletet.
K (Read source)
Beolvas az editor szövegmezejébe egy forrásszöveget.
L (Disassemble)
Disassemblál ja a Start: kezdőcímű területet. Opciói beállíthatók.
M (Modify memory)
Start: értékétől memóriatartalom módosítása. Először dumpot csinál az éppen
felülírható byte-ot a kurzor jelzi. ALT+F8 leütésére a kurzor az ASCII dumpra
megy át, itt karakteres formában lehet módosítani.
N (Number cruncher)
A Value: kérdésre irt stringet értelmezi úgy, mint az assembler függvény kiértékelője.
Itt azonban ha egy szám végén nincs semmi, akkor az nem decimális, hanem hexadecimális
lesz. Az eredményt kiírja: 16-os rendszerben (Hexadecimal value) 10-es rendszerben
(Decimal value) 2-es rendszerben (Binary value) ASCII karakterekként (először
a magasabbik byte ! Alphanumeric value:).
O (Output port)
A Port: számú perifériára küldi a Value: értékét. (OUT utasítás)
P (Printer ON/OFF)
A printert be / kikapcsolja.
Q (Query port)
A Port: számú periféria értékét kiírja (Port value is:)
R (Read BIN file)
A Start: címen kezdődő és End: címen végződő blokkba betölti a File name: nevű
file-t. Ha ez rövidebb mint a blokk, End of file üzenetet kapunk, és a file
végcíme kiíródik.
S (Save BIN file)
A Start: címen és az End: címen végződő blokkot File name: néven kimenti.
T (Trace memory)
PC értékétől Steps: darab program lépést tesz. Közben látható az éppen végrehajtott
utasítás és a címe.
U (Untrace)
Ugyanaz mint az előző, csak közben nem látszik semmi.
V (View status)
Megjeleníti a status információkat. (Z80-as lapok tartalma, szegmens információk:
Free segment(s): üres szegmensek száma. Working segment(s): a munkaszegmensek
száma. Defective segment(s): A hibás szegmensek száma. Total RAM segment(s):
Az összes RAM szegmensek száma. Az 1.5-ös verziók a program paramétereit is
megjelenítik. A program indulásakor is ez a lap jelenik meg.
W (Write source)
File name: néven kimenti a forrásszöveget.
X (eXamine register)
A Registerpair: promptra írt regiszterbe Value: promptra beírt értéket tölti.
Y (Options Disas)
A disassembler opciók beállítása.
Z (Options Assemble)
Az assembler opciók beállítása.
Egy futtatni kívánt program fordítása előtt be kell állítani az opciókat:
[ (Options printer)
Printer opciók:
\ (Options Editor)
Editor opciók:
] (Load module)
a "File name:" kérésre megadott nevű EXOS rendszerbővítő betöltése.
@ (Symbol table)
Kiírja a szimbólumtáblát "szimbólum fordítási értéke" formában. A
szimbólumokat betűrendben írja ki.
= (Find string)
Start: címtől keresi a Search:-re megadott mintát. A minta lehet: számok vesszővel
elválasztva (lehet 16 bites is!), idézőjelek közé zárt karaktersorozat, valamint
ezek kombinációja.
: (EXOS string)
string : A stringet command stringként értelmezi. Azaz parancs küldése az EXOS-nak.
A következő funkciók az 1.5-ös változatokban érhetők el:
CTRL + A (Restart AsMon)
Az AsMon újraindítása.
CTRL + E (Errors)
Lekérdezhetjük a program hibaüzeneteit a kódjuk szerint.
CTRL + G (GEN txt to AsMon)
Hisoft GEN formátumú forráskód-file konvertálása AsMon formátumba.
CTRL + I (Intelligent Save)
A forrásszöveget és a hozzá tartozó fordítási beállításokat is elmenti. Csak az 1.5-ös verziókban!
CTRL + K (Kill text)
A szerkesztés alatt álló forráskód törlése. Szándékunkat meg kell erősíteni.
CTRL + L (Char. designer)
A megadott ASCII kódú karakter átdefiniálása. A Kurzort a beépített botkormánnyal
mozgathatjuk. Egy pontot megváltoztatni a SPACE megnyomásával lehet. Az ENTER
megnyomásával befejezhetjük a szerkesztést.
CTRL + N (Dump to file)
A Start címtől az END címig terjedő memóriaterületről dumpot menthetünk a megadott
nevű file-ba.
CTRL + O (MON txt to AsMon)
Hisoft MON formátumú forráskód-file konvertálása AsMon formátumba.
S (Turbo txt Save)
CTRL + T (text to GEN)
A forráskód mentése Hisoft GEN formátumban.
Az assembler hibaüzenetei:
ZozoSoft javítása
Az 1.5-ös változatokban van egy hiba, ami EXOS 0 funkcióhívásnál (reset) fagyást tud okozni. A hibát Puskás Zsolt követte el, amikor a Gyányi Sanyi gyorstesztjét beépítette az eredeti ASMON ROM üres területére. Ebben a nehézség az, hogy az EXOS-nál kétféle ROM kezdet lehet, ami nem kompatibilis egymással:
Nem gondolták az Intelligent Software-nál, hogy kellhet majd mindkét funkció is egyazon ROM-ban... Ráadásul az ASMON INC / DEC-cel vált szegmensszámot, nem XOR-al, így nem cserélhetőek fel a szegmensei. Viszont hely a második szegmensben volt. Így azt a megoldást választotta, hogy a ROM elejei lettek megcserélve, majd az ott belépő program átlapozza magát a másik szegmensre, a TEST ROM programmal nincs is gond, mert az DI alatt fut.
Az EXOS ROM belépési program így néz ki az átvariálás után:
C00A FFF0 |
DB B2 08 |
IN A,(B2) EX AF,AF' |
Itt már látható is a hiba: ideiglenesen kilapozza a rendszerszegmenst a második lapról, pedig ilyenkor oda mutat a veremmutató, így ha ezen pár pillanatban fut be a megszakítás, kész a fagyás! Bármikor okozhat fagyást, amikor körbe vannak hívva az EXOS ROM-ok.
A hibát okozó lapozás amúgy teljesen felesleges, nem kell elugrani azért a 3-as lapról, hogy kicseréljük az ott futó program alatt a szegmenst.
Íme a javítás:
C00A FFEB |
C3 EB FF DB B3 |
JP FFEB IN A,(B3) |
Mint látható, a JP-re való ugrás helyett akár ugorhatunk egyből a célba is mindezzel spóroltunk pár mikroszekundum végrehajtási időt is.
Maga a Turbo ASMON-ba rakott gyorsteszt is módosítva lett, hogy EXOS 2.0-val is kompatibilis legyen. A teszt lemegy a cartridge-ba is RAM-ot keresni, így egy kétfoglalatos cartridge egyik foglalatába 32K SRAM-ot téve készíthető RAM bővítés EP64-hez. Javítás közben derült ki, hogy ez a gyorsteszt is figyel egy billentyűt: az S billentyűt lenyomva az eredeti EXOS teszt fut le.
A módosításokat az ASMON15M.ROM változat tartalmazza.