0
|
1 ********************************************************************
|
|
2 * Boot - OS-9 Level One V2 Boot for WD1773
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * Ed. Comments Who YY/MM/DD
|
|
7 * ------------------------------------------------------------------
|
|
8 * 1 Tandy/Microware original version
|
|
9
|
|
10 nam Boot
|
|
11 ttl OS-9 Level One V2 Boot for WD1773
|
|
12
|
|
13 ifp1
|
|
14 use defsfile
|
|
15 use rbfdefs
|
|
16 endc
|
|
17
|
|
18 tylg set Systm+Objct
|
|
19 atrv set ReEnt+rev
|
|
20 rev set $01
|
|
21 edition set $01
|
|
22
|
|
23 mod eom,name,tylg,atrv,start,size
|
|
24
|
|
25 u0000 rmb 2
|
|
26 u0002 rmb 2
|
|
27 u0004 rmb 1
|
|
28 size equ .
|
|
29
|
|
30 name fcs /Boot/
|
|
31 fcb edition
|
|
32
|
|
33 * First, we make a stack... (5 bytes deep)
|
|
34 start clra
|
|
35 ldb #$05
|
|
36 MakeStak pshs a
|
|
37 decb
|
|
38 bne MakeStak
|
|
39
|
|
40 tfr s,u
|
|
41 ldx #DPort
|
|
42 leax $08,x
|
|
43 lda #$D0
|
|
44 sta ,x
|
|
45 lbsr L0174
|
|
46 lda ,x
|
|
47 lda #$FF
|
|
48 sta u0004,u
|
|
49 leax >L010E,pcr
|
|
50 stx >$010A
|
|
51 lda #$7E
|
|
52 sta >$0109
|
|
53 lda #$08
|
|
54 sta >DPort
|
|
55 ldd #$C350
|
|
56 L0042 nop
|
|
57 nop
|
|
58 subd #$0001
|
|
59 bne L0042
|
|
60
|
|
61 * search for a free page (to use as a 256 byte disk buffer)
|
|
62 pshs u,x,b,a
|
|
63 clra
|
|
64 clrb
|
|
65 ldy #$0001
|
|
66 ldx <D.FMBM start of bitmap
|
|
67 ldu <D.FMBM+2 end of bitmap
|
|
68 os9 F$SchBit
|
|
69 bcs L009B
|
|
70 exg a,b
|
|
71 ldu $04,s
|
|
72 std u0002,u
|
|
73 clrb
|
|
74
|
|
75 * go get LSN0
|
|
76 ldx #$0000
|
|
77 bsr L00B0
|
|
78 bcs L009B
|
|
79
|
|
80 * get bootfile size from LSN0 and allocate memory for it
|
|
81 ldd <DD.BSZ,y
|
|
82 std ,s
|
|
83 os9 F$SRqMem
|
|
84 bcs L009B
|
|
85 stu $02,s
|
|
86 ldu $04,s
|
|
87 ldx $02,s
|
|
88 stx u0002,u
|
|
89 ldx <DD.BT+1,y get starting sector
|
|
90 ldd <DD.BSZ,y and bootfile size
|
|
91 beq L0094
|
|
92
|
|
93 * this loop reads a sector at a time from the bootfile
|
|
94 RdSctLp pshs x,b,a
|
|
95 clrb
|
|
96 * X = sector #
|
|
97 bsr L00B0
|
|
98 bcs L0099
|
|
99 puls x,b,a
|
|
100 inc u0002,u
|
|
101 leax $01,x
|
|
102 subd #256
|
|
103 bhi RdSctLp
|
|
104 L0094 clrb
|
|
105 puls b,a
|
|
106 bra L009D
|
|
107 L0099 leas $04,s
|
|
108 L009B leas $02,s
|
|
109 L009D puls u,x
|
|
110 leas 5,s restore stack
|
|
111 rts return to OS9
|
|
112
|
|
113 L00A2 clr ,u
|
|
114 clr u0004,u
|
|
115 lda #$05
|
|
116 lbsr L013A
|
|
117 ldb #$03
|
|
118 lbra L015F
|
|
119
|
|
120 L00B0 lda #$91
|
|
121 cmpx #$0000
|
|
122 bne L00C8
|
|
123 bsr L00C8
|
|
124 bcs L00BF
|
|
125 ldy u0002,u
|
|
126 clrb
|
|
127 L00BF rts
|
|
128
|
|
129 L00C0 bcc L00C8
|
|
130 pshs x,b,a
|
|
131 bsr L00A2
|
|
132 puls x,b,a
|
|
133
|
|
134 L00C8 pshs x,b,a
|
|
135 bsr L00D3
|
|
136 puls x,b,a
|
|
137 bcc L00BF
|
|
138 lsra
|
|
139 bne L00C0
|
|
140 L00D3 bsr L011D
|
|
141 bcs L00BF
|
|
142 ldx u0002,u
|
|
143 orcc #FIRQMask+IRQMask
|
|
144 pshs y
|
|
145 ldy #$FFFF
|
|
146 ldb #$80
|
|
147 stb >DPort+8
|
|
148 ldb #$39
|
|
149 stb >DPort
|
|
150 lbsr L0174
|
|
151 ldb #$B9
|
|
152 lda #$02
|
|
153 L00F2 bita >DPort+8
|
|
154 bne L0104
|
|
155 leay -$01,y
|
|
156 bne L00F2
|
|
157 lda #$09
|
|
158 sta >DPort
|
|
159 puls y
|
|
160 bra L0119
|
|
161
|
|
162 L0104 lda >DPort+$0B
|
|
163 sta ,x+
|
|
164 stb >DPort
|
|
165 bra L0104
|
|
166 L010E leas $0C,s
|
|
167 puls y
|
|
168 ldb >DPort+8
|
|
169 bitb #$04
|
|
170 beq L0159
|
|
171 L0119 comb
|
|
172 ldb #E$Read E$READ error
|
|
173 rts
|
|
174
|
|
175 L011D clr ,u
|
|
176 tfr x,d
|
|
177 cmpd #$0000
|
|
178 beq L0136
|
|
179 clr ,-s
|
|
180 bra L012D
|
|
181 L012B inc ,s
|
|
182 L012D subd #$0012
|
|
183 bcc L012B
|
|
184 addb #$12
|
|
185 puls a
|
|
186 L0136 incb
|
|
187 stb >DPort+$0A
|
|
188 L013A ldb u0004,u
|
|
189 stb >DPort+9
|
|
190 cmpa u0004,u
|
|
191 beq L0157
|
|
192 sta u0004,u
|
|
193 sta >DPort+$0B
|
|
194 ldb #$13
|
|
195 bsr L015F
|
|
196 pshs x
|
|
197 ldx #$222E
|
|
198 L0151 leax -1,x
|
|
199 bne L0151
|
|
200 puls x
|
|
201 L0157 clrb
|
|
202 rts
|
|
203
|
|
204 L0159 bitb #$98
|
|
205 bne L0119
|
|
206 clrb
|
|
207 rts
|
|
208
|
|
209 L015F bsr L0172
|
|
210 L0161 ldb >DPort+8
|
|
211 bitb #$01
|
|
212 bne L0161
|
|
213 rts
|
|
214
|
|
215 L0169 lda #$09
|
|
216 sta >DPort
|
|
217 stb >DPort+8
|
|
218 rts
|
|
219
|
|
220 L0172 bsr L0169
|
|
221
|
|
222 * Some type of delay??
|
|
223 L0174 lbsr L0177
|
|
224 L0177 lbsr L017A
|
|
225 L017A rts
|
|
226
|
|
227 emod
|
|
228 eom equ *
|