ABC80 som terminal till GNU/Linux

Jag har flera fritidsintressen och två av dem är operativsystemet GNU/Linux och att samla på gamla datorer. Alla som testat systemet vet att GNU/Linux är ett system av unixtyp för bland annat persondatorer. Det roliga med GNU/Linux (och till viss del de flesta unixsystem) är att nästan allt är möjligt. Operativsystemet sätter mycket få godtyckliga begränsningar och många unixprogram har tagit efter denna tradition och har gjorts så att de kan anpassas till användarens behov in i minsta detalj. Filosofin är att det är användaren som bestämmer. Allt som man kan tillåta användaren att göra eller anpassa för egna behov ska han/hon också kunna göra.

Varje program ska dessutom helst vara bra på att göra bara en enda sak men göra detta bra. Sedan kan flera program kopplas samman för att bilda ett fungerande system. Naturligtvis följer långtifrån alla program för GNU/Linux denna filosofi, men det medför i alla fall att det mesta som man kan vilja göra, även udda eller komplicerade saker kan göras med ganska liten ansträngning genom att sätta samman flera olika program eller använda ett program på ett lite annorlunda sätt. Så vad har nu detta med gamla datorer att göra?

Jo, om man nu som jag har en liten samling med t.ex. gamla hemdatorer så vore det ju roligt om man hunde använda dem till något vettigt. Att använda de gamla primitiva programmen som användes på dessa datorer när de var nya är kanske inte så intressant i längden, de kan knappast användas för något särskilt seriöst arbete eftersom de gamla programmen knappast är kompatibla med dagens program.

Så kan man kombinera en gammal hemdator med GNU/Linux och få ut något vettigt av det? Svaret är naturligtvis ja (kom ihåg, vi talar om GNU/Linux här, inget är omöjligt). GNU/Linux är precis som nästan alla andra unixsystem ett fleranvändarsystem. Detta innebär att två eller flera personer kan använda datorn samtidigt. Förutsättningen för detta är förstås att man på något sätt kan ansluta två bildskärmar och två tangentbord till datorn. Det är här hemdatorn kommer in i bilden. Den ska få bli det extra tangentbordet och den extra bildskärmen. Vi ska alltså använda hemdatorn som en dum terminal.

Jag valde att använda min ABC80 som terminal, det är en av mina älsta datorer men den har några trevliga egenskaper, t.ex. en serieport, och den råkar dessuton ha en tillsats som ger den 80x24 tecken på bildskärmen något som är trevligt om än inte nödvändigt. Det hela är inte helt trivialt, men inte så farligt svårt om man bara är lite händig. Kopplingen mellan datorerna är rent elektriskt en vanlig seriell nollmodemskoppling. Tyvärr är inte ABC80's serieport pinkompatibel med en vanlig 9-pin seriell PC-port. Kontakterna är desamma (9-pin D-Sub) men ABC80 har en något annorlunda pinkonfiguration.

Såvitt jag vet finns inga sådana nollmodemskablar som behövs att köpa i handeln (fast jag kan ha fel). Är man lite händig och kan hantera en lödkolv så är det inget problem att bygga en sådan kabel själv. Det finns minst 2 vanliga utföranden på serieportar på PC. Dels den äldre 25-pol kontakten och dels den mindre och numera vanligare 9-pol kontakten. En komplett nollmodemkabel har 7 ledare, men man kan också bygga varianter med 5 eller 3 ledare i kabeln.

