Auch wenn Commodore das so nicht vorgesehen hat,
ich bin wirklich ein grosser Fan von Stereo am C64, daher habe ich damals™ auch das C64.io entwickelt, damit ist der Einbau von FPGASID,
SIDKick, MixSID & Co deutlich einfacher, und alle sind zufrieden!
ALLE ?
Naja, bis auf die C128 User halt, leider hat Commodore dort die MMU an 0xD500 adressiert, damit entfällt diese Adresse für den Stereo-Betrieb,
bleibt zwar noch 0xD420, aber viele Stereo-SID erwarten 0xD500!
Ich habe lange nach entsprechenden Informationen gesucht, und dann bin ich auf der MixSID-Webseite fündig geworden, dort wird auch das
U3 GAL erwähnt, genau so habe ich mir das vorgestellt: https://github.com/hbekel/MixSID/tree/master/firmware/c128
Ich musste lediglich die Platine zeichnen, außerdem habe ich die Verknüpfung für das MegaBit-ROM (U36) hinzugefügt, dann habe ich die
wichtigsten Signale (/IO1, /IO2, /U36, /SID) auf PinHeader geführt.
Das U3!, die Funktion von U3 (74LS138) wird nachgebildet, der Adressbereich für den SID wird erweitert, der ursprüngliche Adressraum
von 0xD400..0xD4FF wird (nur im C64-Mode) auf 0xD400..0xD5FF erweitert.
Damit sind lustige Sachen möglich, z.B. "the tuneful eight" am C128 (über SideKick, Bild 1), auch ganz normale Stereo-Stücke laufen jetzt,
sowohl an 0xD420, als auch an 0xD500.
Ein kurze Erläuterung der Anschlüsse am PinHeader:
/C64 - wird mit Pin 15 der PLA verbunden, wie der Zufall es will befindet sich genau vor Pin 15 eine Durchkontaktierung, über dieses Signal
wird erkannt ob sich der C128 im C64-Mode befindet.
/SID - das erweiteret Chip-Select für den SID (lieget auch am SID-Sockel), kann genutzt z.B. für das SideKick genutzt werden, im Bild die
gelbe Strippe die im c128 verschwindet.
/IO1, /IO2 - eigentlich selbsterklärend, wird teilweise von Stereo-SID Lösungen benötigt.
/U36 - Steuersignal für C128 MegaBit-ROM (U36), erleichert den Einbau ungemein, bzw. erspart das Löten direkt am TTL.
Am Pinheader bleiben 2 Signale frei (1x I/O - A8, 1x Input - unbeschriftet), eigentlich zur freien Verwendung, als Default habe ich A8 auf den
I/O gelegt, der Input bleibt frei. A5 liegt leider nicht an U3, muss daher z.B. an der CPU (8502) abgegriffen werden.
- Name C128SIDU3!a;
- PartNo GAL16v8D;
- Date 2024-05-06;
- Revision 01;
- Designer Jood;
- Company private;
- Assembly None;
- Location Germany;
- Device G16V8AS;
- /* Input */
- Pin 1 = A8; /* C128, A8 @U3 (Pin 1) */
- Pin 2 = A9; /* C128, A9 @U3 (Pin 2) */
- Pin 3 = A11; /* C128, A11 @U3 (Pin 3) */
- Pin 4 = !U31; /* C128, U31 @U3 (Pin 4) */
- Pin 5 = !IOCS; /* C128, IOCS @U3 (Pin 5) */
- Pin 6 = _VCC; /* C128, VCC @U3 (Pin 6) */
- Pin 7 = _IO2; /* C128, IO2 @U3 (Pin 7 > Pin 18) */
- Pin 8 = _GND; /* C128, GND @U3 (Pin 8) */
- Pin 11 = !C64; /* input, connect to PLA (Pin 15) */
- /* Output */
- Pin 12 = IO8; /* modified A8, connect to SIDFX3 */
- Pin 13 = !IO1; /* generated !IO1 - (DE00..DEFF) */
- Pin 14 = !CIA2; /* generated !CIA1 - (DC00..DCFF */
- Pin 15 = !CIA1; /* generated !CIA2 - (DD00..DDFF */
- Pin 16 = !U36; /* generated !U36 - (D700..D7FF */
- Pin 17 = !VDC; /* generated !VDC - (D600..D6FF */
- Pin 18 = !IO2; /* generated !IO2 - (DF00..DFFF */
- Pin 19 = !SID; /* extended !SID - (D400..D5FF */
- /* Equations */
- IO8 = A8;
- SID = U31 & IOCS & !A11 & !A9 & !A8 /* D400..D4FF */
- # U31 & IOCS & !A11 & !A9 & C64; /* D400..D5FF */
- VDC = U31 & IOCS & !A11 & A9 & !A8; /* D600..D6FF */
- U36 = U31 & IOCS & !A11 & A9 & A8; /* D700..D7FF */
- CIA1 = U31 & IOCS & A11 & !A9 & !A8; /* DC00..DCFF */
- CIA2 = U31 & IOCS & A11 & !A9 & A8; /* DD00..DDFF */
- IO1 = U31 & IOCS & A11 & A9 & !A8; /* DE00..DEFF */
- IO2 = U31 & IOCS & A11 & A9 & A8; /* DF00..DFFF */
- /* -- fin -- */
Die Projektdateien befinden sich wie immer im Anhang, wenn noch Fragen offen sind, einfach fragen...
PS: Die Platine wird in 0.8mm gefertigt!
Mfg Jood