fix irq related crash by no longer zeroing out stored vector

This commit is contained in:
Irmen de Jong 2025-04-02 22:22:21 +02:00
parent 8a53742f31
commit 73f6880ff8
5 changed files with 18 additions and 5 deletions

View File

@ -300,6 +300,7 @@ internal class ProgramAndVarsGen(
asmgen.out(" .dsection slabs_BSS")
asmgen.out("prog8_program_end\t; end of program label for progend()")
asmgen.out(" * = ${relocatedBssStart.toHex()}")
asmgen.out(" .dsection BSS_NOCLEAR")
asmgen.out("prog8_bss_section_start")
asmgen.out(" .dsection BSS")
if(relocateBssSlabs)
@ -307,6 +308,7 @@ internal class ProgramAndVarsGen(
asmgen.out(" .cerror * > ${relocatedBssEnd.toHex()}, \"too many variables/data for BSS section\"")
asmgen.out("prog8_bss_section_size = * - prog8_bss_section_start")
} else {
asmgen.out(" .dsection BSS_NOCLEAR")
asmgen.out("prog8_bss_section_start")
asmgen.out(" .dsection BSS")
asmgen.out("prog8_bss_section_size = * - prog8_bss_section_start")

View File

@ -6,7 +6,7 @@ conv {
; ----- number conversions to decimal strings ----
ubyte[16] @shared string_out ; result buffer for the string conversion routines
ubyte[16] @shared string_out ; result buffer for the string conversion routines (note: uses uninitialized ARRAY instead of STR, to force it to be allocated in BSS area so it's ROM-compatible)
asmsub str_ub0(ubyte value @A) clobbers(X) -> str @AY {
; ---- convert the ubyte in A in decimal string form, with left padding 0s (3 positions total)

View File

@ -1474,9 +1474,9 @@ asmsub restore_irq() clobbers(A) {
sta cx16.VERA_IEN
cli
rts
.section BSS
.section BSS_NOCLEAR
_orig_irqvec .word ?
.send BSS
.send BSS_NOCLEAR
; !notreached!
}}
}

View File

@ -1,9 +1,9 @@
; Internal library routines - always included by the compiler
; Generic machine independent 6502 code.
.section BSS
.section BSS_NOCLEAR
orig_stackpointer .byte ? ; stores the Stack pointer register at program start
.send BSS
.send BSS_NOCLEAR
program_startup_clear_bss .proc
; this is always ran first thing from the start routine to clear out the BSS area

View File

@ -1,6 +1,17 @@
TODO
====
atari customtarget: default output should be .xex not .prg (10.5 still did it correctly)
megascroll has become larger, why?
test irqs on various targets: set_irq, set_rasterirq
cleanup_at_exit : is that not romable?
can memset/memsetw be written without the need of a temp register variable?
...