Вложений: 1
Си граф. библиотека by Tiger (C) 1995
Нашёл от тов.oldskool такое вот для Си, степень готовности этого проекта не установлено, я Си (всегда бежал! вообще) на УК-НЦ всерьёз не воспринимаю , хотя многое писалось для этой машинки на Си - пример движок игры "Стань Стальной Крысой" да и наверное ещё что-то есть и не мало.
И так документ:
Код:
О П И С А Н И Е Б И Б Л И О Т Е К И C G L I B v.2.00
(C) January 1995, Tiger
Графическая библиотека CGLIB содержит функции работы с графикой ЦП УКНЦ для
программ на языке C. Вторая версия отличается от первой расширенным набором
функций для работы с массивами видеоинформации, а также возможностью работы в
16ти цветах и более корректной версией функции outtext.
Функции библиотеки не обращаются к стандартным меткам C csv$ и cret$,
поэтому возможно их использование из программ на ассемблере. Вызывающая
последовательность выглядит примерно так:
.globl XXXXXX
mov argN,-(sp)
... ..........
mov arg2,-(sp)
mov arg1,-(sp)
call XXXXXX
add #N*2,sp
Здесь N - количество аргументов функции, arg1..argN - соответственно
аргументы (нумеруются слева направо в описании функции на C), XXXXXX - первые
6 символов имени функции.
ВНИМАНИЕ! Функции изменяют содержимое R0 и R1! Содержимое других регистров не
изменяется.
Х А Р А К Т Е Р И С Т И К А Б И Б Л И О Т Е К И
Все графические функции реализованы на ЦП УК-НЦ в связи с
неудовлетворительно малой скоростью работы и неудобным интерфейсом графики
ПЗУ. В связи с этим доступно лишь 4 цвета - соответственно экранные планы 1 и
2. Недостаточно малое количество цветов компенсировано введением механизма
палитр. Физически на экране больше 4 цветов одновременно вы получить не
сможете, но вы можете "жонглировать" цветами по своему усмотрению с помощью
переключения палитр (см. описание функций SetPalette(), Palette()).
Разрешение графического экрана составляет 640*288 точек, начало координат -
в левом верхнем углу экрана.
ВНИМАНИЕ!
Для увеличения скорости работы графики функции не производят проверку на
корректность координат, поэтому вся ответственность за правильность входных
данных лежит на программисте. Координаты должны находиться в следующих
пределах: X : [0..639], Y : [0..287], и номер цвета в пределах [0..3]. Будьте
внимательны! Если координаты выйдут за указанные пределы, могут возникнуть
неприятные сюрпризы, как то: в лучшем случае - белиберда на экране, в худшем
- затертые ОЗУ ЦП и системная область, и, как следствие, зависание машины.
Сравнительный анализ показал, что скорость работы некоторых функций, в
частности, вывод точки и закрашенного прямоугольника, превышает скорость
работы аналогичных ПЗУшных функций в 1,5-2 раза. Функция вывода линии
основана на алгоритме Люка, и ее скорость приблизительно равна скорости
ПЗУшной подпрограммы вывода линии.
Функции работы с областями изображений имеют некоторую специфику работы:
область может начинаться только со столбца, совпадающего с началом
знакоместа, иначе говоря, номер которого кратен 8. Скорость работы функций
копирования и перемещения составляет примерно
175000 (сто семьдесят пять тысяч) точек/с.
И С П О Л Ь З О В А Н И Е Б И Б Л И О Т Е К И
<..>
В приложеном архиве полное описание + CGLIB.OBJ;
Остальное по граф. для ассемблера, Си, паскаля, и Фортрана -
пока только то, что ориентировано только на КЦГД - в принципе,
в архиве наверное с самого начала валялось, я даже постил год или
больше назад про тот кусок архива информацию. Позже выяснилось,
это часть из разработок для КВАНТ-4С с КЦГД и рабочей средой АДОС - имеется в архиве у меня (источник архив Адос SuperMax'а).
Парочка фоток с живой машинки
1 и 2 апреля подрубал свою УК-НЦ к телевизору.
Дошли руки сделал несколько фоток и некоторый софт из архива
на живую машинку перетащил (пользуюсь для переноса дискетами
по старинке - без HX-технологий и ком-порт. соединений ибо сложно
это для меня (ковырять УК-НЦ), и там где стоят эмуляторы никаких
ком-портов нету (и даже виртуальные не заводятся - это мой ноут).
Под спойлер все подробности.
ловлу вылет и потихонечку ращу программу
В процессе работы программы стал плавать выскакивать в разных местах
вылет по трапу с таким сообщением:
Код:
TRAP TO 4 - FROM PC 003152
Правил исходник, теперь чётко в одном месте вылет.
Обойти его можно (условие не вылета известно, неизвестно условие вылета !!!).
GRAY пока без файлов. почти КЦГДшный PAST !
Цитата:
Сообщение от
bigral
На вскидку есть bk0010, uk-nc, кгд, кцгд, pro300...
Хотел просто упомянуть такую вещь (пока просто для информации), для УК-НЦ имеется практически аналогичный КЦГДшному "PAST" (см. демо в теме про КЦГД) набор процедур с простейшими графическими построениями и возможностью выводить "графическим" шрифтом в любых направлениях, это система GRAY
Код:
Image : GRAY.DSK
Format : DSK
Size : 75 Kb
Volume ID: Gray 2.03.90
Owner : Fomenko S.A.
File Blocks Date Bytes
---------- ------ ----------- ----------
GRAY .SAV 10 06-Mar-1990 5'120
TSGRAY.SAV 13 07-Mar-1990 6'656
GRAY .MAC 50 06-Mar-1990 25'600
GRAYF .MAC 13 10-Mar-1990 6'656
GRAY .TXT 8 10-Mar-1990 4'096
GRAYP .MAC 14 06-Mar-1990 7'168
GRAYP .OBJ 4 06-Mar-1990 2'048
T .SAV 3 10-Mar-1990 1'536
TSGRAY.BAK 9 07-Mar-1990 4'608
GRAYF .OBJ 4 10-Mar-1990 2'048
T .MAC 5 10-Mar-1990 2'560
TSGRAY.PAS 9 10-May-2014 4'608
---------- ------ ----------- ----------
12 Files, 142 Blocks
0 Free blocks
Код:
(* Краткое описание графического пакета 'Gray'для УК-НЦ *)
(* (c) Фоменко С.А. 10-Марта-1990 года. *)
procedure init; external;
(* инициализация работы с пакетом *)
procedure finit; external;
(* окончание работы с пакетом *)
procedure window(xl,yb,xr,yt:integer); external;
(* Установка окна вывода графики *)
procedure ramka; external;
(* Установление рамки в окне текущим цветом
и типом линии *)
procedure newpicture(i:integer); external;
(* Отчистка текущего окна i-способ отчистки *)
(* 0-инверсией,1-наложением,2-отчисткой по маске
3-установкой цвета *)
procedure drawmode(i:integer); external;
(* Задание способа рисования 0,1,2,3 *)
procedure color(i:integer); external;
(* Задание цвета графики 0..7 *)
procedure linestyle(i:integer); external;
(* Задание типа линии 0..7 *)
procedure userstyle(i:integer); external;
(* Задание пользовательского типа линии *)
procedure line(x,y,x1,y1:integer); external;
(* Прорисовка линии *)
procedure dot(x,y:integer); external;
(* Прорисовка точки *)
procedure grdot(x,y:integer); external;
(* Прорисовка точки графика в соответствии
с текущим типом линии *)
procedure circle(x,y,r:integer); external;
(* Прорисовка окружности *)
procedure arc(x,y,r,xs,ys,xt,yt,cw:integer); external;
(* Прорисовка дуги *)
procedure fill(x,y:integer); external;
(* Заливка произвольной области *)
procedure square(x,y,x1,y1:integer); external;
(* Прорисовка квадрата *)
procedure setcol(c,i:integer); external;
(* Установка соответствия цвета *)
procedure screen(i:integer); external;
(* Установка размеров экрана 1,2,3,4 *)
procedure chcolor(i:integer); external;
(* Установка цвета а/ц. символов *)
procedure chkurs(i:integer); external;
(* Установка цвета а/ц. курсора *)
procedure sccolor(i:integer); external;
(* Установка цвета экрана. символов *)
procedure stcolor(i:integer); external;
(* Установка цвета строки *)
(* При задании цвета меньше 0 происходит
восстановление предыдущего цвета *)
procedure invers(onof:integer); external;
(* Установка/снятие инверсии а/ц. символов
1-Установка 0-снятие *)
procedure podch(onof:integer); external;
(* Установка/снятие подчеркивания а/ц. символов
1-Установка 0-снятие *)
procedure anpos(x,y:integer); external;
(* Позиционирование а/ц курсора *)
procedure vanpos(x,y:integer); external;
(* Позиционирование а/ц курсора близко к графике *)
procedure anclear(x,y:integer); external;
(* отчистк а/ц дисплея до конца экрана *)
procedure setchsize(dx,dy:integer); external;
(* Установка размера графических символов
dx и dy - множители в размере символа *)
procedure setchup(up:integer); external;
(* Установка направления вывода графических
символов 0-нормальный вывод
1-7 повернутые через 45 град. против час.
стрелки.
8-11 вывод обратных символов по 4 направлениям
12 вывод наклонного шрифта
13 вывод обратного наклонного шрифта
14 вывод наклонного шрифта с обратным наклоном
15 вывод ---//--- развернутым... *)
procedure character(x,y:integer;c:char); external;
(* Вывод графического символа по координатам
текущим цветом графики размером и наклоном *)
procedure string(x,y,dx,dy:integer); external;
(* Вывод строки символов начиная с координаты
приращение каждого символа определяется дь,ды
вывод текста осуществляется текущим цветом
графики размером и наклоном и заканчивается
символом код которого меньше пробела (32.)
Рекомендуется следущая комбинация на вывод
---//---
setchsize(dx,dy);
setchup(up);
string(x,y,dx,dy);
write('Text... a=',a,b,c,chr(10));
---//---
chr(10) заканчивает вывод граф.символов..*)
http://s1.hostingkartinok.com/upload...62713928ff.png
Насколько я понимаю - Сергей Фоменко писал его уже вне ASPcorp.
Пока не публикуется - все новые материалы по ASPcorp. проходят
проверку (ожидается так же одобрение хозяина дискет и авторов на
публикацию\добавлению в архив).
http://s1.hostingkartinok.com/upload...dd1d55b9c7.png
(в общем выложу\прилеплю как только так сразу)
пересыл содержимого R0 не работает !!!
Выдернул опрос клавиатуры из исходника Titusa.
К ожиданию нажатия и работы .TTYIN естественно нет проблем.
Но! Как мне дальше работать (обрабатывать) код нажатой кнопки???
Сделал тестовую программу, что бы нагляднее описать суть вопроса:
Протокол работы:
Код:
.TPQQQ1
НАЖМИТЕ ЛЮБУЮ КЛАВИШУ
uh ty!!!
BYE 0
Листинг TPQQQ1.PAS
Код:
.TY TPQQQ1.PAS
PROGRAM TPQQQ1;
/*$C .MCALL .TTYIN
*/
VAR
RP: INTEGER;
PROCEDURE KEYPRESS(KEYCODE: INTEGER);
BEGIN
/*$C BIS #^O10000,@#^O44
.TTYIN
CMPB R0,#27.
BNE 1$
.TTYIN
1$: CMPB R0,#13.
BNE 2$
.TTYIN
2$: MOV R0, KEYCODE(SP)
*/
END;
BEGIN
WRITELN(CHR(14),'navmite l`bu` klawi{u',CHR(15));
KEYPRESS(RP);
WRITELN('uh ty!!!');
KEYPRESS(RP);
WRITELN('BYE',RP);
END.
Выделенная жирным команда не работает!!!
RP при таком как сейчас присвоении = нулю (как видно выше),
если я по примеру оператора сравнения CMPB использую оператор
MOVB программа вылетает в TRAP ??? Почему 0 ??? В чём моя ошибка ???
адаптированная для УК-НЦ среда FAST\PASCAL 2.2-3
Практически версия 2.3 (!), поскольку до этого самой свежей и правильной считалась версия 2.2
вот её заголовок
И вот на одной из дискет из последнего пополнения на форуме
обнаружены сразу две более старшие версии с адаптацией для УК-НЦ
Может быть Барнаульские корректировщики среды откликнутся и прокомментируют улучшения?
образ дискеты тут http://zx-pk.ru/showpost.php?p=799492&postcount=479 UK_F-PASCAL2.2_IMG_.DSK