Mercurial > repos > simple16
view controller.s16 @ 36:5683d9ba9acc
Fix call instruction for the case in which A reg == DST reg
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 03 Apr 2016 21:27:03 -0700 |
parents | 5a5e02d1acf1 |
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