Digitale techniek: SC/MP (1977)

 

SC/MP-gebaseerde microcomputer voor datacollectie

 
Toen in 1977 de eerste type microprocessoren op de markt kwamen, begon TNO met het onderzoeken van de mogelijkheden om deze apparaten te gebruiken voor het meten van fysische parameters en het verzamelen van gegevens uit meetopstellingen. De eerste microprocessor waarmee we experimenteerden was een SC/MP oftewel ISP.8A/600D. Die microprocessor werd geproduceerd door National Semiconductors (tegenwoordig Texas Instruments) met de voor die tijd indrukwekkende specificaties van een 4 MHz-processor en 64 kB geheugen.
De OEM-productinformatie van de SC/MP die we ontvingen bestond uit:

  • Een beschrijving van de SC/MP microprocessor
  • Een folder over de voordelen van het gebruik van een SC/MP microprocessor en de mogelijke toepassingen daarvan
  • Beschrijving van de Input/Output signalen van de microprocessor
  • Een functionele beschrijving van de SC/MP microprocessor, en
  • Een handleiding over hoe de SC/MP microprocessor gebruikt moest worden.

1019/5000
Met behulp van een artikel geschreven door Dan Grove, een microcomputer-instructeur uit Santa Clara, is een microcomputer ontwikkeld om bij TNO besturings- en datacollectie-experimenten uit te voeren.

De SC/MP microcomputer

In een niet-standaard behuizing met een 220 V-aansluiting en een 5V gelijkstroomtransformator is een wire-wrap bord van 12 bij 15 cm geplaatst. Op het bord met pennen zijn daarna IC-connectoren (Integrated Circuit) gemonteerd. De SC/MP-processor vereiste een 40 polige wire-wrap IC-connector. Twee 256 woorden van vier bits Random Access Memory (RAM) waren beschikbaar voor gebruikersprogramma(s). Het besturingssysteem (OS), een programma voor het besturen van de microcomputer, werd in drie Read Only Memory (ROM)-chips van elk 32 8-bits woorden gebrand. Geheugen was overigens op dat moment heel duur (het minimaliseren van het geheugengebruik veroorzaakte de latere millenniumproblemen).

De SC/MP microcomputer
De SC/MP microcomputer

De wire-wrap-verbindingen werden gemaakt met een wire-wrap pen of met een elektrisch gereedschap op batterijen. Wire-wrapping betekende: de isolatie van een geïsoleerde massieve koperen kerndraad werd gestript over anderhalve tot twee centimeter en gewikkeld rond een vierkant pin. De microcomputer, de geheugen-IC’s, de besturingselektronica en de invoer- en uitvoerschakelingen werden zo allemaal op het bord gemonteerd. De wire-wrap-verbindingen waren gasdicht; alle wire-wrap verbindingen werken nog steeds foutloos.
De 8-bits parallelle gegevensinvoer voor de microcomputer werd uitgevoerd met acht schakelaars en een gegevensinvoer-drukknoppen op het voorpaneel van de microcomputer. De uitvoer naar de gebruiker gebeurde door middel van acht LED’s op het voorpaneel.

De gesloten SC/MP behuizing en 'keyboard
De gesloten SC/MP behuizing en ‘keyboard’

De uitvoering van een gebruikersprogramma door het microprocessorsysteem kon worden beïnvloed door vier bedieningsschakelaars op het bedieningspaneel:

  • INIT/ABORT-drukknop stopt de uitvoering van het programma, initialiseert vervolgens de microprocessor en stelt de programmateller terug op nul. </ li>
  • PROG HALT-schakelaar: als een HALT-instructie was geprogrammeerd, werd die instructie herkend. De verdere uitvoering van het programma stopte maar kon deze opnieuw worden gestart met behulp van de RUN-schakelaar </ li>
  • SINGLE INSTR-schakelaar: indien ingeschakeld (aan de kant van de afgedrukte tekst), dan ging het gebruikersprogramma één instructiestap verder bij iedere keer dat de RUN-knop werd ingedrukt. </ li>
  • RUN: na elke onderbreking in de uitvoering van een programma (door de INIT/ABORT-schakelaar, na een HALT of door de SINGLE INSTR.-functie), ging het interne ROM-programma (besturingssysteem) of de uitvoering van de gebruikersprogramma verder. 
 Het voorpaneel van de SC/MP
