From 463712217c7cfa64414da8d964fb24de0e7e78cd Mon Sep 17 00:00:00 2001 From: cuz Date: Tue, 26 Oct 2004 19:44:30 +0000 Subject: [PATCH] Add interrupt handling code from Stefan Haubenthal git-svn-id: svn://svn.cc65.org/cc65/trunk@3264 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/vic20/crt0.s | 48 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/libsrc/vic20/crt0.s b/libsrc/vic20/crt0.s index a0425cee7..81a9c025d 100644 --- a/libsrc/vic20/crt0.s +++ b/libsrc/vic20/crt0.s @@ -5,15 +5,15 @@ ; .export _exit - .import initlib, donelib + .import initlib, donelib, callirq .import zerobss, push0 .import callmain .import RESTOR, BSOUT, CLRCH + .import __IRQFUNC_COUNT__ .import __RAM_START__, __RAM_SIZE__ ; Linker generated .include "zeropage.inc" .include "vic20.inc" - .include "../cbm/cbm.inc" ; ------------------------------------------------------------------------ ; Place the startup code in a special segment. @@ -70,14 +70,41 @@ L1: lda sp,x jsr initlib +; If we have IRQ functions, chain our stub into the IRQ vector + + lda #<__IRQFUNC_COUNT__ + beq NoIRQ1 + lda IRQVec + ldx IRQVec+1 + sta IRQInd+1 + stx IRQInd+2 + lda #IRQStub + sei + sta IRQVec + stx IRQVec+1 + cli + ; Push arguments and call main() - jsr callmain +NoIRQ1: jsr callmain + +; Back from main (This is also the _exit entry). Reset the IRQ vector if we +; chained it. + +_exit: pha ; Save the return code on stack + lda #<__IRQFUNC_COUNT__ + beq NoIRQ2 + lda IRQInd+1 + ldx IRQInd+2 + sei + sta IRQVec + stx IRQVec+1 + cli -; Call module destructors. This is also the _exit entry. +; Run module destructors -_exit: pha ; Save the return code on stack - jsr donelib ; Run module destructors +NoIRQ2: jsr donelib ; Copy back the zero page stuff @@ -102,12 +129,21 @@ L2: lda zpsave,x jmp RESTOR +; ------------------------------------------------------------------------ +; The IRQ vector jumps here, if condes routines are defined with type 2. + +IRQStub: + cld ; Just to be sure + jsr callirq ; Call the functions + jmp IRQInd ; Jump to the saved IRQ vector + ; ------------------------------------------------------------------------ ; Data .data zpsave: .res zpspace +IRQInd: jmp $0000 .bss -- 2.39.5