call _ldhlind puts the value of hl in hl. since you are using a pointer
table, every time you call _ldhlind it will jump to that pointer. since you
have two pointers in the table with this example, you must do it twice:
call _clrscrnfull
call _homeup
ld hl,text
call _ldhlind
call _ldhlind
jp _puts
text: .dw othertext
othertext: .dw txt
txt: .db "Hi!",0
-joel