A je to tu, ani vánoce ani konec semestru mi nezabránili napsat další článek o tom, jak lze vyzkoušet, co všechno může vaše sestava vydržet. Tentokrát se vrhneme po krku D80. Pokud se vám předchozími úpravami ještě nepodařilo nic zničit, nyní to půjde samo (problém bude spíš poznat, jestli ten krám blbne sám od sebe, nebo díky vám).
Trocha historie: zrovna v době, kdy jsem si koupil D40, jsem začal strkat prsty do HW. Během krátkého používání tohoto diskového systému jsem si uvědomil, že vše není ani tak dobré, jak by mohlo bez problému být. V knize "Rutiny ROM D40" byla zveřejněna myšlenka vyměnit originální ROM D40 za vlastní EPROMku, ve které by byla vylepšená verze MDOSu. Tato myšlenka mě zaujala, ale pro EPROM se blbě odlaďuje software, proto jsem chtěl něco lepšího a inspiroval se Tritolovou SRAMkou v počítači. Navrhnul jsem mu, abychom něco podobného implantovali do D40, ale on byl zásadně proti, vůbec se mu nechtělo v D40 hrabat. (povšimněte si, jak pevná jsou Tritolova rozhodnití - kdo viděl jeho D40 v poslední době, ví, na co narážím)
Takže jsem musel začít sám. V každém případě jsem chtěl zachovat originální stav - tzn. nechat originální ROM inside, aby mi mohli případně fungovat i programy pracující na libovolně nízké úrovni. Z toho vzešla idea SRAMku přidat, ne vyměnit za ROM. Netrvalo dlouho a první verze byla na světě, kromě SRAM obsahovala již jen HW přepínač, který volil mezi SRAM a ROM. Fungovalo to asi takhle: vysejvil jsem si originální ROM do souboru (save *"rom d40" code 0,16384), tu pak nahrál do paměti a trošku upravil (pro začátek jsem změnil barvu borderu z červené na fialovou) a udělal jednoduchý program, který přestránkoval do D40 a přenesl di ní data. Celý postup fungoval tak, že jsem přepínačem nastavil "ROM" a zapnul počítač. Pak nahrál upravenou ROM a můj pomocný program do paměti. Přepnul přepínač na "SRAM a program spustil. Od této chvíle již při práci s D40 pracovala moje opravená ROMka, tzn. že při resetu byl jinej border;) - ale šlo o princip, že? Jenže když jsem vše ukazoval na naší obvyklé speccy session, vyšla inteligence a představivost všech zúčastněných najevo. Asi tušíte jak to dopadlo...jediný kdo zabodoval byl Tritosoft, který ač prošvihl mojí přednášku o tom, co ukazuji, a spatřil až sekci, kdy já donekonečna mačkám reset... Chvíli chodil a kroutil hlavou se slovy "to má být přece červené...", ale potom ke mně přišel s tím, že do toho jde taky.Neuběhlo mnho času a Tritol navrhl softwarové ovládání, se kterým jsem si nevěděl rady. Jen co mi ukázal princip, celé jsem to překopal a zjednodušil (mám takový blbý zlozvyk) a společnými silami doladili a přidali mnoho nového. Ač se o navrženém schématu dá mluvit jako o jednoduchém, obsahuje nějakých těch šest integrovaných obvodů. Proto jsem v editoru plošných spojů sám nakreslil desku, za jejíž provedení mně Tritol ještě po několika letech kritizuje - že prej sem měl použít autorouter. (no jako pomstu chystám udělat desku pro ZX-IDE IF nechat udělat autorouterem, předběžné pokusy ukazují, že toho bude Tríťa hodně litovat). Ale abych se dostal k něčemu důležitému. Danou úpravu provozujeme s TNT na dané desce, ale původní schéma doznalo několik změn, které jsme tak nějak předrátovali a přeškrábali, ale novou desku nenavrhovali. Proto dnes uvedu zveřejním jen schéma a desku nechán na vás :(
Pro ty, co nečtou úvody, teď radši od začátku shrnu celou funkcu úpravy. V počítači se neprovádí žádný zásah, vše devastujete jen v D40. Během práce počítače se úprava nijak neprojeví až do doby, než se přistránkuje ROM D40 (to se dělá hardwarově při čtení instrukce z určitých adres - ale to předpokládám znáte). Úprava v sobě zahrnuje registr=port (jelikož se nelíbí přístup jiných návrhářů, udělal jsem tento port nejen výstupní, ale i vstupní - můžete si přečíst, co jste do něj zapsali). Naoutování portu specifikuje chování úpravy. Je-li tedy přistránkovaná ROM D40, může ve skutečnosti přistránkovat originální ROM (to spolu se zablokováním (viz. dále) umožňuje 100% kompatidebilitu s originálem - proto se nemusíte obávat, že implantací této úpravy nebudete schopni používat některé programy). Na druhou stranu ale může být originální ROMka odpojena a na její místo se namapuje naše SRAMka - resp. jedna z jejích stránek.
Využití je snad zřejmé, do nové úaměti si můžete dát svá data apod., ale většího uplatnění dosáhnete vložením vlastního OS (operačního systému). Jelikož málokdo má dost času psát celý systém a kvůli zpětné kompatibilitě, rozhodl jsem se nepatrně upravit MDOS. Tak, aby vše fungovalo jako dřív, ale práce byla příjemnější. Se současnou verzí mi vše funguje (nenašel jsem nic, co by s mou ROM nefungovalo a s originální ano).
Jelikož se 16kB SRAM nevyrábí, musíme použít 32kB. Já (ale i TNT) máme dvě 32kB SRAMky, ale zatím doopravdy využíváme stejně jen 14kB (no jednou to bylo i celých 16). To bylo ale jen na okraj, nyní už po zmateném úvodu, který měl odradit slabší povahy, jdeme do podrobností.
Ale ještě jedna drobnost: D40 obsahuje sice 16kB ROM, ale horní 2kB překrývá SRAM určená pro systémové proměnné a buffery. Abychom využívali zdroje optimálně, umožňuje úprava tuto 2kB SRAM libovolně odpojit nebo ne (pozor na WriteProtect: pozn. sweet). To znamená, že můžete pracovat např. jak s celými 16kB nové SRAM, tak jen 14kB přídavné SRAM a 2kB původní. Jelikož přidáte dvě (nebo čtyři) 16kB stránky, ale ty 2kB jsou stále jedny a ty samé, lze tím dosáhnout zajímavých efektů.
Jelikož nemám zrovna před sebou rozebranou D40, budu se odvolávat pouze na její schéma (které před sebou mám) - tak si ho sežeňte. Ostatně verze D40 se můžou lišit provedením, ale schéma snad bude stejné. Kdo schéma nemá, možná se ho dočká v nějakém ZXM, ale každopádně si ho můžete stáhnout někde na Inetu, když budete dobře hledat (speccy.trilogic.cz).
A teď už doopravdy do tuhého. Úpravu lze rozdělit na dvě části. Jedna se stará o port (zápis, čtení) a druhá o vyselektění požadované paměti. Začnu s tím portem. Aby byl dekodér co nejjednodušší, využili jsme skutečnosti, že D40 obsahuje takové zbytečné a téměř nepoužívané porty jako 153 či 145, které jsou navíc dekódovány neúplně. Vzali jsme si do parády tu 145 - slouží k zablokování povolování/zakazování 8255ky v D40, a ktomu jí stačí jeden bit. (číslo pět žije - tedy chtěl jsem říct, že pátej). Tuto funkci můžete díky neúplnému dekodéru ovládat na portech 145,147,149,151 (bráno v potaz jen dolních 8 adresových vodičů). Dokumentovaná (jestli se to tak dá říct) je pouze ta 145ka. Dekódování provádí obvod IC14 (3205) - konkrétně výstup číslo 13 log. nulou zančí, že port byl vyselektěn, log. jedničkou, že nikoliv. Pro naše účely využíváme číslo portu 147. (ten zmiňovaný výstup ještě zhradlujeme s A1 a A2 viz. schéma). Co se týče vzájemné kolize, náš port se aktivuje jen, je-li na dolní adresové sběrnici přesně 147, jinak ne. Naproti tomu funkce D40 se zaktivují na libovolném z výše uvedených 4 číslech. Znamená to, že ať se bude jakýkoliv program pokoušet o blokování 8255, bude vše fungovat jako u originální D40. Pokud se však odkáže přes 147, ovlivní i náš registr, což asi nedopadne dobře (ale takový program jsem ještě nepotkal, pokud tuto feature vůbec využívá, tak přes 145).
tabulka portu 0 ROM/RAM 1 |stránky| 2 | ram | 3 14 vs. 16 kB 4 WRprotection 5 {blokování 8255} 6 zákaz 7 ---
V tabulce uvádím význam jednotlivých bitů, které můžete outnout do našeho registru. Náš port je řešen pres 6bitový registr, pátý bit používá D40 na zmíněné blokování a sedmý je naprosto nevyužit.Co se týče čtení, je to zajištěno přes oddělovač 74xx245, který v příslušném okamžiku vyšle sběrnici data. Která to budou je na vás. Jelikož je dobré mít možnost zjistit, jak je registr nastaven, min. prvních 5 bitů bych tam udělal jako transparetních. Otázkou je, co s těmi zbylými. Má smysl číst stav 5.bitu (to blokování)? Pokud ano, lze tam tento signál z desky D40 vyvést, ale já to považuji za zbytečné a mám s tímto bitem lepší plány do budoucna. 6.bit, neboli zákaz, místo něj tam můžete rovnou zapojit 0 V, protože je-li úprava zablokována, čtení portu stejně nefunguje. Na druhou stranu se dá zjistit, zda je úprava aktivní. Já ho zatím zapojený mám a pro autodetekce má asi i význam, no zatím si tam ten "zákaz" nebo rovnou zem zapojte a časem se uvidí. Bit 7. máme zapojen na diskchange od mechaniky, to je fakt dobrá věc. Je to pin č. č.34 na konektoru disketovky, tento signál je sice doveden na desku D40, ale dále se nevyužívá. Tento signál najděte a připojte na vstup sedmého bitu (u toho obvodu 74xx245). Zároveň tam ale připojte +5 V pres nějaký odpor!
Pokud jsem se dostatečně nezmínil a vy jste ze schématu nepochopili, jak funguje "zákaz", vězte, že tento bit je nastaven na jedna (OR 64: OUT (147),a) je celá část úpravy dosud popsána zablokována. Tzn. již to nevrátíte zpět, neboť zápis do registru nefunguje. Naproti tomu druhá část, výběr pamětí, funguje i nadále a řídí se dle naposledy zapsaných hodnot. Využití je snad patrné, pro jistotu uvedu, že OUT (147),192 (z principu přičítáme i 128, ale myslím, že není podmínkou) nastaví režim 100% kompatibilní s D40.
Dále za povšimnutí stojí, že do mé úpravy není zapojen signál /RESET, což má za následek, že reset počítače nevymaže nastavení našeho portu, tutíž používáte-li jinou ROM, kterou máte ve SRAM, používáte ji i poresetu, aniž by jste mzseli něco outovat. Jelikož jsou ale situace, kdy je třeba registr vynulovat - vaši ROMku v SRAMce něco poničí (přepíše),doporučuji zabudovat úpravě soukromý reset (jinak byste museli D40 vypnout, ale právě ani zapnutí D40 nezaručuje vynulovaný port, proto doporučuji toto tlačítko opravdu mít - já ho také mám, pravda uvnitř zavřené D40, ale mám ho).
A na řadu se dostává druhá část, výběrová část a jádro naší úpravy. Je to strašně jednoduché. Musíte přerušit signál /CE vedoucí do ROM. Zde dávejte pozor, je to výstup jednoho třívstupového hradla NAND (pin 6, IC10), který na první pohled dle schématu vede jen do té ROM. Na druhý pohled zjistíte, že vede i do IC20, který zajišťuje propustnost datové sběrnice. Proto ho musíte přerušit těsně před tou ROM, resp. za odbočkou k IC20. Tento signál zavedete do úpravy, kde je zhradlován s Q1 (Q budiž výstupy našeho registru). Tím se určí zda bude zaktivována ROM či SRAM. Jde-li o SRAM, je dalšími hradly určeno která. Poznamenávám, že je to děláno pro verzi 2x 32kB SRAM. Q1 je veden přímo na A14 a dle Q2 se volí mezi fyzickými brouky. Pokud hodláte zapojit jen 32kB , můžete vynechat vše, kde se do toho plete Q2 (tzn. ušetříte 3 hradla). Zapojíte-li 64kB SRAM (v jednom brouku), vynecháte totéž a signál Q2 vedete do SRAM přímo (tuším A15, ne?).
Write-protect je snad jasný, další problém nástává ohledně těch dvou kilobajtíků. Je nutno přeškrábnout spoj u vývodu 12 obvodu IC10 (zase to třívstupové NAND hradlo). Jak vidíte ze schématu, vožíte do přeškráblého místa vlastně ještě jedno hradlo. No a to je celé přátelé.
Jelikož se lidé bojí přeškrabávání, oba škraby ještě shrnu. Jeden provádíte "těsně" před vstupem do ROM (je to její CHIP SELECT). Druhý hned u výstupu. Pokud mě pamět neklame, ten druhý škráb se provede hned pod tím IC10, Zatímco ten první je vhodné provádět pod samotnou ROM. Pokud čtete pozorně, víte, kterým směrem po daném spoji "běhaj elektorny" a dle této filozofie oba přeškráblé konce napojíte na vstupy/výstupy úpravy.
Samotné provedení máme s Tritolem takovéto: vše co vidíte na schématu, máme na destičce vlastní výroby. Obě SRAM máme naletovány přímo na původní ROM (většina vývodů je kompatibilních) a jen odlišné vývody (jako hlavně WR, A14 a samozřejmě CS) jsou odehnuty. WR a A14 mají obě SRAM společné, zatímco CS mají jak SRAM tak ROM každá svůj!
Úpravu jde ještě mnoha způsoby vylepšit. Nepopisuji je, neboť nejsou nepostradatelné pro funkčnost. Já mám například SRAM zálohovánu baterkou a stav registru mi online ukazují LEDky (a ještě možná pár věcí, už ani sám nevím).
A nakonec něco, co by mělo být asi na začátku. Úprava je odzkoušena na dvou D40. Vše by mělo fungovat i na D80, neboť se snad neliší ničím jiným než typem mechaniky. S Didaktikem Kompakt bude asi problém, možná by ale šlo využít uvedeného principu a provedení dořešit, neboť jak je vidíte, důležité jsou pouze dva škraby, snad by se našlo, kde je udělat.
PS: pokud to někdo úspěšně přibastlíte, nezapomeňtě nám dát vědět (třeba e-mailem na pavel.riha(zavináč)trilogic.cz nebo tritol(zavináč)trilogic.cz).