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