(16.02.2017, 16:30)gaor schrieb:(16.02.2017, 10:41)HenneNWH schrieb: Das mag als guter Stil erscheinen, aber initialisierte Daten (DATA) und uninitialisierte Daten (BSS) werden vom Linker an unterschiedlichen Orten im Datensegment abgelegt.
Nein, das hat mit Stil nichts zu tun. Das Problem ist, dass du umgekehrt Variablen in BSS kriegst, die eigentlich in DATA sein müssten, wenn du die Initialisierung überall weglässt. Was tust du dagegen? Meiner aktuellen Einschätzung nach, ist das ein größeres Problem - deswegen habe ich mich für die Variante mit Initialisierung entschieden.
Jetzt sehe und verstehe ich was du meinst. Alle Variablen vor Adresse DS:0xbc83 müssen initialisiert werden (auch wenn 0 drin steht),
da das alles DATA ist.
Ab Adresse DS:0xbc83 beginnt die BSS-Sektion, dessen Variablen nicht initialisiert werden dürfen.
Ich habe nach ein paar kleinen Änderungen und Initialisierungen schon einen beachtlichen identischen Bereich von 0x87 - 0x2988.
Das ist bedeutet, dass schon über ein Achtel der Variablen an seinem Platz sind.

Alles was vor Adresse 0x0094 steht kommt vom Compiler und kann verworfen werden.
An Adresse 0x94 habe ich char g_unkn_002 = 2; eingefügt und schon passt es.



(16.02.2017, 16:30)gaor schrieb:(16.02.2017, 10:41)HenneNWH schrieb: Da fehlen zwar noch die Adressen von den Funktionspointern für Reiseevents, Zaubersprüche, etc.,Richtig: Die Funktionspointer fehlen noch und werden noch ein bisschen Arbeit abverlangen. Aber es sind nicht so wahnsinnig viele. Außerdem fehlen noch einige Pointer innerhalb des Datensegments.
welche ich aus der GCC-Variante übernehmen kann.
Die Pointer im Datensegment dürfen richtige Pointer auf Bit8u* (also unsigned char*) sein.
Zumindest diejenigen, die sich nicht im Spielstand befinden.
Diese sollten weiterhin erstmal den Typ RealPt behalten.
Für diese muss dann einzeln entschieden werden wie mit ihnen verfahren wird, damit das Spiel weiterhin funktioniert.