CBM 5/6/700 - 6509 and 6525 Chips

CBM 5/6/700 - 6509 and 6525 Chips

There were several chips used in the 5/6/700 that were never used in any other Commodore machine. The 6509 processor and 6525 tri-port were the main examples. There were also various PLA (programable logic array) chips which were used to replace several common TTL chips and could be thought of in a similar way to ROMs (i.e. they set their output lines according to the state of their input lines). Some of the other chips, such as the VIC chip of the 500 and the 6526 CIA etc., were also common with the C64. The full specification for these can be found in the C64 Programmers Reference Guide or by searching various online resources.

Like the C-64's 6510, the 6509 had two registers at memory locations 0 and 1. Location 0 was the bank number, 0 to 15, that was currently active. Altering this immediately swapped the bank in use whereupon, if no precautions had been taken, the machine would usually crash. This was because the program the 6509 was running had instantly disappeared from accessible memory! Location 1 set which bank to use for the two machine code instructions LDA($--),Y and STA($--),Y. These enhanced instructions meant that any location in any bank could be accessed from any other bank using just these two instructions. Note that similar Indexed Y instructions such as CMP($--),Y and SBC($--),Y did NOT switch banks.

The 6525 was a 3-port I/O chip. It contained two normal 8-bit I/O ports which were similar to those on the 6520/22/26 plus either an 8-bit I/O port or a set of five interrupt input pins, an IRQ output and two outputs (depending on the setting of an internal bit). The machines utilised two 6525s at $DE00 and $DF00.

The registers were set up as follows:

Tri-port 1

$DE00IEEE control lines
$DE01Cassette linesNetworkIEEE
$DE02Not used
$DE03Direction Data Register (DDR) for $DE00 (port A)
$DE04DDR for $DE01 (port B)
$DE05Interrupt register
IRQ rec--ACIA 6551IPCIA 6526IEEE SRQ50/60 Hz
$DE07Active interrupt register

Tri-port 2

$DF00Keyboard select lines 1 (7-0)
$DF01Keyboard select lines 2 (7-0)
$DF02Crt mode (7-6) - keyboard input lines (5-0)
$DF03DDR for $DF00 (port A)
$DF04DDR for $DF01 (port B)
$DF05DDR for $DF02 (port C)
$DF06Not used
$DF07Not used