NextForge / ZX Spectrum Next
NextForge: moje svatá trojice je kompletní
Po spoustě měsíců práce mám konečně pocit, že do sebe všechno zapadlo. NXPaint řeší grafiku, MXTracker hudbu a NextForge přidává poslední velký kus: místo, kde můžu přímo na ZX Spectrum Next psát a překládat vlastní programy. Grafika, hudba a kód. Moje malá svatá trojice je tím pádem kompletní.
A ano, soubory si pak samozřejmě můžu přesunout tam, kam potřebuji, pomocí CalmCommanderu. Když už si člověk vyrábí vlastní ekosystém, byla by škoda nechávat některé části zahálet.
Jestli mi teď někdo bude tvrdit, že ZX Spectrum Next je dobrý jen jako spouštěč TAPek s Manic Minerem, tak ho nakopu do zádele. Next je pro mne stroj, který si můžu vzít na akci, skládat na něm hudbu, kreslit grafiku a teď vezmu zdrojové kódy pro sjasmplus a můžu na nich pracovat i bez PC. Ano, neumí to LUA skripty, ale ty já používám opravdu výjmečně, takže to je něco, co velmi rád oželím...
Co je NextForge
NextForge je nativní editor a assembler pro ZX Spectrum Next, inspirovaný klasickým Prometheem. Zdrojový kód píšete přímo na Nextu, ukládáte ho na SD kartu a ve stejném prostředí jej také přeložíte.
Výsledkem může být jednoduchá binárka .bin nebo spustitelný soubor .nex pro NextZXOS. Ke spuštění potřebujete ZX Spectrum Next s NextZXOS a SD kartou, případně odpovídající prostředí v CSpectu.
Na kartu stačí zkopírovat NEXTFORGE.NEX, spustit ho z prohlížeče NextZXOS a můžete otevřít existující zdroj nebo rovnou začít psát.
Stažení programu: NextForge na itch.io.
Základem je celoobrazovkový 80sloupcový editor se zvýrazněním syntaxe. Stavová lišta ukazuje soubor, pozici kurzoru, délku řádku, počet řádků i volnou paměť. Otevřených může být až osm souborů najednou.
- Běžné úpravy textu: vkládání, mazání, odsazování, formátování assemblerového řádku a rychlý pohyb po textu.
- Blokové operace: označování řádků, kopírování, vyjmutí a vložení, klidně i mezi otevřenými soubory.
- Hledání: procházení výskytů textu v otevřených souborech.
- Doplňování návěští: po několika znacích vyvoláte seznam odpovídajících symbolů.
- Skok na definici: z použití symbolu rovnou na jeho definici, případně do jiného otevřeného souboru.
- Práce se SD kartou: načtení, uložení, Save As a výběr cílového adresáře.
- Klávesnice i myš: menu a dialogy zvládnou obojí, kolečko posouvá text i přehledy.
- Vyhledávatelná nápověda: zadáte třeba
labelneboMMUa nemusíte lovit zkratku z paměti.
Když například píšu call lores_init, stačí dát kurzor na lores_init a pomocí SYMBOL SHIFT + ENTER skočit na definici. Pokud mám rozepsané jen lores, pomocí CAPS SHIFT + ENTER vyvolám seznam odpovídajících návěští.
Zní to jako maličkost, dokud člověk neskočí po padesáté ručně o několik set řádků. Pak už to maličkost není.
Assembler pro Z80 i Next
Assembler pracuje ve dvou průchodech, takže umí i odkazy na návěští definovaná později. Podporuje běžné instrukce Z80, práci s IX/IY a jejich horními i dolními bajty a také oficiální instrukční formy Z80N, včetně například NEXTREG, MUL D,E nebo rozšířených blokových přenosů.
Pro organizaci zdroje jsou k dispozici globální i lokální návěští, konstanty EQU, aritmetické výrazy, HIGH a LOW. Čísla lze zapisovat desítkově, hexadecimálně i binárně.
Data vytvoříte přes DB, DW a DS, adresu nastavíte pomocí ORG, zarovnání přes ALIGN a podmínky si můžete hlídat direktivou ASSERT.
Větší projekt rozdělíte pomocí INCLUDE, binární data vložíte přes INCBIN. Nechybí jednoduchá makra s jedním parametrem ani opakování pomocí REPT / ENDR. Pro Next je tu také MMU a export bankované paměti do NEX.
První příklad: deset bajtů vlastního kódu
Začít můžete opravdu jednoduše. Tohle je krátký zdroj, který nastaví počáteční adresu, naplní tři registry a skončí návratem z rutiny. Nic převratného nedělá, ale přesně na něm je dobře vidět cesta od zdroje k binárce.
org $8000
Start:
ld hl,0
ld de,16384
ld bc,6144
ret
End:
savebin "hello.bin",$8000,End-$8000
- Zdroj uložíte jako
hello.asm. - Zvolíte Assemble → Assemble a vyberete hlavní soubor.
- Po úspěšném překladu vznikne vedle zdroje
hello.bino velikosti 10 bajtů.
Délku není potřeba počítat ručně: výraz End-$8000 ji určí podle adresy koncového návěští. Ano, počítač může občas dělat i něco za nás.
Makra a opakování bez zbytečného přepisování
Opakující se sekvenci lze pojmenovat makrem. Třeba takto:
macro ESXCALL code
rst $08
db code
ret
endm
ReadFile:
ESXCALL $9D
Makro musí být definované před použitím. Současná verze podporuje osm maker, každé maximálně s jedním parametrem a šesti řádky těla.
Pro opakování při překladu slouží REPT:
org $8000
REPT 4
db low $
ENDR
Výsledkem jsou bajty 0, 1, 2, 3, protože dolní bajt aktuální adresy se při každém opakování vyhodnotí znovu. Podporované jsou až čtyři vnořené úrovně.
Větší projekt: zdroje, grafika i další data
Hlavní soubor může spojovat několik modulů a přidat binární assety:
device zxspectrum128
org $2000
jp Start
include "src/constants.asm"
include "src/main.asm"
incbin "assets/font.bin"
End:
assert End-$2000 <= $2000
savebin "build/demo.bin",$2000,End-$2000
INCLUDE vloží další zdrojový soubor a INCBIN hotová binární data. ASSERT zase zkontroluje, že výstup nepřeroste určenou velikost.
Hlavní zdroj se překládá z editoru, ale soubory načítané přes INCLUDE a INCBIN se berou ze SD karty. Pokud je upravíte, je potřeba je před překladem uložit. Ano, i vlastní vývojové prostředí vás může naučit ukládat práci.
Výstup NEX a bankovaná paměť
Pokud má být výsledkem soubor spustitelný přímo z NextZXOS, použije se SAVENEX.
device zxspectrumnext
org $8000
Start:
nextreg 7,3
mul d,e
ret
savenex open "demo.nex",Start,$BFF0
savenex core 3,0,0
savenex cfg 7,0,0,1
savenex auto
savenex close
OPEN určí jméno, vstupní adresu a zásobník, CORE minimální verzi jádra, CFG parametry načtení, AUTO vybere nenulové banky a CLOSE nastavení uzavře.
Pro větší projekty lze pomocí MMU při překladu mapovat 8KB stránky do jednotlivých slotů Nextu. Například MMU 4,24 namapuje stránku 24 do slotu 4, tedy na adresy $8000–$9FFF.
NEX pak zachová obsah jednotlivých bank, takže projekt může být větší než 64 KB. Samotné přepínání stránek za běhu už samozřejmě řeší program přes NEXTREG.
Nejde jen o laboratorní ukázky. Ověřoval jsem assembler i na reálnějších projektech a výsledky porovnávám bajt po bajtu s výstupem SjASMPlus. To je výrazně méně romantické než „vypadá to stejně“, ale mnohem užitečnější.
Klávesové zkratky a ovládání
CS znamená CAPS SHIFT, SS SYMBOL SHIFT. U zápisu EXT → klávesa nejprve stisknete CS + SS, obě pustíte a pak stisknete uvedenou klávesu.
Kombinace CS + SS + číslo se drží současně. Následující přehled zahrnuje všechny zkratky z manuálu i ovládání jednotlivých dialogů.
Pohyb a úpravy v editoru
| Akce | Zkratka |
|---|---|
| Pohyb vlevo / dolů / nahoru / vpravo | CS + 5 / 6 / 7 / 8 |
| Stránka nahoru / dolů | CS + SS + 7 / 6 (současně) |
| Začátek / konec řádku | SS + Q / E |
| Nový řádek | ENTER |
| Smazat znak před kurzorem / pod kurzorem | CS + 0 / 9 |
| Tabulátor / odsazení assemblerového řádku | CS + 3 |
| Zformátovat aktuální assemblerový řádek | SS + W |
| Označit začátek / potvrdit konec řádkového bloku | CS + 4; mezi stisky rozšíříte výběr pohybem kurzoru |
| Vybrat všechny řádky | SS + A |
| Kopírovat / vyjmout / vložit | EXT → C / X / V |
Schránku můžete vložit i do jiného otevřeného souboru. Vyjmutí bez označeného bloku vyjme aktuální řádek.
Menu, soubory a ukládání
| Akce | Zkratka |
|---|---|
| Otevřít horní menu | EXT → 0 |
| Předchozí / další nabídka v menu | CS + 5 / 8 |
| Předchozí / další položka menu nebo otevřený soubor v dialogu | CS + 7 / 6 |
| Spustit položku menu, potvrdit soubor nebo jméno pro Save As | ENTER |
| Otevřít soubor (File → Load...) | EXT → O |
| Uložit soubor (File → Save) | EXT → S |
| Uložit pod jiným názvem (File → Save As...) | EXT → E |
| Zavřít aktivní soubor (File → Close) | EXT → W |
| Seznam otevřených souborů (File → Files...) | CS + SS + 1 (současně) |
| V prohlížeči potvrdit cílový adresář pro uložení | SPACE |
| Při zavírání souboru uložit změny | ENTER nebo S v potvrzovacím dialogu |
| Při zavírání souboru zahodit neuložené změny | D v potvrzovacím dialogu |
| Zavřít menu nebo zrušit dialog či výběr | CS + SPACE (BREAK) |
Hledání, doplňování návěští a skok na definici
| Akce | Zkratka |
|---|---|
| Otevřít hledání v otevřených souborech (Edit → Find...) | SS + F |
| Najít první / další výskyt v dialogu hledání | ENTER |
| Smazat poslední znak hledaného textu | CS + 0 |
| Otevřít nabídku doplnění po napsání alespoň čtyř znaků návěští | CS + ENTER |
| Předchozí / další shoda v nabídce doplnění | CS + 7 / 6 |
| Stránka shod nahoru / dolů | CS + SS + 7 / 6 (současně) |
| Doplnit vybrané návěští a zavřít nabídku | ENTER |
| Přejít na definici názvu pod kurzorem | SS + ENTER |
| Zavřít hledání nebo nabídku doplnění bez vložení | CS + SPACE (BREAK) |
Doplňování a skok na definici pracují nad otevřenými soubory. Pokud je potřebný include jen na SD kartě, nejprve ho otevřete v editoru.
Integrovaná nápověda
| Akce | Klávesa / zkratka |
|---|---|
| Otevřít / zavřít nápovědu (Help → Help...) | EXT → H |
| Filtrovat popisy a zkratky | Psaní textu; hledání nerozlišuje velikost písmen |
| Smazat poslední znak filtru | CS + 0 |
| Posunout přehled nahoru / dolů | CS + 7 / 6 |
| Předchozí / další stránka shod | CS + SS + 7 / 6 (současně) |
| První / poslední stránka shod | SS + Q / E |
| Zavřít nápovědu a vrátit se do editoru | CS + SPACE (BREAK), případně kliknutí na Close |
Výsledkový report překladu
| Akce | Klávesa / zkratka |
|---|---|
| Posunout report nahoru / dolů | CS + 7 / 6 |
| Stránka reportu nahoru / dolů | CS + SS + 7 / 6 (současně) |
| Zavřít výsledkový report | ENTER, CS + SPACE (BREAK) nebo kliknutí |
PC klávesnice a myš
Starší popis na itch.io uvádí také kurzorové klávesy / Kempston cursor, Page Up / Page Down, Tab, Backspace, Delete / Graph, Break / Esc a klávesu Files. Na PC záleží na mapování emulátoru: kurzorové klávesy slouží k pohybu, Page Up / Page Down k posunu po stránkách, Tab k odsazení, Backspace k mazání vlevo, Delete / Graph k mazání pod kurzorem a Break / Esc k rušení dialogu. Pro ovládání podle aktuálního manuálu použijte kombinace Spectra uvedené výše; seznam otevřených souborů vyvoláte současným CS + SS + 1.
Myší můžete vybírat nabídky a položky menu, potvrzovat soubory v dialogu a kolečkem posouvat editor, nápovědu i report překladu.
Co ještě čeká na dokončení
NextForge 1.0 je pořád vývojová verze. Debugger a přímé spuštění přeloženého programu z editoru zatím nejsou hotové; položka Assemble & Run v tuto chvíli provede jen překlad. Undo také zatím není implementované.
Syntaxe je inspirovaná SjASMPlus, ale kompatibilita není úplná. Obecný Lua interpreter součástí programu není a makra i export NEX mají své limity. Editor pracuje s řádky do 80 znaků, assembler při přímém načítání include souborů až se 160 znaky.
Podrobnosti jsou v českém manuálu, který je k dispozici také jako PDF.
Grafika, hudba a kód. Přímo na Nextu.
Právě tohle je pro mě na NextForge největší radost. V NXPaintu připravím grafiku, v MXTrackeru hudbu a v NextForge napíšu kód, který to celé spojí dohromady. CalmCommander pak zařídí přesuny souborů tam, kam patří. Po měsících práce se moje svatá trojice uzavřela. Teď už zbývá jen ta drobnost: něco v ní vytvořit.




