а нетлист отсюда ( https://github.com/1801BM1/vm80a/tree/master/sch ) выгрузить?
или надо чистый 8080?
а нетлист отсюда ( https://github.com/1801BM1/vm80a/tree/master/sch ) выгрузить?
или надо чистый 8080?
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Titus, пытаюсь разобраться в твоей схеме как процессор префиксные инструкции обрабатывает. Где он хранит информацию о префиксах?
На схеме PLA нашел сигналы /CB_SET, /ED_SET, /IDX_SET, /BASE_SET. Но смысл их непонятен.
Казалось бы первые два должны устанавливаться сразу после обработки соответствующего префикса CB/ED, но нет. /ED_SET устанавливается на последнем такте выборки опкода после префикса, где тогда хранится все это время информация о префиксе?
С /CB_SET всё еще чудесатее - он устанавливается уже после выборки префикса и опкода... и более того - удерживается даже когда идет выборка следующего опкода...
/IDX_SET устанавливается на последнем такте выборки опкода (как и /ED_SET), при этом непонятно как процессор отличает IX от IY.
Что такое /BASE_SET вообще не понятно - он устанавливается на последнем такте выборки опкода и может вообще не сбрасываться на серии инструкций.
Нашел еще сигналы DD/FD prefix, CB prefix, ED prefix и их объединение DD/FD/ED/CB prefix на схеме ECO, они ведут себя более адекватно - устанавливаются после префиксов, но странно - сбрасываются как-раз перед последним тактом выборки опкода, т.е. когда идет захват опкода они уже сброшены - странно.
Почему-то для DD/FD,CB такого сигнала нет - после DD/FD устанавливается сигнал DD/FD, а после следующего за ним CB сигнал DD/FD сбрасывается и устанавливается CB, как при обычном префиксе CB. Странно.
Последний раз редактировалось ZXMAK; 25.12.2024 в 20:34.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Как раз все понятно. Если установлен соответствующий сигнал, то опкод декодируется в соответствии с префиксом.
BASE_SET - это базовый набор инструкций
Триггеры, хранящие состояние префиксов тактируются сигналом PREF_CLK, который в общем случае активен в M1.T3.1
- - - Добавлено - - -
Есть специальный триггер, он содержит информацию, какой сейчас набор IX или IY. Транзисторы T3603/T3611 и т.д.
- - - Добавлено - - -
Выборка опкода для DD/FD/CB отличается от всех остальных команд. Этот опкод выбирается отдельным способом не в цикле M1. Я об этом писал в этой теме, поищи. Видимо, это было сделано для ускорения таких команд или для еще какой-то оптимизации.
почему он не сбрасывается на серии префиксных инструкций?
Скрытый текст
[свернуть]
да, действительно именно тут хранится, спасибо за инфуПо умолчанию он 1, для DD опкодов сбрасывается в 0. Получается IY у Z80 как-бы регистр по умолчанию?
А почему сигнал никак не назван?
Любопытно, что сигнал и SEL_IX и SEL_IY, в отличие от указанного, включается только на один полу-такт в момент пересылки.
Последний раз редактировалось ZXMAK; 25.12.2024 в 22:03.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Есть сигналы, которые и так понятны из контекста. Не буду же я все десять тысяч соединений подписывать именами)
- - - Добавлено - - -
Ты имеешь в виду префиксных DD/FD?
Но ведь набор команд остается тот же, просто меняется HL на IDX, и всякое такое.
Тогда как в ED и CB меняется сам набор команд.
- - - Добавлено - - -
Все правильно. Так как SEL_какой-то регистр непосредственно управляет чтением/записи из банка регистров, а активная фаза чтения или записи как раз и длится пол-такта.
- - - Добавлено - - -
Нет регистра по умолчанию)
По умолчанию - это то, что выбирается, когда нет явного указания, что выбрать.
А тут явно 0 или 1, и иного не дано.
нет, после завершения выполнения инструкции он почему-то не сбрасывается.
Он похоже меняется на последнем такте выборки следующего опкода (M1 T3), поэтому когда идет DD,21,00,00, DD,21,00,00, то он все время в нуле...
- - - Добавлено - - -
Как-то очень сложно и непонятно префиксы в Z80 обрабатываются, я думал там все прозрачнее и проще. Пока не понимаю как это работает...
Вот пример обработки DD,CB,00,46:
Скрытый текст
[свернуть]
А у тебя есть схема с логикой и триггерами вместо транзисторов?
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
я вот о чём:
Скрытый текст
[свернуть]
непонятно тут то, что на момент выборки опкода понять из состояния приведенных сигналов, что именно должен сделать процессор решительно невозможно. Флаги префиксов именно на такте захвата опкода сбрасываются (ещё до того как опкод будет захлопнут в защелке), для DD,CB вообще идут странные переключения из одного режима в другой.
Последний раз редактировалось ZXMAK; 25.12.2024 в 23:39.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)