Difference between revisions of "GSREAD"
m (Slight tweeks.) |
(→Workspace: new section) |
||
Line 49: | Line 49: | ||
The character returned by [[GSINIT]] is ''not'' necessarily the character | The character returned by [[GSINIT]] is ''not'' necessarily the character | ||
returned by the first call to GSREAD. | returned by the first call to GSREAD. | ||
+ | |||
+ | ==Workspace== | ||
+ | GSREAD tests the top two bits of location &E4, a zero page location set up | ||
+ | by GSINIT but also modified while processing numerical *commands | ||
+ | (<code>*FX</code>, <code>*OPT</code>, <code>*TV</code> ''etc.'') The value | ||
+ | is preserved during the call, and is made up as follows: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Bit !! Meaning | ||
+ | |- | ||
+ | | 7 || <tt>"</tt> found at start of string | ||
+ | |- | ||
+ | | 6 || CS on entry to GSINIT; only CR terminates unquoted string | ||
+ | |- | ||
+ | | 5..0 || Unused | ||
+ | |} | ||
==Entry points== | ==Entry points== | ||
* 6502 Entry Address: &FFC5 (I/O processor only) | * 6502 Entry Address: &FFC5 (I/O processor only) | ||
− | [[User:Regregex|Regregex]] ([[User talk:Regregex|talk]]) | + | [[User:Regregex|Regregex]] ([[User talk:Regregex|talk]]) 17:48, 18 August 2021 (CEST) |
Revision as of 16:48, 18 August 2021
Read character from string
Specification
6502 | On entry: | On exit: |
Cy | undefined | CC = Character valid CS = End of string reached |
A | undefined | Current character of string, =&0D if end of string reached |
X | undefined | preserved |
Y | Offset of current character | Offset of next character |
(&F2),Y | the string being parsed | (&F2) preserved |
Returns one character at a time from a string found using GSINIT. The string may be enclosed in double quotes (") in which case spaces in the string are preserved. The string may also contain control codes and high-order characters encoded with an escape sequence.
GSREAD parses the character sequence at the position given by (&F2),Y and scans forward.
If the string began with " then a character is returned with Carry Clear unless the closing " has been reached, then Carry Set is returned with A=&0D. CR encountered before the closing " causes error &FD, Bad string.
Otherwise a character is returned with Carry Clear unless it is a CR, or a space if GSINIT was called with Carry Clear, then Carry Set is returned with A=&0D.
(&F2),Y is left pointing to the next character unless Carry Set is returned, in which case GSREAD skips any spaces following the end of the string.
While processing a command line, GSINIT returning Not Equal indicates that an argument is present. When the first call to GSREAD returns Carry Set, the flag from GSINIT distinguishes between an empty argument and no argument.
It is safe to call GSREAD at least once following GSINIT. However, after GSREAD returns Carry Set it must not be called again without an intervening GSINIT, otherwise, overshooting a closing " and reaching CR also raises a Bad string error.
- Note
The character returned by GSINIT is not necessarily the character returned by the first call to GSREAD.
Workspace
GSREAD tests the top two bits of location &E4, a zero page location set up
by GSINIT but also modified while processing numerical *commands
(*FX
, *OPT
, *TV
etc.) The value
is preserved during the call, and is made up as follows:
Bit | Meaning |
---|---|
7 | " found at start of string |
6 | CS on entry to GSINIT; only CR terminates unquoted string |
5..0 | Unused |
Entry points
- 6502 Entry Address: &FFC5 (I/O processor only)