annotate level1/modules/boot_sdc.asm @ 3033:7028ce216ccf

Added SDC boot module from Darren Atkinson
author tlindner
date Tue, 23 Dec 2014 21:14:58 -0800
parents
children 47cd23dcf55e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3033
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
1 ********************************************************************
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
2 * Boot - CoCo SDC Boot module
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
3 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
4 * $Id$
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
5 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
6 * Edt/Rev YYYY/MM/DD Modified by
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
7 * Comment
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
8 * ------------------------------------------------------------------
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
9 * 2014/12/22 Darren Atkinson
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
10 * Created.
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
11
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
12 nam Boot
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
13 ttl SDC Boot module
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
14
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
15 IFP1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
16 use defsfile
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
17 ENDC
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
18
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
19 * Default Boot is from drive 0
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
20 BootDr set 0
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
21
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
22 * Alternate Boot is from drive 1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
23 IFEQ DNum-1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
24 BootDr set 1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
25 ENDC
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
26
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
27 * Common booter-required defines
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
28 LSN24BIT equ 1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
29 FLOPPY equ 0
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
30
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
31 * DPort offsets
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
32 CONTROL equ 0 write-only
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
33 CMDREG equ 8+0 write-only
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
34 STATREG equ CMDREG read-only
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
35 LSNREG equ 8+1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
36 DATAREG equ 8+2
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
37
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
38 * NOTE: these are U-stack offsets, not DP
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
39 seglist rmb 2 pointer to segment list
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
40 blockloc rmb 2 pointer to memory requested
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
41 blockimg rmb 2 duplicate of the above
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
42 bootsize rmb 2 size in bytes
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
43 LSN0Ptr rmb 2 In memory LSN0 pointer
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
44 size equ .
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
45
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
46
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
47 tylg set Systm+Objct
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
48 atrv set ReEnt+rev
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
49 rev set $00
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
50 edition set 1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
51
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
52 mod eom,name,tylg,atrv,start,size
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
53
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
54 name fcs /Boot/
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
55 fcb edition
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
56
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
57
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
58 *--------------------------------------------------------------------------
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
59 * HWInit - Initialize the device
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
60 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
61 * Entry:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
62 * Y = hardware address
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
63 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
64 * Exit:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
65 * Carry Clear = OK, Set = Error
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
66 * B = error (Carry Set)
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
67 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
68 HWInit orcc #$50 mask interrupts
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
69 lda #$D0 stop any emulated FDC command
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
70 sta CMDREG,y
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
71 pshs d,x,y,u delay
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
72 puls d,x,y,u
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
73 lda STATREG,y clear INTRQ
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
74
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
75 *** Fall Thru ***
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
76
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
77 *--------------------------------------------------------------------------
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
78 * HWTerm - Terminate the device
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
79 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
80 * Entry:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
81 * Y = hardware address
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
82 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
83 * Exit:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
84 * Carry Clear = OK, Set = Error
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
85 * B = error (Carry Set)
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
86 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
87 HWTerm clrb no error
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
88 stb CONTROL,y disable command mode
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
89 rts
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
90
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
91
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
92 ***************************************************************************
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
93 use boot_common.asm
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
94 ***************************************************************************
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
95
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
96 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
97 * HWRead - Read a 256 byte sector from the device
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
98 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
99 * Entry:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
100 * Y = hardware address
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
101 * B = bits 23-16 of LSN
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
102 * X = bits 15-0 of LSN
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
103 * blockloc,u = where to load the 256 byte sector
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
104 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
105 * Exit:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
106 * X = ptr to data (i.e. ptr in blockloc,u)
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
107 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
108 HWRead lda #$43 start command mode
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
109 sta CONTROL,y
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
110 stb LSNREG,y put LSN into registers
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
111 stx LSNREG+1,y
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
112 clra A=0 for use at rdExit
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
113 bsr waitSDC wait for BUSY to be cleared
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
114 bcs rdExit exit on error or timeout
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
115 ldb WhichDrv,pcr get drive number
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
116 andb #1 limit to 0 or 1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
117 orb #$80 combine with Read Sector command
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
118 stb CMDREG,y send command to controller
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
119 bsr waitSDC wait for data READY
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
120 bcs rdExit exit on error or timeout
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
121 ldx blockloc,u get address of buffer to fill
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
122 pshs u,x preserve U and X
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
123 ldb #256/2 1/2 sector size
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
124 rdLoop ldu DATAREG,y read word data from controller
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
125 stu ,x++ store to buffer
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
126 decb decrement word counter
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
127 bne rdLoop loop until done
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
128 puls x,u restore X and U
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
129 rdExit sta CONTROL,y end command mode
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
130 rts
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
131
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
132
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
133 *--------------------------------------------------------------------------
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
134 * Wait for controller status to indicate either "Not Busy" or "Ready".
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
135 * Will time out if neither condition satisfied within a suitable period.
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
136 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
137 * Exit:
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
138 * CC.C set on error or time out
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
139 *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
140 waitSDC ldx #0 setup timeout counter
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
141 waitLp bsr waitRet extra cycles for timeout
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
142 comb set carry for timeout/FAILED
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
143 leax ,-x decrement timeout counter
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
144 beq waitRet return if timed out
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
145 ldb STATREG,y read status
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
146 bmi waitRet return if FAILED
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
147 lsrb BUSY --> Carry
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
148 bcc waitRet return if not busy
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
149 rolb clear carry
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
150 bitb #2 test READY
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
151 beq waitLp loop if not ready for transfer
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
152 waitRet rts return
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
153
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
154
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
155 *--------------------------------------------------------------------------
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
156
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
157 IFGT Level-1
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
158 * Filler to get $1D0
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
159 Filler fill $39,$1D0-3-2-1-*
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
160 ENDC
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
161
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
162 Address fdb DPort
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
163 WhichDrv fcb BootDr
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
164
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
165 emod
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
166 eom equ *
7028ce216ccf Added SDC boot module from Darren Atkinson
tlindner
parents:
diff changeset
167 end