annotate level2/cmds/cobbler.asm @ 24:01a6e267aa38

Added the Basic09 Reference Manual
author roug
date Sat, 06 Apr 2002 13:34:58 +0000
parents 6641a883d6b0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1 ********************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2 * Cobbler - Boot generation utility
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * $Id$
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 * ------------------------------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 * 7 Reworked AD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * 8 Fixed error where $40+C$CR should have been BGP 98/10/20
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10 * $40*256+C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 nam Cobbler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13 ttl Boot generation utility
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 * Disassembled 94/10/23 11:19:48 by Alan DeKok
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 * WARNING: This is a LEVEL II Cobbler only!
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 use os9defs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 use scfdefs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 use rbfdefs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25 tylg set Prgrm+Objct
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26 atrv set ReEnt+rev
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 rev set $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 edition set 8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30 mod eom,name,tylg,atrv,start,size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 u0000 rmb 3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 u0003 rmb 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33 u0004 rmb 12
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34 u0010 rmb 5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 u0015 rmb 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 u0016 rmb 2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38 u0018 rmb 2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 * Everything before here is the DD.foo equivalent
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40 PathO rmb 1 path output to OS9boot file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41 Path rmb 3 path to /DEVICE@
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 KernelF rmb 1 0=write kernel track, 1= don't
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 BootF rmb 1 0=write boot track, 1=don't
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44 FileNm rmb 20 /DEVICE/OS9Boot memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 rmb 16
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46 SysDAT rmb 16 copy of the system DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47 FileDesc rmb $20 room for first bit of file descriptor
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48 AllMap rmb 1024 allocation map is entirely too large...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 Buffer rmb $2000 only copy 8k at a time
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 rmb 200 room for the stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 size equ .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53 name fcs /Cobbler/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54 fcb edition my version of cobbler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 L0015 fdb $0000 minimal DAT image for checking out the system.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 OS9Boot fcs '/OS9Boot'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59 Rel fcc /Rel/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 start clr <KernelF force a write of the kernel track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 clr <BootF force a write of the boot track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 skip ldd ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 cmpa #C$SPAC space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 beq skip
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 cmpa #'- hyphen?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67 bne s.001
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 andb #$DF make it uppercase
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 cmpb #'K force no write of kernel track?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 bne check.b no, check for the boot track stuff
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72 stb <KernelF save the kernel flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 bra s.000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 check.b cmpb #'B don't write boot?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 bne go.help no, print out help message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 stb <BootF save the boot flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79 s.000 leax 1,x skip the character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80 lda ,x++ get the next character, and point to the next one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 cmpa #$20 space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 bne go.help no, print out a help message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 s.001 leax -1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 lda #'/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 cmpa ,x is the first character a slash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87 Go.help lbne Help not a device name, error out
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 os9 F$PrsNam parse the name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 lbcs Exit exit on error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 lda #'/ is the next character a slash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 cmpa ,y check it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 lbeq Help yes, dump out a help message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93 ldy #FileNm point to the filename buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94 L013C sta ,y+ make first character a slash
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 lda ,x+ copy the name over
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 bpl L013C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 ldd #$40*256+C$CR '@+CR'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 std ,y save in the buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100 ldx #FileNm point to the filename again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101 lda #UPDAT.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 os9 I$Open open /DEVICE@
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 sta <Path save the path to the file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104 lbcs Exit dump out help on an error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 leax ,y point to end of '/DEVICE' name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106 leay >OS9Boot,pcr point to the OS9Boot name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 L0162 lda ,y+ get a byte from the name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 sta ,x+ save in my buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 bpl L0162 copy it over
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111 leax ,u both are zero in a level II system
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113 os9 I$Seek seek to LSN0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 lbcs Exit dump out error if encountered
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 * X is implicitely zero from the call above
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 ldy #DD.BSZ+2 read everything up to the boot size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119 os9 I$Read get it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122 tst <BootF replace OS9Boot?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 lbne no.boot no, go write the kernel track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125 ldd <DD.BSZ get the boot size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126 lbeq L019F if non-existent, don't delete it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127 ldx #FileNm point to /DEVICE/OS9boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 os9 I$Delete delete it, if it exists
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 sta <DD.BT NO OS9boot file on this disk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 std <DD.BT+1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
133 std <DD.BSZ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
134 lbsr L045A dump out LSN0 information again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
135
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
136 L019F ldd #(UPDAT.*256)+UPDAT.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
137 ldx #FileNm create a /DEVICE/OS9Boot file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
138 os9 I$Create
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
139 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
140 sta <PathO
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
141
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
142 leax >L0015,pcr temporary DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
143 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
144 ldx #$0000 get copy of direct page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
145 ldy #$0090 first $90 bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146 ldu #Buffer to a buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 os9 F$CpyMem copy memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150 leax >L0015,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 tfr x,d use it as temporary DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 ldx >Buffer+D.SysDAT get pointer to system DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153 ldy #$0010 get a copy of it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
154 ldu #SysDAT point to room for the system DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
155 os9 F$CpyMem get the system DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
156 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
157 ldx #Buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
158 ldd <D.BtPtr,x address of boot in system memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
159 pshs d save a copy of it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
160 ldd <D.BtSz,x size of the OS9Boot file in system memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
161 std <DD.BSZ save in the boot size info for LSN0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
162 pshs d save the size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
163 L01F7 ldy #$2000 only do 8k at a time
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
164 cmpy ,s default to one block???
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
165 bls L0203
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
166 ldy ,s get the actual boot size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
167 L0203 pshs y save a copy of it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
168 ldx #SysDAT get dat image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
169 tfr x,d save it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
170 ldx $04,s get start of boot in memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
171 ldu #Buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
172 os9 F$CpyMem copy one block at a time
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
173 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
174 ldy ,s get how much we're copying
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
175 ldx #Buffer point to the buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
176 lda <PathO dump it to /DEVICE/OS9Boot file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
177 os9 I$Write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
178 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
179 puls d get size of what we're copying
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
180 ldy $02,s get start address of boot file in system memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
181 leay d,y go to the next group of data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
182 sty $02,s save new start a address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
183 nega
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
184 negb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
185 sbca #$00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
186 ldy ,s get size of boot file left
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
187 leay d,y take out what we've done
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
188 sty ,s save it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
189 bne L01F7 if not done, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
190 leas $04,s remove start,size from the stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
191
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
192 lda <PathO path to OS9Boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
193 ldb #SS.FD get FD information
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
194 ldx #FileDesc read the file descriptor sector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
195 ldy #$0020 only get the first 32 bytes of it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
196 os9 I$GetStt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
197 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
198
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
199 os9 I$Close close the path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
200 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
201
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
202 ldd <FD.SEG+3+2+3,x get size of SECOND segment in file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
203 lbne L0488 if not zero, the file is fragmented
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
204 ldb <FD.SEG,x get first byte of address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
205 stb <DD.BT save starting sector of the bootstrap file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
206 ldd <FD.SEG+1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
207 std <DD.BT+1 save the rest of the LSN#
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
208 lbsr L045A seek to LSN0 and dump out this information, too
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
209
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
210 lda <KernelF do we do a kernel track?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
211 bne ClnExit no, don't even check for floppy stuff
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
212
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
213 lda <DD.FMT is it a HD? (Bit 7 set)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
214 bpl Floppy if bit 7 is clear, go do track 34 stuff.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
215
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
216 ClnExit clrb no error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
217 Exit1 OS9 F$Exit and exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
218
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
219 no.boot lda <DD.FMT is it a HD? (bit 7 set)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
220 bpl Floppy if OK, go write it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
221 coma set carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
222 ldb #E$BTyp bad media type
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
223 bra Exit1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
224
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
225 Floppy ldd #$0001 track 0, sector 1: LSN 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
226 lbsr L0440 seek to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
227
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
228 ldx #AllMap point to the allocation map buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
229 ldy <DD.MAP get the size of the map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
230 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
231 os9 I$Read read in the allocation map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
232 bcs Exit1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
233
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
234 ldd <DD.MAP get number of bytes in the map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
235 leau d,x point to the END of the map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
236 ldd #$2200 track 34, sector 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
237 lbsr Tk2LSN get LSN of this in D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
238 pshs d save it for later
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
239 ldy #0018 force the boot track to be 18 sectors long
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
240 OS9 F$SchBit search for 18 free sectors at D,X: ending at U
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
241 cmpd ,s++ did we find bits at the starting bit number?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
242 bne Check no, check for REL on the disk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
243 cmpy #0018 if found at the right spot, did we find 18 bits?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
244 beq AllClr if so, go allocate them
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
245
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
246 Check ldd #$2200 track 34, sector 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
247 lbsr L0440 seek to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
248
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
249 ldx #Buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
250 ldy #$0100 read one sector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
251 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
252 os9 I$Read get the first sector of the boot track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
253 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
254
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
255 ldd ,x++ get the first 2 bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
256 cmpd #$4F53 is it 'OS'?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
257 lbne L0496 files present on track 34, give error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
258 ldd ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
259 cmpa #$20 is it a BRA?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
260 lbne L0496
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
261 ldd ,x get some bytes from the sector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
262 cmpd #M$ID12 is it a module header?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
263 beq map.blk yes, go write out the kernel track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
264 leax 2,x skip the $1205 sync bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
265 ldd ,x grab the header
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
266 cmpd #M$ID12 is there a module here?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
267 lbne L0496 no, error out
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
268 bra map.blk don't allocate track 34, REL already exists on it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
269
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
270 * We've found 18 bytes at D,X in the allocation bit map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
271 * D,X,Y are set up from above
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
272 AllClr OS9 F$AllBit allocate the bits in the bitmap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
273
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
274 * possible problems here, as the r/w of the allocation bitmap is NOT atomic.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
275 * some other process may come along and grab the sectors we want.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
276 L0315 ldd #$0001 track 0, sector 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
277 bsr L0440 seek to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
278 ldx #AllMap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
279 ldy <DD.MAP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
280 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
281 os9 I$Write dump out the allocation map again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
282 lbcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
283
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
284 * Do a F$Link to REL?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
285 map.blk ldx #$003F the boot track is in block 63
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
286 ldb #1 one block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
287 OS9 F$MapBlk map the block in
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
288 lbcs L049D error finding boot track in memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
289
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
290 ldd #$2200 track 34, sector 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
291 bsr L0440 seek to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
292 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
293 leax $0D00,u the boot track starts out at $ED00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
294 ldy #$1200 dump out 18 sectors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
295 os9 I$Write dump out REL, Boot, OS9p1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
296 pshs cc,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
297 ldb #1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
298 OS9 F$ClrBlk un-map block $3F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
299 puls cc,b restore possible error code
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
300 bcs L048F if there was an error, print it out and exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
301 os9 I$Close close the path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
302 clrb no erros
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
303 bra Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
304
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
305 ******************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
306 * Convert track,sector to LSN
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
307 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
308 * Entry: A = track number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
309 * B = sector number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
310 * Exit : D = LSN# of that sector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
311 Tk2LSN pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
312 ldb <DD.FMT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
313 andb #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
314 beq L037F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
315 ldb #$02 disk is 2-sided
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
316 bra L0381
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
317
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
318 L037F ldb #$01 disk is 1-sided
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
319 L0381 mul multiply sides by tracks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
320 lda <DD.TKS track size in sectors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
321 mul get LSN of the track
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
322 addb ,s add in the sector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
323 adca #$00 make it 16-bit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
324 leas $01,s dumb dumb dumb people...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
325 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
326
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
327 L0440 pshs u,y,x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
328 bsr Tk2LSN convert track,sector to LSN
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
329 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
330 tfr b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
331 clrb shuffle so 16-bit LSN goes to
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
332 tfr d,u 32-bit address, with the lower
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
333 puls b 16 bits all zero
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
334 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
335 tfr d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
336 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
337 os9 I$Seek seek to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
338 bcs L048F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
339 puls pc,u,y,x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
340
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
341 L045A clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
342 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
343 tfr d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
344 tfr d,u go to LSN0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
345
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
346 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
347 os9 I$Seek seek to LSN0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
348
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
349 ldy #DD.DAT X=$0000 already...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
350 lda <Path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
351 os9 I$Write dump it out
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
352 bcs Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
353 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
354
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
355 Help leax <HelpMsg,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
356 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
357
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
358 Print pshs b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
359 lda #$02
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
360 ldy #$0200
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
361 os9 I$WritLn
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
362 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
363 puls b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
364
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
365 Exit os9 F$Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
366
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
367 L0488 leax >L00D1,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
368 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
369 bra Print
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
370
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
371 L048F leax >L0051,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
372 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
373 bra Print
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
374
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
375 L0496 leax >L008E,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
376 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
377 bra Print
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
378
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
379 L049D leax >L00F2,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
380 bra Print
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
381
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
382 HelpMsg fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
383 fcc 'Use: COBBLER [-k] [-b] </devname>'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
384 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
385 fcc / to create a new system disk by writing an OS9Boot file/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
386 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
387 fcc / and a boot (kernel) track to the specified drive./
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
388 fcb C$LF,C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
389 fcc / -k = don't write the kernel track/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
390 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
391 fcc / Hard disk drives never have the kernel track written./
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
392 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
393 fcc / -b = don't write the OS9Boot file/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
394 fcb C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
395
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
396 L0051 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
397 fcc /Error writing kernel track or LSN0./
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
398 fcb C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
399
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
400 L008E fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
401 fcc /Warning - file(s) present on track 34/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
402 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
403 fcc / - this track not rewritten./
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
404 fcb C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
405
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
406 L00D1 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
407 fcc /Error - OS9boot file fragmented/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
408 fcb C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
409
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
410 L00F2 fcb C$LF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
411 fcc /Error - can't find boot track in memory/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
412 fcb C$CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
413
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
414 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
415 eom equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
416 end