{home}Li-Pro.Net{/home}
Das Familiennetzwerk
Home | Stephan Linz | Projekte | Hobby | Kontakt | Nutzerzugang

Inhalt

24x80 Zeichen Bildschirmansteuerung
Floppy-Disk-Interface
Joystick-Adapter
K 7659 Tastaturanschluss
K 1520 Adapter

Joystick-Adapter

Abschriften aus FUNKAMATEUR:
  • FA-04/1991 S.202-203
ISSN: 0016-2833; ThULB Jena: 4 Z 479D (Magazin)

Joystick am PC/M

Dr.-Ing. A. MUGLER - Y27NN, Dipl.-Ing. H. MATHES


1 Überblick
2 Hardware
3 Software
4 Aufbau

1 Überblick

Computer im Heimbereich werden häufig für Computerspiele genutzt. Dabei ist es vorteilhaft, wenn der Computer die Möglichkeit des Anschlusses von Spielhebeln (Joysticks) besitzt. Ein verbreiteter Joystick ist der QUICKJOY II. Zum Anschluß zweier solcher Joysticks (oder kompatibler Versionen) an den PC/M dient der hier vorzustellende Joystick-Adapter PCMJOYS.

2 Hardware

pcmjoys-bild-1.jpg
Bild 1: Stromlaufplan des Joystick-Adapters PCMJOYS
Der Adapter PCMJOYS wird an den USER-Steckverbinder des PC/M-Computers engesteckt und besitzt ausgangsseitig zwei 9polige Cannon-Stecker für den Anschluß der beiden Joysticks. Die Schaltung ist sehr einfach und besteht aus den Pullup-Widerständen R1 bis R12 für die PIO-Eingänge, den Schaltern S1 und S2 für die Joystickselektierung und den Kondensatoren C1, C2 für die Betriebsspannung des Joysticks (Bild 1).

Der Adapter nutzt die beiden PIO-Ports der USER-PIO auf der zentralen Platine wie folgt:
  • PIO D59 - Port A: Adresse 0x90: Joystick I
  • PIO D59 - Port B: Adresse 0x91: Joystick II

  • PA0/PB0: links
  • PA1/PB1: rechts
  • PA2/PB2: herunter
  • PA3/PB3: hoch
  • PA4/PB4: Feuer
  • PA5/PB5: Selektierung Joystick angeschlossen
  • PA6/PB6: nicht belegt
  • PA7/PB7: nicht belegt
Über die DIL-Schalter S1 und S2 auf dem Adapter wird der jeweiligangeschlossene Joystick selektiert:
  • S1: Joystick I
  • S2: Joystick II
Beim Anschluß anderer Joytick-Typen ist deren Anschlußbelegung (9poliger Cannon-Stecker) zu prüfen:
  • Joystick Stecker: 1 - hoch
  • Joystick Stecker: 2 - herunter
  • Joystick Stecker: 3 - links
  • Joystick Stecker: 4 - rechts
  • Joystick Stecker: 5 - nicht belegt
  • Joystick Stecker: 6 - Feuer
  • Joystick Stecker: 7 - Versorgungsspannung +5 V
  • Joystick Stecker: 8 - Masse GND
  • Joystick Stecker: 9 - nicht belegt

3 Software

Notwendig zum Betrieben des PC/M-Joystick-Adapters PCMJOYS ist der Softwaretreiber PCMJOYS.DRV. Diser liegt als Include-File vor und kann mühelos in jedes Turbo Pascal Programm (Version 3) durch {$I PCMJOYS.DRV} eingebunden werden.

Der Treiber besteht aus den Prozeduren InitJoys und ReadJoys. Über den Prozeduraufruf InitJoys wird der Treiber aktiviert, als Optionen sind die vom Joystick zu liefernden Wertigkeiten der einzelnen Joystickzeichen (Byte) in folgender Reihenfolge anzugeben:
  1. nichts (Normalstellung)
  2. links
  3. rechts
  4. herunter
  5. hoch
  6. links unten
  7. links oben
  8. rechts unten
  9. rechts oben
  10. Feuer
Beispiel: InitJoys(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); — für FIRE wird z.B. eine 9 (0x09) durch ReadJoys geliefert.

Außerdem werden ActJoyA und ActJoyB (Boolean) angesetzt (True), wenn durch den entsprechenden Schalter der Anschluß des Joysticks selektiert ist. Die Schalter S1 und S2 werden nur bei der Initialisierung abgefragt.

Die Prozeur ReadJoys belegt zwei frei wählbare, im Hauptprogramm zu vereinbarende Variablen. In diesen wird die über InitJoys vereinbarte Wertigkeit (z.B. links = 1) übergeben. Die erste Variable entspricht Joystick I, die zweite Variable Joystick II.

