Nyt kun Helsinki-Vantaan lentokentän entinen 27-neliömetrinen pääaikataulunäyttö on saatu haltuun ja sitä on askarreltu viikko, niin alkaa olla hyvä hetki koostaa informaatiokaaosta tiivistelmäksi. Luit oikein, se holtittoman kokoinen ruutu on Otaniemessä (+/- pyöristysvirheet). Juhlan paikka. Tällä kertaa on hyvä mappi dokumentaatiotakin, eli ei tarvitse alkaa reverse-engineerauspuuhaan aivan tyhjästä. Ruutujen pikseliformaatti on jo saatu selville, joskin fonttikartta on vielä hakusessa.
Matkustetaan hetkeksi vuoteen 2020, jolloin Finavia tuosta ruudusta tiedotti. Hyviä kuvia ruudusta toiminnassa löytyy jos jonkinlaisilta fanisaiteilta ja valtamediatkin tarttuivat ennemmin tai myöhemmin aiheeseen, mikä edelleen googlautuu ikonisuudella tai vertauksella Stokkan kelloon.
Remontista tähän päivään
Itse otin yhteyttä Finavian aspaan välittömästi äänen nopeudella kun tuo uutinen tuli saataville maaliskuussa 2020, koska ainutkertainen tilaisuus. Tämmöisen mammutin kanssa tuskin pääsee yksin puusta pitkään, jotenka mainitsin siinä sivussa edustavani Otaniemen teekkareita ja Helsinki Hacklabia ja varmaan joulupukin tonttujakin vakuuttaakseni vastapuolen vaativassa vauhtiprojektissa vaadittavasta vaivannäkölupauksesta.
Aspasta ystävällisesti vastattiinkin ja pyydettiin palaamaan asiaan kesän jälkeen, kun lentokentän remontti vasta silloin syksyllä laajenisi ruudun alueelle.
Syksyllä sitten sainkin vahvistuksen, että asiasta on viestitty jotain muutakin kautta, että tulevaisuus on vielä tuntematon sillä ruutu on niin saakelin iso ettei heillä ole aavistustakaan miten se raavitaan hallista pihalle, ja että palataan asiaan 2021.
Otaniemestä tosiaan muutkin olivat ruutuasian parissa, mm. eräs Emil Fihlman, jonka kanssa Finavia (ja remontin urakoitsija) sitten lopulta jatkoi kommunikointia, sillä ovathan teekkarit tunnetusti astraalimönjällä yhtenäistetty tietoisuus ja riittää siten viestiä yhden rajapinnan kanssa tähän kollektiiviin. (Luin ehkä jotain rivien välistä.)
Itse sain luotettua siihen että yksi rajapinta riittää, sillä siirtyyhän tieto osmoosilla, tai sen modernilla sovellutuksella eli Telegramilla. Sähköpostia kuulemma kulki pidemmän aikaa SRV:n kanssa, joka tuota koko urakkaa askartelee.
Kiinnostuneiden kesken pantiinkin pystyyn dedikoitu keskusteluryhmä nyt syyskuussa. Syyskuun lopulta onkin ihan valokuvia ((c) Emil) todisteeksi, että hilavitkutin on paketoitu pihalle (ekat ei-piha-kuvat vanhempia):
Kaikki sisältyy paitsi jäätävän kokoinen harmaa teräsrunko, jossa ruudut roikkuivat. Keksitään jotain kevyempää ja modulaarisempaa tilalle.
No jonkin sortin radiohiljaisuutta ilmeisesti tapahtui ja sitten yhtäkkiä sieltä kerrottiin, että joo pojat minne voitais ajaa nämä nelimetriset alumiiniprofiilit nosturilla varustetulla kuorma-autolla huomenna torstaina??
Vekotin näppeihin
Saatiin järjestettyä puoliväliaikainen eli ei ollenkaan lähes pysyvä askartelupaikka, ja rauta sitten bonkattiinkin talteen pakettiautolla ja trailerilla itse, runkorakenteet sellaisenaan ja ruudut niissä siisteissä pahvilaatikoissa.
Finavialta saatiin paketin mukana toki ymmärrettäviä pelisääntöjä, mm. "pääasiassa Aaltolaiseen käyttöön", "ei myydä eteenpäin". Herrasmiesbonkkisäännöt pelissä eli askarrellaan yhdessä eeppistä ja tähdätään tapahtumiin jaettavaksi megaruuduksi ja yleiseen askarteluun.
Välittömästi tietysti ehdotankin, että tästä saadaan assyille itsenäinen kompoalusta ja kilpailu. Pelkkä wild-kompon spämmääminen tuskin on tarkoituksenmukaista, kun nyt on niin niin niin eeppisen kokoluokan käkättimestä kyse. Ehkä neliömetri kerrallaan olisi vielä yhden hippaheikin hiioppaamiskyvyissä, jos vaikka modularisoitaisiin tämä sellaisiksi. Alkuperäisspeksien mukaan vajaa 80 kiloa ainetta neliömetrille, kyllä me varmaan murto-osaan päästään.
Mikäs tää laite nyt on
"Meillä on tää softa; miten tää toimii?" paitsi että kasa alumiinia ja elektroniikkaa. Elektroniikan sekaan on puhallettu sitä kuuluisaa pyhää henkeä eli softaa, ja eihän meillä ole lähdekoodeja. Onneksi on mapillinen dokumentaatiota ja kaikenkarvaista työkalua.
Voidaan varmasti jossain vaiheessa lyödä kasaan jonkinsortin alkuperäistä vastaava bittiputkisto, jossa pursotetaan muka lähtevien lentojen tiedot ruudulle ja ruutu näyttää ne vaikka yhdellä rivillä. Toive on kuitenkin piirtää mielivaltaista tekstiä mihin vaan tai vielä mieluummin mielivaltaista pikseliä mihin vaan. Originaalisoftan voisi olettaa taipuvan lähinnä siihen, mihin se on tarkoitettu.
Reverse-engineeraaminen, suomeksi takaisinmallinnus, on suunnittelua takaperin. Nyt meillä on joku pötkö tietokoneen ymmärtämää koodia sekä toisiinsa meneviä liittimiä, ja koitetaan päästä tästä pisteestä siihen, että tiedetään, mitä sinne koneeseen syötetään ja mitä tuolla syötteellä tulee ulos ja miten tarkalleen se aiheuttaa grafiikkaa.
Homma muistuttaa niiden metrolaiturinäyttöjen kanssa askartelua. Näiden kanssa ei ole ihan niin tärkeää dokumentoida vauhdilla tutkimusta blogimuotoon, kun koko häkkyrä on yhdellä jengillä ja ruutua on yksi kappale (vaikkakin moduuleita satoja) ja keskustelua käydään reaaliajassa. Koitetaan silti pysyä vauhdissa sillä vauhti on paras juttu ja mysteerien ratkominen lempipuuhaani. Debuggauskin on ainakin yhtä siistiä kuin ohjelmointi.
Hökötys on "21 vuotta palvellut" eli 90-luvun puolella valmistettu; tarroissa ja koodissakin nähtiin viittauksia 90-luvun päiväyksiin. Mittapiirustusten mukaan ruutuosa on 8.8 m leveä, 3.1 m korkea sekä vielä 60 senttiä korkeutta otsikkopaneelista päälle. Rakenne on arkkitehtuurattu kahteen ruutukokonaisuuteen, joista kumpikin on 18 moduulia leveä ja 20 korkea. Näitä on vierekkäin kaksi, mikä tekee 720 paneelia. Painoa 2.2 tonnia, tehonkulutus 6.6 kW, eiköhän tosta päästä kymmenesosaan ainakin jos ei valaista auringon lailla. Nuo moduulit ovat neljä kirjainta tai numeroa esittäviä itsenäisiä paneeleita, joita on asennettu riviin.
Varsinainen lcd-ohjain on ilmeisesti tehty jonkun spesialistipuljun kautta päävalmistajalle, joka on eräs nimeltämainitsematon saksalainen megakorporaatio. Piuhassa viuhunee kaikenlaista, mm. ethernet, RS485 ja RS232, sekä jotkut raa'at pikselibittioletetut.
Pikselit selväksi
Verrataan btw metrolaituriruutuihin sikäli kun voi, kun on hauskoja yhtäläisyyksiä ja jo tutkitusta vekottimesta voinee ammentaa jotain ennakko-oletuksia johtolangoiksi.
Manuskasta saatiin joka tapauksessa mm. tälläinen tuikitärkeä taulukko kunkin moduulin liittimelle, mikä nopeuttaa devausta huomattavasti:
pin | kuvaus |
---|---|
1 | Pikselidata sisään |
2 | 5 V logiikalle |
3 | LCD V (8 V mutta 5V kelpaa) |
4 | GND |
5 | Reset |
6 | 5 V 64 Hz virkistyskello |
7 | Kytkentäpulssi |
8 | Pikselikello |
9 | Pikselidata ulos |
Ykkösnasta on se, joka menee lattakaapelissa lähimmäs paneelin lyhyttä reunaa.
Kun data kaikuu ruudusta uloskin, niin näitä ruutumoduuleita voi ketjuttaa; ruutujen bitit muodostavat sarjarekisterin, johon pikselibitit menevät helminauhan tapaan eteenpäin, kunnes ne kytkentäpulssilla siirretään rinnakkaisesti kerralla näkyviin.
64 hertsin virkistysmeininki liittynee siihen, mitä metronäytönkin kanssa huomioitiin, eli että LCD-tekniikka hapertuu saadessaan pelkkää tasajännitettä.
Verneri tunkkasi sarjarekisteriin bittiä yksi kerrallaan ja piirsi arvokkaan dokumentin, eli kartan "pikseleiden" eli lcd:n segmenttien järjestyksestä. On huomattavaa, että "tämäkin" ruutu on selkeästi fontin kanssa suunniteltu (samoin kuin se metrolaituriruutu), ja varmaan useimmat vastaavat suurehkopikseliset tekstiä näyttävät ruudut, missä kuva ei koostu tasaisesta pikseliruudukosta.
Tuon perusteella koodasinkin "grafiikkakirjaston" eli käytännössä tein tieteellisen toistoexperimentin pursottamalla omalla pöydällä kimaltelevan ruudun väylälle bittiä pikaisella koodinpätkällä, joka toteuttaa "putpixelin" neliskanttisille ruudun osille. Tällä sitten saa toteutettua muutaman animaation ihan vaan kokeeksi. Erehdyin panemaan videon twitteriin enkä just nyt osaa upottaa sitä tähän niin, että soisi kunnolla. Klikkaa pois.
Jälleen yksi yhtenäisyys metrolaiturinäyttöihin on tuolta pikselisegmenttidatan seasta löytyvät täytebitit, jotka saavat olla yhtenäisesti nollaa tai syntyy hankalasti ennustettavia väriliukuja. Ilmeisesti tässäkin värit menevät toisin päin jos täytebitit koodaa ykköseksi nollan sijaan.
Tuon LCD-tekniikan laatu on vähän epäselvää. Beneq:n ALD-tekniikasta oli puhe, ja valmistaja itsekin väittää toimittaneensa lentokentälle, mutta toisaalta valmistaja puhuu luminesenssista vaikka näissä on selkeesti ollut taustavaloina loisteputket.
Noissa on muuten joku värikalvo taustalla. Jotkut näyttävät sinertäviltä ja toiset kellertäviltä. Väri antaa vihjettä informaation laatuun, ruudulla kun näkyi kellonaika, lentokoodi ja toisen pään kentän nimi. Fontti oli kaikissa sama.
Fontin toivossa
Firmiksiäkin kaiveltiin EPROM-lastuista (32 kiloa kukin). Valmistajaa tuskin kiinnostaa tälläisen julkaiseminen. Julistan 21 vuotta sopivaksi public domain -kynnykseksi.
Aivot noissa pienemmissä koneissa ovat kasibittisiä 8051-pohjaisia 80C31-mikrokontrollereita. ROM puuttuu sisältä, mutta sepä onkin tuossa EPROMissa. RAMia on kokonaiset 128 tavua. Jotain oheiskivaa on, mm. uart ja ajastimia. Ghidra ymmärtää niiden assyä, eli ei muuta kun reversaamaan. Ghidran erikoisuus on assykoodin muovaaminen C:ksi sitä mukaa kun se on mahdollista, yleensä käsin koodattu mappautuu huonommin C-konstruktioiksi kun taas laiskasti optimoitu koodi kääntäjästä voi taipua oikein nätistikin.
Aiemmin saatoin käyttää Ghidraa vain johonkin lyhytaikaiseen kikkailuun. Nyt on ns. tosi kyseessä, mutta mikäs tässä kun tietää miten (ainakin tuon ikäiset) tietokoneet yleensä toimivat. Yleensä vissiin tuo älyää analysoida koodiflowta lähtien jostain entrypointista. Näiden kanssa mitään ei binääriä importatessa tapahtunut, mutta onneksi helposti selviää, että mistä voi lähteä liikkeelle. Ei ainakaan työkalun manuaalin lukemisesta, ei tietenkään.
Ghidra tajuaa seurata koodista löytyviä referenssejä eteenpäin kunhan sitä koodia on, eli kerrotaan sille nuo osoitteista 0x0, 0x3, 0xb, 0x13, 0x1b ja 0x23 löytyvät reset-/keskeytysvektorit. Hauskasti kukin on kahdeksan tavua paitsi tuo boottaus johon mahtuu lähinnä LJMP jonnekin. Koodi on muuten aika selvästi (yksinkertaisesta ja vain vähän optimoivasta) kääntäjästä eikä käsin koodattu, kun on niin itseään toistavaa ja sisältää selkeitä säännönmukaisuuksia. Kollega veikkasi että olisko Keilistä.
Noiden kautta ei vielä löytynyt ihan kaikki. Yksi puolivahingossa havaitsemani jekku on switch-case-hyppytaulukoiden purkaminen datapointteriin offsetilla hyppäävällä assykäskyllä. Käskyn JMP @A+DPTR binääriesitystä hakemalla (0x73) ja erityisesti siten, että sitä edeltää DPTR:n alustus (muotoa MOV DPTR,#abcd eli 0x90 0xab 0xcd) löytyy selkeitä switch-statementtejä. Tuon 0xabcd-osoitteen perästä sitten löydetään hyppytaulukko:
Toinen vastaavanlainen säännönmukaisuus oli hyppyä edeltävä MOV DPL, A, MOV DPH, jotainmuuta, ja CLR a, tai 0xf5 0x82 .. .. e4 73.
Hyppytaulukoita voi hakea myös etsimällä vaikka koodia muotoa 0x02 .. .. 0x02 .. .., joka vastaa sarjaa LJMP-käskyjä (long jump, kaksi tavua muistiosoitteelle). SJMP-käskyihin ("short jump", bojoing yhden tavun mitan päähän) törmää vastaavasti soveltamalla näkemystä 0x80 .. 0x80 .. -muotoon.
En vielä ihan osaa käyttää näitä Ghidran skriptejä, kun switchoverride-juttu ei aina suostunut purkamaan rakennetta vaikka valitsin nähdäkseni kaiken tarpeellisen enkä ylimääräistä. Ennen sen käyttöä tuo dekääntäjä vain sanoo "WARNING: Could not recover jumptable at 0x4b5e. Too many branches". Assykielen purkaminen C:ksi tai ylipäänsä toiseksi kutittelee kuitenkin aivoa niin, että ehkä innostun skriptaaman tuota vielä oikein kunnolla, ellei sitten se fonttidata löydy jostain jolloin projekti oliskin valmis. Tarkoitus olisi ymmärtää juuri ja juuri riittävästi tuosta uart-kommunikaatiosta, että selviäisi, missä se fonttikartta piilee. Ehkä piilee siellä PC104-purkissa, joka ilmeisesti koko komeutta ajaa. Sen CF-korttia ei olla vielä ehditty lukea.
0 kommenttia
Oma kommenttisi
Mielipide tämän sivun asiasta? Kirjoita toki. Älä raapusta kuitenkaan ihan asiattomia juttuja.
Jos on yksityisempää asiaa, tarkkaa kysyttävää tai aihetta pidemmälle keskustelulle, käytä yhteydenottolomaketta kommentoinnin sijaan.
Hölmöt kommentit saatetaan moderoida pois jälkikäteen.