Digital Technologies: SC/MP (1977)

 

SC/MP-based microcomputer for data acquisition

 
In 1977 when the first type microprocessors became available on the market, TNO started to investigate the possibilities for using these devices for measuring physical phenomena and collecting data. The first microprocessor we experimented with was a SC/MP or ISP.8A/600D. The microprocessor was produced by National Semiconductors (nowadays Texas Instruments) with impressive specifications 4 MHz processor and 64 kB memory.
The OEM product information of the SC/MP we received consisted of:

  • A description of the SC/MP microprocessor,
  • A leaflet about the benefits of using the SC/MP microprocessor and applications,
  • Description of the Input/Output signals of the microprocessor,
  • A functional description of the SC/MP microprocessor, and
  • A guide to operating the SC/MP microprocessor.

With the aid of an article from Dan Grove, a microcomputer instructor from Santa Clara, a microcomputer was developed to perform control and data acquisition experiments at TNO.

Hardware setup for the SC/MP microcomputer

In a non-standard case with a 220 V connection and a 5V DC converter, we installed a 12 by 15 cm wire-wrap board. On the board with socket pins, we mounted Integrated-Circuit (IC) connectors. The SC/MP processor required a 40-pin wire-wrap IC connector. Two 256 words of 4-bit Random Access Memory (RAM) were available to the user program(s). The Operating System (OS), a program to control the microcomputer, was burnt into three Read Only Memory (ROM) chips of 32 8-bit words each. Note that memory was expensive at that time (the minimising of memory use caused the later millennium problems).

The SC/MP microcomputer
The SC/MP microcomputer

The wire-wrap connections were either made with a manual wrapping tool or an electric battery-operated tool. Wire-wrapping meant: an insulated solid copper core wire was stripped for one-and-a-half to two centimetres and wrapped around a square socket pin. The microcomputer, the memory ICs, the control electronics, and the input- and output circuitry were all mounted on the wire-wrap board. The wire-wrap connections were gas-tight; all wire-wrapped connections still operate flawlessly.
The 8-bit parallel data input for the microcomputer was performed by eight switches and a load-data push-button on the front panel of the microcomputer. The output to the user occurred using eight LEDs on the panel.

The closed SC/MP box
The closed SC/MP box and ‘keyboard’ module

The execution of a user program by the microprocessor system could be affected by four operating switches on the operations panel:

  • INIT/ABORT: A push button halts the execution of the program initialises the microprocessor, and resets the program counter to zero.
  • PROG HALT switch: If a HALT instruction was programmed, the instruction was recognised and the execution of the program topped but could be activated again using the RUN-switch
  • SINGLE INSTR switch: If switched ON (to the side of the printed text), the execution of a user program advanced one instruction each time the RUN button was pushed.
  • RUN: After every break in the execution of a program (by the INIT/ABORT switch, after a HALT action, or by the SINGLE INSTRUCTION function), the internal ROM program (Operating system) or the execution of the user program continued.
The operating panel of the SC/MP
The operating panel of the SC/MP

 

Board design of the microcomputer
Board design of the microcomputer

At the upper centre of the diagram, the eight output LEDs are shown. They were addressed by the address lines AD08 and AD09. The signal-line WDS (Write Strobe Output) is displayed below the diodes. The eight data-input switches with buffers to prevent rumbling inputs can be found on the left side of the scheme.

The ROM ‘operating system’ program which reads actions from the operations’ panel

Object code   Mnemonic Description
    .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

 

An example program: a counter 

Running lights
A counter

 

 

Mnemonic Object code Description
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