diff --git a/asminc/atmos.inc b/asminc/atmos.inc
index dfbcd10de..446f2e11c 100644
--- a/asminc/atmos.inc
+++ b/asminc/atmos.inc
@@ -12,6 +12,7 @@
 ; Low memory
 
 CAPSLOCK        := $20C
+IRQVec          := $245
 CURS_Y          := $268
 CURS_X          := $269
 STATUS          := $26A
diff --git a/libsrc/atmos/crt0.s b/libsrc/atmos/crt0.s
index 1f5bcd568..5a5d0852a 100644
--- a/libsrc/atmos/crt0.s
+++ b/libsrc/atmos/crt0.s
@@ -7,7 +7,8 @@
 	.export		_exit
 	.export		__STARTUP__ : absolute = 1	; Mark as startup
 	.import		initlib, donelib
-	.import		callmain, zerobss
+	.import		callmain, zerobss, callirq
+	.import		__INTERRUPTOR_COUNT__
 	.import		__RAM_START__, __RAM_SIZE__
 	.import		__ZPSAVE_LOAD__, __STACKSIZE__
 
@@ -69,9 +70,24 @@ L1:	lda	sp,x
 	lda	#>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
 	sta	sp+1		; Set argument stack ptr
 
+; If we have IRQ functions, chain our stub into the IRQ vector
+
+	lda	#<__INTERRUPTOR_COUNT__
+	beq	NoIRQ1
+	lda	IRQVec
+	ldx	IRQVec+1
+	sta	IRQInd+1
+	stx	IRQInd+2
+	lda	#<IRQStub
+	ldx	#>IRQStub
+	sei
+	sta	IRQVec
+	stx	IRQVec+1
+	cli
+
 ; Call module constructors
 
-	jsr	initlib
+NoIRQ1: jsr	initlib
 
 ; Push arguments and call main()
 
@@ -81,9 +97,21 @@ L1:	lda	sp,x
 
 _exit:	jsr	donelib		; Run module destructors
 
+; 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
+	sei
+	sta	IRQVec
+	stx	IRQVec+1
+	cli
+
 ; Restore system stuff
 
-	ldx	spsave
+NoIRQ2: ldx	spsave
 	txs
 	lda	stsave
 	sta	STATUS
@@ -100,13 +128,26 @@ L2:	lda	zpsave,x
 
 	rts
 
+; ------------------------------------------------------------------------
+; 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
+
+IRQInd: jmp	$0000
+
 .segment	"ZPSAVE"
 
 zpsave: .res	zpspace
 
 .bss
+
 spsave: .res	1
 stsave: .res	1