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

MADL (среда разработки программ для ПК-01)
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=261
Page 1 of 2

Author:  sas9568635 [ 16 Apr 2014, 13:46 ]
Post subject:  MADL (среда разработки программ для ПК-01)

Всем здравствуйте!
Разрабатываю компилятор для ПК-01 под названием MADL (название я сам придумал для него). Надеюсь на уникальность этого названия и другого компилятора с таким названием нет.
Расчитываю на помощь спецов в ПК-01 в возникающих у меня вопросах по созданию компилятора.
Коротко о компиляторе. Компилятор строится по такому же принципу как DprPasToLV.dll только в отличии от DprPasToLV.dll компилятор будет не выполнять (непосредственно) команды КР580, а компилировать в память ПК-01. Естественно максимально возможно делаю, чтобы написанное и испытанное для DprPasToLV.dll, могло без переделок компилироваться компилятором. Хотя некоторые переделки всё же делать придется. Компилятором конечно же можно будет пользоваться начиная «с нуля», без предварительного создания и испытания в DprPasToLV.dll.
Сейчас состояние компилятора вполне работоспособное, с помощью его была написана игра «Лабиринт». Осталось его привести в «надлежащий вид».
Ну вот пока всё, об описании компилятора.

Author:  sas9568635 [ 16 Apr 2014, 13:47 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Теперь об возникающих вопросах:
1.Нужен код КР580 для реализации вычитания (корректного) между регистровыми парами т.е HL=HL-DE либо что-то подобное.
2.В компиляторе планируется автоматическое расположение компилируемого кода в памяти ПК-01 без участия пользователя, т. е. без указания пользователем конкретных адресов для компиляции. Но проблема в том, что некоторые данные должны компилироваться в область памяти 32768-44000. Мне пришло в голову «разделить» память на две части. Первая 0-32767, вторая 32768-44000. Будет два счётчика памяти. И при необходимости переключать необходимую часть памяти т.е. SetRam1; SetRam2 и т.д. Хорошая ли это мысль ? Может у кого есть лучше?!
2.1.Получится ли у меня полностью отказаться от указания конкретного адреса команды SetAddrRAM, которая у меня сейчас ? Чувствую, что её всё равно нужно будет оставить.
3. Позволять ли компилятору возможность компилирования в область ПЗУ ? Может через флаг разрешения ?! Нужно ли это ?
4. Нужно ли позволять ли компилятору компилировать (устанавливать) в регистры процессора, в видеопамять, в порты? Уважаемый Zelya убедил меня, что — нет ! Ну почти убедил! :-)

Author:  Zelya [ 16 Apr 2014, 16:30 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

sas9568635
Пока еще смутно представляю, что это будет, но надеюсь, оно будет работаь без установленного Делфи :).
Тепер по вопросам:
Quote:
1.Нужен код КР580 для реализации вычитания (корректного) между регистровыми парами т.е HL=HL-DE либо что-то подобное.
Писал же в соведней теме, но пропустил Ваш ответ.
Code:
   MOV A,L
   SUB E
   MOV L,A
   MOV A,H
   SBB D
   MOV H,A
Код будет работать, потому что второй оператор SBB, как раз и учитывает флаг займа при вычитании.
Quote:
.В компиляторе планируется автоматическое расположение компилируемого кода в памяти ПК-01 без участия пользователя
Раз расположение кода автоматическое - то и пользователь ничего про память знать не должен. пусть компилятор сам решает в какой участок этот код лучше положить.
Quote:
2.1.Получится ли у меня полностью отказаться от указания конкретного адреса команды SetAddrRAM, которая у меня сейчас ?
Не знаю, что это за команда
Quote:
3. Позволять ли компилятору возможность компилирования в область ПЗУ ? Может через флаг разрешения ?! Нужно ли это ?
Нет не нужно. Максимум, можно использовать код из стандартного ПЗУ для своих целей, не перезаписывая его.
Quote:
4. Нужно ли позволять ли компилятору компилировать (устанавливать) в регистры процессора, в видеопамять, в порты? Уважаемый Zelya убедил меня, что — нет ! Ну почти убедил! :-)
Не нужно. Пользователь сам запишет туда, что нужно програмныйм кодом. Т.е. вместо магической установки порта со старта, нужно использовать OUT и никак иначе.