Über ein Demo Programm (PCMJOYS.DEM) sind der Joystick-Adapter sowie angeschlossene Joysticks zu testen.

4 Aufbau

Der PC/M-Joystick-Adapter PCMJOYS ist auf einer einseitigen Leiterplatte im Format 97 mm x 72 mm realisiert. Nach erfolgtem Aufbau, der sich sehr einfach gestaltet, wird das Demo/Test Programm PCMJOYS.DEM compiliert und gestartet. Bei Fehlfunktionen ist die Baugruppe auf Unterbrechnungen bzw. Kurzschlüsse und bezüglich richtiger Bestückung nochmals zu überprüfen.

Anhand dieser Beschreibung und der Programmlistings ist es auch möglich, Änderungen sowie Erweiterungen bezüglich eigener Hard- und Software vorzunehmen.
pcmjoys-bild-2.jpg pcmjoys-bild-3.jpg
Bild 2: Leiterseite der Joystick-Adapterplatine Bild 3: Bestückungsplan der Joystick-Adapterplatine

PCMJOYS.DRV

{PCMJOYS.DRV - Treiber fuer den Anschlusz
von 2 Stueck Joystick QUICKJOY II an den
PC/M - Computer
(C) by Herbert Mathes  5/90  Hohenstein-Er.}

{$U+}
const JoysDataA    = $90;
      JoysDataB    = $91;
      JoysControlA = $92;
      JoysControlB = $93;
      ActJoyA : boolean = false;
      ActJoyB : boolean = false;

var   Left,Right,Down,Up,LeftDown,LeftUp
      RightDown,RightUp : byte;
      Nothings,Fire : byte;

procedure InitJoys(var n,l,r,d,u,ld,lu,
                   rd,ru,f:byte);
begin
  ActJoyA := false;
  ActJoyB := false;
  port[JoysControlA):=$00;
  port[JoysControlA):=$CF;
  port[JoysControlA):=$FF;
  port[JoysControlA):=$03;
  port[JoysControlB):=$00;
  port[JoysControlB):=$CF;
  port[JoysControlB):=$FF;
  port[JoysControlB):=$03;
  Left:=l; Right:=r; Down:=d; Up:=u;
  LeftDown:=ld; LeftUp:=lu;
  RightDown:=rd; RightUp:=ru;
  Nothings:=n; Fire:=f;
  if (port[JoysDataA] and $20)=0 then
                       ActJoyA:=true;
  if (port[JoysDataB] and $20)=0 then
                       ActJoyB:=true;
end;

procedure ReadJoys(var JoyA,JoyB:byte);
var WertJoyA,WertJoyB : byte
begin
  if ActJoyA then
  begin
    JoyA:=Nothing;
    if (port[JoysDataA] and $10)=$00 then
    JoyA:=Fire else
    begin
      WertJoyA:=port[JoysDataA] and $0F;
      case of WertJoyA of
        $0E : JoyA:=Left;
        $0D : JoyA:=Right;
        $0B : JoyA:=Down;
        $07 : JoyA:=Up;
        $0A : JoyA:=LeftDown;
        $09 : JoyA:=RightDown;
        $06 : JoyA:=LeftUp;
        $05 : JoyA:=RightUp;
      end;
    end;
  end;
  if ActJoyB then
  begin
    JoyA:=Nothing;
    if (port[JoysDataB] and $10)=$00 then
    JoyB:=Fire else
    begin
      WertJoyB:=port[JoysDataB] and $0F;
      case of WertJoyB of
        $0E : JoyB:=Left;
        $0D : JoyB:=Right;
        $0B : JoyB:=Down;
        $07 : JoyB:=Up;
        $0A : JoyB:=LeftDown;
        $09 : JoyB:=RightDown;
        $06 : JoyB:=LeftUp;
        $05 : JoyB:=RightUp;
      end;
    end;
  end;
end;

PCMJOYS.DEM

{DEMOPROGRAMM fuer PCMJOYS.DRV-Treiber}
program PCMJOYSDEMO;
{$I PCMJOYS.DRV}
var a1,a2,a1merk,a2merk : byte;
    antw : char;
    i : byte;
begin
  a1:=0;
  a2:=0;
  a1merk:=0;
  a2merk:=0;
  ClrScr;
  Writeln(char($83));
  GotoXY(1,1);
  Writeln('PCMJOYS - EIN TREIBER FUER JOYSTICK-ANSCHLUSZ AM PC/M');
  GotoXY(1,15);
  Writeln('(C) by Herber Mathes  5/90  Hohenstein-Er.');
  GotoXY(1,3);
  Writeln('Dies ist ein Demo/TestProgramm fuer den Anschlusz von');
  Writeln('2 Stueck Joystick vom Typ Quickjoy II (und Kompatible)');
  Writeln('an den PC/M-Computer. Notwendig sind der PC/M Joystick');
  Writeln('Adapter PCMJOYS sowie der Softwaretreiber PCMJOYS.DRV.');
  Writeln('PCMJOYS.DRV liegt als Include File vor und kann muehelos');
  Writeln('in jedes Turbo Pascal Programm Version 3 eingebunden');
  Writeln('werden. Realisiert wird der Anschlusz ueber die User PIO');
  Writeln('auf der Systemplatine (Port 90 H). Port A wird dem Joystick I');
  Writeln('und Port B dem Joystick II zugeordnet.');
  Writeln;
  Write('                                               WEITER MIT TASTE');
  Read(kbd,antw);
  for i:=3 to 14 do
  begin
    GotoXY(1,i); ClrEOL;
  end;
  GotoXY(1,3);
  Writeln('Ueber den Prozeduraufruf InitJoys wird der Treiber aktiviert,');
  Writeln('als Optionen sind anzugeben die Wertigkeiten der einzelnen');
  Writeln('Joystickzeichen (Byte) in folgender Reihenfolge:');
  Writeln('Nothing (Normalstellung) -Left - Right - Down - Up -');
  Writeln('LeftDown - LeftUp - RightDown - RightUp - Fire.');
  Writeln('Die Prozedur ReadJoysbelegt zwei frei waehlbare Variablen');
  Writeln('mit der Wertigkeit des entsprechenden Joysticks. Die erste');
  Writeln('Variable entspricht Joystick I, die zweite Joystick II.');
  Writeln('Die Variablen ActJoyA und ActJoyB geben Auskunft, ob ein');
  Writeln('Joystick angeschlossen ist, entsprechend der Stellung der');
  Writeln('Schalter auf dem Adapter.                    WEITER MIT TASTE');
  Read(kbd,antw);
  for i:=3 to 14 do
  begin
    GotoXY(1,i); ClrEOL;
  end;
  GotoXY(1,13);
  Writeln('Das Programm kann mittels believer Taste abgebrochen werden.');
  GotoXY(1,3);
  InitJoys(1,2,3,4,5,6,7,8,9,10);
  Writeln('Treiber PCMJOYS.DRC geladen und initialisiert');
  if ActJoyA then
  begin
    GotoXY(1,5);
    Writeln('Joystick I aktiv');
  end;
  if ActJoyB then
  begin
    GotoXY(30,5);
    Writeln('Joystick II aktiv');
  end;
  if (not ActJoyA) and (not ActJoyB) then
  begin
    GotoXY(15,5);
    Writeln('Kein Joystick aktiv');
  end;
  repeat
    ReadJoys(a1,a2);
    if ActJoyA then
      if a1<>a1merk then
      begin
        GotoXY(1,7);
        case a1 of
          1 : Writeln('Nothings        ');
          2 : Writeln('Left            ');
          3 : Writeln('Right           ');
          4 : Writeln('Down            ');
          5 : Writeln('Up              ');
          6 : Writeln('LeftDown        ');
          7 : Writeln('LeftUp          ');
          8 : Writeln('RightDown       ');
          9 : Writeln('RightUp         ');
          10: Writeln('           FIRE ');
        end;
        a1merk:=a1;
      end;
    if ActJoyB then
      if a2<>a2merk then
      begin
        GotoXY(30,7);
        case a2 of
          1 : Writeln('Nothings        ');
          2 : Writeln('Left            ');
          3 : Writeln('Right           ');
          4 : Writeln('Down            ');
          5 : Writeln('Up              ');
          6 : Writeln('LeftDown        ');
          7 : Writeln('LeftUp          ');
          8 : Writeln('RightDown       ');
          9 : Writeln('RightUp         ');
          10: Writeln('           FIRE ');
        end;
        a2merk:=a2;
      end;
  until keypressed;
  Write(char($82));
  ClrScr;
end.

PCM_PCMJOYS_SW.zip

PCMJOYS Triber und DEMO/Test Programm
zip, 2,3K, 11/26/05, 542 downloads

hochauflösende Abbildungen

PCM_ABB_BA_PCMJOYS.zip

alle Bilder
zip, 918,8K, 11/26/05, 287 downloads

Scans vom Original in niedriger Qualität

PCM_JOYSTICK_FA041991_LQ.pdf

Teil Joystick: FA-4/1991 S.202-203
pdf, 141,3K, 11/26/05, 402 downloads

Scans vom Original in hoher Qualität

PCM_JOYSTICK_FA041991_HQ.pdf

Teil Joystick: FA-4/1991 S.202-203
pdf, 2,7M, 11/26/05, 324 downloads


Autor:Stephan Linz
Revision:2011/01/04 - 17:46 - © Li-Pro.Net

stopsoftwarepatents.eu petition banner