27.01.2017, 14:16
(27.01.2017, 12:27)Rabenaas schrieb: Ach, dann verstehe ich jetzt auch das hier.
(25.01.2017, 16:16)HenneNWH schrieb: Phase 2 ist folgendermaßen untergliedert:
- Mit dem BCC eine SCHICKM.EXE erstellen, in welcher sich der Code aus Phase 1 an genau den richtigen Stellen befindet.
- Ersetzen der Variablen aus dem Datensegment, welches bis jetzt nur ein großes Feld mit Daten ist, durch Variablen, welche in C deklariert und ggf. definiert sind.
Im Moment arbeite ich an Punkt 1, gaor an Punkt 2.
Ich bin schon bis zu Segment seg014 vorgedrungen, an welchem es noch kleine Unterschiede gibt, anschließend kommen die Stub-Segmente, das Datensegment und schließlich der Code (seg024-seg122) welche aus der SCHICKM.EXE bei Bedarf nachgeladen werden. Die Stub-Segmente und der nachladbare Code sollten schon soweit identisch sein, das Datensegment ist vorerst nur ein
großes Feld mit lauter Nullen.
Diese Nullen werden durch die Arbeit von gaor durch _richtige_ Daten ersetzt, wodurch der Code wesentlich lesbarer werden wird.
Wie gehst Du vor? Variablen deklarieren und hoffen, dass es passt?
Im Wesentlichen ja. Das kann ich allerdings erst machen wenn der komplette Code an der richtigen Stelle ist.
Wie der Linker (TLINK) von BCC die Daten anordnet habe ich schon herausgefunden,
bzw. kann man sich beim Linken eine MAP-Datei erstellen, in welcher alle Positionen der globalen Variablen stehen.
Zuerst kommen die initialisierten Variablen in der Reihenfolge, in der die Objektdateien an den Linker übergeben werden.
Also erst die CLIB, dann seg001, seg002,...,seg122.
Typisierte Konstanten (const) sind initialisierte Daten.
Danach kommen die uninitialisierten Daten (BSS) in derselben Reihenfolge.
Wie es aber am realisiert werden soll, weiß ich noch nicht.
Ich glaube aber, dass eine große C-Datei mit Daten erstmal am besten funktioniert.
Im Original sind die Daten teilweise auf die C-Dateien verteilt worden,
die Beschreibungen der Schatztruhen in den Dungeons, in denen sie vorkommen,
Tabellen für Händler bei den Händlern, etc.
Bei dem Speicherbereich für den Spielstand und den Tabellen würde ich vielleicht eine Ausnahme (eigene Datei) machen.