Proteus C++ DLL's

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

По поводу SDI файлов
В принципе их без особых проблем можно получить из листинга ассемблера.
НО!!!
если прога собрана из нескольких файлов...
появляется много непоняток:
какой стартовый адрес в конкретном исходнике?
наверное можно эту информацию вытянуть из карты памяти, которую формирует линкер.
разные линкеры формируют карту памяти по своему.
а если используются сегменты/секции... (я их использую довольно активно)..
..........
думаю самое простое решение будет возможность подключения в модели файла SDI
а в конверторе, как опция возможность указания фактического стартового адреса.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Proteus C++ DLL's

Post by Lavr »

aav8 wrote:По поводу SDI файлов
В принципе их без особых проблем можно получить из листинга ассемблера.
Именно так и делают. И даже указывают в настройках какую утилиту натравить на LST-файл.
Обычно это что-то типа mpasmddx.EXE или avrddx.EXE, ASM11DDX.EXE и т.д.
aav8 wrote:НО!!!
если прога собрана из нескольких файлов...
появляется много непоняток:
какой стартовый адрес в конкретном исходнике?
Вероятно, я что-то не так понял... но в листингах уже есть конкретные адреса.
Вот у меня, к примеру, прямо рабочий листинг:

Code: Select all

            00 00      ORG  0000H;
      START:
     3 0000 31 FF 7F      LXI SP,7FFFH; set Stack
      MC0:
     5 0003 3E 55      MVI A,55H
      MC1:
     7 0005 21 00 90      LXI H,9000H;
     8 0008 01 00 30      LXI B,3000H
      MC2:
    10 000B 77        MOV M,A
    11 000C 23        INX H
    12 000D 0D        DCR C
    13 000E C2 0B 00      JNZ MC2
    14 0011 05        DCR B
    15 0012 C2 0B 00      JNZ MC2
    16 0015 76        HLT
      FILE:
          END
В нем конкретно указаны реальные адреса. А что еще надо?
А в других листингах - будут свои адреса если файлов несколько.
Насколько я понял ISIS сам находит нужную строку в нескольких SDI
по уникальному адресу...

Я когда тут ранее делал вручную SDI-файл, сделал его прямо из листинга.
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

у меня ассемблер помечает каждую строчку с адресом - одинарной кавычкой - что линкер сам поставит
конкретный адрес.
и все листинги получаются с нулевого адреса...
кросс-пакет от avocet/avsim (точно не помню, а тот комп пока недоступен)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Proteus C++ DLL's

Post by Lavr »

aav8 wrote:у меня ассемблер помечает каждую строчку с адресом - одинарной кавычкой - что линкер сам поставит конкретный адрес.
А линкер разве не с obj-файлами работает?

LST - это ж обычно листинг после всей сборки бинарника (или хекса) из всех асм-файлов...

Я посмотрел разные LST - файлы в папке примеров Протезуса, они все в основном по структуре,
как я показал свой выше - явные адреса присутствуют.
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

да он (линкер) работает с объекниками
из asm получается obj и lst
а из obj получается hex и map (или что-то для загрузки в проц)
и в этих lst нет информации где они конкретно будут работать - это будет известно после линкера.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Proteus C++ DLL's

Post by Lavr »

aav8 wrote:в этих lst нет информации где они конкретно будут работать - это будет известно после линкера.
Необычный несколько пакет... Я сам, честно говоря, стараюсь не разводить много файлов
в проекте. Может это выглядит смешно, но я сам начинаю спустя время в них путаться...
Где и что объявлено и почему я не нахожу в отдельном файле "вот это", а где "оно" тогда? :lol:
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

у меня сам ассемблер выдает такой листинг:
один файл -

Code: Select all

                         6      
                         7               seg CODE
                         8      
0000'                    9      a22hex   proc
                        10               public a22hex
                        11      
0000' F5                12               PUSH PSW
                        13      
0001' F5                14               PUSH PSW
0002' 0F                15               RRC
0003' 0F                16               RRC
0004' 0F                17               RRC
0005' 0F                18               RRC
0006' CD 0013'          19               CALL a2hex   ;qr`pxhe 4 p`gpd`
0009' 77                20               MOV  M,A
000A' 23                21               INX  H
                        22      
000B' F1                23               POP  PSW
000C' CD 0013'          24               CALL a2hex   ;lk`dxhe 4 p`gpd`
000F' 77                25               MOV  M,A
0010' 23                26               INX  H
                        27      
0011' F1                28               POP  PSW
0012' C9                29               RET
                        30      
                        31               endproc
                        32      
и другой -

Code: Select all

                        12      
0000'                   13      Ubin2dec proc
                        14               public Ubin2dec
                        15      
0000' 06 04             16               MVI  B,4   ;jnk-bn vhtp -1
0002' 36 20             17      ..1:      MVI  M,' ' ;opnohq`r| bqe opnaek`lh
0004' 23                18                INX  H
0005' 05                19                DCR  B
0006' C2 0002'          20                JNZ  ..1
0009' E5                21               PUSH H     ;qnup`mhr| `dpeq jnmv` dk
				 p`qo`jnbjh
                        22      
это кусочки листингов
каждый адрес помечен кавычкой, что фактически он буден на другом месте
то, что не читается - это ассемблер выкидывает 7-ой бит, я букву я совсем не принимает.
мне этот пакет понравился из-за того, что линкер умеет вычислять выражения, чего к сожалению не умеет WinAVR...

а что, твой линкер смотрит исходники?
или в объектниках есть часть исходников?

я думаю все-же в модели сделать возможность указать SDI файл -
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Proteus C++ DLL's

Post by Lavr »

aav8 wrote:а что, твой линкер смотрит исходники?
или в объектниках есть часть исходников?
Не... меня просто вот эта фраза удивила:
aav8 wrote:линкер сам поставит конкретный адрес. и все листинги получаются с нулевого адреса...
В объектниках должен быть объектный код же, а линкер согласует взаимные адреса и ссылки...
части исходников не видел в них.
aav8 wrote:я думаю все-же в модели сделать возможность указать SDI файл -
Ну, возможно, это и правильно... чтобы однозначность была.
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

Ну вот - кой чего получилось.
Имя файла пока просто вбит в DLL.
Изучаю как сделать выбор файла...
Может сразу предусмотреть еще какие параметры чтоб не пересобирать модель?
Кстати можно указывать файл с ЛЮБЫМ расширением, а будет загружаться SDI.
И придется рисовать свой конвертор в SDI из листинга.
Почти подошел avrddx, но он адреса умножает на 2...
Пришлись править ручками.
Работает и по шагам, и просто исполнение, и останавливается на точках останова.
You do not have the required permissions to view the files attached to this post.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

Ну вот - вроде все заработало.
Сильно много не тестировал.
Сделал конвертор в SDI.
В модели можно выбирать файл с исходником (должен быть SDI в этом-же каталоге).
You do not have the required permissions to view the files attached to this post.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

Думаю в тестовой схеме убрать все лишнее.
Переферию пересадить в память (с уменьшением размера).
И заняться i8080...
Благо корпус Lavr нарисовал, да и сама модель в принципе рабочая.
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: Proteus C++ DLL's

Post by PVV »

Привет всем.
работаю в proteus v8.3sp2
наткнулся на глюк в работе z80, след. код работает неправильно:
LOOP: INR L
JNZ LOOP
NEXT: ...
(если расположить код с нулевого адреса, то в hex это- 2c c2 00 00)
в NEXT не попадаем никогда, вечный перебор адресов 0000-0003, тогда как след. код отрабатывает правильно:
LOOP: DCR L
JNZ LOOP
NEXT: ...
такое впечатление, что при инкременте L переход через 0 не устанавливает флаг Zero.
наткнулся на это когда в специалиста, собранного в proteus, решил загрузить тест Рюмика.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

А инкреметы с другими регистрами также работают?
Имеется в виду флаг Z .
Проверить/поправить смогу только на след. неделе.
не помешал-бы код для проверки...
А реальном железе...
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: Proteus C++ DLL's

Post by PVV »

Действительно, проверил остальные коды с инкрементом(0x0C,1C,2C,3C,04,14,24,34), поведение одинаковое, флаг Z не выставляется. Во вложении проект специалиста, тестовые файлы для ROM и display.dll. root.bin - это оригинальный первый монитор спеца, с ним этот проект показывает стандартное приглашение на экране, а tst_L.bin - это тест памяти спеца из журнала, в который я добавил код на котором спец зацикливается. В реал прошивать ПЗУ проблематично, но в эмуляторе Башкирии2М этот тест работает адекватно. display.dll делал сам, по информации из начала этой ветки на базе готового проекта, который нашел, возможно даже, на этом сайте. Если нужно, то выложу исходники.
You do not have the required permissions to view the files attached to this post.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: Proteus C++ DLL's

Post by aav8 »

Подправил инкременты...
Интересно, чтоо тест ничего на счет этого не обругался...
You do not have the required permissions to view the files attached to this post.