edit2: meine ja nur, effizientes multitasking UND stable-raster klingt halt irgendwie ... kaum machbar 
doch , mit Timer-NMI und ohne PHA/PLA - einfach A,X,Y in 3 ZP-Adressen rotzen und am Ende wieder laden, spart viel Rasterzeit gegenüber PHA/PLA wenn man z.B. in jeder Rasterline den Sideborder öffnen will. Und da der NMI auch einen IRQ unterbricht, hätte man den Rest der Rasterlines in der horzontalen frei für Mainloop oder Sound oder ....
Und alles Timing-kritische inkl. StableRaster kann dann ja der NMI übernehmen. ggf. mit 2 CIA2-Timern falls badlines mit im Spiel sind ....
und $DD0C vorher mit #$40 laden (Opcode für RTI) spart ja auch noch bisschen.
Oder hab ich jetzt einen Gedankenfehler ?
nmi_routine:
sta $02
stx $03
sty $04
dec $d016
inc $d016
ldy $04
ldx $03
lda $02
jmp $dd0c ; JMP$dd0c = rti+ack = 3 cycles - ack