1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-25 06:31:25 +00:00

Added module stddef to standard library

This commit is contained in:
Curtis F Kaylor 2018-07-27 13:38:47 -04:00
parent bcac483b88
commit 37842aa306
6 changed files with 225 additions and 26 deletions

View File

@ -51,11 +51,6 @@ functions must be defined:
Note: Does any needed ACSII conversions, then calls
echo().
setdst(&s): Stores pointer to &s in dstlo and dsthi.
setsrc(&s): Stores pointer to &s in srclo and srchi and
initializes Y register to 0.
along with the Zero Page locations (each pair of which must be sequential)
srclo, srchi Spurce String Pointer
@ -63,9 +58,8 @@ along with the Zero Page locations (each pair of which must be sequential)
the following locations that may be Zero Page, but don't have to before
temp0 Temporary variables used by stdlib.asm
temp1
temp2
temp0, temp1 Temporary variables used by stdlib.asm
temp2, temp3
and the following locations that must be preserved between function calls
@ -86,4 +80,3 @@ and the constants
ESCKEY ASCII code for Escape/Abort key (usually ESC)
NULKEY Returned if no Key was Pressed
RTNKEY ASCII code for Return/Enter key (usually CR)

114
doc/stddef.txt Normal file
View File

@ -0,0 +1,114 @@
Standard Definitions for C02 Library Functions
This module includes constant and function definitions common to the
entire standard library.
At the beginning of the program use the directives
#include <stddef.h02>
The following constants are defined:
#TRUE The byte 255, $FF, or %11111111, representing
the true condition.
#FALSE The byte 0, $00 or %00000000, representing the
false condition.
The following functions are defined:
savreg(); Saves the A, X, and Y registers.
Note: Stores A, X, and Y in temp0, temp1, and
temp2, respectively.
savrxy(); Saves only the X and Y registers.
Note: This is an alternate entry point into
the savreg function, which stores X and Y in
temp1 and temp2, respectively.
resreg(); Restore the A, X, and Y registers.
Note: Loads A, X, and Y from temp0, temp1, and
temp2, respectively.
resrxy(); Resrtores only the X and Y registers.
Note: This is an alternate entry point into
the resreg function, which loads X and Y from
temp1 and temp2, respectively.
setsrc(&d); Sets the source pointer to address d.
Note: Stores the least significant byte,
passed in the X register, in srclo, and the
most significant byte, passed in the Y
register, to srchi.
setdst(&d); Sets the destination pointer to address d.
Note: Stores the least significant byte,
passed in the X register, in destlo, and the
most significant byte, passed in the Y
register, to desthi.
setsrd(); Sets the source pointer to the destination
pointer.
Note: Calls the getdst function, followed by
the setsrc function, copying dstlo and dsthi
to srclo and srchi, respectively.
*,hi,lo=getsrc(); Gets the address in the source pointer,
returning the least significant byte in lo
and the most significant byte in hi.
Note: Loads the srclo into the X register and
srchi into the Y.
*,hi,lo=getdst(); Gets the address in the destination pointer,
returning the least significant byte in lo
and the most significant byte in hi.
Note: Loads the dstlo into the X register and
dsthi into the Y.
savsrc(); Saves the destination pointer.
Note: Calls the getsrc function, followed by
the savrxy function, copying srclo and srchi
to temp1 and temp2, respectively.
savdst(); Saves the destination pointer.
Note: Calls the getdst function, followed by
the savrxy function, copying dstlo and dsthi
to temp1 and temp2, respectively.
ressrc(); Restores the source pointer.
Note: Calls the resrxy function, followed by
the setsrc function, copying temp1 and temp2
to srclo and srchi, respectively.
resdst(); Restores the destination pointer.
Note: Calls the resrxy function, followed by
the setdst function, copying temp1 and temp2
to dstlo and dsthi, respectively.
Note: This library expects the following to be defined:
the zero page variables
srclo,srchi: Source pointer
dstlo,dsthi: Destination pointer
and the transient variables
temp0 Temporary storage
temp1
temp2

View File

@ -103,19 +103,3 @@ PRHEX: AND #$0F ;Strip High Nybble
ADC #$06 ; Convert ':' to 'A'...
PRHEXC: ADC #$30 ;Convert to ASCII Character
JMP PRCHR ;Print Hex Digit and Return
;Functions to set String Pointers
;Used by memory, stdio, stdlin, string, and stringx libraries
;Initialize Destination String Pointer
SETDST: STX DSTLO ;Save Destination String Pointer
STY DSTHI
RTS
;Initialize Source String Pointer and Index
SETSRC: STX SRCLO ;Save Source String Pointer
STY SRCHI
LDY #$00 ;Initialize Index Into String
RTS

View File

@ -34,4 +34,3 @@ void newlin(); //Advance cursor to beginning of next line
void prchr(); //Print ASCII character to Console
void prbyte(); //Print Accumulator as Hexadadecimal number
void prhex(); //Print Low Nybble of Accumulator as Hex Digit

60
include/stddef.a02 Normal file
View File

@ -0,0 +1,60 @@
;c02 library stddef.h02 assembly language subroutines
;Requires External Zero Page Variables
;DSTLO, DSTHI, SRCLO, SRCHI
;External Variables
;TEMP0, TEMP1, TEMP2
;Standard Constant Definitions
TRUE EQU $FF ;Returned for Success or Failure
FALSE EQU $00 ;by some Library Routines
;savdst() - Save Destination Pointer
SAVDST: JSR GETDST ;Load Destination Pointer
JMP SAVRXY ;Save X & Y Registers
;savdst() - Save Destination Pointer
SAVSRC: JSR GETSRC ;Load Destination Pointer
JMP SAVRXY ;Save X & Y Registers
;Save Registers
SAVREG: STA TEMP0 ;Save Accumulater
SAVRXY: STX TEMP1 ;Save X Index
STY TEMP2 ;Save Y Index
RTS
;Restore Registers
RESREG: LDA TEMP0 ;Load Accumlator
RESRXY: LDX TEMP1 ;Load X Index
LDY TEMP2 ;Load Y Index
RTS
;Restore Destination Pointer
RESDST: JSR RESRXY ;Load Address and Drop into SETDST
;Initialize Destination Pointer
SETDST: STX DSTLO ;Store Destination Pointer
STY DSTHI
RTS
;Restore Source Pointer
RESSRC: JSR RESRXY ;Load Saved Address
JMP SETSRC ;Set Source Pointer
;Set Source Pointer to Destination Pointer
SETSRD: JSR GETDST ;Get Destination Point and fall into SETSRC
;Initialize Source Pointer and Index
SETSRC: STX SRCLO ;Store Source Pointer
STY SRCHI
LDY #$00 ;Initialize Index Into String
RTS
;Retrieve Source String Pointer
GETDST: LDX DSTLO
LDY DSTHI
RTS
;Retrieve Source String Pointer
GETSRC: LDX SRCLO
LDY SRCHI
RTS

49
include/stddef.h02 Normal file
View File

@ -0,0 +1,49 @@
/* C02 Standard Definitions File *
* Contains common constants and *
* functions used in libraries. */
/* Constant Definitions */
const #TRUE = $FF, #FALSE = 0;
/* Get Destination Pointer *
* Returns: Y,X=Destination address */
void getdst();
/* Get Source Pointer *
* Returns: Y,X=Source address */
void getsrc();
/* Retore Destination Pointer */
void resdst();
/* Restore A, X, and Y Registers */
void resreg();
/* Restore X, and Y Registers */
void resrxy();
/* Retore Source Pointer */
void ressrc();
/* Save Destination Pointer */
void savdst();
/* Save A, X, and Y Registers */
void savreg();
/* Save X, and Y Registers */
void savrxy();
/* Save Source Pointer */
void savsrc();
/* Set Destination Pointer *
* Args: &d - Destination address */
void setdst();
/* Set Source Pointer *
* Args: &d - Source address */
void setsrc();
/* Set Source Pointer to Destination Pointer */
void setsrd();