On entry, X=0 - Generate error number 247 giving host and OS type X<>0 - Return host/OS in X On exit, X=host/OS type: 0 Electron/Communicator 8 UNIX-type system 1 BBC 9 6809/6309 system 17 6809/6309 system 2 BBC B+ 10 MacOS X 3 Master 128 4 Master ET 28 Commodore 64/128 5 Master Compact 29 Texas Instruments calculator 6 Arthur or RISC OS 30 Amstrad CPC 7 Springboard 31 Sinclair ZX Spectrum :d.dir.file/ext dir/file.ext :d.dir.file/ext d:file.ext 32 IBM PC-type system (DOS, Windows, etc.) 39 6809/6309 system d:\dir\file.ext
Early documentation refers to OSBYTE 0 as returning the OS version. As more systems were developed, it became more correct to refer to it returning a value indicating the host. For example, code running on a second processor will always be told what the I/O host is regardless of what the host is and what the second processor is.
80x86 BBC BASIC running on DOS and Windows returns 32 as a side effect of reading the character under the cursor. Properly written code that calls OSBYTE 0 will know to do so in a manner that ensures this occurs. Normally this just means calling OSBYTE 0 at program startup before outputting anything.
Over time the OSBYTE 0 return value has evolved to become a bitmap representing the capabilities of the host system, primarily of the file system structure.
%000x0xxxFilenames are directory.filename/extension, eg BBC, RISC OS
%000x1xxxFilenames are directory/filename.extension, eg Unix, CP/M
%nnnxxxxxFilenames are directory\filename.extension, eg DOS, Windows
This can also be represented as:
%000x0xxxDirectory seperator is
%000x1xxxDirectory seperator is
%nnnxxxxxDirectory seperator is
%000x0xxxExtension seperator is
%nnnxnxxxExtension seperator is
This allow programs to use code similar to the following:
A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256 d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\" filename$=dir$+d$+name$+s$+ext$