shell: support string arguments

No consumer yet, but it's coming...
This commit is contained in:
Virgil Dupras 2019-04-22 21:52:33 -04:00
parent 1bcceb949c
commit d3d229a918

View File

@ -280,6 +280,10 @@ shellPrintErr:
; Bit 2 - optional: If set and not present during parsing, we don't error out ; Bit 2 - optional: If set and not present during parsing, we don't error out
; and write zero ; and write zero
; ;
; Bit 3 - String argument: If set, this argument is a string. A pointer to the
; read string, null terminated (max 0x20 chars) will
; be placed in the next two bytes. This has to be the
; last argument of the list and it stops parsing.
; Sets A to nonzero if there was an error during parsing, zero otherwise. ; Sets A to nonzero if there was an error during parsing, zero otherwise.
; If there was an error during parsing, carry is set. ; If there was an error during parsing, carry is set.
shellParseArgs: shellParseArgs:
@ -318,6 +322,14 @@ shellParseArgs:
jr z, .error ; not set? then we have too many args jr z, .error ; not set? then we have too many args
ld c, a ; save the specs for the next loop ld c, a ; save the specs for the next loop
inc hl ; (hl) points to a space, go next inc hl ; (hl) points to a space, go next
bit 3, a ; is our arg a string?
jr z, .notAString
; our arg is a string. Let's place HL in our next two bytes and call
; it a day. Little endian, remember
ld (ix), l
ld (ix+1), h
jr .success ; directly to success: skip endofargs checks
.notAString:
call parseHexPair call parseHexPair
jr c, .error jr c, .error
; we have a good arg and we need to write A in (IX). ; we have a good arg and we need to write A in (IX).