Moin,
Meine neuste Bastelei, ein automatische 2-Fach Expansionsportweiche.
Das Gerät ermöglicht es 2 Module am C64 zu betreiben, auch ohne umzustecken, das schont den Expansionsport.
Getestet habe ich bislang Ultimate II+, Easyflash 3, Sidekick 64, Retro-Replay sowie einge anderen Module.
Speziell das Ultimate II+ harmoniert perfekt, z.B. den Kernal-Ersatz vom Easyflash 3 verwenden, dann in das Menü
der Ultimate II+ wechseln und dort ein D64 mounten. Auf diese Art ist sogar der Diskwechsel möglich ohne die
Kernal-Funktion von EF3 zu verlieren.
Selbst die interne REU des Ultimate II+ funktioniert an der Weiche, ich habe z.B. BlueREU by Crest gestartet,
ohne Probleme!
Natürlich können auch weiterhin Easyflash Carts von Ultimate II+, Easyflash 3 oder Sidekick 64 gestartet werden.
Analog dazu funktioniert auch das Sidekick 64, z.B. einen Freezer/Fastload starten, und dann ins Menü der Ultimate II+.
Die Platine ist so ausgelegt das, wahlweise gerade, oder gewinkelte Stecker verbaut werden können,
die gewinkelte Variante ist gut für das Sidekick geeignet.
Die Umschaltung erfolgt über 2 Octal Tristate Bus Puffer 74HCT541, auch 74LS541
sollten sich eignen, diese sind leichter zu beschaffen (Reichelt), ein 74LS07 (Reichelt)
puffert die Signale zum C64 (Open Collector).
Gesteuert wird die Schaltung über einen ATTINY85, dieser wertet das Reset-Signal
des jeweiligen Moduls aus und schaltet entsprechend um. Die letzte Stellung wird im
EEPROM gespeichert und beim Start wiederhergestellt.
Für den ATTINY85 ist noch ein ISP Header vorhanden, so das der Chip direkt auf
der Platine programmiert werden kann.
Programmiert wird über die Arduino IDE, das Programm ist auch sehr übersichtlich.
- #include <EEPROM.h>
- #include <EasyButton.h> //https://github.com/evert-arias/EasyButton
- #define EN_PIN PB0 //Enable - Beide Ports aktivieren
- #define S1_PIN PB1 //Select 1 - Port 1 aktivieren
- #define S2_PIN PB2 //Select 2 - Port 2 aktivieren
- #define R1_PIN PB3 //Reset 1 - Modul oder Taster
- #define R2_PIN PB4 //Reset 2 - Modul oder Taster
- #define STATUS 0 //Memory - Configuration.
- #define timeout 5000
- byte PORT_STATUS; //Expansionsport Status
- bool ENABLE; //Flag for Enable Jumper
- EasyButton Reset1(R1_PIN, 35, false, false);
- EasyButton Reset2(R2_PIN, 35, false, false);
- void wait(uint32_t period) {
- uint32_t time_now = millis();
- while(millis() < time_now + period){
- //wait approx. [period] ms
- }
- }
- void setup() {
- PORTB |= B00000001; //EN_PIN = INPUT_PULLUP
- DDRB |= B00000110; //S1_PIN, S2_PIN = OUTPUT
- ENABLE = digitalRead(EN_PIN);
- SetConfig(EEPROM.read(STATUS)); wait(timeout);
- Reset1.begin(); Reset1.onPressed(onReset1);
- Reset2.begin(); Reset2.onPressed(onReset2);
- }
- void SetConfig(byte Index) {
- noInterrupts();
- PORT_STATUS = Index;
- if (ENABLE) {
- switch (PORT_STATUS) {
- case 0:
- digitalWrite(S1_PIN, HIGH);
- digitalWrite(S2_PIN, HIGH);
- EEPROM.update(STATUS, 0);
- break;
- case 1:
- digitalWrite(S2_PIN, HIGH);
- digitalWrite(S1_PIN, LOW);
- EEPROM.update(STATUS, 1);
- break;
- case 2:
- digitalWrite(S1_PIN, HIGH);
- digitalWrite(S2_PIN, LOW);
- EEPROM.update(STATUS, 2);
- break;
- default:
- digitalWrite(S1_PIN, HIGH);
- digitalWrite(S2_PIN, HIGH);
- EEPROM.update(STATUS, 0);
- PORT_STATUS = 0;
- break;
- }
- }
- else {
- digitalWrite(S1_PIN, LOW);
- digitalWrite(S2_PIN, LOW);
- }
- interrupts();
- }
- // Callback Reset 1.
- void onReset1() {
- PORT_STATUS = 1;
- }
- // Callback Reset 2.
- void onReset2() {
- PORT_STATUS = 2;
- }
- void loop() {
- static byte LAST_STATUS = 0xff;
- Reset1.read(); Reset2.read();
- if (LAST_STATUS != PORT_STATUS) {
- LAST_STATUS = PORT_STATUS;
- SetConfig(PORT_STATUS);
- }
- }
Über einen Schebeschalter kann die Platine abgeschaltet werden, dann verhält sich
der C64 als ob kein Modul gesteckt wäre.
Zusätzlich gibt es noch einen Modus in dem beide Ports aktiv werden, dazu muss
beim Einschalten ein Jumper (siehe Bild) gesteckt werden.
So können 2 Module zeitgleich betrieben werden (nur wenn keine Addresskonflikte
auftreten), dieser Modus ist experimentell, sollte aber funktionieren, aber ich habe
keine Module um zu testen.
Im Anhang befindet sich noch das komplette KiCAD Projekt KiCAD-DPEx2-Rev.1b.zip, viel Spaß bei nachbauen.
Über Feedback würde ich mich natürlich freuen.
Mfg Jood