BESK

Besk eller BESK (Binär Elektronisk SekvensKalkylator) var Sveriges andra dator (efter BARK), som då kallades matematikmaskin eller elektronhjärna. BESK var en elektronisk dator baserad på radiorör. Matematikmaskinnämnden beslöt att påbörja utvecklingen av BESK år 1950 i början parallellt med utvecklingen av BARK och maskinen färdigställdes 1953. BESK var i drift till 1966 då den demonterades och donerades till Tekniska museet.

Under några veckor var BESK den snabbaste datorn i världen, och fyllde ett rum i Gamla tekniska högskolans lokaler på Drottninggatan 95 A i Stockholm. Man förde under dessa år en diskussion om det behövdes två eller tre datorer för Sveriges behov.

Bakgrund

Ingenjörsvetenskapsakademien (IVA) hade efter andra världskriget fått kunskap om de datorer som USA utvecklat, i synnerhet ENIAC, och skickat Stig Ekelöf på rekognosceringstur till USA. Pådrivande i frågan var Försvarets Radioanstalt samt Kungliga Marinförvaltningen. Dessa såg tillämpningar inom kryptologi respektive beräkning av kulbanor. Som en reaktion på Ekelöfs rapporter beslutade IVA att sända fem stipendiater till USA för att utbildas i den nya datortekniken. Detta skedde i ett fönster 1946–1947 mellan avspänningen efter andra världskriget och innan kalla krigets början.

Två av stipendiaterna, Erik Stemme och Carl-Erik Fröberg hade gjort praktik hos Herman Goldstine på Princeton University där de involverades i arbetet på IAS-maskinen. Erik Stemme placerades i gruppen under Jan A. Rajchman på RCA-laboratoriet där man arbetade med selektronröret, som var den minnesteknik von Neumann föreslagit för IAS-maskinen. Stemme kallade selektronminnet "det mest avancerade elektronrör som någonsin tillverkats".

I mars 1948 utvärderades stipendiaternas arbete i USA och det fanns en konsensus om att Sverige ännu inte kunde köpa några datorer från USA eftersom de kommersiella modellerna inte var färdiga. Kjellberg ansåg att Sverige borde bygga något i stil med Harvard Mark III, vilket Carl-Erik Fröberg höll med om men han ansåg att vad Sverige i längden behövde var något i stil med IAS-maskinen i Princeton. Den 23 mars lade Conny Palm backad av professorerna Hilding Faxén, Hannes Alfvén och Torbern Laurent fram ett förslag om att bygga en "elektrosiffermaskin" som hade stora likheter med Harvard Mark III. Detta förslag blev aldrig genomfört.

Erik Stemme arbetade i slutet av 1940-talet på Försvarets Forskningsanstalt med Freda, en analogimaskin, för vilken han konstruerat ett trumminne efter återkomsten från stipendieresan i USA. Selektronrören han arbetat med i USA hade visat sig vara en återvändsgränd som minnesteknik för elektroniska datorer, men efter att han läst en artikel om Williamsminnen publicerad 1948 hade Stemme fått anslag från Matematikmaskinnämnden att experimentera med denna minnesteknik. År 1949 hade han fått ett Williamsrör att fungera och reste till England och diskuterade konstruktionen med 
Frederic Williams själv.

År 1950 beslutade Matematikmaskinnämnden att inleda arbetet på BESK och år 1951 flyttade Stemme sin verksamhet från FOA till Matematikmaskinnämndens Arbetsgrupp runt Conny Palm och Stig Ekelöf och blev utan formella beslut ledare för konstruktionen av BESK.

Funktionsprincip

BESK:s utformning är en så kallad IAS-maskin. För en programmerare fungerar BESK och IAS-maskinen snarlikt. Den ursprungliga IAS-maskinen färdigställdes vid Institute of Advanced Study, Princeton, New Jersey 1951, och var en av de tidigaste datorerna med von Neumann-arkitekturen. BESK programmerades således genom att program laddades in i arbetsminnet, där även in- och utdata kunde lagras. Ritningarna till den ursprungliga IAS-maskinen var vida spridda till skolor, företag och verksamheter som var intresserade av räknande maskiner. IAS-maskiner var inte mjukvarukompatibla, men byggde på ritningar över den ursprungliga IAS-maskinens arkitektur.

BESK hade 2400 elektronrör och 400 germaniumdioder, så den var delvis baserad på halvledarelektronik. Programmen försågs med brytpunkter så att beräkningen kunde återupptas efter att något elektronrör brunnit ut och bytts. 

BESKs artitmetiskt-logiska enhet hade tre register:

MD: multiplikandregistret
MR: multiplikatorregistret och 
AR: ackumulatorregistret

