annotate level1/modules/rbdw3.asm @ 2298:d806d969eb17

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