view pic8bpp.s16 @ 56:fa9cf7108ab7

Add 8bpp picture example
author Michael Pavone <pavone@retrodev.com>
date Wed, 31 Aug 2016 23:50:20 -0700
parents
children
line wrap: on
line source

	;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