Stopařův průvodce po PMD-85

Jak napsal Logout, psát něco v assembleru, který neumím, pro platformu, kterou neznám, je hard, zvlášť když instrukční sada Intelu 8080 je stejně přehledná a příjemná jako okolí Nagasaki koncem roku 1945.

Když ho roku 1984 ing. Róman Kišš konstruoval, tvořil hlavně počítač pro sebe (chtěl si postavit “něco jako” HP-85, o který marně usiloval, a Basic PMD je opravdu Basicem HP-85 silně inspirován, stejně jako název stroje), a nemohl tušit, že průmyslová mašinérie udělá z PMD sice veřejnoprávní, ale přeci jen masovou záležitost, neboť počítač se vyráběl poměrně dlouho od roku 1985 do začátku 90. let.
Navíc pozdější změny vnesly do systému jakousi nejednotnost. PMD je podobně záludné, jako VIC-20, u kterého si nemůžete být nikdy jisti, na jaké adrese vlastně začíná VideoRAM, jenže VIC je jenomjeden, a PMD hned několik verzí.
RMka s Monitoorem se může nacházet na adrese E000, nebo taky na adrese 8000, ale taky vůbec nemusí být v paměťovém prostoru přítomna. Na určitém místě paměti může být RAMka, nebo taky nic. První verze PMD nijak nepočítala s nějakou tabulkou služeb (rozskoky na služby jsem našel jen v rozšířeném monitoru Zbrojováčka, jinak nic), a při pozdějších úpravách a doplňováních ROM došlo k tomu, že vlastně existuje jen několik adres rutin, na které se dá skákat,protože jejich začátky jsou v různých verzích ROM zachovány, a jinak si nemůžete být v ROM jisti ničím.
Existují programy, které se pyšní nápisem “pro oba typy PMD”, ale myslí se tím PMD 85-1 a PMD 85-2, ale většinou se nepočítá s 2A ani s verzí 3, na které bez “přepnutí do režimu kompatibility” nefunguje vlastně žádný normální “program pro PMD”, což je u PMD docela vada.
$$OBR389943$$
PMD, kromě verze 3, obsahuje 4 kB ROM s Monitorem od adresy 8000h.
Mezi jednotlivými verzemi byla ROM přepisována, rutiny optimalizovány a měněny, takže spoléhat se dá jen na vstupní body rutin společné pro všechny verze.
Já mám k dispozici seznam vstupních bodů pro PMD 85-3, které má 8 kB ROM umístěnou od E000h. Takže se pochopitelně liší od všech předchozích verzí.
K přepnutí do “módu kompatibility” slouží povel JUMP FFF0, který zkopíruje 4 kB Monitoru do RAM od adresy 8000h, zrelokuje kód a pak odstránkuje ROM. Vzhledem k tomu, že je nyní Monitor umístěn v RAM místo v ROM, není chráněn proti přepsání, ale v zásadě to umožní fungování mnoha programů, které by s ROM na adrese E000 nemohly fungovat (vlastně neznám žádný program, který by byl určen přímo pro PMD 85-3 tak, jak ho najdete po zapnutí).
“Nultou”, velmi vzácnou prototypovou verzí, se teď nezabývejme.
První verze PMD měla v RAM toto:
0000 až 7FFF RAM
8000 až 8FFF Monitor ROM
9000 až 9FFF nic
A000 až AFFF zrcadlo ROM z adres 8000-8FFF, takže vlastně nic
B000 až BFFF zase nic
C000 až FFFF VideoRAM
VideoRAM je organizována v 16 kilech RAM, a to tak, že jednotlivé mikrořádky jsou tvořeny 64 bajty, z nichž pro uložení bitmapy obrazu je použito vždy jen prvních 48 bajtů a zbylých 16 zůstává volných – část tohoto prostoru (který má celkem 4 kB) používá systém a Basic pro uložení svých proměnných, proto není možné ukládat a nahrávat obrázky jako prostý jednoblokový dump oblasti 16 kB VideoRAM jako třeba na ZX Spectru.
V těch bajtech, které jsou použité, jsou nejvyšší dva bity použity pro atributy a zbylých šest bitů pro pixely. V atributech se od sebe jednotlivé verze liší – atributy jsou interpretovány různě. Může jít o jas a blikání, ale i o různé stupně jasu nebo barvy. Atributy ovlivňují jen barvu “inkoustu”, “papír” zůstává černý. Co se barev týče, tak jiné uvidíte na kompozitním video výstupu, jiné na RGB výstupu.

ATTR pixely
7 6 | 5 4 3 2 1 0

PMD 85-3:

video RGB
0 0 – bílá zelená
0 1 – zelená červená
1 0 – červená modrá
1 1 – hnědá fialová

