| ... | ... |
@@ -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);
|