2474
|
1 ***************************************
|
|
2
|
|
3 * Subroutine to transfer data for one file to another
|
|
4
|
|
5 * OTHER MODULES NEEDED: none
|
|
6
|
|
7 * ENTRY: A=source path
|
|
8 * B=destination path
|
|
9 * Y=number of bytes to transfer
|
|
10 * X=buffer for this routine
|
|
11 * U=buffer size
|
|
12
|
|
13
|
|
14 * EXIT: CC carry set if error (from I$Read or I$Write)
|
|
15 * B error code if any
|
|
16
|
|
17 nam File data transfer
|
|
18 ttl Assembler Library Module
|
|
19
|
|
20 csect
|
|
21
|
|
22 * this sets up a stack frame used for variable references
|
|
23
|
|
24 count rmb 2 number of bytes to transfer (2nd Y)
|
|
25 inpath rmb 1 source file (A)
|
|
26 Breg rmb 1 copy of B register
|
|
27 outpath equ Breg dest file
|
|
28 buffer rmb 2 buffer memory (X)
|
|
29 rmb 2 copy of Y
|
|
30 bufsize rmb 2 buffer size (U)
|
|
31
|
|
32 endsect
|
|
33
|
|
34 psect FTRANS,0,0,0,0,0
|
|
35
|
|
36 FTRANS:
|
|
37 pshs a,b,x,y,u
|
|
38 pshs y
|
|
39
|
|
40 loop
|
|
41 ldy count,s bytes left to send
|
|
42 beq exit all done?
|
|
43
|
|
44 lda inpath,s source file
|
|
45 ldx buffer,s buffer area
|
|
46 cmpy bufsize,s is remainder > buffer size
|
|
47 blo get no, get all of remainder
|
|
48 ldy bufsize,s use buffer size
|
|
49
|
|
50 get
|
|
51 os9 I$Read get data
|
|
52 bcs error
|
|
53 lda outpath,s
|
|
54 os9 I$Write
|
|
55 bcs error
|
|
56
|
|
57 pshs y number of bytes got/sent
|
|
58 ldd count+2,s adjust count remaining
|
|
59 subd ,s++
|
|
60 std count,s
|
|
61 bra loop
|
|
62
|
|
63 exit
|
|
64 clra no error
|
|
65 bra exit2
|
|
66
|
|
67 error
|
|
68 coma signal error
|
|
69 stb Breg,s set B
|
|
70
|
|
71 exit2
|
|
72 puls y
|
|
73 puls a,b,x,y,u,pc
|
|
74
|
|
75 endsect
|