DP2200 Introduction

        .cr     dp2200      To load this cross overlay

During the late 60's of the previous century a company named Computer Terminal Corporation wanted to create a universal terminal. A CPU for this terminal was needed, so they asked Texas Instruments and Intel to make one. Both companies failed to create the CPU (in time) and therefore Computer Terminal Corporation decided to create the CPU with discrete TTL ICs.
Two years later Intel did manage to finish the 8008 CPU. It is no surprise that the original 1972 instruction set of this processor was very similar to the instruction set of the Datapoint 2200.

Computer Terminal Corporation succeeded in creating a universal terminal, which was called the Datapoint 2200. Later the company was renamed to Datapoint Corporation too.
Without knowing it Datapoint created the first personal computer because users started to write their own programs for the machine.

So the Datapoint 2200 is not really a microprocessor, it is more a micro computer with a discrete CPU. I was so amused by the story behind this machine that I decided to write a cross overlay for it. Not that I ever saw a Datapoint 2200 myself, or will ever own one. I just felt that my cross overlay library would not be complete without an overlay for the Datapoint 2200.

A few years later the Datapoint 2200 Mark II was released, which had a few enhancements to the original Datapoint 2200.

  • Faster instruction execution.
  • Faster and more random access memory, instead of sequential memory.
  • 14-bit address pointer, instead of 13-bit.
  • Interrupt capabilities.
  • Double the amount of internal registers (Alpha and Beta).
  • 16 level 16-bit stack, instead of 15 levels.
  • The HL register pair could be saved on the stack.

Programming Model

The programming model in the picture below shows the most important registers of the Datapoint 2200. Please note that the Datapoint 2200 II had two identical sets of register (including the 4 status flip-flops). Two instructions ALPHA and BETA are used to switch between the two sets.

DP2200 programming model

The Accumulator

The Accumulator is the most important register for 8 bit arithmetic operations.

The Program Status Word

There is no real Program Status Word on the Datapoint 2200. The 4 system flags (C, Z, S, P) can be tested by the different conditional jump, call and return instructions.

General Purpose Registers

Apart from the Accumulator Datapoint 2200 is equipped with 6 additional general purpose 8-bit registers. The HL pair is used as a data pointer to transfer data to and from memory.
This is the only time that two registers are concatenated to form one 16-bit register. The H and L register must be loaded with two 8-bit values separately to form the address of the required memory location.

The Stack

On the first model there was a 15 level deep circular stack, while the Mark II had a 16 level deep 16-bit stack. The stack pointer could not be manipulated and would wrap around when incremented or decremented beyond its boundaries.

The Program Counter

The program counter PC is normally incremented after fetching each instruction or operand byte during program execution. The only way you can change this behaviour is with the jump, call and return instructions. Also interrupts can change the program counter's value.
The program counter on the original Datapoint 2200 was only 13-bits wide, enabling it to address up to 8k of memory (which was expensive enough in those days). The Mark II had a 14-bit wide program counter, which could address up to 16k of memory.

Interrupts

Only the Mark II model was equipped with a very primitive interrupt system. When interrupts are enabled the CPU is interrupted every millisecond. During an interrupt the program counter is saved on the stack and is reloaded with 0, effectively performing a software Reset.
There is no real Return from interrupt sequence. A normal RETURN instruction will do the trick.

Timing

I have no information about the instruction timings of this computer. Therefore you won't get any timing information in Version 3, even when you switch the timing list option on.

Reserved Words

No reserved words exist for this cross overlay.

Overlay Initialization

Two things are set while initializing the Datapoint 2200 overlay every time it is loaded by the .CR directive.

  • Little endian model is selected for 14-bit addresses and for the .DA and .DL directives. This means that words or long words are stored with their low byte first.
  • The maximum program counter value is set to $3FFF.

Some Notes

There are some things to note about the SB-Assembler for the Datapoint 2200 processor.

  • The Datapoint 2200 instruction set knows special mnemonics which indicate immediate addressing mode. Therefore it is not absolutely necessary to add the immediate mode identifier # in front of the operand. Although it wouldn't hurt if you did.
    E.g. the two instructions LA VALUE and LA #VALUE have exactly the same effect.
    If you want another part of the 32-bit number to be loaded immediately into any of the registers you could use the other immediate mode identifiers /, =, or \.
  • The original Datapoint 2200 documentation used octal numbers explicitly, also in the instruction table. However the results from the SB-Assembler listings are all in hexadecimal notation.