Welcome, Guest. Please login or register.


Author Topic: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu (Read 6344 times)

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
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.
« Last Edit: 2021.December.28. 15:21:22 by Tuby128 »

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1238
  • Country: hu
  • Stray cat from Commodore alley
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #1 on: 2021.December.28. 15:36:41 »
Az ep128emu-val van valami a probléma, hogy egy másikat kellett lefordítani?

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #2 on: 2021.December.28. 15:50:22 »
Nincs semmi gond. Egyszerűbb volt a régebbi verzióhoz nyúlni.

Offline gflorez

  • EP addict
  • *
  • Posts: 3556
  • Country: es
    • Támogató Támogató
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #3 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.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #4 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

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #5 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

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.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #6 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.

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1238
  • Country: hu
  • Stray cat from Commodore alley
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #7 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!

Offline Tuby128

  • EP addict
  • *
  • Posts: 1252
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #8 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.