-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselectcharcmds.asm
More file actions
304 lines (261 loc) · 5.42 KB
/
selectcharcmds.asm
File metadata and controls
304 lines (261 loc) · 5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
;===============================================================================
; Transfer mode commands
;===============================================================================
;
; Command handler : select next character in character set
;
selectnextchr
LDA charsetposlo
CMP #<charsetend
BNE movenextchr
LDA charsetposhi
CMP #>charsetend
BNE movenextchr
LDA #<charsethome
STA charsetposlo
LDA #>charsethome
STA charsetposhi
LDX #$00
LDA editingchar
STA (charsetposlo,X)
LDA #$00
STA charmemposlo
STA editingchar
LDA #>charmembase
STA charmemposhi
RTS
movenextchr
LDX #$00
loop13
LDA charsetposlo
dataidx17
CMP #$F6
BNE jmp21
LDA charsetposhi
dataidx18
CMP #$06
BNE jmp21
LDA #$F6
STA dataidx17+1
LDA #$06
STA dataidx18+1
RTS
jmp21
CLC
LDA dataidx17+1
ADC #$28
STA dataidx17+1
LDA dataidx18+1
ADC #$00
STA dataidx18+1
INX
CPX #$08
BNE loop13
LDX #$00
LDA editingchar
STA (charsetposlo,X)
LDA #$F6
STA dataidx17+1
LDA #$06
STA dataidx18+1
CLC
LDA charsetposlo
ADC #$01
STA charsetposlo
LDA charsetposhi
ADC #$00
STA charsetposhi
CLC
LDA charmemposlo
ADC #$08
STA charmemposlo
LDA charmemposhi
ADC #$00
STA charmemposhi
INC editingchar
RTS
;
; Command handler : select previous character in character set
;
Align
selectprevchr
LDA charsetposlo ; at start of character map?
CMP #<charsethome
BNE jmp22
LDA charsetposhi
CMP #>charsethome
BNE jmp22
LDA #<charsetend ; at beginning so wrap to end of characters $07DC on screen
STA charsetposlo
LDA #>charsetend
STA charsetposhi
LDX #$00
LDA editingchar
STA (charsetposlo,X)
LDA #$FF ; editing last char - $FF
STA editingchar
LDA #<charmemend
STA charmemposlo
LDA #>charmemend
STA charmemposhi
RTS
jmp22
LDX #$00
loop14
LDA charsetposlo ; start of a row position instead?
dataidx19
CMP #<charsethome
BNE jmp23
LDA charsetposhi
dataidx20
CMP #>charsethome
BNE jmp23
LDA #<charsethome ; reset position comparison to beginning of screen char map
STA dataidx19+1
LDA #>charsethome
STA dataidx20+1
RTS
jmp23
CLC
LDA dataidx19+1
ADC #$28
STA dataidx19+1
LDA dataidx20+1
ADC #$00
STA dataidx20+1
INX
CPX #$08
BNE loop14
LDX #$00
LDA editingchar
STA (charsetposlo,X)
LDA #<charsethome
STA dataidx19+1
LDA #>charsethome
STA dataidx20+1
SEC
LDA charsetposlo
SBC #$01
STA charsetposlo
LDA charsetposhi
SBC #$00
STA charsetposhi
SEC
LDA charmemposlo
SBC #$08
STA charmemposlo
LDA charmemposhi
SBC #$00
STA charmemposhi
DEC editingchar
RTS
;
; Command handler : move up a line in character set
;
moveupaline
LDX #$00
loop15
LDA charsetposlo
dataidx21
CMP #<charsethome
BNE jmp24
LDA charsetposhi
CMP #>charsethome
BNE jmp24
LDA #<charsethome
STA dataidx21+1
RTS
jmp24
INC dataidx21+1
INX
CPX #$26
BNE loop15
LDA #<charsethome
STA dataidx21+1
LDA editingchar
LDX #$00
STA (charsetposlo,X)
SEC
LDA charsetposlo
SBC #$28
STA charsetposlo
LDA charsetposhi
SBC #$00
STA charsetposhi
SEC
LDA editingchar
SBC #$26
STA editingchar
SEC
LDA charmemposlo
SBC #$30
STA charmemposlo
LDA charmemposhi
SBC #$01
STA charmemposhi
RTS
;
; Command handler : move down a line in character set
;
Align
movedownaline
LDX #$00
loop1
LDA charsetposlo
dataidx24
CMP #$B5
BNE jmp20
LDA charsetposhi
CMP #$07
BNE jmp20
LDA #$B5
STA dataidx24+1
RTS
jmp20
INC dataidx24+1
INX
CPX #$0A
BNE loop1
LDA #$B5
STA dataidx24+1
LDX #$00
loop2
LDA charsetposlo
dataidx25
CMP #$C1
BNE jmp25
LDA charsetposhi
CMP #$07
BNE jmp25
LDA #$C1
STA dataidx25+1
RTS
jmp25
INC dataidx25+1
INX
CPX #$26
BNE loop2
LDA #$C1
STA dataidx25+1
LDA editingchar
LDX #$00
STA (charsetposlo,X)
CLC
LDA charsetposlo
ADC #$28
STA charsetposlo
LDA charsetposhi
ADC #$00
STA charsetposhi
CLC
LDA editingchar
ADC #$26
STA editingchar
CLC
LDA charmemposlo
ADC #$30
STA charmemposlo
LDA charmemposhi
ADC #$01
STA charmemposhi
RTS