PC-01 Lviv

It is currently 28 Mar 2024, 16:28

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 19 posts ]  Go to page 1 2 Next
Author Message
PostPosted: 16 Apr 2014, 13:46 
Offline

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


Top
   
PostPosted: 16 Apr 2014, 13:47 
Offline

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


Top
   
PostPosted: 16 Apr 2014, 16:30 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
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 и никак иначе.


Top
   
PostPosted: 16 Apr 2014, 19:07 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
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 и никак иначе.
Тоже согласен. Раз уж в ЛВТ компилировать.


Top
   
PostPosted: 16 Apr 2014, 19:28 
Offline
Site Admin
User avatar

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


Top
   
PostPosted: 16 Apr 2014, 20:04 
Offline

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


Top
   
PostPosted: 17 Apr 2014, 14:10 
Offline
Site Admin
User avatar

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


Top
   
PostPosted: 17 Apr 2014, 18:04 
Offline

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


Top
   
PostPosted: 06 Jan 2018, 18:09 
Online

Joined: 18 May 2016, 19:55
Posts: 425
Возобновил своё увлечение МАДЛом! :-)
Перечитал тему. Что я могу сказать...
"Цельной" готовой программы (компилятора) я не смогу его написать НИКОГДА!
Поэтому и проходится идти таким путём как "установленный Дельфи".
Хотя по сути, можно обойтись без УСТАНОВЛЕННОГО дельфи, а просто использовать утилиты (файлы из Дельфи)
Например:
из Дельфи 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) для дальнейшей генерации.


Top
   
PostPosted: 09 Jan 2018, 14:29 
Offline
Site Admin
User avatar

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

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


Top
   
PostPosted: 11 Jan 2018, 13:00 
Online

Joined: 18 May 2016, 19:55
Posts: 425
Рассказываю ситуацию.
Транслятор я начал преобразовывать таким образом, чтобы он мог быть компилирован чем угодно паскалеподобным! Причем как и в 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)
подкиньте плиз!



Top
   
PostPosted: 11 Jan 2018, 15:37 
Online

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


Top
   
PostPosted: 11 Jan 2018, 17:01 
Online

Joined: 18 May 2016, 19:55
Posts: 425
На заметку любителям паскалей, дельфей, 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".
Будьте внимательны!


Top
   
PostPosted: 15 Jan 2018, 14:16 
Offline
Site Admin
User avatar

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


Top
   
PostPosted: 16 Jan 2018, 18:39 
Online

Joined: 18 May 2016, 19:55
Posts: 425
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 раз переделываю, так как понял, что если идти дальше таким путём, то где-то когда-то "зашьюсь", мозгов не хватит, - надо переделать... и т.д :-)


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

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: als and 3 guests


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

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