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) можно.
viewtopic.php?f=20&t=223#p5210Пример: игра "Охота на лис" (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РК, да и то ограниченно (некоторые подпрограммы Монитора). Quote:
Дистрибутив z88dk я не стал вкладывать в общий архив, так же, как и весь SDCC или весь GCC - кто разрабатывает, допустим, только на подсистеме ZXDev - оно ему не надо, лишний объём. А то представь, что тебе надо кодить под Львов, а в архиве весь Android SDK. Плюс z88dk надо инсталлить и прописывать, там свой инсталлятор есть. Так что одним архивом никак не обойдётся - по идеологическим соображениям это разбито на: "сама среда XDev" и "целевые подсистемы, каждая под свою конкретную платформу". Берутся архивы тут:
viewtopic.php?f=20&t=223#p5212https://github.com/Oleg-N-Cher/XDev/releases Что с ними делать дальше конкретно по подсистеме K580Dev - расписано в статье. ссылки на Библиотека книг и статей по Оберон-технологиям Подборка документов для быстрого старта в Оберон-технологии Подборка | Книги и статьи по языку программирования Оберон [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. Утилиту, кстати, написал тоже на Обероне.
Для ПК-01https://github.com/Oleg-N-Cher/K580Dev |
Author: | als [ 29 Apr 2021, 17:03 ] |
Post subject: | Re: Учимся писать на Обероне |
по сути первую свою програму на Обероне я уже написал Но она для "РК86" Quote:
(*$MAIN*) MODULE test1; IMPORT RK86;
Файл-тест там - viewtopic.php?f=8&t=380&p=5350#p5346VAR 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. Разница в быстродействии. 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/ |