
           #ª255COMO HACER UN MEGAEXE

Seguro que todos habeis visto las demos de
FUTURE CREW y en especial PANIC, o VERSES 
de EMF, o SHOW de Majic 12, y un sinfin de
ellas m s. Y seguro que todos los que pro-
gramais os habreis preguntado: ¨Como hacen
para meter todos los datos en un EXE de 1mb
o incluso 3 megas (Crystal Dream II de 
TRITON). Pues eso es lo que os voy a aclarar
ahora mismo, asi que no cambien de canal :-D
Hay 3 maneras principalmente. La primera es
hacer un buffer del tama¤o de lo que haya 
que meter, con una cadena especifica como:
"COMIENZO", y despues hacer un programa que
busque esa cadena e introduzca los datos a
partir de ah¡, ya que los compiladores meten
el buffer en el EXE en cuanto lleve algo (si
no poneis "COMIENZO" y lo dejais vacio, el 
compilador o ensamblador no lo incluir  en
el EXE). Este m‚todo va muy bien hasta que 
tenemos m s de 64 Kb de datos por meter, ya
que se sobrepasa el l¡mite del segmento de 
datos. Hay una soluci¢n para esto: los over-
lays. No voy a entretenerme explicando como
funcionan los overlays, pero digamos que no
podemos tener un absoluto control sobre como
el programa carga los datos en memoria, ya 
que lo hace como quiere y ocupa mucha memo-
ria (en cuanto metamos 2 ¢ 3 gr ficos nos
quedamos con muy poco espacio en memoria). 
El £ltimo m‚todo, lo descubr¡ yo solito, 
pero no es nuevo, ya que PANIC, VERSES, etc.
lo usan. Bien, todos sabeis que los EXE 
llevan una cabecera que le indica al MS-DOS
como cargarlos en memoria. El MS-DOS s¢lo 
carga lo que le indica la cabecera, as¡ que
­BINGO!, ah¡ esta. Si anexamos lo que sea al
final del EXE, el programa ni se entera, y 
sigue cargando el verdadero EXE, pero no el
resto. #ª255ATENCIONª|: #ª098nunca intenteis comprimir 
#ª098el EXE final con LZEXE, PKLITE, etc. ya que
#ª098lee la cabecera y comprime el verdadero EXE.
Por supuesto, se puede comprimir el verdade-
ro EXE antes de anexarle el resto de datos
(probad a comprimir PANIC.EXE o VERSES.EXE y
vereis como queda un archivito de 50Kb).
Todo esto est  muy bien pero: ¨Como leemos 
ahora los datos?. Pues sencillamente leyendo

>[new_pag]<

del EXE en el offset en el que empieza lo 
que queremos leer. Ej-> tenemos estos 
archivos:

#ª248MAIN.EXEª| #ª09820000ª| bytes.
#ª248IMG.PCXª| #ª09864000ª| bytes.
#ª248SOUND.S3Mª| #ª098230000ª| bytes.

Formamos el archivo DEMO.EXE con:
#ª080COPY /B MAIN.EXE+IMG.PCX+SOUND.S3M DEMO.EXEª|
Ahora si queremos leer el byte N§ 50 del 
archivo SOUND.S3M leemos del offset:

#ª08020000ª|+#ª08164000ª|+#ª08250
#ª080MAINª|   #ª081IMGª|  #ª082SOUND

Esto es un embrollo, ya que hay que calcular
los offsets, volver a compilar, etc. PERO:

*****************#ª255SORPRESAª|*******************

Esta tarea ser  menos embrollo cuando acabe
y regale con el #ª255N§ 2 de VZMª|:

                 #ª248MEGAEXE

Este programa coge un archivo de texto con
los nombres de los ficheros a unir, lee su
tama¤o, los anexa y escribe automaticamente
los offsets en el archivo EXE. Ya explicar‚
en el siguiene N§ como usarlo al detalle. 
Hasta entonces, un saludo.


                   #ª080Rub‚n Cabello AKA TOXIK/VZ
