changed screen size
This commit is contained in:
parent
a0ce660f14
commit
b49a08b327
1 changed files with 130 additions and 82 deletions
|
|
@ -1,102 +1,150 @@
|
|||
. graphical screen settings:
|
||||
. Address: 0x00A000
|
||||
. Columns: 16
|
||||
. Rows: 16
|
||||
. Pixel size: 24
|
||||
.
|
||||
. keyboard settings:
|
||||
. Address: 0x00C000
|
||||
|
||||
SNAKE START 0
|
||||
|
||||
FIRST LDS #255
|
||||
LDA G_SCRN
|
||||
STA @CURSCR
|
||||
STA @SVEC
|
||||
LOOP JSUB DRAW
|
||||
ADD #4
|
||||
STA @SVEC
|
||||
J LOOP
|
||||
FIRST JSUB RENDER
|
||||
|
||||
.if (food was eaten) temp = snake[LEN - 1], generate new food:
|
||||
|
||||
.propagate position through the snake
|
||||
.for (i = LEN - 2, i >= 0 ) snakex/y[i + 1] = snakex/y[i]
|
||||
|
||||
.if (eaten) LEN++, snake[LEN - 1] = temp
|
||||
|
||||
LDA @KEY_IN
|
||||
COMP #0x41 .A
|
||||
JEQ LEFT
|
||||
COMP #0x57 .W
|
||||
JEQ UP
|
||||
COMP #0x44 .D
|
||||
JEQ RIGHT
|
||||
COMP #0x53 .S
|
||||
JEQ DOWN
|
||||
|
||||
L3 RMO A, X .make horizontal move
|
||||
LDA @SNAKEX
|
||||
ADDR X, A
|
||||
STA @SNAKEX
|
||||
J L5
|
||||
|
||||
L4 RMO A, X .make vertical move
|
||||
LDA @SNAKEY
|
||||
ADDR X, A
|
||||
STA @SNAKEY
|
||||
|
||||
L5 .check bounds
|
||||
.for (pos : snakex/y) assert x/y >= 0 && x/y <= 15
|
||||
|
||||
J FIRST
|
||||
|
||||
HALT J HALT
|
||||
|
||||
DRAW JSUB PUSH
|
||||
.store direction
|
||||
LEFT LDA #-1
|
||||
STA DIREC
|
||||
J L3
|
||||
UP LDA #-0x10
|
||||
STA DIREC
|
||||
J L4
|
||||
RIGHT LDA #1
|
||||
STA DIREC
|
||||
J L3
|
||||
DOWN LDA #0x10
|
||||
STA DIREC
|
||||
J L4
|
||||
|
||||
.draws the snake
|
||||
.no arguements, no return
|
||||
.changes A
|
||||
RENDER RMO L, A
|
||||
JSUB PUSH .prolouge
|
||||
RMO X, A
|
||||
JSUB PUSH
|
||||
RMO T, A
|
||||
JSUB PUSH
|
||||
RMO S, A
|
||||
JSUB PUSH
|
||||
|
||||
LDA #0 .COUNTER
|
||||
LDT @OFFSET
|
||||
STRT COMP @LEN
|
||||
JEQ END
|
||||
|
||||
JSUB PUSH
|
||||
LDA SVEC
|
||||
ADD @OFFSET
|
||||
STA ADDR
|
||||
LDA @ADDR
|
||||
STA @BASEY
|
||||
|
||||
CLEAR A
|
||||
|
||||
LOOP1 COMP FOUR
|
||||
JEQ LEND
|
||||
LDS @BASE
|
||||
MUL #64
|
||||
ADDR A, S
|
||||
DIV #64
|
||||
STS @BASEY
|
||||
JSUB PUSH
|
||||
CLEAR X .draw head
|
||||
JSUB OFFSET
|
||||
ADD SCREEN
|
||||
STA ADR
|
||||
CLEAR A
|
||||
LDCH #240
|
||||
STCH @ADR
|
||||
|
||||
LOOP2 COMP FOUR
|
||||
JEQ LEND2
|
||||
LDS @BASEY
|
||||
ADDR A, S
|
||||
STS @CUR
|
||||
|
||||
LDS #255
|
||||
STS @CUR
|
||||
|
||||
L1 RMO X, A .draw others
|
||||
ADD #1
|
||||
J LOOP2
|
||||
|
||||
LEND2 JSUB POP
|
||||
ADD #1
|
||||
J LOOP1
|
||||
|
||||
LEND JSUB POP
|
||||
ADD #1
|
||||
JSUB PUSH
|
||||
LDA #3
|
||||
ADDR A, T
|
||||
JSUB POP
|
||||
J STRT
|
||||
|
||||
END JSUB POP
|
||||
RMO A, T
|
||||
JSUB POP
|
||||
RMO A, S
|
||||
JSUB POP
|
||||
RSUB
|
||||
RMO A, X
|
||||
|
||||
COMP LEN
|
||||
JEQ L2
|
||||
|
||||
PUSH STA @S_PTR
|
||||
LDA S_PTR
|
||||
JSUB OFFSET
|
||||
ADD SCREEN
|
||||
STA ADR
|
||||
CLEAR A
|
||||
LDCH #255
|
||||
STA @ADR
|
||||
|
||||
J L1
|
||||
|
||||
L2 JSUB POP .epilouge
|
||||
RMO A, T
|
||||
JSUB POP
|
||||
RMO A, X
|
||||
JSUB POP
|
||||
RMO A, L
|
||||
RSUB
|
||||
|
||||
.calculates the offset of the snake cell at index X for rendering
|
||||
.offset = 16 * snakey[index] + snakex[index]
|
||||
.arguements: X - index
|
||||
.return: A - offset
|
||||
.changes A, T
|
||||
OFFSET RMO X, A
|
||||
MUL #3
|
||||
ADD SNAKEY
|
||||
STA ADR
|
||||
LDA @ADR
|
||||
MUL #16
|
||||
RMO A, T
|
||||
|
||||
RMO X, A
|
||||
MUL #3
|
||||
ADD SNAKEX
|
||||
STA ADR
|
||||
LDA @ADR
|
||||
ADDR T, A
|
||||
RSUB
|
||||
|
||||
.pushes A to stack
|
||||
.changes A
|
||||
PUSH STA @ST_PTR
|
||||
LDA ST_PTR
|
||||
ADD #3
|
||||
STA S_PTR
|
||||
STA ST_PTR
|
||||
RSUB
|
||||
|
||||
POP LDA S_PTR
|
||||
.pops top of stack into A
|
||||
POP LDA ST_PTR
|
||||
SUB #3
|
||||
STA S_PTR
|
||||
LDA @S_PTR
|
||||
STA ST_PTR
|
||||
LDA @ST_PTR
|
||||
RSUB
|
||||
|
||||
FOUR WORD X'000004'
|
||||
ADDR WORD X'000000'
|
||||
CUR WORD X'000000'
|
||||
BASE WORD X'000000'
|
||||
BASEY WORD X'000000'
|
||||
LEN WORD X'000000'
|
||||
G_SCRN WORD X'00A000'
|
||||
CURSCR WORD X'000000'
|
||||
KEY_IN WORD X'00C000'
|
||||
S_PTR WORD X'000100'
|
||||
SVEC WORD X'001000'
|
||||
SVECMV WORD X'003000'
|
||||
OFFSET WORD X'000000'
|
||||
LEN WORD 0 .snake length
|
||||
SCREEN WORD X'00A000' .screen pointer
|
||||
KEY_IN WORD X'00C000' .input pointer
|
||||
ST_PTR WORD X'000200' .stack pointer, 2kB of space
|
||||
SNAKEX WORD X'000A00' .pointer to an array of snake x coords, first input is head, SNAKEX + LEN is tail, 3 byte elements, upper left corner is 0, 0
|
||||
SNAKEY WORD X'000C00' .pointer to an array of snake y coords, offset 0x200 from SNAKEX
|
||||
ADR WORD 0 .actual address of the x / y coord since sic/xe doesnt support indirect and indexed addressing
|
||||
DIREC WORD 0 .movement direction, gets added to snake's head
|
||||
|
||||
END FIRST
|
||||
END FIRST
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue