nedoPC.org

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



Reply to topic  [ 46 posts ]  Go to page Previous  1, 2, 3, 4  Next
Вопрос про !M1 при чтении операнда 
Author Message
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
dvarkin wrote:
...
$ cd Z80Explorer
$ qmake
$ make all

Спасибо - так бы не попробовал (доверился документации)!
Уткнулся в единственную известную ошибку https://github.com/gdevic/Z80Explorer/issues/1
(нужна гораздо более свежая версия qt, чем стоит, как буду обновлять систему, так попробую ещё).

Alekcandr wrote:
...Надо задавать вопрос автору симулятора.

Переписываемся; уже до авторов собственно эмулятора Z80 информация дошла.

С другой стороны, даже если с префиксом и без него !M1 действительно по-разному ведёт себя в 0xСВ - командах, это разница в пару логических элементов дешифратора.


19 Jan 2021 18:36
Profile
Fanat

Joined: 05 Jul 2020 14:08
Posts: 87
Location: Ижевск
Reply with quote
masterspammer wrote:
(нужна гораздо более свежая версия qt, чем стоит, как буду обновлять систему, так попробую ещё).
Я из-за этого на днях Debian обновил до bullseye, после этого всё собралось.


19 Jan 2021 22:45
Profile WWW
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Смотрю я на длинный ряд единичек в колонке m1 и думаю - ну не может же быть, чтоб тут ещё и прерывание могло сработать, это ж совсем бяка будет...

dvarkin wrote:
Я из-за этого на днях Debian обновил до bullseye, после этого всё собралось.

Вот не готов пока на такое действо - ни дома ни на работе... так-то оно запланировано на какие-нибудь небинарные выходные, но быстрее процессор на макетку припаяю с примерно таким http://www.nedopc.org/forum/viewtopic.php?p=83470#p83470 обвесом.


19 Jan 2021 23:27
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Смотрю я на длинный ряд единичек в колонке m1 и думаю - ну не может же быть, чтоб тут ещё и прерывание могло сработать, это ж совсем бяка будет...
Не туда.

Текущее состояние стейт машины (машинный цикл) не делимая величина. Внешние события могут анализироваться только в промежутках машинных циклов. Соответственно и реагировать стейт машина может только в этих промежутках.

Касательно прерываний. Пару цитат.

Quote:
Interrupt Request (input, active low). Interrupt Request is generated by I/O devices. The CPU honours a request at the end of the current instruction if IFF1 is set. INT is normally wired-OR and requires an external pullup for these applications.

Quote:
Non-Maskable Interrupt (input, negative edge-triggered). NMI has a higher priority than INT. NMI is always recognised at the end of the current instruction, independant of the status of the interrupt ip-ops and automatically forces the CPU to restart at location 0066h.


Вот тут, на мой взгляд, не очень удачно было принято решение разработчиками.
Quote:
Bus Request (input, active low). Bus Request has a higher priority than NMI and is always recognised at the end of the current machine cycle. BUSREQ forces the CPU address bus, data bus and control signals MREQ, IORQ, RD and WR to go to a high-empedance state so that other devices can control these lines. BUSREQ is normally wired-OR and requres an external pullup for these applications. Extended BUSREQ periods due to extensive DMA operations can prevent the CPU from refreshing dynamic RAMs.

Приходится "выкручиваться" программно для безударного переключения между двумя процессорами в MSX.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


20 Jan 2021 02:34
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
...Не туда.

Текущее состояние стейт машины (машинный цикл) не делимая величина. Внешние события могут анализироваться только в промежутках машинных циклов. Соответственно и реагировать стейт машина может только в этих промежутках.

Судя по документации-то так и есть (и там написано, что она неделимая не святым духом, а что после префиксов (и EI) на один такт блокируются прерывания); но опять же судя по документации, код команды со всеми префисами читается при активном !M1. И вот это место выглядит очень похоже на глюк - один внешний сигнал ведёт себя странно, близкие ему внутренние тоже могут вести себя странно (если довольно редкая команда читается без !M1, то и прерывания могут быть пропущены); в общем, попробую проверить на всякий случай при случае.
Alekcandr wrote:
Касательно прерываний. Пару цитат.

Quote:
Interrupt Request (input, active low). Interrupt Request is generated by I/O devices. The CPU honours a request at the end of the current instruction if IFF1 is set. INT is normally wired-OR and requires an external pullup for these applications.


Тут как раз просто и понятно, а начало обработки прерывания легко можно отследить по запросу вектора (!M1 и !IOREQ).
Alekcandr wrote:
Quote:
Non-Maskable Interrupt (input, negative edge-triggered). NMI has a higher priority than INT. NMI is always recognised at the end of the current instruction, independant of the status of the interrupt ip-ops and automatically forces the CPU to restart at location 0066h.

Тут хуже - если нужно отследить, что вот прямо сейчас начало обрабатываться прерывание, то по сути надо ловить "the end of the current instruction".
Alekcandr wrote:

Вот тут, на мой взгляд, не очень удачно было принято решение разработчиками.
Quote:
Bus Request (input, active low). Bus Request has a higher priority than NMI and is always recognised at the end of the current machine cycle. BUSREQ forces the CPU address bus, data bus and control signals MREQ, IORQ, RD and WR to go to a high-empedance state so that other devices can control these lines. BUSREQ is normally wired-OR and requres an external pullup for these applications. Extended BUSREQ periods due to extensive DMA operations can prevent the CPU from refreshing dynamic RAMs.

Кто ПДП запросил, тот память и регенерирует; сложно представить, что процессор __всё равно__ будет лезть в память и регенерировать её не смотря на ПДП.
Alekcandr wrote:
Приходится "выкручиваться" программно для безударного переключения между двумя процессорами в MSX.

А как там сделано? Мои планы на ПДП начинаются и оканчиваются ВТ57 (на типа COVOX звук выдавать).


20 Jan 2021 07:10
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
По прерываниям. Только так
masterspammer wrote:
надо ловить "the end of the current instruction"
, и не как по другому. Иначе
masterspammer wrote:
бяка будет...

По команде EI иметься ввиду следующие
Quote:
During execution of an EI instruction, interrupt is not sampled. So if interrupt (Maskable interrupt) goes active during the instruction just before an EI instruction, or during EI instruction, it will be acknowledged during the following instruction.

masterspammer wrote:
начало обработки прерывания легко можно отследить по запросу вектора (!M1 и !IOREQ)
Скорее не отследить, а подтвердить для периферии в фирменной схеме обработки прерываний от Zilog. И периферия может выставить на шину данных 8 битный вектор прерывания.
masterspammer wrote:
А как там сделано? Мои планы на ПДП начинаются и оканчиваются ВТ57 (на типа COVOX звук выдавать).
Самой схемы не существует. А подпрограмму переключения, пожалуйста.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


20 Jan 2021 09:18
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Скорее не отследить, а подтвердить для периферии в фирменной схеме обработки прерываний от Zilog. И периферия может выставить на шину данных 8 битный вектор прерывания.

Это уже от задачи зависит. Для маскируемых прерываний всё просто, а вот NMI сложнее.
Alekcandr wrote:
Самой схемы не существует. А подпрограмму переключения, пожалуйста.

Ух, забористое! Верно ли я понимаю, что там два частично совместимых процессора (один постандартнее, другой помощнее) и можно переключить процессор, продолжив выполнение той же программы? "И эти люди мне запрещают ковыряться в носу!" Похоже, что задуманное мной наркоманство (для которого и нужны все эти такты, !M1 и отслеживания NMI не такое и страшное извращение и про него стоит написать.


21 Jan 2021 01:00
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Это уже от задачи зависит. Для маскируемых прерываний всё просто, а вот NMI сложнее.
Да что же там с NMI сложнее? Как его планируется использовать?

Вполне полное описание как оно работает.

Image

masterspammer wrote:
Ух, забористое!
По мне нормальное решение. Правда, запоздалое как минимум на лет 5-ть. А вот свой VDP они делали, не иначе как под забористой травой (личное суждение).

masterspammer wrote:
Верно ли я понимаю, что там два частично совместимых процессора (один постандартнее, другой помощнее) и можно переключить процессор, продолжив выполнение той же программы?
Да переключение полностью прозрачное для выполняемой программы, на лету. Один процессор стандартный Z80 (для совместимости), второй очень продвинутый R800 (на данный момент черный ящик).

Alekcandr wrote:
Как его планируется использовать?
Прочитал в соседней теме. Спрошу тут сразу. А чем стандартное решение не устраивает? Хоть от Intel (внешний контроллер прерываний), хоть от Zilog (встроенные контроллеры прерываний в комплект микросхем Zilog).

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


21 Jan 2021 02:38
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Да что же там с NMI сложнее? Как его планируется использовать?

Вполне полное описание как оно работает.

Снаружи чтобы отследить с точностью до такта первый ромбик следует наворотить кусок дешифратора команд - как минимум полный дешифратор префиксов. У маскируемого достаточно одного логического элемента. Цель одна - переключение страниц в MMU (потом распишу).


Alekcandr wrote:
Прочитал в соседней теме. Спрошу тут сразу. А чем стандартное решение не устраивает? Хоть от Intel (внешний контроллер прерываний), хоть от Zilog (встроенные контроллеры прерываний в комплект микросхем Zilog).

В соседней теме - внешний контроллер прерываний 580-й серии штука сложная, на 20 мГц не заведётся, а для "маргариткового венка" у меня нет комплекта микросхем Zilog. Конечно можно наворотить и на ПЛИС, и на AVR, но неспортивно.


21 Jan 2021 03:23
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Теперь стало понятнее. Отчего такой интерес.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


21 Jan 2021 10:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
masterspammer wrote:
В соседней теме - внешний контроллер прерываний 580-й серии штука сложная, на 20 мГц не заведётся, ...

Существует более простой вариант, если вам вдруг интересно:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=10110&start=255#p124099

И там - еще есть далее по тексту:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=10110&start=270#p124100

_________________
iLavr


21 Jan 2021 20:40
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Lavr wrote:
Существует более простой вариант, если вам вдруг интересно:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=10110&start=255#p124099

Довольно очевидное решение, но и с очевидной проблемой - при нескольких одновременно поступивших (по факту - накопившихся за время запрета прерываний) сигналов обработан будет только один (с максимальным приоритетом), остальные потеряются, а хочется-то чтоб отработали все с соблюдением очерёдности. Кроме того, для изменения приоритета прерываний придётся одновременно и перепаивать схему и переписывать программу (что может быть и не сильно страшно - зависит от задачи).

А моя идея подать сразу 7 сигналов (примерно так же, но без шифратора и в другом режиме прерываний) и уже только программой определять. Минус 1 сигнал, минус примерно с полкилобайта памяти, плюс обработка всех поступивших сигналов в порядке и плюс возможность управлять порядком без пайки.
Lavr wrote:
И там - еще есть далее по тексту:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=10110&start=270#p124100

Примерно к тому же пришли в той теме - viewtopic.php?p=158802#p158802


21 Jan 2021 21:18
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Про эмулятор http://www.visual6502.org/JSSim/expert-z80.html - если что, нашёл я причину ошибки:

файл http://www.visual6502.org/JSSim/chip-z80/support.js строка 630 (см. с отметкой +++++ ниже)
Quote:
function disassemblytoHTML(prefix, opcode){

var disassembly;
switch (prefix) {
case 0xCB: disassembly = disassembly_cb; break;
case 0xDD: disassembly = disassembly_dd; break;
case 0xED: disassembly = disassembly_ed; break;
case 0xFD: disassembly = disassembly_fd; break;
case 0xDDCB: disassembly = disassembly_ddcb; break;
+++++ case 0xFDCB: disassembly = disassembly_ddfd; break;
default: disassembly = disassembly_00; break;
}

var opstr=disassembly[opcode];
if(typeof opstr == "undefined")
return "unknown"
return opstr.replace(/ /,' ');
}

логично что никакого disassembly_ddfd тут быть не может, а должно быть
Quote:
case 0xFDCB: disassembly = disassembly_fdcb; break;

Поправил на лету (поставил breakpoint и присвоил disassembly_ddfd=disassembly_fdcb) - заработало; ну можно и локально на диск себе сохранить и поправить.


31 Jan 2021 23:12
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Напиши авторам

_________________
:dj: https://mastodon.social/@Shaos


01 Feb 2021 02:25
Profile WWW
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Shaos wrote:
Напиши авторам

Написал сразу же, конечно. Но они __несколько__ небыстрые.


01 Feb 2021 02:32
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 46 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 6 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.