potmux

Zusatzmodul für den Keyman64 -- zusätzliche Joystick-Buttons an Tasten binden

Potmux Rev.2

Das Potmux ist ein kleines Zusatzmodul für den C64, das es dem Benutzer erlaubt, die Potentiometer-Leitungen der Control-Ports optional umzuleiten, so dass diese nicht mehr am SID anliegen und stattdessen zu anderen Zwecken verwendet werden können.

In erster Linie soll das Modul dazu dienen, im Zusammenspiel mit einem Keyman64 zusätzliche, an die Potentiometer-Leitungen angeschlossene Joystick-Buttons mit benutzerdefinierten Tasten auf der Tastatur zu verknüpfen.

Das auf dieser Seite bereitgestellte Kommandozeilenprogramm potmux kann verwendet werden, um einem C64-Programm eine spezifische Potmux-Konfiguration voranzustellen. Das resultierende Programm konfiguriert zunächst den Keyman64 über dessen serielle Schnittstelle, die dazu an den Kassetenport-Leitungen “Cassette Sense” und “Cassette Write” angeschlossen wird, und startet daraufhin das eigentliche Programm.

Die Dokumentation ist sowohl auf deutsch als auch auf englisch verfügbar.

Arbeitsweise

Im C64 dient ein 4066 IC dazu, jeweils zwei der vier analogen Leitungen an den Control-Ports (POTAX, POTAY, POTBX und POTBY) an die beiden analogen Eingänge des SIDs weiterzuleiten. Dabei bestimmen die Leitungen PA6 und PA7 der CIA, welche Leitungen an den SID weitergeleitet werden.

Dieses Modul ersetzt den 4066 und fügt die Möglichkeit hinzu, die vier analogen Leitungen der Control-Ports alternativ an einen anderen Ort weiterzuleiten.

Ist das Enable-Signal des Moduls /EN high, werden die Leitungen wie gewohnt abhängig von PA6 und PA7 an den SID weitergeleitet.

Ist /EN dagegen low, werden die Leitungen POTAX, POTAY, POTBX und POTBY stattdessen auf die Pins A1, A2, B1 und B2 weitergeleitet.

Dokumentation

Downloads

Quellen

Die Quelldistribution enthält den Schaltplan sowie das Layout der Platine im KiCad format.

Die letzte stabile Version ist potmux-1.0.tar.gz.

Alle veröffentlichten Versionen finden sich unter /download/potmux

Neuste Entwicklungen können auf github verfolgt werden:

git clone https://github.com/hbekel/potmux

Binärdateien

Bestellung von Bausätzen

Ich biete Bausätze zum Preis von 5€ pro Stück an. Der Bausatz enthält ein Potmux-Platine sowie alle benötigten Bauteile (ausgenommen Verbindungskabel). Weltweiter Versand per Post ist kostenlos.

Bestellungen könnt Ihr per Mail an henning.liebenau@protonmail.com tätigen.

Bitte verwendet das Wort “potmux” im Betreff. Gebt in der Mail euren vollen Namen, Eure Lieferadresse und die Anzahl der gewünschten Bausätze an. Bitte beachtet, dass die Anzahl der Bausätze pro Person auf zwei Stück beschränkt ist. Ihr bekommt dann von mir per Mail weitere Informationen zur Bezahlung per Überweisung. Bitte beachtet, dass im voraus gezahlt werden muss, um die Bestellung verbindlich zu bestätigen.

Hinweise zur Verfügbarkeit

Ich versuche stets eine ausreichende Menge an Bausätzen auf Lager zu halten. Bitte beachtet jedoch, dass dies mit geringem Budget und bei minimaler Gewinnmarge in meiner Freizeit passiert. Mein Ziel ist es primär, der Community meine Hardware zugänglich zu machen, und nicht etwa ein profitables Geschäft zu betreiben.

Sollte ich also momentan keine Bausätze auf Lager haben kann es durchaus einige Wochen dauern, bis ich eine neue Serie von Bausätzen produzieren und somit eurer Bestellung nachkommen kann. Unter Umständen muss ich auch warten, bis eine ausreichende Anzahl an Vorbestellungen eingeht, bevor ich selbst die nötigen Bauteile zu einem ausreichend günstigen Preis bestellen kann. In diesen Fällen werde ich Euch natürlich regelmäßig über den Status Eurer Bestellung informieren. Es bedarf also unter Umständen ein wenig Geduld und auch Vertrauen von Eurer Seite.

Aufbau

Während des Aufbaus können die Liste der Bauteile und der Bestückungsplan zur Orientierung dienen.

