Newsgroup: it.comp.lang.c++
Titolo: ESEGUIBILI OLTRE I 640K ED IL DOS

Sto' scrivendo un prpgramma in C abbastanza lungo
e complesso! Sono arrivato ad un punto di generate un file eseguibile di
580kb. Purtroppo sono a meta' dell'opera e gia' a questo punto il DOS si
rifiuta di
eseguirmelo! Come posso FARE???????
Sono parecchi mesi di lavoro gettati............
Ma come si fa' a realizzare gli eseguibili dei giochini
che sono svariati MegaByte??????
P.S. Sto' utilizzando il Borland C++ v.3.1 in ambiente DOS ( ne esiste una
versione più recente con possibilità di compilazione maggiori??? )
Grazie fin da ora!!!
ARTHUR.

...



--
Posted from [195.103.24.149]
via Mailgate.ORG Server - 
http://www.mailgate.org

ARTHUR.
Come sai, il problema è dovuto alla memoria convenzionale di MS-DOS limitata ai
primi 640 Kb e alla necessità di collocare l'eseguibile in quella porzione della
tua memoria. A memoria d'uomo, rammento due tecniche utili per superare il
problema:
1) Usare gli overlay.
2) Usare un dos-extender.
La tecnica degli overlay, in soldoni, consiste nel partizionare l'intero
eseguibile in più porzioni disgiunte e la cui unione dà ancora l'eseguibile di
partenza. Le unioni vengono ordinate in modo da caricarne solo il minimo numero
necessario a garantire l'esecuzione del programma, momento per momento. In
questo modo sarà caricato in memoria sempre un sottoinsieme di tutto
l'eseguibile e, si spera, che tale sottoinsieme sia ora contenibile in memoria
convenzionale. Non c'è una misura fissa per le porzioni, quindi basta trovare la
granularità ottimale per caricare istante per isatnte più blocchi possibili
(così da minimizzare il numero di caricamenti necessari run-time), ma non troppi
da impedire l'esecuzione del programma.
Quello che devi fare è cercare sulla documentazione
del tuo ambiente di sviluppo quale supporto ti venga dato per questa situazione:
spesso, specialmente con compilatori vecchi, esistono già delle routine che ti
danno una grossa mano (il mio manuale del pascal 3.0, se non erro, le
conteneva).
L'alternativa è quella di usare (o implementare, cosa più difficile) un
dos-extender. Come dice il nome, un dos-extender fornisce un'interfaccia DOS in
modalità protetta. Ancora in parole povere, è come dire di aver spostato il DOS
dalla modalità reale a quella protetta. Il dos-extender intercetta tutte le
chiamate del tuo programma ad MS-DOS e le gestisce in modalità protetta come
meglio crede. In tal modo, il tuo programma (o una porzione di esso) viene
caricato in memoria "alta" ed seguito da lì, senza il limite dei 640 kb.
Questo sa tanto di VDM e di come Windows esegua le applicazioni
dos, vero? Infatti, nel caso in questione, il dos-extender si chiama DOSX. Ma
tantissimi giochi usano la medesima tecnica. Ad esempio DOOM e DOOM2, oppure
Duke Nukem 3D usano altri dos extender (le versioni per MS-dos, non quelle per
Windows basate su DirectX, ovviamente).
Se  ti interessa realizzare un dos extender, devi cercare materiale su qualche
libro di programmazione in dos. Cerca dos-extender e argomenti correlati come
DPMI (Dos Protected Mode Interface). Altrimenti procurati un dos extender e
cerca la documentazione ad essa relativa.
Ciao
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrea Baruzzo
Via Circonvallazione, 26
Muzzana del Turgnano (UD) - Italy
e-mail: 
andrea....@ud.nettuno.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~