Sitenotice: 11/29/2018: The wiki is back. It turns out, some anti-virus product on my web server had an issue with the latest version of PHP. My server techs have resolved this issue, and things should be working again. During the investigation, I did restore to a backup from September. There is a chance that any changes done since then were lost, but I do not recall any edits. --OS-9 Al

8/30/2016: Massive re-work is being done on the InfoBox Templates. Read that page to keep up with the plan for that, and adding better keyword tags (categories) to all the pages. --OS-9 Al (talk) 15:28, 31 August 2016 (CDT)

Inkey.asm Level 1

From CoCopedia - The Tandy/Radio Shack Color Computer Wiki
Jump to: navigation, 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  *