Kohti siirtopiuhaa

September 6th, 2014

Eräs pahimpia Panasonic JR-200 -koodailun esteitä on kunnollisen emulaattorin tai nopean siirtoratkaisun puute. Virtual Panasonic JR ei yksinkertaisesti riitä laitteistonläheiseen ohjelmointiin ja on muutenkin ajan hampaan pahasti kalvama Windows only -tekele. Kasettiportin kautta voi pöristellä softaa helposti sisään aidolle koneelle äänikortista, mutta 2400 bps käy tuskaisen hitaaksi vähänkin isommilla tiedostoilla, minkä lisäksi joka välissä pitää olla näppäilemässä latauskomentoja. Eli hakusessa olisi jotain “resetoi kone ja se lataa koodin” -tyylistä ratkaisua. Mitään sellaistahan ei tietenkään valmiina ole noin marginaaliselle koneelle, joten lähdimme Teron kanssa kyhäämään omaa siirtopiuhaa.

Elektroniikan vähäinen tuntemus asetti tiukat puitteet sille, kuinka valmiista komponenteista kikkale pitäisi tehdä ja kuinka mutkikkaaseen ratkaisuun rahkeet riittäisivät. Arduino oli tuttuna laitteena luonteva lähtökohta rajoituksistaan huolimatta, ja loput palaset koottiin normaaleista logiikkapiireistä: halpa EPROM, salpapiiri (latch) dataväylälle ja perinteinen GAL osoiteväylää dekoodaamaan. Sekaan vielä fiilispohjalta heitetty konkka kohinaa vaimentamaan 🙂 Olemattoman dokumentaation takia Panan laajennusväylän pinnitkin piti ensin selvittää omatoimisesti yleismittarilla – onneksi kaikki tarpeelliset sentään löytyivät. Sivussa piti opetella käyttämään eprommeria ja tutustua GAL-ohjelmointiin, mutta niistäkin selvittiin. Eprommerin käyttämiä jed-tiedostoja sai tehtyä eqn2jed-ohjelmalla. Tältä näyttää kahden väyläosoitteen dekooderi ($d800 ja $8000 viisi ylintä bittiä):

  CHIP GALLI 16V8
  i0=1 phi2=2 rw=3 vma=4 a11=5 a12=6 a13=7 a14=8 a15=9 gnd=10
  i1=11 o7=12 o6=13 o5=14 o4=15 o3=16 o2=17 lat=18 rom=19 vcc=20

  EQUATIONS
  /lat = !vma * !rw * a15 * !a14 * !a13 * !a12 * !a11 * !phi2
  /rom = !vma * !rw * a15 * a14 * !a13 * a12 * a11 * !phi2

Ohjelmistopuolellakin riitti haasteita, kun kolme tietokonetta piti saada toimimaan keskenään synkronoidusti. PC-päässä istuu lähetyskikkare, joka lähinnä lukee tiedoston levyltä ja lähettää sen Arduinolle sopivan verkkaiseen tahtiin. Arduinon sarjapuskuri vuotaa helposti yli (128 tavua kaikkiaan, kaksisuuntaisella lähetyksellä ilmeisesti 64/64), joten välillä pitää jäädä odottelemaan kuittausta. Suurin ongelma oli Artturin ja peeseen saaminen aluksi synkkaan, jottei tavuja menisi hukkaan puolin eikä toisin. 115200 bps sarjasiirto toimi lopulta varsin luotettavasti eikä ole edes nopeudeltaan pullonkaula. Sekä Linuxin että Arduinon pitäisi toimia suuremmillakin nopeuksilla: pikku kokeilulla myös 230400 meni läpi, mutta kun en ollut varma Mäkin tuesta, niin jätin nopeuskokeilut sikseen.

Arduinon ja Panasonicin välinen siirto vaati enemmän jumppaamista. Vaikka siirto meni varsin lujaa läpi suurimman osan ajasta triviaalillakin latchin rämpytyksellä, niin välillä tavuja kuitenkin putoili. Toimiva ratkaisu perustui lopulta siihen, että kun pana lukee siirrossa käytettävää muistiosoitetta, niin se liipaisee lopettaessaan Artturilta keskeytyksen, jossa liipaistaan salpapiiriin uusi arvo. Näin varmistui se, ettei liipaisu tapahdu kesken osoitteen lukemisen. Nopeus putosi samalla puoleen, mutta tärkeämpää oli saada tavut perille. Optimoinnin jälkeen todellinen siirtonopeus asettui n. viiteen kilotavuun sekunnissa. Silläkin täyttyy jo koko muisti seitsemässä sekunnissa pakkaamattomalla datalla.

Aiemmissa siirtopiuhoissani olin käyttänyt yksinkertaista alternating bit -toteutusta, jossa vaikkapa kahdesta pinnistä toinen on kello ja toinen itse data. Nyt oli kuitenkin käytössä juhlavat kahdeksan bittiä kerralla, ja mieli teki siirtää täysiä tavuja kerralla ilman bittien shiftaamista. Kotipolttoisena ratkaisuna tein niin, että peräkkäiset tavut muuttuvat joka kerta, jolloin Pana tunnistaa seuraavan tavun pelkästä arvon muutoksesta ilman erillistä synkronointia. Pitkien nollasarjojen ym. tehokkaan siirron vuoksi tavuihin sotketaan mukaan “kantoaalto”, joka miinustetaan vastaanottopäässä. Jokunen harva tilanne, jossa peräkkäiset tavut ovat sittenkin samat, hoidetaan erillisellä escape-merkillä.

viritys pannaani1 vers_5_9_2014

Nyt on jo kotelokin ja kaikki. Oikealla Teron PETSCII:nä piirtämä piirikaavio, josta näkyvät piirit ja niiden väliset kytkennät tarkemmin. Kehityskohteita olisi tietysti lukuisia:

  • Pienemmällä rommilla säästyisi tilaa levyltä: nyt on käytössä kokonaiset 256 tavua 128 kilon piiriltä. Mutta kun niitä sattui olemaan…
  • Arduino Nanon voisi korvata ATMegalla, kunhan vaan saisi USB-liikenteen ja virransyötön jotenkin hoidettua. Toinen vaihtoehto olisi halvempi Arduino Micro.
  • Sekaan roiskaistu yksinäinen konkka ei välttämättä tee mitään hyödyllistä: pitäisi tutustua joskus tarkemmin, mihin ja millaisia niitä oikeasti tarvitaan
  • Siirtosofta voisi palata BASIC-tulkkiin ja ylipäänsä tehdä vähän enemmänkin asioita
  • Koko härpättimelle päälle/pois-kytkin
  • Resettinappi, jos mahdollista laajennusportin kautta
  • Oikean kunnon piirilevyn teettämällä saisi tilaa säästettyä huomattavasti samoin kuin hyppylankasotkua

Puutteineenkin Panana ratkaisee pääongelman eli nopean koodin siirtämisen peeseeltä Panasonicille. Jatkokehityksen toppasi toistaiseksi se, että eBayltä haalimani Kiina-Nanot osoittautuivat viallisiksi (kloonatut FTDI-piirit eivät osaa kaksisuuntaista liikennettä). Kunhan saan toimivampia, niin julkaisen koko projektin sitten virallisestikin Panasonic-sivulla.

Filed under: koodi,laitteet,retro

Kommentin kirjoitus

You must be logged in to post a comment.

RSS feed for comments on this post.


Kommenttien virta

Aiheet