Emulátor osmibitového CP/M počítače s ATmega

Následující konstrukce vznikla jako vzpomínka na "retro" časy, kdy osobní počítače začaly vyrůstat z plenek. V dávných dobách byly ještě programy mezi počítači různých výrobců prakticky nepřenosné. Asi nejúspěšnějším pokusem vedoucím k prolomení programové bariéry mezi osmibitovými počítači byl operační systém CP/M Garyho Kildalla.

Éra osmibitových počítačů však byla příliš krátká na to, aby se výrazněji zapsala do historie lidstva :-). Přesto některé myšlenky jsou uloženy hluboko v základech operačních systémů dnešní doby. A velmi pravděpodobně něco z idejí G. Kildalla běhá v počítači, u kterého sedíte dnes.

Kdybyste si chtěli vyzkoušet, jak takový prehistorický systém fungoval, máte zde k dispozici emulátor jednoduchého CP/M počítače. Nejde o detailní popis, hlavní podklady pro stavbu zde ale najdete. Zbytek z velkého množství informací o CP/M počítačích hledejte na jiných stránkách. Vždyť víte: Google je mocný :-)

Zdroj inspirace

Popisovaný počítač není zcela původní. Vyrostl na základě upraveného projektu FatFS, který vytvořil a dále vylepšuje ChaN na svých stránkách:

http://elm-chan.org/fsw/ff/00index_e.html

Náplní FatFS projektu je implementace souborového FAT, který používají MMC a SD karty pro různé mikrořadiče. Je zde uvedeno několik příkladů použití tohoto systému, mimo jiné i pro ATmega64. Možnost číst a ukládat soubory na paměťovou kartu mne přivedla k myšlence, kolik práce by bylo potřeba na doplnění konstrukce k vytvoření jednoduchého počítače s funkčním operačním systémem.

Mikrořadiče ATmega mají Harwardskou strukturu, nejsou tedy na podobné úkoly příliš vhodné. Ale napadlo mne, že při emulaci jiného procesoru pomocí výpočetní síly mikrořadičů ATmega, by bylo možné na tomto procesoru spustit tak "archaický" systém, jako je CP/M.

A skutečně. Stačilo upravit ChaNovo zapojení a pak obětovat asi 14 dnů po večerech psaní programu a ejhle - podařilo se zkompilovat a pak i spustit první program napsaný na tomto "CP/M" počítači.

Pozor! Upozorňuji, že vše bylo děláno za účelem zábavy a uspokojení vlastní zvědavosti. Nejde o kompletně dodělaný projekt. Řada funkcí v emulátoru CP/M není implementována. Napsal jsem pouze kostru potřebnou k základnímu spouštění některých programů. Pokud byste měli chuť nad tím bádat dále, je zde ještě minimálně stejné množství práce na dodělání :-)

Princip činnosti

Emulovaný počítač je uložen v paměti mikrořadiče ATmega128. Mikrořadič v rámci hlavní programové smyčky provádí několik úkolů:

  1. Na nejnižší vrstvě emuluje jádro procesoru 8080. V paměti mikrořadiče je vytvořena odpovídající registrová struktura. Program vybírá z RAM paměti jednotlivé instrukce, dekóduje je a provádí podle nich konkrétní operace jako procesor 8080. Program provádí všechny instrukce kromě vstupu a výstupu, kdy pouze provede hlášení na konzolu. Také při instrukci HALT pošle hlášení na konzolu.
  2. Jestliže programový čítač ukáže při skoku nebo volání podprogramu do oblasti vyhrazené pro BIOS operačního systému, jsou provedeny jenom základní služby týkající se vstupu a výstupu na konzolu. Při požadavku BIOS podprogramu ostatních zařízení (děrovač a disk) je pouze vypsáno chybové hlášení.
  3. Podobně je tomu i v případě vrstvy BDOS operačního systému. Programově jsou obslouženy jenom některé (24) vybrané služby. Ve zbývajících případech je vysláno chybové hlášení na konzolu. V této části je nejvíce využit příklad, který původně vytvořil ChaN.
  4. Ještě vyšší vrstvou operačního systému je program CCP, který se stará o komunikaci s uživatelem (podobá se programu "command.com" z pozdějšího DOSu nebo prvních Windows). Program CCP také není emulovaný kompletně, jsou z něj vybrány některé nejdůležitější příkazy a doplněny nové příkazy "TIME" a "EJECT". Popis najdete zde.
  5. Poslední částí, která je emulována programem mikrořadiče, i když ve standardním systému CP/M funguje jako běžný program je DDT. Znalci ví, že se nejedná o prášek proti škůdcům :-) Pro začátečníky jenom uvedu, že jde o ladicí prostředek (Dynamic Debugging Tool). Protože vyžaduje těsnou spolupráci přerušení - skoků do oblasti SPA, kde nemá jinak program v CP/M co dělat, je i DDT emulováno. Těch asi 30 řádků kódu už neznamenalo nijak moc práce navíc. I DDT je zde (jako BIOS, BDOS, CCP) zjednodušeno a provádí pouze některé příkazy. Popis je zde.

