Elliott 803

Delar från en Elliott 803B

Elliott 803 är en liten, medelhastighets digital transistordator som tillverkades av det brittiska företaget Elliott Brothers på 1960-talet. Cirka 211 byggdes.

Historia

800-serien började med 801, en engångstestmaskin byggd 1957. 802:an var en produktionsmodell men endast sju såldes mellan 1958 och 1961. Den kortlivade 803A byggdes 1959 och levererades först 1960; 803B byggdes 1960 och levererades första gången 1961.

Över 200 Elliott 803-datorer levererades till kunder, till ett enhetspris på cirka 29 000 pund 1960 (ungefär motsvarande 710 000 pund 2021). Största delen av försäljningen var av 803B-versionen med fler parallella vägar internt, större minne och hårdvara med flyttal.

Elliott 803 var datorn som användes i ISI-609, världens första process- eller industriella styrsystem , där 803:an var en datalogger . Den användes för detta ändamål vid USA:s första kärnreaktor med dubbla ändamål, N -reaktorn .

Ett betydande antal brittiska universitet hade en Elliott 803.

Elliott utvecklade därefter (1963) den mycket snabbare, mjukvarukompatibla Elliott 503 .

Två kompletta Elliott 803-datorer överlever. Den ena ägs av Science Museum i London men den visas inte för allmänheten. Den andra ägs av The National Museum of Computing (TNMoC) i Bletchley Park , är fullt fungerande och kan regelbundet ses i drift av besökare på det museet.

Hårdvarubeskrivning

803:an är en transistoriserad bitseriemaskin ; 803B har fler parallella banor internt. Den använder ferritmagnetisk kärnminne i 4096 eller 8192 ord på 40 bitar, bestående av 39 bitar data med paritet . Den centrala processorenheten (CPU) är inrymd i ett skåp med en höjd, bredd och djup på 56 x 66 x 16 tum (142 x 168 x 41 cm). Kretsar är baserade på kretskort där kretsarna är ganska enkla och det mesta av signaleringen bärs på ledningar. Det finns ett andra skåp som är ungefär hälften så stort som används för strömförsörjningen, vilket ovanligt är baserat på ett stort nickel-kadmiumbatteri med laddare, en tidig form av avbrottsfri strömförsörjning . Ett tredje skåp (samma storlek som elskåpet) rymmer det extra arbetslagret på maskiner med 8192 ordlager. Det finns en operatörskontrollkonsol , Creed - fjärrskrivare och höghastighetsläsare för pappersstansad band och stans för inmatning/utmatning , med 5-spårs Elliott-telekodkod, inte Baudot . Bandet läses med 500 tecken per sekund och stansas med 100 cps. Operatörskonsolen, cirka 60 tum lång, tillåter att lågnivåinstruktioner kan matas in manuellt för att manipulera adresser och data och kan starta, stoppa och stega maskinen: det finns en högtalare (pulsad av den övre biten i instruktionsregistret) som tillåter operatören att bedöma statusen för en beräkning. Systemet kräver luftkonditionering och drar cirka 3,5 kW effekt i en minimal konfiguration. En minimal installation vägde cirka 1 800 pund (820 kg).

35 mm magnetisk filmhanterare

Valfri masslagring är tillgänglig på ett ovanligt magnetbandsystem baserat på standard 35 mm filmmaterial belagd med järnoxid (tillverkat av Kodak ). På den tiden användes detta av filmindustrin för att spela in ljudspår. Elliotts fabrik i Borehamwood låg nära Elstree filmstudior, vilket förklarar användningen av 35 mm kedjemedier. De 1000-fots rullarna rymde 4096 block med 64 ord per block (4096 x 64 x 39 = 10 223 616 bitar, eller motsvarande cirka 1,3 megabyte).

En annan ovanlig egenskap är användningen av magnetiska kärnor inte bara för minne utan också som logiska grindar. Dessa logiska kärnor har 1, 2 eller 3 ingångslindningar, en trigger (läs) och en utgångslindning. Beroende på deras polaritet magnetiserar strömpulserna i ingångslindningarna antingen kärnan eller tar ut varandra. Det magnetiserade tillståndet hos kärnan indikerar resultatet av en boolesk logikfunktion. Två klockfaser betecknade alfa och beta används för att trigga (återställa till noll) alternativa kärnor. En förändring från etta till noll ger en puls på utgångslindningen. Kärnor som tar emot alfa-triggerpulser (alfa-kärnor) har ingångar som matas från grindar som triggas på beta-fasen (beta-kärnor). Transistorer var dyra på den tiden och varje logisk gate kräver bara en för att förstärka utgångslindningspulsen; emellertid driver en enda transistor ingångarna till ett litet antal (vanligtvis 3) andra kärnor. Om fler än 3 ingångar ska drivas kan upp till två fler transistorer drivas av varje kärna.

Instruktionsuppsättning

Instruktioner och data är baserade på en 39-bitars ordlängd med binär representation i 2:s komplementaritmetik . Instruktionsuppsättningen arbetar på ett enda adress- och enstaka ackumulatorregister, med ett extra hjälpregister för dubbellängds heltalsmultiplicering och dividering . Även om man tror att enkellängdsdelningen och kvadratrotsinstruktionerna endast var aktiverade i 803s avsedda för processkontrollapplikationer, har den kvarvarande operativa 803B visat sig ha dessa instruktioner aktiverade, förmodligen för att den användes av ett mjukvaruhus för att utveckla verkliga tids- och processkontrollapplikationer. En instruktion består av ett 6-bitars funktionsfält (konventionellt representerat i oktal ) och en 13-bitars adress. Detta ger 64 instruktioner organiserade som 8 grupper om 8 instruktioner. 13-bitars minnesadressfältet ger ett adresserbart område på 8192 ord. Dessa 19-bitars instruktioner packas två till ett ord med ytterligare en 39:e bit mellan dem, den så kallade B-linjen eller B-siffran (termen är ett arv från Ferranti Mark 1-datorn, där A-linjen representerade ackumulatorn och B-linjen en instruktionsmodifierare, båda lagrade på ett Williams-rör ). Att sätta B-siffran har effekten av att lägga till innehållet i minnesadressen för den första instruktionen till den andra instruktionen vid exekveringstidpunkten, vilket möjliggör indexering, indirekt adressering och andra modifieringar av körtidsinstruktioner. Bittiden är 6 mikrosekunder, hopp utförs på 288 mikrosekunder och enkla aritmetiska instruktioner på 576 mikrosekunder. Flyttalsoperationer tar flera millisekunder. IO är direkt. Avbrott användes inte av standard kringutrustning eller dokumenterades i programmeringsguiden.

I de följande beskrivningarna representerar A och N ackumulatorn och den bokstavliga adressen, a och n representerar (initial) innehållet i ackumulatorn och den adresserade lagringsplatsen, och a' och n' det resulterande innehållet.

Instruktionsgrupper 0 – 3

Dessa är fixpunktaritmetik med 4 olika kombinationer av operand och resultatmål:

Grupperna 0 – 3
Fn Drift a' n'
Fn Drift a' n'
00 Göra ingenting a n
01 Förneka -a n
02 Byt ut & räkna n + 1 n
03 Kollationera en n
04 Lägg till a + n n
05 Subtrahera en n
06 Klar noll n
07 Negera & lägg till n - a n
10 Utbyta n a
11 Byt ut och förneka -n a
12 Byt och räkna n + 1 a
13 Skriv och sammanställ en a
14 Skriv och lägg till a + n a
15 Skriv och subtrahera en a
16 Skriv och tydlig noll a
17 Skriv, förneka och lägg till n - a a
20 Skriva a a
21 Skriv negativt a -a
22 Räkna i butik a n + 1
23 Samla i butik a en
24 Lägg till i butik a a + n
25 Negera lagra och lägg till a en
26 Rensa butik a noll
27 Dra av från butiken a n - a
30 Byta ut n n
31 Byt ut och upphäva butiken n -n
32 Byt ut och räkna i butik n n + 1
33 Byt ut och sortera i butik n en
34 Byt ut och lägg till i butik n a + n
35 Byt ut, förneka lagra och lägg till n en
36 Byt ut och rensa butik n noll
37 Byt ut och dra ifrån butiken n n - a

Instruktionsgrupp 4

Grupp 4 är villkorade och ovillkorliga hopp. Funktionerna 40 – 43 hoppar till den första instruktionen i ett par och 44 – 47 till den andra.

Grupp 4
Fn Drift
40 Överför till 1:a instruktionen ovillkorligt
41 Överför till 1:a instruktion om a är negativ
42 Överför till 1:a instruktionen om a är noll
43 Överför till den första instruktionen om brädden har ställts in och rensa den
44 Överför till 2:a instruktionen ovillkorligt
45 Överför till 2:a instruktionen om a är negativ
46 Överför till 2:a instruktionen om a är noll
47 Överför till 2:a instruktionen om brädden är inställd och rensa den

Instruktionsgrupp 5

Grupp 5 är multiplicera, dividera och skift instruktioner. Vissa av dessa använder 38-bitars Auxiliary Register (AR – innehåll betecknat med ar), vilket kan ses som en förlängning av ackumulatorn i den minst signifikanta änden. Multiplikationer och divisioner betraktar a/ar som en bråkdel med tecken mellan -1 och en minst signifikant bit mindre än +1. Trots att 803-handboken säger "Alla udda funktioner i grupp 5 rensar AR", rensar inte funktion 57 det.

Grupp 5
Fn Drift
50 Aritmetisk högerförskjutning a/ar N gånger
51 Logisk högerväxling ett N gånger, tydlig ar
52 Multiplicera a med n, resultatet till a/ar
53 Multiplicera a med n, enkel längd avrundat resultat till en tydlig ar
54 Aritmetiskt vänsterskift a/ar N gånger
55 Logisk vänsterväxling ett N gånger, tydlig ar
56 Dividera a/ar med n, enkel längdkvot till a, tydlig ar
57 Kopiera ar till a, sätt teckenbit noll, rensa INTE ar

Instruktionsgrupp 6

Grupp 6 är flyttalsinstruktioner (om en flyttalsenhet är installerad).

Flyttalsnummer representeras i ett 39-bitars ord eller i ackumulatorn som (från mest till minst signifikanta änden):

  • en 30 bitars 2:a komplement signerad mantissan a i intervallet ½ ≤ a < 1 eller -1 ≤ a < -½
  • en exponent b med 9 bitars tecken representerad som ett positivt heltal 0 ≤ (b+256) ≤ 511.

Noll representeras alltid av alla 39 bitar noll.

Observera att testet för noll och testet för negativa hoppinstruktioner är lika giltiga för flyttal.

Grupp 6
Fn Drift a' n'
60 Lägg till n till a a + n n
61 Subtrahera n från a en n
62 Negera a och lägg till n n - a n
63 Multiplicera a med n en n
64 Dividera a med n en n
65 N = 4096: Konvertera heltal med fast punkt i ackumulatorn till flyttal
65 N < 4096: Snabb vänster (slutomgång) skift N mod 64 platser
66 (Reserv)
67 (Reserv)

Alla dessa instruktioner rensar hjälpregistret.

Instruktionsgrupp 7

Grupp 7 är input/output, med undantag för 73, som används för subrutinkoppling. Det finns en mycket mer komplett beskrivning av Grupp 7-funktionerna i länken "Vårt datorarv".

Grupp 7
Fn Drift
70 Läs tangentbordsnummergeneratorn till ackumulatorn
71 Läs ett tecken från bandläsaren och logiskt "eller" det till de minst signifikanta 5 bitarna i ackumulatorn
72 Utdata till valfri kringutrustning såsom den digitala plottern:
73 Skriv adressen till denna instruktion till plats N
74 Skicka en karaktär som representeras av N till punchen
75 Kanal 2 funktion
76 Kanal 2 funktion
77 Kanal 2 funktion

Digital plotterkontroll:

Instruktion Pennrörelse
72 7168 Ingen rörelse
72 7169 ÖST
72 7170 VÄST
72 7172 NORR
72 7176 SÖDER
72 7173 NORDÖST
72 7174 NORDVÄST
72 7177 SYDOSTER
72 7178 SYDVÄST
72 7184 Pen upp
72 7200 Penna ner

Inträde i en subrutin på adress N utförs normalt av sekvensen:

73 LÄNK: 40 N

Returadressen har lagrats på en länkplats (vanligtvis platsen före starten av subrutinen (t.ex. N-1) )

och returnerar genom att använda sekvensen:

00 LÄNK / 40 1

Exempel på program

Som ett exempel är följande de initiala instruktionerna , fastanslutna till platserna 0 – 3 och används för att ladda binär kod från pappersband till minnet. I enlighet med 803-konventionen är den skriven med två instruktioner på varje rad, som representerar innehållet i ett ord. Kolonet eller snedstrecket mellan dem representerar ett B-siffrigt värde på noll respektive ett.

0: 26 4 : 06 0 Rensa loc'n 4; Rensa A 1: 22 4 / 16 3 Öka lok 4; Lagra A i loc'n (3 + innehåll av loc'n 4) & rensa A 2: 55 5 : 71 0 Vänsterskift A 5 gånger; Läs bandet och "eller" till A 3: 43 1 : 40 2 Hoppa till loc'n 1 om det är överflöd; Hoppa till loc'n 2

Det finns flera punkter att notera i detta mycket enkla program:

  • Det finns ingen räkning. Den inre slingan (platserna 2 och 3) packar 5-bitars tecken i ackumulatorn tills spill uppstår. Således bildas ett 39-bitars ord av åtta 5-bitars tecken. Den mest signifikanta biten av det första tecknet kasseras men måste vara en 1 (såvida inte nästa bit är en 1), för att provocera aritmetiskt spill (en förändring av teckenbiten).
  • Det första ordet som läses lagras på plats 4, och detta används sedan som adressen i vilken efterföljande ord lagras.
  • Blank inledande och efterföljande tejp ignoreras eftersom nollor kan flyttas åt vänster i det oändliga utan att orsaka spill.
  • Det finns ingen möjlighet att avsluta den yttre slingan (inre slingan plus plats 1). Bandet kan stoppas manuellt eller tillåtas rinna ut genom läsaren (eftersom den tomma trailern ignoreras). Vanligtvis används initiala instruktioner för att läsa en mer sofistikerad sekundär bootstrap (T23) i toppen av butiken. Efter att ha skrivit till den sista butiksplatsen (8191) tillåts adressen att rundas till 0. Att skriva noll till platserna 0 – 3 har ingen effekt (eftersom innehållet i dessa platser skapas av logiska grindar snarare än att läsas från kärnminnet ), och ett speciellt värde skrivs sedan till plats 4. Detta värde har 22 i funktionskodbitarna och den sekundära bootstrap-ingångspunkten minus 3 i adressbitarna. Detta betyder att B-siffran har effekten att omvandla 16 (lagra) instruktionen på plats 1 till en 40 (hopp) instruktion (16 + 22 = 40 i oktal), och att addera 3 till adressbitarna. Nettoresultatet är ett hopp till startpunkten för den sekundära bootstrap!

(Datavärdena för de omslutna platserna 0 – 3 måste vara noll eftersom räknarvärdena 8192, 8193 etc. ändrar den B-modifierade andra halvan av plats 1 från en 16 till en 17 instruktion, vilket sätter a till n - a istället att rensa den, som krävs av den inre slingan.)

Avbryter

803:an har en föga känd avbrottsanläggning. Även om det inte nämns i programmeringsguiden och inte används av någon av standardtillbehören, beskrivs avbrottslogikens funktion i 803-hårdvaruhandböckerna och logiken visas i 803-underhållsdiagrammen (Diagram 1:LB7 Gb) . Avbrott används förmodligen mest i samband med anpassade gränssnitt som tillhandahålls som en del av ARCHs realtidsprocesskontrollsystem. Eftersom alla in- och utmatningsinstruktioner gör att 803:an blir "upptagen" om indata inte är tillgänglig eller om en utmatningsenhet inte har slutfört en tidigare operation, behövs inte avbrott och används inte för att driva standard kringutrustning.

Att höja avbrottsinmatningen till datorn orsakar ett avbrott i exekveringen enligt följande: så snart maskinen är i ett lämpligt tillstånd (i synnerhet när den inte är "upptagen" och endast i vissa tillstånd av hämtnings-/körcykeln), nästa instruktion paret hämtas från lagringsplats 5, utan att ändra sekvenskontrollregistret (SCR). Plats 5 förväntas innehålla ett standardinstruktionspar för subrutininmatning (73 LÄNK: 40 N – se ovan), vilket gör det möjligt att spara exekveringsadressen före avbrott (fortfarande i SCR) för senare återkomst. Den externa utrustningen som höjer avbrottet är förlitad på att avstå från att höja ett annat avbrott tills det första har bekräftats av någon lämplig in-/utmatningsinstruktion, för att förhindra att avbrott kapslas. Algol-kompilatorn betraktar inte plats 5 som en reserverad plats, även om detta kan ha mer att göra med Algols olämplighet för processtyrningstillämpningar än att indikera att avbrott aldrig betraktas som en vanlig anläggning.

Kompilatorer

De initiala instruktionerna som beskrivs som exempelprogrammet ovan är i själva verket en primär starthanterare som normalt används för att läsa en sekundär starthanterare känd som T23 , som är placerad på alla programband. T23 tillåter mer flexibla programladdningsmöjligheter inklusive summakontroll av den laddade koden.

Maskinkodprogram skrivs i en oktal/decimal representation som exemplifieras i exempelprogrammet ovan, och laddas av en rudimentär assembler som kallas Translation Input Routine . Den har inga symboliska adresseringsmöjligheter, utan tillåter istället att källan delas upp i block som kan flyttas manuellt för att möjliggöra expansion eller sammandragning av ett tidigare block under utveckling. Det finns också en autokod för enkla programmeringsuppgifter, vilket möjliggör snabbare programutveckling utan behov av kunskap om maskinkod. Detta har inga möjligheter för formelöversättning och kräver att alla beräkningar reduceras till en serie uppdrag med inte mer än en enda operatör på höger sida.

803B med 8192 minnesord kan köra Elliott ALGOL- kompilatorn, en stor delmängd av Algol60-språket, som kan ladda och köra flera ALGOL-program i följd. Detta skrevs till stor del av Tony Hoare , anställd av Elliotts som programmerare i augusti 1960. Hoare berättar om några av sina erfarenheter på Elliotts i sin föreläsning om Turing Award från Association for Computing Machinery (ACM) 1980.

803B på National Museum of Computing fungerar nu tillräckligt bra för att köra den här kompilatorn igen. Det finns en kort video på YouTube där den kompilerar och kör ett enkelt program.

NCR-inblandning

803 var märkt som NCR-Elliott 803 när den såldes av NCR för kommersiellt bruk. Vid den här tiden tillverkade/monterade Elliott Automation även NCR 315:or i Borehamwood.

Gör-det-själv-datorer

Elliott 803s (och senare Elliott 4100s) användes i NCR-Elliotts samriskföretag "Computer Workshop" datorbyrå. Det unika med denna byrå var att de höll 3-dagarskurser för att lära sina kunder att skriva sina egna program, och dessa skänktes ofta till ett bibliotek med program som kunde användas. Kunder skulle komma till Borehamwood (och senare Greenford) för att själva driva datorerna – ett tidigt exempel på persondatorer. Priserna per timme var 8 pund (motsvarande 196 pund 2021) från 09.00 till 17.00, 6 pund (motsvarande 147 pund 2021) från 17.00 till midnatt och 4 pund (motsvarande 98 pund 2021) från midnatt till 9 på morgonen.

De mest populära applikationerna var inom byggnadsteknik och arkitektur, för strukturanalys, skärning och fyllning, mätkorrigering och kvantitetsförteckningar.

Ansökningar

Följande var 803 användare:

  • RMIT University i Melbourne, Australien använde en Elliott 803-dator för studentbruk 1966.
  • Brush Electrical Machines i Loughborough, Storbritannien använde en 803 för designberäkning på krafttransformatorer och motorer.
  • GPO använde en 803 vid deras Dollis Hill Research Labs för elektronikdesign och simuleringar av telefonnätverk.
  • GPO använde en 803 vid deras Goonhilly Downs satellitjordstation för att beräkna satellitpass och stansband för att styra rätter.
  • Corah Knitware i Leicester UK använde ett par 803:or för telefonorderhantering och produktionsplanering.
  • Thornber Farms i West Yorkshire UK använde en 803 för att bearbeta äggproduktionsdata för uppfödning av kycklingar.
  • UK Potato Marketing Board använde (cirka 1964) en 803 för att producera statistik och rapporter från de register och konton som den hade för 65 000 registrerade odlare
  • Vickers, da Costa , en Londonbörsmäklare, använde en 803B för handel och lönehantering från 1961 till 1966 när den ersattes med en National Elliot 4300.
  • RAF No. 1 Radio School vid RAF Locking använde en 803:a 1968 för att utbilda de första RAF datorteknikerlärlingarna.
  • Medical Research Council Biophysics Research Unit vid King's College London i Drury Lane använde en 803 för detaljerade beräkningar för att verifiera strukturen av DNA och i tidiga försök att sekvensera RNA.
  • United Steels (senare British Steel) Swinden House Laboratories i Rotherham tog emot en 803:a 1963. Den användes delvis för att simulera olika processer vid ståltillverkning.
  • Battersea College of Advanced Technology använde en 803 för studentutbildning.
  • Mullard Research Laboratories i Redhill använde en 803.
  • Banco Pinto de Magalhães ( pt ) , en portugisisk bank, tog emot en 803-B, den första datorn som installerades i Portugal, i slutet av 1961. Den användes delvis för att registrera och hålla reda på löpande konton .
  • National Gasturbine Establishment, Pyestock Farnborough använde en 803B som levererades 1962 för prestanda- och designberäkningar på flygplan och bearbetning av aerodynamiska data.
  • Brown Brothers Ltd i Swindon, en bilhandelsdistributör, installerade en Elliott 803B i deras huvudkontor på Dorcan Estate för användning i lagerkontroll. Detta skänktes senare till Swindon Technical College.
  • Ellott Automation hade en anläggning på Rochester Airport, Kent, där de körde en 803.

Ett litet antal begagnade 803:or hittade vägen till skolor i Storbritannien.

  • Banbury School hade 2 Elliott 803B, en med 4096 minne och band, och en med 8192 minne. De användes för att lära ut Elliott Autocode som ett primärt språk men hade också en ALGOL-kompilator. De användes också för CESIL- kodning (Computer Education In Schools Instructional Language). Maskinerna kördes senast 1980 när de ersattes av ett klassrum med sju Apple 2e-maskiner. Skolan köpte också maskinen från Loughborough University som reservdelar.
  • Felsted skola hade en gång två Elliott 803:or, numera finns bara kontrollkonsolen kvar, den hängs upp i hörnet av ett av skolans nuvarande IT-rum som en påminnelse om varför rummet heter "Elliott"
  • Haydon School hade två Elliot 803B med 8192 ord av kärnan fram till början av 1980-talet, en användes som reservdelar. En av dem kom från det närliggande Brunel University. Kringutrustning inkluderade två filmhanterare, två optiska läsare, två stansar och en teleprinter för utmatning, en hårdvaruenhet med kvadratrotsrot och en trumplotter. Den användes för att köra Algol, Autoode och en BASIC- och Fortran-kompilator fanns tillgängliga. Den installerades i början av 1970-talet under överinseende av fysikavdelningen. På den tiden var det fortfarande St Nicholas Grammar School för pojkar.
  • Mill Hill School hade en Elliott 803 med 8192 minne på 1970-talet. Den hade femspårs pappersbandläsare och skrivare men inga andra I/O-enheter. Skolan hade Elliott 803 autocode och Algol kompilatorer.
  • Loughborough Grammar School fick maskinen från Brush Electrical Machines som nämns ovan.
  • Highbury Technical College hade en Elliott 803B för studentbruk i början av 1970-talet.
  • Swindon Technical College (grundat 1895, stängt 2006) hade en Elliott 803B i början av 1970-talet från Brown Brothers Ltd (se ovan) och användes av lokala skolor inklusive Commonweal Grammar School för undervisning.

Se även

Vidare läsning

  • Adrian Johnstone, The Young person's Guide to... The Elliott 803B , Resurrection (Bulletin of the Computer Conservation Society ) 1 (våren 1991) [1]
  • Tony Hoare, Kejsarens gamla kläder , Communications of the ACM 24 (februari 1981)
  • Elliott Brothers (London) Ltd., Scientific Computing Division, A Guide to Programming the 803 Electronic Digital Computer (juni 1962)
  • Pathe News Reel, Science and the Egg , [2]
  • Praktiska tillämpningar för skolbaserade intranät [3]
  • Den första datorn jag programmerade [4]
  • Savard, John JG (2018) [2005]. "Datoraritmetik" . quadiblock . De tidiga dagarna av hexadecimal. Arkiverad från originalet den 16 juli 2018 . Hämtad 16 juli 2018 . (OBS. Har information om Elliott 803-teckenuppsättningen.)

externa länkar