nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 25 Feb 2021 19:00



Reply to topic  [ 48 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 1544 times ]

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

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

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

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

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

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

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

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


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

_________________
iLavr


03 Jan 2020 23:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
А вот DB8085 disassembler, что я брал вот здесь: Dick's Web Page (W3SYY),
меня немного подвёл. Он неверно декомпилирует инструкцию CNZ (код 0С4Н).
:osad:

Я хотел ещё тогда написать автору, но увидел, что автор приложил исходники, и вполне можно разобраться самому.
Но руки как-то не дотянулись... :-?

Дизассемблеров много есть разных, но этот интересен тем, что прикладывает к полученному исходнику
оригинальный код в виде комментария, что очень удобно в дальнейшей работе, ну и так хорошо у него получается,
что даже необработанный вариант обычно сразу легко компилируется обратно в оригинал.

Жаль только форматирует он текст ассемблера табуляцией - это не во всех редакторах одинаково
хорошо выглядит... (На удивление хорошо в MS Word выглядит, и там многие косяки легко поправить! :wink: )

В итоге сразу получается текст примерно вот такой красивости:
Code:
LF95A:
     LXI  H,L0000    ;F95A  21 00 00
LF95D:
     LDAX D          ;F95D  1A
     INX  D          ;F95E  13
     CPI  0DH        ;F95F  FE 0D
     JZ   LF98E      ;F961  CA 8E F9
     CPI  2CH        ;F964  FE 2C
     RZ              ;F966  C8
     CPI  20H        ;F967  FE 20
     JZ   LF95D      ;F969  CA 5D F9
     SUI  30H        ;F96C  D6 30
     JM   LFAAE      ;F96E  FA AE FA
     CPI  0AH        ;F971  FE 0A
     JM   LF982      ;F973  FA 82 F9
     CPI  11H        ;F976  FE 11
     JM   LFAAE      ;F978  FA AE FA
     CPI  17H        ;F97B  FE 17
     JP   LFAAE      ;F97D  F2 AE FA
     SUI  07H        ;F980  D6 07

А тут мне снова понадобилось кое-что декомпилировать для 580ВМ80, и я вспомнил про этот дизассемблер...
Всё оказалось довольно просто: инструкцию CNZ (код 0С4Н) он распознаёт, но в таблице размера
инструкций автор ошибочно проставил, что CNZ - инструкция однобайтная, типа RNZ, что и даёт сбой.
Не критично - но неприятно... :(

В общем, я один байт подправил в исходнике и в ЕХЕ-шнике, и всё вроде как заработало правильно:
Attachment:
DIZ8080.zip [11.87 KiB]
Downloaded 8 times

_________________
iLavr


18 Feb 2021 08:34
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 48 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 2 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:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.