diff vint.s16 @ 26:083347ccd508

Implemented vblank interrupts and fixed a bug in exception vector address calculation
author Michael Pavone <pavone@retrodev.com>
date Fri, 01 Apr 2016 21:34:38 -0700
parents
children 03177ff78094
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vint.s16	Fri Apr 01 21:34:38 2016 -0700
@@ -0,0 +1,55 @@
+	ldim vectors, r0
+	setvbr r0
+	;current color value
+	ldim 0, r0
+	;color increment
+	ldim $11, r3
+	ldimh $1, r3
+	;color max
+	ldim $FF, r5
+	ldimh $F, r5
+	;counter
+	ldim 1, r4
+	;Palette RAM address
+	ldim 0, r1
+	ldimh $FF, r1
+	;enable interrupt
+	ori 2, sr
+	;enable display
+	ldim 0, r2
+	ldimh $80, r2
+	outi $D, r2
+wait
+	bra wait
+	;shouldn't get here, disable display so it's clear something broke
+	ldimh $0, r2
+	outi $D, r2
+	bra wait
+
+vectors:
+	dc.w 0
+	dc.w vint_handler
+	
+vint_handler
+	addi -1, r4
+	bne done
+	outi $E, r1
+	outi $F, r0
+	cmp r0, r5
+	beq down
+resume
+	add r3, r0, r0
+	beq up
+	ldim 5, r4
+done
+	reti r13
+down
+	ldim $EF, r3
+	ldimh $FE, r3
+	bra resume
+up
+	ldim $11, r3
+	ldimh $1, r3
+	ldim 5, r4
+	reti r13
+	
\ No newline at end of file