Re: A86: Re: Asm questions


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

Re: A86: Re: Asm questions




> How would I go about making my own input routine?  I've seen TI's, and I
> really don't understand it very well.

Neither did I.  I'm not sure I do now, but I think this will work...

This routine SHOULD get a keypress and store it in the data area called
'string'.  It will then move the pointer to the next spot in 'string',
and store the next character.  When enter is pressed, it stores a zero
to the end of the string and RETurns.  This should accept capital and
lowercase letters, and numbers.  Whether or not this really works is the
question... Anybody care to check the code for me?

	set shiftALock, (IY+shiftFlags)		;turn on AlphaLock
	ld hl, string				;load address of string
keyloop:
	call _getkey				;get keypress
	cp kenter
	jp z, key_done				;if enter was pressed
	cp kSpace				;is it space?
	jp z, key_space				;if it is a space
	push af					;preserve the keycode in A
	sub $1C					;k0
	jp m, keyloop				;it's not a usefull key if negative
	pop af					;recall the keycode
	push af					;and save it again
	sub $26					;k9 +1
	jp m, key_number			;if neg, assumed to be a number key
	pop af
	push af
	sub $28					;kCapA
	jp m, keyloop				;it's not a usefull key if negative
	pop af	
	push af
	sub $42					;kCapZ +1
	jp m, key_capletter			;if negative, then assume capital letter
	pop af
	sub $5C					;kz +1
	jp m, key_lowletter			;if neg, assume lower case letter
	jp keyloop				;must be a useless key at this point
key_space:
	ld a, Lspace				;char code for space
	ld (hl), a				;put into storage string at HL
	inc hl					;forward pointer to next spot in string
	call _vputmap				;display a space at current pen position
	jp keyloop				;get next letter or number
key_number:
	pop af					;we had a PUSH, we must have a POP
	add a, 12				;keycode-->char code
	ld (hl), a				;store it to the string
	inc hl					;increment string pointer
	call _vputmap				;display the number
	jp keyloop				;get next character
key_capletter:
	pop af					;we had a PUSH, must have a POP
	add a, 25				;keycode-->char code
	ld (hl), a				;store it to string
	inc hl					;increment storage string pointer
	call _vputmap				;display the letter
	jp keyloop				;get next letter or number
key_lowletter:
	pop af					;we PUSHED, we have to POP
	add a, 31				;keycode-->char code
	ld (hl), a				;store it to string
	inc hl					;next string spot
	call _vputmap				;display
	jp keyloop				;next
key_done:
	ld a, 0
	ld (hl), a				;zero-terminate the string
	ret					;exit

string:
	.db 0,0,0....				;string storage


References: