Panana 1.0, the first version of the Arduino-based PC -> Panasonic JR-200 transfer cable is now finished and published. You’ll find all the necessary bits like software and some instructions on the Panasonic page, as usual. Here’s the schematic and the final cased contraption:

There would be sooo much to add, like two-way transfer, support for BASIC files, a card reader and extra RAM, but let’s see if I ever get to that. At the moment the kludge already supports what I most want to do with it: test my own software. The transfer speed increased due to some final touches all the way from 5 kcps to 8 kcps, mostly because of using phi2s instead of phi2 for sync. Surely there’s room for improvement – next I’ll probably try halting the CPU when updating the latch – but as the speed is already more than 30x compared to the cassette port, there shouldn’t be too much to complain about. Thanks to Tero for his help and comments, too!
edit: Fixed the pinout of the expansion port.
September 25th, 2014
A little project again: an 8k SRAM expansion for the JR-200. In the end, a rather simple exercise in address decoding with a GAL and wiring the expansion bus signals to the memory chip. Quite many wires there – was losing my hope at one point.

The kludge resides at $8000–$9FFF, right after the standard RAM. You can load code there with mload and run it normally with usr. The BASIC is not aware of the extra mem, so after the boot you’ll just see the standard amount displayed. Further details such as the GAL function can be found on my dedicated JR-200 page.
September 20th, 2014
Säätötuokion kohteena tällä kertaa Spectrumille tarkoitettu Interface 1bis, josta ei ainakaan ominaisuuksia puutu. Mukana on mm. Microdriveä emuloiva MicroSD-kortinlukija, joystick-liitin, usb-siirtoliitäntä sekä PS-liitin hiirelle tai näppäimistölle. Periaatteessa siis aika äärimmäinen laajennus, joka lisäksi mahdollistaa omien viritelmien tekemisen valmiina tulevien lisäksi. Lupaillulla lisäpalikalla mukaan pitäisi saada Ethernet-liitinkin. Laite toimii periaatteessa kaikilla Spekuilla, joissa on laajennusväylä; itselläni oli käytössä perinteinen kuminappi-48k.

Paperilla hyvältä näyttävän laitteen kompastuskiveksi osoittautui hyvin nopeasti hankala lähestyttävyys. USB-piirille piti asentaa oma ajurinsa, jota ei sivulta edes löydy. COM-porttia ja PC-pään (Windows-only) siirtosoftan parametreja piti viritellä heti kättelyssä ja laitteelle pöristää kasettiportin kautta sisään pari ohjelmistopäivitystä, joiden todellinen olemus jäi lopultakin hieman hämäräksi. Aloittelijoille suunnattu video kertoo periaatteessa, mitä pitäisi tehdä, mutta käytännössä asiat eivät olleetkaan ihan niin helppoja.
Ainoa fyysinen käyttöliittymä 1bisissä on on päällä sijaitseva nappi, jota pitää painella eri pituisia aikoja eri moodeihin päästäkseen. Suoraan buutissa laite ei tee mitään, vaan ensin tarvitaan pitkä painallus ja päälle nopea klikkaus, jotta päästään aktiivitilaan, jossa voi jotain tehdäkin. Ledipaneeli kertoo periaatteessa hyödyllistä tietoa, kunhan kirjainten merkityksen ensin oivaltaa: tunnistettu muistikortti sytyttää C-ledin ja hiiri M-ledin, minkä lisäksi eri moodeille on omat ledinsä. Aktiivitilassa beisikki alkaa tunnistaa Microdriven ohjaamiseen tarvittavia käskyjä. Jälleen hämmentävästi kaikki dokumentaatio löytyy 4B-mallin sivulta, vaikka tämä mokko on revisiota 4C.
Parin tunnin tuskailun, asentelun ja ohjeiden etsiskelyn jälkeen laite alkoi näyttää niitä parempiakin puoliansa. Pienempi (64-megainen) MicroSD-kortti ei toiminut jostain syystä, mutta neligigainen (!) tunnistui ja formatoitui yli sadaksi 32-megaiseksi virtuaaliasemaksi, jotka näkyvät BASIC-komennoille muodossa “m”;asemanumero, kuten ensimmäinen asema “m”;1. Tilaa siis on varsin riittävästi, mutta se on jakautunut pieniin palasiin. Toinen ikävä puoli on, että kortille ei voi kirjoittaa suoraan peeseellä, vaan netistä ladatut kamikset on siirrettävä USB:n yli. Tiedostoja voi käyttää joko suoraan tai sitten emulaattoreista tuttujen TAP-levykuvien kautta hieman hämmentävällä syntaksilla:
LOAD *"M";1;"UNHANGED" T
MOVE-käskyllä voi uudelleennimetä ja kopioida tiedostoja, kun vaan jaksaa näpytellä pitkiä rimpsuja. Kopioinnissa toimivat jopa jokerimerkit kuten *. Huomattavasti helpommin pelejä ym. saa kuitenkin ladattua, kun asentaa GBL.ZZP:n, jolla voi selata kortin ja USB-isännän sisältöä. Vielä kun nimeää ohjelman RUN-nimiseksi, niin se latautuu automaattisesti buutissa. Jopa hiiri toimii GBL:ssä, vaikka sen tuki hieman puolivillainen toistaiseksi onkin.
Kenties hienoimmaksi ominaisuudeksi osoittautui USB:n yli toimiva v-asema, jonka käyttöä varten isäntäkoneella ajetaan ZXS32-serveriä. Etenkin GBL:llä on sitten helppo selailla hakemistoja ja käynnistää niistä TAP-tiedostoja. Jokusen demon perusteella järjestely toimii varsin hyvin, myös WonderAY välissä. Mukaan on laitettu jopa tuki World of Spectrumin ftp:n käyttöön, mutta sitä en saanut toimimaan ihan pienellä yrittelyllä.
Tämän bissen jättämä jälkimaku on lopulta aika ristiriitainen. Tehokäyttäjälle 1bis mahdollistaa kaikenlaista, vaikka käyttö onkin monin paikoin työlästä. Satunnainen nostalgikko ei välttämättä saa koko viritelmää edes asennettua käyttökuntoon, joten pelkkää pelien ja demojen latailua varten divIDE on huomattavasti kätevämpi ratkaisu. Hinnan puolesta eroa ei juuri tule, joten viime kädessä käyttötarkoitus ratkaisee.
September 20th, 2014
Skrolli 3/2104:ssä on juuri ilmestynyt Teron kanssa kirjoittamani Hyppypotkuja ja heittotähtiä – pikselimätkinnän varhaisvuodet. Juttu perustuu WiderScreen 4/2013:ssa julkaistuun Kungfumestarit kuvaputkella -tutkimusartikkeliin. Skrollin pdf-versio ilmestynee arkistoon lähiaikoina, jos lehti on jostain syystä jäänyt tilaamatta.
September 15th, 2014
For the ever-improving Panasonic JR-200 toolkit: one more little piece of code. It’s called cjrinfo and shows pretty much all the useful information concerning a CJR file, such as the baudrate, filename, block addresses, lengths and so on. Grab and compile: cjrinfo.c.
September 14th, 2014
Antin kanssa joskus 2009 aloitettu, moneen kertaan pompoteltu ja iän kaiken viivästynyt kirjanluku Multiple Users, Diverse Users: Appropriation of Personal Computers by Demoscene Hackers näyttää tulleen lopultakin ulos, ainakin sähköisenä versiona. Oma ennätykseni ja muutenkin varmaan varsin kova tulos julkaisun viivästymisessä 🙂 Fiilis tällä hetkellä sarjaa “tulipa tuokin tehtyä”, mutta samalla rasittaa se, kuinka paljon enemmän asiasta nyt jo tietäisi. Linkki.
September 11th, 2014
A memory-preserving reset button can be useful for a developer, cracker or a cheating gamer, too. Got my hands finally on the Service Manual, and based on p. 29 it was easy to make a – hopefully – safe reset button. You could ground the processor /HALT pin directly, but this one is safer, as the signal goes through two inverters and there’s a capacitor to filter the noise caused by lousy buttons (like mine). See here:

First find the capacitor and diode (D1) at the top right corner of the mobo. Solder a wire to the back leg of the diode, add a button and connect the other leg of the button to the ground. For example the screws holding the mobo in place are grounded, so you can tighten the wire under one of them.
September 10th, 2014
Jokusen päivän lainassa ollut Schneider EuroPC herätti virittelyinnon ja tuntikausien säätämisestä syntyikin jotain tulosta. Vaikka kyseessä onkin vanha peeseenraato, tekee laitteesta edes hieman mielenkiintoisen sen Ataria ja Amigaa muistuttava yhdysrakenteisuus: samassa lootassa ovat niin levari, näppis kuin emolevykin. Lisäksi Snaikussa on jonkun verran nostalgia-arvoa, sillä yhdellä Vammalan aikojen ex-tutulla sattui olemaan samanlainen. Oranssi-musta-näytöllä tuli aikanaan pelattua ainakin Diggeriä ja yriteltyä jotain muitakin SIMCGA:n avustamana.
Haasteita riittikin mukavasti heti ensimetreiltä, sillä en saanut koneen mukana edes virtalähdettä. EuroPC vaatii +5, +12 ja -12 volttia, joista kaksi ensimmäistä ovat peruskauraa, mutta -12 edellytti hieman kaivelemista vanhan AT-powerin uumenista. Nämä kaikki DIN-liittimeen ja kone rupesi ainakin piippaamaan ja sytytti ledinsä. Piipperi on sivumennen sanoen jopa PC:ksi huono, äänekäs ja särkevä pietso suoraan emolevylle kolvattuna. Jonkun sortin etuvastus olisi tarpeen, hiukan auttoi jo ihan erkkarikin 🙂
Seuraavaksi piti luonnollisesti saada kuvaa pihalle. Vanhasta muistista tiesin, että Snaikussa on Hercules-ohjain, joka käyttää samaa D9-liitintä kuin MDA. Suuri oli yllätykseni, kun kuulin sisuksissa olevan myös ehdan CGA:n. Kone ilmeisesti tunnistaa käynnistyksessä näytön ja vaihtaa ohjaimen tilaa sen mukaan. TTL-tasoinen RGBI ei kelpaa nykynäytöille ilman adapterien virittelyä, mutta onneksi Philipsin videomonsu syö sellaista mutisematta. Lisää kolvailua ja katso: kuvaa tulee!
Jäljellä oli enää kaksi isompaa ongelmaa, joista toinen oli puuttuva BIOS-akku, joka oli ilmeisesti ruvennut vuotamaan ja heitetty sitä myötä mäkeen. Asetusten tekeminen joka käynnistyksen jälkeen uusiksi vie paatuneemmaltakin hermot, mutta tilasin korvaavan tuotteen jo eBayltä. Pahempi dilemma oli se, että Snaikku ei tykännyt käynnistyä korpulta. Netistä löytyi hieman huonoja ja puutteellisia pinnijärjestyksiä, mutta pitkähkön pohdinnan jälkeen ilmeni ainakin, että levarin johto oli sekä emolla että korppuasemassa väärin päin. Suoralla johdolla asia olisi ok, mutta kun osa pinneistä on käännetty johdossa, niin eihän se toimi samalla tavalla. Britelite supplytti Schneiderin dossiversion 3.30, jonka myötä kone alkoi lopulta buutatakin.
Kokeilin testimielessä muutamaa tuttua vanhaa dossipeliä, kuten Prince of Persiaa, Bubble Bobblea, Ironmania, Bruce Leetä ja Larryä. Myös kestosuosikkini Populous toimii CGA:lla, mutta sen kanssa jalka toppasi sarjahiiren puuttumiseen. Tällä testaamisella kaikki sinänsä toimii, mutta näytönkäsittely tuntuu odottamattoman hitaalta. Samoja pelejä on pelattu aikanaan hitaammallakin CPU:lla jouhevasti, vaikka niissä koneissa tosin olikin EGA-ohjain.

Todo-listan kärkipäässä on BIOS-akun vaihtaminen ja levarin korvaaminen HxC:llä. Yritinkin jo HxC:tä kiinni parilla eri pinnijärjestyksellä ja asetuksella, mutta yhteisymmärrystä ei laitteiden välille vielä syntynyt. Tein itsevarmasti suoraan kolvaamalla kaapelin, mutta hyppylangoilla protoilu olisi nyt se oikeampi tapa. Vasemman reunan lyhyeen 8-bittiseen ISA-paikkaan voi keksiä sopivaa täytettä – tarvetta laajennuksille ainakin olisi. Äänikortti? Parempi näyttis? IO-kortti, johon kiintari? Koneen perässä on liitin ulkoiselle kiintarillekin, mutta ilmeisesti BIOS tukee vain paria tiettyä kokoa, eikä sopivia MFM-levyjä tai liittimiä kasva puissa.
edit: kiloinen etuvastus lienee aika sopiva spiikkerille, tööttäys vaimeni siedettävälle tasolle jo 500 ohmillakin.
September 8th, 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ä.

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.
September 6th, 2014
Nykyään ei oikein ehdi lukea kuin tutkimukseen liittyviä kirjoja, mutta onneksi ne ovat sentään toisinaan hyviä ja ajatuksia herättäviä. Arabianrannan ja Otaonnelan välillä tällä kertaa loppuun saatettu David Muggletonin Inside Subculture – The Postmodern Meaning of Style, joka edustaa tuoreehkoa englantilaista alakulttuuritutkimusta.
Kun jo kirjan nimessä on viittaus Dick Hebdigen Subculture – The Meaning of Style -kirjaan, niin on toki odotettavissa, että klassikkoa käsitellään uudessa valossa. Eikä kritiikkiä toki säästelläkään: CCCS saa kuulla kunniansa moneen kertaan, ja marxilaisen luokkatietoisen alakulttuuritutkimuksen heikkouksia ruoditaan kautta kirjan. Kuten kirjoittaja itsekin myöntää, CCCS:n kritisoinnista tuli jossain vaiheessa suorastaan muoti-ilmiö.
Muggletonin keskeisin teesi on se, että alakulttuurien jäsenet eivät ole tiukasti yhden yhteisön jäseniä, vaan heidän identiteettinsä saattaa muuttua moneen kertaan ja olla sekoitus erilaisia vaikutteita. Jos CCCS näki alakulttuurit vastauksena työväenluokan asemaan, niin Inside Subculturessa keskeisiksi teemoiksi nousevat individualismi ja itseilmaisu. Työväenluokkainen taustakaan ei näytä olevan jäseniä yhdistävä tekijä, sillä monien näkyvien yhteisöjen aktiivijäsenet ovat olleet pikemminkin keskiluokkaisia ja Muggletonin tulkinnan mukaan siten edustaneet pikemminkin liberalistisia ihanteita.
Summa summarum: mielenkiintoinen ja helppolukuinen kirja, jonka taustalla on vaikuttava määrä alan tutkimuksen tuntemusta. Samalla mielenkiintoinen vastine Hebdigen kirjalle ja näin demotutkijallekin monin kohdin valaisevaa luettavaa.
September 4th, 2014
Next Posts
Previous Posts