| MediaWiki:Sitenotice |
|---|
| 2026-03-12: Cocopedia.com is now using a new caching system that should make things faster. Please let me know if you encounter any new issues.
2026-03-15: MediaWiki has been reinstalled and the old database and files restored. It was pretty clogged up from being upgraded so many times since 2004. I am also testing out Cloudflare to see if it can prevent the 'bot assaults that took the site down last year. 2026-03-16: Special thanks to Don Barber for hosting a backup mirror of CoCopedia: https://cocopedia.dgb3.net |
Inkey.asm Level 1
From CoCopedia - The Tandy/Radio Shack Color Computer Wiki
Jump to navigationJump to search
***************
* INKEY - a subroutine for BASIC09 by Robert Doggett
* Called by: RUN INKEY(StrVar)
* RUN INKEY(Path, StrVar)
* Inkey determines if a key has been typed on the given path
* (Standard Input if not specified), and if so, returns the next
* character in the String Variable. If no key has been type, the
* null string is returned. If a path is specified, it must be
* either type BYTE or INTEGER.
TYPE set SBRTN+OBJCT
REVS set REENT+1
mod InKeyEnd,InKeyNam,TYPE,REVS,InKeyEnt,0
InKeyNam fcs "Inkey"
org 0 Parameters
Return rmb 2 Return addr of caller
PCount rmb 2 Num of params following
Param1 rmb 2 1st param addr
Length1 rmb 2 size
Param2 rmb 2 2nd param addr
Length2 rmb 2 size
InKeyEnt leax Param1,S
ldd PCount,S Get parameter count
cmpd #1 just one parameter?
beq InKey20 ..Yes; default path A=0
cmpd #2 Are there two params?
bne ParamErr No, abort
ldd [Param1,S] Get path number
ldx Length1,S
leax -1,X byte available?
beq InKey10 ..Yes; (A)=Path number
leax -1,X Integer?
bne ParamErr ..No; abort
tfr B,A
InKey10 leax Param2,S
InKey20 ldu 2,X length of string
ldx 0,X addr of string
ldb #$FF
stb 0,X Initialize to null str
cmpu #2 at least two-byte str?
blo InKey30 ..No
stb 1,X put str terminator
InKey30 ldb #SS.Ready
OS9 I$GetStt is there an data ready?
bcs InKey90 ..No; exit
ldy #1
OS9 I$Read Read one byte
rts
InKey90 cmpb #E$NotRdy
bne InKeyErr
rts (carry clear)
ParamErr ldb #E$Param Parameter Error
InKeyErr coma
rts
emod
InKeyEnd equ *