Реконструкция CGLIB для использования из OMSI Pascal
Я здесь решил немного поковырять УК-НЦ. Уже рисую из Паскаля точки :-)
http://i.piccy_.info/i9/421fd424b117...34/Graph40.png
Я реконструирую графическую библиотеку CGLIB и попутно адаптирую её для работы с кодом на OMSI Pascal. Выбор этого Паскаля оправдан тем, что на нём получаются самые маленькие .SAV (3 блока для пустой программы).
Трудности: в приложенном Хоботом архиве описание версии 2.01, а сам объектник - версии 1.0. В описании есть такие процедуры (а кода для них в объектнике нет):
Цитата:
int Palette(int n)
Функция устанавливает палитру из стандартного набора. В стандартном
наборе имеется 4 палитры, соответствие логического цвета
и физического цвета приведено ниже. 0<=n<=3.
Стандартные палитры:
Палитра 0: 0 -- черный
1 -- зеленый
2 -- красный
3 -- желтый
Палитра 1: 0 -- синий
1 -- голубой
2 -- фиолетовый
3 -- белый
Палитра 2: 0 -- черный
1 -- темно-зеленый
2 -- темно-красный
3 -- коричневый
Палитра 3: 0 -- темно-синий
1 -- темно-голубой (серый)
2 -- темно-фиолетовый
3 -- бледно-белый
int SetPalette(int c0, c1, c2, c3)
Функция позволяет создавать произвольную палитру. Числа c0,c1,c2,c3
представляют собой последовательность физических номеров в палитре,
при этом 0<=cN<=15. c0 - номер физ.цвета с лог.номером 0, c1 - номер
физ.цвета с лог.номером 1 и т.д. Соответствие физ.номеров цветам:
0 -- черный
1 -- темно-синий
2 -- темно-зеленый
3 -- серый
4 -- темно-красный
5 -- темно-фиолетовый
6 -- коричневый
7 -- бледно-белый
8 -- черный
9 -- синий
10-- зеленый
11-- голубой
12-- красный
13-- фиолетовый
14-- желтый
15-- белый
Нужно повторить функциональность этих двух процедур на асме.
P.S. Форум на тему изменения палитр смотрел. Г-н Зимин устанавливает их по-холодному через Esc-последовательности (а нам нужна горячая замена на лету, как я понимаю). А работать с ячейками 2470 и 2472 у меня не получилось. Код ничего не делает:
Код:
PROCEDURE Palette; (* Здесь по идее палитра обнуляется во все чёрные цвета *)
BEGIN /*$C
MOV #^O2470, R0
CLR R0
CLR 2(R0)
*/
END {Palette};
Вообще при обращении к этим ячейкам ничего не происходит. Вот такая команда, предложенная S_V_B для перевода в 320 строк, тоже ничего не делает:
Что я делаю не так? Буду рад любой помощи.