Narsil č. 10

Genst 2 (1.část)

↑

KAPITOLA 1

ÚVOD

VŽDYCKY DĚLEJ BACK-UP

Před samotným používáním DevpacST by sis měl udělat záložní kopii originálních disků a uložit si ji na nějaké bezpečné místo (nejlepší je to někde blízko popelnic :-). Jelikož není použita žádná kopírovací ochrana, tak je samotné backupování jednoduchou záležitostí, díky níž se vyhneš jakýmkoliv potížím. Disk může být backupován užitím Desktopu, nebo jakékoli kopírovací utility.

VÝVOJOVÝ CYKLUS

Účelem DevpacST je umožnit ti vkládat program v asembleru, asemblovat ho do strojového kódu a odlaďovat dle libosti, když to nefunguje (a věřte tomu, že to bude fungovat vždy až úplně naposled :-). V závislosti na tvé aplikaci můžeš také užívat linker ke spojení jednotlivých modulů kódu, dokonce je zde možnost připojení linkových souborů z vyšších programovacích jazyků. Samozřejmě, nejrychlejší vývojový cyklus je ten, kdy se ti podaří program napsat a úspešně rozjet. A na to byl právě DevpacST vytvořen. Jeho mottem je být rychlý a výkonný, jak je to jen možné.

DEVPAC SOUHRN DISKŮ

PROGRAMY

GENST2.PRG GEM obrazovkový editor a asembler

MONST2.PRG GEMový debugger

MONST2.TOS TOSový debugger

GENST2.TTP TTP asembler

AMONST2.PRG auto-resident debugger

CHECKST.PRG diagnostický program

LINKST.TTP linker pro GST objektové soubory

NOTRACE.PRG trace vyjímka vypnuta

MENU2ASM.TTP menu compiler

TEXTOVÉ SOUBORY

README.S poslední verze detailů o DevpacST

DEMO.S velmi jednoduchý TOSový program užitý pro vysvětlení

GEMTEST.S jednoduchý GEM demo program

DESKACC.S příklad ACC programu

GEMMACRO.S makra for AES/VDI interface

AESLIB.S AES library, zdroje

VDILIB.S VDI library, zdroje

NOTRACE.S zdroják k NOTRACE.PRG

MENUTEST.S příklad GEM programu užívajícího menu

MENUTEST.MDF příklad definičního souboru menu

MAKEGEM.S vytváří GEMLIB

GEMLIB.LNK linkovací kontrolní soubor pro GEMLIB

BINARNÍ SOUBORY

GEMLIB.BIN AES & VDI library

ADRESÁŕE

OLDGEM updateované GEM příklady z GenST 1

JAK POUŽÍVAT MANUÁL

Tento manuál se nepokouší učit asembler Motoroly 68000, její programování, ani nedává k dispozici žádné detaily k jednotlivým příkazům (Seriál o Motorole je v Narsilu 2-9). V knize budou popsány všechny aspekty používaní tohoto jazyka a na závěr budou v Apendixech uvedeny technické aspekty Atari ST, ale pozor, nejedná se zde o přesný technický popis tohoto stroje.

Manuál je vyložen v pěti kapitolách. Jsou to: tento úvod, kapitola o screen editoru, kapitola o macro asembleru, kapitola o debuggeru, a kapitola o linkeru. Jako přídavek je k dispozici osm Appendixů, které rozebírají další rozličné informace. Na konci této kapitoly nalezneš jednoduchého průvodce, který by ti měl umožnit obeznámení s hlavními částmi programu.

ZKUŠENÝ UŽIVATEL

Jestli jsi dostatečně znalý v programování asembleru na 68000, ale až doteď jsi DevpacST nikdy nepoužíval, mohu tě potěšit, že zde existuje velmi rychlá a jednoduchá cesta zasemblovaní programu:

Nahrej GENST2.PRG, stiskni Alr-L a vyber soubor, který chceš nahrát do editoru. Stiskni Alt-A a vyber tebou požadované volby. Jestliže si přeješ generovat spustitelný kód, klikni na button MEMORY, čímž zvýšíš podstatně rychlost asemblovaní. Stiskem RETURN začně asembler pracovat. Jeho činnost můžeš pozastavit stiskem Alt-L a opět uvést v činnost Alt-Q. Každá chyba, jež se v programu vyskytne, bude uložena do vnitřní paměti jazyka a po návratu do editoru mezi nimi budeš moci poskakovat stiskem Alt-J.

Spustit asemblerový kód (jestliže jsi asembloval do paměti) můžeš kombinací Alt-X. Když budeš asemblovat na disk, použij volbu Alt-O a vyber si program, jenž si přeješ spustit.

Jakmile budeš mít nějaké problémy s asemblerem, nahlédni vždy do příslušné sekce, kde zjistíš vždy osvětlující podrobnosti (Pokud čteš seriál v Narsilu, budeš muset bohužel počkat na další části).

VELMI RYCHLÝ RÁDCE

Tato část bude velmi rychlá nápověda, pomocí níž máme v úmyslu ukázat ti, jak rychle a jednoduše editovat, asemblovat a debugovat programy s DevpacST.

V následujících řádcích se pustíme do asemblování, spuštění jednoduchého programu, který zahrnuje dvě chyby, jež následovně odstraníme. Program vlastně vytiskne zprávu a před svým ukončením vyčká stisku klávesy.

Nejdříve spusť GENST2.PRG z back-up kopie (udělal sis záložní kopii, že jo?), na které musí být také soubory MONST2.PRG a DEMO.S.

Po chvíli se na obrazovce objeví prázdné okno. Abys mohl nahrát soubor, měl bys myší najet na FILE menu a kliknout na LOAD. Objeví se stadnardní GEM file selector a v něm také soubor, který chceme, tj. DEMO.S. Teď na něj můžeš buď najet myší a použít double klick, nebo prostě napiš jeho název a stiskni RETURN, tím dosáhneš nahrátí souboru do editoru.

Po nahrátí se kurzor objeví na prvním řádku právě otevřeného souboru. Jestliže se chceš po souboru pohybovat, můžeš to dělat buď použitím scroll baru (to jsou ty sloupce po stranách okna), nebo použitím kurzorových kláves.

S většinou kratších programů je nejlepší rovnou zkusit asemblování, které však neprodukuje ani výpis ani binární kód, ale jen zkontroluje syntaxi zdrojového kódu a ukáže nám napsané chyby, které můžeme potom opravit. V našem případě tedy klikněte v menu na Assemble.

Objeví se dialog box, kde by měla být položka labelled nastavena na NONE. Jestli tomu tak je, tak buď klikni na button assemble, nebo prostě jen zmáčkni RETURN a program se začně kompilovat.

Asembler ti vypíše zprávu o chybách, kde by mělo být napsáno instruction not recognised (instrukce nebyla rozpoznána). Stiskem klávesy se vrátíš do editoru, kde bude kurzor umístěn právě na chybný řádek a název chyby bude vypsán ve status-řádku.

Program bys měl změnit z MOV.W na MOVE.W, takže to udělej, pak klikni opět na Assemble v Program menu. Tentokrát však místo NONE zvol MEMORY, což znamená, že se program bude asemblovat do paměti a ne na disk. Tato volba ti umožní mnohem rychlejší interakci mezi debuggerem a editorem, a to je vlastně to, co chceme. Teď klikni na Asemble opět, zdroják se překompiluje, potom zmáčkni nějakou klávesu pro návrat do editoru. Náš program je nyní připraven ke spuštění.

Teď tedy můžeš kliknout na RUN z Program menu. Co se stalo? Nic zvláštního, vyjma toho, že se na obrazovce objevily dvě bomby, ou, v programu je chyba.

Tvým pomocníkem pro hledání chyb je debugger. Abys ho mohl spustit, klikni na Debug v Program Menu. Všechny jeho funkce budou vypsány později, teď chceme jen rozjet program z Debuggeru a najít, co způsobuje ty dvě bomby, proto stiskni Ctrl-R.

Po vypsání chybové zprávy Bus Error v spodním okně obrazovky se ukáže v disassemblerovém okně právě prováděná instrukce.

MOVE.W 1,-(A7)

V tomto případě se vyvolal bus error, protože lokace 1 je v chráněné části paměti, a tudíž do ní nemůžeme přistupovat v uživatelském módu. Ostatně chyba je v naší instrukci, protože my jsme nechtěli vybírat obsah lokace 1. Naším přáním bylo uložit na zásobník číslo 1. K návratu do editoru stiskni Ctrl-C, protože budeme muset opravit bug (chybu) ve zdrojovém kódu.

Zmáčknutím Alt-T skočíme na začátek souboru, pak klikneme na Find v Search Menu. Teď najdeme špatnou instrukci tak, že napíšeme

MOVE.W

stiskem Return začne vyhledávání. První řádek s tímto příkazem je správně, proto budeme vyhledávat následující instrukci, Alt-N, teď už jsem na řádku, který chceme opravit.

MOVE.W C_CONIN,-(A7)

Aha! - Takže přidáme mřížku, abychom to opravili

MOVE.W @C_CONIN,-(A7)

POZOR! Z editačních důvodů našeho editoru jsem nahradil mřížku znakem @. V asembleru však nadále použivejte samozřejmě původního znaku.

Opět zasemblujeme program. Po kliknutí na RUN z Program menu bys měl spatřit zprávu, dále program čeká na stisk klávesy, po němž bude proveden návrat do editoru.

Možná sis všiml, že obrazovka se zprávou měla stejnou barvu i vzorek, jako desktop. To bylo proto, že DEMO je TOS program spuštěný s GEM obrazovkou. Abyses mohl podívat, jak to bude vypadat s TOS obrazovkou, proveď tuto změnu, klikni na RUN WITH GEM z Program Menu - zkontroluj si, že "fajfka" je pryč. Teď, když znovu spusstíš program, měla by obrazovka vypadat mnohem přehledněji. Když ale budeš chtít naopak startovat nějaký GEM program, musíš opět zapnout, protože jinak ti takový program určitě nějakým způsobem krachne.

Ačkoli program funguje, měli bychom užít MonST Debugger a propracovat se celým programem krok po kroku. Abychom to mohli udělat, klikni na Debug v Program Menu, poté se objeví nápis Breakpoint. Podívejme se tedy trochu na debugger.

Na obrazovce je nakresleno několik oken, v horním okně jsou vypsány strojové registry, druhé je disassemblovací a třetí obsahuje výpis paměti. Ve spodním okně se zobrazují různé zprávy. Jestliže se podíváš na okno 2, dissasembler, uvidíš právě aktuální instrukci, která je v našem případě

MOVE.L @STRING,-(A7)

Stejné symboly, jaké byly použity ve zdrojovém kódu, uvidíš i v debuggeru (musíš mít ale zapnuto Debug Info v dialogu Assembly Options na NORMAL nebo EXTENDED, pozn. přek.).

Zkusme tedy zkontrolovat pamět okolo stringu, stiskem Alt-3 by se měl stát inverzním nadpis okna 3, po kombinaci kláves Alt-A debugger otevře dialogové okno, ve kterém bude text WINDOW START ADRESS? (Startovací adresa okna), tady napiš slovo

string

(pozor! to slovo musí být psáno malými písmeny), odklepni RETURN. Okno 3 bude nyní na adrese zobrazené zprávy, kterou uvidíš zároveň v ASCII i hexadecimálním tvaru.

Aby program pokračoval, musíš tuto instrukci provést, což uděláš stiskem Ctrl-Z, poté se změní, překreslí obrazovka a změní se hodnota registru A7 a registru PC (programový čítač, v něm je vždy uložena právě aktualní adresa, na níž se program právě nachází). Dalším stiskem Ctrl-Z se provede další instrukce MOVE.W. Když se teď v okně 3 (ASCII a HEX displej) podíváš na adresu A7, měl bys vidět word 9 (tedy číslo o délce slova a hodnotě 9), to je všechno, co bys měl po provedení této instrukce vidět.

Další instrukcí je TRAP @1, ta volá GEMDOS a žádá o vytištění řetězce. Proveď ji opětovným stiskem Ctrl-Z. Kam že se text vypsal? Proč ho nevidíš? MonST má svoji vlastní obrazovku, která se zobrazuje nezávisle na tvém programu. Její obsah můžeš spatřit po stisknutí klávesy V. Vidíš? Text je tam, kde má být. Návrat do vlastní obrazovky MonST provedeš stiskem jakékoliv klávesy.

Dvakrát stiskni Ctrl-Z a dojdeš k dalšímu Trapu. Tentokrát toto volání zajištuje čekání na stisk klávesy, takže tref Ctrl-z, obrazovka se automaticky přepne na tu s textem a program čeká. Jakmile budeš připraven, zmáčkni klávesu 'q'. Vrátíš se do MonST a když se teď podíváš do okna s registry na spodních osm bitů registru D0, mělo by tam být $71, to je ASCII kód pro 'q'.

Závěrečný Trap ukončuje samotný program. Takže už jen stiskni Ctrl-R a budeš zpátky v editoru, program je u konce.

Written by Sewer Rat, translate by HEAD