JPR-PMI

Jak píšu na úvodní stránce, vlastnil jsem samotnou kartu JPR-1 a rozhodl jsem se s ní "něco spáchat". O JPR-1 se často mluví jako o jednodeskáči, ale viděl někdy někdo desku JPR-1 opravdu fungovat jako jednodeskáč? T.j. bez dalších karet, prostě jen s připojenou klávesničkou a displejem? No údajně něco takového existovalo, ale má to ještě někdo? A má k tomu dokumentaci a hlavně firmware?

Protože na poslední otázky jsem nenalezl kladnou odpověď, rozhodl jsem se udělat to nějak po svém. Čemu jsem se chtěl vyhnout, bylo psaní vlastního firmware (monitoru). To by byly desítky, možná stovky hodin práce. Tak jsem se rozhodl, že upravím monitor z PMI-80 a proto jsem výsledný systém nazval JPR-PMI. Ono je vždycky lépe nový systém odvodit z něčeho co už existuje, než si od začátku dělat svoje. Lákavá i je možnost, že software pro PMI-80 půjde po úpravách pustit i na tomto systému.

Nejprve jsem váhal, jestli na desce JPR-1 neprovedu nějaké úpravy, abych ji více připodobnil k PMI-80 - to se týkalo hlavně adresace RAM, kterou má JPR-1 jinde, než PMI-80 (JPR-1 má RAM v oblasti 2000-23FF a PMI-80 v oblasti 1C00-1FFF). Jenže by to bylo nečekaně komplikované (opravdu nestačí pouze přepojit "chipselecty") a vysloveně dělat z jednoho počítače jiný mi přišlo jako úchylnost. A tak jsem se rozhodl, že použiju hardware, jaký JPR-1 má a tak, jak ho má naadresovaný. Všechny potřebné úpravy se udělají v monitoru. Aby bylo monitor potřeba předělávat co nejmíň, mikroterminál jsem zapojil stejně, jako to má PMI-80. Připojil jsem ho na stávající porty na konektor K3.

Co se týká adresace EPROM, není problém. U JPR-1 i PMI-80 začínají EPROM od adresy 0000. O RAM už jsem se zmínil. Problém adresace RAM jsem vyřešil přeadresováním všech operací v monitoru s RAM o 400(hexa) bytů výše, tedy do stránky 2300-23FF místo 1E00-1FFF.

Poslední otázkou jsou porty - PMI-80 používá obvod 8255, JPR-1 má několik primitivnějších 3212. Navíc PMI-80 adresuje 8255 přes I/O porty, a JPR-1 adresuje obvody 3212 jako paměť. Zde bylo řešením v monitoru všechny instrukce OUT F8 nahradit STA 2800, OUT FA nahradit STA 2COO a IN FA nahradit LDA 2C00. Veškeré manipulace s bity při operaci s terminálem zůstavají beze změn. Je šikovné, že z jakýchsi podivných důvodů je v monitoru PMI většinou po každé operaci s porty ještě jeden NOP, takže dohromady máme 3 byty. To je dobře, neboť úprava pak nezmění délku kódu a vstupní body procedur zůstanou na stejných adresách jako má PMI-80.

Mikroterminál je zapojen z hlediska funkce stejně jako v PMI-80, použil jsem i dekodér MH1082, který přímo budí katody. Samozřejmě by šlo použít i třeba 74154 a tranzistory. MH1082 má výhodu, že dovoluje velký výstupní proud, takže už ho není potřeba "posilovat" tranzistory, ale možná je ho tady škoda. Adresovací vstupy MH1082 jsem připojil na P2-OUT na bity 0-3. Segmenty číslicovek jsem přes odpory a invertující budič 74LS640 připojil na P1-OUT. Matice kláves je stejná jako v PMI, výstupy tlačítek jsem připojil na P2-IN na bity 4-6. Vlastně port P1 JPR jsem použil namísto portu PA v PMI a P2 jsem použil namísto PC. Význam jednotlivých bitů jsem neměnil. Terminálek je na dvou deskách. Původně jsem ho totiž chtěl vestavět do pouzdra od nefunkční kalkulačky a chtěl jsem z této kalkulačky použít klávesnici. Pak se ukázalo, že upravit původní klávesnici je složitější, než jsem čekal. Tak jsem se rozhodl vyrobit i klávesnici a protože jsem byl unaven „drátkováním“ displeje, udělal jsem si na klávesnici plošňák. Použitá tlačítka z GME s označením P-DTE6xx, kde xx označuje barvu jsou na jednu stranu hezká. Na druhou stranu tato tlačítka nebyla nejlevnější. Zpočátku byl problém zakmitávání kláves, což se tu nutně projevuje víc než u PMI-80, které je taktované krystalem 10MHz, zatímco JPR-1 používá krystal 18MHz. Toto jsem vyřešil tak, že jsem přidal rutinu pro softwarové filtrování kláves, která též byla původně určena pro PMI-80. Zatímco PMI-80 se touto fitlrací nepříjemně zpomaluje, na JPR-1 to není při obsluze znát díky vyšší taktovací frekvenci.

Rutiny pro práci s magnetofonem byly z monitoru vypuštěny a nahrazeny funkcemi pro TRAPP, tedy nahrávání z PC a do PC. Linky TRAPP jsou zapojeny dle tabulky níže.

Poslední úprava monitoru se týká obsluh přerušení. Na desce JPR-1 je přítomen řadič přerušení 3214 umožňující zpracovávat až 8 úrovní přerušení. Jednodeskáč podle mě nemusí umět zpracovávat tolik úrovní přerušení, ale bylo by dobré kdyby uměl alespoň dvě, když už tam ten řadič je. Tak krom obsluhy RST7 jsem přidal ještě obsluhu RST6, po instrukci RST6 (vyvolává ji INT1) se z adresy 0030 provede skok na adresu 23E9. Zde jsou 3 volné byty, kde je možno umístit instrukci JMP na uživatelský program se zpracováním přerušení. RST7 (tedy po INT0) se zpracovává obdobně jako u PMI-80. Po RST7 se z adresy 0038 provede skok na adresu 23E6 (=1FE6+0400). Zde jsou rovněž 3 volné byty, kde je možno umístit instrukci JMP na uživatelský program se zpracováním přerušení. Bylo by možno po další úpravě monitoru využít i INT2, příslušný přívod k tomu zůstává volný. Neřeším to, podle mě jsou dvě úrovně přerušení postačující, ale kdyby se do toho někdo chtěl pustit, nic tomu nebrání.

Pokud někdo bude experimentovat s přerušeními, je potřeba upozornit na jednu zradu: Aby bylo možno povolit INT0 a INT1, je bohužel nutno v řadiči 3214 povolit i všechna přerušení vyšší priority. Tím se ovšem zdrojem přerušení může stát i TRAPP nebo klávesnice, což nechceme. Pokud s přerušeními (jako já) jen experimentujete, stačí TRAPP odpojit a nemačkat během hrátek s přerušeními žádné klávesy krom INT0 a INT1. Pokud by někdo měl pro přerušení vážné využití, nezbývá, než na desce JPR1 přerušit příslušné spoje k řadiči přerušení 3214. Je nepravděpodobné, že je někdy budete znovu potřebovat zapojit. Zvažoval jsem i jiné možnosti. Třeba místo INT0 a INT1 využívat INT5 a INT6 a pro mikroterminál a TRAPP použít datové linky 0 až 4. Jenže to by vyžadovalo provést v monitoru složitější úpravy. Navíc INT0 a INT1 mají tu výhodu, že jsou zapojeny na sběrnici. A ještě je tu komplikace, že INT6 vyvolává RST1 a ten je využíván jako break-point. Pochopitelně vůbec nemluvím o INT7, neboť následné RST0 by provedlo restart systému. Další možnost je využívat pro vstup z TRAPP a mikroterminálu jiný port, než P2-IN. Jenže zapojení je schválně voleno tak, aby se v maximální míře využil konektor K3 na desce JPR-PMI a K2 zůstal volný pro eventuální další hardware. Takž prosté odojení vyšších přerušení tak, že se prostě přeškrábe několik spojů na plošném spoji, se mi jeví jako cesta nejmenšího odporu. Jak už jsem psal, pochybuju, že kdy kdo bude takto odpojená přerušení vyšší úrovně na desce JPR-1 potřebovat znovu zapojit. Po restartu systému jsou automaticky zakázána přerušení všech úrovní, takže kdo nebude využívat přerušení, nemusí se obávat žádných z problémů s tím souvisejících.

Zapojení konektoru K3 lze tedy shrnout takto:
SměrSignálFunkce
OUT P1.0 a segment displeje
OUT P1.1 b segment displeje
OUT P1.2 c segment displeje
OUT P1.3 d segment displeje
OUT P1.4 e segment displeje
OUT P1.5 f segment displeje
OUT P1.6 g segment displeje
OUT P1.7 h segment displeje (+ LED na desce JPR-1)
OUT P2.0 K0 adresovací vstup MH1082
OUT P2.1 K1 adresovací vstup MH1082
OUT P2.2 K2 adresovací vstup MH1082
OUT P2.3 K3 adresovací vstup MH1082
OUT P2.4 nepoužit
OUT P2.5 nepoužit
OUT P2.6 TRAPP linka CTS
OUT P2.7 TRAPP linka DSR
IN P2.0 INT0
IN P2.1 INT1
IN P2.2 (INT2) nepoužito
IN P2.3 TRAPP linka RTS
IN P2.4 klávesnice řádek 0
IN P2.5 klávesnice řádek 1
IN P2.6 klávesnice řádek 2
IN P2.7 TRAPP linka DTR

Provizorní verze vypadala takto

Pak jsem přidal ještě upravený odřezek poškozené zběrnice z IQ151, což umožňuje připojit ještě jednu kartu ze SAPI. Za další je zde rozhraní TRAPP a vše jsem to namontoval na desku z novoduru a vypadá to k světu, nebo ne? Na fotografii není tlačítko INT1. Je to záměr. Napřed jsem totiž na INT1 kašlal a až když jsem monitor upravil pro zpracování RST6, tlačítko jsem pak doplnil dodatečně, ale zatím jen visí na drátech.


Zpět