Эх, чуть-чуть опередил. Я тоже дизассемблировал, только вручную. Сейчас пишу комментарии. Выложу позже.
Вид для печати
У меня тупая утилитка здесь валяется для таких целей. При желании можно допинать, мне просто лень было :)
Там есть готовые бинари для win32 и OpenVMS/Alpha и /VAX.
Драйвер GD.SYS дизассемблирован вручную, поэтому небольшие ошибки не исключаются, хотя не должно быть. Использованы локальные метки, равные адресам, так что транслировать не стоит, ничего не получится. Зашифрованную строку с именем драйвера поместил через макрос .CRYPT, сам макрос не писал.
Ну а теперь в двух словах что делает драйвер (хотя в двух словах не получится). Программы TST1 и TST2 были написаны для ДВК с КГД, поэтому естественно на УКНЦ они не пойдут. В чем различие КГД и видеопамяти УКНЦ.
1. КГД может выводить картинку одновременно с КСМ, т.е. совмещать текстовый и графический экран. То есть выводится текст и он не портит графику, и наоборот.
2. У КГД регистр адреса равен 176642, а регистр данных - 176644. У УКНЦ регистр адреса 176640, регистр данных 176642.
3. Длина видеостроки у КГД - 50, у УКНЦ - 80. Видеопамять в КГД начинается с адреса 0, у УКНЦ - со 100000.
Проблема № 1 решена блокировкой планов 1 и 2 через регистр 177716. В итоге текстовый терминал, работающий через спрайтовый механизм, использует только план 0. Естественно подправлены все регистры цвета. Также запрещен рулон и экран пользователя расширен с 264 видеострок до 286 (как в КГД). Учтено и то, что в регистре данных в КГД используются только младшие восемь битов. С помощью регистров цвета сделано, что если точка находится в плане 0, то она имеет желтый цвет (текстовый терминал), в плане 1 - белый, совмещено - красный. План 2 не учитывается.
Для решения проблем №2 и №3 пропатчены TST1 и TST2 и в драйвере использован регистр-ловушка. Т.к. структура байта данных совпадает у КГД и УКНЦ, то все обращения в 176644 заменены на 176642. А вот с адресом посложнее. Нельзя просто заменить 176642 на 176640, надо еще подправить механизм вычисления адреса, а это сложно. Поэтому разработчиками было принято кардинальное решение - обращения к 176642 заменены на 304, а на обращения к 304 поставлена ловушка. Соответственно п/п обработки прерывания ловушки читает значение из ячейки 304, преобразует ее значение в формат адреса УКНЦ и заносит в регистр 176640.
Так драйвер на реальной УКНЦ работает без органичений? А вывод графики с преобразованием адресов не тормозит?
Где посмотреть TST1 и TST2?
Vamos выкладывал образы дисков в этом топике. Драйвер предназначен только для патченных TST1 и TST2. То есть, чтобы запустить другую программу для КГД, ее придется соответствующим образом пропатчить. Драйвер еще кстати обрабатывает команду RESET на магистрали ЦП.
Попробуйте, узнаете. Знаю только, что многие графические игры с ДВК не переписывались для УКНЦ, а патчились. Находился алгоритм вычисления адреса и вставлялся свой. Часто размер SAV-файла немного увеличивался, в конце были алгоритмы вычисления адреса и заноса в регистр данных (там данные заносились сразу в младший и старший байт регистра данных). В качестве примера - DIGGER, Кот-рыболов, первые LAND-ы.
Эмулятор БК также не использует оригинальные файлы, а только специальным образом пропатченные.