Největší část programu počítače obsahuje soubor "Pocitac.c". Některé instrukce 8080 jsem ale pro větší rychlost napsal přímo v assembleru do souboru "Arit80.S".

Projekt byl vytvořen a přeložen v AVR Studiu 4. Přeložený program je v souboru "Pocitac.hex". Po naprogramování nezapomeňte nastavit propojky procesoru, především externí krystal s maximální frekvencí.

Popis zapojení

Následující obrázky získáte ve větším rozlišení po kliknutí na ně.

První část schéma je jenom mírnou obměnou zapojení, které vytvořil ChaN.

Druhá část je velmi jednoduchá. K mikrořadiči je katalogovým způsobem připojena rozšiřující paměť SRAM a jsou zde zakresleny obvody napájení. Z napájecího napětí 8 až 12 V= je vyrobeno pomocí dvou stabilizátorů napětí 5 V pro napájení logických obvodů a 3,3 V pro napájení paměťové karty.

Konstrukce počítače

Celý počítač je sestaven na jednom jednostranném plošném spoji. Obrázek uložte a vytiskněte v rozlišení 600 dpi. Rozměr je 100 x 90 mm.

Zde je seznam součástek a rozmístění SMD součástek na desce plošného spoje.

K počítači je potřeba připojit terminál a stejnosměrný napájecí zdroj. Zdroj postačuje 100 mA. Terminál pro připojení má vstupní úrovně TTL, nelze zde přímo připojit rozhraní RS232. V tomto případě doporučuji obvod MAX232 (nebo jeho ekvivalent), případně postačí i jednoduchý převodník úrovní se 2 tranzistory.

Postup stavby a oživení

Po osazení součástek a po kontrole napájecích napětí naprogramujte pomocí sériového programování mikrořadič přímo na desce plošného spoje. Zdrojový program včetně přeloženého .HEX souboru najdete zde

Připojte počítač k vhodnému terminálu. Po zapnutí by se měl počítač ohlásit a pak můžete zkusit reakci na první dva příkazy podle obrázku:

Příkaz "TIME" by měl již fungovat, "DIR" odpoví, že "disk" není připraven.

V této fázi můžete ještě otestovat, zda RTC obvod pracuje správně a při opakovaném zadávání příkazu "TIME" dochází k posunu času.

Použití počítače

Aby byl počítač použitelný, musí mít možnost data (programy) odněkud číst a někam je zase ukládat. Rozjíždět v dnešní době disketový systém by bylo náročnější a kromě hezkých zvuků, které vydávaly, byste to už moc neocenili :-)

Diskový systém nám může nahradit jedna paměťová SD nebo MMC karta. Nejvhodnější jsou nějaké malé staré "reklamní" karty s kapacitou např. 32 MB, které bývaly dříve přibalené k fotoaparátům. Na takovouto kartu umístěte do kořenového adresáře obsah tohoto souboru.

Vzniknou tam 4 adresáře, představující 4 disky "A:" až "D:". Disky "C:" a "D:" jsou prázdné. Disk "A:" obsahuje editor ED a překladač jazyka C s assemblerem AS a řadu zdrojových programů pro použití. Doporučuji přeložit si COPY.C a výsledek používat pro kopírování souborů. Postup je uveden zde:

Kdo by chtěl vyzkoušet překladač jazyka BASIC, může se podívat na disk "B:" a vyzkoušet:

Pro fajnšmekry bych pak doporučil interpret jazyka BASIC:

Závěr

Zde popsaný počítač byl (jak bylo uvedeno na začátku) vyvíjen pouze pro zábavu a nebylo záměrem jeho seriózní nasazení a používání.

Přiznávám, že nejvíce práce a přemáhání mi dalo vytvořit tuto dokumentaci, protože počítač doposud neměl ani schéma. Původně jsem jej tvořil přímo na desku plošného spoje při nahlížení do technických listů :-).