1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-27 19:49:41 +00:00

Removed shiftl, shiftr, and swap functions from stdlib

This commit is contained in:
Curtis F Kaylor 2020-10-05 12:14:37 -04:00
parent abe031958f
commit 88bd0605bb
6 changed files with 82 additions and 177 deletions

View File

@ -1,5 +1,8 @@
Function Library Name Description
abs stdlib Absolute Value Return absolute value of byte.
adddst stddef Add Destination Add value to Destination Pointer.
addsrc stddef Add Source Add value to Source Pointer.
addzpw stddef Add Zero Page Word Add value to word in zero page
anykey stdiox Any Key Display "Any Key" prompt and wait for keypress.
atoc stdlib ASCII to Character Convert numeric string to byte.
blkbgn block Block Begin Set beginning of block address.
@ -15,30 +18,33 @@ blkstr block Block String Search block for segment beginning with
blkswp block Block Swap Swap bytes of array with the current segment.
blksrt block Block Sort Sort segments in block by initial string.
button paddle Button Read paddle button controller status.
chdir direct Change Directory Change to specified directory
chdrv direct Change Drive Change to specified drive
ctoa stdlib Character to ASCII Convert byte to numeric string.
div stdlib Divide Divide two bytes.
drvnam direct Drive Name Return name of specified drive
failed test Failed Write " Fail" to screen.
failln test Failed Line Write " Fail" plus newline to screen.
fclall file File Close All Close all files.
fclose file File Close Close file.
feof file File End of File Check for end of file condition.
ferror file File Error Get file error information.
fgetc file File Get Character Read character from file.
fgets file File Get String Read string from file.
fopen file File Open Open file.
fclose fileio File Close Close file.
feof fileio File End of File Check for end of file condition.
ferror fileio File Error Get file error information.
fflush fileio File Flush Flush output buffer to file.
fgetc fileio File Get Character Read character from file.
fgets fileio File Get String Read string from file.
fopen fileio File Open Open file.
florps test Fail or Pass Write " Fail" or " Pass" to screen.
flpsln test Fail or Pass Line Write " Fail" or " Pass" plus newline to screen.
fputc file File Put Character Write character to file.
fputs file File Put String Write string to file.
fread file File Read Read bytes from file.
fschk file File System Check Check for valid file pointer
fsdst file File Set Destination Set destination array for fread.
fsinit file File System Init Initialize file system.
fsptr file File System Pointer Get unused file pointer.
fssrc file File Set Source Set source array for fwrite.
fstat file File System Status Get file pointer status.
fwrite file File Write Write bytes to file.
fputc fileio File Put Character Write character to file.
fputln fileio File Put Line Write line to file.
fputs fileio File Put String Write string to file.
fread fileio File Read Read bytes from file.
fsaddr fileio File Set Address Set address for fread, fwrite, fsave, or fload.
fsinit fileio File System Init Initialize file system.
fsname fileio File Set Name Set filename for fopen, fsave, or fload.
fwrite fileio File Write Write bytes to file.
getc stdio Get Character Read character from keyboard.
getcwd direct Get CWD Return current working directory
getdrv direct Get Drive Return current drive identifier
getdst stddef Get Destination Get address in Destination Pointer.
getprc stdiox Get Prompt Character Display prompt and wait for keypress.
gets stdio Get String Read string from keyboard.
@ -71,11 +77,14 @@ mflush memio Memory Flush Flush memory file.
mgetc memio Memory Get Character Read single character from memory file.
mgets memio Memory Get String Read string from memory file.
min stdlib Minimum Return lesser of two byte.
mkdir direct Make Directory Create specified directory
mopen memio Memory Open Open memory file.
mputc memio Memory Put Character Write single character to memory file.
mputln memio Memory Put String Write string followed by newline to memory file.
mputs memio Memory Put String Write string to memory file.
mult stdlib Multiply Multiply two bytes.
opndir dirent Open Directory Open directory for reading
pack bitlib Pack nybbles Pack two nybbles into a single byte.
paddle paddle Paddle Read paddle controller position.
passed test Passed Write " Pass" to screen.
passln test Passed Line Print " Pass" plus newline to screen.
@ -106,10 +115,16 @@ putsub stdio Put Substring Write substring to screen.
putwrd stdiox Put Word Write address to screen as hexadecimal number.
rand stdlib Random Generate pseudorandom number.
rands stdlib Random Seed Seed random number generator.
ressrc stddef Restore Destination Restore Destination Pointer from TEMP variables.
rddir dirent Read Directory Read Directory Entry
rdhdr dirent Read Header Read Directory Header
rmdir direct Remove Directory Remove specified directory
resdst stddef Restore Destination Restore Destination Pointer from TEMP variables.
resreg stddef Restore Registers Restore A, X, and Y registers from TEMP variables.
resrxy stddef Restore Reg. X and Y Restore X, and Y registers from TEMP variables.
ressrc stddef Restore Source Restore Source Pointer from TEMP variables.
rotl bitlib Rotate Left Rotate byte left specified number of bits.
rotr bitlib Rotate Right Rotate byte right specified number of bits.
savdst stddef Save Destination Save Destination Pointer in TEMP variables.
savreg stddef Save Registers Save A, X, and Y registers in TEMP variables.
savrxy stddef Save Reg. X and Y Save X, and Y registers in TEMP variables.
savsrc stddef Save Source Save Source Pointer in TEMP variables.
@ -117,8 +132,8 @@ setdss stddef Set Dest. Source Set Destination Pointer to Source Pointe
setdst stddef Set Destination Set Destination Pointer to address.
setsrc stddef Set Source Set Source Pointer to address.
setsrd stddef Set Source Dest. Set Source Pointer to Destination Pointer.
shiftl stdlib Shift Left Shift byte left specified number of bits.
shiftr stdlib Shift Right Shift byte right specified number of bits.
shiftl bitlib Shift Left Shift byte left specified number of bits.
shiftr bitlib Shift Right Shift byte right specified number of bits.
stkbgn stack Stack Begin Set start of stack address.
stkdup stack Stack Duplicate Duplicate top entry of stack.
stkend stack Stack End Set end of stack address.
@ -144,7 +159,8 @@ strpbk stringx String Pointer Break Find first character in destination foun
strrch string String Reverse Char Search for character from end of string.
strspn stringx String Span Return length of span in destination found in string.
strstr string String String Search for string in destination string.
swap stdlib Swap nybbles Swaps the upper and lower nybbles in a byte.
swap bitlib Swap nybbles Swaps left and right nybbles in byte.
tolowr ctype To Lowercase Convert character to lowercase.
touppr ctype To Uppercase Convert character to uppercase.
trufls test True or False Convert value to #TRUE or #FALSE.
unpack bitlib Unpack nybbles Unpack byte into two nybbles.

