Z88 Developers' Notes
Contents   Contents of System Calls

OS_Cli, CLI interface

RST 20H, DEFB $84

IN:

     A = CL_RIM ($01), get raw input
          BC = timeout in 1/100 second ticks
          BC = 0, return immediately if no data
          BC = -1 ($FFFF), wait forever for data

     A = CL_MBC ($02), meta/base to character conversion
          DE = meta (D) / base (E)
               D = $01   SHIFT
                 = $02   CTRL (DIAMOND)
                 = $04   ALT (SQUARE)
                 = $08   special
               E = base character

     A = CL_CMB ($03), character to meta/base conversion
          DE = raw character
               D = 0, E is ISO character
               D = 1, E is special character

     A = CL_INC ($04), increment CLI use count
     A = CL_DEC ($05), decrement CLI use count
     A = CL_RES ($06), reset CLI use count

     A = CL_ACK ($07), acknowledge CLI/Escape
          D = reset mask (zero to reset):
               CLM_SH ($01) = SHIFT (bit)
               CLM_CT ($02) = DIAMOND (bit)
OUT, A(in) = CL_RIN, successful:
     Fc = 0
     BC = remaining timeout
     DE = character:
          D = 0, E is ISO character
          D = 1, E is special character
OUT, A(in) = CL_RIN, failed:
     Fc = 1
          A = RC_ESC
          A = RC_SUSP
          A = RC_TIME
Registers changed after return:
     ......HL/IXIY same
     AFBCDE../.... different
OUT, A(in) = CL_MBC, successful:
     Fc = 0
     DE = character:
          D = 0, E is ISO character
          D = 1, E is special character
OUT, A(in) = CL_MBC, failed:
     Fc = 1
          A = RC_FAIL, not a meaningful character
Registers changed after return:
     ..BC..HL/IXIY same
     AF..DE../.... different
OUT, A(in) = CL_CMB, successful:
     Fc = 0
     DE = meta (D) / base (E)
          D = $01   SHIFT
            = $02   CTRL (DIAMOND)
            = $04   ALT (SQUARE)
            = $08   special
          E = base character
OUT, A(in) = CL_CMB, failed:
     Fc = 1
          A = RC_FAIL, not a meaningful character
Registers changed after return:
     ..BC..HL/IXIY same
     AF..DE../.... different
OUT, A(in) = CL_INC, CL_DEC, CL_RES always:
     Fc = 0
Registers changed after return:
     A.BCDEHL/IXIY same
     .F....../.... different
OUT, A(in) = CL_ACK, always:
     Fc = 0
     Fz = 1, no Escape
     Fz = 0, Escape
     D = resulting mask
Registers changed after return:
     A.BCDEHL/IXIY same
     .F....../.... different


Notes:

Internal operating system usage.
Bugs: