FENOMASS
Ez fenomenális!

File-név: FENAS.EXT
Program neve: FENOMASS 1.2
Moonlight & Timelord- 1992
Editor monitor és assembler

Bevezetésként ismerkedjünk meg a szerzőkkel és a program nevének ismertetésével, mivel sok találgatásra adhat okot. F.E. = Fast Editor, NOM = a monitor szó rövidítésének visszafelé történő írása, és végül az ASS = assembler szó rövidítés. Kicsit bonyolult a név, mi is sokat gondolkodtunk rajta. A szerzők: Richter István (TIMELORD), és Richter Tamás (MOONLIGHT). Ennyi bevezető után nézzük mit is tud a FENOMASS.
Hatos fejlécű abszolút rendszerbővítő, igaz már elkészült a ROM-ba égetett változat is. Kinézetre nagyon hasonlít az eddig elterjedt Asmon-, Simon monitor-assembler programokhoz. Gyorsaságban és kezelhetőségben azonban felülmúlja azokat és bizonyos funkciókban az eddig tapasztalt hibákat sem követi el. Szinte minden funkció ki lett bővítve valami plusz szolgáltatással. Ami nagyon jellemző: kiválóan támogatja a memória használatát, főleg a bővítettét. A program a 0-ás lapon fut, így tehát a felső 3 lap szabadon használható.
Most pedig röviden ismertetjük a három fő programrészt:

Monitor
A program indítása utána monitor rész jelentkezik be. A képernyő alsó sorában a regiszter-lista látható. Mindegyik regiszterhez (kivéve az AF regisztert) memóriadump tartozik. Ez a regiszter értékénél kisebb címen kezdődik, a regiszter értékénél kisebb címen kezdődik, a regiszter értékét két nyíl mutatja. A AF regiszternél a dump helyett a jelzőbitek vannak feltüntetve. A képernyő felső részén információs üzenetek láthatóak, a belapozott szegmensekről, a rendszerben lévő szabad, működő, hibás szegmensekről. A regiszterek felett látható a parancs sor, ebben a sorban adhatjuk mi a parancsainkat.
A 'H' billentyűvel megjelennek a főbb menüpontok, a Shift-H lenyomására pedig újabb parancsokat nézhetünk meg. Az összes Asmon monitor funkció megtalálható, valahogy kibővítve, például van külön szöveg-Dump, a monitorba az ALT karakterek is közvetlen írhatók. Új funkciók: DEFB-Block, illetve kód visszafejtés rendesen címkézve forráskódnak. Szegmenst lehet foglalni perifériának, és a felhasználónak. Ez főleg a forráskód megvédésére szolgál. Beállítható egy felhasználói LPT NICK kezdőcíme, és bármikor megnézhető. Ez főleg TRACE-üzemmódnál hasznos. A TRACE üzemmód is ismer pár plusz szolgáltatást: bármikor megnézhetők, beállíthatók a regiszterek, egy CALL utasítást végre is hajthatunk vagy bele is léphetünk, vagy ha ciklust futtatunk beállíthatjuk a Break Point-ot és gyors TRACE-ra kapcsolunk, akkor visszatér a ciklus végén és nem kell perceket várni a ciklus futtatására. A parancsokat a hozzá tartozó billentyű lenyomásával kezdeményezhetjük:

Az összes üzemmódból vissza lehet lépni a monitorhoz az ESC billentyű lenyomásával. A program 6-os fejlécű rendszerbővítő, betöltéskor az EXOS 2 szegmenst foglal le a számára. A programot a ":FENAS", ":FENA", ":FEN", ":FE" hívásokkal lehet indítani. A program inicializáláskor az első szegmens tartalmát átmásolja a PAGE0-ántalálható szegmensre, amit lefoglal 100H-3FFFH-ig. Továbbá az FD szegmenst használja képernyőmemóriának és LPT-nek. Szöveglapoknak az EXOS-tól igényel 3 szegmenst. A B1, B2, B3-as port szabadon lapozható futtatható, ezenkívül használja még a töréspontok visszatéréséhez az RSZ0-áz. Nem írja felül sem az EXOS megszakítást, sem az FF szegmenst.

EDITOR
A képkezelés a többi szövegszerkesztőkhöz képest sokkal gyorsabb és ismer pár plusz szolgáltatást is. Van ki-be kapcsolható automatikus tabulátor pozícióba állás, insert üzemmód, valamint következő tabulátor pozícióig törlés, beszúrás, stb. Folyamatosan jelzi az épp szerkesztés alatt lévő forráslista hosszát sorokban és bájtokban. Egyszerre több (max. 48 Kb-os) forráskód szerkeszthető. A funkciók: FIND, TAB, FILE, BLOCK.

Find:
Lehet vele stringet címkeként, vagy csak simán keresni, helyettesíteni és az esetleges fordítási hibákat is megkeresi, valamint megadott sorra mehetünk.

Tab:
Szokásos funkciók: törlés, beállítás és alapba állítás.

File:
Betölthetőek Asmon, Simon, WP, Asmen-turbo illetve Intelligent Save formátumú fájlok. Ha Intelligent mentésű fájlt tölt, akkor a következő mentést is így fogja elvégezni. Itt még bővebb információt kaphatunk a szövegről, valamint törölhetjük azt.

Block:
Sajnos ez a funkció még nem működik. Ez sajnos elég nagy hiányosság, mivel ha blokkot akarunk törölni, másolni, kénytelenek vagyunk visszatérni más szerkesztőkhöz, ez pedig elég nehézkes és időigényes dolog.

A kurzormozgatást segítő parancsok:

SHIFT+DEL - sor törlés
ALT+DEL - sor törlése + soremelés
SHIFT+INS - sor beszúrása
ALT+INS - INSERT mód be-ki kapcsolása
CTRL+DEL - Egy tabulátorral töröl
CTRL+INS - egy tabulátorral arrébb tól
TAB - kurzor mozgatása a következő tabulátor pozícióba
ALT+TAB - speciális TAB be-ki kapcsolása
A menük eléréséhez elég a megfelelő funkció billentyű lenyomása, és utána a JOY-t mozgatva lehet választani, vagy pedig a megfelelő funkcióbillentyű lenyomása egyből kiválasztja és végrehajtja. Az EDITOR kijelzi, hány bájtos a szöveg, melyik sorba, oszlopba tart a szerkesztés.

Assembler
A fordító is megérdemli a gyors jelzőt, mivel az eddig ismert fordítókat messze felülmúlja és nem csak sebességben! A fordítási opciókat a forrásszövegben állíthatjuk be (Var, Load, Org, Phase.) Így fordítás közben is változtathatjuk a fordítás módját (fordíthatunk memóriába illetve háttértárolóra, különböző fejlécekkel).
Ismer ezenkívül még IF blokkokat valamint For-Next ciklusokat. Lehetőség van még a szimból-tábla helyének megadására, vagy a szöveg mögött, vagy külön helyen a memóriában akár be nem lapozott szegmensre is. A fordító ezenkívül még máshol a memóriában lévő forrásszöveget is hozzáfordít az aktuális fordítási kódhoz, ezenkívül INCLUDE-olhatunk is, illetve adatállományt MERGE paranccsal illeszthetünk a kódba. Ezenkívül még feltölthetjük a kódot DEFF-el illetve DEFC-vel. Sajnos makrókat nem kezel, illetve megadott értékekkel, szavakkal, a For-Next ciklusok használatával félig meddig kiküszöbölhető, de ez még nem tökéletes megoldás. A program relatív adatállományt sem tud létrehozni.

A fordító ismeri az összes Z80 utasítást, beleértve az XL, XH, YL, és YH-val való műveleteket is. Az utasításokat sorszám nélkül kell beírni. A sor első pozíciójában kezdődő szöveget szimbólumnak (címkéknek) tekinti. Címke nem kezdődhet számmal, nem lehet regiszterre illetve feltételre utaló sem (pl. BC, NC) A pontal kezdődő címkét lokális változónak tekinti.
Az utasítások számértékű operandusai megadhatók:

Operandusokban bizonyos műveleteket is végrehajt:

A fordító saját utasításokat is ismer:

VAR N,sztring:

ORG NN
A címszámláló NN értéket vesz fel. Figyelem, nem úgy kezeli le, mint az ASMON, ASMEN, mert ide tölti a lefordított kódot.

.PHASE NN
ideiglenesen NN értékre állítja a címszámlálót

.DEPHASE
Visszaállítja a címszámlálót, úgy, hogy az elmentetthez hozzáadja a közben lefordított kód hosszát.

LOAD NN
NN címre tölti a lefordított kódot

NN értéke 0 szegmens esetén
4000H-FFFFH
  1 szegmens esetén
0-3FFFH
  2 szegmens esetén
0-7FFFH
  3 szegmens esetén
0-BFFFH

