DE-9 Joystick:de

From IndividualComputers
(Redirected from DB9-Joystick:de)
Jump to: navigation, search
English

Contents


Siehe auch DE-9 Mouse, DE-9 Lightpen, DE-9 Paddle

Pinbelegung

Die Lötseite im Computer entspricht der Belegung außen am Kabel, die Lötseite am Stecker am Kabel entspricht der Belegung außen am Computer.


Pin Chameleon Atari 800
Atari VCS
Atari 7800
(*1)
Atari ST
(*2)
VIC-20
C-64
C64GS
(*3)
Amiga CD32
(*4)
Amstrad
CPC
MSX
X68000
(J-PC)
Mastersystem
(*6)
Megadrive
(Genesis)
(*6)
Sinclair
(*7)
3DO
(*8)
Sam Coupé
(*9)
Kempston Interface
(Sinclair ZX Spectrum)
1 /Up /Up /Up /Up /Up /Up /Up /Up /Up /Up /Up unused GND /Up /Up
2 /Down /Down /Down /Down /Down /Down /Down /Down /Down /Down /Down GND VCC (+5V) /Down /Down
3 /Left /Left /Left /Left /Left /Left /Left /Left /Left /Left 1Y (-, /Left) unused Audio.1 Out /Left /Left
4 /Right /Right /Right /Right /Right /Right /Right /Right /Right /Right 2Y (-, /Right) Button Audio.2 Out /Right /Right
5 /Button 3 Paddle B Button Right unused Button 3 (POTY) /Button 3 (POTX) Shift Load OUT /Button 3 VCC VCC (+5V) VCC (+5V) Up VCC (+5V) 0V /Button 3
6 /Button 1 /Button Button common /Button 1 /Button 1 /Button 1 /Fire, Clock OUT /Button 2 /Button 1 TL (/A) TL (/A, /B) Right P/S Out /Button 1 /Button 1
7 VCC (+5V) VCC (+5V) VCC (+5V) VCC (+5V) VCC (+5V) VCC (+5V) VCC (+5V) /Button 1 /Button 2 TH (unused) TH (Select OUT) Left CLK Out (125kHz) VCC (+5V) VCC (+5V)
8 GND GND GND GND GND GND GND GND (Row 9) (*5) Strobe OUT GND GND GND GND Joy1 GND (Strobe) GND
9 /Button 2 Paddle A Button Left /Button 2 Button 2 (POTX) /Button 2 (POTY) Serial Data IN GND (Row 6) (*5) GND TR (/B) TR (/Start, /C) Down Serial Data In Joy2 GND (Strobe) /Button 2


(*1) Die Atari 7800 Knöpfe erfordern spezielle Verkabelung (Atari FAQ)

(*2) Pin9 (RMB) des ersten Ports ist mit Pin6 (Feuer) des zweiten Ports intern verbunden, dieses erlaubt eine Maus mit zwei Tasten zu benutzen (im ersten Port). Am zweiten Port ist Pin9 nicht angeschlossen. Das bedeutet dass nur Port 1 zwei Tasten unterstützt, und das nur wenn der zweite Port nicht zur selben Zeit benutzt wird. Atari STe und Atari Falcon haben zwei DE-15 "erweiterte" Joystick Ports, welche mit einem passiven Adapter an zwei DE-9 Joysticks angeschlossen werden können (siehe hier). Atari Jaguar Controllers haben ebenfalls einen DE-15 Anschluss, dieser hat jedoch eine andere Pinbelegung zum Anschluss einer Tasten-Matrix (siehe hier).

(*3) Für den zweiten Knopf/rechte Maustaste wird die POTX Leitung benutzt (und für den dritten Knopf/mittlere Maustaste POTY) welche - im Unterschied zu den anderen Leitungen - mit über den Knopf an VCC verbunden ist.

(*4) Der CD32 unterstützt "Gamepad Mode" und benutzt Pin 5 um zu diesem umzuschalten (er wird vom CD32 auf high geschaltet). Echte CD32 Controller haben aktive Komponenten. Reguläre "Atari" Joysticks funktionieren am CD32, jedoch funktionieren CD32 Controller nicht zb an einem C-64 (siehe hier und hier)

(*5) Die jeweiligen GND Leitungen werden auf low gezogen um die jeweilige "Reihe" zu selektieren. Reguläre Joysticks benutzen Reihe 9.

(*6) Die "SEGA" Controller können nicht durch einfaches Neuverkabeln in einen "Atari" Joystick umgewandelt werden. Anders als reguläre "Atari" Joysticks haben diese pull-up Widerstände an allen Signalleitungen (was zb Probleme mit der Tastaturabfrage beim C-64 verursachen kann) und manche Controller enthalten möglicherweise aktive Schaltkreise welche nicht ohne VCC funktionieren. Die Megadrive Controller benutzen einen aktiven Schaltkreis (siehe hier oder hier). Die Saturn Controller benutzen ebenfalls einen aktiven Schaltkreis und sind völlig anders als der Standard verkabelt. Megadrive Controllers können mit einem einfachen Adapter als "Atari" Joysticks benutzt werden, siehe hier.

(*7) Pinbelegung bezieht sich auf den "Interface Two" ("Sinclair" aka "+3")

(*8) 3DO controllers verwenden ein serielles Interface, ähnlich dem der SNES Controller.

(*9) reguläre "Atari" Joysticks funktionieren nicht mit dem Sam Coupé. Ein spezielles Interface wird benötigt um zwei Joysticks anzuschliessen, siehe here.

Der Apple-II benutzt analoge Joysticks und kann nicht mit den gebräuchlichen digitalen Joysticks mit der hier gezeigten Pinbelegung benutzt werden, siehe hier.

Wie Sega Saturn Controller arbeiten ColecoVision- und IntelliVision II Controller komplett anders. (Siehe zb hier und hier)

Der Sinclair-QL hatte komplett andere Controller Anschlüsse. (Die amerikanische und deutsche version des QL, welche später von Samsung hergestellt wurde, hatte standard 9-Pin Joystick Anschlüsse so dass jeder standard Atari Joystick benutzt werden kann.)

2/3-Knopf Modifikation

(thumbnail)
Schaltplan

Die meissten traditionellen DB9 "Atari" Joysticks haben alle eventuell zusätzlichen Knöpfe parallel geschaltet. Bei jenen mit mehr als einem Knopf - wie dem Competition Pro - ist es verlockend einige der zusätzlichen Knöpfe neu zu verkabeln so dass diese seperat benutzt werden können. Dieses wird von einer Reihe klassischen C64GS und Amiga Spielen (zweiter Knopf an der POTX Leitung) so wie einigen Chameleon cores unterstützt.

Es gibt zwei verschiedene Wege um die zusätzlichen Knöpfe abzufragen:

  • Der klassische C64GS zwei-Knopf Joystick ("Cheetah Annihilator") benutzt die POTX Leitung, welche über den Knopf an VCC verbunden ist. Für einen dritten Knopf kann das gleiche mit der POTY Leitung erfolgen. Diese beiden Knöpfe können dann über die Paddle Eingänge abgefragt werden: Wenn der Knopf nicht gedrückt ist bleibt die POT Leitung unverbunden, was einem hohen Widerstand nach VCC entspricht, und im Wert $FF resultiert. Wenn der Knopf gedrückt wurde ist die POT Leitung mit VCC verbunden, was keinem Widerstand nach VCC entspricht, und im Wert $00 resultiert.
  • Beim Amiga sowie der Chameleon docking station würde obiges nicht funktionieren, da deren Eingänge Low-Aktiv (und nicht "high aktiv" wie die POT Leitungen) sind. Um den modifizierten Joystick mit diesen zu verwenden müssen die jeweiligen Leitungen nach GND und nicht VCC geschaltet werden.

Glücklicherweise befindet sich ein Schalter im Competition Pro Retro, mit welchem normalerweise die kleinen Knöpfe abgeschaltet werden können. Diesen Schalter können wir neu verkabeln, so dass umgeschaltet werden kann ob die POT Leitung nach GND (für Amiga, Chameleon) oder VCC (für C64) geschaltet wird. Als Vorsichtsmassnahme wird empfohlen die POT Leitungen nicht direkt mit VCC oder GND zu verbinden, sondern einen kleinen Widerstand als Strommbegrenzung in Reihe zu schalten. (Die klassischen Joysticks hatten diese Widerstände normalerweise nicht)

Nach dieser Modifikation benutzen Sie den Joystick NICHT mit anderem Equipment als einem Amiga, der Chameleon Docking Station oder einem C-64 (oder C64GS)! Aus diesem Grund empfehlen wir den Joystick eindeutig als modifiziert zu markieren (zb mit einem Permanent Marker).

Detaillierte Beschreibung des Umbaus am Competition Pro Retro

  • Öffnen Sie zuerst den Joystick und stellen sicher dass alle benötigten Leitungen im Joystickkabel vorhanden sind (Falls nicht müssen Sie ein anderes verwenden).
  • In der aktuellen (zweiten und dritten) Charge des Competition Pro Retro ist dieses der Fall und sieht so aus: (überprüfen Sie dieses mit einem Durchgangsprüfer / Multimeter bevor Sie fortfahren, da sich die Farben jederzeit ändern können)
Pin Signal Leitungsfarbe
9 POT X (zweiter Knopf) grün
5 POT Y (dritter Knopf) blau
7 VCC (+5V) grau
  • Ziehen Sie die kleine Platine, auf die der Schalter montiert ist, heraus. Entfernen Sie das kleine Stück Schaumstoff und entlöten Sie alle Kabel von der Platine.
  • Ziehen Sie vorsichtig die Montageplatte der vier Mikroschalter für die Richtungen heraus.
  • Entlöten Sie die (grünen) Leitungen, die von den kleinen Knöpfen zu den Mikroschaltern der normalen Feuerknöpfe führen, von letzteren.
  • Entfernen Sie die ebenfalls die (grünen) Leitungen, die von den kleinen Knöpfen kommen, von den kleinen Knöpfen selbst.
  • Verbinden Sie die POTX (blau) und POTY (grün) Leitungen vom Joystick Kabel mit den kleinen Knöpfen an der Stelle an der vorher die (grünen) Kabel angeschlossen waren.
  • An der Platine mit dem Schalter, verbinden Sie ein Ende eines 270Ohm Widerstandes mit dem mittleren Pin des Schalters und das andere Ende mit beiden (orangen) Leitungen die von den kleinen Knöpfen kommen. (Sie können auch einen geringfügig höheren Widerstand verwenden - in den Beispielbildern waren es 330Ohm)
  • Sichern Sie das blanke Ende des Widerstandes und Kabels mit einem Stück Isolierband.
  • Verbinden Sie die VCC Leitung (grau) vom Joystick Kabel mit einem (zb linken) und die verbliebende freie (orange) Leitung (die mit GND verbunden ist) mit dem anderen (zb rechten) Anschluss des Schalters.
  • Jetzt prüfen Sie mit einem Durchgangsprüfer ob VCC vom Schalter aus keinen Durchgang zu jeglichen Leitungen am Joystickkabel hat. Unter keinen Umständen darf VCC mit anderen Leitungen verbunden sein, ausser mit den POT Leitungen wenn der Schalter sich in der dafür vorgesehenen Position befindet und einer der zusätzlichen Feuerknöpfe betätigt wird. Prüfen Sie zur Sicherheit noch einmal nach.
  • Kleben Sie das Stück Schaumstoff wieder auf die Rückseite der Platine und bauen den Joystick in der umgekehrten Reihenfolge wieder zusammen. Die Bodenabdeckung zu montieren kann ein bischen knifflig sein - sehr wenig Kraft ist erforderlich - wenn die Teile nicht leicht zusammen passen, müssen Sie eventuell den Joystick wieder öffnen und einige Leitungen ein wenig anders plazieren.

