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
Revision as of 16:37, 29 November 2013 by Wayne (talk | contribs) (Created page with "*************** * INKEY - a subroutine for BASIC09 by Robert Doggett * Called by: RUN INKEY(StrVar) * RUN INKEY(Path, StrVar) * Inkey determines if a key has been t...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 *