а тут разве применялись scf/ccf ?
не знаю, код не смотрел. Просто предположил что может быть.
Новая версия. Переделал тесты, много добавил, что-то объединил, что-то разъединил. Теперь проверяются все инструкции и вызовы прерываний, меняющие MEMPTR, кроме: инструкций RST, вызовов прерываний в режимах IM 0 и 1, разбитых инструкций CPIR и CPDR. Тесты разбитых OTIR и OTDR работают только на 128-х машинах. :ZXPlus: Для тех, кто будет проверять на реалах, сделал турбозагрузчик, чтобы быстрее все это дело грузилось. Сделал вывод некоторой идентификационной информации, в будущем буду пробовать на ее основе адаптировать тесты под конкретные модели процессоров, но нужна обратная инфа от вас: что на экране, какой установлен процессор. Проверьте, пожалуйста, на реальных машинах, у кого есть возможность. Спасибо.
Вложение 82233 Вложение 82234
TZX: Вложение 82235
TAP: Вложение 82236
Запустил на Мистере ФПГА (ZX Spectrum 24.04.21) - сразу же вылетает:
01:Self-test
TESTS FAILED
MEMPTR is not emulated correctly
Физическое железо Z8400AB1 (Z80A), БМК Т34ВГ1. Все тесты пройдены:
https://i.ibb.co/qL0RgB4y/DSC-6135.jpg
Значит тест прокрутил все необходимые итерации, но флаги так и не изменились, т.к. в эмуляторе вообще не запарились этими флагами из регистра MEMPTR в инструкции BIT 0,(HL), либо CPD не уменьшает MEMPTR, и проверять тогда все это совершенно невозможно. В тесте предусмотрен выход на такой случай с таким вот сообщением, чтобы на таких эмуляторах все не зависало. Интересно было проверить и такой кейс. В любом случае, проверить было интересно, потому что в FPGA могла и оказаться эмуляция регистра, полная, или не полная, мы бы увидели недостатки, если бы они были. Спасибо за инфу.
GRM-128 (так же процессор отечественный ВМ1)
https://i.postimg.cc/dDH6XQdP/DSC01764.jpg
тест любопытный:
https://i.imgur.com/hihgmwg.png
Смущает правда то, что он показывает ок, даже если специально подпортить флаги X и Y у блоковых инструкций.
Вероятно тест не проверяет как влияет старший байт адреса блоковой инструкции на флаги?