Как работали оверлеи Turbo Pascal?

Я внедряю ассемблер для 16-битного DCPU из игры 0x10c.

Один из методов, который мне кто-то предлагал, заключался в использовании "оверлеев, как в Turbo Pascal в те времена", чтобы обмениваться кодом во время выполнения.

Я понял основную идею (связать наложенные символы с одной и той же памятью, поменять местами до ref), но какова была их реализация?

Была ли это функция, которую компилятор вставил перед ссылками? Это была ловушка? Были ли данные для наложения сохранены в месте наложения или где-то в большой таблице? Работало ли это хорошо или часто ломалось? Был ли интерфейс для сборки для связи с наложенным Паскалем (и наоборот), или это было несовместимо?

Google, по сути, не дает мне никакой информации (кроме того, что это не относится к современным компиляторам Pascal). И я всего лишь на пять лет слишком молод, чтобы когда-либо нуждаться в них, когда они были в курсе.

1 ответ

Решение

Таблица переходов на единицу, элементы которой указывают на ловушку (int 3F), когда не загружены. Но это для более старых версий Turbo Pascal/Borland Pascal (5/6), более новые также поддерживают (286) защищенный режим, и они могут использовать еще одну схему.

Эта схема означает, что при загрузке оверлея больше не происходит никаких накладных расходов.

Я нашел эту ссылку в своих ссылках: The Slithy Tove. Там есть и другие приятные детали, например, как обрабатываются цепочки вызовов, которые охватывают несколько оверлеев.

Другие вопросы по тегам