Följande scheman visar hur du ska koppla en nollmodemkabel med 5 ledare för 9-pol resp. 25-pol PC serieport till ABC80s serieport (jag hoppas dessa scheman är korrekta, jag har inte testkört dem, men jag tror att det ska vara rätt.


ABC80				    PC serieport 9-pin

1 Data Terminal Ready (DTR) -+  NC- 9 Ring Indicator (RI)  
                             | 
8 Data Carrier Detect (DCD) -+ 

2 Transmitted Data (TxD) ---------- 2 Received Data (RxD)

3 Recieved Data (RxD) ------------- 3 Transmit Data (TxD)

4 Request To Send (RTS) ----------- 8 Clear To Send (CTS) 

5 Clear To Send (CTS) ------------- 7 Request To Send (RTS)

7 Signal ground (GND) ------------- 5 Signal Ground (GND) 

6 Data Set Ready (DSR) - NC      +- 4 Data Terminal Ready (DTR)
                                 |
9 -12 V  - NC                    +- 6 Data Set Ready (DSR)
                                     
			       NC - 1 Carrier detect (CD)

Notera att pinne 8 och 1 på ABC-sidan ska kopplas ihop lokalt. Pinne 6 (DSR) på ABC80-sidan behöver inte anslutas alls och inte heller pinne 9. På PC-sidan behöver inte pinne 9 anslutas. Pinne 4 och 6 kopplas samman lokalt och pinne 1 behöver antagligen inte anslutas (om det skulle visa sig nödvändigt så testa att koppla ihop den med pinne 6 och 4). NC = Not Connected (icke ansluten)


ABC80				    PC serieport 25-pin

1 Data Terminal Ready (DTR) -+ NC- 22 Ring Indicator (RI)  
                             | 
8 Data Carrier Detect (DCD) -+ 

2 Transmitted Data (TxD) ---------- 3 Received Data (RxD)

3 Recieved Data (RxD) ------------- 2 Transmit Data (TxD)

4 Request To Send (RTS) ----------- 5 Clear To Send (CTS) 

5 Clear To Send (CTS) ------------- 4 Request To Send (RTS)

7 Signal ground (GND) ------------- 7 Signal Ground (GND) 

6 Data Set Ready (DSR) - NC     +- 20 Data Terminal Ready (DTR)
                                |
9 -12 V - NC                    +-  6 Data Set Ready (DSR)
                                     
			       NC - 8 Carrier detect (CD)
NC= Not Connected (icke ansluten).
Ej medtagna pinnar på PC-sidan ska inte heller anslutas.

Jag kan alltså inte garantera att dessa kopplingar fungerar eller är helt korrekta. Jag har satt samman dem mha info från olika böcker och har inte testat dem, använd dem på helt egen risk. Testa så att alla ledare är rätt dragna och så att inga ledare oavsiktligt är kortslutna *innan* du kopplar ihop datorerna. En olycklig kortslutning kan i värsta fall komma att skada datorernas serieportar (fast jag tror inte risken är så stor om man bara är noggrann försiktig).

I en 7-ledares nollmodemkabel ska även DSR kopplas till DTR på motsatt sida, men i en 5-ledarkabel som här återkopplar vi istället dessa lokalt. Med en 3-ledar kabel kopplar man på motsvarande sätt ihop även CTS och RTS lokalt, men då tappar man också hårdvarustödd flödeskontroll helt och tvingas köra XON/XOFF protokoll för flödeskontroll. Normalt medför detta att man får köra på lägre hastighet och det kan också medföra andra problem. 3-ledarkabel är kanske inte det första man ska ge sig på att köra med om man har något val, det kan vara knepigt att få en sådan koppling att fungera.

ABC80 är ingen direkt snabb dator och den saknar en riktig UART (seriekommunikationskrets) vilket gör att hela seriekommunikationsprotokollet är programvarustyrt. Detta innebär att man normalt inte kan använda några högre kommunikations hastigheter. 2400 bps borde kunna fungera. Högre hastigheter är mindre sannolikt (om än inte helt otänkbart). Börja gärna att testa med 1200 bps eller 2400 bps och höj sedan hastigheten om det verkar fungera bra och kommunikationsprogrammet stöder det.

När man kommit så långt att kopplingen fungerar hårdvarumässigt är det dags att ta en titt på mjukvarusidan. Det behöves alltså ett seriekommunikationsprogram för ABC80. ABC80 saknar normalt terminalprogram i ROM (kan tänka mig att en del personer byggde ut dem med egna ROM, på ABC80-tiden var det relativt vanligt att användarna själva modifierade hårdvaran). Det finns annars ganska många olika terminalprogram för ABC80 att välja på.

På GNU/Linux datorn måste man lägga upp en getty för den aktuella serieporten i /etc/inittab. Vanligen ska raden för detta se det ut något i stil med (för ttyS1, 1200 bps):

s2:12345:respawn:/sbin/agetty 1200 ttyS1 vt100

Beroende på vilken Linuxdistribution du använder kan det hända att det någon annan getty användas (syntax kan skilja sig något, kolla man-sidan för aktuell getty ifall du är osäker). Ibland finns det en utkommenterad rad i inittab (dvs. med # först på raden) liknande den ovan som man kan avkommentera och ev. modifiera. I vissa distributioner får man själv lägga in raden. Glöm inte starta om init efter ändringen genom att köra 'init q' som root. Ev. kan man också behöva ändra i konfigurationsfilen för getty (t.ex. /etc/gettydefs).


GNU/Linux inloggnings prompt med ABC80 som terminal

Kör man nu seriekommunikationsprogrammet på sin ABC80 och allt annat är korrekt inställt så ska man få upp en inloggningsprompt på ABC-skärmen. Får man bara skräptecken så är sannolikt hastigheten på någon sida felinställd. Fungerar det mestadels men man tappar tecken ibland så har man sannolikt för hög hastighet inställd. Testa att sänka den. Om ingenting funkar (ingen kontakt) så kan det vara fel på kabeln, felinställda program eller något annat (kom ihåg att ovanstående scheman inte testats av mig ännu, jag är bara ca 90% säker att de är korrekta).

Fungerar det inte med getty kan man först testa att starta ett seriekommunikationsprogram på Linuxsidan (t.ex. minicom) och testa om man kan kommunicera mellan de båda datorerna den vägen. Fungerar det så vet man åtminstone att det inte är något fel på hårdvara och kablage. Ett problem som jag råkat ut för är att det av någon anledning inte fungerar att använda ttyS1. Jag vet riktigt inte varför så var fallet, men det löste sig genom att använda cua1 istället. För Linux 2.2 ska cua1 dock vara borttaget så detta gäller bara för Linux 2.0.


Kalkylprogrammet sc under GNU/Linux på ABC80 som terminal

Nåja, om det nu fungerar och man kan logga in så kommer man kunna köra de flesta textbaserade Linuxprogram. Man kommer upptäcka att ABC80's tangentbord saknar många tangenter som man brukar vilja använda i Linux. Olika tangentkombinationer med ctrl-tangenten ger dig vissa av dessa åter. Pröva dig fram.

Om man tappar tecken så att man får skräp på skärmen fungerar nog ctrl-l som refresh i de flesta program. Tappade tecken är oftast ett tecken på att man kör på för hög hastighet men kan även bero på t.ex. felinställd flödeskontroll. Man kommer också märka att vissa tecken på sin ABC80 (t.ex. '$' och 'å', 'ä' och 'ö' mm.) inte kommer se rätt ut. Detta beror på att ABC80 använder den gamla svenska 7-bit ascii-koden. Detta går kanske (åtminstone delvis) fixa t.ex genom viss omkonfigurering av programmen på Linuxsidan. Men eftersom ABC80 helt enkelt inte kan visa vissa av de tecken som man förväntar sig finna i en modern PC så kan allt inte lösas med omkonfigurering, man får helt enkelt lära sig vilka tecken som är annorlunda. Kom ihåg, ABC80 kom i slutet på 70-talet, mycket har hänt sedan dess.


Tetris-bsd under GNU/Linux med ABC80 som teminal

Jag har när jag har kört min ABC80 som terminal, använt den såväl för att surfa på nätet (lynx), skriva email, spela tetris (textversionen) och till och med att köra och koppla upp med ett seriekommunikations- program för DOS under DOS-emulatorn dosemu i Linux! (Men naturligtvis låg modemet då på en annan serieport på Linuxdatorn än ABC80-terminalen.)


Texteditorn joe under GNU/Linux med ABC80 som teminal. Texten som visas är GNU General Public Licens, den mjukvarulicens som Linux och många av de andra programmen i GNU/Linux distribueras under

Har även använt en ABC800 på samma sätt (ABC800 har dessutom ett primitivt seriekommunikationsprogram i ROM om jag minns rätt, lite bökigt att få det att fungera och att ladda ett annat externt program hade nog varit bättre i just det fallet, men det går i alla fall).


Plot av funktionen f (x) = x^3+2*x^2-3*x+4 i gnuplot under GNU/Linux med ABC80 som teminal

Vill man köra flera program samtidigt från en textterminal under Linux så finnsbland annat ett mycket trevligt program som heter screen. Med hjälp av det kan man ha flera program igång och växla mellan dem med en enkel tangentkombination.

Mailprogrammet pine under GNU/Linux med ABC80 som teminal

Vill man ha ett något enklare projekt istället så kan man börja att testa med att använda en vanlig gammal PC istället för en ABC80. Då kan man använda en vanlig standard nollmodemkabel som man kan köpa i en affär (ifall man nu skulle tycka att det är för besvärligt att löda en egen kabel). Dessutom slipper man begränsningarna med ett udda tangentbort och udda teckenuppsättning. Lycka till!

Jörgen Granstam