AmigaInput - Nowe Gaming-API dla AmigaOS
Z punktu widzenia programisty piszącego gry, istnieje tylko jeden obszar API
AmigaOS, który nie był rozwijany wraz z systemem operacyjnym. Mowa o
Input/Gaming APIs. W Windowsie mamy DirectInput, w MacOS 9 - InputSprockets.
W AmigaOS mamy całą gamę różnych API, które nie są ze sobą kompatybilne.
Niektóre urządzenia obsługują API, inne nie (lowlevel.library,
gameport.device, psxport.device i kilka innych urządzeń są obsługiwane tylko
przez "direct hardware access").
Dla osoby tworzącej gry pozostaje więc problem skorzystania z obecnie
istniejących input device lub napisać wszystko od początku. Gdy pojawia się
nowe urządzenie lub adapter (myszka, pad, joystick) oznacza to, że obsługa
tego musi być dodana do gry, zamiast tego, aby użytkownik zainstalował sobie
odpowiedni sterownik do całego systemu. Taka sytuacja była oczywiście
nieakceptowalna. W planach OS4 Hyperion Entertainment zadecydował, że
istnieje wyraźna potrzeba Gaming-API dla Amigi. AmigaInput i jego API
zostało zaprojektowane i rozwijane przez Svena Ottemanna, Hans-Joerga
Friedena i mnie, z dodatkową pracą Thomasa Friedena. Christopher Kossa i ja
pracowaliśmy nad Preferences GUI.
AmigaInput jest systemem sterowników składającym się z głównej biblioteki i
zestawu sterowników, które w rzeczywistości są współdzielony bibliotekami
AmigaOS4. Każdy sterownik może zaimplementować moduły (dla przykładu,
sterownik PSX Port i Classic_PSX_Mouse). Schemat nazewnictwa tych modułów
wygląda następująco:
Classic_xxxxxx
|
ten sterownik pracuje tylko na Amidze Classic
|
Generic_xxxxxx
|
ten sterownik pracuje na wszystkich Amigach działających pod OS4 (z AmigaOne włącznie)
|
PCI_xxxxxx
|
sterownik pracuje na wszystkich Amigach działających pod OS4 wyposażonych w PCI
|
AmigaOne_xxxxxx
|
ten sterownik pracuje tylko na AmigaOne
|
|
AmigaInput obsługuje gamepady, mysze i klawiatury. Oczywiście w każdym z
nich możemy wyróżnić kategorie i podtypy takie jak: Flightstick, Wheel,
Joystick i wiele innych.
Gra, która będzie potrzebowała wykorzystać input device, poprosi AmigaInput o
podanie listy odpowiednich urządzeń. Udostępniając tak zwaną funkcję
"enumeration", AmigaInput wykonuje to. Funkcja ta jest dostarczana przez autora
gry i określa wymagania gry (dla przykładu "minimalna ilość
przycisków/kierunków" lub "potrzebny device-type"). Jakie dane są dostępne
(kierunki, przyciski, współrzędne) zależy oczywiście od typu kontrolera
(joystick wysyła inne informacje niż myszka).
Sednem pomysłu AmigaInput jest to, że gra nie musi wiedzieć jaki rodzaj urządzenia
przyłączony jest do Amigi. Wszystkie rodzaje urządzeń będą pracować z
grą i ani jedna linijka kodu nie będzie musiała być zmieniana w przypadku gdy
nowe urządzenie będzie dostępne. Jedyna rzecz, o którą trzeba będzie zadbać
to sterownik AmigaInput do nowego urządzenia. Sterowniki takie posiadają
niewielką ilość kodu (dla przykładu, sterownik dżojstika analogowego to tylko
7kB).
Obrazek 1 - AmigaInput Preferences
Aby pokazać ogólny zarys systemu powyższy obrazek przedstawia Preferences-GUI
AmigaInput. Sterowniki nad którymi obecnie pracujemy to (większość z
nich jest już ukończona):
Sterownik
|
Sprzęt
|
AI_Generic_Mouse.library
|
Generic Mouse Driver
|
AI_Generic_Keyboard.library
|
Generic Keyboard Driver
|
AI_Classic_PSX.library
|
PSX Port Driver
|
AI_Classic_PC.library
|
PC Analog Stick, wykorzystuje interfejs portu klasycznego dżojstika
|
AI_Classic_CD32.library
|
CD32 Pad w Classic-Amiga
|
AI_Classic_AJoystick.library
|
Amiga-Joystick w Classic-Amiga
|
AI_Classic_Sega3.library
|
Sega Genesis Joypad bez przycisków X/Y/Z/Mode wykorzystuje interfejs portu klasycznego dżojstika
|
AI_Classic_Sega6.library
|
Sega Genesis Joypad z przyciskami X/Y/Z/Mode wykorzystuje interfejs portu klasycznego dżojstika
|
AI_Classic_Play4.library
|
obsługa starego, dobrego 4-Player-Adapter
|
AI_Generic_USB.library
|
sterownik Generic USB Gamepad dla określonego typu Gamepadów
|
AI_PCI_Catweasel.library
|
Obsługa dżojstików podłączonych do Catweasel MK3
|
|
Wszystkie sterowniki napisane są w języku C. Warte odnotowania jest to, że
sterownik PSX Port obecnie jest tylko dla Amigi Classic, lecz pracujemy nad
tym, aby wykorzystać go w AmigaOne. Podziękowania dla Joe Fentona, który
udostępnił nam pełen kod źródłowy psxport.device, tak więc mogliśmy
zaimplementować obsługę natywnej wersji PPC PSX Port. Chciałbym również
podziękować Dreamworlds Development za informacje na temat oprogramowania
4-Player-Adapter.
Po premierze OS4, możemy opracować kolejne sterowniki, jak dla przykładu do
obsługi padów N64, SNES czy TurboGraphX. Ludzie pracujący nad specjalnymi
adapterami, dla konkretnych kontrolerów proszę o kontakt mailowy
(SteffenH@hyperion-entertainment.com), aby obsługa ich sprzętu była
zapewniona.
Jeżeli chodzi o myszy i klawiatury, te sterowniki obsługują wszystkie myszy i
klawiatury, które są obsługiwane przez input i keyboard.device w OS4.
Oczywiście tak samo ważne jak gaming API jest to, aby była wystarczająca
ilość oprogramowania, które go wykorzystuje. Oczywiście, wszystkie przyszłe
tytuły Hyperion Entertainment natywnie pracujące pod PPC będą korzystały z
AmigaInput do obsługi padów/myszy/klawiatur. W pewnym momencie wypuścimy
również uaktualnienia do naszych starszych tytułów, aby stało się możliwe
bezproblemowe ich działanie z AmiagInput.
Obrazek 2
Oczywiście są też stare tytuły, głównie pracujące pod 68k, które mogą nie
doczekać się wersji OS4 lub nawet wersji PPC. Aby umożliwić użytkownikom grę
w te tytuły na AmigaOne (która w końcu nie posiada występującego w Amidze
Classic portu dżojstika) opracowaliśmy nową wersję lowlevel.library, która
wewnętrznie wykorzystuje AmigaInput. Obrazek 2 pokazuje Preferences GUI
nowej lowlevel.library. Tutaj możemy ustawić specyficzne sterowniki
AmigaInput, z których ma skorzystać lowlevel.library. Oczywiście gry, które
bezpośrednio odwołują się do hardware'u nie będą pracować na AmigaOne
(pomimo, że mogą pracować na A4000 lub A1200 pod OS 4).
Użytkownik niezaznajomiony z technologia OS4 może zapytać, "zaraz, a czy
przypadkiem AmigaInput nie pracuje natywnie pod PPC, bo przecież te stare gry
wykorzystujące lowlevel.library są pod 68k?" Sztuczka polega na tym, że OS4
wykrywa, gdy program 68k odwołuje się do lowlevel.library i sprawia, że kod
przełącza się w tryb PPC, wywołując natywną lowlevel.library (a w efekcie
AmigaInput natywnie pracujące pod PPC). Ogólnie mówiąc, AmigaInput działać
będzie tylko na Amigach wyposażonych w AmigaOS4. Dla programów natywnie
pracujących pod OS4 zalecamy nieużywanie lowlevel.library, lecz bezpośrednio
wykorzystywanie AmigaInput, aby kontrolery z trybem analogowym lub "większą
liczbą przycisków" mogły być obsługiwane i w pełni wykorzystywane.
Autor: Steffen Haeuser, Hyperion Entertainment
Club Amiga logo concept and artwork by Mark Rickan & Mohamed Moujami, winners of the Club Amiga Logo Contest.
Submitted text and images reproduced in Club Amiga Monthly are copyright by their respective authors.
All other text and images reproduced in Club Amiga Monthly are copyright 2003 Amiga Inc.
Content may not be reprinted or reproduced in part or in whole without express written consent of Amiga Inc.