01.08.2011, 15:04
Hallo llm und willkommen im Forum,
Zu deiner Frage kann ich dir folgenden Link src/custom/schick/rewrite_g105de/g105de_seg006.cpp anbieten. Diese Datei enthält alle Aufrufe ins Miles-Sound-System.
Etwas technische Details:
Unter DOSBox existiert folgende Funktion:
void CALLBACK_RunRealFar(segment, offset);
mit dieser kann man far-call Aufrufe in Programmcode des DOS-Programms auslösen.
Die Funktion endet nachdem der entsprechende RET Befehl ausgeführt wurde.
Zeile 7-10 zeigen eine Funktion ohne Paramter und Rückgabewert.
Diese kann ich jetzt ganz bequem aus anderem Code aufrufen,
ohne diese Funktion nachprogrammieren zu müssen.
Zeile 12-17 zeigen eine Funktion ohne Rückgabewert mit einem Parameter.
Der Parameter wird auf den Stack gepackt, die Funktion aufgerufen und
wieder vom Stack entfernt.
Rückgabewerte, sofern die aufzurufenden Funktionen welche haben, liegen in
reg_al (8 Bit), reg_ax (16 Bit) oder (reg_dx << 16) || reg_ax.
Einschränkungen:
Dieses Verfahren funktioniert nicht bei Overlay-Segmenten. Warum das so ist, weiß ich auch noch nicht.
Sinnvolle Anwendungen:
Sämtliche Low-Level-Funktionen, die man nicht (oder noch nicht) nachprogrammieren will:
C-Library (Dateiverwaltung, Speicherverwaltung),
CD-Audio, Soundsystem
Zu deiner Frage kann ich dir folgenden Link src/custom/schick/rewrite_g105de/g105de_seg006.cpp anbieten. Diese Datei enthält alle Aufrufe ins Miles-Sound-System.
Etwas technische Details:
Unter DOSBox existiert folgende Funktion:
void CALLBACK_RunRealFar(segment, offset);
mit dieser kann man far-call Aufrufe in Programmcode des DOS-Programms auslösen.
Die Funktion endet nachdem der entsprechende RET Befehl ausgeführt wurde.
Zeile 7-10 zeigen eine Funktion ohne Paramter und Rückgabewert.
Diese kann ich jetzt ganz bequem aus anderem Code aufrufen,
ohne diese Funktion nachprogrammieren zu müssen.
Zeile 12-17 zeigen eine Funktion ohne Rückgabewert mit einem Parameter.
Der Parameter wird auf den Stack gepackt, die Funktion aufgerufen und
wieder vom Stack entfernt.
Rückgabewerte, sofern die aufzurufenden Funktionen welche haben, liegen in
reg_al (8 Bit), reg_ax (16 Bit) oder (reg_dx << 16) || reg_ax.
Einschränkungen:
Dieses Verfahren funktioniert nicht bei Overlay-Segmenten. Warum das so ist, weiß ich auch noch nicht.
Sinnvolle Anwendungen:
Sämtliche Low-Level-Funktionen, die man nicht (oder noch nicht) nachprogrammieren will:
C-Library (Dateiverwaltung, Speicherverwaltung),
CD-Audio, Soundsystem