                                                                 OS_ReadUnsigned
                                                                       (SWI &21)

On entry
  R0 bits 0-7 = base in the range 2-36 (else 10 assumed)
     bits 8-27 reserved, should be 0
     bit 28 set => read a 64-bit value to r2,r3
     bit 29 set => restrict range to 0 - R2 (or if bit 28 set, R2+(R3<<32))
     bit 30 set => restrict range to 0- 255
     bit 31 set => check terminator is a control character or space
  R1 = pointer to string
  R2 = least significant word of maximum value if R0 bit 29 set
  R3 = most significant word of maximum value if R0 bits 28 and 29 both set
  R4 = &45444957 ("WIDE") if this API applies, otherwise see PRM 1-448

On exit
  R0 preserved
  R1 = pointer to terminator character
  R2 = least significant word of value
  R3 = most significant word of value if R0 bit 28 set on entry
  R4 = bitmask of R0 flags understood by current kernel (currently &F0000000)

Suggestions for future flag uses:
* permit "0x" (hexadecimal), "0" (octal) and "0b" or "%" (binary) prefixes
* signed numbers
* floating point numbers
* negative bases
