nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 10:25



Reply to topic  [ 295 posts ]  Go to page Previous  1 ... 15, 16, 17, 18, 19, 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
8080 сбрасывается единичкой?
У меня просто под рукой нет нормальных схем.
А что не так с SYNC?
Он формируется, но никакие данные пока не передаются.


24 Feb 2016 07:36
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
RESET - Входной сигнал “Сброс”. Сигнал начальной установки микропроцессора. Если RESET=1 в течение 3 - 4 периодов тактовой частоты, то микропроцессор прекращает свою работу, обнуляет счетчик команд и бездействует. Как только RESET=0, микропроцессор начинает выполнять команду, записанную по адресу 0000Н. - Это для ВМ80.
Касательно сигнала SYNC - ПК "Специалист" этот сигнал использует как сигнал синхронизации, информацию о начале машинного цикла, для организации не мешающего друг другу доступа к памяти со стороны процессора и видео вывода. Это именно специалистовская особенность. Слово состояния, выдаваемое по сигналу SYNC, не используется.
Я на модели Z80 сигнал SYNC формировал из сигнала /MREQ, по хорошему, еще сигнал /RFSH надо использовать, но в нашей модели, похоже, этот сигнал не реализован.
По приведенным выше картинкам видно, что ВМ80 не формирует сигнал SYNC при записи в память(при чтении все ОК), хотя сигнал /WR выставляется. Без этого SYNC, в специалисте, арбитр доступа к памяти не формирует разрешение на доступ ЦП к ОЗУ и запись не происходит. Если эту модель запускать в схеме не использующей сигнал SYNC, то, вероятно, все отработает нормально.


24 Feb 2016 13:47
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
Еще одна ошибка в работе нашего ЦП, (конкретно Z80, но она скорее всего применима и к ВМ80), - поменяны местами байты в памяти(порядок байт младший -старший) при выполнении PUSH, POP, RET для двухбайтного слова, и если в память, где располагается стек никто не пишет, то все выглядит хорошо и проблемы нет, но если программа сама пишет в область стека, корректирует указатель стека, а потом по самописным значениям из стека выполняется RET - вылетаем в левую память(нужен был RET на адрес 0x1A3B, а выходим на 0x3B1A). А такие программы есть...:(


25 Feb 2016 02:33
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Да действительно при записи нету SYNS - этот цикл остался от z80...
На днях исправлю. И сброс переделаю.
А примерчик кода для проверки PUSH, POP, RET.


25 Feb 2016 16:42
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
Вот поведение в отладчике тестового кода:
Attachment:
sp1.JPG
sp1.JPG [ 78.24 KiB | Viewed 19784 times ]

Attachment:
sp2.JPG
sp2.JPG [ 78.11 KiB | Viewed 19784 times ]

Attachment:
sp3.JPG
sp3.JPG [ 78.79 KiB | Viewed 19784 times ]

и он зацикливается на 0х1000, все ок


26 Feb 2016 05:31
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
и вот поведение в Proteus:
Attachment:
sp4.JPG
sp4.JPG [ 139.34 KiB | Viewed 19784 times ]

адресная шина циклится на 0х0010...


Attachments:
File comment: файл прошивки от 'специалист мх2', который я 'подправил' этим примером
SVGASpecVinxru1.zip [43.26 KiB]
Downloaded 495 times
26 Feb 2016 05:40
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Нашел немного времени позаниматься:
Сброс единицей i8080.
Для CALL, RST, RET подправлен стек, времянки i8080.
Для этих команд i8080 выдвется слово состояния.


Attachments:
x80.rar [127.95 KiB]
Downloaded 721 times
24 Mar 2016 23:15
Profile
Doomed

Joined: 12 Feb 2016 13:39
Posts: 463
Reply with quote
В модели ВМ80 не используется вход F1, а только F2, тогда как для ВМ80 опорным является F1,
по крайней мере, все растактовки в мануалах приводятся относительно нарастающего(положительного)
фронта F1. При этом, если на вход F2 подать тактовую, предназначенную для входа F1 и проинвертировать ее,
то все почти хорошо, но:
похоже, что модель за начало такта использует отрицательный фронт, а нужен положительный,
выставлять А0-А15 нужно по положительному фронту, а не отрицательному, как сейчас;
сигнал DBIN(RD) оставить как есть, те устанавливать по отрицательному фронту в такте 2 и сбрасывать
по отрицательному фронту в такте 3;
сигнал /WR оставить как есть, те устанавливать по положительному фронту в такте 3 и сбрасывать
в конце этого такта 3;
сигнал SYNC нужно оставить как есть, те выставлять по отрицательному фронту в
такте 1 и сбрасывать так же по отрицательному фронту во втором такте.

Вопрос по моменту чтения данных с шины, когда происходит считывание шины? в моем понимании,
если мы использует только один тактовый сигнал F1(особенно если отрицательный фронт F1 совпадает
с положительным фронтом F2, а это, в свою очередь, даже верно для штатного формирователя
тактовых сигналов К580ГФ24, с минимальным временем в 0нс между F1 и F2), то правильнее это
делать при снятии сигнала DBIN, те по отрицательному фронту в такте 3. Сейчас же этот момент
мне не понятен, похоже, считывание происходит по положительному фронту такта 3.

Attachment:
t_580BM80_F1_F2vsF1.jpg
t_580BM80_F1_F2vsF1.jpg [ 160.69 KiB | Viewed 19707 times ]

это картинка сведенных сигналов, сверху F1+F2, снизу только F1

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

во вложении описание ВМ80 по тактам из книжки по РК86 (МБР выпуск 1139), схемы подключения ВМ80 с
двумя тактовыми сигналами и с одним, инвертированным F1 на ножке F2, и соответствующие этим схемам
диаграммы сигналов.


Attachments:
580vm80.zip [1.16 MiB]
Downloaded 514 times
30 Mar 2016 05:40
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
В модели используется только Ф2.
Только вчера вычистил практически все упоминания про Ф1. Потому, что Ф2 почти
полностью соответствует тактированию Z80.
Ориентиентируюсь на эту диаграмму (не помню где скачал, скорее всего
в этой ветке) по ней более-менее наглядно все видно, что от чего зависит.
Сейчас по ней кой-чего подправляю. Но сигнал WR привязан к Ф2 - немного не
соответствует диаграмме (все привязано к ближайшему Ф2).
Собственно прием данных происходит в начале 3-го такта (фронт Ф2).
Решил привязать прерывания.
Ест-но для начала z80 NMI. Нашел Появились некоторые вопросики:
1. Из описания NMI я понял, что 1-ый машинный цикл, после активации этого
сигнала игнорируется, а потом происходит его обработка. И он (NMI)
защелкивается во внутреннем триггере, в момент перехода в 0? Скорее всего
все остальные прерываня (включая и сам NMI) после этого игнорируются.
Все должно восстановиться после RETN.
2. RETN - команда с префиксом, сигнал M1 формируется толко для префикса,
для остальных байтов его нет, и прерывания игнорируютя до начала следующей
команды?
3. Подскажите простенькую схемку контроллера прерываний, который можно
использовать в z80 и i8080. Я думаю использовать шифратор 8->3 из 155 серии
(не помню название, вроде ВИ1) + шинник.
Счастливые обладатели "Партнер 01.01" - гляньте схему обработчика
прерываний: такое впечатление, что вектор прерывания выставляется сразу
при получении информации о начале цикла обработки прерывания (из слова
состояния), и с DBIN никак не связан.
4. Подскажите какой-либо кросс-макроассемблер для z80. Который у меня,
не понимает всех мнемоник z80.


Attachments:
8080.gif
8080.gif [ 76.17 KiB | Viewed 19696 times ]
30 Mar 2016 20:13
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
А как-бы на простеньком компе с моделью 8080 запустить cp/m?
Я так понимаю - нужно нарисовать BIOS.
Придумать что-то для эмуляции дисковода.
И каким-то образом перенести туда системные файлы и все остальное.
Сейчас читаю доку от DR по этому направлению.


14 Aug 2017 01:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Придумать что-то для эмуляции дисковода.
И каким-то образом перенести туда системные файлы и все остальное.

На мой взгляд, в эмуляции под Proteus проще всего загружать системные файлы
с ROM-диска. Я так сам делал в модели EDUC-8.

PVV делал вариант с карточкой, на форуме есть его проект, но я не пробовал.

_________________
iLavr


14 Aug 2017 05:05
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Если кто испытывает трудности с английским HELP при работе в Proteus, то его фактически
давно перевели на русский здесь:
FAQ (ЧаВО) по PROTEUS для начинающих и не только
Там же можно скачать этот материал по частям в формате .PDF .

Но мне попался вариант, где все части FAQ объединили и немного литературно обработали:
PROTEUS по РУССКИ
Вот только объём большой: ~21 MБайт.


P.S. А вот здесь, кстати, выложен Proteus_VSM_SDK.pdf, но на английском.

_________________
iLavr


16 Oct 2017 17:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я давно собирался написать DLL-модель К155ИП3 (74181), потому что в Proteus её нет
(хотя, может быть, в новых версиях появилась), а используется она во многих интересных
конструкциях...

Но речь сейчас пойдет не о DLL-модели К155ИП3 (74181), а о двух параметрах из заголовка
моделей Proteus, которые мне были не совсем ясны, и я поступал с ними - "как они делают
(в Labcenter), так и я сделаю - по аналогии
"... :mrgreen:
Ну и перед созданием DLL-модели К155ИП3 (74181) я решил с ними разобраться.

Параметры вот какие:
{PRIMITIVE="Primitive Type",HIDDEN STRING} - описание параметра;
...
{PRIMITIVE=DIGITAL,1684} - так задан этот параметр для PIC16F84A

{ITFMOD=Interface Model,HIDDEN STRING} - описание параметра;
...
{ITFMOD=PIC}- так задан этот параметр для той же PIC16F84A

В результате штудирования хелпов и интернета, выяснил я вот что:
праметр 1684 из строки {PRIMITIVE=DIGITAL,1684}
передается в модель вот в эту функцию (пример из DISPLAY.DLL):
IDSIMMODEL *DISPLAY::getdsimmodel(CHAR *) {
return this;
}

это если указано, что модель цифровая - DIGITAL.

Если модель аналоговая - ANALOG, то праметр её передается в модель
вот в эту функцию:
ISPICEMODEL *DISPLAY::getspicemodel(CHAR *) {
return NULL;
}


Теперь, что обозначает параметр, заданный, к примеру, так: {ITFMOD=PIC}
В нашей модели КР580ВМ80А мы задержки распространения пока не учитываем, хотя я их
в заголовок и заложил, чтобы можно было менять если надо...

В Proteus "времянки" и параметры различных семейств микросхем собраны в один текстовый файл,
чтобы не прописывать их отдельно для каждой модели.
Этот файл как раз и носит название ITFMOD.MDF и находится в папке MODELS Proteus.
Для параметра "PIC" там записано следующее:
PIC : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VDD,V-=VSS

Видимо, все модели микроконтроллеров PIC могут эти параметры считать... а могут и не считать... :wink:

То есть, оба параметра, которые меня несколько беспокоили напрямую никак не влияют на работу
DLL-модели, но могут в ней быть программно прочитаны и использованы.

Ну и коллеги aav8 и PVV также давно определили и используют, что параметр модели из её заголовка:
{PRIMITIVE=DIGITAL,NAMEDEV}
передается в модель вот в эту функцию:
extern "C" IDSIMMODEL __declspec(dllexport) *createdsimmodel (CHAR *device, ILICENCESERVER *ils){
...
}

Это позволяет в одном экземпляре *.dll симулировать несколько моделей или изменять поведение
одной модели.


P.S. Вот тут я слегка погорячился:
Quote:
То есть, оба параметра, которые меня несколько беспокоили напрямую никак не влияют на работу

Параметр {ITFMOD=PIC} может повлиять на работу и весьма неприятно...
Если указать, существующий уже параметр типа PIC или CMOS у программы может возникнуть путаница
с подключением спрятанных ("hidden") выводов питания. Особенно, если указан корпус модели, но для вашей
модели питание пока безразлично. Proteus будет пытаться подключить питание так, как написано в ITFMOD.MDF
в строке CMOS, к примеру, и чего-то спутает и не найдет.
В этом случае лучше прописать в {ITFMOD=XXXX} несуществующую строку, а потом, если это будет принципиально,
дописать нужные параметры в строку XXXX: в файле ITFMOD.MDF .

_________________
iLavr


24 Oct 2017 18:33
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
я поступал с ними - "как они делают (в Labcenter), так и я сделаю - по аналогии"... :mrgreen:
И, кстати, всё правильно получалось! :o Хотя мне была понятна лишь теденция, но не был понятен её смысл... :-?
Смотрим на тенденцию:
Quote:
{*DEVICE}
NAME=PIC16F84A
...
{PRIMITIVE=DIGITAL,1684}

{*DEVICE}
NAME=ATMEGA16
...
{PRIMITIVE=DIGITAL,16}

{*DEVICE}
NAME=ATTINY15
...
{PRIMITIVE=DIGITAL,15}


Там где {PRIMITIVE=DIGITAL,ХХХХ} это ХХХХ сокращают до числа
или до числа и буквы после него.
Смысл, как мне кажется в том, что ХХХХ в модели считывается как строка, и если это строка из символов цифр или из
символов цифр и буквы после них, то она очень легко превращается в INT.

А по значению этого INT включают SWITCH ... и различают или отдельные модели в одной DLL,
или же различие в свойствах модели также в пределах одной DLL.

Нет, конечно, можно и так:
Quote:
if(!lstrcpy(device,"PIC16F84A")) .....;

Но превратить параметр {PRIMITIVE=DIGITAL,1684} как мне кажется,
и проще и быстрее...

_________________
iLavr


27 Oct 2017 08:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я немного более подробно разобрался со свойством {ITFMOD=XXX}.
И вот почему - при моделировании некоторых схем подключение в точки схемы аналогового осциллографа
нарушает работу этой схемы. Подключение же аналогового осциллографа в ту же точку схемы через инвертор
на работу схемы негативного влияния не оказывает... :-?

Особенно это заметно в схемах на моделях семейства CMOS 4000.
Вот, к примеру, моя схема для тестирования здешней модели TV-дисплея:
Attachment:
TVdisp33.gif
TVdisp33.gif [ 15.71 KiB | Viewed 21363 times ]

На схеме видны несколько инверторов, выходы которых не подключены никуда - они сугубо для подключения
осциллографа в эти точки. Если подключать осциллограф напрямую, то корректная работа схемы нарушается,
и это заметно по изображению на дисплее.

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

Оказалось, что если в моделируемую схему подключается аналоговый прибор, а осциллограф в Proteus -
аналоговый прибор, то схема моделируется в смешанном режиме, в котором за многие параметры
моделируемой схемы отвечает этот самый ITFMOD. И о влиянии его рассказано в Proteus VSMSDK.
Ниже приведен адаптированный перевод раздела Mixed Mode Interface Models:
Attachment:
Mixed Mode Interface Models.gif
Mixed Mode Interface Models.gif [ 36.18 KiB | Viewed 21363 times ]

Ну и вот параметры, которые содержит этот самый файл ITFMOD.MDF, на одну из строк которого
и ссылается {ITFMOD=XXX}, следующие:
ITFMOD.MDF wrote:
*MODELDEFS,15
CMOS : RHI=100,RLO=100,TRISE=1u,TFALL=1u,V+=VDD,V-=VSS
NMOS : RHI=100,RLO=10,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VCC,V-=GND
TTL : RHI=50, RLO=5,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,RPOS=5k,RNEG=20k,V+=VCC,V-=GND,FLOAT=HIGH
TTLHC : RHI=5,RLO=5, V+=VCC,V-=GND
TTLHCT : RHI=5,RLO=5, V+=VCC,V-=GND
TTLLS : RHI=100, RLO=10,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,RPOS=12k,RNEG=50k, V+=VCC,V-=GND,FLOAT=HIGH
TTLS : RHI=25, RLO=2.5,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,RPOS=5k,RNEG=20k,TRISE=0.5n,TFALL=0.5n, V+=VCC,V-=GND,FLOAT=HIGH
PLD : RHI=20,RLO=20, V+=VCC,V-=GND,FLOAT=HIGH
PIC : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VDD,V-=VSS
8051 : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,RPOS=5k,RNEG=20k,V+=VCC,V-=GND,FLOAT=HIGH
AT89 : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,RPOS=5k,RNEG=20k,V+=VCC,V-=GND,FLOAT=HIGH
HC11 : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VDD,V-=VSS
AVR : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VCC,V-=GND
MSP430 : RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VCC,V-=GND
RS232 : VLO=-8.5,VHI=8.5,RHI=300,RLO=300,VTL=1.2,VHL=0.5,VTH=1.7,VHH=0.5,RPOS=5k,RNEG=5k,V+=VCC,V-=GND,FLOAT=HIGH
LPC2100: RHI=20, RLO=20,VUD=2,VTL=0.8,VHL=0.2,VTH=2.5,VHH=0.2,V+=VDD,V-=VSS

У нашей модели процессора выбран {ITFMOD=CMOS} - тоже местами "усилял"
конструкцию мощными повторителями, когда моделировал "KPOXУ", ибо осциллограф тоже мешал местами. :-?

_________________
iLavr


27 Oct 2017 17:33
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 295 posts ]  Go to page Previous  1 ... 15, 16, 17, 18, 19, 20  Next

Who is online

Users browsing this forum: Shaos and 22 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.