view level2/modules/kernel/fmapblk.asm @ 1245:deb30e2667c7

Removed W register usage for 6809 port
author boisy
date Tue, 12 Aug 2003 02:01:23 +0000
parents ca83286ded5b
children 1da8ab9ba433
line wrap: on
line source

* F$MapBlk entry point
FMapBlk  lda   R$B,u        get # blocks
         beq   L0BAA        can't map 0 blocks, return error
         cmpa  #DAT.BlCt    within range of DAT image?
         bhi   L0BAA        no, return error
         leas  -$10,s       make a buffer to hold DAT image
         ldx   R$X,u        get start block #
         ldb   #1           block increment value
         IFNE  H6309
* Change to W 05/19/93 - used W since one cycle faster per block
         tfr   s,w          point to buffer
FMapBlk2 stx   ,w++         save block # to buffer
         ELSE
         tfr   s,y          point to buffer
FMapBlk2 stx   ,y++         save block # to buffer
         ENDC
         abx                Next block
         deca               done?
         bne   FMapBlk2     no, keep going
         ldb   R$B,u        get block count again
         ldx   <D.Proc      get process pointer
         leay  <P$DATImg,x  point to DAT image
         os9   F$FreeHB     find the highest free block offset
         bcs   L0BA6        no room, return error
         IFNE  H6309
         tfr   d,w          Preserve start block # & # of blocks
         ELSE
         pshs  d
         ENDC
         lsla               Multiply start block # by 32
         lsla  
         lsla  
         lsla  
         lsla  
         clrb  
         std   R$U,u        save address of first block
         IFNE  H6309
         tfr   w,d          Restore offset
         ELSE
         puls  d
         ENDC
         leau  ,s           move DAT image into process descriptor
         os9   F$SetImg     Change process dsc to reflect new blocks
L0BA6    leas  <$10,s       Eat DAT image copy & return
         rts   

L0BAA    comb               Illegal Block address error
         ldb   #E$IBA
         rts