... | ... |
@@ -2,6 +2,10 @@ |
2 | 2 |
|
3 | 3 |
%8+ { #0008 ADD2 } |
4 | 4 |
%8* { #0030 SFT2 } |
5 |
+%MOD2 { #03 AND } |
|
6 |
+ |
|
7 |
+;cursor { x 2 y 2 blink 1 } |
|
8 |
+ |
|
5 | 9 |
|
6 | 10 |
|0100 ;Console { pad 8 char 1 byte 1 short 2 } |
7 | 11 |
|0110 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 } |
... | ... |
@@ -15,6 +19,15 @@ |
15 | 19 |
|
16 | 20 |
@FRAME |
17 | 21 |
|
22 |
+ ( update cursor ) |
|
23 |
+ #02 ~cursor.blink #01 EQU ADD =Sprite.color |
|
24 |
+ |
|
25 |
+ ,cursor_icn =Sprite.addr |
|
26 |
+ ~cursor.blink MOD2 #00 EQU =cursor.blink |
|
27 |
+ |
|
28 |
+ |
|
29 |
+ |
|
30 |
+ |
|
18 | 31 |
~Keys #00 EQU ^$end JNZ |
19 | 32 |
|
20 | 33 |
( enter key ) |
... | ... |
@@ -34,6 +47,8 @@ |
34 | 47 |
|
35 | 48 |
BRK |
36 | 49 |
|
50 |
+@cursor_icn [ ffff ffff ffff ffff ] |
|
51 |
+ |
|
37 | 52 |
@font ( spectrum-zx font ) |
38 | 53 |
[ |
39 | 54 |
0000 0000 0000 0000 0000 2400 7e3c 0000 0000 2400 3c42 0000 0000 6c7c 7c38 1000 |
... | ... |
@@ -263,11 +263,11 @@ walktoken(char *w) |
263 | 263 |
if(findopcode(w) || scmp(w, "BRK", 4)) |
264 | 264 |
return 1; |
265 | 265 |
switch(w[0]) { |
266 |
- case '=': return 4 - (findlabeladdr(w + 1) < 0x0100); /* POK/STR helper (lit addr(1/2) str) */ |
|
267 |
- case '~': return 4 - (findlabeladdr(w + 1) < 0x0100); /* PEK/LDR helper (lit addr(1/2) ldr) */ |
|
268 |
- case ',': return 3; /* lit2 addr-hb addr-lb */ |
|
269 |
- case '.': return 2; /* addr-hb addr-lb */ |
|
270 |
- case '^': return 2; /* Relative jump: lit addr-offset */ |
|
266 |
+ case '=': return 4 - (findlabel(w + 1) && findlabeladdr(w + 1) < 0x0100); /* POK/STR helper (lit addr(1/2) str) */ |
|
267 |
+ case '~': return 4 - (findlabel(w + 1) && findlabeladdr(w + 1) < 0x0100); /* PEK/LDR helper (lit addr(1/2) ldr) */ |
|
268 |
+ case ',': return 3; /* lit2 addr-hb addr-lb */ |
|
269 |
+ case '.': return 2; /* addr-hb addr-lb */ |
|
270 |
+ case '^': return 2; /* Relative jump: lit addr-offset */ |
|
271 | 271 |
case '#': return (slen(w + 1) == 2 ? 2 : 3); |
272 | 272 |
} |
273 | 273 |
if((m = findmacro(w))) { |