Computerhistorie: Micro Elektronische Rekenmachine (1970)
Micro Elektronische Rekenmachine (“MIER”) – 1966
De Micro Elektronische Rekenmachine (MIER) werd in 1966 ontwikkeld en gebouwd. Dat was in de tijd dat de micro-elektronica nog maar net werd toegepast en men op laboratoriumniveau nog eigen rekenmachines bouwde, in dit geval door een team van vier medewerkers. Bij de opzet van de MIER werd uitgegaan van de eerdere ervaringen op het Physisch Laboratorium TNO die met digitale technieken voor rekenschakelingen waren opgedaan.
De MIER werd uitgevoerd met de eerste geïntegreerde schakelingen van de fabrikant Texas Instruments. Deze geïntegreerde schakelingen hadden een flat package uitvoering, waarbij specifieke technieken voor de montage werden gebruikt. Het ringkerngeheugen van 4096×20 bits werd apart aangeschaft. De elektronische besturing van het geheugen werd in eigen beheer ontwikkeld. De programma-invoer voor de MIER werd of manuaal met schakelaars op het bedieningspaneel of met een ponsbandlezer gedaan.
De IC’s van het eerste prototype werden ingeklemd in speciale voetjes. Samen met de met de hand aangebrachte bedrading leidde dit tot kaarten met reusachtige afmetingen. Het prototype kreeg daarom de naam MAMMOET.
De MIER was een computer voor real-time procesbesturing met een zeer beperkte instructieverzameling, die voldeed voor de real-time aansturing die voor ogen stond. Met de kennis van nu (2019) zou volgens de ontwerper het acroniem ‘MIER’ beter kunnen staan voor: Minimal Instruction set Electronische unit voor Real-time procesbesturing.
De MIER werd vanaf maart 1971 gebruikt bij de besturing van de Computer Assisted Inertialess Scanning System Array (CAISSA radar). Eind december 1975 werd geconstateerd dat er steeds vaker storingen optraden in de MIER waardoor het FUCAS radarprogramma ernstig gehinderd zou kunnen worden. Gekeken werd naar een vervangend systeem, een Alpha-LSI, dat uiteindelijk in 1977 werd geïnstalleerd.
Globale opbouw en werking van de MIER
Informatie wordt via Read Amplifiers (RA) uit het uit het geheugen M (Memory) gehaald en weggeschreven in het Memory Register (MR). Informatie dat naar het geheugen moet, wordt eerst in het MR geplaatst en vervolgens via Write Amplifiers (WA) in het geheugen weggeschreven. Het MR heeft hierbij de functie van bufferregister.
Het lezen van informatie uit het geheugen naar MR wordt steeds gevolgd door het weer terugzetten van de inhoud van het MR naar dezelfde geheugenplaats. Afhankelijk van de soort instructie kan de inhoud van MR voor het terugzetten echter worden gewijzigd. Het uitlezen en terugplaatsen naar het geheugen wordt in één geheugencyclus uitgevoerd.
Het Memory Address Register (MAR) bepaalt het adres van de geheugenplaats die wordt gelezen. De uitgangen van het MAR zijn daartoe verbonden met decoderingsmatrices. Het MAR is 13 bits breed. Hiermee zijn in principe 8192 (213) geheugenadressen te selecteren. De MIER is echter uitgevoerd met een geheugen met 4096 woorden die door de laatste 12 bits geadresseerd worden.
De woordbreedte van het geheugen (instructies of data) is 20 bits. Het least significant bit (LSB) van het woord is het parity bit.
Bij het schrijven van informatie (19 bits) wordt het parity bit gegenereerd. Is het aantal bits met waarde 1 een even getal, dan wordt de parity op een gezet. Is het aantal bits met waarde 1 oneven, dan wordt de parity nul. Na het lezen van een woord uit het geheugen naar het MR wordt met een PArity Check (PAC) schakeling gecontroleerd of het totaal aantal bits met waarde 1 in het woord van 20 bits oneven is. Zo niet, dan is er een leesfout opgetreden. Verdere verwerking stopt met de oplichtende indicatie “parity fault” op het bedieningspaneel.
Is het gelezen woord een instructie, dan wordt deze in het Memory Register (MR) gezet. Het adresgedeelte wordt overgebracht naar het Data Address Register (DAR) en het instructiegedeelte naar het Instruction Register (IR). De beide registers vormen samen met het Modification Register (MOR), Program Address Register (PAR), Memory Address Register (MAR) en de schakeling AU2 (Adding Unit 2) het besturingsgedeelte van de MIER.
Is het gelezen woord geen instructie, dan wordt deze na in het MR gezet te zijn, gekopieerd naar een van de data registers Accumulator (AC), Multiplier/Quotient (MQ), Input/Output Adres register (IAO), Input/Output Data register (IAD) en de schakeling AU1 (Adding Unit 1). Ook kan deze waarde naar één van de Flip-Flops (FF) of naar het Modificatie Register (MR) worden gekopieerd.
Iedere instructie heeft een schakel- en rekenperiode van tien schakeltijden van 0.5 µsec (minor clock cycle). Bij de verwerking van de instructies voor vermenigvuldigen, delen en schuiven zijn overigens meer dan tien schakeltijden nodig.
Aan een woord was niet te zien of het een instructie- of data-woord was. Het systeem veronderstelde dat op de adressen die het programma afliep steeds instructies stonden. In een instructie kon het adres van een ander woord worden aangegeven. Met de inhoud van zo’n woord kon bijvoorbeeld een handeling worden verricht.
Een instructiewoord is samengesteld uit een 13-bits adresdeel (bits 1 tot en met 13) en een 6-bits instructiedeel (bits 14 tot en met 19). Die laatste groep bits worden overgenomen in het Instructie Register (IR). Het adresdeel wordt overgenomen in het Data Address Register (DAR). Wil een instructie zinvol uitgevoerd kunnen worden, dan zal in de schakelperiode nog een tweede geheugencyclus worden opgenomen waarin de te bewerken informatie uit het geheugen gelezen wordt. Pas daarna kan de rekenperiode gestart worden.
Bij data geeft bit 1 het teken aan: 0= positief, 1= negatief. De absolute waarde wordt gevormd door bits 2 tot en met 19.
De computercyclus werkte als volgt:
- Genereer het adres voor de eerstvolgende instructie
- Zet adres in MAR
- Lees het geheugen op het adres dat met het MAR wordt aangegeven
- Zet de instructie in het Memory Register (MR)
- Kopieer de instructie uit het MR naar het Instructie Register (IR)
- Kopieer adresdeel uit MR naar het Data Address Register (DAR)
- Zet de instructie uit het MR op de met MAR aangewezen plaats in het geheugen (herschrijf)
- Kopieer het adres uit het DAR naar het MAR
- Lees data vanaf het MAR-adres uit het geheugen
- Zet de data in het MR
- Zet de inhoud van het MR terug in geheugen op het MAR-adres (herschrijf)
Dit schema geldt voor iedere MIER instructie.
Het starten van een programma gebeurt met het opgeven van het startadres via de paneelschakelaars ‘Start Address Switches’ (STAS).
MIER instructierepertoire
Instructie | Werking | Instructiecode |
---|---|---|
Clear and add | AC:= MR | ADC 000 000 |
Clear and add absolute value | AC:= MR | AVC 000 001 |
Add | AC:= AC + MR | ADD 000 010 |
Add logical | AC:= logic OR(AC, MR) | ADL 000 011 |
Clear and subtract | AC:= – MR | SUC 000 100 |
Subtract | AC:= AC – MR | SUB 000 101 |
Multiply | AC:= MQ * MR | MLY 000 110 |
Multiply logical | AC:= logic AND(MQ, MR) | MLL 000 111 |
Divide | MQ:= AC / MR | DIV 001 000 |
Transfer Unconditional | Jump to DAR adres | TUN 001 001 |
Transfer and Set Return Address |
Store address+1 at DAR; next instruction is at DAR+1 | TSR 001 010 |
Transfer to Return Address | TTR 001 011 | |
Transfer if AC < 0 | Jump to DAR if AC<0 | TNE 001 100 |
Transfer if AC = 0 | Jump to DAR if AC=0 | TZE 001 101 |
Store AC | AC to MAR address | SAC 001 110 |
Load MQ | AC:= MQ | LMQ 001 111 |
Store MQ | MQ:= AC | SMQ 010 000 |
Load MOR | MOR:= AC | LMO 010 001 |
Store MOR | AC:= MOR | SMO 010 010 |
Shift AC + MQ bits left/right | Shift AC and MQ content; least significant bit of AC becomes sign bit of MQ | SHI 010 011 |
Load IOD internal (via DAR) | MR to IOD | LDI 010 100 |
Load IOD external (via IOA) | MR to IOD | LDE 010 101 |
Store IOD internal (via DAR) | IOD to MR | SDI 010 110 |
Store IOD external (via IOA) | IOD to MR | SDE 010 111 |
Load IOA | MR to IOA | LAD 011 000 |
Load IOD (address) | MAR to IOD | LAA 011 101 |
Input | IC to IOD/IOA | INP 011 010 |
Output | IOD/IOA to IOC | OUT 011 011 |
NOP (no operation) | NOP 011 100 | |
Set Flag-flip-flop n | Flag-flop-flop n:= 1 | SFF 011 101 |
Reset FLAG-Flip-flop | Flag flip-flop n:=0 | RFF 011 110 |
Stop | Stop the MIER | STP 011 111 |
Address Modification (indirect addressing) |
instructions above with MAR:= DAR + MOR | 1xx xxx |
Ponsband
De 8-kanaals ponsband wordt gemaakt met een elektrische schrijfmachine die gekoppeld is aan de PROgramma ponsband Samensteller (PROSA). De PROSA-elektronica zet de schrijfmachinecode om in een code die de MIER kan lezen. De woordinhoud wordt verdeeld in groepen van drie bits: 1, 2-4, 5-7, 8-10, 11-13, 14-16 en 17-19. Spoor 8 bevat het parity-bit (per teken). Zowel de ponsbandlezer als de -ponser was eigen bouw,. met name vanwege de van ASCII-afwijkende code die de MIER gebruikte.
Bij het inlezen van de tape wordt het parity-bit gebruikt om de lees-procedure te bewaken. Bij een oneven gelezen aantal bits (error) wordt het lezen van de tape gestopt.
Het controle-spoor (spoor 7) van de ponsband regelt de opslag in het geheugen van een instructie- of datawoord en of de tape volledig is ingelezen. Een First Address Block (FOB) codering wordt als eerste gelezen om de (start)plaats in het geheugen van het programma aan te geven. Hiermee is het mogelijk om meer tapes achtereenvolgens in te lezen en te laden.
Een ponsband kan ook alleen data bevatten. Om een dergelijke ponsband in te lezen bevindt zich reeds een vast programma in de MIER.
Vaste programma’s
De Mier heeft drie ingebouwde (hardware) programma’s. Daarnaast zijn met de ingebouwde Flip-Flop’s, Sense Switches en de Interrupt-besturing eigen programma’s uit te voeren:
- Hoofdprogramma
Het starten van dit programma kan op de volgende wijze:- Met stand “CONTINUE” gaat het programma verder vanaf punt, waarop werd gestopt.
- Met stand “REPEAT” herhaalt de bewerking, waarmee werd gestopt.
- Met stand “PRESET” start met het adres dat door schakelaars is ingesteld (13 STAS schakelaars).
Bij het in werking zijn van het hoofdprogramma brandt de signalering “COMPUTER”.
Het stoppen van het hoofdprogramma kan op de volgende manieren:- Met de instructie “STOP”.
- Met de schakelaar “SUC” (Stop ongeconditioneerd).
- Met de schakelaar “SC” (Stop Conditioneel).
- Met de schakelaar “READER” continu ingeschakeld.
- Buiten de eigen capaciteit raken: signaal “OVERFLOW’. Met de schakelaar “OVERFLOW INHIBIT” wordt dit signaal onderdrukt. Schakelaar “OVERFLOW CLEAR” maakt de weg weer vrij.
- Met onjuiste instructies, waarbij de pariteit niet correct is.
- Met schakelaar “STEP” doorloopt de machine één schakeltijd (0.5 µsec).
- Tape-Reader programma.
Is in actie bij signalering “READER”. Lezen start:- Bij het lezen van een “SET Flip-Flop (011 101)” instructie in het hoofdprogramma.
- Na een actie met de schakelaar “READER”. Deze stopt ook het programma.
- Met een stop “SUC” instructie. Het programma kan daarna worden voortgezet.
- Het starten wordt ook met de schakelaar “start inschr/uitl” met de keuzeschakelaar in de stand “WRITE” uitgevoerd.
- Met de schakelstanden “cont” of “cont.count” kan het lezen eveneens worden gestart.
- In- en uitleeshulpprogramma’s
- Met de hand invoeren van het geheugenadres ( 13 STAS schakelaars) en data (19 DSR schakelaars) op het bedieningspaneel.
- Een geheugenadres met STAS schakelaars ingesteld, naar het MR-register halen en zichtbaar maken.
- De DSR schakelstanden in een register zetten.
- Besturing van specifieke schakelingen, de flip-flops, Sense Switches en de Interrupt Switch.
- In een programma kunnen de waarden van de flip-flops en Sense Switch worden gezet in accumulator AC1. Vanuit deze accumulator kunnen vooraf bepaalde acties worden uitgevoerd.
- Door het zetten van een flip-flop bijvoorbeeld vanuit een meetsysteem wordt een programma onderbroken of als deze flip-flop op het bedieningspaneel van de MIER is ingesteld.
Er wordt dan een subroutine uitgevoerd. Na afloop wordt het onderbroken programma voortgezet.
Bronnen
- Ir. J.J.A. Vogel, Handleiding voor gebruikers van de MIER (1972)
- Bram Leenhouts en het FEL-TNO: Herinneringen 1949-1987.