National Semiconductor Cops Pocket Assistant

Datasheet legend
Ab/c: Fractions calculation
AC: Alternating current
BaseN: Number base calculations
Card: Magnetic card storage
Cmem: Continuous memory
Cond: Conditional execution
Const: Scientific constants
Cplx: Complex number arithmetic
DC: Direct current
Eqlib: Equation library
Exp: Exponential/logarithmic functions
Fin: Financial functions
Grph: Graphing capability
Hyp: Hyperbolic functions
Ind: Indirect addressing
Intg: Numerical integration
Jump: Unconditional jump (GOTO)
Lbl: Program labels
LCD: Liquid Crystal Display
LED: Light-Emitting Diode
Li-ion: Lithium-ion rechargeable battery
Lreg: Linear regression (2-variable statistics)
mA: Milliamperes of current
Mtrx: Matrix support
NiCd: Nickel-Cadmium rechargeable battery
NiMH: Nickel-metal-hydrite rechargeable battery
Prnt: Printer
RTC: Real-time clock
Sdev: Standard deviation (1-variable statistics)
Solv: Equation solver
Subr: Subroutine call capability
Symb: Symbolic computing
Tape: Magnetic tape storage
Trig: Trigonometric functions
Units: Unit conversions
VAC: Volts AC
VDC: Volts DC
Years of production:   Display type: 7-segment alphanumeric  
New price:   Display color: Red  
    Display technology: Light-emitting diode 
Size: 5½"×2½"×1" Display size: 8 7-segment characters
Weight: 4 oz    
    Entry method:  
Batteries: 1×9V alkaline Advanced functions: Snd 
External power: 9VDC   Memory functions:  
I/O:      
    Programming model: Machine-language program 
Precision: digits Program functions: Jump Cond Subr Ind  
Memories: 16 bytes Program display: Mnemonic display  
Program memory: 32 bytes Program editing: Overwrite capability  
Chipset: National Semiconductor   Forensic result:  

*Microcontroller emulator

cpa.jpg (19515 bytes)National Semiconductor's Cops Pocket Assistant (or the "Green Dick", as it was colloquially called according to Jim Murray, a former NS customer; the origin of this informal name remains obscure) easily qualifies as the weirdest beast in my calculator collection.

To begin with, I'm not even sure whether this machine belongs to my collection in the first place. Appearances can be deceiving: the CPA may look like a calculator, but a calculator it most decidedly isn't (although, as you'll see below, it is actually possible to add or subtract decimal numbers on this beast without having to write programs.)

cpab.jpg (20431 bytes)So what the devil is it? The keyboard labels offer a hint: they look suspiciously like mnemonics of an unknown assembler language. The back label (left, enlarged) offers further clues: in cryptic shorthand, it tells you how to edit the contents of RAM, processor registers, or program code.

But what assembler? A quick search at the National Semiconductor Web site reveals that they indeed have a product line named COPS™: a series of microcontrollers, single-chip microcomputers used mainly in embedded systems. Opening the machine reveals a further hint: the single chip inside is marked COP444.

As it turns out, this calculator-like device is actually a hand-held emulator for the older, 4-bit COPS microcontroller family. (Yes, that means that an emulator for the COP4 series of processors is actually implemented using a COP4 processor.) You can enter small program fragments in COPS assembler and test them for validity (presumably, before burning faulty code into an expensive, one-time programmable device.) Nowadays, emulator software is used for this purpose; although my CPA has no date on it anywhere, it obviously predates the widespread use of personal computers for software simulation.

Some Internet references suggest that the COP4 family was used in handheld calculators. So perhaps this machine belongs in my collection after all; it looks like a calculator, it can actually perform calculations (with some difficulty), and it is an emulator device for hardware used in calculators.

So how do you use this beast? The keyboard mnemonics plus the back label offer enough clues to decipher many of the machine's features. For instance, the back label suggests that a "subroutine 2C" may produce a tone; let's give it a try! Hmmm, we want to execute a single instruction, so perphaps we start by hitting the EXEC key. Then we want to call a subroutine: JSR 2 C. The mnemonic for this instruction appeared on the display but nothing else really happened... so why don't I press SS, which presumably stands for single-step, to execute this instruction? Bingo! A beep is heard.

The same method can also be used to add two numbers. The first number is entered into RAM bank 0; the second, into RAM bank one. Then subroutine 21 is called to execute a BCD (binary-coded decimal) addition. In other words:

  1. Press MODIFY 4 to prepare for entering the first number
  2. Enter 8 digits, such as 00000123
  3. Press MODIFY 5 to prepare for entering the second number
  4. Enter 8 digits, such as 00000456
  5. Execute subroutine 21 by keying EXEC JSR 2 1 SS; the result (00000579) should be displayed.

So how do you enter programs into this machine? Why, using the PROG button of course. Hit PROG, enter the program step and any optional arguments, and then make sure you hit PROG or SS again otherwise the step you just entered won't be stored in memory. (This can get a bit confusing.) So here's a small assembly-language program that beeps six times:

00	CLRA		; Initialize
01	AISC A		; Start count from 10 (up to 16)
02	JSR 2C		; Beep
03	LBI 01		; Address 1 is the high-order counter nibble
04	X 0		; Exchange counter hi with beep counter
05	LBI 00		; Address 0 is the low-order counter nibble
06	X 0		; Exchange counter hi with counter lo
07	AISC 1		; Increment counter lo
08	JP 07		; Loop
09	X 0		; Exchange counter hi with counter lo
0A	AISC 1		; Increment counter hi
0B	JP 06		; Loop
0C	LBI 01		; Address of counter hi
0D	X 0		; Exchange counter hi with beep counter
0E	AISC 1		; Increment beep counter
0F	JP 02		; Loop
10	JP 10		; Halt

This program not just beeps, it also executes a considerable pause between beeps. To run it, hit RUN. Hitting RESET stops the program. The pause is implemented using a counter in memory, which you can actually watch while the program executes; to do so, hit DISP 4 before starting the program, this'll keep the lower half of RAM bank 0 on the display.

Was this machine ever sold in stores? Was it given away as a promotion? Was it sold along with large-quantity orders of COPS microcontrollers? It does seem to have a few bugs in the implementation (in the absence of any documentation, I cannot be sure); perhaps it was never sold at all? (Jim Murray suggests that it was given away to large volume customers to help them understand COP programming.)

Here's one more curious feature of this machine: one display mode allows the user to control all 64 display segments (8 times 7 segments plus 8 decimal points) individually. This, in fact, is what allowed me to put the digits if π on the calculator's display before scanning (not that the digits are very legible in the JPG image shown here, but trust me, it's the value of π there.) Here's how to do it:

  1. Press MODIFY 0 to modify the upper half of RAM bank 0
  2. Enter FC606660
  3. Press MODIFY 4 to modify the lower half of RAM bank 0
  4. Enter D6F6B570
  5. Press DISP 6 to display "register 0"

That's it. Now if you don't think it's fun, you're not a true geek!