annotate level1/modules/rb1773.asm @ 2226:3af8e9655158

The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
author robertgault
date Thu, 19 Mar 2009 10:32:41 +0000
parents 8a96f5241556
children c91cd2a9b22a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1 ********************************************************************
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
2 * rb1773 - Western Digital 1773 Disk Controller Driver
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
3 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
4 * $Id$
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
5 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
6 * This driver has been tested with the following controllers:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
7 * - Tandy FD-502 "shortie" disk controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
8 * - Disto Super Controller I
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
9 * - Disto Super Controller II
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
10 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
11 * This driver can also be assembled to support the no-halt feature of
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
12 * the Disto Super Controller II.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
13 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
14 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
15 * A lot of references to **.CYL or <u00B6 using 16 bit registers can be
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
16 * changed to 8 bit registers with a +1 offset, since track #'s >255 are
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
17 * ignored
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
18 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
19 * NOTE: 512 bytes is reserved as a physical sector buffer. Any reads/
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
20 * writes are done from this buffer to the controller. Copies of the 256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
21 * byte chunk needed are done by a block memory move
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
22 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
23 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
24 ********** DISTO SUPER CONTROLLER II NOTES **********
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
25 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
26 * SCII 0=standard controller 1=Disto Super Controller II
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
27 * SCIIALT 0=Normal I/O register 1=Alternative registers; See below
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
28 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
29 * Disto Super Controller II Registers:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
30 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
31 * $FF74 RW.Dat --- R/W Buffer data #1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
32 * $FF75 mirror of $FF74
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
33 * $FF76 RW.Ctrl --- Write D0 = 0 FDC Write Op #2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
34 * = 1 FDC Read Op #2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
35 * D1 = 0 Normal Mode
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
36 * = 1 Buffered I/O Mode
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
37 * D2 = 0 Normal NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
38 * = 1 Masked NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
39 * D3 = 0 No FIRQ (Masked)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
40 * = 1 Enabled FIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
41 * Read D7 = FDC INT Status (Inverted)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
42 * $FF77 mirror of $FF76
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
43 * #1: any write to $FF76-$FF77 clears Buffer counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
44 * #2: in buffered mode only
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
45 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
46 * Alternate port is at $FF58-$FF5B in case of hardware conflicts.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
47 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
48 * Edt/Rev YYYY/MM/DD Modified by
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
49 * Comment
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
50 * ------------------------------------------------------------------
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
51 * 11 1993/05/12 ???
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
52 * Special opts for TC9 to slow controller reads and writes TFM's
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
53 * between sector buffers & in drive table init/copies.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
54 * Changed software timing loop (drive spin-up) to F$Sleep for 32 ticks
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
55 * Shrunk (slowed slightly) error returns
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
56 * Added blobstop code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
57 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
58 * 11r1 2003/09/03 Boisy G. Pitre
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
59 * Added code to sense if HW is present or not and return error if not.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
60 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
61 * 1r0 2004/05/20 Boisy G. Pitre
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
62 * Restarted edition due to name change; backported to Level 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
63 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
64 * 2004/06/01 Robert Gault
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
65 * Added code to obtain an SCII driver, at least for the Sleep mode. It
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
66 * would be quite difficult and probably not worth the effort to permit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
67 * selection of both Sleep and IRQ SCII drivers. However, both normal
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
68 * and Alt SCII I/O registers are supported.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
69 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
70 * Cleaned up some errors in the last version of rb1773.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
71 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
72 * 2004/07/11 Robert Gault
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
73 * Corrected the error handling code for read & write to separate SCII errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
74 * from OS-9 errors. Changed drive test from compare #4 to compare #N.Drives to
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
75 * permit up to 6 drives using alternate table.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
76 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
77 * 2005/01/27 Robert Gault
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
78 * Separated the sector write and format write loops so that the CPU clock
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
79 * can be slowed down during formats. This "corrects" problems some hardware
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
80 * have with the current NitrOS-9 during formats.
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
81 *
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
82 * 1r1 2005/04/07 Boisy G. Pitre
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
83 * We now save the contents of D.NMI (Level 2) or D.XNMI (Level 1) before
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
84 * overwriting them, and then restore the original values at term time.
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
85 *
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
86 * 2009/03/19 Robert Gault
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
87 * Removed slow down hack from format and write sector but left code just in case.
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
88
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
89 nam rb1773
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
90 ttl Western Digital 1773 Disk Controller Driver
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
91
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
92 * These lines needed if assembling with on a Color computer.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
93 *SCII set 1 * 0=not present 1=present
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
94 *SCIIALT set 1 * 0=normal address 1=alternate
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
95 SCIIHACK set 0 * 0=stock model 1=512 byte buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
96 *H6309 set 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
97 *LEVEL set 2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
98 * These lines needed if not using latest os9def files.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
99 *TkPerSec set 60
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
100 *DPort set $FF40
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
101
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
102 * This should be changed for NitrOS9 project to "use defsfile"
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
103 IFP1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
104 use defsfile
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
105 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
106
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
107 tylg set Drivr+Objct
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
108 atrv set ReEnt+rev
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
109 rev set $01
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
110 edition set 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
111
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
112 * Configuration Settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
113 N.Drives equ 4 number of drives to support
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
114 TC9 equ 0 Set to 1 for TC9 special slowdowns
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
115 PRECOMP equ 0 Set to 1 to turn on write precompensation
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
116
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
117 * Disto Super Controller defs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
118 IFEQ SCIIALT
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
119 RW.Dat equ $FF74
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
120 RW.Ctrl equ $FF76
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
121 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
122 RW.Dat equ $FF58
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
123 RW.Ctrl equ $FF5A
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
124 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
125
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
126
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
127 * WD-17X3 Definitions
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
128 CtrlReg equ $00 Control register for Tandy controllers; not part of WD
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
129 WD_Cmd equ $08
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
130 WD_Stat equ WD_Cmd
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
131 WD_Trak equ $09
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
132 WD_Sect equ $0A
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
133 WD_Data equ $0B
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
134
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
135 * WD-17X3 Commands
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
136 S$Read equ $80 Read sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
137 S$Format equ $A0 Format track
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
138 S$FrcInt equ $D0 Force interrupt
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
139
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
140 * Control Register Definitions
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
141 C_HALT equ %10000000 Halt line to CPU is active when set
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
142 C_SIDSEL equ %01000000 Side select (0 = front side, 1 = back side)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
143 C_DBLDNS equ %00100000 Density (0 = single, 1 = double)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
144 C_WPRCMP equ %00010000 Write precompensation (0 = off, 1 = on)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
145 C_MOTOR equ %00001000 Drive motor (0 = off, 1 = on)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
146 C_DRV2 equ %00000100 Drive 2 selected when set
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
147 C_DRV1 equ %00000010 Drive 1 selected when set
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
148 C_DRV0 equ %00000001 Drive 0 selected when set
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
149
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
150 mod eom,name,tylg,atrv,start,size
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
151
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
152 u0000 rmb DRVBEG+(DRVMEM*N.Drives)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
153 lastdrv rmb 2 Last drive table accessed (ptr)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
154 ctlimg rmb 1 Bit mask for control reg (drive #, side,etc)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
155 u00AA rmb 1 drive change flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
156 sectbuf rmb 2 Ptr to 512 byte sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
157 currside rmb 1 head flag; 0=front 1 = back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
158 u00AE rmb 1 LSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
159 IFGT Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
160 FBlock rmb 2 block number for format
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
161 FTask rmb 1 task number for format
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
162 NMISave rmb 2
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
163 ELSE
1807
321957ee26e8 Changed NMISave to be rmb 3 for Level 1 -- Thanks Phill for pointing out the error.
boisy
parents: 1793
diff changeset
164 NMISave rmb 3
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
165 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
166 VIRQPak rmb 2 Vi.Cnt word for VIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
167 u00B3 rmb 2 Vi.Rst word for VIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
168 u00B5 rmb 1 Vi.Stat byte for VIRQ (drive motor timeout)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
169 loglsn rmb 2 OS9's logical sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
170 * Removed next line and added two new ones. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
171 * PCDOS does not ask driver for any info.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
172 * physlsn rmb 2 PCDOS (512 byte sector) #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
173 flag512 rmb 1 PCDOS (512 byte sector) 0=no, 1=yes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
174 flagform rmb 1 SCII format flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
175 size equ .
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
176
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
177 fcb DIR.+SHARE.+PEXEC.+PWRIT.+PREAD.+EXEC.+UPDAT.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
178
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
179 name fcs /rb1773/
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
180 fcb edition
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
181
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
182 VIRQCnt fdb TkPerSec*4 Initial count for VIRQ (4 seconds)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
183
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
184 IRQPkt fcb $00 Normal bits (flip byte)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
185 fcb $01 Bit 1 is interrupt request flag (Mask byte)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
186 fcb 10 Priority byte
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
187
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
188 * Init
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
189 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
190 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
191 * Y = address of device descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
192 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
193 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
194 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
195 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
196 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
197 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
198 * New code added 09/03/2003 by Boisy G. Pitre
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
199 * Write a pattern to $FF4B and read it back to verify that the hardware
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
200 * does exist.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
201 Init equ *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
202 * Two new lines for SCII. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
203 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
204 clr RW.Ctrl clear SCII control register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
205 clr flagform,u clear SCII format flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
206 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
207 ldx V.PORT,u get Base port address
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
208 lda WD_Data,x get byte at FDC Data register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
209 coma complement it to modify it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
210 sta WD_Data,x write it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
211 clrb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
212 Init2 decb delay a bit...
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
213 bmi Init2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
214 suba WD_Data,x read it back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
215 lbne NoHW if not zero, we didn't read what we wrote
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
216 **
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
217 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
218 clr >D.DskTmr flag drive motor as not running
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
219 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
220 clr <D.MotOn flag drive motor as not running
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
221 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
222 leax WD_Stat,x point to Status/Command register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
223 lda #S$FrcInt "Force Interrupt" command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
224 sta ,x send to FDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
225 lbsr FDCDelay time delay for ~ 108 cycles
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
226 lda ,x eat status register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
227 ldd #$FF*256+N.Drives 'invalid' value & # of drives
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
228 leax DRVBEG,u point to start of drive tables
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
229 l1 sta ,x DD.TOT MSB to bogus value
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
230 sta <V.TRAK,x init current track # to bogus value
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
231 leax <DRVMEM,x point to next drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
232 decb done all drives yet?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
233 bne l1 no, init them all
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
234 *** Fix on 04/06/2005: we now save the contents of D.NMI (Level 2)
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
235 *** or D.XNMI (Level 1) before overwriting them.
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
236 IFGT Level-1
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
237 ldx >D.NMI
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
238 stx NMISave,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
239 leax >NMISvc,pc point to NMI service routine
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
240 stx >D.NMI install as system NMI
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
241 ELSE
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
242 ldx >D.XNMI
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
243 stx NMISave,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
244 lda >D.XNMI+2
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
245 sta NMISave+2,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
246 leax >NMISvc,pc point to NMI service routine
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
247 stx >D.XNMI+1 NMI jump vector operand
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
248 lda #$7E JMP code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
249 sta >D.XNMI NMI jump vector opcode
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
250 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
251 pshs y save device dsc. ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
252 leay >u00B5,u point to Vi.Stat in VIRQ packet
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
253 tfr y,d make it the status register ptr for IRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
254 leay >IRQSvc,pc point to IRQ service routine
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
255 leax >IRQPkt,pc point to IRQ packet
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
256 os9 F$IRQ install IRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
257 puls y Get back device dsc. ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
258 bcs Return If we can't install IRQ, exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
259 ldd #512 Request 512 byte sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
260 pshs u Preserve device mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
261 os9 F$SRqMem Request sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
262 tfr u,x Move ptr to sector buffer to x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
263 puls u Restore device mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
264 bcs Return If error, exit with it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
265 stx >sectbuf,u Save ptr to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
266
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
267 * GetStat
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
268 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
269 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
270 * A = function code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
271 * Y = address of path descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
272 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
273 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
274 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
275 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
276 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
277 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
278 GetStat clrb no GetStt calls - return, no error, ignore
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
279 Return rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
280
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
281 * Term
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
282 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
283 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
284 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
285 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
286 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
287 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
288 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
289 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
290 Term leay >VIRQPak,u Point to VIRQ packet
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
291 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
292 tfr 0,x "remove"
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
293 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
294 ldx #$0000
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
295 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
296 os9 F$VIRQ Remove VIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
297 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
298 tfr 0,x "remove"
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
299 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
300 ldx #$0000
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
301 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
302 leay >IRQSvc,pc point to IRQ service routine
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
303 os9 F$IRQ Remove IRQ
1785
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
304 *** Fix: we now restore original D.NMI (Level 2) or D.XNMI (Level 1)
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
305 *** before overwriting them.
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
306 IFGT Level-1
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
307 ldx NMISave,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
308 stx >D.NMI
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
309 ELSE
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
310 ldx NMISave,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
311 stx >D.XNMI
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
312 lda NMISave+2,u
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
313 sta >D.XNMI+2
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
314 ENDC
9d95e3246a61 rb1773.asm: now saves/restores original NMI vector
boisy
parents: 1746
diff changeset
315 ***
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
316 pshs u Save device mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
317 ldu >sectbuf,u Get pointer to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
318 ldd #512 Return sector buffer memory
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
319 os9 F$SRtMem
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
320 puls u Restore device mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
321 clr >DPort+CtrlReg shut off drive motors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
322 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
323 clr >D.DskTmr Clear out drive motor timeout flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
324 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
325 clr <D.MotOn Clear out drive motor timeout flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
326 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
327 ex rts return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
328
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
329 * Check if 512 byte sector conversion needed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
330 * Entry: B:X=LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
331 * U=Static mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
332 * Y=Path dsc. ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
333 * Exit: X=New LSN (same as original for 256 byte sectors, 1/2 of original
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
334 * for 512 byte sectors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
335 * regD changed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
336 Chk512 equ *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
337 clr flag512,u set to 256 byte sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
338 stx >loglsn,u save OS9 LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
339 lda <PD.TYP,y get device type from path dsc.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
340 anda #%00000100 mask out all but 512 byte sector flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
341 bne Log2Phys 512 byte sectors, go process
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
342 rts RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
343
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
344 * 512 byte sector processing goes here
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
345 * regB should be saved and not just cleared at end because there is
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
346 * a subsequent tst for the msb of lsn. The test is pointless if B
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
347 * is changed.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
348 Log2Phys pshs b save MSB of LSN; new RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
349 * Minor inefficiencies here that I have changed, RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
350 tfr x,d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
351 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
352 lsrd
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
353 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
354 lsra
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
355 rorb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
356 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
357 tfr d,x move new LSN back to regX
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
358 * New line for stock SCII controller with 256 max no-halt.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
359 inc flag512,u set to 512 byte sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
360 puls b,pc regB will be tested later for >0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
361
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
362 start lbra Init
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
363 bra Read
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
364 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
365 lbra Write
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
366 bra GetStat
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
367 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
368 lbra SetStat
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
369 bra Term
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
370 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
371
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
372 * Read
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
373 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
374 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
375 * B = MSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
376 * X = LSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
377 * Y = address of path descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
378 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
379 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
380 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
381 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
382 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
383 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
384 Read bsr Chk512 go check for 512 byte sector/adjust if needed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
385 lda #%10010001 error flags (see Disto SCII source)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
386 pshs x preserve sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
387 lbsr ReadWithRetry go read the sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
388 puls x restore sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
389 bcs ex if error, exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
390 pshs y,x save path dsc ptr & LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
391 leax ,x LSN0?, ie. tstx
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
392 bne L012D no, go calculate normally
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
393 puls y,x yes, restore path dsc ptr & LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
394 lda <PD.TYP,y get type from path dsc.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
395 bita #TYP.NSF standard OS-9 format?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
396 beq L00F0 yes, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
397 lbsr MakeDTEntry else make a drive table entry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
398 pshs y,x save path dsc ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
399 bra L012D
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
400
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
401 * LSN0, standard OS-9 format - copy part of LSN0 into drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
402 L00F0 ldx >sectbuf,u Get ptr to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
403 pshs y,x Preserve path dsc. ptr & sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
404 ldy >lastdrv,u Get last drive table accessed ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
405 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
406 ldw #DD.SIZ # bytes to copy from new LSN0 to drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
407 tfm x+,y+ Copy them
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
408 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
409 ldb #DD.SIZ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
410 L00F0Lp lda ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
411 sta ,y+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
412 decb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
413 bne L00F0Lp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
414 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
415 ldy >lastdrv,u Get drive table ptr back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
416 lda <DD.FMT,y Get format for disk in drive
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
417 ldy 2,s restore path descriptor pointer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
418 ldb <PD.DNS,y Get path's density settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
419 bita #FMT.DNS Disk in drive double density?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
420 beq L0115 No, all drives can read single, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
421 bitb #DNS.MFM Can our path dsc. handle double density?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
422 beq erbtyp No, illegal
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
423 L0115 bita #FMT.TDNS Is new disk 96/135 tpi?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
424 beq L011D No, all drives handle 48 tpi, so skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
425 bitb #DNS.DTD Can path dsc. handle 96/135 tpi?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
426 beq erbtyp No, illegal
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
427 L011D bita #FMT.SIDE Is new disk double sided?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
428 beq L0128 No, all drives handle single sided, we're done
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
429 lda <PD.SID,y Get # sides path dsc. can handle
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
430 suba #2 sides higher or equal to 2?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
431 blo erbtyp Yes, exit with illegal type error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
432 L0128 clrb No error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
433 * LSN's other than 0 come straight here
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
434 L012D ldy 2,s Get path dsc. ptr back??
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
435 ldx PD.BUF,y Get path dsc. buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
436 * lda <PD.TYP,y Get path dsc. disk type, RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
437 ldy >sectbuf,u Get ptr to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
438 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
439 ldw #256 OS9 sector size (even if physical was 512)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
440 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
441 * anda #%00000100 Mask out all but 512 byte sector flag, RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
442 * Next replaces the two lines removed, RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
443 tst flag512,u Is it a 512 byte sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
444 beq L014B If normal sector, just copy it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
445 ldd >loglsn,u Get OS9's LSN (twice of the 'real' 512 sector)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
446 andb #$01 Mask out all but odd/even sector indicator
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
447 beq L014B Even, use 1st half of 512 byte sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
448 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
449 addr w,y Odd, bump sector buffer ptr to 2nd half
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
450 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
451 leay 256,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
452 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
453 L014B equ *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
454 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
455 tfm y+,x+ Copy from physical sector buffer to PD buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
456 puls pc,y,x restore path dsc & sector buffer ptrs & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
457 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
458 pshs d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
459 clrb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
460 L014BLp lda ,y+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
461 sta ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
462 decb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
463 bne L014BLp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
464 puls pc,y,x,d restore path dsc & sector buffer ptrs & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
465 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
466
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
467 erbtyp comb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
468 ldb #E$BTyp Error - wrong type error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
469 puls pc,y,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
470
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
471 **********************
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
472 * Read error - retry handler
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
473 Retry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
474 bcc ReadWithRetry Normal retry, try reading again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
475 pshs x,d Preserve regs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
476 lbsr sktrk0 Seek to track 0 (attempt to recalibrate)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
477 puls x,d Restore regs & try reading again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
478
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
479
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
480 * Read With Retry: Do read with retries
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
481 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
482 * ENTER reg B,X=working lsn on disk
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
483 * Y=path descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
484 * U=driver data
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
485 * A=retry sequence mix of read & seek track 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
486 * EXIT X,Y,U preserved; D,CC changed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
487 * B=error if any
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
488 * CC=error flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
489 ReadWithRetry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
490 pshs x,d Preserve regs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
491 bsr ReadSector Go read sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
492 puls x,d Restore regs (A=retry flags)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
493 lbcc L01D7 No error, return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
494 lsra Shift retry flags
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
495 bne Retry Still more retries allowed, go do them
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
496 * otherwise, final try before we give up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
497 ReadSector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
498 lbsr L02AC Do double-step/precomp etc. if needed, seek
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
499 lbcs L01D7 Error somewhere, exit with it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
500 L0176 ldx >sectbuf,u Get physical sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
501 ldb #S$Read Read sector command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
502 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
503 * If SCII not hacked for 512 byte no-halt, must use halt for 512b sectors RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
504 IFEQ SCIIHACK
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
505 clra SCII normal mode, normal NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
506 tst flag512,u SCII must use halt mode for 512 byte sectors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
507 bne L0176B
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
508 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
509 lda #7 SCII read, buffered mode, masked NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
510 bsr L01A1B send commands and wait
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
511 * New lines needed because the SCII has error other than OS-9 errors. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
512 bcs ngood
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
513 * This now becomes a subroutine call. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
514 * lbcs L03AF get the errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
515 lbsr L03AF get the errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
516 bcc good
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
517 ngood rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
518
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
519 good pshs y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
520 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
521 ldw #256 set counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
522 ldy #RW.DAT source of data
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
523 IFNE SCIIHACK
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
524 tst flag512,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
525 beq sc2rlp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
526 ldw #512 bump up counter to 512 byte sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
527 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
528 * Don't use tfm if no halt important else need orcc #$50 for tfm
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
529 * If an interrupt occurs during a tfm transfer, the SCII counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
530 * will update but the tfm will repeat a byte and lose track.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
531 * If orcc #$50 used, then key presses may be lost even with no-halt
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
532 * mode.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
533 sc2rlp lda ,y read byte from SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
534 sta ,x+ transfer byte to system buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
535 decw update counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
536 bne sc2rlp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
537 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
538 ldy #256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
539 IFNE SCIIHACK
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
540 tst flag512,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
541 beq sc2rlp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
542 ldy #512
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
543 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
544 sc2rlp lda >RW.DAT
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
545 sta ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
546 leay -1,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
547 bne sc2rlp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
548 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
549 clrb no errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
550 puls y,pc
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
551 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
552
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
553 L0176B bsr L01A1 Send to controller & time delay to let it settle
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
554 *** Next few lines are commented out for blobstop patches
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
555 *L0180 bita >DPort+WD_Stat check status register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
556 * bne L0197 eat it & start reading sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
557 * leay -1,y bump timeout timer down
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
558 * bne L0180 keep trying until it reaches 0 or sector read
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
559 * lda >ctlimg,u get current drive settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
560 * ora #C_MOTOR turn drive motor on
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
561 * sta >DPort+CtrlReg send to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
562 * puls y,cc restore regs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
563 * lbra L03E0 exit with Read Error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
564 *** Blobstop fixes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
565 stb >DPort+CtrlReg send B to control register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
566 nop allow HALT to take effect
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
567 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
568 bra L0197 and a bit more time
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
569 * Read loop - exited with NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
570 * Entry: X=ptr to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
571 * B=Control register settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
572 L0197 lda >DPort+WD_Data get byte from controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
573 sta ,x+ store into sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
574 * stb >DPort+CtrlReg drive info
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
575 nop -- blobstop fix
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
576 bra L0197 Keep reading until sector done
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
577
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
578 L01A1 orcc #IntMasks Shut off IRQ & FIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
579 * No-halt mode must enter here, skipping IRQ shutoff.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
580 L01A1B stb >DPort+WD_Cmd Send command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
581 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
582 sta >RW.Ctrl tell SCII what to do
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
583 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
584 L01A1C ldb #C_DBLDNS+C_MOTOR Double density & motor on
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
585 orb >ctlimg,u Merge with current drive settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
586 stb >DPort+CtrlReg Send to control register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
587 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
588 tst flagform,u Format uses halt mode
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
589 bne s512
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
590 IFEQ SCIIHACK
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
591 tst flag512,u SCII uses halt with 512 byte sectors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
592 beq s256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
593 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
594 bra s256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
595 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
596 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
597 s512 ldb #C_HALT+C_DBLDNS+C_MOTOR Enable halt, double density & motor on
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
598 orb >ctlimg,u Merge that with current drive settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
599 lbra FDCDelay Time delay to wait for command to settle
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
600 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
601 s256 ldb #4 normal mode, NMI masked
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
602 lda #255 time out slices
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
603 pshs a,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
604 SC2tmr1 ldx #1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
605 lbsr Delay sleep or timer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
606 dec ,s count
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
607 beq tmout
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
608 tst >RW.Ctrl check status
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
609 bmi SC2tmr1 loop on not ready
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
610 stb RW.Ctrl clear SCII but don't generate NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
611 clrb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
612 puls a,x,pc
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
613 tmout stb RW.Ctrl clear SCII buffer counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
614 lda #$D0 force interrupt
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
615 sta DPort+WD_Cmd
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
616 comb set carry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
617 puls a,x,pc
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
618 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
619
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
620 * Delay for some number of ticks (1 tick = 1/60 second).
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
621 * For a hard delay, we need to delay for 14833 cycles at .89MHz or
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
622 * 29666 cycles at 1.78MHz
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
623 * Entry: X = number of ticks to delay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
624 Delay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
625 pshs d [5+] [4+]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
626 IFGT Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
627 ldd <D.Proc [6] [5] process pointer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
628 cmpd <D.SysPrc [is it the system?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
629 beq hardloop [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
630 os9 F$Sleep if not system then sleep
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
631 puls d,pc [5+] [4+]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
632 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
633 hardloop tfr x,d we want X in A,B
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
634 l1@ equ *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
635 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
636 ldx #1482/2 [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
637 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
638 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
639 ldx #1854 [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
640 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
641 ldx #1482 [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
642 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
643 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
644 l2@ nop [2] [1]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
645 nop [2] [1]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
646 nop [2] [1]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
647 leax -1,x [4+] [4+]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
648 bne l2@ [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
649 subd #$0001 [4] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
650 bne l1@ [3] [3]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
651 puls d,pc [5+] [4+]
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
652
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
653 * Write
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
654 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
655 * B = MSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
656 * X = LSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
657 * Y = address of path descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
658 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
659 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
660 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
661 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
662 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
663 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
664 Write lbsr Chk512 go adjust LSN for 512 byte sector if needed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
665 * Next line was lda #%1001001 which was an error RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
666 lda #%10010001 retry flags for I/O errors (see Disto SCII source)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
667 L01C4 pshs x,d preserve LSN, retries
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
668 bsr L01E8 go write the sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
669 puls x,d restore LSN, retries
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
670 bcs L01D8 error writing, go to write retry handler
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
671 tst <PD.VFY,y no error, do we want physical verify?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
672 bne L01D6 no, exit without error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
673 lbsr verify go re-read & verify 64 out of 256 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
674 bcs L01D8 error on verify, go to write retry handler
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
675 L01D6 clrb no error & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
676 L01D7 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
677
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
678 * Write error retry handler
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
679 L01D8 lsra Shift retry flags
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
680 lbeq L03AF Too many retries, exit with error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
681 bcc L01C4 Normal retry, attemp to re-write sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
682 pshs x,d Preserve flags & sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
683 lbsr sktrk0 Seek to track 0 (attempt to recalibrate)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
684 puls x,d Restore flags & sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
685 bra L01C4 Try re-writing now
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
686
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
687 * 512 byte sector write here
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
688 L01E8 lbsr L02AC Go do double-step/write precomp if needed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
689 bcs L01D7 Error, exit with it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
690 pshs y,d Preserve path dsc. ptr & LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
691 * Since I have modified chk512 the next two lines are replaced. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
692 * lda <PD.TYP,y Get device type
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
693 * anda #%00000100 512 byte sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
694 tst flag512,u go if 256 byte sectors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
695 beq L020D Not 512 then skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
696 lbsr L0176 Go read the sector in
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
697 ldd >loglsn,u Get OS9 LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
698 andb #$01 Even or odd?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
699 beq L020D Even, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
700 ldx >sectbuf,u Get physical sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
701 leax >$0100,x Point to 2nd half
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
702 bra L0211 Copy caller's buffer to 2nd half of sector
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
703
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
704 L020D ldx >sectbuf,u Get physical sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
705
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
706 L0211 ldy PD.BUF,y Get path dsc. buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
707 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
708 ldw #256 Copy write buffer to sector buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
709 tfm y+,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
710 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
711 clrb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
712 L0211Lp lda ,y+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
713 sta ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
714 decb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
715 bne L0211Lp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
716 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
717 puls y,d Get path dsc. ptr & LSN back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
718 ldx >sectbuf,u Get physical sector buffer ptr again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
719 * See read routine for explanation of SCII code. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
720 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
721 IFEQ SCIIHACK
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
722 clra SCII write, normal mode & NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
723 tst flag512,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
724 bne wr512
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
725 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
726 lda #4 SCII normal mode, masked NMI
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
727 sta RW.Ctrl tell SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
728 pshs y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
729 ldy #RW.Dat Send data to SCII RAM buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
730 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
731 ldw #256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
732 tst flag512,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
733 beq wrbuf
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
734 ldw #512
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
735 wrbuf lda ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
736 sta ,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
737 decw
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
738 bne wrbuf
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
739 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
740 ldy #256
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
741 tst flag512,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
742 beq wrbuf
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
743 ldy #512
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
744 wrbuf lda ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
745 sta >RW.DAT
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
746 leay -1,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
747 bne wrbuf
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
748 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
749 puls y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
750 ldb #$A0 Write sector command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
751 lda #6 SCII masked NMI, buffered mode, write
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
752 * See Read section for explanation of error changes below. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
753 * lbra L01A1B send command to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
754 lbsr L01A1B send command to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
755 bcs wngood SCII error, then go
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
756 lbra L03AF check for OS-9 errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
757 wngood rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
758 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
759 wr512 ldb #S$Format
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
760
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
761 * Format track comes here with B=$F0 (write track)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
762 * as does write sector with B=$A0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
763 *WrTrk pshs y,cc Preserve path dsc. ptr & CC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
764 WrTrk lbsr L01A1 Send command to controller (including delay)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
765 *** Commented out for blobstop fixes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
766 *L0229 bita >DPort+WD_Stat Controller done yet?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
767 * bne L0240 Yes, go write sector out
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
768 * leay -$01,y No, bump wait counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
769 * bne L0229 Still more tries, continue
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
770 * lda >ctlimg,u Get current drive control register settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
771 * ora #C_MOTOR Drive motor on (but drive select off)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
772 * sta >DPort+CtrlReg Send to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
773 * puls y,cc Restore regs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
774 * lbra L03AF Check for errors from status register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
775
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
776 *** added blobstop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
777 IFGT Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
778 lda FBlock+1,u get the block number for format
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
779 beq L0230 if not format, don't do anything
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
780 sta >$FFA1 otherwise map the block in
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
781 * added delay for for MMU line settling. RG 2005/1/23
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
782 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
783 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
784 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
785 L0230 stb >DPort+CtrlReg send data to control register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
786 * These lines converted to separate sector writes from format. RG
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
787 * Removed slow down but left code just in case. RG
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
788 nop
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
789 nop
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
790 * cmpb #$F0 if format, then
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
791 * beq L0240b go to special loop
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
792 bra L0240 wait a bit for HALT to enable
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
793
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
794 * Write sector routine (Entry: B= drive/side select) (NMI will break out)
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
795 * Was part of timing change mentioned above. Removed RG
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
796 L0240 nop --- wait a bit more
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
797 lda ,x+ Get byte from write buffer
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
798 *L0240 lda ,x+ Get byte from write buffer
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
799 sta >DPort+WD_Data Save to FDC's data register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
800 * EAT 2 CYCLES: TC9 ONLY (TRY 1 CYCLE AND SEE HOW IT WORKS)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
801 IFEQ TC9-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
802 nop
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
803 nop
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
804 * ELSE
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
805 * See above. RG Now removed.
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
806 * nop
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
807 ENDC
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
808 * No blob change.
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
809 * stb >DPort+CtrlReg Set up to read next byte
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
810 bra L0240 Go read it
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
811 * Special loop for format slows CPU clock. RG Now removed.
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
812 *L0240b
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
813 * IFGT Level-1
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
814 * sta >$FFD8
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
815 * ENDC
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
816 *L0240c lda ,x+
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
817 * sta >DPort+WD_Data
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
818 * bra L0240c
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
819 * NMI routine
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
820 NMISvc leas R$Size,s Eat register stack
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
821 * Added to compensate above change in format loop. RG Now removed.
1790
2330195b098c bootlists updated for disto scii drivers.
boisy
parents: 1785
diff changeset
822 IFGT Level-1
2226
3af8e9655158 The clock slow down routine for rb1773 write track has been deactivated. The code is still present in case it needs to be reinstated. RG
robertgault
parents: 2194
diff changeset
823 * sta >$FFD9
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
824 ldx <D.SysDAT get pointer to system DAT image
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
825 lda 3,x get block number 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
826 sta >$FFA1 map it back into memory
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
827 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
828 andcc #^IntMasks turn IRQ's on again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
829 ldb >DPort+WD_Stat Get status register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
830 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
831 clr RW.Ctrl Clear SCII command register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
832 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
833 bitb #%00000100 Did we lose data in the transfer?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
834 lbeq L03B2 Otherwise, check for drive errors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
835 comb -- blobstop error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
836 ldb #E$DevBsy -- device busy
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
837 rts -- and exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
838
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
839 verify pshs x,d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
840 * Removed unneeded code. Data never sent to PD.BUF anyway so there is
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
841 * no need to redirect the PD.BUF pointer. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
842 * ldx PD.BUF,y Get write buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
843 * pshs x Preserve it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
844 * ldx >sectbuf,u Get sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
845 * stx PD.BUF,y Save as write buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
846 * ldx 4,s
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
847 lbsr ReadSector Go read sector we just wrote
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
848 * puls x Get original write buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
849 * stx PD.BUF,y Restore path dsc. version
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
850 bcs L02A3 If error reading, exit with it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
851 ldx PD.BUF,y Get system buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
852 pshs u,y Preserve device mem, path dsc. ptrs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
853 * See change in chk512 routine. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
854 * ldb <PD.TYP,y Get type from path dsc.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
855 ldy >sectbuf,u Get sector buffer ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
856 * andb #%00000100 512 byte sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
857 tst flag512,u 512 byte sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
858 beq L028D No, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
859 ldd >loglsn,u Get OS9's sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
860 andb #$01 Odd/even sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
861 beq L028D Even; compare first half
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
862 leay >$0100,y Odd, compare second half
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
863 L028D tfr x,u Move PD.BUF ptr to U (since cmpx is faster)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
864 clra check all 256 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
865 L028F ldx ,u++ Get 2 bytes from original write buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
866 cmpx ,y++ Same as corresponding bytes in re-read sector?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
867 bne vfybad No, error & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
868 inca
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
869 bpl L028F No, continue
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
870 bra L02A1 carry is clear by virtue of last cmpx
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
871 vfybad comb set carry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
872 L02A1 puls u,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
873 L02A3 puls pc,x,d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
874
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
875 L02A5 pshs a Save Caller's track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
876 ldb <V.TRAK,x Get track # drive is currently on
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
877 bra L02E9 Go save it to controller & continue
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
878
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
879 L02AC lbsr L0376 Go set up controller for drive, spin motor up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
880 bsr L032B Get track/sector # (A=Trk, B=Sector)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
881 pshs a Save track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
882 lda >currside,u Get side 1/2 flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
883 beq L02C4 Side 1, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
884 lda >ctlimg,u Get control register settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
885 ora #C_SIDSEL Set side 2 (drive 3) select
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
886 sta >ctlimg,u Save it back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
887 L02C4 lda <PD.TYP,y Get drive type settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
888 bita #%00000010 ??? (Base 0/1 for sector #?)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
889 bne L02CC Skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
890 incb Bump sector # up by 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
891 L02CC stb >DPort+WD_Sect Save into Sector register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
892 ldx >lastdrv,u Get last drive table accessed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
893 ldb <V.TRAK,x Get current track # on device
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
894 lda <DD.FMT,x Get drive format specs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
895 lsra Shift track & bit densities to match PD
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
896 eora <PD.DNS,y Check for differences with path densities
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
897 anda #%00000010 Keep only 48 vs. 96/135 tpi differences
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
898 pshs a Save differences
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
899 lda 1,s Get track # back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
900 tst ,s+ Are tpi's different?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
901 beq L02E9 No, continue normally
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
902 lsla Yes, multiply track # by 2 ('double-step')
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
903 lslb Multiply current track # by 2 ('double-step')
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
904 L02E9 stb >DPort+WD_Trak Save current track # onto controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
905
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
906 * From here to the line before L0307 is for write precomp, but is not used.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
907 * Unless write precomp is needed, all of this is useless
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
908 * I think most (if not all) drives do NOT need precomp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
909 IFEQ PRECOMP-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
910 ldb #21 Pre-comp track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
911 pshs b Save it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
912 ldb <PD.DNS,y Get current density settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
913 andb #%00000010 Just want to check track density
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
914 beq L02F9 48 tpi, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
915 lsl ,s Multiply pre-comp value by 2 ('double-step')
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
916 L02F9 cmpa ,s+ Is track # high enough to warrant precomp?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
917 bls L0307 No, continue normally
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
918 ldb >ctlimg,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
919 orb #C.WRPCMP Turn on Write precomp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
920 stb >ctlimg,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
921 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
922
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
923 L0307 tst >u00AA,u ??? Get flag (same drive flag?)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
924 bne L0314 no, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
925 ldb ,s get track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
926 cmpb <V.TRAK,x same as current track on this drive?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
927 beq L0321 yes, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
928 L0314 sta >DPort+WD_Data save track # to data register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
929 ldb <PD.STP,y get stepping rate
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
930 andb #%00000011 just keep usable settings (6-30 ms)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
931 eorb #%00011011 set proper bits for controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
932 lbsr L03E4 send command to controller & time delay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
933 L0321 puls a get track # back
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
934 sta <V.TRAK,x save as current track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
935 sta >DPort+WD_Trak save to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
936 clrb no error & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
937 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
938
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
939 * Entry: B:X LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
940 * Exit: A=Track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
941 * B=Sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
942 * <currside=00 = Head 1 , $FF = Head 2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
943 L032B tstb Sector # > 65535?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
944 bne L033F Yes, illegal for floppy
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
945 tfr x,d Move sector # to D
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
946 leax ,x LSN 0? ie. "tstx"
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
947 beq L0371 Yes, exit this routine
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
948 ldx >lastdrv,u Get previous drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
949 cmpd DD.TOT+1,x Within range of drive spec?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
950 blo L0343 Yes, go calculate track/sector #'s
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
951 L033F comb Exit with Bad sector # error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
952 ldb #E$Sect
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
953 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
954
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
955 * Calculate track/sector #'s?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
956 * These two sections could be combined into one with a final
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
957 * test of DD.FMT. Then currside can be set and regA can be lsra
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
958 * as needed. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
959 L0343 stb >u00AE,u Save LSB of LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
960 clr ,-s Clear track # on stack
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
961 ldb <DD.FMT,x Get drive format
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
962 lsrb Shift out # sides into carry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
963 ldb >u00AE,u Get LSB of LSN again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
964 bcc L0367 Single sided drive, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
965 bra L035D Double sided drive, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
966 * Double sided drive handling here
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
967 L0355 com >currside,u Odd/even sector track flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
968 bne L035D Odd, so don't bump track # up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
969 inc ,s Bump up track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
970
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
971 * Changed this to more effient code. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
972 *L035D subb DD.TKS,x Subtract # sectors/track
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
973 * sbca #$00
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
974 L035D subd DD.SPT,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
975 bcc L0355 Still more sectors left, continue
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
976 bra L036D Wrapped, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
977 * Single sided drive handling here
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
978 L0365 inc ,s Bump track # up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
979
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
980 * See above. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
981 *L0367 subb DD.TKS,x Subtract # sectors/track
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
982 * sbca #$00
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
983 L0367 subd DD.SPT,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
984 bcc L0365 Still more, go bump the track up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
985 * Next possible because upper limit is 256 sectors/track. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
986 L036D addb DD.TKS,x Bump sector # back up from negative value
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
987 puls a Get the track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
988 L0371 rts A=track #, B=Sector #, <currside=Odd
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
989
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
990 * Drive control register bit mask table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
991 * May want an option here for double sided SDDD disks ex. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
992 * fcb $1 drive0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
993 * fcb $2 drive1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
994 * fcb $41 drive2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
995 * fcb $42 drive3
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
996 * fcb $4 drive4
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
997 * fcb $44 drive5
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
998
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
999 L0372 fcb $01 Drive 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1000 fcb $02 Drive 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1001 fcb $04 Drive 2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1002 fcb $40 Drive 3 / Side select
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1003
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1004 * Changes regD; X,Y,U preserved
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1005 L0376 clr >u00AA,u clear drive change flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1006 chkdrv lda <PD.DRV,y Get drive # requested
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1007 * It is possible to have more than 4 drive # so the change below. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1008 * cmpa #4 Drive 0-3?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1009 cmpa #N.Drives Drive 0-6 if alternate table used?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1010 blo L0385 Yes, continue normally
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1011 NoHW comb Illegal drive # error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1012 ldb #E$Unit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1013 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1014
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1015 * Entry: A=drive #, X=LSN (Physical, not OS9 logical if PCDOS disk)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1016 L0385 pshs x,d Save sector #, drive # & B???
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1017 leax >L0372,pc Point to drive bit mask table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1018 ldb a,x Get bit mask for drive # we want
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1019 stb >ctlimg,u Save mask
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1020 leax DRVBEG,u Point to beginning of drive tables
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1021 ldb #DRVMEM Get size of each drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1022 mul Calculate offset to drive table we want
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1023 leax d,x Point to it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1024 cmpx >lastdrv,u Same as Last drive table accessed?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1025 beq L03A6 Yes, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1026 stx >lastdrv,u Save new drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1027 com >u00AA,u Set drive change flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1028 L03A6 clr >currside,u Set side (head) flag to side 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1029 lbsr L04B3 Go set up VIRQ to wait for drive motor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1030 puls pc,x,d Restore sector #,drive #,B & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1031
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1032 L03AF ldb >DPort+WD_Stat Get status register from FDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1033 * This line needed when returning to Disk Basic but probably
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1034 * not needed for OS-9. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1035 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1036 clr RW.Ctrl return SCII to halt mode
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1037 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1038 L03B2 bitb #%11111000 any of the error bits set?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1039 beq L03CA No, exit without error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1040 aslb Drive not ready?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1041 bcs L03CC Yes, use that error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1042 aslb Write protect error?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1043 bcs L03D0 Yes, use that error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1044 aslb Write fault error?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1045 bcs L03D4 Yes, use that error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1046 aslb Sector not found?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1047 bcs L03D8 Yes, use Seek error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1048 aslb CRC error?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1049 bcs L03DC Yes, use that error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1050 L03CA clrb No error & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1051 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1052
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1053 L03CC ldb #E$NotRdy not ready
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1054 fcb $8C skip 2 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1055
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1056 L03D0 ldb #E$WP write protect
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1057 fcb $8C skip 2 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1058
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1059 L03D4 ldb #E$Write write error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1060 fcb $8C
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1061
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1062 L03D8 ldb #E$Seek seek error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1063 fcb $8C
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1064
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1065 L03DC ldb #E$CRC CRC error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1066 * fcb $8C
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1067
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1068 *L03E0 ldb #E$Read Read error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1069 orcc #Carry set carry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1070 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1071
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1072 L03E4 bsr L0404 Send command to controller & waste some time
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1073 L03E6 ldb >DPort+WD_Stat Check FDC status register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1074 bitb #$01 Is controller still busy?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1075 beq L0403 No, exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1076 ldd >VIRQCnt,pc Get initial count value for drive motor speed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1077 std >VIRQPak,u Save it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1078 * Again, I'm trying to match Kevin Darling code. It may not be needed. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1079 pshs x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1080 ldx #1 Sleep remainder of slice
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1081 lbsr Delay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1082 puls x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1083 bra L03E6 Wait for controller to finish previous command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1084
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1085 * Send command to FDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1086 L03F7 lda #C_MOTOR
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1087 * lda #%00001000 Mask in Drive motor on bit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1088 ora >ctlimg,u Merge in drive/side selects
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1089 sta >DPort+CtrlReg Turn the drive motor on & select drive
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1090 stb >DPort+WD_Cmd Save command & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1091 L0403 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1092
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1093 L0404 bsr L03F7 Go send command to controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1094
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1095 * This loop has been changed from nested LBSRs to timing loop.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1096 * People with crystal upgrades should modify the loop counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1097 * to get a 58+ us delay time. MINIMUM 58us.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1098 FDCDelay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1099 pshs a 14 cycles, plus 3*loop counter
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1100 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1101 lda #18 (only do about a 100 cycle delay for now)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1102 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1103 lda #29 (only do about a 100 cycle delay for now)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1104 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1105 L0409 deca for total ~63 us delay (123 cycles max.)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1106 bne L0409
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1107 puls a,pc restore register and exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1108
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1109 * SetStat
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1110 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1111 * Entry:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1112 * A = function code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1113 * Y = address of path descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1114 * U = address of device memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1115 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1116 * Exit:
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1117 * CC = carry set on error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1118 * B = error code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1119 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1120 SetStat ldx PD.RGS,y Get caller's register stack ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1121 ldb R$B,x Get function code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1122 cmpb #SS.WTrk Write track?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1123 beq SSWTrk Yes, go do it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1124 cmpb #SS.Reset Restore head to track 0?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1125 lbeq sktrk0 Yes, go do it --- beq
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1126 comb set carry for error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1127 ldb #E$UnkSvc return illegal service request error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1128 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1129
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1130 SSWTrk pshs u,y preserve register stack & descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1131
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1132 * Level 2 Code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1133 IFGT Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1134
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1135 *--- new code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1136 ldb #1 1 block to allocate
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1137 os9 F$AllRAM allocate some RAM
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1138 lbcs L0489 error out if at all
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1139 leax >FBlock,u point to 'my' DAT image
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1140 std ,x save a copy of the block
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1141 os9 F$ResTsk reserve a task number for the copy
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1142 bcs FError error out
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1143 stb 2,x save temporary task number in FTask,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1144 lslb 2 bytes per entry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1145 ldu <D.TskIPt get task image table pointer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1146 stx b,u save pointer to the task's DAT image
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1147 lsrb get the right number again
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1148 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1149 tfr 0,u destination is address 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1150 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1151 ldu #$0000
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1152 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1153 *--- end new code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1154
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1155 ldx 2,s get pointer to descriptor
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1156 * stu >FBlock,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1157 ldx <D.Proc Get current process ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1158 lda P$Task,x Get task # for current process
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1159 * ldb <D.SysTsk Get system task #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1160 ldy ,s
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1161 ldx PD.RGS,y Get register stack ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1162 ldx R$X,x Get ptr to caller's track buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1163 ldy #$1A00 Size of track buffer
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1164 os9 F$Move Copy from caller to temporary task
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1165 bcs L0479 Error copying, exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1166 puls u,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1167 pshs u,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1168
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1169 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1170 * End of Level 2 Code
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1171
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1172 lbsr L0376 Go check drive #/wait for it to spin up
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1173 ldx PD.RGS,y Get caller's register stack ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1174 ldb R$Y+1,x Get caller's side/density
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1175 bitb #$01 Check side
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1176 beq L0465 Side 1, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1177 * I think this next line is not needed. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1178 com >currside,u * Why? This is normally used with
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1179 * calculate track. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1180 ldb >ctlimg,u Get current control register settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1181 * orb #%01000000 Mask in side 2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1182 orb #C_SIDSEL Mask in side 2
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1183 stb >ctlimg,u Save updated control register
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1184 L0465 lda R$U+1,x Get caller's track #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1185 ldx >lastdrv,u Get current drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1186 lbsr L02A5
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1187 bcs L0489
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1188 ldb #$F0 Write track command
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1189 *---
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1190 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1191 ldx PD.RGS,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1192 ldx R$X,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1193 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1194 ldx #$2000 start writing from block 1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1195 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1196
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1197 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1198 lda #1 normal unbuffered write
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1199 * Next line prevents WrTrk from switching to SCII buffered mode. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1200 sta flagform,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1201 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1202 lbsr WrTrk Go write the track
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1203 IFNE SCII
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1204 clr flagform,u permit no-halt mode RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1205 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1206
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1207 IFGT Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1208 L0479 ldu 2,s
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1209 pshs b,cc Preserve error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1210 ldb >FTask,u point to task
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1211 os9 F$RelTsk release the task
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1212 fcb $8C skip 2 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1213
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1214 * format comes here when block allocation passes, but task allocation
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1215 * gives error. So er de-allocate the block.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1216 FError
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1217 pshs b,cc save error code, cc
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1218 ldx >FBlock,u point to block
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1219 ldb #1 1 block to return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1220 os9 F$DelRAM de-allocate image RAM blocks
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1221 clr FBlock+1,u ensure that the block # in FBlock is zero.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1222 puls b,cc Restore error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1223 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1224
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1225 L0489 puls pc,u,y Restore regs & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1226
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1227 * seek the head to track 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1228 sktrk0 lbsr chkdrv
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1229 ldx >lastdrv,u
2194
8a96f5241556 *** empty log message ***
boisy
parents: 1807
diff changeset
1230 clr <V.TRAK,x
1746
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1231 lda #1 was 5 but that causes head banging
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1232 L0497 ldb <PD.STP,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1233 andb #%00000011 Just keep usable settings (6-30 ms)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1234 eorb #%01001011 Set proper bits for controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1235 pshs a
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1236 lbsr L03E4
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1237 puls a
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1238 deca
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1239 bne L0497
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1240 ldb <PD.STP,y
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1241 andb #%00000011 Just keep usable settings (6-30 ms)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1242 eorb #%00001011 Set proper bits for controller
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1243 lbra L03E4
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1244
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1245 L04B3 pshs y,x,d Preserve regs
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1246 ldd >VIRQCnt,pc Get VIRQ initial count value
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1247 std >VIRQPak,u Save it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1248 lda >ctlimg,u ?Get drive?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1249 ora #C_MOTOR Turn drive motor on for that drive
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1250 * ora #%00001000 Turn drive motor on for that drive
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1251 sta >DPort+CtrlReg Send drive motor on command to FDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1252 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1253 lda >D.DskTmr Get VIRQ flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1254 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1255 lda <D.MotOn Get VIRQ flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1256 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1257 bmi L04DE Not installed yet, try installing it
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1258 bne L04E0 Drive already up to speed, exit without error
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1259
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1260 * Drive motor speed timing loop (could be F$Sleep call now) (was over .5 sec)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1261 * 32 was not sufficient for one of my drives. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1262 ldx #50 wait for 32 ticks; increased it RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1263 lbsr Delay
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1264
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1265 L04DE bsr InsVIRQ Install VIRQ to wait for drive motors
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1266 L04E0 clrb No error & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1267 puls pc,y,x,d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1268
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1269 InsVIRQ lda #$01 Flag drive motor is up to speed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1270 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1271 sta >D.DskTmr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1272 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1273 sta <D.MotOn
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1274 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1275 ldx #$0001 Install VIRQ entry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1276 leay >VIRQPak,u Point to packet
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1277 clr Vi.Stat,y Reset Status byte
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1278 ldd >VIRQCnt,pc Get initial VIRQ count value
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1279 os9 F$VIRQ Install VIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1280 bcc VIRQOut No error, exit
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1281 lda #$80 Flag that VIRQ wasn't installed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1282 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1283 sta >D.DskTmr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1284 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1285 sta <D.MotOn
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1286 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1287 VIRQOut clra
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1288 rts
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1289
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1290 * IRQ service routine for VIRQ (drive motor time)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1291 * Entry: U=Ptr to VIRQ memory area
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1292 IRQSvc pshs a
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1293 lda <D.DMAReq
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1294 beq L0509
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1295 bsr InsVIRQ
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1296 bra IRQOut
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1297 L0509 sta >DPort+CtrlReg
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1298 * I changed this to a clear. Don't see the point of an AND. RG
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1299 * IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1300 * aim #$FE,>u00B5,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1301 * ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1302 * lda u00B5,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1303 * anda #$FE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1304 * sta u00B5,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1305 * ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1306 * fdb u00B5 --- so changes in data size won't affect anything
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1307 clr u00B5,u
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1308 IFEQ Level-1
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1309 clr >D.DskTmr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1310 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1311 clr <D.MotOn
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1312 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1313 IRQOut puls pc,a
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1314
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1315 * Non-OS9 formatted floppies need a drive table entry constructed
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1316 * by hand since there is no RBF LSN0.
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1317 *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1318 * Entry: X=LSN
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1319 * Y=Path dsc. ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1320 * U=Device mem ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1321 MakeDTEntry
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1322 pshs x Preserve Logical sector #
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1323 ldx >lastdrv,u Get last drive table accessed ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1324 clra
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1325 pshs x,a Save ptr & NUL byte
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1326 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1327 ldw #20 Clear 20 bytes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1328 tfm s,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1329 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1330 ldb #20
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1331 L051ALp clr ,x+
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1332 decb
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1333 bne L051ALp
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1334 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1335 puls x,a Eat NUL & get back drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1336 ldb <PD.CYL+1,y Get # cylinders on drive (ignores high byte)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1337 lda <PD.SID,y Get # sides
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1338 mul Calculate # tracks on drive (1 per head)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1339 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1340 decd Adjust to ignore track 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1341 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1342 subd #$0001
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1343 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1344 lda <PD.SCT+1,y Get # sectors/track
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1345 sta DD.TKS,x Save in drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1346 sta <DD.SPT+1,x Save in other copy in drive table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1347 mul Calculate # sectors on drive (minus track 0)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1348 pshs x Preserve drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1349 tfr d,x Move # sectors on drive to X
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1350 lda <PD.T0S+1,y Get # sectors on track 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1351 leax a,x Add that many sectors to total
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1352 lda <PD.TYP,y Get device type settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1353 anda #%00000100 Mask out all but 512 byte sector flag
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1354 beq L0550 Not 512 byte sector, skip ahead
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1355 IFNE H6309
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1356 addr x,x Multiply by 2 (convert to 256 byte OS9 sectors)
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1357 ELSE
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1358 tfr x,d
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1359 leax d,x
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1360 ENDC
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1361 L0550 tfr x,d Move # sectors to D
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1362 puls x Get back drive table ptr
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1363 std DD.TOT+1,x Save # sectors allowed on drive
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1364 lda #UPDAT.+EXEC. Owner's read/write/exec attributes
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1365 sta DD.ATT,x Set attributes for disk
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1366 lda <PD.DNS,y Get density settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1367 lsla Shift for DD.FMT
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1368 pshs a Preserve it a sec
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1369 lda <PD.SID,y Get # sides
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1370 deca Adjust to base 0
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1371 ora ,s+ Merge with density settings
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1372 sta <DD.FMT,x Save in device table
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1373 clrb No error?
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1374 puls pc,x Restore original LSN & return
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1375
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1376 emod
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1377 eom equ *
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1378 end
5469aad825d7 *** empty log message ***
robert
parents: 1737
diff changeset
1379