Появилось на работе немного времени и решил прицепить к спеку на VHDL хвалёный VELESOFTом девайс DIVMMC. Пишу как всегда в ActiveHDL.
Короче, для тестов подрубил к DIVMMC ROM от FATWare0.12. Всё работает как надо. При включении появляется картинка и попытка найти IDE девайсы не удаётся (ещё бы, на портах пока заглушка). Но пока всё ок. Меняю прошивку на ESXMMC (ESXDOS for DIVMMC) и вот тут начинаются проблемы. Чтобы понять, где клинит, сравнил трассировку спека на VHDL с тассировкой в эмуле ZXSpin. Короче выяснилось следующее:
Обработка косячной последовательности кода в ZXSpin выглядит так:
Код:
... Flags = 00010000
FD CB 01 4E BIT1,(IY+$01) Flags = 01011100
20 14 JR NZ, $0B1D
прыжка нет, идём дальше
....
А вот T80 делает вот что:
Код:
... Flags = 00010000
FD CB 01 4E BIT1,(IY+$01) Flags = 00010000
20 14 JR NZ, $0B1D
и конечно же прыгает на 0B1D
....
Что за фигня такая? Почему флаги не выставляются?
Я в программировании Z80 полный ноль, поэтому выручайте
---------- Post added at 13:25 ---------- Previous post was at 13:13 ----------
Откопал кой чего...
There are the following prefixes: CBh, EDh. DDh. FDh. DDCBh and FDCBh.
Prefixes change the way the following opcodes are interpreted.
All instructions without a prefix (without anything like the above before it) are documented in the official documentation.
Получается это недокументированая инструкция и T80 её не обрабатывает? Как проверить?