This is one of the routines I have from Sean McManus' Easi-Sprite Driver Advance which uses more of a Graphical Coordinate system which the Firmware is used here to convert to a Screen Address.
The information it uses for the "Sprite label" points to 2 initial values which relate to the Height and Width of the Sprite before the Sprite Data. The Height number is the same as the number of Lines, but Width number may vary. For example 8x8 sprite in MODE 0 has a Width of 4 (8/2), MODE 1 has a Width of 2 (8/4) and MODE 2 has a Width of 1 (8/8), so just remember to Divide by 2, 4 or 8 for the Width.
org &8000
ld hl,<ypos> ;; Onscreen Coordinates
ld de,<xpos>
call &bc1d ;; Convert Coordinates to Screen Address
push hl ;; Preserve Screen Address
ld de,<sprite> ;; Sprite address in memory
ex de,hl
ld c,(hl)
inc hl
ld b,(hl)
inc hl
ex de,hl
pop hl
.loop1
push bc
push hl
.loop2
ld a,(de)
ld (hl),a
inc hl
inc de
djnz loop2
pop hl
ld bc,&0800
add hl,bc
jr nc,end
ld bc,&c050
add hl,bc
.end
pop bc
dec c
jr nz,loop1
ret
.sprite <height>,<width>,<sprite data>