Der Expansionsport
Der Expansionsport des C16 und Plus/4 ist leider nur eingeschränkt nutzbar. Es sind zwar alle Signal-, Daten- und Adressleitungen vorhanden, jedoch sind nur 16 Byte freier Adressraum verfügbar, die auch noch selbst dekodiert werden müssen.
Zudem wird dieser Bereich beim Systemstart noch initialisiert, da $fd20 ursprünglich für die Speecherweiterung vorgesehen war, die jedoch nicht im Plus/4 verbaut wurde.
Mit dem Expansionsport können ROM-Module eingeblendet werden, die entweder per "CBM"-Kennung oder durch Programm aktiviert werden können.
PIN SIGNAL Verwendung PIN SIGNAL Verwendung
1 GND Masse A GND Masse
2 +5V Versorgung B C1_Low Cartridge 1 Low(-Bank)
3 +5V Versorgung C _RESET /RESET
4 _IRQ Interrupt Request D RAS Row Address Signal
5 C-R/W_ Read/Write 1/0 E PHI2 Systemtakt
6 C1_High Cartridge 1 High(-Bank) F A15 Adressleitung
7 C2_Low Cartridge 2 Low(-Bank) H A14 Adressleitung
8 C2_High Cartridge 2 High(-Bank) J A13 Adressleitung
9 CS1_ Chip Select 1 (internes Banking) K A12 Adressleitung
10 CS2_ Chip Select 2 (internes Banking) L A11 Adressleitung
11 CAS Column Address Signal M A10 Adressleitung
12 MUX Address Multiplexing N A9 Adressleitung
13 BA Bus available (CPU=1) P A8 Adressleitung
14 CD7 Datenbit 7 R A7 Adressleitung
15 CD6 Datenbit 6 S A6 Adressleitung
16 CD5 Datenbit 5 T A5 Adressleitung
17 CD4 Datenbit 4 U A4 Adressleitung
18 CD3 Datenbit 3 V A3 Adressleitung
19 CD2 Datenbit 2 W A2 Adressleitung
20 CD1 Datenbit 1 X A1 Adressleitung
21 CD0 Datenbit 0 Y A0 Adressleitung
22 AEC Address Enable Control Z NC Nicht verwendet
23 EXAUD Extern Audio AA NC Nicht verwendet
24 PHI2 Systemtakt BB NC Nicht verwendet
25 GND Masse CC GND Masse
Die originale Schaltung eines Plus/4-Cartridge (Logo-Cartridge):
Im Bild sieht man die Beschaltung der Low-Bank mit dem 23128 ROM (16Kbytex8). Die andere Seite ist identisch und verwendet entsprechend die C1 High-Leitung.
Das ROM-Banking:
LO ROM and HI ROM are determined by writing
to the appropriate ROM LATCH address.
BANK ROM LATCH LO ROM HI ROM
$00 FDD0 BASIC KERNAL
$01 FDD1 (FUNCTION LO) KERNAL
$02 FDD2 CARTRIDGE 1 LO KERNAL
$03 FDD3 CARTRIDGE 2 LO KERNAL
$04 FDD4 BASIC (FUNCTION HI)
$05 FDD5 (FUNCTION LO) (FUNCTION HI)
$06 FDD6 CARTRIDGE 1 LO (FUNCTION HI)
$07 FDD7 CARTRIDGE 2 LO (FUNCTION HI)
$08 FDD8 BASIC CARTRIDGE 1 HI
$09 FDD9 (FUNCTION LO) CARTRIDGE 1 HI
$0a FDDA CARTRIDGE 1 LO CARTRIDGE 1 HI
$0b FDDB CARTRIDGE 2 LO CARTRIDGE 1 HI
$0c FDDC BASIC CARTRIDGE 2 HI
$0d FDDD (FUNCTION LO) CARTRIDGE 2 HI
$0e FDDE CARTRIDGE 1 LO CARTRIDGE 2 HI
$0f FDDF CARTRIDGE 2 LO CARTRIDGE 2 HI
( ) NOT AVAILABLE ON THE C16
Auswahl per Software:
ldx $bank ; siehe Tabelle
sta $ffd0,x
stx $fb
rts
So blendet man die ROMs per Software ein. Man sollte dabei aber immer im Hinterkopf behalten, dass es sehr unschöne Nebeneffekte haben kann, wenn man sich z.B. das Kernal ausblendet. ;)
ROM-Erkennung beim Systemstart
Wenn ab $8007,x die Kennung "cbm" gefunden wird, springt das Kernal die Adresse $8000 an. Das entspricht Bank $02 oder Select-Leitung C1_Low mit ROM ab $8000.
; *********************************************
;
; Check for ROM's.
; Here we search for the ROM sig (cbm) at $8007
;
; *********************************************
LFC1E LDX #$03
STX $96
LDA #$00
LFC24 STA $05EC,x
DEX
BPL LFC24
LFC2A LDX $96
LDA $FC7B,x
TAX
STA $FDD0,x
LDY #$02
LFC35 LDA $8007,y
CMP $FC56,y
BNE LFC51
DEY
BPL LFC35
LDA $8006
LDX $96
STA $05EC,x
CMP #$01
BNE LFC51
STX $FB
JSR L8000
LFC51 DEC $96
BPL LFC2A
RTS
db $43,$42,$4d ; ROM ID "cbm"
Die freie Adresse $FD20
Der Initialisierungs-Code im Startup des ROM:
LDA #$09
STA $FD20
ORA #$80
STA $FD20
Die freie Adresse $fd20-$fd2f kann für eigene Anwendungen dekodiert oder direkt die passende Select-Leitung am PLA verwendet werden. Dabei muss jedoch beachtet werden, dass obiger Schreibzugriff auf $fd20 einige Bits setzt. Die drei gesetzten Bit %10001001 können dann vielleicht trickreich verwendet werden oder A0 mit in die Dekodierung mit eingebunden werden. Dann muss zumindest es $fd21 werden, wenn %00000000 ($00) nach dem Start des Rechners vorliegen sollen.
Prinzipiell kann man auch im unteren Adressraum des RAM, z.B. $1000-$4000 eine Adresse ausschließlich (!) zum Schreiben verwenden. Hierbei ist aber zu beachten, dass auch ins RAM in dem gewählten Bereich geschrieben wird und Lesen nicht stattfinden kann ! - Die Treiber der Erweiterung und des RAM arbeiten dann gegeneinander.
Unvollendetes:
Hier noch ein kleiner Ansatz als Inspiration. Das Cartridge verwendet $df2x zum Schalten der Register und zwei 010er Flash-ROMs zur Aufnahme vieler einzelner ROM-Images. Die Steuersoftware wird im Low-ROM Bank $00 untergebracht und wird beim Startup zuerst aktiviert. So sollte eine komfortable Auswahl der gespeicherten ROMs möglich sein.
Wie man im Bild erkennen kann, ist die Dekodierung mehr als holprig mit Standard-TTLs. Da wäre wohl zumindest ein GAL 20V8 oder CPLD angebracht.