This commit is contained in:
matej 2025-11-03 11:31:52 +01:00
parent b49a08b327
commit e021590fa6

View file

@ -6,10 +6,15 @@
. .
. keyboard settings: . keyboard settings:
. Address: 0x00C000 . Address: 0x00C000
.
. frequency: 4000
SNAKE START 0 SNAKE START 0
FIRST JSUB RENDER FIRST CLEAR A
LOOP JSUB RENDER
JSUB WAIT
.if (food was eaten) temp = snake[LEN - 1], generate new food: .if (food was eaten) temp = snake[LEN - 1], generate new food:
@ -18,47 +23,62 @@ FIRST JSUB RENDER
.if (eaten) LEN++, snake[LEN - 1] = temp .if (eaten) LEN++, snake[LEN - 1] = temp
LDA @KEY_IN CLEAR A
COMP #0x41 .A LDCH @KEY_IN
JEQ LEFT
L10 COMP #0x41 .A
JEQ L3
COMP #0x57 .W COMP #0x57 .W
JEQ UP JEQ L4
COMP #0x44 .D COMP #0x44 .D
JEQ RIGHT JEQ L5
COMP #0x53 .S COMP #0x53 .S
JEQ DOWN JEQ L6
L3 RMO A, X .make horizontal move LDCH DIREC
LDA @SNAKEX J L10
ADDR X, A
L3 STCH DIREC
LDA @SNAKEX .move left
SUB #1
STA @SNAKEX STA @SNAKEX
J L5 J L7
L4 RMO A, X .make vertical move L4 STCH DIREC
LDA @SNAKEY LDA @SNAKEY .move up
ADDR X, A SUB #1
STA @SNAKEY
J L7
L5 STCH DIREC
LDA @SNAKEX .move right
ADD #1
STA @SNAKEX
J L7
L6 STCH DIREC
LDA @SNAKEY .move down
ADD #1
STA @SNAKEY STA @SNAKEY
L5 .check bounds L7 .check bounds
.for (pos : snakex/y) assert x/y >= 0 && x/y <= 15 .for (pos : snakex/y) assert x/y >= 0 && x/y <= 15
J FIRST JSUB RENDER
J LOOP
HALT J HALT HALT J HALT
.store direction .waits some time before reading input so it doesnt feel laggy
LEFT LDA #-1 .no arguements, no return
STA DIREC .changes A, X
J L3 WAIT LDA #0
UP LDA #-0x10 LDX #0xA0
STA DIREC L8 ADD #1
J L4 COMPR A, X
RIGHT LDA #1 JEQ L9
STA DIREC J L8
J L3 L9 RSUB
DOWN LDA #0x10
STA DIREC
J L4
.draws the snake .draws the snake
.no arguements, no return .no arguements, no return
@ -138,7 +158,7 @@ POP LDA ST_PTR
LDA @ST_PTR LDA @ST_PTR
RSUB RSUB
LEN WORD 0 .snake length LEN WORD 1 .snake length
SCREEN WORD X'00A000' .screen pointer SCREEN WORD X'00A000' .screen pointer
KEY_IN WORD X'00C000' .input pointer KEY_IN WORD X'00C000' .input pointer
ST_PTR WORD X'000200' .stack pointer, 2kB of space ST_PTR WORD X'000200' .stack pointer, 2kB of space