{"id":3532,"date":"2014-09-06T10:32:31","date_gmt":"2014-09-06T08:32:31","guid":{"rendered":"http:\/\/www.kameli.net\/marq\/?p=3532"},"modified":"2014-09-06T10:40:28","modified_gmt":"2014-09-06T08:40:28","slug":"kohti-siirtopiuhaa","status":"publish","type":"post","link":"http:\/\/www.kameli.net\/marq\/?p=3532","title":{"rendered":"Kohti siirtopiuhaa"},"content":{"rendered":"<p>Er\u00e4s pahimpia Panasonic JR-200 -koodailun esteit\u00e4 on kunnollisen emulaattorin tai nopean siirtoratkaisun puute. <em>Virtual Panasonic JR<\/em> ei yksinkertaisesti riit\u00e4 laitteistonl\u00e4heiseen ohjelmointiin ja on muutenkin ajan hampaan pahasti kalvama Windows only -tekele. Kasettiportin kautta voi p\u00f6ristell\u00e4 softaa helposti sis\u00e4\u00e4n aidolle koneelle \u00e4\u00e4nikortista, mutta 2400 bps k\u00e4y tuskaisen hitaaksi v\u00e4h\u00e4nkin isommilla tiedostoilla, mink\u00e4 lis\u00e4ksi joka v\u00e4liss\u00e4 pit\u00e4\u00e4 olla n\u00e4pp\u00e4ilem\u00e4ss\u00e4 latauskomentoja. Eli hakusessa olisi jotain &#8220;resetoi kone ja se lataa koodin&#8221; -tyylist\u00e4 ratkaisua. Mit\u00e4\u00e4n sellaistahan ei tietenk\u00e4\u00e4n valmiina ole noin marginaaliselle koneelle, joten l\u00e4hdimme Teron kanssa kyh\u00e4\u00e4m\u00e4\u00e4n omaa siirtopiuhaa.<\/p>\n<p>Elektroniikan v\u00e4h\u00e4inen tuntemus asetti tiukat puitteet sille, kuinka valmiista komponenteista kikkale pit\u00e4isi tehd\u00e4 ja kuinka mutkikkaaseen ratkaisuun rahkeet riitt\u00e4isiv\u00e4t. Arduino oli tuttuna laitteena luonteva l\u00e4ht\u00f6kohta rajoituksistaan huolimatta, ja loput palaset koottiin normaaleista logiikkapiireist\u00e4: halpa EPROM, salpapiiri (latch) datav\u00e4yl\u00e4lle ja perinteinen GAL osoitev\u00e4yl\u00e4\u00e4 dekoodaamaan. Sekaan viel\u00e4 fiilispohjalta heitetty konkka kohinaa vaimentamaan \ud83d\ude42 Olemattoman dokumentaation takia Panan laajennusv\u00e4yl\u00e4n pinnitkin piti ensin selvitt\u00e4\u00e4 omatoimisesti yleismittarilla \u2013 onneksi kaikki tarpeelliset sent\u00e4\u00e4n l\u00f6ytyiv\u00e4t. Sivussa piti opetella k\u00e4ytt\u00e4m\u00e4\u00e4n eprommeria ja tutustua GAL-ohjelmointiin, mutta niist\u00e4kin selvittiin. Eprommerin k\u00e4ytt\u00e4mi\u00e4 jed-tiedostoja sai tehty\u00e4 eqn2jed-ohjelmalla. T\u00e4lt\u00e4 n\u00e4ytt\u00e4\u00e4 kahden v\u00e4yl\u00e4osoitteen dekooderi ($d800 ja $8000 viisi ylint\u00e4 bitti\u00e4):<\/p>\n<pre>  CHIP GALLI 16V8\r\n  i0=1 phi2=2 rw=3 vma=4 a11=5 a12=6 a13=7 a14=8 a15=9 gnd=10\r\n  i1=11 o7=12 o6=13 o5=14 o4=15 o3=16 o2=17 lat=18 rom=19 vcc=20\r\n\r\n  EQUATIONS\r\n  \/lat = !vma * !rw * a15 * !a14 * !a13 * !a12 * !a11 * !phi2\r\n  \/rom = !vma * !rw * a15 * a14 * !a13 * a12 * a11 * !phi2<\/pre>\n<p>Ohjelmistopuolellakin riitti haasteita, kun kolme tietokonetta piti saada toimimaan kesken\u00e4\u00e4n synkronoidusti. PC-p\u00e4\u00e4ss\u00e4 istuu l\u00e4hetyskikkare, joka l\u00e4hinn\u00e4 lukee tiedoston levylt\u00e4 ja l\u00e4hett\u00e4\u00e4 sen Arduinolle sopivan verkkaiseen tahtiin. Arduinon sarjapuskuri vuotaa helposti yli (128 tavua kaikkiaan, kaksisuuntaisella l\u00e4hetyksell\u00e4 ilmeisesti 64\/64), joten v\u00e4lill\u00e4 pit\u00e4\u00e4 j\u00e4\u00e4d\u00e4 odottelemaan kuittausta. Suurin ongelma oli Artturin ja peeseen saaminen aluksi synkkaan, jottei tavuja menisi hukkaan puolin eik\u00e4 toisin. 115200 bps sarjasiirto toimi lopulta varsin luotettavasti eik\u00e4 ole edes nopeudeltaan pullonkaula. Sek\u00e4 Linuxin ett\u00e4 Arduinon pit\u00e4isi toimia suuremmillakin nopeuksilla: pikku kokeilulla my\u00f6s 230400 meni l\u00e4pi, mutta kun en ollut varma M\u00e4kin tuesta, niin j\u00e4tin nopeuskokeilut sikseen.<\/p>\n<p>Arduinon ja Panasonicin v\u00e4linen siirto vaati enemm\u00e4n jumppaamista. Vaikka siirto meni varsin lujaa l\u00e4pi suurimman osan ajasta triviaalillakin latchin r\u00e4mpytyksell\u00e4, niin v\u00e4lill\u00e4 tavuja kuitenkin putoili. Toimiva ratkaisu perustui lopulta siihen, ett\u00e4 kun pana lukee siirrossa k\u00e4ytett\u00e4v\u00e4\u00e4 muistiosoitetta, niin se liipaisee lopettaessaan Artturilta keskeytyksen, jossa liipaistaan salpapiiriin uusi arvo. N\u00e4in varmistui se, ettei liipaisu tapahdu kesken osoitteen lukemisen. Nopeus putosi samalla puoleen, mutta t\u00e4rke\u00e4mp\u00e4\u00e4 oli saada tavut perille. Optimoinnin j\u00e4lkeen todellinen siirtonopeus asettui n. viiteen kilotavuun sekunnissa. Sill\u00e4kin t\u00e4yttyy jo koko muisti seitsem\u00e4ss\u00e4 sekunnissa pakkaamattomalla datalla.<\/p>\n<p>Aiemmissa siirtopiuhoissani olin k\u00e4ytt\u00e4nyt yksinkertaista alternating bit -toteutusta, jossa vaikkapa kahdesta pinnist\u00e4 toinen on kello ja toinen itse data. Nyt oli kuitenkin k\u00e4yt\u00f6ss\u00e4 juhlavat kahdeksan bitti\u00e4 kerralla, ja mieli teki siirt\u00e4\u00e4 t\u00e4ysi\u00e4 tavuja kerralla ilman bittien shiftaamista. Kotipolttoisena ratkaisuna tein niin, ett\u00e4 per\u00e4kk\u00e4iset tavut muuttuvat joka kerta, jolloin Pana tunnistaa seuraavan tavun pelk\u00e4st\u00e4 arvon muutoksesta ilman erillist\u00e4 synkronointia. Pitkien nollasarjojen ym. tehokkaan siirron vuoksi tavuihin sotketaan mukaan &#8220;kantoaalto&#8221;, joka miinustetaan vastaanottop\u00e4\u00e4ss\u00e4. Jokunen harva tilanne, jossa per\u00e4kk\u00e4iset tavut ovat sittenkin samat, hoidetaan erillisell\u00e4 escape-merkill\u00e4.<\/p>\n<p><a href=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/viritys.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-3534\" alt=\"viritys\" src=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/viritys-150x150.jpg\" width=\"150\" height=\"150\" \/><\/a>\u00a0<a href=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/pannaani1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-3533\" alt=\"pannaani1\" src=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/pannaani1-150x150.jpg\" width=\"150\" height=\"150\" \/><\/a>\u00a0<a href=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/vers_5_9_2014.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-3535\" alt=\"vers_5_9_2014\" src=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/09\/vers_5_9_2014-150x150.png\" width=\"150\" height=\"150\" \/><\/a><\/p>\n<p>Nyt on jo kotelokin ja kaikki. Oikealla Teron PETSCII:n\u00e4 piirt\u00e4m\u00e4 piirikaavio, josta n\u00e4kyv\u00e4t piirit ja niiden v\u00e4liset kytkenn\u00e4t tarkemmin. Kehityskohteita olisi tietysti lukuisia:<\/p>\n<ul>\n<li>Pienemm\u00e4ll\u00e4 rommilla s\u00e4\u00e4styisi tilaa levylt\u00e4: nyt on k\u00e4yt\u00f6ss\u00e4 kokonaiset 256 tavua 128 kilon piirilt\u00e4. Mutta kun niit\u00e4 sattui olemaan&#8230;<\/li>\n<li>Arduino Nanon voisi korvata ATMegalla, kunhan vaan saisi USB-liikenteen ja virransy\u00f6t\u00f6n jotenkin hoidettua. Toinen vaihtoehto olisi halvempi Arduino Micro.<\/li>\n<li>Sekaan roiskaistu yksin\u00e4inen konkka ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 tee mit\u00e4\u00e4n hy\u00f6dyllist\u00e4: pit\u00e4isi tutustua joskus tarkemmin, mihin ja millaisia niit\u00e4 oikeasti tarvitaan<\/li>\n<li>Siirtosofta voisi palata BASIC-tulkkiin ja ylip\u00e4\u00e4ns\u00e4 tehd\u00e4 v\u00e4h\u00e4n enemm\u00e4nkin asioita<\/li>\n<li>Koko h\u00e4rp\u00e4ttimelle p\u00e4\u00e4lle\/pois-kytkin<\/li>\n<li>Resettinappi, jos mahdollista laajennusportin kautta<\/li>\n<li>Oikean kunnon piirilevyn teett\u00e4m\u00e4ll\u00e4 saisi tilaa s\u00e4\u00e4stetty\u00e4 huomattavasti samoin kuin hyppylankasotkua<\/li>\n<\/ul>\n<p>Puutteineenkin <em>Panana<\/em> ratkaisee p\u00e4\u00e4ongelman eli nopean koodin siirt\u00e4misen peeseelt\u00e4 Panasonicille. Jatkokehityksen toppasi toistaiseksi se, ett\u00e4 eBaylt\u00e4 haalimani Kiina-Nanot <a href=\"http:\/\/axotron.se\/blog\/non-functional-arduinos-from-banggood-com\/\">osoittautuivat viallisiksi<\/a> (kloonatut FTDI-piirit eiv\u00e4t osaa kaksisuuntaista liikennett\u00e4). Kunhan saan toimivampia, niin julkaisen koko projektin sitten virallisestikin <a href=\"http:\/\/www.kameli.net\/marq\/?page_id=1270\">Panasonic-sivulla<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Er\u00e4s pahimpia Panasonic JR-200 -koodailun esteit\u00e4 on kunnollisen emulaattorin tai nopean siirtoratkaisun puute. Virtual Panasonic JR ei yksinkertaisesti riit\u00e4 laitteistonl\u00e4heiseen ohjelmointiin ja on muutenkin ajan hampaan pahasti kalvama Windows only -tekele. Kasettiportin kautta voi p\u00f6ristell\u00e4 softaa helposti sis\u00e4\u00e4n aidolle koneelle \u00e4\u00e4nikortista, mutta 2400 bps k\u00e4y tuskaisen hitaaksi v\u00e4h\u00e4nkin isommilla tiedostoilla, mink\u00e4 lis\u00e4ksi joka v\u00e4liss\u00e4 pit\u00e4\u00e4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,22,15],"tags":[],"class_list":["post-3532","post","type-post","status-publish","format-standard","hentry","category-koodi","category-laitteet","category-retro"],"_links":{"self":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3532"}],"version-history":[{"count":8,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3532\/revisions"}],"predecessor-version":[{"id":3543,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3532\/revisions\/3543"}],"wp:attachment":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3532"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}