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 2

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.
NAM INKEY
IFP1
USE      /D0/DEFS/OS9DEFS
ENDC
TYPE     set  SBRTN+OBJCT
REVS     set  REENT+1
         mod InKeyEnd,InKeyNam,TYPE,REVS,InKeyEnt,SIZE
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
E$Param  equ  $38
SIZE     equ  *
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  *