National Semiconductor‘s SC/MP (pronounced scamp) for Simple Cost-effective Micro Processor, is an early 8-bit microprocessor which became available in April 1976. It was designed to allow systems to be implemented with the minimum number of additional support chips. SC/MP included bus-access control signals that allowed several processors to share a common memory bus in a daisy-chained multiprocessor arrangement, or to support direct memory access hardware.
The SC/MP was followed by the SC/MP II, also known as the INS8060. National Semiconductor later introduced the 70-Series (also known as the INS8070 Series).[1][2] Some later sources refer to this family as “SC/MP III” or “SC/MP-3”,[3] terminology not used in contemporary National Semiconductor documentation.[1][2]
The programmer-visible model comprises an 8-bit accumulator, an 8-bit extension register, an 8-bit status register, and four 16-bit pointer registers, one of which is used as the program counter. Memory-reference addressing is page-based, with address arithmetic performed on the low 12 bits of the address.[4][5]
Designed to be as low-cost as possible, the SC/MP emphasized simple control logic and built-in multiprocessor bus arbitration. It is significantly slower than contemporary designs like the Intel 8080 or MOS 6502.[a] Another oddity was that the program counter could only increment the lower 12-bits of the 16-bit address; the upper 4-bits had to be set using special instructions. The result was that instructions accessed main memory as sixteen 4 KB “pages” and reaching memory outside those pages required multiple instructions.
The combination of slow speed and paged memory limited its attractiveness outside the embedded markets it was aimed at, and in this market it competed against the Fairchild F8 which had a number of useful additional features and cost less than a dollar more at 100-unit quantities. The system saw relatively little use. Signetics was identified as an authorized second source and published SC/MP II documentation, but it is unclear whether it manufactured any SC/MP devices.
Design
The SC/MP instruction set consists of 46 instructions.[4]
ALU and main registers
The arithmetic logic unit (ALU) is accumulator-based, with a single 8-bit accumulator, AC. National Semiconductor described the SC/MP’s arithmetic as parallel, binary, fixed-point and two’s-complement, with support for two-digit BCD addition using the DAE (Decimal Add Extension) instruction.[4][6]
A second 8-bit register, “Extension”, or E, is an 8-bit auxiliary to the accumulator (AC), but unlike AC, it is not a general-purpose register. It cannot be loaded directly from memory and is accessed only through a small set of single-byte instructions that operate between E and AC.
Two of these, LDE and XAE, move or exchange data between the two registers. The others, ANE, ORE, XRE, ADE, DAE, and CAE use the contents of E as the second operand in arithmetic or logical operations on AC.[7][8]
The E register also serves several other roles in the architecture. It functions as the shift register for the serial I/O system, used by the SIO instruction. Each execution shifts E right by one bit, placing the least-significant bit on the SOUT pin and shifting in a new bit from SIN. Transmitting or receiving a full byte requires repeated SIO instructions. To transfer serial data to or from memory, values can be exchanged between E and AC. Logical operations on AC can then test or mask values read into E.[9][10][11]
The E register can also be substituted for the displacement byte in PC-relative, indexed, and auto-indexed memory-reference instructions. In these instructions, the displacement byte normally represents a signed offset from −127 to +127. The value 80 hexadecimal is a special case: instead of representing a displacement of −128, it causes the processor to use the contents of E as the displacement when forming the effective address.[12][13]
The separate Status Register (SR) is 8 bits wide. The three least-significant bits, 0 through 2, are connected directly to output pins, providing an easy way to output single bits.[14] A further two pins, Sense A and Sense B, are connected to bits 4 and 5. When interrupts are enabled, Sense A serves as the interrupt request input (see details below).[15] Interrupts can be disabled by setting bit 3, Interrupt Enable (IE), to 0 with the Disable Interrupt instruction, DINT, and enabled with IEN; the Status Register can also be transferred to and from AC and manipulated there. Sense B is an additional single bit input. Bits 6 and 7 are the overflow flag and carry/link flag.[16] Although there is no explicit zero flag, zero is determined from the current content of AC.
Addressing and index registers