View File

@ -24,42 +24,57 @@ module. The available modules are as follows:
stddef Standard Definitions
Contains commonly used constants, as well as base
functions common to nearly every other module.
Commonly used constants, as well as base functions
common to nearly every other module.
stdlib Standard Library
Includes the most commonly used functions, including
The most commonly used functions, including eight bit
mathematical operations and string/numeric conversions.
bitlib Bit Library
Bit shift, rotate, and nybble manipulation functions
for 8-bit values.
intlib Integer Library
Mathematical, bit shifting and string/numeric
conversion functions for 16-bit values.
ctype Characted Type
Functions to detect character types and convert
between lower and upper case.
stdio Standard Input/Output
Contains functions for reading and writing characters
Functions for reading and writing characters
and strings from the keyboard and to the screen.
stdiox Standard Input/Output Extended
Contains functions for writing formatted data to the
Functions for writing formatted data to the
screen, including decimal and hexadecimal numbers.
string String functions
Contains functions for copying, searching, comparing,
Functions for copying, searching, comparing,
and concatenating strings.
stringx String Extended
Contains the more powerful, but less frequently used
The more powerful, but less frequently used
string manipulation functions.
memory Memory functions
Contains functions for copying, searching, and comparing
Functions for copying, searching, and comparing
arrays.
block Block functions
Contains functions for reading, writing, and searching
Functions for reading, writing, and searching
for fixed length segments of data to an arbitrarily large
section of memory.
@ -70,11 +85,22 @@ module. The available modules are as follows:
memio Memory Input/Ouput
Provides functions to simulate reading and writing to
Functions to simulate reading and writing to
a section of memory as though it were a file.
fileio File Input/Ouput
Provides functions to access, read from, and write to
Functions to access, read from, and write to
files on cassette and/or disk.
dirent Directory Entry
Functions to read directories from disk, disk
like devices, and possibly tapes.
direct Directory Access
Functions to switch between, create and remove
directories, and to switch between devices.

View File

@ -13,7 +13,7 @@ The following functions are defined:
0 - 127 are considered positive, while the unsigned
values 128 - 255 are considered negative.
c = atoc(&s); Returns the numeric value of the string in array s.
c = atoc(s); Returns the numeric value of the string in array s.
Does not skip leading white-space characters and
stops when first non-digit character is encountered.
@ -21,7 +21,7 @@ The following functions are defined:
Overflows are ignored, so numbers greater than 255
will be returned modulo 256.
ctoa(c, &s); Stores the ASCII representation of usigned byte c
ctoa(c, &s); Stores the ASCII representation of unsigned byte c
as a null-terminated string in array s.
The array must be dimensioned to at least 4 bytes.
@ -59,28 +59,6 @@ The following functions are defined:
or getchr() function must called at least once before
a rands(0) call.
c = shiftl(b, n); Returns byte b shifted n bits to the left, filling
with 0's from the right.
If n is greater than 8, all bits will be shifted out,
and a value of 0 is treated as 256.
c = shiftr(b, n); Returns byte b shifted n bits to the right, filling
with 0's from the left.
If n is greater than 8, all bits will be shifted out,
and a value of 0 is treated as 256.
Note: Using the shiftl() or shiftr() functions with
an asignment generates 9 to 12 bytes of code, whereas
the << and >> post-operators generate either 2 or 3
bytes each. So for a constant number of shifts, the
post-operators will generate smaller code for less
than 5 shifts and will always be faster.
c = swap(b); Returns the byte b with the high and low nybbles
swapped.
Note: This library expects the following function to be defined
setsrc(&s); Set source string pointer and initialize index

View File

@ -108,67 +108,6 @@ RANDS: ORA #$00 ;If Passed Value not 0
ADC #$01 ;Else Add 1 or 2
BNE .RANDX ; then Store and Return
;swap(byte) - Swap Low and High Nybbles in Byte
;Args: A = Byte to Swap
;Affects Y,N,Z,C
;Returns: A = Swapped Byte
SWAP: LDY #4 ;Set Count to 4 and Rotate Left
;rotatl(byte,count) - Rotate byte by count Bits to the Left
;Args = Byte to Rotate
;Y = Number of Bits to Rotate
;Affects X,Y,N,Z,C
;Returns: A = Rotated Byte
ROTATL: INY ;Pre-Increment Counter
.ROTALL DEY ;Decrement Counter
BEQ .ROTATX ;If Not Zero
ASL ; Shift Left One Bit
ADC #0 ; Copy Carry into Bit 0
BNE .ROTALL ; If Not Zero, Loop
.ROTATX RTS
;rotatr(byte,count) - Shift byte by count Bits to the Right
;Args = Byte to Rotate
;Y = Number of Bits to Rotate
;Affects Y,N,Z,C
;Returns: A = Rotated Byte
ROTATR: INY ;Pre-Increment Counter
.ROTALR DEY ;Decrement Counter
BEQ .ROTATX ;If Not Zero
LSR ; Shift Right One Bit
BCC .ROTATS ; If Carry Set
ORA #$80 ; Copy Carry into Bit 7
.ROTATS BNE .ROTALR ; If Not Zero, Loop
RTS
SHFTL4: LDY #4; ;Set Count to 4 and Shift Left
;shiftl(byte,count) - Shift byte by Count bits to the Left
;Args = Byte to Shift
;Y = Number of Bits to Rotate
;Affects Y,N,Z,C
;Returns: A = Shifted Byte
SHIFTL: INY ;Pre-Increment Counter
.SHIFLL DEY ;Decrement Counter
BEQ .SHIFTX ;If Not Zero
ASL ; Shift Byte to Left
BNE .SHIFLL ; and Loop if Not 0
.SHIFTX RTS
SHFTR4: LDY #4; ;Set Count to 4 and Shift Right
;shiftr(byte,count) - Shift byte by Count bits to the Right
;Args = Byte to Shift
;Y = Number of Bits to Rotate
;Affects Y,N,Z,C
;Returns: A = Shifted Byte
SHIFTR: INY ;Pre-Increment Counter
.SHIFLR DEY ;Decrement Counter
BEQ .SHIFTX ;If Not Zero
LSR ; Shift Byte to Right
BNE .SHIFLR ; and Loop if Not 0
RTS
;atoc(&s) - ASCII string TO Character
;Args: Y,X = Address of String to Convert
;Uses: TEMP0, TEMP1
@ -205,7 +144,7 @@ ATOC: JSR SETSRC ;Initialize Source String
; TEMP2 = Hundreds Digit
;Affects: C,N.Z
;Returns: A,Y = Length of String
CTOA: JSR SETDST ;Initialize Source String
CTOA: JSR SETDST ;Initialize Destination String
LDY #0 ;Initialize Index into String
JSR CUBCD ;Convert Accumulator to Unpacked BCD
LDA TEMP2 ;Get MSB
@ -274,3 +213,5 @@ CVBCDT: LDA #0 ;Clear BCD Bytes
BNE .CVBCDL ; Process Next Bit
PLP ;Restore Status Register
RTS
ENDSUBROUTINE

