Mercurial > hg > Members > kono > nitros9-code
annotate level1/modules/kernel/krnp2.asm @ 3295:6b7a7b233925 default tip
makefile: Allow PORTS with level1/2 mix
https://sourceforge.net/p/nitros9/feature-requests/10/
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Tue, 19 Apr 2022 18:12:17 +0200 |
parents | 504992b73b2b |
children |
rev | line source |
---|---|
1453 | 1 ******************************************************************** |
1587
5f18094d961d
kernel modules renamed to krn, updated makefiles, clock2_tc3 now clock2_cloud9...
boisy
parents:
1453
diff
changeset
|
2 * krnp2 - NitrOS-9 Level 1 Kernel Part 2 |
1453 | 3 * |
4 * $Id$ | |
5 * | |
6 * Edt/Rev YYYY/MM/DD Modified by | |
7 * Comment | |
8 * ------------------------------------------------------------------ | |
2829 | 9 * 11 2013/05/29 Boisy G. Pitre |
10 * F$Debug now incorporated, allows for reboot. | |
1453 | 11 |
1587
5f18094d961d
kernel modules renamed to krn, updated makefiles, clock2_tc3 now clock2_cloud9...
boisy
parents:
1453
diff
changeset
|
12 nam krnp2 |
1453 | 13 ttl NitrOS-9 Level 1 Kernel Part 2 |
14 | |
15 ifp1 | |
16 use defsfile | |
17 endc | |
18 | |
19 tylg set Systm+Objct | |
20 atrv set ReEnt+rev | |
21 rev set $00 | |
2829 | 22 edition set 11 |
1453 | 23 |
24 mod eom,name,tylg,atrv,start,size | |
25 | |
26 size equ . | |
27 | |
1663 | 28 name fcs /KrnP2/ |
1453 | 29 fcb edition |
30 | |
31 SvcTbl fcb $7F | |
32 fdb IOCall-*-2 | |
33 | |
34 fcb F$Unlink | |
35 fdb FUnlink-*-2 | |
36 | |
37 fcb F$Wait | |
38 fdb FWait-*-2 | |
39 | |
40 fcb F$Exit | |
41 fdb FExit-*-2 | |
42 | |
43 fcb F$Mem | |
44 fdb FMem-*-2 | |
45 | |
46 fcb F$Send | |
47 fdb FSend-*-2 | |
48 | |
49 fcb F$Sleep | |
50 fdb FSleep-*-2 | |
51 | |
52 fcb F$Icpt | |
53 fdb FIcpt-*-2 | |
54 | |
55 fcb F$ID | |
56 fdb FID-*-2 | |
57 | |
58 fcb F$SPrior | |
59 fdb FSPrior-*-2 | |
60 | |
61 fcb F$SSwi | |
62 fdb FSSwi-*-2 | |
63 | |
64 fcb F$STime | |
65 fdb FSTime-*-2 | |
66 | |
67 fcb F$Find64+$80 | |
68 fdb FFind64-*-2 | |
69 | |
70 fcb F$All64+$80 | |
71 fdb FAll64-*-2 | |
72 | |
73 fcb F$Ret64+$80 | |
74 fdb FRet64-*-2 | |
75 | |
3178
504992b73b2b
krnp2: Omit debug parameters in non-debug builds
Boisy Pitre <coco@toughmac.com>
parents:
3088
diff
changeset
|
76 IFNE UseFDebug |
2829 | 77 fcb F$Debug |
78 fdb FDebug-*-2 | |
3178
504992b73b2b
krnp2: Omit debug parameters in non-debug builds
Boisy Pitre <coco@toughmac.com>
parents:
3088
diff
changeset
|
79 ENDC |
2829 | 80 |
1453 | 81 fcb $80 |
82 | |
83 start equ * | |
84 * install system calls | |
85 leay SvcTbl,pcr | |
86 os9 F$SSvc | |
87 ldx <D.PrcDBT | |
88 os9 F$All64 | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
89 bcs fatalerr failed to allocate |
1453 | 90 stx <D.PrcDBT |
91 sty <D.Proc | |
92 tfr s,d | |
93 deca | |
94 ldb #$01 | |
95 std P$ADDR,y | |
96 lda #SysState | |
97 sta P$State,y | |
98 ldu <D.Init | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
99 |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
100 * ChdDir should identify system device, result in a call to IOCall which links and |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
101 * initialises IOMan then calls JmpBoot to load and validate the boot file |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
102 bsr ChdDir U = address of init module |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
103 bcc L006A success |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
104 |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
105 * Maybe we failed because we didn't have all the modules we needed? Load and |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
106 * validate the boot file and then try again. |
1453 | 107 lbsr JmpBoot |
108 bsr ChdDir | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
109 |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
110 L006A bsr OpenCons U = address of init module, still |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
111 bcc L0073 success |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
112 |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
113 * Maybe we were able to get this far without needing anything from the boot file, but now |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
114 * we need it for the console device |
1453 | 115 lbsr JmpBoot |
116 bsr OpenCons | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
117 |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
118 * Hmm. No check for success. Probably should "bcs fatalerr" here? |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
119 |
1453 | 120 L0073 ldd InitStr,u |
121 leax d,u | |
122 lda #$01 | |
123 clrb | |
124 ldy #$0000 | |
125 os9 F$Chain | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
126 fatalerr jmp [$FFFE] |
1453 | 127 |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
128 * change directory |
1453 | 129 * U = address of init module |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
130 ChdDir clrb clear carry |
1453 | 131 ldd <SysStr,u get system device |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
132 beq ChdDir10 branch if none - carry still clear |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
133 leax d,u address of the path list |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
134 lda #READ.+EXEC. access mode |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
135 os9 I$ChgDir change directory to it |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
136 ChdDir10 rts carry set -> error |
1453 | 137 |
138 * open console device | |
139 * U = address of init module | |
140 OpenCons clrb | |
141 ldd <StdStr,u | |
142 leax d,u | |
143 lda #UPDAT. | |
144 os9 I$Open | |
145 bcs OpenCn10 | |
146 ldx <D.Proc get process descriptor | |
147 sta P$Path+0,x save path to console to stdin... | |
148 os9 I$Dup | |
149 sta P$Path+1,x ...stdout | |
150 os9 I$Dup | |
151 sta P$Path+2,x ...and stderr | |
152 OpenCn10 rts | |
153 | |
154 FUnlink ldd R$U,u D = ptr to module to unlink | |
155 beq L00F9 | |
156 ldx <D.ModDir X = ptr to 1st module dir entry | |
157 L00B8 cmpd MD$MPtr,x module match? | |
158 beq L00C5 branch if so | |
159 leax MD$ESize,x go to next entry | |
160 cmpx <D.ModDir+2 is this end? | |
161 bcs L00B8 if not, go check next entry for match | |
162 bra L00F9 else exit | |
163 L00C5 lda MD$Link,x get link count | |
164 beq L00CE branch if zero | |
165 deca else decrement by one | |
166 sta MD$Link,x and save count | |
167 bne L00F9 branch if post-dec wasn't zero | |
168 * If here, deallocate module | |
169 L00CE ldy MD$MPtr,x get module pointer | |
170 cmpy <D.BTLO compare against boot lo mem | |
171 bcc L00F9 | |
172 ldb M$Type,y get type of module | |
173 cmpb #FlMgr is it a file manager? | |
174 bcs L00E5 branch if not | |
175 os9 F$IODel determine if I/O module is in use | |
176 bcc L00E5 branch if not | |
177 inc MD$Link,x else cancel out prior dec | |
178 bra L00FA and exit call | |
179 L00E5 clra | |
180 clrb | |
181 std MD$MPtr,x clear out moddir entry's module address | |
182 std M$ID,y and destroy module's first 2 bytes | |
183 ldd M$Size,y get size of module in D | |
184 lbsr L0236 | |
185 exg d,y | |
186 exg a,b | |
187 ldx <D.FMBM get free mem bitmap ptr | |
188 os9 F$DelBit delete the corresponding bits | |
189 L00F9 clra | |
190 L00FA rts | |
191 | |
192 FWait ldy <D.Proc | |
193 ldx <D.PrcDBT | |
194 lda P$CID,y | |
195 bne L0108 | |
196 comb | |
197 ldb #E$NoChld | |
198 rts | |
199 L0108 os9 F$Find64 | |
200 lda P$State,y | |
201 bita #Dead dead? | |
202 bne L0124 branch if so | |
203 lda P$SID,y siblings? | |
204 bne L0108 branch if so | |
205 clr R$A,u | |
206 ldx <D.Proc | |
207 orcc #FIRQMask+IRQMask | |
208 ldd <D.WProcQ | |
209 std P$Queue,x | |
210 stx <D.WProcQ | |
211 lbra L034D | |
212 L0124 ldx <D.Proc | |
213 L0126 lda P$ID,y | |
214 ldb <P$Signal,y | |
215 std R$A,u | |
216 pshs u,y,x,a | |
217 leay P$PID,x | |
218 ldx <D.PrcDBT | |
219 bra L0138 | |
220 L0135 os9 F$Find64 | |
221 L0138 lda P$SID,y | |
222 cmpa ,s | |
223 bne L0135 | |
224 ldu $03,s | |
2381 | 225 ldb R$B,u |
226 stb P$SID,y | |
1453 | 227 os9 F$Ret64 |
228 puls pc,u,y,x,a | |
229 | |
230 FExit ldx <D.Proc | |
231 ldb R$B,u | |
232 stb P$Signal,x | |
233 ldb #NumPaths | |
234 leay P$PATH,x | |
235 L0155 lda ,y+ | |
236 beq L0160 | |
237 pshs b | |
238 os9 I$Close | |
239 puls b | |
240 L0160 decb | |
241 bne L0155 | |
242 lda P$ADDR,x | |
243 tfr d,u | |
244 lda P$PagCnt,x | |
245 os9 F$SRtMem | |
246 ldu P$PModul,x | |
247 os9 F$UnLink | |
248 ldu <D.Proc | |
249 leay P$PID,u | |
250 ldx <D.PrcDBT | |
251 bra L018C | |
252 L017A clr $02,y | |
253 os9 F$Find64 | |
254 lda P$State,y | |
255 bita #Dead dead? | |
256 beq L018A branch if not | |
257 lda ,y | |
258 os9 F$Ret64 | |
259 L018A clr P$PID,y | |
260 L018C lda P$SID,y | |
261 bne L017A | |
262 ldx #$0041 | |
263 lda P$PID,u | |
264 bne L01A4 | |
265 ldx <D.PrcDBT | |
266 lda P$ID,u | |
267 os9 F$Ret64 | |
268 bra L01C2 | |
269 L01A0 cmpa ,x | |
270 beq L01B2 | |
271 L01A4 leay ,x Y = proc desc ptr | |
272 ldx P$Queue,x | |
273 bne L01A0 | |
274 lda P$State,u | |
275 ora #Dead | |
276 sta P$State,u | |
277 bra L01C2 | |
278 L01B2 ldd P$Queue,x | |
279 std P$Queue,y | |
280 os9 F$AProc | |
281 leay ,u | |
282 ldu P$SP,x | |
2381 | 283 ldu R$D,u |
1453 | 284 lbsr L0126 |
285 L01C2 clra | |
286 clrb | |
287 std <D.Proc | |
288 rts | |
289 | |
290 FMem ldx <D.Proc | |
291 ldd R$A,u | |
292 beq L0227 | |
293 bsr L0236 | |
294 subb P$PagCnt,x | |
295 beq L0227 | |
296 bcs L0207 | |
297 tfr d,y | |
298 ldx P$ADDR,x | |
299 pshs u,y,x | |
300 ldb ,s | |
301 beq L01E1 | |
302 addb $01,s | |
303 L01E1 ldx <D.FMBM | |
304 ldu <D.FMBM+2 | |
305 os9 F$SchBit | |
306 bcs L0231 | |
307 stb $02,s | |
308 ldb ,s | |
309 beq L01F6 | |
310 addb $01,s | |
311 cmpb $02,s | |
312 bne L0231 | |
313 L01F6 ldb $02,s | |
314 os9 F$AllBit | |
315 ldd $02,s | |
316 suba $01,s | |
317 addb $01,s | |
318 puls u,y,x | |
319 ldx <D.Proc | |
320 bra L0225 | |
321 | |
322 L0207 negb | |
323 tfr d,y | |
324 negb | |
325 addb $08,x | |
326 addb $07,x | |
327 cmpb $04,x | |
328 bhi L0217 | |
329 comb | |
330 ldb #E$DelSP | |
331 rts | |
332 | |
333 L0217 ldx <D.FMBM | |
334 os9 F$DelBit | |
335 tfr y,d | |
336 negb | |
337 ldx <D.Proc | |
338 addb P$PagCnt,x | |
339 lda P$ADDR,x | |
340 L0225 std P$ADDR,x | |
341 L0227 lda P$PagCnt,x | |
342 clrb | |
2381 | 343 std R$D,u |
1453 | 344 adda P$ADDR,x |
2381 | 345 std R$Y,u |
1453 | 346 rts |
347 L0231 comb | |
348 ldb #E$MemFul | |
349 puls pc,u,y,x | |
350 | |
351 L0236 addd #$00FF | |
352 clrb | |
353 exg a,b | |
354 rts | |
355 | |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
356 FSend lda R$A,u get process ID of recipient |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
357 bne L024F branch if > 0 |
1453 | 358 inca |
359 L0242 ldx <D.Proc | |
360 cmpa P$ID,x | |
361 beq L024A | |
362 bsr L024F | |
363 L024A inca | |
364 bne L0242 | |
365 clrb | |
366 rts | |
367 | |
368 L024F ldx <D.PrcDBT | |
369 os9 F$Find64 | |
370 bcc L025E | |
371 ldb #E$IPrcID | |
372 rts | |
373 | |
374 L0259 comb | |
375 ldb #E$IPrcID | |
376 puls pc,y,a | |
377 | |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
378 * Entry: A = recipient PID |
1453 | 379 L025E pshs y,a |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
380 ldb R$B,u get caller regB (signal) |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
381 bne L0275 branch if not 0 |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
382 ldx <D.Proc get active process desc |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
383 ldd P$User,x get user id |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
384 beq L026F branch if super user ID |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
385 cmpd P$User,y same as user of recipient process? |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
386 bne L0259 no, cannot send signal to another users process |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
387 L026F lda P$State,y get state of recipient |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
388 ora #Condem set condemn bit |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
389 sta P$State,y and set it back |
1453 | 390 L0275 orcc #FIRQMask+IRQMask |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
391 lda <P$Signal,y get recipient pending signal |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
392 beq L0284 branch if none |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
393 deca is the pending signal the wake signal? |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
394 beq L0284 branch if so |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
395 comb else indicate signal already pending |
1453 | 396 ldb #E$USigP |
397 puls pc,y,a | |
398 | |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
399 L0284 ldb R$B,u get caller regB (signal) |
1453 | 400 stb <P$Signal,y |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
401 ldx #(D.SProcQ-P$Queue) get pointer to sleeping process queue |
1453 | 402 bra L02B4 |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
403 L028E cmpx $01,s same as process descriptor of recipient? |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
404 bne L02B4 branch if not |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
405 lda P$State,x else get state of recipient |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
406 bita #TimSleep timed sleep? |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
407 beq L02C7 branch if not |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
408 ldu P$SP,x else get recipient stack pointer |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
409 ldd R$X,u and X |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
410 beq L02C7 if X == 0 (sleep forever), then branch |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
411 ldu P$Queue,x get queue pointer of recipient |
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
412 beq L02C7 branch if empty |
1453 | 413 pshs b,a |
414 lda P$State,u | |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
415 bita #TimSleep |
1453 | 416 puls b,a |
417 beq L02C7 | |
418 ldu P$SP,u | |
419 addd P$SP,u | |
420 std P$SP,u | |
421 bra L02C7 | |
422 L02B4 leay ,x | |
423 ldx P$Queue,y | |
424 bne L028E | |
2380
8bd5214a117f
Fixed incorrect labels, added comments... no code differences.
boisy
parents:
1663
diff
changeset
|
425 ldx #(D.WProcQ-P$Queue) |
1453 | 426 L02BD leay ,x |
427 ldx P$Queue,y | |
428 beq L02D7 | |
429 cmpx $01,s | |
430 bne L02BD | |
431 L02C7 ldd P$Queue,x | |
432 std P$Queue,y | |
433 lda <P$Signal,x | |
434 deca | |
435 bne L02D4 | |
436 sta <P$Signal,x | |
437 L02D4 os9 F$AProc | |
438 L02D7 clrb | |
439 puls pc,y,a | |
440 | |
441 * F$Sleep | |
442 FSleep ldx <D.Proc get pdesc | |
443 orcc #FIRQMask+IRQMask mask ints | |
444 lda P$Signal,x get proc signal | |
445 beq L02EE branch if none | |
446 deca dec signal | |
447 bne L02E9 branch if not S$Wake | |
448 sta P$Signal,x clear signal | |
449 L02E9 os9 F$AProc insert into activeq | |
450 bra L034D | |
451 L02EE ldd R$X,u get timeout | |
452 beq L033A branch if forever | |
453 subd #$0001 subtract 1 | |
454 std R$X,u save back to caller | |
455 beq L02E9 branch if give up tslice | |
456 pshs u,x | |
2381 | 457 ldx #(D.SProcQ-P$Queue) |
1453 | 458 L02FE leay ,x |
459 ldx P$Queue,x | |
460 beq L0316 | |
461 pshs b,a | |
462 lda P$State,x | |
463 bita #TimSleep | |
464 puls b,a | |
465 beq L0316 | |
466 ldu P$SP,x | |
2381 | 467 subd R$X,u |
1453 | 468 bcc L02FE |
2381 | 469 addd R$X,u |
1453 | 470 L0316 puls u,x |
471 std R$X,u | |
472 ldd P$Queue,y | |
473 stx P$Queue,y | |
474 std P$Queue,x | |
475 lda P$State,x | |
476 ora #TimSleep | |
477 sta P$State,x | |
478 ldx P$Queue,x | |
479 beq L034D | |
480 lda P$State,x | |
481 bita #TimSleep | |
482 beq L034D | |
483 ldx P$SP,x | |
484 ldd P$SP,x | |
485 subd R$X,u | |
486 std P$SP,x | |
487 bra L034D | |
488 L033A lda P$State,x | |
489 anda #^TimSleep | |
490 sta P$State,x | |
2381 | 491 ldd #(D.SProcQ-P$Queue) |
1453 | 492 L0343 tfr d,y |
493 ldd P$Queue,y | |
494 bne L0343 | |
495 stx P$Queue,y | |
496 std P$Queue,x | |
497 L034D leay <L0361,pcr | |
498 pshs y | |
499 ldy <D.Proc | |
500 ldd P$SP,y | |
501 ldx R$X,u | |
3058
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
502 IFNE H6309 |
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
503 pshs u,y,x,dp |
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
504 pshsw |
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
505 pshs b,a,cc |
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
506 ELSE |
1453 | 507 pshs u,y,x,dp,b,a,cc |
3058
958f7a277064
level1 krnp2: Set up stack correctly for 6309
Tormod Volden <debian.tormod@gmail.com>
parents:
2829
diff
changeset
|
508 ENDC |
1453 | 509 sts P$SP,y |
510 os9 F$NProc | |
511 L0361 std P$SP,y | |
512 stx R$X,u | |
513 clrb | |
514 rts | |
515 | |
516 * F$Icpt | |
517 FIcpt ldx <D.Proc get pdesc | |
518 ldd R$X,u get addr of icpt rtn | |
519 std <P$SigVec,x store in pdesc | |
520 ldd R$U,u get data ptr | |
521 std <P$SigDat,x store in pdesc | |
522 clrb | |
523 rts | |
524 | |
525 * F$SPrior | |
526 FSPrior lda R$A,u get ID | |
527 ldx <D.PrcDBT find pdesc | |
528 os9 F$Find64 | |
529 bcs FSPrEx branch if can't find | |
530 ldx <D.Proc get pdesc | |
531 ldd P$User,x get user ID | |
532 cmpd P$User,y same as dest pdesc | |
533 bne FSPrEx branch if not, must be owner | |
534 lda R$B,u else get prior | |
535 sta P$Prior,y and store it in dest pdesc | |
536 rts | |
537 FSPrEx comb | |
538 ldb #E$IPrcID | |
539 rts | |
540 | |
541 * F$ID | |
542 FID ldx <D.Proc get proc desc | |
543 lda P$ID,x get id | |
544 sta R$A,u put in A | |
545 ldd P$User,x get user ID | |
546 std R$Y,u store in Y | |
547 clrb | |
548 rts | |
549 | |
550 * F$SSwi | |
551 FSSwi ldx <D.Proc | |
552 leay P$SWI,x | |
553 ldb R$A,u | |
554 decb | |
555 cmpb #$03 | |
556 bcc FSSwiEx | |
557 lslb | |
558 ldx R$X,u | |
559 stx b,y | |
560 rts | |
561 FSSwiEx comb | |
562 ldb #E$ISWI | |
563 rts | |
564 | |
565 ClkName fcs /Clock/ | |
566 | |
567 * F$STime | |
568 FSTime ldx R$X,u | |
569 ldd ,x | |
570 std <D.Year | |
571 ldd 2,x | |
572 std <D.Day | |
573 ldd 4,x | |
574 std <D.Min | |
575 lda #Systm+Objct | |
576 leax <ClkName,pcr | |
577 os9 F$Link | |
578 bcs L03D2 | |
579 jmp ,y | |
580 clrb | |
581 L03D2 rts | |
582 | |
583 * F$Find64 | |
584 FFind64 lda R$A,u | |
585 ldx R$X,u | |
586 bsr L03DF | |
587 bcs L03DE | |
588 sty R$Y,u | |
589 L03DE rts | |
590 | |
591 L03DF pshs b,a | |
592 tsta | |
593 beq L03F3 | |
594 clrb | |
595 lsra | |
596 rorb | |
597 lsra | |
598 rorb | |
599 lda a,x | |
600 tfr d,y | |
601 beq L03F3 | |
602 tst ,y | |
603 bne L03F4 | |
604 L03F3 coma | |
605 L03F4 puls pc,b,a | |
606 | |
607 * F$All64 | |
608 FAll64 ldx R$X,u | |
609 bne L0402 | |
610 bsr L040C | |
611 bcs L040B | |
612 stx ,x | |
613 stx R$X,u | |
614 L0402 bsr L0422 | |
615 bcs L040B | |
616 sta R$A,u | |
617 sty R$Y,u | |
618 L040B rts | |
619 | |
620 L040C pshs u | |
621 ldd #$0100 | |
622 os9 F$SRqMem | |
623 leax ,u | |
624 puls u | |
625 bcs L0421 | |
626 clra | |
627 clrb | |
628 L041C sta d,x | |
629 incb | |
630 bne L041C | |
631 L0421 rts | |
632 | |
633 L0422 pshs u,x | |
634 clra | |
635 L0425 pshs a | |
636 clrb | |
637 lda a,x | |
638 beq L0437 | |
639 tfr d,y | |
640 clra | |
641 L042F tst d,y | |
642 beq L0439 | |
643 addb #$40 | |
644 bcc L042F | |
645 L0437 orcc #Carry | |
646 L0439 leay d,y | |
647 puls a | |
648 bcc L0464 | |
649 inca | |
650 cmpa #$40 | |
651 bcs L0425 | |
652 clra | |
653 L0445 tst a,x | |
654 beq L0453 | |
655 inca | |
656 cmpa #$40 | |
657 bcs L0445 | |
658 ldb #E$PthFul | |
659 coma | |
660 bra L0471 | |
661 L0453 pshs x,a | |
662 bsr L040C | |
663 bcs L0473 | |
664 leay ,x | |
665 tfr x,d | |
666 tfr a,b | |
667 puls x,a | |
668 stb a,x | |
669 clrb | |
670 L0464 lslb | |
671 rola | |
672 lslb | |
673 rola | |
674 ldb #$3F | |
675 L046A clr b,y | |
676 decb | |
677 bne L046A | |
678 sta ,y | |
679 L0471 puls pc,u,x | |
680 L0473 leas 3,s | |
681 puls pc,u,x | |
682 | |
683 * F$Ret64 | |
684 FRet64 lda R$A,u | |
685 ldx R$X,u | |
686 pshs u,y,x,b,a | |
687 clrb | |
688 lsra | |
689 rorb | |
690 lsra | |
691 rorb | |
692 pshs a | |
693 lda a,x | |
694 beq L04A0 | |
695 tfr d,y | |
696 clr ,y | |
697 clrb | |
698 tfr d,u | |
699 clra | |
700 Ret64Lp tst d,u | |
701 bne Ret64Ex | |
702 addb #64 | |
703 bne Ret64Lp | |
704 inca | |
705 os9 F$SRtMem | |
706 lda ,s | |
707 clr a,x | |
708 L04A0 | |
709 Ret64Ex clr ,s+ | |
710 puls pc,u,y,x,b,a | |
711 | |
712 IOMgr fcs /IOMAN/ | |
713 | |
714 IOCall pshs u,y,x,b,a | |
715 ldu <D.Init get ptr to init | |
716 bsr LinkIOM link to IOMan | |
717 bcc JmpIOM jump into him if ok | |
718 bsr JmpBoot try boot | |
719 bcs IOCallRt problem booting... return w/ error | |
720 bsr LinkIOM ok, NOW link to IOMan | |
721 bcs IOCallRt still a problem... | |
722 JmpIOM jsr ,y | |
723 puls u,y,x,b,a | |
724 ldx -2,y | |
725 jmp ,x | |
726 IOCAllRt puls pc,u,y,x,b,a | |
727 | |
728 LinkIOM leax IOMgr,pcr | |
729 lda #Systm+Objct | |
730 os9 F$Link | |
731 rts | |
732 | |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
733 * Attempt to load bootfile and validate the modules it contains |
1453 | 734 * |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
735 * Entry: |
1453 | 736 * U = address of init module |
3088
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
737 * Exit: |
fa4b4ae537c1
Add comments based on my learnings while debugging boot on multicomp09
Neal Crook <foofoobedoo@gmail.com>
parents:
3058
diff
changeset
|
738 * CC Carry set on Error |
1453 | 739 JmpBoot pshs u |
740 comb | |
741 tst <D.Boot already booted? | |
742 bne JmpBtEr yep, return to caller... | |
743 inc <D.Boot else set boot flag | |
744 ldd <BootStr,u get pointer to boot str | |
745 beq JmpBtEr if none, return to caller | |
746 leax d,u X = ptr to boot mod name | |
747 lda #Systm+Objct | |
748 os9 F$Link link | |
749 bcs JmpBtEr return if error | |
750 jsr ,y ...else jsr into boot module | |
751 * D = size of bootfile | |
752 * X = address of bootfile | |
753 bcs JmpBtEr return if error | |
754 stx <D.MLIM | |
755 stx <D.BTLO | |
756 leau d,x | |
757 stu <D.BTHI | |
758 * search through bootfile and validate modules | |
759 ValBoot ldd ,x | |
760 cmpd #M$ID12 | |
761 bne ValBoot1 | |
762 os9 F$VModul | |
763 bcs ValBoot1 | |
764 ldd M$Size,x | |
765 leax d,x move X to next module | |
766 bra ValBoot2 | |
767 ValBoot1 leax 1,x advance one byte | |
768 ValBoot2 cmpx <D.BTHI | |
769 bcs ValBoot | |
770 JmpBtEr puls pc,u | |
771 | |
3178
504992b73b2b
krnp2: Omit debug parameters in non-debug builds
Boisy Pitre <coco@toughmac.com>
parents:
3088
diff
changeset
|
772 IFNE UseFDebug |
2829 | 773 use fdebug.asm |
3178
504992b73b2b
krnp2: Omit debug parameters in non-debug builds
Boisy Pitre <coco@toughmac.com>
parents:
3088
diff
changeset
|
774 ENDC |
2829 | 775 |
776 emod | |
1453 | 777 eom equ * |