C02/include/util.a02

78 lines
2.9 KiB
Plaintext

; C02 library util.h02 assembly language subroutines
; Requires external function SETSRC, STRLEL, STRCML, and STRCPL
; and external zero page locations DSTLO, DSTHI, SRCLO, and SRCHI
;tkndec(&list) - Decode Token into Destination String
;Args: A = Tokenized Value
; Y,X = Address of Token List
;Requires: DSTLO,DSTHI = Address of Destination String
;Sets: SRCLO,SRCHI = Pointer to Token in List
; End of List if Not Found
;Affects: X,C
;Returns: A,Y = Length of Token, 0=Not Found
; N,Z based on A
TKNDEC: JSR SETSRC ;Set Source String to Token List
TAX ;Save Argument
BNE TKNDEL ;If 0
STA (DSTLO),Y ; Set String to Null
BEQ TKNENX ; And Return 0
TKNDEL: JSR STRLEL ;Get Length of first Token in List
BEQ TKNENX ;If Null String, Return 0
TAY ;Set Index to Token Length
INY ;plus 1
TXA ;Compare Argument
CMP (SRCLO),Y ;to Tokenized Value
BEQ TKNDET ;If Not Equal
TYA ; Get Token Length
JSR TKNNXT ; Skip to Next Token
BEQ TKNDEL ; and Loop
TKNDET: LDY #0 ;Initialize Index and
JMP STRCPL ;Copy Token to Destination String
;tknenc(&list) - Encode Token in Destination String
;Args: Y,X = Address of Token List
;Requires: DSTLO,DSTHI = Address of String to be Tokenized
;Sets: SRCLO,SRCHI = Pointer to Token in List
; End of List if Not Found
;Affects: X,C,N,Z
;Returns: A = Tokenized Value
; N,Z based on A
TKNENC: JSR SETSRC ;Set Source String to Token List
TKNENL: JSR STRLEL ;Get Length of first Token in List
BEQ TKNENX ;If Null String, Return 0
TAX ;Save Length of Token
INX ;and Add 1 for Terminator
LDY #0 ;Initialize Index and
JSR STRCML ;Compare Destination to Token
BEQ TKNENT ;If Not Egual
TXA ; Get Token Length
JSR TKNNXT ; Skip to Next Token
BEQ TKNENL ; and Loop
TKNENT: TXA ;Get Index to Byte After String
TAY
LDA (SRCLO),Y ;and Load Byte
TKNENX: RTS
;Move to Next Token
;Args: A = Length of Token (including Terminator)
;Returns: Y=0
TKNNXT: SEC ;Add Token Length
ADC SRCLO ;plus 1 for Value Byte
STA SRCLO ;to Source Pointer LSB
BCC TKNNXX ;If Carry
INC SRCHI ; Increment Source Pointer MSB
TKNNXX: LDY #0 ;Clear Index Register
RTS
;SWAP Nybbles in Byte
;Args: A = Byte containing Nybbles to Swap
;Affects: C,N,Z
;Returns: A = Byte with Nybbles Swapped
SWAP: ASL ;Code by
ADC #$80 ;David Galloway
ROL ;posted on
ASL ;6502.org by
ADC #$80 ;Garth Wilson
ROL ;Oct 27, 2017
RTS