Proteus C++ DLL's
Moderator: Shaos
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
По поводу SDI файлов
В принципе их без особых проблем можно получить из листинга ассемблера.
НО!!!
если прога собрана из нескольких файлов...
появляется много непоняток:
какой стартовый адрес в конкретном исходнике?
наверное можно эту информацию вытянуть из карты памяти, которую формирует линкер.
разные линкеры формируют карту памяти по своему.
а если используются сегменты/секции... (я их использую довольно активно)..
..........
думаю самое простое решение будет возможность подключения в модели файла SDI
а в конверторе, как опция возможность указания фактического стартового адреса.
В принципе их без особых проблем можно получить из листинга ассемблера.
НО!!!
если прога собрана из нескольких файлов...
появляется много непоняток:
какой стартовый адрес в конкретном исходнике?
наверное можно эту информацию вытянуть из карты памяти, которую формирует линкер.
разные линкеры формируют карту памяти по своему.
а если используются сегменты/секции... (я их использую довольно активно)..
..........
думаю самое простое решение будет возможность подключения в модели файла SDI
а в конверторе, как опция возможность указания фактического стартового адреса.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Proteus C++ DLL's
Именно так и делают. И даже указывают в настройках какую утилиту натравить на LST-файл.aav8 wrote:По поводу SDI файлов
В принципе их без особых проблем можно получить из листинга ассемблера.
Обычно это что-то типа 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
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
у меня ассемблер помечает каждую строчку с адресом - одинарной кавычкой - что линкер сам поставит
конкретный адрес.
и все листинги получаются с нулевого адреса...
кросс-пакет от avocet/avsim (точно не помню, а тот комп пока недоступен)
конкретный адрес.
и все листинги получаются с нулевого адреса...
кросс-пакет от avocet/avsim (точно не помню, а тот комп пока недоступен)
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Proteus C++ DLL's
А линкер разве не с obj-файлами работает?aav8 wrote:у меня ассемблер помечает каждую строчку с адресом - одинарной кавычкой - что линкер сам поставит конкретный адрес.
LST - это ж обычно листинг после всей сборки бинарника (или хекса) из всех асм-файлов...
Я посмотрел разные LST - файлы в папке примеров Протезуса, они все в основном по структуре,
как я показал свой выше - явные адреса присутствуют.
iLavr
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
да он (линкер) работает с объекниками
из asm получается obj и lst
а из obj получается hex и map (или что-то для загрузки в проц)
и в этих lst нет информации где они конкретно будут работать - это будет известно после линкера.
из asm получается obj и lst
а из obj получается hex и map (или что-то для загрузки в проц)
и в этих lst нет информации где они конкретно будут работать - это будет известно после линкера.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Proteus C++ DLL's
Необычный несколько пакет... Я сам, честно говоря, стараюсь не разводить много файловaav8 wrote:в этих lst нет информации где они конкретно будут работать - это будет известно после линкера.
в проекте. Может это выглядит смешно, но я сам начинаю спустя время в них путаться...
Где и что объявлено и почему я не нахожу в отдельном файле "вот это", а где "оно" тогда?

iLavr
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
у меня сам ассемблер выдает такой листинг:
один файл -
и другой -
это кусочки листингов
каждый адрес помечен кавычкой, что фактически он буден на другом месте
то, что не читается - это ассемблер выкидывает 7-ой бит, я букву я совсем не принимает.
мне этот пакет понравился из-за того, что линкер умеет вычислять выражения, чего к сожалению не умеет WinAVR...
а что, твой линкер смотрит исходники?
или в объектниках есть часть исходников?
я думаю все-же в модели сделать возможность указать SDI файл -
один файл -
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 файл -
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Proteus C++ DLL's
Не... меня просто вот эта фраза удивила:aav8 wrote:а что, твой линкер смотрит исходники?
или в объектниках есть часть исходников?
В объектниках должен быть объектный код же, а линкер согласует взаимные адреса и ссылки...aav8 wrote:линкер сам поставит конкретный адрес. и все листинги получаются с нулевого адреса...
части исходников не видел в них.
Ну, возможно, это и правильно... чтобы однозначность была.aav8 wrote:я думаю все-же в модели сделать возможность указать SDI файл -
iLavr
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
Ну вот - кой чего получилось.
Имя файла пока просто вбит в DLL.
Изучаю как сделать выбор файла...
Может сразу предусмотреть еще какие параметры чтоб не пересобирать модель?
Кстати можно указывать файл с ЛЮБЫМ расширением, а будет загружаться SDI.
И придется рисовать свой конвертор в SDI из листинга.
Почти подошел avrddx, но он адреса умножает на 2...
Пришлись править ручками.
Работает и по шагам, и просто исполнение, и останавливается на точках останова.
Имя файла пока просто вбит в DLL.
Изучаю как сделать выбор файла...
Может сразу предусмотреть еще какие параметры чтоб не пересобирать модель?
Кстати можно указывать файл с ЛЮБЫМ расширением, а будет загружаться SDI.
И придется рисовать свой конвертор в SDI из листинга.
Почти подошел avrddx, но он адреса умножает на 2...
Пришлись править ручками.
Работает и по шагам, и просто исполнение, и останавливается на точках останова.
You do not have the required permissions to view the files attached to this post.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
Ну вот - вроде все заработало.
Сильно много не тестировал.
Сделал конвертор в SDI.
В модели можно выбирать файл с исходником (должен быть SDI в этом-же каталоге).
Сильно много не тестировал.
Сделал конвертор в SDI.
В модели можно выбирать файл с исходником (должен быть SDI в этом-же каталоге).
You do not have the required permissions to view the files attached to this post.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
Думаю в тестовой схеме убрать все лишнее.
Переферию пересадить в память (с уменьшением размера).
И заняться i8080...
Благо корпус Lavr нарисовал, да и сама модель в принципе рабочая.
Переферию пересадить в память (с уменьшением размера).
И заняться i8080...
Благо корпус Lavr нарисовал, да и сама модель в принципе рабочая.
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: Proteus C++ DLL's
Привет всем.
работаю в 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, решил загрузить тест Рюмика.
работаю в 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, решил загрузить тест Рюмика.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
А инкреметы с другими регистрами также работают?
Имеется в виду флаг Z .
Проверить/поправить смогу только на след. неделе.
не помешал-бы код для проверки...
А реальном железе...
Имеется в виду флаг Z .
Проверить/поправить смогу только на след. неделе.
не помешал-бы код для проверки...
А реальном железе...
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: Proteus C++ DLL's
Действительно, проверил остальные коды с инкрементом(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.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Proteus C++ DLL's
Подправил инкременты...
Интересно, чтоо тест ничего на счет этого не обругался...
Интересно, чтоо тест ничего на счет этого не обругался...
You do not have the required permissions to view the files attached to this post.