;
; Startup code for cc65 (C64 version)
-;
-; This must be the *first* file on the linker command line
;
.export _exit
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
.import initlib, donelib, callirq
- .import zerobss, push0
+ .import zerobss
.import callmain
.import RESTOR, BSOUT, CLRCH
- .import __IRQFUNC_COUNT__
+ .import __INTERRUPTOR_COUNT__
.import __RAM_START__, __RAM_SIZE__ ; Linker generated
.include "zeropage.inc"
lda #>(__RAM_START__ + __RAM_SIZE__)
sta sp+1 ; Set argument stack ptr
-; Call module constructors
-
- jsr initlib
-
; If we have IRQ functions, chain our stub into the IRQ vector
- lda #<__IRQFUNC_COUNT__
+ lda #<__INTERRUPTOR_COUNT__
beq NoIRQ1
lda IRQVec
ldx IRQVec+1
stx IRQVec+1
cli
+; Call module constructors
+
+NoIRQ1: jsr initlib
+
; Push arguments and call main
-NoIRQ1: jsr callmain
+ jsr callmain
+
+; Back from main (This is also the _exit entry). Run module destructors
-; Back from main (This is also the _exit entry). Reset the IRQ vector if we
-; chained it.
+_exit: jsr donelib
-_exit: pha ; Save the return code on stack
- lda #<__IRQFUNC_COUNT__
+
+; Reset the IRQ vector if we chained it.
+
+ pha ; Save the return code on stack
+ lda #<__INTERRUPTOR_COUNT__
beq NoIRQ2
lda IRQInd+1
ldx IRQInd+2
stx IRQVec+1
cli
-; Run module destructors
-
-NoIRQ2: jsr donelib
-
; Copy back the zero page stuff
- ldx #zpspace-1
+NoIRQ2: ldx #zpspace-1
L2: lda zpsave,x
sta sp,x
dex
.data
-zpsave: .res zpspace
IRQInd: jmp $0000
+.segment "ZPSAVE"
+
+zpsave: .res zpspace
+
.bss
spsave: .res 1