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 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 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 () 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" 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 ----------- -------- Delete previous character and back up cursor Delete previous character and echo it (like CP/M) Input complete -- return to calling program Skip down to next physical line and insert a into buffer 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 (binary 0); the 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: (Beep at CON:) is output if attempt is made to delete character ( or ) 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 () 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 () 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 Output -- CRLF and LCRLF Routine Names: CRLF, LCRLF Function: Print and on CON: (CRLF) or LST: (LCRLF). Inputs: -None- Outputs: -None- ( 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 (space = 20H) in value except , , , , and 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 in value NOT output in this manner are -- Any character of value greater than 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 (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, (20 Hex) returned in A Register.  .