Учимся писать на Обероне

Все о разработке ПО для ПК-01,02 "Львов" на современных платформах
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

REPEAT UNTIL

Code: Select all

MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR b1:INT8;
PROCEDURE PUSTO; BEGIN END PUSTO;

BEGIN
REPEAT

PUSTO;

UNTIL b1< 127
END DemoLvov.

Code: Select all

{Дизкомпилированный файл: '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: Select all

LabelA(L001A);     // Опять двадцать пять!!!!!!!!!!!
MovAM;
MovLA;
rlc;
SbbA;
MovHA;
RET;
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

НДА!.... Если коротко - Я ПРОСТО В ШОКЕ!
Остальное посмотрите сами!

Code: Select all

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: Select all

{Дизкомпилированный файл: '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.

als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Зорко,
Как я понимаю, твоя система, не только ж для РК86 или Львова...
А скажи-ка пожалуйста, где можна посмотреть ЕЩЕ какие-то игры (программы) (кроме "Охоты на лис"), написанные на твоей системе для ЛЮБЫХ ретро-машин ? Дай ссылки пожалуйста. Ну или готовые файлы. Что тебе легче, мне все равно.
Ну похвастайся перед НАРОДОМ! Рекламни возможности своей системы!
В частности интересуют именно ДИНАМИЧЕСКИЕ игры (программы), подобные моему "Лабиринт"
http://pc01.lviv.ua/games/page.php?name=saslab
http://pc01.lviv.ua/games/page.php?name=saslab2018
а не "крестики-нолики" или "Морской бой в "тетрадочку".

А то я вот посмотрел как компилируются написанное твоей системой (см.выше сообщения), так почему-то свой МАДЛ вспомнил! Который ты, критиковал даже не видя его!
Который свой МАДЛ всё никак не допилит чтоб кому-то хотя бы показать? .... Нахожу ситуацию даже комичной
Это было сказано вот здесь:
viewtopic.php?f=8&t=391&p=5330&hilit=%D ... 0%9B#p5330
Вот я то, точно сейчас вижу ситуацию очень даже комичной!

Я твою диковинку хотя бы рассмотрел ХОРОШЕНЬКО!
И понял, что скоре всего, вряд ли я напишу на ней, что-то подобное моему "Лабиринт".
А "Крестики-нолики" или "Морской бой в "тетрадочку", "Охота на лис" написание такого или подобного меня не интересует и не впечатляет!
"Лабиринт", между прочим, писанный на моём несчастном, тогда еще (в 2014 году)"кривом" МАДЛе! Которым тогда мог пользоваться только я! И то неуверенно!

На мой вопрос где-то в темах, о том, смогу ли я написать на твоей системе, что-то подобное "Лабиринт", насколько я помню, ты уклонился от ответа! Будто бы тебе это не интересно и ты вообще не понимаешь о чём и речь то идёт! Что-то мне словечко вспоминается, которым я тебя обозвал и ты его за оскорбление посчитал! Никакое то оскорбление! То УЖЕ факт! Даже судя по "отмазам" на мой вопрос о возможности написать подобие "Лабиринт" на твоей системе!

И вот возвращаюсь к вопросу который я Зорко задал первым:
А ДЛЯ КОГО ЭТО ВСЕ ДЕЛАЕТСЯ ?!
вот здесь: viewtopic.php?f=20&t=223#p5211

Зорко ответ был такой:
Эта среда разработки делалась в первую очередь для себя из желания писать для ретро на хорошем языке.
Это вот здесь: viewtopic.php?f=20&t=223#p5212
Зорко, ответ неверный!
Верный ответ:
Система предназначена для любителей написания игр подобных "Крестики-нолики", а так же возможно послужит развлечением для детей, в нарисовании всяких кубиков, кружочков и прочего! Возможно просто позабавляет, любителей позабавлятся и поприкалыватся на чём-то подобном! Для более же серьёзных целей а также динамических игр (требующих хорошего быстродействия) и прочего подобного, - система не предназначена! Хотя вполне можете попытаться, исходя из соображений таких так - "так ото - чисто по-приколу"!

(прям готовое описание к твоей системе! Дарю! Вставь где-то там в архиве к своей системе)

А ты про какой-то там "на хорошем языке".

Надо быть честным с другими людьми!
И тогда тебя не будут обзывать "Мудаком"!


Ну если такие примитивные конструкции компилировать в такой код, который за каждым "b1:=b2;" или "IF b1=b2 THEN" прокручивает какие-то процедуры (похожие на какие-то, то ли проверки границ для данного типа, то ли перестраховки выхода за границы данного типа или бог весть что то вообще такое), - НУ ИЗВИНИ МЕНЯ!

Не, ну как я уже писал, поприкалыватся, позабавлятся подобным вполне можно!
И я не исключаю, что и я еще позабавляюсь с этим какое-то время, но не более!
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

У меня б на МАДЛе (МД02) который я обвешал макросами, последний ПОДОБНЫЙ код выглядел бы так:

Code: Select all

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: Select all

{Дизкомпилированный файл: '_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 байт
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Время компиляции.
Когда я писал МАДЛ, еще первые разы, задумывался он очень крутой и изящный. :-)
И пока я его писал и отрабатывал его, компиляция игры "Лабиринт" на нём длилась 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 выражается, - все в карму! Ему естестенно! :-)

TEST3.7Z
(1.5 KiB) Downloaded 1077 times
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Размеры строк.
Еще одна немаловажная деталь, максимальный размер строки, т.е. до ввода.
Когда есть инициализированные каким нибудь числом переменные или константы, причём целый массив таких, подобные
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 символов не проверял! Приятно удивлён!:-)


