46
|
1 *******************************************************************2
|
|
2 * Virtual RBF - Random Block File Manager *
|
45
|
3
|
|
4 nam VRBF
|
|
5 ttl VRandom Block File Manager
|
|
6
|
|
7 ifp1
|
|
8 use defsfile
|
|
9 endc
|
|
10
|
|
11 rev set $00
|
|
12 ty set FlMgr
|
|
13 IFNE H6309
|
|
14 lg set Obj6309
|
|
15 ELSE
|
|
16 lg set Objct
|
|
17 ENDC
|
|
18 tylg set ty+lg
|
|
19 atrv set ReEnt+rev
|
|
20 edition set 37
|
|
21
|
|
22 org $00
|
|
23 size equ .
|
|
24
|
|
25 mod eom,name,tylg,atrv,start,size
|
|
26
|
|
27 name fcs /VRBF/
|
|
28 fcb edition
|
|
29
|
|
30 *L0012 fcb DRVMEM
|
|
31
|
|
32
|
|
33 ****************************
|
|
34 *
|
|
35 * Main entry point for RBF
|
|
36 *
|
|
37 * Entry: Y = Path descriptor pointer
|
|
38 * U = Register stack pointer
|
|
39
|
46
|
40 start lbra Create
|
45
|
41 lbra Open
|
|
42 lbra MakDir
|
|
43 lbra ChgDir
|
|
44 lbra Delete
|
|
45 lbra Seek
|
|
46 lbra Read
|
|
47 lbra Write
|
|
48 lbra ReadLn
|
|
49 lbra WriteLn
|
|
50 lbra GetStat
|
|
51 lbra SetStat
|
|
52 lbra Close
|
|
53
|
46
|
54 *
|
|
55 *
|
|
56 *
|
|
57
|
45
|
58
|
|
59 *
|
|
60 * I$Create Entry Point
|
|
61 *
|
|
62 * Entry: A = access mode desired (0 read, 1 write, 2 update, bit 4 for exex)
|
|
63 * B = file attributes
|
|
64 * X = address of the pathlist
|
|
65 *
|
|
66 * Exit: A = pathnum
|
|
67 * X = last byte of pathlist address
|
|
68 *
|
|
69 * Error: CC Carry set
|
|
70 * B = errcode
|
|
71 *
|
46
|
72 Create pshs y,u,cc Preserve path desc ptr
|
|
73 orcc #IntMasks
|
45
|
74 bsr setuppd
|
|
75 stb 4,u put file attribute
|
46
|
76 ldb #$d1
|
|
77 stb ,u do IO b,x will be rewrited
|
45
|
78 ldb ,u
|
|
79 beq ok00
|
46
|
80 bra er00
|
45
|
81
|
|
82 *
|
|
83 * I$Open Entry Point
|
|
84 *
|
|
85 * Entry: A = access mode desired
|
|
86 * X = address of the pathlist
|
|
87 *
|
|
88 * Exit: A = pathnum
|
|
89 * X = last byte of pathlist address
|
|
90 *
|
|
91 * Error: CC Carry set
|
|
92 * B = errcode
|
|
93 *
|
46
|
94 Open pshs y,u,cc
|
|
95 orcc #IntMasks
|
45
|
96 bsr setuppd
|
46
|
97 ldb #$d2
|
47
|
98 stb ,x
|
|
99 ldb ,x
|
46
|
100 cmpb #0
|
45
|
101 beq ok00
|
|
102 bra er00
|
|
103
|
46
|
104 * u user stack
|
|
105 * y path descriptor
|
|
106 * PD.PD.y path number
|
|
107 * PD.PD.MOD.y mode
|
|
108 * PD.RGS,y caller's rega = u
|
|
109 * PD.DEV,y device table
|
|
110 * PD.DRV,y drive number
|
|
111
|
|
112 setuppd ldx #$FFc0 vdisk port
|
47
|
113 sty 7,x path descriptor
|
46
|
114 stu 5,x caller stack
|
|
115 lda <PD.DRV,y
|
|
116 sta 1,x
|
|
117 clra
|
47
|
118 ldy <D.Proc get process pointer
|
|
119 cmpy <D.SysPrc
|
46
|
120 beq sysmode
|
|
121 lda #1
|
|
122 sysmode sta 2,x
|
|
123 lda R$A,u
|
|
124 bita #EXEC.
|
|
125 bne usechx
|
47
|
126 ldd P$DIO+4,y get curwdir #pdnumber
|
46
|
127 bra s1
|
47
|
128 usechx ldd P$DIO+10,y get curxdir #pdnumber
|
46
|
129 s1
|
47
|
130 std 3,x
|
46
|
131 rts
|
|
132
|
|
133 er00 puls y,u,cc
|
|
134 orcc #Carry
|
|
135 rts
|
|
136 ok00 puls y,u,cc,pc
|
|
137
|
45
|
138 *
|
|
139 * I$MakDir Entry Point
|
|
140 *
|
|
141 * Entry: X = address of the pathlist
|
|
142 *
|
|
143 * Exit: X = last byte of pathlist address
|
|
144 *
|
|
145 * Error: CC Carry set
|
|
146 * B = errcode
|
|
147 *
|
46
|
148 MakDir pshs y,u,cc
|
|
149 orcc #IntMasks
|
45
|
150 bsr setuppd
|
46
|
151 ldb #$d3
|
47
|
152 stb ,x
|
|
153 ldb ,x
|
46
|
154 cmpb #0
|
45
|
155 beq ok00
|
|
156 bra er00
|
|
157
|
|
158 *
|
|
159 * I$Close Entry Point
|
|
160 *
|
|
161 * Entry: A = path number
|
|
162 *
|
|
163 * Exit:
|
|
164 *
|
|
165 * Error: CC Carry set
|
|
166 * B = errcode
|
|
167 *
|
46
|
168 Close pshs y,u,cc
|
|
169 orcc #IntMasks
|
45
|
170 bsr setuppd
|
|
171 ldb #$db
|
47
|
172 stb ,x
|
|
173 ldb ,x
|
46
|
174 cmpb #0
|
45
|
175 beq ok00
|
|
176 bra er00
|
|
177
|
|
178 *
|
|
179 * I$ChgDir Entry Point
|
|
180 *
|
|
181 * Entry:
|
|
182 *
|
|
183 * Exit:
|
|
184 *
|
|
185 * Error: CC Carry set
|
|
186 * B = errcode
|
|
187 *
|
46
|
188 ChgDir pshs y,u,cc
|
|
189 orcc #IntMasks
|
45
|
190 bsr setuppd
|
|
191 ldb #$d4
|
47
|
192 stb ,x
|
|
193 ldb ,x
|
|
194 ldy 1,s
|
|
195 ldx <D.Proc get process pointer
|
46
|
196 ldu PD.RGS,y
|
|
197 lda R$A,u
|
45
|
198 ldb PD.MOD,y get current file mode
|
|
199 bitb #UPDAT. read or write mode?
|
|
200 beq CD30D no, skip ahead
|
|
201 * Change current data dir
|
46
|
202 clr P$DIO+4,x
|
45
|
203 sta P$DIO+5,x
|
|
204 CD30D bitb #EXEC. is it execution dir?
|
46
|
205 beq ok01 no, skip ahead
|
45
|
206 * Change current execution directory
|
46
|
207 clr P$DIO+10,x
|
45
|
208 sta P$DIO+11,x
|
46
|
209 bra ok01
|
45
|
210
|
|
211 *
|
|
212 * I$Delete Entry Point
|
|
213 *
|
|
214 * Entry:
|
|
215 *
|
|
216 * Exit:
|
|
217 *
|
|
218 * Error: CC Carry set
|
|
219 * B = errcode
|
|
220 *
|
|
221 *
|
46
|
222 Delete pshs y,u,cc
|
|
223 orcc #IntMasks
|
|
224 lbsr setuppd
|
45
|
225 ldb #$d5
|
47
|
226 stb ,x
|
|
227 ldb ,x
|
46
|
228 cmpb #0
|
|
229 beq ok01
|
|
230 bra er01
|
45
|
231
|
|
232 *
|
|
233 * I$Seek Entry Point
|
|
234 *
|
|
235 * Entry:
|
|
236 *
|
|
237 * Exit:
|
|
238 *
|
|
239 * Error: CC Carry set
|
|
240 * B = errcode
|
|
241 *
|
46
|
242 Seek pshs y,u,cc
|
|
243 orcc #IntMasks
|
|
244 lbsr setuppd
|
45
|
245 ldb #$d6
|
47
|
246 stb ,x
|
|
247 ldb ,x
|
46
|
248 cmpb #0
|
|
249 beq ok01
|
|
250 bra er01
|
45
|
251
|
|
252 *
|
|
253 * I$ReadLn Entry Point
|
|
254 *
|
|
255 * Entry:
|
|
256 *
|
|
257 * Exit:
|
|
258 *
|
|
259 * Error: CC Carry set
|
|
260 * B = errcode
|
|
261 *
|
46
|
262 ReadLn pshs y,u,cc
|
|
263 orcc #IntMasks
|
|
264 lbsr setuppd
|
45
|
265 ldb #$d7
|
47
|
266 stb ,x
|
|
267 ldb ,x
|
46
|
268 beq ok01
|
|
269 bra er01
|
45
|
270
|
|
271 *
|
|
272 * I$Read Entry Point
|
|
273 *
|
|
274 * Entry:
|
|
275 *
|
|
276 * Exit:
|
|
277 *
|
|
278 * Error: CC Carry set
|
|
279 * B = errcode
|
|
280 *
|
46
|
281 Read pshs y,u,cc
|
|
282 orcc #IntMasks
|
|
283 lbsr setuppd
|
45
|
284 ldb #$d8
|
47
|
285 stb ,x
|
|
286 ldb ,x
|
46
|
287 beq ok01
|
|
288 bra er01
|
45
|
289
|
|
290
|
|
291 *
|
|
292 * I$WritLn Entry Point
|
|
293 *
|
|
294 * Entry:
|
|
295 *
|
|
296 * Exit:
|
|
297 *
|
|
298 * Error: CC Carry set
|
|
299 * B = errcode
|
|
300 *
|
46
|
301 WriteLn pshs y,u,cc
|
|
302 orcc #IntMasks
|
|
303 lbsr setuppd
|
45
|
304 ldb #$d9
|
47
|
305 stb ,x
|
|
306 ldb ,x
|
46
|
307 beq ok01
|
|
308 bra er01
|
45
|
309
|
|
310 *
|
|
311 * I$Write Entry Point
|
|
312 *
|
|
313 * Entry:
|
|
314 *
|
|
315 * Exit:
|
|
316 *
|
|
317 * Error: CC Carry set
|
|
318 * B = errcode
|
|
319 *
|
46
|
320 Write pshs y,u,cc
|
|
321 orcc #IntMasks
|
|
322 lbsr setuppd
|
45
|
323 ldb #$da
|
47
|
324 stb ,x
|
|
325 ldb ,x
|
46
|
326 beq ok01
|
|
327 er01 puls y,u,cc
|
|
328 orcc #Carry
|
|
329 rts
|
|
330 ok01 puls y,u,cc,pc
|
45
|
331
|
|
332 *
|
|
333 * I$GetStat Entry Point
|
|
334 *
|
|
335 * Entry:
|
|
336 *
|
|
337 * Exit:
|
|
338 *
|
|
339 * Error: CC Carry set
|
|
340 * B = errcode
|
|
341 *
|
46
|
342 GetStat pshs y,u,cc
|
|
343 orcc #IntMasks
|
45
|
344 ldb R$B,u get function code
|
46
|
345 lbsr setuppd
|
45
|
346 ldb #$dc
|
47
|
347 stb ,x
|
|
348 ldb ,x
|
46
|
349 beq ok01
|
|
350 bra er01
|
45
|
351
|
|
352
|
|
353 *
|
|
354 * I$SetStat Entry Point
|
|
355 *
|
|
356 * Entry:
|
|
357 *
|
|
358 * Exit:
|
|
359 *
|
|
360 * Error: CC Carry set
|
|
361 * B = errcode
|
|
362 *
|
46
|
363 SetStat pshs y,u,cc
|
|
364 orcc #IntMasks
|
45
|
365 ldb R$B,u get function code
|
46
|
366 lbsr setuppd
|
45
|
367 ldb #$dd
|
47
|
368 stb ,x
|
|
369 ldb ,x
|
46
|
370 beq ok01
|
|
371 bra er01
|
45
|
372
|
|
373
|
|
374 emod
|
|
375 eom equ *
|
|
376 end
|
|
377
|