Enterprise Forever

:HUN => Emulátorok => EP32 => Topic started by: Tuby128 on 2021.December.28. 15:15:30

Title: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.28. 15:15:30
Egy virtuális XP gépen sikerült lefordítanom a EP32 Emut. Régebbi Visual Studio 2005-tel és DirectX 8 SDK-val.
Kelleni fog később tesztre az emulátor, ha valódi HW-rel tesztelni fogok.

 Amire rájöttem, hogy Win Vista felett már máshogyan vannak a billentyűkódok a Windows rendszerben, ezért van pl. hogy a jobb shift nem működik Win10 alatt.
Most próbálkozom, hátha találok rá velami megoldást, ehhez meg kell érteni a kódot, és hogy a Windowsban mit csinál pontosan.

:UK
I successfully compiled the EP32 EMU on a XP machine. I made it with an older Visual Studio 2005 and a DX8 SDK.
I need it for later test, when I test with a real hardware.

 What I figured out, that the Win Vista or later providing the keyboard scan codes another way in the Win system, thus e.g the right shift ist not working under Win 10.
I'm trying to find a solution, but first I have to understand the code, how and why the code works that way.
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: ergoGnomik on 2021.December.28. 15:36:41
Az ep128emu-val van valami a probléma, hogy egy másikat kellett lefordítani?
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.28. 15:50:22
Nincs semmi gond. Egyszerűbb volt a régebbi verzióhoz nyúlni.
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: gflorez on 2021.December.28. 16:14:45
Meg akarod őrizni, és a modern Win-en is működőképessé akarod tenni? nagyszerű ötlet.
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.28. 16:42:14
Az EP32 Emu Microsoft Direct Input csomagját használja a DirectX-ben. Ezzel olvassa be a PC billentyűzetet, egeret és joystick-ot.

A wikipedia azt írja:
Quote
While Microsoft initially intended that DirectInput would handle all inputs, it hasn't turned out this way. As of 2011 Microsoft doesn't recommend using DirectInput for keyboards or mice, and has started pushing the newer XInput for Xbox 360 controllers.[3] In Windows Vista, Windows 7 and later Windows versions, the in-built action mapping UI has been removed.[4] DirectInput is not available for Windows Store apps.

:HUN
A Microsoft kezdeti szándéka az volt, hogy a DirectInput majd minden bementeti eszközt kezelni fog, ez végül nem így történt. Már 2011-ben nem ajánlotta a Microsoft, hogy a DirectInputot használja billentyűzetre és egérre, ezután elkezdte "nyomni" az új XInput funkciót az XBOX 360-as vezérlőkhöz. A Windows Vista, Win 7 és későbbi Win verzóknál a beépített esemény transzformációs UI (action mappin UI) el lett távolítva.
Source:https://en.wikipedia.org/wiki/DirectInput (https://en.wikipedia.org/wiki/DirectInput)
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.28. 18:48:57
Megpróbálok egy WinApi függvényt használni a DirectX Directinput-ja helyett. A neve GetKeyboardState().
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardstate (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardstate)

Kb ugyanazt csinálja mint a korábbi, hogy feltölt egy 256 BYTE hosszú memóriaterületet a létező összes valós és virtuális billentyű állapotával. Végignézve a byte-okat ha a legnagyobb (7.) bit ="1" akkor le van nyomva a billentyű.
Ehhez jó pár dolgot ki kell komentelni a kódból, illetve a virtuális billentyűk megint másutt vannak. Ez ilyen egész estét feladat lesz.

 Azért nem szokták használni, mert ez nem olyan gyors mint a directinput. El tudom képzelni a mai processzoroknál és párhuzamos végrehajtásnál nem fog gondot okozni.
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.29. 12:33:58
A GetKeyboardState() változó nem akarja bevenni az adatokat a billentyűzettől. Szépen megcsináltam a fordító táblát, de csak akkor működik a billentyű beolvasás, ha nem a főablak hanem egy üzenetdoboz (popup) aktív. Ez viszont meg is állítja az EMU-t.
Utánaolvasva kiderült, hogy a Windows esemény-alapú rendszere küld egy WM_KEYDOWN (adott billentyű lenyomva) illetve WM_KEYUP (adott billentyű felengedve) üzenetet, ami ha nincs megfelelően lekezelve, akkor a GetKeyboardState() sem működik. A popup ablak megjelenésekor egy megfelelő beépített rutin kezel mindent megfelelően.

 Kíváncsi lennék, hogy IstvanV hogy oldotta meg a dolgot.
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: ergoGnomik on 2021.December.29. 13:18:11
Kíváncsi lennék, hogy IstvanV hogy oldotta meg a dolgot.
Most direkt megpróbáltam megkeresni. Úgy tűnik, hogy a gui/gui.cpp fájlban az Ep128EmuGUI::handleFLTKEvent metódusban van a kezelése. Aztán ha benéztem valamit és Windowsban nem az FLTK könyvtárat használja erre, akkor bocsi!
Title: Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
Post by: Tuby128 on 2021.December.29. 16:56:59
Most direkt megpróbáltam megkeresni. Úgy tűnik, hogy a gui/gui.cpp fájlban az Ep128EmuGUI::handleFLTKEvent metódusban van a kezelése. Aztán ha benéztem valamit és Windowsban nem az FLTK könyvtárat használja erre, akkor bocsi!

Most hogy ezt így mondod, rájöttem miért az EP32-höz nyúltam és nem az új emuhoz.
 A metódusos programírásban C++ nyelven mindig az a bajom, hogy nehezen találom meg a dokumentációt az API funkciókhoz (mármint Windowsban). A régi megközelítéssel, amikor még nem voltak osztályok használva könnyebben rá lehetett keresni egy egy függvényre, aminek a be-/kimenetei könnyen érthető volt.
 Az osztályos megoldásnál mindig keresgélni kell, hogy mi tartozik még hozzá, melyik változóit kell töltögetni és ennyi idősen már könnyebben mondom, hogy ehhez nincs kedvem.
 Szerencsére a Windows továbbra is fenntartartja a C szemléletet a WinApi dolgoknál.

 IstvánV programjába én is belenéztem, de nincs kedvem visszafejteni. Remélem István jár majd erre, és elmondja pár szóban, hogyan csinálta. Biztos, hogy valahogy hozzá kellett nyúlnia a Windows beépített függvényeihez.