andere Modifikationen, die zusätzliche Knöpfe bereitstellen

  • 4 zusätzliche Knöpfe, ein Schaltplan ist im crystalct Repository verfügbar. Diese fügt, wie oben beschrieben, einen 2. und 3. Knopf hinzu, zusätzlich werden zwei Knöpfe bereitgestellt, indem "oben und unten" und "links und rechts" mit zusätzlichen Knöpfen verbunden werden.
  • Protopad ist mit der oben beschriebenen Modifikation kompatibel und fügt 7 zusätzliche Knöpfe in seinem "nativen" Modus hinzu. Dies wird mithilfe eines eigenen Protokolls implementiert.
  • Joycart unterstützt 3 Knöpfe am C64

Testprogramme

C64

Spiele die zusätzliche Knöpfe unterstützen

Viele frühe Heimcomputer und Spielekonsolen wurden mit dem klassischen ein-Knopf Joystick ausgeliefert, und die Unterstützung zusätzlicher Knöpfe war unüblich. Die folgende Liste lässt die später erschienen Systeme, bei denen Controller mit zwei oder mehr Knöpfen Standard wurden (wie zb MSX, SEGA Mastersystem, etc), aussen vor.

C64

Nur für den C64GS gab es einige Spiele die offizielle Unterstützung für einen zweiten Joystick Knopf hatten. Da der C64GS sehr spät erschien konnte sich dieses nicht als Standard etablieren - allerdings wurden im Laufe der Zeit eine Reihe weitere Spiele modifiziert:

  • 1942 (crystalct version)
  • 5th gear (crystalct version) - Zweiter Knopf wechselt Waffe
  • Alien 8 by Rod & Emu - Aufsammeln/Ablegen
  • Aliens (crystalct version) - C64GS kompatibel, Zweiter Knopf: Türen, 3rd wählt Charta
  • Archon (crystalct version) - C64GS kompatibel, Zweiter Knopf (im Spiel): Reset und zurück zum Menu
  • Archon 2 (crystalct version) - C64GS kompatibel, Zweiter Knopf (im Spiel): Reset und zurück zum Menu, Dritter Knopf: Reset zum Titelbildschirm
  • Army Moves (crystalct version)
  • Arnie 2 (crystalct version) - C64GS kompatibel, Zweiter Knopf: Waffe wechseln
  • Battle Command (Ocean Cartridge) - Zwischen Panzer- und Menu wechseln, halten für Menuleiste
  • Blue Baron (crystalct version) - Zweiter Knopf zum Bomben abwerfen
  • Blue Max (crystalct version) - Zweiter Knopf zum Bomben abwerfen
  • Boulder Dash (crystalct version) (C64GS kompatibel)
  • Breakthrou (crystalct version) - Zweiter Knopf zum Springen
  • Briley Witch Chronicles (Sarah Jane Avory) (zweiter Knopf: "zurück")
  • Bruce Lee (crystalct version) - Zweiter Knopf pausiert das Spiel
  • BOFH:Servers under Siege (crystalct version) - Zweiter Knopf: Waffe wechseln
  • Bubble Bobble (crystalct version) - Zweiter Knopf zum Springen
  • Cauldron (Hexenküche) (crystalct version) - Zweiter Knopf: nach unten schiessen, Dritter Knopf: nach oben schiessen
  • Chase HQ2 (C64GS Cartridge) - Turbo Boost
  • Choplifter (rh70 version) - Zweiter Knopf wechselt Richtung
  • Choplifter (crystalct version) - Zweiter Knopf wechselt Richtung
  • Commando (crystalct version)
  • Double Dragon (crystalct version)
  • Drop Zone (crystalct version) (C64GS kompatibel, zweiter Knopf: Bombe, dritter Knopf: Tarnung)
  • Dynamite Dux (crystalct version) (zweiter Knopf: Springen)
  • Entombed (crystalct version) (zweiter Knopf: Aktion wechseln, dritter Knopf+Hoch/Runter: Pause/Neustart)
  • Exile (crystalct version) (zweiter Knopf tauscht Icon-Set)
  • Exolon (crystalct version) (zweiter Knopf: Rakete starten)
  • Fighting Warrior (crystalct version) (Zweiter Knopf: Pause, dritter Knopf: Spiel neu starten)
  • First Strike (crystalct version) (zweiter Knopf: Waffe wechseln, dritter Knopf+Hoch/Runter: Beschleunigen/Bremsen)
  • Forgotten Worlds (crystalct version) (Feuer + zweiter/dritter Knopf: Feuern und Waffe rotieren)
  • Future Knight (crystalct version) (zweiter Knopf: Objekt auswählen)
  • Gauntlet (crystalct version) (zweiter Knopf: Magie)
  • Giana Sisters 30th Anniversary Hack by The Seven-A-Three (WIP)
  • Giana Sisters (rh70 version) (Zweiter und Dritter Knopf können als "Springen" oder "Smartbomb" benutzt werden)
  • Green Beret (crystalct version) (extra Waffe)
  • Green Beret (TREX version)
  • Gryzor (crystalct version) (Springen)
  • Hard 'n Heavy (crystalct version) (Zweiter Knopf: Aktion auswählen)
  • H.E.R.O. (rh70 version) - Zweiter Knopf: Bombe
  • He-Man and the Masters of the Universe: The Ilearth Stone (crystalct version) (C64GS kompatibel, zweiter Knopf: Springen, Feuer zum Starten und Neustart bei Game Over)
  • International Karate (crystalct version) (Feuer 2: Sound ein/abschalten)
  • Ikari Warriors (crystalct version)
  • Kung Fu Master (rh70 version) - Tritte auf Feuer-1 und Schläge auf Feuer-2. Space zum tauschen.
  • Kung Fu Master (crystalct version) - Tritte auf Feuer-1 und Schläge auf Feuer-2. Space zum tauschen.
  • Last Ninja (rh70 version) - zweiter Knopf: "using", dritter Knopf: "holding"
  • Last Ninja Remix (C64GS Cartridge) - Der zum Starten gedrückte Knopf wird für die Kampf-Bewegungen benutzt, der andere um Waffen auszuwählen. Dies kann beim Start jedes Levels erneut ausgewählt werden, in dem der jeweilige Knopf gedrückt wird.
  • Le Mans 2003 (crystalct version) (Zweiter Knopf: Bremsen, Dritter Knopf: Hochschalten)
  • Lester (rh70 version) - zweiter Knopf: Springen
  • Livingstone, i presume (crystalct version) (C64GS kompatibel, zweiter/dritter Knopf wählt Objekt aus)
  • MASK III: Venom Strikes Back (crystalct version) - C64GS kompatibel, zweiter Knopf: Objekt auswählen, dritter Knopf: Pause
  • Metal Warrior Ultra (Protovision) - zweiter und dritter Knopf kann frei belegt werden
  • MIG29 Soviet Fighter (crystalct version) - zweiter Knopf: Waffe wechseln, dritter Knopf: zurück zum Titelbild
  • Midnight Resistance (crystalct version) - zweiter Knopf: Springen, dritter Knopf: extra Waffe im Rucksack feuern
  • Moon Shadow (crystalct version) - zweiter Knopf: Waffe wechseln, dritter Knopf: Objekt aktivieren
  • Myth (C64GS Cartridge) - Zweiten Knopf halten und mit Links/Rechts die Waffe auswählen
  • Navy Seals (Ocean) - Zweiter Knopf startet das Spiel neu
  • Nemesis (crystalct version) - zweiter Knopf: Extra aktivieren, dritter Knopf: Pause
  • Ninja Spirit (crystalct version) - zweiter Knopf: Waffe wechseln
  • Operation Wolf (crystalct version) - zweiter Knopf: Granate. Um im NEOS mode zu starten Feuer in Port 1 drücken.
  • Oy Up! (rh70+crystalct version) - zweiter Knopf: gegen den Uhrzeigersinn rotieren
  • Pang (Ocean) - Zweiter Knopf pausiert das Spiel
  • Paradroid Redux - Spiel mit dem zweiten Knopf starten, dann kann der zweite Knopf benutzt werden um das "Transfer" Minispiel zu starten
  • A pigs quest (by Frank Further) (Zweiter Knopf: Springen)
  • Pillars (crystalct version) (zweiter Knopf: gems hoch rotieren)
  • Pitfall (crystalct version) (C64GS kompatibel, zweiter Knopf: pause/unpause, dritter Knopf: Neustart)
  • Pitfall II (crystalct version) (C64GS kompatibel, zweiter Knopf: pause/unpause, dritter Knopf: Neustart)
  • Pitstop II (crystalct version) (zweiter Knopf: stark Beschleunigen, dritter Knopf: Bremsen)
  • Polar Bear in Space! (zwei extra Knöpfe: Shield, smart Bomb)
  • Rambo: First Blood Part II (crystalct version) (Waffe auswählen)
  • Rambo III: The Rescue (crystalct version) (zweiter Knopf: Objekt benutzen, dritter Knopf: Objekt aufnehmen/tauschen)
  • Rastan: The Rescue (crystalct version) (C64GS kompatibel, zweiter Knopf: weiter Sprung)
  • Renegade (crystalct version) (Feuer: Springen, zweiter Knopf: Angriff links, dritter Knopf: Angriff rechts)
  • Retilate64 CE (crystalct version)
  • Robocop 2 (C64GS Cartridge) - Springen
  • Rocky & Co (Psytronik) - zweiter Knopf: Charakter wechseln
  • Scramble[2015] (crystalct version)
  • Slapfight (crystalct version)
  • SNK vs Capcom (von Gianluca "RetroGL" Alberico (Zweiter Knopf: Tritte)
  • Space Firehawk (crystalct version) (Zweiter Knopf: Schild Angriff)
  • Spacegun - Waffe wechseln
  • Space Talisman (crystalct version) (C64GS kompatibel, Zweiter Knopf: Objekt wechseln, Dritter Knopf: Pause)
  • Spy Hunter (crystalct version) (C64GS kompatibel, Zweiter Knopf: nach hinten feuern, Dritter Knopf: zurück zum Titelbild)
  • Super Mario Bros (Zeropaige version) - Springen
  • Terminator 2 - Judgement Day (crystalct version)
  • Terra Cresta - Judgement Day (crystalct version) (zweiter Knopf: Transformation)
  • Tetris Recoded (by RetroBytes) (zweiter Knopf: in entgegengesetzter Richtung rotieren)
  • Thunder Blade (crystalct version) (zweiter Knopf: Beschleunigen, dritter Knopf: Bremsen)
  • Turbo Charge - Turbo Boost
  • Turbo Girl (crystalct version) (Springen)
  • Turrican (crystalct version) (zweiter Knopf: Energy lines, dritter Knopf: Granate)
  • Turrican II (crystalct version) (Energy lines)
  • OYUP! (crystalct version) (zweiter Knopf: gegen den Uhrzeigersinn rotieren)
  • Wonderboy (crystalct version) (zweiter Knopf: schnell laufen oder langer Sprung, zweiten Knopf halten um die Axt zu werfen)
  • Wizball (crystalct version) (Extra auswählen )
  • Zeppelin (crystalct version) (C64GS kompatibel, zweiter Knopf: Spielstart)

Amiga

Auf dem Amiga wurde die Unterstützung von zwei Knöpfen zahlreicher (auch wegen dem verbreiteten WHDLoad, welches erlaubt Spiele nachträglich zu patchen):

  • 1943 (WHDLoad)
  • ADoom
  • Agony (WHDLoad/original?)
  • Aladdin
  • Alien 3
  • Alien Breed 2
  • Alien Breed - Tower Assault
  • Apidya
  • Arabian Nights
  • Banshee
  • Battle Squadron (WHDLoad)
  • BC Kid
  • Black Viper
  • Brutal Sports Football
  • Bubba'n'Stick
  • Bubble and Squeak
  • Cool Spot
  • Dennis
  • Desert Strike (WHDLoad)
  • Dragonstone
  • Fifa International Soccer
  • Fightin' Spirit
  • Fire and Ice
  • Flashback
  • Football Glory
  • The Great Giana Sisters (jump only)
  • Hybris (WHDLoad)
  • Joe & Mac: Caveman Ninja
  • John Madden American Football
  • Leander
  • Lionheart
  • Lollypop
  • Mega Typhoon
  • Mercs
  • Mega Twins (WHDLoad)
  • Midnight Resistance (WHDLoad)
  • Mortal Kombat
  • Mortal Kombat 2
  • Mr Nuts
  • Nigel Mansell's World Championship
  • Pegasus (WHDLoad)
  • Powder
  • Project X
  • Puggsy
  • R-Type
  • R-Type 2
  • Rainbow Islands (WHDLoad)
  • Ruff'n'Tumble (WHDLoad)
  • Shadow Fighter (CD32)
  • Skeleton Krew
  • Snow Bros
  • Soccer Kid (?)
  • Street Fighter 2
  • Super Street Fighter 2
  • Tony & Friends In Kellogg's Land
  • Total Football
  • Turrican
  • Turrican II
  • Turrican 3
  • Virocop
  • Xtreme Racing
  • Yo! Joe!

Beispiel-Code

; 2nd/3rd Joystick button sample code (C64)
;
; This code reads the joystick- and paddle input and puts them together into
; a virtual "register" like this:
;
; Bit 6: Fire #3 (POT Y)
; Bit 5: Fire #2 (POT X)
; Bit 4: Fire
; Bit 3: Right
; Bit 2: Left
; Bit 1: Down
; Bit 0: Up

joy1reg = $fe
joy2reg = $ff

readjoy:
        ;sei                 ; incase this is called in main loop, disallow IRQs

        ; First set up the analog switch to route Port 1 POTX/POTY lines to the SID
        lda #%11000000      ; bit7+6 output, regular joystick bits to input
        sta $dc02
        lda #%01000000      ; analog switch: select port 1
        sta $dc00

        ; To make sure we actually sampled a value from the right port, we must
        ; wait at least two sample periods, ie 2*512 cycles, before we can read
        ; the POT input
        jsr delay

        ; Get the regular joystick bits and set the upper bits to 1 (=inactive)
        lda $dc01
        ora #%11100000

        ; Check the MSB of the paddle input, if 0, then assume the extra button
        ; is pressed, and mask the respective bit in our "joystick register"
        bit $d419           ; pot x (fire 2)
        bmi +
        and #%11011111
+
        bit $d41a           ; pot y (fire 3)
        bmi +
        and #%10111111
+
        sta joy1reg

        ;--- port 2

        lda #%00000000      ; set regular joystick bits to input
        sta $dc03

        lda #%11000000      ; bit7+6 output
        sta $dc02
        lda #%10000000      ; analog switch: select port 2
        sta $dc00

        jsr delay

        lda $dc00
        ora #%11100000

        bit $d419           ; pot x (fire 2)
        bmi +
        and #%11011111
+
        bit $d41a           ; pot y (fire 3)
        bmi +
        and #%10111111
+
        sta joy2reg

        ;cli                 ; incase this is called in main loop, allow IRQ again
        rts

delay:
        ldx #0
-       dex
        bne -
        rts

Links

Personal tools
Namespaces

Variants
Actions
Navigation
Icomp
Print/export
Administration