home *** CD-ROM | disk | FTP | other *** search
- Directory Manipulation Routines -- DIRECT, DIR, DIRSEL, DIRALP
- Numeric String Evaluation Routines -- EVAL, EVAL16, EVAL10, EVAL8, EVAL2
- Byte-Oriented File Input/Output Routines
- FI$OPEN and FO$OPEN, et al -- Byte-Oriented Input and Output File Open
- FI$CLOSE and FO$CLOSE, et al -- Byte-Oriented Input and Output File Close
- F$GET and F$PUT, et al -- Byte-Oriented Input and Output
- CP/M File Input/Output Routines
- INITFCB -- Initialize FCB
- File Manipulation -- F$OPEN, F$CLOSE, F$MAKE, F$DELETE
- File Input/Output Routines -- F$READ and F$WRITE
- Input Line Editor -- INLINE
- String Output Routines -- PRINT, LPRINT, PSTR, LPSTR
- Numeric Output Routines -- PHL4HC,PHL5DC,PHLDC,PA2HC,PA3DC,PADC, L's, M's
- String and Value Comparison Routines -- COMPHD,COMPB,COMPBC,SCANNER,INSTR
- <CR> <LF> Output -- CRLF and LCRLF
- Conditional Input -- CONDIN
- General Input Routines -- CST, CIN, RIN
- General Output Routines -- COUT, LOUT, POUT, CCOUT, CLOUT, CPOUT
- Misc Routines -- BDOS, CAPS, CIO, EN, FILLB, FILLBC, MOVEB, MOVEBC, CATH
- :Directory Manipulation Routines -- DIRECT, DIR, DIRSEL, DIRALP
- Routine Name: DIRECT
- Function: DIRECT loads a copy of the directory of the currently
- logged-in disk drive into the 32 x 64 byte buffer pointed to by HL, selects
- all file entries which match the contents of the 11-byte file name buffer
- pointed to by DE (buffer may contain ?'s as wild specifications), and
- alphabetizes the entries in the buffer either by file name/type or by file
- type/name. Only entries where the extent is zero (1st file entry) are
- returned.
- Inputs: HL points to the 32 x 64 byte buffer for the directory
- DE points to the 11-byte file name/type buffer containing the
- file name/type to select
- A is alphabetization indicator; A=0 => alphabetize by file
- name and type, A<>0 => alphabetize by file type and name
- Outputs: A = number of entries in directory buffer
- Registers Affected: PSW
- SYSLIB Routines Called: -None- (All calls within module)
- Special Error Conditions: -None-
-
- Routine Name: DIR
- Function: DIR loads a copy of the directory of the currently logged-
- in disk drive into the 32 x 64 byte buffer pointed to by L. On return, A
- contains a count of the number of entries in the directory.
- Inputs: HL points to the 32 x 64 byte buffer for the directory
- Outputs: A = number of entries in directory buffer
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: DIRSEL (DIRSELECT)
- Function: DIRSEL scans the directory buffer pointed to by HL for the
- file name/type pointed to by DE (may contain ?'s for wild card
- specifications). It restructures the directory buffer to contain only the
- matching entries. On return, A=number of entries in buffer. Only entries
- with extents equal to zero are selected; all entries with non-zero extents
- are rejected.
- Inputs: HL points to the 32 x 64 byte buffer for the directory
- DE points to the 11-byte file name/type buffer
- A = number of entries in directory buffer
- Outputs: A = number of entries in directory buffer
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: DIRALP (DIRALPHABETIZE)
- Function: DIRALP alphabetizes the directory buffer pointed to by HL
- according to the compare option passed in C (if C=0, alphabetize by file
- name & type; if C<>0, alphabetize by file type & name).
- Inputs: HL points to the 32 x 64 byte buffer for the directory
- C = alphabetization flag (FN & FT if C=0, FT & FN if C<>0)
- A = number of entries in directory buffer
- Outputs: -None- (buffer is alphabetized)
- Registers Affected: -None-
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
- :Numeric String Evaluation Routines -- EVAL, EVAL16, EVAL10, EVAL8, EVAL2
- Routine Name: EVAL
- Function: This routine converts the character string pointed to by HL
- into the 16-bit binary number represented by it. EVAL performs the
- conversion until a non-hexadecimal character is encountered, at which time
- it looks at the last character and the previous character to determine if
- the string is representing a binary, octal, decimal, or hexadecimal number.
- Input string characters may be upper- or lower-case. Valid formats for the
- input string are --
- bbbbbbbbbbbbbbbbB -- b=0 or b=1; Binary string
- ttttt or tttttD -- 0 <= t <= 9; Decimal string
- hhhhH or hhhhX -- 0 <= h <= F; Hexadecimal string
- oooooooO or oooooooQ -- 0 <= o <= 7; Octal string
-
-
- Inputs: HL points to the first byte of the string to convert
- String is loaded in a buffer
- Outputs: HL points to next character after converted string
- DE contains 16-bit value
- A = E
- CARRY Flag Set means an error was encountered in string
- format
- Registers Affected: PSW, DE, HL
- SYSLIB Routines Called: CAPS, EVAL16, EVAL10, EVAL8, EVAL2
- Special Error Conditions: CARRY Flag Set indicates that an error was
- encountered in the evaluation of the string; if so, HL points to the
- offending character
-
- Routine Name: EVAL16
- Function: EVAL16 converts the string of ASCII hexadecimal characters
- pointed to by HL into a 16-bit binary value. Conversion progresses until
- an invalid hexadecimal digit (0-9, A-F) is encountered.
- Inputs: HL points to the first byte of the string to convert
- String is loaded in a buffer
- Outputs: HL points to the offending character
- DE contains the 16-bit value
- A = E
- Registers Affected: PSW, DE, HL
- SYSLIB Routines Called: CAPS
- Special Error Conditions: -None-
-
- Routine Name: EVAL10
- Function: EVAL10 converts the string of ASCII decimal characters
- pointed to by HL into a 16-bit binary value. Conversion progresses until
- an invalid decimal digit (0-9) is encountered.
- Inputs: HL points to the first byte of the string to convert
- String is loaded in a buffer
- Outputs: HL points to the offending character
- DE contains the 16-bit value
- A = E
- Registers Affected: PSW, DE, HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: EVAL8
- Function: EVAL8 converts the string of ASCII octal characters pointed
- to by HL into a 16-bit binary value. Conversion progresses until an
- invalid octal digit (0-7) is encountered.
- Inputs: HL points to the first byte of the string to convert
- String is loaded in a buffer
- Outputs: HL points to the offending character
- DE contains the 16-bit value
- A = E
- Registers Affected: PSW, DE, HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: EVAL2
- Function: EVAL2 converts the string of ASCII binary characters
- pointed to by HL into a 16-bit binary value. Conversion progresses until
- an invalid binary digit (0-1) is encountered.
- Inputs: HL points to the first byte of the string to convert
- String is loaded in a buffer
- Outputs: HL points to the offending character
- DE contains the 16-bit value
- A = E
- Registers Affected: PSW, DE, HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
- :Byte-Oriented File Input/Output Routines
- The following documentation covers the series of byte-oriented file
- input/output routines in SYSLIB. These routines allow the user to
- sequentially read from (GET) and write to (PUT) a file on a byte-for-byte
- basis. Hence, these routines provide an exceptionally simple method for
- handling input from and output to a file.
- A typical program which employs these routines must open the required
- files before doing any processing, must then perform the processing on the
- opened files, and must then close the files when the processing is
- complete (closing the files is optional for input files and mandatory for
- output files).
- SYSLIB provides four sets of routines for byte-oriented file input and
- output. These routines are --
-
- Input Open Output Open GET PUT Input Close Output Close
- ---------- ----------- --- --- ----------- ------------
- FI$OPEN FO$OPEN F$GET F$PUT FI$CLOSE FO$CLOSE
- F1I$OPEN F1O$OPEN F1$GET F1$PUT F1I$CLOSE F1O$CLOSE
- F2I$OPEN F2O$OPEN F2$GET F2$PUT F2I$CLOSE F2O$CLOSE
- F3I$OPEN F3O$OPEN F3$GET F3$PUT F3I$CLOSE F3O$CLOSE
-
- This system allows the user to have up to 8 files open simultaneously
- -- four are open for input using GET and four are open for output using
- PUT. For example, the following is a sample code section using these
- routines for two files:
-
-
- EXT FI$OPEN ; DECLARE LIBRARY REFERENCES
- EXT FO$OPEN
- EXT FI$CLOSE
- EXT FO$CLOSE
- EXT F$GET
- EXT F$PUT
- ...
- LXI D,FCBI ; PT TO FCB OF INPUT FILE
- CALL FI$OPEN
- LXI D,FCBO ; PT TO FCB OF OUTPUT FILE
- CALL FO$OPEN
- ...
- [body containing CALL F$GET and CALL F$PUT where required]
- ...
- CALL FI$CLOSE ; CLOSE FILE
- CALL FO$CLOSE
- ...
- END
-
- Note that only the routines to be used are referenced in the EXT
- statements. If you do not need a particular routine, do not reference it.
- Not referencing an unneeded routine generally saves the overhead memory
- space of loading it from the library.
- Each set of OPEN, CLOSE, GET, and PUT routines is contained in one
- library module, so referencing any of these routines causes the entire
- module to be loaded, and all the routines are accessable to the user
- (provided they are mentioned in the extenal definitions) without any
- additional memory overhead. Specifically, FI$OPEN, FI$CLOSE, FO$OPEN,
- FO$CLOSE, F$GET, and F$PUT are contained in one module, and reference to
- any of these routines loads the entire module; the same is true for the
- other sets of routines.
- The CLOSE routine for output (FO$CLOSE) is ALWAYS required; it fills
- the rest of the current block with Ctrl-Z followed by <NULL> bytes and
- properly closes file. The CLOSE routine for input (FI$CLOSE) is required
- ONLY IF you are going to later open another file for input using the
- corresponding OPEN routine (FI$OPEN). FI$CLOSE only serves to reset the
- OPEN flag (used to GET to ascertain that the file has been properly
- opened).
- :FI$OPEN and FO$OPEN, et al -- Byte-Oriented Input and Output File Open
- Routine Names: FI$OPEN, F1I$OPEN, F2I$OPEN, F3I$OPEN
- Function: Open the file whose FCB is pointed to by DE for input (use
- with F$GET).
- Inputs: DE = ptr to FCB of file to open
- Outputs: -None- (File is Opened)
- Registers Affected: PSW
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: Failure to properly open aborts to CP/M.
-
- Routine Names: FO$OPEN, F1O$OPEN, F2O$OPEN, F3O$OPEN
- Function: Open the file whose FCB is pointed to by DE for output (use
- with F$PUT).
- Inputs: DE = ptr to FCB of file to open
- Outputs: -None- (File is Opened)
- Registers Affected: PSW
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: Failure to properly open aborts to CP/M.
- :FI$CLOSE and FO$CLOSE, et al -- Byte-Oriented Input and Output File Close
- Routine Names: FI$CLOSE, F1I$CLOSE, F2I$CLOSE, F3I$CLOSE
- Function: Close the file previously opened by the corresponding
- FI$OPEN routine. Use of these routines is optional if the another file
- will not be opened later in the program by the corresponding FI$OPEN
- routine.
- Inputs: -None-
- Outputs: -None- (File is Closed)
- Registers Affected: -None-
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: If a file is not already opened by the
- corresponding FI$OPEN routine, no error results.
-
- Routine Names: FO$CLOSE, F1O$CLOSE, F2O$CLOSE, F3O$CLOSE
- Function: Close the file previously opened by the corresponding
- FO$OPEN routine. Use of these routines is MANDATORY after output to the
- file (using the corresponding F$PUT routine) is complete.
- Inputs: -None-
- Outputs: -None- (File is Closed)
- Registers Affected: -None-
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: If a file is not already opened, this
- routine aborts to CP/M.
- :F$GET and F$PUT, et al -- Byte-Oriented Input and Output
- Routine Names: F$GET, F1$GET, F2$GET, F3$GET
- Function: Get the next byte in sequence from the file previously
- opened by the corresponding FI$OPEN routine. Byte is returned in Register
- A.
- Inputs: -None-
- Outputs: A = Next byte from file
- Carry Flag is Set (C) if EOF or past EOF read occurs
- Carry Flag is Reset (NC) if read was OK
- Registers Affected: PSW
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: Error condition is returned in Carry Flag.
- If a file was not previously opened by the corresponding FI$OPEN routine,
- aborts to CP/M.
-
- Routine Names: F$PUT, F1$PUT, F2$PUT, F3$PUT
- Function: Put the byte in Register A onto the end of the file
- previously opened by the corresponding FO$OPEN routine.
- Inputs: A = Byte to PUT
- Outputs: -None-
- Registers Affected: -None-
- SYSLIB Routines Called: F$OPEN, PRINT
- Special Error Conditions: If a file was not previously opened by the
- corresponding FO$OPEN routine, aborts to CP/M. If an error occurs in
- writing to the disk, aborts to CP/M.
- :CP/M File Input/Output Routines
- The following routines are general-purpose file I/O routines which
- interface to CP/M through the Entry Point at location 5. They preserve BC,
- DE, and HL, and they return with the standard CP/M error codes for the
- corresponding routines.
- Specifically, these routines are --
-
- INITFCB Initialize FCB from a string of the form "filename.typ"
- F$OPEN Open a file
- F$CLOSE Close a file
- F$MAKE Create a file
- F$DELETE Delete a file
- F$READ Read a block (128 bytes) from a file
- F$WRITE Write a block (128 bytes) to a file
- :INITFCB -- Initialize FCB
- Routine Name: INITFCB
- Function: Given the name of a file (filename.typ) pointed to by HL
- and a 33-byte buffer pointed to by DE, INITFCB initializes this buffer as
- an FCB containing the file name and file type correctly placed in the
- buffer and all other entries zero. The input string consists of 1-8
- characters for the file name, a decimal point (optional), 1-3 characters
- for the file type (optional), and a trailing character of space (<SP>) or
- less. Wild cards (?,*) may be included in the string. A sample usage is:
-
- ...
- LXI H,NAME
- LXI D,FCB ; HL PTS TO FILE NAME, DE PTS TO BUFFER
- CALL INITFCB
- ...
- NAME: DB 'FILE.TYP',0
- FCB: DS 33
- ...
-
-
- Inputs: HL = pointer to file name string "filename.typ<SP>"
- DE = pointer to FCB buffer
- Outputs: A = Error Code
- 0 --> No Error
- 1 --> File name > 8 characters
- 2 --> File type > 3 characters
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
- :File Manipulation -- F$OPEN, F$CLOSE, F$MAKE, F$DELETE
- Routine Name: F$OPEN
- Function: Open the file specified by the FCB pointed to by DE. If
- file is not found, F$OPEN asks the user (on CON:) if he wishes to create it
- and does so if the answer is 'Y' or 'y' (F$OPEN simply returns with an
- appropriate error code if answer is negative).
- Inputs: DE = pointer to FCB
- Outputs: A = Error Code
- 0 --> No Error
- 0FFH --> File not opened or created
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS, CAPS, CIN, COUT, CRLF, PRINT
- Special Error Conditions: -None-
-
- Routine Name: F$CLOSE
- Function: Close the file whose FCB is pointed to by DE.
- Inputs: DE = pointer to FCB
- Outputs: A = Error Code
- 0 --> No Error
- 0FFH --> Error in closing file
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS
- Special Error Conditions: -None-
-
- Routine Name: F$MAKE
- Function: Create (Make) the file whose FCB is pointed to by DE.
- Inputs: DE = pointer to FCB
- Outputs: A = Error Code
- 0FFH --> No directory space available
- Not 0FFH --> No Error; Value is byte address in
- TBUFF (80H-0FFH) of directory entry
- allocated to the FCB
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS, F$DELETE
- Special Error Conditions: -None-
-
- Routine Name: F$DELETE
- Function: Delete the file whose FCB is pointed to by DE. If file
- does not exist, nothing happens (no error message or code is given).
- Inputs: DE = pointer to FCB
- Outputs: -None-
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS
- Special Error Conditions: -None-
- :File Input/Output Routines -- F$READ and F$WRITE
- Routine Name: F$READ
- Function: Read next block (128 bytes) from the opened file whose FCB
- is pointed to by DE into TBUFF (buffer at 80H - 0FFH).
- Inputs: DE = pointer to FCB
- Outputs: A = Error Code
- 0 --> No Error
- 1 --> Read past end of file
- 2 --> Reading unwritten data in random access
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS
- Special Error Conditions: -None-
-
- Routine Name: F$WRITE
- Function: Write next block (128 bytes) from TBUFF (buffer at 80H -
- 0FFH) to the opened file whose FCB is pointed to by DE.
- Inputs: DE = pointer to FCB
- Outputs: A = Error Code
- 0 --> No Error
- 1 --> Error in extending file
- 2 --> End of disk data
- 0FFH --> No more directory space
- Registers Affected: PSW
- SYSLIB Routines Called: BDOS
- Special Error Conditions: -None-
- :Input Line Editor -- INLINE
- Routine Name: INLINE
- Function: INLINE allows the user to input a line of text from CON:
- into the buffer pointed to by HL. The user is allowed to edit the text as
- he types it, and INLINE responds to the following editor commands:
-
- Key Command Function
- ----------- --------
- <BS> Delete previous character and back up cursor
- <DEL> Delete previous character and echo it (like CP/M)
- <CR> Input complete -- return to calling program
- <LF> Skip down to next physical line and insert a <CR> <LF>
- into buffer
- <TAB> Tabulate to next tab stop (every 8, as in CP/M)
- Ctrl-U, Erase current line (clear buffer) and restart input
- Ctrl-X
- Ctrl-R Retype current line
-
- On exit, the buffer contains the text entered followed by a <NULL> (binary
- 0); the <CR> typed to end the input is NOT placed in the buffer.
-
- Inputs: HL = pointer to input line buffer
- Outputs: -None- (Input line buffer contains text typed by user)
- Registers Affected: -None-
- SYSLIB Routines Called: CCOUT, CIN, COUT, CRLF
- Special Error Conditions: <BEL> (Beep at CON:) is output if attempt
- is made to delete character (<BS> or <DEL>) before beginning of line. No
- limit or error checking is done on the size of the input line buffer
- (buffer overflow is possible, so it is recommended that buffer is made
- arbitrarily large). Hash mark (#) is printed in response to Ctrl-R, Ctrl-
- U, and Ctrl-X.
- :String Output Routines -- PRINT, LPRINT, PSTR, LPSTR
- Routine Names: PRINT, LPRINT
- Function: Print string pointed to by the return address on CON:
- (PRINT) or LST: (LPRINT). String is terminated by a binary 0. Control is
- returned to byte following string.
- Inputs: Return Address = pointer to string to be printed
- Outputs: HL points to byte after string
- (string is printed on CON: or LST:)
- Registers Affected: HL
- SYSLIB Routines Called: PSTR (for PRINT); LSTR (for LPRINT)
- Special Error Conditions: The string MUST be terminated by a binary
- 0!!!
-
- Routine Names: PSTR, LPSTR
- Function: Print string pointed to by HL on CON: (PSTR) or LST:
- (LPSTR). String is terminated by a binary 0.
- Inputs: HL = pointer to string to be printed
- Outputs: -None- (string is printed on CON: or LST:)
- Registers Affected: -None-
- SYSLIB Routines Called: CCOUT, COUT (for PSTR); LCOUT, LOUT (for
- LPSTR)
- Special Error Conditions: The string MUST be terminated by a binary
- 0!!!
- :Numeric Output Routines -- PHL4HC,PHL5DC,PHLDC,PA2HC,PA3DC,PADC, L's, M's
- Routine Names: PHL4HC, LHL4HC
- Function: Print HL as four (4) hexadecimal characters on CON:
- (PHL4HC) or LST: (LHL4HC).
- Inputs: HL = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: PA2HC (for PHL4HC); LA2HC (for LHL4HC)
- Special Error Conditions: -None-
-
- Routine Name: MHL4HC
- Function: Store HL as four (4) hexadecimal characters in the 4-byte
- memory buffer pointed to by DE. On return, DE points to the byte following
- this buffer.
- Inputs: HL = value to be converted and stored
- DE points to 4-byte buffer
- Outputs: DE points to byte after buffer
- Registers Affected: DE
- SYSLIB Routines Called: MA2HC
- Special Error Conditions: -None-
-
- Routine Names: PHL5DC, LHL5DC
- Function: Print HL as five (5) decimal characters on CON: (PHL5DC) or
- LST: (LHL5DC).
- Inputs: HL = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: POUT (for PHL5DC); LOUT (for LHL5DC)
- Special Error Conditions: -None-
-
- Routine Name: MHL5DC
- Function: Store HL at five (5) decimal characters in memory in the 5-
- byte buffer pointed to by DE. On return, DE points to the byte after this
- buffer.
- Inputs: HL = value to be converted and stored
- DE points to a 5-byte buffer
- Outputs: DE points to the byte following the buffer
- Registers Affected: DE
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: PHLDC, LHLDC
- Function: Print HL as up to five (5) decimal characters with leading
- spaces (<SP>) on CON: (PHLDC) or LST: (LHLDC).
- Inputs: HL = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: POUT (for PHLDC); LOUT (for LHLDC)
- Special Error Conditions: -None-
-
- Routine Name: MHLDC
- Function: Store HL as up to five (5) decimal characters with leading
- spaces in the 5-byte memory buffer pointed to by DE.
- Inputs: HL = value to be converted and printed
- DE points to the 5-byte buffer
- Outputs: DE points to the byte after the buffer
- Registers Affected: DE
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: PA2HC, LA2HC
- Function: Print A as two (2) hexadecimal characters on CON: (PA2HC)
- or LST: (LA2HC).
- Inputs: A = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: EN (for both); POUT (for PA2HC); LOUT (for
- LA2HC)
- Special Error Conditions: -None-
-
- Routine Name: MA2HC
- Function: Store A as two (2) hexadecimal characters in the 2-byte
- memory buffer pointed to by HL. On return, HL points to byte after buffer.
- Inputs: A = value to be converted and stored
- HL points to 2-byte buffer
- Outputs: HL points to byte after this buffer
- Registers Affected: HL
- SYSLIB Routines Called: EN
- Special Error Conditions: -None-
-
- Routine Names: PA3DC, LA3DC
- Function: Print A as three (3) decimal characters on CON: (PA3DC) or
- LST: (LA3DC).
- Inputs: A = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: POUT (for PA3DC); LOUT (for LA3DC)
- Special Error Conditions: -None-
-
- Routine Name: MA3DC
- Function: Store A as three (3) decimal characters in the 3-byte
- memory buffer pointed to by HL. On return, HL points to the byte after the
- buffer.
- Inputs: A = value to be converted and stored
- HL points to the 3-byte buffer
- Outputs: HL points to the byte after the buffer
- Registers Affected: HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: PADC, LADC
- Function: Print A as up to three (3) decimal characters with leading
- spaces (<SP>) on CON: (PADC) or LST: (LADC).
- Inputs: A = value to be printed
- Outputs: -None- (Value is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: POUT (for PADC); LOUT (for LADC)
- Special Error Conditions: -None-
-
- Routine Name: MADC
- Function: Store A as up to three (3) decimal characters with leading
- spaces in the 3-byte memory buffer pointed to by HL. On return, HL points
- to the byte after the buffer.
- Inputs: A = value to be converted and stored
- HL points to the 3-byte memory buffer
- Outputs: HL points to the byte after the buffer
- Registers Affected: HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
- :String and Value Comparision Routines -- COMPHD,COMPB,COMPBC,SCANNER,INSTR
- Routine Name: COMPHD
- Function: Compare HL to DE. On return, Zero Flag Set => HL=DE, Carry
- Flag Set => HL<DE.
- Inputs: HL, DE -- Values to compare
- Outputs: Zero and Carry Flags
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: COMPB, COMPBC
- Function: Vector Compare Routines. Compare the vector pointed to by
- HL with that pointed to by DE (Vectors are of equal length). Vectors are B
- bytes long for COMPB and BC bytes long for COMPBC. On exit, Zero Flag Set
- indicates that vectors are identical; Carry Flag Set indicates that the
- vector pointed to by HL is less than the vector pointed to by DE.
- Inputs: HL, DE -- Pointers to vectors to compare
- B (for COMPB), BC (for COMPBC) -- number of bytes in vectors
- Outputs: Zero and Carry Flags
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: SCANNER
- Function: SCANNER scans the vector of bytes pointed to by HL for the
- vector of bytes pointed to by DE. The HL-byte vector is B bytes long and
- the DE-byte vector is C bytes long. On return, if found, HL points to the
- beginning location within the original HL vector of the located vector and
- the Zero Flag is Set; if not found, Zero Flag is not set and HL is not
- affected (points to the beginning of the original HL-byte vector).
- Inputs: HL = Pointer to vector to be scanned
- DE = Pointer to vector to scan for
- B = Number of bytes in HL-vector
- C = Number of bytes in DE-vector
- Outputs: If found, Zero Set and HL pts to located vector
- If not found, Zero Reset and HL unaffected
- Registers Affected: PSW, HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: Automatic success if vector searched for is
- null.
-
- Routine Name: INSTR
- Function: INSTRING Function. Scan the string pointed to by HL for
- the string pointed to by DE. A string is a vector of bytes terminated by a
- binary 0.
- On return, if found, Zero Flag is Set and HL points to 1st byte
- of substring within scanned string; if not found, Zero Flag is not set and
- HL is not affected.
- Inputs: HL = Pointer to string to be scanned
- DE = Pointer to string to scan for
- Outputs: If found, Zero Set and HL pts to located substring
- If not found, Zero Reset and HL unaffected
- Registers Affected: PSW, HL
- SYSLIB Routines Called: -None-
- Special Error Conditions: Automatic success if string searched for is
- null.
- :<CR> <LF> Output -- CRLF and LCRLF
- Routine Names: CRLF, LCRLF
- Function: Print <CR> and <LF> on CON: (CRLF) or LST: (LCRLF).
- Inputs: -None-
- Outputs: -None- (<CR> <LF> is printed)
- Registers Affected: -None-
- SYSLIB Routines Called: POUT (for CRLF); LOUT (for LCRLF)
- Special Error Conditions: -None-
- :Conditional Input -- CONDIN
- Routine Name: CONDIN
- Function: Input a character from CON: if one is available; otherwise,
- return a flag stating that a character is not available on CON:.
- Inputs: -None-
- Outputs: A = character typed at CON: (if available)
- Zero Flag is set (Z) if no character is available
- Zero Flag is reset (NZ) if character is available
- Registers Affected: PSW
- SYSLIB Routines Called: CST, CIN
- Special Error Conditions: -None-
- :General Input Routines -- CST, CIN, RIN
- Routine Name: CST
- Function: Input the status on CON: in Register A. If Read Data
- Available, A=0; otherwise, A=1.
- Inputs: -None-
- Outputs: A = Console Status
- 0 --> Read Data Available (RDA)
- 1 --> Read Data Not Available (Not RDA)
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: CIN, RIN
- Function: Input character from CON: (CIN) or RDR: (RIN) in Register A.
- Inputs: -None-
- Outputs: A = Character input from CON: or RDR:
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
- :General Output Routines -- COUT, LOUT, POUT, CCOUT, CLOUT, CPOUT
- Routine Names: COUT, LOUT, POUT
- Function: Output character in Register A to CON: (COUT), LST: (LOUT),
- or PUN: (POUT).
- Inputs: A = Character to output
- Outputs: -None- (Character is output)
- Registers Affected: -None-
- SYSLIB Routine Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: CCOUT, CLOUT, CPOUT
- Function: Output character in Register A to CON: (COUT), LST: (LOUT),
- or PUN: (POUT) with control character processing. All characters with
- ASCII codes less than <SP> (space = 20H) in value except <NULL>, <BEL>,
- <BS>, <LF>, and <CR> are output as an uparrow (^) followed by the
- corresponding letter generated by adding 40H to the character value (i.e.,
- 1 outputs as "^A", 2 as "^B", etc.). Again, the characters less than <SP>
- in value NOT output in this manner are --
-
- <NULL> <BEL> <BS> <LF> <CR>
-
- Any character of value greater than <SP> is output normally.
- Inputs: A = Character to output
- Outputs: -None- (Character/Code is output)
- Registers Affected: PSW (only the Flags; Register A is NOT affected)
- SYSLIB Routines Called: COUT (for CCOUT); LOUT (for CLOUT); POUT (for
- CPOUT)
- Special Error Conditions: -None-
- :Miscellaneous Routines -- BDOS, CAPS, CIO, EN, FILLB, FILLBC, MOVEB,
- MOVEBC, CATH
- Routine Name: BDOS
- Function: Call CP/M Entry Point at location 5 and preserve Registers
- HL and DE.
- Inputs: -As Required by User-
- Outputs: PSW, BC
- Registers Affected: PSW, BC
- SYSLIB Routines Called: -None-
- Special Error Conditions: -Determined by Routines Called-
-
- Routine Name: CAPS
- Function: Capitalize ASCII character in Register A if it is lower-
- case alphabetic (a-z); otherwise, return A unaffected.
- Inputs: A = character to capitalize
- Outputs: A = capitalized character
- Registers Affected: PSW
- SYSLIB Routins Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: CIO
- Function: CP/M I/O through BIOS Jump Table. This routine indexes
- into the CP/M BIOS Jump Table and allows the user to address any routine in
- the BIOS (accessable routines only). It is called with Register A
- containing the index offset (see table below) and Registers BC containing
- any required input arguments. The following table summarizes the BIOS Jump
- Table entries --
-
- Offset Function Offset Function
- 0 Warm Start 7 Home Disk Head
- 1 Console Status; A=0FFH if 8 Select Disk; C=Disk Number (A=0,
- char ready, A=0 if not B=1, C=2, D=3) passed
- 2 Console Input; A=result 9 Set Track Number; C=Track Number
- 3 Console Output; C=char passed passed
- 4 List Output; C=char passed 10 Set Sector Number; C=Sector
- 5 Punch Output; C=char passed Number passed
- 6 Reader Input; A=result 11 Set DMA Address; BC=adr passed
- 12 Read Disk; A=0 if ok, 1 if err
- 13 Write Disk; A=0 if ok, 1 if err
- Any other offset results in a Cold Start being performed.
-
- Inputs: A = Offset
- BC = Data Passed to Routine
- Outputs: A = Output or Error Indicator
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: EN
- Function: Exchange Nybbles in Register A; High-order four bits are
- exchanged with Low-order four bits of Register A.
- Inputs: A = Byte input
- Outputs: A = Byte output
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: FILLB, FILLBC
- Function: These routines fill an area of memory with a constant byte
- value. FILLB can fill up to a 256-byte buffer, and FILLBC can fill up to a
- 65,536-byte (within reason) buffer.
- Inputs: HL points to the first byte of the buffer to be filled
- B (for FILLB) or BC (for FILLBC) = number of bytes in buffer
- A = byte value to fill buffer with
- Outputs: -None- (Buffer is filled)
- Registers Affected: -None-
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Names: MOVEB, MOVEBC
- Function: Move the block of memory pointed to by HL to the memory
- location pointed to by DE. MOVEB can move up to a 256-byte buffer, and
- MOVEBC can move up to a 65,536-byte buffer.
- Inputs: HL points to the first byte of the buffer to move
- DE points to the first byte of the buffer to move to
- B (for MOVEB) or BC (for MOVEBC) = number of bytes in buffer
- Outputs: -None- (Buffer is moved)
- Registers Affected: -None-
- SYSLIB Routines Called: -None-
- Special Error Conditions: -None-
-
- Routine Name: CATH
- Function: Convert the ASCII Hexadecimal character in the A Register
- to binary in the A Register. If invalid character (not 0-9, A-F), return
- <SP> (20 Hex) in A Register as error code.
- Input: A = ASCII Hex Character (0-9, A-F)
- Output: A = Binary value represented by char
- Registers Affected: PSW
- SYSLIB Routines Called: -None-
- Special Error Conditions: If invalid hex char, <SP> (20 Hex) returned
- in A Register.