diff --git a/libsrc/runtime/Makefile b/libsrc/runtime/Makefile index 533f60a2a..f800c1d0b 100644 --- a/libsrc/runtime/Makefile +++ b/libsrc/runtime/Makefile @@ -33,6 +33,7 @@ OBJS = add.o \ bpushbsp.o \ call.o \ compl.o \ + condes.o \ decax1.o \ decax2.o \ decaxy.o \ diff --git a/libsrc/runtime/condes.s b/libsrc/runtime/condes.s new file mode 100644 index 000000000..f0a1fabb7 --- /dev/null +++ b/libsrc/runtime/condes.s @@ -0,0 +1,46 @@ +; +; Ullrich von Bassewitz, 20.11.2000 +; +; CC65 runtime: Support for calling module constructors/destructors +; +; The condes routine must be called with the table address in a/x and the +; number of vectors in the table in y. The current implementation limits +; the table size to 128 bytes (64 vectors) but this shouldn't be problem +; for now and may be changed later. +; + + .export condes + .import jmpvec + +.code + +condes: sta getbyt+1 + stx getbyt+2 + sty index + +loop: ldy index + beq done + dey + jsr getbyt + sta jmpvec+2 + dey + jsr getbyt + sta jmpvec+1 + jsr jmpvec + jmp loop + +done: rts + +; -------------------------------------------------------------------------- +; Data. The getbyte routine is placed in the data segment cause it's patched +; at runtime. + +.bss + +index: .byte 0 + +.data + +getbyt: lda $FFFF,y + rts +