Inside the Radio Shack MC-10

Picture of a TRS-80 MC-10. The Radio Shack MC-10 microcomputer is the lesser-known, younger cousin of the Tandy Colour Computer. Small enough to sit on the palm of your hand, the MC-10 came equipped with four kilobytes of RAM, a Motorola MC6803 eight-bit microprocessor, a built-in serial port, and the same graphics capabilities as the original Colour Computer. Underpowered for its time, the MC-10 was released in 1983 but discontinued in 1984, along with the 16k memory upgrade and small amount of cassette-based software which had been released for it.

With this page, I hope to document the internal workings of the MC-10 in sufficient detail to facilitate the development of new hardware and software for this little computer. Future additions to this page will most likely include the following:

If you have any information to contribute to this page, please pass it along! I'll be only too happy to give you credit for your contribution, and the information you provide will be of great help in any development efforts. Those interested in discussing the information on this page, or the MC-10 in general, should visit the TRS-80 MC-10 Users' Club.

1. Technical Specifications

1.1 MC-10 Microcomputer

Processor
Motorola MC6803
Clock Frequency
0.89 MHz
Memory
4k RAM standard, upgradeable to 16k
Micro Colour BASIC in ROM (8k)
I/O
RS-232C serial interface (300-9600 baud; 600 baud from BASIC)
Cassette interface (1500 baud)
Internal RF modulator
Memory expansion interface
Size
8.5" x 7" x 2" (216mm x 178mm x 51mm)
Weight
29.05 ozs. (836.32g)
Catalog No.
26-3011

1.2 16k RAM Module

Catalog No.
26-3013

1.3 AC Power Adapter

Power Input
120V AC
60Hz
16W
Power Output
8.0V AC
1.5A
Catalog No.
26-3011A

2. Programming Information

2.1 General

The MC-10 is built around two Motorola products: the MC6803 microprocessor, and the MC6847 video generator. The original Colour Computer used the MC6847 for its display as well, but contained the somewhat more advanced, and non-compatible, MC6809 processor.

The 6803 is the last chip in Motorola's 6800 line, and builds on the original with the inclusion of 128 bytes of on-chip RAM, a hardware multiply instruction, and a built-in serial port. The MC6803 is the precursor to (I believe) the MC68HC11, which is still being manufactured.

Hitachi also marketed an "enhanced" clone of the MC6803, the HD6303, as is used in the Psion PDA. Many people have improved the performance of their Colour Computer by replacing the 6809 CPU with a Hitachi 6309, which leads me to wonder if installing an HD6303 and custom ROM in an MC-10 would have the same effect. Also extant is the MC68HC16, a sixteen-bit processor which is source-compatible with the MC6800.

2.2 Memory Map

Memory in the MC-10 is allocated as follows:

$E000 - $FFFF: Internal ROM (BASIC)
$C000 - $DFFF: External expansion ROM
$5000 - $BFFF: External expansion RAM
$4200 - $4FFF: Internal RAM
$4000 - $41FF: Video memory
$0100 - $3FFF: Unused
$0080 - $00FF: MC6803 on-chip RAM 
$0020 - $007F: Unused
$0000 - $001F: MC6803 internal registers

Many thanks to Bob Devries of Australia for providing me with this correct memory map of the MC-10, among other information.

The MC6803, like the original 6800, has 256 bytes of fast-access, "direct page" memory from $0000 to $00FF. Operations which support the direct addressing mode require only a one-byte operand to address this memory. The MC6803 also contains 128 bytes of on-chip RAM, from $0080 to $00FF; my guess is that accessing this memory is very fast.

Display memory starts at $4000. The standard text display occupies the first (32 x 16 =) 512 bytes of memory; this video mode also supports 64 x 32 "block" graphics. With an additional 16k of memory installed, higher-resolution graphics modes of the MC6847 can be used as well.

Micro Colour Basic lives in the top eight kilobytes of memory, from $E000 to $FFFF, and by default is mirrored immediately below at $C000. External devices can override this mirroring and use memory addresses from $C000 to $DFFF as their own. (Was Radio Shack planning an Extended Micro Colour Basic cartridge?)

