====== Jak založit nový ASM projekt ====== V následujících příkladech předpokládám alespoň minimální znalost strojového kódu procesoru Z80. ===== První projekt ===== V Assembler editoru otevřeme menu, vybereme ''File / New project''. Vyskočí okno ''Create project'', kde vybereme cestu kde bude projekt ukládán (například c:\dokumenty\ZXprojekty). Názvem souboru zvolíme automaticky název našeho projektu (například "Ahoj svete"). Po uložení se nám ve vybráné cestě vytvoří složka s názvem "Ahoj svete", a v ní se vytvoří základní dokument ''main.asm'' a jeho pomocný soubor ''main.tmp''. ---- {{:info.png?nolink&64 |}}//TMP soubor je jen pomocný soubor editoru a dá se kdykoliv smazat. Při editaci si ho editor vytvoří znovu. Soubory nedoporučujeme editovat externím editorem, protože by mohlo dojít ke kolizím verzí. Pokud přesto editaci v externím editoru vyžadujete, vždy editujte jen soubor ''*.ASM'', a vždy soubor ''*.TMP'' smažte.// Od verze 1.6.0 se TMP soubory nepoužívají. ---- ''main.asm'' je základní ASM soubor našeho projektu. Kompiler tento soubor kompiluje jako první. Na začátek našeho příkladu ještě doporučuju nastavit v menu ''Compiler'' tyto položky: * zaškrtnout ''AutoCheck'' - automaticky nám bude kontrolovat syntax během psaní kódu * zaškrtnout ''AutoBuild'' - automaticky nám během psaní bude vytvářet strojový kód do paměti emulátoru (pokud samozřejmně zdroj nebude obsahovat chyby) * zaškrtnout ''AutoReplace JR > JP'' - při dlouhém relativním skoku nevypíše chybové hlášení, ale automaticky instrukci nahradí za absolutní skok JP A ted je čas napsat první části kódu. Pokud tomu tak není, přepněte emulátor do režimu ZX Spectrum 48K. Dále opište nebo zkopírujte: ; LnxSpectrum ASM editor (www.ilnx.cz) org 50000 ;program bude od adresy 50000 call PrintInit ;inicializace print rutiny v ZX ld hl,text call Print ;vytisknutí textu ret Print: ld a,(hl) ;vyzvedni znak and 127 rst 16 ;vytiskni ld a,(hl) ;znovu vyzvedni znak inc hl and 128 ;ověř zda to není poslední znak jr z,Print ret ;je poslední, takže exit do basicu Cls equ $d6b ;CLS rutina v originální ROM PrintInit: call Cls ;smazat obrazovku ld a,2 ;nastav výstup PRINT rutiny na obrazovku call $1601 ret ;konec inicializace text: defm 22,11,10,"Ahoj svete!" ;tisknutý text. 22 je BASIC příkaz "AT", ;následuje 11 (řádka) a 10 (sloupec). ;odpovídá BASICovému příkazu ;"PRINT AT 11,10;"Ahoj svete!" Pokud máte kód v editoru, mělo by automaticky dojít k jeho kompilaci. V info okně bude napsáno "0 No errors", a úplně dole se dočteme že náš program zabírá v ZX paměti 44 bajtů. Nyní v BASICu napište příkaz ''RANDOMIZE USR 50000'' a enter. Program vypíše zprávu "Ahoj svete!". program lze z BASICu zpustit i pohodlnějším způsobem. V Assembler editoru jsou uplně dole 4 tlačítka. Jedno z nich je ''Run from Basic''. Jeho stisknutím se ZXko v emulátor zrestartuje a sám napíše ''RANDOMIZE USR 50000''. Program se spustí. ===== Rozdělení projektu na moduly ===== Větší projekty je vhodné rozdělit na více částí, jinak se stávají nepřehledné. V Lnx assembleru je to řešeno rozdělením na moduly. Z hlavního souboru main.asm se přilinkovávají ostatní moduly, bud jiný soubor ASM, ale i BIN, BINC, SCR, SCRC, MSC a podobně. V našem příkladu si rozdělíme náš projekt Ahoj svete na 2 moduly. {{ :lnxspectrum:pic1.jpg?nolink|}}V našem zdrojovém kódu označíme instrukce od řádky 10 až po řádku 24. Stiskneme ''Ctrl+X'' a vyjmeme část kódu od návěstí ''Print:'' až po návěstí ''text:''. A ted vytvoříme druhý modul. Vlevo nahoře je okno, ve kterém je zatím jediný modul ''main.asm''. Najeďte na něj myší a stiskněte pravé tlačítko. Ve vyvolaném menu můžete vytvořit nový ASM modul, nebo přiložit již připravený modul, přejmenovat či smazat modul. V našem příkladu vytvoříme nový modul položkou ''Create new ASM file''. Po stisknutí se nás zeptá, jaké jméno má nový modul mít. Zadejte ''PrintLib'' a OK. Automaticky se nám otevřel nový ASM soubor a do něj pomocí ''Ctrl+V'' vyjmutý zdrojový text vložíme. Kompiler nám tentokrát ihned po vložení zdrojového kódu vyhodí chybu "0 5 label not defined". Klikneme 2x na tuto oranžově zvýrazněnou chybu a ve zdrojovém kódu se označí řádka s instrukcí ''call PrintInit''. Je to proto že rutina ''PrintInit'' byla přesunuta do jiného modulu, a ten ještě není přilinkován. Dopíšeme tedy do ''main.asm'' za instrukci ''ret'' instrukci ''include "PrintLib.asm"''. Ihned po přilinkování kompiler přestane hlásit chybu. V seznamu nyní vidíme 2 moduly, ''main.asm'' a ''PrintLib.asm''. Přepínat mezi nimi můžeme kliknutím. Při každem kliknutí se editovaný asm soubor uloží a otevře se označený. Obsah modulu ''main.asm'': ; LnxSpectrum ASM editor (www.ilnx.cz) org 50000 ;program bude od adresy 50000 call PrintInit ;inicializace print rutiny v ZX ld hl,text call Print ;vytisknutí textu ret include "PrintLib.asm" ;přilinkuj druhý modul text: defm 22,11,10,"Ahoj svete!" ;tisknutý text. 22 je BASIC příkaz "AT", ;následuje 11 (řádka) a 10 (sloupec). ;odpovídá příkazu "PRINT AT 11,10;"Ahoj svete!" Obsah modulu ''PrintLib.asm'': ; LnxSpectrum ASM editor (www.ilnx.cz) 6.6.2014 Print: ld a,(hl) ;vyzvedni znak and 127 rst 16 ;vytiskni ld a,(hl) ;znovu vyzvedni stejný znak inc hl ;další písmeno and 128 ;ověř zda to nebyl poslední znak jr z,Print ret ;je poslední, takže exit do basicu Cls equ $d6b ;CLS rutina v originální ROM PrintInit: call Cls ;smazat obrazovku ld a,2 ;nastav výstup PRINT rutiny na obrazovku call $1601 ret ;konec inicializace