První vlastní program pro EPS-103
Dalším logickým krokem v pokusech s úpravami EPS-103 je napsat si nějaký krátký program, který by šel v jednotce spustit. Samozřejmě nezačneme přepisováním původního firmware. V tuto chvíli si jen na něčem jednoduchém vyzkoušíme celý proces vývoje programu. V učebnicích programování se obvykle začíná programem „Hello world“. Budeme se držet tradice a napíšeme program, který po zapnutí EPS-103 napíše na displeji tento nápis.
Volba programovacího jazyka je v celku jednoduchá. Vzhledem k velikosti EPROM i RAM to bude assembler. Zapomeňte na C nebo ještě vyšší programovací jazyk. I se zapnutými optimalizacemi bude jejich kód vždy delší. Dalším důvodem pro použití assembleru je fakt, že původní firmware má stále v RAM svoje data, která nesmíme poškodit. Proto je nutné mít psaný program plně pod kontrolou.
To znamená, že musíme znát assembler 8085. Tím nechci říct, že je potřeba mít všechny instrukce naučené nazpaměť. Ale určitě se bude hodit nějaká dokumentace. Na internetu se dá ještě ledacos najít. Bohužel procesor 8085 je z dnešního pohledu velmi zastaralý a informací o něm se už zase tak moc nedochovalo. Proto jsem připravil několik základních dokumentů, které vám pomohou začít. Najdete je v celkovém souboru SDK8085.zip. Dalším pomocníkem může být simulátor. K mému překvapení dnes ještě najdeme simulátor 8085 online. Při krokování programu uvidíte, jak jednotlivé instrukce ovlivňují obsah registrů.
K psaní programu bude stačit libovolný textový editor. Jen je důležité, aby si editor do psaného textu nedoplňoval žádné svoje značky. Já rád používám program PSPad. Použití integrovaného vývojového prostředí necháme na později.
A je čas pustit se do psaní zdrojového textu. Samozřejmě jsem se nechal inspirovat původním firmware. Nejdůležitější je nastavení zásobníku na správnou adresu v RAM. To zajistí, že instrukce používající zásobník nebudou přepisovat jinou část paměti. Proto tím začneme. Dále předpokládám, že někteří z vás budou provádět tyto experimenty s připojenou motorovou jednotkou EPR-203. Proto je potřeba v dalším kroku inicializovat obvod 8255A a výstup PC nastavit na 0. To znamená vypnout motory. Pak už můžeme inicializovat displej a poslat na něj nápis. Běh programu ukončíme nekonečnou smyčkou. Popřípadě instrukcí HLT. V assembleru by takový program mohl vypadat takto:
; Hello world
jmp Start
.ORG 0040h
.dseg
mystring .text "Hello world"
.cseg
Start: lxi sp, 4700h ; Set Stack Address
mvi a, 82h ; CW
sta 5803h ; 8255A Write Control Word
xra a
sta 5802h ; 0 -> PortC: stop motors
mvi a, 0Ch ; LCD Command: Display on, cursor off
call sub_1B70 ; Command -> LCD
lxi h, mystring ; Address of text
mvi b, 0Bh ; Number of characters
Loc01: mov a, m
call sub_1B77 ; Character -> LCD
inx h ; Address of next characters
dcr b ; Decrement counter
jnz Loc01
Stop: jmp Stop ; Neverending loop
hlt ; For sure
; Write 1 byte command
sub_1B70: call sub_1B7E ; Wait for LCD ready
sta 4802h ; Write command byte
ret
; Write 1 byte data
sub_1B77: call sub_1B7E ; Wait for LCD ready
sta 4803h ; Write data byte
ret
; Wait for LCD ready
sub_1B7E: push psw
loc_1B7F: lda 4800h ; Read LCD status
ani 80h ; Test bit 7: 0 = ready
jnz loc_1B7F ; if not, repeat
pop psw
ret
.END
Text uložíme do souboru *.asm v libovolném našem pracovním adresáři. Dalším krokem bude přeložení zdrojového textu do strojového kódu. To se většinou provádí přes objektový soubor *.obj. Cílový strojový kód může být i ve formátu *.bin. Program, který tuto práci vykoná za nás, se jmenuje compiler / linker. Já jsem použil program tasm.exe. V souboru tasm32.zip najdete dvě tabulky instrukčních sad a dokumentaci. Program přidáme do pracovního adresáře. Lze jej spouštět v příkazovém řádku windows včetně Win10. Vlastní překlad se provede příkazem:
TASM.EXE -t85 -b Test01.asm Test01.bin
Uvedené parametry znamenají:
- -t85: použije tabulku instrukcí procesoru 8085 ze souboru TASM85.TAB
- -b: vytvoří binární soubor čistého strojového kódu
- Test01.asm: název souboru se zdrojovým textem
- Test01.bin: název souboru s výstupním strojovým kódem
Pro spuštění překladu je potřeba otevřít okno příkazového řádku a přepnout se do našeho pracovního adresáře s kompilátorem a zdrojovým textem. Abych si práci zjednodušil, napsal jsem si jednoduchý soubor pro spouštění Run.cmd. Díky němu nemusím okno příkazového řádku spouštět ručně. Soubor je v pracovním adresáři a na prvním řádku je napsaný příkaz pro překlad. Na druhý řádek jsem napsal příkaz cmd /k
který způsobí, že se okno příkazového řádku samo nezavře. Takže po skončení překladu si mohu přečíst případná chybová hlášení. V pracovním adresáři mám tedy tyto soubory:
- Run.cmd
- TASM.EXE
- TASM85.TAB
- Test01.asm
Výsledný binární soubor nahrajeme programátorem do vymazané paměti EPROM. A to je vše. Když budete chtít provádět jakékoliv změny v programové části firmware, máte už základní potřebné nástroje k dispozici. Všechny zde popisované soubory si můžete stáhnout v jednom balíčku SDK8085.zip.