view level2/modules/kernel/fgcmdir.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 1da8ab9ba433
children 039ddb7c8ad7
line wrap: on
line source

**************************************************
* System Call: F$GCMDir
*
* Notes:
* This system call is only used by OS9p1 to get rid of all
* the empty spaces in the module directory to keep it small
* and compact.
*
* Input:  X = Address of allocation bitmap
*         D = Number of first bit to set
*         Y = Bit count (number of bits to set)
*
* Output: None
*
* Error:  CC = C bit set; B = error code
*
FGCMDir  ldx   <D.ModDir    get pointer to module directory start
         bra   L0C1D        skip ahead
L0C17    ldu   MD$MPDAT,x   DAT initialized?
         beq   L0C23        no it's empty skip ahead
         leax  MD$ESize,x   move to next entry
L0C1D    cmpx  <D.ModEnd    end of module directory?
         bne   L0C17        no, keep looking
         bra   L0C4B
* Move all entrys up 1 slot in directory
L0C23    tfr   x,y          move empty entry pointer to Y
         bra   L0C2B
L0C27    ldu   MD$MPDAT,y
         bne   L0C34
L0C2B    leay  MD$ESize,y
         cmpy  <D.ModEnd    done complete directory?
         bne   L0C27        no, keep going
         bra   L0C49
* Move entry up 1 slot in directory
L0C34    equ   *
         IFNE  H6309
         ldw   #MD$ESize
         tfm   y+,x+
         ELSE
         ldu   ,y++
         stu   ,x++
         ldu   ,y++
         stu   ,x++
         ldu   ,y++
         stu   ,x++
         ldu   ,y++
         stu   ,x++
         ENDC
L0C44    cmpy  <D.ModEnd    done complete directory?
         bne   L0C27        no, keep going

L0C49    stx   <D.ModEnd    save new module directory end pointer
* Shrink DAT table
L0C4B    ldx   <D.ModDir+2  get module directory DAT end pointer
         bra   L0C53

L0C4F    ldu   ,x
         beq   L0C5B
L0C53    leax  -2,x         Bump module ptr down by 2
         cmpx  <D.ModDAT    Hit beginning yet?
         bne   L0C4F        No, keep checking
         clrb               Yes, return without error
         rts

L0C5B    ldu   -2,x
         bne   L0C53
         tfr   x,y
         bra   L0C67

L0C63    ldu   ,y
         bne   L0C70
L0C67    leay  -2,y
L0C69    cmpy  <D.ModDAT
         bcc   L0C63
         bra   L0C81
L0C70    leay  2,y
         ldu   ,y
         stu   ,x
L0C76    ldu   ,--y
         stu   ,--x
         beq   L0C87
         cmpy  <D.ModDAT
         bne   L0C76

L0C81    stx   <D.ModDAT
         bsr   L0C95
         clrb               Yes, return without error
         rts

L0C87    leay  2,y
         leax  2,x
         bsr   L0C95
         leay  -4,y
         leax  -2,x
         bra   L0C69

* Update Module Dir Image Ptrs
L0C95    pshs  u
         ldu   <D.ModDir
         bra   L0CA4
L0C9B    cmpy  MD$MPDAT,u	same DAT ptrs?
         bne   L0CA2		no, skip
         stx   MD$MPDAT,u	else update ptrs
L0CA2    leau  MD$ESize,u	next entry
L0CA4    cmpu  <D.ModEnd	last entry?
         bne   L0C9B		no
         puls  u,pc		else yes... return