it kind of works

This commit is contained in:
~d6 2022-01-19 01:00:49 -05:00
parent 9db3b38e46
commit 4ec4a0a75e
1 changed files with 47 additions and 20 deletions

View File

@ -24,10 +24,11 @@
%ROWS { #0027 } ( rows of cells )
%COLS { #003f } ( columns of cells )
%MAZEROWS { ROWS #0003 SUB2 #0002 DIV2 }
%MAZECOLS { COLS #0003 SUB2 #0002 DIV2 }
( %MAZEROWS { ROWS INC2 #0002 DIV2 }
%MAZECOLS { COLS INC2 #0002 DIV2 } )
%CELLS { ROWS COLS MUL2 }
( %MAZEROWS { ROWS #0003 SUB2 #0002 DIV2 }
%MAZECOLS { COLS #0003 SUB2 #0002 DIV2 } )
%MAZEROWS { ROWS INC2 #0002 DIV2 }
%MAZECOLS { COLS INC2 #0002 DIV2 }
%NORTH { COLS NEGATE2 }
%EAST { #0001 }
%SOUTH { COLS }
@ -39,7 +40,8 @@
%XSTORE { ROT ROT STORE } ( cell* val -> )
%IS-OPEN { LOAD #01 AND }
%UNSEEN { LOAD #02 AND #00 EQU } ( cell* -> bool^ )
%PATH { ADD2 #0002 DIV2 } ( cell1* cell2* -> cell3* )
( %PATH { ADD2 #0002 DIV2 } ( cell1* cell2* -> cell3* ) )
%PATH { ADD2 #01 SFT2 } ( cell1* cell2* -> cell3* )
%DIGIT { #00 SWP ;digits ADD2 LDA EMIT }
%EMIT-BYTE { DUP #04 SFT DIGIT #0f AND DIGIT }
@ -118,7 +120,7 @@
;clear-maze JSR2
( we mark the border as having been seen to simplify bounds checking )
;mark-border JSR2
( ;mark-border JSR2 )
( generate the maze )
;create-maze JSR2
@ -144,7 +146,7 @@ BRK
( if regenerate was true, then create a new maze )
#00 .regenerate STZ
;clear-maze JSR2
;mark-border JSR2
( ;mark-border JSR2 )
;create-maze JSR2
;create-exits JSR2
;draw-maze JSR2
@ -275,6 +277,7 @@ RTN
#01 XSTORE SOUTH ADD2 #01 XSTORE
RTN
( initialize the entire maze memory to 0 values )
@clear-maze ( -> )
ROWS COLS MUL2 ( limit* )
#0000 #0000 CELL ( limit* cell* )
@ -287,20 +290,42 @@ RTN
( a move is illegal if it changes both x and y. )
( that occurs when the player wraps around the border. )
@illegal-move ( cell* -> bool^ )
DUP2 CELLS LTH2 ,&inbounds JCN POP2 #01 RTN
&inbounds
DUP2
DUP2
COLS MOD2 ;focus LDA2 COLS MOD2 NEQ2 STH
ROWS DIV2 ;focus LDA2 ROWS DIV2 NEQ2 STHr
COLS DIV2 ;focus LDA2 COLS DIV2 NEQ2 STHr
AND
RTN
STHk #20 ADD EMIT SPACE EMIT-SHORT SPACE ;focus LDA2 EMIT-SHORT NEWLINE STHr
RTN
@log-focus
EMIT SPACE ;focus LDA2 EMIT-SHORT NEWLINE RTN
@xstore
ROT ROT STORE RTN
@is-unseen ( cell* -> bool^ )
DUP2
LOAD
DUP EMIT-BYTE SPACE
#02 AND #00 EQU
STHk #30 ADD EMIT SPACE EMIT-SHORT NEWLINE STHr
RTN
@create-maze ( -> )
( create starting pt, must have even coords )
;random-short JSR2 MAZEROWS MOD2 INC2 #0002 MUL2 ( row* )
;random-short JSR2 MAZECOLS MOD2 INC2 #0002 MUL2 ( row* col* )
( ;random-short JSR2 MAZEROWS MOD2 INC2 #0002 MUL2 ( row* )
;random-short JSR2 MAZECOLS MOD2 INC2 #0002 MUL2 ( row* col* ) )
( ;random-short JSR2 MAZEROWS MOD2 #0002 MUL2 ( row* )
;random-short JSR2 MAZECOLS MOD2 #0002 MUL2 ( row* col* ) )
#0000 #0000
CELL DUP2 ;focus STA2 ( cell* )
#07 XSTORE ( )
&queue ( )
#3f ;log-focus JSR2
;shuffle-directions JSR2 ( )
#00 ( i^ )
@ -309,7 +334,7 @@ RTN
DUP #02 MUL .cell-offsets ADD LDZ2 ( i^ d^ off* )
DUP2 ;focus LDA2 ADD2 ADD2 ( i^ d^ cell2* )
DUP2 ;illegal-move JSR2 ,&notfound JCN
DUP2 UNSEEN ( i^ d^ cell2* unseen^ )
DUP2 ;is-unseen JSR2 ( i^ d^ cell2* unseen^ )
,&found JCN ( i^ d^ cell2* )
&notfound
POP2 POP INC ( j=i+1 )
@ -317,13 +342,14 @@ RTN
,&search JCN ( j^ )
POP ( )
,&backtrack JMP ( )
,&done JMP ( )
&found ( addr^ d^ cell2* )
DUP2 #01 XSTORE
#2a ;log-focus JSR2
DUP2 #01 ( XSTORE ) ;xstore JSR2
DUP2 ;focus LDA2 PATH ( addr^ d^ cell2* wall* )
#01 XSTORE ( addr^ d^ cell2* )
#01 ( XSTORE ) ;xstore JSR2 ( addr^ d^ cell2* )
;focus STA2 ( addr^ d^ )
#3e ;log-focus JSR2
#02 EOR #08 MUL ( addr^ link^ )
#03 ORA ;focus LDA2 ( addr^ data^ cell* )
STORE ( addr^ )
@ -335,6 +361,7 @@ RTN
;focus LDA2 OVR2 ( offset* cell* offset* )
ADD2 ADD2 ( old-cell* )
DUP2 ;focus STA2 ( old-cell* )
#3c ;log-focus JSR2
LOAD #04 AND #00 NEQ ( is-start^ )
,&done JCN
;&queue JMP2
@ -387,6 +414,11 @@ RTN
POP
RTN
( convenience for less branching when printing hex )
@digits
30 31 32 33 34 35 36 37
38 39 61 62 63 64 65 66
|8000
( 64x40 cells = 2560 bytes )
@ -401,8 +433,3 @@ RTN
( we use the link to support backtracking without )
( needing a separate stack. )
@maze $2560
( convenience for less branching when printing hex )
@digits
30 31 32 33 34 35 36 37
38 39 61 62 63 64 65 66