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
intovl1()
2
{
3
return1;
4
};
ovl2.c
1
intovl2()
2
{
3
return2;
4
};
ovl_test.c
1
intovl1();
2
intovl2();
3
4
intmain()
5
{
6
returnovl1()+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
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?
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...
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
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
...
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 ...
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
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.
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!
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
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
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
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.
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
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 :/