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å elektronrö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.https://digitaltmuseum.se/021026493600/manoverbord
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 Stemme blev då utan formella beslut ledare för konstruktionen av BESK.
Funktionsprincip
BESK var 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.
Erik Stemme nämner att medan IAS-maskinen hade en ternär additionskrets hade BESK en svenskkonstruerad vanlig binär adderare i åtta sektioner med fem bitar i varje sektion. Systemet gjordes snabbt genom att carry-flaggan mellan var och en av de totalt 40 stegen (bitarna) inte inverterades, utan bara förstärktes i varje led. Överföringen av carry-flaggan mellan varje fembitarsgrupp var även den icke-inverterad, så att "carry-vågen gick igenom hela vägen utan invertering". Denna konstruktion kallas inom digitaltekniken för ripple-carry-adderare.
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.
BESK:s 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.
BESK hade stöd för addition och subtraktion med hantering av carry-flagga och spill (overflow-flagga) samt möjlighet att använda absolutbeloppet av ett tal, heltalsmultiplikation med eller utan avrundning, heltalsdivision med rest, logiskt AND (kallat "extrahera"), aritmetiskt skift åt höger eller vänster (högerskiftet kan teckenförlängas), ovillkorligt hopp, samt villkorligt hopp vid >= 0, < 0 eller spill.
Besks instruktionsuppsättning skilde sig från IAS-maskinen som använde 10 bitar för adress och 10 bitar för instruktioner. IAS-maskinen hade inte heller stöd för multiplikation eller division som BESK, men andra IAS-maskiner, ILLIAC och ORDVAC, hade stöd för samma operationer som BESK.
+ BESK instruktionsord 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bitposition) w op Instruktion
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:
+ BESK-operation 07 06 05 04 03 02 01 00 (bitposition) z h operationsnummer Instruktion
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:
+ Varianter av ADD operationsnummer 0x10 z h op verkningar 0 0 0x10 ADD av halvcell, utan att nollställa AR 0 1 0x30 ADD av helcell, utan att nollställa AR 1 0 0x50 ADD av halvcell, AR nollställs 1 1 0x70 ADD av helcell, AR nollställs
BESKs talrepresentation
De tal som BESK:s 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:
adress order kommentar
100 01100 gräns start 101 11A47 sätt n = 0 102 11C39 läs in a från remsa 103 00470 x = -1 + 2^-39 104 11E31 dito till W(x) 105 11E68 x till MR 106 00018 x till F skriv ej 107 11E63 x^2 i AR 108 00408 x^2 -1 i MR 109 11C63 y = a(x^2 - 1) i AR 10A 00C18 y till F, skriv 10B 11870 delta x i AR 10C 11E26 nytt x 10D 10F0A är x > +1? 10E 1050C annars räkna ny punkt 10F 0046B skriv separat: 110 00018 x = +1 - 2^-39 111 00C58 y = 0 112 10370 stopp 113 11A46 öka n med 2 114 1000B n - gräns 115 1024E nytt a, om n < 11 116 1012C annars slut-STOPP 117 00000 används ej 118 00800 delta x 119 00000
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).