Forum: PC-Programmierung DOS 16Bit/Microsoft C 5.1: Doku für DOS Exe mit Overlays?


von cppbert (Gast)


Lesenswert?

Old-School Warnung: !!!! Alles alter 16Bit DOS Kram aus den 80er !!!!

Ich hab mir vor langer Zeit einen kleinen DOS-Exe Image Analyzer (als 
Hilfe zum Reverse Engineeren) in C++ geschrieben und die einzige Lücke 
in dem einfacher Analyzer sind noch "Overlay"-Dateien (Technik ala DLLs 
wenn der Code wirklich viel zu groß war fuer die damaligen 640KB RAM)

das Projekt overlazy hat mir eine guten Einblick verschafft wie das 
ganze so funktioniert:
https://github.com/fenugrec/overlazy

Jetzt versuche ich mit Hilfe vom alten Microsoft C 5.1 
(https://winworldpc.com/product/microsoft-c-c/5x) ein paar DOS-EXEn aus 
Quelle zu bauen - aber irgendwie bekomme ich keine EXE hin die Overlays 
nutzt und die Dokumentation ist auch recht spärlich mit Infos

MSC5.1\SOURCE\DOC\README.DOC Zeile 400
1
48  Specifying Overlays
2
  -------------------
3
  You can specify overlays on the CL command line. Simply enclose the
4
  names of the overlay source or object files in parentheses. For
5
  example, if you enter the command line
6
7
      cl src_1.c (src_2.c obj_1) obj_2
8
9
  the modules SRC_2.OBJ and OBJ_1.OBJ are put in an overlay in the
10
  SRC_1.EXE file.

meine Sources:

ovl1.c
1
int ovl1()
2
{
3
  return 1;
4
};

ovl2.c
1
int ovl2()
2
{
3
  return 2;
4
};

ovl_test.c
1
int ovl1();
2
int ovl2();
3
4
int main()
5
{
6
  return ovl1()+ovl2();
7
}

und so baue ich in der DosBox
1
mount d .
2
d:
3
set PATH=d:\MSC5.1\bin
4
SET LIB=d:\MSC5.1\LIB
5
SET INCLUDE=d:\MSC5.1\INCLUDE
6
cl ovl_test.c (ovl1.c ovl2.c)

Build-Output:
https://imgur.com/a/3sBAeD7

ich hab dann eine olv_test.exe aber keine sonstigen Ovl Dateien - ich 
denke die sollte es geben, oder spukt mir der Optimizer in die Suppe und 
merkt das ich gar keine Overlays brauche?

Hat jemand Erfahrung mit Microsoft C 5.x und DOS Exen mit Overlays und 
kann mir sagen was ich falsch mache?

Disclaimer: Bitte nur Helfen wenn ihr wirklich wisst von was ich spreche 
- ich mache C/C++,Assembler,Python etc. mit verschiedensten Kompilern 
unter x Platformen - das ist nicht mein Problem - nur kenne ich genau 
DIESEN alten Kompiler(und Overlays) nicht so gut

von cppbert3 (Gast)


Lesenswert?

Vielleicht spreche ich auch von Dynamic Overlay mit der MOVE.LIB, aber 
dazu finde ich auch kaum etwas

von cppbert (Gast)


Lesenswert?

jetzt habe ich in Visual C++ 1.52c (letzte Version für DOS) - Teil vom 
Visual C++ 4.0 Release (https://winworldpc.com/product/visual-c/4x (in 
"Disc 2 - MSVC152c.iso"))

in diesem Dokument

\Microsoft Visual C++ 4.0\MSVC15\HELP\MOVEAPI.WRI

diesen Abschnitt gefunden
1
Release Notes for the
2
Microsoft Overlay Virtual Environment
3
4
This document describes advanced features of the Microsoft Overlay Virtual Environment (MOVE). MOVE is a dynamic overlay manager for use in creating MS-DOS programs with overlays. MOVE.LIB and related tools and files are provided with Microsoft Visual C++, Professional Edition.
5
This file discusses ways you can customize your overlaid program and analyze its performance. MOVE and overlays are described in Chapter 3, "Creating Overlaid MS-DOS Programs," in the Command-Line Utilities User's Guide; if you are upgrading from Microsoft C/C++ version 7.0, see Chapter 15 in Environment and Tools. MOVE run-time errors are documented in the WinHelp file ERRORS.HLP. Additional information is available in "Tools Overview and Update" (TOOLS.WRI), which can be accessed from the Tools TechNote Viewer (TOOLS.HLP).

leider finden ich den "Command-Line Utilities User's Guide" nicht - ist 
der nur Teil von der Professional Edition?

von c-hater (Gast)


Lesenswert?

cppbert schrieb:

> das Projekt overlazy hat mir eine guten Einblick verschafft wie das
> ganze so funktioniert:
> https://github.com/fenugrec/overlazy

Nicht wirklich. Lies' lieber die RBIL. Da steht alles drin, was man über 
DOS-Overlays wissen muss.

