ENTERPRISE KLUB
2024. április 13., 14-19 óráig
1074 Budapest, Károly krt. 3/A.
Részletek
Welcome, Guest. Please login or register.


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

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • 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: 1298
  • 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: 1448
  • 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: 3610
  • 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: 1448
  • 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: 1448
  • 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: 1448
  • 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: 1298
  • 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: 1448
  • 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.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #9 on: 2023.December.30. 01:03:17 »
My today experience which made me a lot of headache.

Visual Studio 2005 - Project: EP32 emulator

Background story: Not intentionally I placed a asterix (*) charachter at the end of the "nick.h" . Probably I was searching for something, and the wrong window was selected. I did not noticed it.
After modifiing another .c file, I tried to compile, but there were errors. Most of them are error C2059, which is "The token caused a syntax error." which did not say me much.
 There was always a lot of warnings which I did not read before, because of the warning level in Visual Studio, so I decided to change of in the project properties to get rid of the unnecessary warn texts. (see attachment)

 I started to search, change files to previous version, until I noticed a change at the end of a header file. (Took some hours) I used WinMerge for the directory comparsion of the original EP32 and my modified.
 
 The problem was the following (according to my thoughts). Visual studio opens the .C file, and paste all the content of the .h files at the beginning of the .c file. So as I left an asterix (*) at the end of the .h file, and the program tried to read as a pointer as was searching something in the next line(s). Probably a typedef or initializastion came as first line, the compiler tried to combine them, which made a type mismatch later.
 The big problem, which made everything worse, that the nick.h was used by many .c file, so I had lot of errors everywhere.

 Visual studio was not blaming the .h file, it was blaming the .c file, because the first line after the #include nick.h was wrong.

 Summa-summarum: a small change can make a big problem. Do not forget to make backup copy from the current project with timestamp. The more often, the best.
 

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #10 on: 2024.January.02. 17:25:10 »
Jól megszenvedek ezzel az emulátorral.

A nick emulációja nem az eredeti hardveren, hanem felismerésen alapul: Az utolsó közzétett verzió szerint nem veszi figyelembe a VSYNC után a sorokat, így a status sor fixen le van nyomva. Még nyomozok a témában. Aztán ha végre megoldom, az sem volna rossz ha az interlace módot is meg tudnám rajta jeleníteni.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #11 on: 2024.January.02. 19:46:27 »
Érdekes ez a dolog.

 Az LPT-ben van 312 sor, ez a PAL 625-nek a fele.
Amikor a függőleges szinkron jele befejeződik - ami azt jelenti, hogy ami ezután jön, az balra fent kezdődik majd - akkor...
- a LPT-ben jön egy 16 Pixel magas grafikus sor, ahol szigorúan nincs semmi kirajzolva. Ez a csatolmányban fent a fekete terület. (szélén ugyan van szín, de az az emuátor hibája)
- ezután jön egy 21 Pixel magas sor, ami a "border" színűre festi a sorokat. Érdekesség, hogy ahogy ezzel végzett, az LPT utolsó sorában vagyunk (jelzi is a bit), és újratölti a sorparaméter kezdőcímét, amiben a status sor van.

Ezután jön a Status sor, majd az első sor, második .... stb.

 Ami érdekes, hogy a TV-n beállítható a függőleges pozíció, hogy a felhasználó mennyit szeretne látni ezekből a sorokból. Az emulátorban nincs ilyen beállítás, a programozó döntötte el, hogy hol kezdődjön.
 Én sem látom sok értelmét a fenti fekete sorok megmutatásának, de ki tudja, melyik program, hogyan konfigurálja a sorparaméter táblát.

 Mivel az emulátor függőleges kép mérete fix, ha fent látszik a fekete sor, akkor az alsó sorok (26. és 27.) nem látszódnak.

 Az EP128Emu-ban István hogyan oldotta meg a dolgot? Van valamilyen menü rá? Mint a PC monitorokon? Attól kérdezem, aki jobban ismeri az EP128Emu-t.
« Last Edit: 2024.January.02. 19:50:01 by Tuby128 »

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14729
  • Country: hu
    • http://enterprise.iko.hu/
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #12 on: 2024.January.02. 21:19:55 »
A nick emulációja nem az eredeti hardveren, hanem felismerésen alapul: Az utolsó közzétett verzió szerint nem veszi figyelembe a VSYNC után a sorokat, így a status sor fixen le van nyomva. Még nyomozok a témában. Aztán ha végre megoldom, az sem volna rossz ha az interlace módot is meg tudnám rajta jeleníteni.
Mondjuk nem értem minek szenvedni egy régóta elavult, messze-messze nem tökéletes emulátorral, amikor van már sokkal jobb, 99.999%-ban tökéletes másik.

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1298
  • Country: hu
  • Stray cat from Commodore alley
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #13 on: 2024.January.02. 21:26:33 »
Mondjuk nem értem minek szenvedni egy régóta elavult, messze-messze nem tökéletes emulátorral, amikor van már sokkal jobb, 99.999%-ban tökéletes másik.
Az ep128emu-val van valami a probléma, hogy egy másikat kellett lefordítani?
Nincs semmi gond. Egyszerűbb volt a régebbi verzióhoz nyúlni.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • Country: hu
Re: Sikeres fordítás EP32 Emu - Successfully compilation of EP32 Emu
« Reply #14 on: 2024.January.02. 21:56:49 »
Mondjuk nem értem minek szenvedni egy régóta elavult, messze-messze nem tökéletes emulátorral, amikor van már sokkal jobb, 99.999%-ban tökéletes másik.

 Zozo lassan oda jutunk, hogy felteszem neked a kérdést, minek foglalkozni egy elavult 8 bites géppel, amikor van már jobb 13. generációs intel processzor, illetve hozzá Ray-Tracing képes videokártya.
 Mindenki döntse el mivel foglalkozik szabadidejében.
 Segítő kommenteket az emuval kapcsolatban szívesen fogadok.