MB Maniax Next Debugger / Visual Studio Code
MB Maniax Next Debugger: ZX Spectrum Next přímo ve VS Code
Na ZX Spectrum Next programuji v assembleru a dlouho mě štvala jedna věc: kód píšu v editoru, ale jakmile přijde chyba, přesunu se do jiného okna, jiného debuggeru a často i do disassembleru, kde znovu hledám, kde vlastně ve zdrojáku jsem. A to nemluvím o tom, že debuggery jsou mnohdy jen o tom, že zobrazi výpis registrů a jako high top feature umožňují vložit breakpoint.
Tak jsem si před časem napsal vlastní nástroj, který oba světy spojí. Původně jen pro sebe. Jenže po delším používání, jsem zjistil, že bez něj už vlastně Next ladit nechci.
Výsledkem je MB Maniax Next Debugger: emulátor a debugger ZX Spectrum Next přímo ve Visual Studio Code. Program přeložený v sjasmplus běží v emulátoru a ladí se rovnou proti skutečnému zdrojovému kódu.
Rozšíření je dostupné na Visual Studio Marketplace.
Proč vznikl
Klasické ladění v emulátoru funguje, ale pro mě bylo pořád zbytečně odtržené od práce v editoru a hlavně velmi omezené. V jednom okně píšete assembler, v druhém hledáte chybu, díváte se na disassembly a v hlavě si překládáte adresy zpátky na řádky zdrojáku. U malého programu to není problém. U větší hry, která sahá do více bank, používá Next registry, Layer 2, DMA, Copper a další části hardwaru, už to začne být únavné. Chtěl jsem tedy debugger, ve kterém kliknu na řádek zdrojáku, nastavím breakpoint a program se zastaví přesně tam. Registry, paměť, zásobník, obrazovku i hardware Nextu vidím vedle kódu a nemusím pořád přepínat kontext.
Ladění přímo ve zdrojáku
Debugger používá SLD informace ze sjasmplus, takže zná vztah mezi přeloženým kódem a konkrétními řádky assembleru. Funguje to i s bankovanou pamětí Nextu.
- Breakpointy nastavíte kliknutím vedle čísla řádku.
- Podmíněné breakpointy mohou používat výrazy typu
A == 5nebomem[score] > 100. - K dispozici jsou počty průchodů i logpointy.
- Podmíněné breakpointy jsou řešené tak, aby emulovaný program zbytečně nezpomalovaly.
- Podporované jsou watchpointy pro čtení i zápis do paměti.
K dispozici je klasické krokování, Run to Cursor, Jump to Cursor, call stack s názvy návěští, registry, příznaky, výpis paměti i disassembler.
Breakpoint nemusí být jen adresa
Na Nextu často není nejzajímavější otázka „kdy se CPU dostane na tuto adresu?“, ale třeba „kdo právě změnil tenhle NEXTREG?“ nebo „co mi sáhlo na DMA?“.
- maskovatelné přerušení a NMI,
- zápis do NEXTREG,
- přístup na porty,
- události Copperu,
- události DMA.
To je přesně ten typ ladění, který se z obyčejného breakpointu v disassembleru dělá dost nepohodlně.
BREAK, WPMEM, LOGPOINT a ASSERTION
Pokud jste zvyklí na CSpect, můžete používat i instrukci BREAK. K tomu debugger rozumí komentářům WPMEM, LOGPOINT a ASSERTION přímo ve zdrojovém kódu. Některé kontrolní body si tak můžete nechat přímo v assembleru místo toho, abyste je pokaždé znovu naklikávali v rozhraní.
Emulátor vedle kódu
Součástí rozšíření je samotný emulátor ZX Spectrum Next. Jeho obrazovka běží v panelu přímo ve VS Code, včetně zvuku a klávesnice. Nemusíte tedy spouštět zvlášť editor, assembler a externí emulátor a potom mezi nimi přepínat jako operátor menšího televizního studia.
Panel Next: podívat se dovnitř stroje
Samostatný panel zpřístupňuje části hardwaru, které jsou při vývoji pro Next často důležitější než samotné registry Z80.
- sprity a jejich vzory,
- palety,
- grafické vrstvy,
- Layer 2,
- tilemapu,
- program Copperu,
- všechny registry NEXTREG,
- paměť a mapu paměti,
- zvukové čipy.
Když tedy něco není na obrazovce tam, kde má být, nemusíte jen hádat, jestli je špatně sprite, paleta, bankování nebo registr vrstvy. Můžete se podívat.
Profiler
Jedna z funkcí, kterou používám hodně často, je profiler. U jednotlivých řádků zdrojového kódu ukazuje, kolik taktů CPU skutečně spotřebovaly, a zároveň sestaví seznam nejdražších funkcí. To je podstatně užitečnější než optimalizovat rutinu jen proto, že vypadá podezřele. Člověk někdy stráví půl hodiny zrychlováním části programu, která zabírá 0,3 % času, zatímco skutečný problém spokojeně sedí o dvě funkce vedle.
Stavy a krok zpět
- uložené stavy emulátoru,
- krokování zpět,
- znovupřeložení programu,
- nové nahrání programu bez ukončení debug session.
Při ladění hry je to velmi příjemné. Nemusíte pokaždé restartovat celý svět jen proto, že chcete znovu vyzkoušet situaci, která nastane po pěti minutách hraní.
Příručka a jazyky
Součástí rozšíření je uživatelská příručka s obrázky, a to česky i anglicky. Popisuje vše od prvního nastavení až po profiler a pokročilejší breakpointy. Samotné rozhraní debuggeru je dostupné ve 13 jazycích, včetně češtiny a slovenštiny.
Co potřebujete
- Windows 64 bit,
- Visual Studio Code,
- sjasmplus.
Instalace
- Ve VS Code otevřete panel Extensions pomocí Ctrl+Shift+X.
- Vyhledejte MB Maniax Next Debugger a klikněte na Install.
- Příručku otevřete přes Ctrl+Shift+P a příkaz MB Maniax: Otevřít uživatelskou příručku. (pokud máte VS Code v češtině)
A pak už stačí projekt sestavit pomocí sjasmplus a začít ladit.
Zdrojový kód a licence
Rozšíření je zdarma a jeho zdrojový kód je dostupný pod licencí GNU GPL 3: github.com/perrada69/mb-maniax-next-debugger.
Na GitHubu můžete hlásit chyby i posílat návrhy.
Emulační část stojí na výborném jádru JNEXT od Jorge Gonzáleze Villalongy.
Manuál
Na manuál se můžete online podívat zde: https://www.mb-maniax.cz/dbg/
Pokud chcete PDF, tak tady máte českou verzi a anglickou verzi.







Komentáře
Zatím tu nikdo nic nenapsal. Buď první!