view controller.s16 @ 35:5a5e02d1acf1

No need to initialize name table with starting values other than zero as we copy the relevant parts during VBlank anyway
author Michael Pavone <pavone@retrodev.com>
date Sun, 03 Apr 2016 20:51:23 -0700
parents 4a093f15fb1b
children 44c057a640b2
line wrap: on
line source

	ldim vectors, r0
	ldimh vectors, r0
	setvbr r0
	;load palette
	ldim 0, r0
	ldimh $FF,r0
	outi $E, r0
	ldim colors, r1
	ldimh colors, r1
	
	;copy 3 colors for 1st palette
	ldim 0, r2
	ldim 3, r3
	ldim copy_data, r12
	ldimh copy_data, r12
	call r12, r13
	
	;setup writes to 2nd palette
	ldim $20, r0
	ldimh $FF,r0
	outi $E, r0
	
	;copy 3 colors for 2nd palette
	ldim 3, r3	
	call r12, r13
	
	
	;zero out name table
	ldim $00, r0
	ldim $60, r0
	outi $E, r0
	
	ldim write_zeros, r11
	ldimh write_zeros, r11
	ldim 0, r3
	ldimh $20, r3
	call r11, r13
	
	;setup writes to tile data area
	ldim 0, r0
	outi $E, r0
	
	;zero out first tile
	ldim $10, r3
	call r11, r13
	
	;copy tiles
	ldim $C0, r3
	ldimh 0, r3
	call r12, r13
	
	
	
	;copy tile map to ram
	ldim 0, r0
	ldimh $C0, r0
	
	ldim map, r1
	ldimh map, r1
	
	ldim 0, r2
	ldim 27, r3
	
	ldim memcpy16, r10
	ldimh memcpy16, r10
	call r10, r13
	
	;enable vertical interrupts
	ori 2, sr
	
	;vscroll reg
	ldim 0, r0
	ldimh $C6, r0
	outi $C, r0
	;hscroll reg + enable display
	ldim 0, r0
	ldimh $80, r0
	outi $D, r0
	
forever:
	bra forever
	
copy_data:
	ld16 r1, r2, r4
	outi $F, r4
	
	addi 2, r2
	addi -1, r3
	bne copy_data
	mov r13, pc
	
memcpy16:
	ld16 r1, r2, r4
	str16 r0, r2, r4
	
	addi 2, r2
	addi -1, r3
	bne memcpy16
	mov r13, pc
	
write_zeros:
	ldim 0, r4
zloop:
	outi $f, r4
	
	addi -1, r3
	bne zloop
	mov r13, pc

	

vectors:
	dc.w 0
	dc.w vint_handler
	
vint_handler
	setuer r13
	;handler code goes here
	
	;setup writes to first element of diagram
	ldim $84, r0
	ldimh $60, r0
	outi $E, r0
	
	;copy first row of updated tile map
	ldim 0, r1
	ldimh $C0, r1
	ldim 0, r2
	ldim 9, r3
	call r12, r13
	
	;setup writes to second row of diagram
	ldim $04, r0
	ldimh $61, r0
	outi $E, r0
	;copy second row
	ldim 9, r3
	call r12, r13
	
	;setup writes to third row of diagram
	ldim $84, r0
	ldimh $61, r0
	outi $E, r0
	;copy third row
	ldim 9, r3
	call r12, r13
	
	;update map for next frame
	
	;read controller 1
	ini $0, r0
	;r1 = map
	ldim offsets, r2
	ldimh offsets, r2
	;index
	ldim 0, r3
	;mask to test bits
	ldim 1, r4
	;constant $2000
	ldim 0, r9
	ldimh $20, r9
	;limit
	ldim 12, r5
modify_loop
	;load offset
	ld8 r2, r3, r6
	;load existing value
	ld16 r1, r6, r7
	;test for button pressed
	and r0, r4, r8
	beq not_pressed
	or r9, r7, r7
	bra store_modified
not_pressed
	not r9, r9
	and r9, r7, r7
	not r9, r9
store_modified
	str16 r1, r6, r7
	;shift mask to the left
	add r4, r4, r4
	addi 1, r3
	cmp r3, r5
	bne modify_loop
	
	
	reti r13
	
offsets:
	dc.b 34 ;Z
	dc.b 32 ;Y
	dc.b 30 ;X
	dc.b 52 ;C
	dc.b 50 ;B
	dc.b 48 ;A
	dc.b 44 ;Mode
	dc.b 26 ;Start
	
	dc.b 22 ;Right
	dc.b 18 ;Left
	dc.b 38 ;Down
	dc.b 2   ;Up
	
colors:
	dc.w $000
	dc.w $777
	dc.w $333
	;second palette
	dc.w $000
	dc.w $FFF
	dc.w $00F
tiles:
	incbin buttons.tiles
map:
	dc.w 0, 1, 0, 0, 0, 0, 0,  0,  0
	dc.w 3, 0, 4, 0, 5, 0, 7,  8,  9
	dc.w 0, 2, 0, 0, 6, 0, 10, 11, 12