Difference between revisions of "ADVAL"
m (1 revision) |
m (Slight tweek.) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 18: | Line 18: | ||
== Description == | == Description == | ||
+ | <code>ADVAL</code> calls [[OSBYTE &80]] to read an input device (positive | ||
+ | argument) or examine a buffer (negative argument). It returns the value from | ||
+ | the input device, the free space in an output buffer, or the used space in | ||
+ | an input buffer. | ||
− | + | Reading the status of an input buffer returns 0 if there is nothing in the | |
− | + | buffer and <>0 if there is something in the buffer, so that code of the | |
− | Reading the status of an input buffer returns 0 if there is nothing in the buffer and <>0 if there is something in the buffer, so that code of the following form can be used: | + | following form can be used: |
IF ADVAL(buffer) THEN REM ReadFromBuffer | IF ADVAL(buffer) THEN REM ReadFromBuffer | ||
− | Reading the status of an output buffer returns 0 if there is no free space in the buffer and <>0 if there is free space in the buffer, so that code of the following form can be used: | + | Reading the status of an output buffer returns 0 if there is no free space |
+ | in the buffer and <>0 if there is free space in the buffer, so that code of | ||
+ | the following form can be used: | ||
IF ADVAL(buffer) THEN REM WriteToBuffer | IF ADVAL(buffer) THEN REM WriteToBuffer | ||
Line 52: | Line 58: | ||
|- | |- | ||
| 9 || Mouse button state, b0=Left, b1=Middle, b2=Right | | 9 || Mouse button state, b0=Left, b1=Middle, b2=Right | ||
+ | |- | ||
+ | | 128-n || Low-level read from buffer n-1 | ||
+ | |- | ||
+ | | 127 (128-1) || 16-bit GET (cZ80Tube, PDPTube, Brandy Basic) | ||
|- | |- | ||
| -1 || Keyboard input buffer | | -1 || Keyboard input buffer | ||
Line 79: | Line 89: | ||
==Implementations== | ==Implementations== | ||
− | If an unknown device or buffer is examined, then the call should be passed to sideways ROMs as an Unknown OSBYTE service call. | + | If an unknown device or buffer is examined, then the call should be passed |
+ | to sideways ROMs as an Unknown OSBYTE service call. | ||
− | Unfortunately, BBC MOSes other than MOS 5 (Master Compact) do not actually do this, and return undefined values for unimplemented calls. Sideways ROM code must intercept BYTEV in order to support additional calls. | + | Unfortunately, BBC MOSes other than MOS 5 (Master Compact) do not actually |
+ | do this, and return undefined values for unimplemented calls. Sideways ROM | ||
+ | code must intercept BYTEV in order to support additional calls. | ||
− | RISC OS also does not actually do this, fatally generating a <code>Bad Command</code> error instead of returning. This causes programs to fail if a device is not present, rather than simply not doing anything. | + | RISC OS also does not actually do this, fatally generating a <code>Bad Command</code> |
+ | error instead of returning. This causes programs to fail if a device is not | ||
+ | present, rather than simply not doing anything. | ||
===Mouse=== | ===Mouse=== | ||
− | Most mouse drivers do not implement calls 5, 6 and 9. The VFS Videodisk Filing System ROM used with the Domesday System implements 5, 6 and 9. The mouse buttons are more usually read with INKEY-10, INKEY-11 and INKEY-12. | + | Most mouse drivers do not implement calls 5, 6 and 9. The VFS Videodisk |
+ | Filing System ROM used with the Domesday System implements 5, 6 and 9. The | ||
+ | mouse buttons are more usually read with INKEY-10, INKEY-11 and INKEY-12. | ||
8-bit systems rarely implement a mouse buffer. | 8-bit systems rarely implement a mouse buffer. | ||
===Sound=== | ===Sound=== | ||
− | 32-bit systems usually use a sound system that does not use the sound output buffers. | + | 32-bit systems usually use a sound system that does not use the sound output |
+ | buffers. | ||
[[User:Jgharston|Jgharston]] 00:30, 2 January 2008 (UTC) | [[User:Jgharston|Jgharston]] 00:30, 2 January 2008 (UTC) |
Latest revision as of 01:43, 10 February 2022
ADVAL is a BASIC function read an input device or examine a buffer.
Availability | Present in all original versions of BBC BASIC. | |
Syntax | <numeric> = ADVAL <numeric>
| |
Token (hex) | 97 (function)
| |
Description | Reads an input device or examines a buffer. |
Description
ADVAL
calls OSBYTE &80 to read an input device (positive
argument) or examine a buffer (negative argument). It returns the value from
the input device, the free space in an output buffer, or the used space in
an input buffer.
Reading the status of an input buffer returns 0 if there is nothing in the buffer and <>0 if there is something in the buffer, so that code of the following form can be used:
IF ADVAL(buffer) THEN REM ReadFromBuffer
Reading the status of an output buffer returns 0 if there is no free space in the buffer and <>0 if there is free space in the buffer, so that code of the following form can be used:
IF ADVAL(buffer) THEN REM WriteToBuffer
Defined buffer/device numbers
Argument | Returns |
0 | b0-b7=buttons, b8-b15=last ADC channel converted |
1 | Analogue Channel 1/Joystick 1 X position |
2 | Analogue Channel 2/Joystick 1 Y position |
3 | Analogue Channel 3/Joystick 2 X position |
4 | Analogue Channel 4/Joystick 2 Y position |
5 | Mouse X boundary |
6 | Mouse Y boundary |
7 | Mouse X position |
8 | Mouse Y position |
9 | Mouse button state, b0=Left, b1=Middle, b2=Right |
128-n | Low-level read from buffer n-1 |
127 (128-1) | 16-bit GET (cZ80Tube, PDPTube, Brandy Basic) |
-1 | Keyboard input buffer |
-2 | Serial input buffer |
-3 | Serial output buffer |
-4 | Printer output buffer |
-5 | Sound output buffer 0 |
-6 | Sound output buffer 1 |
-7 | Sound output buffer 2 |
-8 | Sound output buffer 3 |
-9 | Speech output buffer |
-10 | Mouse input buffer |
-11 | MIDI input buffer |
-12 | MIDI output buffer |
Implementations
If an unknown device or buffer is examined, then the call should be passed to sideways ROMs as an Unknown OSBYTE service call.
Unfortunately, BBC MOSes other than MOS 5 (Master Compact) do not actually do this, and return undefined values for unimplemented calls. Sideways ROM code must intercept BYTEV in order to support additional calls.
RISC OS also does not actually do this, fatally generating a Bad Command
error instead of returning. This causes programs to fail if a device is not
present, rather than simply not doing anything.
Mouse
Most mouse drivers do not implement calls 5, 6 and 9. The VFS Videodisk Filing System ROM used with the Domesday System implements 5, 6 and 9. The mouse buttons are more usually read with INKEY-10, INKEY-11 and INKEY-12. 8-bit systems rarely implement a mouse buffer.
Sound
32-bit systems usually use a sound system that does not use the sound output buffers.
Jgharston 00:30, 2 January 2008 (UTC)