;
; Startup code for cc65 (CBM 500 version)
-;
-; This must be the *first* file on the linker command line
;
.export _exit
+ .export __STARTUP__ : absolute = 1 ; Mark as startup
- .import _clrscr, initlib, donelib, condes
+ .import _clrscr, initlib, donelib, callirq_y
.import push0, callmain
.import __CHARRAM_START__, __CHARRAM_SIZE__, __VIDRAM_START__
.import __BSS_RUN__, __BSS_SIZE__, __EXTZP_RUN__
- .import __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
+ .import __INTERRUPTOR_COUNT__
.import scnkey, UDTIM
.include "zeropage.inc"
lda ExecReg
sta IndReg
-; Call module constructors, enable chained IRQs afterwards.
+; Activate chained interrupt handlers, then enable interrupts.
- jsr initlib
- lda #.lobyte(__IRQFUNC_COUNT__*2)
+ lda #.lobyte(__INTERRUPTOR_COUNT__*2)
sta irqcount
+ cli
-; Enable interrupts
+; Call module constructors.
- cli
+ jsr initlib
; Push arguments and call main()
; point for the break vector.
_exit: pha ; Save the return code on stack
+ jsr donelib ; Run module destructors
lda #$00
sta irqcount ; Disable custom irq handlers
- jsr donelib ; Run module destructors
; Address the system bank
; Place the program return code into ST
pla
- ldy #ST
+ ldy #$9C ; ST
sta (sysp0),y
; Setup the welcome code at the stack bottom in the system bank.
ldy irqcount
beq irqskip
- lda #<__IRQFUNC_TABLE__
- ldx #>__IRQFUNC_TABLE__
- jsr condes ; Call the functions
+ jsr callirq_y ; Call the functions
; Done with chained IRQ handlers, check the TPI for IRQs and handle them