Author:  sas9568635 [ 16 Apr 2014, 19:07 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
Пока еще смутно представляю, что это будет, но надеюсь, оно будет работать без установленного Делфи :).
Нет. Не будет. Это такая же длл как DprPasToLV.dll вот только компилирующая а не выполняющая. Без Дельфи сделать нереально задолбусь писать расшифровки комманд, меток, чисел и т.д.
А что Вам так Дельфи маячит, прикрутите в Си иль еще в что-то, я ведь писал «во времена DprPasToLV.dll», что каждая процедура содержит согласование cdecl; - что дает возможность использовать эту длл в си иль еще где-то. Просил попробовать, но тишина была
Quote:
Код будет работать, потому что второй оператор SBB, как раз и учитывает флаг займа при вычитании.
СПАСИБО! Извеняюсь ! Это я зевнул что второе минусование это SBB, а не SUB
Quote:
Раз расположение кода автоматическое - то и пользователь ничего про память знать не должен. пусть компилятор сам решает в какой участок этот код лучше положить.
Мысля конечно хорошая! А на деле?! Как я єто реализую? Как научить понимать кусок железа какая процедура должна быть во второй части памяти т. е. от 32768
Quote:
2.1.Получится ли у меня полностью отказаться от указания конкретного адреса команды SetAddrRAM, которая у меня сейчас ?
Quote:
Не знаю, что это за команда
В моём компиляторе эта команды установки текущего адреса куда компилировать код т. е. например
SetAddrRAM(0); и далее код компилируется с нулевого адреса, потом делаю SetAddrRAM(32768);
и код компилируется с 32768. Если я захочу вернуться в первую часть то я должен сам контролировать (запомнить) адрес перед командой SetAddrRAM(32768); сделать GetAddrRAM т.е.опросить текущий адрес в переменную. Вот захотел это всё свести к SetRam1 и SetRam2. Чтобі компилятор сам “помнил” и контролировал последний адрес в каждой части памяти. Но чуствую от прямой установки конкретного адреса - всё равно не отказаться.
Quote:
3. Позволять ли компилятору возможность компилирования в область ПЗУ ? Может через флаг разрешения ?! Нужно ли это ?
Quote:
Нет не нужно. Максимум, можно использовать код из стандартного ПЗУ для своих целей, не перезаписывая его.
Согласен! Это конечно!
Quote:
4. Нужно ли позволять ли компилятору компилировать (устанавливать) в регистры процессора, в видеопамять, в порты? Уважаемый Zelya убедил меня, что — нет ! Ну почти убедил! :-)
Quote:
Не нужно. Пользователь сам запишет туда, что нужно програмныйм кодом. Т.е. вместо магической установки порта со старта, нужно использовать OUT и никак иначе.
Тоже согласен. Раз уж в ЛВТ компилировать.

Author:  Zelya [ 16 Apr 2014, 19:28 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
Нет. Не будет. Это такая же длл как DprPasToLV.dll вот только компилирующая а не выполняющая.
В таком случае, боюсь, Вы останетесь едиственным пользователем этого компилятора.
Quote:
Просил попробовать, но тишина была
Как раз-то и тишины не было. Вас уговаривали, Вам объясняли, доказывали, спорили, как надо делать правильно, но у Вас свой путь, увы.
Quote:
Как научить понимать кусок железа какая процедура должна быть во второй части памяти т. е. от 32768
Это целая наука - писание компиляторов. Хотя, если честно, у Вас непонятно что. С одной стороны, как бы ассемблер, с другой менеджмент памяти. Даже не знаю что тут подсказать.

Author:  sas9568635 [ 16 Apr 2014, 20:04 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
В таком случае, боюсь, Вы останетесь едиственным пользователем этого компилятора.
Хм.. :-) Ну чтож пусть будет так.
Ну извени меня, я вместо того чтобы «сушить голову» над тем как анализировать и расшифровывать написанное пользователем в текстовом редакторе, дак я лучше напичкаю ёмкими макросами и процедурами из «лабиринт», и следующие программы типа «змейки» и типа «лабиринт» будут «клепаться» на раз(!) И состоять будут всего лишь из 50-100 емких процедур и макросов — которые будут компилировать готовую игру! Во! Вот это называется прогрессия!
Согласен ?!
Я может когда-то тебе писал следующее... забыл...
А вот почему ты Zelya, не напичкаешь ЛьвовСтудию всем чем только можно? Процедурами, макросами, модулями, объектами, движками ? Ну например, «разбери» Рик создай из него движок (объект) так, чтобы любой полшьзователь в 50-100 процедур мог написать готовую игрушку поменяв лишь только спрайты, уровни и прочее ? Ну вот толку с твоего Рик для продолжения ? И для других (и для прогресии) желающих что-то написать на базе движка «Рик», не заморачиваясь на написании самого движка !? Ведь Рик получается вроде как «конечная точка», а не первая программа на таком дивжке!?
Quote:
Как раз-то и тишины не было. Вас уговаривали, Вам объясняли, доказывали, спорили, как надо делать правильно, но у Вас свой путь, увы.
Если бы я выбрал такой путь, то я бы до сих пор писал бы только компилятор, и хрен бы его написал, а вот по моему пути уже написал компилятор и «Лабиринт».
Quote:
Это целая наука - писание компиляторов. Хотя, если честно, у Вас непонятно что. С одной стороны, как бы ассемблер, с другой менеджмент памяти. Даже не знаю что тут подсказать.
Ну ладно. Об самом компиляторе в целом и описании его - не буду! Буду по конкретным вопросам типа: как реализовать макрос минусовки регистровых пар и т. д. Хорошо ? Так можно ?
По ходу на будущее: Может быть есть макросы умножения и деления, (челочисленный остаток от деления) и т.д Хотябы черновики ?

Author:  Zelya [ 17 Apr 2014, 14:10 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
а вот по моему пути уже написал компилятор и «Лабиринт».
Ваша игра "Лабиринт" - это конечный продукт. Поэтому она была встречена так тепло всеми, и нам пофиг на чем она написана.
Ваша среда разработки - своершенно иное. Вы игнорировали все советы, пожтому она никому и не стала интересна, а Ваши постоянные просьбы "попробовать, додедлать, прикрутить" - только раздражают.
Quote:
А вот почему ты Zelya, не напичкаешь ЛьвовСтудию всем чем только можно? Процедурами, макросами, модулями, объектами, движками ?
Это совсем разные вещи, не нужно смешивать GameMaker и компилятор. Студия, это студия, а эдитор для дивжка должен быть другим:
Image
Quote:
Может быть есть макросы умножения и деления, (челочисленный остаток от деления) и т.д Хотябы черновики ?
Гугл полон таких примеров, вот, например: http://znanie.podelise.ru/docs/90635/in ... tml?page=3
Но Вы определитесь, что Вы пишите, ассемблер либо язык высокого уровня. Если я пишу прогу на асме, я не буду использовать стандартный макрос умножения, так как это очень накладно.

Author:  sas9568635 [ 17 Apr 2014, 18:04 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
Ваша игра "Лабиринт" - это конечный продукт..
Хочу сделать его процедуры так, чтобы на них можно было «опираться», и в следующий раз одно и тоже не писать, будь то мне или кому нибудь другому.
Quote:
Поэтому она была встречена так тепло всеми, и нам пофиг на чем она написана.
Считаю, что если бы когда я только зарегился на форуме (года два назад), ЛьвовСтудия была бы напичкана примерами, модулями с процедурами, готовыми движками и т. д. т.е бери пример и «вперёд!», - то я бы не брался за написание своей среды разработки. Ну а раз ЛьвовСтудия «голая» и «лысая», - дак мне вроде как проще было свою среду написать, чем осваивать и напичкивать ЛьвовСтудию. Zelya, а может я не один такой ? «голая» и «лысая» ЛьвовСтудию — она ничего не стоит! (моё мнение).
Quote:
Ваша среда разработки - своершенно иное. Вы игнорировали все советы, пожтому она никому и не стала интересна,
Мне так же неитересна ЛьвовСтудия, выше я описал почему! И даже если теперь она поменяется так как я захочу, - то уже моего мнения она не изменит, у меня уже «философия другой стала ».
Quote:
а Ваши постоянные просьбы "попробовать, додедлать, прикрутить" - только раздражают.
Хорошо! Больше не буду! Надо было это вот так чётко сказать! Потому, что я сужу по себе как и многие люди! т. е. думаю меня бы это не раздражало, если почти игрушка готовая, а я админ мне её всего лишь подкорректить, ну не писать же с «нуля» меня просят.
Quote:
А вот почему ты Zelya, не напичкаешь ЛьвовСтудию всем чем только можно? Процедурами, макросами, модулями, объектами, движками ?
Quote:
Это совсем разные вещи, не нужно смешивать GameMaker и компилятор. Студия, это студия, а эдитор для дивжка должен быть другим:
Хм.. Думаю одно другому не мешает!
Quote:
Гугл полон таких примеров, вот, например: http://znanie.podelise.ru/docs/90635/in ... tml?page=3
Спасибо за пример. А насчет гугла, дак я вечно, что не ищу подобное, дак попадаю на таблицы (описания) КР580, или учебники по ассму КР580, не более.
Quote:
Но Вы определитесь, что Вы пишите, ассемблер либо язык высокого уровня. Если я пишу прогу на асме, я не буду использовать стандартный макрос умножения, так как это очень накладно.
Zelya, ну одно другому не мешает всё можно в смесь использовать, асм, макросы, процедуры, движки, - как хош так и мудри, зачем в чём-то ограничивать себя (пользователя) ?!

Author:  als [ 06 Jan 2018, 18:09 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Возобновил своё увлечение МАДЛом! :-)
Перечитал тему. Что я могу сказать...
"Цельной" готовой программы (компилятора) я не смогу его написать НИКОГДА!
Поэтому и проходится идти таким путём как "установленный Дельфи".
Хотя по сути, можно обойтись без УСТАНОВЛЕННОГО дельфи, а просто использовать утилиты (файлы из Дельфи)
Например:
из Дельфи 2, - DCC32.EXE, SYSTEM.DCU
или
из Дельфи 7, - dcc32.exe, activex.dcu, classes.dcu, messages.dcu, RTLConsts.dcu, SysConst.dcu, SysInit.dcu, system.dcu, sysutils.dcu, Types.dcu, typinfo.dcu, variants.dcu, varutils.dcu, windows.dcu
или
из Борланд Паскаля, - BPC.EXE, RTM.EXE, TURBO.TPH, TURBO.TPL
или
из Free Pascal, - fpc.exe ....и т.д.
или..
или..
(можно перечислять долго и нудно)
"наковырять" или найти в инете это всё несложно! Вот только было бы желание! А желания я так понял из-за ненависти к Паскалям и Дельфям (и ко мне тоже), просто нет!
Конечно есть вариант который можно попробовать... "подточить" это всё под такие же утилиты из СИ или еще из чего-то... но опять же вряд ли это что решит по поводу желания использовать мой компилятор!

Zelya, попытаюсь объяснить.
ЧАСТЬ 1.
Существует транслятор, в виде библиотеки DDL (можно сделать и в виде других библиотек *.TPU, *.O, *.ВСU, и т.д. это не проблема)
И вот если написать на простейших командах-КР580-в-мнемонике-паскаля программу....
Code:
program primer;
Begin
.....
jnz(m93);
.....
movAL;
.....
CPI(0);
....
Comiling;
end.
а далее прикрутить библиотеки, воспользоваться утилитой DCC32.EXE из Дельфи, (или BPC.EXE из Паскаля или fpc.exe
из Free Pascal или ... или ... да хоть самого чёрта "прикрутить" :-)) чтобы из этого получилось primer.exe, который когда запустишь, - создаст LVT или SAV для ПК-01!....

А теперь внимание.
ЧАСТЬ 2.
Создаю МАДЛ, который будет написанное на Паскале генерировать в "program primer;", который в свою очередь должен компилироваться и запускаться чтобы создавался LVT или SAV для ПК-01!....

Понимаешь, это не просто "компоновка кода до кучи" (как наверняка у тебя в Львов Студии), необходимо код-который-для-ПК-01 чтобы был запущен среди другого вспомогательного кода... который в свою очередь должен компилироваться и запускаться чтобы создавался LVT или SAV для ПК-01!....

Зачем всё так сложно ?
Пишется программа для ПК-01 на паскале, (точнее говоря на МАДЛе который очень похож на паскаль :-) )
там например процедуры
Code:
Procedure p1;
var a,b,c: byte;
begin
......
a:=a+1;b:=a;
......
end;

Procedure p2;
var d,r,t: byte;
begin
......
p1;// использует процедуру p1;
end;

Procedure p3;
begin
......
p1;// использует процедуру p1;
end;


BEGIN {старт программы}
p2;// старт программы с процедуры p2;
END;
Все это МАДЛом обрабатывается и генерируются процедуры (и паралельные с ними процедуры с приставкой например "с_" или "use_" или.. или.. ) таким образом, чтобы добавлялись разные технические флаги и код обрабытывающий процедуры для ПК-01 (и их данные тоже) чтобы это всё сгенерировалось в "program primer;".
Ну вот допустим из примера выше МАДЛ снегерировал бы следующее:
Code:
Procedure С_p1; { процедура генерирующая код-процедуры-p1-для-ПК-01. Если процедура p1-для-ПК-01 используется, надо запустить С_p1 и начнётся генерация кода для ПК-01}
var a,b,c: byte;
begin
......
a:=a+1;b:=a;
......
end;

Procedure С_p2;  { процедура генерирующая код-процедуры-p2-для-ПК-01. Если процедура p2-для-ПК-01 используется, надо запустить С_p2 и начнётся генерация кода для ПК-01}
var d,r,t: byte;
begin
......
p1;// использует процедуру p1;
end;


Procedure С_p3;  { процедура генерирующая код-процедуры-p3-для-ПК-01. Если процедура p3-для-ПК-01 используется, надо запустить С_p3 и начнётся генерация кода для ПК-01}
begin
......
p1;// использует процедуру p1;
end;



{КО ВСЕМУ НАПИСАННОМУ ВЫШЕ ТАКЖЕ генерируется мадлом на основе содержимого процедуры p1}
Procedure use_p1; { процедура для проверки используется ли процедура p1 и нужно ли её компилировать}
Begin
f_use_p1:=1; {когда зупустится процедура use_p1; установится флаг f_use_p1 что её надо компилировать, так как она используется }
end;

{генерируется мадлом на основе содержимого процедуры p2}
Procedure use_p2; { процедура для проверки используется ли процедура и нужно ли её компилировать}
Begin
f_use_p2:=1;{когда зупустится процедура use_p2; установится флаг f_use_p2 что её надо компилировать, так как она используется }
use_p1;{запустить процедуру которую использует (вызывает) процедура p2 (для установки флага об использовании её) }
end;

{генерируется мадлом на основе содержимого процедуры p3}
Procedure use_p3; { процедура для проверки используется ли процедура и нужно ли её компилировать}
Begin
f_use_p3:=1;{когда зупустится процедура use_p3; установится флаг f_use_p3 что её надо компилировать, так как она используется }
use_p1;{запустить процедуру которую использует (вызывает) процедура p2 (для установки флага об использовании её) }
end;


BEGIN
use_p2; {запуск "процедур-установки-флагов"}

if  f_use_p1=1 then  С_p1;  {если запуск "процедур-установки-флагов" установил флаг f_use_p1=1, процедура используется программой и её надо компилировать, для этого запускаем С_p1, т.е. процедуру компилирующую  p1-для-пк-01; }
if  f_use_p2=1 then  С_p2;  {если запуск "процедур-установки-флагов" установил флаг f_use_p2=1, процедура используется программой и её надо компилировать, для этого запускаем С_p2, т.е. процедуру компилирующую  p2-для-пк-01; }
if  f_use_p3=1 then  С_p3;  {если запуск "процедур-установки-флагов" установил флаг f_use_p3=1, процедура используется программой и её надо компилировать, для этого запускаем С_p3, т.е. процедуру компилирующую p3-для-пк-01; }
END.

Из примера видно что процедура p3; (и её данные тоже не будут скомпилированы в LVT, так как после запуска "процедур-установки-флагов" use_p2;, не был установлен флаг f_use_p3=1 указывающий на необходимость компилирования процедуры
p3 и её данных(!) тоже.
Определение компилирования данных размеченных в процедурах тоже по по подобному принципу,- в САМОЙ компилирующей-процедуре, например "С_p1;" "возле" использования данных "a:=a+1;b:=a;" прописывается МАДЛом "f_use_a:=1;f_use_b:=1;", а в конце процедуры "С_p1" ,- " if f_use_a=1 then... if f_use_и=1 then..." и после каждей "then" прописываются действия которые (при необходимости) выделят место в памяти под "a" или "b" для процедуры ""С_p1"" и т.д.

И вот представь себе сколько всего можно "начудить" :-) если совсместно кодом-которой-для-ПК-01 генерировать код который регулирует компиляцию того кода, для каждой конкретной программы, в которой процедуры, данные и т.д! Есть случаи в которых можно передавать конструкции МАДЛ в "program primer;" "напрямую", проверяя МАДЛом лишь синтаксис!
И самое главное, что этап компиляции "МАДЛ-в-program primer" можно ведь просмотреть "невооружённым глазом" в сненерированном primer.dpr, можно также корректировать его, "прокуртить" пошагово и т.д. Для работы над разработкой МАДЛа это очень немаловажно! По другому я врядле создам хоть какой-то компилятор! МАДЛ (аналог Паскаля) это же не какой-то там ассемблер-компановщик, в нём "такие номера" как обычная компановка кода (блоков кода) НЕ ПРОЙДУТ! Тут анализ получше надо (это я об оспользовании процедур и данных и т.д.). А если еще при этом добавить и возможность создания модуле (unit) ?!.... то что будет если в программу будет "прицеплено" 50 модулей содержащих сотни процедур ?!... как тут без анализа "нужности" процедур и данных какого-то модуля для данной программы ?!
И напоследок. Понимаешь, у меня почему-то такая ненависть к мнемонике КР580... что даже если мой МАДЛ (надеюсь напишу его когда-то) тебя рассмешит с своим "rgA:=rgA+rgB;" (в МАДЛ такое тоже будет), в том смысле, что это почти асм.... то мне всё равно лучше МАДЛ, чем асм-КР580, который я постоянно забываю, как только перестаю заниматься им! :-( :-)
В МАДЛе будут простейшие конструкции в мнемонике паскаля, - "var... ...Byte ...Word... array of byte.. array of word".... "Procedure..." для начала без параметров.... также будут ест-но "плюсы" "минусы", но скорее всего "в одно действие" и конструкции и без скобок и прочих "наворотов"!... и т.д.
Усложняет, а заодно и упрощает реализацию МАДЛа, пример "Лабиринт", который я поКонструкциям "перевожу" на "явный" паскаль и проверяю работоспособность МАДЛа. Сейчас пример "Лабиринт" выглядит как "гремучая смесь" :-) - некоторые команды в мнемонике КР580, некоторые, - в мнемонике МАДЛ, а некоторые вообще в виде "ой, это я не туда пошёл, что так делал!"... :-)
Я думаю, конце-концов, если я создам МАДЛ и выложу в пример в "Лабиринт" , это будет достаточным агрументом, чтобы убедить себя и других, что МАДЛ вполне можно использовать для написания чего либо! И это реально!
Понятное дело, что реализовать всё что хочется и жизни не хватит, но основное вполне возможно! Ведь так хочется увидеть что-то подобное МАДЛу, где, пусть с мизерными возможностями, (не отличающимися от асма), но программа будет выглядеть на "человеческом языке", (т.е. на паскале), а не мнемоникой асма!
=========
Zelya, если ты правильно понял меня и выбранный "мой путь", то вот скажи мне, какого чёрта мне "отрекаться" от Дельфи и dcc32.exe которая мне "в помощь", и использовать что-то другой из С, С++ какую-то там подобную dcc32.exe ? Тем более я С++ не знаю! Его еще изучать надо. Может есть еще какие-то предложения для реализации "по моему пути" ?
Пиши. Рассмотрю.
Как ты понял, мне нужно из МАДЛа генерировать в "человеческую мнемонику" (program primer;) котороя обладает возожностями ЯВУ(типа Паскаля) и может запускаться как программа (EXE) для дальнейшей генерации.

