ROZDZIAŁ DWUDZIESTY CZWARTY ZŁĄCZE GIER PC, INFORMATYKA, „THE ART OF ASSEMBLY LANGUAGE” [PL]

[ Pobierz całość w formacie PDF ]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
WYŁĄCZNOŚĆ DO PUBLIKOWANIA TEGO TŁUMACZENIA
POSIADA
RAG
„THE ART OF ASSEMBLY LANGUAGE

tłumaczone by KREMIK
Konsultacje naukowe: NEKRO
wankenob@priv5.onet.pl
nekro@pf.pl
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ROZDZIAŁ DWUDZIESTY CZWARTY:
ZŁĄCZE GIER PC
Ktoś kto zajrzy głębiej wewnątrz kilku popularnych gier PC odkryje, że wielu programistów nie w
pełni rozumie jedno z najmniej złożonych urządzeń dołączonych do dzisiejszych PC – analogowego złącza gier.
Urządzenie to pozwala użytkownikowi połączyć do czterech potencjometrów rezystancyjnych i czterech
przełączników cyfrowych połączonych z PC. Na projekt złącza gier PC wpłynęły oczywiście możliwości
wejścia analogowego komputera Applle II, najpopularniejszego komputera dostępnego w czasie prac nad PC.
Chociaż IBM dostarczył da razy więcej wejść analogowych niż Apple II, decyzja wsparcia tylko czterech
przełączników i czterech potencjometrów (lub „pots”) wydaje się ograniczać dzisiejszych projektantów gier – w
ten sam sposób co decyzja IBM o wsparciu 256 K RAM wydaje się dzisiaj ograniczeniem. Niemniej jednak,
projektanci gier dają sobie radę tworząc rzeczywiście cudowne produkty, nawet żyjąc z ograniczeniami IBM z
1981 roku.
Projekt IBM’owskiego wejścia analogowego, podobnie jak Apple, zaprojektowano za psie pieniądze.
Dokładnością i wydajnością nie przejmowano się wcale. Faktycznie możemy kupić elektroniczne części do
zbudowania swojej wersji złącza gier, detalicznie, po około trzy dolary. Istotnie możemy dzisiaj zakupić kartę
złącza gier z różnymi kupieckimi rabatami za około osiem dolarów. Niestety, mało kosztowny, IBM’owski
projekt z 1981 roku stwarza problemy z wydajnością dla szybkich maszyn i wysoko wydajnych gier w 1990
roku. Jednakże nie ma co rozpaczać na d rozlanym mlekiem – zostaniemy przy projekcie oryginalnego złącza
gier. Poniższa sekcja opisuje dokładnie jak go wykorzystać.
24.1 TYPOWE URZĄDZENIA DO GIER
Złącze gier jest niczym więcej jak sprzęgiem komputerowym dla różnych urządzeń dla gier. Typowa
karta złącza gier zawiera złącze DB15 do którego możemy podpiąć urządzenie zewnętrzne Do typowych
urządzeń jakie możemy podłączyć do złącza gier zaliczamy paddle, joystick, flight yoke, cyfrowy joystick,
rudder pedal, symulator RC i steering wheels. Bez wątpienia jest to krótka lista typowych urządzeń jakie
możemy podłączyć do złącza gier. Wiele z tych urządzeń jest o wiele droższych niż sama karta złącza gier.
Rzeczywiście, wysokiej jakości konsole symulatorów lotu dla złącza gier kosztują kilka set dolarów.
Joystick cyfrowy jest prawdopodobnie najmniej złożonym urządzeniem jakie możemy podłączyć do
portu gier PC. Urządzenie to składa się z czterech przełączników i drążka. Przesuwanie drążka w przód lewo,
prawo lub w tył, zamyka jeden z tych przełączników Karta złącza gier dostarcza czterech wejść przełączników,
wiec możemy wyczuć kierunek (wliczając w to pozostałe pozycji) użytkownika naciskającego joystick.
Większość cyfrowych joysticków pozwala również na wyczucie pozycji pośrodku poprzez zwarcie dwóch
kontaktów na raz, na przykład poprzez ułożenie drążka pod kątem 45 stopni pomiędzy pozycją w „przód” a „w
prawo”. Aplikacje mogą to odczuć i wybrać odpowiednią akcję. Pierwszą korzyścią tych urządzeń jest to ,że są
bardzo tanie w wytworzeniu (dlatego pierwsze joysticki znajdowały się w większości domowych maszyn).
Jednakże, producenci zwiększając produkcje joysticków analogowych ceny spadły do punktu w którym
joysticki cyfrowe nie zdołały zaoferować pokaźniej różnicy cen. Wiec dzisiaj rzadko możemy spotkać takie
urządzenia w rękach użytkowników.
Paddle
jest innym urządzeniem , którego używanie podupadło przez lata.
Paddle
jest pojedynczym
potencjometrem z pojedynczym pokrętłem ( i zazwyczaj z jednym przyciskiem) . Apple dostarczał pary paddle
z każdym sprzedanym Apple II. W wyniku tego, gry używające paddle były całkiem popularne kiedy IBM
wypuścił PC w 1981 roku. Istotnie klika firm [produkowało paddle dla PC, kiedy został wypuszczony po raz
pierwszy. Jednakże, znowu koszt wytworzenia joysticków analogowych spadł do poziomu z którym paddle nie
mogło konkurować. Chociaż paddle są odpowiednimi urządzeniami wejściowymi dla wielu gier, joysticki mogą
robić wszystko to co paddle i wiele innych. W tej sytuacji stosowanie paddle szybko zamiera. Jest jedna rzecz,
 jaką możemy zrobić paddle , a której nie można zrobić joystickiem – możemy umieścić cztery z nich w
systemie i stworzyć czterech graczy. Jednak to (oczywiście0 nie jest ważne dal większości projektantów gier,
którzy generalnie projektują gry tylko dla jednego gracza.
Paddle lub zbiór rudder pedals
generalnie dostarczają pojedynczej liczby
z zakresu od zera do jakiejś wartości maksymalnej
zależnej od systemu
0
Odczyt maksimum
Urządzenie wejściowe paddle lub rudder pedal
Rudder pedals
są niczym więcej niż specjalnie zaprojektowanym paddle’em, zaprojektowanym tak
aby można było aktywować je stopami. Wiele gier symulatorów lotu wykorzystuje to urządzenie wejściowe
dostarczając wiele rzeczywistych przeżyć. Ogólnie będziemy używali rudder pedals jako dodatek do joysticka.
Joystick zawiera dwa potencjometry połączone z drążkiem. Przesunięcie joysticka analogowego wzdłuż
osi x uruchamia jeden z potencjometrów, przesuwając joystick wzdłuż osi y uruchamia inny potencjometr.
Poprzez odczyt obu potencjometrów możemy mniej więcej określić absolutną pozycję potencjometrów
wewnątrz ich zakresu pracy.
URZĄDZENIE WEJŚCIOWE JOYSTICK
Joystick używa dwóch niezależnych potencjometrów dostarczających wartości wejściowych (X,Y).
Poziome przesunięcie joysticka wpływa na oś x potencjometru nie zależnie od osi y potencjometru. Podobnie
pionowe przesunięcie wpływa na oś y niezależnie od osi x potencjometru. Przez odczytanie obu potencjometrów
możemy określić pozycję joysticka w systemie współrzędnych (X,Y).
Symulator RC jest niczym więcej niż pudełkiem zawierającym dwa joysticki . Urządzenia
yoke
i
steering wheel
są zazwyczaj takimi samymi urządzeniami sprzedawanymi specjalnie do symulatorów lotu lub
gier samochodowych.
Steering wheel
jest podłączony do potencjometru, który odpowiada osi x joysticka.
Cofnięcie (lub popchnięcie) na kierownicy aktywuje drugi potencjometr odpowiadający osi y joysticka.
Niektóre urządzenia joystickowe, ogólnie znane jako
flight sticks
zawiera trzy potencjometry . Dwa
potencjometry są połączone w sposób standardowego joysticka, trzeci jest podłączone do gałki, której wiele
gier używa dla sterowania przepustowością . Inne joysticki, takie jak Thrustnmaster™ lub CH
Products’FlightStick Pro, zawierają dodatkowe przełączniki zawierające specjalne „
cooley switch”
, które
dostarczają dodatkowych wejść do gry.
Cooley switch
jest, w gruncie rzeczy, cyfrowym potencjometrem
zamontowanym na szczycie joysticka. Użytkownicy mogą wybrać jedną z czterech pozycji
cooley switch’a
używając kciuków. Większość programów symulatorów lotu zgodnych z takimi urządzeniami używa
cooley
switcha
do wyboru różnych widoków z samolotu.
COOLEY S ITCH
Cooley switch
(pokazany powyżej na urządzeniu podobnym do CH Products’ FlightStick Pro) uruchamia
kciukiem cyfrowy joystick. Możemy przesunąć przełącznik w górę, dół, w lewo lub prawo, uruchamiając
pojedyncze przełączniki wewnątrz urządzenia.
24.2 SPRZĘTOWE ZŁĄCZE GIER
Sprzętowe złącze do gier jest proste. Jest to pojedynczy port wejściowy i pojedynczy port wyjściowy.
Rozkład bitów portu wejściowego jest następujący
GAME ADAPTER INPUT PORT
Cztery przełącznik nadchodzą do czterech bardziej znaczących bitów portu I/O 201h. Jeśli użytkownik aktualnie
nacisnął przycisk, odpowiednie pozycje bitów będą zawierały zero. Jeśli przycisk jest zwolniony, odpowiednie
bity będą zawierały jeden
Potencjometr wejściowy może wydawać się dziwny na pierwszy rzut oka. W końcu, jak można
przedstawić jedną z dużych liczb potencjalnej pozycji potencjometru (powiedzmy, 256) pojedynczym bitem?
Oczywiście nie możemy. Jednakże, bit wejściowy w tym porcie nie zwraca żadnego typu wartości numerycznej
określającej pozycję potencjometru. Zamiast tego, każdy z czterech bitów potencjometru jest połączony z
wejściem wrażliwego na oporność czterowyjściowego chipu zegarowego 558. Kiedy wyzwalamy chip
zegarowy, tworzy on impuls wyjściowy o czasie trwania proporcjonalnym do oporności wejścia do timera.
Wyjście tego chipu zegarowego jest traktowane jako bit wejściowy danego portu .Schemat tego układu to
SCHEMAT JOYSTICKA
Normalnie bity wejściowe joysticka zawierają zero. Kiedy wyzwalamy chip zegarowy, linie wejściowe
potencjometru idą wyżej dla tego samego okresu czasu określonego przez bieżącą oporność potencjometru.
Poprzez pomiar jak długo ten bit pozostaje ustawiony, możemy uzyskać wstępne oszacowanie oporności. Aby
wyzwolić potencjometr po prostu zapisujemy wartość do portu I/O 201h. Rzeczywista wartość jaką wpiszemy
jest nieistotna
Poniższy wykres pokazuje sygnał różni się na każdym z bitów wejściowych potencjometru
ANALOGOWY SYGNAŁ WEJŚCIOWY CZĘSTOTLIWOŚCI ZEGARA
Pozostaje jedynie pytanie „jak określimy długość impulsu?”. Poniższa krótka pętla demonstruje jeden sposób
określenia szerokości tego impulsu:
mov
cx, -1
;Mamy zamiar liczyć wstecz
mov
dx, 201h
;wskazujemy port joysticka
out
dx, al.
;wyzwalamy chip zegarowy
CntLp:
in
al., dx
;odczyt portu joysticka
test
al 1
;sprawdzenie wejścia # 0 potencjometru
loopne CntLp
;powtarzanie dopóki wysoko
neg
cx
;konwertujemy CX do wartości dodatniej
Kiedy ta pętla kończy wykonywanie, rejestr cx będzie zawierał liczbę przejść uczynionych przez tą pętle
podczas gdy sygnał wyjściowy timera był logiczną jedynką. Duża wartość w cx, , dłuższy impuls i dlatego
większa oporność potencjometru # 0.
Jest kilka ważnych problemów z tym kodem. Przede wszystkim, kod ten oczywiście będzie tworzył
różne wyniki na różnych maszynach działających przy różnych częstotliwościach cyklu zegara. Na przykład,
system Pentium 150 MHz będzie wykonywał ten kod dużo szybciej niż system 8088 5 MHz. Drugi problem jest
taki, że joysticki i inne karty adaptera gier tworzą radykalnie różne wyniki częstotliwości zegara. Nawet w tym
samym systemie z taką samą kartą adaptera i joystickiem, nie musimy zawsze uzyskiwać spójnych odczytów w
różnych dniach. Okazuje się ,że 558 jest w pewnym sensie czuły na temperaturę i będzie tworzył odrobinę
różne odczyty przy zmianach temperatury.
Niestety, nie ma sposobu stworzenia takiej pętli jak powyższa aby zwracała stały odczyt dla szerokiego wyboru
maszyn, potencjometrów i kart adapterów gier. Dlatego też musimy napisać naszą aplikację tak aby była
niewrażliwa na szerokie zmiany w wartościach wejściowych z wejść analogowych. Na szczęście, js to bardzo
łatwe do zrobienia, ale więcej o tym później.
24.3 ZASTOSOWANIE FUNKCJI BIOS GIER I/O
BIOS dostarcza dwóch funkcji do odczytu wejść złącza gier. Obie są podfunkcjami programu obsługi
int 15h.
Do odczytu przełączników, ładujemy do ah 84h a do dx zero, potem wykonujemy instrukcję int 15h.
Przy zwrocie, al będzie zawierał odczytane cztery bardziej znaczące bity przełącznika (zobacz wykres w
poprzedniej sekcji). Funkcja ta jest w przybliżeniu odpowiednikiem bezpośredniego odczytu portu 201h.
Dla odczytu wejść analogowych, ładujemy do ah 84h a do dx jedynką potem wykonujemy instrukcję
int 15h Przy zwrocie AX,BX,CX i DX będą zawierały wartości, odpowiednio, dla potencjometrów zero, jeden,
dwa i trzy. W praktyce, funkcja to powinna zwrócić wartości z zakresu 0 –400h, chociaż nie możemy liczyć na
to z powodów opisanych w poprzedniej sekcji.
Bardzo niewiele programów używa wsparcia joysticka BIOS. Łatwiej odczytać przełączniki
bezpośrednio a odczyt potencjometrów nie jest tą pracą, która wywołuje podprogramy BIOS. Kod BIOS jest
bardzo wolny. Większość BIOS’ów odczytuje sekwencyjnie cztery potencjometry, wykonując to do czterech
[ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  •