nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 24 Oct 2017 00:10



Reply to topic  [ 284 posts ]  Go to page Previous  1 ... 15, 16, 17, 18, 19  Next
Proteus C++ DLL's 
Author Message
Maniac

Joined: 05 Nov 2008 22:47
Posts: 232
Location: 81.28.208.238
Reply with quote
PVV wrote:
PS: а насколько проблематично реализовать времянку чтения памяти как у оригинального CPU по тактам?
это у ВМ80:

В архиве в lib/idx есть модель i8080 -- но она пока не работает.
Со временем будет работать...


17 Feb 2016 07:02
Profile
Maniac

Joined: 05 Nov 2008 22:47
Posts: 232
Location: 81.28.208.238
Reply with quote
Вот-он наконец наш любимый 8080...
Может времянки не совсем точные...


Attachments:
x80.rar [126.96 KiB]
Downloaded 34 times
20 Feb 2016 00:54
Profile
Senior

Joined: 12 Feb 2016 16:39
Posts: 152
Reply with quote
Попробовал я эту модель i8080, долго не мог понять, что не так, моя модель специалиста не работает с этим процессором. После сравнения диаграм работы нашел:
так выглядит работа с ВМ80:
Attachment:
spec_BM80.JPG
spec_BM80.JPG [ 161.98 KiB | Viewed 1417 times ]

а как с Z80:
Attachment:
spec_Z80.JPG
spec_Z80.JPG [ 146.04 KiB | Viewed 1417 times ]

условия одинаковые, программа одна, запись по адресу 0х9420 - ВМ80 не формирует сигнал SYNC, соотв. не срабатывает арбитр(U18) доступа к памяти - CPU или VIDEO, и запись в память не проходит...
PS - еще у ВМ80 сигнал сброса инверсный по отношению к Z80, надо подправить для аутентичности модели с ВМ80...


24 Feb 2016 06:04
Profile
Maniac

Joined: 05 Nov 2008 22:47
Posts: 232
Location: 81.28.208.238
Reply with quote
8080 сбрасывается единичкой?
У меня просто под рукой нет нормальных схем.
А что не так с SYNC?
Он формируется, но никакие данные пока не передаются.


24 Feb 2016 10:36
Profile
Senior

Joined: 12 Feb 2016 16:39
Posts: 152
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 16:47
Profile
Senior

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


25 Feb 2016 05:33
Profile
Maniac

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


25 Feb 2016 19:42
Profile
Senior

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

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

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

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


26 Feb 2016 08:31
Profile
Senior

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

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


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

Joined: 05 Nov 2008 22:47
Posts: 232
Location: 81.28.208.238
Reply with quote
Имелось в виду, какой код добавить в общий тест (файл test.asm)


27 Feb 2016 01:45
Profile
Maniac

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


Attachments:
x80.rar [127.95 KiB]
Downloaded 111 times
25 Mar 2016 02:15
Profile
Senior

Joined: 12 Feb 2016 16:39
Posts: 152
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 1862 times ]

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

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

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


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

Joined: 05 Nov 2008 22:47
Posts: 232
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 1851 times ]
30 Mar 2016 23:13
Profile
Senior

Joined: 12 Feb 2016 16:39
Posts: 152
Reply with quote
aav8 wrote:
Решил привязать прерывания.
Ест-но для начала z80 NMI.

прерывания z80 посложнее, чем вм80, может, все-же первым реализовать вм80? а NMI z80 уже следующим шагом...

aav8 wrote:
3. Подскажите простенькую схемку контроллера прерываний, который можно
использовать в z80 и i8080. Я думаю использовать шифратор 8->3 из 155 серии
(не помню название, вроде ВИ1) + шинник.

Attachment:
TitusInterrupts.pdf [176.88 KiB]
Downloaded 49 times
вот вариант реализации 'контроллера прерываний' на дискретных элементах


28 Jun 2016 01:28
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
3. Подскажите простенькую схемку контроллера прерываний, который можно
использовать в z80 и i8080. Я думаю использовать шифратор 8->3 из 155 серии
(не помню название, вроде ВИ1) + шинник.

Схема из архива выше очень на это похожа...
Attachment:
8080_RSTN.gif
8080_RSTN.gif [ 22.73 KiB | Viewed 1394 times ]

Но у таких простых схем есть парочка недостатков...
1. Длительность внешнего запроса прерывания должна быть такова, чтобы i8080 успел среагировать на него,
иначе - он может его потерять...
2. Обслуженное прервание необходимо как-то "сбросить", т.е. чтобы не было так, если зависло прерывание
с самым бОльшим приоритетом, то всё зациклится на его обслуживании.

_________________
iLavr


29 Jun 2016 20:03
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 284 posts ]  Go to page Previous  1 ... 15, 16, 17, 18, 19  Next

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:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.