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 2
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. 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 *