Autor: Ing. Peter Chrenko, Janka Matušku 2178, Topoľčany, Slovensko
Kontakt: ICQ: 177600338 - podporujem zbierku príkladov z matematiky
Download potrebných súborov
História vývoja (nielen emulátorov) PMD-85

Urob si sám PMD-85

PMD-85 bol slávny osembitový mikropočítač hojne používaný v Československu v rokoch 1984-1994. Rozšírený bol hlavne cez krúžky tedajšieho ZVAZARMu, domov pionierov a mládeže i celkovou dostupnosťou v školstve. mikropočítač PMD-85
Cieľom tejto konštrukcie je umožniť nadšencom postaviť si vlastný klon PMDčka. To znamená vytvorenie zariadenia z ktorého po pripojení televízora, klávesnice a napájacieho zdroja sa prenesiete do rokov 80-tych a zahráte si napríklad obľúbeného MANIC MINERa alebo skúsite niečo naprogramovať v starom programovacom jazyku BASIC-G.

Toto všetko vrátane cca 113 KB pôvodných hier a programov sa podarilo postupnými iteráciami napokon vtesnať iba do dvoch integrovaných obvodov a to: ATmega128-16 a IO 64 KB pamäte RAM. Zobrazovanie obrazu na televízore (TV), generovanie zvuku, obsluha klávesnice ako aj vlastná emulácia chovania procesora Intel 8080, ktorý bol srdcom pôvodného PMD-85, je realizovaná čisto softvérovo.

Samozrejme vždy je rozdiel medzi kópiou a originálom a inak to nebude ani v našom prípade. Niektoré nepodstatné vlastnosti pôvodného PMDčka boli zanedbané alebo vynechané, niečo bolo implementované zjednodušene. Z pohľadu softvéru, pôvodných programov na PMDčku, sa dosiahla kompatibilita takmer 100%, bežia všetky známe programy vrátane výbornej hry HLÍPY od Karla Šuhajdu. Generovanie čiernobieleho TV obrazu vrátane atribútov blikanie a jas je veľmi výborné, náhrada magnetofónu pamäťou FLASH na čítanie taktiež výborná, nehovoriac o niekoľkonásobnom zrýchlení nahrávania programov. Pôvodná klávesnica PMDčka ako jediné vstavané vstupné zariadenie je nahradená lacnou externou PS/2 klávesnicou. Najväčšie momentálne nedostatky v konštrukcií resp. obslužnom softvéri sú pri generovaní zvukového výstupu.

PMD-85 bol domáci 8-bitový mikropočítač so vstavanou klávesnicou a výstupom na klasický TV príjimač. Výstup na TV bol čiernobiely ale bola možnosť pripojiť externý farebný monitor s rozhraním RGB. Ale aj tak boli grafické možnosti PMDčka malé - rozlíšenie 288÷256 pixelov, pričom každá 6-tica mala spoločný 2 bitový grafický atribút. Na vtedajšiu dobu to bol výborný obraz, keďže ZX Spectrum malo ešte nižšie rozlíšenie 256÷192 + grafické atribúty. PMDčko bolo skonštruované a vyrábané niekdajšou Teslou Piešťany okolo roku 1982. Neskôr ho v rôznych obmenách začalo vyrábať viacero domácich výrobcov a vznikli modely PMD-85/2, PMD-85/2A, PMD-85/3, Didaktik Alfa 1,2, Didaktik Beta, Maťo, Zbrojováček C2717 a iné. PMDčko malo vstavanú svojsku nespoľahlivú klávesnicu, zvukový výstup - speaker, zasúvateľný ROM modul s BASIC-G. Ako pamäť na uchovávanie programov slúžil klasický magnetofón.
Čo sa týka softvéru - bola to éra tvorby softvéru nadšencami, vzniklo a bolo preportovaných veľa hier. Veľmi činné bolo trio autorov VBG software - Vlastimil Veselý, Libor Bedrlík a Ladislav Gavar. Na PMD-85 teda existuje par megabajtov hier - Manic Miner, Flappy, Boulder Dash, Fred, Penetrator, Saboter, Pampuch, Wurmi, Galaxia, Mikrotron, Willy atď. Niektoré z nich (dá sa konfigurovať) sú vstavané v tomto klone PMDčka (ktorý interne volám kódom small_pmd_128, 128=veľkosť FLASH pamäte v KB, small=rozmery PMDčka 3x4 cm).

Pôvodné PMD-85 bol mikropočítač postavený z v tej dobe populárnej procerosovej rodiny Intel 8080 (MHB 8080). Jednalo sa o obvody: 8080 - procesor, 8228 - radič zbernice, 8224 - hodinový generátor, 3x8255 - paralelné rozhranie, 8251 - sériové rozhranie apod. Typickým pre systémy z 80-tych rokov bolo použitie aj obvodov s malou hustotou integrácie - TTL logiky. U PMD bol technológiou TTL obvodov zostavený kompletný videoprocesor, starajúci sa o cyklické zobrazovanie videopamäte na pripojenom televízore.

PMD sa skladalo z nasledovných hardvérových modulov: mikropočítač PMD-85

Nebudeme rozoberať pôvodné obvodové riešenie PMDčka, problematike sú venované monografie dostupné v knižniciach. Uvedieme preto popis realizácie nášho klonu PMD-85/1. V krátkosti treba dodať že verzie PMD-85/1, PMD-85/2, PMD-85/2A, PMD-85/3 boli navzájom čiastočne nekompatibilné a tiež väčšina softvéru vznikla práve pre model PMD-85/1.
Treba tiež dodať že PMD-85/1 komunikovalo s magnetofónom prostredníctvom USART 8251, čo znamená registrovo orientovaný pohľad na komunikáciu s magnetofónom. Je podstatne jednoduhšie emulovať prístup na magnetofónovú pásku po bajtoch s podporou handshake USART-u ako emulovať čítanie z mgf. pásky cez jeden bit (v reálnom čase) - ako bolo realizované u vyšších modeloch PMD. Je však pravda že kvalita BASIC-u i firmware postupne u jednotlivých modelov stúpala, ale veľa softvérového vybavenia vzniklo pre PMD-85/1.

Cieľom konštrukcie je teda vyhotovenie zariadenia, z ktorého sa po pripojení napájacieho zdroja (AC-DC adaptéra), PS/2 klávesnice a klasického televízora so vstupom kompozitného videa/SCART stane plnohodnotné PMD-85/1. Navyše s virtuálnou magnetofónovou kazetou 113 KB hier medzi inými MANIC MINER, BOULDER DASH, PENETRATOR, DUCH&PAMPÚCH, HLÍPA, PAMPUCH, FLAPPY, WURMI či SABOTER.

Obr. 1
Obr. č.1

Na obrázku č.1 je znázornená obvodová schéma. Komunikácia s užívateľom sa realizuje prostredníctvom externej klávesnice a televízneho prijímača. Jeden z kľúčových prvkov konštrukcie je zvládnutie generovania úplného televízneho signálu v rozlíšení 288x256 pixelov, pričom každá šestica pixelov v TV riadku má dvojbitový grafický atribút, presne tak ako pôvodné PMD-85/1. Schéma a doska plošného spoja bola navrhnutá s použitím freeware verzie programu EAGLE 4.1

VIDEO D/A prevodník

Generovanie kompozitného videa (analógový signál) COMPOSITE_VIDEO realizuje asymetrický D/A prevodník realizovaný odporovou sieťou R1-R4 a D1-2 ktorá mixuje TTL videodáta VIDEO_DATA a synchronizačnú zmes SYNC do štandardného čiernobieleho videosignálu cca 1 Všš. Signál COMPOSITE_VIDEO je vyvedený na CINCH konektor VO0. Vopred upozorňujem že na jednovrstvojej doske plošného spoja je nutné prepojiť prepojkou PAD1 s COMPOSITE_VIDEO. Obvod jasového atribútu, zložený z diód D1, D2 a odporu R2 realizuje zvýšenie jasu zobrazovaného pixelu v prípade rovnakej hodnoty signálov BRIGHT=1 a VIDEO_DATA=1. Softvérovo je realizovaná inverzia jasového atribútu BRIGHTNESS po stlačení klávesy ALT+C. Opakované zatlačenie cyklicky prepína význam jasového atribútu.

VIDEO_DATABRIGHTSYNCCOMPOSITE_VIDEO [V]
LXL0 (synchro úroveň)
LXH0.7 (úroveň čiernej)
HLH1.0 (50% jas)
HHH1.4 (100% jas = biela)

Tabuľka č.1.

Napäťové úrovne signálu COMPOSITE_VIDEO sú veľké približne podľa tabuľky č.1, kde symboly logických úrovní H, L a X majú obvyklý význam. Z tabuľky je zrejmé že úrovne výstupného kompozitného signálu nie sú exaktne podľa odporúčaní TV normy, ale neuberá to na funkčnosti zapojenia či ostrosti generovaného obrazu.

Tiež treba spomenúť fintu, ktorú používalo mnoho 8biťákov - namiesto generovania 625 riadkového obrazu (čiže 2 rôzne polsnímky) s opakovacou frekvenciou 25 Hz, generujú sa 312 riadkové polsnímky (s opakovacou frekvenciou 50 Hz), čiže na TV obrazovke sú každé dva susedné TV riadky úplne zhodné. Zjednodušuje to logiku generovania, šetrí kapacitu videopamäte a obraz je ostrejší.

PAMÄŤOVÝ PODSYSTÉM

K procesoru ATmega128 (IC1) je pripojená 128 (alebo 64) KB SRAM pamäť v púzdre SOJ IC2 s dobou prístupu 70 ns, z ktorej sa momentálne využíva iba prvých 64 KB.
Pamäť je adresovaná 17 bitovou adresnou zbernicou, vytvorenou z portov monolitického mikropočítača ATmega128 tak, aby procesor mohol v priebehu 2 taktov vyslať 16 bitovú časť adresy inštrukciou OUT. 16-tym adresným bitom sa prepína medzi dvoma 64 KB bankami pamäte a tento bit sa bežne nezúčastňuje adresnej aritmetiky. Podľa schémy na obrázku č.1 vidíme že adresné bity 0. až 15. sú porozhadzované po portoch PB a PD na prvý pohľad neobvykle, tak aby na jednovrstvovom plošnom spoji nevzniklo kríženie vodičov. Pamät SRAM je necitlivá na výmenu poradia bitov adresnej a bitov dátovej zbernice. Dátová obojsmerná zbernica je riešená použitím celého 8 bitového portu PC. Signály čítania /RD a zápisu /WR sú generované 2 bitmi portu PA. Pamäť je trvalo selektovaná signálmi tak aby: /E1.E2 = 1.

Pamäť SRAM je použitý (odporúčaný) typ HYUNDAI HY628100B-70. Neodporúčam pamäť SAMSUNG K6X1008C2D, recenzent mal s ňou problém, aj v iných aplikáciach.

Využitie adresného priestoru ATmega128
interná FLASH,
64 K x 16 bitov (128 KB)
0x0000 ÷ 0x0C9C 6.4 KB emulačný program - generovanie TV obrazu, emulácia 256 inštrukcií procesora 8080, obsluha klávesnice, emulácia ostatných periférií PMD-85/1
0x0C9D ÷ 0x1E9C9 KB obsah ROM modulu pôvodného BASIC G
0x1E9D ÷ 0xFFFFcca 113 KB, obsah magnetofónovej pásky PMDčka - hry, programy.
interná EEPROM,
4 K x 8 bitov (4 KB)
0x0000 ÷ 0x0FFF 4 KB ROM firmware PMD-85/1
interná RWM,
4 K x 8 bitov (4 KB)
0x0000 ÷ 0x0FFF 4 KB - všeobecné použitie, zásobník, odkladanie častí obrazu pri zobrazení informácií o emulátore (po stlačení ALT+S),
externá RWM,
128 K x 8 bitov (128 KB)
0x00000 ÷ 0x0FFFF 64 KB - Uloženie obrazu pamäte emulovaného PMD-čka. Oblasť 0x08000÷0x0BFFF je softvérovo chránená proti zápisu. Pri štarte emulátora sa skopíruje obsah internej EEPROM do oblasti 0x08000 ÷ 0x08FFF a následne sa spustí emulátor procesora 8080 od adresy 0x08000.
0x10000 ÷ 0x1FFFFOblasť nie je momentálne využitá, a preto môže byť doska plošného spoja osadená ib 64 KB SRAM

Takéto riešenie pripojenia externej pamäte RAM umožňuje zvýšiť priepustnosť pamäťového podsystému oproti štandardne používanemu zapojeniu z manuálu s použitím záchytného registra (ušetrí sa teda jeden integrovaný obvod, zjednoduší doska plošných spojov). ATmega128 bohužial nepodporuje lineárny pamäťový priestor externej RAM plných 64 KB, nakoľko vnútorná RAM a registre sú v adresované tými istými inštrukciami ako externá pamäť. Aj z tohto dôvodu nie je použitie odporúčaného zapojenia externej pamäte podľa manuálu výhodné. Na emuláciu správania PMDčka je potrebných lineárnych 64 KB priestoru RAM, ktoré sú využívané nasledovne:

Využitie adresného priestoru PMD-85/1
0x0000 ÷ 0x7FFF 32 KB RAM
0x8000 ÷ 0x8FFF 4 KB ROM firmware
0x9000 ÷ 0xBFFF 12 KB neobsadené
0xC000 ÷ 0xFFFF 16 KB VIDEORAM

VIDEOPROCESOR

Videoprocesor periodicky číta obsah videopamäte a zaisťuje generovanie TV signálu cez VIDEO D/A prevodník. Táto činnosť zaberá použitému mikroprocesoru ATmega128 približne 3/4 z celkového strojového času. Zvyšná 1/4 výkonu postačuje na simuláciu chovania procesora 8080, použitom v originálnom PMD-85. Pozrime sa podrobnejšie ako a z čoho sa generuje videosignál.

Videopamäť je 16 KB pamäť RAM, logicky organizovaná do 256 riadkov po 64 bajtoch. Jeden riadok obsahuje 48 "viditeľných" bajtov a 16 bajtov ktoré sa nezobrazujú (doba spätného chodu TV lúča). Jeden bajt je podľa nasledovnej tabuľky organizovaný tak že nesie informáciu o 6 pixeloch a k nim prislúchajúci 2 bitový atribút:

D7D6D5D4D3D2D1D0
BLINKBRIGHTNESSP0P1P2P3P4P5

Zaujímavé je reverzné poradie pixelov P0 až P5, t.j. pixel vľavo má nižšiu bitovú váhu ako pixel ležiaci vpravo od neho v rámci každej šestice pixelov.
Takto organizovaný pamäťový priestor videopamäte umožňuje zobraziť obraz v rozlíšení 288 × 256 pixelov. Každá horizontálna šestica pixelov môže byť zobrazená navyše v 4-och módoch:

BLINKBRIGHTNESSzobrazenie
LLnormálne
LHzvýšený jas
HLnormálne + blikanie 1 Hz
HHzvýšený jas + blikanie 1 Hz

Najpracnejšou úlohou videoprocesora je serializácia jedného TV mikroriadku, t.j. rozklad 48 bajtov do 288 pixelov spolu s grafickými atribútmi v reálnom čase. To vyžaduje spracovať 48 bajtov počas 48 µs, teda zvládnuť konverziu 8 Mb/s dát do 6 Mpx/s (megapixelov za sekundu). To znamená pre každý bajt vyslať adresu na adresnú zbernicu, prečítať ho, vyslať postupne 6 po sebe idúcich pixelov, inkrementovať ukazovateľe .... Pri použití procesora ATmega128 taktovaného na 18 MHz by sme museli jeden pixel vygenerovať za 3 periódy hodín. Keďže bežne dostupný je procesor bežiaci na 16 MHz, bolo nutné urobiť kompromis a generovať nerovnako široké pixely podľa tabuľky:

P0P1P2P3P4P5= 6 pixelov (1 µs)
3 clk2 clk3 clk3 clk2 clk3 clk= 16 clk@16 MHz
3 clk3 clk3 clk3 clk3 clk3 clk= 18 clk@18 MHz

Dva pixely z každej šestice sú skrátené na 2/3 šírky normálneho pixelu aby 6 pixelov bolo vygenerovaných za 16 periód hodín, t.j. za 1 µs. Pri takte 18 MHz sú pixely (po rekompilácií programu) rovnako široké. Frekvencia procesora je plne voliteľná konštantou v programe. Pri nastavení frekvencie (a rekompilácií) na nižšiu hodnotu ako 16 MHz nie je možné generovať 288 pixelov na TV riadok, ale úmerne sa zníži počat pixelov na riadok. Napríklad pri 8 MHz je to 144 pixelov. Podotýkam o tejto možnosti - pri oživovaní konštrukcie je možné začať s 8 MHz interným RC oscilátorom. Ale na reálne používanie je to veľmi pomalé, obraz sa trasie (pretože RC oscilátor je menej stabilný), je viditeľná iba cca polovica z každého TV riadku. Pri 8 MHz emulácia PMDčka nebeží už v reálnom čase, procesor ide príliš pomaly.

Serializácia videodát spolu s grafickými atribútmi je možná aj vďaka špeciálnemu rozloženiu signálov VIDEO_DATA a BRIGHT na porte PORTE, ktoré umožňuje využiť inštrukciu aritmetického posuvu vpravo (ASR). Blikací atribút BLINK je realizovaný čisto softvérovo.

Generovanie synchronizačných signálov

Na vytvorenie úplneho kompozitného videa potrebujeme okrem modulačného signálu VIDEO_DATA taktiež synchronizačný signál SYNC. Horizontálny synchronizačný signál s opakovacou frekvenciou 15625 Hz a šírkou impulzu 4.7 µs negatívnej polarity je realizovaný interným PWM modulátorom vyvedenom na pine OC3A. Polohu horizontálneho synchronizačného impulzu je možné nastaviť takmer ľubovoľne vzhľadom na začiatok generovania TV mikroriadku - konštantou v programe. V súčasnej verzii sa 6 µs po horizontálnom synchronizačnom impulze sa začína kresliť prvý pixel daného mikroriadku. Za jednu sekundu sa teda zobrazí 15625 mikroriadkov čo tvorí 312 mikroriadkov s opakovacou frekvenciou 50.08 Hz. Je zvolené neprekladané riadkovanie, t.j. susedný párny aj nepárny snímok sú totožné. (Klasická TV norma uvažuje o 625 TV riadkoch, ktoré sa prenášajú s opakovacou frekvenciou 25 Hz systémom: najprv párny snímok tvorený 312.5 riadkami a potom nepárny snímok 312.5 riadkov. 312.5 riadkové snímky sa teda prenášajú frekvenciou 50 Hz.)

Z celkového počtu 312 mikroriadkov sa aktívne zobrazuje 256 mikroriadkov. Zvyšné mikroriadky sú nepoužité alebo slúžia na prenos snímkových (vertikálnych) synchronizačných impulzov. Vertikálny synchronizačný impulz tvorí 5 TV mikroriadkov tvorených s predĺženým horizontálnym synchronizačným impulzom na 32 µs. Poloha - vertikálne a horizontálne posunutie obrazu je možné zmeniť v programe zmenením práve posunutia synchronizácie. Jedná sa o zjednodušené implementovanie TV normy. Konštrukcia bola overená na televízoroch: CTV 2134A a ďaľších. Pri vývoji obslužného programu bola odhalená nutnosť generovať vertikálny synchronizačný impulz ako 5-ticu predĺžených horizontálnych impulzov na 32 µs. Jeden impulz proste niektorým TV prijímačom jednoducho nestačil na snímkovú synchronizáciu.

EMULÁCIA PROCESORA 8080

Keďže ATmega128 je vyťažená generovaním videosignálu, vygenerovanie každého TV mikrotriadku trvá cca 50 µs zo 64 µs. Zvyšný čas spätného chodu lúča cca 12 µs je využitý práve na emuláciu správania procesora Intel 8080 a ostaných obvodov PMDčka.

Doska plošného spoja (DPS)

Konštrukcia plošného spoja bola navrhnutá tak aby bola realizovateľná na jednostrannej doske plošného spoja (freeware EAGLE umožňuje navrhovať max. 10cm×10cm obojstranne) ako vidíme na obrázku č.2. Najpracnejšou úlohou bolo zabezpečiť nekríženie vodičov, čo sa takmer podarilo až na jeden signál, ktorý je nutné prepojiť prepojkou PAD1 s COMPOSITE_VIDEO (CINCH) konektorom. Zabezpečiť nekríženie ostatných signálov na DPS sa podarilo najmä vhodným priradením signálov I/O portov procesora ATmega128, na schéme je to vidieť ako nelogické poprehadzovanie jednotlivých signálov adresnej a dátovej zbernice. Taktiež niektoré bity I/O portov sú použité iba rozvod iných signálov alebo napájania, najmä v priestore pod procesorom.

DPS of emulator PMD-85 Obrázok č.2

Postup výroby DPS:

  1. Jednoduchá výroba DPS, odskúšaná bola metóda fotocestou - jednostranne plátovaný kuprextit s nastriekanou vrstvou fotorezistu POSITIV-20, ďalej je potrebná PE fólia s vytlačeným vzorom DPS (postačuje vytlačená v predajni FAXCOPY). Prenos vzoru DPS na fotorezist prostredníctvom horského slnka. Veľmi nutné je dodržať bezprašnosť pracoviska vzhľadom na šírku spojov (10 mil) a medzier.
  2. Na vyčistenú vyvolanú, vyleptanú a vyvŕtanú DPS odporúčam naniesť vrstvu roztoku kolofónie v liehu, nechať chvíľu odschnúť a nalepiť procesor na zodpovedajúce miesto na DPS. Odporúčam zafixovať pájkovačkou aspoň na krajných 8-mich pinoch púzdra TQFP 64. Podobne nalepiť do kolofónie a zafixovať aj pamäť a ostatné súčiastky. Čiže začíname osádzaním súčiastok od najdrahších s najviac vývodmi. Je to tým že na osadenie 64 pinového švába budete potrebovať priestor na jeho posúvanie v kolofónií pinzetou. Taktiež je vhodné osadiť súčiastky s klasickými vývodmi, prv než kolofónia vytvrdne.
  3. Na SMT montáž súčiastok stačí použiť klasickú transformátorovú pájkovačku na ktorej hrot upevníme tenký drôtik na naberanie mikrokvapiek PbSn pájky. Kolofóniou dosiahneme aby sme nezlepili piny SMD súčiastok.
  4. Prvú vrstvu kolofónie odporúčam zotrieť liehom, nechať odschnúť a naniesť novú vrstvu roztoku kolofónie.

Oživenie konštrukcie

Po správnom osadení všetkých súčiastok a konektorov vyskúšajte pripojiť prúdovo obmedzený zdroj napätia (napr. adaptér) cca 9-15 V jednosmerných na napájací konektor. Na napájacích pinoch procesora skontrolujte prítomnosť napájacieho napätia +5 V. Ak je napájanie procesora v poriadku, pripojte ISP programátor na zbernicu SPI a skontrolujte opäť napätie, či pripojený programátor nemá veľkú spotrebu. Otestujte funkčnosť ISP SPI rozhrania napríklad prečítaním FLASH/EEPROM/fuse bitov z procesora.
Následne je možné prikročiť k nastaveniu poistiek (fuses) procesora a nahratiu obsahuje pamäte FLASH a EEPROM do procesora ATmega128.


Obrázok č.3 - pohľad na stranu súčiastok DPS.

Obrázok č.4 - pohľad na stranu konektorov DPS. (CINCH - COMPOSITE_VIDEO, CINCH - SOUND_OUT, JACK - napájanie, PS/2 - klávesnica, SIP6 - ISP programátor)

Download programu z PC

Na nahratie (upload) emulačného programu do pamäte FLASH a EEPROM a nastavenia poistiek (fuses) procesora Atmega128 využívame rozhranie SPI vyvedené na konektore JP1 (ISP). Pretože niektoré signály rozhrania sú používané aj rozhraním ku PS/2 klávesnici je bezpodmienečne nutné pred uploadom ju odpojiť, pretože klávesnica by prenos rušila. Počas uploadu môžeme na pripojenom TV sledovať horizontálne čiary, indikujúce prebiehajúci prenos - podobne ako kedysi na legendárnom ZX Spectre pri nahrávaní programov z mgf pásky. Na upload súborov cez SPI rozhranie sa osvedčil program PonyProg a avr-dude z balíka utilít WinAVR.

Nastavenie poistiek (fuses) procesora

Na prepnutie procesora do módu ATmega128 a použitie externého kryštálu 16 MHz je potrebné nastaviť poistky takto:

fuse_high_byte = 0x81
fuse_low_byte = 0xFE
fuse_ext_byte = 0xFF
Čiže to znamená:

EESAVE0 Ostatné poistky nastaviť na hodnotu 1 (zakúpený procesor by mal mať tak nastavené). Nula v tabuľke znamená naprogramovaný bit (prepálená poistka). Upozornenie - ATmega128 je od výroby prednastavená v režime kompatibility s ATmega103, je nutné preto nastaviť správne poistky podľa tejto tabuľky, inak obslužný program nebude fungovať správne. M103C=1
M103C1
BOOTSZ10
BOOTSZ00
SPIEN0
CKOPT0
CKSEL31
CKSEL21
CKSEL11
CKSEL00

Upload obsahu FLASH a EEPROM do procesora ATmega128

V adresári code/ predkompilované obsahy EEPROM pamäte pmd.eep a FLASH pamäte pmd.hex. S ich uploadom by ste nemali mať žiadne problémy. V prípade úspešného nahratia dát do pamätí (a správnom nastavení poistiek) by ste mali na pripojenom TV prijímači káblom CINCH-SCART prečítať hlásenie:

** PMD-85 READY /1.0 **

Následne stačí odpojiť ISP programátor a zasunúť PS/2 konektor AT klávesnice a môžete začať pracovať s Vaším novým PMDčkom. ISP programátor a klávesnica nesmú byť zapojené súčasne!, pretože PC-AT klávesnica zdiela port spolu s ISP programátorom.
Ako do procesora napáliť programy o ktoré máte záujem z pôvodného PMD sa dozviete v nasledujúcich ďalej - je však potrebné mať možnosť prekompilovať zdrojové súbory. Z hľadiska elektromagnetickej kompatibility nie je vhodné mať súčasne pripojený TV prijímač a zasunutý ISP programátor v našom PMD + počítač PC, hrozí nebezpečie vytvorenia zemnej slučky pri nedokonalom oddelení zdrojov jednotlivých prístrojov od siete!

Popis klávesnice

Ako vstupnú perifériu používalo PMD-85-1 neštandardnú QWERTZ klávesnicu, ktorej klávesy sú namapované na PS/2 klávesnicu nasledovne:
ENTER = EOL - ekvivalent ENTER-u na PMDčku
CTRL = STOP - kláves zastavenia programu
ALT = MENU - kombináciou ALT a iného klávesu sa vyvolávajú špeciálne funkcie:

Esc K0 K1 K2 K3 K4 K5 K6 K7 K8 K9 K10 K11
RCL !1 "2 #3 $4 %5 &6 '7 (8 )9 -0 =_   <-       WRK ?/ C-D   
CLR Q W E R T Z U I O P @ ^\ EOL INS HOME |<- INS DEL |<-  
  A S D F G H J K L +; *: DEL END ->| <- HOME ->
Shift   Y X C V B N M >, <. ?/ Shift ^\ |<- |<- END ->| EOL
STOP   MENU   MENU     STOP <- ->| -> INS DEL

Treba upozorniť že pôvodné PMD-85/1 bolo osadené nekvalitnou klávesnicou a preto bolo softvérovo realizované potlačenie zákmitov jej kontaktov. Preto niekedy môžete mať pocit že sa klávesnica zasekla, ale je to vlastnosť pôvodného SCAN algoritmu PMDčka, ktorým sa zákmity ošetrovali. Príliš krátke stlačenie alebo príliš rýchle písanie na klávesnici je náchylné na výskyt stavu zablokovanej klávesnice, ale to je dané nedokonalosťou firmware PMD-85/1.

Základné povely PMD-85/1

Medzi základné povely, ktoré by som Vám dovolil pripomenúť patria:

MGLD XY
(napríklad MGLD 02) spôsobí nahratie hry (alebo programu) z magnetofónovej pásky, ktorá je v našej konštrukcií realizovaná ako časť FLASH pamäte ATmega128. XY je dekadické dvojciferné číslo, pod ktorým je daný program uložený na páske. Niektoré programy v strojovom kóde majú samospúštanie (realizované nahratím časti zásobníka z mgf pásky), niektoré treba spustiť povelom:
JUMP ADDR
kde ADDR je 4-ciferná hexadecimálna adresa spustenia. Drvivá väčšina hier pre PMDčko používa na štartovanie tieto adresy: 0000, 0100,1000, 1500 alebo 2000. Ak spúštaciu adresu hry neuhádnete, zrejme spustite náhodné dáta, ktoré Vám premažú RAM-ku a preto je nutné hru alebo program nahrať povelom MGLD ešte raz. Veľmi užitočná je RESETovacia kombinácia kláves ALT+ESC (resp. ALT+1).
DUMP ADDR
výpis obsahu pamäte od adresy ADDR
BASIC G
spustenie interpretera BASIC-u. Na nahrávanie programov pod BASICom treba použiť príkaz:
LOAD Y
(napríklad LOAD 10) na nahratie programu z magnetofónovej pásky (Y je dekadické číslo programu, pod ktorým je uložený na páske) a spustiť ho je možné príkazom:
RUN

Samozrejme že PMDčko pozná omnoho viac príkazov, v BASIC G Vám môžem odporúčiť nahrať si nejakú BASIC hru (napr. WURMI, BOMBARDER) a príkazom LIST si pozrieť zdrojový program. Určite sa na nejaké finesy o niekdajšom programovaní rozpamätáte.

Hry (rom0)

Nasledovný popis niektorých hier PMD-85 pochádza z materiálov autora DOSovského emulátora PMD-85 Milana Galčíka z Topoľčian. Topoľčany sú asi mesto s najvyššou koncentráciou autorov emulátorov PMDčiek vôbec... Niektoré hry v BASIC-u niesú prikompilované v ATmega128, ale je možné ich tam nahrať.

- Niektoré hry sú tzv. samospúšťacie, t.j. po ukončení nahrávania sa samé spustia. U tých problémy nebývajú. Niektoré sa však musia spustiť explicitne, a to tak, že po ukončení nahrávania sa napíše "JUMP xxxx", kde xxxx je hexadecim lne štvorčíslie, tzv. spúšťacia adresa. Pri každej hre je uvedené jej číslo, názov, spúšťacia adresa (ak má hra autoštart, tak ????), ovládanie a krátky pokec.
Manic Miner PMD-85 Duch & Pampuch, PMD-85
Hry v programovacom jazyku BASIC G, čiže treba k nim interpreter tohto jazyka uložený v ROM module. Po loadnutí interpretera do pamäti príkazom "BASIC G" sa hry - programy nahrávajú príkazom "LOAD nn", nn je číslo hry. - žiadna z basicovských hier na PMD-85 1 nie je tzv. samospúšťacia, t.j. po ukončení nahrávania sa sama nespustí. Preto je potrebné napísať príkaz "RUN". - Pri každej hre je uvedené jej číslo, názov a krátky pokec.


Manic Miner 2, PMD-85 Boulder Dash, PMD-85 Fred, PMD-85 Zaby, PMD-85 VBG Penetrator, PMD-85

Softvérové vybavenie ATmega128

Emulačný softvér pre ATmega128 je napísaný v assembleri v kombinácií s preprocesorom - skriptovacím jazykom PHP. Na kompiláciu odporúčam mať nainštalované balíky WINAVR, AVRASSEMBLER a skriptovací jazyk PHP. Prípadne rozdiely v inštalácií nastavte v súbore code/Makefile. Jednotlivé zdrojové súbory sú uložené po adresároch:

