Browse code

(calc.tal) Optimizations

Devine Lu Linvega authored on 21/11/2021 15:54:38
Showing 1 changed files
... ...
@@ -7,6 +7,8 @@
7 7
 %++ { ADD2 } %-- { SUB2 } %// { DIV2 }
8 8
 %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
9 9
 
10
+%!~ { NEQk NIP }
11
+
10 12
 %2*   { #10 SFT } 
11 13
 %4*   { #20 SFT } %4/ { #02 SFT }
12 14
 %8*   { #30 SFT } %8/   { #03 SFT }
... ...
@@ -83,39 +85,31 @@
83 85
 	#0110 .Audio0/adsr DEO2
84 86
 	;sin-pcm .Audio0/addr DEO2
85 87
 	#0100 .Audio0/length DEO2
86
-	#dd .Audio0/volume DEO ( TODO: turn ON )
88
+	#dd .Audio0/volume DEO
87 89
 
88 90
 	( center )
89 91
 	.Screen/width DEI2 2// .center/x STZ2
90 92
 	.Screen/height DEI2 2// .center/y STZ2
91 93
 
92 94
 	.center/x LDZ2 #0020 -- 
93
-	DUP2 .keypad-frame/x STZ2
94
-		#0040 ++ .keypad-frame/x2 STZ2
95
+		DUP2 .keypad-frame/x STZ2 #0040 ++ .keypad-frame/x2 STZ2
95 96
 	.center/y LDZ2 #0018 -- 
96
-	DUP2 .keypad-frame/y STZ2
97
-		#003f ++ .keypad-frame/y2 STZ2
97
+		DUP2 .keypad-frame/y STZ2 #003f ++ .keypad-frame/y2 STZ2
98 98
 
99 99
 	.keypad-frame/x LDZ2
100
-	DUP2 .modpad-frame/x STZ2
101
-		#0040 ++ .modpad-frame/x2 STZ2
100
+		DUP2 .modpad-frame/x STZ2 #0040 ++ .modpad-frame/x2 STZ2
102 101
 	.keypad-frame/y LDZ2 #0040 ++
103
-	DUP2 .modpad-frame/y STZ2
104
-		#001f ++ .modpad-frame/y2 STZ2
102
+		DUP2 .modpad-frame/y STZ2 #001f ++ .modpad-frame/y2 STZ2
105 103
 
106 104
 	.keypad-frame/x LDZ2
107
-	DUP2 .bitpad-frame/x STZ2
108
-		#0040 ++ .bitpad-frame/x2 STZ2
105
+		DUP2 .bitpad-frame/x STZ2 #0040 ++ .bitpad-frame/x2 STZ2
109 106
 	.modpad-frame/y2 LDZ2 #0008 ++
110
-	DUP2 .bitpad-frame/y STZ2
111
-		#000f ++ .bitpad-frame/y2 STZ2
107
+		DUP2 .bitpad-frame/y STZ2 #000f ++ .bitpad-frame/y2 STZ2
112 108
 
113 109
 	.center/x LDZ2 #0020 -- 
114
-	DUP2 .input-frame/x STZ2
115
-		#0040 ++ .input-frame/x2 STZ2
110
+		DUP2 .input-frame/x STZ2 #0040 ++ .input-frame/x2 STZ2
116 111
 	.center/y LDZ2 #002a -- 
117
-	DUP2 .input-frame/y STZ2
118
-		#0010 ++ .input-frame/y2 STZ2
112
+		DUP2 .input-frame/y STZ2 #0010 ++ .input-frame/y2 STZ2
119 113
 
120 114
 	( theme support )
121 115
 	;load-theme JSR2
... ...
@@ -124,40 +118,26 @@ BRK
124 118
 
125 119
 @on-button ( -> )
126 120
 
127
-	.Controller/key DEI #00 ! ,&continue JCN
128
-		;redraw JSR2 BRK
129
-		&continue
130
-
131 121
 	.Controller/key DEI 
132
-	DUP #0d ! ,&no-enter JCN
133
-		;do-push JSR2 POP BRK
134
-		&no-enter
135
-	( arithmetic )
136
-	DUP LIT '+ ! ,&no-add JCN 
137
-		;do-add JSR2 POP BRK &no-add
138
-	DUP LIT '- ! ,&no-sub JCN 
139
-		;do-sub JSR2 POP BRK &no-sub
140
-	DUP LIT '* ! ,&no-mul JCN 
141
-		;do-mul JSR2 POP BRK &no-mul
142
-	DUP LIT '/ ! ,&no-div JCN 
143
-		;do-div JSR2 POP BRK &no-div
144
-	( bitwise )
145
-	DUP LIT '& ! ,&no-and JCN 
146
-		;do-and JSR2 POP BRK &no-and
147
-	DUP LIT '| ! ,&no-ora JCN 
148
-		;do-ora JSR2 POP BRK &no-ora
149
-	DUP LIT '^ ! ,&no-eor JCN 
150
-		;do-eor JSR2 POP BRK &no-eor
151
-	DUP LIT '~ ! ,&no-not JCN 
152
-		;do-not JSR2 POP BRK &no-not
153
-	( clear )
154
-	DUP #1b ! ,&no-esc JCN
155
-		;do-pop JSR2 POP BRK &no-esc
156
-	DUP #08 ! ,&no-backspace JCN
122
+	( generics )
123
+	#00 !~ ,&no-release JCN ;redraw JSR2 POP BRK &no-release
124
+	#0d !~ ,&no-enter JCN ;do-push JSR2 POP BRK &no-enter
125
+	#1b !~ ,&no-esc JCN ;do-pop JSR2 POP BRK &no-esc
126
+	#08 !~ ,&no-backspace JCN
157 127
 		.input/value LDZ2 #04 SFT2 .input/value STZ2
158
-		#ff ;draw-input JSR2
159
-		POP BRK
128
+		#ff ;draw-input JSR2 POP BRK
160 129
 		&no-backspace
130
+	( arithmetic )
131
+	LIT '+ !~ ,&no-add JCN ;do-add JSR2 POP BRK &no-add
132
+	LIT '- !~ ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
133
+	LIT '* !~ ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
134
+	LIT '/ !~ ,&no-div JCN ;do-div JSR2 POP BRK &no-div
135
+	( bitwise )
136
+	LIT '& !~ ,&no-and JCN ;do-and JSR2 POP BRK &no-and
137
+	LIT '| !~ ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
138
+	LIT '^ !~ ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
139
+	LIT '~ !~ ,&no-not JCN ;do-not JSR2 POP BRK &no-not
140
+	( value )
161 141
 	;key-value JSR2 ;push-input JSR2
162 142
 
163 143
 BRK
... ...
@@ -182,14 +162,10 @@ BRK
182 162
 		.Mouse/state DEI .pointer/last STZ
183 163
 		POP2
184 164
 		.Mouse/x DEI2 .Mouse/y DEI2 
185
-		OVR2 OVR2 .keypad-frame 
186
-			;within-rect JSR2 ;click-keypad JCN2
187
-		OVR2 OVR2 .input-frame 
188
-			;within-rect JSR2 ;click-input JCN2
189
-		OVR2 OVR2 .modpad-frame 
190
-			;within-rect JSR2 ;click-modpad JCN2
191
-		OVR2 OVR2 .bitpad-frame 
192
-			;within-rect JSR2 ;click-bitpad JCN2
165
+		OVR2 OVR2 .keypad-frame ;within-rect JSR2 ;click-keypad JCN2
166
+		OVR2 OVR2 .input-frame ;within-rect JSR2 ;click-input JCN2
167
+		OVR2 OVR2 .modpad-frame ;within-rect JSR2 ;click-modpad JCN2
168
+		OVR2 OVR2 .bitpad-frame ;within-rect JSR2 ;click-bitpad JCN2
193 169
 		POP2 POP2
194 170
 		BRK
195 171
 		&no-down
... ...
@@ -217,17 +193,7 @@ BRK
217 193
 
218 194
 	( y ) .modpad-frame/y LDZ2 -- #24 SFT2 NIP STH
219 195
 	( x ) .modpad-frame/x LDZ2 -- 10// 
220
-	( value ) NIP STHr +
221
-	DUP #00 ! ,&no-add JCN ;do-add JSR2 &no-add
222
-	DUP #01 ! ,&no-sub JCN ;do-sub JSR2 &no-sub
223
-	DUP #02 ! ,&no-mul JCN ;do-mul JSR2 &no-mul
224
-	DUP #03 ! ,&no-div JCN ;do-div JSR2 &no-div
225
-	DUP #04 ! ,&no-and JCN ;do-and JSR2 &no-and
226
-	DUP #05 ! ,&no-ora JCN ;do-ora JSR2 &no-ora
227
-	DUP #06 ! ,&no-eor JCN ;do-eor JSR2 &no-eor
228
-	DUP #07 ! ,&no-not JCN ;do-not JSR2 &no-not
229
-	POP
230
-
196
+	( lookup ) STHr + 2** ;keypad/ops ++ LDA2 JSR2
231 197
 	;draw-bitpad JSR2
232 198
 	RELEASE-MOUSE
233 199
 
... ...
@@ -595,25 +561,16 @@ RTN
595 561
 
596 562
 	#10 #00
597 563
 	&loop
598
-		( state ) DUP #0f SWP - .input/value LDZ2 ROT SFT2 2MOD2 NIP STH
599
-		( y ) DUP 8/ TOS 8** .bitpad-frame/y LDZ2 ++ STH2
600
-		( x ) DUP 8MOD TOS 8** .bitpad-frame/x LDZ2 ++
601
-		STH2r STHr #01 ,draw-bit JSR
564
+		( y ) DUP 8/ TOS 8** .bitpad-frame/y LDZ2 ++ .Screen/y DEO2
565
+		( x ) DUP 8MOD TOS 8** .bitpad-frame/x LDZ2 ++ .Screen/x DEO2
566
+		( state ) DUP #0f SWP - .input/value LDZ2 ROT SFT2 2MOD2 
567
+		( addr ) 8** ;bit-icns ++ .Screen/addr DEO2
568
+		#01 .Screen/sprite DEO
602 569
 		INC GTHk ,&loop JCN
603 570
 	POP2
604 571
 
605 572
 RTN
606 573
 
607
-@draw-bit ( x* y* state color -- )
608
-
609
-	STH
610
-	( addr ) 8* TOS ;bit-icns ++ .Screen/addr DEO2 
611
-	( y ) .Screen/y DEO2
612
-	( x ) .Screen/x DEO2
613
-	STHr .Screen/sprite DEO	
614
-
615
-RTN
616
-
617 574
 @draw-key ( x* y* glyph* state color -- )
618 575
 
619 576
 	( auto x addr ) #05 .Screen/auto DEO
... ...
@@ -628,8 +585,7 @@ RTN
628 585
 	,&color LDR .Screen/sprite DEO
629 586
 	.Screen/x DEI2 #0010 -- .Screen/x DEO2
630 587
 	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
631
-	,&color LDR .Screen/sprite DEO
632
-	,&color LDR .Screen/sprite DEO
588
+	,&color LDR .Screen/sprite DEOk DEO
633 589
 	( glyph )
634 590
 	,&glyph LDR2 .Screen/addr DEO2
635 591
 	.Screen/x DEI2 #000c -- .Screen/x DEO2
... ...
@@ -650,8 +606,7 @@ RTN
650 606
 	( y ) .Screen/y DEO2
651 607
 	( x ) .Screen/x DEO2
652 608
 	( draw background )
653
-	,&color LDR .Screen/sprite DEO
654
-	,&color LDR .Screen/sprite DEO
609
+	,&color LDR .Screen/sprite DEOk DEO
655 610
 	( glyph )
656 611
 	,&glyph LDR2 .Screen/addr DEO2
657 612
 	.Screen/y DEI2 #000c -- .Screen/y DEO2
... ...
@@ -742,6 +697,9 @@ RTN
742 697
 		0101 0102
743 698
 		0101 0102
744 699
 		0102 0202
700
+	&ops
701
+		:do-add :do-sub :do-mul :do-div
702
+		:do-and :do-ora :do-eor :do-not
745 703
 
746 704
 @sin-pcm
747 705
 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
... ...
@@ -783,29 +741,29 @@ RTN
783 741
 	0000 0060 920c 0000
784 742
 
785 743
 @button-icns
786
-	&outline
744
+	( outline )
787 745
 		3f40 8080 8080 8080
788 746
 		f804 0202 0202 0202
789 747
 		8080 8080 8040 3f00
790 748
 		0202 0202 0204 f800
791
-	&full
749
+	( full )
792 750
 		3f7f ffff ffff ffff
793 751
 		f8fc fefe fefe fefe
794 752
 		ffff ffff ff7f 3f00
795 753
 		fefe fefe fefc f800
796 754
 
797 755
 @button-thin-icns
798
-	&outline
756
+	( outline )
799 757
 		3844 8282 8282 8282
800 758
 		8282 8282 8244 3800
801
-	&full
759
+	( full )
802 760
 		387c fefe fefe fefe
803 761
 		fefe fefe fe7c 3800
804 762
 
805 763
 @bit-icns
806
-	&outline
764
+	( outline )
807 765
 		3844 8282 8244 3800
808
-	&full
766
+	( full )
809 767
 		387c fefe fe7c 3800
810 768
 
811 769
 @stack-icns