View File

@ -53,18 +53,6 @@ char mult();
* Returns: Random number between 1 and 255 */
char rand();
/* Shift Byte Left *
* Args: b - Byte to Shift *
* n - Number of Bits to Shift *
* Returns: Shifted Byte */
char shiftl();
/* Shift Byte Right *
* Args: b - Byte to Shift *
* n - Number of Bits to Shift *
* Returns: Shifted Byte */
char shiftr();
/* Seed Pseudo-Random Number Generator *
* Args: n - Seed number */
void srand();

View File

@ -1,6 +1,6 @@
/**************************************************
* TESTSLIB - Test Library stdlib.h02 for py65mon *
**************************************************/
/*********************************
* SLIBTEST - Test Module stdlib *
*********************************/
//Specify System Header using -H option
#include <stddef.h02>
@ -119,50 +119,6 @@ char countr, rndnum, rndtbl[255];
tstros: //Test rotatl(), rotatr(), swap()
char lbyte, rbyte, obyte, sbyte, tbyte, scount;
putstr("ROTATL(), SHIFTL()");
obyte = 0;
do {
if (!obyte & $F) putchr('.');
scount = 0; sbyte = obyte; tbyte = obyte;
do {
rbyte = rotatl(obyte, scount); if (rbyte <> tbyte) goto rtlerr;
lbyte = shiftl(obyte, scount); if (lbyte <> sbyte) goto shlerr;
sbyte<<;
temp0 = tbyte; tbyte<<; if (temp0:-) tbyte++;
scount++; if (scount == 8) scount = $F8;
} while (scount);
obyte ++;
} while (obyte);
prtok();
putstr("ROTATR(), SHIFTR()");
obyte = 0;
do {
if (!obyte & $F) putchr('.');
scount = 0; sbyte = obyte; tbyte = obyte;
do {
rbyte = rotatr(obyte, scount); if (rbyte <> tbyte) goto rtrerr;
lbyte = shiftr(obyte, scount); if (lbyte <> sbyte) goto shrerr;
sbyte>>;
temp0 = tbyte; tbyte>>; if (temp0 & 1) tbyte = tbyte | $80;
scount++; if (scount == 8) scount = $F8;
} while (scount);
obyte ++;
} while (obyte);
prtok();
putstr("SWAP()");
lbyte=0; do {
rbyte = 0; do {
obyte = lbyte & $f0; obyte = rbyte & $0f + lbyte;
tbyte = lbyte & $0f; tbyte = rbyte & $f0 + lbyte;
sbyte = swap(obyte);
if (sbyte <> tbyte) goto swperr;
rbyte = rbyte + $11;
} while (rbyte & $0f);
} while (lbyte & $0f);
prtok();
tstc2a: //Test ctoa();
char srcchr, dstchr, tststr[4];