Nedanstående är en kopia av den sida som en gång fanns på http://users.student.lth.se/e96an/vintage/af/af.html, skapad av Andreas Nilsson; studerande vid LTH i Lund. Återskapad här då jag tycker detta är alltför intressant och nördigt för att inte bevaras. Jag tar inte på något sätt åt mig äran för nedanstående utan detta är en ren kopia av hans arbete.


Datasignalen i slutet av Adolphson-Falks skiva "Över tid och rum"


Framsidan


Förutsättningar

Med facit i hand är det lätt att säga hur man skulle gjort för att snabbt tyda signalen, men tänk då på att:

* Jag visste inte vilken typ av dator filen var skapad på.
* Jag har aldrig ägt en Atari eller nån annan dator som lagrar data på kassetter.
* Jag visste inte vilken typ av fil det var.
* Skivan har vissa hack och skador i området där datan ligger, så jag visste inte om alla bitar tolkats rätt.
* Jag visste inte om ev. text var kodad i ASCII.


Hösten 2002

Besöker stadsbiblioteket i Lund för att se om det finns några AF-skivor jag inte har. Framför allt gamla AF-skivor från tidigt 80-tal är svåra att få tag på i skivbutiken. Jag letar främst efter två skivor: "Nattexpressen" och den engelska versionen av "Med rymden i blodet". Om någon som läser detta har dem, hör av dig! Hittar inget nytt, men väl en referens till en notbok och i denna finns lite teknisk historik där det bland annat nämns att sista spåret på LP-versionen av "Över tid och rum" har ett meddelande i form av en datasignal. Då boken skrevs (1996) visste de inte om någon ännu uttytt meddelandet. Givetvis blev jag intresserad och gick hem för att lyssna på min CD-version av skivan, som dock inte hade denna datasignal.

Senare den hösten ringer ägaren till skivbutiken "Living in the past" och berättar att han har fått in en ny AF-skiva (Över tid och rum). Hade jag inte läst om meddelandet hade jag inte varit intresserad, men nu gick jag iallafall och köpte skivan (efter att ha provlyssnat för att förvissa mig om att signalen fanns där).


5:e januari 2003

Då jag inte äger någon LP-spelare blev skivan liggande tills jag besökte föräldrarna under julen, då samplade jag signalen till min dator och tog senare med den till Lund. Tittar lite i wav-filen som skapats och konstaterar mest att det inte var helt uppenbart hur datan hade kodats. Vill du lyssna på signalen finns den här.

Rådata, slutet av sista musikspåret längst till vänster, sedan kommer datasignalen


7:e april 2003

Får tid över och bestämmer mig för att titta lite på datasignalen. Programmet Goldwave har en bra spektrumanalysator och spelar man filen ser man två relativt tydliga "spikar" i spektrat (de dränks delvis i brus och dålig upplösning), vilket indikerar att två olika frekvenser används (FSK, frequency shift keying). Använder ett bandpassfilter och efter att ha experimenterat med lite olika filtervärden får jag fram ett resultat där man ser 9 st tydliga grupper av data, sk "records", om vardera 2.3 sek, snyggt separerade med ca 270 ms mellanrum. Mätning över flera perioder i figuren ger att frekvenserna ligger på 3.774 kHz resp 5.000 kHz.

Spektrat, notera den tydligen spiken till höger (3774 Hz)


Bandpass filtrerad signal, allt mellan 3500-4500 passerar filtret


FSK fungerar så att en frekvens motsvarar 1 och den andra frekvensen motsvarar 0. Efter att ha granskat de olika recorden ser jag följande samband: 8 databitar används, varje byte föregås av en startbit och följs av en stoppbit och varje record börjar med två likadana bytes. Ingen paritetbit tycks användas. Bithastigheten är något udda, 560 bps (förklaring kommer senare). Varje record innehåller 132 bytes. De stora frågorna just nu är: vilken frekvens motsvarar 1 resp 0, och skickas data med LSB eller MSB först? Ingen paritetbits syns till, vilket är synd eftersom man hade kunnat använda den för att se vad som motsvarar 1 eller 0.

Förstorad filtrerad signal, första byten i ett record längst till vänster



Tiden fram till 01:10, 29 april 2003

Först skriver jag ner alla 1:or och 0:or från record #0, och prövar de 4 möjliga kombinationerna (invertera bitarna och vända bitordningen), men inget av resultatet liknar ASCII. Och ASCII har använts för att koda tecken sedan mer än 40 år tillbaka, så en dator från 1984 bör med stor slh stödja detta. Nåväl, första recordet innehåller en mängd upprepningar av samma tecken och kan ju dessutom vara någon slags "header" som enbart en dator ska läsa, så jag ger mig på record #1 och skriver ner även dessa bitarna, men ser fortf inget som liknar text. Matar in alla bitarna från de två första recorden i en textfil och skriver ett program i TurboPascal för att visa alla kombinationer av data, och dessutom addera en offset från 0-255. Är det så att ASCII inte används så bör ändå avstånden mellan tecknen i alfabetet ha samma avstånd, så med rätt offset borde nåt läsbart kunna framträda. Men icke. Gör en frekvensanalys över vilka tecken som ingår och finner att 8 tecken används väldigt frekvent och med avstånd som normalt inte förekommer i skriven text. Kan det vara så att det inte är en text utan istället en bild?

Skivomslaget pryds av en ros, lågupplöst digitaliserad med centimeterstora pixlar. Efter att ha plottat de första 132 x 2 bytarna som pixlar tycker jag mig med lite god vilja se samma ros (givetvis med fel färger eftersom jag inte vet vilken palett som används). Kodar av de återstående 6 recorden (record 8 innehåller förutom startbyten endast samma tecken, så det struntar jag i) vilket går relativt fort efter lite träning. Då alla records börjar med två likadana bytes kan man räkna bort dem. Återstår 130 bytes data, vilket ligger när 128, ett betydligt vanligare värde i datorsammanhang. Detta ger att jag har 1024 bytes data totalt. Detta kan bli en bild på 32 x 32 bytes, vilket stämmer otäckt bra med bilden på skivomslaget. Plottar en sådan bild, nu med VisualC++, och låter datavärdena motsvara gråskalor, men det liknar inget vettigt alls. Förutom att en kombination av 6 bytes återkommer med jämna mellanrum, vad det nu kan betyda. Frågan är dessutom, kunde datorer från tidigt 80-tal visa 256 färger? Om nu AF ville att nån skulle kunna läsa deras datasignal kan det inte vara frågan om nån superdator, utan sådana som folk hade hemma och på den tiden hade många C64, som kunde visa 16 färger. Alla bitarna kanske inte användes, och min frekvensanalys tydde på att tkn 44-54 förekom flitigast, vilket tyder på 16 färger.

Nåväl, det var alltså inte så enkelt som en bild i rådata, dags att sluta gissa och bli mer systematisk. Klistrar in mina records i ett excelark, ett record / kolumn. Nu när jag har lite bättre överblick markerar jag startsekvenserna och de 6 bytes som ständigt återkommer med 20-30 bytes mellanrum, och kommer fram till att min gissning om 128 bytes data förmodligen stämmer och att de övriga 3 första resp allra sista tecknet är styrtecken alt nån form av checksumma för feldetektering. Så läser jag på skivomslaget "Tack till Atari och USR-data för digital bildsignal". Så från och med nu utgår jag från att jag har att göra med en bild från en atarimaskin.

Hittar på internet en utmärkt format site som beskriver ett antal av Atari ST:s bildformat men ingen av dem stämmer in på den bitström som hållt mig sysselsatt all ledig tid i två veckor. Så gör jag en paus några dagar men dras snart tillbaka till mitt excelark och upptäcker ett samband mellan två bytes i de grupper om 6 bytes som uppträder regelbundet och antalet bytes som följer till nästa grupp om 6 bytes. Dessa två bytes är likadana, uppträder på samma position inom varje kontrollgrupp och om jag inverterar dem och vänder bitordningen så motsvarar de binärt antalet bytes som följer innan nästa kontrollgrupp kommer. Detta innebär att jag nu vet bitordning och vad som är ett eller noll. Trevligt!

