Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 22:49

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 02 мар 2013, 19:54 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вот интересный фронт работ. :) Сегодня игрался с эмулятором советского компьютера УК-НЦ, на нём есть реализация Паскаля, называется Pascal/Fast. Реализовано очень в стиле Turbo Pascal (даже включая библиотеки), но с некоторыми отступлениями. Но очень многие вещи совместимы. Вот, например, удалось легко адаптировать программу TradeMark из пакета Pascal/Fast на Turbo Pascal. Не совсем верно конечно получилось, но всё равно даже такая частичная совместимость радует.

Сама библиотека Graph сделана достаточно независимо от разрешения и глубины цвета экрана, так что может быть и стоит заняться её портированием на Спектрум. :)


Вложения:
TRMARK.PAS [3.81 КБ]
Скачиваний: 836
TradeMark.png
TradeMark.png [ 16.5 КБ | Просмотров: 25999 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 11 мар 2013, 21:30 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вот как может выглядеть адаптированный для ZXDev пример программы Sinus, использующей графическую библиотеку, совместимую с Turbo Pascal. Я не делал порт графической библиотеки под ZXDev целиком, просто слегка начал работу в этом направлении — написал несколько процедур. Вот как выглядит модуль GraphSinus:

Код: "OBERON"
  1. (* Sinus example (Pascal/Fast, UK-NC) for ZXDev/Oberon-2 *)
  2. (* Copyright (C) 2013 Oleg N. Cher, VEDAsoft Oberon Club *)
  3.  
  4. MODULE GraphSinus;
  5. IMPORT G := Graph, Math;
  6.  
  7. CONST
  8. k1 = 40; k2 = 100;
  9. VAR
  10. KD, MD: INTEGER;
  11. i, s : INTEGER;
  12. (*c : Char;*)
  13. ox, oy: INTEGER;
  14.  
  15. PROCEDURE Sign (x: INTEGER): SHORTINT;
  16. BEGIN
  17. IF x > 0 THEN RETURN 1 END;
  18. IF x < 0 THEN RETURN -1 END;
  19. RETURN 0
  20. END Sign;
  21.  
  22. BEGIN (*$MAIN*)
  23. KD := G.ZX;
  24. MD := G.ZXMono;
  25. G.InitGraph(KD, MD, "");
  26. ox := (G.GetMaxX() + 1) DIV 2;
  27. oy := (G.GetMaxY() + 1) DIV 2;
  28. G.SetColor(G.White);
  29. G.Line(0, oy, G.GetMaxX() + 1, oy);
  30. G.Line(ox, 0, ox, G.GetMaxY() + 1);
  31. G.Line(G.GetMaxX() - 4, oy - 3, G.GetMaxX(), oy - 1);
  32. G.Line(G.GetMaxX() - 4, oy + 3, G.GetMaxX(), oy + 1);
  33. G.Line(ox - 3, 5, ox - 1, 1);
  34. G.Line(ox + 3, 5, ox + 1, 1);
  35. FOR i := 1 TO ox - 10 DO
  36. s := SHORT(ENTIER(Math.Sin(i / k1) * k2));
  37. IF s # 0 THEN
  38. G.Line(i + ox, s + oy, ox, oy + Sign(s));
  39. G.Line(ox - i, oy - s, ox, oy - Sign(s));
  40. END;
  41. END;
  42. (*c := ReadKey;*)
  43. G.CloseGraph
  44. END GraphSinus.
На Спектруме конечно очень медленно рисует (есть что пооптимизировать, например, заменить вещественные вычисления на целочисленные), но это не главное. Мне тут подумалось, что ZXDev может в итоге напоминать Turbo Pascal, как по простоте, так и по возможностям. Только кроссплатформенный и с более простым и совершенным языком.


Вложения:
GraphSinus.png
GraphSinus.png [ 45.64 КБ | Просмотров: 25971 ]
Комментарий к файлу: Исходник Sinus на Turbo Pascal
Sinus.pas [1.06 КБ]
Скачиваний: 845
Комментарий к файлу: GraphSinus.tap для ZX Spectrum
GraphSinus.tap.zip [4.76 КБ]
Скачиваний: 788
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 13 мар 2013, 14:35 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вобщем конечно Math.Sin(x) * k надо заменить на целочисленный табличный синус Math.SinIMult(x, k).

Кроме того, там ещё точка рисуется медленной ПЗУшной процедурой. И линия сделана на Си, а надо бы на асме. Предел оптимизации далеко не достигнут :) Можно даже по нескольким направлениям двигать.

