|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Joystick-AdapterAbschriften aus FUNKAMATEUR:
Joystick am PC/M
Dr.-Ing. A. MUGLER - Y27NN, Dipl.-Ing. H. MATHES
1 Überblick
2 Hardware 3 Software 4 Aufbau 1 ÜberblickComputer 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 HardwareDer 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:
Über die DIL-Schalter S1 und S2 auf dem Adapter wird der jeweiligangeschlossene Joystick selektiert:
Beim Anschluß anderer Joytick-Typen ist deren Anschlußbelegung (9poliger Cannon-Stecker) zu prüfen:
3 SoftwareNotwendig 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:
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 AufbauDer 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.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 PCMJOYS Triber und Demo/Test Programm hochauflösende AbbildungenScans vom Original in niedriger QualitätPCM_JOYSTICK_FA041991_LQ.pdf
Teil Joystick: FA-4/1991 S.202-203 PC/M Bauanleitung Teil PCMJOYS Scans vom Original in hoher QualitätPCM_JOYSTICK_FA041991_HQ.pdf
Teil Joystick: FA-4/1991 S.202-203 PC/M Bauanleitung Teil PCMJOYS: FA-4/1991 S.202-203
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2000-2021 by Li-Pro.Net · info (at) li-pro (dot) net · Tel.: +49 (0) 3641 / 21 23 02 · cms: phpwcms | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||