27 lines
707 B
ArmAsm
27 lines
707 B
ArmAsm
;; #LAYOUT# STD * #TAKE
|
|
;; #LAYOUT# * KERNAL_0 #TAKE
|
|
;; #LAYOUT# * * #IGNORE
|
|
|
|
|
|
hw_entry_nmi:
|
|
|
|
sei ; do not allow IRQ to interfere, see https://www.c64-wiki.com/wiki/Interrupt
|
|
|
|
!ifndef HAS_OPCODES_65CE02 { !ifdef CONFIG_BCD_SAFE_INTERRUPTS {
|
|
|
|
cld ; clear decimal flag to allow using it without disabling interrupts
|
|
} }
|
|
|
|
; Call interrupt routine (only if initialised)
|
|
pha
|
|
|
|
lda NMINV+1 ; consider zeropage NMI address as uninitialized vector
|
|
beq @1 ; this allows safer interrupt vector modifications
|
|
pla
|
|
jmp (NMINV)
|
|
@1:
|
|
|
|
; Vector not initialized - call default interrupt routine
|
|
pla
|
|
jmp default_nmi_handler
|