Browse code

Added blending mode to nasu

neauoire authored on 15/04/2021 17:19:59
Showing 2 changed files
... ...
@@ -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);