1990-Club80-32 S.47

2MB-RAM-Erweiterung für Prof 180x

Helmut Bernhardt

Zur Erweiterung des Speichers über 512K auf dem CPU-Board des
Prof 180x hinaus hat Conitec die Turbo-RAM vorgesehen. Das 'Turbo'
in dieser Bezeichnung ist aber mit Vorsicht zu genießen. Da diese
Speichererweiterung auf dem ECB-Bus steckt, liegen zwischen CPU
und diesem Speicher 2 datentreiber. Bei 9,2 MHz ist die Turbo-RAM nur
mit einem Wait zu betreiben, was dan auch beim Zugriff auf die
ursprünglichen 512K enorm bremst. Hier sei eine Alternative vorgeführt,
die ohne Waits eine Erweiterung um 2MB in Form eines Huckepack-Boards
auf dem CPU-Board bringt.

Um zu erklären, wie das machbar ist, soll zunächst auf die Verhältnisse
eingegangen werden, wie im Prof der Zugriff auf verschiedene Speicher
geregelt ist. Da dies alles hauptsächlich im PAL 14L8 gesteuert wird,
sei das disassemblierte PAL-Listing hier wiedergegeben:

PAL14L8
ausgelesen mit c't PAL-Brenner, 1988 Be
Grundversion nach Conitec

me ioe rd lir busak a18 e mm0 mm1 adr a5 gnd
a1 a7 a19 rom cas0 cas1 fdc gate ioswl dir a19 vcc

/dir    = /ioe * /rd * /adr * az * /a5		;Richtungssteuerung
	+ /me /rd /a19				;ECB-Bus-Daten
	+ rd * lir * busak			;treiber
/iosel	= /ioe * lir * /a18 * /adr * a7 * /a5 * /a2
/fdc	= /ioe * lir * /a18 * /adr * a7 * /a5 * a2
gate	= mm0 * /mm1				;Freigabe ECB-Bus-
	+ mm1					;-treiber
/a19	= /mm1					;Freigabe für
	+ a18 * /mm0				;externen Speicher
	+ /a18 * mm0
/rom	= /me * /a18 * /rd * /mm0 * /mm1
/cas0	= /me * /a18 * e * rd * /mm0 * /mm1
	+ /me * /a18 * e * mm0
/cas1	= /me *  a18 * e * /mm0
	+ /me *  a18 * e *  mm0 * /mm1

'adr' ist ein Eingangssignal für das PAL, in dem A3, A4, und A6
entsprechend den zu erzeugenden I/O-Freigabesignalen im Bereich D8H-DFH
decodiert sind. 'e' ist ein spezielles Taktsignal des HD64180, das
hier zum Timing der /CAS-Signale verwendet wird. mm0 und mm1 sind
Ausgänge eines 74LS259-Latches mit einzeln setzbaren Bits. Die übrigen
Eingangssignale des Pals sind die normalen Signale der CPU.

Die I/O-mapped Freigabesignale /iosel und /fdc sind hier uninteressant.
Für die Steuerung des ECB-Businterface und der memory-mapped
Resourcen werden im PAL die Signale a19, /gate, /rom, /cas0 und /cas1
erzeugt. /rom, /cas0 und /cas1 sinf low aktive Freigabesignale für
das ROM und für je einen 256K-Bloch RAM auf den CPU-Board. /gate, das
an die Enable-Pins der 74LS245-Bustreiber gelegt ist, steuert die
grundsätzliche Möglichkeit der CPU, auf den ECB-Bus zugreifen zu können.
Dieses Signal muß high sein, wenn die Prof 180x-Karte im Slave-Modus
für sich allein werkeln soll und eine andere CPU-Karte den Bus
kontrollieren soll.

/dir Steuert die Richtung, in der der 74ALS245-Datentreiber die Datrn
vom/zum ECB-Bus treibt; /dir = 0 bedeutet, daß die Daten vom Prof 180
zum ECB-Bus getrieben werden. In die Richtungsteuerung geht nicht
nur ein, ob gelesen oder geschrieben wird (/rd) sondern auch, ob die
Adressierte Baugruppe auf dem CPU-Board oder 'draußen' auf dem Bus
liegt. Wenn eine Baugruppe auf dem CPU-Board gelesen wrrd, muß der
Bustreiber zum Bus hin treiben, um auf dem internen Datenbus keinen
Datenkonflikt zu erzeugen. Außerdem wird auch das Signal /busak aus-
gewertet, da bei Zugriff eines externen DMA-Controllers auf Baugruppen
des CPU-Bords die Treiberrichtung in Bezug auf /rd umkehrt.

