PC-01 Lviv
http://pc01.lviv.ua/forum/

Учимся писать на Обероне
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=396
Page 1 of 4

Author:  als [ 29 Apr 2021, 16:44 ]
Post subject:  Учимся писать на Обероне

Тема предназначена для проб, экспериментов, частей кода, черновиков (кода), ссылок и любой полезной информации помогающей освоить написание програм на Обероне.

Сопутствующие темы (связанные с тематикой Оберон):
Оберон. Установка на Windows XP,"7" (32bit) среды разработки "XDev"
viewtopic.php?f=20&t=395

На пути к Оберону
viewtopic.php?f=20&t=223

Про Оберон и не только :-)
viewtopic.php?f=8&t=391

Вопросы новичка по "Львову"
viewtopic.php?f=20&t=393

Author:  als [ 29 Apr 2021, 16:53 ]
Post subject:  Re: Учимся писать на Обероне

Первое сообщение от Zorko (ссылки на установку 64бит XDev и т.д.
Quote:
Господа, наконец-то я добрался и до вас. Подтверждаю: писать на Обероне для "Львова" (и других компов на КР580) можно.
Пример: игра "Охота на лис" (FoxHunt), портированная с ZX Spectrum для Радио-86РК:
https://zx.oberon.org/foxhunt
Исходник:
https://github.com/Oleg-N-Cher/FoxHunt
Вводная статья в программирование на Обероне для 8080 опубликована в свежем номере #34 журнала Downgrade:
http://dgmag.in
Да. В качестве компилятора Си используется z88dk, который научили генерить код и для проца 8080.

Сам я внутреннего устроения особенностей "Львова" не знаю, так что разработчики асм-библиотек для подсистемы K580Dev приветствуются. Если что-то сделаете, добавим в подсистему. Я также конечно хотел бы поддержку и для Вектора, и для Корвета, и для Специалиста, но уже маемо то, шо маемо. Пока только поддержан Радио-86РК, да и то ограниченно (некоторые подпрограммы Монитора).
viewtopic.php?f=20&t=223#p5210


Quote:
Дистрибутив z88dk я не стал вкладывать в общий архив, так же, как и весь SDCC или весь GCC - кто разрабатывает, допустим, только на подсистеме ZXDev - оно ему не надо, лишний объём. А то представь, что тебе надо кодить под Львов, а в архиве весь Android SDK. Плюс z88dk надо инсталлить и прописывать, там свой инсталлятор есть. Так что одним архивом никак не обойдётся - по идеологическим соображениям это разбито на: "сама среда XDev" и "целевые подсистемы, каждая под свою конкретную платформу". Берутся архивы тут:

https://github.com/Oleg-N-Cher/XDev/releases

Что с ними делать дальше конкретно по подсистеме K580Dev - расписано в статье.
viewtopic.php?f=20&t=223#p5212

ссылки на
Библиотека книг и статей по Оберон-технологиям
Подборка документов для быстрого старта в Оберон-технологии
Подборка | Книги и статьи по языку программирования Оберон [34 книги + статьи] (1982-2013) [DJVU, PDF, DOC, HTML, MHT, PS] [Ru,En,De]
и прочее здесь:
viewtopic.php?f=8&t=391#p5231

Author:  als [ 29 Apr 2021, 16:57 ]
Post subject:  Re: Учимся писать на Обероне

Quote:
SYSTEM.BYTE {0..255}
INT8 {-128..127}
INT16 {-32768..32767}
И ещё INT32 и INT64. Но для Львова их лучше без крайней необходимости не использовать.
Quote:
а эти два типа INT32 и INT64 знаковые ? или от "0" и выше ?
Знаковые.
Quote:
утилита и вчерашняя демка доступны в подсистеме K580Dev. Утилиту, кстати, написал тоже на Обероне.
Для ПК-01
https://github.com/Oleg-N-Cher/K580Dev

Author:  als [ 29 Apr 2021, 17:03 ]
Post subject:  Re: Учимся писать на Обероне

по сути первую свою програму на Обероне я уже написал :-)
Но она для "РК86"
Quote:
(*$MAIN*) MODULE test1; IMPORT RK86;
VAR b1,b2,b3,CO:INT16;
BEGIN

RK86.PUTSTR("START");

FOR b1:=0 TO 255 DO
FOR b2:=0 TO 255 DO
FOR b2:=0 TO 255 DO
END;END;
RK86.PUTSTR("*");
END;

RK86.PUTSTR("END");

END test1.
Файл-тест там - viewtopic.php?f=8&t=380&p=5350#p5346

Разница в быстродействии.
Test1.LVT = 8 мин 3сек = 483 сек
Test1.rk = 14 мин 48 сек =888 сек
Разница быстродействия асм и компилятора Зорко - 888/483 = 1,838 (т.е в два раза)

