annotate level1/modules/rbdw3.asm @ 2231:27f07aa0bca0

Updated modules to use Darren Atkinson's latest changes to low level read/write routines
author boisy
date Sun, 12 Apr 2009 18:48:24 +0000
parents 0d9a3b9b5886
children 07b2433f0c65
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
1 ********************************************************************
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
2 * rbdw3 - DriveWire 3 driver
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
3 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
4 * $Id$
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
5 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
6 * This driver works in conjuction with the DriveWire Server on Linux,
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
7 * Mac or Windows, providing the CoCo with pseudo-disk access through
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
8 * the serial port.
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
9 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
10 * It adheres to the DriveWire Version 3 Protocol.
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
11 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
12 * The baud rate is set at 115200 and the communications requirements
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
13 * are set to 8-N-1. For OS-9 Level One on a CoCo 2, the baud rate
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
14 * is 57600.
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
15 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
16 * Edt/Rev YYYY/MM/DD Modified by
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
17 * Comment
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
18 * ------------------------------------------------------------------
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
19 * 1 2008/02/08 Boisy G. Pitre
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
20 * Started from drivewire.asm in DriveWire 2 Product folder.
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
21 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
22 * 2 2008/04/22 Boisy G. Pitre
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
23 * Verified working operation on a CoCo 3 running NitrOS-9/6809 Level 1 @ 57.6Kbps
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
24 *
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
25 * 3 2009/03/09 Boisy G. Pitre
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
26 * Added checks for size after reading as noted by Darren A's email.
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
27
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
28 nam rbdw3
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
29 ttl DriveWire 3 driver
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
30
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
31 NUMRETRIES equ 8
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
32
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
33 ifp1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
34 use defsfile
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
35 use dwdefs.d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
36 endc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
37
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
38 NumDrvs set 4
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
39
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
40 tylg set Drivr+Objct
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
41 atrv set ReEnt+rev
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
42 rev set $01
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
43 edition set 3
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
44
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
45 mod eom,name,tylg,atrv,start,size
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
46
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
47 rmb DRVBEG+(DRVMEM*NumDrvs)
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
48 driveno rmb 1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
49 retries rmb 1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
50 size equ .
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
51
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
52 fcb DIR.+SHARE.+PEXEC.+PREAD.+PWRIT.+EXEC.+UPDAT.
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
53
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
54 name fcs /rbdw3/
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
55 fcb edition
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
56
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
57 start bra Init
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
58 nop
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
59 bra Read
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
60 nop
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
61 lbra Write
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
62 lbra GetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
63 lbra SetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
64
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
65 * Term
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
66 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
67 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
68 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
69 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
70 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
71 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
72 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
73 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
74 Term
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
75 * Send OP_TERM to the server
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
76 clrb clear Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
77 pshs a,cc then push CC on stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
78 lda #OP_TERM
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
79 leax 1,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
80 sta ,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
81 ldy #$0001
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
82 IFGT LEVEL-1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
83 ldu <D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
84 ELSE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
85 ldu >D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
86 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
87 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
88 puls a,cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
89
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
90 * Init
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
91 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
92 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
93 * Y = address of device descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
94 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
95 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
96 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
97 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
98 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
99 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
100 Init
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
101 IFGT Level-1
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
102 * Perform this so we can successfully do F$Link below
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
103 ldx <D.Proc
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
104 pshs a,x
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
105 ldx <D.SysPrc
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
106 stx <D.Proc
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
107 ELSE
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
108 pshs a
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
109 ENDC
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
110
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
111 ldb #NumDrvs
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
112 stb V.NDRV,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
113 leax DRVBEG,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
114 lda #$FF
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
115 Init2 sta DD.TOT,x invalidate drive tables
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
116 sta DD.TOT+1,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
117 sta DD.TOT+2,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
118 leax DRVMEM,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
119 decb
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
120 bne Init2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
121
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
122 * Link to subroutine module
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
123 clra
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
124 leax name+2,pcr
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
125 os9 F$Link
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
126 bcs InitEx
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
127 tfr y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
128 IFGT LEVEL-1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
129 stu <D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
130 ELSE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
131 stu >D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
132 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
133 * Initialize the low level device
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
134 jsr ,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
135 lda #OP_INIT
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
136 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
137 ldy #$0001
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
138 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
139 clrb
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
140
2211
0d9a3b9b5886 Fixed incorrect label
boisy
parents: 2210
diff changeset
141 InitEx
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
142 IFGT Level-1
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
143 puls a,x
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
144 stx <D.Proc
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
145 rts
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
146 ELSE
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
147 puls a,pc
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
148 ENDC
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
149
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
150 * Read
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
151 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
152 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
153 * B = MSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
154 * X = LSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
155 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
156 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
157 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
158 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
159 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
160 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
161 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
162 Read
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
163 lda #NUMRETRIES
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
164 sta retries,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
165 cmpx #$0000 LSN 0?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
166 bne ReadSect branch if not
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
167 tstb LSN 0?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
168 bne ReadSect branch if not
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
169 * At this point we're reading LSN0
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
170 bsr ReadSect read the sector
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
171 bcs CpyLSNEx if error, exit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
172 leax DRVBEG,u point to start of drive table
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
173 ldb <PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
174 NextDrv beq CopyLSN0 branch if terminal count
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
175 leax <DRVMEM,x else move to next drive table entry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
176 decb decrement counter
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
177 bra NextDrv and continue
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
178 CopyLSN0 ldb #DD.SIZ get size to copy
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
179 ldy PD.BUF,y point to buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
180 CpyLSNLp lda ,y+ get byte from buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
181 sta ,x+ and save in drive table
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
182 decb
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
183 bne CpyLSNLp
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
184 CpyLSNEx rts
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
185
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
186
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
187 ReadSect pshs cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
188 pshs u,y,x,b,a,cc then push CC and others on stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
189 * Send out op code and 3 byte LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
190 lda PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
191 cmpa #NumDrvs
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
192 blo Read1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
193 ldb #E$Unit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
194 bra ReadEr2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
195 Read1 sta driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
196 lda #OP_READEX load A with READ opcode
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
197
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
198 Read2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
199 ldb driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
200 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
201 std ,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
202 ldy #5
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
203 IFGT LEVEL-1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
204 ldu <D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
205 ELSE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
206 ldu >D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
207 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
208 orcc #IntMasks
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
209 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
210
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
211 * Get 256 bytes of sector data
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
212 ldx 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
213 ldx PD.BUF,x get buffer pointer into X
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2211
diff changeset
214 ldy #$0100
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
215 jsr 3,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
216 bcs ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
217 bne ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
218 pshs y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
219 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
220 ldy #$0002
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
221 jsr 6,u write checksum to server
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
222
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
223 * Get error code byte
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
224 leax ,s
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2211
diff changeset
225 ldy #$0001
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
226 jsr 3,u
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
227 bcs ReadEr0 branch if we timed out
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
228 bne ReadEr0
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
229 puls d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
230 tfr a,b transfer byte to B (in case of error)
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
231 tstb is it zero?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
232 beq ReadEx if not, exit with error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
233 cmpb #E$CRC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
234 bne ReadEr2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
235 ldu 7,s get U from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
236 dec retries,u decrement retries
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
237 beq ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
238
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
239 lda #OP_REREADEX reread opcode
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
240 bra Read2 and try getting sector again
2195
8b38d4f75b44 Addressed issue raised by Darren A about checking error code size
boisy
parents: 2194
diff changeset
241 ReadEr0 puls d
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
242 ReadEr1 ldb #E$Read read error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
243 ReadEr2 lda 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
244 ora #Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
245 sta 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
246 ReadEx leas 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
247 puls y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
248 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
249
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
250 * Write
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
251 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
252 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
253 * B = MSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
254 * X = LSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
255 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
256 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
257 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
258 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
259 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
260 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
261 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
262 Write lda #NUMRETRIES
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
263 sta retries,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
264 pshs cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
265 pshs u,y,x,b,a,cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
266 * Send out op code and 3 byte LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
267 lda PD.DRV,y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
268 cmpa #NumDrvs
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
269 blo Write1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
270 comb set Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
271 ldb #E$Unit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
272 bra WritEx
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
273 Write1 sta driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
274 lda #OP_WRITE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
275 Write15
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
276 ldb driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
277 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
278 std ,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
279 ldy #$0005
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
280 IFGT LEVEL-1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
281 ldu <D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
282 ELSE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
283 ldu >D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
284 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
285 orcc #IntMasks
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
286 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
287
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
288 * Compute checksum on sector we just sent and send checksum to server
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
289 ldy 5,s get Y from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
290 ldx PD.BUF,y point to buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
291 ldy #256
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
292 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
293 leax -256,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
294 bsr DoCSum
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
295 pshs d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
296 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
297 ldy #$0002
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
298 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
299
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
300 * Await acknowledgement from server on receipt of sector
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
301 leax ,s
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2211
diff changeset
302 ldy #$0001
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
303 jsr 3,u read ack byte from server
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
304 bcs WritEx0
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
305 bne WritEx0
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
306 puls d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
307 tsta
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
308 beq WritEx yep
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
309 tfr a,b
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
310 cmpb #E$CRC checksum error?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
311 bne WritEx2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
312 ldu 7,s get U from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
313 dec retries,u decrement retries
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
314 beq WritEx1 exit with error if no more
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
315 lda #OP_REWRIT else resend
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
316 bra Write15
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
317 WritEx0 puls d
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
318 WritEx1 ldb #E$Write
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
319 WritEx2 lda 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
320 ora #Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
321 sta 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
322 WritEx leas 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
323 puls y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
324 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
325
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
326 use dwcheck.asm
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
327
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
328 * SetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
329 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
330 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
331 * R$B = function code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
332 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
333 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
334 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
335 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
336 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
337 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
338 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
339 SetStat lda #OP_SETSTA
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
340 * Size optimization
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
341 fcb $8C skip next two bytes
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
342
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
343
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
344 * GetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
345 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
346 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
347 * R$B = function code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
348 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
349 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
350 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
351 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
352 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
353 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
354 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
355 GetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
356 lda #OP_GETSTA
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
357 clrb clear Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
358 pshs cc and push CC on stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
359 leas -3,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
360 sta ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
361 lda PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
362 ldx PD.RGS,y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
363 ldb R$B,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
364 std 1,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
365 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
366 ldy #$0003
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
367 IFGT LEVEL-1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
368 ldu <D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
369 ELSE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
370 ldu >D.DWSUB
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
371 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
372 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
373 leas 3,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
374 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
375
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
376 emod
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
377 eom equ *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
378 end