Hollosi Information eXchange /HIX/
HIX CODER 2076
Copyright (C) HIX
2004-05-11
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: *** HIX CODER *** #2074 (mind)  133 sor     (cikkei)
2 re: Re: re: Game port programozasa (mind)  44 sor     (cikkei)

+ - Re: *** HIX CODER *** #2074 (mind) VÁLASZ  Feladó: (cikkei)

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
+ - re: Re: re: Game port programozasa (mind) VÁLASZ  Feladó: (cikkei)

> 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...

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS