view level2/modules/kernel/fexit.asm @ 2758:e4a0f58a5f9b

Found that people who do not have the envirornment variable NITROS9DIR set before building the project get a error missing file "/rules.mak". Found this is caused do to the fact that the code to set this envirornment variable is in the rules.mak which can't get loaded. To fix this the code needed to set the envirornment variable that is in the rules.mak is now in the makefile(s) right before the include for the rules.mak file. This should fix the problem for those who do not have the NITROS9DIR envirornment variable preset.
author drencor-xeen
date Mon, 14 Jan 2013 14:37:46 -0600
parents ca83286ded5b
children 039ddb7c8ad7
line wrap: on
line source

**************************************************
* System Call: F$Exit
*
* Function: Causes a process to cease execution and exit
*
* Input:  B = Status code to be returned to parent process
*
* Output: None
*
* Error:  CC = C bit set; B = error code
*
FExit    ldx   <D.Proc		get current process pointer
         bsr   L05A5		close all the paths
         ldb   R$B,u		get exit signal
         stb   <P$Signal,x	and save in proc desc
         leay  P$PID,x
         bra   L0563		go find kids...

L0551    clr   P$SID,y          clear child ID
         lbsr  L0B2E		find its proc desc
         clr   1,y		clear sibling ID
         IFNE  H6309
         tim   #Dead,P$State,y
         ELSE
         lda   P$State,y	get child's state
         bita  #Dead		is it dead?
         ENDC
         beq   L0563		...no
         lda   P$ID,y		else get its ID
         lbsr  L0386		and destroy its proc desc
L0563    lda   P$SID,y		get child ID
         bne   L0551		...yes, loop

         leay  ,x		kid's proc desc
         ldx   #D.WProcQ-P$Queue
         lds   <D.SysStk	use system stack
         pshs  cc		save CC
         orcc  #IntMasks	halt interrupts
         lda   P$PID,y		get our parent ID
         bne   L0584		and wake him up

         puls  cc		restore CC
         lda   P$ID,y		get our ID
         lbsr  L0386		give up our proc desc
         bra   L05A2		and start next active process

* Search for Waiting Parent
L0580    cmpa  P$ID,x		is proc desc our parent's?
         beq   L0592		...yes!

L0584    leau  ,x		U is base desc
         ldx   P$Queue,x	X is next waiter
         bne   L0580		see if parent
         puls  cc		restore CC
         lda   #(SysState!Dead)	set us to system state
         sta   P$State,y	and mark us as dead
         bra   L05A2		so F$Wait will find us; next proc

* Found Parent (X)
L0592    ldd   P$Queue,x	take parent out of wait queue
         std   P$Queue,u
         puls  cc		restore CC
         ldu   P$SP,x		get parent's stack register
         ldu   R$U,u
         lbsr  L036C		get child's death signal to parent
         os9   F$AProc  	move parent to active queue
L05A2    os9   F$NProc  	start next proc in active queue

* Close Proc I/O Paths & Unlink Mem
* Entry: U=Register stack pointer
L05A5    pshs  u            preserve register stack pointer
         ldb   #NumPaths    get maximum # of paths
         leay  P$Path,x     point to path table
L05AC    lda   ,y+          path open?
         beq   L05B9        no, skip ahead
         clr   -1,y         clear the path block #
         pshs  b            preserve count
         os9   I$Close      close the path
         puls  b            restore count
L05B9    decb               done?
         bne   L05AC        no, continue looking

* Clean up memory process had
         clra               get starting block
         ldb   P$PagCnt,x   get page count
         beq   L05CB        none there, skip ahead
         addb  #$1F         round it up
         lsrb               divide by 32 to get block count
         lsrb
         lsrb
         lsrb
         lsrb
         os9   F$DelImg     delete the ram & DAT image
* Unlink the module
L05CB    ldd   <D.Proc
         pshs  d
         stx   <D.Proc		set bad proc
         ldu   P$PModul,x	program pointer
         os9   F$UnLink 	unlink aborted program
         puls  u,b,a
         std   <D.Proc		reset parent proc
         os9   F$DelTsk 	release X's task #
         rts