Правда тут такой момент. Что в его редакторе, все строки то на экране показывает. Строки не "уходят" вправо за екран в редакторе. Может это конечно настраивается где-то в редакторе. Было бы хорошо!
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Изменение местоположения папки 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).
del _res.LVT
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
Если вдруг кому чего не нравиться в CompileFPC_RUN.bat, может добавлять/удалять на своё усмотрение. :-)

Ну и завершая тему изменения папки C:\z88dk на другую папку, перезагрузил комп, заработало все нормально!
ПЕРЕГРУЗКА В ВИНДОВС ХР ПОСЛЕ ИЗМЕНЕНИЯ ПЕРЕМЕННЫХ СРЕД ОБЯЗАТЕЛЬНА!
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

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! или еще от чего... уже не знаю...

Надеюсь я Порядочному Программисту этим текстом добавил то "в карму" :-) или как он там выражается...
Zorko
Posts: 100
Joined: 20 Apr 2021, 05:09

Re: Учимся писать на Обероне

Post by Zorko »

als wrote: 30 Apr 2021, 14:56Как я понимаю, твоя система, не только ж для РК86 или Львова...
А скажи-ка пожалуйста, где можна посмотреть ЕЩЕ какие-то игры (программы) (кроме "Охоты на лис"), написанные на твоей системе для ЛЮБЫХ ретро-машин ? Дай ссылки пожалуйста. Ну или готовые файлы. Что тебе легче, мне все равно.
Посмотри на форуме. Там есть портированные с Бейсика несколько штук. Что-то есть на sf.net
als wrote: 30 Apr 2021, 14:56Ну похвастайся перед НАРОДОМ! Рекламни возможности своей системы!
Нечем хвастаться.
als wrote: 30 Apr 2021, 14:56В частности интересуют именно ДИНАМИЧЕСКИЕ игры (программы), подобные моему "Лабиринт"
"А покажи мне такие твои игры на Обероне, которые круче моих на асме" - так? Хы. Смешно.
als wrote: 30 Apr 2021, 14:56А то я вот посмотрел как компилируются написанное твоей системой (см.выше сообщения), так почему-то свой МАДЛ вспомнил! Который ты, критиковал даже не видя его!
Я сам подход критикую. Мне не нравится язык для одной платформы, крепко завязанный на её железе. Я это уже проходил в 90-х. Не интересно.
als wrote: 30 Apr 2021, 14:56Я твою диковинку хотя бы рассмотрел ХОРОШЕНЬКО!
И понял, что скоре всего, вряд ли я напишу на ней, что-то подобное моему "Лабиринт".
А "Крестики-нолики" или "Морской бой в "тетрадочку", "Охота на лис" написание такого или подобного меня не интересует и не впечатляет!
Не напишешь. Это понятно.
als wrote: 30 Apr 2021, 14:56"Лабиринт", между прочим, писанный на моём несчастном, тогда еще (в 2014 году)"кривом" МАДЛе! Которым тогда мог пользоваться только я! И то неуверенно!
То есть, на асме.
als wrote: 30 Apr 2021, 14:56На мой вопрос где-то в темах, о том, смогу ли я написать на твоей системе, что-то подобное "Лабиринт", насколько я помню, ты уклонился от ответа!
Не сможешь.
als wrote: 30 Apr 2021, 14:56Система предназначена для любителей написания игр подобных "Крестики-нолики", а так же возможно послужит развлечением для детей, в нарисовании всяких кубиков, кружочков и прочего! Возможно просто позабавляет, любителей позабавлятся и поприкалыватся на чём-то подобном! Для более же серьёзных целей а также динамических игр (требующих хорошего быстродействия) и прочего подобного, - система не предназначена! Хотя вполне можете попытаться, исходя из соображений таких так - "так ото - чисто по-приколу"!
Правильно. Быстрый и лёгкий старт важен. Не всякий программист будет писать утилиту для Львова, чтобы нарисовать на Львове кружочек. А ассемблер потом при необходимости.

А почему ты не критикуешь чистый Си для Львова? Критикуй его.
als wrote: 30 Apr 2021, 14:56Не, ну как я уже писал, поприкалыватся, позабавлятся подобным вполне можно!
И я не исключаю, что и я еще позабавляюсь с этим какое-то время, но не более!
Да иди ты. Простыни твои читать преобъёмные это атас.
Zorko
Posts: 100
Joined: 20 Apr 2021, 05:09

Re: Учимся писать на Обероне

Post by Zorko »

als wrote: 29 Apr 2021, 17:26 Зорко, так а вывод текста на екран пока нет ?
Пока нет.

als wrote: 29 Apr 2021, 17:50 Зорко, что-то я не пойму...
DemoLvov.Mod - работает нормально
стоит его копировать переименовать в другие имена
и соответственно исправить в программе, не компилируется не создает
.lvt и запускает не мой прикрученный эмулятор, запускает "Башкирию"-с-"РК86" (видимо пустую рк86)
В чем может быть проблема ?
Obj/DemoLvov.bat
Там платформа прописана. XDev не знает что для РК, а что для Львова, это надо прописать.

als wrote: 29 Apr 2021, 20:54по сути
BEGIN
END DemoLvov.
пустой! Почему запускается PROCEDURE p1( a:INT16); ?
Наверно что-то с точкой входа. Надо смотреть.

als wrote: 29 Apr 2021, 20:54что такое (*$MAIN*) ?
Главный модуль.
als wrote: 30 Apr 2021, 11:16Зорко, подавай эффективные типы данных и конструкции! :-)
Все претензии к z88dk. Иди помоги его авторам, что ли. Всяко лучше, чем макроассемблер заново изобретать. А потом раскрыть ротяку, что-де твой ассемблер каждый байтик. Зато мой Оберон каждую платформу. А на байтики всем начхать.
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Zorko wrote: 01 May 2021, 20:51 Да иди ты. Простыни твои читать преобъёмные это атас.
Да то ж я тебе все "в карму"... :D
Ладно давай по сути...
Вот сделал очередной тест4
TEST4.7Z
(775 Bytes) Downloaded 1052 times

Code: Select all

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.
Там кубик ганяет туда-сюда розганяя скорост!, На удивление впечатлила скорость работы твоей диковинки! Честно говоря ожидал худшего! Вот вопрос в том, что УПРАВЛЯТЬ НЕЧЕМ тот кубик!
Не поверишь, - придумал игрушку которую можна написать! И она будет динамическая! Но она будет ПРОСТЕЙШАЯ!ПРО-СТЕЙ-ШАЯ! Зато для рассмотрения классная (из-за того, что простейшая!) В примеры пойдет!
Управление (опрос клавиатуры) скоро будет ?
или ты уже со мной не разговариваешь ? :P

(Далее отпишу еще сообщение по управлению и задержке)
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Zorko wrote: 01 May 2021, 20:51 А почему ты не критикуешь чистый Си для Львова? Критикуй его.
Я терпеть не могу Си и его мнемонику, вот поэтому и торчу на паскелеподобных!
Zorko wrote: 01 May 2021, 20:51 Obj/DemoLvov.bat
Там платформа прописана. XDev не знает что для РК, а что для Львова, это надо прописать.
Спасибо! Буду смотреть!... вот только разберусь ли...
Zorko
Posts: 100
Joined: 20 Apr 2021, 05:09

Re: Учимся писать на Обероне

Post by Zorko »

Не буду спорить, применимость у K580Dev ограничена. Сильно крутую игру на Обероне можно сделать только если будет очень много подпрограмм на асме. Тогда в основном всё будет работать на асме, а Оберон будет только склеивать вызовы, быть своеобразным клеем этих подпрограмм.

Но не сравнивай K580Dev с МАДЛом. Вообще. На XDev ты можешь делать проект сразу на трёх языках: асме, Си и Обероне, притом сразу на пяти его диалектах. С хорошей перспективой переноса на другие платформы. Если доля участия асма будет: 95% асма на 5% Оберона, то по всем критериям приблизится к МАДЛу. Но пойми главное: я сделал аналог твоего МАДЛа ещё в 97-м. С некоторым отличием: у меня тогда была только Орель БК-08, а это что-то вроде Львова. Потом я написал на COLOSS'е игру Морской бой. Я наигрался со всем этим счастьем по самое небалуйся. И я похоронил этот низкоуровневый подход, сознательно выбрав другой. Ты можешь это понять, потому что имеешь представление о некоторой совместимости снизу вверх Turbo Pascal'я с Delphi.
als wrote: 01 May 2021, 22:00Там кубик ганяет туда-сюда розганяя скорост!, На удивление впечатлила скорость работы твоей диковинки! Честно говоря ожидал худшего! Вот вопрос в том, что УПРАВЛЯТЬ НЕЧЕМ тот кубик!
Тут проще некуда: лезь в C/Lvov.c и смотри как там устроены машкодовые процедуры. Может с первого раза добавить и не получится, но если захочешь - применишься.

Комплименты по производительности все давай передадим команде z88dk. Как и проклятия по поводу недостатков кода. Всё зависит от их работы. Чего смогут внедрить по оптимизации - то сделают. SDCC сделал в этом смысле серьёзный рывок от того времени, когда я начал им пользоваться, до теперешнего. Появилась передача параметров в регистре/ах, хорошо улучшилось качество кода. Но он по-прежнему не идеальный. И наверно таковым никогда не будет.
als wrote: 01 May 2021, 22:00Не поверишь, - придумал игрушку которую можна написать! И она будет динамическая! Но она будет ПРОСТЕЙШАЯ!ПРО-СТЕЙ-ШАЯ! Зато для рассмотрения классная (из-за того, что простейшая!) В примеры пойдет!
Управление (опрос клавиатуры) скоро будет ?
или ты уже со мной не разговариваешь ? :P
Я потерялся в твоих сообщениях. Вроде ты что-то давал по опросу, но давай освежим. Давай так. Ты даёшь подпрограмму на асме, я её добавляю в библиотеку Lvov, а потом показываю тебе дифф, т.е. что именно менял. Дальше по аналогии научишься добавлять сам любые машкодовые процедуры.
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

Zorko wrote: 01 May 2021, 23:32 Не буду спорить, применимость у K580Dev ограничена. Сильно крутую игру на Обероне можно сделать только если будет очень много подпрограмм на асме.
да если бы ты сделал асм-вставки (кр580) в оберон то цены бы не было бы твоей диковинке! Тебе не нужно бы было делать просто больше ничего ! РОВНЫМ СЧЁТОМ - НИЧЕГО! Т.е. никаких "оберток" ПЗУ! Не мучался бы зря! Кто, что хотел бы (как и я), написал бы в процедурах САМ(!) на асм-кр580 вставках.
Я бы, писал бы на обероне (как видишь готовлю себя тестами к оберону, все верю в лучшее, правда и хвалить не знаю пока за что, критикую :-) ), и знал бы следующее - где быстродействие критично, - на асм-вставки написать/переписать с оберона, а все остальное, - на обероне ! Но ты ж я так понимаю не сделаешь такого! И как говорил, не по твоей вине такое! и т.д. и ла-ла-ла бла-бла-бла...
Zorko wrote: 01 May 2021, 23:32 Тогда в основном всё будет работать на асме, а Оберон будет только склеивать вызовы, быть своеобразным клеем этих подпрограмм.
Ну ?!? так сделай так! А чем плохо ? а чего только только склеивать вызовы ? Множить то нужно, процедуры с параметрами и т.д.
Zorko wrote: 01 May 2021, 23:32 Но не сравнивай K580Dev с МАДЛом. Вообще. На XDev ты можешь делать проект сразу на трёх языках: асме, Си и Обероне, притом сразу на пяти его диалектах. С хорошей перспективой переноса на другие платформы.
Слушай, Зорко, я не являюсь программистом! Это так ото, - забавы у меня такие, хобби, любительство. Как и ПК-01 и многое что другое. Поэтому то, что ты мне рассказываешь, про широкие возможности и спектр применения XDev... ну это так ото... хорошо если вспомню, когда понадобится, что ты мне рассказывал то, но могу и не вспомнить почему-то...
Zorko wrote: 01 May 2021, 23:32 Если доля участия асма будет: 95% асма на 5% Оберона, то по всем критериям приблизится к МАДЛу.
Давай я тебе скажу так! Во всех нормальных средах програмирования были, есть и будут асм вставки! И нормальные разработчики ЯВУ никогда не рискнут отменить это! И если задать самому себе вопрос "А почему же ?!" - и все станет ясно! Всегда был и будет "критический код" который нужно писать именно на асме.
Еще раз, - напишу я на обероне, а быстродействия не хватает... вот и выкинь написанное!
Были бы возможности асм-вставок-кр580 - решение - "перебить" на асм на том же месте некоторые процедуры где много циклов или еще чего.
Zorko wrote: 01 May 2021, 23:32 Я наигрался со всем этим счастьем по самое небалуйся. И я похоронил этот низкоуровневый подход, сознательно выбрав другой. Ты можешь это понять, потому что имеешь представление о некоторой совместимости снизу вверх Turbo Pascal'я с Delphi.
Некоторые вещи я не понимаю и не воспринимаю даже в паскале и дельфи. Как по мне все это объектно-ориентированное програмирование, создает только глюки, тормоза и неприятности. Когда-то пытался так сказать объектами писать, свои создавать на этом всем строить что-то (типа дурачился) - разплевался я с этим всем! У меня другое видение нормального развития а не то структурное то объектное, ну сделайте еще чтобы блок-схемы понимало что меняет то ?! Ты со своим подходом что-то удивительное напишешь ?! самостоятельное ?! - Всё равно набахкивать по клаве нужно по 10-12 часов в день, чтобы что-то нормальное написать то! Хоть с твоим подходом, хоть с моим, хоть еще с чьим-то, хоть со старым, хоть с новым... да короче... :-)
Zorko wrote: 01 May 2021, 23:32 Тут проще некуда: лезь в C/Lvov.c и смотри как там устроены машкодовые процедуры. Может с первого раза добавить и не получится, но если захочешь - применишься.
О! А это интересный разговор пошёл! Т.е. если я туда добавлю, то оно подхватит при компиляции тот файлик ? ну он не для просмотра только, он участвует ?
Беда мнемонику си не знаю, хотя... разобраться я смотрел можно!
Спасибо!
als wrote: 01 May 2021, 22:00 Появилась передача параметров в регистре/ах, хорошо улучшилось качество кода. Но он по-прежнему не идеальный. И наверно таковым никогда не будет.
Слушай, ты видел мои тесты ну и в чём я не прав ? - какого черта за каждым (А+В) или (А=В) выполнять какие-то процедуры проверок типа или его границ ?! - НУ ЭТО Ж КР580 все таки...
Слушай, мысля была...
а в обероне есть такое как директивы ? типа в дельфи {$I-} {$I+}
может это отлючить можна те дописки пройедур на проверки типа, пределов его ?
в дельфи помоему всякое (редко пользовался) {$R-} -помому проверки границ масивов отключает и т.д.
Zorko wrote: 01 May 2021, 23:32 Ты даёшь подпрограмму на асме, я её добавляю в библиотеку Lvov, а потом показываю тебе дифф, т.е. что именно менял. Дальше по аналогии научишься добавлять сам любые машкодовые процедуры.
Пока посмотрю ссылку разберусь!
========
В Си дурня такая есть терпеть её не мог (когда-то пытался СИ учить все таки :-) )что кроме Lvov.c куда-то еще надо вставлять типа в Lvov.h ? или тут такого нет ?
Last edited by als on 02 May 2021, 00:55, edited 1 time in total.
als
Posts: 426
Joined: 18 May 2016, 19:55

Re: Учимся писать на Обероне

Post by als »

ТЕСТ 5 Закраска средней части экрана кубиками 8на8 приблизительно как в Лабиринт
НУ СПРАЙТАМИ БЫСТРЕЕ, ЕЖУ ПОНЯТНО! БЕЗ СПРАЙТОВ НИКУДА :-(

TEST05.7Z
(891 Bytes) Downloaded 1023 times

Code: Select all

(* ТЕСТ 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.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest