annotate 3rdparty/drivers/emudsk/emudsk.asm @ 1962:bb1b40b486e9

Fixed up to use vtio/covdg/cohr
author afra
date Wed, 04 Jan 2006 14:19:36 +0000
parents 28ca7d4dd2c8
children 4c3c19ec3257
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
402
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
1 ********************************************************************
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
2 * Emudsk - Virtual disk driver for CoCo emulators
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
3 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
4 * $Id$
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
5 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
7 * ------------------------------------------------------------------
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
8 * 01 Modified to compile under OS9Source tjl 02/08/28
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
9
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
10 * EmuDisk floppy disk controller driver
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
11 * Edition #1
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
12 * 04/18/96 : Written from scratch by Alan DeKok
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
13 * aland@sandelman.ocunix.on.ca
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
14 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
15 * This program is Copyright (C) 1996 by Alan DeKok,
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
16 * All Rights Reserved.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
17 * License is given to individuals for personal use only.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
18 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
19 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
20 * Comments: Ensure that device descriptors mark it as a hard drive
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
21 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
22 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
23 * $FF80-$FF82: logical record number
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
24 LSN equ $FF80 where to put the logical sector number
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
25
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
26 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
27 * $FF83: command/status register.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
28 * Output: 0=read, 1=write, 2=close.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
29 * Input: 0=no error, non-zero=error codes (see below).
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
30 command equ $FF83 where to put the commands
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
31
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
32 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
33 * $FF84-$FF85: 6809's 16-bit buffer address (cannot cross an 8K boundary due
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
34 * to interference from the MMU emulation).
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
35 buffer equ $FF84 pointer to the buffer
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
36
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
37 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
38 * Returns:
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
39 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
40 * 0=successful
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
41 * 2=not enabled
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
42 * 4=too many MS-DOS files open,
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
43 * 5=access denied (virtual HD file locked by another program
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
44 * or MS-DOS read-only status)
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
45 * 6/12=internal error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
46 * 254=invalid command byte
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
47 * 255=power-on state or closed.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
48 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
49 * The "close" command just flushes all the read/write buffers and
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
50 * restores the metacontroller to its power-up state. The hard drive must be
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
51 * enabled by the user using the MS-DOS command "ECHO >COCO3.VHD" (another
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
52 * crash safeguard), so error code 2 indicates this has not been done.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
53
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
54
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
55 nam EmuDsk
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
56 ttl os9 device driver
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
57
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
58 ifp1
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
59 use os9defs
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
60 use rbfdefs
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
61 endc
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
62
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
63 tylg set Drivr+Objct
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
64 atrv set ReEnt+rev
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
65 rev set $01
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
66
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
67 mod eom,name,tylg,atrv,start,size
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
68 fcb $ff
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
69
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
70 org 0
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
71 u0000 rmb $FF Normal RBF device mem for 4 drives
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
72 size equ .
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
73
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
74 fcb $FF This byte is the driver permissions
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
75 name fcs /EmuDsk/
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
76 fcb 1 edition #1
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
77
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
78
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
79 * Entry: Y=Ptr to device descriptor
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
80 * U=Ptr to device mem
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
81 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
82 * Default to only one drive supported, there's really no need for more.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
83 INIT lda #$FF 'Invalid' value & # of drives
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
84 leax DRVBEG,u Point to start of drive tables
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
85 sta ,x DD.TOT MSB to bogus value
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
86 sta <V.TRAK,x Init current track # to bogus value
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
87
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
88 * for now, TERM routine goes here. Perhaps it should be pointing to the
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
89 * park routine? ... probably not.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
90 TERM
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
91 GETSTA clrb no GetStt calls - return, no error, ignore
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
92 L0086 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
93
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
94 start lbra INIT 3 bytes per entry to keep RBF happy
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
95 lbra READ
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
96 lbra WRITE
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
97 lbra GETSTA
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
98 lbra SETSTA
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
99 lbra TERM
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
100
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
101 * Entry: B:X = LSN
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
102 * Y = path dsc. ptr
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
103 * U = Device mem ptr
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
104 READ clra READ the sector
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
105 bsr GetSect Go read the sector, exiting if there's an error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
106 tstb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
107 bne GETSTA if not sector 0, return
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
108 leax ,x sets CC.Z bit
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
109 bne GETSTA if not sector zero, return
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
110
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
111 * LSN0, standard OS-9 format
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
112 * Actually, this isn't really necessary for a HD, as the information in
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
113 * LSN0 never changes after it's read in once. But we'll do it anyhow
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
114 ldx PD.BUF,y Get ptr to sector buffer
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
115 leau DRVBEG,u point to the beginning of the drive tables
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
116 ldb #DD.SIZ copy bytes over
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
117 copy.0 lda ,x+ grab from LSN0
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
118 sta ,u+ save into device static storage
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
119 decb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
120 bne copy.0
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
121 clrb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
122 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
123
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
124 WRITE lda #$01 WRITE to emulator disk, and fall thru to GetSect
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
125
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
126 * Get Sector comes here with:
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
127 * Entry: A = read/write command code (0/1)
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
128 * B,X = LSN to read/write
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
129 * Y = path dsc. ptr
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
130 * U = Device static storage ptr
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
131 * Exit: A = error status from command register
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
132 GetSect tst <PD.DRV,y get drive number requested
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
133 bne DrivErr only one drive allowed, return error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
134
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
135 pshs x,b save LSN for later
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
136 stb >LSN
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
137 stx >LSN+1
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
138
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
139 ldx PD.BUF,y where the 256-byte LSN should go
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
140 * Note: OS-9 allocates buffers from system memory on page boundaries, so
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
141 * the low byte of X should now be $00, ensuring that the sector is not
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
142 * falling over an 8K MMU block boundary.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
143
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
144 stx >buffer set up the buffer address
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
145 sta >command get the emulator to blast over the sector
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
146 lda >command restore the error status
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
147 bne FixErr if non-zero, go fix the error and exit
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
148 puls b,x,pc restore LSN and exit
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
149
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
150 DrivErr leas 2,s kill address of calling routine (Read/Write)
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
151 comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
152 * FIND ERROR CODE TO USE
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
153 * ldb #E$ find appropriate error code...
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
154 ldb #E$NotRdy not ready
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
155 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
156
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
157 * Emulator error codes translated to OS-9 error codes.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
158 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
159 * 2=not enabled
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
160 * E$NotRDy - drive is not ready
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
161 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
162 * 4=too many MS-DOS files open,
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
163 * E$
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
164 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
165 * 5=access denied (virtual HD file locked by another program
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
166 * or MS-DOS read-only status)
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
167 * E$WP - write protect
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
168 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
169 * 6/12=internal error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
170 * E$CRC - CRC error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
171 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
172 * 254=invalid command byte
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
173 * E$
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
174 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
175 * 255=power-on state or closed.
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
176 * E$NotRdy - drive is not ready
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
177 *
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
178 FixErr leas 5,s kill B,X,PC from GetSect routine
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
179 cmpa #02
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
180 beq NotRdy
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
181 cmpa #255
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
182 beq NotRdy
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
183 cmpa #5
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
184 beq WP
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
185 cmpa #6
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
186 beq CRC
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
187 cmpa #12
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
188 beq CRC
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
189
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
190 * if it's something we don't recognize, it's a seek error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
191 comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
192 ldb #E$Seek seek error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
193 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
194
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
195 NotRdy comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
196 ldb #E$NotRdy not ready
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
197 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
198
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
199 WP comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
200 ldb #E$WP write protect
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
201 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
202
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
203 CRC comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
204 ldb #E$CRC CRC error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
205 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
206
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
207 L03D4 comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
208 ldb #E$Write write error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
209 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
210
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
211
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
212 L03E0 comb
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
213 ldb #E$Read Read error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
214 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
215
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
216 SETSTA ldx PD.RGS,y Get caller's register stack ptr
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
217 ldb R$B,x Get function code
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
218 cmpb #SS.WTrk Write track?
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
219 beq format Yes, ignore it
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
220 cmpb #SS.Reset Restore head to track 0?
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
221 beq format Yes, ignore it
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
222 cmpb #SS.SQD sequence down the drive (i.e. park it)?
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
223 beq park
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
224 comb set carry for error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
225 ldb #E$UnkSvc return illegal service request error
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
226 rts
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
227
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
228 park ldb #$02 close the drive
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
229 stb >command save in command register
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
230
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
231 format clrb ignore physical formats. They're not
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
232 rts necessary
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
233
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
234 emod
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
235
28ca7d4dd2c8 Initial checkin.
tlindner
parents:
diff changeset
236 eom equ *