Browse code

Progress on REPL

Andrew Alderwick authored on 11/07/2021 20:32:32
Showing 1 changed files
... ...
@@ -9,37 +9,83 @@
9 9
 
10 10
 |00 @System  &vector $2 &pad     $6 &r      $2 &g     $2 &b      $2
11 11
 |20 @Screen  &vector $2 &width   $2 &height $2 &pad   $2 &x      $2 &y      $2 &addr $2 &color $1
12
+|80 @Controller [ &vector $2 &button   $1 &key    $1 ]
12 13
 |a0 @File    &vector $2 &success $2 &offset $2 &pad   $2 &name   $2 &length $2 &load $2 &save  $2
13 14
 
14
-( variables )
15
-
16
-|0000
17
-	@font [ &height $1 &cells $1 ]
18
-
19 15
 ( init )
20 16
 
21 17
 |0100 ( -> )
18
+@user-program
19
+	;init ;repl/fn STA2
20
+	#2000 JMP2
21
+	&erase-end
22
+
23
+|2000 ( -> )
24
+	&end
25
+	,repl/fn LDR2 JSR2
26
+	BRK
27
+
28
+@repl [ &fn $2 &font-height $1 &font-cells $1 ]
29
+@buffer [ &cursor $2 &end $2 ]
22 30
 
31
+@init
23 32
 	( theme )
24 33
 	#0fa7 .System/r DEO2
25 34
 	#0fa7 .System/g DEO2
26 35
 	#0fa7 .System/b DEO2
27 36
 
28
-	;font1 ;load-font JSR2
29
-	;body ;wrapped-write JSR2
30
-	;cr JSR2
31
-	;font2 ;load-font JSR2
32
-	;body ;wrapped-write JSR2
33
-	;cr JSR2
34
-	;font3 ;load-font JSR2
35
-	;body ;wrapped-write JSR2
36
-	;cr JSR2
37
-	BRK
37
+	( vectors )
38
+	#2000 .Screen/vector DEO2
39
+	;on-key .Controller/vector DEO2
38 40
 
39
-	;body ;write JSR2 POP2
40
-	#0000 .Screen/x DEO2
41
-	#00 .font/height LDZ .Screen/y DEO2
42
-	;body ;write JSR2 POP2
41
+	( default function )
42
+	;main ,repl/fn STR2
43
+
44
+	( buffer )
45
+	;ring-buffer
46
+		DUP2 ,buffer/cursor STR2
47
+		,buffer/end STR2
48
+
49
+	( clear out user-program )
50
+	;user-program/erase-end ;user-program
51
+	&clear-loop
52
+	#0000 OVR2 STA2
53
+	#0002 ADD2
54
+	GTH2k ,&clear-loop JCN
55
+	POP2 POP2
56
+
57
+	( load font )
58
+	;font ;load-font JMP2 ( tail call )
59
+
60
+@main ( -- )
61
+	JMP2r
62
+
63
+@on-key ( -> )
64
+	.Controller/button DEI #01 AND ,&skip JCN
65
+	.Controller/key DEI
66
+		DUP #e0 AND ,&append JCN
67
+		DUP #08 EQU ,&backspace JCN
68
+		DUP #0d EQU ,&execute JCN
69
+	POP &skip BRK
70
+
71
+	&append
72
+	;buffer/cursor LDA2
73
+	STH2k STA
74
+	STH2r #0001 ADD2 ;ring-buffer ORA2 ;buffer/cursor STA2
75
+	,&draw JMP
76
+
77
+	&backspace
78
+	&execute
79
+	DUP EOR
80
+	;buffer/cursor LDA2
81
+	#0001 SUB2 ;ring-buffer ORA2 DUP2 ;buffer/cursor STA2
82
+	STA
83
+
84
+	&draw
85
+	#0000 DUP2 .Screen/x DEO2 .Screen/y DEO2
86
+	;ring-buffer ;wrapped-write JSR2
87
+
88
+	#20 ;draw-glyph JSR2
43 89
 	BRK
44 90
 
45 91
 @load-font ( filename* -- )
... ...
@@ -49,7 +95,7 @@
49 95
 		#0001 ADD2
50 96
 		LDAk ,&loop JCN
51 97
 	( suffix is cell size )
52
-	#0001 SUB2 LDAk #0f AND .font/cells STZ
98
+	#0001 SUB2 LDAk #0f AND ;repl/font-cells STA
53 99
 	( search backwards for number )
54 100
 	&loop2
55 101
 		#0001 SUB2
... ...
@@ -62,11 +108,11 @@
62 108
 		#0001 SUB2
