2018-08-14 18:14:32 +00:00
|
|
|
; C02 library util.h02 assembly language subroutines
|
2020-09-08 15:51:30 +00:00
|
|
|
; Requires external function SETSRC, STRLEL, STRCML, and STRCPL
|
2018-08-14 18:14:32 +00:00
|
|
|
; 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
|
2020-09-08 15:51:30 +00:00
|
|
|
BEQ TKNDET ;If Not Equal
|
2018-08-14 18:14:32 +00:00
|
|
|
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
|