PC-01 Lviv

It is currently 29 Mar 2024, 02:55

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 53 posts ]  Go to page 1 2 3 4 Next
Author Message
PostPosted: 29 Apr 2021, 16:44 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Тема предназначена для проб, экспериментов, частей кода, черновиков (кода), ссылок и любой полезной информации помогающей освоить написание програм на Обероне.

Сопутствующие темы (связанные с тематикой Оберон):
Оберон. Установка на 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


Last edited by als on 29 Apr 2021, 17:04, edited 1 time in total.

Top
   
PostPosted: 29 Apr 2021, 16:53 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Первое сообщение от 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


Top
   
PostPosted: 29 Apr 2021, 16:57 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
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


Top
   
PostPosted: 29 Apr 2021, 17:03 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
по сути первую свою програму на Обероне я уже написал :-)
Но она для "РК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, но поддержка беззнакового байта в ней ещё не до конца отлажена. Вообще поддержка беззнакового байта сделана не так давно.


Top
   
PostPosted: 29 Apr 2021, 17:16 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
пусть тоже тут будет, для примеров и вырезаний разных
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.


Top
   
PostPosted: 29 Apr 2021, 17:22 
Offline

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


Top
   
PostPosted: 29 Apr 2021, 17:26 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Зорко, так а вывод текста на екран пока нет ?


Top
   
PostPosted: 29 Apr 2021, 17:50 
Offline

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


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

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


Top
   
PostPosted: 29 Apr 2021, 17:58 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Доп.
я смотрю оно результ под РК86 создает
DemoLvov2.rk
Test1LVOV.rk
а какого черта ?!


Top
   
PostPosted: 29 Apr 2021, 20:43 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Зорко,
смотрю наверное вот тут
C:\XDev\K580Dev\Obj\DemoLvov.bat
у тебя наверное что-то не так
строка
@..\Bin\Build.bat DemoLvov


Top
   
PostPosted: 29 Apr 2021, 20:54 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Зорко есть непонятности
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


Top
   
PostPosted: 29 Apr 2021, 20:57 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
" 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" уже не вспомню, - программа буто бы "кругами" работала...


Top
   
PostPosted: 30 Apr 2021, 09:05 
Offline

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


Top
   
PostPosted: 30 Apr 2021, 11:16 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Может Зорко и говорил что-то про неэффективность
конструкции "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" если есть такие


Top
   
PostPosted: 30 Apr 2021, 11:39 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
"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.



Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 53 posts ]  Go to page 1 2 3 4 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited