Blog:Programovanie v assembleri i8080 pre PMD 85 (7)

Z PMD 85 Infoserver

Programovanie v assembleri i8080 pre PMD 85 (7)


Obsah

Určite by to bolo cool a to pravé retro, keby sme programovali priamo na PMD 85, keďže pre PMD 85 existujú dva komplexné vývojové nástroje: MRS a DAM. Určite ale budete súhlasiť, že pohodlnejšie to bude, ak v dnešnej dobe na vývoj použijeme radšej Emulátor PMD 85. Ale my to posunieme ešte ďalej, na MRS a DAM sa vykašleme, zdrojový kód budeme písať a aj kompilovať na PC a až výsledný kód si spustíme v Emulátore, kde si ho môžeme aj oddebugovať. Zrazu sa nám cool a retro vytratilo, ale verím, že to nakoniec oceníte. V každom prípade svoj výtvor nakoniec vyskúšajte aj na PMD 85, lebo žiadny emulátor nie je dokonalý a teda ani ten náš.

Adresár projektu na disku

Nájdite si na disku miesto, kde si budete ukladať svoje projekty v assembleri a vytvorte si tam adresárovú štruktúru, ako je vidieť na obrázku. V našom prípade je cesta k projektu d:\8bit\PMD-85\projects\!programovanie\asmprog1\ a samotný projekt je teda pomenovaný asmprog1. V danom adresári sú vytvorené tieto podadresáre:

  • data - tu si budeme ukladať rôzne dátové súbory, napr. grafiku a podobne
  • out - tu sa uložia skompilované binárky, prípadne ďalšie výstupné súbory
  • src - tu si budeme ukladať zdrojové súbory, v našom prípade teda s príponou a8080
  • .vscode - tento adresár na obrázku nie je, ale vytvoríte si ho, ak budete chcieť použiť VS Code editor (viď ďalej)

V adresárovej štruktúre je videť ešte dávkový súbor build.bat a projektový súbor PSPadu AsmProg1.ppr - popíšeme si ich neskôr.

Adresár projektu na disku a nastavenie projektu v editore PSPad
Adresár projektu na disku a nastavenie projektu v editore PSPad

Editor

Na editáciu zdrojového textu osobne používam najčastejšie textový editor PSPad so zvýrazňovačom syntaxe pre 8085 Assembler. Ďalšou alternatívou je Visual Studio Code s doplnkom Intel 8080 Macro-Assembler.

PSPad

V PSPade si treba vytvoriť Nový projekt, pomenovať ho (tu AsmProg1) a pomenovať si základný priečinok zdrojových súborov (tu src). Toto je iba "virtuálne" pomenovanie v rámci projektu a nemusí nijako korešpondovať s názvom adresára na disku, kde budú projektové zdrojové súbory uložené. V rámci projektu si takto možno vytvoriť viac priečinkov a "kategorizovať" si rôzne iné súbory v projekte.

V nastaveniach projektu je treba nastaviť Východzí priečinok a cestu ku Kompilátoru (viď obrázok). Ako kompilátor máme cestu k dávkovému súboru build.bat, ktorý bude popísaný ďalej. V rámci nastavení kompilátora sú dôležité aj ďalšie nastavenia, ale hlavne Analyzátor LOGov a Zachytiť výstup programu.

Kliknutím pravým tlačidlom na priečinok src v projekte vyberte položku kontextového menu Pridať súbory a vyberte súbory, ktoré chcete mať v tomto priečinku. Podobne je potom možné si vytvoriť aj ďalšie priečinky/podpriečinky a pridať tam ďalšie súbory. Vytvorenie týchto projektových priečinkov a pridanie súborov je výhradne pre lepšiu orientáciu v súboroch projektu a nemá žiadny vplyv na umiestnenie na disku a kompiláciu.

Až po pridaní súborov do projektu je možné uložiť tento novo vytvorený projekt - v našom prípade AsmProg1.ppr.

Po tomto nastavení bude potom možné spustiť kompiláciu pohodlne klávesovou skratkou Ctrl+F9, čím sa spustí už spomenutý dávkový súbor build.bat. Výstup konzoly PSPad zachytí a zobrazí do osobitného panelu na spodnej strane okna PSPadu (tento panel sa dá zobraziť/skryť pomocou Ctrl+L). Prípadné chyby sú v logu označené červenou bodkou a klik na daný riadok v logu zobrazí samotný riadok v zdrojovom súbore.