63 109
 		,&loop3 JMP
64 110
 	&end-loop3
65
-	STH2r POP .font/height STZ
111
+	STH2r POP ;repl/font-height STA
66 112
 	POP
67 113
 	POP2
68 114
 
69
-	.font/cells LDZ DUP MUL #08 MUL #01 ADD #00 .File/length DEO2
115
+	;repl/font-cells LDA DUP MUL #08 MUL #01 ADD #00 .File/length DEO2
70 116
 	;font-data .File/load DEO2
71 117
 
72 118
 	JMP2r
... ...
@@ -99,7 +145,7 @@
99 145
 
100 146
 @cr ( -- )
101 147
 	#0000 .Screen/x DEO2
102
-	.Screen/y DEI2 #00 .font/height LDZ ADD2 .Screen/y DEO2
148
+	.Screen/y DEI2 #00 ;repl/font-height LDA ADD2 .Screen/y DEO2
103 149
 	JMP2r
104 150
 
105 151
 @write ( string* -- end-of-string* )
... ...
@@ -108,33 +154,39 @@
108 154
 	JMP2r
109 155
 
110 156
 	&not-end
111
-	#00 SWP #00 .font/cells LDZ MUL2k MUL2 #0008 MUL2 #0100 ADD2 ( string* char* tile* )
157
+	#00 SWP #00 ;repl/font-cells LDA MUL2k MUL2 #0008 MUL2 #0100 ADD2 ( string* char* tile* )
112 158
 	;font-data ADD2 .Screen/addr DEO2
113
-	.font/cells LDZ
159
+	#2d ,draw-glyph JSR
160
+	#00 ;repl/font-cells LDA #fff8 MUL2 .Screen/y DEI2 ADD2 .Screen/y DEO2
161
+	;font-data ADD2 LDA #00 SWP .Screen/x DEI2 ADD2 .Screen/x DEO2
162
+	LDAk STH
163
+	#0001 ADD2
164
+	STHr #20 GTH ;write JCN2
165
+	JMP2r
166
+
167
+@draw-glyph ( color -- )
168
+	STH
169
+	;repl/font-cells LDA
114 170
 	&outer
115 171
 		DUP #00 EQU ,&end-outer JCN
116
-		.font/cells LDZ
172
+		;repl/font-cells LDA
117 173
 		&inner
118 174
 			DUP #00 EQU ,&end-inner JCN
119
-			#21 .Screen/color DEO
175
+			STHkr .Screen/color DEO
120 176
 			#0008 DUP2
121 177
 				.Screen/x DEI2 ADD2 .Screen/x DEO2
122 178
 				.Screen/addr DEI2 ADD2 .Screen/addr DEO2
123 179
 			#01 SUB
124 180
 			,&inner JMP
125 181
 		&end-inner
126
-		#00 .font/cells LDZ #fff8 MUL2 .Screen/x DEI2 ADD2 .Screen/x DEO2
127
-		#0008 .Screen/y DEI2 ADD2 .Screen/y DEO2
128 182
 		POP
183
+		#00 ;repl/font-cells LDA #fff8 MUL2 .Screen/x DEI2 ADD2 .Screen/x DEO2
184
+		#0008 .Screen/y DEI2 ADD2 .Screen/y DEO2
129 185
 		#01 SUB
130 186
 		,&outer JMP
131 187
 	&end-outer
132
-	#00 .font/cells LDZ #fff8 MUL2 .Screen/y DEI2 ADD2 .Screen/y DEO2
133 188
 	POP
134
-	;font-data ADD2 LDA #00 SWP .Screen/x DEI2 ADD2 .Screen/x DEO2
135
-	LDAk STH
136
-	#0001 ADD2
137
-	STHr #20 GTH ;write JCN2
189
+	POPr
138 190
 	JMP2r
139 191
 
140 192
 @body 
... ...
@@ -153,14 +205,10 @@
153 205
 	6974 2069 6e20 7468 6520 6469 7374 616e
154 206
 	7420 746f 776e 732e 20 $1
155 207
 
156
-@font1
157
-	"projects/fonts/geneva24.uf3 $1
158
-@font2
208
+@font
159 209
 	"projects/fonts/venice14.uf2 $1
160
-@font3
161
-	"projects/fonts/orca8.uf1 $1
162
-	"projects/fonts/left8.uf1 $1
163
-	"projects/fonts/specter8.uf1 $1
164
-	"projects/fonts/atari8.uf1 $1
165 210
 
166 211
 @font-data
212
+
213
+|fe00 @ring-buffer
214
+