aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-10-05 12:02:12 -0400
committerJesse Luehrs <doy@tozt.net>2014-10-05 12:02:12 -0400
commite41acefb3a71bfa430768b8f0766ba150137a748 (patch)
tree20480fbcad3ef90e33d8f86679f6d56d5836f788
parent116e5ded0bccd65c18b4a3b3d34cd7dbdec1bc53 (diff)
downloadnes-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.s48
1 files changed, 19 insertions, 29 deletions
diff --git a/snake.s b/snake.s
index a25674b..58665ba 100644
--- a/snake.s
+++ b/snake.s
@@ -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