The KIM-1 explained

The hardware and the software in the KIM-1 work closely together. The tiny program, less than 2KB in the two ROMs, together with the simple hardware is very clever designed.

The KIM-1 is a complete computer with two user interfaces and data storage with a simple namespace. It is one of the first 6502 computers, and many clones or derived 6502 SBC systems are designed with more or less KIM-1 copied parts of the software and hardware. On this site you can find many examples!

On the following pages I will try to explain how all this is working together. It will not be a rewrite of the KIM-1 user manual, please read that first, but more a deeper personal dive into the software and hardware of what the makes the KIM-1 tick. It also will expect a basic knowledge of the 6502, the 6530 and digital electronics.

The KIM-1 monitor software exists of two separate parts. The 6530-002 RRIOT ROM, called KIM as separate IC, RRIOT and the 6530-003 RRIOT ROM.
The two are not written as one program, the 6530-002 routines do not need the 6530-003.
One could speculate the 6530-002 software was developed together with the LED/keyboard display and TTY interface hardware. And when that design was done,
the need for data storage for the user arose and the 6530-003 was added.

The 6530-003 only has audio tape read and write routines and uses the ports of the 6530-002 for the audio bit streams.
The 6530-002 can be used to build a standalone computer, the 6530-003 is an addon for a 6530-002 based system.
Besides sharing RAM locations in the zeropage and the RAM area in the 6530-002 RRIOT the two do not use each others routines. The 6530-003 routines only know the address of the 6530-002 START routine.

Pages to follow:

memory map
expendability and external access

The 6530-003 ROM

- the KIM-1 file system and namespace
- the audio tape read
- the audio tape write
- missed opportunities in the KIM-1 design
  - integration of main CLIs and tape routines
  - tape read and write not callable as subroutines

Work in Progress July 6, 2026

Startup of the KIM-1: RESET

RESET is executed when the user presses the RESET button, and the 6502 RESET input is triggered.


1210   1FF7             ;       ** INTERRUPT VECTORS **
1211   1FFA             
1212   1FFA              
1213   1FFA 1C 1C       NMIENT  .WORD NMIT
1214   1FFC 22 1C       RSTENT  .WORD RST
1215   1FFE 1F 1C       IRQENT  .WORD IRQT

0606   1C22 A2 FF       RST     LDX   #$FF       ; KIM ENTRY VIA RST 
0607   1C24 9A                  TXS   
0608   1C25 86 F2               STX   SPUSER
0609   1C27 20 88 1E            JSR   INITS
0610   1C2A             ;

  .. continue with TTY/KB selection

Subroutine INITS 

0963   1E88             ;
0964   1E88             ;          INITIALIZATION FOR SIGMA   
0965   1E88             ;
0966   1E88 A2 01       INITS   LDX   #$01       ; SET KB MODE TO ADDR
0967   1E8A 86 FF               STX   MODE        
0968   1E8C             ;
0969   1E8C A2 00       INIT1   LDX   #$00        
0970   1E8E 8E 41 17            STX   PADD       ; FOR SIGMA USE SAD
0971   1E91 A2 3F               LDX   #$3F        
0972   1E93 8E 43 17            STX   PBDD       ; FOR SIGMA USE SBDD
0973   1E96 A2 07               LDX   #$07       ; ENABLE DATA IN    
0974   1E98 8E 42 17            STX   SBD        ; OUTPUT
0975   1E9B D8                  CLD
0976   1E9C 78                  SEI
0977   1E9D 60                  RTS

What is happening here?

  • After a hardware RESET (manually, the KIM-1 does not have an automated RESET circuit) the vector in the KIM-1 ROM points to $1C22 (1214)
  • Stack initialized (606-610)
  • INITS called to set hardware ports
    • MODE of LED/display set to Address (Same as pressing AD on keyboard)
    • hardware ports Port A set to input Datadirection register 0 (969 – 970)
    • Ports PIA B PB0-PB5 set to output in Data Direction $3F = 0011111 (971-972)
    • Port PB0 to PB3 set to 1, PB4 and PB5 to 0 by storing $07 = 00000111 to PIA B Data (973-974)
      This sets Row 3 output to 0, see the TTY/KB selection why

The KIM-1 explained

The hardware and the software in the KIM-1 work closely together. The tiny program, less than 2KB in the two ROMs, together with the simple hardware is very clever designed.
The KIM-1 is a complete computer with two user interfaces and data storage with a simple namespace. It is one of the first 6502 computers, and many clones or derived 6502 SBC systems are designed with more or less KIM-1 copied parts of the software and hardware. On this site you can find many examples!

On these pages I will try to explain how all this is working together. It will not be a rewrite of the KIM-1 user manual, read that first, but more a deeper personal dive into the software and hardware of what the makes the KIM-1 tick. It also will expect a basic knowledge of the 6502 and digital electronics.

Work in Progress July 6, 2026

KIM-1 TTY I/O, no echo, non-blocking, deaf

A page on suppressing the KIM-1 echo of TTY input, read non-blocking and make the TTY input deaf.

Problems with the KIM-1 TTY character input

  1. The KIM-1 hardware is hardware echoing incoming serial characters to the output, no echo in software involved, so you cannot influence what appears on screen. Very annoying!
  2. The KIM-1 GETCH routine is blocking, no way to check for a character coming in, like a Break. waiting.
    Also quite annoying if porting other software to the KIM-1 or you want the program interruptable.
  3. While a program is running something CPU intensive and you type something the program is not really waiting for, the characters appear on screen. Because the KIM-1 does hardware echoing of TTY input, this is unavoidable it seems

