1xu - van egy kis komment is. a game prot egyszerre tud kezelni 3 db 2
tengelyes, 2 gombos joystick-ot. azaz 4 kitérést tu dmérni és négy gombot.
ez csak az elsore van, de biztosan elég. amit olvasol, hogy pisztoly, az a
valóságban a nintendós pisztoly, amit ráoperáltam pc-re, meg írtam alá egy
játékot, ez annak a joy kezeloje. tutira mux. elotte initelni kell, hogy az
idozítok beinduljanak. nem feltétlenül fontos, de volt már, hogy nem ment,
ha nem volt initelve. javasolnám még: Abonyi Zsolt: PC hardver kézikönyv,
www.prog.hu www.programmersheaven.com
Unit UJoy2; {Ez a unit a $201-es porton lévo egy darab (elso) joystick }
Interface {kezelésére, kiértékelésére szolgál}
{amit használok, az két gombja. az x,y értékek le vannak kötve}
{jelföldre (0 értékuek) bizonyos kompatibiltási okok miatt
(w98)}
{a két gomb közül az elso a szenzor, a másik a kapcsoló a
pisztolyon}
Const
CentX: Byte=80; {ha nem lenne fastinit, akkor a joystick x,y
kitérései}
CentY: Byte=40; {kapnak egy értéket}
Procedure FastInit; {Idozto inicicalizálása, }
Function Joy_X: Byte; {joystick x és y kitérésének}
Function Joy_Y: Byte; {kiszámolása, az idozto segtségével}
Function Button_1: Byte;{1. gomb (szenzor) lekérdezése}
Function Button_2: Byte;{2. gomb ('ravasz') lekérdezése}
Function HorizClick: Shortint;{a joystick kapcslóként való üzemelése (nem
analóg)}
Function VertClick: Shortint; {}
Implementation
Const
Rangexm: Byte=25; {kapcsoló üzemmód kitérései}
Rangeym: Byte=20; {ha ezeket meghaladja, akkor jelez kitérést
(kapcsolást)}
Rangexp: Byte=25; {vagy negatív, vagy pozitív irányba}
Rangeyp: Byte=25;
Function Joy_X : Byte; {x kitérés}
Var
x : Word;
.
----- Original Message -----
From: HIX CODER
To:
Sent: Sunday, May 09, 2004 4:58 AM
Subject: *** HIX CODER *** #2074
HIX CODER 2074
Copyright (C) HIX
Sun May 9 02:58:53 CEST 2004
Authors bear full responsibility for their articles.
Új cikk beküldéseText formaLemondás
1. re: Game port programozasa 54 sor starters_uh.tratseerf
+ - re: Game port programozasaVÁLASZ Feladó: starters_uh.tratseerf
> Tudna valaki segiteni, hogy hogyan tudok a gameportrol erteket beolvasni
(Tur
bo
> Pascal, vagy Visual Basic nyelvben)?
Ime egy kis angol leiras. Ha csak digitalis gombokat akarsz beolvasni,
az nagyon egyszeru - de csak 4 van beloluk. Ha nem jojstickot
hasznalsz, hanem gamepadot, az kisse bonyolultabb. Van egy beepitett
beolvasofuggveny - ha kell, elkuldom.
Port 201H is designated as the Game Adapter Port or Joystick Port.
It is not
supported by the PC/XT BIOS, but the AT BIOS service INT 15H SubFn 84H
provides an easy-to-use interface for the adapter.
It is an analog-to-digital converter which can be used by scientific
measuring tools and other devices which present an analog (resistive)
input
to the interface. It accepts up to four digital inputs (on/off data
such as
the press of a button) and up to four resistive inputs (such as an
X-ordinate
of a Joystick or a temperature value from an electronic thermometer).
The value obtained by an IN from 201H is as diagrammed:
Í?7??6??5??4Ï?3??2??1??0Ì
?B2?B1?A2?A1?By?Bx?Ay?Ax?
Ë???????????ð???????????¯
??????????? ????????????? Coordinates (resistive, time-dependent inputs)
???????????????????? Buttons/Triggers (digital inputs)
You can read the buttons (digital inputs) with:
mov dx,201H
out dx,al ;initiate transaction; AL=anything
in al,dx ;read bits 4-7 for buttons: 0=pressed, 1=open
The joysticks, paddles, measuring devices (resistive inputs) are read by
tracking the time that an X or Y bit stays high (1) after an OUT
201,xxx. To
read an individual resistive input (eg, joystick A, X ordinate):
mov dx,201H
out dx,al ;initiate transaction AL=anything
mov cx,-1 ;set resistance counter for first loop
gain: in al,dx ;read the settings
inc cx ;bump counter
test al,1 ;has X-ordinate for joystick A gone low?
jnz again ;loop until it does (when bit=0, we're done)
The delay value accumulated in CX will indicate the X-ordinate
position of
joystick A. The resulting value is CPU-dependent. To ensure
accuracy, it
would be better to use a hardware timer, rather than a loop counter.
MOKA GURU WINDOWS TIPP RANDI KUKKER HIR JATEK WEBMESTER UTAZAS
AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER FELVIDEK FILOZOFIA
HANG KONYHA KORNYESZ KULTURA MOBIL MOZAIK NY NYELV OTTHON PARA
SPORT TANC TUDOMANY UK VITA
|
> Mikor nem a
> 4 digit gombot olvasom le ezek szerint valamiféle késleltetést kell mérni.
Pontosan. Elöször le kell tiltani minden megszakítást (tehát semmiféle
visual vagy 4G nyelv nem jó erre), majd 201H-ra ki kell küldeni egy
jelet. Ez indítja a joystickot vagy a méröbélyeget, stb. amit odakötsz
- az áramkör adott idö múlva áll vissza alaphelyzetbe, az ellenállástól
függöen. Amikor minden beolvasott bit nulla lesz, vége a beolvasásnak.
Engedélyezni kell a megszakításokat!
Kell egy figyelö is: ha nincs joystick, soha nem lesz nulla az érték.
Ha a figyelö jelez (párszáz ciklus vagy 1 mp), le kell állítani mindent
és tudomásul venni, hogy nincs joystick (vagy elállítódott/kihúzták).
Utána lehet kiértékelni: a számlálásra amatör módszer: számláló - profi
módszer: idözítö használata. Nem szabad fixen beprogramozni az
értékeket, hanem indításkor és pl. kérésre kalibrálni kell a
joystickot: pl. középhelyzetben beolvasni és ez alapján számolni ki a
várt késleltetés számlálóit. A joystick akár 10 mp alatt elállítódhat:
a 100 KOhm, ha ráfújsz, már csak 50 KOhm (a korszerübbek kevésbé
érzékenyek). SOKKAL jobb megoldás lett volna 100KO helyett 10KO
névleges érték választása - de a PC ugye univerzális gép (gondolták
annak idején), amire akár méröbélyeget is lehet tenni, az pedig akkora.
Figyelni kell: a régi gépeken az idözítö néha "csuklik" (rövid idöre
hamis értéket ad) ami meghamisítja a mérést. Ha az óra hirtelen "ugrik"
egyet, újra kell kezdeni a mérést (vagy abbahagyni és megpróbálni
legközelebb).
Minderre van egy C rutinom. Ha a többi nem jön össze, elküldhetem.
> Ja és amúgy ha el tudnád küldeni azt a beépített függvényt amir?l írtál azt m
eg
> köszönném.
Minimum 286-os kell hozzá. Ismét angolul jön:
Int 15H:
> AH = 84H Joystick support.
> Input: DX is sub function code:
> DX = 0: read current switch settings
> Returns: AL is switch settings (bits 7-4)
> DX = 1: read joystick X,Y inputs
> Returns: AX is joystick 'A' X value (horizontal)
> BX is joystick 'A' Y value (vertical)
> CX is joystick 'B' X value (horizontal)
> DX is joystick 'B' Y value (vertical)
A hosszú o"-t kihagyhatnád, mert csak szemét jön helyette...
|