Like most 8-bit microprocessors of the era, the SC/MP is based around a 16-bit address bus and an 8-bit data bus. To reduce pin count, the external address bus contains only 12 pins, multiplexing 4 pins on the data bus to create a complete 16-bit address.[17] The processor only directly modifies the lower 12-bits of the program counter. There are separate instructions to set the upper four bits by copying an 8-bit value into the high byte. This provides a memory map of sixteen four-kilobyte pages. Program code cannot refer to code or PC-relative data outside its own page.[12] This leads to a curiosity of the design: when the program counter reaches the end of a page, it does not move to the next page, it returns to the start of the current page.[17]
Addressing was further limited by the two-byte instruction format used by most memory-reference instructions, which placed the opcode in one byte and a displacement in the second. National Semiconductor described the displacement as an 8-bit two’s-complement value with a range of −128 to +127 from the selected pointer-register value. The value 80 hexadecimal was also used as a special case to select the contents of the E register as the displacement source, rather than as a literal displacement.[13] For instance, an address might refer to a location in memory by saying it is +10 locations from the value in the program counter, or +10 from the value in one of the 16-bit index registers. To access a location outside that range, the page has to be explicitly stored in one of the index registers.[12] Because the registers are 16-bit, and the accumulator that loads values is 8-bit, setting a complete address requires several instructions.[18]
As indexes were critical to the addressing model, the SC/MP included four index registers, the “Pointer Registers” P0 through P3. P0 was the program counter, and not normally manipulated by user programs. By convention, P1 was normally used as a pointer into ROM, P2 into RAM, and P3 was used to store an address during interrupts and subroutine calls.[16] The SC/MP did not have a hardware stack or dedicated stack pointer for storing return addresses. Subroutine linkage instead used pointer registers, especially P3 with the XPPC instruction, so nested calls or interrupt handling required return addresses to be saved explicitly, or by a software stack convention.[19][20][18]
There were four primary addressing modes, PC-relative, indexed, immediate (meaning a constant in the instruction’s second byte as opposed to an offset), and auto-indexed. PC-relative addressing was actually the same as indexed, selecting P0 as the index register.[12][4]
Auto-indexing aids in the construction of loops. If the displacement is less than zero, the contents of the Pointer Register is decreased by the displacement before the contents of the effective address are fetched or stored. If the displacement is equal to or greater than zero, the contents of the Pointer Register are used as the effective address, and the contents of the Pointer Register are increased by the displacement after the contents of the effective address are fetched or stored. This removes the need for a separate instruction to change the value in the register, so one could store the starting value of a block of data in memory in a pointer register and then loop through all of the data by calling a single instruction.[12] If the offset is negative, @-1(P2), it performs the decrement before accessing the final value. If it is positive. @1(P2), it does a post-increment.[18] This predecrement-postincrement behavior makes it possible to create a LIFO stack. Top of stack is accessed with (P2).
Interrupt handling
The system includes automatic handling of interrupts on the Sense A line. If Sense A is active when the Interrupt Enable flag, IE, is set, the SC/MP completes the current instruction, clears IE to disable further interrupts, and exchanges the contents of PC and P3. Execution then resumes using the normal SC/MP increment-before-fetch behaviour, so P3 must have been prepared with the address immediately preceding the interrupt handler entry point, subject to the processor’s 4 KB page-addressing rules.[21][22]
Because interrupt entry is implemented as an automatic XPPC P3 operation, P3 conventionally serves as the interrupt-link register and is unavailable for general use while interrupts are enabled.[21]
The system does not include the equivalent of a return-from-interrupt. This can be performed with a XPPC P3 instruction, which exchanges the contents of P3 and the program counter. This restores the interrupted program’s execution address while storing the current interrupt-handler address in P3, allowing execution to continue where it left off. However, this leaves the wrong address in P3, not the start of the interrupt handler, but the end. To address this, the common solution is to place the XPPC P3 that returns to the main code one instruction above the handler entry point, rather than at the end. When the handler completes, it jumps back to this instruction, so when XPPC P3 is executed, the PC is pointed one location before the proper entry point. Because the SC/MP increments the program counter before instruction fetch, the next interrupt then enters the handler at the correct entry point. This “exit handler” normally also sets the IE to 1 with IEN to re-enable interrupts.[23][24]
Interrupt entry itself is simple, but saving processor state is left to software. National Semiconductor’s example interrupt save sequence for the SC/MP requires 17 instructions and 26 bytes of object code, compared with four instructions and four bytes for the Intel 8080.[25]
Bus control

