A86: Re: Input (yes another input question)


[Prev][Next][Index][Thread]

A86: Re: Input (yes another input question)




Yeah, that's the basic idea of a hardwired string input routine.  Though you
have to use a pointer to the string with indirection:

KeyLoop:
 ld hl,string                    ; point to string
 call GET_KEY
 ld (string),hl                  ; store to byte 0
 inc hl                             ; next byte
 call GET_KEY
 ld (string),hl                  ; store to byte 1
 inc hl                             ; next byte
 ...
 ld (hl),0                         ; if you wanted to zero-terminate it for
_puts or whatever
                                      ; make sure there is an INC HL after
the last LD (string),HL though....

Another way that would be more similiar to your method (yet slower) would be
this:

KeyLoop:
 ld ix,String                 ; point to string
 call GET_KEY
 ld (string+0),a            ; save to byte 0
 call GET_KEY
 ld (string+1),a            ; save to byte 1
 ...
 ld (string+2),a            ; null terminate it (not necessary, but that's
how to do it)

The differences in this is that HL is used as a pointer in the first one.
It advances through the string as the characters are entered.  It ends up
pointing to the end of the string after the routine finishes.  In the second
one, IX is used as a base pointer (or index pointer, which is why it is an
"index register") to the string.  It always points to the base (start) of
the string.  Using HL has it's advantages when you are just moving through
data in order, as in this example.  It is faster than indexing instructions.
Index registers are better when data must be accessed in a random (but
predetermined) order.   Self modifying code can be used with these
instructions to produce some very fast code, however.  But if a structure is
being accessed in a non-sequential order only once, it should be rearranged
so a pointer like HL could be used.  Data should fit the program.

Hope this rant helps...


-----Original Message-----
From: UnEven Software <uneven14@hotmail.com>
To: assembly-86@lists.ticalc.org <assembly-86@lists.ticalc.org>
Date: Saturday, October 03, 1998 7:21 PM
Subject: A86: Input (yes another input question)


>
>After what Dux just said about using .db to input I got to thinking.  I
>was wondering would this code work for getting a 3 char string?
>
>
>
>KeyLoop:
> call GET_KEY
> ld string+1,a
> call GET_KEY
> ld string+2,a
> call GET_KEY
> ld string+3,a
>
>Other_Code:
> ......
>
>
>
>string:
> .db 0,0,0
>
>Wouldn't that work?  Or am I just thinking in another programming
>language?
>
>Just curious,
>
>Matt
>
>______________________________________________________
>Get Your Private, Free Email at http://www.hotmail.com