Весело. А у меня и IFF1 не формируется.
Весело. А у меня и IFF1 не формируется.
Действительно весело. Как же вы прерывания обрабатываете?
Тогда так:
1) Вводим два флажка IFF1, IFF2.
2) "RETN" копирует IFF2 в IFF1.
3) Про "LD A, I" и "LD A, R" уже сказано.
4) В начале обрабтки прерывания сбрасываем IFF1 и IFF2.
5) Прерывание обрабатываем если прерывания не запрещены и текущий такт от начала фрейма в пределах длительности сигнала ~INT. У меня это 32 такта.
6) Запрещенное прерывание означает, что либо IFF1 сброшен, либо была выборка одного из оп-кодов, после которых прерывания не должно быть, либо и то, и другое вместе.
7) "DI" сбрасывает IFF1 и IFF2.
8) "EI" взводит IFF1 и IFF2.
9) Оп-коды, после которых не должно быть прерываний: #DD (префикс для IX), #FB (инструкция "EI") и #FD (префикс для IY).
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Что-то вроде бы сляпал, но failed:
Последний раз редактировалось Lisitsin; 12.03.2011 в 15:16.
Кстати, поздравляю с новым статусом !!!
Последний раз редактировалось Lisitsin; 12.03.2011 в 18:16.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
скоро - будет вполне возможно заменять мегой реальный Z80 осталось только недокументированные инструкции потом добавить. получится платка переходник с смдшной AVR. и кстати потреблять помоему будет меньше. только не знаю как с нагрузочной способностью.
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
Z исправил. Failed:
Вижу две проблемы:
1) Инкрементировать следует только младшие семь разрядов R. Старший разряд остается неизменным.
При этом инструкция "LD R, A" загружает в R все восемь разрядов.
2) Инкрементировать R следует только в циклах выборки (fetch). Непосредственные операнды инструкций извлекаются обычными циклами чтения, которые не являются циклами выборки. например, в инструкции "LD HL, #nn" будет цикл выборки и два цикла чтения, итого R инкрементируем один раз.
Но: префиксы #CB и #ED, а также префиксы для IX/IY #DD и #FD читаются тоже циклами выборки, и значит каждый такой префикс увеличивает R.
Теперь смотрим в трейсинг. Ищем строки для PC=#8849. Эти строки отражают состояние после инструкции "LD A, R". Перед циклом тестирования R сбрасывается в ноль с помощью "LD R, A".
В первой такой строке у вас получается R=#4C. А должен быть R=#2C.
Вторая такая строка у вас говорит, что R=#DB (сразу замечаем перемену старшего разряда R, чего быть не должно). А должен быть R=#7F.
Значит, между циклами у вас R увеличивается на #DB - #4C = #8F = 143. А должен увеличиваться на #7F - #2C = #53 = 83. Итого 143 - 83 = 60 лишних циклов выборки. Для такого короткого кода (одна итерация тестирования) это очень много. Из этого я делаю вывод, что R у вас инкрементируется не только для циклов выборки.
Еще раз, кратко. Первая строка для PC=#8849 должна быть:
Вторая:8849 2c28
Третья:8849 7f29
8849 5200
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
А как LD R,A влияет на флаги?
Последний раз редактировалось Lisitsin; 12.03.2011 в 23:39.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)