Browse code

Working copy of the calc.tal

neauoire authored on 20/09/2021 22:36:13
Showing 1 changed files
... ...
@@ -11,6 +11,7 @@
11 11
 %4**  { #20 SFT2 }
12 12
 %8**  { #30 SFT2 } %8// { #03 SFT2 }
13 13
 %10** { #40 SFT2 } %10// { #04 SFT2 }
14
+%20** { #50 SFT2 }
14 15
 
15 16
 %4MOD { #03 AND }
16 17
 
... ...
@@ -20,6 +21,7 @@
20 21
 %RTN { JMP2r }
21 22
 %SWP2? { #01 JCN SWP2 }
22 23
 %BRK? { #01 JCN BRK }
24
+%RTN? { #01 JCN RTN }
23 25
 %TOS { #00 SWP }
24 26
 
25 27
 ( devices )
... ...
@@ -47,10 +49,8 @@
47 49
 	&items $10
48 50
 @center
49 51
 	&x $2 &y $2
50
-@rect
51
-	&x1 $2 &y1 $2 &x2 $2 &y2 $2
52 52
 @pointer
53
-	&x  $2 &y  $2 &lastx $2 &lasty $2 &state $1
53
+	&x  $2 &y  $2
54 54
 @keypad-frame
55 55
 	&x $2 &y $2 &x2 $2 &y2 $2
56 56
 @modpad-frame
... ...
@@ -93,9 +93,9 @@
93 93
 	DUP2 .modpad-frame/y STZ2
94 94
 		#0040 ++ .modpad-frame/y2 STZ2
95 95
 
96
-	.center/x LDZ2 #0010 -- 
96
+	.center/x LDZ2 #0028 -- 
97 97
 	DUP2 .input-frame/x STZ2
98
-		#0040 ++ .input-frame/x2 STZ2
98
+		#0050 ++ .input-frame/x2 STZ2
99 99
 	.center/y LDZ2 #0030 -- 
100 100
 	DUP2 .input-frame/y STZ2
101 101
 		#0010 ++ .input-frame/y2 STZ2
... ...
@@ -106,19 +106,29 @@ BRK
106 106
 
107 107
 @on-button ( -> )
108 108
 
109
-	.Controller/key DEI BRK?
109
+	.Controller/key DEI #00 ! ,&continue JCN
110
+		;redraw JSR2 BRK
111
+		&continue
110 112
 
111 113
 	.Controller/key DEI 
112 114
 	DUP #0d ! ,&no-enter JCN
113
-		;send-input JSR2 POP BRK
115
+		;do-push JSR2 POP BRK
114 116
 		&no-enter
115
-	DUP LIT '+ ! ,&no-add JCN ;do-add JSR2 POP BRK &no-add
116
-	DUP LIT '- ! ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
117
-	DUP LIT '* ! ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
118
-	DUP LIT '/ ! ,&no-div JCN ;do-div JSR2 POP BRK &no-div
117
+	DUP LIT '+ ! ,&no-add JCN 
118
+		;do-add JSR2 POP BRK &no-add
119
+	DUP LIT '- ! ,&no-sub JCN 
120
+		;do-sub JSR2 POP BRK &no-sub
121
+	DUP LIT '* ! ,&no-mul JCN 
122
+		;do-mul JSR2 POP BRK &no-mul
123
+	DUP LIT '/ ! ,&no-div JCN 
124
+		;do-div JSR2 POP BRK &no-div
119 125
 	DUP #1b ! ,&no-esc JCN
120
-		;do-pop JSR2 POP BRK
121
-		&no-esc
126
+		;do-pop JSR2 POP BRK &no-esc
127
+	DUP #08 ! ,&no-backspace JCN
128
+		.input/value LDZ2 #04 SFT2 .input/value STZ2
129
+		#ff ;draw-input JSR2
130
+		POP BRK
131
+		&no-backspace
122 132
 	;key-value JSR2 ;push-input JSR2
123 133
 
124 134
 BRK
... ...
@@ -140,7 +150,9 @@ BRK
140 150
 	.pointer/y LDZ2 .Screen/y DEO2
141 151
 	#41 .Mouse/state DEI #01 = + .Screen/sprite DEO
142 152
 
143
-	.Mouse/state DEI BRK?
153
+	.Mouse/state DEI #00 ! ,&continue JCN
154
+		;redraw JSR2 BRK
155
+		&continue
144 156
 
145 157
 	.Mouse/x DEI2 .Mouse/y DEI2 
146 158
 	OVR2 OVR2 .keypad-frame 
... ...
@@ -171,6 +183,8 @@ BRK
171 183
 	.modpad-frame/y LDZ2 -- 10// NIP
172 184
 	DUP #00 ! ,&no-add JCN ;do-add JSR2 &no-add
173 185
 	DUP #01 ! ,&no-sub JCN ;do-sub JSR2 &no-sub
186
+	DUP #02 ! ,&no-mul JCN ;do-mul JSR2 &no-mul
187
+	DUP #03 ! ,&no-div JCN ;do-div JSR2 &no-div
174 188
 	POP
175 189
 
176 190
 	( release mouse ) #00 .Mouse/state DEO
... ...
@@ -181,12 +195,12 @@ BRK
181 195
 
182 196
 	POP2
183 197
 	.input-frame/x LDZ2 #0008 ++ -- 10// NIP
184
-	DUP #01 ! ,&no-push JCN
198
+	DUP #03 ! ,&no-push JCN
185 199
 		.input/value LDZ2 #0001 << ,&no-push-empty JCN
186
-			;send-input JSR2
200
+			;do-push JSR2
187 201
 			&no-push-empty
188 202
 		&no-push
189
-	DUP #02 ! ,&no-pop JCN
203
+	DUP #04 ! ,&no-pop JCN
190 204
 		;do-pop JSR2
191 205
 		&no-pop
192 206
 	POP
... ...
@@ -197,15 +211,10 @@ BRK
197 211
 
198 212
 @push-input ( key -- )
199 213
 
214
+	DUP TOS ;keypad/series ++ LDA ;draw-keypad JSR2
200 215
 	TOS .input/value LDZ2 #40 SFT2 ++ .input/value STZ2
201 216
 	.input/length LDZ INC .input/length STZ
202
-	;draw-input JSR2
203
-
204
-RTN
205
-
206
-@send-input ( -- )
207
-
208
-	.input/value LDZ2 ;push JSR2
217
+	#ff ;draw-input JSR2
209 218
 
210 219
 RTN
211 220
 
... ...
@@ -214,7 +223,7 @@ RTN
214 223
 	( store ) .stack/length LDZ 2* .stack/items + STZ2
215 224
 	( incr ) .stack/length LDZ INC .stack/length STZ
216 225
 	( reset ) #0000 .input/value STZ2
217
-	;draw-input JSR2
226
+	#00 ;draw-input JSR2
218 227
 	;draw-stack JSR2
219 228
 
220 229
 RTN
... ...
@@ -224,45 +233,60 @@ RTN
224 233
 	.stack/length LDZ #01 - 2* .stack/items + LDZ2
225 234
 	( clear ) #0000 .stack/length LDZ #01 - 2* .stack/items + STZ2
226 235
 	( incr ) .stack/length LDZ #01 - .stack/length STZ
227
-	;draw-input JSR2
236
+	#01 ;draw-input JSR2
228 237
 	;draw-stack JSR2
229 238
 
230 239
 RTN
231 240
 
241
+@do-push ( -- )
242
+
243
+	.stack/length LDZ #07 < ,&continue JCN
244
+		RTN
245
+		&continue
246
+	.input/value LDZ2 ;push JSR2
247
+
248
+RTN
249
+
232 250
 @do-pop ( -- )
233 251
 
234
-	.stack/length LDZ BRK?
235
-	;pop JSR2 POP2
236
-	;draw-input JSR2
237
-	;draw-stack JSR2
252
+	#0000 .input/value STZ2
253
+	.stack/length LDZ #00 = ,&continue JCN
254
+		;pop JSR2 POP2
255
+		;draw-stack JSR2
256
+		&continue
257
+	#01 ;draw-input JSR2
238 258
 
239 259
 RTN
240 260
 
241 261
 @do-add ( -- )
242 262
 
243
-	.stack/length LDZ #01 > BRK?
244
-	;pop JSR2 ;pop JSR2 ADD2 ;push JSR2
263
+	.stack/length LDZ #01 > RTN?
264
+	#00 ;draw-modpad JSR2
265
+	;pop JSR2 ;pop JSR2 SWP2 ADD2 ;push JSR2
245 266
 
246 267
 RTN
247 268
 
248 269
 @do-sub ( -- )
249 270
 
250
-	.stack/length LDZ #01 > BRK?
251
-	;pop JSR2 ;pop JSR2 SUB2 ;push JSR2
271
+	.stack/length LDZ #01 > RTN?
272
+	#01 ;draw-modpad JSR2
273
+	;pop JSR2 ;pop JSR2 SWP2 SUB2 ;push JSR2
252 274
 
253 275
 RTN
254 276
 
255 277
 @do-mul ( -- )
256 278
 
257
-	.stack/length LDZ #01 > BRK?
258
-	;pop JSR2 ;pop JSR2 MUL2 ;push JSR2
279
+	.stack/length LDZ #01 > RTN?
280
+	#02 ;draw-modpad JSR2
281
+	;pop JSR2 ;pop JSR2 SWP2 MUL2 ;push JSR2
259 282
 
260 283
 RTN
261 284
 
262 285
 @do-div ( -- )
263 286
 
264
-	.stack/length LDZ #01 > BRK?
265
-	;pop JSR2 ;pop JSR2 DIV2 ;push JSR2
287
+	.stack/length LDZ #01 > RTN?
288
+	#03 ;draw-modpad JSR2
289
+	;pop JSR2 ;pop JSR2 SWP2 DIV2 ;push JSR2
266 290
 
267 291
 RTN
268 292
 
... ...
@@ -283,9 +307,9 @@ RTN
283 307
 
284 308
 @redraw ( -- )
285 309
 
286
-	;draw-keypad JSR2
287
-	;draw-modpad JSR2
288
-	;draw-input JSR2
310
+	#ff ;draw-keypad JSR2
311
+	#ff ;draw-modpad JSR2
312
+	#ff ;draw-input JSR2
289 313
 	;draw-stack JSR2
290 314
 
291 315
 RTN
... ...
@@ -294,9 +318,9 @@ RTN
294 318
 
295 319
 	#08 #00
296 320
 	&loop
297
-		( color ) DUP .stack/length LDZ < STH
298
-		( value ) DUP 2* .stack/items + LDZ2 STH2
299
-		( y ) DUP TOS 8** #0070 SWP2 -- STH2
321
+		( color ) DUP #08 .stack/length LDZ - #01 - > STH
322
+		( value ) DUP 2* .stack/items + [ #10 .stack/length LDZ 2* - - ] LDZ2 STH2
323
+		( y ) DUP TOS 8** .input-frame/y LDZ2 ++ #0048 -- STH2
300 324
 		( x ) #0088 STH2r STH2r STHr ;draw-short JSR2
301 325
 		INC GTHk ,&loop JCN
302 326
 	POP2
... ...
@@ -320,12 +344,23 @@ RTN
320 344
 
321 345
 RTN
322 346
 
323
-@draw-input ( -- )
347
+@get-length ( short* -- length )
348
+
349
+	DUP2 #0fff << ,&no4 JCN POP2 #04 RTN &no4
350
+	DUP2 #00ff << ,&no3 JCN POP2 #03 RTN &no3
351
+	DUP2 #000f << ,&no2 JCN POP2 #02 RTN &no2
352
+	#0000 !!
353
+
354
+RTN
355
+
356
+@draw-input ( key -- )
357
+
358
+	STH
324 359
 
325 360
 	.input-frame/y LDZ2 #0002 ++ .Screen/y DEO2
326 361
 	#04 #00
327 362
 	&loop
328
-		( x ) DUP TOS 8** .input-frame/x LDZ2 SWP2 -- .Screen/x DEO2
363
+		( x ) DUP TOS 8** .input-frame/x LDZ2 #0018 ++ SWP2 -- .Screen/x DEO2
329 364
 		( value ) STHk .input/value LDZ2 STHr 4* SFT2 #000f AND2
330 365
 		( value glyph ) 8** ;font-hex ++ .Screen/addr DEO2
331 366
 		( color ) DUP INC .input/value LDZ2 ;get-length JSR2 >
... ...
@@ -334,85 +369,92 @@ RTN
334 369
 	POP2
335 370
 
336 371
 	( controls )
337
-	.input-frame/x LDZ2 #0018 ++
372
+	.input-frame/x LDZ2 #0030 ++
338 373
 	.input-frame/y LDZ2
339
-	;stack-icns/push 
340
-	;key-icns/outline #01
374
+	;stack-icns/push [ STHkr #00 = ] #01
341 375
 		;draw-key JSR2
342 376
 
343
-	.input-frame/x LDZ2 #0028 ++
377
+	.input-frame/x LDZ2 #0040 ++
344 378
 	.input-frame/y LDZ2
345
-	;stack-icns/pop 
346
-	;key-icns/outline #02
379
+	;stack-icns/pop [ STHkr #01 = ] #02
347 380
 		;draw-key JSR2
348 381
 
349
-RTN
382
+	( line )
383
+	.input-frame/x LDZ2 
384
+	.input-frame/x2 LDZ2 
385
+	.input-frame/y LDZ2 #0004 -- #02 
386
+		;line-hor-dotted JSR2
350 387
 
351
-@get-length ( short* -- length )
352
-
353
-	DUP2 #0fff << ,&no4 JCN POP2 #04 RTN &no4
354
-	DUP2 #00ff << ,&no3 JCN POP2 #03 RTN &no3
355
-	DUP2 #000f << ,&no2 JCN POP2 #02 RTN &no2
356
-	#0000 !!
388
+	POPr
357 389
 
358 390
 RTN
359 391
 
360
-@draw-keypad ( -- )
392
+@draw-keypad ( key -- )
361 393
 
394
+	STH
362 395
 	#10 #00
363 396
 	&loop
364 397
 		( color ) DUP TOS ;keypad/color ++ LDA STH
398
+		( state ) DUP OVRr STHr = STH
365 399
 		( layout ) DUP TOS ;keypad/layout ++ LDA 
366 400
 			( layout addr ) TOS 8** ;font-hex ++ STH2
367 401
 		( x ) DUP 4MOD TOS 10** STH2
368 402
 		( y ) DUP 4/ TOS 10**
369 403
 		( origin-x ) STH2r .keypad-frame/x LDZ2 ++ SWP2 
370 404
 		( origin-y ) .keypad-frame/y LDZ2 ++
371
-			STH2r ;key-icns/full STHr ;draw-key JSR2
405
+			STH2r STHr STHr ;draw-key JSR2
372 406
 		INC GTHk ,&loop JCN
373 407
 	POP2
408
+	POPr
374 409
 
375 410
 RTN
376 411
 
377
-@draw-modpad ( -- )
412
+@draw-modpad ( key -- )
378 413
 
414
+	STH
379 415
 	#04 #00
380 416
 	&loop
381 417
 		( color ) DUP TOS ;modpad/color ++ LDA STH
418
+		( state ) DUP OVRr STHr = STH
382 419
 		( layout ) DUP TOS 8** ;mod-icns ++ STH2
383 420
 		( x ) #0000 STH2
384 421
 		( y ) DUP TOS 10**
385 422
 		( origin-x ) STH2r .modpad-frame/x LDZ2 ++ SWP2 
386 423
 		( origin-y ) .modpad-frame/y LDZ2 ++
387
-			STH2r ;key-icns/full STHr ;draw-key JSR2
424
+			STH2r STHr STHr ;draw-key JSR2
388 425
 		INC GTHk ,&loop JCN
389 426
 	POP2
427
+	POPr
390 428
 
391 429
 RTN
392 430
 
393
-@draw-key ( x* y* glyph* style* color -- )
431
+@draw-key ( x* y* glyph* state color -- )
394 432
 
395 433
 	( auto x addr ) #05 .Screen/auto DEO
396
-	( frame )
397
-	STH 
398
-	( style ) .Screen/addr DEO2 
399
-	STH2 ROTr
400
-	.Screen/y DEO2
401
-	.Screen/x DEO2
402
-	STHkr .Screen/sprite DEO
403
-	STHkr .Screen/sprite DEO
434
+
435
+	( color ) ,&color STR
436
+	( state ) ,&state STR
437
+	( glyph ) ,&glyph STR2
438
+
439
+	( state ) ;button-icns [ #00 ,&state LDR 20** ++ ] .Screen/addr DEO2 
440
+	( y* ) .Screen/y DEO2
441
+	( x* ) .Screen/x DEO2
442
+	( draw background )
443
+	,&color LDR .Screen/sprite DEO
444
+	,&color LDR .Screen/sprite DEO
404 445
 	.Screen/x DEI2 #0010 -- .Screen/x DEO2
405 446
 	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
406
-	STHkr .Screen/sprite DEO
407
-	STHkr .Screen/sprite DEO
447
+	,&color LDR .Screen/sprite DEO
448
+	,&color LDR .Screen/sprite DEO
408 449
 	( glyph )
409
-	ROTr ROTr STH2r .Screen/addr DEO2
450
+	,&glyph LDR2 .Screen/addr DEO2
410 451
 	.Screen/x DEI2 #000c -- .Screen/x DEO2
411 452
 	.Screen/y DEI2 #0005 -- .Screen/y DEO2
412
-	STHr #04 MUL  .Screen/sprite DEO
453
+	,&color LDR [ ,&state LDR #09 MUL + ] .Screen/sprite DEO
413 454
 	( auto none ) #00 .Screen/auto DEO
414 455
 
415 456
 RTN
457
+	&color $1 &state $1 &glyph $2
416 458
 
417 459
 @within-rect ( x* y* rect -- flag )
418 460
 	
... ...
@@ -431,6 +473,19 @@ RTN
431 473
 
432 474
 RTN
433 475
 
476
+@line-hor-dotted ( x0* x1* y* color -- )
477
+	
478
+	STH .Screen/y DEO2
479
+	SWP2
480
+	&loop
481
+		( save ) DUP2 .Screen/x DEO2
482
+		( draw ) STHkr .Screen/pixel DEO
483
+		INC2 INC2 GTH2k ,&loop JCN
484
+	POP2 POP2 POPr
485
+
486
+RTN
487
+
488
+
434 489
 @line-rect ( rect color -- )
435 490
 
436 491
 	STH STH
... ...
@@ -486,6 +541,11 @@ RTN
486 541
 		0405 060e
487 542
 		0102 030d
488 543
 		000a 0b0c
544
+	&series
545
+		0c08 090a
546
+		0405 0600
547
+		0102 0d0e
548
+		0f0b 0703
489 549
 	&color
490 550
 		0101 0102
491 551
 		0101 0102
... ...
@@ -513,33 +573,23 @@ RTN
513 573
 	0010 5428 c628 5410
514 574
 	0010 0000 fe00 0010
515 575
 
516
-@key-icns
517
-	&full
518
-		3f7f ffff ffff ffff
519
-		f8fc fefe fefe fefe
520
-		ffff ffff ff7f 3f00
521
-		fefe fefe fefc f800
576
+@button-icns
522 577
 	&outline
523 578
 		3f40 8080 8080 8080
524 579
 		f804 0202 0202 0202
525 580
 		8080 8080 8040 3f00
526 581
 		0202 0202 0204 f800
582
+	&full
583
+		3f7f ffff ffff ffff
584
+		f8fc fefe fefe fefe
585
+		ffff ffff ff7f 3f00
586
+		fefe fefe fefc f800
527 587
 
528 588
 @stack-icns
529 589
 	&push
530
-		ffff ffef d7bb ffff
590
+		0000 0010 2844 0000
531 591
 	&pop
532
-		ffff efc7 83c7 efff
533
-
534
-@input-icn
535
-	3f40 8080 8080 8080
536
-	ff00 0000 0000 0000
537
-	ff00 0000 0000 0000
538
-	f804 0202 0202 0202
539
-	8080 8080 8040 3f00
540
-	0000 0000 0000 ff00
541
-	0000 0000 0000 ff00
542
-	0202 0202 0204 f800
592
+		0000 1038 7c38 1000
543 593
 
544 594
 @pointer-icn
545 595
 	80c0 e0f0 f8e0 1000