Если программа чисто текстовая и предназначена и для ДВК, то тогда <Esc>H<Esc>J. А вот если графическая для УКНЦ, то тогда только кодом 12 или <Esc>[r.
Вид для печати
Что я делаю не так? ) Запустил в системе под 7-ркой такой вод код(UKNCBTL) :
Код:! Apxивны дeл ЖД ! ЛAТ
MUZ .MAC 19 09-Mar-1992 121 TEXP .MAC 36 23-Jan-2020 150
CLSTST.MAC 1 05-Mar-2020 212 < UNUSED > 1387 213
7 Files, 66 Blocks
1387 Free blocks
L07>mac CLSTST
L07>lin CLSTST
L07>RU CLSTST
r
L07>TY CLSTST.MAC
START: MOV #<33>, @#177566
MOV #'[, @#177566
MOV #'r, @#177566
CLR R0
EMT 350
.END START
L07>
! Apxивный paздeл ЖД !
Шото вы ещё больше всё запутали, господа. Хобот, ты как истинный оператор ДВК и знаток Esc-последовательностей и хочешь нормальную реализацию GCLIB - бери её и тесть на предмет нормального переключения в граф. режим и нормального из него выхода. А по поводу граф. движка мне и самому интересно чего можно там закодить. Пока я в недоумении чешу репу, созерцая странные подпрограммы, работающие с теневым буфером. А мне бы пригодилось что-то вроде рисования спрайта, заданного константным массивом.
Впечатления от работы на асме двоякие. Удивило, что BICB не устанавливает флаг нуля. Долго не мог понять почему не работает BICB #^O17, 6(SP) - пока не поменял её на BICB 6(SP), #^O17
Но зато стало понятно, откуда растут уши у языка Си. Это в точности калька с команд PDP-11. Даже грустно как-то.
Вопрос: какая команда быстрее работает - BICB или BIC? В целом, работа со словами предположительно быстрее, чем с байтами, но лучше уточнить. Нигде в доках пока не нашёл времени исполнения разных команд.
В эмулятор Патрона вшита какая-то странная версия LIBR, которая не соответствует описанию, найденному в сети. Вызываю её так:
rt11.exe LIBR CGLIB CG001
rt11.exe LIBR CGLIB CG002
rt11.exe LIBR CGLIB CG003
...
Для пересоздания библиотеки ей надо передать ключик /C (очевидно - CREATE), иначе просто идёт добавление объектников в существующую библиотеку. Как передать ей сразу несколько файлов - пока не понял.
Другая найденная на просторах версия LIBR работает так, как и указано в документации. Вызываю её так:
rt11.exe RUN LIBR CGLIB=CG001,CG002,CG003,CG004,CG005,CG006
При попытке добавить ,CG007 либр кочевряжится (видимо, количество символов ограничено). С этой версией я не понял как добавлять в существующую библиотеку, она всегда пересоздаёт.
Обе версии ругаются матом на дублирование имени MAIN, хотя вроде бы делают то, что нужно.
?LIBR-W-Duplicate module name of .MAIN.
Это странно - никакого глобального символа MAIN в ассемблерном листинге нет.
Но, в целом, терпимо. Жить можно.
Это не глобальный символ, это название модуля. .TITLE надо добавить
- - - Добавлено - - -
Это что то странное. По логике, должно быть именно BICB #^O17, 6(SP) - сбросить младшие четыре бита в байте (или слове - в данном случае без разницы) по адресу 6(SP). И флаг N должен выставиться - только есть нюанс - для BICB - в байте 6(SP) получился полностью ноль, если в байте 7(SP) не ноль - всё равно выставится, а для BIC - только если получится полностью нулевое слово по адресу 6(SP).
А BICB 6(SP), #17 - это сбросить в байте, где лежит 17 те биты, которые установлены в байте, который хранится по адресу 6(SP)
??? с чего ты взял ???
Код:ОПИСАНИЕ МОДУЛЕЙ БИБЛИОТЕКИ TERPAS.OBJ
______________________________________
БИБЛИОТЕКА TURBO ФИРМЫ BUSINESS Universal.
Описание процедур и функций библиотеки TURBO.OBJ V03.00
(расширение стандартной библиотеки PASCAL)
Процедуры:
CLRSCR - очистить от курсора до конца экрана
CLREOL - очистить от курсора до конца строки
GOTOXY(X,Y) - перемещение курсора в позицию X,Y
COLORS(L,S,P) - установка цвета символа (L) ,экрана (S) ,зна-
коместа (P);
PUT8(N) - печать псевдографических символов N=240B-277B
SBROS - применяется перед использованием оператора
READ для сброса спецрежима , установленного
функциями KEYPRESSED и READKEY, когда при на-
жатии на клавишу на экране ничего не отобра-
жается.
Функции:
KEYPRESSED - принимает значения TRUE и FALSE ,в зависимос-
ти от того,была нажата клавиша (TRUE) или нет
(FALSE);
READKEY - выдает код нажатой клавиши;
ENTER(L,U,X,Y) - используется для ввода чисел с контролем
на допустимость значения . L - нижний предел,
U - верхний предел .Режим ввода будет поддер-
живаться пока вводимое число не будет вхо-
дить в указанные рамки . Перед использованием
применение процедуры SBROS не требуется .Если
число не входит в интервал , то независимо от
количества набранных символов происходит сти-
рание первых восьми позиций и курсор переме-
щается в позицию X,Y (кординаты курсора).
Перед использованием процедур и функций данной библиотеки в на-
чале программы необходимо описать их:
PROCEDURE CLRSCR;EXTERNAL;
PROCEDURE CLREOL;EXTERNAL;
PROCEDURE GOTOXY(X,Y:INTEGER);EXTERNAL;
PROCEDURE SBROS;EXTERNAL;
PROCEDURE COLORS(L,S,P:INTEGER);EXTERNAL;
PROCEDURE PUTB(N:INTEGER);EXTERNAL;
FUNCTION KEYPRESSED:BOOLEAN;EXTERNAL;
FUNCTION READKEY:INTEGER;EXTERNAL;
FUNCTION ENTER(L,U:REAL;X,Y:INTEGER):REAL;EXTERNAL;
Координаты курсора находятся в пределах : X=0-79, Y=0-23 .Нача-
лом координат является верхний левый угол экрана (X=0,Y=0). При
достижении 79-й позиции в строке происходит автоматический пере-
ход в начало следующей строки.
- 2 -
Распределение цветов следующее:
0 - цвет фона (прозрачный);
1 - синий;
2 - красный;
3 - сиреневый;
4 - зеленый
5 - голубой;
6 - желтый;
7 - белый.
Отзывы и предложения направляйте в фирму BUSINESS Universal по
тел.470-29-46.
ОСНОВНЫЕ ПРОЦЕДУРЫ
ГРАФИЧЕСКОГО РЕЖИМА ДИСПЛЕЯ "УК-НЦ",
НАПИСАННЫЕ НА ЯЗЫКЕ ПАСКАЛЬ.
1.OCH ........................... - очистка экрана
2.GRAF .......................... - переход в граф.режим
3.SIMV .......................... - переход в симв.режим
4.KOORD(X,Y:INTEGER) ............ - перевод координат в АЦЭ
5.ONE(C:INTEGER) ................ - перевод целого числа в АЦЭ
6.USTCOL(L,P,S:INTEGER) ......... - установка цвета символа,
знакоместа,экрана
7.COLLIN(CL:INTEGER) ............ - установка цвета для прямой
8.COLKON(CK:INTEGER) ............ - установка цвета заполнения
контура
9.ZAPR(X1,Y1,X2,Y2,CZ:INTEGER) - заполнение прямоугольной
области
( левый нижний угол (X1,Y1),
правый верхний угол (X2,Y2),
цвет заполнения - CZ)
10.USTKUR(C1,C2:INTEGER) ......... - установка индексов цвета
алфавитного курсора
11.ZAPOBL ........................ - заполнение области цветом,
установленным в COLKON
12.PEROBL ........................ - перекрашивание области
13.TEKTOC(X,Y:INTEGER) ........... - установка координат текущей
точки ( от которой рисуются
линии и т.д. )
- 3 -
14.VECTOR(X,Y:INTEGER) ........... - рисование вектора
(вектор рисуется от текущей
точки до точки X,Y )
15.TOCH(X,Y:INTEGER) ............. - рисование точки
16.PRAM(X1,Y1,X2,Y2,C:INTEGER) ... - нарисовать прямоугольник
( левый нижний угол (X1,Y1),
правый верхний угол (X2,Y2),
цвет рамки - C ).
17.OBN(X1,Y1,X2,Y2:INTEGER) ...... - очистка окна с символьными
координатами
18.WIN(X1,Y1,X2,Y2,C:INTEGER) .... - прорисовка окна с символьными
координатами
Координаты находятся в пределах X=0-639, Y=0-263 . Началом отсчета
координат является нижний левый угол экрана (X=0,Y=0).
ОСНОВНЫЕ ПРОЦЕДУРЫ
СИМВОЛЬНОГО РЕЖИМА ДИСПЛЕЯ "УК-НЦ",
НАПИСАННЫЕ НА ЯЗЫКЕ ПАСКАЛЬ.
1.KUR(X,Y:INTEGER) .............. - установить курсор в позицию X,Y
2.RKL(VAR A:CHAR) ............... - считать символ без нажатия ВК
3.ZADER(T:INTEGER) .............. - задержка выполнения
4.PER(N:INTEGER) ................ - передача кода символа на дисплей
(целесообразно применять для
8-битных кодов)
5.LPS(L,P,S:INTEGER) ............ - установка цвета сивола,
знакоместа и экрана
(L,P,S=48-55 или 60B-67B)
6.INV ........................... - включение инверсии символа
7.OTMINV ........................ - отмена инверсии символа
8.POD ........................... - включение подчеркивания
символа
9.OTMPOD ........................ - выключение подчеркивания
символа
10.SIZSCR(N:INTEGER) ............. - установка формата экрана
(N=1 - 80x24,
2 - 40x24,
3 - 20x24,
4 - 10x24.)
- 4 -
11.COPYS(Y1,X1,Y2,Y3,DL:INTEGER) - перенос строки экрана в самую
нижнюю (верхнюю) строку,где:
Y1 - номер строки;
X1 - номер столбца;
Y2 - 1 - верхняя строка,
0 - нижняя строка;
Y3 - номер позиции для вывода;
DL - кол-во позиций для вывода.
* Длина нижней(верхней) строки
40 символов
12.COLCUR(C:INTEGER) ............. - установка цвета курсора
(C=48-55 или 60B-67B)
13.CREWIN(X,Y,SX,SY,CB,CS,REV:INTEGER) - прорисовка окна в символьном
режиме :
X,Y - координаты верхнего
левого угла,
SX,SY - ширина по X и Y,
CB - цвет рамки окна
CB=48-55(60B-67B),
CS - цвет символов в окне
CS=48-55(60B-67B),
REV - признак инверсии рамки
(0-нет,1-есть).