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 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 operate 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 pins wire-wrap IC-connector. Two 256 words of four bits 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 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-bits parallel data-input for the microcomputer was performed by eight switches and a load-data push-button on front-panel of the microcomputer. The output to the user occurred by means of eight LEDs on the panel.
The execution of a user program by the microprocessor-system could be affected by four operating switches on the operations panel:
- INIT/ABORT 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.
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 at the left side of the scheme.
The ROM ‘operating system’ program which read actions from the operations panel
|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 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 switch is released (value#0)|
|982B||JZ LDDATA||Fetch 8-bits data (word) from switches|
|31||XPAL 1||Exchange Pointer-Register 1 Low|
|60||XRE||OR with ACCumulator=3|
|980A||JZ STHI||Store first word|
|60||XRE||OR with ACCumulator=2|
|980D||JZ STLO||Store second word|
|60||XRE||OR with ACCumulator=1|
|C300||STHI:||LD (3)||Read Servicepanel (switches)|
|36||XPAH 2||for RAM address to pointer 2 High|
|C402||LDI 2||Initialize second word to fetch|
|C300||STLO:||LD (3)||Read Servicepanel (switches)|
|32||XPAL 2||for address within RAM to pointer Low|
|35||XPAH 1||and to pointer 1 High|
|90D0||JMP TEST||Fetch third word (8-bits)|
|C400||CNT:||LDI 0||Initialize fetching of user-program|
|C300||LD (3)||Fetch number of words user-program|
|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|
|9803||JZ EXC||All data for user-program fetched, execute it|
|35||EXC:||XPAH 1||Restore start-address of user-program|
|32||XPAL 2||within RAM into pointer 2 Low|
|9200||JMP (2)||Start program|
|ACC=Accumulator, E=Extension Register
CY/L flag = Carry/Link flag in Status Register
An example program: counter
|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|
|ST COUNT||C8||in COUNT (RAM address)|
|LOOP: ILD COUNT||A8||COUNT = COUNT + 1|
|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|