MediaWiki:Sitenotice:
2024-03-02: The wiki ran out of disk space, so things were not working. This has been resolved by adding another 5GB of quota ;-) Thanks to Tim Lindner for reporting the issues. 2020-05-17: If a page gives you an error about some revision not being found, just EDIT the page and the old page should appear in the editor. If it does, just SAVE that and the page should be restored. OS-9 Al (talk) 12:22, 17 May 2020 (CDT)

Inkey.asm Level 1

From CoCopedia - The Tandy/Radio Shack Color Computer Wiki
Revision as of 20: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 navigation Jump 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 *