A86: Re: Simple Routine Help


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

A86: Re: Simple Routine Help




You should put a halt between each time you check the port, or the results
can be erratic.

- Jeremy

----- Original Message -----
From: <Jkhum98@aol.com>
To: <assembly-86@lists.ticalc.org>
Sent: Wednesday, June 02, 1999 9:01 AM
Subject: A86: Simple Routine Help


>
> Hey All, this simple routine has been frustrating me for like a week
because
> it looks like it should work, could somebody look through it and help me
> figure out why it wont...?  The routine first goes into a loop checking
all
> the keyports of Port 1, and seeing if they are not 255, noting that a key
has
> been pressed. I'm pretty sure that works fine (although the SCF may not be
> necessary), but the problem is in the next part.  After it jumps out of
that
> first loop, B contains the current Keyport of the key that was pressed,
and A
> contains the Key Value of the key. I then load the Key Value into C,
continue
> to check A at the Keyport in B, and see how it compares to C. My purpose
in
> this part is that it should keep cycling in the second loop until that key
is
> Released. This is intended so that there wont be repeated functions
occuring
> later on if the key is held down. However, the routine will just not stop
and
> wait for it to be releasedt, and continues to exit after any key has been
> pressed. Can someone help me figure out why? Here's the routine...
>
> ;-------------(Direct_Input_Waitkey)------------;
> ; Input: Nothing. Pauses until Any Key pressed. ;
> ; Output: C = Key Value,  A and B = Port Value. ;
> ; Registers Destroyed: Only AF and BC Affected. ;
> ;-----------------------------------------------;
>
> D_I_Waitkey:
> ld a, 254
> D_I_Loop: ld b, a \ ld c, a
> call Direct_Input
> cp 255 \ jr nz, D_I_Key
> ld a, c \ SCF \ RLCA
> cp 127 \ jr z, D_I_Waitkey
> jr D_I_Loop
> D_I_Key:
> push af \ ld c, a \ push bc
> D_I_Key_Loop:
> call Direct_Input
> cp c \ jr z, D_I_Key_Loop
> pop bc \ pop af \ ld a, b
> ret
> Direct_Input:    ;Input: Keyport Value in B, Output: Key Value in A.
>   ld a, 0FFh
>   out (1), a
>   ld a, b
>   out (1), a
>   in a, (1)
> ret
>
> Thanks Alot,
> Jason_K  =)
>
>



References: