UPM 3.02 - volitelně rozšířený monitor pro PMI-80

Motivací pro vznik monitoru UPM bylo vytvořit konfigurovatelný monitor pro PMI-80, který by obsahoval již existující rozšíření a ta, která jsem vytvořil. Dále jsem chtěl, aby každé rozšíření bylo možno snadno vložit nebo vypustit případně konfigurovat pomocí maker a proměnných. Takto si může každý vytvořit monitor podle svých představ. Jsou-li všechna rozšíření vypnuta, dostanete po kompilace přesně původní monitor pro PMI-80, což i pravidelně testuji. Dále jsem chtěl, aby monitor bylo snadno možné upravit pro jiný jednodeskový počítač než PMI-80.

Existující rozšíření byla volitelně zahrnuta dvě:

Dále jsem přidal možnosti Bez ohledu na to, která rozšíření jsou zahrnuta nebo ne, monitor zůstává kompatibilní s původním, pochopitelně pokud uživatel nezvolí změnu adresace. O jednotlivých úpravách teď napíšu podrobněji:

Ochrana přenosového bitu po RST1

#define BRKCPRESERVE

Je prakticky nutností, pokud na PMI-80 používáte breakpointy. Originální zpracování přerušení RST1 totiž obsahuje chybu, která nuluje přenosový bit. Záludnost se skrývá zde:
...
000F lxi h,0000
0012 dad sp
0013 shld 1FE4
...
001C push psw
...
Po provedení LXI H,0000 a následném DAD SP se vždy vynuluje přenosový bit. DAD SP totiž nastavuje přenosový bit podle výsledku. S ohledem na to, že přičítáme k nule, k přenosu nikdy nedojde a přenosový bit se tedy vždy vynuluje. Až o několik instrukcí dále je provedeno PUSH PSW, to je již však přenosový bit vynulován a jeho původní stav navždy ztracen. Použijeme-li makro BRKCPRESERVE, změní se pořadí instrukcí tak, že se nejprve uloží stav PSW a až po té se provede DAD SP. Úprava je popsána jako verze 2 na více místech, například zde http://www.nostalcomp.cz/pmi80.php. Na zmíněné stránce je sice smysl úpravy zpochybňován, ovšem neprávem. Při úpravě se pouze změní pořadí instrukcí a tak je monitor stále kompatibilní s původním. Tato volba implicitně je použita.

Filtrování zákmitů kláves aneb slowkey

#define SLOWKEY

Je určena pro případ, že máte starší klávesnici a PMI tak na jeden stisk klávesy zareaguje vícekrát. Při použití SLOWKEY se do kódu přidá softwarová filtrace zákmitů. PMI se tím však nepříjemně zpomalí, proto tuto volbu doporučuji pouze v případě, že je klávesnice Vašeho PMI skutečně problematická. Tato úprava je též zmíněna na více místech a též například zde: http://www.nostalcomp.cz/pmi80.php. Kód je při použití této volby delší o 10 byte, zůstává však kompatibilní s původním. Implicitně tato volba není použita.

Volba cílové platformy: kompilace pro PMI-80, PMI-80M16, PMI-Z80 nebo JPR-PMI

Z uvedených maker je nutno použít právě jedno:

#define PMI80
Kompilace pro standardní PMI-80. Implicitní volba.

#define PMI80M16
Kompilace pro PMI80M16. Změní uvítací hlášku na PMI80M16. Pokud se Vám to nelíbí, kompilujte s volbou PMI80

#define PMIZ80
Je určena pro PMI-80 založeném na procesoru Z-80. Do startovací rutiny je přidána instrukce IM1. Je změněna uvítací hláška.

#define JPRPMI
Kompilace pro JPR-PMI, což je můj speciální klon PMI-80 založený na desce JPR-1. Při použití tohoto makra se změní uvítací hlášení, zde se navíc zobrazuje číslo verze monitoru. Dále se změní adresace paměti, přidá zpracování RST6, atd. Více je popsáno na stránce JPR-PMI.

Zhasínání desetinných teček displeje

#define DPOINTS

Modifikuje znakovou tabulku tak, aby u znaků nesvítily desetinné tečky. Pokud máte desetinné tečky zapojené, makro použijte, jinak jsou ty desetinné tečky dost otravné. Volba může činit potíže při použití magnetofonu (používá ho ale někdo?). Implicitně je použito.

Integrován TRAPP

Rutiny pro práci s magnetofonem lze nahradit podporou TRAPP systému pro přenos mezi PMI-80 a PC a pak je modifikována tabulka příkazů. Po stisknutí L na PMI se přímo zavolá program pro přenos dat z PC do PMI-80. Po stisknutí S na PMI se zavolá program pro přenos dat z PMI-80 do PC. Je nutno použít právě jedno z těchto maker:

TRAPP je použit implicitně. Pokud ho ale nechcete a chcete použít původní rutiny pro práci s magnetofonem, použijte makro

#define PMITAPE

Uživatelský program

#define ADDUSRCMD

Využije 3 volné byty za tabulkou příkazů pro přidání volání uživatelského příkazu zvolenou klávesou. Neovlivňuje kompatibilitu. Defaultně je jako klávesa použito rovnítko a adresa uživatelského příkazu je 0400 hexa. Po stisknutí = na PMI se tedy provede skok na adresu 0400 hexa kde je očekáván uživatelský program. Pokud je zde volná adresa, obvykle se načte FF, což je kód instrukce RST 7 a provede se zpracování přerušení s následným návratem do monitoru PMI-80. Kód klávesy, kterou se uživatelský příkaz aktivuje je definovaný v proměnné USRCMDKEY a adresa uživatelského programu je definována proměnnou USRCMDADR, oboje lze změnit. Implicitní použití je
USRCMDKEY .equ 090h
USRCMDADR .equ 00400h

Rozšíření znakové tabulky

#define ADDCHARS

Na konci tabulky znaků pro zobrazování je u originálního monitoru pět nevyužitých byte. Přitom mi kriticky chybělo zejména k, proto jsem ho doplnil. Je to sice takový patvar, ale jde pochopit, že to má být k. Dále jsem doplnil zcela přirozeně vypadající U a jeden patvar, co se dá vyžít jako W. Pokud malé u využijeme jako v, je tak k dispozici celá abeceda kromě X. X je bohužel neřešitelné, ale naštěstí není až tak potřeba. Kódy přidaných znaků jsou:
znak hexa kód
k 24
U 25
W 26
Implicitně je použito.

Modifikace uvítací zprávy

#define MODWMSG

Standardně je použita uvítací zpráva podle cílového počítače, tedy: "PMI -80" pro PMI-80, PMI-80M16 pro PMI-80M16, "PMI-Z80" pro PMI-Z80, JPRPMIxxx pro JPR-PMI, xxx je číslo verze UPM. Toto nemusí každému vyhovovat. Použijete-li makro MODWMSG, zpráva se předefinuje na Vaši vlastní. K definici zprávy je pak nutno ještě použít makra MWM1 až MWM9. Každé odpovídá jedné pozici na displeji, počítá se zleva. Definovaná hodnota určije znak ve znakové tabulce PMI.
Příklad:
#define MWM1 01eh ;"
#define MWM2 019h ;[mezera]
#define MWM3 010h ;t
#define MWM4 00eh ;E
#define MWM5 005h ;S
#define MWM6 010h ;t
#define MWM7 019h ;[mezera]
#define MWM8 019h ;[mezera]
#define MWM9 01eh ;"
Implicitně se nepoužívá.

Modifikace dotazovacího znaku

#define MODPROMPT <hodnota>

Použijete-li toto makro, změní se dotazovací znak monitoru z otazníku na Vámi požadovaný. Jako hodnota použijte číslo znaku dle znakové tabulky PMI.
Příklad:
#define MODPROMPT 018H ; znak =
Implicitně se nepoužívá.

Modifikace umístění RAM - pro pokročilé uživatele

#define MODVPAGE <hodnota>

