nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 16:15



Reply to topic  [ 295 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  Next
Proteus C++ DLL's 
Author Message
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
По непонятным командам ВМ80 я тут таблицу сводил уже. Так как никто тут не собирается рисовать печатку в протеусе, можно сократить Ф1 оставив только Ф2. Или как вариант вживление ГФ24 в модель ВМ80 (по типовой схеме и с/без делителя на 9).

Наоборот выбрость Ф2 - т.к. мышиный такт начинается с Ф1
(ы - не ошибка - просто так). И считать что Ф1 - это меандр.
Тогда растактовка будет похожа на Z-овскую - она попроще.
Есть-но модель будет не точная на 1/8 периода.


30 Nov 2012 10:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Так как никто тут не собирается рисовать печатку в протеусе, можно сократить Ф1 оставив только Ф2.
Или как вариант вживление ГФ24 в модель ВМ80 (по типовой схеме и с/без делителя на 9).

А зачем? Тут - может быть - никто не собирается, тебе оно и даром не нужно,
а кто-нибудь, может и собирается...
Ты же не проводил опроса ни "среди тут", ни у всех "кто-нибудь"?... :wink:

В Протезусе у микроконтроллеров выводы генератора и вовсе неактивные,
но тем не менее, эти выводы никто не сокращает...

А "вживление ГФ24 в модель ВМ80" - это 8085 получится...

Но, мне кажется, это не должно беспокоить тех, кто "предпочитает настоящее ИРЛ", разве нет? :3



PS. Читать всё же надо как-то внимательнее русским по-белому... :-?
HardWareMan wrote:
По непонятным командам ВМ80 я тут таблицу сводил уже.
Речь идёт о командах, которые aav8 по ходу дела непонятны...
А неопубликованные команды в файле TEST8080.BIN уже учтены.

_________________
iLavr


Last edited by Lavr on 01 Dec 2012 13:04, edited 2 times in total.



30 Nov 2012 10:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Lavr wrote:
непонятна отладка DLL под самим Proteus...

Такие штуки я обычно отлаживаю, изучая log.

А как ты в log выкидываешь, если хочется отследить какие-то значения, скажем, входящие в функцию?

Ну не выбрасывать же в самом деле каждый раз вот такое окно:
Code:
               MessageBox(0,"Выполняется обращение [...тут значение в виде строки... ]!",
              "Внимание!",MB_ICONERROR);



aav8 wrote:
Относительно i8080 -
Придется обрабатывать оба тактовых сигнала - по Ф1 начинается
машинный такт.
Блин а него-же еще и SYNС...

По i8080 я растактовку неплохо представляю, ибо она везде разжевана.
Да - у него привязки и к Ф1 и к Ф2 в растактовке есть...
Причем по фронтам и спадам... но это много где расписано подробно.

_________________
iLavr


30 Nov 2012 11:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
А как ты в log выкидываешь, если хочется отследить какие-то значения, скажем, входящие в функцию?

Нашел эти функции в VSMSDK.HLP (См. Logging and messaging: ):
Из них две весьма удобны...
Code:
//--- При отладке можно использовать VOID IINSTANCE::log (CHAR *msg, ...) для контроля.
//--- Функция добавляет сообщение к log-списку симуляции.
//--- Эта функция наиболее полезна для отладки новых моделей тогда как log-список
//--- отображается в всплывающем окне, а сообщения появятся в нём по мере их генерации.
//--- Функция аналогична "printf" в C и использует аналогичные аргументы [ ... ].

//--- для сообщений без остановки симуляции интересна следующая функция сообщения:
//--- BOOL IINSTANCE::message (CHAR *msg, ...) - выводит сообщение в строке статуса ISIS.
//--- Этот сервис доступен только для интерактивного режима симуляции.
//--- Функция также аналогична "printf" в C и использует аналогичные аргументы [ ... ].


Покажи пример, как их заюзать, я нашел что-то типа:
Code:
if (instance) instance->log ("DIGONLY::runctrl() called with mode=%d:%s", mode, EnumToRunCtrl(mode));

Это из другой модели, пока не совсем понял, что тут и как... :oops:


И ещё: как-то в Протезусе должна поддерживаться отладка, что-то типа такого:

Image

Тоже пока не нашел, как задействовать эту опцию... :(



PS. Добавил в начало топика основные положения по написанию DLL-библиотеки под Proteus на С++...

_________________
iLavr


01 Dec 2012 04:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
И я пока ничего не нашел по передаче параметров в модель из текстового скрипта...

А серьёзно "покурив" VSM SDK, как мне кажется, нашел эти функции:

Раздел Class IINSTANCE в VSMSDK.HLP.

Basic property access:
CHAR *IINSTANCE::id()
CHAR *IINSTANCE::value()
CHAR *IINSTANCE::getstrval(CHAR *name, CHAR *defval)
DOUBLE IINSTANCE::getnumval (CHAR *name, DOUBLE defval)

BOOL IINSTANCE::getboolval (CHAR *name, BOOL defval)
DWORD IINSTANCE::gethexval (CHAR *name, DWORD defval)
LONG IINSTANCE::getinitval (CHAR *name, LONG defval)
RELTIME IINSTANCE::getdelay (CHAR *name, RELTIME deftime)


Я ввёл предварительно в модель K580BM80 два таких параметра:
Code:
{CPUDHL=30n}
{CPUDLH=30n}

Их можно менять в окне свойств модели, и это задержки распространения:
0 -> 1 и 1 -> 0.
Вроде как по справочным данным они по 30nS для K580BM80, но при
желании можно сделать их чутка побыстрее, чем по умолчанию...

Image

Мне кажется, вот эта функция может запросить этот параметр из свойств модели:
Code:
RELTIME IINSTANCE::getdelay (CHAR *name, RELTIME deftime)

Ну или какая-то из перечисленных выше...

Примеров применения для них в VSMSDK.HLP я не нашел... :(

_________________
iLavr


01 Dec 2012 11:21
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Довольно принципиальный сейчас вопрос - по поводу M1:
- он формируется в первом цикле каждой команды?
- или для каждого байта команды?
для NOP - 1 раз M1
для LXI HL,## - будет 1 или 3 раза M1?
интересует конечно в отношении Z и intel.
Quote:
А как ты в log выкидываешь, если хочется отследить какие-то значения, скажем, входящие в функцию

Пока пользуюсь MessageBox
По поводу ассемблера - для этих приборов - я использую
AVSIM85 от AVOCET - вроде так оно называется - очень неплохие
средства для макроопределений и всякое такое.
Минус этой штуки - она для DOC. Может что-то есть для Win32?
Желательно с отладчиком и симулятором - типа AVR-студии.
И обязательно с макросредсвами. Просто не зняю в
каком направлении копать. Товарищь посоветовал посмотреть
кейл - обязательно гляну. Где-то пробегала информация
что когда-то бал IAR - Z80.
К сожению в железе что-то проверить пока не имею возможности
на модуле связи - c ПК 01.01 отвалились какие-то провода,
а разбираться нету времени.
Я сейчас думаю команду HLT заствить, чтобы появлялся MesgBox
который будет показвать состояние проца.
PS:
Появилась идея - в каждый такт передовать состояние
обих (или обеих) фаз тактирования - это для 8080
Про прерывания будет еще отдельны раговор...


02 Dec 2012 00:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Довольно принципиальный сейчас вопрос - по поводу M1:
- он формируется в первом цикле каждой команды?
- или для каждого байта команды?
для NOP - 1 раз M1
для LXI HL,## - будет 1 или 3 раза M1?
интересует конечно в отношении Z и intel.

Для intel8080 - сигнал SYNC - в первом байте команды (начало машинного цикла).

А у Z80 с его M1 это посложнее будет...
Quote:
Вывод 27 (М1) - активизируется при выполнении машинного цикла М1 и показывает, что проходящий машинный цикл обработки команды находится в состоянии “ввода кода операции” при выполнении некоторой команды. Сигнал М1 при выполнении двухбайтовой команды формируется при вызове каждого байта кода операции. Сигнал M1 появляется вместе с сигналом IORQ в цикле приема прерывания. Выборка инструкции требует, чтобы все три сигнала MI, MREQ и RD были активизированы.


aav8 wrote:
Ну я думаю в последнем такте части команды подменять код
на что-то больше 256 и проходить таблицу еше раз.
А потом еще раз... Таблица уже будет примерно на 270 строк.
И туда-же всунуть обработку прерываний.

Я критически эту идею со здоровыми таблицами обдумал... складывается у меня
мнение что одними таблицами мы пожалуй не обойдемся - это раз...
А во-вторых, как мне кажется, в таблице будет очень много повторяющихся участков... так?
Может тогда не делать их столь большими, а что-то решить логически?

Я понимаю, конечно, что таблица - это самый быстрый вариант...


В Proteus я раскопал в сети чей-то пример с отладкой действительно в log-список, я эту картинку
выше показал. Вроде бы есть функция открыть всплывающее окно и выкидывать все сообщения
в него
, как показано...

MessageBox - он очень утомляет... :( Хочется сделать "кнопочку" - выдать один такт и
смотреть поведение в характерных местах как список.
Без возможности отладки всё как-то очень неприятно... :-?

_________________
iLavr


02 Dec 2012 04:30
Profile
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
aav8 wrote:
Довольно принципиальный сейчас вопрос - по поводу M1:
- он формируется в первом цикле каждой команды*?
- или для каждого байта команды**?
для NOP - 1 раз M1
для LXI HL,## - будет 1 или 3 раза M1?
интересует конечно в отношении Z и intel.

Здравствуйте.
*_да
**_нет
^_ это если кратко.
Проверил на "железяке"- в 8080 только приём первого байта команды сопровождается сигналом М1 . ( С Z80 проще - не придётся мудрить.. надеюсь..)
С 8080 действительно лучше не ПЗУ-шку для определения одно- двух- и трёх-байтовых команд, а ПЛМ-ку, она же заодно и скомбинирует сигналы управления из байта статуса, а продержать "М1" ещё и во втором и в третьем цикле "поможет" сдвиговый регистр . Это будет вполне современно машинкам на 8080, ибо ПЛМ-ки и тогда можно таки было достать.
Кстати я для "прикола" написал кусочек кода только одно-байтовыми командами.
Можно попробовать даже и без вызовов и переходов по абсолютным адресам, что сделает программу перемещаемой и размещаемой в слое "М1", то есть такую хитрую программу можно будет зашить в ПЗУ-шку, а ПЗУ-шку поставить на любой адрес - и это будет работать. :o ... по идее... ну надо проверить будет. :rotate:


02 Dec 2012 05:09
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Я критически эту идею со здоровыми таблицами обдумал... складывается у меня
мнение что одними таблицами мы пожалуй не обойдемся - это раз...
А во-вторых, как мне кажется, в таблице будет очень много повторяющихся участков... так?
Может тогда не делать их столь большими, а что-то решить логически?

Конечно в таблице будет очень много повторения.
А конкретно начало первого цикла каждой команды.
Подумываю в направлении реализации первого цикла отдельно,
затем по коду операции в таблицу (на 256 строк) и далее ...
Таблицы чем хороши - наглядностью и модифициромустью (сложное слово).
Сейчас таблица чисто тупо адресуется [код команды][номер такта]
Функция, реализующая кждый такт что-о делает (в настоящий
момент только дергает ногами) и меняет номер такта
(и есть возможность менять код команды) для следующей
обработки. Эти функции в качестве парамеров принимают
состояние входа CLK, я думмаю теперь они буду принимать сотояние
Ф1 и Ф2. И еще внутри проверять, что за процессор ...
Для обработки прерываний и для длинных команд Z80 думаю
в обработчиках менять код команды - к примеру обработка
прерываний - 256, ПДП -257, чтото длинное от Z80 - будет дальше...
Этот вопрос с таблицами - не таблицами нужно решить сейчас.
И по поводу M1 - так и непонятно:
NOP - 1 раз M1
MOV A,B - 1 раз M1
MVI A,# - 1 или 2 раза M1 ?
LXI HL,## - 1 или 3 раза M1 ?
Пишу с стиле 8080 поскольку Z80 нокогда не
спользовал (да и не было его у меня, и пока не нашел)
Quote:
MessageBox - он очень утомляет...

Это пока только для отладки самой модели.


02 Dec 2012 07:40
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Хоть и зарекался не писать но все же напишу.

Касаемо М1: из названия понятно, что это машинный цикл 1. Т.е., именно в этом цикле происходит чтение опкода (и иногда предварительное декодирование). Отсюда логичный вывод: он 1 в чтении самого опкода команды. Во время чтения/записи операнда он не формируется. Я же предлагал погуглить по соседству и покурить вполне авторитетные таблички. Все машинные циклы там расписаны. Но отдельные обсуждающие личности были против. Попутно, там же можно подсмотреть недокументированные команды i8080. Касаемо Z80, то он работает полностью аналогично, за исключением однофазного тактового входа.
1. М1 формируется при чтении опкода. Если перед опкодом был(и) префикс(ы) - то они тоже читаются с М1.
2. М1 формируется вместе с IORQ для сигнализации чтения опкода из порта. То же самое делает I8080 при прерывании, только он имеет отдельный сигнал INTA в слове состояния STATUS, но готов поспорить, что М1 там тоже формируется.


02 Dec 2012 08:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
И по поводу M1 - так и непонятно:
NOP - 1 раз M1
MOV A,B - 1 раз M1
MVI A,# - 1 или 2 раза M1 ?
LXI HL,## - 1 или 3 раза M1 ?
Пишу с стиле 8080 поскольку Z80 никогда не
пользовал (да и не было его у меня, и пока не нашел)

NOP - 1 раз M1 - да, это так.
MOV A,B - 1 раз M1 - да, это так.
MVI A,# - 1 раз M1 - да, 1 раз.

2 раза - это я так понимаю - на префикс и префиксный КОП.

LXI HL,## - 1 или 3 раза M1 ? - а вот тут не знаю, сам я Z80 тоже плотно не изучал,
а пользовался им скорее как мощным и шустрым i8080 по стандарным схемам его включения.
Я привёл выше цитату из описания Z80, по ней про LXI HL,## и мне несовсем понятно... :(
Но если цикл M1 - то 1 раз. M1 - это аналог SYNC во многом...

aav8 wrote:
Quote:
MessageBox - он очень утомляет...

Это пока только для отладки самой модели.

Но люди как-то пользуются же отсылкой сообщений в окно отладки, как раз именно
для отладки самой модели под Протезусом?!...

_________________
iLavr


Last edited by Lavr on 02 Dec 2012 09:03, edited 1 time in total.



02 Dec 2012 08:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Хоть и зарекался не писать но все же напишу.

Лучше всё же придерживайся своего слова... так оно более по-пацановски будет...
А то - совсем обрадовал было, а тут опять зачем-то прилез... :wink:

И мы сами смотрим во все нужные таблички, читаем необходимые нам мануалы и
гуглим в Интернете... нафига нам это постоянно напоминать-то?

Или ты думаешь, мы это всё сами из головы сочиняем?
Quote:
Вывод 27 (М1) - активизируется при выполнении машинного цикла М1 и показывает, что проходящий машинный цикл обработки команды находится в состоянии “ввода кода операции” при выполнении некоторой команды. Сигнал М1 при выполнении двухбайтовой команды формируется при вызове каждого байта кода операции. Сигнал M1 появляется вместе с сигналом IORQ в цикле приема прерывания. Выборка инструкции требует, чтобы все три сигнала MI, MREQ и RD были активизированы.

_________________
iLavr


Last edited by Lavr on 02 Dec 2012 09:16, edited 1 time in total.



02 Dec 2012 09:00
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
1. М1 формируется при чтении опкода. Если перед опкодом был(и) префикс(ы) - то они тоже читаются с М1.

Т.е. если у нас не прерывание и чт-то еще из ряда вон выходящее
- M1 формируется только один раз. Таблички обязательно
поизучаю. Я почему заострил на этом внимание - потом искать
что где-то забыл дернуть ногой довольно муторно.
Все недокументированное будет исполняться как NOP.
Quote:
Хоть и зарекался не писать но все же напишу

Пиши обязательно - помогут любые советы.
Планирую для начала реализовать несколько простых команд
и несколько условных переходов. Все ест-но в стиле i8080.
Думаю к середине недели должно получиться.
Так немного к слову - 580ИК80А отличплся от ИК80 тем, что умел в
прерываниях принимать любую команду, а не только RST x?


02 Dec 2012 09:15
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
M1 буду формировать только в первом цикле. И ест-но
для i8080 его аналог в слове состояния тоже будет только в первом
цикле. Конечно это можно будет потом подправить.
***********************
Чтой-то не совсем понял - что это за такие префиксы?
***********************


02 Dec 2012 09:22
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Так немного к слову - 580ИК80А отличплся от ИК80 тем, что умел в
прерываниях принимать любую команду, а не только RST x?

Нет - только электрическими характеристиками и корпусом...
Функционально они идентичны...

Значит M1 - формируется только один раз при выборки кода операции (КОП).
Префикс команд у Z80 - тоже выбирается как КОП, но за ним следует КОП префиксной команды.
Quote:
Сигнал М1 при выполнении двухбайтовой команды формируется при вызове каждого байта кода операции.

Я понимаю эту фразу так...

У 8080 префиксных команд не было, - отсюда SYNC не мог повторяться в 2-х циклах...

Прерывание - это тоже процесс, в котором получают КОП, только от внешнего источника.

_________________
iLavr


Last edited by Lavr on 02 Dec 2012 09:36, edited 1 time in total.



02 Dec 2012 09:24
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 295 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  Next

Who is online

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