1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-11 11:30:13 +00:00

First condes feature test

git-svn-id: svn://svn.cc65.org/cc65/trunk@463 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2000-11-20 23:05:52 +00:00
parent d2d7a2e31b
commit 23937f1dac
5 changed files with 47 additions and 45 deletions

View File

@ -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: jsr doatexit ; call exit functions
_exit: lda #<__DESTRUCTOR_TABLE__
ldx #>__DESTRUCTOR_TABLE__
ldy #<(__DESTRUCTOR_COUNT__*2)
jsr condes
ldx spsave
; Restore system stuff
ldx spsave
txs ; Restore stack pointer
lda mmusave
sta $01 ; Restore memory configuration

View File

@ -33,7 +33,6 @@ S_OBJS = _fdesc.o \
atexit.o \
atoi.o \
copydata.o \
doatexit.o \
errno.o \
fmisc.o \
free.o \

View File

@ -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)

View File

@ -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

View File

@ -26,6 +26,7 @@ loop: ldy index
dey
jsr getbyt
sta jmpvec+1
sty index
jsr jmpvec
jmp loop