Author:  Zelya [ 09 Jan 2018, 14:29 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Начал писать ответ, и понял, что тут текста на мильйон строчек. Начнем с малого.
Во-первых, главное:
Пойми, что утверждение
Quote:
А желания я так понял из-за ненависти к Паскалям и Дельфям (и ко мне тоже), просто нет!
неверно. Если б МАДЛ требовал бы наличие другой любой крупной IDE, это было бы такой же проблемой. Тем более довольно специфической, большой и привередливой IDE. Это не вариант. По возможности, нужно сделать так, чтобы МАДЛ, нес уже с собой минимальный требуемый набор утилит. Хоть бы на базе Free Pascal. Плюс все должно уже быть сконфигурировано (из коробки) для полноценной роботы. Остальные утилиты - опционально.

Если это ОК, тогда можно перейти дальше.

Author:  als [ 11 Jan 2018, 13:00 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Рассказываю ситуацию.
Транслятор я начал преобразовывать таким образом, чтобы он мог быть компилирован чем угодно паскалеподобным! Причем как и в DLL так и в обычные библиотеки *.TPU, *.DCU , которые можно бы было использовать. А также чтобы был консольный и не консольный.
И вот что получается.

BP7, TPW(1991), Delphi1, Delphi2, Delphi3, Delphi7, Delphi10 - это всё компилирует НА_УРА!

А вот FPC 2.6.4, FPC 3.0.4, FPC 0.9.2, lazarus (FPC 3.0.0 ) - почему-то жаловались на один из модулей программы, - "Fatal: Unexpected end of file".
Хоть и жалоба "Неожиданный конец файла"...
Подключив свои догадки... я понял, что возможно надо избавиться от ссылок на массивы.., выделение освобождение памяти для них... и т.д. (это я под BP7 "городил" такое, чтобы память выделяло по мере необходимости, там нельзя большие массивы без выделения памяти)
Code:
type TBuffer=array [0..PastELbuf] of Byte;
 PBuffer=^TBuffer;
...........
Var Buffer:array[1..AmountFiles] of PBuffer;
...............
New(Buffer[NumBUF]);
...............
{Обращение к буферам}
Buffer[NumBUF]^[w-adrBegin1Buf[NumBUF]]:=b;
......................
Преобразовав "В_КОРЕНЬ" тот модуль, началась та же самая жалоба ("Fatal: Unexpected end of file".) но на другой модуль, на который вообще хрен поймёшь почему (FPC) жалуется!
Модули само-собой просты как "двери"! Никаких сложных конструкций! Ведь BP7 их компилирует НА_УРА!
Попытки "подтянуть" в FPC библиотеку DLL неувечались успехом, - жалобы какие-то непонятные еще на этапе написания кода использования DLL (на этапе написания "Procedure p1; external 'primer.dll';). Найти в интернете ответ на интересующий меня вопрос "об использовании DLL в FPC", - тоже ничего положительного не дали! На словах все красиво пишут! А вот на деле, - ну не хочет оно, вообще компилировать, - жалобы какие-то выдаёт!
Принимаю решение.
Вот еще "побрыкаюсь" немножко с попытками в FPC "подтянуть" библиотеку DLL (причём дельфийскую-DLL надо подтягивать, хотя оно должно быть без разницы) если ничего не получится, FPC - нафиг "в сторону"! Пока так.
Я МАДЛ пишу не для того, чтобы кому-то угодить (ну чтобы под FPC всмысле он был) просто если бы это было не сложно, то почему бы и нет! Ну а раз такие заморочки....
Если есть какие-то явно работающие простые примеры создания использования DLL (в FPC)
подкиньте плиз!


Author:  als [ 11 Jan 2018, 15:37 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

УРА! Всё получается и с FPC. Как оказалось, перед ошибкой "Неожиданный конец файла" было предупреждение которому я не предал значение "Warning: Comment level 2 found".
В общем что-то с комментами (которые в квадратных скобках) FPC не нравилось! Я поудалял те коменты, всё стало в порядке и компилируется!

Author:  als [ 11 Jan 2018, 17:01 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

На заметку любителям паскалей, дельфей, FPC, lazarus.
В Borland Pascal 7, в Delphi и т.д. допустимы комментарии в квадратных скобках, в которых открывающихся квадратных скобок может быть несколько, а закрывающаяся одна, как в примере:
Code:
{Пример {комментария {{пример комментария}
в FPC (lazarus) такое не допустимо!
В данном примере, для того в FPC (lazarus) компилировалось нормально
файлы из Borland Pascal 7, в Delphi с подобными комментариями... комментарии в них должны имметь одинаковое количество открывающихся и закрывающих квадратных скобок т.е. вот так:
Code:
{Пример {комментария {{пример комментария}}}}
Я на этом очень сильно "погорел" :-) когда не мог понять почему файлы Delphi не могут быть скомпилированы FPC (lazarus) и что это за жалобы такие "Warning: Comment level 2 found" и "Fatal: Unexpected end of file".
Будьте внимательны!

Author:  Zelya [ 15 Jan 2018, 14:16 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Отлично! Забегая наперед уточню, что лично я не паскаль-девелопер, и вряд ли заинтересуюсь МАДЛ. Но может, кому-то дейстивтельно станет интересно. Поэтому следующий вопрос:
зачем нужен *.ехе файл, который потом нужно запускать, чтобы получить lvt? Почему нельзя сразу lvt?

Author:  als [ 16 Jan 2018, 18:39 ]
Post subject:  Re: MADL (среда разработки программ для ПК-01)

Quote:
зачем нужен *.ехе файл, который потом нужно запускать, чтобы получить lvt? Почему нельзя сразу lvt?
Zelya, ну я же тебе вот писал: http://lvovpc.ho.ua/forum/viewtopic.php ... 4960#p4955
что создаётся сорц который скомпилирует fpc.exe (tpc.exe) в exe, запустится и окончательно компилирует в ЛВТ, "отбросит" всё что не нужно и.. и.. и.. и еще всякое что можно "сбросить" на паскаль... может массивы инициализированные... может еще чего... пусть он "расхлёбывается"!
по другому сделать у меня просто "крыша поедет"!... :-)

ну вот ты си знаешь ?! вот возьми любой СИ-исходник , смотри на него и представь себе как ты будешь писать компилятор... да еще чтобы сразу в ЛВТ ?!...
Я же писал, - тут простой компоновкой кода не обойтись! Процедуры... переменные... глобальные... локальные... некоторые данные и процедуры могут не использоваться... а если до модулей (библиотек) дело дойдёт... 50 модулей по 100 процедур.... и что прикажешь всё компилировать (в ЛВТ) ?!.... если из них будет использоваться всего лишь 2 модуля по 2 процедуры, а подключённые в проект будут все 50 модулей...

я же тебе не фирма "бугланд" :-) или еще какая нибудь... что смогу дельфи для львова создать "один-к-одному"! :-)
Тут основная соль: хочу поскалеподобным языком писать, а не мнемоникой КР580! Вот! Поэтому на многое не расчитывай, - аналоги КР580 ну и процедуры БЕЗ ПАРАМЕТРОВ, переменные размеченные пользователем Byte, word; и т.д. ну ща вырезки подготовлю какие нибудь, выложу.
Ах, да, это еще не скоро всё реализовано будет... может через 2 месяца... может через 4, 6, а может и через все 12 месяцев. Вот очередной раз переделываю наверное уже 1001 раз переделываю, так как понял, что если идти дальше таким путём, то где-то когда-то "зашьюсь", мозгов не хватит, - надо переделать... и т.д :-)

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