2012-04-14 9 views
5

Estoy implementando an assemblinker for the 16-bit DCPU en el juego 0x10c.¿Cómo funcionan las superposiciones de Turbo Pascal?

Una técnica que alguien me sugirió utilizar "superposiciones, como en Turbo Pascal en el día" para intercambiar el código en tiempo de ejecución.

Me sale la idea básica (enlace símbolos superpuestos a la misma memoria, intercambio antes de ref), pero ¿cuál fue su implementación?

¿Era una función que el compilador insertado antes hacía referencia? ¿Fue una trampa? ¿Se almacenaron los datos de la superposición en la ubicación de la superposición, o en una gran mesa en alguna parte? ¿Funcionó bien o se rompió a menudo? ¿Había una interfaz para ensamblar para vincular con Pascal superpuesto (y viceversa), o era incompatible?

Google básicamente no me proporciona información (aparte de que es un no-on en los compiladores modernos de Pascal). Y, tengo cinco años demasiado joven para haberlos necesitado alguna vez.

+0

No se puede acceder al enlace 0x10c.com (tiempo de espera permanente). Hay un reemplazo? – ChristianWimmer

Respuesta

4

Una tabla de salto por unidad cuyos elementos apuntan a una trampa (int 3F) cuando no está cargada. Pero eso es para las versiones anteriores de Turbo Pascal/Borland Pascal (5/6), las más nuevas también admiten el modo protegido (286) y pueden emplear otro esquema.

Este esquema significa que cuando se carga una superposición, ya no hay sobrecarga de trampa.

Encontré este enlace en mis referencias: The Slithy Tove. Hay otros detalles agradables allí, como cómo se manejan las cadenas de llamadas que abarcan varias superposiciones.

+0

Derecha * en *! ¡Eso es exactamente lo que necesitaba! Gracias. –

Cuestiones relacionadas