blob: fe02794353303587b0748efc30572a6632156d38 (
plain)
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
|
.org $1000
prg_name:
.byte "SuBAsm"
ver_txt:
.byte ", version "
ver_num:
.byte "0.1"
x:
.word $0
y:
.word $0
str_buf:
.org $2000
buf:
.org $C000
ctrl_reg:
.org $C001
scr:
.org $C002
kbd:
.org $0
reset:
cps
ldx.w
txs
ldy
jsr clr_buf
ldx.w
ldy
jmp print_title
read:
lda ctrl_reg
beq read
lda
sta ctrl_reg
jmp getchar
rset_x:
ldx
stx.w x
rts
print_title:
lda prg_name, x
beq print_ver
sta
inx
inc x
jmp print_title
print_ver
jsr rset_x
lda ver_txt, x
beq print_num
sta scr
inx
jmp print_ver
print_num:
lda ver_num, x
beq getline
sta scr
inx
jmp print_num
getline:
lda
sta scr
inc y
jsr rset_x
jmp read
getchar:
lda kbd
cmp
beq esc
cmp
beq nl
cmp
beq bs
jsr echo
store_char:
sta buf, y
iny
jmp read
esc:
lda ctrl_reg
lda ctrl_reg
beq read
lda kbd
cmp
beq up
cmp
beq down
cmp
beq left
cmp
beq right
up:
lda
sta scr
lda
sta scr
lda
sta scr
jmp read
down:
lda
sta scr
lda
sta scr
lda
sta scr
jmp read
left:
lda
sta scr
lda
sta scr
lda
sta scr
jmp read
right:
lda
sta scr
lda
sta scr
lda
sta scr
jmp read
nl:
sta scr
lda
sta buf, y
ldy.w
jmp parse
back:
jsr echo
lda
sta buf, y
dey
jmp read
bs:
cpy
beq read
jmp back
parse:
lda buf, y
beq clr_buf
sta scr
iny
jmp result
rset_y:
ldy.w
jmp print_buf
print_buf:
lda buf, y
beq fin
sta scr
iny
jmp print_buf
spin:
nop
nop
nop
jmp spin
clr_buf:
lda
cpy.w
beq clr_end
sta buf, y
iny
jmp clr_buf
clr_sbuf:
lda
cpy.w
beq clr_end
sta str_buf, y
iny
jmp clr_sbuf
clr_end:
rts
echo:
sta scr
rts
.org $FFC0
.qword reset
.org $FF50
.qword spin
.qword spin
.qword spin
.qword spin
.qword spin
.qword spin
.qword spin
.org $FFA0
.qword irq_routine
done
|