Browse code

Progress on 2-bit mode for nasu

neauoire authored on 16/04/2021 18:34:08
Showing 1 changed files
... ...
@@ -2,13 +2,13 @@
2 2
 	app/nasu : spritesheet editor
3 3
 
4 4
 	arrows - move selection
5
+	ctrl+arrows - change page
5 6
 	left-click  - add pixel
6 7
 	right-click  - remove pixel
7 8
 	1 2 3  - select brush
8 9
 
9 10
 	TODO:
10 11
 		Color selector, RGB sliders
11
-		Blend selector
12 12
 )
13 13
 
14 14
 %RTN   { JMP2r }
... ...
@@ -37,9 +37,9 @@
37 37
 
38 38
 ( variables )
39 39
 
40
-;settings { blending 1 depth 1 }
40
+;settings { blending 1 depth 1 page 2 }
41 41
 
42
-;bankview { x 2 y 2 mode 1 addr 2 }
42
+;bankview { x 2 y 2 mode 1 addr 2 selection 1 }
43 43
 ;tileview { x 2 y 2 addr 2 }
44 44
 ;blendview { x1 2 y1 2 x2 2 y2 2 }
45 45
 ;rect { x1 2 y1 2 x2 2 y2 2 }
... ...
@@ -70,7 +70,7 @@
70 70
 
71 71
 	~Screen.width 2/ #008a SUB2 =bankview.x 
72 72
 	~Screen.height 2/ #002f SUB2 =bankview.y 
73
-	BANK =bankview.addr
73
+	BANK =settings.page
74 74
 
75 75
 	~Screen.width 2/ #0002 ADD2 =tileview.x 
76 76
 	~Screen.height 2/ #002f SUB2 =tileview.y 
... ...
@@ -97,28 +97,46 @@ BRK
97 97
 
98 98
 @on-button ( -> )
99 99
 	
100
-	~Controller.button
101
-	DUP #10 EQU ^$no-ctrl-up JNZ
102
-		~tileview.addr #0080 ADD2 =tileview.addr $no-ctrl-up
103
-	DUP #20 EQU ^$no-ctrl-down JNZ
104
-		~tileview.addr #0080 SUB2 =tileview.addr $no-ctrl-down
105
-	DUP #40 EQU ^$no-ctrl-left JNZ
106
-		~tileview.addr 8+ =tileview.addr $no-ctrl-left
107
-	DUP #80 EQU ^$no-ctrl-right JNZ
108
-		~tileview.addr 8- =tileview.addr $no-ctrl-right
109
-	POP
110
-	~tileview.addr #0800 DIV2 #0800 MUL2 =bankview.addr
111
-
112
-	~Controller.key #31 LTH ^$skip JNZ
113
-	~Controller.key #33 GTH ^$skip JNZ
114
-	( select ) ~Controller.key #31 SUB =bankview.mode
115
-	$skip
116
-	,redraw JSR2
100
+	( arrow button )
101
+	~Controller.button #00 EQU ,$no-button JNZ2
102
+
103
+		~Controller.button #11 NEQ ^$no-pageup JNZ ~settings.page 
104
+			#0800 SUB2 =settings.page ,redraw JSR2 BRK $no-pageup
105
+		~Controller.button #21 NEQ ^$no-pagedown JNZ ~settings.page 
106
+			#0800 ADD2 =settings.page ,redraw JSR2 BRK $no-pagedown
107
+
108
+		~Controller.button #f0 AND
109
+		DUP #04 SFT #01 AND #01 NEQ ^$no-up JNZ 
110
+			( move ) ~bankview.selection #10 SUB =bankview.selection $no-up
111
+		DUP #05 SFT #01 AND #01 NEQ ^$no-down JNZ 
112
+			( move ) ~bankview.selection #10 ADD =bankview.selection $no-down
113
+		DUP #06 SFT #01 AND #01 NEQ ^$no-left JNZ 
114
+			( move ) ~bankview.selection #01 SUB =bankview.selection $no-left
115
+		DUP #07 SFT #01 AND #01 NEQ ^$no-right JNZ 
116
+			( move ) ~bankview.selection #01 ADD =bankview.selection $no-right
117
+		POP
118
+		~bankview.selection ,select-tile JSR2
119
+
120
+	$no-button
121
+
122
+	~Controller.key #00 EQU ^$no-key JNZ
123
+		~Controller.key #31 LTH ^$no-number JNZ
124
+		~Controller.key #33 GTH ^$no-number JNZ
125
+		( select ) ~Controller.key #31 SUB =bankview.mode
126
+			,redraw JSR2
127
+		$no-number
128
+		~Controller.key #20 NEQ ^$no-space JNZ
129
+			~settings.depth #00 EQU =settings.depth
130
+			,redraw JSR2
131
+		$no-space
132
+	$no-key
117 133
 
