;c02 library stddef.h02 assembly language subroutines ;Requires External Zero Page Variables ;DSTLO, DSTHI, SRCLO, SRCHI ;External Variables ;TEMP0, TEMP1, TEMP2 ;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 ;savsrc() - Save Source 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 ;Set Destination Pointer to Source Pointer SETDSS: JSR GETSRC ;Get Destination Pointer JMP SETDST ;Store in Source Pointer ;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 ;Add Accumulator to Destination Address ADDDSA: TAX ;Move Accumulator to Argument LSB LDY #0 ;Clear Argument MSB ;Add to Destination Address ;Args: Y,X = MSB,LSB of Integer to Add ;Affects: A,Y,X ADDDST: LDA #DSTLO ;Set Index to Destination Pointer BNE ADDZPW ;and Execute ADDZPW ;Add Accumulator to Source Address ADDSRA: TAX ;Move Accumulator to Argument LSB LDY #0 ;Clear Argument MSB ;Add to Source Address ;Args: Y,X = MSB,LSB of Integer to Add ;Affects: A,Y,X ADDSRC: LDA #SRCLO ;Set Index and Drop into ADDZPW ;Add to Zero Page Word ;Args: A = Address of Zero Page Word ; Y,X = MSB,LSB of Integer to Add ;Affects: A ADDZPW: STA TEMP3 ;Save Zero Page Address TXA ;Move Argument LSB to Accumulator LDX TEMP3 ;Set Index to Zero Page Address CLC ;Clear Carry ADC 0,X ;Add Argument LSB to Target LSB STA 0,X ;and Save Result TYA ;Move Argument MSB to Accumulator ADC 1,X ;Add Argument MSB to Target MSB STA 1,X ;and Save Result RTS