Mercurial > hg > Members > kono > nitros9-code
view lib/alib/alib.docs @ 2765:0bd16cca86b7
Updated rules.mak for all the os9 format's to format the entire disk. People were having some issues with the disk images not being formatted to their full capacity and preventing some functions from working.
author | drencor-xeen |
---|---|
date | Thu, 17 Jan 2013 11:03:26 -0600 |
parents | 7d70b7e1cb21 |
children |
line wrap: on
line source
.s="",ss=0,p="",n="",sn=80, * normal (pica) characters, 80 per 8 inch line .lm=5, rm=75, tm=5, bm=60 .lh=5,rh=75,p="" .he0="Assembler Library Documentation", he1="Page ##" .he2="String Handlers" .hf0=r,hf1=l,hf2=r .hl0=2,hl1=2,hl2=3 .lf=c .tf=_ ===================== == String Handlers == ===================== .lf=l .nl=7 \t66\ STIMESTR: Get current system time as an ascii string. OTHER MODULES NEEDED: DATESTR ENTRY: X=buffer for ascii EXIT: all registers preserved (except cc) .nl=7 \t66\ DATESTR: Convert a date to a string. This can be used for converting the system time as well as modify/create dates from files. The date must be 6 bytes -- null pad file dates. OTHER MODULES NEEDED: BIN_ASC ENTRY: X=binary date Y=buffer for ascii EXIT: all registers preserved (except cc) .nl=7 \t66\ TO_NON_SP: Advance X to 1st non-space character OTHER MODULES NEEDED: none ENTRY: X=somewhere in a string EXIT: X=1st non-space character in string B=char at X .nl=7 \t66\ PRINT_DEC: Print decimal number to standard out. ENTRY: D=value to print EXIT: CC carry set if error (from I$WritLn) B error code, if any .nl=7 \t66\ PRINT_HEX: Print hex number to standard out. ENTRY: D=value to print EXIT: CC carry set if error (from I$WritLn) B error code, if any .nl=7 \t66\ PRINT_ASC: Print binary number to standard out. ENTRY: D=value to print EXIT: CC carry set if error (from I$WritLn) B error code, if any .nl=7 \t66\ STRCMP: compare two null terminated strings. NOTE: This routine first finds the length of both strings and passes the length of the longer one to strncmp. OTHER MODULES NEEDED: STRNCMP, STRLEN ENTRY: X=start of 1st string Y=start of 2nd string EXIT: CC zero set if equal (beq) carry + zero clear if 1>2 (bhi) carry set if 1<2 (blo) .nl=7 \t66\ STRNCMP: compare 2 null terminated strings maximum number of bytes to compare in D OTHER MODULES NEEDED: COMPARE ENTRY: X=start of 1st string Y=start of 2nd string D=number of bytes to compare CASEMTCH:(a global variable in COMPARE) 0=match for case -1=ignore case differences EXIT: CC zero set if equal (beq) carry + zero clear if 1>2 (bhi) carry set if 1<2 (blo) .nl=7 \t66\ STRLEN: String Length: find length of null terminated string. note:null NOT included in count. ENTRY: X=start of string EXIT: D=length all other regs (except cc) preserved .nl=7 \t66\ STRHLEN: find length of sign-bit terminated string. note: sign-bit set byte IS included in count. OTHER MODULES NEEDED: none ENTRY: X=start of string EXIT: D=length all other regs (except cc) preserved .nl=7 \t66\ B09STRLEN: Find the length of a BASIC09 string. OTHER MODULES NEEDED: none ENTRY: X=start of string D=max possible length (size passed to subroutine) EXIT: D=actual length (either at $FF or max size) all other regs (except cc) preserved .nl=7 \t66\ STRCAT: append 2 null terminated strings User must ensure there is room in buffer!!! OTHER MODULES NEEDED: STRCPY, STRLEN ENTRY: X=start of string to move Y=start of string to append to EXIT: all regs preserved (except cc) .nl=7 \t66\ STRNCPY: copy N bytes of a null terminated string User must ensure there is room in buffer!!! If N>string length only N bytes will be moved OTHER MODULES NEEDED: STRLEN, MEMMOVE ENTRY: X=start of string to move Y=buffer for copy of string EXIT: D = actual number of bytes moved all other regs preserved (except cc) .nl=7 \t66\ STRCPY: copy a null terminated string User must ensure there is room in buffer!!! OTHER MODULES NEEDED: STRNCPY ENTRY: X=start of string to move Y=buffer for copy of string EXIT: all regs preserved (except cc) .nl=7 \t66\ STRNCPY: copy N bytes of a null terminated string User must ensure there is room in buffer!!! If N>string length only N bytes will be moved OTHER MODULES NEEDED: STRLEN, MEMMOVE ENTRY: X=start of string to move Y=buffer for copy of string EXIT: D = actual number of bytes moved all other regs preserved (except cc) .nl=7 \t66\ STRHCPY: copy sign-bit terminated string User must ensure there is room in buffer!!! See also PARSNSTR, this routine does not change sign-bit termination. OTHER MODULES NEEDED: strhlen,memmove ENTRY: X=start of string to move Y=buffer for copy of string .nl=7 \t66\ TO_UPPRS: convert a null terminated string to all uppercase OTHER MODULES NEEDED: TO_UPPER ENTRY: X=start of string EXIT: all registers (except CC) preserved .nl=7 \t66\ TO_UPPER: Convert character in "B" to uppercase OTHER MODULES NEEDED: IS_LOWER ENTRY: B=ascii value of character to convert EXIT: B=ascii value of character in uppercase Note: control codes, etc. are not effected. .nl=7 \t66\ TO_LOWRS: convert a null terminated string to all lowercase OTHER MODULES NEEDED: TO_LOWER ENTRY: X=start of string EXIT: all registers (except CC) preserved .nl=7 \t66\ TO_LOWER: Convert character in "B" to lowercase OTHER MODULES NEEDED: IS_UPPER ENTRY: B=ascii value of character to convert EXIT: B=ascii value of character in lowercase Note: control codes, etc. are not effected. .nl=7 \t66\ PARSNSTR: Parse sign bit terminated string to convert it to a null terminated string. Note: if X and Y are the same the existing string will be overwritten -- don't do this with psects... OTHER MODULES NEEDED: none ENTRY: X=start of sign bit terminated string Y=buffer for null terminated string EXIT: D=string size (not including null) All other regs (except cc) preserved .lf=c, he2="I/O Routines",pg ================== == I/O Routines == ================== .lf=l .nl=7 \t66\ PRINTS: Print a program embedded, null terminated string to std out. OTHER MODULES NEEDED: puts ENTRY: Null terminated string must follow PRINTS call eg: LBSR PRINTS fcc /this is a string to print/ fcb $0d fcc /a second string/ fcb $0d,0 lbsr morestuff... EXIT: CC carry set if error B error code (if any) .nl=7 \t66\ PUTS: Print a null terminated string to standard out. OTHER MODULES NEEDED: fputs ENTRY: X=string to print EXIT: CC carry set if error B error code (if any) .nl=7 \t66\ FPUTS: print null terminated string to "A". OTHER MODULES REQUIRED: none ENTRY: X=start of string A=path EXIT: CC carry set if error B = OS9 error if any (from I$WritLn) NOTE: string is feed through I$WritLn for editing (adding LF, etc.) .nl=7 \t66\ PUTCR: Subroutine to print a carriage return to std. out. OTHER MODULES REQUIRED: FPUTCR ENTRY: none EXIT: CC carry set if error (from I$WritLn) B error code if any. .nl=7 \t66\ FPUTCR: Subroutine to print a carriage return OTHER MODULES REQUIRED: FPUTC ENTRY: A=path EXIT: CC carry set if error (from I$WritLn) B error code if any. .nl=7 \t66\ PUTSPACE: Subroutine to print a space to std. out OTHER MODULES REQUIRED: FPUTSPACE ENTRY: none EXIT: CC carry set if error (from I$WritLn) B error code if any. .nl=7 \t66\ FPUTSPACE: Subroutine to print a space OTHER MODULES REQUIRED: FPUTC ENTRY: A=path EXIT: CC carry set if error (from I$WritLn) B error code if any. .nl=7 \t66\ PUTC: Put single character to standard out. OTHER MODULES NEEDED: FPUTC ENTRY: B=character to print EXIT: CC carry set if error B=error code if any .nl=7 \t66\ FPUTC: Subroutine to print one character. OTHER MODULES NEEDED: none ENTRY: A=path B=char to print EXIT: CC carry set if error (from I$WritLn) B error code if any .nl=7 \t66\ GETC: Subroutine to input one character from std in. OTHER MODULES NEEDED: FGETC ENTRY: none EXIT: A character CC carry set if error (from I$Read) B error code if any .nl=7 \t66\ FGETC: Subroutine to input one character. OTHER MODULES NEEDED: none ENTRY: A=path EXIT: A character CC carry set if error (from I$Read) B error code if any .nl=7 \t66\ GETS: Subroutine to input a null terminated string from Std. In OTHER MODULES NEEDED: FGETS ENTRY: X=buffer for string Y=max buffer size (leave room for null!!) EXIT: CC carry set if error (from I$ReadLn) B error code if any NOTE: The string entered must end with an end-of-record char (usually a $0D), the null is appended for ease in string handling. .nl=7 \t66\ FGETS: Subroutine to input a null terminated string. OTHER MODULES NEEDED: none ENTRY: A=path X=buffer for string Y=max buffer size (leave room for null!!) EXIT: CC carry set if error (from I$ReadLn) B error code if any NOTE: The string entered must end with an end-of-record char (usually a $0D), the null is appended for ease in string handling. .nl=7 \t66\ INKEY: Checks STDIN for a keypress and returns it if avail. ENTRY: none EXIT: A=character, 0=no character B=error code (if any) CC=carry set if error (from I$Read) NOTE: NULLs entered from the keyboard are returned as "no keypress". .he2="Integer Math",pg,lf=c ================== == Integer Math == ================== .lf=l .nl=7 \t66\ MULT168: 16 x 8 Multiply (24 bit result) OTHER MODULES NEEDED: none ENTRY: A = multiplier X = multiplicand EXIT: A = product byte 1 X = product bytes 2 & 3 B modified .nl=7 \t66\ MULT16: 16 x 16 Multiply ENTRY: D = multiplier X = multiplicand EXIT: Y = product 2 msbs U = " 2 lsbs D & X preserved .nl=7 \t66\ DIV168: 16 x 8 bit integer divide Result must be an 8 bit value ENTRY: A = divisor X = dividend EXIT: A = remainder B = quotient all other registers (except CC) preserved .nl=7 \t66\ DIV16: 16 x 16 bit integer divide OTHER MODULES NEEDED: none ENTRY: D = divisor X = dividend EXIT: X = quotient D = remainder .nl=7 \t66\ DIV88: 8 x 8 Divide OTHER MODULES NEEDED: none ENTRY: A = divisor B = dividend EXIT: A = remainder B = quotient .he2="Number Conversions",pg,lf=c ======================== == Number Conversions == ======================== .lf=l .nl=7 \t66\ DEC_BIN: DECIMAL to BINARY conversion routine OTHER MODULES NEEDED: DECTAB$, IS_TERMIN ENTRY: X = start of asci decimal string terminated by a space, comma, CR or null. EXIT: D = binary value CC carry set if error (too large, not numeric) Y = terminator or error char. .nl=7 \t66\ BIN_DEC: Binary to decimal conversion OTHER MODULES NEEDED: DECTAB$ ENTRY: X=buffer for ascii string D=binary value to convert EXIT: all registers (except cc) preserved .nl=7 \t66\ ASC_BIN: ASCII String to binary byte conversion OTHER MODULES NEEDED: IS_TERMIN ENTRY: X = start of string of binary digits (001101) terminated by space, comma, CR or null. EXIT: D = value CC carry set if error (string too long, not binary digits) Y = terminator or error pos. .nl=7 \t66\ BIN_ASC: Binary word to ASCII string conversion OTHER MODULES NEEDED: none ENTRY: D = binary value X = buffer for 16 bit number EXIT: all registers (except cc) preserved .nl=7 \t66\ HEX_BIN: Hexadecimal string to BINARY conversion OTHER MODULES REQUIRED: TO_UPPER, IS_TERMIN, IS_XDIGIT ENTRY: X=start of a hex string terminated by a space, comma, CR, or NULL. EXIT: D=binary number CC carry set iferror (too large, non-numeric) Y=terminator position or error char. .nl=7 \t66\ BIN_HEX: Binary to hexadecimal convertor This subroutine will convert the binary value in 'D' to a 4 digit hexadecimal ascii string. OTHER MODULES NEEDED: BIN2HEX ENTRY: D=value to convert X=buffer for hex string-null terminated EXIT all registers (except CC) preserved. .nl=7 \t66\ HEX2BIN: Convert hex byte to 2 hex digits OTHER MODULES REQUIRED: none ENTRY: B= value to convert EXIT: D=2 byte hex digits .nl=7 \t66\ DECTAB: table of decimal numbers for use by binary/decimal conversion routines. .he2="What's IT??",pg,lf=c ================= == What's IT?? == ================= .lf=l .nl=7 \t66\ IS_PUNCT: See if character in "B" is a punctuation character OTHER MODULES NEEDED: IS_ALNUM, IS_CNTRL ENTRY: B=character to test EXIT: CC zero=1 if punct., 0 if not .nl=7 \t66\ IS_PRINT: See if character in "B" is a printable character controls are defined as $00..$1F and $7F+ -- all others are printable OTHER MODULES NEEDED: IS_CNTRL ENTRY: B=character to test EXIT: CC zero=1 if printable, 0 if not .nl=7 \t66\ IS_CNTRL: See if character in "B" is a control character controls are defined as $00..$1F and $7F+ OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if control, 0 if not .nl=7 \t66\ IS_SPACE: See if character in "B" is a space ($20) NOTE: This module is included for completeness only, it is much more efficient to do an inline test. OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if space, 0 if not .nl=7 \t66\ IS_XDIGIT: See if character in "B" is a hexdigit 0..9, A..F or a..f OTHER MODULES NEEDED: IS_DIGIT ENTRY: B=character to test EXIT: CC zero=1 if hex digit, 0 if not .nl=7 \t66\ IS_ALNUM: See if character in "B" is a alpha letter a..z or A..Z or digit 0..9 OTHER MODULES NEEDED: IS_ALPHA, IS_DIGIT ENTRY: B=character to test EXIT: CC zero=1 if alphanumeric, 0 if not .nl=7 \t66\ IS_ALPHA: See if character in "B" is a alpha letter a..z or A..Z OTHER MODULES NEEDED: IS_LOWER, IS_UPPER ENTRY: B=character to test EXIT: CC zero=1 if alpha, 0 if not .nl=7 \t66\ IS_DIGIT: See if character in "B" is a digit 0..9 OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if digit, 0 if not .nl=7 \t66\ IS_LOWER: See if character in "B" is a lowercase letter OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if lowercase, 0 if not .nl=7 \t66\ IS_UPPER: See if character in "B" is a uppercase letter OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if uppercase, 0 if not .nl=7 \t66\ IS_TERMIN: See if character in "B" is a valid string terminator. NOTE: This module is used by HEX_BIN, DEC_BIN, etc. It permits SPACE, CR, COMMA and NULL to be used as a delimiter -- useful for paramater and list processing.... OTHER MODULES NEEDED: none ENTRY: B=character to test EXIT: CC zero=1 if space, 0 if not .he2="OS9 File Specific",lf=c ======================= == OS9 File Specific == ======================= .lf=l .nl=7 \t66\ GETFMD: Get the "last modified" date of an open file NOTE: Even though OS9 does not save seconds in its files this routine stores a zero in this position. This is done to make the routine compatible with DATESTR. OTHER MODULES NEEDED: none ENTRY: X=buffer for 6 byte date A=path of open file EXIT: CC carry set if error B error code (if any) from SS.FD .nl=7 \t66\ MKTEMP: This subroutine creates a temorary filename by adding a "." and a 2digit hex value based on the process id. IMPORTANT: there must be room after the filename for at least 6 bytes!! Filename must be variable area, not parameter or program sections!!! OTHER MODULES NEEDED: BIN_HEX ENTRY: X= filename EXIT: no registers (expect cc) modified filename ends in ".processid",$0d .he2="Miscellaneous Routines",pg,lf=c ============================ == Miscellaneous Routines == ============================ .lf=l .nl=7 \t66\ LINEDIT: Edit/input line. This routine does not use cursor positioning, instead it uses backspacing, etc. This means it can be used without a GOTOXY module, however it is a bit slow, especially when lines get longer than one line. If the buffer contains data, you will be able to edit; to enter new data pass a buffer of blanks. OTHER MODULES NEEDED: STRLEN,IS_PRINT, FPUTS, FPUTC, FGETC, MEMMOVE ENTRY: X=null terminated string to edit A=input path (normally 0) B=output path (normally 1) EXIT: CC carry set if error (GetStt, Setstt, Write, Read, etc.) B=error code, if any .nl=7 \t66\ SHO_REGS: Display the 6809 registers to standard error. OTHER MODULES NEEDED: BIN2HEX, BIN_HEX, PUTS ENTRY: none EXIT: none NOTE: The value used for PC is that of the calling routine S is assumed to be 2 greater than actual to comp for the subroutine call... .nl=7 \t66\ MEMMOVE: Memory move NOTE: This routine properly moves overlapping areas of memory. Uses fast move algorithm ENTRY: X=source data Y=destination D=count EXIT: all registers (except CC) preserved .nl=7 \t66\ PTSEARCH: Pattern Search OTHER MODULES REQUIRED: COMPARE ENTRY: X=start of memory to search U=end of memory Y=start of pattern D=size of pattern CASEMTCH (a global variable in COMPARE) =0 if A<>a, -1 if A=a EXIT: X=address of match if found, unchanged if no match CC zero set if match, clear for no-match A,B,U,Y preserved .nl=7 \t66\ MEMSET: Set bytes in memory to specified value OTHER MODULES NEEDED: none ENTRY: X=start of memory Y=number of bytes to set B=character to set EXIT: all registers (except cc) preserved .nl=7 \t66\ COMPARE: Subroutine for string comparsion routines. Compares chars in A/B, will convert both to uppercase first if CASEMTCH is set (negative) OTHER MODULES NEEDED: TO_UPPER ENTRY: A/B=characters to compare CASEMTCH=0 (or positive value) if A<>a -1 (or neg value) if A=a EXIT: CC zero set if characters match. All other registers preserved.