DASK - en 1. generations computer
af
H. B. Hansen
2. Del
Den logiske struktur af Dask
Den logiske struktur af Dask kan i det store og hele aflæses ved
at se på kontrolbordet.
De små cirkler er lamper, en for hver binær position i registrene,
som er de lange rækker af lamper. De sorte klatter under lamperne
og til højre og venstre er trykknapper, ved hjælp af hvilke
man kunne ændre indholdet i visse af registrene. Hvis man trykkede
på knapperne til højre eller venstre for et register, blev
hele registeret nulstillet. Man kunne herefter trykke på knapperne
under registeret, hvorved de positioner, knappen er under, bliver 1-stillet.
Når en lampe lyste (med et mærkeligt blegrødt lys) betød
det at indholdet i vedkommende position var 1. Når Dask kørte
blinkede alle lamper lystigt, stundom i ejendommelige og fascinerende mønstrer
der afspejlede løkkestrukturen i den algoritme der blev benyttet
i programmet. Den store runde cirkel med lodrette riller i nederste, midterste
del af billedet er en højttaler, der var koblet til nogle positioner
i akkumulatorregisteret. Den gav lyd fra sig når maskinen kørte.
Hvert program havde sin egen karakteristiske "melodi", som man lærte
at kende i testfasen, og som kunne benyttes til at kontrollere om programmet
kørte korrekt - fx hvis man blev træt af at sidde ved kontrolbordet
i den lange nat, og tog sig et hvil på en divan der stod i dagligstuen.
Ferritlageret på Dask var på 1024 helceller (hec) med hver
40 binære positioner, men det kunne også anskues som 2048 halvceller
(hac) med hver 20 positioner. Helcellerne havde de lige adresser, og halvcellerne
var nummereret fra 0 til 2047; hveranden halvcelle havde således
samme adresse som en helcelle. Ved hjælp af operationsangivelsen
i en ordre kunne man bestemme om en lige adresse skulle forstås som
en hec eller en hac. En ordre fyldte en hac, så der var to ordrer
pr. hec.
Dask regnede med ægte brøker, dvs. alle maskintal opfattedes
som liggende i intervallet -1 <= tal < 1, hvilket blev kaldt "Dask-intervallet".
Position 0 (længst til venstre i en celle eller et register) var
fortegnet, og resten var binalerne. Der anvendtes 2-komplementaritmetik.
Et tal i en hac havde også sit fortegn længst til venstre,
altså midt i en hec hvis hac'en havde ulige adresse. Et maskintal
bestod således af et fortegn og 19 eller 39 binaler. Multiplikation
og division var dog specielle, idet de kunne operere på hvad man
kaldte "den lange akkumulator" som var to registre sat i forlængelse
af hinanden (se nedenfor). Dette gav en præcision på 78 binaler
(fortegnspositionen i det ene register blev ikke brugt). Dask var derfor,
også efter moderne forhold, en maskine med meget stor præcision.
Der var ikke indbygget flydende regning i Dask, men et af de første
biblioteksprogrammer der blev fremstillet, var programmeret flydende regning.
Det gik jo lidt langsomt, og derfor gjorde man sig store anstrengelser
for at holde sig indenfor Dask-intervallet i praktisk programmering. Udformning
af programmer til Dask hed forøvrigt ikke "programmering" men "kodning".
Et register med tilhørende knapper på kontrolbordet, som
det vises på ovenstående billede, vil jeg i det følgende
kalde "en række".
Der var følgende registre i Dask:
-
Multiplikandregisteret MD (den øverste række på
billedet). Her stod multiplikanden ved en multiplikation. Man kunne kun
nulstille MD manuelt. Koderen kunne ikke eksplicit fylde noget i MD, men
når der blev udført en multiplikation blev indholdet af AR
(se nedenfor) kopieret over i MD lige inden multiplikationen.
-
Multiplikatorregisteret MR (den anden række på billedet).
Dette register skulle indeholde multiplikatoren inden en multiplikation.
MR kunne manuelt nulstilles. Der var adskillige ordrer der afleverede deres
beregningsresultat i MR, klar til multiplikation. Ved division fremkom
kvotienten i MR.
-
Akkumulatorregisteret AR (den tredie række på billedet).
Dette var langt det vigtigste register i forbindelse med beregninger. Man
kunne nulstille og indsætte et ønsket indhold manuelt i AR.
Bemærk at AR har en ekstra position, position 00, helt til venstre;
den anvendes til at undersøge om der er spild (det kaldte man overflow
dengang). Hvis position 0 og position 00 har forskelliget indhold er der
spild.
-
Lang akkumulator ARMR. AR og MR sat i forlængelse af hinanden
udgjorde den lange akkumulator. Fortegnet var position 0 i AR, og position
0 i MR blev ikke brugt. Ved en lang multiplikation fremkom produktet af
to 40-bits tal i ARMR; og ved division skulle tælleren stå
i ARMR, og kvotienten blev da 40 bit lang. Derfor kunne man ved skiftevis
at udføre multiplikation og division opnå meget stor nøjagtighed
i beregningerne.
-
Adresseregisteret AS (dette register befinder sig i fjerde række
på billedet og består af 11 binære positioner, nemlig
nr. 2 til 12 fra venstre). Dette register indeholdt adressen i den ordre
der var ved at blive udført (den aktuelle ordre). De 11 positioner
er netop tilstrækkeligt til adressering af de 2048 hac i ferritlageret.
-
Operationsregisteret OP (dette register befinder sig til højre
for AS på billedet, nemlig positionerne nr. 14 til 20). Her finder
vi operationskoden for aktuelle ordre. De 7 binære positioner giver
mulighed for 128 forskellige ordrer, og de blev næsten alle brugt.
Der var dog enkelte blindordrer ind imellem, hvoraf nogle senere blev reserveret
til bestemte formål i forbindelse med udvidelser af Dask. Et eksempel
er sekvenshoppet til det syede lager (se 1. del af dette skrift).
-
Indeksregistrene IRB, IRC og IRD (det er de tre 11-bits registre
under hinanden til højre for AS og OP). Disse registre blev brugt
til adressemodifikation af AS-adressen, nemlig sædvanlig indicering
som det også kendes i moderne computere. Indeksregisteradressen blev
angivet af de to bits i ASOP registeret, der ikke er omtalt i det forrige,
nemlig position nr. 1 og 13 på billedet. 00 i disse positioner betød
ingen indicering, 01 betød IRB, 10 betød IRC og 11 betød
IRD. At disse positioner ikke ligger samlet i ordreformatet har noget at
gøre med at Dask skulle være kompatibel med SMIL i Lund. Oprindelig
var der en omskifter på kontrolbordet ved hjælp af hvilken
man kunne slå indeksfunktionen fra og til; hvis den var slået
fra var Dask kompatibel med SMIL. Denne mulighed blev dog mig bekendt aldrig
udnyttet, og på et vist tidspunkt blev omskifteren fjernet. Graveringen
på kontrolbordet kalder forøvrigt indeksregistrene for hhv.
IR1, IR2 og IR3, men disse betegnelser blev aldrig benyttet i praksis.
-
Kontrolregisteret KR (den femte række på billedet, de
11 positioner længst til venstre). Dette register indeholdt adressen
på den celle i lageret hvorfra aktuelle ordre blev hentet for at
blive udført. Adressen på den næste ordre er således
almindeligvis 1 større end indholdet af KR (en ordre er 20 bit lang,
altså en hac). Som det ses på billedet kunne man modificere
indholdet i KR manuelt, hvorved man kunne springe rundt i programmet i
testfasen.
De øvrige registre på billedet var til glæde for teknikerne,
og sagde ikke koderne noget. Så vidt jeg ved kunne man her følge
med i mikroprogrammerne på Dask, og se hvad der skete under afvikling
af en enkelt ordre. Mikroprogrammerne var realiseret i hardware med logiske
kredse, og Dask var altså hvad man senere kom til at kende som en
RISC-computer. Disse tekniske registre vil jeg ikke omtale nærmere
her, for det ved jeg ikke meget om.
Derimod kan der være god grund til at omtale det, der på
billedet befinder sig under rækkerne med registre. Lige under registrene
finder vi diverse omskiftere, og nederst på billedet er der nogle
vippekontakter til venstre for højttaleren og nogle trykknapper
til højre for højttaleren.
Længst til venstre i gruppen af omskiftere befinder sig et par
knapper, der tilsammen udgør en slags speeder for Dask. Knap nr.
to fra venstre har følgende indstillinger: GANG, TRIN og VARIABEL
HASTIGHED, plus fem andre indstillinger. Hvis denne omskifter står
på GANG når Dask startes, så spæner maskinen af
sted så hurtigt den kan; hvis den står på TRIN bliver
der kun udført én ordre, nemlig den der vises i ASOP-registeret;
og hvis den står på VARIABEL HASTIGHED, så kan man benytte
knappen længst til venstre til at få Dask til at køre
langsommere (fra meget langsomt til fuld speed). For at få
denne speeder aktiveret skulle man så vidt jeg husker hive den ud
inden man indstillede hastigheden, og når man trykkede den ind stoppede
maskinen igen. Meningen er at man så (måske) kan følge
med i hvad der sker når lamperne på kontrolbordet blinker.
De fem andre indstillingsmuligheder var til teknisk vedligeholdelse og
fejlfinding; her kunne man følge de enkelte faser i mikroprogrammerne
på en eller anden måde, som jeg ikke kender til.
Den tredie omskifter fra venstre på billedet af kontrolbordet
hedder 56-HOP og har indstillingerne FRA og TIL. I ordrerepertoiret for
Dask findes der en særlig ordre, 56-hoppet, der smager på indstillingen
af denne omskifter. Hvis omskifteren står i positionen FRA virker
56-hoppet som en blindordre, men hvis omskifteren står i positionen
TIL virker 56-hoppet som et sekvenshop (se senere). På denne måde
kunne man på udvalgte steder i sit program indsætte 56-hop
til fx fejludskrifter o.lign., som så kunne springes over ved blot
at stille omskifteren på FRA. Nytten af denne omskifter var tvivlsom;
den blev senere overflødiggjort af et meget udbygget kompleks af
kontrolprogrammer (debuggere på nudansk). Som tidligere nævnt
var der oprindeligt en omskifter til at slå indeksfunktionen til
og fra, og uheldigvis sad den lige ved siden af 56-hop omskifteren. Jeg
har ved flere lejligheder set febrilske kodere i kampens hede tage fejl
af de to omskiftere, men højst overraskende kørselsresultater
til følge.
De næste tre omskiftere på billedet af kontrolbordet vedrører
valg af ydre enhed for trykning. De to store omskiftere er for hhv. 5-kanals
og 8-kanals udskrift. Man kan vælge imellem at få output på
det medium der fremgår af den aktuelle trykkeordre (stilling 0),
eller på skrivemaskine (stilling S), eller på perforator (stilling
P), eller på både skrivemaskine og perforator (stilling
S+P). Den lille omskifter imellem de to store er til valg af om 8-kanals
udskriften fremkommer på grundlag af 7-bit alfabetet (analogt til
ASCII) eller et særligt 8-bit alfabet. Valg af inputmedium skete
ved hjælp af en omskifter på strimmellæseren. Valg af
linieskriver skete på den måde at hver af de store omskiftere
faktisk er delt i to omskiftere oven på hinanden; den nederste (store)
omskifter blev brugt til valg af linieskriver. Det var i det hele taget
et meget kompliceret system der krævede en del indlæring af
operatøren.
Endelig er der på billedet vist en lille omskifter øverst
til venstre for højttaleren; det er højttalerens volumenkontrol.
I den nederste række på billedet af kontrolbordet ses nogle
vippekontakter til venstre for højttaleren, og nogle trykknapper
til højre for højttaleren.Vippekontakterne er, taget fra
venste mod højre:
-
START. Dette var startknappen. Den virkede som beskrevet ovenfor i forbindelse
med omskifteren for TRIN/GANG.
-
STOP. Stopknappen.
-
De to næste vippekontakter er til forskellige former for kontroludskrifter.
De virkede når maskinen var stoppet. KONTROLUDSKRIFT ENKEL gav så
vidt jeg husker en udskrift af indholdet af registrene (på sedecimal
form), mens KONTROLUDSKRIFT ETIKET i begyndelsen så vidt jeg husker
desuden gav en udskrift af ferritlagerets indhold. Efter fremkomsten af
Jørn Jensens kontrolprogrammer gav KONTROLUDSKRIFT ETIKET udhop
til disse. Udskrifterne kom som en strimmel fra perforatoren, med mindre
man valgte et andet outputmedium med omskifterne oven over.
-
INDLÆSNING STRIMMEL. I begyndelsen af computerens historie, før
ROM-lagrene blev opfundet, var det et problem at få det allerførste
program ind i maskinen (operativsystemet er jo, når alt komer til
alt, også et program). For at løse dette problem fremstillede
man såkaldte koldstartprogrammer (bootstrap loadere), der er små
programmer der får hele systemet til at rejse sig fra næsten
ingenting. Disse programmer findes permanent i computere i vore dage, men
på Dasks tid, før tromlen blev tilsluttet, havde koldstartprogrammet
form af en lille strimmel, der skulle sættes i strimmellæseren.
Denne strimmel skulle så læses ind i Dask ved hjælp af
en særlig ordre, med operationskode 19 sedecimalt. Virkningen af
denne ordre er at der læses 10 sedecimale cifre fra strimlen, som
lagres i den helcelle, der står i ordrens adresse. Vippekontakten
INDLÆSNING STRIMMEL bevirkede at der kom en ordre med adresse 0 i
AS og kode 19 i OP. Når man herefter trykkede på START blev
denne ordre udført, og der blev indlæst 10 sedecimale cifre
til celle 0. Disse 10 sedecimale cifre kan fortolkes som to ordrer,
da hver ordre fylder en halvcelle. Med én ordre kan man altså
indlæse to. Den ene af disse (eller begge) kunne være 19-ordrer,
hvorved man yderligere fik ordrer i overskud. Nu betår kunsten i
at lave et program der efterhånden opbygger et så stort overskud
af ordrer, at der kan dannes en løkke, der sluttelig kan indlæse
hele operativsystemet. For at være helt nøjagtig må
det nævnes at indholdet i KR-registeret skulle have en ganske bestemt
værdi for at få koldstartprogrammet til at virke. Hvis KR fx
havde indholdet 7FF sedecimalt, ville næste ordre blive hentet i
celle 0 (adressering skete modulo 2048), altså netop den celle hvor
de to indlæste ordrer var lagret. Efter installation af tromlen på
Dask blev koldstart betydeligt simplere, idet operativsystemet kunne lagres
permanent på tromlen. Dog skulle de relevante tromlekanaler hentes
ned i lageret, så vippekontakten blev ikke helt overflødiggjort.
-
HOP. Vipning af denne kontakt bevirkede at der kom operationskoden for
et ubetinget hop (10 sedecimalt) i OP. Man kunne lige så godt prikke
001 0000 ind binært ved hjælp af knapperne i OP, men det var
måske noget hurtigere at bruge vippekontakten. Ved at prikke en binær
adresse ind i AS kunne man hoppe til en udvalgt del af sit program. Det
kunne fx bruges til testformål; man prikkede binære værdier
ind i registrene og hoppede manuelt til et udvalgt sted i sit program -
og så hvad der skete!
-
AR-->L. Operationskoden for en gemmeordre fremkom i OP. Ved at prikke en
binær værdi ind i AR og en lageradresse ind i AS kunne man
med denne vippekontakt få lagret den binære værdi i den
valgte celle, når gemmeordren blev udført på trin. Blev
anvendt til testformål.
-
L-->AR. Operationskoden for en henteordre fremkom i OP. Ved at prikke en
binær adresse ind i AS og udføre ordren på trin, kunne
man se indholdet i den valgte celle binært i AR. Blev anvendt til
testformål.
-
0-->REG. Denne vippekontakt nulstillede samtlige registre. Det kunne være
en fordel i testsituationer, da man så kun behøvede at prikke
alle etterne ind.
Trykknapperne til højre for højttaleren på billedet
af kontrolbordet var til tænding og slukning af de to tromler, samt
et par andre enheder jeg ikke kan huske hvad var.
Jeg håber at denne ret detaljerede beskrivelse af kontrolbordet
har givet et indtryk af Dasks logiske struktur, samt kastet nogle strejflys
over hvor primitivt det hele var.