попробую это для Львова заодно и потестим отличается ли работа данной программы на ПК-01 и РК86

Quote:
Цитата:
(*$MAIN*) MODULE test1; IMPORT RK86;
IMPORT RK86, SYSTEM; (* <-- чтобы использовать SYSTEM.BYTE *)
Quote:
FOR не готов для работы с переменной цикла типа SYSTEM.BYTE. Или юзай опцию -f (для диалекта -3). Но тогда FOR будет оберонский, а не наш, продвинутый. В смысле, нельзя будет FOR i := 0 TO 255
В Обероне FOR приравнивается к WHILE, т.е. будет развёрнут в i := 0; WHILE i <= 255 DO , а беззнаковый байт i всегда <= 255.
Мы сделали расширенную версию FOR, но поддержка беззнакового байта в ней ещё не до конца отлажена. Вообще поддержка беззнакового байта сделана не так давно.

Author:  als [ 29 Apr 2021, 17:16 ]
Post subject:  Re: Учимся писать на Обероне

пусть тоже тут будет, для примеров и вырезаний разных
C:\XDev\K580Dev\Mod\DemoLvov.Mod
Quote:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;

BEGIN
Lvov.CLS(255);
Lvov.PSET(0, 32, 3);
Lvov.PRESET(10, 33);
Lvov.LINE(0, 0, 128, 128, 2);
Lvov.LINE(0, 10, 128, 138, 1);
Lvov.BOX(50, 50, 75, 75, 3);
Lvov.FIL_BOX(150, 150, 75, 75, 3);
(*
Lvov.COLOR(5, 0);
Lvov.PAINT(130, 30, 2, 3);
*)
LOOP END
END DemoLvov.

Author:  als [ 29 Apr 2021, 17:22 ]
Post subject:  Re: Учимся писать на Обероне

"Башкирия" надоела быстро со своим своим "долгоиграющим" стартом программы :-)
прикрутил свой САС-емулятор SASemulator1.44Beta!
Для тех кто не знает но хочет другое прикрутить...
наводим в проводнике на файл ".LVT", пр.кнопкой мыши, "свойства", изменяем приложение обрабатывающее файлы ".LVT"

Author:  als [ 29 Apr 2021, 17:26 ]
Post subject:  Re: Учимся писать на Обероне

Зорко, так а вывод текста на екран пока нет ?

Author:  als [ 29 Apr 2021, 17:50 ]
Post subject:  Re: Учимся писать на Обероне

Зорко, что-то я не пойму...
DemoLvov.Mod - работает нормально
стоит его копировать переименовать в другие имена
и соответственно исправить в программе, не компилируется не создает
.lvt и запускает не мой прикрученный эмулятор, запускает "Башкирию"-с-"РК86" (видимо пустую рк86)
В чем может быть проблема ?


Test1LVOV.Mod
MODULE Test1LVOV; (*$MAIN*)
END Test1LVOV.

DemoLvov2.Mod
MODULE DemoLvov2; (*$MAIN*)
END DemoLvov2.

Author:  als [ 29 Apr 2021, 17:58 ]
Post subject:  Re: Учимся писать на Обероне

Доп.
я смотрю оно результ под РК86 создает
DemoLvov2.rk
Test1LVOV.rk
а какого черта ?!

Author:  als [ 29 Apr 2021, 20:43 ]
Post subject:  Re: Учимся писать на Обероне

Зорко,
смотрю наверное вот тут
C:\XDev\K580Dev\Obj\DemoLvov.bat
у тебя наверное что-то не так
строка
@..\Bin\Build.bat DemoLvov

Author:  als [ 29 Apr 2021, 20:54 ]
Post subject:  Re: Учимся писать на Обероне

Зорко есть непонятности
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR b1,b2,b3,CO:INT16;

PROCEDURE p1( a:INT16);
VAR b1,b2,b3,CO:INT16;
BEGIN
Lvov.LINE(1, 1,10,1, 3); (* типа старт ^-) *)
END p1;

BEGIN 
END DemoLvov.

по сути
BEGIN
END DemoLvov.
пустой! Почему запускается PROCEDURE p1( a:INT16); ?


что такое (*$MAIN*) ?
пробовал переносил это в
BEGIN (*$MAIN*)
END DemoLvov.
так как видел что-то подобное FoxHunt

Author:  als [ 29 Apr 2021, 20:57 ]
Post subject:  Re: Учимся писать на Обероне

" LOOP END" - вот такое я еще не понял в DemoLvov.Mod
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;

BEGIN
  Lvov.CLS(255);
  Lvov.PSET(0, 32, 3);
  Lvov.PRESET(10, 33);
  Lvov.LINE(0, 0, 128, 128, 2);
  Lvov.LINE(0, 10, 128, 138, 1);
  Lvov.BOX(50, 50, 75, 75, 3);
  Lvov.FIL_BOX(150, 150, 75, 75, 3);
