Я здесь решил немного поковырять УК-НЦ. Уже рисую из Паскаля точки :-)
Я реконструирую графическую библиотеку 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 у меня не получилось. Код ничего не делает:
Вообще при обращении к этим ячейкам ничего не происходит. Вот такая команда, предложенная S_V_B для перевода в 320 строк, тоже ничего не делает:Код:PROCEDURE Palette; (* Здесь по идее палитра обнуляется во все чёрные цвета *) BEGIN /*$C MOV #^O2470, R0 CLR R0 CLR 2(R0) */ END {Palette};
Что я делаю не так? Буду рад любой помощи.Код:BIS #20,@#2462