-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathcode26.src
294 lines (236 loc) · 3.9 KB
/
code26.src
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
.page
.subttl 'code26'
erexit
tax ;set termination flags
bne erexiy
ldx #erbrk ;break error
erexiy
jmp error ;normal error
kopen
jsr open
bcs erexit
rts
outch
jsr bsout
bcs erexit
rts
inchr
jsr basin
bcs erexit
rts
coout
pha
jsr chkout
jsr dschk ;see if device # >=4, and clear ds if so
tax ;save error code
pla
bcc cooutx ;no error
txa
bcs erexit
cooutx
rts
coin
jsr chkin
jsr dschk ;see if device # >=4, and clear ds if so
bcs erexit
rts
cgetl
jsr $ffe4 ;jsr getin
bcs erexit
rts
csys
jsr getwrd ;convert arg. to integer value
lda #>csysrz ;push return address
pha
lda #<csysrz
pha
lda spreg ;status reg
pha
lda sareg ;load 6502 regs
ldx sxreg
ldy syreg
plp ;load 6502 status reg
jmp (linnum) ;go do it
csysrz =*-1 ;return to here
php ;save status reg
sta sareg ;save 6502 regs
stx sxreg
sty syreg
pla ;get status reg
sta spreg
rts ;return to system
csave
jsr plsv ;parse parms
savenp
ldx vartab ;end save addr
ldy vartab+1
lda #<txttab ;indirect with start address
jsr $ffd8 ;save it
jsr dschk ;see if device # >=4, and clear ds if so
bcs erexit
rts
cverf lda #1 ;verify flag
.byte $2c ;skip two bytes
cload
lda #0 ;load flag
sta verck
jsr plsv ;parse parameters
cld10 ;entry from dload
lda verck
ldx txttab ;.x and .y have alt...
ldy txttab+1 ;...load address
jsr $ffd5 ;load it
php
jsr dschk ;see if device # >=4, and clear ds if so
plp
bcs jerxit ;problems
lda verck
beq cld50 ;was load
;
; finish verify
;
ldx #ervfy ;assume error
jsr readst ;read status
and #$10 ;check error
bne cld55 ;replaces beq *+5/jmp error
;
; print verify 'ok' if direct
;
bit runmod ;direct mode?
bmi cld20 ;no
jsr primm
.byte cr, 'OK', cr, 0
cld20
rts
; finish load
;
cld50
jsr readst ;read status
and #$ff-$40 ;clear e.o.i.
beq cld60 ;was o.k.
ldx #erload
cld55
jmp error
cld60
bit runmod ;direct?
bmi cld70 ;no...
stx vartab
sty vartab+1 ;end load address
jsr reddy ;print 'ready'
jsr lnkprg
jsr runc
jmp main
;
; program load
;
cld70
jsr stxtpt
jsr lnkprg
jmp fload
copen
jsr paoc ;parse statement
clc ;do a real open
jsr kopen ;open it
jsr dschk ;see if device # >=4, and clear ds if so
bcs jerxit ;bad stuff
rts ;a.o.k.
cclos
jsr paoc ;parse statement
lda andmsk ;get la
clc ;flag a real close
jsr close ;close it
jsr dschk ;see if device # >=4, and clear ds if so
bcc cld20 ;it's okay
jerxit
jmp erexit
; parse load, save, & verify commands
plsv
; default file name
;
lda #0 ;length=0
jsr setnam
; default device #
;
ldx #1 ;device #1
ldy #0 ;command 0
jsr setlfs
jsr paoc20 ;by-pass junk
jsr paoc15 ;get/set file name
jsr paoc20 ;by-pass junk
jsr plsv7 ;get ',fa'
ldy #0 ;command 0
stx andmsk
jsr setlfs
jsr paoc20 ;by-pass junk
jsr plsv7 ;get ',sa'
txa ;new command
tay
ldx andmsk ;device #
jmp setlfs
; look for comma followed by byte
plsv7 jsr paoc30
jmp getbyt
; skip return if next char is end
;
paoc20
jsr chrgot
bne paocx
pla
pla
paocx rts
; check for comma and good stuff
;
paoc30
jsr chkcom ;check comma
paoc32
jsr chrgot ;get current
bne paocx ;is o.k.
jmp snerr ;bad...end of line
; parse open/close
;
paoc
lda #0
jsr setnam ;default file name
jsr paoc32 ;must got something
jsr getbyt ;get la
stx andmsk
txa
ldx #1 ;default device
ldy #0 ;default command
jsr setlfs ;store it
jsr paoc20 ;skip junk
jsr plsv7
stx eormsk
ldy #0 ;default command
lda andmsk ;get la
cpx #3
bcc paoc5
dey ;default ieee to $ff
paoc5
jsr setlfs ;store them
jsr paoc20 ;skip junk
jsr plsv7 ;get sa
txa
tay
ldx eormsk
lda andmsk
jsr setlfs ;set up real eveything
jsr paoc20
jsr paoc30
paoc15
jsr frmstr ;do frmevl, frestr. return with len in a, index =~string
ldx index1
ldy index1+1
jmp setnam
dschk ;check if device >=4, and clear ds if so
php
pha
lda fa
cmp #4
bcc coout0
jsr oldclr
coout0
pla
plp
rts
;.end