The Bell Laboratories MAC Tutor
for the BELLMAC-8 Microprocessor
The Bell Laboratories MAC Tutor featuring the BELLMAC-8 Microprocessor
Plenty of self-paced instruction manuals
MAC Tutor specs, MAC-8 registers
Just the memo cover sheets
This is pre-divestiture, so it still has the genuine Bell logo!
Before
divestiture (the phone company "break up"),
AT&T was a "regulated monopoly" whose primary business
was phone service. But internally they had Bell Labs and the world's best technology
in order to provide that service (and revenue).
The Bellmac-8 CPU was an important milestone because it demonstrated that
AT&T could design and manufacture their own CPUs,
which led to bigger things such as the Bellmac-32 CPU
and the
3B2 Unix computers
from AT&T Information Systems (their computer division).
What's so neat about the MACTUTOR Bellmac-8 trainer?
- The name.
Everyone's now conditioned to think "Apple"
for anything starting "MAC" or "i-".
- It's nearly identical to the KIM
(see footnote_1)
with 8: 7 segment displays that are segment mapped
(so they can display anything just like the Heathkit 6800 trainer)
and an ever-bouncing membrane keypad
(see, it was NOT just the Sinclair ZX-80!)
- A built in PROM programmer (EPROMS or FLASH were not yet available)
- single step via front panel
- The assembler looks JUST LIKE "C"
(which was already a mature language by the late 70s)
so b4=*d0 copies the 16 bit word from the address in b0 into b4
a0 >>> 2 is rotate right the 8 bit register a0 by 2 bits
Despite being an 8 bit processor similar to the Z80,
the architecture and assembler were influenced by the "C" programming language
(particularly register windowing).
Like most embedded systems, it is not self sufficient.
It requires a Unix host system for program compiling & linking
Most registers are 16 bits wide so it directly addresses 64k memory.
The trainer has ROM in low memory, RAM in upper memory.
The 16 general purpose registers b0-b15 are 16 bits wide
but are also accessible as 8 bit registers
(see the register map)
There are only 4 "real" registers
- program counter
- stack pointer
- RP: register pointer (see footnote_2)
contains the address of memory
starting the 32 byte block for the 16 general purpose registers
- CR: condition register.
It's kinda like IBM's PSW (program status word),
containing masks & condition codes used for conditional branch
The
16 general purpose registers are in RAM.
The "RP" register points to the block of registers
- b0-15 refers to the 16 bit registers
- a0-15 are the same registers, just the low order 8 bits
- *b0-15 is an 8 bit memory access
- *d0-15 is a 16 bit memory access, still using the b-register
In short, a very capable processor compared to others.
Footnote 1: similar training kits
This says it well:
MOS KIM-1 History:Commodore MOS / CSG KIM1
In August 1974 eight Motorola employees including Bill Mensch
and Chuck Peddle quit and went to work for a small chip manufacturer
called MOS Technologies. By June of 1975 they had developed samples of the
6502 processor and wanted a system to demonstrate it's power.
The chip was only US$25 at a time when the lesser Motorola 6800 was selling for $200.
In 1976 MOS build the worlds first single board computer the KIM-1.
Of course it used the 6502 (clocked at 1 Mhz) and it came with 1K RAM,
built in ROM, Hex Keypad, LED Display,
15 bidirectional input/output ports and a Cassette Interface.
These machines came fully assembled although they lacked a power supply.
The SYM-1 is a comparable
evaluation single board system to the Mactutor.
I'm tempted to label some of our rooms "NO Intel Inside!"
to emphasize how there used to be many more CPU sources and architectures.
Footnote 2
Several other computers have registers residing in memory:
- The IBM 1130's 3 index registers were core locations 1, 2, 3
- The Microchip PIC microcontrollers similarly have a pointer to RAM
for all the non-core general-purpose registers
That's kind-of a "cheat" since it uses external memory
with the consequence of the RAM access delay
whereas "true" registers are high speed
and work totally internal to the CPU or co-processor.
In-core registers are normally used as non-overlapping blocks
to save/restore ALL registers such as for handling interrupts
(although some processors have an alternate register set
to facilitate that).
The BUMP and DEBUMP instructions
allow for incrementing or decrementing the RP (register pointer)
for
register windowing
where the registers intentionally overlap for argument passing for function calls.
other resources
Rolf Levenbach donated the Bell Laboratories MAC Tutor.