Mercurial > repos > simple16
view controller.s16 @ 54:bce01001a8c1
Fix some bugs in memory access related to the changes for teh 23-bit address space
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 31 Aug 2016 22:40:17 -0700 |
parents | 44c057a640b2 |
children |
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 ;make a second copy of tile map for controller #2 ldim $36, r0 ldimh $C0, r0 ldim 0, r2 ldim 27, r3 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 ;VRAM address of first element of diagram ldim $84, r0 ldimh $60, r0 ;distance between rows ldim 128, r5 ldimh 0, r5 ;RAM address of map ldim 0, r1 ldimh $C0, r1 ;index ldim 0, r2 ;iteration count ldim 3, r6 ldim copy_rows, r9 ldimh copy_rows, r9 call r9, r8 ;VRAM address of first element of 2nd diagram ldim $AC, r0 ldimh $60, r0 ldim 3, r6 call r9, r8 ;update map for next frame ;read controller 1 ini $0, r0 ;r1 = map ldim update_map, r10 ldimh update_map, r10 call r10, r10 ;read controller 2 ini $1, r0 ldim $36, r1 ldimh $C0, r1 ldim update_map, r10 ldimh update_map, r10 call r10, r10 reti r13 update_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 mov r10, pc copy_rows outi $E, r0 ;copy row of updated tile map ldim 9, r3 call r12, r13 add r5, r0, r0 addi -1, r6 bne copy_rows mov r8, pc 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