aboutsummaryrefslogtreecommitdiffstats
path: root/snake.s
diff options
context:
space:
mode:
Diffstat (limited to 'snake.s')
-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