С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
А - а - а !!! перепутал с H флагом. Исправляю. А Н флаг DAA тоде не трогает?
Трогает. Смотрите код:
Код:case 0x27: /* DAA: f(4) */ d = 0x0000; if((Z80_AF & Z80_CF) || Z80_AF >= 0x9a00) d |= 0x6000, Z80_AF |= Z80_CF; if((Z80_AF & Z80_HF) || ((Z80_AF & 0x0f00) >= 0x0a00)) d |= 0x0600; if(!(Z80_AF & Z80_NF)) Z80_AF = ((Z80_AF + d) & 0xff00) | (((Z80_AF & 0x0f00) >= 0x0a00) << HF_BIT) | (Z80_AF & Z80_CF); else Z80_AF = ((Z80_AF - d) & 0xff00) | (((Z80_AF & Z80_HF) && (Z80_AF & 0x0f00) <= 0x0500) << HF_BIT) | Z80_NF | (Z80_AF & Z80_CF); r = (Z80_AF >> 8); Z80_AF |= PF_LOG(r) | (!r << ZF_BIT) | (r & (Z80_SF | Z80_XF | Z80_YF));
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
А табличка-то у меня в виде файла EEPROM (вложение).
Весом она 4К. Адреса такие: I:N:H:C:A
где I - идентификатор. I=0 для данных (результата DAA) и I=1 для флагов в результате DAA. N, H, C - флаги до выполнения DAA. A - 8 бит ОПЕРАНДА DAA. Сначала читаю данные при I=0, затем устанавливаю I=1 и читаю флаги.
Там в принципе остался только Н флаг. Может можно что-то почитать про него и я сам смогу?
Последний раз редактировалось Lisitsin; 03.03.2011 в 21:14.
Строку 94 прошли. Теперь ошибка действительно во флаге H: строка 696, до "DAA" AF=#0010, после -- AF=#0614 вместо правильного AF=#0604, т.е. HF ошибочно взведен.
Логика HF в "DAA" такая:
1) Если NF сброшен, тогда:
1a) Если регистр A до исполнения больше или равен 10, тогда после исполнения HF должен быть взведен.
1b) Иначе A меньше 10 и HF должен быть сброшен.
2) Иначе NF взведен, и тогда:
2a) Если флаг H до исполнения был взведен и регистр A меньше или равен 5, тогда после исполнения HF должен быть взведен.
2b) Иначе либо флаг H до исполнения сброшен, либо регистр A больше 5, и тогда HF после исполнения должен быть сброшен.
Строка 696 с AF=#0010 до исполнения, проходит по пункту 1b), и значит HF должен быть сброшен.
Последний раз редактировалось Higgins; 03.03.2011 в 21:28.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Поднаписал вроде бы.
Ага, исполняется по написанному выше, но я наврал с регистром A: в обоих случаях следует сранивать только четыре младших регистра A. То есть:
1) Если NF сброшен, тогда:
1a) Если четыре младших разряда A до исполнения больше или равны 10, тогда после исполнения HF должен быть взведен.
1b) Иначе четыре младших разряда A меньше 10 и HF должен быть сброшен.
2) Иначе NF взведен, и тогда:
2a) Если флаг H до исполнения был взведен и четыре младших разрядов регистра A меньше или равны 5, тогда после исполнения HF должен быть взведен.
2b) Иначе либо флаг H до исполнения сброшен, либо четыре младших разряда регистра A больше 5, и тогда HF после исполнения должен быть сброшен.
Надеюсь, это будет не большая правка.![]()
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)