... | ... |
@@ -1,30 +1,5 @@ |
1 | 1 |
( a blank file ) |
2 | 2 |
|
3 |
-%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } |
|
4 |
-%< { LTH } %> { GTH } %= { EQU } %! { NEQ } |
|
5 |
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } |
|
6 |
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } |
|
7 |
- |
|
8 |
-%2* { #10 SFT } %2/ { #01 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 } |
|
9 |
-%4* { #20 SFT } %4/ { #02 SFT } %4** { #20 SFT2 } %4// { #02 SFT2 } |
|
10 |
-%8* { #30 SFT } %8/ { #03 SFT } %8** { #30 SFT2 } %8// { #03 SFT2 } |
|
11 |
-%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 } |
|
12 |
-%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 } |
|
13 |
- |
|
14 |
-%2MOD { #01 AND } %2MOD2 { #0001 AND2 } |
|
15 |
-%4MOD { #03 AND } %4MOD2 { #0003 AND2 } |
|
16 |
-%8MOD { #07 AND } %8MOD2 { #0007 AND2 } |
|
17 |
-%10MOD { #0f AND } %10MOD2 { #000f AND2 } |
|
18 |
- |
|
19 |
-%HALT { #010f DEO } |
|
20 |
-%EMIT { #18 DEO } |
|
21 |
-%DEBUG { ;print/byte JSR2 #0a EMIT } |
|
22 |
-%DEBUG2 { ;print/short JSR2 #0a EMIT } |
|
23 |
- |
|
24 |
-%RTN { JMP2r } |
|
25 |
- |
|
26 |
-( devices ) |
|
27 |
- |
|
28 | 3 |
|00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1 |
29 | 4 |
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 |
30 | 5 |
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |
... | ... |
@@ -55,27 +30,17 @@ BRK |
55 | 30 |
|
56 | 31 |
@print ( short* -- ) |
57 | 32 |
|
58 |
- &short ( short* -- ) SWP ,&byte JSR |
|
33 |
+ SWP ,&byte JSR |
|
59 | 34 |
&byte ( byte -- ) DUP #04 SFT ,&char JSR |
60 |
- &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD EMIT |
|
61 |
- |
|
62 |
-RTN |
|
63 |
- |
|
64 |
-@print-dec ( value* -- ) |
|
65 |
- |
|
66 |
- #2710 DIV2k DUP #30 ADD #18 DEO MUL2 SUB2 |
|
67 |
- #03e8 DIV2k DUP #30 ADD #18 DEO MUL2 SUB2 |
|
68 |
- #0064 DIV2k DUP #30 ADD #18 DEO MUL2 SUB2 |
|
69 |
- #000a DIV2k DUP #30 ADD #18 DEO MUL2 SUB2 |
|
70 |
- #30 ADD #18 DEO POP |
|
35 |
+ &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO |
|
71 | 36 |
|
72 |
-RTN |
|
37 |
+JMP2r |
|
73 | 38 |
|
74 |
-@print-str ( string* -- ) |
|
39 |
+@print-str ( str* -- ) |
|
75 | 40 |
|
76 |
- #0001 -- |
|
77 | 41 |
&while |
78 |
- INC2 LDAk DUP #18 DEO ,&while JCN |
|
42 |
+ LDAk #18 DEO |
|
43 |
+ INC2 LDAk ,&while JCN |
|
79 | 44 |
POP2 |
80 | 45 |
|
81 |
-RTN |
|
82 | 46 |
\ No newline at end of file |
47 |
+JMP2r |
... | ... |
@@ -26,7 +26,7 @@ |
26 | 26 |
( draw "FPS:" and "BUNNIES:" and instructions labels ) |
27 | 27 |
.Screen/width DEI2 #0046 SUB2 #0008 ;text/fps #42 ;draw-str JSR2 |
28 | 28 |
#0004 #0008 ;text/bunnies #42 ;draw-str JSR2 |
29 |
- .Screen/width DEI2 #0002 DIV2 #0050 SUB2 #0008 ;text/instructions #43 ;draw-str JSR2 |
|
29 |
+ .Screen/width DEI2 #01 SFT2 #0050 SUB2 #0008 ;text/instructions #43 ;draw-str JSR2 |
|
30 | 30 |
#0028 #0008 #0000 ;draw-dec JSR2 |
31 | 31 |
|
32 | 32 |
( seed prng ) |
... | ... |
@@ -36,7 +36,6 @@ BRK |
36 | 36 |
|
37 | 37 |
@on-frame ( -> ) |
38 | 38 |
|
39 |
- |
|
40 | 39 |
( frames++ ) |
41 | 40 |
.frames LDZ2k INC2 ROT STZ2 |
42 | 41 |
.Date/second DEI .last LDZ EQU ,&post-fps-update JCN |
... | ... |
@@ -75,12 +74,12 @@ BRK |
75 | 74 |
( clear the old sprite location ) |
76 | 75 |
( top ) |
77 | 76 |
[ LDA2k ] #05 SFT2 .Screen/x DEO2 |
78 |
- [ DUP2 #0002 ADD2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
77 |
+ [ INC2k INC2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
79 | 78 |
#00 ;draw-sprite JSR2 |
80 | 79 |
|
81 | 80 |
( move the sprite by its velocity ) |
82 | 81 |
[ LDA2k ] [ OVR2 #0004 ADD2 LDA2 ] ADD2 OVR2 STA2 |
83 |
- [ DUP2 #0002 ADD2 LDA2 ] [ OVR2 #0006 ADD2 LDA2 ] ADD2 OVR2 #0002 ADD2 STA2 |
|
82 |
+ [ INC2k INC2 LDA2 ] [ OVR2 #0006 ADD2 LDA2 ] ADD2 OVR2 INC2 INC2 STA2 |
|
84 | 83 |
|
85 | 84 |
( check for right wall collision + bounce x ) |
86 | 85 |
[ DUP2 #0004 ADD2 LDA2 ] #0f SFT2 #0001 EQU2 ,&skip-max-x JCN |
... | ... |
@@ -89,7 +88,7 @@ BRK |
89 | 88 |
&skip-max-x |
90 | 89 |
( check for bottom wall collision + bounce y ) |
91 | 90 |
[ DUP2 #0006 ADD2 LDA2 ] #0f SFT2 #0001 EQU2 ,&skip-max-y JCN |
92 |
- [ DUP2 #0002 ADD2 LDA2 ] #05 SFT2 #0008 ADD2 [ .Screen/height DEI2 ] LTH2 ,&skip-max-y JCN |
|
91 |
+ [ INC2k INC2 LDA2 ] #05 SFT2 #0008 ADD2 [ .Screen/height DEI2 ] LTH2 ,&skip-max-y JCN |
|
93 | 92 |
[ DUP2 #0006 ADD2 LDA2 ] #ffff MUL2 [ OVR2 #0006 ADD2 STA2 ] |
94 | 93 |
&skip-max-y |
95 | 94 |
( check for left wall collision + bounce x ) |
... | ... |
@@ -97,17 +96,17 @@ BRK |
97 | 96 |
[ DUP2 #0004 ADD2 LDA2 ] #ffff MUL2 [ OVR2 #0004 ADD2 STA2 ] |
98 | 97 |
&skip-min-x |
99 | 98 |
( check for top wall collision + bounce x ) |
100 |
- [ DUP2 #0002 ADD2 LDA2 ] #0f SFT2 #0000 EQU2 ,&skip-min-y JCN |
|
99 |
+ [ INC2k INC2 LDA2 ] #0f SFT2 #0000 EQU2 ,&skip-min-y JCN |
|
101 | 100 |
[ DUP2 #0006 ADD2 LDA2 ] #ffff MUL2 [ OVR2 #0006 ADD2 STA2 ] |
102 | 101 |
&skip-min-y |
103 | 102 |
|
104 |
- ( ( apply gravity ) ) |
|
103 |
+ ( apply gravity ) |
|
105 | 104 |
[ DUP2 #0006 ADD2 LDA2 ] #0004 ADD2 OVR2 #0006 ADD2 STA2 |
106 | 105 |
|
107 | 106 |
( draw the sprite ) |
108 | 107 |
( top ) |
109 | 108 |
[ LDA2k ] #05 SFT2 .Screen/x DEO2 |
110 |
- [ #0002 ADD2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
109 |
+ [ INC2 INC2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
111 | 110 |
#85 ,draw-sprite JSR |
112 | 111 |
|
113 | 112 |
JMP2r |
... | ... |
@@ -130,7 +129,7 @@ JMP2r |
130 | 129 |
DUP2 #30 SFT2 ;sprite/array ADD2 |
131 | 130 |
( populate the new bunny's x/y/xvel/yvel with random values ) |
132 | 131 |
#00 [ ;rand JSR2 ] OVR2 STA2 |
133 |
- [ ;rand JSR2 #1f AND ] [ ;rand JSR2 ] OVR2 #0002 ADD2 STA2 |
|
132 |
+ [ ;rand JSR2 #1f AND ] [ ;rand JSR2 ] OVR2 INC2 INC2 STA2 |
|
134 | 133 |
#00 [ ;rand JSR2 #7f AND ] OVR2 #0004 ADD2 STA2 |
135 | 134 |
#00 [ ;rand JSR2 #7f AND ] OVR2 #0006 ADD2 STA2 |
136 | 135 |
( pop ptr to bunny data ) POP2 |
... | ... |
@@ -186,7 +185,7 @@ JMP2r |
186 | 185 |
DUP2 #0001 SUB2 #30 SFT2 ;sprite/array ADD2 |
187 | 186 |
( top ) |
188 | 187 |
[ LDA2k ] #05 SFT2 .Screen/x DEO2 |
189 |
- [ DUP2 #0002 ADD2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
188 |
+ [ INC2k INC2 LDA2 ] #05 SFT2 .Screen/y DEO2 |
|
190 | 189 |
( clear ) |
191 | 190 |
#00 ;draw-sprite JSR2 |
192 | 191 |
POP2 |
... | ... |
@@ -93,7 +93,7 @@ |
93 | 93 |
DUP2 #00 ,set-occupied JSR |
94 | 94 |
;&possible-moves ( x y possible* / addr* ) |
95 | 95 |
OVR2 #01 SUB ,&check-move JSR ( up ) |
96 |
- OVR2 #01 ADD ,&check-move JSR ( down ) |
|
96 |
+ OVR2 INC INC ,&check-move JSR ( down ) |
|
97 | 97 |
OVR2 #0100 SUB2 ,&check-move JSR ( left ) |
98 | 98 |
OVR2 #0100 ADD2 ,&check-move JSR ( right ) |
99 | 99 |
;&possible-moves SUB2 ( x y num-possible-times-2* / addr* ) |
... | ... |
@@ -124,8 +124,8 @@ JMP2r |
124 | 124 |
|
125 | 125 |
@run-cell ( x y -- ) |
126 | 126 |
|
127 |
- ( x y ) DUP2 |
|
128 |
- ( neighbours ) DUP2 ;get-neighbours JSR2 |
|
127 |
+ ( x y ) DUP2k |
|
128 |
+ ( neighbours ) ;get-neighbours JSR2 |
|
129 | 129 |
( state ) ROT ROT ;get-cell JSR2 |
130 | 130 |
#00 EQU ,&dead JCN |
131 | 131 |
DUP #02 LTH ,&dies JCN |
... | ... |
@@ -219,7 +219,7 @@ JMP2r |
219 | 219 |
@within-rect ( x* y* rect -- flag ) |
220 | 220 |
|
221 | 221 |
STH |
222 |
- ( y < rect.y1 ) DUP2 STHkr #02 ADD LDZ2 LTH2 ,&skip JCN |
|
222 |
+ ( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ,&skip JCN |
|
223 | 223 |
( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN |
224 | 224 |
SWP2 |
225 | 225 |
( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN |
... | ... |
@@ -392,7 +392,7 @@ JMP2r |
392 | 392 |
@within-rect ( x* y* rect -- flag ) |
393 | 393 |
|
394 | 394 |
STH |
395 |
- ( y < rect.y1 ) DUP2 STHkr #02 ADD LDZ2 LTH2 ,&skip JCN |
|
395 |
+ ( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ,&skip JCN |
|
396 | 396 |
( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN |
397 | 397 |
SWP2 |
398 | 398 |
( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN |