You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
735 B
ArmAsm
48 lines
735 B
ArmAsm
;
|
|
; Ullrich von Bassewitz, 31.05.1998
|
|
;
|
|
; char* strrchr (const char* s, int c);
|
|
;
|
|
|
|
.export _strrchr
|
|
.import popax
|
|
.importzp ptr1, ptr2, tmp1
|
|
|
|
_strrchr:
|
|
sta tmp1 ; Save c
|
|
jsr popax ; get s
|
|
sta ptr1
|
|
stx ptr1+1
|
|
lda #0 ; function result = NULL
|
|
sta ptr2
|
|
sta ptr2+1
|
|
tay
|
|
|
|
L1: lda (ptr1),y ; get next char
|
|
beq L3 ; jump if end of string
|
|
cmp tmp1 ; found?
|
|
bne L2 ; jump if no
|
|
|
|
; Remember a pointer to the character
|
|
|
|
tya
|
|
clc
|
|
adc ptr1
|
|
sta ptr2
|
|
lda ptr1+1
|
|
adc #$00
|
|
sta ptr2+1
|
|
|
|
; Next char
|
|
|
|
L2: iny
|
|
bne L1
|
|
inc ptr1+1
|
|
bne L1 ; jump always
|
|
|
|
; Return the pointer to the last occurrence
|
|
|
|
L3: lda ptr2
|
|
ldx ptr2+1
|
|
rts
|