diff --git a/mato8.asm b/mato8.asm index 50f2a0e..94b4146 100644 --- a/mato8.asm +++ b/mato8.asm @@ -16,6 +16,8 @@ define direction_down 6 define direction_left 12 define direction_right 18 +define score_high_reg v5 +define score_low_reg v6 define game_over_reg v7 define fruit_x_reg v8 define fruit_y_reg v9 @@ -29,6 +31,9 @@ start: cls ld game_over_reg, 0 + ld score_high_reg, 0 + ld score_low_reg, 0 + rnd head_x_reg, 63 rnd head_y_reg, 31 @@ -80,6 +85,8 @@ game_over: ld st, v0 call wait + call display_score + ld v0, 30 call wait @@ -96,6 +103,42 @@ game_over: jp start +display_score: + cls + + ld i, score_high_bcd + ld b, score_high_reg + ld i, score_low_bcd + ld b, score_low_reg + + ld i, score_low_bcd + ld v2, [i] + ; v0 and v1 are zero, v2 is ones + ld v3, v2 + ld i, score_high_bcd + ld v2, [i] + ; v0 is thousands, v1 is hundreds, v2 is tens + + ; Score is a four-digit number stored in v0 to v3 + ld v4, 0 + ld v5, 0 + ld f, v0 + drw v4, v5, 5 + + add v4, 5 + ld f, v1 + drw v4, v5, 5 + + add v4, 5 + ld f, v2 + drw v4, v5, 5 + + add v4, 5 + ld f, v3 + drw v4, v5, 5 + + ret + wait: ld dt, v0 wait_loop: @@ -261,6 +304,8 @@ collision: eat_fruit: ; Jumping to collision skips tail moving code, so we get the snake ; lengthening for free + call increment_score + ld v0, 1 ld st, v0 @@ -268,8 +313,19 @@ eat_fruit: drw fruit_x_reg, fruit_y_reg, 1 jp spawn_fruit +increment_score: + ; Low register stores 0…9 + add score_low_reg, 1 + se score_low_reg, 10 + ret + ld score_low_reg, 0 + add score_high_reg, 1 + ret + tail_collision: ld game_over_reg, 1 ret single_pixel: db #80 +score_high_bcd: db 0, 0, 0 +score_low_bcd: db 0, 0, 0