Rozšířený monitor pro počítač Savia 84

Aktualizováno 22.2.2021

Nahrávání z PC a další funkce

Primární snahou bylo implementovat systém TRAPP umožňující přenos dat mezi PC a PMI-80 na počítač Savia. Kód byl umístěn do volné oblasti EPROM vyhražené pro práci s magnetofonem. Kód byl optimalizován pro počítač Savia, využil jsem instrukce Z80, které 8080 nemá a využil jsem služby monitoru Savie pro zadání více dvojbytových hodnot. V EPROM zůstávalo mnoho nevyužitých byte, navíc bylo možno použít 9 byte místo nepoužívaného nápisu "start mgf".

Celkově tedy byly provedeny změny:

  1. Přidána podpora systému TRAPP pro přenos mezi Savií a PC. Klávesou L se spouští nahrávání z PC, klávesou S se spouští přenos do PC.
  2. Přidán program pro zaplnění části paměti danou hodnotou, spouští se klávesou F.
  3. Přidán program pro přesun bloku dat v paměti, spouští se klávesou C.
  4. Nevyužívaný text "Start MGF" na adresách 03A5-03AD byl nahrazen textem "Error". Lze ho užít i v jiných programech.
  5. Od adresy 024A přidán program pro vypsání hlášky "Error", který následně čeká na stisk libovolné klávesy a pak provede restart monitoru.
  6. Zabránění nežádoucímu rozsvěcení desetinných teček, pokud jsou zapojené.
  7. Volitelně podpora NMI.
Co se týká bodů 1. až 5., byla jen využita nepoužívaná část EPROM a tedy nemohou ovlivnit kompatibilitu. Změna 6. se týká nastavení nejvyššího bitu všech znaků v tabulce znaků na 1. Opět neovlivní kompatibilitu. Kdo nemá zapojené desetinné tečky, ten nic nepozná. Kdo je zapojené má, tomu se nebudou nechtěně rozsvěcet. Možný vliv změny č. 7. na kompatibilitu je popsán níže.

Download

Koho nebaví číst manuály a chce rovnou zkoušet, může si zde stáhnout upravený monitor včetně zdrojového souboru: IntelHEX soubor si prostě stáhněte a "napalte" do vaší EPROM, pokud je to jednokilová 2758 v souladu s původní dokumentací, pak se zaplní celá. Máte-li dvoukilovku 2716, pak horní kilobyte zůstává volný, třeba pro Vaše programy. TRAPP zapojte podle schématu v další kapitole.

Podrobněji jsou úpravy rozepsány níže:

TRAPP - verze Savia

TRAPP je to hlavní, proč jsem to celé dělal, umožňuje nahrávání dat z PC i přenos opačným směrem. Na straně PC se používá stejný program jako pro PMI-80. Lze si ho stáhnout na stránce systému TRAPP. Na rozdíl od PMI-80 se ale vždy musí provést všechny úkony napřed na straně Savie a potom až se spouští program na PC. Pro nahrání dat z PC stačí stisknout "L" na Savii. Pro nahrání dat ze Savie do PC je potřeba stisknout "S" a pak se zadává počáteční adresa označená jako a1 a koncová, označená jako a2. Pak se spustí přenos.

Zapojení na obvod 8255 je stejné, jako v případě připojení TRAPP na servisní 8255 a je zakresleno na obrázku níže. Stejně jako TRAPP pro PMI, i na Savii se připojuje na sériový port PC (pokud ho máte), nebo na kabelový převodník USB <-> RS232. Ceny těch kabelových převodníků začínají někde okolo stokoruny a tak jako tak se domnívám, že se vyplatí ho mít.

V závorkách jsou u linek uvedeny odpovídající vývody obvodu 8255. Obvod MAX232A potřebuje přivést napájení +5V na pin 16 a zem má na pinu 15. Omlouvám se, že to ve schématu chybí.

Co se týká propojení s PC, jsou potřeba dvě vstupní linky a jedna nebo dvě výstupní. Vstup byl řešen přes port PB, ten ovšem nelze "rozpůlit", musí být celý nakonfigurovaný jako vstupní nebo celý jako výstupní. V programu se tedy konfiguruje na vstup. Pro výstup byla použita volná linka PC7, možná si tam někdo zapojí desetinné tečky, vůbec si to ale vzájemně nebude vadit. Druhá výstupní linka je nutná jen pokud je požadován i přenos dat ze Savie do PC a rozhodl jsem se pro linku PC6. Tou jsou ovšem ovládány h segmenty displejů (střední vodorovná čára). Sdílení těchto funkcí ničemu nevadí. Při nahrávání do PC tak poblikává střední čárka písmena S, to lze však chápat i jako určitou výhodu, indikuje to, že probíhá přenos.