adresársúborpopis
code/8080.asmrozskoková tabuľka jednotlivých 256 kódov inštrukcií procesora 8080.
basic1.rombinárny obsah ROM modulu s BASIC-G
monit1.rombinárny obsah ROM PMD 85/1 - firmware (MONITOR)
basic1.asmobsah ROM modulu BASIC-G vo formáte ASM, vygenerovaný skriptom games.php
fuses_18.txttextový popis nastavení konfiguračných fuses
Makefiledávkový súbor pre skompilovanie zdrojových kódov. Nastavuje sa v ňom adresár $(MGFDIR), z ktorého sa prikompilujú PMD-85/1 programy do vstavanej magnetofónovej pásky. Príkazom make all skompilujete všetky zdrojové kódy a nahráte obsah pamätí FLASH a EEPROM do mikroprocesora. Príkazom make pmd.hex preložíte zdrojové kódy, príkazom make eeprom preložíte zdrojové kódy a nahráte obsah EEPROM pamäte a napokon make flash preložíte zdrojové kódy a nahráte ich do FLASH pamäte.
macro.asmdefinície priradenia jednotlivých I/O pinov procesora, jednoduché makrá
kbd.phpprerušovacia obslužná rutina príjmu znaku od USART0 od klávesnice PC-AT. Po príjme znaku sa v internej bitovej mape vo formáte 16x5 bitov zaznačí informácia o stlačení alebo pustení jednotlivého klávesu. Taktiež je realizovaná OSD obrazovka po stlačení ALT+S, reset PMDčka po stlačení ALT+1 (ALT+ESC).
kb_lookup.asmMapovacia tabuľka SCAN kódov klávesnice na ich pozíciu v matici kláves PMD-85
monit1.asmobsah ROM pamäte PMD-85/1 vo formáte ASM vygenerovaný skriptom games.php. Je uložený do pamäte EEPROM
video.phpgenerovanie TV obrazu, serializácia TV riadku, synchronizačných impulzov, zvuku.
pmd.phpHlavný zdrojový súbor, inicializácia, emulácia jednotlivých inštrukcií procesora 8080.
pmd.hexobsah FLASH pamäte ATmega128, získaný kompiláciou
pmd.eepobsah EEPROM pamäte ATmega128, získaný kompiláciou
pmd.asmZdrojový assemblerovský súbor získaný po prejdení pmd.php vykonaním PHP programu
pmd.lstvýpis - listing po preložení pmd.asm
pmd.mapvýpis priradenia assemblerovských symbolov, získaný kompiláciou pmd.asm
games.phpSkript na konverziu binárnych ROM modulov do assemblerovskej formy. Taktiež je určený na zbalenie obsahu romXY adresárov, ich RLE kompresiu do jedného súboru
games_rom.asmobsah magnetofónovej pásky PMD-85/1 vo formáte ASM vygenerovaný skriptom games.php. Dáta su komprimované RLE metódou - opakujúce bajty sú nahradené značkou, hodnotou a počtom opakovaní.
docs/index.htmlDokumentácia
schema/schema128.schSchéma zapojenia emulátora PMD-85/1 vo formáte EAGLE 4.10
schema128.brdObrazec dosky plošného spoja vo formáte EAGLE 4.10. Opäť upozorňujem na nutnosť jednej prepojky vo vedení signálu COMPOSITE_VIDEO
plosak_top_mirrored.epsZrkadlový obrazec dosky plošného spoja vo formáte EPS- postscript, vhodný na tlač na fóliu pri výrobe DPS fotocestou. Opäť upozorňujem na nutnosť jednej prepojky vo vedení signálu COMPOSITE_VIDEO
rom0/ AUTO.PMD
BOMBARDE.02B
Boulder Dash.06$
FRED.04$
HORAC.25$
INVAZE.PMD
MANIC1.02$
PAMPUCH.18$
PENETRAT.05$
Tank.00$
Tehly.PMD
WURMI.07B
ZABY.PMD
Obsah mgf pásky - hry a programy v strojovom kóde a v BASIC-u PMD-85/1. Kedže je limitovaný obsah internej FLASH pamäte (na hry a PMDčkové programy zostáva cca 113 KB), nepodarilo sa ani po kompresií uložiť viacej PMD-85/1 programov. Ak chcete zaspomínať na iné hry, odporúčam pozrieť či sa nenachádza v inom adresári romXY/. Prepísať v code/Makefile premennú $(MGFDIR) na hodnotu rom1 alebo rom2. Alebo môžete vytvoriť vlastný romXY/ adresár s vlastným obsahom.
rom1/ BLUDISTE.23$
Ceres1.pmd
FLAPPY.24$
KANKAN.27$
KARE3D2.00$
MANIC23.03$
PUZZLE.02$
Obsah mgf pásky - ďaľšie hry a programy v strojovom kóde PMD-85/1.
rom2/ HLIPA.21$
HORAC.25$
PEXESO.PMD
SABOTER.28$
WILLY.15$
Obsah mgf pásky - ďaľšie hry a programy v strojovom kóde PMD-85/1.

Emulátor procesora 8080

Vlastná emulácia procesora 8080 je pekným príkladom extrémného programovania za účelom vyžmýkania maximálnej priepustnosti programu. Vlastne je to dôsledok RISC architektúry, keď sú inštrukcie procesora optimalizované pre programátora a súčasne na rýchlosť vykonávania. Spolu s 32 takmer voľne použitelnými registrami je radosť programovať. Vôbec sa to nedá porovnávať s programovaním INTEL 8080, kde bol jeden univerzálny register a programovanie bolo ako valčík: 1.vlož do akumulátora jeden operand, 2.vykonaj operáciu, 3.ulož výsledok z akumulátora.

Emulátor PMDčka je komplexný program napísaný v assembleri z ktorého asi najzaujímavejšie časti sú:

Záver

Záverom možno už iba dodať že konštrukcia dokazuje pokrok v technológiach v priebehu približne 20-tich rokov (1985-2005) v kategórií tuctových mikroprocesrov - Intel 8080 a ATMEL MEGA128 a celkovú technickú úroveň dnešnej doby.
Tiež konštrukcia niekdajšieho PMD-85/1 z produkcie TESLY Piešťany je veľmi vďačná v tom že sa vlastne zobral pôvodný softvér, ktorý tvorilo a ladilo množstvo šikovných ľudí. Efekt je takmer dokonalý - klasické hry (FLAPPY, BOULDER DASH, MANIC MINER, TETRIS...) v kombinácií jednoduchej konštrukcie s novým procesorom... Bez výborného softvéru by vlastne vznikol len ďalší generátor testovacích televíznych obrazcov. Len moje laborovanie ako vtesnať PMDčko do iného procesora je niekoľkoročné úsilie a na vývoj každej zložitejšej hry bol ich autorom obetovaný čas rádovo tiež roky, suma sumárom - keby začnete vyvíjať takéto zariadenie (malú hernú konzolku) od nuly, bude Vám to trvať zrejme niekoľko desaťročí.

Forever 8 bits, forever PMD-85 ...

Ing. Peter Chrenko, © 2006

Recenzent

Ing. Juraj Bulisčák, OM8ACE - relizácia 2 ks emulátora PMD-85/1 podľa tejto konštrukcie. Vďaka za preštudovanie a pripomienky pri nastavovaní fuses (poistiek)!.



Odkazy:
Naša trieda 1.F - 4.F, 1986 - 1990, ZŠ Tríbečská ulica, Topoľčany