annotate level1/modules/rbdw3.asm @ 2535:44f8ba0d87a4

Fixed crash in init routine
author boisy
date Wed, 28 Apr 2010 04:07:18 +0000
parents f3e79ee2ffef
children b8c7b7fbf3c9
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
2309
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
131 * Check if subroutine module has already been linked
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
132 IFGT LEVEL-1
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
133 ldu <D.DWSubAddr
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
134 ELSE
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
135 ldu >D.DWSubAddr
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
136 ENDC
2535
44f8ba0d87a4 Fixed crash in init routine
boisy
parents: 2309
diff changeset
137 bne InitEx
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
138 * Link to subroutine module
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
139 clra
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
140 leax name+2,pcr
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
141 os9 F$Link
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
142 bcs InitEx
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
143 tfr y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
144 IFGT LEVEL-1
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
145 stu <D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
146 ELSE
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
147 stu >D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
148 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
149 * Initialize the low level device
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
150 jsr ,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
151 lda #OP_INIT
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
152 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
153 ldy #$0001
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
154 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
155 clrb
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
156
2211
0d9a3b9b5886 Fixed incorrect label
boisy
parents: 2210
diff changeset
157 InitEx
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
158 IFGT Level-1
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
159 puls a,x
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
160 stx <D.Proc
2309
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
161 InitEx2
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
162 rts
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
163 ELSE
2309
f3e79ee2ffef Driver now moved ISR to dw3, all works
boisy
parents: 2298
diff changeset
164 InitEx2
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
165 puls a,pc
2210
7ee1bed662f2 Fixed driver to copy D.SysPrc in Level 2 to D.Proc before link
boisy
parents: 2195
diff changeset
166 ENDC
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
167
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
168 * Read
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
169 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
170 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
171 * B = MSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
172 * X = LSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
173 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
174 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
175 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
176 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
177 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
178 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
179 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
180 Read
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
181 lda #NUMRETRIES
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
182 sta retries,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
183 cmpx #$0000 LSN 0?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
184 bne ReadSect branch if not
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
185 tstb LSN 0?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
186 bne ReadSect branch if not
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
187 * At this point we're reading LSN0
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
188 bsr ReadSect read the sector
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
189 bcs CpyLSNEx if error, exit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
190 leax DRVBEG,u point to start of drive table
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
191 ldb <PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
192 NextDrv beq CopyLSN0 branch if terminal count
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
193 leax <DRVMEM,x else move to next drive table entry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
194 decb decrement counter
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
195 bra NextDrv and continue
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
196 CopyLSN0 ldb #DD.SIZ get size to copy
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
197 ldy PD.BUF,y point to buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
198 CpyLSNLp lda ,y+ get byte from buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
199 sta ,x+ and save in drive table
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
200 decb
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
201 bne CpyLSNLp
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
202 CpyLSNEx rts
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
203
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
204
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
205 ReadSect pshs cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
206 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
207 * Send out op code and 3 byte LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
208 lda PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
209 cmpa #NumDrvs
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
210 blo Read1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
211 ldb #E$Unit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
212 bra ReadEr2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
213 Read1 sta driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
214 lda #OP_READEX load A with READ opcode
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
215
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
216 Read2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
217 ldb driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
218 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
219 std ,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
220 ldy #5
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
221 IFGT LEVEL-1
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
222 ldu <D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
223 ELSE
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
224 ldu >D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
225 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
226 orcc #IntMasks
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
227 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
228
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
229 * Get 256 bytes of sector data
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
230 ldx 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
231 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
232 ldy #$0100
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
233 jsr 3,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
234 bcs ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
235 bne ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
236 pshs y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
237 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
238 ldy #$0002
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
239 jsr 6,u write checksum to server
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
240
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
241 * Get error code byte
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
242 leax ,s
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2211
diff changeset
243 ldy #$0001
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
244 jsr 3,u
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
245 bcs ReadEr0 branch if we timed out
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
246 bne ReadEr0
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
247 puls d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
248 tfr a,b transfer byte to B (in case of error)
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
249 tstb is it zero?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
250 beq ReadEx if not, exit with error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
251 cmpb #E$CRC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
252 bne ReadEr2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
253 ldu 7,s get U from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
254 dec retries,u decrement retries
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
255 beq ReadEr1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
256
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
257 lda #OP_REREADEX reread opcode
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
258 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
259 ReadEr0 puls d
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
260 ReadEr1 ldb #E$Read read error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
261 ReadEr2 lda 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
262 ora #Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
263 sta 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
264 ReadEx leas 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
265 puls y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
266 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
267
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
268 * Write
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
269 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
270 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
271 * B = MSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
272 * X = LSB of LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
273 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
274 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
275 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
276 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
277 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
278 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
279 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
280 Write lda #NUMRETRIES
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
281 sta retries,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
282 pshs cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
283 pshs u,y,x,b,a,cc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
284 * Send out op code and 3 byte LSN
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
285 lda PD.DRV,y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
286 cmpa #NumDrvs
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
287 blo Write1
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
288 comb set Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
289 ldb #E$Unit
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
290 bra WritEx
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
291 Write1 sta driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
292 lda #OP_WRITE
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
293 Write15
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
294 ldb driveno,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
295 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
296 std ,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
297 ldy #$0005
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
298 IFGT LEVEL-1
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
299 ldu <D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
300 ELSE
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
301 ldu >D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
302 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
303 orcc #IntMasks
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
304 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
305
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
306 * Compute checksum on sector we just sent and send checksum to server
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
307 ldy 5,s get Y from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
308 ldx PD.BUF,y point to buffer
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
309 ldy #256
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
310 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
311 leax -256,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
312 bsr DoCSum
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
313 pshs d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
314 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
315 ldy #$0002
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
316 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
317
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
318 * Await acknowledgement from server on receipt of sector
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
319 leax ,s
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2211
diff changeset
320 ldy #$0001
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
321 jsr 3,u read ack byte from server
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
322 bcs WritEx0
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
323 bne WritEx0
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
324 puls d
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
325 tsta
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
326 beq WritEx yep
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
327 tfr a,b
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
328 cmpb #E$CRC checksum error?
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
329 bne WritEx2
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
330 ldu 7,s get U from stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
331 dec retries,u decrement retries
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
332 beq WritEx1 exit with error if no more
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
333 lda #OP_REWRIT else resend
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
334 bra Write15
2194
8a96f5241556 *** empty log message ***
boisy
parents: 2180
diff changeset
335 WritEx0 puls d
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
336 WritEx1 ldb #E$Write
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
337 WritEx2 lda 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
338 ora #Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
339 sta 9,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
340 WritEx leas 5,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
341 puls y,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
342 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
343
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
344 use dwcheck.asm
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
345
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
346 * SetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
347 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
348 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
349 * R$B = function code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
350 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
351 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
352 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
353 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
354 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
355 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
356 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
357 SetStat lda #OP_SETSTA
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
358 * Size optimization
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
359 fcb $8C skip next two bytes
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
360
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
361
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
362 * GetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
363 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
364 * Entry:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
365 * R$B = function code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
366 * Y = address of path descriptor
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
367 * U = address of device memory area
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
368 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
369 * Exit:
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
370 * CC = carry set on error
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
371 * B = error code
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
372 *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
373 GetStat
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
374 lda #OP_GETSTA
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
375 clrb clear Carry
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
376 pshs cc and push CC on stack
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
377 leas -3,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
378 sta ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
379 lda PD.DRV,y get drive number
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
380 ldx PD.RGS,y
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
381 ldb R$B,x
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
382 std 1,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
383 leax ,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
384 ldy #$0003
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
385 IFGT LEVEL-1
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
386 ldu <D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
387 ELSE
2270
07b2433f0c65 moved dwdefs.d to defs/, major changes to drivers due to new globals arrangement.
boisy
parents: 2231
diff changeset
388 ldu >D.DWSubAddr
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
389 ENDC
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
390 jsr 6,u
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
391 leas 3,s
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
392 puls cc,pc
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
393
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
394 emod
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
395 eom equ *
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
396 end