Here I present solutions for these problems in software, made possible by the genius hardware design of the KIM-1 TTY I/O.
You can have serial input wihout echo, non-blocking and even make the TTY input deaf for unwanted input.

Are they perfect? Maybe not, it is still bitbanging the incoming serial signal. It can miss the correct starting point for the incoming character bit stream.
If you want a perfect solution, you will need interrupt driven ringbuffered serial I/O with a dedicated IC like the 6850, 6511 etc.
Without this extra hardware you can achieve acceptable results with these routines.

Settings 2.3.1

Correct KIM-1 monitor source

Many sources of the KIM-1 monitor are floating around. All typed in from the user manual, most are not identical to the original text. None deliver the real KIM-1 ROMs, they fail with filling unused bytes with FF. And the text and comments are incomplete, wrong or made up.

So in June 2026 I have typed in the source of the KIM-1 monitor as it is listed in the User manual. Every line has the same line number, all text including comments is as in the paper listing. The listing is also paged as the original. Converted to a modern MOS Technology assembler format (I used TAS32), that delivers the exact ROM binary (including those 00 filler bytes!) as dumped from the real 6530-002 and -003 by me.

KIM-1 Monitor source, listing and binaries and TASM32 archive


More on the KIM-1 ROMs here.

MOStermind


MOStermind is an implementation of the Mastermind board game for the KIM-1 computer.
Developed by HKZ.

It’s written in 6502 assembly using DASM assembler and MAME as developing tools.

You can download it here

How to play

The game follows the basic rules of mastermind: the codemaster generates a hidden code and you have to guess it in a limited number of tries, while the codemaster gives you a report on how much you got right for each guess.

The codes are be composed by 4 symbols, each symbol can be one of the following 8 characters: `A`, `B`, `C`, `D`, `E`, `F`, `G`, `H`. Note that a character appearing multiple times in a code is perfectly valid.

After you type in the 4 character code and press `RETURN`, the codemaster will analyze your guess and report the result using 4 symbols:

– `O` indicates that one symbol is both the right character and at the correct spot
– `*` indicates that a symbol is a character that appears in the code, but is in the wrong place
– `.` Indicates that a character is not present at all in the code

Note that these are **NON POSITIONAL**, and they’re just shown in order of precedence: first `O`, then `*`, then `.`. They bear no information on which of the characters is right. You’ll have to find that yourself.

In case you want to cancel a guess before submitting it (to avoid wasting a try), you can press `BACKSPACE`. The guess submission will be aborted, no analysis will be performed and you’ll be able to submit a new guess.

Does it run on the KIM-1 Simulator? YES!

You only have to set the FOCAL_V3D break setting in the Settings.

338-6503 Rockwell, a R65C02 with an obscure number

I saw an advert on bey (China seller) for a Rockwell 6503 IC. The 6503 is a variant of the 6502 with limited number of pins to 28, the same 6502 core with less addressing space.
But something in the advert made me wonder, a 40 pin 6503?

I ordered one and indeed a 40 pin IC appeared. So this is not a 6503!
Then I searched the internet for the 338-6503 printed on the IC and found references to it being a R65C02.
And indeed, the 6502 testers recognized it as working 65C02. Weird!
The ‘6503’ was found in Apple IIe and Apple IIc computers.

R6500/1EC Microprocessor Emulator Device

A R6500/1EC IC. A beautiful white version. Week 40 1980, NMOS.
The R6500/1EC is a development IC for the R6500/1 microcomputer family.

Rockwell R6500/1 family

The R6500/1 is a 6502 , ROM (2K) 64 bytes RAM ,4×8 bit I/O, a 16 bit timer with I/O pin.
The ROM contents are factory mask-programmed, not programmable by the user.

This makes it a standalone microcomputer, no extra RAM/ROM or decode logic required.

There are no external address lines or data lines, the 6502 is all internal except the interrupt lines and clock.

Rockwell R6500/1EC

To develop applications with the R6500/1 Rockwell developed the R6500/1EC. This IC has the same pins as the R6500/1 but adds address and data lines and relies on an external ROM.



Downloads

R6500/1 One-Chip Microcomputer
R6500/1E Microprocessor Emulator Device
R6500/1 Microprocessor Programming Reference Card

R6500/1EC Microprocessor Emulator Device

I acquired a R6500/1EC IC. A beautiful white version. Week 40 1980, NMOS.The R6500/1EC is a development IC for the R6500/1 microcomputer family.

Rockwell R6500/1 family

The R6500/1 is a 6502 , ROM (2K) 64 bytes RAM ,4×8 bit I/O, a 16 bit timer with I/O pin.
The ROM contents are factory mask-programmed, not programmable by the user.

This makes it a standalone microcomputer, no extra RAM/ROM or decode logic required.

There are no external address lines or data lines, the 6502 is all internal except the interrupt lines and clock.

Rockwell R6500/1EC

To develop applications with the R6500/1 Rockwell developed the R6500/1EC. This IC has the same pins as the R6500/1 but adds address and data lines and relies on an external ROM.



Downloads

R6500/1 One-Chip Microcomputer
R6500/1E Microprocessor Emulator Device
R6500/1 Microprocessor Programming Reference Card

The 6500/1 has been used for example in the AMIGA 1520 Plotter. I found this image on ebay:

Commented source of UPS-65 Thaler SBC

Ian day published the commented source of the UPS065 monitor.