A feature of the SC/MP family was its bus-access logic, using bus-request, enable-input and enable-output signals. In the original PMOS SC/MP documentation these are named BREQ, ENIN and ENOUT; in SC/MP II / INS8060 documentation the corresponding active-low signals are named NBREQ, NENIN and NENOUT.[26][27] These signals supported external direct memory access (DMA) hardware and allowed multiple SC/MP processors to be connected in a daisy-chained shared-bus arrangement.[26][27] National Semiconductor’s PMOS SC/MP documentation gives example DMA and multiprocessor configurations, contrasting an external DMA controller with the SC/MP’s built-in bus-access logic.[26] The INS8060 datasheet documents the corresponding SC/MP II bus-access signals, NBREQ, NENIN and NENOUT, for DMA and multiprocessor use.[27] Williamson and Dale give the equivalent SC/MP II explanation in the context of the MK14.[28]
In DMA applications, data transfers between memory and a peripheral could be made without the processor being involved in the actual data transfer, apart from control functions.[29] In functional terms, a processor requested the shared bus on its bus-request line and was granted access through its enable-input line. In the PMOS SC/MP documentation, this is described as BREQ high and ENIN high; in the SC/MP II / INS8060 documentation, the corresponding active-low signals are NBREQ and NENIN.[30][27] For multiprocessor use, the processor’s enable-output line was connected to the enable-input line of the next processor in the chain. While one processor controlled the bus, later processors in the chain were locked out; when it released the bus, the enable signal was passed to the next processor. If several processors requested the bus at the same time, they were served in daisy-chain priority order. National noted for the PMOS SC/MP that typically no more than three processors were used in a cascade arrangement without an external priority-logic controller.[31]
Osborne’s review of the system stated: “Bus request acknowledge logic coupled with bus access priority logic makes SC/MP the slave microprocessor of choice in any multi-microprocessor application.”[32] The market for such configurations appears to have been limited.[citation needed]
Osborne and Kane noted a further consequence of this bus-access design: an SC/MP external bus cycle could be suspended after it had already begun. In their terminology, this included instruction fetch, data input, and data output cycles. If ENIN was withdrawn while the CPU had access to the bus, the SC/MP address and data lines entered the high-impedance state, relinquishing the bus, while BREQ remained asserted. When ENIN was restored, the interrupted cycle would be performed. They also noted that the available SC/MP literature did not specify the exact “point-of-no-return” within the cycle: if the cycle was already nearly complete, the processor might complete it rather than suspend and restart it. This mattered because the read and write strobes, NRDS and NWDS, could in principle be repeated, causing the same data to be read or written twice.[33] The INS8060 datasheet notes special behaviour for ILD and DLD: during these read-modify-write instructions the SC/MP does not relinquish the bus between the read and write phases. If NENIN is deasserted after the load has completed, that load portion is not repeated when NENIN is reasserted.[34]
Unusual features
A defining feature of the SC/MP is its page-oriented pointer arithmetic. The program counter, P0, and the three general pointer registers, P1 to P3, are 16-bit registers, but normal address arithmetic operates only on the lower 12 bits. The upper four bits form a page field selecting one of sixteen 4 KB pages. Normal program-counter increments, PC-relative addressing, indexed addressing, and auto-indexing do not carry into this page field. If the lower 12 bits overflow, the address wraps within the same page. The page field changes only when software explicitly modifies it, for example with XPAH, XPAL, or XPPC.[5][17]
The SC/MP does not include a dedicated jump-to-subroutine instruction. National Semiconductor’s assembler provides a JS pseudo-instruction that expands into a sequence of five instructions occupying seven bytes of object code. The generated code loads the selected pointer register with a value that causes execution to begin at the specified target address after the SC/MP’s automatic program-counter increment. It uses two LDI instructions together with XPAH and XPAL to construct the required pointer value, then transfers control using XPPC. This is commonly described as loading expression−1, but the SC/MP’s 4 KB page structure must be considered when calculating that value.[35][19]
The generated sequence overwrites the contents of the accumulator. The XPPC instruction exchanges the contents of the program counter and a selected pointer register. As a result, the pointer register is loaded with the address of the XPPC instruction while the program counter is loaded with the pointer register’s previous contents. Because the SC/MP increments the program counter before instruction fetch, execution resumes from the address obtained by incrementing the value loaded into the program counter, subject to the SC/MP’s 4 KB page arithmetic. For example, a subroutine whose first instruction is at 2010 would conventionally be entered by loading a pointer register with 200F before executing XPPC. At a 4 KB page boundary, however, the page field is retained. A routine beginning at 2000 requires the pointer register to contain 2FFF, not 1FFF. A later XPPC using the same pointer register returns execution to the instruction following the call. Because the return pointer is stored in the pointer register itself, nested subroutine calls require software preservation of that register, typically using a software stack.[19][36][5]
Because of this increment-before-fetch behaviour, after reset execution begins at location 0001 rather than 0000. PC-relative displacements are calculated from the program counter value after the instruction bytes have been read rather than from the address of the opcode itself. The same behaviour means that XPPC targets, including interrupt entry addresses held in P3, are conventionally stored as the address immediately preceding the address at which execution is intended to begin, subject to the same page-boundary rule. Because PC-relative addressing cannot reach locations outside the current 4 KB page, programs frequently use XPPC and pointer registers for inter-page subroutine calls, jumps, and data access.[37][38][39]
The system included a Delay instruction, DLY, which took a single parameter, P. This stopped operation for a period of 13 + (2 x P) + (2^9 x P) + (2 x AC) microcycles, which it did by continually decrementing the value in AC until it reached zero.[40] This meant it could produce a delay between 13 and 131,593 cycles.[32] This was normally used with the serial pins; a program could set the value in AC to the time it took to transmit a single bit at a given speed and then check the value of one of the flag pins to see if it was ready for the next one.[40] Osborne notes that this feature is of limited practical use, the processor is “spinning” during the delay and this could be accomplished by writing a loop.[32]
The processor was not particularly picky about timing, and in low-speed applications it did not need to use a crystal oscillator and this could be replaced with a simple capacitor instead.[41]
Implementations
The SC/MP included an internal clock oscillator. This was common in nMOS designs like the 6502, but unusual for a chip originally fabricated in P Channel MOS (pMOS). Most pMOS processors required a separate external oscillator and clock driver, so this was an advantage for this design as it eliminated the need for one external chip. This did, however, limit the speed to 1 MHz. The SC/MP-2 used N Channel MOS (nMOS) fabrication but was otherwise identical, which allowed it to be clocked at up to 4 MHz.[17]
The SC/MP family evolved through three main implementations:
- SC/MP-1 (ISP-8A/500), clocked at 1 MHz, first implementation in pMOS. It requires both +5 volt and -7 volt power supplies for TTL compatibility.
- SC/MP-2 (INS8060 ISP-8A/600), clocked at 4 MHz (internally 2 MHz) first nMOS version (single +5V supply)
- 70-Series (INS807x), clocked at 4 MHz (internally 2 MHz), included variations with up to 4 KB ROM and optional onboard BASIC (NIBL).[1][2]
Second source
Signetics was identified by Osborne and Kane as an authorized second source for the SC/MP. They listed National Semiconductor as the prime source and Signetics as the authorized second source, while stating that Signetics had not actually manufactured the processor.[32]
Signetics also published its own documentation for the SC/MP II. The 1977 Signetics Bipolar/MOS Microprocessor Data Manual listed the ISP-8A/600 “Simple Cost Effective Microprocessor (SC/MP-II)” among its MOS microprocessors and included a Signetics-branded device section for the part.[42]
In the 1982 Signetics MOS Microprocessor Data Manual, the SC/MP II appeared in application-note material rather than as a standalone product data-sheet entry in the contents. Application note M22, “Interface Techniques for the 2651 PCI”, included an SC/MP II interface example and cited a “Signetics SC/MP II (ISP-8A/600) Microprocessor Specification”.[43]
Uses
Montgomery Elevator of Moline, Illinois, later acquired by KONE in 1994[44], used the SC/MP in its first[citation needed] microprocessor based elevator, the “MIPROM Hydro elevator-controller system” released in 1975[citation needed]. Montgomery described MIPROM as a “microprocessor elevator logic control” system[45], and a later Otis PC-board catalogue[46] identifies board MTGMP-15783 as a “CPU MIPROM SC/MP II Board”. The corresponding P-15783 CPU card is illustrated in the MIPROM I troubleshooting guide[47], and a TK Elevator spare-parts listing identifies P-15783 as a refurbished Montgomery MIPROM CPU board; the board photograph in that listing shows the processor package marked “INS8060N” and “ISP-8A/600N”[48]. The MIPROM I troubleshooting guide also lists CPU card P-15783 as a replacement for P-16782, but the replaced P-16782 is not shown clearly enough to identify the processor used on P-16782.
The SC/MP was used as the basis of a single board microcontroller produced by Science of Cambridge (later Sinclair Research Ltd) called the MK14. This was based on National’s own Introkit design, and National offered Sinclair a deal on completed sets which could not be matched by building their own. This allowed the MK14 to sell for the extremely low cost of £39.95.
Doug Neubauer, best known as the author of Star Raiders, had moved to Atari after working at National on a product identified only as a “home computer product”.[49] This had progressed to the stage of a wire wrapped prototype before the company killed it.[50]
Example code
The following assembler source code is for a subroutine CPYMEM that copies bytes from one location to another. This routine can be used to copy between pages but cannot cross a page. It can be executed from ROM or RAM. If executing from RAM, loop counting could be accelerated with a DLD instruction using a PC-relative counter. This routine uses an unusual @1(P1) addressing mode that is used to auto-index through the memory. Unlike other processors with auto-index such as the 68000, the SC/MP auto-index stride can be larger than the datum size.
1000
1000 03
1001 01
1002 C5 01
1004 CE 01
1006 C4 FE
1008 70
1009 9C F6
100B 3F
|
; Copy memory words addressed by P1 to location addressed
; by P2 for a length of up to 255 bytes. Length is passed
; in AC (accumulator). Return address in P3.
= X'1000
CPYMEM: SCL ; Set carry for upcoming ADD
CPYLP: XAE ; Save count in E
LD @1(P1) ; Get byte to copy, inc P1
ST @1(P2) ; Save it, inc P2
LDI -2 ; -2 to AC to decrement
ADE ; E (set carry made it -1)
JNZ CPYLP ; Continue for all bytes
XPPC P3 ; Return to caller
|
Notes
- ^ The original SC/MP takes 11 “microcycles” to do an 8-bit add immediate (ADI) with each microcycle requiring two clocks, 22 clocks total (22µS at 1 MHz). Contemporaneous CPUs are faster: The 8080’s add immediate (ADI) takes seven clocks (3.5µS at 2 MHz). A 6502 add immediate (ADC) takes two clocks (2µS at 1 MHz).
References
Citations
- ^ a b c “INS8070-Series Microprocessor Family” (PDF). National Semiconductor. October 1980. Retrieved 4 May 2026.
- ^ a b c “70-Series Microprocessor User’s Manual” (PDF). National Semiconductor. 1979. Retrieved 4 May 2026.
- ^ “NS INS8070 – SC/MP III”. Semiconductor Collection Exhibition Hall (in Japanese). Archived from the original on 18 April 2001. Retrieved 4 May 2026.
- ^ a b c d Programming and Assembler Manual 1976, p. 3-1.
- ^ a b c Technical Description 1976, p. 2-17.
- ^ Programming and Assembler Manual 1976, p. 5-15.
- ^ Handbook 1977, p. 1-6
- ^ Programming and Assembler Manual 1976, p. 5-13
- ^ Handbook 1977, pp. 1–2, 1–6, 1–10, 1–13
- ^ Programming and Assembler Manual 1976, p. 5-17
- ^ Osborne & Kane 1981, p. 3-3
- ^ a b c d e Handbook 1977, p. 1-11.
- ^ a b Programming and Assembler Manual 1976, p. 3-6.
- ^ Handbook 1977, p. 1-6.
- ^ Programming and Assembler Manual 1976, p. 6-11.
- ^ a b Handbook 1977, p. 1-3.
- ^ a b c d Osborne & Kane 1981, p. 3-3.
- ^ a b c Osborne & Kane 1981, p. 3-4.
- ^ a b c Handbook 1977, p. 1-5.
- ^ Williamson & Dale 1980, pp. 104–106.
- ^ a b Programming and Assembler Manual 1976, p. 6-9.
- ^ Osborne & Kane 1981, p. 3-14.
- ^ Programming and Assembler Manual 1976, p. 5-20.
- ^ Osborne & Kane 1981, p. 3-16.
- ^ Handbook 1977, p. C-5.
- ^ a b c Technical Description 1976, pp. 2-4–2-6.
- ^ a b c d INS8060 Datasheet 1978, pp. 10–11.
- ^ Williamson & Dale 1980, pp. 183–187.
- ^ Handbook 1977, p. 1-2.
- ^ Technical Description 1976, p. 2-4.
- ^ Technical Description 1976, pp. 2-5–2-6.
- ^ a b c d Osborne & Kane 1981, p. 3-1.
- ^ Osborne & Kane 1981, pp. 3-8–3-9.
- ^ INS8060 Datasheet 1978, p. 10.
- ^ Programming and Assembler Manual 1976, pp. 5-23–5-24.
- ^ Programming and Assembler Manual 1976, pp. 6-1–6-3.
- ^ Technical Description 1976, p. 2-14.
- ^ Williamson & Dale 1980, pp. 64–67.
- ^ Osborne & Kane 1981, pp. 3-14–3-16.
- ^ a b Handbook 1977, p. 2C3-9.
- ^ Handbook 1977, p. 1-1.
- ^ Signetics 1977, contents p. 5; SC/MP II section pp. 146–162.
- ^ Signetics 1982, contents p. ii; App Note M22, pp. 6-6–6-7.
- ^ “History”. KONE Corporation. Retrieved 5 May 2026.
- ^ “Miprom: Microprocessor Elevator Logic Control for the Mass Elevator Market” (PDF) (Brochure). Montgomery Elevator Company. pp. 1–3. Retrieved 5 May 2026 – via KONE Spares.
- ^ Otis PC Board Catalog (PDF). Otis Elevator Company. November 2010. p. 73. Retrieved 5 May 2026.
- ^ MIPROM I Troubleshooting Guide. Montgomery Elevator Company. October 1990. pp. 14, 69. 61111-753. Retrieved 5 May 2026.
- ^ “Refurbished MIPROM CPU Board Montgomery P-15783”. TKE Spare Parts. TK Elevator Manufacturing, Inc. Retrieved 5 May 2026.
- ^ Fleming, Jeffrey (September 20, 2007). “Video Games’ First Space Opera: Exploring Atari’s Star Raiders”. Archived from the original on February 27, 2008. Retrieved May 28, 2024.
- ^ Neubauer, Doug. “The Atari Years”.
Bibliography
- SC/MP Applications Handbook (PDF). National Semiconductor. February 1977. Publication Number 420305239-001A.
- SC/MP Technical Description (PDF). National Semiconductor. January 1976. Publication Number 4200079A.
- SC/MP Programming and Assembler Manual (PDF). National Semiconductor. February 1976. Publication Number 4200094B.
- INS8060 Single-Chip 8-Bit N-Channel Microprocessor (SC/MP Family) (PDF). National Semiconductor. January 1978. Publication Number 426305290-001C.
- Osborne, Adam; Kane, Gerry (1981). Osborne 4 & 8-Bit Microprocessor Handbook. Osborne/McGraw-Hill. ISBN 0-931988-42-X.
- Williamson, Ian; Dale, Rodney (1980). Understanding Microprocessors with the Science of Cambridge Mk14. Macmillan. ISBN 978-1-349-81359-9.
{{cite book}}: CS1 maint: ref duplicates default (link) - Signetics Bipolar/MOS Microprocessor Data Manual. Signetics. 1977.
- Signetics MOS Microprocessor Data Manual. Signetics. January 1982.
- MCS6500 Microcomputer Family Hardware Manual (PDF). MOS Technology, Inc. January 1976.
- Intel 8080 Microcomputer Systems User’s Manual (PDF). Intel Corporation. September 1975.
External links
- More info and emulators
- National Semiconductor datasheet
- Information about the SC/MP including an emulator
- MK14 original manual Archived 2016-08-11 at the Wayback Machine – including ISA description
- A SC/MP II Single Board MCU with NIBL BASIC in ROM
- NSC 807X datasheet
- SC/MP Development System at the Centre for Computing History
- Various INS807x Series PDF files
- Hand-wired INS8073 single-board computer with info on assembly of source code