VS Code

Ak chcete využívať pre editáciu zdrojových súborov VS Code, nainštalujte si doň najprv doplnok (Extension Ctrl+Shift+X) Intel 8080 Macro-Assembler. Do projektového adresára pridajte vyššie spomenutý podpriečinok .vscode a doňho vytvorte tieto tri súbory:

  • settings.json - základné nastavenia editora, ale hlavne naviazanie na zvýrazňovač syntaxe
{
  "editor.tabSize": 8,
  "editor.insertSpaces": false,
  "editor.colorDecorators": false,
  "editor.rulers": [80],
  "files.eol": "\r\n",
  "files.associations": {
    "*.{a8080,asm,mac}": "i8080-macroasm"
  },
}
  • tasks.json - definícia "úlohy" (task) pre kompiláciu a chybový parser pre Macroassembler AS
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "AS macroassembler",
      "type": "shell",
      "command": "as",
      "options": {
        "cwd": "${fileDirname}"
      },
      "windows": {
        "command": "${workspaceFolder}/build.bat",
        "options": {
          "shell": {
            "executable": "C:\\WINDOWS\\System32\\cmd.exe",
            "args": ["/d", "/c"]
          }
        }
      },
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "isBackground": false,
      "presentation": {
        "echo": false,
        "revealProblems": "always",
        "focus": false,
        "panel": "dedicated",
        "clear": true
      },
      "problemMatcher": {
        "base": "$errmatcher-as",
        "applyTo": "allDocuments",
        "fileLocation": [ "relative", "${workspaceFolder}/src" ]
      }
    }
  ]
}
  • AsmProg1.code-workspace - "projektový" súbor pre definíciu pracovného adresára (Workspace). V atribútoch path nastavte správne cesty do projektového adresára na disku - pozor na zdvojené opačné lomítka.
{
  "folders": [
    {
      "name": "root",
      "path": "D:\\8bit\\PMD-85\\projects\\!programovanie\\asmprog1"
    },
    {
      "name": "source",
      "path": "D:\\8bit\\PMD-85\\projects\\!programovanie\\asmprog1\\src"
    }
  ],
  "settings": {
    "editor.tabSize": 8
  }
}

Po tejto príprave teraz v samotnom VS Code otvorte projekt: File -> Open Workspace... a vyberte súbor AsmProg1.code-workspace.

Kompilácia sa spustí klávesovou skratkou Ctrl+Shift+B. Prípadné chyby sa zobrazia do panelu PROBLEMS. Ten je možné zobraziť/skryť pomocou klávesovej skratky Ctrl+Shift+M.

Dôležitá poznámka: Napriek tomu, že VS Code má v menu Run možnosť spustiť Debugger, tak to v našom prípade nebude fungovať. My budeme debuggovať v samotnom Emulátore PMD 85.

Kompilátor

Na kompiláciu našich zdrojových súborov použijeme Macroassembler AS. Tento Macroassembler umožňuje preklad pre rôzne mikroprocesory, ale pre nás je dôležité, že aj pre Intel 8080. Na daných stránkach nájdete aj kompletný užívateľský manuál.

Pre rôzne utility, ktoré budeme ešte potrebovať si vytvorte niekde na disku spoločný adresár. Do tohto adresára si rozbaľte aj balík Macroassemblera AS. Dôležité teraz je, aby ste si cestu k tomuto adresáru s utilitami a aj cestu k bin adresáru Macroassemblera AS pridali do systémovej premennej prostredia Path (Win+Pause -> Rozšírené nastavenia systému -> Premenné prostredia -> Systémové premenné -> Path). V rovnakom dialógu je treba ešte pridať užívateľskú premennú AS_MSGPATH, ktorá musí byť nastavená opäť na cestu k bin adresáru Macroassemblera AS.

Pre naše potreby nás budú zaujímať 2 EXE súbory Macroassemblera AS:

  • asw.exe - samotný prekladač; jeho výsledkom je tzv. P-CODE súbor (čosi ako "relatívny" modul, prípona p) a súbor s listingom (prípona lst)
  • p2bin.exe - prevedie P-CODE súbor do čistého binárneho súboru

Výslednú binárku je možné samozrejme "ručne" nahrať do pamäte v Emulátore klávesovou skratkou (Alt+F11). Máme ale aj pohodlnejšie možnosti:

  • Utilita Bin2Ptp, ktorou si binárku vložíme do súboru pásky PTP a tú otvoríme v Emulátore a pomocou príkazov MGLD 00 | JUMP 0000 nahrajeme a spustíme z Monitora.
  • Utilita Quido, ktorou sa binárka spakuje a opäť vloží do súboru pásky.
  • Utilita MakePsn, ktorou si vytvoríme súbor Snapu, do ktorého vložíme našu výslednú binárku a Snap otvoríme v Emulátore.

Pre pohodlný vývoj je najvhodnejšie použiť alternatívu so Snapom. V tomto prípade sa nám náš program ihneď spustí a nemusíme v Emulátore nič dodatočné robiť. Alternatívy pre vytvorenie PTP budú mať svoje miesto neskôr pri vytváraní finálneho programu.

To posledné, čo tu nebolo uvedené, ale viac krát spomínané, je samotný dávkový súbor build.bat. Ako je vidieť, je potrebné si nastaviť 3 premenné PROJNAME, čo je meno adresára projektu, FILENAME je meno hlavného zdrojového súboru bez prípony a PROJPATH je cesta k projektovému adresáru. Ďalej si všimnite, že sú tam uvedené všetky 3 spomenuté alternatívy vytvorenia výstupného súboru, ale tie dve vytvárajúce PTP sú zapoznámkované a spracuje sa iba vytvorenie PSN.

K MakePsn ešte upozorním na prepínač -psn, ktorým utilite podstrčíme "šablónu" Snapu, vytvoreného v Monitore PMD 85-2A a obsahujúcom aj ROM monit2B.rom (template.psn bude možné stiahnuť v nasledujúcej kapitole spolu s projektom). To nám zabezpečí, že budeme mať inicializované systémové premenné Monitora a budeme môcť z našich pokusných programov slobodne volať rutiny Monitora.

Ešte poznámka k automatickému spusteniu Snapu, resp. otvoreniu PTP pásky. Zabezpečí sa to príkazom start FILENAME.EXT, čo ale vyžaduje, aby boli prípony súborov PSN a PTP asociované k Emulátoru PMD 85. Túto asociáciu prípon môžete urobiť v Emulátore: Nástroje -> Nastavenia... -> Všeobecné... -> Registrované typy -> Registrovať/Obnoviť.

@echo off

set PROJNAME=asmprog1
set FILENAME=asmprog1
set PROJPATH=D:\8bit\PMD-85\projects\!programovanie\%PROJNAME%
set SRCPATH=%PROJPATH%\src
set OUTPATH=%PROJPATH%\out

asw -U -L -i %SRCPATH% -o %OUTPATH%\%FILENAME%.p %SRCPATH%\%FILENAME%.a8080
if ERRORLEVEL 1 goto error

p2bin %OUTPATH%\%FILENAME%.p %OUTPATH%\%FILENAME%.bin -k -l 0 -r $-$
if ERRORLEVEL 1 goto error

makepsn -psn %PROJPATH%\data\template.psn -reg PC 0 -mem 0 -o %OUTPATH%\%FILENAME%.psn %OUTPATH%\%FILENAME%.bin
if ERRORLEVEL 1 goto error
start %OUTPATH%\%FILENAME%.psn
goto end

rem quido -i8080 -vram -ra 0xDDB0 -a 0 -ei -ptp -n MYASMPRG -o %OUTPATH%\%FILENAME%.ptp %OUTPATH%\%FILENAME%.bin 
rem if ERRORLEVEL 1 goto error
rem start %OUTPATH%\%FILENAME%.ptp
rem goto end

rem bin2ptp -a 0 -m MYASMPRG -o %OUTPATH%\%FILENAME%.ptp %OUTPATH%\%FILENAME%.bin
rem if ERRORLEVEL 1 goto error
rem start %OUTPATH%\%FILENAME%.ptp
rem goto end

:error
echo Chyba kompilacie.

:end



<< Inštrukčná sada mikroprocesora - Inštrukcie pre prácu so zásobníkom, inštrukcie pre vstup/výstup, ostatné inštrukcie Vypisujeme znaky na obrazovku >>