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:
|$DE00||IEEE control lines|
|$DE03||Direction Data Register (DDR) for $DE00 (port A)|
|$DE04||DDR for $DE01 (port B)|
|IRQ rec||-||-||ACIA 6551||IP||CIA 6526||IEEE SRQ||50/60 Hz|
|$DE07||Active interrupt register|
|$DF00||Keyboard select lines 1 (7-0)|
|$DF01||Keyboard select lines 2 (7-0)|
|$DF02||Crt mode (7-6) - keyboard input lines (5-0)|
|$DF03||DDR for $DF00 (port A)|
|$DF04||DDR for $DF01 (port B)|
|$DF05||DDR for $DF02 (port C)|