// target-independent things

#if not(ARCH_6502)
#warn stdlib_6502 module should be only used on 6502-compatible targets
#endif

word nmi_routine_addr   @$FFFA
word reset_routine_addr @$FFFC
word irq_routine_addr   @$FFFE

macro asm void poke(word const addr, byte register(a) value) {
    ! STA addr
}

macro asm byte peek(word const addr) {
    ! LDA addr
}

macro asm void disable_irq() {
    SEI
}

macro asm void enable_irq() {
    CLI
}

asm byte hi_nibble_to_hex(byte register(a) value) {
    LSR
    LSR
    LSR
    LSR
    ? JMP lo_nibble_to_hex
}

asm byte lo_nibble_to_hex(byte register(a) value) {
    ! AND #$F
    CLC
    ADC #$30
    CMP #$3A
    BCC _lo_nibble_to_hex_lbl
    ADC #$6 // carry is set
_lo_nibble_to_hex_lbl:
    ? RTS
}

macro asm void panic() {
    ? JSR _panic
}

const array __constant8 = [8]

#if ZPREG_SIZE < 4
const array call = [2]
#endif
