Difference between revisions of "OSBYTE &81"

From BeebWiki
Jump to: navigation, search
m (.)
m (.)
(10 intermediate revisions by 3 users not shown)
Line 3: Line 3:
  
 
     Action: Read key with time limit
 
     Action: Read key with time limit
     X=0..255
+
     On entry: X=0..255
    Y=0..127
+
              Y=0..127
     On exit C=0 character read, Y=0, X=character read
+
     On exit:  Cy=0, Y=0, X=character read
            C=1, Y=255 timed out
+
              Cy=1, Y=255 timed out
            C=1, Y=27  ESCAPE was pressed
+
              Cy=1, Y=27  ESCAPE was pressed
     Action: Read OS version
+
    The caller can test for either Y=0 or Cy=0 for a valid returned character.
     X=0
+
 
    Y=255
+
     Action: Read machine sub-type
     On exit X=value identifying OS
+
    Often [[OSBYTE &00]] is a more appropriate call to make.
            X=&00 BBC B with MOS 0.10
+
     On entry: X=0
            X=&00 RM Nimus
+
              Y=255
            X=&01 Acorn Electron MOS
+
     On exitX=value identifying a sub-type of the host OS
            X=&FF BBC Micro OS 1.00/1.20
+
              X=&00 BBC A/B with OS 0.10
            X=&FE BBC Micro (American MOS 1.10)
+
              X=&00 RM Nimus
            X=&FE NetBSD
+
              X=&01 Acorn Electron OS
            X=&FD Master 128 MOS 3.20
+
              X=&FF BBC Micro OS 1.00/1.20/1.23, Reuters OS R0.3 with *UK
            X=&FC BBC Micro (West German MOS)
+
              X=&FE BBC Micro (American OS A1.0), Reuters OS R0.3 with *US
            X=&FC Windows 32
+
              X=&FE NetBSD
            X=&FB BBC B+ 64/128 (MOS2.00)
+
              X=&FD Master 128 MOS 3.20/3.50
            X=&FB Beos (Brandy Basic)
+
              X=&FC BBC Micro (West German MOS) - see note
            X=&FA Acorn ABC
+
              X=&FC Windows 32
            X=&FA DOS with Brandy BASIC
+
              X=&FB BBC B+ 64/128 (OS 2.00)
            X=&F9 Linux
+
              X=&FB Beos (Brandy Basic)
            X=&F8 MacOS X (Brandy Basic)
+
              X=&FA Acorn Business Computer OS 1.00/2.00
            X=&F7 Master ET OS 4.00
+
              X=&FA Cambridge Workstation OS 2.10
            X=&F7 FreeBSD
+
              X=&FA DOS with DJGPP extender (Brandy Basic)
            X=&F6 OpenBSD
+
              X=&F9 Communicator
            X=&F5 Compact
+
              X=&F9 Linux
            X=&F5 Amiga (Brandy Basic)
+
              X=&F8 MacOS X (Brandy Basic)
            X=&F4 Master 128 MOS 3.26
+
              X=&F7 Master ET MOS 4
            X=&Ex Spectrum
+
              X=&F7 FreeBSD
            X=&Dx Amstrad 464/664/6128, etc.
+
              X=&F6 OpenBSD
            X=&Ax Arthur/RISC OS
+
              X=&F5 Master Compact MOS 5
            X=&A0 Arthur 1.20
+
              X=&F5 Amiga (Brandy Basic)
            X=&A1 RISC OS 2.00
+
              X=&F4 Master 128 MOS 3.26
            X=&A2 RISC OS 2.01
+
              X=&F4 GNU FreeBSD (Brandy Basic)
            X=&A3 RISC OS 3.0x
+
              X=&F3 GNU (Brandy Basic)
            X=&A4 RISC OS 3.1x
+
              X=&Ex Spectrum
            X=&A5 RISC OS 3.50
+
                X=&E0 ZX Spectrum
            X=&A6 RISC OS 3.60
+
                (INKEY-256 AND &F0)=&E0 gives TRUE for ZX Spectrum hardware
            X=&A7 RISC OS 3.7x
+
              X=&Dx Amstrad 464/664/6128, etc.
            X=&A8 RISC OS 4.0x
+
                (INKEY-256 AND &F0)=&D0 gives TRUE for Amstrad CPC hardware
            X=&A9 RISC OS 4.3x
+
              X=&Cx Commodore 64/64+/128, etc.
            X=&AA RISC OS 5.xx
+
                (INKEY-256 AND &F0)=&C0 gives TRUE for Commodore hardware
            X=&AF Springboard  (An ARM-based development system plugged into a PC)
+
              X=&Bx PDP11 Unix
                  (X AND &F0)=&A0 for ARM hardware
+
                X=&B7 PDP11 Unix Version 7
            X=&68 6809 system
+
                X=&B6 PDP11 Unix Version 6
            X=&63 6309 system
+
                X=&B5 PDP11 Unix Version 5
            X=&73 BBC BASIC for ARM CPU on SDL abstraction (ie ASC"s")
+
                (INKEY-256 AND &F0)=&B0 gives TRUE for PDP11 hardware
            X=&53 BBC BASIC for Intel CPU on SDL abstraction (ie ASC"S")
+
              X=&Ax ARM-based systems
            X=&57 BBC BASIC for Windows (ie ASC"W")
+
                X=&A0 Arthur 1.20
 +
                X=&A1 RISC OS 2.00
 +
                X=&A2 RISC OS 2.01
 +
                X=&A3 RISC OS 3.0x
 +
                X=&A4 RISC OS 3.1x
 +
                X=&A5 RISC OS 3.50
 +
                X=&A6 RISC OS 3.60
 +
                X=&A7 RISC OS 3.7x
 +
                X=&A8 RISC OS 4.0x
 +
                X=&A9 RISC OS 4.3x
 +
                X=&AA RISC OS 5.xx
 +
                X=&AE RISC OS Pyromaniac
 +
                X=&AF Springboard  (An ARM-based development system plugged into a PC)
 +
                (INKEY-256 AND &F0)=&A0 gives TRUE for ARM hardware
 +
              X=&8x Texas Instruments Calculator
 +
                X=&83 TI-83+(SE)
 +
                X=&84 TI-84+(SE)
 +
                (INKEY-256 AND &F0)=&80 gives TRUE for TI Calculator hardware
 +
              X=&68 6809 system
 +
              X=&63 6309 system
 +
              X=&73 BBC BASIC on SDL abstraction from C source (ie ASC"s")
 +
              X=&57 BBC BASIC for Windows (ie ASC"W")
 +
              X=&53 BBC BASIC SDL abstraction from assembly language source (ie ASC"S")
 +
                (INKEY-256 AND &DB)=&53 gives TRUE for R.T.Russell's BBC BASIC for Windows/SDL/etc
 +
              X=&4D Matrix Brandy BASIC (ie ASC"M") for all builds from V1.22.6 except RISC OS.
 +
 
 +
    The known examples of German BBC MOS return X=&FF.
  
 
     Action: Scan for a range of keys
 
     Action: Scan for a range of keys
     X=1..127 lowest internal key number to start at EOR&7F
+
     On entry: X=1..127 lowest internal key number to start at EOR &7F
    Y=255
+
              Y=255
     On exit X=internal key number pressed (or 255 for none)
+
     On exitX=internal key number pressed (or 255 for none)
  
 
     Action: Scan for a particular key
 
     Action: Scan for a particular key
     X=128..255 internal key number to scan for EOR &80
+
     On entry: X=128..255 internal key number to scan for EOR &80
    Y=255
+
              Y=255
     On exit X=Y=0 for as not pressed
+
     On exitX=Y=0 for as not pressed
            X=Y=255 the key was being pressed
+
              X=Y=255 the key was being pressed
 +
 
 +
==Extensions==
 +
The parameter to OSBYTE &81 is a 16-bit number. The standard implementation interprets that as:
 +
  <&8000  - wait for keypress
 +
  &FF00+nn - scan for BBC keypress
 +
  &FF00    - return host machine type
 +
 
 +
A parameter of &8000-&FEFF is undefined. Some systems extend INKEY as follows:
 +
  &FE00+nn - scan for low level DOS/Window VK_xxxx keypress (cZ80Tube, console library)
 +
  &FC00+nn - scan for low level SDL1.2 SDK_xxx keypress (Brandy Basic SDL builds)
 +
  &8000+nn - wait for keypress, return 16-bit character code (cZ80Tube, console library)
 +
 
 +
==See Also==
 +
* [[INKEY]]
 +
* [[OSBYTE &00]]
 +
* http://mdfs.net/Docs/Comp/BBC/Osbyte80
 +
* http://mdfs.net/Docs/Comp/Acorn/HostVals
 +
* http://mdfs.net/Docs/Comp/Acorn/Hosts
 +
* [[What BASIC is running]]
 +
* Negative INKEY numbers
  
 
==See Also==
 
==See Also==
Line 70: Line 116:
  
 
[[User:Jgharston|Jgharston]] 21:56, 26 May 2009 (UTC)
 
[[User:Jgharston|Jgharston]] 21:56, 26 May 2009 (UTC)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 05:20, 23 June 2018 (CEST)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 22:09, 25 August 2019 (CEST)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 20:03, 16 February 2020 (CET)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 07:08, 12 April 2020 (CEST)

Revision as of 03:21, 3 July 2020

