comparison level1/modules/boot_1773.asm @ 0:6641a883d6b0

Initial revision
author boisy
date Thu, 04 Apr 2002 16:34:12 +0000
parents
children cdfe69117a2f
comparison
equal deleted inserted replaced
-1:000000000000 0:6641a883d6b0
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 *