1;most references to kernal are defined here
2;
3erexit	cmp #$f0        ;check for special case
4	bne erexix
5; top of memory has changed
6	sty memsiz+1
7	stx memsiz
8	jmp cleart      ;act as if he typed clear
9erexix	tax             ;set termination flags
10	bne erexiy
11	ldx #erbrk      ;break error
12erexiy	jmp error       ;normal error
13
14clschn	=$ffcc
15
16outch	jsr $ffd2
17	bcs erexit
18	rts
19
20inchr	jsr $ffcf
21	bcs erexit
22	rts
23
24ccall	=$ffe7
25
26coout	jsr ppach       ; go out to save .a for print# patch
27	bcs erexit
28	rts
29
30coin	jsr $ffc6
31	bcs erexit
32	rts
33
34readst	=$ffb7
35
36cgetl	jsr $ffe4
37	bcs erexit
38	rts
39
40setmsg	=$ff90
41
42plot	=$fff0
43
44csys	jsr frmadr      ;get int. addr
45	lda #>csysrz    ;push return address
46	pha
47	lda #<csysrz
48	pha
49	lda spreg       ;status reg
50	pha
51	lda sareg       ;load 6502 regs
52	ldx sxreg
53	ldy syreg
54	plp             ;load 6502 status reg
55	jmp (linnum)    ;go do it
56csysrz	=*-1            ;return to here
57	php             ;save status reg
58	sta sareg       ;save 6502 regs
59	stx sxreg
60	sty syreg
61	pla             ;get status reg
62	sta spreg
63	rts             ;return to system
64
65csave	jsr plsv        ;parse parms
66	bcs nsnerr6
67	jmp snerr6      ;disallow bank/address parms
68nsnerr6	ldx vartab      ;end save addr
69	ldy vartab+1
70	lda #<txttab    ;indirect with start address
71	jsr $ffd8       ;save it
72	bcs erexit
73	rts
74
75cverf	lda #1          ;verify flag
76	bra :+
77
78cload	lda #0          ;load flag
79:	pha
80	jsr plsv        ;parse parameters
81	bcs cld9
82	ldx andmsk
83	stx $9f61
84cld9	pla
85;
86cld10	; jsr $ffe1 ;check run/stop
87; cmp #$ff ;done yet?
88; bne cld10 ;still bouncing
89	sta verck
90	ldx poker       ;.x and .y have alt...
91	ldy poker+1     ;...load address
92	jsr $ffd5       ;load it
93	bcs jerxit      ;problems
94;
95	lda verck
96	cmp #1
97	bne cld50       ;was load
98;
99;finish verify
100;
101	ldx #ervfy      ;assume error
102	jsr $ffb7       ;read status
103	and #$10        ;check error
104	bne cld55       ;replaces beq *+5/jmp error
105;
106;print verify 'ok' if direct
107;
108	lda txtptr
109	cmp #bufpag
110	beq cld20
111	lda #<okmsg
112	ldy #>okmsg
113	jmp strout
114;
115cld20	rts
116
117;
118;finish load
119;
120cld50	jsr $ffb7       ;read status
121	and #$ff-$40    ;clear e.o.i.
122	beq cld60       ;was o.k.
123	ldx #erload
124cld55	jmp error
125;
126cld60	lda eormsk
127	bne cld20
128	lda txtptr+1
129	cmp #bufpag     ;direct?
130	bne cld70       ;no...
131;
132	stx vartab
133	sty vartab+1    ;end load address
134	lda #<reddy
135	ldy #>reddy
136	jsr strout
137	jmp fini
138;
139;program load
140;
141cld70	jsr stxtpt
142	jsr lnkprg
143	jmp fload
144
145copen	jsr paoc        ;parse statement
146	jsr $ffc0       ;open it
147	bcs jerxit      ;bad stuff or memsiz change
148	rts             ;a.o.k.
149
150snerr6	jmp snerr
151
152cclos	jsr paoc        ;parse statement
153	lda andmsk      ;get la
154	jsr $ffc3       ;close it
155	bcc cld20       ;it's okay...no memsize change
156;
157jerxit	jmp erexit
158
159;
160;parse load and save commands
161;
162;[filename[,dev[,relocate]]]
163; or:
164;[filename[,dev[,bank,address]]]
165;
166;if the first form is used:
167;- poker points to the start of basic
168;- the carry flag is set
169;- eormsk contains 0
170;otherwise:
171;- relocate is taken as 0
172;- the bank number is in andmsk
173;- poker contains the specified address
174;- the carry flag is clear
175;- eormsk contains 1
176;
177plsv
178;default file name
179;
180	lda #0          ;length=0
181	sta eormsk
182	jsr $ffbd
183;
184;default device #
185;
186	pha
187	jsr getfa
188	tax
189	pla
190	ldy #0          ;command 0
191	jsr $ffba
192;
193;default address
194;
195	lda txttab
196	sta poker
197	lda txttab+1
198	sta poker+1
199;
200	jsr chrgot      ;end of statement?
201	beq plsv30      ;yes
202	jsr paoc15      ;get/set file name
203	jsr paoc20      ;quit if no comma
204	jsr getbyt      ;get 'fa'
205	ldy #0          ;command 0
206	stx andmsk
207	jsr paoc19      ;store x,y then maybe quit
208	jsr getbyt      ;get 'sa'
209	txa             ;new command
210	tay
211	ldx andmsk      ;device #
212	jsr paoc19      ;store x,y then maybe quit
213	sty andmsk      ;bank number
214	ldy #0
215	jsr $ffba
216	jsr frmadr      ;put address in poker
217;
218;eat trailing garbage after address parm
219;
220;	jsr chrgot
221;	beq plsv20
222;plsv10	jsr chrget
223;	bne plsv10
224;
225plsv20	inc eormsk
226plsv30	rts
227
228;store file parms then maybe end
229paoc19	jsr $ffba
230
231;quit if there's no comma
232;
233paoc20	jsr chrgot
234	cmp #','
235	beq paoc30
236	pla
237	pla
238	sec
239	rts
240paoc30	jmp chrget
241
242;parse open/close
243;
244paoc	lda #0
245	jsr $ffbd       ;default file name
246;
247	jsr chrgot
248	beq snerr6      ;must got something
249	jsr getbyt      ;get la
250	stx andmsk
251	jsr getfa
252	tax
253	lda andmsk      ;restore la
254	ldy #0          ;default command
255	jsr paoc19      ;store x,y then maybe quit
256	jsr getbyt
257	stx eormsk
258	ldy #0          ;default command
259	lda andmsk      ;get la
260	cpx #3
261	bcc paoc5
262	dey             ;default ieee to $ff
263paoc5	jsr paoc19      ;store x,y then maybe quit
264	jsr getbyt      ;get sa
265	txa
266	tay
267	ldx eormsk
268	lda andmsk
269	jsr paoc19      ;store x,y then maybe quit
270paoc15	jsr frmstr      ;length in .a
271	ldx index1
272	ldy index1+1
273	jmp $ffbd
274
275; rsr 8/10/80 - change sys command
276; rsr 8/26/80 - add open&close memsiz detect
277; rsr 10/7/80 - change load (remove run wait)
278; rsr 4/10/82 - inline fix program load
279; rsr 7/02/82 - fix print# problem
280