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"
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.
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.
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.
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'.
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 :)