a19 ist ein high atives Freigabesignal, das auf den ECB-Bus gelegt
ist und bei Conitec u.a. für die Steuerung der Turbo-RAM benutzt wird.

Die Anlyse des disassemblierten PAL-Listings ergibt für die Steuerung
der Freigaben von ROM und internem und externem RAM die Beziehungen:

Steuersignale     freigegebene Baugruppe     Pegel v.  Pegel v.
 mm1  mm0  A18                         	      /gate      A19

  0    0    0     ROM bei /rd; RAM bei /wr      1         0
  0    0    1     RAM Bank 1                    1         0
  0    1    0     RAM Bank 0                    0         0
  0    1    1     RAM Bank 1                    0         0

  1    0    0     externes RAM                  0         1
  1    0    1     RAM Bank 1                    0         0
  1    1    0     RAM Bank 0                    0         0
  1    1    1     externes RAM                  0         1

Wenn mm0 und mm1 beide low snd, ist /gate high und es kann nicht auf
Speicher auf dem ECB-Bus zugegriffen werden. Durch UMschalten auf
mm0=1 wird das beim Lesen in die unteren 256K eingeblenete ROM abge-
schaltet. Mit mm1=1 wird der grundsätzliche Zugriff auf externe Speicher
ermöglicht. Dann wird mit mm0 gesteuert, ob der externe Speicher
in die unteren oder die oberen 256K des HD64180-Adreßraums eingeblendet
wird.

Für das Bereitstellen des bei Conitec 'externen' Erweiterungsspeichers
nun innerhalb des CPU-Boards muß die Bussteuerung nun etwas anders
gestaltet werden. Außerdem müssen Freigbesignale für zwei weiterre
RAM-Banks mit je 1 MB geschaffen werden. Dafür muß das PAL zunächst
entrümpelt werden. Auf das Signal /gate kann man verzichten, wenn man
die CPU-Karte nur als Master fahren will. Die Pins 19 der 74ALS245-
-Bustreiber werden einfach an Masse gelegt.

Da kein externer Speicher zu steuern ist, wird auch das Signl a19
nicht mehr benötigt. Es sind dann zwei Ausgänge und ein Eingang am
PAL freigeworden. Die beiden Ausgänge sollen die Freigabesignale für
die beiden zustäzlichen 1MB-RAM-Blocks ergeben und der Eingang wird
für die Selektion eines dieser beiden Blocks mit einem Signal Q2
beaufschlagt. Dann bekäme ein neues PAL den Inhalt:

PAL20L8
08.08.90                H. Bernhardt
Erweiterung des Prof 180x auf 2,5 MB RAM 

me ioe rd lir busak a18 e mm0 mm1 adr a5 gnd
a2 a7 cas2 rom cas0 cas1 fdc cas3 iosel dir q2 vcc

/dir	= /ioe * /rd * /adr * a7 * /a5
	+ /me * /rd
	+ rd * lir * busak
/iosel	= /ioe * lir */a18 * /adr *  a7 * /a5 * /a2
/fdc	= /ioe * lir */a18 * /adr *  a7 * /a5 * a2
/rom	= /me * /a18     * /mm0 * /mm1 * /rd
/cas0	= /me * /a18 * e * /mm0 * /mm1 *  rd
	* /me * /a18 * e *  mm0
/cas1	= /me *  a18 * e * /mm0
	+ /me *  a18 * e *  mm0 * /mm1
/cas2	= /me * /a18 * e * /mm0 *  mm1 * /q2
	+ /me *  a18 * e *  mm0 *  mm1 * /q2
/cas3	= /me * /a18 * e * /mm0 *  mm1 *  q2
	+ /me *  a18 * e *  mm0 *  mm1 *  q2

Das Steuersignal q2 und auch noch zwei Pseudoadressen zur Selektion
eines von 4 Blocks mit 256K innerhalb eines 1MB-Blocks im Erweite-
rungsspeicher werden mit einem zusätzlich bereitgestelltnn Latch
74LS74 erzeugt. Dieses Latch wird durch einen Out-Befehl an Port
D7H beschrieben. D0 und D1 geben darin die Pegel der Pseudoadressen
a18 und a19 und D2 den Pegel von q2 vor.