Dessa var samtliga 40 bitar långa. AR hade två extra bitar kallade AR00 och AR40 som används för bland annat spillindikation. Därutöver fanns 4 ytterligare register för att styra programflödet:

KR kontrollregistret som var 12 bitar långt
AS adressregistret som var 12 bitar långt
OP operationsregistret som var 8 bitar långt
BR binärräknarregistret

W används ibland för att beteckna en cell i kärnminnet, men detta är inget register. I beskrivningen av instruktionsuppsättningen nedan är W alltså det värde som kommer att läsas in i själva adressregistret AS när instruktionen utförs. Instruktionsinläsningen (fetch) görs så att en instruktion läses in i KR och sedan delas denna i AS och OP varefter operationen avkodas och utförs. Därefter ökas adressen i KR med ett (dvs den avancerar ett halvord i minnet) om inget hopp sker, och processen upprepas. Vid hopp kommer adressdelen av KR att modifieras beroende på vart hoppet skall gå.

IAS-maskinen hade precis som BESK en ALU med tre register men dessa hette R1, R2 och R3.

BESKs instruktionsuppsättning

I manualerna till BESK talas om en operationslista vilket vi idag kallar instruktionsuppsättning eller på engelska instruction set architecture (ISA). Liksom IAS-maskinen arbetade BESK med 40-bitarsord, men instruktionerna till BESK var 20 bitar långa, och två instruktioner kunde lagras i varje 40-bitarsord i minnet. Av de 20 bitarna i instruktionen användes de högsta 12 bitarna (w) vanligen för att adressera en halvcellsposition i kärnminnet från adress 0x000 till 0xFFF dvs ett av maximalt 4096 (0x1000) halvord eller 2048 (0x800) helord.

Besks instruktionsuppsättning skilde sig från IAS-maskinen som använde 10 bitar för adress och 10 bitar för instruktioner.

Ett jämnt tal i w pekade alltså på en helcell, medan ett udda tal pekade på den lägre halvan av en helcell. I vissa fall används adressdelen för skifträknare eller ignoreras helt.

Eftersom varje helord var 5 bytes långt och maskinen kunde adressera maximalt 0x800 helord (0x1000/2) kunde alltså maximalt  bytes eller 10 KB minne adresseras.

Beskoperationer (op i föregående figur) består i sin tur av två flaggor samt 6 bitar som indikerar operationsnummer:

 z: Biten indikerar att AR nollställs före operationen
 h: Biten indikerar en helordsoperation, adressdelen w pekar på det helord i kärnminnet som skall bearbetas, med bieffekten att om w pekar på ett lägre halvord (dvs är udda) är instruktionen ogiltig och maskinen kommer att stanna

Operationsdelen op hade en grundform och tre härledda former beroende på värdena på bitarna z och h, exempelvis hade ADD operationsnummer 0x10 och sedan modifierades bitarna z och h för att ge fyra olika varianter av ADD:

BESKs talrepresentation

De tal som BESKs instruktioner arbetade med var 40 bitar och kunde tolkas på många vis, men de inbyggda matematikinstruktionerna använde en representation i fixpunktsaritmetik i tvåkomplement i intervallet  med bit 0 som teckenbit. Flyttal användes på BESK men först endast i form av flyttalsemulering, dvs program som efterliknade beteendet i en riktig flyttalsenhet. Den 1 maj 1959 utökades emellertid BESK med flyttalsstöd i hårdvara med alla fyra räknesätten och en del stödfunktioner. Denna flyttalsenhet hade 32 bitars heltalsdel (mantissa) i normaliserad tvåkomplementsform  resp  med binärpunkten mellan bit 0 och 1, samt 8 bitars exponent, så att alla 40 bitarna i ett BESK-ord utnyttjades. Till skillnad från flyttalsenheten i BARK hade exponenten inget tecken.

Exempel på program för BESK

Detta exempel förekommer i manualen Kodning för BESK, exempel 6.10, och är ett exempel på hur man kunde rita kurvor på funktionsskrivaren (vilket var ett katodstrålerör) hexsifforna till vänster är adressen i minnet och hexsifforna till höger instruktioner (förutom delta X som är data). Funktionen som ritas är  för nio olika värden på a, och a läses in från hålremsa. Tätheten på x-axeln  är  och det är det värdet som syns i minnescellerna 118 och 119. Adress och kommentarer fanns inte med på remsan när man matade in programmet i BESK:

I exemplet används adresserna 11A, 11B, 11C, 11D, 11E och 11F som arbetsceller. Aktuellt värde på  ligger i 11A,  ligger i 11C och aktuellt värde på  i 11E. När kommentaren anger "till W(x) betyder det att värdet lagras i 11E nästa klockcykel. Det går därför ganska lätt att se hur adressen BESK arbetar på ligger i de tre första nybblarna följt av en instruktion på två nybblar (en byte) om vad som ska göras med värdet från den adressen. Order 112 "stopp" är ekvivalent mot "tryck på en knapp", och man kunde då trycka på knappen "start med hopp" så ritas kurvan om, men trycker man på "start" ritas nästa kurva.

Williamsminnet

Som arbetsminne användes ursprungligen ett elektrostatiskt Williamsminne, vilket var ett brittiskt patent på det första RAM-minnet. Det var baserat på 40 Williamsrör, samt 8 reservrör. Varje Williamsrör var ett katodstrålerör som kunde lagra 512 binära bitar i form av "punkter" i olika positioner på en skärm. Totalt var minnet alltså 20 kilobit (2,5 kByte). När katodstrålen träffade en punkt uppstod en potentialbrunn kring denna, baserat på en effekt som kallas sekundäremission. Potentialbrunnen avlästes med en platta, och nollställdes genom att låta katodstråleröret rita ett streck bredvid punkten. Rören kunde behålla lagrade data i bråkdelen av en sekund, och måste därför avläsas och återskrivas periodiskt, på liknande sätt som man gör i moderna dynamiska RAM-minnen (DRAM).

BESK innehöll ett eget Williamsminne som konstruerats av Gunnar Stenudd. Istället för att enbart lagra enstaka punkter upptäckte man under konstruktionen av Williamsminnet till BESK att det var bättre att låta en nolla representeras av en cirkel, och en etta av en cirkel med en punkt inuti. Elektroniken fick skärmas och kapslas i metall för att undvika elektrostatiska störningar. Utöver detta system införde Stenudd en rad med referensettor längst ned på varje minnesmatris, vilka användes för att kalibrera intensiteten i elektronstrålen mot bildrörets fosforskikt så att skillnaden i amplitud ut vid läsning kunde minimeras. Williamsrören behövde en daglig driftkontroll på 30 minuter. Williamsminnet användes de första 3–4 åren av BESKs drifttid.

Ferritkärneminnet

Williamsminnet blev snabbt otillräckligt och ersattes redan 1956 med ett kärnminne konstruerat av Carl-Ivar Bergman och Gert Persson. Speciell testutrustning konstruerades för att testa ferritkärnorna, och hemmafruar med erfarenhet av att sticka anställdes för att sätta samman kärnminnet som bestod av 40 matriser med 1024 kärnor i varje, det vill säga 40 kilobit (5 kByte) och därmed dubbelt så stort som Williamsminnet. Varje matris kunde adresseras parallellt så att BESK läste eller skrev ett helt 40-bitarsord i en cykel.

Trumminnet

En viktig spin off-effekt från utvecklingen av BESK var det magnetiska trumminnet, som användes som sekundärminne i datorn. Minnet baserades på ett magnetiskt fenomen, som upptäckts av Olle Karlqvist och som kallades Karlqvist gap.

Driftstid
BESK togs i drift 1953 och först 13 år senare, år 1966 togs BESK ur drift. BESK:s kontrollpanel, en dubbelenhet från Williamsminnet samt trummor ur trumminnet finns sedan 1966 på Tekniska museet i Stockholm.

Prestanda
BESK genomförde en addition på 56 μs och en multiplikation på 350 μs. 

Arbetsminnet kunde lagra 512 ord med en ordlängd om 40 bit, det vill säga 2560 byte. Instruktionslängden var 20 bit, så två instruktioner kunde lagras på varje adress i arbetsminnet. 

Effektförbrukningen var 15 kVA. 

Under de två första åren var körtiden i genomsnitt 5 minuter innan ett elektronrör gick sönder och behövde bytas, men hållbarheten förbättrades därefter.

Användning
Det programbibliotek som utvecklats för BESK var inriktade på olika numeriska metoder för att lösa matematiska problem: polynomapproximation med minstakvadratmetoden, lösning av reella eller komplexa rötter till algebraiska ekvationer, lösning av linjära ekvationssystem med upp till 255 obekanta, lösning av definita linjära ekvationssystem med konjugatgradientmetoden (Stiefel-Hestenes metod), invertering av matriser med Gausselimination (Gauss-Jordans metod), lösning av överbestämda linjära ekvationssystem med minstakvadratmetoden, egenvärdesproblem så som egenvärden och egenvektorer till symmetriska matriser, fouriertransform osv. I princip sådana problem som idag löses med program som Matlab eller GNU Octave.

Den matematiker som kom att forma användningen av BESK för numerisk analys var Germund Dahlquist som även vad redaktör för referensmanualen för besk med namnet Kodning för BESK.

De första beräkningarna gjordes den 1 april 1954. BESK hanterade vingprofiler med mera för Saab 32 Lansen och Saab 35 Draken, väderdata för Carl-Gustaf Rossby och SMHI meteorologiska byrå, statistik för Televerket och vägprofiler för Vägverket. Under nätterna utnyttjade Försvarets radioanstalt (FRA) BESK för att knäcka krypterade radiomeddelanden (av Per-Erik Persson med flera). BESK användes också för beräkningar för den svenska kärnkraftsindustrin, till exempel Monte Carlo-simuleringar av neutronspektrum (även det av Per-Erik Persson med flera). De flesta av datorberäkningarna för det svenska kärnvapenprogrammet gjordes emellertid med efterföljaren SMIL. År 1957 använde Hans Riesel BESK för att upptäcka ett Mersenneprimtal bestående av 969 siffror – det största kända vid den tiden.

Programspråk
BESK programmerades i maskinkod, via strömställare på panelen och hålremsa. Hålremsorna producerades genom att manuellt stansa hålkort, som sedan översattes till en stansad hålremsa i en speciell arbetsstation. Hålremsorna lästes i sin tur in i maskinen.

Då arbetet blev tidskrävande, krångligt och repetitivt utvecklades efter hand så kallade autokodningssystem (eng autocode). Ett lågnivåspråk utvecklat av Gunnar Hellström hette Fiktiva Adresser (FA) och motsvarar våra dagars symbolisk assembler. Denna utvecklades i flera versioner med namn som FA4 och FA5. 1957 utvecklade beräkningsfirman Autocode AB vad som kallades ALFAKOD för BESK, vilket också var en symbolisk makroassembler. I dessa lågnivåspråk fanns subrutiner för exempelvis kvadratrot, och trigonometriska funktioner som sinus och cosinus.

Några högre programspråk utvecklades inte för BESK, men för den besläktade datorn SMIL utvecklades en kompilator för ALGOL 60.

Efterföljare
Lunds universitet byggde 1956 en icke programkompatibel variant av BESK, som gick under namnet SMIL (Siffermaskinen i Lund) och 1957 färdigställde Saab i Linköping den icke-kompatibla varianten SARA (Saabs räkneautomat), som var dubbelt så snabb som BESK. Saab var en av de största användarna av den ursprungliga BESK. Verksamheten inom Saab utvecklades till Datasaab.

År 1956 lämnade flera nyckelpersoner, däribland Erik Stemme Matematikmaskinnämnden och började arbeta på Åtvidabergs Industrier, senare Facit AB med att tillverka Facit EDB (1958) och senare Facit EDB-3, som var programvarukompatibla med BESK. Facit EDB tillverkades i nio exemplar och var Sveriges första serietillverkade dator. Facits stordatorverksamhet lades ned 1963.

Runt 1957 fanns planer på en "superbesk" som skulle blivit en större och snabbare maskin än BESK. Primärminnet skulle vara större, 12000 ord, och exekveringen skulle snabbas upp c:a 10 gånger med hjälp av pipelining, och självständiga I/O-enheter med eget buffertminne. Man ville även snabba upp arbetet med nya program med hjälp av så kallad "autokodning" (i princip en symbolisk makroassembler), virtuellt minne och tidsdelning. Gunnar Erlandsson nämner Atlasdatorn, Stretch, Gamma 60 och Ramo Woolridge 400 som datorer man inspirerades av. Ett konkret förslag att börja utveckla Superbesk framlades till Statskontoret år 1961. Superbesk beräknades kosta totalt 7 miljoner kronor att utveckla, den första fungerande varianten skulle kosta c:a 1,5 miljoner, och första året budgeterade man 600.000 kr i materialkostnader. Förslaget avslogs i statsverksproposition 1961/1.

Matematikmaskinnämnden började 1960 utveckla en transistoriserad ersättare till BESK, den kom dock att slutföras 1965 av AB Datasystem för Atomforskningsinstitutets räkning och fick beteckningen TRASK. När Matematikmaskinnämnden lades ner 1963 lämnade många kring BESK den statliga anställningen.

Se även
BARK – Binär Automatisk Relä-Kalkylator – Sveriges första dator.
SMIL – Siffermaskinen i Lund.
Facit EDB – Sveriges första serietillverkade dator, baserad på BESK
Datasaab D2 – transistorbaserad
TRASK – TRAnsistoriserad SekvensKalkylator

Referenser

Externa länkar 

Tre Innovatörer AB: BESK Binär Elektronisk Sekvens Kalkylator
BESK programmeringsmanual (1958-05-02)
Vädergubbar, kodknäckare och artillerister bakom datorbygget
Ljusa nätter kring Besk
En minnesbyggares hågkomster
Att arbeta med 1950-talets matematikmaskiner: Transkript av ett vittnesseminarium vid Tekniska museet i Stockholm den 12 september 2005

Sveriges datorhistoria
Föremål på Tekniska museet