(*
  Lvov.COLOR(5, 0);
  Lvov.PAINT(130, 30, 2, 3);
*)
  LOOP END
END DemoLvov.

пробовал убирать или только "LOOP" или " LOOP END" уже не вспомню, - программа буто бы "кругами" работала...

Author:  als [ 30 Apr 2021, 09:05 ]
Post subject:  Re: Учимся писать на Обероне

Зорко,
а вот если когда-то ума наберусь :-) вот сюда C:\XDev\K580Dev\Lib\C\Lvov.c что-то своё добавлять работать будет, или то чисто как пример исходника ?

Author:  als [ 30 Apr 2021, 11:16 ]
Post subject:  Re: Учимся писать на Обероне

Может Зорко и говорил что-то про неэффективность
конструкции "FOR TO DO END;" надо поискать
но то что я тут увидел - думаю завал полныЙ!

Зорко, подавай эффективные типы данных и конструкции! :-)
Глянь на декомпилированный что там твориться
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR b1:INT8;


BEGIN
(*  Lvov.CLS(0); *)
FOR b1:=0 TO 127 DO END;
(*  Lvov.CLS(255);*)
END DemoLvov.
Декомпилированный МАДЛом
Code:
{Дизкомпилированный файл: 'DemoLvov.lvt'}
{Формат LVT}
{ Начальный адрес: $0000 (0) }
{ Конечный адрес : $0029 (41) }
{ Адрес старта   : $0000 (0) }

program Project; uses  uMD01u in 'uMD01u.pas';

VAR
L0000, L0007, L000E, L0023, L0024
:TLabelLV;

BEGIN
INITCompiler;

SetFullNameLVTfile('DemoLvov.lvt');
SetNameInternalKOI(#$44+#$65+#$6D+#$6F+#$4C+#$76);

SetAddrRAM($0000);

StartProgram;

LabelA(L0000);
Call(L0007);
JMP($F875);     // непонятное ?!??!!
DB($E9);     // непонятное ?!??!!

LabelA(L0007);
LxiHL(L0000);     //  HL=$0000
MovAL;     //A=L
Sta(L0023);     // b1:INT8=L=$00

	LabelA(L000E);     // похоже на цикл FOR b1:=0 TO
	LxiHL(L0023);     // ^b1

	Call(L0024);     // А ЭТО ВООБЩЕ ЧТО ТАКОЕ И ЗАЧЕМ!??!?!

	InxHL;     //HL=HL+1
	MovAL;     //A=L
	Sta(L0023);     //b1=A
	MovAL;     //
	Xri($80);     // A = A xor 128
	Sui($80);     // A = A - 128
	cmc;     //  not c(признак).
	Jc(L000E);     //
	RET;

LabelA(L0023);     // VAR b1:INT8
DB($00);

	LabelA(L0024);     // А ЭТО ВООБЩЕ ЧТО ТАКОЕ И ЗАЧЕМ !??!?!
	MovAM;     // A=b1
	MovLA;     // L=b1
	rlc;       // A=  сдвиг влево
	SbbA;     // A=A-A-c
	MovHA;     // H=A
	RET;

FINALCompiler;
END.

Далее проверим "WHILE DO" "REPEAT UNTIL" если есть такие

Author:  als [ 30 Apr 2021, 11:39 ]
Post subject:  Re: Учимся писать на Обероне

"WHILE DO"
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR b1:INT8;

BEGIN

WHILE  b1< 127 DO END;

END DemoLvov.
Code:
{Дизкомпилированный файл: 'DemoLvov.lvt'}
{Формат LVT}
{ Начальный адрес: $0000 (0) }
{ Конечный адрес : $001A (26) }
{ Адрес старта   : $0000 (0) }

program Project; uses  uMD01u in 'uMD01u.pas';

VAR
L0007, L0014, L0015
:TLabelLV;

BEGIN
INITCompiler;

SetFullNameLVTfile('DemoLvov.lvt');
SetNameInternalKOI(#$44+#$65+#$6D+#$6F+#$4C+#$76);

SetAddrRAM($0000);

StartProgram;
Call(L0007);

JMP($F875);
DB($E9);

	LabelA(L0007);// начало цикла WHILE
	LxiHL(L0014);//HL=b1

	Call(L0015);////// что это за "подстраховака" "перестраховака"такая какая-то

	MovAL;//A=b1
	Sui($7F);// A=A-127
	Jc(L0007);//цикл
	RET;// конец цикла

LabelA(L0014);//VAR b1:INT8;
DB($00);

	LabelA(L0015);/// что это за "подстраховака" "перестраховака"такая какая-то
	MovAM;
	MovLA;
	rlc;
	SbbA;
	MovHA;
	RET;

FINALCompiler;
END.


Page 1 of 4 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/