From 23937f1dacfecace1a8954b63579947f14ca7efd Mon Sep 17 00:00:00 2001 From: cuz Date: Mon, 20 Nov 2000 23:05:52 +0000 Subject: [PATCH] First condes feature test git-svn-id: svn://svn.cc65.org/cc65/trunk@463 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c64/crt0.s | 16 ++++++++++++---- libsrc/common/Makefile | 1 - libsrc/common/atexit.s | 36 ++++++++++++++++++++++++++++++++++-- libsrc/common/doatexit.s | 38 -------------------------------------- libsrc/runtime/condes.s | 1 + 5 files changed, 47 insertions(+), 45 deletions(-) delete mode 100644 libsrc/common/doatexit.s diff --git a/libsrc/c64/crt0.s b/libsrc/c64/crt0.s index 885775414..5730fd758 100644 --- a/libsrc/c64/crt0.s +++ b/libsrc/c64/crt0.s @@ -5,9 +5,12 @@ ; .export _exit - .import __hinit, initconio, zerobss, push0, doatexit + .import __hinit, initconio, zerobss, push0, condes .import _main + .import __CONSTRUCTOR_TABLE__, __CONSTRUCTOR_COUNT__ + .import __DESTRUCTOR_TABLE__, __DESTRUCTOR_COUNT__ + .include "c64.inc" .include "../cbm/cbm.inc" @@ -105,11 +108,16 @@ L1: lda sp,x ldy #4 ; Argument size jsr _main ; call the users code -; fall thru to exit... +; Call module destructors + +_exit: lda #<__DESTRUCTOR_TABLE__ + ldx #>__DESTRUCTOR_TABLE__ + ldy #<(__DESTRUCTOR_COUNT__*2) + jsr condes -_exit: jsr doatexit ; call exit functions +; Restore system stuff - ldx spsave + ldx spsave txs ; Restore stack pointer lda mmusave sta $01 ; Restore memory configuration diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index dd6c2963b..1e64b0b8a 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -33,7 +33,6 @@ S_OBJS = _fdesc.o \ atexit.o \ atoi.o \ copydata.o \ - doatexit.o \ errno.o \ fmisc.o \ free.o \ diff --git a/libsrc/common/atexit.s b/libsrc/common/atexit.s index 14ba9c26d..74190886b 100644 --- a/libsrc/common/atexit.s +++ b/libsrc/common/atexit.s @@ -5,12 +5,13 @@ ; .export _atexit - .import exitfunc_table, exitfunc_index - .importzp exitfunc_max + .destructor doatexit, 16 .import __errno + .import jmpvec .include "errno.inc" +; --------------------------------------------------------------------------- .proc _atexit @@ -47,4 +48,35 @@ +; --------------------------------------------------------------------------- + +.code + +.proc doatexit + + ldy exitfunc_index ; Get index + beq @L9 ; Jump if done + dey + lda exitfunc_table,y + sta jmpvec+2 + dey + lda exitfunc_table,y + sta jmpvec+1 + sty exitfunc_index + jsr jmpvec ; Call the function + jmp doatexit ; Next one + +@L9: rts + +.endproc + + + +; --------------------------------------------------------------------------- + +.bss +exitfunc_index: .res 1 ; Index into table, inc'ed by 2 +exitfunc_table: .res 10 ; 5 exit functions +exitfunc_max = <(* - exitfunc_table) + diff --git a/libsrc/common/doatexit.s b/libsrc/common/doatexit.s deleted file mode 100644 index 39265cf2c..000000000 --- a/libsrc/common/doatexit.s +++ /dev/null @@ -1,38 +0,0 @@ -; -; Ullrich von Bassewitz, 26.10.2000 -; -; Handle exit functions -; - - .export doatexit, exitfunc_index, exitfunc_table - .exportzp exitfunc_max - .import jmpvec - -.bss -exitfunc_index: .res 1 ; Index into table, inc'ed by 2 -exitfunc_table: .res 10 ; 5 exit functions -exitfunc_max = <(* - exitfunc_table) - - -.code - -.proc doatexit - - ldy exitfunc_index ; Get index - beq @L9 ; Jump if done - dey - lda exitfunc_table,y - sta jmpvec+2 - dey - lda exitfunc_table,y - sta jmpvec+1 - sty exitfunc_index - jsr jmpvec ; Call the function - jmp doatexit ; Next one - -@L9: rts - -.endproc - - - diff --git a/libsrc/runtime/condes.s b/libsrc/runtime/condes.s index f0a1fabb7..099c3e4bf 100644 --- a/libsrc/runtime/condes.s +++ b/libsrc/runtime/condes.s @@ -26,6 +26,7 @@ loop: ldy index dey jsr getbyt sta jmpvec+1 + sty index jsr jmpvec jmp loop -- 2.39.5