![]() |
То есть флаг H в конечном итоге это флаг от суммы HL и операнда (послее шага суммирования их старших байтов) без учёта изначального С?
А про MEMPTR у Янга я читал, что он равен (HL+1), где HL берётся до операции. |
Quote:
Code:
#define HF_ARI(r, a, b) (((r) ^ (a) ^ (b)) & Z80_HF)Quote:
|
Code:
#define HF_ARI(r, a, b) (((r) ^ (a) ^ (b)) & Z80_HF)1. Прибавить к операнду изначалое значение С. 2. Запомнить флаги P1, C1, H1 - после первой операции. 2. Прибавить к HL текущее значение операнда используя компнда ADD, ADC. 3. Запомнить флаги P2, C2, H2 после второго действия. 4. Вычислить флаги P, C, H результата как P=(P1ORP2)XORC1, C=C1ORC2, H=H1ORH2, Z вычислить проверкой HL на ноль. То есть H взводится если он взводился хотя бы один раз - после первой операции сложения (старших байт) или же после второй операции сложения (старших байт). (надо мне как нибудь на досуге С++ выучить ... :-) ) |
Quote:
Но PF нужно считать как PF = PF1 XOR PF2. |
1 Attachment(s)
ADC16 PASSED !!!
А вот SBC16 по этому алгоритму не хочет ... |
Quote:
|
1 Attachment(s)
Шлю в приложении:
|
Quote:
Code:
BST F,CC ; копируем бит СКогда речь идет о SBC16 (то есть, о вычитании), то отнимая CF из HL вы получаете не те флаги, которые нужны. Здесь важна последовательность вычислений: сначала нужно добавить CF к правому операнду (а не к HL) и получить порцию флагов, а уже затем из HL вычесть получившееся и вычислить результирующие флаги. |
1 Attachment(s)
Сделел как во вложении, но всё равно failed:
|
Ой !!! не взвожу N !!!
Исправляюсь ... |
| All times are GMT +4. The time now is 16:59. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.