Rozšíření VideoRAM počítačů VZ-200 a kompatibilních

A získáte nové grafické režimy!

A to bez výměny grafického čipu, jen s tím, který tam už je.

Ano, je to tak.
Počítače kompatibilní se slavným VZ-200 (VTech Laser 100, 110, 200, 210, 300, 310, Dick Smith VZ-200, Salora Fellow a další) jsou osazeny VDG čipem MC 6847.
Ten podporuje 8 grafických režimů.

Ale ve VZ-200 ze tří ovládacích pinů pro volbu režimu jsou dva (27, 30) připojeny přímo do nuly a jeden (29) na 1, takže je natvrdo zvolen režim 2 (128×64, 4 barvy, využito 2 KiO VRAM) jen s možností přepínat mezi čtyřbarevnou grafikou, monochromatickým textem (32×16, 2 barvy, 0.5 KiO) a osmibarevnou semigrafikou (64×32, 8 barev, 0.5 kB nebo 64×48, 4 barvy, 0.5 KiO).
Navíc je VZ-200 osazen 2 KiO VideoRAM a tudíž i kdyby bylo možno režim volně měnit, zvládne zobrazit jen režimy, které nepotřebují více paměti (text, semigrafiku a grafické režimy 0, 1, 2, 3).

MC 6847 (který najdete též u strojů jako Tandy Color Computer, Dragon 32/64, TRS MC-10, Matra Alice, Acorn Atom, NEC PC-6000 nebo v obskurní počítačově-herní konzoli APF Imagination machine) umí tyto režimy:

režim rozlišení barev VRAM A/G A/S INT/EXT INV GM2 GM1 GM0
text (interní generátor) 32×16 2 barvy 512 b 0 0 0 0 X X X
text invertovaný (interní generátor) 32×16 2 barvy 512 b 0 0 0 1 X X X
text (externí generátor) 32×16 2 barvy 512 b 0 0 1 0 X X X
text invertovaný (externí generátor) 32×16 2 barvy 512 b 0 0 1 1 X X X
semigrafika 4 64×32 8 barev 512 b 0 1 0 X X X X
semigrafika 6 64×48 4 barvy 512 b 0 1 1 X X X X
GM0 barevná grafika CG1 64×64 4 barvy 1024 b 1 X X X 0 0 0
GM1 hi-res grafika RG1 128×64 1+černá 1024 b 1 X X X 0 0 1
GM2 barevná grafika CG2 128×64 4 barvy 2048 b 1 X X X 0 1 0
GM3 hi-res grafika RG2 128×96 1+černá 1536 b 1 X X X 0 1 1
GM4 barevná grafika CG3 128×96 4 barvy 3072 b 1 X X X 1 0 0
GM5 hi-res grafika RG3 128×192 1+černá 3072 b 1 X X X 1 0 1
GM6 barevná grafika CG4 128×192 4 barvy 6144 b 1 X X X 1 1 0
GM7 hi-res grafika RG4 256×192 1+černá 6144 b 1 X X X 1 1 1

VZ-200 používá dva pseudorežimy: MODE (1), což je grafický režim 2 (barevná grafika CG2, 128×64 ve 4 barvách), a MODE (0), což je zvláštní směs monochromatického textu (invertovaného i neinvertovaného, ovšem pouze s interním generátorem, 32×16) a osmibarevné semigrafiky 4 (64×32, 8 barev).
Jak kombinace textu s barevnou semigrafikou vypadá, se můžete podívat v tomto videu.

I když jdou v semigrafice vytvářet zajímavé kreace, ve hrách se obvykle neužívá.

Porovnejte si obrázek v semigrafice (pochází sice z TRS MC-10, ale je to stejný režim jako na VZ-200):

se čtyřbarevným obrázkem ze skutečné VZ-200 hry:

Uživatelům VZ-200 šlo hlavně o to, aby VZ mohlo použít nejjemnější monochromatický režim 256×192.

O tom, jak to vypadá, se můžete přesvědčit na videích z VZ-200 dem:
* s hopsajícími míčky,
* Newtonovou kolébkou nebo
* s hrou Doom.
Na videu můžete shlédnout i použití ve skutečné hře.

K přepnutí z GM2 (CG2) do GM7 (RG4) poslouží čip 74LS174, který už v počítači je, připojený na nižších 6 bitů na portech 26624-28671 (6800-6FFF), který je softwarově obsluhován podle obsahu na adrese 30779 (783B).

Z těchto 6 bitů je využitých jen 5 a bit 1 (druhý bit) je údajně volný (i když v příručce je označen jako “cassette out LSB” a podle schématu je použitý) a může posloužit k přepnutí VDG.

Dále jsou na VDG napojeny z latche 74LS174 bity 3 a 4 na signály A/G a CSS pro volbu barevné palety:

* A/S je připojeno na datový bit D7 jdoucí z videoRAM, tedy v textovém režimu (kdy A/G=0) určuje sedmý bit dat ve VideoRAM, zda se jedná o znak textový či semigrafický.

* INV je připojeno na datový bit D6 jdoucí z VideoRAM, tedy v textovém režimu (kdy A/G=0, a není aktivní semigrafika) určuje šestý bit dat ve VideoRAM, zda se jedná o znak invertovaný či neinvertovaný.

* INT/EXT je, stejně jako GM0 a GM2, připojeno na zem (vždy se tak používá znaková sada zabudovaná ve VDG).

Základ úpravy je tedy v tom, propojit drátkem pin 5 obvodu 74LS174 a piny 27 a 30 obvodu VDG, které předtím odpojíme z desky.