Das Modul ersetzt U18 auf der 250469 bzw. U28 auf älteren Hauptplatinen. Falls das IC noch nicht gesockelt ist, muss es ausgelötet und ein geeigneter Sockel eingesetzt werden.

Aufbauanleitung

  1. Den Widerstand R1 auf der Unterseite der Platine einlöten
  2. Die Keramikkondensatoren C1 und C2 am oberen Rand einlöten und die gewinkelte, sechspolige Stiftleiste am unteren Rand einlöten
  3. Die mitgelieferte IC-Adapterleiste in zwei gleich große Teile von je sieben Pins schneiden
  4. Die IC-Adapterleisten in den Sockel auf der Hauptplatine einsetzen. Dabei werden die etwas dünneren Pins in den Sockel gesteckt. Die Platine wird auf die Adapterleisten setzen, wobei die zwei Reihen mit je sieben Löchern verwendet werden (dies sollte offensichtlich sein)
  5. Die Adapterleisten von oben anlöten
  6. Nun werden die oben aus der Platine ragenden Pins abgeschnitten, so dass die Oberfläche wieder möglichst flach ist. Dadurch kann der Sockel für U2 flach aufliegen. Es müssen dazu zumindest die Pins der rechten Adapterleiste und eventuell die Pins des Widerstandes abgeschnitten werden.
  7. Die Sockel für U1 und U2 einlöten
  8. Die ICs U1 und U2 einsetzen
  9. Das Modul in den Sockel auf der Hauptplatine einsetzen
  10. Nun mit dem Test fortfahren

Liste der Bauteile

Referenz Typ Wert Bauform/RM
C1 Keramikkondensator 100nF 2.54mm
C2 Keramikkondensator 100nf 2.54mm
R1 Widerstand 1/4W 4.7kΩ 6.5mm, ∅ 2.5mm
U1 74HC4052 IC - DIP-16
U2 74HC4052 IC - DIP-16
- Stiftleiste gewinkelt 6pin 2.54mm
- IC-Adapterleiste 7pin 2.54mm
- IC-Adapterleiste 7pin 2.54mm
- Steckbrücke - 2.54mm

Sockel sind nicht aufgelistet

Bestückungsplan

Schaltplan

Installation des potmux Kommandozeilentools

Binary

Das Windows 32bit Executable potmux.exe findet sich in der Zipdatei. Es kann in einem beliebigen Verzeichnis installiert und dann auf den Pfad gelegt werden.

Source

Linux & MacOSX

$ tar vxzf potmux-1.0.tar.gz
$ cd potmux-1.0

Es wird der KickAssembler in Version 4 benötigt. Das Makefile muss entsprechend angepasst werden. Die Variable KASM muss auf eine KickAssembler-Installation zeigen.

$ make
$ make install

Dies installiert nach erfolgreicher Kompilierung das tool potmux nach /usr/local/bin. Die PREFIX-Variable kann für die Installation mit einem anderen Präfix benutzt werden, z.B. installiert make PREFIX=/usr install nach /usr/bin. Die Variable DESTDIR kann für die Installation in ein lokales Verzeichnis mit dem gegebenen Präfix verwendet werden.

Test

Funktion der Paddles/Mäuse prüfen

Falls Paddles und/oder eine Maus vorhanden sind, sollte zunächst geprüft werden, ob diese nach wie vor funktionieren. Dazu kann ein Spiel mit Paddle-Unterstützung oder ein spezielles Testprogramm verwendet werden.

Alternative Weiterleitung prüfen

Mit Hilfe der mitgelieferten Steckbrücke die Pins /EN und GND überbrücken. Dies kann gefahrlos auch während des Betriebs vorgenommen werden.

Dadurch wird /EN auf low gezogen, die Potentiometer-Leitungen sollten nicht mehr an den SID geleitet werden und Paddles oder eine Maus sollten folglich nicht mehr funktionieren.

Nun den Joystick anschließen und mit Hilfe eines Multimeters prüfen, ob beim Drücken der zusätzlichen Joystick-Buttons die zugehörigen Pins am Modul auf Masse geschaltet werden:

Potentiometer line C64 Control Port Potmux pin
POTAX A A1
POTAY A A2
POTBX B B1
POTBY B B2

Anschluss und Konfiguration des Keyman64

Falls das Modul wie vorgesehen funktioniert, kann die /EN Leitung des Moduls nun mit einer freien Steuerleitung des Keyman64 verbunden werden. Eine Tastenkombination für diese Leitung kann konfiguriert werden. Für die folgenden Beispiele wird angenommen, dass die /EN-Leitung des Potmux mit der ersten Leitung des Ports A des Keyman64 verbunden ist.

set a0
b: invert a0

