Tak, ale niestety patch spowoduje też spory wzrost opóźnień (dla DLI ok 20 cykli, dla VBLK ok 35, dla IRQ ok 25). W przypadku DLI chyba lepiej nie wprowadzać takich delayów? 7 cykli przy samym NMI patch w sumie może byłoby i akceptowalne...
Zrobiłem małą przymiarkę dla wektoryzowania przez NMIVEC i IRQVEC:
nmi:
pha ;3
lda #>brkopcode ;2
pha ;3
lda #<brkopcode ;2
pha ;3
php ;3
asl NMIST
scc
jmp (VDSLST)
pha
txa
pha
tya
pha
cld
jmp (VVBLKI)
irq:
pha ;3
lda #>brkopcode ;2
pha ;3
lda #<brkopcode ;2
pha ;3
php ;3
asl NMIST
scc
jmp (VDSLST)
cld
smi
jmp (VIMIRQ)
pha
txa
pha
tya
pha
jmp (VVBLKI)
brkopcode:
txa
pha
tsx
lda $103,x
and #$10
beq ?ret
pla
tax
jmp (VBREAK)
?ret:
pla
tax
pla
rti
oraz dla VDLST, VVBLKI i VIMIRQ:
vdslst:
sta NMIRES ;4
pha ;3
lda #>brkopcode ;2
pha ;3
lda #<brkopcode ;2
pha ;3
php ;3
... ;-------20 cykli
vvblki:
pla ;4
tay ;2
pla ;4
tax ;2
lda #>brkopcode ;2
pha ;3
lda #<brkopcode ;2
pha ;3
php ;3
txa ;2
pha ;3
tya ;2
pha ;3
... ;-------35 cykli
vimirq:
bit NMIST ;4
spl ;23
jmp (VDSLST) ;5 -----11 cykli
svc ;23
jmp (VVBLKI) ;5 -----14 cykli
pha ;3
lda #>brkopcode ;2
pha ;3
lda #<brkopcode ;2
pha ;3
php ;3
... ;-------26 cykli
Na razie teoretyzuję, bo nie uruchamiałem tego. W tym przypadku IRQ w obydwu przypadkach uruchomi 2x obsługę BRK kiedy nie wejdzie mu w drogę ani NMI, ani IRQ.
Edit: 2x wywołanie BRK akurat da się obejść realizując zamiast PHP po prostu LDA #%00100100+PHA.