Может кто подскажет, почему обработчик int10h корректно работает в обычной DOS программе (если обработчик оставлять при помощи int 27h), а если подменить значение в таблице векторов на участок памяти, в который ранее был с копирован обработчик, символы отображаются не правильно. Битовая матрица каждого символа почему то смещена на 11h, а при переключении в графический режим, например, все виснет.
Там вроде бы есть неточности. Раз смещение символов немного "не то", то значит команды вида: mov bp,OFFSET fon16_ascii0 Указывают не настоящее смещение. Раз код перемещаемый, то по-идее, сначала нужно вычислить базу: call @GetOfs @@NewOfs: pop bx sub bx,offset @@NewOfs-offset begin И далее отщелкивать от него реальное смещение: lea bp,[bx+(offset fon16_ascii0 - offset begin)] Ну или как-то так (писал небрежно). Еще меня смутило что: 1) Там есть кусок где сохраняются все регистры - вроде бы не во всех вариантах они восстанавливаются? Также лучше использовать pusha вместо перечисления push ax.. 2) Зачем делать call far call_int_10h? Подпрограмма находится в том же сегменте. ж-)