Po dlouhé době došlo ještě k dalším vylepšením. BUSY přišel s novou koncepcí konverze 16 bitové sběrnice HDD do 8 bitové ZX (o obvod méně). Já jsem následně uplně přepracoval rovnice GALu, takže odpadlo několik dalších diskutabilních částí zapojení.
Tyto nové vlastnosti ale nebudeme promítat do již vytvořené interní verze, ani dělat novou. Jsou však použity v externí verzi.
Tak to byl jen takový letmý nástin části historie. Skutečnost byla mnohem drsnější, někdy přímo hororová - zvláště při snaze dostat pracovní verzi do estetičtější podoby. Mnohdy byly popírány základní fyzikální zákony - ještě teď mi při vzpomínce vstávají vlasy hrůzou, ale vy byste mi to stejně nevěřili, tak vás toho ušetřím.
Nejprve si však ujasněme několik základních pojmů o tom, co to vlastně stavíme. Vzpomeňte na populární UR4 (nebo ještě jednodušší Kempston), pomocí níž můžete do toho samého konektoru připojit joystick či myš, přičenž každé se z pohledu programátora ovládá jinak (lze najít i opačný příklad, kdy se zařízení programově ovládají stejně, ale fyzicky provádějí různé funkce). Chcemeli prioritně uchodit HDD, potřebuje postavit něco, k čemu připojíme minimálně ten hadr (takovým pomůckám se říká rozhraní, nebo interface (IF) - česky mezixicht). Jelikož chceme připojit IDE HDD (existují i jiné HDD, např. MFM (??) - staré, nebo SCSI - drahé a více jak 16bitové) můžeme tedy říkat, že stavíme IDE Interface. Zrovna mě bohužel nenapadá žádné další IDE zařízení, nicméně ho také budeme schopni připojit. Aby to nebylo tak jednoduché, existují i další zařízení, která se připojují na stejný interface, ale komunikují jiným protokolem než HDD. Proto bysme mohli nazývat náš bastl třeba IDE/ATAPI IF nebo ještě jinak (podle toho co vše na to jde pověsit - já vím tedy jen o IDE a ATAPI zařízeních). Pro jednoduchost si ale vystačíme s originálním "ZX-IDE IF".
Mezi ATAPI zařízení patří některé pásky, cdromky, zipky a tak. Na jednom IDE kabelu můžou viset dvě IDE/ATAPI zařízení, takže pomocí jednoho ZX-IDE IF připojíte např. dva disky, nebo disk a CDROM, nebo dvě CDROM atd. Pokud byste chtěli připojit více, museli byste si postavit více ZX-IDE IF, ale každý na jiné porty.
Jak již bylo řečeno, dekodér portů je velmi jednoduchý. Hlavní činností IF je převod 16b IDE na 8b Speccy. Je dobré si uvědomit, že řídící porty jsou též jen 8 bitové. Pouze datovy port je 16 bitový. Pokud chce speccy číst lichý (prostě první) bajt, HDD pošle bajty dva. Při dalším čtení z HDD bychom dostali 3. a 4. bajt, takže pokud speccy chce číst sudý (druhý) bajtík, musíme použít zálohu, kterou je nutné samozřejmě vytvořit. Funguje to tak, že při čtení lichého bajtu, spectrum dostane svých 8 bitů a druhý bajt si IF zapamatuje (pomoci 74LS573 - jedna se používá při čtení jedna při zápisu, nepodařilo se nám vymyslet jak to udělat stejně jednoduše jen s jednou). Při čtení sudého bajtu se s HDD nekomunikuje, speccy dostane zaznamenanou hodnotu. Programově je nutné číst bajty po dvou, provádět dva INy za sebou. Jakmile byste šáhli mezitím na jiný IDE port, přijdete o uloženou zálohu.
Pokud vás to zajímá, podívejte se na soubory související s GALem:
Hddbus1 je klasický IDE konektor, tzn. dvouřadý 40 pinový (2x20). Zxbus je řada pinů, na které je třeba přivést stejnojmenné signály odněkud ze spectra (od procesoru, ze systémového konektoru atd). Po pravdě řečeno, pokud si budete podle výše uvedeného schématu stavět vlastní desku, můžete zxbus realizovat jak je libo, ale já jsem svou desku navrhl tak, aby to byla řada pinů. Jelikož asi málokdo z vás bude sestavovat vlastní desku, uvedu proto pro jistotu ještě jednou pořadí pinů na mé desce (je stejné jako na schematu):
pin: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
signál: | Vcc | A1 | A2 | A3 | A7 | A6 | A5 | A4 | /IORQ | /RD | /WR | /M1 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | GND |
Nejenže asi nikdo z vás nebude chtít navrhovat vlastní desku, málokdo se zhostí výroby již navrhnuté. Dalším problémem pro vás bude pravděpodobně ten GAL. Zakoupit součástku je jedna věc, ale GAL je třeba ještě správně naprogramovat! Neni pro mě zas takový problém toto pro vás zařídit (dáte-li včas vědět), ale nechtějte po mě, abych vám to posílal poštou (ledaže by se na to našel nějaký dobrovolník, třeba Matsoft). (chcete-li si plošňák i součástky objednat, kontaktujte PVL. pozn. HOOD)
Za předpokladu, že již máte desku, GAL a všechny ostatní potřebné součástky, můžete začít bastlit. Firma, u které si já nechávám dělat desky, sice vyrábí desky oboustranné, ale bez prokovených otvorů, což vede k nutnosti pájet součástky na obou stranách desky. (pájet má samozřejmě smysl pouze v případě, že od daného pinu na dané straně vede nějaký spoj). Strana spojů se pájí relativně dobře, dejte si však pozor na straně součástek, kde několik spojů (nešlo jinak) od pinu není vedeno směrem od součástky, ale pod ní - na to je lepší se připravit ještě před zasazením součástky. Jinak deska neobsahuje žádné samostatné "prokovky", veškeré přechody se uskutečňují u pinů součástek (že mi to dalo hodně práce, ale povedlo se). Není špatné připájet všechny potřebné piny (ušetří to mnoho starostí ;-) a komu se to povede hned na poprvé, tak ten neni kamarád (to víte že s diZZym už se nekamarádíme?)). Deska obsahuje i dva piny pro diodu (LEDku) a dva pro odpor (k té ledce). Ačkoli třeba napoprvé nebudete chtít LEDku zapojovat, ten odpor raději připájejte, neboť jedna jeho "noha" spojuje napájení na horní a dolní straně - bez toho vám to opravdu nebude fungovat (no comment, že jo Tritol?)
moje poznámka k výrobě IF (protože všichni známí, kteří si IF stavěli, včetně mě, měli problémy jej oživit): TRPĚLIVOST! TRPĚLIVOST! TRPĚLIVOST! Pájejte opravdu pozorně, nebude-li vám to fungovat, pak je na 90% chyba na vaší straně. Vezměte multimetr a propípejte si všechny spoje, bacha na studeňáky (o těch bych mohl hodně vyprávět). Se vší úctou k autorům, deska měla být prokovená, ty investované peníze by se bohatě vrátili v podobě ušetřených nervů. Konektor k IDE (40pinový) dodává PVL zahnutý a proto je téměř nemožné některé signály pájet, protože jsou schovány a přístup k nim je prakticky nulový. Takže zvažte, jestli radši nepořídit konektor rovný. Znovu opakuju, že IF je navržen správně a FUNGUJE. Níže, v části SOFT, najdete jednoduchý prográmek v BASICu, kterým hotový IF otestujete a pomůže vám odhalit chyby. Hodně štěstí, a máte-li MBčko, tak NEVÁHEJTE a IF si postavte, já jej používám už asi přes dva roky a jsem nad míru spokojen.
163 | Data register |
167 | Parametr register |
171 | Sector count register |
175 | Start sector register |
179 | Cylinder low |
183 | Cylinder high |
187 | Head register |
191 | Command/Status register |
Tyto porty zvolili autoři. Existují však i jiné porty, na nich visí Dronův IF a to proto, že si připojoval ke svému MBčku ještě i General Sound (zvuková karta z Ruska přehrávající .MOD formát, aniž by se zatěžoval procesor) a protože jeden z portů měla tato zařízení společná, bylo nutno posunout sadu portů o něco výš, takže po sobě jdoucí: 195, 199, 203, 207, 211, 215, 219, 223. Dron je, pokud vím, jedinej na světě, který toto zapojení používá, těžko lze tedy zatím hovořit o nějakém druhém standartu.
Pokud jste pospojovali jednotlivé součásti, jistě se na ně nechcete do zbytku života jen koukat. Tak za prvé byste měli odzkoušet, zda jste to udělali správně. Doporučuji nejprve pohledem - opravdu jste připájeli všechno? Jelikož jste museli u interní verze provádět zásahy do počítače, desku (tj. samotný plošňák IF) nepřipojujte, ale zkuste zapnout počítač samotný. Pokud šlape vypněte ho a připojte desku. Pak to můžete odvážně zkusit zapnout (!NA VLASTNÍ NEBEZPEČÍ!) - bez dalších zařízení jako HDD apod. Mělo by se to chovat uplně normálně, pokud vám počítač nenaběhne, hned to raději vypněte a hledejte chybu.
Dalším krokem je už připojení se zařízením (je snad jasné že při vypnutém kompu, né?). Připojené zařízení by už na funkčnost počítače mít vliv neměla. Jako první zkuste porty.
Když na nějaký port něco pošlete (out) měli byste to být schopni zase přečíst (in) - kromě command registru, tam si musíte být jisti, že víte co děláte! a možná i parametr registru (ted si nejsem jistý).(na tomto principu pracuje ten můj jednoduchý testovací prográmek v BASICu. Hledejte jej v sekci DOWNLOAD.pozn. HOOD)
Jinak OUT 187,160 vybere pro práci zařízení MASTER a OUT 187,176 SLAVE.
Jinak vám prozradím jen jediný příkaz: OUT 191,16 vyresetuje vybrané zařízení (teda je-li to HDD, u CDROM zase OUT 191,8). Při resetu většina HDD i CDROM vyluzuje zvuky, takže slyšíte, že se něco děje.
Spíše doporučuji začít experimentovat s HDD než s CDROM. (i když CDROM byste asi jen tak nezničili .. zatímco HDD klidně možná jo).
Pokud máte správně vyselektěný HDD, měl by na PRINT IN 191 vracet 80, to jako že je vše OK, jiná čísla značí problémy (viz dokumentace). S CDROM je to složitější a o tom někdy jindy (ze začátku vrací 0, pak ..)