Jak se vám to rýmuje? Mně kupodivu docela dobře…
Zaprvé: Vezmete Arduino Uno.
Zadruhé: Použijete kód emulátoru 8080, co je pod licencí GPLv2 dostupný v rámci emulátoru Altairu 8800. Stačí jen samotný emulátor.
Zatřetí: Napíšete jednoduchý HAL – Hardware Abstraction Layer. V něm definujete, jak se čte z paměti, zapisuje do paměti a jak se pracuje s periferiemi. Já si nadefinoval, že v prostoru 0x0000-0x0fff bude ROM (tedy PROGMEM), v prostoru 0x1000-0x13ff bude RAM (vlastně jen pole hodnot byte).
RAM by šla zvětšit na 1.5kB, i když překladač píše varování. Zkuste si to, a nezapomeňte změnit příslušné hodnoty ve zdrojáku BASICu.
Za čtvrté: Otestujete si, jak to běhá, jednoduchým příkladem ve strojáku do ROM.
Za páté: Přidáte obsluhu portů. Port 1 budiž sériový port, port 0xFE bude ovládat LEDku na Arduinu. Jen tak, pro radost. Stgrojákem ověříte, že to šlape.
Za šesté: Popadne vás pejcha a řeknete si: Však proč nepoužít Tiny BASIC? Je to jednoduché, stačí implementovat jen čtení ze sériové linky a zápis do ní. Zdrojáky jsou…
Za sedmé: Celé si to přeložíte vlastním online assemblerem. Stačilo jen upravit syntax makra a na několika místech změnit apostrofy na uvozovky (DB ‚,‘ na DB „,“).
Za osmé: převedete výsledný HEX na sérii čísel, kterou includnete do toho arduinského .ino tam, kde má být ROMka.
Za deváté: Sebevědomě to celé přeložíte, spustíte – a ono to funguje!
Přiznávám, že kdyby to nefungovalo, tak by mi to asi sebralo trochu elánu, ale ono to fungovalo.
Za desáté: Zkusíte si přeložit i TinyBASIC verze 2. Nefunguje na první dobrou, protože musíte ještě změnit komunikační porty, ale pokud to uděláte stejně jako ve verzi 1, tak se to zase rozeběhne.
Nakonec z toho celého uděláte balíček a publikujete na GitHubu.
Dejte si taky!