Crystals-DSA-Foren
Reverse Engineering der NLT II - Druckversion

+- Crystals-DSA-Foren (https://www.crystals-dsa-foren.de)
+-- Forum: Allgemeines zur Nordlandtrilogie DOS (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=20)
+--- Forum: Technische Werkstatt (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=34)
+--- Thema: Reverse Engineering der NLT II (/showthread.php?tid=5383)

Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34


RE: Reverse Engineering der NLT II - NewProggie - 05.05.2025

Ich hab vorhin mal die sdl_update_rect_window() Funktion von dir ein bisschen optimiert, in dem ich erst die zweite Schleife vektorisiert habe und anschließend ein "händisches" double buffering ausprobiert habe. 

Dabei hab ich auch gleich den Mauszeiger in der Mitte des Bildschirms (Fensters) innerhalb der sdl_event_loop() noch gefangen, weil das im Original genauso ist.




RE: Reverse Engineering der NLT II - HenneNWH - 05.05.2025

Das klingt spannend. Wie hast du denn die zweite Schleife vektorisiert, wenn ich fragen darf?


RE: Reverse Engineering der NLT II - NewProggie - 05.05.2025

(05.05.2025, 19:53)HenneNWH schrieb: Das klingt spannend. Wie hast du denn die zweite Schleife vektorisiert, wenn ich fragen darf?

Entweder darauf vertrauen, dass der Compiler das selbst checkt, oder in meinem Fall über NEON instructions (speziell vld1_u8), weil ich auf einem M4 (ARM) Macbook unterwegs bin gerade.

Lass mich wissen, wenn du denkst, dass der Code soweit portiert ist und es Engstellen bei der Performance gibt. Da helfe ich gerne mit. Mein CMake Pull-Request auf GitHub dümpelt auch noch so vor sich hin und kann eigentlich gemerged werden ;-) Eine CI könnte ich auch auf GitHub schon mal aufsetzen für das Projekt.


RE: Reverse Engineering der NLT II - HenneNWH - 06.05.2025

@NewProggie: Dass der Compiler das selbst checkt war damals als ich HPC gemacht habe eher eine Seltenheit.
Händisch nachgucken und eine eigene Meinung haben ist da das Beste.
Und natürlich: Assembler können!


RE: Reverse Engineering der NLT II - Obi-Wahn - 06.05.2025

Wie kann ich jetzt das Programm kompilieren? Nur mit "make -f Makefile_old"? Oder auch irgendwie mit cmake? Damit kenn ich mich noch nicht aus.


RE: Reverse Engineering der NLT II - NewProggie - 06.05.2025

(06.05.2025, 16:26)Obi-Wahn schrieb: Wie kann ich jetzt das Programm kompilieren? Nur mit "make -f Makefile_old"? Oder auch irgendwie mit cmake? Damit kenn ich mich noch nicht aus.

Make geht wie gehabt.
Mit CMake geht es jetzt neuerdings auch:

Code:
mkdir build
cmake -B build -S .
cmake --build build --parallel

Über -G kannst du dir mit CMake auch eine Projektdatei generieren lassen (z.B. für Eclipse, Visual Studio, Xcode o.ä.)


RE: Reverse Engineering der NLT II - HenneNWH - 06.05.2025

Habs so gemacht, dass beide unabhängig voneinander gehen.
Code:
make -f Makefile_old
ist die bisherige Variante, welche ich aktuell zum direkten probieren noch behalten will.

CMake ist natürlich etwas moderner, komfortabler und Upper-Class!
Bisher hab ich CMake noch nicht sinnvoll nutzen können,
da make gereicht hat, aber CMake war mein Favorit für "wenn's mal fertig ist"!
@NewProggie: Danke!


RE: Reverse Engineering der NLT II - Obi-Wahn - 07.05.2025

(06.05.2025, 19:30)NewProggie schrieb:
Code:
mkdir build
cmake -B build -S .
cmake --build build --parallel

Danke! :thx:  Damit hat es unter Windows und Linux funktioniert!  :up:

Die erstellte "ngen_cc.exe.exe" ist übrigens nur 359kb groß. Die "ngen_gcc.exe" ist 461kb groß.

Edit: Und mit dem UCRT-Compiler sind es nur noch 235kb. :lol:


RE: Reverse Engineering der NLT II - HenneNWH - 08.05.2025

Klugsch**ßeralarm: Diese Dateien enthalten auch Debugginginformationen.
Probier mal:
Code:
size ngen_*
Darauf kommt's an.


RE: Reverse Engineering der NLT II - Obi-Wahn - 08.05.2025

Code:
$ size ngen_*
   text    data     bss     dec     hex filename
115748    2288   10688  128724   1f6d4 ngen_cc.exe.exe
115780    2288   10688  128756   1f6f4 ngen_gcc_mingw.exe
  89880    2192    8128  100200   18768 ngen_gcc_ucrt.exe

cmake und mingw sind recht ähnlich, aber ucrt ist deutlich anders.


RE: Reverse Engineering der NLT II - HenneNWH - 08.05.2025

Interessant: Probier mal noch
Code:
file ngen_*

Zur Erklärung: text = Programmcode, data = intitialisierte Daten (Tabellen, ...), BSS = uninitialisierte Daten

Edit: Wenn mir -O2 kompiliert sieht das ganze so aus:
Code:
ls -al ngen_*
-rwxr-xr-x 1 henne henne 118720  8. Mai 21:17 ngen_cc
-rwxr-xr-x 1 henne henne 313000  8. Mai 21:18 ngen_gcc

Code:
size ngen_*
   text       data        bss        dec        hex    filename
  84881       3100      71912     159893      27095    ngen_cc
  70390       3028      71784     145202      23732    ngen_gcc

Code:
file ngen_*
ngen_cc:  ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=dcedcc49247f06e7965523c565bf4381c43260b4, for GNU/Linux 3.2.0, not stripped
ngen_gcc: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b2d28aecb7623aea8e291fdd046c6bca8b9514ab, for GNU/Linux 3.2.0, with debug_info, not stripped



RE: Reverse Engineering der NLT II - Obi-Wahn - 09.05.2025

Das ist unter Windows und MSYS nicht sonderlich aussagekräftig:

Code:
$ file ngen_*
ngen_cc.exe.exe: PE32+ executable for MS Windows 5.02 (console), x86-64, 19 sections
ngen_gcc.exe:    PE32+ executable for MS Windows 5.02 (console), x86-64, 19 sections



RE: Reverse Engineering der NLT II - HenneNWH - 09.05.2025

Wenn du mal eine Datei ohne Dateiendung hast, ist dieses Programm sehr hilfreich.
Hast du schon die neue Version mit dem kleinen Mauszeiger probiert?
Die läuft wesentlich flüssiger.


RE: Reverse Engineering der NLT II - Obi-Wahn - 10.05.2025

Jap, funktioniert flüssiger. Kann man den Mauszeiger etwas größer machen? Im Vergleich zum alten Mauszeiger und auch zum Rest der UI ist er doch etwas klein.


RE: Reverse Engineering der NLT II - HenneNWH - 10.05.2025

Rate mal woran ich gerade arbeite. :-D
Der Cursor soll in der neuen Welt komplett von der SDL-Bibliothek übernommen werden.
Bisher hat sich das Programm selbst um das Zeichnen des Cursors gekümmert, was sehr viele kleine unnötige Textur-Updates zur Folge hatte.
Das entfällt jetzt merkbar.

TODO (NGEN):
* Skalierung Mauszeiger (Bei 320x200 Pixel sieht es perfekt aus)
* Textur-Updates reduzieren
* Musik (Ersatz für CDA, MIDI)
* Assemblercode entfernen
* kleine Verbesserungen einfügen
* FERTIG


RE: Reverse Engineering der NLT II - Obi-Wahn - 10.05.2025

Das hört sich nach einem Plan an! Ich freu mich schon auf die Musik! :-)


RE: Reverse Engineering der NLT II - HenneNWH - 10.05.2025

So, der skalierte Mauscursor ist gepusht.
BrightEyes untersützt jetzt auch 4K-Bildschirme. ;-)
Mit meinem Windows-Setup kommt es häufig zu Abstürzen.
Der Grund scheint, dass main() und WinMain() doch nicht gravierende Unterschiede haben.
Das schau ich mir morgen an.


RE: Reverse Engineering der NLT II - Obi-Wahn - 11.05.2025

Ja, ich bekomme BrightEyes nicht mehr gestartet. Es flackert kurz und das wars.

Code:
PS C:\msys64\home\obi\BrightEyes\src\gen> .\ngen_gcc.exe
DSAGEN.DAT DE_CD
X
XX
XXXX
  XXXXX
  XXXXXXX
   XXXXXXXX
   XXXXXXXXXX
    XXXXXXXX
    XXXXXXX
     XXXXXXX
     XXX XXXX
      X   XXXX
           XXX
            X


ratio = 3 src_off = 32 dst_off = 2304
Code:
PS C:\msys64\home\obi\BrightEyes\src\gen> .\ngen_cc.exe.exe
DSAGEN.DAT DE_CD
X
XX
XXXX
  XXXXX
  XXXXXXX
   XXXXXXXX
   XXXXXXXXXX
    XXXXXXXX
    XXXXXXX
     XXXXXXX
     XXX XXXX
      X   XXXX
           XXX
            X


ratio = 3 src_off = 32 dst_off = 2304



RE: Reverse Engineering der NLT II - HenneNWH - 11.05.2025

Hm, probiers nochmal.
Hab gestern Abend noch das Rendering verschlimmbessert und es heute wieder rückgängig gemacht.
Auf meinem Raspi2 lief es auch nicht mehr.
Danke fürs melden.


RE: Reverse Engineering der NLT II - Obi-Wahn - 11.05.2025

Mit der MinGW-Version von MSYS klappt es bisher nicht, aber mit der UCRT-Version läuft es. Sowohl per Makefile als auch cmake.

Der Mauszeiger sieht super aus!