nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 22 Jan 2020 13:27



Reply to topic  [ 47 posts ]  Go to page Previous  1, 2, 3, 4
Программы для «Специалиста» 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Подведу некоторый итог опытов с этим самым BEST-C...

Я его чуть-чуть пропатчил и он довольно прилично стал работать под RAMFOS
"Специалиста_МХ". Собственно, он сам теперь включает КОИ-7 и не лезет, куда
не следует, a работать с ним вполне можно, если аккуратно.

Файлы программ на Си - обычные текстовые, которые поддерживает редактор
RAMFOS
, со стоп-байтом 0FFH в конце. Только в RAMFOS буфер редактора
начинается с адреса 1100Н, а файлы Си - на адресе 4800Н начинаются.
Поэтому работать надо так: выходим в Debug по [F7], в нем вызываем загрузку
файла также через [F7]. Файл копируем на адрес 4800Н и выходим из Debug.

Запускаем BEST-C.ЕХЕ и он начинает задавать кучу вопросов, как на них
отвечать, я показал на скриншоте.
Attachment:
C-ALL.gif
C-ALL.gif [ 3.55 KiB | Viewed 273 times ]

Главное, на вопрос NEW? ответить N, т.к. мы полжили программу в память.
Запускается Редактор типа "Микрон", кто умеет, можно работать его клавишами
УС+хх :wink: Но лучше нажать [СТР] и выйти в компилятор. Он тоже задаст вопросы,
на которые видно как ответить на скриншоте.

Компилятор предлагает 3 варианта компияции: 1, 2, 3
1 - полный листинг, и что приятно, показывает, во что превращаются строки Си.
2 - выдаст только адреса.
3 - скомпилирует быстро и молча.

В архиве есть файл BEST_C.ALL - под эмулятор Шевцова, он загрузит всё сразу:
сам BEST-C, графическую библиотеку и тестовые программы.
Attachment:
BEST-CSP.zip [124.64 KiB]
Downloaded 13 times

Собственно, я добивался взглянуть, во что BEST-C превратит простую программу
аналог под PL/M - заполнение области байтом, и результат мне не понравился. :osad:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=19633#p153052

Писать программы в эмуляторах ныне - дурной тон, поэтому я писал в обычном
редакторе под Вендой, а в эмулятор пропихивал с помощью маленькой утилиты,
которая удаляет все 0AH из текста, формируя файл *.I80, с байтом 0FFH в конце.
Она же формирует сопутствующий файл *.CPU - эти файлы удобно грузить в эмулятор
Шевцова. Исходный текст не меняется. Утилита есть в архиве, писать надо в КОИ-8,
или же всё - на английском... :ewink:

В общем, я пока поостыл декомпилировать этот BEST-C, слишком "толстый" код
он выдаёт... :-?

Я поискал в сети и нашел небольшой кросс-компилятор SMALL_C, который выдает
код под i8080: http://www.cpm.z80.de/small_c.html
Гляну, во что он соберет тот же самый пример. А уже потом будем посмотреть... :wink:

_________________
iLavr


17 Dec 2019 21:44
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Не то, чтобы очень много - 16 КБайт - но декомпилировать средствами "Специалиста_МХ" неудобно.
Пришлось бы резать на несколько частей... :-?
...
Ну... в принципе можно попробовать декомпильнуть Best_C...

Декомпилировал двумя инструментами: DB8085 disassembler и DIZASM от "Специалиста_МХ", благо я сделал себе работу с пакетом RAMFOS гораздо удобнее. :wink:
DIZASM от "Специалиста_МХ" лучше обрабатывает области данных и текстовые области, а DB8085 позволил декомпилировать крупный по размеру файл целиком.

В общем в "нулевом приближении" код по исходнику собирается с адреса 0800H полностью идентично оригиналу.
Attachment:
BEST_800.zip [57.92 KiB]
Downloaded 7 times

В архиве - исходный ассемблерный код компилятора С без редактора, а также оригинал бинарного кода для сравнения.

Я оставил всё как есть в оригинале, некоторые комментарии - по разбору таблиц. Компилировать с других адресов пока не пробовал.

По ходу разбора кода впечатление об этом компиляторе С у меня сложилось довольно странное. Я предполагал, что он транслирует текст С в ассемблерный код и уже его компилирует.
Оказалось, что это не так. В теле компилятора есть куски кода в текстовом виде, полагаю, они соответствуют директивам С, и есть эти же куски в виде бинарного кода.

Во время листинга компилятор показывает соответствие тексту на С кодом в текстовом виде и собирает программу из эквивалентов в виде бинарного кода. Видимо, поэтому код получается весьма "толстым".
Очень много работы со стеком, по сути все манипуляции делаются в стеке.

Ну что ж, для интересу можно код и почитать теперь, поскольку в кишках компиляторов С я ранее практически особо и не копался... :-?


P.S. А вот DB8085 disassembler, что я брал вот здесь: Dick's Web Page (W3SYY), меня немного подвёл.
Он неверно декомпилирует инструкцию CNZ (код 0С4Н).
:osad:

_________________
iLavr


03 Jan 2020 23:11
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 47 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 1 guest


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:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.