Hilfe beim Patchen von Code

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Benutzeravatar
darktrym
LAN Manager
Beiträge: 207
Registriert: So 5. Jan 2014, 10:59
Wohnort: -D-

Hilfe beim Patchen von Code

Beitrag von darktrym »

Ich hab hier ein Castlevania was eine unmögliche Tastaturbelegung besitzt, die ich gern geändert hätte.
Dabei liegen Sprung auf Enter und Aktion auf Leerzeichen. Spielbarer wäre eine Belegung zweier Tasten die nebeneinander und nicht auf der rechten Seite und auch auf Laptop verwendbar wären.

Aus den alten Tagen und Gedächtnis, wie geh ich denn vor um die Stelle im Code zu finden? Prinzipiell müsste es doch zwei Varianten der Tastaturabfrage geben, BIOS und über Ports. Welchen Debugger/Dissembler kann ich denn dafür verwenden und wie finde ich die passende Stelle?
Brueggi

Re: Hilfe beim Patchen von Code

Beitrag von Brueggi »

Man könnte auch mit IDA (http://www.chip.de/downloads/IDA-Pro-Fr ... 44270.html) arbeiten. Habe ich eine ganze Zeit lang gemacht. Das wäre wohl aber eher "Mit Kanonen auf Spatzen schießen"...

Was wohl immer klappt ist DEBUG (allerdings werden dann 80186-Opcodes und Nachfolger nur als DB xx angezeigt. Castlevania sollte aber auf einem 8086 laufen).

Wenn das Spiel BIOS-Funktionen nutzen sollte, dann könnte man eine "Wanze" unterschieben, welche die Tastencodes vom BIOS entsprechend ändert.
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Hilfe beim Patchen von Code

Beitrag von matze79 »

Hm geht das Spiel nicht auch mit Joystick ?
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
darktrym
LAN Manager
Beiträge: 207
Registriert: So 5. Jan 2014, 10:59
Wohnort: -D-

Re: Hilfe beim Patchen von Code

Beitrag von darktrym »

Zum einem liegt der Joystick im Schrank hat einen einen Gameport Anschluss. Will ich unterwegs spielen ist das reichlich unpraktisch mal abgesehen von der Hardware und der Dosbox.
Mir fällt gerade ein, ist es eigentlich über TSR möglich dem andere Kommandos unterzujubeln?
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Hilfe beim Patchen von Code

Beitrag von matze79 »

Wenn du eh in Dosbox zockst gibts doch die Möglichkeit einen Joystick auf der Tastatur zu simulieren...

Ja und zwar gibts z.B. VirtualJoystick für DOS als TSR.. funktioniert aber nur mit Realmode Programmen.
Kein Plan wo man das noch kriegt.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
darktrym
LAN Manager
Beiträge: 207
Registriert: So 5. Jan 2014, 10:59
Wohnort: -D-

Re: Hilfe beim Patchen von Code

Beitrag von darktrym »

Ich hab das Spiel zwar jetzt durch mit dem Mapping auf andere Tasten(strg+f1) unter DOSBOX gings recht einfach. Aber es gibt noch andere Vertreter und für DOS ist das keine Lösung. Ideal wäre es wenn man via TSR die passenden Bereiche befüllen könnte.

Mal schauen ob ich die Zeit finde herauszufinden, warum unter DOS meine obskure Adapterlösung nicht passt.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Hilfe beim Patchen von Code

Beitrag von DOSferatu »

Naja, manche Sachen sind eben "modular" programmiert - die Eingaben und die Steuerung sind voneinander getrennt. Da ist es im Normalfall einfacher, an der Eingabe-Funktion zu manipulieren.
Manche Sachen sind aber auch sehr.... "gepackt" programmiert - so daß beispielsweise direkt an der Stelle, wo eine Abfrage gebraucht wird, mal schnell der Tastaturpuffer oder der Port ausgelesen wird - da muß man dann mühsam alle Stellen im Programm suchen, wo das passiert und entsprechend patchen.
Da hier der Kreativität kaum Grenzen gesetzt sind, muß man hier leider mit allem rechnen.

Überflüssiger Kommentar von mir dazu, um zu erklären, was ich meine:
Ich selbst neige vor allem bei Spielen (die ich programmiere) eher zur ersten (modularen) Variante: Die abgefragten Tasten landen in einem Pufferspeicher; es existiert eine Tabelle, die die benötigten X (4, 7, 12, ...) Tasten der Tabelle zuweist ("mappt"). Das Spiel selbst fragt nur ab, ob die "Spieltaste 12" oder "Spieltaste 7" usw. gedrückt war und weiß gar nicht, welche echte Taste das in Wahrheit ist - oder ob es überhaupt eine Taste ist.
Dies macht es einfacher, Optionen für den User/Spieler einzubauen, die Tastenbelegung in einem Menü zu ändern - oder auch das Eingabegerät (Joystick, Joypad, Maus...) - ohne etwas am Spiel selbst ändern zu müssen.
(Ich selbst mache das mit einer "Spieltasten-Bitmap", so kann ich 8, 16, 32 (o.ä.) Bits definieren, jedes Bit steht für eine Spieltaste. Auf diese Art ist es auch leichter, beispielsweise Multiplayer zu ermöglichen - indem einfach nur die "Tasten-Words" übertragen werden müssen. Und man kann ein "Demo" aufnehmen, indem man diese Words hintereinander in ein File schreibt.)
Die Idee ist nur teilweise von mir: Spielkonsolen und Homecomputer wie der C64 haben für ihre externen Eingabegeräte auch solche "Tasten-Bitmaps" in Ports vorliegen.

Ich will damit sagen: Wenn man das Glück hat, daß so ein "Tasten-Mapping" vorliegt, braucht man nur nach der Tabelle zu suchen und die entsprechenden Keyboard-Scancodes (oder was auch immer benutzt wird) anzupassen - selbst wenn das Spiel/Programm keine Änderung durch den Spieler vorsieht (kein Menü/Abfrage dafür vorhanden).
Antworten