Но разве я ставил цель оптимизировать это до максимума? Вовсе нет. Просто навожу мосты, показываю саму возможность кроссплатформенной разработки между ретро-платформами УК-НЦ, MS-DOS и ZX, в надежде что кто-то (или я сам попозже) захочет заняться дальнейшей оптимизацией.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 28 апр 2013, 16:38 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Родственная синусу тема про цветочек на УК-НЦ. Спектрум-вариант добавлен в репозиторий ZXDev.


Вложения:
Flower.png
Flower.png [ 16.59 КБ | Просмотров: 25841 ]
Flower2.png
Flower2.png [ 38.04 КБ | Просмотров: 25841 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 29 апр 2013, 16:35 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вариант «цветочка», который я когда-то делал на Лиспе. Не помню насколько он рабочий (отковырял его из пачки старых пятидюймовых дискет). Год? Где-то 2001. А пощу затем, что некоторые товарищи не верят, что я когда-то учил Лисп. 8-)
Код: "LISP"
(defun Flower.Body (Dg)
(setq Rd (* Dg P) Q (* N Rd)
R (abs(+ (* B1 sin(* 0.5 Q)) (* B3 sin(* 1.5 Q)) (* B5 sin(* 2.5 Q))))
cosRd cos (Rd) sinRd sin (Rd))
(#scrline# (Xo Yo (+ Xo (* R cosRd)) (+ Yo (* R sinRd aspect)))
(#scrwdot# ((+ Xo (* (+ R 4) cosRd)) (+ Yo (* (+ R 4) sinRd aspect)) 1))
(cond ((= (Dg 0)) (Flower.Body (- (Dg 0.5)))))
)
 
(defun Flower (Xo Yo Radius N Aspect A1 A3 A5)
(setq P (/ 3.14159 180.0)
Q (+ A1 A3 A5)
B1 (/ (* Radius A1) Q)
B3 (/ (* Radius A3) Q)
B5 (/ (* Radius A5) Q)
(Flower.Body (360.0))
(Flower.Center(
; FOR Q = 0 TO Radius% / 10 STEP Radius% / 50
; FOR N% = 0 TO 345 STEP 15
; PRESET (Xo% + Q * COS(N% * P), Yo% + (Q * SIN(N% * P) * aspect))
; NEXT
; NEXT
 
(#scrmde# 6)(#scrsap# 0)
(Flower (160 100 160 6 1.0 0.25 0.1 0.85)
(gc) (#scrmde# 2)


Вложения:
Комментарий к файлу: Моя незаконченная статья про язык LISP
Art_LISP.txt [11.25 КБ]
Скачиваний: 836
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 11 мар 2014, 22:25 
Не в сети
Аватара пользователя

Сообщения: 12
Я пока так и не собрался сделать снимок flow3.pas(sav) c экрана реала, зато есть новости с эмуляторных фронтов,
а именно подтвердился полностью факт реализации и турбо-среды и модуля граф
под все отечественные PDPишки. Оригинальное сообщение тут > http://zx.pk.ru/showpost.php?p=687139&postcount=86

ДВК-2М
Изображение

Изображение

Изображение


БК-11М

Изображение

Изображение


Ну а УК-НЦ вариант и так понятно был есть и будет.
Ура! Осталось ещё с Модулой-2 PDPшной (а точнее ДВКашной)
разобраться - то есть правильно рабочую среду организовать,
найти и отсканировать документацию, но это из другой темы вопросы.

:ugeek:

_________________
Изображение
Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 02 апр 2014, 18:43 
Не в сети
Аватара пользователя

Сообщения: 12
Давненько я Олегу обещал с родного экрана УК-НЦ сделать картинку FLOW3.PAS
Буквально вчера дошли руки подключить свою машинку только как временный вариант к телевизору

Изображение

Не смотря на то, что камера направлена не перпендикулярно экрану - экран плоский и искажений нет,
аутентичность картинки по моему налицо ( то есть цветок не сплюснут по вершинам и висит примерно в центре)
:ugeek:

_________________
Изображение
Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 02 апр 2014, 20:24 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Отлично, Слава! Спасибо за картинку. Это приятно, что цветочек работает на реальной машинке.

Согласись, здорово, что есть библиотека, с помощью которой можно писать графические программы для БК, ДВК и УК-НЦ хоть и не "с единого листа", но хотя бы с минимальными переделками. В принципе, это сильно облегчает миграцию программ с платформы на платформу. Главное — не упереться в какое-то сильно хитрое ограничение этой технологии, которое не удастся так легко обойти (из-за недоступности исходников).

И ещё жаль, что размер .SAV получается довольно немаленьким, мне кажется, он мог бы быть намного скромнее (может на Модуле-2 удастся получить исполняемые файлы размером поменьше?).


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 04 апр 2014, 19:03 
Не в сети
Аватара пользователя

Сообщения: 12
Zorko писал(а):
Отлично, Слава! Спасибо за картинку. Это приятно, что цветочек работает на реальной машинке.
(может на Модуле-2 удастся получить исполняемые файлы размером поменьше?).

Что "цветочек" запуститься я и не сомневался (с чего ему не работать?), другой момент, на реальной машинке
иногда ширина\высота получаемой картинки с картинкой в эмуляторе сильно не совпадает.

С модулой на УК-НЦ и ДВК пока заминка, но как только что-то там тронется отпишу сразу же!
В целом размер исполняемого файла и стал той преградой, которая не позволила массово и комфортно
использовать среду FAST-PASCAL на школьных УК-НЦ и ДВК (ну и как теперь уже понятно БК11М).
Конечно там есть настройка - текст программы = (на диске\ в памяти) и исполняемый код (на диске\в памяти), что позволяло ПКМ использовать в учебном процессе.

Конечно стандартный DECовский Паскаль + вставки на ассемблере и процедуры\функции из системной библиотеки вот самая удобная среда написания программ любой сложности на этих машинках. Для профи конечно хватало и просто МАКРО-11 ну и конечно же был(есть) Си
:ugeek:

_________________
Изображение
Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 25 авг 2016, 17:53 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Код: "OBERON"
  1. (* Spiral on the ball (Pascal/Fast, UK-NC) for ZXDev/Oberon-2 *)
  2. (* Copyright (C) 1996 AzAtom *)
  3. (* http:// azatom.narod.ru, http:// zx-pk.ru/forum.php *)
  4.  
  5. MODULE Spiral11;
  6. IMPORT G := Graph, Math;
  7.  
  8. VAR
  9. KD, MD: INTEGER;
  10. i, s : INTEGER;
  11. r,a,v,x,y,cx,cy:INTEGER;
  12. a2,yr1,yr2:REAL;
  13.  
  14. BEGIN (*$MAIN*)
  15. KD := G.ZX;
  16. MD := G.ZXMono;
  17. G.InitGraph(KD, MD, "");
  18. r:=80; (* Can be changed from 1 to 88*)
  19. a:=30; (* Can be changed from 0 to 90*)
  20. v:=20; (* Can be changed from 1 to ..*)
  21. cx:=128;
  22. cy:=88;
  23. a2:=a*3.1415/180;
  24. yr1:=r*Math.Sin(a2);
  25. yr2:=r*Math.Cos(a2);
  26. FOR i:=0 TO v*36 DO
  27. x:=cx+SHORT(ENTIER(r*Math.Cos(3.1415*i/18)*Math.Sin(3.1415*i/(36*v))));
  28. y:=cy+SHORT(ENTIER(yr1*Math.Sin(3.1415*i/18)*Math.Sin(3.1415*i/(36*v))-yr2*Math.Cos(3.1415*i/(36*v))));
  29. G.PutPixel(x,y);
  30. END;
  31.  
  32. G.CloseGraph
  33. END Spiral11.


Вложения:
Spiral11.png
Spiral11.png [ 13.33 КБ | Просмотров: 22274 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club