Het voorpaneel van de SC/MP

 

Circuitontwerp van de microcomputer
Circuitontwerp van de microcomputer

In het ontwerp hierboven zijn de acht uitgangsleds te herkennen. Ze werden geadresseerd door de adreslijnen AD08 en AD09. De signaalleiding WDS (Write Strobe Output) wordt onder de diodes weergegeven. De acht data-invoerschakelaars (links) zijn voorzien van een bufferschakeling om het klapperen van de signalen te voorkomen.

Het ROM ‘besturingssysteem’ dat ingegeven instructies leest van het schakelpaneel

Object code   Symbolische code Beschrijving
    .TITLE PANEL  
08   NOP No operation
C401   LDI 1 ACCumulator-register=1 (Address switches)
37   XPAH 3 Put this (1) into pointer register 3 High
C403   LDI 3 ACCumulator-register 3
31   XPAL 1 Put this (3) into pointer register 1 Low
C403   LDI 3 ACCumulator- register 3
01   XAE Exchange (3 words to fetch) with Extension Register
06 TEST: CSA ACCumulator=switch LOAD DATA (SR)
D420   ANI X’20 AND this with 20HEX
98FB   JZ TEST Loop TEST, if the switch is not served (value=0)
06 WAIT: CSA ACCumulator=switch LOAD DATA (SR)
D420   ANI X’20 AND this with 20HEX
9CFB   JNZ WAIT Loop until the switch is released (value#0)
31   XPAL 1 ACCumulator=0
982B   JZ LDDATA Fetch 8-bit data (word) from switches
31   XPAL 1 Exchange Pointer-Register 1 Low
C403   LDI 3  
60   XRE OR with ACCumulator=3
980A   JZ STHI Store first word
C402   LDI 2  
60   XRE OR with ACCumulator=2
980D   JZ STLO Store second word
C401   LDI 1  
60   XRE OR with ACCumulator=1
9813   JZ CNT  
C300 STHI: LD (3) Read Servicepanel (switches)
36   XPAH 2 for RAM address to pointer 2 High
C402   LDI 2 Initialise a second word to fetch
01   XAE  
90DB   JMP TEST  
C300 STLO: LD (3) Read Servicepanel (switches)
32   XPAL 2 for address within RAM to pointer Low
C300   LD (3)  
35   XPAH 1 and to pointer 1 High
C401   LDI 1  
01   XAE  
90D0   JMP TEST Fetch third word (8-bits)
C400 CNT: LDI 0 Initialize fetching of user-program
31   XPAL 1  
C300   LD (3) Fetch number of words user-program
01   XAE  
90C8   JMP TEST  
31 LDDATA: XPAL 1  
C300   LD(3) Fetch data from switches
CE01   ST @ 1 (2) Store data into RAM (pointed by 2)
C4FF   LDI -1 ACCumulator= -1
02   CCL CY/L flag is cleared in Status Register
70   ADE ACC=ACC+E+CY/L (algebraically)
9803   JZ EXC All data for the user-program fetched;
execute it
01   XAE  
90BA   JMP TEST  
35 EXC: XPAH 1 Restore the start address of the user-program
32   XPAL 2 within RAM into pointer 2 Low
9200   JMP (2) Start program
    .END  
      ACC=Accumulator, E=Extension Register
CY/L flag = Carry/Link flag in Status Register

Een voorbeeldprogramma: een teller 

Running lights
Een teller

 

Symbolische code Object code Beschrijving
NOP 08 No operation
LDI 3 C4 Initialize RAM pointer (3) by
  03 exchanging ACCumulator and
XPAH 1 35 Pointer 1-High (one of three)
LDI 0 C4 Start with value: zero
  00  
ST COUNT C8 in COUNT (RAM address)
  09  
LOOP: ILD COUNT A8 COUNT = COUNT + 1
  07  
ST @ 0 (1) C9 Show this value (1) on LED
  00 display (indirectly from COUNT)
DLY: FF 8F Wait maximum delay time FF
  FF (delay instruction DLY)
JMP LOOP 90 Jump back to LOOP
  F8 Increment value in COUNT 
address of COUNT . COUNT