[mod.os.os9] OS9/6809 File Manager Entry Points

os9@nyit.UUCP (OS9 News) (02/20/86)

     This is in reply to James  Jones  on  his  questions  about  the  File
Manager entry points in OS9/6809.

     As a preface to the main discussion, I am posting the listing  of  two
sections  of  the  OS9defs  file.   These  are the definitions for the File
Manager Entry Offsets and the I/O Service Requests.

     These definitions will figure prominently in the following discussion.


00001        ************************************************************
00002        *
00003        *     File Manager Entry Offsets
00004        *
00005 D 0000                     ORG   0 
00006 D 0000            FMCREA   rmb   3          Create (Open New) File
00007 D 0003            FMOPEN   rmb   3          Open File
00008 D 0006            FMMDIR   rmb   3          Make Directory
00009 D 0009            FMCDIR   rmb   3          Change Directory
00010 D 000C            FMDLET   rmb   3          Delete File
00011 D 000F            FMSEEK   rmb   3          Position File
00012 D 0012            FMREAD   rmb   3          Read from File
00013 D 0015            FMWRIT   rmb   3          Write to File
00014        
00015        * Two of the Entry Points are Missing
00016        * In the OS9defs File.
00017        
00018 D 0018            FMRDLN   rmb   3          Read from File to EOR
00019 D 001B            FMWRLN   rmb   3          Write to File to EOR
00020        
00021 D 001E            FMGSTA   rmb   3          Get File Status
00022 D 0021            FMSSTA   rmb   3          Set File Status
00023 D 0024            FMCLOS   rmb   3          Close File
00024        
00025        ************************************************************
00026        *
00027        *     I/O Service Request Code Definitions
00028        *
00029 D 0080                     ORG   $80 
00030 D 0080            I$Attach rmb   1          Attach I/O Device
00031 D 0081            I$Detach rmb   1          Detach I/O Device
00032 D 0082            I$Dup    rmb   1          Duplicate Path
00033        
00034        * The Following I$ Calls Correspond Exactly
00035        * To the File Manager Entry Points.
00036        
00037 D 0083            I$Create rmb   1          Create New File
00038 D 0084            I$Open   rmb   1          Open Existing File
00039 D 0085            I$MakDir rmb   1          Make Directory File
00040 D 0086            I$ChgDir rmb   1          Change Default Directory
00041 D 0087            I$Delete rmb   1          Delete File
00042 D 0088            I$Seek   rmb   1          Change Current Position
00043 D 0089            I$Read   rmb   1          Read Data
00044 D 008A            I$Write  rmb   1          Write Data
00045 D 008B            I$ReadLn rmb   1          Read Line of ASCII Data
00046 D 008C            I$WritLn rmb   1          Write Line of ASCII Data
00047 D 008D            I$GetStt rmb   1          Get Path Status
00048 D 008E            I$SetStt rmb   1          Set Path Status
00049 D 008F            I$Close  rmb   1          Close Path
00050        
00051        * The Others Are Handled Via IOMan.
00052        
00053 D 0090            I$DeletX rmb   1          Delete from exec dir

***************************************************************************

     Any service requests to OS9 with a value of $80 or greater are  passed
to IOMan.  All of the I/O requests from I$Create ($83) to I$Close ($8F) are
subsequently passed on to the  File  Manager  for  the  actual  processing.
IOMan  determines the proper entry point in the file manager by subtracting
$83 from the Request Code, multiplying the result by 3, and adding this  to
the  execution entry point of the File Manager module (defined by M$EXEC in
the module header).  So you can see that the I/O  requests  and  the  entry
points correspond exactly.

     This means that you  can  use  the  OS9  System  Call  Definitions  to
determine  the  operating  parameters  and  the  register  setup  for  each
individual I/O System Call.

     However,  on  actual entry into the File Manager the registers are NOT
set up as described.  The Y Register is pointing to the Path Descriptor and
the U Register points to the stacked User Registers.  There are two ways of
accessing these registers.  Both require using the R$ register  definitions
in  the  OS9defs file.  If the U Register has not been modified they can be
accessed directly as R$A,U (for the A Register).  If U  has  been  changed,
then  PD.RGS  must  be  used.   This  Path Descriptor location contains the
address of the User Stack.  LDX PD.RGS,Y followed by LDA R$A,X  would  once
again  restore  the A Register as before.  Also note that all parameters to
be passed back to the process must use the stacked registers  in  the  same
fashion.

     The balance of the message concerns Mr. Jones' questions  about  pipes
and get/setstat.

     Unfortunately, neither Pipeman nor Piper have ANY getstat  or  setstat
calls.  In fact, it turns out that Piper is nothing but a nul driver.

     I cannot say how easy it  would  be  to  modify  either  to  make  the
SS.Ready  call available, since I just completed the disassemblies and have
not really had a chance to do any dedicated hacking on them.

Kent D. Meyers    ihnp4!chinet!draco
Box 266
Le Roy, MN 55951
(507)-324-5836

Disclaimer: The views expressed here are  not  necessarily  those  of  this
station,  or  the  sponsor.   (Or for that matter, of anyone in their right
mind!)


-- 
---
516-686-7644 (Bruce Perens or Alex Arthur)
{allegra,seismo,decvax,vax135,ihnp4,mcvax}!philabs!nyit!os9
nyit!os9%suny-sb.CSnet@CSnet-Relay.ARPA

OS-9 and BASIC09 are trademarks of Microware Systems Corporation and Motorola.
mod.os.os9 is a personal (not an NYIT) project.