Zaplnění části paměti

Protože všechny "nečíselné" klávesy Savie už mají svůj význam, rozhodl jsem se program pro zaplnění části paměti spouštět klávesou F jako Fill. Očekává se zadání tří hodnot - počáteční adresa (a1), koncová adresa (a2) a hodnota, kterou se má úsek paměti zaplnit (a3). Jako poslední hodnotu lze zadat 4místné hexa číslo, využívá se však pouze dolní byte. Je to děláno takto, neboť celé zadání se provádí voláním jedné služby Savie a optimalizuje se tak délka kódu.

Kopie části paměti

Protože všechny "nečíselné" klávesy Savie už mají svůj význam, rozhodl jsem se program pro kopii části paměti spouštět klávesou C jako Copy. Očekává se zadání tří hodnot - počáteční adresa (a1) a koncová adresa (a2) kopírovaného bloku a počáteční cílová adresa (a3). Bloky se mohou překrývat, program testuje směr kopírování a podle potřeby se použije instrukce LDIR nebo LDDR.

Chybové hlášení

Protože jsem se se všemi úpravami chtěl "vlézt" do spodního 1KB, aby šel upravený monitor používat i na původní Savii s pamětí 2758 a potřeboval jsem získat co nejvíce byte, provedl jsem proto ještě jednu změnu. Na adresách 03A5-03AD původního monitoru se nachází nepoužívaný text "Start MGF". Tento text jsem nahradil textem "Error", neboť jsem ho potřeboval pro TRAPP. Toto umístění má řadu výhod. Text lze použít i v jiných programech, na těchto adresách ho zcela jistě nechám i v příštích verzích a zcela jistě se text "Error" bude ještě v nějakých dalších programech hodit. Zobrazení se provede snadno, třeba něčím jako
    ld hl, 003a5h
    call 00199h	
Pokud se toto provede na Savii s původním monitorem, zobrazí se text "Sart MGF" (t se vynechá). Je to sice trochu matoucí, ale je to lepší, než aby se zobrazily nějaké hieroglyfy. Stačí si prostě pamatovat že "Sart MGF" znamená "Error". Text "Error" je formátován tak, že začíná mezerou. To má důvod - pokud by někdo postavil Savii s rozšířeným displejem, tak že by využil i vynechanou druhou pozici, text se zobrazí správně, jen před nápisem "Error" budou dvě mezery. Savii s takto rozšířeným displejem se chystám postavit. Podle analýzy monitoru to bude normálně pracovat a na druhé pozici displeje bude mezera a nehrozí, že by se zde v monitoru zobrazil nějaký nepatřičný znak. A ještě něco - v mojí úpravě je na začátku původně nevyužívané části EPROM, tedy na adrese 024A umístěn program, který text "Error" zobrazí, čeká na stisk klávesy a pak provede restart monitoru. Tento prográmek lze využít i v jiných programech, určitě se bude hodit. I v dalších verzích rozšířeného monitoru garantuji, že prográmek bude na této adrese.

Podpora NMI

Protože se domnívám, že jednodeskáč má nabízet vyzkoušet co nejvíce z funkcionality použitého CPU, volitelně jsem do rozšířeného monitoru implementoval podporu NMI. Z80 při NMI skáče na adresu 0066 hexa a tato adresa nelze změnit. Při kompilaci monitoru s podporou NMI je na adresu 0066 umístěna instrukce skoku na adresu 1FD9 hexa. Tam jsou 3 volné byty, což stačí k tomu zde umístit instrukci skoku na obsluhu přerušení. Aby bylo možno podporu NMI implementovat, bylo potřeba někde vyšetřit místo. Předně bylo zrušeno zpracování RST 028, považuji ho za zbytečné. Mohlo by sloužit pro zpracování 3. úrovně IRQ, ovšem ve spolupráci se speciálním hardware. Bez speciálního hardware dokáže Z80 pracovat jen s jednou úrovní IRQ. I kdyby někdo tento hardware připojil, stále i po úpravě zůstává možnost zpracovávat dvě úrovně IRQ a k tomu ono NMI, to jsou celkem tři přerušení, což je podle mého názoru pro jednodeskáč až až. Dále byl kód přeuspořádán v oblasti, kde se provádí inicializace monitoru. Nezdá se, že by v modifikované oblasti byl jakýkoliv vhodný vstupní bod pro volání zvenčí. Ani vnitřní funkce monitoru nikam do modifikované oblasti neskáčí. Jako bod pro restart celého monitoru je používaná adresa 0000. Tedy by to nemělo ovlivnňovat kompatibilitu Přes uvedená fakta nemusí někdo s úpravou souhlasit, proto je nabízena jako volitelná.


Zpět