OSBYTE &81 (129) - Read Key with Time Limit or Machine Type. Called by BASIC's =INKEY function.

   Action: Read key with time limit
    On entry: X=0..255
              Y=0..127
    On exit:  Cy=0, Y=0, X=character read
              Cy=1, Y=255 timed out
              Cy=1, Y=27  ESCAPE was pressed
    The caller can test for either Y=0 or Cy=0 for a valid returned character.
   Action: Read machine sub-type
    Often OSBYTE &00 is a more appropriate call to make.
    On entry: X=0
              Y=255
    On exit:  X=value identifying a sub-type of the host OS
              X=&00 BBC A/B with OS 0.10
              X=&00 RM Nimus
              X=&01 Acorn Electron OS
              X=&FF BBC Micro OS 1.00/1.20/1.23, Reuters OS R0.3 with *UK
              X=&FE BBC Micro (American OS A1.0), Reuters OS R0.3 with *US
              X=&FE NetBSD
              X=&FD Master 128 MOS 3.20/3.50
              X=&FC BBC Micro (West German MOS) - see note
              X=&FC Windows 32
              X=&FB BBC B+ 64/128 (OS 2.00)
              X=&FB Beos (Brandy Basic)
              X=&FA Acorn Business Computer OS 1.00/2.00
              X=&FA Cambridge Workstation OS 2.10
              X=&FA DOS with DJGPP extender (Brandy Basic)
              X=&F9 Communicator
              X=&F9 Linux
              X=&F8 MacOS X (Brandy Basic)
              X=&F7 Master ET MOS 4
              X=&F7 FreeBSD
              X=&F6 OpenBSD
              X=&F5 Master Compact MOS 5
              X=&F5 Amiga (Brandy Basic)
              X=&F4 Master 128 MOS 3.26
              X=&F4 GNU FreeBSD (Brandy Basic)
              X=&F3 GNU (Brandy Basic)
              X=&Ex Spectrum
                X=&E0 ZX Spectrum
               (INKEY-256 AND &F0)=&E0 gives TRUE for ZX Spectrum hardware
              X=&Dx Amstrad 464/664/6128, etc.
               (INKEY-256 AND &F0)=&D0 gives TRUE for Amstrad CPC hardware
              X=&Cx Commodore 64/64+/128, etc.
               (INKEY-256 AND &F0)=&C0 gives TRUE for Commodore hardware
              X=&Bx PDP11 Unix
                X=&B7 PDP11 Unix Version 7
                X=&B6 PDP11 Unix Version 6
                X=&B5 PDP11 Unix Version 5
               (INKEY-256 AND &F0)=&B0 gives TRUE for PDP11 hardware
              X=&Ax ARM-based systems
                X=&A0 Arthur 1.20
                X=&A1 RISC OS 2.00
                X=&A2 RISC OS 2.01
                X=&A3 RISC OS 3.0x
                X=&A4 RISC OS 3.1x
                X=&A5 RISC OS 3.50
                X=&A6 RISC OS 3.60
                X=&A7 RISC OS 3.7x
                X=&A8 RISC OS 4.0x
                X=&A9 RISC OS 4.3x
                X=&AA RISC OS 5.xx
                X=&AE RISC OS Pyromaniac
                X=&AF Springboard   (An ARM-based development system plugged into a PC)
               (INKEY-256 AND &F0)=&A0 gives TRUE for ARM hardware
              X=&8x Texas Instruments Calculator
                X=&83 TI-83+(SE)
                X=&84 TI-84+(SE)
               (INKEY-256 AND &F0)=&80 gives TRUE for TI Calculator hardware
              X=&68 6809 system
              X=&63 6309 system
              X=&73 BBC BASIC on SDL abstraction from C source (ie ASC"s")
              X=&57 BBC BASIC for Windows (ie ASC"W")
              X=&53 BBC BASIC SDL abstraction from assembly language source (ie ASC"S")
                (INKEY-256 AND &DB)=&53 gives TRUE for R.T.Russell's BBC BASIC for Windows/SDL/etc
              X=&4D Matrix Brandy BASIC (ie ASC"M") for all builds from V1.22.6 except RISC OS.
   The known examples of German BBC MOS return X=&FF.
   Action: Scan for a range of keys
    On entry: X=1..127 lowest internal key number to start at EOR &7F
              Y=255
    On exit:  X=internal key number pressed (or 255 for none)
   Action: Scan for a particular key
    On entry: X=128..255 internal key number to scan for EOR &80
              Y=255
    On exit:  X=Y=0 for as not pressed
              X=Y=255 the key was being pressed

Extensions

The parameter to OSBYTE &81 is a 16-bit number. The standard implementation interprets that as:

 <&8000   - wait for keypress
 &FF00+nn - scan for BBC keypress
 &FF00    - return host machine type

A parameter of &8000-&FEFF is undefined. Some systems extend INKEY as follows:

 &FE00+nn - scan for low level DOS/Window VK_xxxx keypress (cZ80Tube, console library)
 &FC00+nn - scan for low level SDL1.2 SDK_xxx keypress (Brandy Basic SDL builds)
 &8000+nn - wait for keypress, return 16-bit character code (cZ80Tube, console library)

See Also

See Also

Jgharston 21:56, 26 May 2009 (UTC) Jgharston (talk) 05:20, 23 June 2018 (CEST) Jgharston (talk) 22:09, 25 August 2019 (CEST) Jgharston (talk) 20:03, 16 February 2020 (CET) Jgharston (talk) 07:08, 12 April 2020 (CEST)