-
Notifications
You must be signed in to change notification settings - Fork 4
Estructura de DIV
Aitor edited this page Mar 13, 2022
·
1 revision
El intérprete de DIV se basa en una máquina de pila en la que cada proceso posee su propia pila, con su propio stack pointer y su propio program counter.
El código del intérprete se encuentra en la carpeta src/div32run
y la estructura de archivos es:
-
i.cpp
: Código del intérprete. Este archivo contiene elmain
que se encarga de cargar el código de los procesos y ejecutarlo (la ejecución del código está enkernel.cpp
, que se carga desde este archivo usando un#include "kernel.cpp"
en la funcionnucleo_exec
). -
c.cpp
: Código de la detección y gestión de colisiones. -
d.cpp
: Código del debugger de DIV. -
ia.cpp
: Código de la búsqueda de caminos. -
f.cpp
: Aquí se encuentra el código de las funciones de DIV:put_pixel
,get_pixel
,key
,save
,load
,set_mode
, etc. -
s.cpp
: Funciones de textos, scroll y sprites. -
v.cpp
: Funciones de vídeo.
Nada más arrancar el intérprete (DIV32RUN.DLL, que en realidad es un .EXE) éste busca dentro del archivo ejecutable que lo ha invocado (argv[1]
) los siguientes valores:
fseek(f,0,SEEK_END); // Vamos al final del archivo
len=ftell(f)-602-4*10; // Obtenemos el tamaño del archivo y le restamos 642 bytes
fseek(f,0,SEEK_SET); // Volvemos al principio del archivo
fseek(f,602,SEEK_SET); // Nos saltamos 602 bytes desde el principio del archivo
fread(mimem,4,10,f); // Leemos 40 bytes en mimem.
Estos 40 bytes son interpretados como 10 enteros (int) donde:
índice | descripción |
---|---|
0 | flags del programa (trace_program , ignore_errors y otras compiler_options van aquí) |
1 | TODO: ¿? |
2 | TODO: // Inicio de la imagen de las variables locales Ver línea 177 de i.cpp |
3 | TODO: ¿Máximo de memoria? Ver línea 1317 de i.cpp |
4 | TODO: ¿? |
5 | TODO: ¿Tamaño de la memoria para las variables privadas? |
6 | Tamaño de la memoria para las variables públicas. |
7 | TODO: ¿? |
8 | TODO: // Final de c¢digo, locales y textos (longitud del cmp) Ver línea 181 de i.cpp |
9 | Tamaño del byte code descomprimido. Todos los ejecutables de DIV son descomprimidos usando uncompress de zlib . NOTA: He probado a descomprimir el byte code con una versión moderna de zlib y me ha dado problemas. |
Una vez que tenemos descomprimido el código, el intérprete crea dos procesos, el proceso _init
, que es un proceso interno del intérprete al que no tenemos acceso y el proceso _main
que es el program
de nuestro programa.