118 134
 BRK
119 135
 
120 136
 @on-mouse ( -> )
121 137
 	
138
+	,draw-cursor JSR2
139
+
122 140
 	~Mouse.state #00 EQU ,$click-end JNZ2
123 141
 
124 142
 		( toolbar )
... ...
@@ -130,10 +148,10 @@ BRK
130 148
 				( select ) ~mouse.x ~bankview.x SUB2 8/ #000d SUB2 SWP POP =bankview.mode
131 149
 			$no-brush-click
132 150
 			~Mouse.x ~tileview.x SUB2 8/ #000e NEQ2 ^$no-load-click JNZ
133
-				( load ) ,filepath1  =File.name #0800 =File.length ~bankview.addr =File.load
151
+				( load ) ,filepath1  =File.name #0800 =File.length ~settings.page =File.load
134 152
 			$no-load-click
135 153
 			~Mouse.x ~tileview.x SUB2 8/ #000f NEQ2 ^$no-save-click JNZ
136
-				( save ) ,filepath1  =File.name #0800 =File.length ~bankview.addr =File.save
154
+				( save ) ,filepath1  =File.name #0800 =File.length ~settings.page =File.save
137 155
 			$no-save-click
138 156
 			~Mouse.x ~bankview.x SUB2 8/ #0005 NEQ2 ^$no-toggle-depth JNZ
139 157
 				( toggle ) ~settings.depth #00 EQU =settings.depth
... ...
@@ -148,43 +166,9 @@ BRK
148 166
 		#0101 EQU2 ,on-touch-blendview JNZ2
149 167
 
150 168
 		( bankview )
151
-
152 169
 		~Mouse.x ~bankview.x GTH2 ~Mouse.x ~bankview.x #0080 ADD2 LTH2 #0101 EQU2
153 170
 		~Mouse.y ~bankview.y GTH2 ~Mouse.y ~bankview.y #0080 ADD2 LTH2 #0101 EQU2
154
-		#0101 NEQ2 ,$no-bank-click JNZ2
155
-
156
-			~bankview.mode #01 NEQ ^$not-copy-mode JNZ
157
-				#00 =i
158
-				$copy-loop
159
-					( load ) ~tileview.addr ~i ADD PEK2 
160
-					( get touch addr )
161
-					~Mouse.x ~bankview.x SUB2 STEP8 
162
-					~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
163
-					~bankview.addr ADD2 #00 ~i ADD2 POK2
164
-					( incr ) ~i #01 ADD =i
165
-					~i #08 LTH ^$copy-loop JNZ
166
-				,redraw JSR2 ,$click-end JMP2
167
-			$not-copy-mode
168
-
169
-			~bankview.mode #02 NEQ ^$not-erase-mode JNZ
170
-				#00 =i
171
-				$erase-loop
172
-					#00 
173
-					( get touch addr )
174
-					~Mouse.x ~bankview.x SUB2 STEP8 
175
-					~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
176
-					~bankview.addr ADD2 #00 ~i ADD2 POK2
177
-					( incr ) ~i #01 ADD =i
178
-					~i #08 LTH ^$erase-loop JNZ
179
-				,redraw JSR2 ,$click-end JMP2
180
-			$not-erase-mode
181
-
182
-			~Mouse.x ~bankview.x SUB2 STEP8 
183
-			~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
184
-			~bankview.addr ADD2 =tileview.addr
185
-			,redraw JSR2 ,$click-end JMP2
186
-
187
-		$no-bank-click
171
+		#0101 EQU2 ,on-touch-bankview JNZ2
188 172
 
189 173
 		( tileview )
190 174
 
... ...
@@ -233,7 +217,44 @@ BRK
233 217
 
234 218
 	$click-end
235 219
 
236
-	,draw-cursor JSR2
220
+BRK
221
+
222
+@on-touch-bankview ( -> )
223
+	
224
+	~bankview.mode #01 NEQ ^$not-copy-mode JNZ
225
+		#00 =i
226
+		$copy-loop
227
+			( load ) ~tileview.addr ~i ADD PEK2 
228
+			( get touch addr )
229
+			~Mouse.x ~bankview.x SUB2 STEP8 
230
+			~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
231
+			( 2-bit mode ) #00 ~settings.depth #01 ADD MUL2 
232
+			~settings.page ADD2 #00 ~i ADD2 POK2
233
+			( incr ) ~i #01 ADD =i
234
+			~i #08 LTH ^$copy-loop JNZ
235
+		,redraw JSR2 BRK
236
+	$not-copy-mode
237
+
238
+	~bankview.mode #02 NEQ ^$not-erase-mode JNZ
239
+		#00 =i
240
+		$erase-loop
241
+			#00 
242
+			( get touch addr )
243
+			~Mouse.x ~bankview.x SUB2 STEP8 
244
+			~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
245
+			( 2-bit mode ) #00 ~settings.depth #01 ADD MUL2 
246
+			~settings.page ADD2 #00 ~i ADD2 POK2
247
+			( incr ) ~i #01 ADD =i
248
+			~i #08 LTH ^$erase-loop JNZ
249
+		,redraw JSR2 BRK
250
+	$not-erase-mode
251
+
252
+	( select )
253
+
254
+	~Mouse.x ~bankview.x SUB2 8/ SWP POP
255
+	~Mouse.y ~bankview.y SUB2 8/ SWP POP #40 SFT ADD
256
+	DUP =bankview.selection
257
+	,select-tile JSR2
237 258
 
238 259
 BRK
239 260
 
... ...
@@ -247,6 +268,17 @@ BRK
247 268
 
248 269
 BRK 
249 270
 
271
+@select-tile ( pos -- )
272
+
273
+	( x y ) DUP #0f AND SWP #04 SFT
274
+	( y ) #10 MOD #10 MUL #00 SWP 8* 
275
+	( x ) ROT #10 MOD #00 SWP 8* ADD2 
276
+	( 2-bit mode ) #00 ~settings.depth #01 ADD MUL2 
277
+	( offset ) ~settings.page ADD2 =tileview.addr
278
+	,redraw JSR2
279
+
280
+RTN
281
+
250 282
 @op_shiftup
251 283
 	
252 284
 	~tileview.addr PEK2
... ...
@@ -291,7 +323,7 @@ RTN
291 323
 
292 324
 	~bankview.x =Screen.x
293 325
 	~bankview.y #0010 SUB2 =Screen.y
294
-	~bankview.addr ,draw-short JSR2
326
+	~settings.page ,draw-short JSR2
295 327
 
296 328
 	( toolbar )
297 329
 
... ...
@@ -335,7 +367,9 @@ RTN
335 367
 		( incr ) ~i #01 ADD =i
336 368
 		~i #10 LTH ^$guides JNZ
337 369
 
338
-	( load ) ~bankview.addr =Screen.addr
370
+	( draw page )
371
+
372
+	( load ) ~settings.page =Screen.addr
339 373
 	~bankview.y DUP2 #0080 ADD2
340 374
 	$ver
341 375
 		( save ) OVR2 =Screen.y
... ...
@@ -417,11 +451,7 @@ RTN
417 451
 	#00 =i
418 452
 	$bytes
419 453
 		~tileview.x #0088 ADD2 =Screen.x
420
-		,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr
421
-		( draw ) #22 =Screen.color
422
-		~Screen.x 8+ =Screen.x
423
-		,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #0f AND #08 MUL ADD2 =Screen.addr
424
-		( draw ) #22 =Screen.color
454
+		~tileview.addr #00 ~i ADD2 PEK2 ,draw-byte JSR2
425 455
 		( incr ) ~i #01 ADD =i
426 456
 		( incr ) ~Screen.y 8+ =Screen.y
427 457
 	~i #08 LTH ,$bytes JNZ2
... ...
@@ -488,7 +518,14 @@ RTN
488 518
 		OVR #20 ADD ~settings.depth #20 MUL ADD =Screen.color
489 519
 		SWP #01 ADD SWP
490 520
 		DUP2 LTH ^$loop JNZ
491
-	POP2	
521
+	POP2
522
+
523
+	~blendview.x1 =Screen.x
524
+	~blendview.y1 #0010 SUB2 =Screen.y
525
+
526
+	( get blending ) ~settings.blending
527
+	( get depth ) ~settings.depth #20 MUL
528
+	( draw ) #20 ADD ADD ,draw-byte JSR2
492 529
 
493 530
 RTN
494 531
 
... ...
@@ -512,7 +549,18 @@ RTN
512 549
 
513 550
 RTN
514 551
 
515
-@draw-short ( short )
552
+@draw-byte ( byte -- )
553
+	
554
+	STH
555
+	,font_hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr
556
+	( draw ) #22 =Screen.color
557
+	~Screen.x 8+ =Screen.x
558
+	,font_hex #00 STHr #0f AND #08 MUL ADD2 =Screen.addr
559
+	( draw ) #22 =Screen.color
560
+
561
+RTN
562
+
563
+@draw-short ( short -- )
516 564
 
517 565
 	=addr
518 566
 	,font_hex #00 ,addr PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr