Развернул все макросы и, как и ожидал, увидел полный ужас. Кропотливо прошёл по всей программе, каждый раз проверяя свои изменения. Убеждался в каждом конкретном месте, какие регистры нужно сохранять, а какие можно игнорировать. В итоге универсальные конструкции типа таких:
Превратились в такое:Код:; LD E,(IX+CHP.TnAcc) ld (t_084 + 1), a ld a, h ld (TMP1 + 1), a ld a, l ld (TMP1), a ld hl, (rIX) ld a, b ld (TMP2 + 1), a ld a, c ld (TMP2), a ld bc, CHP.TnAcc add hl, bc ld a, (TMP2 + 1) ld b, a ld a, (TMP2) ld c, a ld e, (hl) ld a, (TMP1 + 1) ld h, a ld a, (TMP1) ld l, a t_084 ld a, 0 ; LD D,(IX+CHP.TnAcc+1) ld (t_085 + 1), a ld a, h ld (TMP1 + 1), a ld a, l ld (TMP1), a ld hl, (rIX) ld a, b ld (TMP2 + 1), a ld a, c ld (TMP2), a ld bc, CHP.TnAcc+1 add hl, bc ld a, (TMP2 + 1) ld b, a ld a, (TMP2) ld c, a ld d, (hl) ld a, (TMP1 + 1) ld h, a ld a, (TMP1) ld l, a t_085 ld a, 0
Не везде можно пользоваться стеком, но, где можно, я использовал PUSH/POP.Код:; LD E,(IX+CHP.TnAcc) ; LD D,(IX+CHP.TnAcc+1) ld (TMP1+1), hl ld hl, (rIX) ld de, CHP.TnAcc add hl, de ld e, (hl) inc hl ld d, (hl) TMP1: ld hl, 0
В аттаче текущая версия. Сделал всё, что мог. Думаю, что этим уже можно пользоваться. Но хотелось бы, чтобы всё-таки кто-нибудь сделал code review и потестировал на своих компах/эмуляторах с i8080.
Также выложил на GitHub.




Ответить с цитированием