ZX-IDE interface


Najdete zde vše od teorie přes stavbu IDE IF (dále jen IF) po software. Děkuji autorům PVLmu za poskytnutí stránek, které zde přebírám, taky Tritolovi za soft, který pro IF píše, děkuji i Dronovi za skvělý hdd_patch.

1) Historie a vznik IF
2) Co je IDE, pojmy...
3) Jak to funguje ?
4) Stavíme IF
5) Porty
6) První kroky
7) Screenshots
8) IF a MB02+
9) Software
10) MATRIX OS


Trocha historie

(píše PVL) Lidé, kteří mě znají, vědí, že o PeCích nesmýšlím nijak dobře a tento vztah přenáším a priori na všechny její součásti. Vezmeme-li ještě v úvahu, že jsem konzervativní, nelze se divit proč jsem byl dlouhou dobu spokojený s kazeťákem. Bariéru proti disketovým jednotkám jsem odboural až po shlédnutí její užitečnosti u přátel a s hard diskem tomu bylo obdobně. Pohlížel jsem na něj jako na PeCoidní WH a tudíž mě vůbec nezajímal a snahy ostatních lidí jsem naprosto ignoroval.

Po jistém čase se k experimentální nechal dokopat i Tritolsoft, kterého zaujala jednoduchost schématu, které Matsoft stáhl někde z netu. Jednodušší varianta obsahovala pouze jeden IO, který sloužil jako dekodér portů. Koneckonců je to vše co potřebujete až na malý detail, že HDD je 16bitové zařízení zatímco Speccy je správně 8 bitové. Proto sice tato verze použitelná byla, ale využila pouze poloviční kapacitu připojeného hadru a přečetli byste pouze to, co byste si sami zapsali. To bylo samozřejmě velmi nespectristické řešení, ale byl to první úspěšný krok. Proto Tritol tuto variantu raději deaktivoval (rozuměj odpálil) a pro jistotu i s hadrem. Nicméně Matsoft se odbýt nedal a dotlačil další HDD. Složitější varianta obsahovala 5 IO, které zajišťovaly dekódování portů a hlavně převod mezi 8 bitovým ZX a 16 bitovým IDE. V tuto dobu jsem ho byl navštívit, ale ani předvedení jednoduchého interface a jeho přenosové rychlosti mě nijak nezaujalo. Stále jsem pokládal HDD za něco co nepotřebuji. Co mě však zaujalo, byla nedokonalost schematu. Při čtení z HDD se četli bajty jeden po druhém (což je ok), zatímco při zápisu se vždy dva bajty prohazovaly (prostě voprus). Odstranění této vady netrvalo dlouho, vyžádalo si to však další 3 IO (nebo tak nějak). Toto řešení se mi nelíbilo, proto jsem se začal zajímat co tam vlastně dělá ten tajemný GAL (jeden z IO). Ale jako na potvoru jsem nesehnal nikoho, kdo by mi vysvětlil vše o GALech. Něco málo jsem se ale dozvěděl. Tak GALy se třeba programují. A tenhle využíval svou celkovou kapacitu, takže už do něj nešlo nic přidat. No někoho by to možná odradilo, ale mě ne. Zjistil jsem, že většinu toho, co jsme přibastlili, ten GAL obstarává a tak mě napadlo že by mohl obstarat vše. Proto jsem lehce poupravil pár funkcí k našim potřebám. Problém byl, že symbolicky zapsané funkce nikoho nezajímají, ta důležitá věcička zvaná programátor GALů rozumí jen nulám a jedničkám (tzv. JEDEC formát). Pro převod se používá překladač, který do něho symbolický zápis přeloží. Ten jsme neměli. (Stupidius pravda nabízel něco pro Windows, ale ... no .. prostě nemám rád wokna). Tak jsem vzal ten původní a pár číslíček prohodil, pak jsem to dal Tritolovi a ten to odsouhlasil. No pak jsem našel program pro DOS, který běžel i v DOSEMU a přeložil to raději pomocí něj (výsledek byl stejný). Nová verze GALu umožnila odstranit pár obvodů, takže finálně to má 6 IO (jeden obvod přibyl, pravda, ale ubyl tranzistor s odporem, o kterých jsem se nezmínil, že byly v původní verzi).

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.


Něco nazačátek

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 to vlastně funguje

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:

  • EQN soubor obsahuje logický zápis funkcí a komentáře
    Následující soubory vytvořil překladač:
  • JEDEC soubor potřebný pro programátor GALů
  • průvodní log překladu
  • a zde jsou další verze, které mi PVL poslal.

    Jdeme na to

    A nyní snad už nadešel čas na konkretní schema:
    kliknutím zvětšit

    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


    A ted ještě osazení mojí desky:
    osazení plošného spoje IF

    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.



    Porty

    Ještě se podíváme na kterých portech nám IF vlastně visí:
    163Data register
    167Parametr register
    171Sector count register
    175Start sector register
    179Cylinder low
    183Cylinder high
    187Head register
    191Command/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.

    První kroky

    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 ..)

    Dobrý dokument do začátku může být tohle.


    Screenshots

    IDE IF- externí verze IDE IF- interní verze

    Ještě by se hodilo říct, co je vlastně interní a externí verze. Interní IF je umístěn uvnitř počítače. Hlavní rozdíl však spočívá v tom, že externí IF má nějaký ten hardware navíc. V praxi to znamená, že chcete-li s IF provozovat nějaký operační systém, musíte mít někde paměť, kam tento systém nahrahete (v současnosti to umožňuje pouze MB02+, nebo speciálně upravená D40, kterou, pokud vím, mají pouze PVL a TNT). Z tohoto důvodu vznikla verze externí, která ma vlastní paměť, takže IF můžete provozovat i na nijak speciálně upravených sestavách.

    Možnosti externí verze

  • Dekodér IDE portů + 8<=>16 konvertor
  • ?? až 64kB EPROM
  • 128kB SRAM
  • 8bitový stránkovací port
  • NMI tlačítko
  • možnost použití externí ROM či NMI
  • backup ready (připraveno pro zálohování SRAM)


    IF a MB02+

    Zatímco interní verze je na světě již přes dva roky, externí verzi její autoři zatím nevypustili. Ten, kdo však má možnost nějaké externí paměti, může používat interní IF už nyní. A protože v MBčku máme SRAM, jejíž banky lze stránkovat po 16Kb a připínat je od nuly, není žádný problém IF na MBčku provozovat, i když pro IF zatím neexistuje žádný funkční operační systém. Řešení vymyslel a naprogramoval DRON a pojmenoval to HDD_PATCH.
    Tento prográmek využívá BSDOS308, napojí se na jeho rutiny pracující s disketou, rozdělí harddisk na tzv. virtuální disky a umožňuje jej tak používat. Jediné omezení spočívá ve velikosti těchto disků, jejich maximální kapacita je něco málo přes 2MB, je to dáno samotným BSDOSem 308, který není na větší kapacitu uzpůsoben. Tento problém má řešit DOS400. ten je ovšem, zdá se, zatím beznadějně v nedohlednu
    Čtení z harddisku je v porovnání s disketou mnohem rychlejší, zápis je oprotí čtení pomalejší. V download sekci naleznete dvě verze hdd patche. Starší- základní, novější rozšířená, používající DMA i LBA přenosy, write protect disku, atd. Pro HDD_PATCH dále vzniklo několik programů nebo byly upraveny programy již existující.

    Software pro IF

    Prosím, přejděte do sekce DOWNLOAD, zde najdete na příslušném místě veškerý mě známý soft, který pro IF zatím existuje. Je určen pro interní verzi IF a to buď pro IF+speccy nebo IF+MB02+ only.