Zunächst wird hier /EN beim Einschalten oder bei einem Reset des Keyman64 auf HIGH gesetzt, so dass Paddles oder Mäuse nach dem Einschalten zunächst wie gewohnt funktionieren. Es wird außerdem die Tastenkombination Meta-B definiert, um zwischen Normalbetrieb und alternativer Umleitung hin- und herschalten zu können.

Die Ausgangsleitungen des Moduls (A1-B2) werden nun mit Steuerleitungen des Keyman64 verbunden. Es wird hier angenommen, dass die Potmux-Leitungen A1 bis B2 mit der unteren Hälfte des Ports B des Keyman64 verbunden sind.

Es muss sichergestellt sein, dass diese Steuerleitungen initial in den Tristate-Zustand versetzt werden und niemals durch Keyman64-Befehle in einen anderen Zustand versetzt werden.

Nun können zu Testzwecken einige Verknüpfungen von Steuerleitungen und Tasten konfiguriert werden. Dazu werden die folgenden Zeilen zur Konfiguration des Keyman64 hinzugefügt:

map b0 A
map b1 B
map b2 C
map b3 D

Der Befehl map verknüpft eine Steuerleitung mit einer Taste. Hier werden die Potmux-Leitungen A1 bis B2, angeschlossen an die Keyman64-Leitungen b0 bis b3, entsprechend mit den Tasten A bis D verknüpft.

Nach dem Übertragen der neuen Konfiguration nun sicherstellen, dass sich der C64 im Direktmodus befindet. Über Meta-B nun die alternative Weiterleitung aktivieren. Es sollte jetzt bei jeder Betätigung der zusätzlichen Joystick-Buttons die entsprechende Taste gedrückt werden und der zugehörige Buchstabe sollte auf dem Bildschirm erscheinen.

Programme mit Button-Konfigurationen verknüpfen

Abhängig vom jeweils laufenden Programm oder Spiel werden unterschiedliche Konfigurationen für die Joystick-Buttons benötigt. Zu diesem Zweck jedes mal die Konfiguration des Keyman64 umzuschreiben und zu übertragen ist sicher nicht sonderlich komfortabel.

Es wäre schöner, wenn eine spezifische Konfiguration zu einem Programm hinzugefügt werden könnte, so dass das Programm den Keyman64 beim Start selbst entsprechend konfigurieren könnte.

Damit dies realisiert werden kann, muss der C64 mit der seriellen Schnittstelle des Keyman64 verbunden werden. Siehe dazu die Abschnitte Serielle Schnittstelle und Verbindung der seriellen Schnittstelle mit dem C64 in der Keyman64 Dokumentation.

Ist der C64 mit der seriellen Schnittstelle verbunden, kann ein Programm über den Prozessorport die Schnittstelle des Keyman64 ansprechen und die dort bereitgestellten Befehle auf dem Keyman64 ausführen. Dies schließt den Befehl map mit ein.

Das mitgelieferte Kommandozeilentoll potmux kann verwendet werden, ein vorhandenes C64-Programm zu patchen und die gewünschte Konfiguration hinzuzufügen.

Hier die Ausgabe von potmux --help:

Usage: potmux [<option>...] <program> [<button|switch>...]

Options:
         -h, --help           : print this help text
	 -v, --version        : print version information
         -o, --outfile <file> : output file (default: stdout)

Arguments:
         <program> : C64 program file to patch
	 <button>  : route a joystick button to a key
	 <switch>  : specify enable line and state

Example:
         potmux -o patched.prg game.prg a0:on b1:space

Im obenstehenden Beispiel wird die existierende Progammdatei game.prg eingelesen und die gepatchte Version in die Ausgabedatei patched.prg geschrieben. Der Rest der Zeile enthält die Konfigurationsparameter.

Der Parameter a0:on weist das Programm an, die Keyman64-Steuerleitung a0 auf low zu ziehen. Dies geschieht unter der Annahme, dass es sich dabei um die /EN-Leitung des Potmux handelt. So aktiviert das Programm zunächst automatisch die alternative Weiterleitung der Controlport-Leitungen.

Der Parameter b1:space weist das Programm an, die Keyman64-Steuerleitung b1 mit der Space-Taste zu verknüpfen.

Programme, die Paddles oder eine Maus unterstützen, können auch so gepatcht werden, dass sie die alternative Weiterleitung automatisch ausschalten, z.B.:

potmux -o patched.prg game.prg a0:off

Dies stellt sicher, dass in diesem Programm Paddles oder eine Maus immer funktionieren, egal, in welchen Zustand sich die /EN-Leitung vor dem Start des Programms befindet.

Lizenz

Copyright (c) 2020 Henning Liebenau <henning.liebenau@protonmail.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject
to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.