Použijte pouze tehdy, má-li Váš klon PMI nestandardně umístěnou RAM. Jako hodnota použijte horní byte adresy, kam má umístit monitor svoje proměnné, buffer displeje, atd. Dolní byte adres se vždy použijí standardní. Je-li kompilace pro standardní PMI, makro nepoužijte (ponechte zakomentované). Pro JPR-PMI se změna umístění RAM provede automaticky a toto makro zde není potřeba.

Modifikace umístění počáteční adresy - pro pokročilé uživatele

#define MODBASE <hodnota>

Změní počáteční adresu celého monitoru na hodnota. Takto je možno např. vytvořit pokusnou kompilaci monitoru, tu nahrát do RAM a spustit v RAM (pokud ovšem máte RAM dostatečně velkou). Není-li požadována změna počáteční adresy, makro nepoužijte (ponechte zakomentované).

Číslo verze

Na adrese 0037h lze najít číslo verze UPM (neplatí pro JPR-PMI). Horní nibble odpovídá číslu před tečkou a dolní nibble číslu za tečkou, tedy verze 3.02 je zde kódována jako 32h. Originálně je zde nevyužitý byte s hodnotou FF. Takto je možné zjistit verzi UPM. Zavedl jsem to ale až od verze 3.02, tedy této. Uložení čísla verze není možné vypnout tak jednoduše, jako ostatní změny. Považuji totiž za vhodné, aby bylo vždy možno UPM snadno rozpoznat.


Kompilace

Standardní nastavení monitoru je:

Tyto možnosti si každý může změnit dle své potřeby. Nastavení se provádí v souboru upm_cfg.asm podle tohoto manuálu a poznámky jsou i přímo v souboru upm_cfg.asm.

V zip archivu je kromě všech potřebných zdrojových kódů přiložen i Telemark assembler a dávkové soubory. Kompilace je jednoduchá. Po úpravě souboru upm_cfg.asm spustíte dávkový soubor compile_monitor_hex.bat nebo compile_monitor_bin.bat podle toho, zda si přejete získat binárku nebo IntelHEX soubor.

Nutno poznamenat, že dle dostupných informací lze přiložený Telemark assembler volně šířit, správně by se ale měl při delším používání zaplatit licenční poplatek. Pro zvídavce doplním, že hlavním souborem ke kompilaci je soubor upm_main.asm, z něj se "inkluduje" zmíněný upm_cfg.asm a dle potřeby ještě trapp0.asm a trapp1.asm nebo pmitape.asm a tapetext.asm.

TRAPP je souběžným projektem k UPM a shodně jdou i čísla verzí. Proto jsou v zip archivu přiloženy i soubory compile_trapp_hex.bat a compile_trapp_bin.bat pro kompilace TRAPP samostatně do binárního nebo IntelHEX souboru. Zde ale možnosti konfigurace nejsou tak komfortní jako u UPM. Počáteční adresa je 0400h (pro instalaci do přídavné EPROM) a předpokládá se, že TRAPP je připojen na uživatelský port. Případnou změnu počáteční adresy je nutno provést v souboru trapp0.asm u direktivy .ORG. Je-li TRAPP připojen na služební port, je nutné zakomentovat makro #define PMI_TRAPP_UP a odkomentovat #define PMI_TRAPP_SP

Kdo má dotaz, ať neváhá a napíše mi E-mail na sdq(at)post.cz. Rovněž mohu provést kompilaci komukoliv přesně podle jeho představ. Nic si za to neúčtuju. Jen se musím předem omluvit za někdy delší čas vyhovění požadavku, pokud jsem zrovna zavalen jinými činnostmi.


Download - verze 3.02 - aktuální


Starší verze

Nutno upozornit, že ve verzi 3.02 toho oproti verzi 3.00 přibylo dost. Proto vznikla i nová webová stránka s přepracovaným manuálem. Meziverze 3.01 byla pracovní a nikdy nebyla dána k veřejnému šíření a použití.

Starší verze jsou k dispozici zde.


Zpět