Před nějakou dobou jsem na Aukro zakoupil Sharp MZ-3500. Nádherný kousek, skoro nový, perfektně funkční a i s monitorem. Je to úžasný počítač – dva procesory Z80, dvě grafické karty, zabudovaný řadič a disketovka, prostě fakt skvělá profi mašinka. Ovšem můj MZ-3500 měl jednu docela velkou nevýhodu – chyběla mu klávesnice. Dalo by se říci, že se jedná o dost podstatný problém, ale v dnešní době bylo jen otázkou času navrhnout a naprogramovat vhodný adaptér na standardní PS/2 klávesnici.
Posháněl jsem schémata, což v té době nebylo vůbec snadné, a pustil se do práce. Naštěstí Maurice Hawes ze Sharp Users Club UK byl ochotný udělat nějaké kopie z manuálu a servisního manuálu a ty mi poslat poštou do ČR. Později originály zakoupil Radek Suk a zapůjčil mi je k naskenování, za což mu děkuji, takž vy už můžete stahovat ze sharpmz.org.
Sharp MZ-3500 má sériové rozhraní klávesnice ne nepodobné standardnímu PC. Také v útrobách originální klávesnice MZ-1K02 tepe procesor 8749. Začal jsem s mým oblíbeným Arduinem. Na toto ideální věc. PS/2 klávesnici připojíte snadno a jsou k dispozici hotové knihovny pro práci s ní. Programujete pohodlně v C++ a na připojení Sharpa je také dost volných portů. Na rozdíl od dat a hodin PS/2 klávesnice, kde jsou data obousměrná, má MZ-1K02 jedny data a hodiny do počítače, druhá data a hodiny do klávesnice a společný je jen signál ACK. K připojení klávesnice tak potřebujete minimálně 7 vodičů a připojení je přes klasický 8-pinový DIN.
Zapojení HW bylo poměrně rychlé, a pomohl jsem si malým breadboardem s pullupy. Komunikace mezi klávesnicí a počítačem je v servisním manuálu poměrně dobře popsaná a tak napsání emulace byla otázka celkem krátkého času a brzy na mně vykoukl funkční EOS.
Trochu jsem se zasekl na nutnosti často klávesu posílat několikrát, protože procesor nemá vždy čas se obsluze klávesnice věnovat. Upravil jsem trochu i časovací konstanty, aby akceptace byla co znaků nejlepší a napsal emulaci základních kláves. Také jsem vše přestavěl na větší breadboard, včetně ATmega328 a Arduino jsem pak už nepotřeboval.
Stále mi však nefungovaly některé klávesy. Například jsem nevěděl, kterým znakem odkliknout chybovou hlášku. Než jsem se pustil do dalšího bádání, rozhodl jsem se dát adaptéru trochu štábní kultury a přesunout ho z breadboardu na samostatnou destičku i se všemi konektory. Také jsem vstupně/výstupní část vybavil obvodem 4049 i se všemi přizpůsobovacími pasivy, jako má originální klávesnice, aby emulace byla co nejvěrnější.
Prototypové desky jsem nechal udělat u nás v Apama a v dalším ladění a vylepšování softwaru jsem už pokračoval po nahrání bootloaderu přímo na adaptéru.
Naštěstí v té době Radek Suk zakoupil na eBay MZ-3500 i s klávesnicí a byl ochoten zapůjčit svůj originál k pitvě. Díky moc! Nutno podotknout, že pacient nezemřel, ale byl jen pečlivě zanalyzován a vrácen majiteli. Vyčetl jsem i obsah 8749 MZ-1K04.
Zapojil jsem logický analyzátor a pečlivě opsal scan kódy pro všechny možné kombinace kláves a pečlivě uložil do Excel souboru MZ-3500_KBD_MZ-1K04_codes.xls.
Klávesnice Sharp MZ-3500 komunikuje 11 bity. První je START bit, následuje 8 datových bitů, příznak CMD a parita. Pro rozlišní klávesy se tak nepoužívá jen 8 bitů jako u PS/2, ale je zde navíc 9. bit CMD pro některé speciální klávesy nebo kombinace. Speciální kód pak generuje i dvojpólový přepínač PRO/OP. Na druhou stranu není zde žádná šílenost s prefixy jako u PS/2 a není detekováno uvolnění klávesy. Jak taková komunikace adaptéru mezi PS/2 a Sharp MZ-3500 výsledně vypadá se můžete podívat tady:
Trochu jsem si s Arduinem naběhl. Chtěl jsem využít hotových knihoven, ale ony zase tak hotové nebyly. Nepodporovaly komunikaci z počítače do klávesnice a já chtěl světýlka . Navíc má Sharp některé klávesové kombinace přece jen dost specifické, takže bylo nutné kód knihovny docela ohnout. Zpočátku jsem chtěl vše dělat otevřeně a univerzálně, ale ve finále jsem z časových důvodů rezignoval a vznikl pěkný bastl, ve kterém se asi vyznám jenom já. Kdyby přece jen někdo měl nutkání se v kódu šťourat, klidně si ho stáhněte.
Stejně tak, kdyby někdo chtěl Gerbery nebo Eagle zdroje z mého prototypu, tak si napište. Nicméně mám v plánu udělat nějakou univerzálnější verzi (asi v SMD, aby se vešla do krabičky HAMMOND 1593K) s možností připojení sériové i paralelní klávesnice (Apple I/II, SAPI, …). Tohle je dost jednoúčelové a na něco jiného než je Sharp MZ-3500 (a možná MZ-5500/5600 či Amiga 500/1000/2000) to využijete asi jen jako inspiraci.
Firmware jsem doladil tak, že jsou podporovány funkce všech kláves MZ-1K04 s tím, že jsem udělal následující kompromisy a nahrazení:
– klávesa 00 se simuluje stiskem Alt 0
– klávesu CL jsem dal na ESC
– klávesu RUN jsem dal na Alt F1
– klávesu EDIT jsem dal na End
– klávesu DEB (CONT/ a s Ctrl RUN/) jsem dal na F11
– klávesu BRK CONT (CONT a s Ctrl BREAK) jsem dal na F12
– klávesu CMD jsem dal na Windows klávesu (toto je trochu „o hubu“, kdyby někdo neměl Windows klávesnici, ale volné PgUp nebo PgDown mi nepřišly vhodné)
– přepínač PRO/OP jsem nahradil klávesou Scroll Lock, přičemž rožnutá Scroll Lock LED simuluje OP režim (v EOS zamčená klávesnice)
– klávesa Caps Lock dělá inverzi stavu Shift u všech kláves, zatímco na originále simuluje stále stisknutý SHIFT, takže se k neshiftovaným znakům nedá dostat (toto možná změnám na originální chování, ale přišlo mi škoda, že se nedá dostat k některým znakům)
Ve finále jsem pak ještě desku lehce „zakapotoval“ akrylátem, aby nedošla úhony.
Nádherná práca chlape… vážne. Klobúk dole!
🙂
Dobra prace Martine.
Jo tak světýlka, jo? 🙂 A k čemu má ta potvora 2 procesory a 2 grafárny?
No jasan, světýlka jsou na počítačích nejdůležitější. Bez nich vypadají málo počítačově 😉 A na klávesnici taky.
Jedno CPUpočítá program a druhé CPU se stará o periferie – seriák, CTC, parallel, hodiny, floppy, atd. Obě grafiky používají uPD7220. Ta na desce umí jen textový režim a ta přídavná, co se strká zepředu do slotu umí grafiku. Samozřejmě to podporuje 2 monitory. Na to, že to byl souputník MZ-700 z roku 1982, to bylo brutální dělo. Schválně koukněte do schémat v Service Manual na http://www.sharpmz.org/mz-3500/dldsh3500.htm.
Opravdu zajímavej stroj. Sharp si u mě trochu vylepšil reputaci 🙂 Dokonce i design se jim zde povedl. Vím, že jsem zde na tenkém ledě, ale design řady MZ 700/800 je pro mě odpudivý a řadím je k nejošklivějším počítačům 8-bitové éry. Byť jim musím přiznat, že technicky jsou jinak velmi zdařilé.
Ale byla to stejně krásná doba, kdy se každý snažil prošlapat tu svou cestičku, než nakonec všichni skončili na jedné „dálnici“ a trh se „konsolidoval“. Škoda…
Jinak hezký pracoviště. S takovou bych asi přešel na SMD, než pak dostávat z toho koberce uštípaný nožičky 🙂
Kdepak, v pracovne jen sem tam neco ladim, hlavne softwarove. Pajim, k manzelcine velke radosti, v jidelne na stole 😉
Jinak mne MZ-800 prijde docela hezky a MZ-700 vyslovene nadherny. MZ-80k a spol. nejsou moc fesaci.
Pingback: GBA1000 – solidní upgrade pro Amiga A1000 | Martinův 8-bitový blog
I developed MZ-3500 emulator for Win32 environment,
and your MZ-3500 keycode table helped me very much.
Thank you very much sir!
I am very glad, that my work helped someone. If I can help any more, just tell me. I am really happy to hear any news about vintage computers, especially Sharp computers, as this is what I have grown with.
I have tested an older version of your Sharp emulator some time ago. Is the new version available somewhere?
Kind regards
Martin
Thank you for your reply.
>I have tested an older version of your Sharp emulator some time ago. Is the new version available somewhere?
Could you please visit my web page?
http://homepage3.nifty.com/takeda-toshiya/
You can download all my emulators in the „Common Source Code Project“ page.
http://homepage3.nifty.com/takeda-toshiya/common/
Great, thank you. I was looking for it at the top of the page http://homepage3.nifty.com/takeda-toshiya/mz3500/index.html, where is „Comming soon…“.