Hallo Besucher, der Thread wurde 32k mal aufgerufen und enthält 30 Antworten

letzter Beitrag von AW182 am

6-Button-Controller (wie z.B. Sega Mega Drive Pad)

  • Gerade habe ich in Facebook etwas gesehen: der Mock-Up eines Arcade-Sticks, der direkt an die Seite des C64 montiert würde und beide Ports per Umschalter benutzt.

    Genau in dem Moment habe ich mich gefragt, ob man die Leitungen der beiden Ports nicht anders nutzen könnte, und zwar...


    Wäre es nicht möglich einen Adapter zu entwerfen, der die Leitungen von Port 1 und 2 verwendet, um einen Sega Mega Drive Controller anzusteuern? Auf diese Weise könnte man nicht nur einen oder zwei, sondern 6 oder mehr Buttons abfragen. Und Prügelspiele im Stil Street Fighter II würden nicht mehr an der Spielbarkeit scheitern. Und den zweiten Spieler könnte man via Userport dranflanschen.


    Bevor jetzt jemand sagt, dafür gäbe es keine Nachfrage: Es gibt ja auch einen 8-Spieler-Adapter, für den es kaum Kunden und noch weniger Spiele gibt ;)


    Techniker vor! :thumbup:

  • Ich glaube im Mega-Drive 6 Button Modus, sind die Leitungen "doppelt belegt".


    Das Spiel prüft dann in der Joystick Abfrage Cycle 1 was würde gedrückt, Joystick Abfrage Cycle 2 was würde gedrückt und dann erst erfolgt "Berechne Spielfeld / Bewege Spielfigur usw."
    oder sie prüfen den Joystick 2x "nacheinander" im gleichen Cycle und dann kommt "Berechne Spielfeld / Bewege Spielfigur usw." ( das ist glaube ich realistischer )

    Denn der Joystick Anschluss hat ja nur 9 Pin's ( +5V / GND bleiben 7 mögliche Zustände über ) und die ziehen die Pin's auch nur auf GND, ist noch kein BUS / Protocoll o.ä.

    Der Retroluzzer Anstatt Adapter, eine Lösung in Software !

    ciao Dirk

  • Gerade habe ich in Facebook etwas gesehen: der Mock-Up eines Arcade-Sticks, der direkt an die Seite des C64 montiert würde und beide Ports per Umschalter benutzt.

    Genau in dem Moment habe ich mich gefragt, ob man die Leitungen der beiden Ports nicht anders nutzen könnte, und zwar...

    Das ist eine gute Idee, ich hatte auch schon öfter über so was nachgedacht. Ich glaube nur nicht so recht, dass es direkt über die 9PINS der beiden Joystickports so wie gewünscht realisierbar wäre.


    Vielleicht könnte es irgendwie über eine Art Mini-Keyboard gelöst werden? Also dass irgendwie innen im C64 etwas verbaut ist, was die Kontakte von, sagen wir mal 8 Keyboard-Tasten, zusätzlich per Kabel nochmal aus dem C64-Gehäuse nach aussen führt auf ein kleines Mini-Keyboard, welches von der Größe her in etwa so ist, wie das auf den Coleco-Vision Controllern (siehe hier)


    coleco vision controller.png


    Und dieses kleine Mini-Keyboard müsste man dann irgendwie an seinem normalen Controller befestigen können (klippen/kleben?), sodaß diese 8 Keyboard-Tasten gut für die Finger zu erreichen sind, zusätzlich zu den normalen Controllerfunktionen.


    In der Programmierung solcher Prügelspiele die das dann unterstützen, müssten die ganzen Schläge/Tritte dann auf diese Keyboard-Tasten gelegt werden. Weiß nicht, inwieweit das umsetzbar ist, war nur so ein Gedanke, den ich schon öfter mal hatte. Zuletzt erst wieder wegen der "map key to controller" Funktion im HOXS, wo ich drüber nachdachte, ob solche Arten der Steuerung in den Spielen nicht irgendwie auch am echten Rechner umsetzbar wären und nicht nur im Emulator. Re-mappen von Keys geht am echten C64 ja logischerweise nicht, aber halt eben indem man die Keyboard-Tasten direkt am Controller mit dran hat über solch ein kleines Mini-Keyboard.

  • Der Retroluzzer Anstatt Adapter, eine Lösung in Software !


    ciao Dirk

    Nein, ich fürchte das wird nicht reichen. Normale Mega Drive Pads zerschiessen den C64, weil sie wohl Leitungen kurzschliessen, die nicht kurzgeschlossen werden, laienhaft ausgedrückt.

  • Vielleicht könnte es irgendwie über eine Art Mini-Keyboard gelöst werden? Also dass irgendwie innen im C64 etwas verbaut ist, was die Kontakte von, sagen wir mal 8 Keyboard-Tasten, zusätzlich per Kabel nochmal aus dem C64-Gehäuse nach aussen führt auf ein kleines Mini-Keyboard, welches von der Größe her in etwa so ist, wie das auf den Coleco-Vision Controllern (siehe hier)

    Das wäre ja ein ganz anderer Ansatz als der, der mir vorschwebt. Ich stelle mir ja vor, einen arcadigen Controller am C64 zu unterstützen. Mini-Tastaturen sind für Arcade-Spiele alles andere als praktikabel.


    Ich kenne das mit Numpads ja z.B. vom Jaguar: das ist schlecht fürs Gameplay. Du musst nämlich immer auf den Controller und weg vom Bildschirm schauen, weil Du sonst nicht die richtige Taste triffst.

  • Ein SNES Controller wurde bei Trap Them 64 umgebaut.

    Das ist ja nicht der Ansatz, den ich verfolgen würde. Ich möchte die Controller gerne lassen, wie sie sind.

    Der Retroluzzer Es gibt zumindest den SuperPad64-Adapter - ein Adapter in der Art, wie er dir vorschwebt, nur eben für SNES-Controller und angeschlossen wird er am Userport. Alle acht Buttons der SNES-Controller können am C64 abgefragt werden.

    Das kommt wohl meiner Idee am nächsten. Kannte ich gar nicht. Wie lange gibt es den schon?

  • Ich möchte die Controller gerne lassen, wie sie sind.

    Ich habe Adapter für die Joystickports, wo ich beliebige USB-Joysticks und -Pads anschließen kann. Aber leider wird dadurch auch nur ein Button unterstützt. Da frage ich mich, ob es nicht möglich wäre, an den Paddle-Leitungen im Adapter je nach gedrücktem Button verschiedene Widerstände zu erzeugen und so alle verfügbaren Buttons über die Joystickports abfragen zu können. Der Vorteil wäre, dass man nichts umbasteln muss und seine verfügbaren USB-Pads nutzen könnte.


    Genauso ließe sich dann auch ein Adapter für klassische Controller bauen, hätte aber den Nachteil, dass man sich neben dem Adapter auch noch den/die passenden Controller zulegen müsste.

  • Ich möchte die Controller gerne lassen, wie sie sind.

    Ich habe Adapter für die Joystickports, wo ich beliebige USB-Joysticks und -Pads anschließen kann. Aber leider wird dadurch auch nur ein Button unterstützt. Da frage ich mich, ob es nicht möglich wäre, an den Paddle-Leitungen im Adapter je nach gedrücktem Button verschiedene Widerstände zu erzeugen und so alle verfügbaren Buttons über die Joystickports abfragen zu können. Der Vorteil wäre, dass man nichts umbasteln muss und seine verfügbaren USB-Pads nutzen könnte.

    "Von Haus aus" funktionieren am C64 max. 3 Fire-Buttons. Die beiden zusätzlichen wurden per POT X/Y realisiert, indem diese durch interne Verdrahtung im Joystick mit +5V verbunden wurden sobald diese gedrückt wurden ( ansonsten waren Sie offen "floating" ) was dann bei gedrückt als $00 und bei offen als $FF am POT X/Y Port zur Folge hatte, wenn dieser ausgelesen wurde.

    Der USB-Joystick Adapter müsste also nur so erweitert werden das er bei gedrückten Fire-Button 2 & 3 auf dem USB Joystick jeweils HIGH/+5V an die POT X/Y Ports "anlegt".


    ciao Dirk

    P.S: mit Deiner Methode unterschiedliche Widerstandswerte zu "simulieren" könnte der C64 natürlich auch noch mehrere Buttons erkennen. Das ginge auch ohne USB Adapter mit einem Mehr-Button Joystick der direkt am C64 angeschlossen ist, allerdings müsste er intern modifiziert werden und mehrere Buttons gleichzeitig zu drücken funktioniert dann nicht mehr.

    Aber egal wie man es realisiert, die Spiele müssen es unterstützen/umgeschrieben werden.

  • Das kommt wohl meiner Idee am nächsten. Kannte ich gar nicht. Wie lange gibt es den schon?

    Der SuperPad64-Adapter wurde zusammen mit dem Spiel Race+ veröffentlicht (es gibt auch eine mittlerweile ausverkaufte Edition, bei der der Adapter zum Lieferumfang gehörte). Weiß jetzt nicht mehr, wann das Spiel veröffentlicht wurde. Dazu können Sokrates und poly.play etwas sagen.


    Es existiert aber auch ein älteres Design von Ninja/The Dreams aus dem Jahr 1998, mit dem acht SNES-Pads an den Joystickports verwendet werden können: http://hitmen.c02.at/files/har…er/ninja_snes_adapter.txt

  • Habe gerade mal im WWW geschaut, schon beim 3 Button Mega-Drive Joystick benutzen die intern einen "74157 Quad 2-Line to 1-Line Data Selectors/Multiplexers", an den 8 Eingängen dieses Chips sind L/R und A/B/C/Start angeklemmt, sind 6 Anschlüsse, also 2 Leitungen wären noch frei an diesem 74157 ( die sind ungenutzt mit GND verbunden ).

    Dann wird ähnlich wie oben im Zitat beschrieben, einmal die Select Leitung vom Mega-Drive die auch am 74157 angeschlossen ist ( als Umschalter der 2x4 Eingänge ) auf LOW gesetzt.
    Anschließend die 4-Ausgänge des 74157 eingelesen

    Dann HIGH auf die Select Leitung gelegt ( damit wird auf die anderen 4 Eingänge am 74157 "umgeschalten" )

    Anschließend wieder die 4-Ausgänge des 74157 eingelesen

    Beim 6-Button Joystick muss das jetzt intern noch komplexer gelöst sein, da ja nur 2 Leitungen ( die beim 3-Button "faul" auf GND liegen ) am 74157 Chip frei sind aber ja noch zusätzlich 3 Fire-Buttons dazu kommen, also dann wieder 1 Anschluss zu wenig am 74157 verfügbar ist.



    Aber egal wie man es realisiert, die Spiele müssen es unterstützen/umgeschrieben werden.

    Das ist klar, mich interessiert erstmal nur die technische Theorie.

    Sega 6-Button Joypad wird mit dem Ardiuino verbunden.

    Arduino simuliert das oben beschriebene "Mega-Drive Verhalten", schaltet Select LOW ließt die Ausgänge aus, danach HIGH und ließt die Ausgänge aus!
    Hat jetzt alle Bewegungs & Buttons in seiner "Zwischenablage" und gibt die an den C64 weiter.

    Entweder wie du schon im 1. Posting geschrieben hast... simultan an die Eingänge des Joy-Port 1 & 2 ( beide Joy-Ports für Player 1 )
    L/R/D/U Fire1 an Joy-Port1 - an Joy-Port2 L/R/D/U Fire1 umfunktioniert entspricht dann L=Fire2, R=Fire3, D=Fire4, U=Fire5, Fire1=Fire6 o.ä.

    Oder wie vom Mega-Drive zum Arduino ( nur anders herum ), also 2x nacheinander die Zustände an nur einen Joystick Port des C64.

    Egal wie, das muss dann allerdings noch irgendwie synchronisiert werden damit nichts "verloren geht"... das sind ja 2 getrennte "Systeme"... einmal der Arduino der was vom Joystick empfängt und das dann anschließend zum C64 weiterreicht.

    Wobei normal angeschlossener Joystick am C64, da wird ja auch nichts synchronisiert!

    ciao Dirk

  • Der SuperPad64-Adapter wurde zusammen mit dem Spiel Race+ veröffentlicht (es gibt auch eine mittlerweile ausverkaufte Edition, bei der der Adapter zum Lieferumfang gehörte). Weiß jetzt nicht mehr, wann das Spiel veröffentlicht wurde. Dazu können Sokrates und poly.play etwas sagen.

    Das Spiel ist von 2017. Mehr Infos zum SuperPad64 inklusive Bauanleitung findest Du hier und hier, käuflich zu erwerben gibt es - wie schon erwähnt - den SuperPad64 hier.

  • Das wäre ja ein ganz anderer Ansatz als der, der mir vorschwebt. Ich stelle mir ja vor, einen arcadigen Controller am C64 zu unterstützen. Mini-Tastaturen sind für Arcade-Spiele alles andere als praktikabel.

    Man könnte diese Mini-Tastatur ja auch anders umsetzen, dass mit dem Coleco Controller war jetzt nur ein Beispiel. Klar so wie der gestaltet ist, sind die Tasten nicht ideal nutzbar in Fighting Games. Aber man könnte es etwa mit SANWA Buttons statt mit Keyboard-Tasten machen, die in einem Mini-Gehäuse verbaut sind, welches man sich dann an den Controller klebt beispielsweise. Es ging mir hauptsächlich um die Idee, die Funktion von Keyboard-Tasten noch aussen aus dem Gehäuse zu führen und es nicht über Signale zu versuchen, die den 9Pin-Joystickausgang durchlaufen müssen.


    Durch welche Art von Hardware, also ob nun SANWA Buttons oder ähnliches, dann der Druck des Auslösens solch einer nach aussen geführten Keyboard-Taste erfolgt, könnte man sich dann ja aussuchen. Etwas blöd wäre nur, dass halt ein Kabel vom inneren des C64-Gehäuses nach aussen geführt werden müsste. Wenn man das irgendwie über Bluetooth-Signale macht, wäre dieses Problem gelöst, aber dann würde diese ganze Hardware wohl wieder zu teuer werden.


    "Von Haus aus" funktionieren am C64 max. 3 Fire-Buttons. Die beiden zusätzlichen wurden per POT X/Y realisiert



    Der USB-Joystick Adapter müsste also nur so erweitert werden das er bei gedrückten Fire-Button 2 & 3 auf dem USB Joystick jeweils HIGH/+5V an die POT X/Y Ports "anlegt".


    mit der Methode unterschiedliche Widerstandswerte zu "simulieren" könnte der C64 natürlich auch noch mehrere Buttons erkennen.

    So was in der Art wäre die Alternative. Mit solch einer Kombination aus den ganzen genannten Möglichkeiten, würde man wohl auch genügend unterschiedliche Buttons zusammenbekommen, dass man sie gut in Fighting-Games benutzen kann.


    Ich hoffe nur, man kann dann programmiertechnisch in den Spielen diese auch alle einzeln einwandfrei abfragen und es wird da dann keine Probleme geben, etwa wenn ein User dann in der Hektik eines solchen Spiels, mal zwei oder drei Buttons zugleich drückt? Das befürchtete ich nämlich zunächst, daher mein Ausweich-Vorschlag, es irgendwie über aus dem Gehäuse herausgeführte Keyboard-Tasten zu lösen.

  • Ich hoffe nur, man kann dann programmiertechnisch in den Spielen diese auch alle einzeln einwandfrei abfragen und es wird da dann keine Probleme geben, etwa wenn ein User dann in der Hektik eines solchen Spiels, mal zwei oder drei Buttons zugleich drückt?

    Ich sähe da mit einer 3-Button-Unterstützung kein Problem, da alle Leitungen einzeln abgefragt werden können. 3 Buttons sind schon sehr gut, wenn man doch bislang immer nur einen hatte.

    Aber selbst, wenn man die Paddle-Leitungen durch Widerstände splitten wollte, könnte man die trotz Kombination einzeln abfragen. Mögliche Toleranzen müssten im Programm berücksichtigt werden.


    < 0,5 V = !A & !B

    1,5 V (±0,5) = A & !B

    3,0 V (±0,5) = !A & B

    > 4,0 V = A & B


    War aber nur so eine Idee. Ich bin ja auch derzeit beim Programmieren am Überlegen, wie ich mit nur einem Button verschiedene Funktionen bereitstellen soll, ohne dass dabei, z.B. durch ein Menü, erst der Spielfluss unterbrochen wird, und ohne, dass man dauernd Rüttel- und Rühr-Orgien vom Player verlangt. Könnte ich 3 Buttons voraussetzen, würde mir dabei schon die Sonne aus dem ... Das Problem ist immer, dass man das nie voraussetzen kann, sofern sich nicht etwas relativ Günstiges zum Quasi-Standard etablieren wird. Also selbst, wenn es jetzt schon irgendwelche Lösungen gibt, muss ich beim Programmieren dennoch erst nur den 1-Button Standard voraussetzen und unterstützen.

  • Welchen Joystick mit 3 Fire Button willst du dafür nehmen ?

    Beim Mega-Drive 3 / 6 Fire Button Joystick funktioniert das nicht mit splitten und Widerstände einsetzen.
    Die 3 Fire Buttons werden ja intern nicht einzeln/permanent nach außen an das Joystick Kabel geführt!

    Ich hole mal etwas weiter aus... das Sega Master System hatte 2 Fire Buttons

    An die du auch extern am Anschluss-Stecker dran kommen würdest ( zum splitten/Widerstände usw. wenn man das so mit den Widerständen machen wollte!), da Sie einzeln/permanent nach außen geführt sind ( PIN 6 & 9 )


    Pin Signal
    1 Up
    2 Down
    3 Left
    4 Right
    5 +5V
    6 Button 1
    7 N/C
    8 GND
    9 Button 2




    Beim Mega Drive der normal 3 Buttons hat, wird aber intern im Joystick ( auf der Platine ) über den 74157 CHIP praktisch 2 x 4 PINS geschalten ( da hängen auch die 3 Fire Buttons mit dran )... abhängig davon ob der SELECT PIN am Joystick Port vom Mega Drive auf +5V oder GND gelegt wird sind jetzt folgende Fire Buttons / Bewegunstasten am Joystick Anschluss Stecker vorhanden/durchgeschleift.

    Nur PIN 1 & 2 ( UP / DOWN ) werden im Joystick direkt nach Außen an den Joystick Anschluss Stecker geleitet, die übrigen 6 Tasten ( 3x FIRE, LEFT/RIGHT und Start ) sind über den 2 x 4 "Schalter" angeschlossen und werden abwechselnd in 4er Paaren an den Joystick Anschluss durchschaltet. Ich markiere die 4er Paare mal farbig.


    Select auf GND Select auf +5V
    1 Up Up
    2 Down Down
    3 Gnd Left
    4 Gnd Right
    5 +5VDC +5VDC
    6 Button A Button B
    7 Select Select
    8 Ground Ground
    9 Start Button C



    Da kannst du nichts mit externen Widerständen splitten o.ä.
    Die aktuell gedrückten Bewegunstasten / Fire Buttons müssen per Arduino o.ä. in 2 Schritten ( einmal Select auf GND dann auf +5V ) ausgelesen und dann an den C64 entsprechend weitergeleitet werden, dann funktioniert der als 3 Button Joystick am C64.

    Oder du könntest den MegaDrive 3 Button Joystick intern umbauen ( PINS ans C64 Schema anpassen, Fire 2 & 3 an +5V kontaktieren für POT X/Y ) und dann einfach so direkt an den C64 anschließen und hättest dann auch einen funktionierenden 3 Button Joystick für den C64!

    Ich denke mittels Arduino ist die bessere Lösung... für das Auslesen des Mega Drive Joysticks gibt es fertige Bibliotheken/Source Code, das weiterreichen der entsprechenden Signalpegel an den C64 ( die betreffenden Leitungen auf GND ziehen/legen ) könnte man z.B. mittels Optokopplern galvanisch getrennt realisieren! Gibt bestimmt auch noch andere Möglichkeiten aber die Optokoppler kommen mir so gerade in den Sinn ;)


    Der Aufwand für so einen "Arduino Adapter / Zwischensteck-Lösung" wäre also überschaubar! Aber die Lösung funktioniert dann halt nur für den Mega-Drive Joystick.


    ciao Dirk