Ahoj.
Nejsem si jistý, jestli je vhodné něco takového sem psát, ale chtěl jsem se podělit o své krátké zkušenosti s programováním Amigy (té staré OCS/ECS) po dvaceti letech. Třeba se mé psaní bude hodit někomu, kdo by si chtěl také po dlouhé době zadovádět a naprogramovat si nějakou tu "demo" blbůstku. Nebo si připomenout staré časy. A nebo si to přečte někdo, kdo v assembleru na Amize nikdy neprogramoval, chtěl by si to vyzkoušet a hledá nějakou relativně snadnou a "bezbolestnou" cestu (rok 2020).
Naposledy jsem programoval na Amize někdy kolem roku 1999/2000. Tehdy jsem s kamarády udělal krátké intro Ten.
Krátce potom jsem svou Amigu prodal. V té době jsem už pracovně i soukromně několik let používal PC.
Jelikož se ale loni sešla stará parta kolem skupiny Vectors a diskmagu Guru, přišel impuls připomenout si "staré dobré časy" našeho mládí a pokusit se udělat nějakou malou produkci pro další plánované setkání.
Protože Amigu nemám a narychlo se těžko něco shání (nemluvě o ceně a nutnosti zajistit, aby vše pohodlně jelo), bylo mi jasné, že budu muset využít emulátor. A že si budu muset zase přečíst dokumentaci. Hodně dokumentace. K emulátoru, k zákaznickým čipům, k CPU 68000. Znovu si najít všechny informace. A všechno (skoro všechno) se znovu zase učit.
Před 20 a více lety jsem programoval v legendárním ASMOne. Zjistil jsem, že poslední aktualizovaná verze je 1.48. Download ze stránek Coppershade.
Bohužel ve WinUAE (nakonfigurovaném jako základní A1200 s 4MB fast RAM) mi při krátkých testech nefungoval dobře debugger. Photonův upravený ASMOne překřtěný na ASMTwo zase dokáže překládat pouze instrukce základní 68000. A v této rané fázi jsem si ještě nebyl jistý, jestli si práci trochu neulehčím a nesáhnu po 68020+. Naštěstí se ukázalo, že další klon - AsmPro 1.17 - funguje správně i v debuggeru, zvládá celou instrukční sadu všech 68k procesorů a navíc má jednoduchý syntax-highlighting. Bohužel jsem záhy zjistil, že psát delší program v jeho editoru je už nad mé síly.
Po těch dlouhých letech jsem si až příliš zvykl na komfort práce v jiných operačních systémech, na možnost mít pohodlně vedle sebe otevřených více oken s více zdrojáky, mít systémový clipboard, vícenásobné undo/redo, vybírat blok textu směrovými klávesami, mít klávesové zkratky pro copy/cut/paste, na které jsem zvyklý... Prostě zvyk je železná košile. Ne že by to v emulátoru na Amize nějak nešlo, ale příliš často jsem sahal na nesprávné klávesy kdykoliv jsem chtěl s kursorem skočit na začátek nebo konec řádku, o stránku výš, nebo na začátek celého dokumentu. Pochopil jsem, že by to bylo trápení. Naštěstí existuje alternativa, o které se odvážím tvrdit, že je pro svátečního amigistu, jako jsem já, naprosto skvělá:
Microsoft Visual Studio Code + Amiga-Assembly addon.
VSCode je jednoduchý editor pro programátory od Microsoftu, který však s Visual Studiem sdílí jen část názvu. Je free, je open-source, je multiplatformní (Windows, MacOS, Linux) a neinstaluje se. Je plně konfigurovatelný a není vytvořen pro žádný specifický programovací jazyk. To umožňuje, aby k němu mohl být vytvořen addon Amiga-Assembly, který umožňuje několik věcí:
Instalace je snadná:
Jak to celé funguje?
Addon zajistí (kromě podpůrných věcí jako je syntax-highlighting) tyto funkce:
Výhod oproti nativnímu programování přímo na Amize (nebo v emulátoru) je několik:
Moc příjemné připomenutí si toho, jak se to celé kdysi programovalo, je k vidění na YT kanálu Photona/Scoopex.
Ten v ukázkách používá svůj upravený ASMTwo přímo na Amize, takže je to i hezké porovnání způsobů práce. Odkaz na jeho web jsem tady už uvedl (Coppershade).
Tady je dokumentace k instrukční sadě 68k i s časováním (pro základní 68000 je to snadné, časování u vyšších modelů je kvůli cache bohužel mnohem složitější).
A v případě, že byste chtěli programovat něco v systému, nebo si práci trochu ulehčit ve standardním C/C++, je k dispozici skvělý addon Amiga C/C++ Compile, Debug & Profile od Bartmana/Abyss.
Nevýhody oproti programování na Amize pod emulátorem mne po pravdě žádné nenapadají. Snad jedině pokud si někdo chce připomenout, jak se přesně vše ovládalo, pro ten pocit nostalgie. Srovnávat s programováním na skutečném železe z výše uvedených důvodů příliš nemůžu. Pocit nostalgie u skutečné Amigy a u skutečného PAL rozlišení (předpokládám pořádné demo-retro a tedy žádné RTG! 😉 ) je určitě ještě větší. Ale nakolik je to po tak dlouhé době strávené v mnohem pokročilejších editorech a prostředích dlouhodobě příjemné je diskutabilní. Já jsem se po osobní zkušenosti už nedokázal k ASMOne vrátit. Rozhodně ne k programování 14 zdrojáků se 150kB textu, z nichž se naše poslední produkce skládá.
Byl jsem mile překvapen, jak je v současnosti snadné znovu naskočit zpátky k programování pro Amigu. Po své (sice ještě krátké) zkušenosti si troufnu tvrdit, že je to snažší než kdysi. Většina lidí v první polovině devadesátých let u nás k programování používala buď assembler ASMOne (a jeho odvozeniny Seka, Trash apod.) nebo DevPac. A z vyšších jazyků kromě Basiců bylo k systémovému programování asi nejlepší jen SAS/C (dříve jako Aztec nebo Lattice). Ten byl schopen do určité míry překládat i C++ kód, ale byl velmi pomalý. Později pak ještě přišlo StormC, které mělo i své IDE, ale s tím jsem už neměl osobní zkušenost.
Nejsem si jistý, jestli se situace na staré Amize od té doby nějak zlepšíla. Zejména co se týče C++ překladačů. Použití addonů do VSCode a programování v externím prostředí tak může být velmi zajímavá varianta i pro systémové programátory. Ale to musí posoudit někdo jiný. Mé zájmy končí u zákaznických čipů OCS/ECS/AGA, nesystémového programování (kompletní převzetí přerušení a zobrazování) a assembleru. VSCode+Amiga-Assembly+WinUAE k tomu stačí.
Nejsem si jistý, jestli je vhodné něco takového sem psát, ale chtěl jsem se podělit o své krátké zkušenosti s programováním Amigy (té staré OCS/ECS) po dvaceti letech. Třeba se mé psaní bude hodit někomu, kdo by si chtěl také po dlouhé době zadovádět a naprogramovat si nějakou tu "demo" blbůstku. Nebo si připomenout staré časy. A nebo si to přečte někdo, kdo v assembleru na Amize nikdy neprogramoval, chtěl by si to vyzkoušet a hledá nějakou relativně snadnou a "bezbolestnou" cestu (rok 2020).
Naposledy jsem programoval na Amize někdy kolem roku 1999/2000. Tehdy jsem s kamarády udělal krátké intro Ten.
Krátce potom jsem svou Amigu prodal. V té době jsem už pracovně i soukromně několik let používal PC.
Jelikož se ale loni sešla stará parta kolem skupiny Vectors a diskmagu Guru, přišel impuls připomenout si "staré dobré časy" našeho mládí a pokusit se udělat nějakou malou produkci pro další plánované setkání.
Protože Amigu nemám a narychlo se těžko něco shání (nemluvě o ceně a nutnosti zajistit, aby vše pohodlně jelo), bylo mi jasné, že budu muset využít emulátor. A že si budu muset zase přečíst dokumentaci. Hodně dokumentace. K emulátoru, k zákaznickým čipům, k CPU 68000. Znovu si najít všechny informace. A všechno (skoro všechno) se znovu zase učit.
Před 20 a více lety jsem programoval v legendárním ASMOne. Zjistil jsem, že poslední aktualizovaná verze je 1.48. Download ze stránek Coppershade.
Bohužel ve WinUAE (nakonfigurovaném jako základní A1200 s 4MB fast RAM) mi při krátkých testech nefungoval dobře debugger. Photonův upravený ASMOne překřtěný na ASMTwo zase dokáže překládat pouze instrukce základní 68000. A v této rané fázi jsem si ještě nebyl jistý, jestli si práci trochu neulehčím a nesáhnu po 68020+. Naštěstí se ukázalo, že další klon - AsmPro 1.17 - funguje správně i v debuggeru, zvládá celou instrukční sadu všech 68k procesorů a navíc má jednoduchý syntax-highlighting. Bohužel jsem záhy zjistil, že psát delší program v jeho editoru je už nad mé síly.
Po těch dlouhých letech jsem si až příliš zvykl na komfort práce v jiných operačních systémech, na možnost mít pohodlně vedle sebe otevřených více oken s více zdrojáky, mít systémový clipboard, vícenásobné undo/redo, vybírat blok textu směrovými klávesami, mít klávesové zkratky pro copy/cut/paste, na které jsem zvyklý... Prostě zvyk je železná košile. Ne že by to v emulátoru na Amize nějak nešlo, ale příliš často jsem sahal na nesprávné klávesy kdykoliv jsem chtěl s kursorem skočit na začátek nebo konec řádku, o stránku výš, nebo na začátek celého dokumentu. Pochopil jsem, že by to bylo trápení. Naštěstí existuje alternativa, o které se odvážím tvrdit, že je pro svátečního amigistu, jako jsem já, naprosto skvělá:
Microsoft Visual Studio Code + Amiga-Assembly addon.
VSCode je jednoduchý editor pro programátory od Microsoftu, který však s Visual Studiem sdílí jen část názvu. Je free, je open-source, je multiplatformní (Windows, MacOS, Linux) a neinstaluje se. Je plně konfigurovatelný a není vytvořen pro žádný specifický programovací jazyk. To umožňuje, aby k němu mohl být vytvořen addon Amiga-Assembly, který umožňuje několik věcí:
- Integrace Motorola 68k assembleru (vasm) + linkeru (vlink)
- Syntax highlighting (instrukce, operandy, symboly, čísla, komentáře, ...)
- Integrace emulátoru (FS-UAE nebo WinUAE)
- Debugging, trace, breakpoints, je možno se dívat na obsah registrů i paměti a na aktuální copper-list instrukce
Instalace je snadná:
- Stáhnout VSCode
- Nakopírovat kamkoliv
- Přímo z VSCode nainstalovat addon Amiga-Assembly (případně se dá stáhnout a nainstalovat i externě)
- Ze stránek Amiga-Assembly stáhnou ukázkový projekt
- Otevřít projekt ve VSCode a programovat.
Jak to celé funguje?
Addon zajistí (kromě podpůrných věcí jako je syntax-highlighting) tyto funkce:
- Assembler vasm se spustí pokaždé, když se editovaný zdroják bude ukládat. Je možno se podívat, jestli vše proběhlo v pořádku, nebo se vyskytly nějaké chyby. Výsledkem assemblování je soubor *.o, který se standardně ukládá do adresáře build.
- Linker vlink se spustí, pokud se vyžádá Build projektu -- buď tlačítkem, nebo v menu, nebo klávesovou zkratkou (konfigurovatelné). Build přeloží všechny zdrojáky (standardně vše *.s) v projektu, vytvoří objektové soubory *.o a všechny slinkuje dohromady a vzniklý standardní Amiga executable ve formátu amiga-hunk nakopíruje do adresáře s připraveným bootovatelným harddiskem -- dh0 se startup-sequence, která zajistí spuštění našeho programu.
- F5 (případně tlačítko v levé liště nástrojů) spustí emulátor. Podle vybrané konfigurace jde buď o prosté spuštění a nebo spuštění s debuggerem. Podle konfigurace se použije buď FS-UAE nebo WinUAE (doporučují WinUAE). Při debugování je možné do programu vložit breakpointy, a v případě zastavení je možno program krokovat. Vše je zcela standardní tak, jak je zvyklý každý programátor (klávesy F5, Shift-F5, F10, F11, F9 pro různé funkce, viz. menu).
Výhod oproti nativnímu programování přímo na Amize (nebo v emulátoru) je několik:
- Obvyklé prostředí, na které je člověk už dlouhá léta zvyklý
- Plně konfigurovatelný editor s obvyklými klávesovými zkratkami a funkcemi
- Rychlost assembleru, linkeru, editoru.
- Neexistence nutnosti rebootovat. Kdo si zavzpomíná na své nesystémové programování na Amize, tak si jistě vybaví i nutnost resetovat Amigu při každém pokusu a chybě v programu (protože ty byly obvykle fatální). To zde odpadá, protože každé spuštění nastartuje emulátor. To je však (podle vašeho počítače a nastavení) velmi rychlé.
- Možnost debugovat a při tom vidět obraz na Amize. V případě nesystémového programování byl tohle docela problém. Buď jste viděli co copper-list právě zobrazuje, nebo jste viděli a debugovali váš kód (v případě zákazu přerušení však bylo i to problematické).
- V případě použití WinUAE přístup k jeho skvělému debuggeru, který dokáže zobrazit přesné časování, využití DMA a aktivitu jednotlivých čipů. Taky podporuje simulaci printf funkce -- tedy možnost z vašeho nativního Amiga kódu vypisovat formátovaný text na výstup systému, ve kterém běží emulátor.
Moc příjemné připomenutí si toho, jak se to celé kdysi programovalo, je k vidění na YT kanálu Photona/Scoopex.
Ten v ukázkách používá svůj upravený ASMTwo přímo na Amize, takže je to i hezké porovnání způsobů práce. Odkaz na jeho web jsem tady už uvedl (Coppershade).
Tady je dokumentace k instrukční sadě 68k i s časováním (pro základní 68000 je to snadné, časování u vyšších modelů je kvůli cache bohužel mnohem složitější).
A v případě, že byste chtěli programovat něco v systému, nebo si práci trochu ulehčit ve standardním C/C++, je k dispozici skvělý addon Amiga C/C++ Compile, Debug & Profile od Bartmana/Abyss.
Nevýhody oproti programování na Amize pod emulátorem mne po pravdě žádné nenapadají. Snad jedině pokud si někdo chce připomenout, jak se přesně vše ovládalo, pro ten pocit nostalgie. Srovnávat s programováním na skutečném železe z výše uvedených důvodů příliš nemůžu. Pocit nostalgie u skutečné Amigy a u skutečného PAL rozlišení (předpokládám pořádné demo-retro a tedy žádné RTG! 😉 ) je určitě ještě větší. Ale nakolik je to po tak dlouhé době strávené v mnohem pokročilejších editorech a prostředích dlouhodobě příjemné je diskutabilní. Já jsem se po osobní zkušenosti už nedokázal k ASMOne vrátit. Rozhodně ne k programování 14 zdrojáků se 150kB textu, z nichž se naše poslední produkce skládá.
Byl jsem mile překvapen, jak je v současnosti snadné znovu naskočit zpátky k programování pro Amigu. Po své (sice ještě krátké) zkušenosti si troufnu tvrdit, že je to snažší než kdysi. Většina lidí v první polovině devadesátých let u nás k programování používala buď assembler ASMOne (a jeho odvozeniny Seka, Trash apod.) nebo DevPac. A z vyšších jazyků kromě Basiců bylo k systémovému programování asi nejlepší jen SAS/C (dříve jako Aztec nebo Lattice). Ten byl schopen do určité míry překládat i C++ kód, ale byl velmi pomalý. Později pak ještě přišlo StormC, které mělo i své IDE, ale s tím jsem už neměl osobní zkušenost.
Nejsem si jistý, jestli se situace na staré Amize od té doby nějak zlepšíla. Zejména co se týče C++ překladačů. Použití addonů do VSCode a programování v externím prostředí tak může být velmi zajímavá varianta i pro systémové programátory. Ale to musí posoudit někdo jiný. Mé zájmy končí u zákaznických čipů OCS/ECS/AGA, nesystémového programování (kompletní převzetí přerušení a zobrazování) a assembleru. VSCode+Amiga-Assembly+WinUAE k tomu stačí.
Komentovat