Schon einige deiner "Grundannahmen" sind falsch. Z.B.: Es gibt 
tatsächlich keine 640k-Grenze. Es handelt sich in Wirklichkeit um eine 
1MB+64k-16-Grenze...

von cppbert3 (Gast)


Lesenswert?

c-hater schrieb:
> cppbert schrieb:
>
>> das Projekt overlazy hat mir eine guten Einblick verschafft wie das
>> ganze so funktioniert:
>> https://github.com/fenugrec/overlazy
>
> Nicht wirklich. Lies' lieber die RBIL. Da steht alles drin, was man über
> DOS-Overlays wissen muss.
> Schon einige deiner "Grundannahmen" sind falsch. Z.B.: Es gibt
> tatsächlich keine 640k-Grenze. Es handelt sich in Wirklichkeit um eine
> 1MB+64k-16-Grenze...

Das Detail war nicht soo relevant

Bisher ist mein wissen
Overlays kann man mit der DOS API selber machen oder die Runtime beigabe 
zu dem alten Compilers erlaubt statische (alle Overlays mit in der Exe, 
die selber aber nicht vollstaendig geladen wird) oder dynamische 
Overlays (extra OVL Dateien die bei bedarf geladen werden)

Ich bin im speziellen and der Microsoft Kompiler Lösungen aus der Zeit 
interessiert, z.B. Sid Meiers Civilization oder Railroad Tycoon nutzen 
das

Ich würde gerne selbst aus Quelle solche (natürlich kleinere) Varianten 
zu Testzwecken erzeugen

von cppbert3 (Gast)


Lesenswert?

Dazu konnte Microsoft (soweit meine Infos stimmen) die OVLs auch in den 
EMS Speicher auslagern

von Percy N. (vox_bovi)


Lesenswert?

cppbert schrieb:
> ich hab dann eine olv_test.exe aber keine sonstigen Ovl Dateien - ich
> denke die sollte es geben, oder spukt mir der Optimizer in die Suppe und
> merkt das ich gar keine Overlays brauche?

Warum sollte es .ovl-Dateien geben? Bei .com-Dateien unter CP/M und 
MS-DOS waren die erforderlich, aber in .exe-Datein lassen die sich 
integrieren.

Und Vorsicht: Overlays und erweiterter Speicher (XMS/EMS) sond zwei 
verschiedene Baustellen!

Overlays konnnte schon nahezu jeder doofe BASIC-Interpreter:

...

2600  DELETE  4000-4600

2610  MERGE "OVL01.BAS"

2620  GOSUB 4000

...

: Bearbeitet durch User
von Nick (Gast)


Lesenswert?

XMS, EMS, 640k-Genze ...

... Mann da kommen Erinnerungen hoch. Meine Anfänge liefen damals Mitte 
der 1990er mit dem C6.00, den ich damals auch gekauft hatte, um ihn 
privat zu nutzen. Von den Overlays habe ich leider keine Ahnung.

Ich hätte noch vor 6 Wochen eine komplette Sammlung der original MS 
Bücher zum Compiler (etwa 8 STck) anbieten können. Die gingen ins 
Altpapier.

Da steht das sicher genau drin ...

von cppbert3 (Gast)


Lesenswert?

Percy N. schrieb:
> Warum sollte es .ovl-Dateien geben? Bei .com-Dateien unter CP/M und
> MS-DOS waren die erforderlich, aber in .exe-Datein lassen die sich
> integrieren.

Laut meinen Infos, wie auch schon geschrieben, nennt sich das statische 
Overlays, ich suche für meine Test nach dynamischen Overlays, wie 
geschrieben nutzt z.B. Sid Meiers Civilzation das

> Und Vorsicht: Overlays und erweiterter Speicher (XMS/EMS) sond zwei
> verschiedene Baustellen!

Das ist klar, laut Doku ist das auch nur ein Feature um das erneute 
laden stark zu beschleunigen, einige dynamic Overlay Manager konnten das 
z.B. auch der von Microsoft VC 1.52c

Aber trotzdem finde ich keine richtige Doku wie ich selber solche Exn 
bauen kann, nur infos was alles möglich ist und welche Libs involviert 
sind

von cppbert3 (Gast)


Lesenswert?

Das dynamische Overlay System nennt sich "Microsoft Overlaid Virtual 
Environment (MOVE)"
1
MOVE allows users to overlay both code and data to run MS-DOS programs that are
2
larger than available MS-DOS memory. MOVE can take advantage of EMS or XMS
3
memory.
1
LINK versions 5.30 and later support two types of overlaid MS-DOS programs, dynamic (using MOVE.LIB) and static. Previous versions of LINK supported only static overlays.

Das könnte was sein
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/87926
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/91722

https://jeffpar.github.io/kbarchive/kb/083/Q83089/
http://bytepointer.com/msvc/msvc1.0_16bit.htm

Und scheinbar hat NetHack fuer DOS auch genau dieses Overlay Feature 
genutzt, mal schauen ob ich was in den Quellen finde

von c-hater (Gast)


Lesenswert?

cppbert3 schrieb:

> Das Detail war nicht soo relevant

Doch, natürlich ist das relevant. Wie kann man den die Maschine so 
mißachten? Irrelevant ist hingegen das C-Gepfriemel, was sie abbildet. 
Das ist nur für C wichtig. Im Kern ist es aber Asm. Wie immer, wenn C 
nicht weiter weiss...

> Bisher ist mein wissen
> Overlays kann man mit der DOS API selber machen oder die Runtime beigabe
> zu dem alten Compilers erlaubt statische (alle Overlays mit in der Exe,
> die selber aber nicht vollstaendig geladen wird) oder dynamische
> Overlays (extra OVL Dateien die bei bedarf geladen werden)

Genau so ist das das. Der Mechanismus ist dabei aber immer derselbe. Ein 
bestimmter Bereich des im realmode erreichbaren Speichers wird 
abwechselnd benutzt. Also letzlich das klassische 
Bank-Switching-Konzept.

Die Unterschiede bestehen nur darin, wo der derzeit inaktive Kram 
herkommt, wenn er denn gebraucht wird. Ist halt entweder Teil der Exe 
oder in extra Overlay-Dateien ausgelagert. Darüber hinaus wurde Caching 
in Speicherbereiche unterstützt, die halt nicht im realmode erreichbar 
sind, so dass ein Reload um ein Vielfaches schneller geschehen kann.

Wie schon gesagt: Steht alles in der RBIL. Was da nicht drin steht, sind 
die Compiler-spezifische Umsetzungen der Sache und wie man die benutzt. 
Da hilft dann nur: Compiler-Doku lesen!

von cppbert3 (Gast)


Lesenswert?

c-hater schrieb:
> Wie schon gesagt: Steht alles in der RBIL.

Wie gesagt ist der Teil klar, und war auch gar nicht gefragt

> Was da nicht drin steht, sind
> die Compiler-spezifische Umsetzungen der Sache und wie man die benutzt.
> Da hilft dann nur: Compiler-Doku lesen!

Mein Problem ist ja das ich die alten Dokus nicht finde, alle Dokuhappen 
die ich gesehen habe verweisen auf den Comandline Guide von Microsofts 
Chapter 3, den finde ich aber nicht

von cppbert3 (Gast)


Lesenswert?

c-hater schrieb:
> Doch, natürlich ist das relevant. Wie kann man den die Maschine so
> mißachten? Irrelevant ist hingegen das C-Gepfriemel, was sie abbildet.
> Das ist nur für C wichtig. Im Kern ist es aber Asm. Wie immer, wenn C
> nicht weiter weiss...

sollte ich oder jemand die Doku finden würde ich meine Test Exen auch 
eher in Assembler/nasm programmieren, wegen der besseren Detailkontrolle

von cppbert3 (Gast)


Lesenswert?

cppbert3 schrieb:
> c-hater schrieb:
>
>> Doch, natürlich ist das relevant. Wie kann man den die Maschine so
>> mißachten? Irrelevant ist hingegen das C-Gepfriemel, was sie abbildet.
>> Das ist nur für C wichtig. Im Kern ist es aber Asm. Wie immer, wenn C
>> nicht weiter weiss...
>
> sollte ich oder jemand die Doku finden würde ich meine Test Exen auch
> eher in Assembler/nasm programmieren, wegen der besseren Detailkontrolle

Aber ohne den Kompiler kommt dann eben auch kein Microsoft Kompiler 
artiges Overlay System dabei raus - und das will ich vornehmlich 
analysieren

von Thomas Z. (usbman)


Lesenswert?

kennst du das schon?
https://bytepointer.com/msvc/msvc1.0_TOOLS.WRI.htm
Ansonsten kann ich wenig beitragen. Aus der Erinnerung (TP6):
Dort konnte man Teile als OVL kompilieren, ich hab das aber nie aktiv 
benutzt. Ich meine aber, dass dazu mal was in der Zeitschrift Toolbox 
veröffentlicht war.

von cppbert (Gast)


Lesenswert?

Thomas Z. schrieb:
> kennst du das schon?
> https://bytepointer.com/msvc/msvc1.0_TOOLS.WRI.htm
> Ansonsten kann ich wenig beitragen. Aus der Erinnerung (TP6):
> Dort konnte man Teile als OVL kompilieren, ich hab das aber nie aktiv
> benutzt. Ich meine aber, dass dazu mal was in der Zeitschrift Toolbox
> veröffentlicht war.

ja, auch einen von denen die nur darauf verweisen "Command-Line 
Utilities User's Guide Errata" - aber die Guides fehlen

von cppbert (Gast)


Lesenswert?

Hab jetzt ein paar Varianten erzeugen können - bin mir immer noch nicht 
sicher ob es externe OVL-Dateien mit Microsoft gibt

von cppbert (Gast)


Lesenswert?

cppbert schrieb:
> Hab jetzt ein paar Varianten erzeugen können - bin mir immer noch
> nicht
> sicher ob es externe OVL-Dateien mit Microsoft gibt

und der "Command-Line Utilities User's Guide" von das alles genau drin 
steht fehlt immer noch :/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.