A86: Simple Routine Help


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

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  =)


Follow-Ups: