changeset 56:fa9cf7108ab7

Add 8bpp picture example
author Michael Pavone <pavone@retrodev.com>
date Wed, 31 Aug 2016 23:50:20 -0700
parents f9846719aa26
children c44170825b16
files fish.raw pic8bpp.s16
diffstat 2 files changed, 84 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file fish.raw has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pic8bpp.s16	Wed Aug 31 23:50:20 2016 -0700
@@ -0,0 +1,84 @@
+	;high databank points to ROM, low databank poits to VRAM
+	ldim 0, db
+	ldimh $E0, db
+
+	;load address of image in r1
+	ldim image, r1
+	ldimh image, r1
+	ldim 0, r2
+	ldimh $80, r2
+	add r2, r1, r1
+	
+	;VRAM offset, this allows the 204 pixel display to be centered on 32K point
+	ldim $80, r3
+	ldimh 0, r3
+	;set display offset register
+	outi $C, r3
+	
+	;zero reg, for use in loads and stores
+	ldim 0, r0
+	
+	
+	;copy palette
+	ld16 r1, r0, r4
+	addi 2, r1
+	mov r4, r5
+	ldimh 0, r5
+	outi $E, r5
+pal_loop
+	ld16 r1, r0, r5
+	addi 2, r1
+	outi $E, r5
+	addi -1, r4
+	bne pal_loop
+	
+	;copy first 102 lines
+	;r4 = 320 * 102
+	ldim $80, r4
+	ldimh $7F, r4
+copy_loop:
+	ld8 r1, r0, r5
+	str8 r3, r0, r5
+	addi 1, r1
+	bcc no_adjust
+	;we've hit the end of the upper data bank, adjust it and reset r1 to point to begining of bank
+	addi 1, db
+	ldim 0, r1
+	ldimh $80, r1 
+no_adjust
+	addi 1, r3
+	addi -1, r4
+	bne copy_loop
+	
+	;r4 = 320 * 102
+	ldim $80, r4
+	ldimh $7F, r4
+	
+	;point lower bank at second half of frame buffer
+	ldimh $E1, db
+	;reset framebuffer pointer
+	ldim 0, r3
+copy_loop2:
+	ld8 r1, r0, r5
+	str8 r3, r0, r5
+	addi 1, r1
+	bcc no_adjust2
+	;we've hit the end of the upper data bank, adjust it and reset r1 to point to begining of bank
+	addi 1, db
+	ldim 0, r1
+	ldimh $80, r1 
+no_adjust2
+	addi 1, r3
+	addi -1, r4
+	bne copy_loop2
+	
+	;enable display/set mode/flip buffer
+	ldim $A5, r5
+	ldimh $C4, r5
+	outi $D, r5
+	
+forever:
+	bra forever
+
+image:
+	incbin fish.raw
\ No newline at end of file