PMD 85-2:
bílá, zelená, modro-zelená a žlutá – přesné rozdělení barev mezi hodnoty atributů neznám.

Paměťový prostor PMD 85-2 se od PMD 85-1 výrazně nelišil (kromě změn v ROM, připojení magnetofonu a zavedení barev nebyly ostatní rozdíly příliš velké).
PMD 85-2A ale přináší 8 kB RAM navíc, a to v dosud nevyužitých prostorech paměti 9000-9FFF a B000-BFFF. Objevuje se možnost zapnout allram mód.
PMD 85-3 má 64 kB RAM, a ROM umístěnou od E000h, takže se kryje s oblastí VRAM a musíse stránkovat do allram módu. ROM ná navíc 8 kB místo původních 4 kB.
Po zapnutí je příslušný port nastaven jako vstupní!
Zapojení systémové 8255 u PMD-85, ke které je připojena klávesnice, beeper a právě i stránkování paměti, je toto:
F4h – port A
F5h – port B
F6h – port C
F7h – PCW
U PMD 85-3, údajně bit 4 portu C řídící 8255 v jedničce připojí ROM, shození odpojí ROM.
Bit 5 téhož portu na PMD 85-3 v jedničce nechá ROM zrcadlit v celém prostoru paměti 0000H, 2000H, … až do E000H. Po zapnutí je port vstupní a pullup odpor tahá tento bit do jedničky, takže od 0000, kde procesor začne vykonávat program, je ROM.
Stránkování se zapne (port C nastaví na výstupní) pomocí
MVI A,82h
OUT F7h
a vypne (nastaví port C na vstup) pomocí
MVI A,8Ah
OUT F7h
Zdá se, že zápis do oblasti ROM se ale “prokopíruje” do oblasti VRAM a stránkování by tak bylo nutné jen pro čtení.
PMD 85-2A používá tentýž bit téhož portu (bit 4 portu C), ale ROM je umístěná jinde (8000-8FFF) a nepřekrývá VRAM.

Krátce ještě, co jsem zjistil o Zbrojováčkovi (Consul 2717),kterýje koncipován jako PMD 85-2, jenže s ním v některých věcech není kompatibilní. Především ve Zbrojovce schválně zvolili jiný způsob stránkování paměti, čímž se sice narušila kompatibilita, ale bylo snazší rozdělit programy na ty pro obecné PMD a na ty určené pouze pro Consul.
Po zapnutí je to normální PMD 85-2 (2, ne 2A – jeho způsob stránkování ROM není kompatibilní s 85-2A) s tou výjimkou, že při startu rovnou inicializuje 8255 a port C jako výstupní – OUT (F7h), 82h.
Narozdíl od PMD se při pokusu o zápis do ROM “nepropisuje” do RAM.
Pokud jsem zatím zjistil, tak k 8255, která obsluhuje klávesnici a speaker, jsou u C2717 přidány další tři signály:
RAM – stránkuje ROM/RAM
ZORA – přeorganizuje VRAM do souvislého bloku 12 kB, bez “vynechaných” oblastí pro zápisník systému na konci každého mikrořádku, v tomto režimu adresování paměti ale není možný provoz systému ani programů pro PMD
6N8 – nastaví vyšší rozlišení (atributy každého bajtu pak zobrazuje jako další dva body vedle původních šesti).
Stránkování ROM provádí takto:
MVI A,0Eh
OUT F7h
(vypne ALLRAM)

MVI A,0Fh
out F7h
(zapne ALLRAM)
Rozšířený grafický režim (384×256 místo původních 288×256) zapne OUT hodnoty 0B na port F7, čímž se shodí 3. bit (zprava) v ALLRAM módu, tedy OUT hodnoty 0Ah v režimu s normální ROM.
MVI A,0Ah
OUT F7h
Návrat k normálnímu zobrazování asi vyžaduje mít toto v jedničce (0E).
MVI A,0Eh
OUT F7h
Přeadresování do souvislých 12 kB a stránkování ROM si podle mne netřeba všímat, protože normální Monitor se s tím nepopere (pro výstup znaku pro přeadresovaný režim má C2717 samostatné rutiny v “rozšířeném Monitoru”, který ale normální programy nevolají a používá se pro CP/M).

Málo se ví o režimu terminálu.
PMD 85 (kromě Consul 2717, který to neumí) může sloužit jako terminál k počítačům SMEP.
Připojení se realizuje proudovou smyčkou (CCITT V.24) z konektoru IRPS (to je sériák, DIN vedle připojení magnetofonu).
Standardně se používá 4800 bd v asynchronním duplexním režimu, rychlost lze měnit zápisem do proměnné SPEED (C07Ch) podle vzorce rychlost = 128000/SPEED.
Do režimu terminálu se přepnete stiskem shift + C-D, opustíte ho stiskem shift + RCL.
PMD umí navíc reagovat na sekvence kódů, které umožňují do něj nebo z něj nějaká data či program a taky spustit určitý program.
INBLOCK – přenese na danou adresu blok 128 bajtů:
1. bajt – 04h (kód příkazu INBLOCK)
2. a 3. bajt – adresa v PMD
4. až 131. bajt – 128 bytů data

OUTBLOC – přenese blok 128 bajtů z dané adresy ven
1. bajt – 02h (kód příkazu OUTBLOCK)
2. a 3. bajt – adresa v PMD, to pak pošle data

JUMP – skočí na zadanou adresu
1. bajt – 05h (kód příkazu JUMP)
2. a 3. bajt – adresa

I připojení disketovky k PMD je zajímavá věc, ale má svoje mouchy.
První řešení disketovek (k PMD 85-2) byly stroje PMD-30 a MFD-85. Obě se připojovaly přes sběrnici IMS-2 (v podstatě HP-IB, přejmenované z licenčních důvodů). K jejich obsluze sloužilo rozšíření Basicu, které se instalovalo v EPROMce do modulu Basic-G. Původní skoky na ollsuhu magnetofonu zůstaly nepozměněny, takže pokud program četl nebo ukládal data na magnetofon, bylo nutno ho přepsat (přesměrování na disk se samo neprovedlo).
Později vznikla disketovka PMD-32, která byla určena pro PMD 85-3, které mělo podporu pro boot systému zabudovanou v ROM (bylo ale možné si tento bootovací program vypálit i do ROMky pro PMD 85-2A). Připojovala se přes paralelní sběrnici GPIO.
Vzhledem k tomu, že disketovky nepodporovaly povely příliš vysoké úrovně, jako “pošli mi soubor” nebo ůulož soubor”, ale v podstatě jen “přečti sektor”, “zapiš sektor”, musel se o správu filesystému starat počítač a přiohnout stávající systémy (CP/M, PMD DOS) tak, aby pracovaly s médii větší kapacity (třeba SD karta), bude obtížné.
CP/M slouží k práci v CP/M, o které asi nemá cenuse rozpovídat dál, PMD-DOS slouží k práci v standardním režimu PMD, podobá se sice MIKROSu (CP/M), umí ale nahrávat a spouštět programy v Basicu i strojové programy určen pro standardní PMD (tedy ne pro CP/M).
Consul 2717, kterému interface, kterými bylo PMD obsazeno, chybí, má místo toho vyvedenou malou část systémové sběrnice. K ní se dá, kromě “klíče” určujícího číslo stanice v síti, připojit i diskový řadič a disketovka. Řadič je tak přidrátován přímo na sběrnici procesoru a ovládán bezprostředně, jako je tomu například u počítačů ZX Spectrum (řadiče Betadisk, D40/80, Disciple, +D, MB-02+, …).
Consul bootuje pouze přímo do CP/M. Pokud má pracovat jako PMD, musí se pod CP/M spustit program, který do RAM zavede Basic upravený tak, že má příkazy SAVE a LOAD přesměrovány na disk (nevyužívá se pak tedy Basic uložený v ROM). Protože nepatchuje
Monitor, a povely MGLD pro nahrání strojového kódu pracují stále s magnetofonem, byl do Basicu přidán příkaz LOAD CODE “filename”, který MGLD nahrazuje. Pokud ovšem jakýkoliv (strojový) program volá načtení nebo uložení souboru, provádí se operace opět s magnetofonem – přesměrování na disketu jinde než v Basicu k dispozici není.
Stejné je to s prací v síti – stroj musí ze sítě nabootovat zase jinou úpravu Basicu, která povely LOAD a SAVE přesměrovává na síť (a rovněž přidává LOAD CODE, které nahrazuje MGLD pracující se sítí), ale opět jakýkoliv program jiný než Basic bude pracovat dál normálně s kazeťákem a diskety si ani nevšimne.
Takže, i když na Consulu můžete nahrát z diskety (po nabootování do CP/M a pak přebootování do Basicu) třeba textový nebo grafický editor, data do něj musíte už nahrát z magnetofonu a na magnetofon je taky ukládat.
Jako nejlepší varianta se nakonec jeví PMD-32, připojitelná ke GPIO, která má jednoduchou obsluhu, je snadno nahraditelná zařízením, které ji může emulovat (původní disketovky jsou nedostatkové a poruchové), a existuje pro ni dostatečná softwarová podpora (a byť je původně určena pro PMD 85-3, najde největší uplatnění u PMD 85-2 s upravenou ROM hlavně proto, že PMD 85-2 má velkou základnu software, zatímco pro PMD 85-3 moc softwaru nenajdete).