amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Hilfe beim 68k disassemblen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.04.2006, 21:14 Uhr

Vigo
Posts: 1254
[Ex-Mitglied]
Hallo Leute,

brauche mal eben schnell Hilfe beim disassemblen eines Spiels, für das ich gerade einen WHDLOAD schreibe.

Executable Files benutzen ja das HUNK Format. Das habe ich soweit auch verstanden. Das Problem ist nur, sobald die Executable geladen ist, liegt der eigentliche Hunk nicht mehr im Speicher, sondern das Betriebssystem legt quasi "über" dem Start des Programms 6 DWORDS ab, deren Bedeutung ich noch nicht verstanden habe, die das Programm aber mit jeweils 4 multipliziert um dadurch Adresspointer zum Daten verschieben zu generieren. Jetzt die Frage: was sind das für Pointer?

Ich muss diese vom Betriebssystem generierten Pointer quasi emulieren, damit das Programm in der WHDLOAD Umgebung läuft.
--
Jeder User verdient seinen Computer.

[ - Antworten - Zitieren - Direktlink - ]

04.04.2006, 23:35 Uhr

jolo
Posts: 110
Nutzer
Hi.

Wie breit sind bei Dir DWORDs? 16 Bits oder 32?

Im Speicher wird ein Segment (Hunk) bis einschließlich OS 3.9 immer als Folge von:

#-8 Größe Segment (INT) (Größe inklusive dieser Struktur)
#-4 Zeiger (BPTR) auf's nächste Segment
#0 Segmentstart (Code, Data, BSS)

abgelegt.

Mir ist nicht bekannt bzw. ich kann mich nicht erinnern, dass es da noch ein drittes Langwort gäbe, das von irgendeiner Bedeutung wäre.


Gruß.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 07:55 Uhr

Solar
Posts: 3680
Nutzer
Multiplikation von Zeigern mit 4 deutet auf BPTR hin...

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 08:16 Uhr

Vigo
Posts: 1254
[Ex-Mitglied]
Zitat:
Original von jolo:
Hi.

Wie breit sind bei Dir DWORDs? 16 Bits oder 32?

Im Speicher wird ein Segment (Hunk) bis einschließlich OS 3.9 immer als Folge von:

#-8 Größe Segment (INT) (Größe inklusive dieser Struktur)
#-4 Zeiger (BPTR) auf's nächste Segment
#0 Segmentstart (Code, Data, BSS)

abgelegt.

Mir ist nicht bekannt bzw. ich kann mich nicht erinnern, dass es da noch ein drittes Langwort gäbe, das von irgendeiner Bedeutung wäre.


Gruß.


Ok, danke, habe mich geirrt, es ist wirklich nur ein Pointer abgelegt, der dann zum nächsten Pointer führt. Mit DWORD meine ich 32bit Words.

D.h. wenn der ursprüngliche Hunk aus 2 Segmenten besteht, dann legt das BS nach dem Laden des Programms auf diese Weise 2 BPTR Pointer ab, die auf dem Segmentstart-4 zeigen?
--
Jeder User verdient seinen Computer.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 12:16 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Vigo:
Ich muss diese vom Betriebssystem generierten Pointer quasi emulieren, damit das Programm in der WHDLOAD Umgebung läuft.

Versteh ich nicht. Wenn das Programm schon als hunk-executable vorliegt, dann lade es doch auch einfach über LoadSeg(). Wieso willst Du es in eine andersartige Umgebung pressen, wenn es doch eh schon läuft?
Wenn Du die Degrader-Fähigkeiten brauchst, bin ich mir sicher, daß WHDLoad die anbietet, ohne daß Du für ein festplattenfähiges Spiel ein nicht-hd-fähiges Spiel emulierst, damit WHDLoad für dieses dann eine disketten-umgebung auf hd emuliert...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 14:40 Uhr

Vigo
Posts: 1254
[Ex-Mitglied]
Zitat:
Original von Holger:
Zitat:
Original von Vigo:
Ich muss diese vom Betriebssystem generierten Pointer quasi emulieren, damit das Programm in der WHDLOAD Umgebung läuft.

Versteh ich nicht. Wenn das Programm schon als hunk-executable vorliegt, dann lade es doch auch einfach über LoadSeg().

Sobald WHDLOAD gestartet ist kann ich keine BS-Fuktionen mehr nutzen (sinn von WHDLOAD ist es, das BS vor dem Spiel zu schützen), es sei denn, ich softkicke ein Kickstart ROM image, was aber dann doch ein bisschen viel Aufwand wäre.

Zitat:
Wieso willst Du es in eine andersartige Umgebung pressen, wenn es doch eh schon läuft?

Tut es halt nicht.

Zitat:
Wenn Du die Degrader-Fähigkeiten brauchst, bin ich mir sicher, daß WHDLoad die anbietet, ohne daß Du für ein festplattenfähiges Spiel ein nicht-hd-fähiges Spiel emulierst, damit WHDLoad für dieses dann eine disketten-umgebung auf hd emuliert...

Holger, WHDLOAD emuliert nix. WHDLOAD schaltet, sobald es gestartet wird, das komplette BS ab, und macht den Speicher frei. Sobald WHDLOAD kläuft, liegt ein blanker Amiga vor, der gerade erst eingeschaltet wurde, ohne ROM. Das einzige, was ich verwenden kann, sind WHDLOAD eigene Funktionen zum laden/speichern/patchen etc. Diskettenroutinen etc. müssen alle per Hand entfernt werden.

Warum ich dieses spiel WHDLOADE? Ganz einfach:

- Es entpackt sich nach einer festen Speicheradresse ($20000). Macht sich in einem Multitasking System immer gut...

- Es verwendet an 3 Stellen selbstmodifizierenden Code. Den kann ich mit WHDLOAD prima entfernen, und durch sauberen Code ersetzen.

- Die WHDLOAD Umgebung ist auf 68030-68060 CPUs per Memory Protection gesichert.

- Man kann das Spiel bequem mit F10 beenden, und ganz normal zum BS zurückkehren.

Das Spiel an sich, habe ich schon in WHDLOAD ans laufen bekommen. Was noch Probleme macht, ist der Titelschirm, bzw der Entpacker vom Titelschirm, der halt die Segmente abgrast um sich zu entpacken.

Aber eigentlich wollte ich mich in diesem Thread jetzt nicht rechtfertigen, warum ich WHDLOAD benutze. Zumal man erst einmal verstehen sollte, was WHDLOAD überhaupt macht, bzw wozu es gut ist.
--
Jeder User verdient seinen Computer.

[ Dieser Beitrag wurde von Vigo am 05.04.2006 um 14:50 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 15:51 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Vigo:
Sobald WHDLOAD gestartet ist kann ich keine BS-Fuktionen mehr nutzen

Ich kenne die Interna von WHDLOAD nicht, aber es wäre extrem blöd wenn Du zum Laden eines ausführbaren Programmes nicht die OS-LoadSeg Funktion nutzen kannst. Mag ja sein das WHDLOAD das OS "abschaltet", aber dann lädst Du das Programm eben vorher. Die Segmenliste von LoadSeg beleibt gültig.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 16:06 Uhr

Vigo
Posts: 1254
[Ex-Mitglied]
Zitat:
Original von gni:
Zitat:
Vigo:
Sobald WHDLOAD gestartet ist kann ich keine BS-Fuktionen mehr nutzen

Ich kenne die Interna von WHDLOAD nicht

Das ist das Problem...

Zitat:
, aber es wäre extrem blöd wenn Du zum Laden eines ausführbaren Programmes nicht die OS-LoadSeg Funktion nutzen kannst. Mag ja sein das WHDLOAD das OS "abschaltet", aber dann lädst Du das Programm eben vorher. Die Segmenliste von LoadSeg beleibt gültig.

Der Slave kann nichts machen, bevor WHDLOAD gestartet wird. Zuerst wird WHDLOAD geladen, das BS sbgeschaltet, dann wird der Slave ausgeführt. Kein OS mehr da, nix. WHDLOAD ist hauptsächlich dazu da, Trackloader Spiele ans laufen zu bringen. Aber das hält keinem davon ab, ein gepatchtes Kick-Rom in diese Umgebung zu installieren.

Sorry, aber ihr könnt mir echt nicht helfen, wenn ihr keine Ahnung von WHDLOAD habt. Deshalb habe ich ja auch keine Frage á "Wie kann ich das in WHDLOAD zum laufen bringen????" gestellt, sondern lediglich "WIe funktioniert das mit den Hunks?". Ich habe jetzt eine Lösung für das Problem gefunden, und gut is.

--
Jeder User verdient seinen Computer.

[ Dieser Beitrag wurde von Vigo am 05.04.2006 um 16:15 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 19:35 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Vigo:
Der Slave kann nichts machen, bevor WHDLOAD gestartet wird. Zuerst wird WHDLOAD geladen, das BS sbgeschaltet, dann wird der Slave ausgeführt. Kein OS mehr da, nix. WHDLOAD ist hauptsächlich dazu da, Trackloader Spiele ans laufen zu bringen. Aber das hält keinem davon ab, ein gepatchtes Kick-Rom in diese Umgebung zu installieren.

Und wieso funktioniert es dann mit mehr-disketten Spielen, die gar nicht in den Speicher passen? Vielleicht, weil WHDLoad doch von der Festplatte nachladen kann?
Zitat:
- Die WHDLOAD Umgebung ist auf 68030-68060 CPUs per Memory Protection gesichert.
Nicht jeder 030 oder 040 hat eine MMU. Ganz so vereinfachen kann man es wohl nicht.
Zitat:
- Man kann das Spiel bequem mit F10 beenden, und ganz normal zum BS zurückkehren.
Und das, nachdem Du behauptest hast, WHDLoad würde das Betriebssystem "beenden" und "den Speicher freimachen". Ganz so ist es dann wohl doch nicht.
Zitat:
Sorry, aber ihr könnt mir echt nicht helfen, wenn ihr keine Ahnung von WHDLOAD habt.
Dafür hast Du dann aber verblüffend schnell eine Lösung gefunden.
Ich weiß, eigentlich sind wir alle unnütze, unwürdige Kreaturen, und Du postet trotz Deiner Allwissenheit hier nur ein paar Fragen, um uns zu beschäftigen...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 20:48 Uhr

Vigo
Posts: 1254
[Ex-Mitglied]
Zitat:
Original von Holger:
Zitat:
Original von Vigo:
Der Slave kann nichts machen, bevor WHDLOAD gestartet wird. Zuerst wird WHDLOAD geladen, das BS sbgeschaltet, dann wird der Slave ausgeführt. Kein OS mehr da, nix. WHDLOAD ist hauptsächlich dazu da, Trackloader Spiele ans laufen zu bringen. Aber das hält keinem davon ab, ein gepatchtes Kick-Rom in diese Umgebung zu installieren.

Und wieso funktioniert es dann mit mehr-disketten Spielen, die gar nicht in den Speicher passen? Vielleicht, weil WHDLoad doch von der Festplatte nachladen kann?

WHDLOAD hat eigene Routinen zum nachladen von einem beliebigen Datenträger. Ich habe übrigens nie behauptet, dass WHDLOAD nicht nachladen kann, das Phantasierst Du Dir hier zusammen. Ist es so schwer für Dich, sich die Doku mal zu Gemüte zu führen? Nein, stattdessen ist Maestro jetzt beleidigt, und meint hier wieder in der K*cke rühren zu können. X(

Zitat:
Zitat:
- Die WHDLOAD Umgebung ist auf 68030-68060 CPUs per Memory Protection gesichert.
Nicht jeder 030 oder 040 hat eine MMU. Ganz so vereinfachen kann man es wohl nicht.

Wenn Dir nix mehr einfällt, fängst Du mal wieder mit Deiner verfluchten Wortklauberei an. Back Dir meinetwegen ein Eis, oder rutsch mir den Buckel runter, auf solch einen unproduktiven Müll kann ich verzichten. X(

Zitat:
Zitat:
- Man kann das Spiel bequem mit F10 beenden, und ganz normal zum BS zurückkehren.
Und das, nachdem Du behauptest hast, WHDLoad würde das Betriebssystem "beenden" und "den Speicher freimachen". Ganz so ist es dann wohl doch nicht.

Sorry, aber langsam machst Du mich echt wütend! Les Dir verdammt nochmal die Doku von WHDLOAD durch, oder setzt Dich mal selber an so einem Slave ran, bevor Du hier losblubberst.

Zitat:
Zitat:
Sorry, aber ihr könnt mir echt nicht helfen, wenn ihr keine Ahnung von WHDLOAD habt.
Dafür hast Du dann aber verblüffend schnell eine Lösung gefunden.
Ich weiß, eigentlich sind wir alle unnütze, unwürdige Kreaturen, und Du postet trotz Deiner Allwissenheit hier nur ein paar Fragen, um uns zu beschäftigen...


Herrgott nochmal!!! X( Ich wollte keine Pseudo-Infos über WHDLOAD haben, sondern Infos darüber, wie das HUNK Format im Amiga genau funktioniert. Nicht mehr und nicht weniger wollte ich wissen. Dass DU daraus mal wieder einen Schwanzlängenvergleich machst, und hier, anstatt auf meine Frage einzugehen, über den Sinn/Unsinn von WHDLOAD herumphilisofierst, obwohl Du keinerlei Erfahrungen mit WHDLOAD gemacht hast, ist ehrlich gesagt nicht mein Problem. Tolle Hilfe von Dir, ganz ehrlich! X(

Du kannst es echt nicht zugeben, wenn Du von irgendetwas keine Ahnung hast, nicht? Das bricht Dir sofort nen Zacken aus der Krone.
--
Jeder User verdient seinen Computer.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 21:52 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Ich kenne die Interna von WHDLOAD nicht, aber es wäre extrem blöd wenn Du zum Laden eines ausführbaren Programmes nicht die OS-LoadSeg Funktion nutzen kannst. Mag ja sein das WHDLOAD das OS "abschaltet", aber dann lädst Du das Programm eben vorher. Die Segmenliste von LoadSeg beleibt gültig.

Der Slave bekommt im Register a0 eine Library-Base mit ca. 30 Funktionen übergeben, die so ziemlich alle dos-Funktionen für den Slave abbilden, u.a. Laden und Speichern von Dateien und z.B. auch scannen von directories.
Außerdem enthält sie auch Funktionen zum Patchen von Programmen, die via dos/LoadSeg() geladen wurden (die Dokumtation enthält sogar Beispielcode, der den angeblich unmöglichen Funktionsaufruf LoadSeg() benutzt).
Und eine Funktion namens resload_Relocate, mit der man genau das machen kann, das laut einem gewissen User angeblich von Hand gemacht werden muß.

Erstaunlich, was man alles erfährt, wenn man nur ein paar Minuten eine Dokumentation liest...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

05.04.2006, 21:59 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Vigo:
Ich habe übrigens nie behauptet, dass WHDLOAD nicht nachladen kann, das Phantasierst Du Dir hier zusammen.

Mmmh, dann mußt Du irgendetwas anderes behauptet haben. Irgendetwas soll jedenfalls angeblich nicht gehen...
Zitat:
Ist es so schwer für Dich, sich die Doku mal zu Gemüte zu führen?
und selber?
Zitat:
Sorry, aber langsam machst Du mich echt wütend! Les Dir verdammt nochmal die Doku von WHDLOAD durch, ...
und selber?
Zitat:
Herrgott nochmal!!! X( Ich wollte keine Pseudo-Infos über WHDLOAD haben, ...
Dann lies doch mal die Dokumentation.
Zitat:
Du kannst es echt nicht zugeben, wenn Du von irgendetwas keine Ahnung hast, nicht? Das bricht Dir sofort nen Zacken aus der Krone.
Tss, ich kann eine Dokumentation lesen und wenn ich eine Information brauche, mache ich das auch.
Und ich weiß auch, wie man sich besser nicht aufführt, wenn man Hilfe haben möchte.
Gut, Du hast bewiesen, daß Du keine Hilfe brauchst. Du hast die Weisheit mit Löffeln gefressen. Jetzt solltest Du Dir nur noch abgewöhnen Fragen zu stellen, die andere Leute zu einer Antwort verleiten könnte.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Hilfe beim 68k disassemblen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.