diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-10-05 12:02:12 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-10-05 12:02:12 -0400 |
commit | e41acefb3a71bfa430768b8f0766ba150137a748 (patch) | |
tree | 20480fbcad3ef90e33d8f86679f6d56d5836f788 | |
parent | 116e5ded0bccd65c18b4a3b3d34cd7dbdec1bc53 (diff) | |
download | nes-snake-e41acefb3a71bfa430768b8f0766ba150137a748.tar.gz nes-snake-e41acefb3a71bfa430768b8f0766ba150137a748.zip |
optimize snake movement a bit
do some bit fiddling rather than a case statement
-rw-r--r-- | snake.s | 48 |
1 files changed, 19 insertions, 29 deletions
@@ -164,35 +164,25 @@ handle_frame: LDA #$00 STA frame_count - LDA #$00 - CMP direction - BEQ go_up - LDA #$01 - CMP direction - BEQ go_down - LDA #$02 - CMP direction - BEQ go_left - -go_right: - LDA head_x - ADC #$08 - STA head_x - JMP draw_snake -go_up: - LDA head_y - SBC #$08 - STA head_y - JMP draw_snake -go_down: - LDA head_y - ADC #$08 - STA head_y - JMP draw_snake -go_left: - LDA head_x - SBC #$08 - STA head_x +set_offset: + LDX #$F8 ; i.e., -8 + LDA direction + AND #%00000001 ; low bit determines negative or positive + BEQ set_axis + LDX #$08 + +set_axis: + LDY #$01 + LDA direction + AND #%00000010 ; high bit determines which axis to change + BEQ apply_direction + LDY #$00 + +apply_direction: + TXA + CLC + ADC head_x, y ; head_x offset by 1 is head_y + STA head_x, y draw_snake: LDA head_y |