mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
3.5 KiB
192 lines
3.5 KiB
sub strlen(str: [uint8]): (len: uint16) @extern("strlen") is
|
|
@asm "ld de,(", str, ")";
|
|
@asm "ld hl,0";
|
|
@asm "1:";
|
|
@asm "ld a,(de)";
|
|
@asm "or a";
|
|
@asm "ret z";
|
|
@asm "inc de";
|
|
@asm "inc hl";
|
|
@asm "jr 1b";
|
|
end sub;
|
|
|
|
# returns dest
|
|
sub strcpy(dest: [uint8], src: [uint8]): (ret: [uint8]) @extern("strcpy") is
|
|
@asm "ld hl,(", src, ")";
|
|
@asm "ld de,(", dest, ")";
|
|
@asm "push de";
|
|
@asm "1:";
|
|
@asm "ld a,(hl)";
|
|
@asm "ld (de),a";
|
|
@asm "or a";
|
|
@asm "jr z,2f";
|
|
@asm "inc hl";
|
|
@asm "inc de";
|
|
@asm "jr 1b";
|
|
@asm "2:";
|
|
@asm "pop hl";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
# returns dest
|
|
sub strcat(dest: [uint8], src: [uint8]): (ret: [uint8]) @extern("strcat") is
|
|
@asm "ld hl,(", src, ")";
|
|
@asm "ld de,(", dest, ")";
|
|
@asm "push de";
|
|
@asm "1:";
|
|
@asm "ld a,(de)";
|
|
@asm "inc de";
|
|
@asm "or a";
|
|
@asm "jr nz,1b";
|
|
@asm "dec de";
|
|
@asm "2:";
|
|
@asm "ld a,(hl)";
|
|
@asm "ld (de),a";
|
|
@asm "or a";
|
|
@asm "jr z,3f";
|
|
@asm "inc hl";
|
|
@asm "inc de";
|
|
@asm "jr 2b";
|
|
@asm "3:";
|
|
@asm "pop hl";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
# returns 0 if equal, 1 if greather, else -1
|
|
sub strcmp(str1: [uint8], str2: [uint8]): (ret: int8) @extern("strcmp") is
|
|
@asm "ld de,(", str1, ")";
|
|
@asm "ld hl,(", str2, ")";
|
|
@asm "1:";
|
|
@asm "ld a,(de)";
|
|
@asm "cp (hl)";
|
|
@asm "jr nz,2f";
|
|
@asm "or a";
|
|
@asm "ret z";
|
|
@asm "jr 3f";
|
|
@asm "2:";
|
|
@asm "jr nc,4f";
|
|
@asm "ld a,-1";
|
|
@asm "ret";
|
|
@asm "3:";
|
|
@asm "inc hl";
|
|
@asm "inc de";
|
|
@asm "jr 1b";
|
|
@asm "4:";
|
|
@asm "ld a,1";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
sub tolower(char: uint8): (ret: uint8) @extern("tolower") is
|
|
@asm "ld a,(", char, ")";
|
|
@asm "cp 41H";
|
|
@asm "ret c";
|
|
@asm "cp 5AH+1";
|
|
@asm "ret nc";
|
|
@asm "or 20H";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
# case insensitive, returns 0 if equal, 1 if greather, else -1
|
|
sub strcasecmp(str1: [uint8], str2: [uint8]): (ret: uint8) @extern("strcasecmp") is
|
|
var c1: uint8;
|
|
var c2: uint8;
|
|
@asm "ld de,(", str1, ")";
|
|
@asm "ld hl,(", str2, ")";
|
|
@asm "1:";
|
|
@asm "ld a,(hl)";
|
|
@asm "call tolower";
|
|
@asm "ld c,a";
|
|
@asm "ld a,(de)";
|
|
@asm "call tolower";
|
|
@asm "cp c";
|
|
@asm "jr nz,2f";
|
|
@asm "or a";
|
|
@asm "ret z";
|
|
@asm "jr 3f";
|
|
@asm "2:";
|
|
@asm "jr nc,4f";
|
|
@asm "ld a,-1";
|
|
@asm "ret";
|
|
@asm "3:";
|
|
@asm "inc hl";
|
|
@asm "inc de";
|
|
@asm "jr 1b";
|
|
@asm "4:";
|
|
@asm "ld a,1";
|
|
@asm "ret";
|
|
@asm "tolower:";
|
|
@asm "cp 41H";
|
|
@asm "ret c";
|
|
@asm "cp 5AH+1";
|
|
@asm "ret nc";
|
|
@asm "or 20H";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
sub strstr(str: [uint8], tosearch: [uint8]): (ret: [uint8]) @extern("strstr") is
|
|
@asm "ld de,(", tosearch, ")";
|
|
@asm "ld hl,(", str, ")";
|
|
@asm "1:";
|
|
@asm "ld a,(de)";
|
|
@asm "cp (hl)";
|
|
@asm "jr z,2f";
|
|
@asm "inc hl";
|
|
@asm "ld a,(hl)";
|
|
@asm "or a";
|
|
@asm "jr nz,1b";
|
|
@asm "3:";
|
|
@asm "ld hl,0";
|
|
@asm "ret";
|
|
@asm "2:";
|
|
@asm "ld b,d";
|
|
@asm "ld c,e";
|
|
@asm "inc de";
|
|
@asm "ld a,(de)";
|
|
@asm "or a";
|
|
@asm "ret z";
|
|
@asm "push hl";
|
|
@asm "inc hl";
|
|
@asm "6:";
|
|
@asm "ld a,(de)";
|
|
@asm "cp (hl)";
|
|
@asm "jr nz,4f";
|
|
@asm "inc hl";
|
|
@asm "inc de";
|
|
@asm "ld a,(de)";
|
|
@asm "or a";
|
|
@asm "jr z,5f";
|
|
@asm "ld a,(hl)";
|
|
@asm "or a";
|
|
@asm "jr nz,6b";
|
|
@asm "pop hl";
|
|
@asm "jr 3b";
|
|
@asm "5:";
|
|
@asm "pop hl";
|
|
@asm "ret";
|
|
@asm "4:";
|
|
@asm "pop hl";
|
|
@asm "inc hl";
|
|
@asm "ld a,(hl)";
|
|
@asm "or a";
|
|
@asm "jr z,3b";
|
|
@asm "ld d,b";
|
|
@asm "ld e,c";
|
|
@asm "jr 1b";
|
|
end sub;
|
|
|
|
sub strchr(str: [uint8], tosearch: uint8): (ret: [uint8]) @extern("strchr") is
|
|
@asm "ld a,(", tosearch, ")";
|
|
@asm "ld c,a";
|
|
@asm "ld hl,(", str, ")";
|
|
@asm "1:";
|
|
@asm "ld a,c";
|
|
@asm "cp (hl)";
|
|
@asm "ret z";
|
|
@asm "inc hl";
|
|
@asm "ld a,(hl)";
|
|
@asm "or a";
|
|
@asm "jr nz,1b";
|
|
@asm "ld hl,0";
|
|
@asm "ret";
|
|
end sub;
|
|
|
|
|