A program támogatja a memórialapozást is:

SEGMENS N,N,N
Ezekre a szegmensekre tölti a kódot

WORKSEGMENS N,N,N
Munkaterület. A fordító ezekre a lapokra gyűjti ki a szimbólumokat. Érdemes a forrásszöveg elején kiadni, mert az utasítás előtt definiált címkék elvesznek.

PAGE N,N,N
Ezeken a lapokon folytatja a forrásszöveg értelmezését. Fontos, hogy az első szegmens elején már értelmezhető szöveg legyen. "END" utasításra visszatér az eredeti szöveghez és ott folytatja a fordítást. Nem egymásba ágyazható!

INCLUDE name
A NAME nevű file-t beolvassa és lefordítva a programba illesztti. Nem egymásba ágyazható!

MERGE name
A NAME nevű file-t hozzáfűzi a programhoz. INCLUDE file-ban nem használható.

EQU
Szimbólum EQU NN: szimbólumnak NN értéket ad

.SET szimbólum,NN
Új értéket ad a szimbólumnak

.PRINTX SZTRING
Kiírja a képernyőre a sztringet, illetve értéket. A "%" jel utáni részt értéknek tekinti, addig amíg a kalkulátor értelmezni tudja. A fent maradó részt sztringként kezeli.

DEFB (DB) N,N,N,N,N,"SZTRING" vagy 'STRING'
1 byte-os értékként kezeli az operandusokat

DEFW (DW) NN,NN,NN,NN
2 byte-os értékként kezeli az operandusokat

DEFC (DC) N,NN,NN,N,N,NN
Ha az operandus relatív értéke kevesebb mint 256 akkor 1 byte-os értékként kezeli, ha nem akkor 2 byte-os értékként kezeli. Használatával vigyázni kell, mert hiba esetén általában mindig 1 byte-ot foglal le! (Pl: DC 255 = 1 byte, DC -1 = 1 byte, DC FFFFH = 2 byte, DC 4000H = 2 BYTE)

DEFM (DM) "SZTRING"
A karaktersorozat kódjait elhelyezi a programban

DEFS (DS) NN
NN helyet hagy a programban

DEFF (DF) NN,N,N,N,N,"SZTRING"
NN-szer fordítja le az 1. vessző utáni részt a DEFB szabályai szerint.

EXOS N
Tulajdonképpen az
RST 30H
DEFB N
Fordítódik le.

Vannak a fordítás menetét vezérlő utasítások is:

IF KIFEJEZES
  1 RUTIN Ha igaz az állítás
ELSE
  2 RUTIN ha hamis az állítás
ENDIF

IFT KIFEJEZÉS - Ha igaz az állítás
IFF KIFEJEZÉS - Ha hamis az állítás
IF1 - Ha a fordítás első menete folyik
IF2 - Ha a fordítás második menete folyik

.COMMENT karakter
Addig nem fordítja a forrásszöveget, amíg az adott karakterhez nem ér.

FOR NN
  RUTIN
NEXT

NN-szer befordítja forrásszövegből a rutint. Nem egymásba ágyazható!

.RADIX N
Alapértelmezésű számrendszer alapja. N értéke 2-től 31-ig lehet. Továbbá megadhatók a fontosabb számrendszerek sztringként is:
2-es:"BIN", 8-as:"OCT", 10-es:"DEC", 16-os:"HEX"

END
Forrásprogram vége.

Az ESC billentyűvel meg lehet szakítani a fordítás menetét. Hibákra különböző szövegekkel figyelmeztet. A könnyebb javíthatóság végett beszúr a szövegbe hibakaraktereket, amiket a szerkesztő F1-F4 billentyűkre megkeres. Túl sok hiba esetén (30 beszúrás) megszakítja a fordítás menetét.

A program az FD video-szegmenst és még két szabad RAM-szegmenst foglal le magának, amit nem ajánlatos felülírni. Mint eddig kiderült a FENOMASS elég jól kihasználja a memóriát és mindent elég gyorsan és kezelhetően végez. Mivel ezt a szerzők maguknak, saját ízlés és kezelhetőség kedvéért írtak, igaz nem hibátlanul, de ha valaki megtanulja kezelni és kicsit igazodik a programhoz, rögtön rájön, hogy ez szinte a legjobb Assembler-Monitor-Editor program a hibái ellenére is. A szerzők még egy bővebb dokumentum fájlt is írtak a programhoz amely nagyon részletesen leírja, hogy mit és hogyan érhetünk el a programban.