F-PCBUGS.TXT    Known Bugs in F-PC version 3.5          by Tom Zimmer

  This file contains a list of the bugs that are known to exist in F-PC. In
some cases they are not really bugs, but peculiarities that may seem like
bugs (did I say feature?).  The bugs are not numbered in order because they
came from a larger list of bugs that have been fixed, and the fixed bugs
have been removed from the list.

7.      Status line peculiarity  01/03/89 15:25:22.20
        It has been reported that if you try to move a filename into
        SEQHANDLE, it gets erased after you move it in. What is
        happening here is that the routine that displays the status
        line looks at the current contents of SEQHANDLE and the >HNDLE
        value is -1 indicating a file has been closed, it reads the
        system directory path into SEQHANDLE and changes the >HNDLE
        value to -2 prior to displaying the status line.

        The status line is trying to display either the currently open
        filename and path, or just the path on the current drive. If in
        the proccess of moving a filename into SEQHANDLE, you also call
        HCLOSE to close any file already in SEQHANDLE, then the status
        routine thinks it needs to re-read the drive path from DOS
        into SEQHANDLE.

        Normally you would not encounter this since normally you would
        then proceed to open or create the file placed in SEQHANDLE
        prior to returning to the keyboard (which is where STATUS was
        performed); it is normally only a problem while debugging.  To
        prevent this interference by STATUS, you can type STATOFF just
        prior to debugging your program.  STATON can then be used to
        re-enable the status line.

10.     Assembler buglets. If you are typing in CODE definitions from
        the keyboard, and you get an assembly error on an instruction,
        additional instructions typed in will have the same error
        reported even if they are entered correctly. The error
        condition will only be reset by a new CODE word being started.

        If you try to use an IN or OUT instruction in the assembler
        with an immediate port number greater than $FF hex, the
        assembler will discard the high byte of the port number and
        compile the instruction as if nothing was wrong.

              IN AL, # $115    will assemble as    IN AL, # $015
              OUT # $110 AL    will assemble as    OUT # $010 AL

        The 80x6 family does not support immediate port number IN or
        OUT instructions greater than $FF, but the assembler SHOULD
        report the error and does not.

12.     Jack Brown rightly points out that the F-PC documentation
        doesn't specify the machine register usage clearly. Here is an
        excerpt from the ECFB where George Hawkins explained how F-PC
        uses the 80x86 registers.

        F-PC MACHINE RESOURCE USAGE:

            CS   =  code seg: used for any code definitions (Must be
                    preserved by code word.);
            DS   =  data seg: used for data other than ." strings
                     (NOTE: CS=DS and underlying kernel primitives
                    rely on this correspondence!, also must be
                    preserved by code word.);
            ES   =  extra seg: used as the segment location for the
                    current instruction pointer (IP).  (Must be
                    preserved by code word.);
            SS   =  stack seg: used as the segment location for the
                    current stack pointer (SP).  (Must be preserved
                    by code word.);
            BP   =  Return Pointer (RP).  (Must be preserved by
                    code word.);
            SP   =  Stack Pointer (SP).  (Must be preserved by code
                     word.);
            SI   =  Instruction Pointer (IP).  (Must be preserved by
                    code word.);
            DF   =  Direction Flag.  Assumed to be 0/increment. Some
                    older FF (or before?) words do an initial CLD
                    (e.g., CMOVE), but this shouldn't be necessary.
                    If you specifically need DF=1, then do: STD
                    ...code... CLD;

            AX, BX, CX, DX, & DI  :  Have a ball!!