Die gesamte Erweiterungsschaltung incl. RAMs kommt auf einem Hucke
packboard unter, das in die Sockel der Adreßmultiplexer Z17 und Z18
(74HC158)  sowie Z11 (74HC51) und des Datenlatch Z15 (74LS374) der
Druckerschnittstelle gesteckt wird und diese ICs mit aufnimmt. Damit
stehen die gemultiplexten Adressen, die Daten, die Stuersignale
/RAS, MUX und /MUX auf dem Huckepackboard zur Verfügung. Die Paeudo-
Adressen a18' und a19' werden mit einrm zusätzlichen 79HC51 Gatter
gemultiplext.

Es müssen dann nur noch folgende Signale durch freie Verdrahtung
zwischen Huckepackbord und CPU-Bord verbunden werden:

/ioe  (74LS02, Pin6)		von Pin5 des Z7, 74ALS245
/wr   (RAMs, Pin2)		von Pin6 des Z7, 74ALS245
/me   (RAMs, Pin3)		von Pin2 des Z7, 74ALS245
/rfs  (74LS08, Pins 1,13)       von HD64180, Pin57
q2    (74LS174, Pin5)		an Pin23 des PAL
/cas3 (74LS08, Pin12)		von Pin8 des PAL
/cas2 (74LS08, Pin1)		von Pin13 des PAL

Und wofür ist so viel Speicher gut? Natürlich eird der erstmal als
RAM-Floppy genutzt. Anstatt diesen Speicher zusammen mit den restlichen
320K, die im Grundspeicher schon als RAM-Floppy genutzt werden, als
eine RAM-Floppy zu betreiben, soll hier eine zweite RAM-Floppy von 2MB
Kapazität eingerichtet werden. Das vereinfacht die Software etwas, wenn
nicht ständig geprüft werden muss, ob ein zu übertragender Sektor nun
auf der Erweiterung oder im Grundspeicher zu holen ist. Der benötigte
Treiber läßt sich aus dem für die 'alte' RAM-Floppy bestehenden Treiber
ohne große Änderungen umformen. Es kommt beim Login nur hinzu, daß mm1
auf high gesetzt werden muß.

Bei den Lese- und Schreib-Routinen ist noch nachzurüsten, daß der in
(@trk) übergebene Wert aufzuteilen ist in D0 und D1, die zusammen mit
einem gesetzten D2 das Adreßzusatzbyte des DMAC ergeben, und daß D2-D4
nach zweimaligen Rechtsshiften als D0-D2 an den Port D7H ausgegeben
werden. In der Logi-Routine der 'alten' RAM-Floppy sollte vorsichtshalber
grundsätzlich mm1 low gesetzt werden.

Abb.1
Bestückungs- und Anschlußplan: J1 bleibt bei 1MB-Cips offen.

Folgende Datenstrukturen sind für das BDOS vorzugeben:

	cseg		;Drive Table
@dtbl	dw	fdsd0,fdsd1,fdsd2,fdsd3	; 4 Floppy Drives
	dw	fdram			; 'alte' RAM-Floppy
	dw	f2dram			; 2MB-RAM-Floppy
	dw	hdsk0,hdsk1,hdsk2,hdsk3	; 4 Harddisk-Partitionen

	dseg		;dph's koennen in Bank 0 liegen
		; extended disk parameter header 2MB-RAM-Floppy
	dw	f2write
	dw	f2read
	dw	f2login
	dw	f2init
	dw	0,0
fd2parm	dph	0,dpbr2

	cseg		;disk parameter block fuer 2MB-RAM-Floppy
dpbr2	dpb	1024,64,2048,4096,512,0,8000
	;1024 Bytes pro Sektor,   64 Sektoren pro Track
	;2048 Tracks, Blockgroesse 4k, 512 DIR-Entries
	;keine Systemspuren, unremocable media

Da diese 2MB (wie das sonst meistens bei RAM-Floppies für 8Bit-Computer
aussieht) nicht I/O-mapped sind, kann man darin auch Programme laufen
lassen. Es liegt dann allerdings am Können des Programmierers, mit dem
BDOS ein Abkommen zu treffen, daß dieses nach dem Abarbeiten einer
BDOS-Funktion wieder ordnungsgemäß die Bank und auch noch die
entsprechende 256K-Portion einschaltet, in der Das Programm den BDOS-Call
abgesetzt hat.

Diese Problem sei an die Soft-Cracks weitergegeben.

Abb.2
Layout der Bestückungsseite der 2MB-Erweiterung

Abb.3
Layout der Lötseite der 2MB-Erweiterung

Abb.4
Schaltung