The last eight words of memory store interrupt vectors used by the 6803, as follows:

$FFFE: Reset vector
$FFFC: NMI non-maskable interrupt vector
$FFFA: SWI software interrupt vector
$FFF8: IRQ 1 interrupt vector
$FFF6: IRQ 2 timer input capture vector
$FFF4: IRQ 2 timer output compare vector
$FFF2: IRQ 2 timer overflow vector
$FFF0: IRQ 2 serial I/O interrupt vector

In the MC-10 ROM, these vectors point to the following memory addresses, in order: $4200, $4203, $4206, $4209, $420C, $420F, $4212, and $F72E. Note that the first seven vectors point to addresses in RAM to allow software to introduce their own interrupt handlers, although the unfortunate choice of memory locations interferes with the high-resolution video modes (see below). $F72E is the BASIC ROM's entry point.

2.3 I/O Devices

All I/O in the MC-10 is memory-mapped. As soon as I determine the memory addresses used to communicate with the on-board serial port and cassette interface, I will post them here.

2.3.3 Keyboard

The MC-10's forty-eight key, calculator-style keyboard connects to the mainboard through two, eight-conductor ribbon cables. Keyboard status can be obtained by reading from $BFFF in memory -- I'll post more information here soon.

2.3.1 Serial Interface

The built-in, four-pin DIN, RS-232C serial port supports a maximum transfer rate of 9600 baud, although it is limited to 600 baud operation (via the LPRINT and LLIST commands) under BASIC. Pin assignments on the serial port are as follows:

  1. Carrier detect (CD)
  2. Receive data (RD)
  3. Ground (GND)
  4. Transmit data (TD)

Micro Colour Basic sets the serial port to 600 baud, 1 start bit, 7 data bits, 2 stop bits, and no parity. When time permits, I'll post instructions on building a null modem cable to allow data transfer between the MC-10 and a PC.

2.3.2 Cassette Interface

The cassette interface operates at an average speed of 1600 baud, and the pin assignments on the five-pin DIN connector are as follows:

  1. Remote ground
  2. Signal ground
  3. Remote control
  4. Audio input (earphone jack)
  5. Audio output (aux-in or mic jack)

Note that regular Colour Computer and Model I/III/IV cassette interface cables can be used with the MC-10. According to the MC-10 manual, the cassette interface and RS-232C serial port can not be used simultaneously. Also, remote control of the cassette recorder does not occur in Micro Colour Basic (and is probably not supported by the hardware).

Data is stored serially on the cassette, lowest-order bit first. A binary "one" is encoded as a complete 2400 Hz cycle, and a binary "zero" as a complete 1200 Hz cycle. The MC-10 decodes the audio data by measuring the time between zero-crossings of the input signal.

The Micro Colour BASIC file format, which is compatible with that used by the Colour Computer, defines the notion of a block, which stores up to 255 bytes of data together with header and checksum information. Three types of blocks are recognized: filename; data; and end-of-file.

An Micro Colour BASIC saved file has the following structure:

  1. A 128-byte leader
  2. A filename block
  3. A half-second, silent gap
  4. Another 128-byte leader
  5. One or more data blocks
  6. An end-of-file block

Each leader consists of 128 bytes of hexadecimal 55, binary 01010101, and is used by the MC-10 for synchronization.

Blocks have the following general format:

  1. A two-byte ID string, $553C
  2. A one-byte block type
  3. A one-byte data length
  4. Between 0 and 255 data bytes, as specified
  5. A checksum byte
  6. A one-byte end-of-block ID, $55

A block's checksum is supposedly calculated as the sum of its data, type and length bytes, although I haven't verified this. Valid block types include filename, $00; data, $01; and end-of-file, $FF. Filename blocks contain fifteen bytes of data, structured as follows:

  1. An eight-byte file name
  2. A one-byte file type
  3. A one-byte data type
  4. A one-byte gap present flag
  5. A two-byte start address
  6. A two-byte load address

File types include BASIC programs, $00; data, $01; and machine code, $02. The data type is either binary, $00; or ASCII, $FF. The gap-present flag will be either $01, indicating no silent gaps between subsequent blocks; or $FF, indicating that gaps will be present. The load and start addresses for machine-language programs are stored in the last two words of the filename block.

End-of-file blocks contain zero bytes of data and always appear at the end of saved data.

I have written C routines to extract the data from WAV recordings of MC-10 saved programs, and I will be making the source code, along with a proposed, open file format for the archival of MC-10 software, available from this website as soon as possible. (If you're interested, you can have a look at the work in progress.) In the meantime, it is possible to use Jeff Vavasour's (closed-source) Colour Computer transfer utilities under DOS to archive MC-10 saved programs.

Information regarding the Micro Colour BASIC file format was acquired from Bill Yakowenko's Color Computer Stuff webpage and through experimentation with a real MC-10.

2.3.4 Video Generator

Video output is handled by the MC6847 and fed directly to the built-in RF modulator. Composite output is not provided, but could be added assuming the MC1372 RF modulator chip is used.

Operation of the MC6847 is controlled by writing to address $BFFF in memory, where each bit corresponds -- almost -- to a control line on the MC6847. The mapping is as follows:

7 6 5 4 3 2 1 0
Sound CSS A/G GM0 GM1 GM2,
INT/EXT
N/C N/C

Bit seven is not connected to the video generator at all. Rather, toggling this bit produces sound from the TV speaker. Bits one and zero are also not connected. The pin abbreviations are as follows:

  1. CSS: Colour select. Toggles between colour palettes.
  2. A/G: Alphanumerics/graphics (low/high) select.
  3. INT/EXT: Selects internal (low) or external (high) character generator ROM. Only the internal ROM is available on the MC-10; this line is provided to toggle between semigraphics modes.
  4. GM0-2: Graphics mode select lines.

To simplify things, the INT/EXT and GM2 lines are tied together on the MC-10. Also, the A/S (alphanumerics/semigraphics) control line is pulled high by the hardware, meaning that alphanumerics-only modes are inaccessible.

The following table lists the video modes available on the MC-10, and the bit patterns required to activate them:

A/G GM0 GM1 GM2 Video Mode Colours Memory
0 X X 0 Semigraphics 4 (SG4) 8 512 bytes
0 X X 1 Semigraphics 6 (SG6) 8 512 bytes
1 0 0 0 64 x 64 Colour Graphics One (CG1) 4 1024 bytes
1 1 0 0 128 x 64 Resolution Graphics One (RG1) 2 1024 bytes
1 0 1 0 128 x 64 Colour Graphics Two (CG2) 4 2048 bytes
1 1 1 0 128 x 96 Resolution Graphics Two (RG2) 2 1536 bytes
1 0 0 1 128 x 96 Colour Graphics Three (CG3) 4 3072 bytes
1 1 0 1 128 x 192 Resolution Graphics Three (RG3) 2 3072 bytes
1 0 1 1 128 x 192 Colour Graphics Six (CG6) 4 6144 bytes
1 1 1 1 256 x 192 Resolution Graphics Six (RG6) 2 6144 bytes

Note that RG3 is the highest video mode usable on an unexpanded MC-10. For all practical purposes, modes CG6 and RG6 require the 16k memory expansion.

Micro Colour Basic directly supports only the Semigraphics 4 video mode. To access different video modes from BASIC, POKE the corresponding decimal value from the following chart into memory address 49151:

Mode Palette POKE Value Mode Palette POKE Value
SG4 Green 0 $00 RG2 Green 56 $38
Orange 64 $40 Buff 120 $78
SG6 Green 4 $04 CG3 Green 36 $24
Orange 68 $44 Buff 100 $64
CG1 Green 32 $20 RG3 Green 52 $34
Buff 96 $60 Buff 116 $74
RG1 Green 48 $30 CG6 Green 44 $2C
Buff 112 $70 Buff 108 $6C
CG2 Green 40 $28 RG6 Green 60 $3C
Buff 104 $68 Buff 124 $7C

In semigraphics mode, the background colour of the screen can be toggled between green (CSS = 0) and orange (CSS = 1). In the resolution graphics modes, the drawing colour can be selected from green (CSS = 0) and buff (off-white; CSS=1). In the four-colour graphics modes, colour palettes are defined as in the chart below:

Palette Value Colour
Green (CSS = 0) 0 Green
1 Yellow
2 Blue
3 Red
Buff (CSS = 1) 0 Buff
1 Cyan
2 Magenta
3 Orange

2.3.5 Memory Expansion Connector

At the back of the MC-10, behind a plastic cover attached by screws, is a 34-pin card edge connector which provides access to the address and data busses of the MC6803. The pin assignment is shown below.

Top Bottom
GND 1 2 GND
D0 3 4 D1
D2 5 6 D3
D4 7 8 D5
D6 9 10 D7
R/-W 11 12 A0
A1 13 14 A2
A3 15 16 A4
A5 17 18 A6
A7 19 20 A8
A9 21 22 A10
A11 23 24 A12
A13 25 26 A14
A15 27 28 E
SEL 29 30 -RESET
-NMI 31 32 +5V
GND 33 34 GND

A0-A15 and D0-D7 form the address and data busses, respectively. Active low signals are prefixed with a hyphen. The R/W line indicates whether the contents of the data bus are to be written or read. Non-maskable interrupts are generated by a trailing edge on NMI; holding RESET low for three cycles will restart the CPU. According to the MC6802 (not MC6803) datasheet, it is safe to tie NMI and RESET directly to +5 volts if they are not used. I also gather from the MC6802 datasheet that the clock input to the CPU is duplicated at E.

The memory expansion connector was, not surprisingly, generally used to attach Radio Shack's 16k memory expansion. No other peripherals which used this port were marketed in North America. Apparently in France, a robotic arm accessory was sold for the Alice computers; I would imagine that it connected to this port -- verification, anyone?

2.3.6 Other

There is one CPU-dependent sound channel, which is also fed to the RF modulator and output from the television speaker. Sound is produced by toggling bit seven of memory address $BFFF (49151). The BASIC SOUND command can also be used to produce tones of varying pitch and duration.

2.4 Programming Tools

The MC-10 can be programmed using the BASIC interpreter in ROM, which provides most of the commands available in the original Colour Basic. There are also a couple of new commands added, and even an undocumented command: "EXEC," which allows the user to transfer control to a machine-language routine in memory.

Any assembler or compiler which outputs machine code for the MC6800, 6801, or 6803 processor can be used to produce machine-language software for the MC-10. (Remember, the MC6809 used in the Colour Computer is a very different processor!)

Thanks to all who wrote to tell me that CLOADM and EXEC can be used to load and execute machine-language programs. (I still haven't been able to verify that CLOADM is recognized by Micro Colour BASIC, however.)

I am currently working on a small, MC6803 development suite for the MC-10, written in Java and C, although I've made little progress in the past couple of months. You can still download the Java-based disassembler in zip (Windows 95/NT, OS/2) or tar-gzip format (Linux and other UNIXes). I'll eventually get around to adding links to other freely-available MC6800 development tools as well.

3. Other Resources

4. References

  1. Bishop, Ron. Basic Microprocessors and the 6800. Hayden Book Company, Inc., 1979.
  2. Datasheet for the MC6802, MC6808, and MC6802NS. Motorola Inc., 1984.
  3. Datasheet for the MC6847 and MC6847Y. Motorola Inc., 1984.
  4. Microcomputer Applications Engineering, Motorola Inc. M6800 Microprocessor Applications Manual. Motorola Inc., 1975.
  5. Tandy Corporation. TRS-80 Micro Color Computer Model MC-10 Operation and Language Reference Manual. Tandy Corporation, 1982.
  6. Wright, Ron. MC-10 Exposed. 1983. (Thanks to Bob Devries.)