Náš bit nastaví povel POKE 30779,PEEK(30779)OR 2.
Shodí jej povel POKE 30779,PEEK(30779)AND 253.

Samozřejmě je potřeba zadat MODE (1) pro vyvolání grafiky.

Úprava tedy neumožňuje volit libovolný režim, jen přepíná GM2 a GM7, zato je velmi jednoduchá a v základu realizovatelná jedním drátkem.

Pokud bychom chtěli přepínat více režimů, museli bychom na neobsazené dva bity portů latche připojit další latch (nebo využít ten, který se dodatečně připojuje kvůli stránkování VideoRAM, jak popíšu za chvíli), což zatím uživatelé VZ-200 nerealizovali.
Proč?
Možná proto, že zázračné zlepšení barevné hloubky nebo rozlišení už je stejně obtížně dosažitelné (snad jen režim 6 se 4 barvami př 128×192 bodech stojí za pozornost).
Zatím tedy nebyla zveřejměna složitější úprava volby grafického režimu, než tato – z roku 1987.

Protože ale ještě chybí dodatečných 4 KiO VideoRAM, grafika v existujících 2 KiO VideoRAM se nad sebou třikrát zrcadlí.
Což je sice hezké, ale prakticky k ničemu.

Je tedy potřeba ještě rozšířit VideoRAM a paměťový čip 6116 nahradit větším 6264.

Větší čip (28 pinů) se nasune do patice po menším (24 pinů) tak, aby strana s výřezem (tam, kde je pin 1) přečnívala.
Musí být přitom vyhnuté vývody 1, 2, 23, 27, 28, ty se do patice nezasouvají a připojí se na ně další signály.

Pin 1 je nejjednodušší, ten se nepřipojí nikam.

Pin 27 (/WRITE) se připojí do patice místo vyhnutého pinu 23 (tedy místo pinu 21 původního čipu).

Pin 28 se propojkou (+5V) spojí s pinem 26 (CE, na který je teď připojeno +5V).

Pin 23 (A11) VideoRAM tedy připojme na pin 20 VDG a pin 2 (A12) VideoRAM na pin 21 VDG.
Teď už VDG vidí celou rozšířenou paměť, třetiny se přestaly zrcadlit, ale procesor nemá zatím možnost do těch spodních dvou zapisovat.

Ještě je potřeba vyřešit, aby se dala paměť stránkovat.
V původním 2 KiO prostoru se tak budou přepínat jednotlivé třetiny obrazu.

Stránkování budiž realizováno takto:

Pro dekódování adresy se použije obvod 74LS138 (který v počítači obsažen není).
Připojí se tak, aby reagoval při OUTu na porty 208-223 (autor doporučuje používat z nich vždy port 222): piny 1-6 se připojí na signály A4, A6, A4, /IORQ, /WR, A7 (ty jsou hezky vyvedeny u rozšiřujícího konektoru).

Mimochodem, obrázek byl údajně vytvořen na reálném VZ-200 s úpravou 256×192.

Přidá se latch 74LS174, který bude držet stav dolních dvou bitů datové sběrnice (tedy hodnoty, která se OUTnula, tedy číslo stránky VideoRAM): propojí se pin 9 na 74LS138 s pinem 9 na 74LS174, piny 3 a 4 74LS174 se připojí na D1 a D0.
Pin 1 přidaného 74LS174 se připojí k pinu 4 obvodu 74LS04 na desce počítače.

Přidají se dva odpory 6k8 a zbytek propojek:
země (piny 8 74LS138 i 74LS174) se připojí k zemi VideoRAM (pin 14), stejně tak napájení (piny 16 74LS138 i 74LS174) k nalájení VideoRAM (piny 26 a 28).
Pak se piny 2 a 5 přidaného latche 74LS174 připojí přes odpory na pin 2 VideoRAM a pin 21 VDG (pin 2 74LS174) a na pin 23 VideoRAM a pin 20 VDG (pin 5 74LS174).

Schéma přidaných součástek máte na obrázku.

Předpokládám, že by se volné piny latche daly využít pro přepínání více grafických režimů (ale asi by byl potřeba další čip, 74LS32 na desce už nemá volné hradlo).

Sestavené zařízení pracuje tak, že OUT 222,0 a OUT 222,1 a OUT 222,2 přepíná mezi třemi třetinami, do kterých může uživatel kreslit.
Na obrazovce se (při aktivaci GM7) zobrazují všechny tři třetiny naráz, i ty dvě, do kterých zrovna uživatel nemůže kreslit, protože je nemá zrovna “připnuté”.

Mohla by se podle toho nakreslit nějaká destička, aby se snížil počet drátků, které pak dělají známá vrabčí hnízda…

Nová grafika se inicializuje (včetně smazání třetin, kde se nachází “šachovnice” přítomná v RAM po zapnutí) pomocí POKE 30779, PEEK(30779) OR2: OUT 222,2: MODE(1): OUT 222,1: MODE(1): OUT 222,0: MODE(1).

Protože grafické povely pro režim GM2, který je 6x hrubší než jemný režim 256×192, nefungují, musí se kreslení řešit podprogramem v Basicu:

OUT 222,Y/64: PA= 28672 + 32 * (Y AND 63) + INT(X/8) : X1=2^(7-(X AND 7))
a náhrada SET(X,Y): POKE PA, PEEK(PA) OR X1.
Náhrada RESET(X,Y): POKE PA, PEEK(PA) AND 255 - X1.
Náhrada POINT(X,Y) (vrací -1 pro nastavený pixel, jinak 0): PO=PEEK(PA) AND X1.

Originál návodu najdete tu: http://www.wolkenkratzerhaus.de/VZ/Basteln/Shrg.pdf