Код:
ORG 0DD9BH ORG 0DD9BH
; DD9B - jump/call references:
; JP from DDF6H, DDFBH, DE07H
PUSH IY ;DD9B FDE5
; DD9D - jump/call references:
; JP from DDCCH
LD IX,AE1AH ;DD9D DD211AAE
LD IY,AE2AH ;DDA1 FD212AAE
LD B,08H ;DDA5 0608
; DDA7 - jump/call references:
; DJNZ from DDCAH
PUSH BC ;DDA7 C5
LD C,(IX+00H,AE24H) ;DDA8 DD4E00
LD B,(IX+01H,AE25H) ;DDAB DD4601
LD (A244H),BC ;DDAE ED4344A2
IN A,(C) ;DDB2 ED78
; Сканируем порты
LD B,05H ;DDB4 0605
LD E,00H ;DDB6 1E00
LD D,A ;DDB8 57
; DDB9 - jump/call references:
; DJNZ from DDBEH
RRCA ;DDB9 0F
; Сканируем кнопки
JP NC,DDCFH ;DDBA D2CFDD
; в поисках нажатой
INC E ;DDBD 1C
DJNZ DDB9H ;DDBE 10F9
POP BC ;DDC0 C1
INC IX ;DDC1 DD23
INC IX ;DDC3 DD23
LD DE,0005H ;DDC5 110500
ADD IY,DE ;DDC8 FD19
DJNZ DDA7H ;DDCA 10DB
JP DD9DH ;DDCC C39DDD
; DDCF - jump/call references:
; JP from DDBAH
; нашли нажатую кнопку
POP BC ;DDCF C1
PUSH DE ;DDD0 D5
; Совершенно ненужный пуш
; DDD1 - jump/call references:
; JP from DDDAH
LD C,(IX+00H,AE24H) ;DDD1 DD4E00
LD B,(IX+01H,AE25H) ;DDD4 DD4601
IN A,(C) ;DDD7 ED78
; Читаем снова, из того-же порта
CP D ;DDD9 BA
; Сравниваем, совпадает ли с первоначальным значением !!!!!!!!!
JP Z,DDD1H ;DDDA CAD1DD
; Если не совпадает, то значит кнопку отжали!!!????
; А может не отжали, а просто скачат биты 5,6,7, один из которых сигнал с мафона!
LD A,E ;DDDD 7B
SLA A ;DDDE CB27
SLA A ;DDE0 CB27
SLA A ;DDE2 CB27
LD D,47H ;DDE4 1647
ADD D ;DDE6 82
; лишняя пересылка в D. Можно сразу ADD 47h
LD (A246H),A ;DDE7 3246A2
POP DE ;DDEA D1
; соотретственно ненужный поп, в E и так нужное значение.
LD D,00H ;DDEB 1600
ADD IY,DE ;DDED FD19
LD A,(IY+00H,AE43H) ;DDEF FD7E00
POP IY ;DDF2 FDE1
CP A,20H ;DDF4 FE20
JP Z,DD9BH ;DDF6 CA9BDD
CP A,48H ;DDF9 FE48
JP Z,DD9BH ;DDFB CA9BDD
LD IY,DE13H ;DDFE FD2113DE
LD B,05H ;DE02 0605
; DE04 - jump/call references:
; DJNZ from DE0CH
CP (IY+00H,AE43H) ;DE04 FDBE00
JP Z,DD9BH ;DE07 CA9BDD
INC IY ;DE0A FD23
DJNZ DE04H ;DE0C 10F6
LD IY,DE13H ;DE0E FD2113DE
RET ;DE12 C9
Патч заключался в замене
CP D ;DDD9 BA
На
XOR D
AND 1Fh
То есть на сравнение не всего байта, а только младших 5-ти бит.