PC-01 Lviv http://pc01.lviv.ua/forum/ |
|
Учимся писать на Обероне http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=396 |
Page 2 of 4 |
Author: | als [ 30 Apr 2021, 11:55 ] |
Post subject: | Re: Учимся писать на Обероне |
REPEAT UNTIL Code: MODULE DemoLvov; (*$MAIN*) IMPORT Lvov; VAR b1:INT8; PROCEDURE PUSTO; BEGIN END PUSTO; BEGIN REPEAT PUSTO; UNTIL b1< 127 END DemoLvov. Code: {Дизкомпилированный файл: 'DemoLvov.lvt'} {Формат LVT} { Начальный адрес: $0000 (0) } { Конечный адрес : $001F (31) } { Адрес старта : $0000 (0) } program Project; uses uMD01u in 'uMD01u.pas'; VAR L0007, L0008, L0019, L001A :TLabelLV; BEGIN INITCompiler; SetFullNameLVTfile('DemoLvov.lvt'); SetNameInternalKOI(#$44+#$65+#$6D+#$6F+#$4C+#$76); SetAddrRAM($0000); StartProgram; Call(L0008); JMP($F875); DB($E9); LabelA(L0007); //PROCEDURE PUSTO; BEGIN END PUSTO; RET; LabelA(L0008); // REPEAT Call(L0007); //PUSTO; LxiHL(L0019); //HL=^b1 Call(L001A); // Опять двадцать пять!!!!!!!!!!! MovAL; Sui($7F); // вычитание 127 cmc; // инверсия признака с (насколько я помню) Jc(L0008); //UNTIL b1< 127 RET; LabelA(L0019); // VAR b1:INT8; DB($00); LabelA(L001A); // Опять двадцать пять!!!!!!!!!!! MovAM; MovLA; rlc; SbbA; MovHA; RET; FINALCompiler; END.Да что это за обработка такая ? Code: LabelA(L001A); // Опять двадцать пять!!!!!!!!!!! MovAM; MovLA; rlc; SbbA; MovHA; RET; |
Author: | als [ 30 Apr 2021, 13:03 ] |
Post subject: | Re: Учимся писать на Обероне |
НДА!.... Если коротко - Я ПРОСТО В ШОКЕ! Остальное посмотрите сами! Code: MODULE DemoLvov; (*$MAIN*) IMPORT Lvov; VAR b1,b2:INT8; PROCEDURE PUSTO1; BEGIN b1:=b2;END PUSTO1; PROCEDURE PUSTO2(b1,b2:INT8); BEGIN b1:=b2;END PUSTO2; PROCEDURE PUSTO3(VAR b1,b2:INT8); BEGIN b1:=b2;END PUSTO3; BEGIN PUSTO1; PUSTO2(b1,b2); PUSTO3(@b1,@b2); (* Забавно з етими "собачками", правда может это не то чего я хочу и ожидаю*) (* IF b1<>b2 THEN PUSTO2(b1,b2); END; *) (* IF b1><b2 THEN PUSTO2(b1,b2); END; *) (* А ЧТО НЕРАВНО НЕТУ В ОБЕРОНЕ ТАКОГО ИЛИ КАКОЙ ЗНАЧОК ТО ?*) IF b1=b2 THEN PUSTO2(b1,b2); END; IF b1>b2 THEN PUSTO2(b1,b2); END; IF b1<b2 THEN PUSTO2(b1,b2); END; IF b1=b2 THEN PUSTO3(@b1,@b2); END; IF b1>b2 THEN PUSTO3(@b1,@b2); END; IF b1<b2 THEN PUSTO3(@b1,@b2); END; END DemoLvov. Code: {Дизкомпилированный файл: 'DemoLvov.lvt'} {Формат LVT} { Начальный адрес: $0000 (0) } { Конечный адрес : $017D (381) } { Адрес старта : $0000 (0) } program Project; uses uMD01u in 'uMD01u.pas'; VAR L0000, L0004, L0007, L0012, L0020, L0030, L007A, L00A1, L00C8, L00E9, L010A, L012B, L012C{b1}, L012D{b2}, L012E, L0134, L0141, L014A, L015A, L0160, L0170 :TLabelLV; BEGIN INITCompiler; SetFullNameLVTfile('DemoLvov.lvt'); SetNameInternalKOI(#$44+#$65+#$6D+#$6F+#$4C+#$76); SetAddrRAM($0000); StartProgram; LabelA(L0000); Call(L0030); LABELp1(L0004); JMP($F875); DB($E9); LabelA(L0007);// похоже на что-то чему-то равно возможно PROCEDURE PUSTO1; BEGIN b1:=b2;END PUSTO1; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то MovAL; Sta(L012C{b1}); RET; LabelA(L0012); LxiHL(L0004);// !??!?! DadSP; PushHL; DcxHL; DcxHL; Call(L012E);// видимо проверка пределов каких-то PopDE; MovAL; StaxDE; RET; LabelA(L0020); LxiHL(L0004); Call(L0141); LxiHL(L0004);// !??!?! Call(L0134); PopDE; MovAL; StaxDE; RET; LabelA(L0030);// Call со старта прямо сюда Call(L0007); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PushHL; Call(L0012); PopBC; PopBC; LxiHL(L012C{b1}); PushHL; LxiHL(L012D{b2}); PushHL; Call(L0020); PopBC; PopBC; LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L0170); Jnc(L007A); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PushHL; Call(L0012); PopBC; PopBC; LabelA(L007A); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L014A); Jnc(L00A1); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PushHL; Call(L0012); PopBC; PopBC; LabelA(L00A1); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L0160); Jnc(L00C8); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PushHL; Call(L0012); PopBC; PopBC; LabelA(L00C8); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L0170); Jnc(L00E9); LxiHL(L012C{b1}); PushHL; LxiHL(L012D{b2}); PushHL; Call(L0020); PopBC; PopBC; LabelA(L00E9); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L014A); Jnc(L010A); LxiHL(L012C{b1}); PushHL; LxiHL(L012D{b2}); PushHL; Call(L0020); PopBC; PopBC; LabelA(L010A); LxiHL(L012C{b1}); Call(L012E);// видимо проверка пределов каких-то PushHL; LxiHL(L012D{b2}); Call(L012E);// видимо проверка пределов каких-то PopDE; Call(L0160);// переход на конец RET; Jnc(L012B); LxiHL(L012C{b1}); PushHL; LxiHL(L012D{b2}); PushHL; Call(L0020); PopBC; PopBC; LabelA(L012B); RET; LabelA(L012C{b1}); DB($00); LabelA(L012D{b2}); DB($00); LabelA(L012E);// видимо проверка пределов каких-то MovAM; MovLA; rlc; SbbA; MovHA; RET; LabelA(L0134); DadSP; InxHL; InxHL; MovAM; InxHL; MovHM; MovLA; MovAM; MovLA; rlc; SbbA; MovHA; RET; LabelA(L0141); DadSP; InxHL; InxHL; MovAM; InxHL; MovHM; MovLA; xtHL; PCHL; LabelA(L014A); MovAD; Adi($80); MovBA; MovAH; Adi($80); CmpB; Jnz(L015A); MovAL; CmpE; JMP(L015A); LabelA(L015A); LxiHL(L0000); Rnc; InxHL; RET; LabelA(L0160); MovAH; Adi($80); MovBA; MovAD; Adi($80); CmpB; Jnz(L015A); MovAE; CmpL; JMP(L015A); LabelA(L0170); MovAL; SubE; MovLA; MovAH; SbbD; MovHA; OraL; InxHL; stc; Rz; XraA; MovLA; MovHA; RET; FINALCompiler; END. |
Author: | als [ 30 Apr 2021, 14:56 ] |
Post subject: | Re: Учимся писать на Обероне |
Зорко, Как я понимаю, твоя система, не только ж для РК86 или Львова... А скажи-ка пожалуйста, где можна посмотреть ЕЩЕ какие-то игры (программы) (кроме "Охоты на лис"), написанные на твоей системе для ЛЮБЫХ ретро-машин ? Дай ссылки пожалуйста. Ну или готовые файлы. Что тебе легче, мне все равно. Ну похвастайся перед НАРОДОМ! Рекламни возможности своей системы! В частности интересуют именно ДИНАМИЧЕСКИЕ игры (программы), подобные моему "Лабиринт" http://pc01.lviv.ua/games/page.php?name=saslab http://pc01.lviv.ua/games/page.php?name=saslab2018 а не "крестики-нолики" или "Морской бой в "тетрадочку". А то я вот посмотрел как компилируются написанное твоей системой (см.выше сообщения), так почему-то свой МАДЛ вспомнил! Который ты, критиковал даже не видя его! Quote: Который свой МАДЛ всё никак не допилит чтоб кому-то хотя бы показать? .... Нахожу ситуацию даже комичной
Это было сказано вот здесь:viewtopic.php?f=8&t=391&p=5330&hilit=%D ... 0%9B#p5330 Вот я то, точно сейчас вижу ситуацию очень даже комичной! Я твою диковинку хотя бы рассмотрел ХОРОШЕНЬКО! И понял, что скоре всего, вряд ли я напишу на ней, что-то подобное моему "Лабиринт". А "Крестики-нолики" или "Морской бой в "тетрадочку", "Охота на лис" написание такого или подобного меня не интересует и не впечатляет! "Лабиринт", между прочим, писанный на моём несчастном, тогда еще (в 2014 году)"кривом" МАДЛе! Которым тогда мог пользоваться только я! И то неуверенно! На мой вопрос где-то в темах, о том, смогу ли я написать на твоей системе, что-то подобное "Лабиринт", насколько я помню, ты уклонился от ответа! Будто бы тебе это не интересно и ты вообще не понимаешь о чём и речь то идёт! Что-то мне словечко вспоминается, которым я тебя обозвал и ты его за оскорбление посчитал! Никакое то оскорбление! То УЖЕ факт! Даже судя по "отмазам" на мой вопрос о возможности написать подобие "Лабиринт" на твоей системе! И вот возвращаюсь к вопросу который я Зорко задал первым: Quote: А ДЛЯ КОГО ЭТО ВСЕ ДЕЛАЕТСЯ ?!
вот здесь: viewtopic.php?f=20&t=223#p5211Зорко ответ был такой: Quote: Эта среда разработки делалась в первую очередь для себя из желания писать для ретро на хорошем языке.
Это вот здесь: viewtopic.php?f=20&t=223#p5212Зорко, ответ неверный! Верный ответ: Система предназначена для любителей написания игр подобных "Крестики-нолики", а так же возможно послужит развлечением для детей, в нарисовании всяких кубиков, кружочков и прочего! Возможно просто позабавляет, любителей позабавлятся и поприкалыватся на чём-то подобном! Для более же серьёзных целей а также динамических игр (требующих хорошего быстродействия) и прочего подобного, - система не предназначена! Хотя вполне можете попытаться, исходя из соображений таких так - "так ото - чисто по-приколу"! (прям готовое описание к твоей системе! Дарю! Вставь где-то там в архиве к своей системе) А ты про какой-то там "на хорошем языке". Надо быть честным с другими людьми! И тогда тебя не будут обзывать "Мудаком"! Ну если такие примитивные конструкции компилировать в такой код, который за каждым "b1:=b2;" или "IF b1=b2 THEN" прокручивает какие-то процедуры (похожие на какие-то, то ли проверки границ для данного типа, то ли перестраховки выхода за границы данного типа или бог весть что то вообще такое), - НУ ИЗВИНИ МЕНЯ! Не, ну как я уже писал, поприкалыватся, позабавлятся подобным вполне можно! И я не исключаю, что и я еще позабавляюсь с этим какое-то время, но не более! |
Author: | als [ 30 Apr 2021, 15:44 ] |
Post subject: | Re: Учимся писать на Обероне |
У меня б на МАДЛе (МД02) который я обвешал макросами, последний ПОДОБНЫЙ код выглядел бы так: Code: Var b1,b2:TByteLV; PUSTO1,PUSTO2,PUSTO3:TProcedureLV; BEGIN INITCompiler; VarByte(b1,'b1',0);VarByte(b2,'b2',0); BEGINPROCEDURE(PUSTO1); R(b1,b2); ENDPROCEDURE; BEGINPROCEDURE(PUSTO2); R(b1,b2); ENDPROCEDURE; BEGINPROCEDURE(PUSTO3); R(b1,b2); ENDPROCEDURE; StartProgram; PROCs(PUSTO1,PUSTO2,PUSTO3); IfIs(b1,b2,PUSTO2); IfMore(b1,b2,PUSTO2); IfLess(b1,b2,PUSTO2); IfIs(b1,b2,PUSTO3); IfMore(b1,b2,PUSTO3); IfLess(b1,b2,PUSTO3); FINALCompiler; END.И дискомпиляция вот такая Code: {Дизкомпилированный файл: '_res.LVT'} {Формат LVT} { Начальный адрес: $0000 (0) } { Конечный адрес : $0061 (97) } { Адрес старта : $0017 (23) } program Project; uses uMD01u in 'uMD01u.pas'; VAR L0000, L0001, L0002, L0009, L0010 :TLabelLV; BEGIN INITCompiler; SetFullNameLVTfile('_res.LVT'); SetNameInternalKOI(#$20+#$20+#$20+#$20+#$20+#$20); SetAddrRAM($0000); LabelA(L0000); DB($00); LabelA(L0001); DB($00); LabelA(L0002); Lda(L0001); Sta(L0000); RET; LabelA(L0009); Lda(L0001); Sta(L0000); RET; LabelA(L0010); Lda(L0001); Sta(L0000); RET; StartProgram; Call(L0002); Call(L0009); Call(L0010); Lda(L0001); MovBA; Lda(L0000); CmpB; Cz(L0009); Lda(L0001); MovBA; Lda(L0000); CmpB; Cp(L0009); Lda(L0001); MovBA; Lda(L0000); CmpB; Cm(L0009); Lda(L0001); MovBA; Lda(L0000); CmpB; Cz(L0010); Lda(L0001); MovBA; Lda(L0000); CmpB; Cp(L0010); Lda(L0001); MovBA; Lda(L0000); CmpB; Cm(L0010); FINALCompiler; END.Размер лвт этого - 120байт лвт Зорко, - - 404 байт |
Author: | als [ 30 Apr 2021, 22:38 ] |
Post subject: | Re: Учимся писать на Обероне |
Время компиляции. Когда я писал МАДЛ, еще первые разы, задумывался он очень крутой и изящный. И пока я его писал и отрабатывал его, компиляция игры "Лабиринт" на нём длилась 4-6 секунд. У меня это начало вызывать отвращение! И я понял одну простою истину, - если же это у меня вызывает отвращение, подобная длительность компиляции, то другие только лишь из-за этого и вовсе пользоваться не будут таким! Вот давайте посмотрим какая ситуция с K580Dev. Создал DemoLvov.Mod из повторяющихся блока строк 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); Всего из строк из таких команд с 5 по 3181 (353 блоков) Всего строк в файле DemoLvov.Mod, = 3188 Размер файла получился - 89751 байт Запустил на компиляцию в K580Dev. Компиляция длилась 3 мин 13 секунд т.е. = 193 секунды. Видимо у меня компьютер какой-то не такой. Сильно ретро. Попробуйте вы, у Вас то компьютеры получше. Наверное. Получившийся размер ЛВТ-файла DemoLvov.lvt = 48170 байт. Далее я DemoLvov.lvt декомпилировал МАДЛом (MD01). К слову декомпилятор, декомпилировал 4 секунды, а то и меньше. Получился файл Project.dpr. Всего строк в файле Project.dpr, = 23462 Размер файла получился = 282 554 байта. Запустил на компиляцию в МАДЛе. Компилятором fpc, компиляция длилась = 2-3 сек. Компилятором dcc32.exe (Дельфи 7), компиляция длилась = 1-2 сек. Компьютер тот же, если шо И вот если предположить, что я на Обероне, буду писать игрушку, подобную "Лабиринт", подобным размером и.д. А размер игрушки = 8511 байт. То написав её в Обероне, его конструкциями, размер её будет раза в 3-4 больше (опыт уже есть, см. в сообщениях выше) т.е. размер её будет от 25533 - 34044 байт. И доводя её до ума, исправляя всякие мелочи, запуская и запуская на компиляцию, каждая компиляция у меня будет длится 102-136 секунд. Даже если предположить, что размер кода Оберона будет такой же, т.е. 8511 байт, а не так как я пишу, что в 3-4 раза больше, то это не спасёт ситуацию, компиляция будет длится 34 секунды! Что тоже не мало! Про что можна говорить, если меня раздражала коипиляция длившееся 4-6 секунд ?! Конечно компиляция игры FoxHunt.Mod автора K580Dev, у меня длится 4-6 секунд. Но данная игра не показатель времени компиляции это точно! По сравнению с такой игрой как "Лабиринт", где все таки база уровней есть, да и кода побольше! Все что я тут написал, это не обсырательство, это как автор K580Dev выражается, - все в карму! Ему естестенно! Attachment:
|
Author: | als [ 30 Apr 2021, 23:06 ] |
Post subject: | Re: Учимся писать на Обероне |
Размеры строк. Еще одна немаловажная деталь, максимальный размер строки, т.е. до ввода. Когда есть инициализированные каким нибудь числом переменные или константы, причём целый массив таких, подобные Var ArrConstDATALEVELS:array[0..2000] of Byte=($00,$01 ... $39,$A5,$2F,$7B); например данные уровней, в которых тысячами данных, то у меня например появляется желание куда-то это спрятать! Причём даже если это все в отдельном модуле. Естественно я стараюсь их делать в одну строку, чтобы в редакторе видно было лишь только начало строки. А всё остальное за екраном справа. Такое могу проделывать и с процедурами, которые уже проверены и работают правильно. Как говориться чтобы под "ногами" не путались. Но везде есть ограничение на количество символов в одной строке (до ввода). К слову, первые свои МАДЛы я пытался писать с расчётом, хоть вообще было всю программу напиши без единого ввода, любым размером, до (4 гиг). Не пойму, с чем связано, что разработчики делают ограничение строк. Уж я то сам касался этого и понимаю, что можна вообще без ограничений делать. Ну да ладно. В FPC 2.6.0 - слабое ограничение = 255 символов в строке. В дельфи 7 - 1000 (немного больше 1000, вроде так) А вот K580Dev, приятно удивил, - "натолкал" в одну строку ему 15100 символов! Компилирует! Больше 15100 символов не проверял! Приятно удивлён!:-) Правда тут такой момент. Что в его редакторе, все строки то на экране показывает. Строки не "уходят" вправо за екран в редакторе. Может это конечно настраивается где-то в редакторе. Было бы хорошо! |
Author: | als [ 01 May 2021, 10:25 ] |
Post subject: | Re: Учимся писать на Обероне |
Изменение местоположения папки z88dk Решил перенести папку z88dk с диска C:\ в C:\XDev\ . Для удобства. Поменял переменные среды соответственно Path C:\XDev\z88dk\bin; ZCCCFG C:\XDev\z88dk\lib\config\ Думаю, дай-ка очередной раз попробую запустить C:\XDev\XDevLite.exe БЕЗ ПЕРЕГРУЗКИ! И вот получается "картина". Пишет, что не находит zcc.exe, но тем не менее DemoLvov.lvt запускает! Вот только он, так сказать, БЫВШЕЙ КОМПИЛЯЦИИ! И если кто-то не поймёт в чём дело, то будет думать, что всё нормально! А какая-то жалоба на какой-то там "zcc.exe", то всё ерунда. Все ведь вроде как компилируется и главное запускается! Вот правда, что не напиши в C:\XDev\XDevLite.exe , - запускаться будет одно и тоже! БЫВШЕЙ КОМПИЛЯЦИИ! У меня в МАДЛе такое продумано! В CompileFPC_RUN.bat который компилирует и запускает прописано в первых же строках, УДАЛИТЬ БЫВШИЕ КОМПИЛЯЦИИ. Во избежание запуска старой компиляции Project.exe в случае ошибки новой компиляции. Ну и к слову, в конце компиляции и запуска, чистит за собою (del). Quote: del _res.LVT
Если вдруг кому чего не нравиться в CompileFPC_RUN.bat, может добавлять/удалять на своё усмотрение. del Project.exe c:\FPC\2.6.0\bin\i386-win32\fpc.exe Project.dpr Project.exe del *.o del *.ppu del libimpuMD00u.a del libimpuMD01u.a del OnClose.SasLVE del QuickSave.SasLVE del Project.cfg del *.dcu del Project.dof Ну и завершая тему изменения папки C:\z88dk на другую папку, перезагрузил комп, заработало все нормально! ПЕРЕГРУЗКА В ВИНДОВС ХР ПОСЛЕ ИЗМЕНЕНИЯ ПЕРЕМЕННЫХ СРЕД ОБЯЗАТЕЛЬНА! |
Author: | als [ 01 May 2021, 12:43 ] |
Post subject: | Re: Учимся писать на Обероне |
z88dk.XDev.K580Dev. Рассматривая как это все работает... Эти все C:\XDev\K580Dev\Obj\DemoLvov.bat и C:\XDev\K580Dev\Bin\Build.bat и с его содержимым :Lviv %K580Dev%\Bin\MakeLvov\MakeLvov.exe %MainMod% > NUL MOVE %MainMod%.lvt .. >NUL а также C:\XDev\K580Dev\Obj\DemoLvov.c вообщем как это все работает.... Если я, конечно это все правильно понял... Первое что пришло мне в голову... О-о-о-оо-о! Так у тебя Порядочный Программист будут и порядочные проблемы! Которые связаны с копиляцией кода в разные части памяти. Т.е. в ($0000-$7FFF) и в ($8000 - $BFFF). И скорее всего у тебя большая зависимость от z88dk и её разработчиков. Если они это (компиляцию в разные части памяти ПК-01) реализуют, то может быть, что-то из этого всего (для ПК-01) и получится! А если нет, то тут и - СТОП! И как результат, в лучшем случае разработка K580Dev для ПК-01 закончится, тем, что будут возможности только лишь ПЗУ. Никакого вывода спрайтов не будет! И естественно толку от такой разработки (во всяком случае мне), - как я уже и писал, - ну разве что позабавляться! Детям! Я тебе еще добавлю "масла в огонь", тем, что данные спрайта должны как и процедура по обработке спрайта должны находится в ($8000 - $BFFF). Или это для тебя это чепуха ? Ну подождём.... мою маму... (из песни):-) Посмотрим, что из этого всего получится. Хотя то, что он не является сюда, то скорее всего обиделся! На меня! На ПК-01, что он так устроен! На форум! И на все что только можно! Меня "обзывал" мнительным, а сам оказался еще более мнительным, чем я! Вот так бывает! Возможно уже никогда ничего от него не ждать и не стоит! Во всяком случае для ПК-01! А программист из тебя как с меня балерина! Программист это Я, который "щупает" каждый байтик своми руками и может этим управлять! И на самом низком уровне доступ имеет до кода КР580 до каждого байтика в ПК-01, в её ОЗУ, ПЗУ, порты, регистры и т.д.! При желании и нужде могу и "гибриды" писать, что часть программы в Дельфи выполняется, а часть кодам КР580, и делать это как только фантазия позволяет! А ты, - взял "Оберон" который перекидывает в "С" который с помощью z88dk перекидыват в КР580 и т.д. В чём твоё участие то ?! Класно настроить эту всю "переброску" ?!.. и написать "обвёртки" ПЗУ для конкретной ретро-машины ?! Но тут попалось такое как ПК-01, со своей переключалкой страниц ОЗУ. Видимо такое еще не попадалось! Вот порядочный програмист и думает как все в один блок, а далее с "хвоста" того блока перекидывать процедуру вывода спрайта и это уже самим ПК-01 должно делаться при запуске! Про данные спрайтов тоже не забудь! Их тоже надо перекидывать! Успехов! А теперь вопрос к спецу Зеле! А скажите-ка пожалуйста. А что ретро-машин, аналогий ПК-01 с таким же переключением страниц ОЗУ и ВидеоОЗУ не существует ? И с таким же условием, чтобы процедура вывода на экран и данные спрайта были в определённой области памяти ($8000 - $BFFF) ? Или же с таким просто еще не сталкивался Порядочный Программист ? Зато размах у парня то какой, - среду для всех ретро-машин! СРАЗУ! ВО КАК! А вот беда то... Не все ведь самим писано! Значит не все и поддается его управлению так как хочеться! Зависимый слишком от z88dk! или еще от чего... уже не знаю... Надеюсь я Порядочному Программисту этим текстом добавил то "в карму" или как он там выражается... |
Author: | Zorko [ 01 May 2021, 20:51 ] |
Post subject: | Re: Учимся писать на Обероне |
Quote: Как я понимаю, твоя система, не только ж для РК86 или Львова... Посмотри на форуме. Там есть портированные с Бейсика несколько штук. Что-то есть на sf.netА скажи-ка пожалуйста, где можна посмотреть ЕЩЕ какие-то игры (программы) (кроме "Охоты на лис"), написанные на твоей системе для ЛЮБЫХ ретро-машин ? Дай ссылки пожалуйста. Ну или готовые файлы. Что тебе легче, мне все равно. Quote: Ну похвастайся перед НАРОДОМ! Рекламни возможности своей системы! Нечем хвастаться.Quote: В частности интересуют именно ДИНАМИЧЕСКИЕ игры (программы), подобные моему "Лабиринт" "А покажи мне такие твои игры на Обероне, которые круче моих на асме" - так? Хы. Смешно.Quote: А то я вот посмотрел как компилируются написанное твоей системой (см.выше сообщения), так почему-то свой МАДЛ вспомнил! Который ты, критиковал даже не видя его! Я сам подход критикую. Мне не нравится язык для одной платформы, крепко завязанный на её железе. Я это уже проходил в 90-х. Не интересно.Quote: Я твою диковинку хотя бы рассмотрел ХОРОШЕНЬКО! Не напишешь. Это понятно.И понял, что скоре всего, вряд ли я напишу на ней, что-то подобное моему "Лабиринт". А "Крестики-нолики" или "Морской бой в "тетрадочку", "Охота на лис" написание такого или подобного меня не интересует и не впечатляет! Quote: "Лабиринт", между прочим, писанный на моём несчастном, тогда еще (в 2014 году)"кривом" МАДЛе! Которым тогда мог пользоваться только я! И то неуверенно! То есть, на асме.Quote: На мой вопрос где-то в темах, о том, смогу ли я написать на твоей системе, что-то подобное "Лабиринт", насколько я помню, ты уклонился от ответа! Не сможешь.Quote: Система предназначена для любителей написания игр подобных "Крестики-нолики", а так же возможно послужит развлечением для детей, в нарисовании всяких кубиков, кружочков и прочего! Возможно просто позабавляет, любителей позабавлятся и поприкалыватся на чём-то подобном! Для более же серьёзных целей а также динамических игр (требующих хорошего быстродействия) и прочего подобного, - система не предназначена! Хотя вполне можете попытаться, исходя из соображений таких так - "так ото - чисто по-приколу"! Правильно. Быстрый и лёгкий старт важен. Не всякий программист будет писать утилиту для Львова, чтобы нарисовать на Львове кружочек. А ассемблер потом при необходимости.А почему ты не критикуешь чистый Си для Львова? Критикуй его. Quote: Не, ну как я уже писал, поприкалыватся, позабавлятся подобным вполне можно! Да иди ты. Простыни твои читать преобъёмные это атас.
И я не исключаю, что и я еще позабавляюсь с этим какое-то время, но не более! |
Author: | Zorko [ 01 May 2021, 21:02 ] |
Post subject: | Re: Учимся писать на Обероне |
Quote:
Зорко, так а вывод текста на екран пока нет ?
Пока нет.Quote:
Зорко, что-то я не пойму... Obj/DemoLvov.batDemoLvov.Mod - работает нормально стоит его копировать переименовать в другие имена и соответственно исправить в программе, не компилируется не создает .lvt и запускает не мой прикрученный эмулятор, запускает "Башкирию"-с-"РК86" (видимо пустую рк86) В чем может быть проблема ? Там платформа прописана. XDev не знает что для РК, а что для Львова, это надо прописать. Quote: по сути Наверно что-то с точкой входа. Надо смотреть.BEGIN END DemoLvov. пустой! Почему запускается PROCEDURE p1( a:INT16); ? Quote: что такое (*$MAIN*) ? Главный модуль.Quote: Зорко, подавай эффективные типы данных и конструкции! Все претензии к z88dk. Иди помоги его авторам, что ли. Всяко лучше, чем макроассемблер заново изобретать. А потом раскрыть ротяку, что-де твой ассемблер каждый байтик. Зато мой Оберон каждую платформу. А на байтики всем начхать.
|
Author: | als [ 01 May 2021, 22:00 ] |
Post subject: | Re: Учимся писать на Обероне |
Quote:
Да иди ты. Простыни твои читать преобъёмные это атас.
Да то ж я тебе все "в карму"... Ладно давай по сути... Вот сделал очередной тест4 Attachment:
Code: MODULE DemoLvov; (*$MAIN*) IMPORT Lvov; VAR X,Y,W:INT16; PROCEDURE P1(posX,posY:INT16;color:INT8); BEGIN Lvov.FIL_BOX(posX,posY, posX+8,posY+8, color); END P1; PROCEDURE Delay(W:INT16); VAR v:INT16; BEGIN FOR v:=0 TO W DO END;END Delay; BEGIN X:=0; W:=1000; REPEAT IF W>1 THEN W:=W-50;END; REPEAT X:=X+1; P1(X*8,0,3);P1(((X-1)*8),0,0); Delay(W); UNTIL X>=24; REPEAT X:=X-1; P1(X*8,0,3);P1(((X+1)*8),0,0); Delay(W);UNTIL X<=0; UNTIL X>X; END DemoLvov.Там кубик ганяет туда-сюда розганяя скорост!, На удивление впечатлила скорость работы твоей диковинки! Честно говоря ожидал худшего! Вот вопрос в том, что УПРАВЛЯТЬ НЕЧЕМ тот кубик! Не поверишь, - придумал игрушку которую можна написать! И она будет динамическая! Но она будет ПРОСТЕЙШАЯ!ПРО-СТЕЙ-ШАЯ! Зато для рассмотрения классная (из-за того, что простейшая!) В примеры пойдет! Управление (опрос клавиатуры) скоро будет ? или ты уже со мной не разговариваешь ? (Далее отпишу еще сообщение по управлению и задержке) |
Author: | als [ 01 May 2021, 22:06 ] |
Post subject: | Re: Учимся писать на Обероне |
Quote:
А почему ты не критикуешь чистый Си для Львова? Критикуй его.
Я терпеть не могу Си и его мнемонику, вот поэтому и торчу на паскелеподобных!Quote:
Obj/DemoLvov.bat
Спасибо! Буду смотреть!... вот только разберусь ли...
Там платформа прописана. XDev не знает что для РК, а что для Львова, это надо прописать. |
Author: | Zorko [ 01 May 2021, 23:32 ] |
Post subject: | Re: Учимся писать на Обероне |
Не буду спорить, применимость у K580Dev ограничена. Сильно крутую игру на Обероне можно сделать только если будет очень много подпрограмм на асме. Тогда в основном всё будет работать на асме, а Оберон будет только склеивать вызовы, быть своеобразным клеем этих подпрограмм. Но не сравнивай K580Dev с МАДЛом. Вообще. На XDev ты можешь делать проект сразу на трёх языках: асме, Си и Обероне, притом сразу на пяти его диалектах. С хорошей перспективой переноса на другие платформы. Если доля участия асма будет: 95% асма на 5% Оберона, то по всем критериям приблизится к МАДЛу. Но пойми главное: я сделал аналог твоего МАДЛа ещё в 97-м. С некоторым отличием: у меня тогда была только Орель БК-08, а это что-то вроде Львова. Потом я написал на COLOSS'е игру Морской бой. Я наигрался со всем этим счастьем по самое небалуйся. И я похоронил этот низкоуровневый подход, сознательно выбрав другой. Ты можешь это понять, потому что имеешь представление о некоторой совместимости снизу вверх Turbo Pascal'я с Delphi. Quote: Там кубик ганяет туда-сюда розганяя скорост!, На удивление впечатлила скорость работы твоей диковинки! Честно говоря ожидал худшего! Вот вопрос в том, что УПРАВЛЯТЬ НЕЧЕМ тот кубик! Тут проще некуда: лезь в C/Lvov.c и смотри как там устроены машкодовые процедуры. Может с первого раза добавить и не получится, но если захочешь - применишься.Комплименты по производительности все давай передадим команде z88dk. Как и проклятия по поводу недостатков кода. Всё зависит от их работы. Чего смогут внедрить по оптимизации - то сделают. SDCC сделал в этом смысле серьёзный рывок от того времени, когда я начал им пользоваться, до теперешнего. Появилась передача параметров в регистре/ах, хорошо улучшилось качество кода. Но он по-прежнему не идеальный. И наверно таковым никогда не будет. Quote: Не поверишь, - придумал игрушку которую можна написать! И она будет динамическая! Но она будет ПРОСТЕЙШАЯ!ПРО-СТЕЙ-ШАЯ! Зато для рассмотрения классная (из-за того, что простейшая!) В примеры пойдет! Я потерялся в твоих сообщениях. Вроде ты что-то давал по опросу, но давай освежим. Давай так. Ты даёшь подпрограмму на асме, я её добавляю в библиотеку Lvov, а потом показываю тебе дифф, т.е. что именно менял. Дальше по аналогии научишься добавлять сам любые машкодовые процедуры.
Управление (опрос клавиатуры) скоро будет ? или ты уже со мной не разговариваешь ? |
Author: | als [ 02 May 2021, 00:21 ] |
Post subject: | Re: Учимся писать на Обероне |
Quote:
Не буду спорить, применимость у K580Dev ограничена. Сильно крутую игру на Обероне можно сделать только если будет очень много подпрограмм на асме.
да если бы ты сделал асм-вставки (кр580) в оберон то цены бы не было бы твоей диковинке! Тебе не нужно бы было делать просто больше ничего ! РОВНЫМ СЧЁТОМ - НИЧЕГО! Т.е. никаких "оберток" ПЗУ! Не мучался бы зря! Кто, что хотел бы (как и я), написал бы в процедурах САМ(!) на асм-кр580 вставках.Я бы, писал бы на обероне (как видишь готовлю себя тестами к оберону, все верю в лучшее, правда и хвалить не знаю пока за что, критикую ), и знал бы следующее - где быстродействие критично, - на асм-вставки написать/переписать с оберона, а все остальное, - на обероне ! Но ты ж я так понимаю не сделаешь такого! И как говорил, не по твоей вине такое! и т.д. и ла-ла-ла бла-бла-бла... Quote:
Тогда в основном всё будет работать на асме, а Оберон будет только склеивать вызовы, быть своеобразным клеем этих подпрограмм.
Ну ?!? так сделай так! А чем плохо ? а чего только только склеивать вызовы ? Множить то нужно, процедуры с параметрами и т.д.
Quote:
Но не сравнивай K580Dev с МАДЛом. Вообще. На XDev ты можешь делать проект сразу на трёх языках: асме, Си и Обероне, притом сразу на пяти его диалектах. С хорошей перспективой переноса на другие платформы.
Слушай, Зорко, я не являюсь программистом! Это так ото, - забавы у меня такие, хобби, любительство. Как и ПК-01 и многое что другое. Поэтому то, что ты мне рассказываешь, про широкие возможности и спектр применения XDev... ну это так ото... хорошо если вспомню, когда понадобится, что ты мне рассказывал то, но могу и не вспомнить почему-то...
Quote:
Если доля участия асма будет: 95% асма на 5% Оберона, то по всем критериям приблизится к МАДЛу.
Давай я тебе скажу так! Во всех нормальных средах програмирования были, есть и будут асм вставки! И нормальные разработчики ЯВУ никогда не рискнут отменить это! И если задать самому себе вопрос "А почему же ?!" - и все станет ясно! Всегда был и будет "критический код" который нужно писать именно на асме.Еще раз, - напишу я на обероне, а быстродействия не хватает... вот и выкинь написанное! Были бы возможности асм-вставок-кр580 - решение - "перебить" на асм на том же месте некоторые процедуры где много циклов или еще чего. Quote:
Я наигрался со всем этим счастьем по самое небалуйся. И я похоронил этот низкоуровневый подход, сознательно выбрав другой. Ты можешь это понять, потому что имеешь представление о некоторой совместимости снизу вверх Turbo Pascal'я с Delphi.
Некоторые вещи я не понимаю и не воспринимаю даже в паскале и дельфи. Как по мне все это объектно-ориентированное програмирование, создает только глюки, тормоза и неприятности. Когда-то пытался так сказать объектами писать, свои создавать на этом всем строить что-то (типа дурачился) - разплевался я с этим всем! У меня другое видение нормального развития а не то структурное то объектное, ну сделайте еще чтобы блок-схемы понимало что меняет то ?! Ты со своим подходом что-то удивительное напишешь ?! самостоятельное ?! - Всё равно набахкивать по клаве нужно по 10-12 часов в день, чтобы что-то нормальное написать то! Хоть с твоим подходом, хоть с моим, хоть еще с чьим-то, хоть со старым, хоть с новым... да короче...
Quote:
Тут проще некуда: лезь в C/Lvov.c и смотри как там устроены машкодовые процедуры. Может с первого раза добавить и не получится, но если захочешь - применишься.
О! А это интересный разговор пошёл! Т.е. если я туда добавлю, то оно подхватит при компиляции тот файлик ? ну он не для просмотра только, он участвует ?Беда мнемонику си не знаю, хотя... разобраться я смотрел можно! Спасибо! Quote:
Появилась передача параметров в регистре/ах, хорошо улучшилось качество кода. Но он по-прежнему не идеальный. И наверно таковым никогда не будет.
Слушай, ты видел мои тесты ну и в чём я не прав ? - какого черта за каждым (А+В) или (А=В) выполнять какие-то процедуры проверок типа или его границ ?! - НУ ЭТО Ж КР580 все таки...Слушай, мысля была... а в обероне есть такое как директивы ? типа в дельфи {$I-} {$I+} может это отлючить можна те дописки пройедур на проверки типа, пределов его ? в дельфи помоему всякое (редко пользовался) {$R-} -помому проверки границ масивов отключает и т.д. Quote:
Ты даёшь подпрограмму на асме, я её добавляю в библиотеку Lvov, а потом показываю тебе дифф, т.е. что именно менял. Дальше по аналогии научишься добавлять сам любые машкодовые процедуры.
Пока посмотрю ссылку разберусь!======== В Си дурня такая есть терпеть её не мог (когда-то пытался СИ учить все таки )что кроме Lvov.c куда-то еще надо вставлять типа в Lvov.h ? или тут такого нет ? |
Author: | als [ 02 May 2021, 00:52 ] |
Post subject: | Re: Учимся писать на Обероне |
ТЕСТ 5 Закраска средней части экрана кубиками 8на8 приблизительно как в Лабиринт НУ СПРАЙТАМИ БЫСТРЕЕ, ЕЖУ ПОНЯТНО! БЕЗ СПРАЙТОВ НИКУДА Attachment:
Code: (* ТЕСТ 5 Закраска средней части экрана кубиками 8на8 приблизительно как в Лабиринт *) (* НУ СПРАЙТАМИ БЫСТРЕЕ, ЕЖУ ПОНЯТНО! БЕЗ СПРАЙТОВ НИКУДА :-( *) MODULE DemoLvov; (*$MAIN*) IMPORT Lvov; VAR X,Y,color:INT8; PROCEDURE P1(posX,posY:INT8;color:INT8); BEGIN Lvov.FIL_BOX(posX,posY, posX+8,posY+8, color); END P1; PROCEDURE P2(posX,posY:INT8;color:INT8); BEGIN P1((posX*8),(posY*8),color) END P2; (* PROCEDURE Delay(W:INT16); VAR v:INT16; BEGIN FOR v:=0 TO W DO END;END Delay; *) BEGIN color:=1; REPEAT Y:=0; REPEAT X:=0; REPEAT P2(X,Y,color); X:=X+1; UNTIL X>24; Y:=Y+1;UNTIL Y>27; color:=color+1;IF color >3 THEN color:=0;END; UNTIL X>X; END DemoLvov. |
Page 2 of 4 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |