... | ... |
@@ -5,24 +5,43 @@ |
5 | 5 |
left-click - add pixel |
6 | 6 |
right-click - remove pixel |
7 | 7 |
1 2 3 - select brush |
8 |
+ |
|
9 |
+ TODO: |
|
10 |
+ Color selector, RGB sliders |
|
11 |
+ Blend selector |
|
8 | 12 |
) |
9 | 13 |
|
10 | 14 |
%RTN { JMP2r } |
11 | 15 |
%STEP8 { #0033 SFT2 } |
12 | 16 |
|
13 |
-%++ { #0001 ADD2 } |
|
17 |
+%++ { #0001 ADD2 } %-- { #0001 SUB2 } |
|
14 | 18 |
%2/ { #0001 SFT2 } %2* { #0010 SFT2 } |
15 | 19 |
%8/ { #0003 SFT2 } %8* { #0030 SFT2 } |
16 | 20 |
%8- { #0008 SUB2 } %8+ { #0008 ADD2 } |
17 | 21 |
%SFL { #40 SFT SFT } |
18 | 22 |
%MOD { DUP2 DIV MUL SUB } |
19 | 23 |
|
24 |
+%SIZE-TO-RECT { |
|
25 |
+ STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 |
|
26 |
+} ( x y w h -- x1 y1 x2 y2 ) |
|
27 |
+ |
|
28 |
+%SET-RECT { |
|
29 |
+ DUP2 ROT2 SWP2 #0006 ADD2 STR2 |
|
30 |
+ DUP2 ROT2 SWP2 #0004 ADD2 STR2 |
|
31 |
+ DUP2 ROT2 SWP2 #0002 ADD2 STR2 |
|
32 |
+ DUP2 ROT2 SWP2 STR2 |
|
33 |
+ POP2 |
|
34 |
+} ( x1 y1 x2 y2 addr -- ) |
|
35 |
+ |
|
20 | 36 |
%BANK { #2000 } |
21 | 37 |
|
22 | 38 |
( variables ) |
23 | 39 |
|
24 |
-;bankview { x 2 y 2 mode 1 addr 2 depth 1 } |
|
40 |
+;settings { blending 1 depth 1 } |
|
41 |
+ |
|
42 |
+;bankview { x 2 y 2 mode 1 addr 2 } |
|
25 | 43 |
;tileview { x 2 y 2 addr 2 } |
44 |
+;blendview { x1 2 y1 2 x2 2 y2 2 } |
|
26 | 45 |
;rect { x1 2 y1 2 x2 2 y2 2 } |
27 | 46 |
;mouse { x 2 y 2 } |
28 | 47 |
;color { byte 1 } |
... | ... |
@@ -50,16 +69,21 @@ |
50 | 69 |
( vectors ) ,on-transfer =File.vector |
51 | 70 |
|
52 | 71 |
~Screen.width 2/ #008a SUB2 =bankview.x |
53 |
- ~Screen.height 2/ #003f SUB2 =bankview.y |
|
72 |
+ ~Screen.height 2/ #002f SUB2 =bankview.y |
|
54 | 73 |
BANK =bankview.addr |
55 | 74 |
|
56 | 75 |
~Screen.width 2/ #0002 ADD2 =tileview.x |
57 |
- ~Screen.height 2/ #003f SUB2 =tileview.y |
|
76 |
+ ~Screen.height 2/ #002f SUB2 =tileview.y |
|
58 | 77 |
BANK #0448 ADD2 =tileview.addr |
59 | 78 |
|
79 |
+ ~Screen.width 2/ #0061 ADD2 ~Screen.height 2/ #0068 SUB2 #0020 #0020 SIZE-TO-RECT ,blendview SET-RECT |
|
80 |
+ |
|
81 |
+ #01 =settings.blending |
|
82 |
+ |
|
60 | 83 |
,filepath1 =File.name #0800 =File.length BANK =File.load |
61 | 84 |
,filepath2 =File.name #0800 =File.length BANK #0800 ADD2 =File.load |
62 | 85 |
,filepath3 =File.name #1000 =File.length BANK #1000 ADD2 =File.load |
86 |
+ ,filepath4 =File.name #1000 =File.length BANK #2000 ADD2 =File.load |
|
63 | 87 |
|
64 | 88 |
,redraw JSR2 |
65 | 89 |
|
... | ... |
@@ -112,12 +136,17 @@ BRK |
112 | 136 |
( save ) ,filepath1 =File.name #0800 =File.length ~bankview.addr =File.save |
113 | 137 |
$no-save-click |
114 | 138 |
~Mouse.x ~bankview.x SUB2 8/ #0005 NEQ2 ^$no-toggle-depth JNZ |
115 |
- ( toggle ) ~bankview.depth #00 EQU =bankview.depth |
|
139 |
+ ( toggle ) ~settings.depth #00 EQU =settings.depth |
|
116 | 140 |
$no-toggle-depth |
117 | 141 |
( release ) #00 =Mouse.state |
118 | 142 |
,redraw JSR2 ,$click-end JMP2 |
119 | 143 |
$no-toolbar-click |
120 | 144 |
|
145 |
+ ( blendbiew ) |
|
146 |
+ ~Mouse.x DUP2 ~blendview.x1 GTH2 ROT ROT ~blendview.x2 LTH2 #0101 EQU2 |
|
147 |
+ ~Mouse.y DUP2 ~blendview.y1 GTH2 ROT ROT ~blendview.y2 LTH2 #0101 EQU2 |
|
148 |
+ #0101 EQU2 ,on-touch-blendview JNZ2 |
|
149 |
+ |
|
121 | 150 |
( bankview ) |
122 | 151 |
|
123 | 152 |
~Mouse.x ~bankview.x GTH2 ~Mouse.x ~bankview.x #0080 ADD2 LTH2 #0101 EQU2 |
... | ... |
@@ -208,6 +237,16 @@ BRK |
208 | 237 |
|
209 | 238 |
BRK |
210 | 239 |
|
240 |
+@on-touch-blendview ( -> ) |
|
241 |
+ |
|
242 |
+ ~Mouse.x ~blendview.x1 SUB2 8/ SWP POP |
|
243 |
+ ~Mouse.y ~blendview.y1 SUB2 8/ SWP POP #04 MUL ADD |
|
244 |
+ =settings.blending |
|
245 |
+ ( release ) #00 =Mouse.state |
|
246 |
+ ,redraw JSR2 |
|
247 |
+ |
|
248 |
+BRK |
|
249 |
+ |
|
211 | 250 |
@op_shiftup |
212 | 251 |
|
213 | 252 |
~tileview.addr PEK2 |
... | ... |
@@ -240,6 +279,7 @@ RTN |
240 | 279 |
|
241 | 280 |
,draw-bankview JSR2 |
242 | 281 |
,draw-tileview JSR2 |
282 |
+ ,draw-blendview JSR2 |
|
243 | 283 |
|
244 | 284 |
RTN |
245 | 285 |
|
... | ... |
@@ -258,7 +298,7 @@ RTN |
258 | 298 |
~bankview.y #0010 SUB2 =Screen.y |
259 | 299 |
|
260 | 300 |
~bankview.x #0028 ADD2 =Screen.x |
261 |
- ,depth_icn #00 ~bankview.depth 8* ADD2 =Screen.addr |
|
301 |
+ ,depth_icn #00 ~settings.depth 8* ADD2 =Screen.addr |
|
262 | 302 |
#23 =Screen.color |
263 | 303 |
|
264 | 304 |
~bankview.x #0068 ADD2 =Screen.x |
... | ... |
@@ -295,8 +335,6 @@ RTN |
295 | 335 |
( incr ) ~i #01 ADD =i |
296 | 336 |
~i #10 LTH ^$guides JNZ |
297 | 337 |
|
298 |
- ( body ) |
|
299 |
- |
|
300 | 338 |
( load ) ~bankview.addr =Screen.addr |
301 | 339 |
~bankview.y DUP2 #0080 ADD2 |
302 | 340 |
$ver |
... | ... |
@@ -304,9 +342,12 @@ RTN |
304 | 342 |
~bankview.x DUP2 #0080 ADD2 |
305 | 343 |
$hor |
306 | 344 |
( save ) OVR2 =Screen.x |
307 |
- ( draw ) #21 ~Screen.addr ~tileview.addr EQU2 #08 MUL ADD ~bankview.depth #20 MUL ADD =Screen.color |
|
345 |
+ ( get selected ) ~Screen.addr ~tileview.addr EQU2 |
|
346 |
+ ( get blending ) ~settings.blending |
|
347 |
+ ( get depth ) ~settings.depth #20 MUL |
|
348 |
+ ( draw ) #20 ADD ADD ADD =Screen.color |
|
308 | 349 |
( incr ) SWP2 8+ SWP2 |
309 |
- ( incr ) ~Screen.addr 8+ #00 ~bankview.depth #0008 MUL2 ADD2 =Screen.addr |
|
350 |
+ ( incr ) ~Screen.addr 8+ #00 ~settings.depth #0008 MUL2 ADD2 =Screen.addr |
|
310 | 351 |
OVR2 OVR2 LTH2 ^$hor JNZ |
311 | 352 |
POP2 POP2 |
312 | 353 |
( incr ) SWP2 8+ SWP2 |
... | ... |
@@ -434,6 +475,23 @@ RTN |
434 | 475 |
|
435 | 476 |
RTN |
436 | 477 |
|
478 |
+@draw-blendview ( -- ) |
|
479 |
+ |
|
480 |
+ ~blendview.x1 #0002 SUB2 ~blendview.y1 #0002 SUB2 ~blendview.x2 ++ ~blendview.y2 ++ #03 ,line-rect JSR2 |
|
481 |
+ |
|
482 |
+ ~tileview.addr =Screen.addr |
|
483 |
+ #00 #10 |
|
484 |
+ $loop |
|
485 |
+ OVR #04 MOD #00 SWP #0008 MUL2 ~blendview.x1 ADD2 =Screen.x |
|
486 |
+ OVR #04 DIV #00 SWP #0008 MUL2 ~blendview.y1 ADD2 =Screen.y |
|
487 |
+ #20 =Screen.color |
|
488 |
+ OVR #20 ADD ~settings.depth #20 MUL ADD =Screen.color |
|
489 |
+ SWP #01 ADD SWP |
|
490 |
+ DUP2 LTH ^$loop JNZ |
|
491 |
+ POP2 |
|
492 |
+ |
|
493 |
+RTN |
|
494 |
+ |
|
437 | 495 |
@draw-cursor |
438 | 496 |
|
439 | 497 |
( clear last cursor ) |
... | ... |
@@ -513,6 +571,7 @@ RTN |
513 | 571 |
@filepath1 [ projects/fonts/specter8.bit 00 ] |
514 | 572 |
@filepath2 [ projects/pictures/cibo.bit 00 ] |
515 | 573 |
@filepath3 [ projects/pictures/zerotwo10x10.chr 00 ] |
574 |
+@filepath4 [ projects/fonts/katahira8.bit 00 ] |
|
516 | 575 |
|
517 | 576 |
@font_hex ( 0-F ) |
518 | 577 |
[ |
... | ... |
@@ -11,6 +11,8 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
11 | 11 |
WITH REGARD TO THIS SOFTWARE. |
12 | 12 |
*/ |
13 | 13 |
|
14 |
+#define WORDLENMAX 32 |
|
15 |
+#define MACROMAX 64 |
|
14 | 16 |
#define OFFSET 0x0200 |
15 | 17 |
|
16 | 18 |
typedef unsigned char Uint8; |
... | ... |
@@ -19,17 +21,17 @@ typedef unsigned short Uint16; |
19 | 21 |
typedef signed short Sint16; |
20 | 22 |
|
21 | 23 |
typedef struct { |
22 |
- char name[64], items[16][64]; |
|
24 |
+ char name[WORDLENMAX], items[MACROMAX][WORDLENMAX]; |
|
23 | 25 |
Uint8 len, refs; |
24 | 26 |
} Macro; |
25 | 27 |
|
26 | 28 |
typedef struct { |
27 |
- char name[64]; |
|
29 |
+ char name[WORDLENMAX]; |
|
28 | 30 |
unsigned int size; |
29 | 31 |
} Map; |
30 | 32 |
|
31 | 33 |
typedef struct { |
32 |
- char name[64]; |
|
34 |
+ char name[WORDLENMAX]; |
|
33 | 35 |
Uint8 refs, maps; |
34 | 36 |
Uint16 addr, len; |
35 | 37 |
Map map[16]; |
... | ... |
@@ -203,6 +205,10 @@ makemacro(char *name, FILE *f) |
203 | 205 |
while(fscanf(f, "%s", word)) { |
204 | 206 |
if(word[0] == '{') continue; |
205 | 207 |
if(word[0] == '}') break; |
208 |
+ if(m->len > MACROMAX) |
|
209 |
+ return error("Macro too large", name); |
|
210 |
+ if(slen(word) >= WORDLENMAX) |
|
211 |
+ return error("Word too long", name); |
|
206 | 212 |
scpy(word, m->items[m->len++], 64); |
207 | 213 |
} |
208 | 214 |
printf("New macro: %s(%d items)\n", m->name, m->len); |