Projekt PMI-80 Under Emulation v1.00 ke stažení

Neregistrovaný, ale o to známější uživatel fóra Hannibal (známý z tématu o emulátoru EMA51, zvukového generátoru, mikro fotbalu, MCU modulu, Sféry, postupu pro crack a LED kostky) byl tak hodný a zaslal mi hotovou konstrukci PMI-80.

PMI-80 Under Emulation - MINIsystem-8080Emulator
Áno - čítate správne, a fakt nejde o žart, ? hoci - keď mi fotky tejto veci O.Kowalczuk 1.4.2014 poslal, myslel som si, že si robí „prdel“. Za všetkým stojí Y.Anastassiová, známa z jednodeskových mikropočítačov EMA-51, EMA-552, a tiež Hellena-51. Uvolnila k stiahnutiu svoju aplikáciu (z r.2003!) s názvom „MINIsystem-8080Emulator“, pod ktorou PMI-80 beží… Tu je zosumarizované, o čo ide: obr.1 - schéma a interná hierarchia aplikácie „MINIsystem-8080Emulator“ (v0.86ED2) Yasmina derivátom 89C51ED2 emulovala CPU-8080 s 1,75kB RAM a obvodom 8255 v základnom móde-0: porty PA, PB, a PC pracujú iba ako paralelné. Obslužná rutina „boot-loader“ po zapnutí, či resete MCU, skopíruje obsah internej EEPROM do RAM, a zabezpečí automatické spustenie užívateľom vytvoreného programu. Plusom je i HW v MCU (serial, čítač, PWM,…), ktorý ako „alternatívne“ porty rozširuje možnosti emulátora. Je možné využiť i prerušenie „INT“ (RST 7), ktoré odovzdá emulovanému 8080 „call“ na 0038h. Emulátor má i malý „debuger“, kde v okne terminálu vidíte internú činnosť emulácie 8080 a portov, s možnosťou krokovania, pomalého behu, či editovania registrov a stránok pamäte. Spojiť to s PC môžete cez serial port, bižšie info - viz. text ďalej… Teraz k PMI-80:

Pre beh monitora PMI-80 na „MINIsystem-8080Emulátore“, boli nutné úpravy originál ROM pamäte, ktorej komentovaný Asm-výpis nájdete na www.nostalcomp.cz. Kowalczuk zmenil direktívy adries „RAM bufferu“, ktorý PMI-80 používa, z pôvodnej 1Fxxh na 06xxh (last-RAM-page MCU). Adresy emulovaného 8255 súhlasili s reálnym 8255 v PMI-80, a zvyšné zmeny sa týkali len inštrukcií „LXI“ a „OUT“. Potom stačilo použiť asembler Tasm, a hotovú PMI-80 ROM boot-loaderom prijať a uložiť do EEPROM od 0-3FFh. Pozor: pri posielaní „bin“ súborov, nezabudnite označiť na termináli status: „binary“! Schéma: piny „PA-7“ a „PC-7“ sú nezapojené, bola tam pôvodne logika a tvarovače signálu pre pripojenie magnetofónu, ako záznamového média. Tu je to nepoužité, lebo MCU má reálny UART. Zmena 74LS42N, za dekodér 74LS154, používaný veľakrát ako náhrada za MH1082: originál PMI-80 vysiela data na vstupy ABCD dekodéra MH1082 negovane: 1.znak displeja svieti pri ABCD=1111. Kowalczuk urobil v ROM úpravu, ktorá umožňuje použiť menší obvod 74LS42N. Tu sú úpravy ROM-ky: „MINI system – 8080 Emulator“

Je to aplikácia, na ktorej PMI-80 beží. Emuluje CPU-8080 s ext. INT vstupom a RAM od adr.0-6FFh (EEPROM 0-6FFh je len záloha pre užívateľský program). Porty: 00/01=adresa/data EEPROM: prístup k stránke-7 (700-7FFh), 02/03/04=H/L/SW 16bit.counter (in/out=PB0/PB1), 05/06/07=baud/bufer/ SW serial portu, 08/09/0A/0B=PA/PB/PC/SW PPI-8255 (len mód-0), 0C=port „X“, 0D/0E=bufer/SW 8bit.PWM (out=PB4), 0F=1-sec.báza. (SW-8255: —AC-Bc (ABCc=1/0-I/O), SW-counter:00/03=stop,01= počítadlo impulzov,02=generátor, SW-PWM:00=stop,01=run, SW-serial:0101000R, R=indikuje príjem). Porty sa zrkadlia, zápis do PA-8255 urobíte rovnako na adrese 08, ako na adrese 18h, či B8h. Zápisom bajtov do CTh a CTl čítača, sa uložia data zároveň do jeho predvoľby, čo využíva mód generátor. Pre mód „counter“ (počítanie) sa musí zapísať CTh/l = 0000, aby počítal od nuly. Po pretečení FFFFh, sa opätovne nahrá do neho jeho predvoľba, čo je možné využiť pre počítanie v skrátenom cykle. Kanál PWM má fixnú freq: fosc/2 a dá sa iba zapnúť/vypnúť. Sériový port zápisom do buffera automaticky odvysiela bajt na 9600/N/8/1 a má fixný režim. Baudrate je variabilné zmenou konštanty TT pre čítač, ktorý ho časuje. Príjem bajtu indikuje bit R v jeho PSW porte (R = 1). Port „X“ je obojsmerný, t.j: čo do neho zapíšete, to i prečítate, a má 4 bity: 1111xxxx. Out 1-sec. bázy je pin P3.3, prečítanie jej portu vracia hodnotu 00/01h (pre L a H), zápisom ho - naopak na H či L úroveň môžete nastaviť. Je to využiteľné vtedy, ak používate 1-sec. výstup na generovanie prerušenia INT. Interná EEPROM stránka 07xx (xx=adresa EE), dovoľuje 8080tke zapisovať/čítať konštanty priamo v emulácii. Prerušovací systém je podobný, ako v reálnom 8080: po povolení inštrukciou „EI“, vzniká vynútený call:0038h (RST 7), pričom 8080 ďalšie prerušenie zakáže. Povoliť ho musí ďalšia „EI“, až tesne pred návratom (RET). Rozšírenie PMI-80 nie je možné: interná RAM končí adresou 6FFh, a jej prekročením od 700-FFFFh nastúpi externý access. Stratia sa porty PA, PC, a 2 bity portu „X“. No v inom prípade použitia MINI system-8080Emulátora je možné pomocou dekodérov pridať externé obvody PPI-8255 (alebo RAM), ku ktorým potom ale už pristupujete ako k RAM, nie ako k portom… Štart „boot-loadera“ je urobený automaticky, ak je detekovaná interná EEPROM ako čistá, tj.celý jej rozsah (0-6FFh) = iba bajty FFh, alebo 00. Ak sú v nej zaznamenané nejaké iné bajty, boot-loader po resete MCU automaticky načíta do RAM celý jej rozsah 0-6FFh a spustí emuláciu.Vynútiť spustenie boot-loadera je potom možné napr. držaním stlačenej klávesy „space“ na termináli, a následný reset MCU. Menu (verzia v0.86ED2): , erase - vymaže EEPROM 0-6FFh, alebo 700-7FFh naplnením bajtmi FFh receive - príjem binárneho súboru, ak je kratší ako 0-6FFh, tak samočinný návrat , load - načíta (ak treba) EEPROM do RAM, rozsah: 0-3FFh, alebo 400-7FFh , save - uloží (ak treba) RAM do EEPROM, rozsah: 0-3FFh, alebo 400-7FFh debuger - spustenie debugeru emulátora: krokovanie, editovanie, pages,…atd. „run“ mode - emulácia inštrukcií je prerušovaná zobrazovaním statusu na termináli „step“ mode - emulácia inštrukcií je krokovaná so zobrazovaním statusu na termináli register - editovanie registrov emulovaného 8080 CPU (porty sa nedajú editovať) reset registers - vynulovanie všetkých registrov emulovaného 8080 CPU (nie portov)

page - vypíše na terminál celú stránku pamäte RAM v hexa a ascii zobrazení , editor debugeru - jednoduchý editor bajtov na adresách RAM stránok pamäte programu quit - návrat do boot-loadera…

Ukážka činnosti boot-loadera pri príjme PMI-80.rom (v0.8.6ED2) a uložení do EEPROM 0-3FFh. Po následnom „reboote“, už po pár sekundách normálne naštartuje monitor prototypu PMI-80… (obvod dekodéru 74LS42N s budiacimi tranzistormi a odpormi má Oleg na spodu prototypu displeja). Ešte poznámka k debugeru: je to malý „tool“, pre úpravu bajtov RAM (v hexa) a editovaní registrov 8080 počas emulácie. Môžete s ním urobiť napr. výpis ROM PMI-80 po jednotlivých stránkach, editovať registre, alebo klávesou „space“ krokovať činnosť inštrukcií PMI-80 ROM, ako je zobrazené tu: [MINIsystem-8080 EMULATOR] Y.Anastassiou 2003

MINIsystem-8080Emulátor bol vo viacerých verziách, v0.89ED2 bola pre obvod AT89C51ED2 v puzdre PLCC-68, a emulovala dva obvody PPI-8255 (v základnom móde-0). Ako však už Oleg zistil, existujú aj „ULTRA“ verzie tohoto emulátora, ktoré v roku 2013 upravili pre použitie na 1 cyklových jadrách x51 „Children of TROY“ (autori jednodeskáča „Hellena-51“). Sú v dvoch modifikáciách, a využívajú obvody AT89LP51ED2 a AT89LP6440, obidva na frekvencii 24MHz (24-MIPS). Obidve verzie sú ale vyriešené inak, ako verzie určené pre AT89C51ED2: emulácia v AT89LP51ED2 nekopíruje obsah EEPROM do RAM, ale ju mapuje ako klasickú ROM, tj. od adr. 0-FFFh (4kB). Adresy 1000-17FFh už patria RAM-ke. Port „X“ má 6-bitov a pribudol i port „Y“, ktorý pracuje buď ako 4-bit I/O, alebo ako 4-vstupový A/D converter. Rozšírený je i počet PWM výstupov (na 4) a pridaná emulácia „2-wire“ rozhrania. U obvodu AT89LP6440 je k dispozícii až 8kB EEPROM a až 4kB RAM priamo na čipe MCU, tento obvod ale pracuje len s napätím 3,3V… Keďže je obvod AT89LP51ED2 pinovo ekvivalentný s AT89C51ED2, zapožičal som si ho (od O. Kowalczuka) a „ultra“ emuláciu som vyskúšal - rýchlosť je neuveriteľná: pri kryštáli 16MHz sa už na PMI-80 nedá písať, lebo emulovaný 8080 nedokáže ošetrovať zákmity klávesnice. Pri 24MHz má 8080 výkon asi 5 MIPS. Za zmienku stojí i presnosť emulácie: vyhodnotil ju (po pripojení externej RAM 64kB) test „8080-Exerciser“, ktorý je od verzie v0.87ED2 (LP2, LP64) „integrovaný“ a prispôsobený chalanmi Children of TROY v MCU, a dá sa spustiť: všetkých jeho 25 krokov, prešlo na emulátore bez jedinej chyby… Musím sa priznať, že ma to najskôr všetko veľmi chytilo, no s odstupom času pri písaní tohoto článku, som pomaly menil názor. Teraz považujem stavbu takéhoto mikropočítača (či už originálu PMI-80, alebo tejto miniatúrnej repliky), ako aj stavbu MINIsystem-8080Emulátora (i v rýchlej 1-cyklovej modifikácii) za zbytočnosť. Arduino valcuje naprosto všetko a PMI-80, či MINIsystem-8080 Emulátor, sú iba nevyužiteľné hračky, vhodné i napriek svojím možnostiam iba na mrhanie času ?. Postavil som to len preto, že mám na to čas a možnosti v práci vo firme. Doma totiž nemám ani pájkovačku…
PMI-80ue_Kowalczuk's_prototype_05.jpg
PMI-80ue_Hannibal's_prototype_04.jpg
PMI-80ue_Hannibal's_prototype_03.jpg
PMI-80ue_Hannibal's_prototype_02.jpg
PMI-80ue_Hannibal's_prototype_01.jpg
Work.zip (499 KB)
Tasm_8080+8085_assembler.zip (41.9 KB)
PMI-80ue.pdf (6.93 MB)