Browse code

Progress on left

neauoire authored on 07/03/2021 20:32:19
Showing 2 changed files
... ...
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
20 20
 # cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator
21 21
 
22 22
 # run
23
-./bin/assembler projects/software/nasu.usm bin/boot.rom
23
+./bin/assembler projects/software/left.usm bin/boot.rom
24 24
 ./bin/emulator bin/boot.rom
... ...
@@ -7,14 +7,19 @@
7 7
 &Sprite { pad 8 x 2 y 2 addr 2 color 1 }
8 8
 &Controller { buttons 1 }
9 9
 &Keyboard { key 1 }
10
-&Mouse  { x 2 y 2 state 1 chord 1 }
10
+&Mouse  { x 2 y 2 state 1 chord 1 xt 1 yt 1 }
11 11
 &File       { pad 8 name 2 length 2 load 2 save 2 }
12 12
 
13 13
 &Point2d { x 2 y 2 }
14 14
 &Label2d { x 2 y 2 color 1 addr 2 }
15 15
 &Textarea2d { x1 2 y1 2 x2 2 y2 2 color 1 addr 2 cursor 1 sela 2 selb 2 }
16 16
 
17
-;target Point2d  ;pt Point2d ;mouse Point2d
17
+;scroll-position Point2d
18
+;scroll-target Point2d
19
+
20
+
21
+;selection Point2d
22
+;target Point2d ;pt Point2d ;pt2 Point2d ;mouse Point2d
18 23
 ;textarea Textarea2d
19 24
 ;label Label2d
20 25
 ;i 1 ;j 2 ;addr 2 ;color 1
... ...
@@ -25,8 +30,13 @@
25 30
 	#0300 =dev/file.length
26 31
 	,body =dev/file.load
27 32
 
28
-	#0064 =textarea.sela #0065 =textarea.selb
33
+	#0005 =selection.y
34
+
35
+	#02 =textarea.color
36
+	#0064 =textarea.sela 
37
+	#0065 =textarea.selb
29 38
 	#0018 =textarea.x1
39
+	~dev/screen.height #0008 SUB2 =textarea.y2
30 40
 
31 41
 	,redraw JSR
32 42
 
... ...
@@ -38,6 +48,12 @@ BRK
38 48
 
39 49
 	,no-ctrl ~dev/ctrl.buttons #00 EQU JMP? POP2
40 50
 		
51
+		,no-ctrl-down ~dev/ctrl.buttons #10 EQU JMP? POP2
52
+			#aa NOP
53
+		@no-ctrl-down
54
+		,no-ctrl-up ~dev/ctrl.buttons #20 EQU JMP? POP2
55
+			#bb NOP
56
+		@no-ctrl-up
41 57
 		,no-ctrl-left ~dev/ctrl.buttons #40 EQU JMP? POP2
42 58
 			~textarea.sela #0001 ADD2 =textarea.sela
43 59
 			~textarea.selb #0001 ADD2 =textarea.selb
... ...
@@ -55,8 +71,29 @@ BRK
55 71
 
56 72
 	,click-end ~dev/mouse.state #00 EQU JMP? POP2
57 73
 
74
+		( scrollbar )
75
+		,no-click-scroll ~dev/mouse.x ~dev/screen.width #0008 SUB2 LTH2 JMP? POP
76
+
77
+			,no-click-scroll-up ~dev/mouse.y #0008 DIV2 #0000 NEQ2 JMP? POP2
78
+				,scroll-up JSR
79
+				,click-end JMP
80
+			@no-click-scroll-up 
81
+
82
+			,no-click-scroll-down ~dev/mouse.y #0008 DIV2 #0008 MUL2 ~dev/screen.height #0008 SUB2 NEQ2 JMP? POP2
83
+				,scroll-down JSR
84
+				,click-end JMP
85
+			@no-click-scroll-down 
86
+
87
+			( on scrollbar )
88
+			#cc NOP
89
+
90
+		@no-click-scroll
91
+
92
+		( select body )
58 93
 		~dev/mouse.x #0008 DIV2 #0003 SUB2 =target.x
59 94
 		~dev/mouse.y #0008 DIV2 =target.y
95
+
96
+		~dev/mouse.y #0008 DIV2 ~scroll-position.y ADD2 =selection.y
60 97
 		,select-target JSR
61 98
 		,redraw JSR
62 99
 
... ...
@@ -66,6 +103,22 @@ BRK
66 103
 
67 104
 BRK 
68 105
 
106
+@scroll-up
107
+	
108
+	~scroll-position.y #0000 EQU2 RTS?
109
+
110
+	( decr ) ~scroll-position.y #0001 SUB2 =scroll-position.y
111
+	,redraw JSR
112
+
113
+RTS
114
+
115
+@scroll-down
116
+		
117
+	( incr ) ~scroll-position.y #0001 ADD2 =scroll-position.y
118
+	,redraw JSR
119
+
120
+RTS
121
+
69 122
 @select-target
70 123
 	
71 124
 	#0000 =j #0000 =pt.x #0000 =pt.y
... ...
@@ -91,7 +144,7 @@ RTS
91 144
 
92 145
 @redraw
93 146
 
94
-	#0058 #0000 #02 ,body ,draw-textarea JSR
147
+	,draw-textarea JSR
95 148
 	,draw-scrollbar JSR
96 149
 	,draw-titlebar JSR
97 150
 	,draw-lines JSR
... ...
@@ -100,6 +153,10 @@ RTS
100 153
 	~dev/screen.height #0008 SUB2 =dev/sprite.y
101 154
 	~textarea.sela ,draw-short JSR
102 155
 
156
+	~dev/screen.width #0050 SUB2 =dev/sprite.x
157
+	~dev/screen.height #0008 SUB2 =dev/sprite.y
158
+	~scroll-position.y ,draw-short JSR
159
+
103 160
 RTS
104 161
 
105 162
 @draw-lines
... ...
@@ -112,16 +169,14 @@ RTS
112 169
 
113 170
 		#0000 =dev/sprite.x
114 171
 		
115
-		~j =addr
172
+		~scroll-position.y ~j ADD2 =addr
116 173
 		,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =dev/sprite.addr
117
-		( draw ) #06 ~pt.y ~j EQU2 ADD =dev/sprite.color
174
+		( draw ) #08 ~addr ~selection.y EQU2 ADD =dev/sprite.color
118 175
 		~dev/sprite.x #0008 ADD2 =dev/sprite.x
119 176
 		,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =dev/sprite.addr
120
-		( draw ) #06 ~pt.y ~j EQU2 ADD =dev/sprite.color
121
-
177
+		( draw ) #08 ~addr ~selection.y EQU2 ADD =dev/sprite.color
122 178
 		( incr ) ~j #0001 ADD2 =j
123 179
 		( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y
124
-
125 180
 		,draw-lines-loop ~j ~dev/screen.height #0008 DIV2 NEQ2 JMP? POP2
126 181
 
127 182
 RTS
... ...
@@ -164,39 +219,51 @@ RTS
164 219
 	~mouse.x =dev/sprite.x
165 220
 	~mouse.y =dev/sprite.y
166 221
 	,cursor_icn =dev/sprite.addr
167
-	#11 =dev/sprite.color
222
+	#13 =dev/sprite.color
168 223
 
169 224
 RTS
170 225
 
171 226
 @draw-textarea ( x y color addr )
172 227
 	
228
+	,body =textarea.addr
229
+ 
230
+	( scroll to position )
173 231
 	#0000 =j
232
+	@find-scroll-offset
233
+		,no-break ~textarea.addr LDR #0a NEQ JMP? POP2
234
+			( incr ) ~j #0001 ADD2 =j
235
+		@no-break
236
+		,skip ~scroll-position.y ~j EQU2 JMP? POP2
237
+		( incr ) ~textarea.addr #0001 ADD2 =textarea.addr
238
+	,find-scroll-offset ~textarea.addr LDR #00 NEQ JMP? POP2
239
+	@skip
174 240
 
175
-	( load ) =textarea.addr =textarea.color =dev/sprite.y =dev/sprite.x 
176
-	~textarea.addr
177
-	@draw-textarea-left-loop
178
-		( draw ) DUP2 LDR #00 SWP #20 SUB #0008 MUL2 ,font ADD2 =dev/sprite.addr 
241
+	#0000 =dev/sprite.y
179 242
 
180
-		~textarea.color 
181
-		( selection ) ~j ~textarea.sela #0001 SUB2 GTH2 ~j ~textarea.selb LTH2 #0101 EQU2 #06 MUL ADD
182
-		=dev/sprite.color
243
+	( draw )
244
+	@draw-textarea-ver
245
+		#0018 =dev/sprite.x
246
+		@draw-textarea-hor
183 247
 
184
-		( detect linebreaks )
185
-		DUP2 LDR #0a NEQ ,no-return ROT JMP? POP2
186
-			~textarea.x1 =dev/sprite.x 
187
-			( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y
188
-			( decr ) ~dev/sprite.x #0008 SUB2 =dev/sprite.x
189
-		@no-return
248
+			( get character )
249
+			~dev/sprite.y #0008 DIV2 ~scroll-position.y ADD2 =target.y
250
+			~dev/sprite.x #0018 SUB2 #0008 DIV2 =target.x
190 251
 
191
-		( incr ) #0001 ADD2
192
-		( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x
193
-		( incr ) ~j #0001 ADD2 =j
252
+			,font #00 
194 253
 
195
-		DUP2 LDR #00 NEQ ,draw-textarea-left-loop ROT JMP? POP2
196
-	POP2
254
+			#45
255
+
256
+			#0008 MUL2 ADD2 =dev/sprite.addr
257
+
258
+			#01 ~target.y ~selection.y EQU2 #0d MUL ADD =dev/sprite.color
259
+			( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x
260
+			,draw-textarea-hor ~dev/sprite.x ~dev/screen.width #0010 SUB2 LTH2 JMP? POP2
261
+		( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y
262
+		,draw-textarea-ver ~dev/sprite.y ~dev/screen.height #0010 SUB2 LTH2 JMP? POP2
197 263
 
198 264
 RTS
199 265
 
266
+
200 267
 @draw-scrollbar
201 268
 		
202 269
 	~dev/screen.width #0008 SUB2 =dev/sprite.x
... ...
@@ -204,42 +271,50 @@ RTS
204 271
 	,scrollbar_bg =dev/sprite.addr
205 272
 
206 273
 	@draw-scrollbar-loop
207
-	( draw ) #01 =dev/sprite.color
274
+	( draw ) #08 =dev/sprite.color
208 275
 	( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y
209 276
 	,draw-scrollbar-loop ~dev/sprite.y ~dev/screen.height LTH2 JMP? POP2
210 277
 
211
-	( at )
212 278
 	#0000 =dev/sprite.y
279
+	,arrowup_icn =dev/sprite.addr
280
+	( draw ) #08 =dev/sprite.color
281
+
282
+	( at )
283
+	~scroll-position.y #0008 ADD2 =dev/sprite.y
213 284
 	,scrollbar_fg =dev/sprite.addr
214
-	( draw ) #01 =dev/sprite.color
285
+	( draw ) #08 =dev/sprite.color
286
+
287
+	~dev/screen.height #0008 SUB2 =dev/sprite.y
288
+	,arrowdown_icn =dev/sprite.addr
289
+	( draw ) #08 =dev/sprite.color
215 290
 
216 291
 RTS
217 292
 
218 293
 @draw-titlebar
219 294
 	
220
-	#0018 ~dev/screen.height #0008 SUB2 #07 ,filepath 
295
+	#0018 ~dev/screen.height #0008 SUB2 #01 ,filepath 
221 296
 
222 297
 	( load ) =label.addr =label.color =dev/sprite.y =dev/sprite.x 
223 298
 	~label.addr
224
-	@draw-label-left-loop
299
+	@draw-titlebar-loop
225 300
 		( draw ) DUP2 LDR #00 SWP #20 SUB #0008 MUL2 ,font ADD2 =dev/sprite.addr ~label.color =dev/sprite.color
226 301
 		( incr ) #0001 ADD2
227 302
 		( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x
228
-		DUP2 #0001 ADD2  LDR #00 NEQ ,draw-label-left-loop ROT JMP? POP2
303
+		DUP2 LDR #00 NEQ ,draw-titlebar-loop ROT JMP? POP2
229 304
 	POP2
230 305
 
231 306
 RTS
232 307
 
233
-@font_hex ( 0-F ) 
308
+@font_hex ( 0-F TODO: should pull from @font instead.. ) 
234 309
 [
235
-	007c 8282 8282 827c 0030 1010 1010 1010
236
-	007c 8202 7c80 80fe 007c 8202 1c02 827c
237
-	000c 1424 4484 fe04 00fe 8080 7c02 827c
238
-	007c 8280 fc82 827c 007c 8202 1e02 0202
239
-	007c 8282 7c82 827c 007c 8282 7e02 827c
240
-	007c 8202 7e82 827e 00fc 8282 fc82 82fc 
241
-	007c 8280 8080 827c 00fc 8282 8282 82fc 
242
-	007c 8280 f080 827c 007c 8280 f080 8080
310
+	003c 464a 5262 3c00 0018 0808 0808 1c00
311
+	003c 4202 3c40 7e00 003c 421c 0242 3c00
312
+	000c 1424 447e 0400 007e 407c 0242 3c00
313
+	003c 407c 4242 3c00 007e 0204 0810 1000
314
+	003c 423c 4242 3c00 003c 4242 3e02 3c00
315
+	003c 4242 7e42 4200 007c 427c 4242 7c00 
316
+	003c 4240 4042 3c00 007c 4242 4242 7c00 
317
+	007e 4078 4040 7e00 007e 4078 4040 4000
243 318
 ]
244 319
 
245 320
 @font ( specter8-frag font ) 
... ...
@@ -299,6 +374,8 @@ RTS
299 374
 @cursor_icn    [ 80c0 e0f0 f8e0 1000 ]
300 375
 @scrollbar_bg  [ aa55 aa55 aa55 aa55 ]
301 376
 @scrollbar_fg  [ ffff ffff ffff ffff ]
377
+@arrowup_icn   [ 0010 387c fe10 1010 ]
378
+@arrowdown_icn [ 0010 1010 fe7c 3810 ]
302 379
 @filepath      [ projects/software/left.usm 00 ]
303 380
 
304 381
 |4000 @body [ ]
... ...
@@ -314,4 +391,4 @@ RTS
314 391
 |FF60 ;dev/file    File
315 392
 
316 393
 |FFF0 .RESET .FRAME .ERROR ( vectors )
317
-|FFF8 [ a30c a30b af03 ] ( palette )
394
+|FFF8 [ 6a0c 4a0b aa03 ] ( palette )