# KC 85

The KC 85 ('KC' meaning "Kleincomputer", or "small computer") were models of microcomputers (KC 85/2, KC 85/3 and KC 85/4) built in East Germany by VEB Mikroelektronik "Wilhelm Pieck" Mühlhausen. The first model in the series, the HC 900, originally designed as a home computer and introduced in 1984, was renamed to KC 85/2 in 1985 to de-emphasize its use as consumer good.
Despite similar names, the KC 85 computers were not directly related to the KC 87 series produced by VEB Robotron-Meßelektronik "Otto Schön" Dresden.
The availability of the KC 85 series for private customers was very limited. The computers were mostly used at educational institutions, organizations, and enterprises.

## Technical information

They were based on the U880 CPU (an East German clone of the Z80), with clock speeds of 1.75 MHz (KC 85/2, KC 85/3) and 1.77 MHz (KC 85/4).
Unlike the Pravetz series 8 personal computers, manufactured in Bulgaria, which were equipped with dedicated displays, floppy disks and quality keyboards, the entire KC series used TV sets for display purposes. Connectors provided were TV-out via coaxial cable, composite video, RGB video. Generic tape recorders was used for data storage. The KC 85 used a separate keyboard driven by a remote control IC.
The KC 85/2 was the first computer made in Mühlhausen and had only font ROMs for capital letters, and no BASIC in ROM. Later, the KC 85/3 was introduced and this one had a KC-BASIC interpreter in ROM, freeing the user from having to load it from a cassette every time. Both systems typically had 16 KB of free RAM, but could be expanded with add-on modules. The module sockets feature prominently on photos, as they occupy the upper 50% of the casing. The KC 85/4 had 64 KB of RAM, not counting the video ram of more than 40 KB, and better graphics capabilities. In fact, the KC 85/2 and KC 85/3 were practically indistinguishable in board design except for a different ROM and an internal piezo speaker. The KC 85/4 board was redesigned, but featured the same digital-to-analog video PCB as the previous generation.
All KC-series computers from Mühlhausen were capable of displaying graphics at a resolution of 320×256 pixels. The video ram layout was awkwardly split into a 256x256 portion and a 64x256 portion to avoid a time-consuming multiplication with 40 when addressing video memory. On the KC85/4 the video ram layout was changed in a backwards-incompatible manner to 40 columns of 256 bytes and the bytes in one column were put into consecutive memory addresses. The kernel interface was of course kept as-is and software that relied on it could continue running unchanged. The color possibilities were limited in the typical color-cell fashion: each 4×8-pixel cell had a single foreground (out of 16) and background color (out of 8, slightly darker than foreground equivalents). This limitation was brought down to 1×8 on the KC 85/4 (the color cells on both the KC85/3 and KC85/4 were thus quite small compared to contemporary systems). The KC85/4 also featured a special 4-color (black, white, red, cyan) mode which could color every pixel independently. The colors were not paletted. There was no "text mode", everything had to be painted; this combined with the video RAM layout described above and ROM code made the KC 85/2-3 rather slow at printing and scrolling (improved very much on KC 85/4). There were no blitters, sprites or hardware scrolling, not a single hardware register with which to influence the display drawing process, the sole exception being the blink attribute, whose frequency could be tuned by programming the dedicated CTC register and which required no CPU assistance. The KC85/4 added one bit to select which of the two buffers to display and one bit to switch between high color (using color cells) and high color-resolution mode (using the color RAM as a second bit plane). The video subsystem was developed in-house and implemented entirely with a few dozen series 7400 ICs. With the KC 85/2 and KC 85/3 CPU access to video memory would interfere with screen redraw and cause visual distortions as pixel data could not be read from VRAM and the previously loaded strip of 8 pixels was simply drawn again. This issue was fixed in the KC 85/4 too - one video period of 8 horizontal pixels is divided evenly into 3 phases: (1) an 8 bit wide CPU access (r/w), (2) fetch 8 bits of pixel data and (3) fetch 8 bits of color data. The KC 85/4 was also the first capable of switching between 2 independent locations in video ram, allowing double buffering.
Sound and tape output was implemented by a CTC IC driving flipflops to generate square waves. A zero was represented by one period of a 2400 Hz tone, a one by a 1200 Hz tone. There was also a sync tone of 600 Hz prefixing each byte. The signal from the tape was read back, passed through a band pass filter and an interrupt would be generated each time the audio signal crossed the 0 V base line.
Data was stored on tape in blocks of 128 byte. Each block was prefixed by brief silence and a series of 1 bits. Approximately 8000 (7 seconds officially, but it could be shorter) for the first block and 160 (133 msec) for each subsequent block. Following that was the 1 byte block number, 128 data bytes and 1 byte checksum. The tape could be rewound in case a block was not read correctly and loading would continue at that block offset. The first block of the file contained metadata: filename, file type, load address, entry point address and so forth.
Memory bank-switching was common since the total address space was only 64 KB. When running Mühlhausen's BASIC, the video RAM (at 0x8000) was banked in only during video operations, thus the maximum BASIC free RAM was about 47 KB instead of 32 KB. The module extension system also used bank-switching and made it theoretically possible to extend to megabytes of RAM (even more modules could be used by adding expansion devices, yielding sort of a tower), however neither BASIC nor most of the applications were prepared to use this as free space.
The keyboard of the KC 85/2-4 was based on the U807D, a clone of the Mullard SAB3021 used in TV infrared remote controls. The U807D scanned the 63 regular keys with its 8 + 8 drive/sense pins and produced a 7 bit pulse width modulated signal (0: 5 ms, 1: 7 ms). The main computer would detect the presence of pulse delineating bursts (150 us) and generate interrupts. The main CPU would thus be interrupted 7 times for each keystroke and could measure the time between the interrupts to recover the serial data word. A special shift key made the U807D produce keycodes 64-127. To the computer the keyboard appeared as a device with 126 keys. Transmission occurred through the same wire that provided power to the keyboard. Since the keyboard was connected to the 12V voltage rail through a resistor, an increase in current consumption could be measured between the resistor and the cable as a voltage drop, inside the main computer. The keyboard just had to set a digital output low and shunt some additional current to ground. All the while the keyboard supply voltage was kept stable by a simple 9V zener diode, with which the controller IC was connected in parallel and if it remained within a certain window of current usage, 9V is what it would see.
There was a single 8867 kHz crystal oscillating at twice the PAL chrominance frequency and a divide-by-10, multiply-by-16 phase-locked loop was used to derive a 14.2 MHz clock from which the pixel clock (7.1 MHz) and processor clock (1.77 MHz) was derived by division by 2 and 8, respectively (KC85/2, KC85/3 and KC85/4 used the same circuit for this purpose, since the digital to analog video conversion PCB where the clock generation was situated did not change between revisions). There was still a slight difference in effective clock rate, the KC85/2 and KC85/3 skipped a few CPU cycles at the end of each scanline, to provide in a simple manner to the entire system the illusion of a horizontal resolution (including blanking) divisible by 8, the KC85/4 did not. None of the revisions had provisions for either vertical blank interrupts or horizontal blank interrupts.
The wiring diagrams are freely available and there were also a lot of different (and often home-made) schemes and hardware parts. Various magazines published programs and hardware diagrams and also instructions on how to build them.
* KC 85/2
* KC 85/3 with two expansion cartridges installed: a 64 KB RAM module and a parallel port
* Mainboard of the KC 85/2
* Mainboard of the KC 85/3
* KC 85/3 (black) with GC6020 floppy disk expansion (gray), manuals, cassette tape, tape deck and expansion modules
* KC 85 used in a software library (1989)

## Programming languages

The KC 85 could be programmed in assembly language and BASIC (the KC 85/2 had to load BASIC from tape), but it was possible to use various modules (sold by VEB Mikroelektronik Mühlhausen) or load software from tape, thus allowing programming in Forth and Pascal. The operating system was CAOS ("Cassette Aided Operating System"). It was a simple monitor where one could run different "system services" like LOAD (load a program), JUMP (into extension module ROM), MODIFY (memory cells) or BASIC (if it had been built into the ROM or had been loaded from tape). New commands could be added to the menu by magic numbers (standard: 7F 7F 'commandname' 01) anywhere in the memory space.
In the last years of the GDR, a floppy attachment ("tower"-style, too) was produced. It featured a 4 MHz CPU and a 5¼" Floppy drive (you could have up to four of them). These (literally: the U 880 A in the attachment did) were able to run CP/M, which was called MicroDOS. (One had to JUMP from the base system to the floppy system and boot from a floppy—another CAOS or MicroDOS). There was also a disk extension mode for CAOS.

## Hobby projects

There were a lot of different projects for the KC 85:
* a new keyboard (The original being extremely poorly manufactured)
* RAM disk
* interfaces (V.24 and others)
* text systems; WordPro actually featured 80 characters per line mode (4 × 8 font)
* connection to electronic typewriters (like the GDR-product "Erika S 3004") as keyboard and printer (but dot matrix emulation was very slow)
* programming language BASICODE (a special BASIC dialect); BASICODE-programs were even broadcast by radio