Så letar jag lite på nätet och ser att Atari ST, den vanligaste Atarin från min ungdom, släpptes 1985. Dvs 1 år efter att skivan producerades. Det är alltså inte frågan om en sådan maskin. Dags att läsa på lite Atarihistorik för att se vad det fanns för maskiner innan dess. Resultatet blir Atari 400 och 800 som kom i slutet på 70-talet. Dessa hade faktiskt 128 färger (och med lite trixande dubbelt så många), bra för sin tid måste jag säga. Eller så var det PC:n som var extremt dålig för sin tid...

Jag har hela tiden misstänkt att jag har att göra med en fil sparad på kassett, och när jag på internet hittar en teknisk beskrivning över protokollet för att lagra data på Atari 410 bandspelare så får jag bekräftat det jag redan vet och får dessutom veta att byte 2 talar om huruvida det aktuella recordet är fyllt med data eller ej (näst sista recordet hade en annan byte än de tidigare, stämmer!) och sista byten i varje record är verkligen en checksumma för feldetektering. De exakta frekvenserna är för 1 == 5327 Hz och 0 == 3995 Hz och datahastigheten 600 bps, ett betydligt vanligare värde än 560 bps. Motorn i AF:s Ataribandspelare gick alltså lite långsammare än nominellt värde. Eller så var det min fars LP-spelare som var för långsam, kanske dags att göra en mätning på den...

Ett tag funderar jag på att försöka hitta en gammal Atari och köra in ljudfilen i den för att se vad som händer, men så hittar jag på internet ett bra program, wav2cas, som kan konvertera en samplad atarikassett till databitar, dvs samma som jag gjort för hand tidigare. Tapeimagen som wav2cas skapar kan dessutom köras i en emulator kallad Atari800. Bestämmer mig för att försöka köra filen i denna emulator och prövar wav2cas på min samplefil, men det funkar dåligt till en början. Efter använt Goldwave för LP-filtrering, volymförstärkning och borttagen inledning blir dock resultatet en fil där de åtta första recorden stämmer med checksumman. Det sista recordet blir inte rätt, men det gör inget då det enbart innehåller 0:or (EOF). Atari800 må vara en bra emulator rent tekniskt, men användarinterfacet är rent värdelöst dokumenterat och förutsätter dessutom att man vet vilka kommandon en Atari 800 använde. Jag som aldrig haft en Atari hittade dock detta på internet och lyckades få emulatorn att acceptera den tapeimage jag skapat. Inte ens här var det 'straight forward', tydligen kunde man på Atari:n spara en fil på 4 olika sätt, men det visade sig fungera med den första jag provade, dvs 'CLOAD'.

Skärmsida med programlistning


Det var en upplevelse att skriva 'list' och få se vad som doldes i ljudsignalen i slutet av min LP-skiva. Det var alltså varken en textfil eller en bild, utan ett program. Att sen exekvera programmet och få se texten "Adolphson-Falk Över tid och rum" på en färgcyklande bakgrund överskred långt de förväntningar jag hade när jag började med avkodningen. Jag kan se framför mig hur den som skrev programmet stolt visade det för Thomas Adolphson och Anders Falk i början på 80-talet. Programmet var en sk loader i BASIC, en loop som genom POKE skriver in maskinkodsinstruktioner direkt i minnet och sedan startar exekveringen på första adressen. En vanlig metod en gång i tiden, när man hade 1-2 MHz och 64 kB RAM. En kul parantes var att den som skrev programmet valde variabelnamnet på räknarvariabeln till 'AF', undrar vad det står för :)

Programmet in action, bakgrunden rör sig och texten byter färg.