ISO ROM 128 - 2006
Proč?
Protože původní zapojení od CBM nepoužívalo úplnou adresaci, takže zapojení kolidovalo se stránkováním paměti divIDE, ačkoli divIDE port 239 nepoužívá a protože chci používat divIDE spolu s Betadiskem a ISOROM zároveň. Přesněji minimálně u stejného ZX Spectra, aniž bych ho musel rozebírat a ISOROM odpojovat, nebo řešit jiný způsob vyřazení z provozu zabudovaného rozšíření.
Původně, když jsem na problém se stránkováním narazil, tak jsem začal uvažovat o spoustě megalomanských řešení, které obnášely rozšíření RAM až na 2MB a případně stejně tak i ROM ... jenomže to v zásadě není potřeba, pokud počítám s připojením rozšířeného divIDE, které samo o sobě bude osazeno 512kB RAM, stejně tak i Flash RAM pro firmware. Navíc existuje rozšíření ZX Spectra 128kB na 512kB tak, aby výsledek byl nejenom kompatibilní se ZX Spectrem 128k, ale i s Pentagonem ... takže jsem prostě další variantu rozšiřování zavrhl. Na druhou stranu je zapojení ISO ROM 128 spolu s softwarem v ROM natolik praktické, že se ho nechci vzdát a místo jeho rozšiřování budu uvažovat spíš o jeho zakomponování do rozšíření paměti ve stylu ruských Pentagonů.
Taky proto, protože mám rád vše hezky upravené, žádná vrabčí hnízda z drátů a už vůbec ne spoustu přeškrábaných spojů na původním plošném spoji přemostěné různými propojkami. Proto jsem navrhl nový plošný spoj a celé rozšíření vyrobil znovu a lépe (doufám).
Dalším důvodem, proč ISO ROM 128 chci takovou jaká je, je to, že to je nejjednodušší způsob jak umožnit snadno a vcelku bezpečně používat všemožné upravené ROMky, aniž by to jakkoliv kolidovalo s dalším hardwarem (vyjma samotného zápisu na port 239) a aniž by bylo potřeba pořizovat cokoli složitějšího a drahého. Přičemž zůstává zároveň zachována možnost připojit a použít jiný hardware, který třeba i umožňuje totéž.
Výsledkem tedy prozatím je opravené zapojení ISO ROM 128 s úplnou adresací portu, s logikou naprogramovanou v jediném GAL20V8 s podporou obvodu 74LS175, který byl osazen už dřív, pamětí v úzké patici, jakých se ve starých PC vyskytují spousty a ze šrotu jich mám značný přebytek. Díky tomu všemu je výsledný výrobek o něco menší a to jsem ani nemusel používat SMD integrované obvody, což jsem taky zamýšlel.
Kompatibilita
ISO ROM 128 používá jen jediný port s adresou 239. Nic víc. Na tento port lze pouze zapisovat a tím volit stejně jako u staré verze 32kB stránky z 64kB ROM, nebo 32kB RAM. Obojí se pak stránkuje stejně jako u ZX Spectra 128k, což zařizuje původní hardware ZX Spectra. ISO ROM 128 pouze umožňuje přestránkování celé dvojice 16kB stránek. Pakliže je tou dvojicí SRAM, tak i přepsání jejího obsahu a zakázání zápisu.
Stránkovací port
Význam bitů stránkovacího portu je shodný se starou verzí. Viz tabulka.
bit portu 239 | význam bitu |
---|---|
0 | 1=zápis do SRAM povolen, 0=zápis zakázán |
1 | 1=výběr ROM, 0=výběr SRAM |
2 | 1=ISO ROM, 0=originální ROM 128 |
3 - 7 | nepoužity, ale rezervovány do budoucna |
Po zapnutí ZX Spectra by měly být všechny bity nastaveny na 1, tj. ve výchozím stavu je přistránkována ROM a z ní stránka ISO ROM a zápis do SRAM povolen. Jelikož po zapnutí je obsah SRAM stejně nesmyslný a není přistránkována, tak povolený zápis nevadí. RAMRAMIS po resetu detekuje jestli je umístěn v ROM, nebo RAM. Pakliže je v ROM, tak se zkopíruje do SRAM, vymaže celou RAM 128k, přestránkuje do SRAM, zakáže zápis a při dalších resetech už běží ve SRAM bez mazání RAM, dokud uživatel nezvolí "Hard reset".
Další popis viz původní ISO ROM 128, software a chování jsou úplně stejné.
Do čeho to lze namontovat?
ISO ROM 128 mám vyzkoušenou v ZX Spectrum 128k+ a ZX Spectrum 128k +2. Hardwarově nic nebrání použití v jakémkoliv 128kB stroji, snad i v Pentagonech a strojích na 128kB upravených. Problém může být pouze s vměstnáním desky do počítače, kde je málo místa.
Samotný zásah do počítače je minimální. Pokud je původní ROM v patici, což většinou bývá, tak lze prostě celou ISO ROM 128 zasunout do patice místo původní ROM a někde v ZX Spectru připojit /WR a /IORQ. Pokud ROM v patici není, záležitost se komplikuje o její vypájení a zapájení patice DIL 28.
Výroba
Celé to lze realizovat pouze s použitím jednoho GALu, paměti SRAM a obvodu 74LS175. ROM lze použít původní ze ZX Spectra (není nutné programovat a osazovat 64kB EPROM), k tomu nějaké patice, pár SMD kondenzátorů a odporů a samozřejmě plošný spoj. V lepší variantě lze pak naprogramovat a osadit i 64kB EPROM (nebo ROM, PROM, Flash ... prostě nějakou pinově kompatibilní paměť), která může obsahovat třeba RAMRAMIS spolu s některou originální ROM ze ZX Spectra 128k (+2), tím získáte Basic s asi nejlepší podporou TRDOSu, jaká pro ZX Spectrum existuje plus pár užitečných vylepšení a oprav Basicu a nějaký ten software navíc pro TRDOS přímo v ROM. Zároveň s možností přepnout pohodlně pomocí menu na originální ROM, kdyby náhodou byl nějaký program na originální ROM závislý a nepracoval s ISO ROM, což se mi stalo opravdu jen velmi zřídka (třeba Busyho Song In Lines). Přepínání zpátky je trochu komplikovanější, v BASICu je třeba zadat OUT 239,6 a resetovat ZX Spectrum.
součást | počet |
---|---|
EPROM 64kb, vyzkoušeno s 27C512 | 1 |
SRAM 32kB, vyzkoušeno s 62259, CL63C256N-20 atd | 1 |
GAL20V8 | 1 |
74LS175 | 1 |
C 220nF (vel. 1206) | 3 |
R 2k2 (vel. 1206) | 2 |
precizní patice DIL28 (pro EPROM 64kB) | 1 |
precizní patice DIL28 úzká (pro SRAM) | 1 |
precizní patice DIL24 úzká (pro GAL) | 1 |
precizní patice, DIL28 kolíky, PRSA28 | 1 |
Popis řešení
Jak jsem napsal, vše se kromě klopných obvodů, které slouží jako 4 bitový latch s duálním invertovaným výstupem (třeba na LED diody) a pamětí vešlo do jednoho GALu. Viz zapojení vývodů GALu.
Černé šipky označují signály z patice původní ROM do které je celý modul zasazený, zelené šipky označují signály propojené s 74LS175, červené jsou přímo přivedeny ze sběrnice ZX Spectra a modré jsou zapojené do pamětí na desce ISO ROM 128. Signál /CS je sice přiveden z patice původní ROM, ale nesmí být zapojen k nové ROM, signály /CS osazených pamětí jsou řízeny GALem.
Rovnice pro GAL
Označení je přesně takové, jaké je potřeba opsat na řádek 9000 v programu GAL20V8, stejně tak rovnice jsou přímo použitelné v tomto programu. Přičemž vývody IN1 a IN10 jsou připojené odporem 2k2 na GND, takže je na nich trvale log. 0 (to hlavně kvůli mým experimentům s různými způsoby naprogramování GALu, nemusí být osazeno).
IN1 WREN A7 A6 A5 A4 A3 A2 A1 A0 CS GND IN10 OE PORTo ADDROo ADDRI RAMCSo ROMCSo RAMWEo ROMRAM IORQ WR VCC ADDRO=/A7+/A6+/A5+A4+/A3+/A2+/A1+/A0 PORT=ADDRI+IORQ+WR ROMCS=CS+OE+/ROMRAM RAMCS=CS+OE+ROMRAM RAMWE=WR+/WREN
Osazení
Celé to je dost jednoduché, ale přeci jen pár poznámek je potřeba, jelikož jsou integrované obvody dost namáčknuté na sebe a jelikož asi bude ve většině případů použit neprokovený plošný spoj.
Jako úplně první je nutné osadit všechny SMD součásti a propojit prostupy skrz desku, pak je potřeba osadit patici pro EPROM. Jako jediná má zvrchu spoje k nimž by se pak nedalo dostat páječkou. Patice pro SRAM a GAL nejsou problémové, ze strany součástí se pájí jen napájení, které je v rozích patic a dá se k němu dostat kdykoliv. 74LS175 se osazuje až úplně poslední.
Po osazení všech SMD, patic a 74LS175 přijde na řadu patice s piny, která poslouží jako konektor pro zasunutí do patice místo původní ROM. Ta je ze všeho nejzáludnější. Dva vývody nejsou propojeny na desku, resp. signál /CS je připojený drátkem jinam (pin 20) a pin 1 původní ROM není zapojen vůbec, protože v ZX Spectru tam je pravděpodobně +5V, kdežto v ISO ROM tam je A15. Místo popisu raději pár obrázků a v budoucnu možná dodám i fotky. V tomto případě asi nutné.
První obrázek náčrtku přibližně zobrazuje pin kolíkové patice bez úprav. Druhý obrázek ukazuje jak je potřeba vývod zkrátit, aby ho bylo možné správně zespodu připájet na vyčuhující konce vývodů patice, která je osazena z druhé strany plošného spoje (ze strany součástí). Takto musí být připájeny všechny piny, kromě 1 a 20. Třetí ukazuje jak do prostoru mezi plošný spoj připojit drátek, kterým je signál /CS pro původní ROM přiveden na vstup GALu z pinu 20 a zároveň jak musí být zkrácen procházející vývod horní patice, aby nedošlo k jejich spojení, protože na pin 20 horní patice je přiveden /ROMCS z GALu. Zářez v kolíku jsem dělal hranou čtvercového pilníku. Poslední obrázek jsou prostě dva nepropojené kontakty na pinu 1. U pinu 1 i u pinu 20 může být procházející vývod z horní patice připájen, ale vrstva pájky musí být opravdu tenká. Mezera by měla být cca 1,5mm.
Plošný spoj, schéma ...
Opravené chyby a změny
- 22.7.2006 - dopsáno