-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathosbyte.txt
149 lines (135 loc) · 6.48 KB
/
osbyte.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
OSBYTE and *FX calls
====================
Brandy implements a limited set of OSBYTE calls, either by *FX, CALL &FFF4,
result%=USR &FFF4, or SYS "OS_Byte",A[,X[,Y]] [TO ...]. Where a return value
is supported, it will be &00YYXXAA when called via USR &FFF4.
OSBYTE 176-255 read and write system variables with
newvalue = (oldvalue AND Y) EOR X
so *FX a,x[,0] and OSBYTE A,X,0 writes the value and OSBYTE A,0,255 reads
the value. Different combinations of X and Y can set and reset individual
bits.
Supported OSBYTE calls
----------------------
A=0: X=0: return the MOS version as an error with ERR=247.
X<>0: Return the host OS version in the X register (as per the 'use' doc)
A=6: Sets the default printer ignore character, default is 13.
A=15: Flush keyboard and mouse buffers.
A=20: Resets the system font (SDL build only)
A=21: Flush keyboard or mouse buffer:
X=0: Flush keyboard buffer
X=9: Flush mouse buffer
A=25: Resets parts of the system font (SDL build only)
X=0 or 16 resets the teletext font (16 ONLY does the teletext font)
after being changed with OSWORD 140.
A=42: (Deprecated, see A=163 X=2)
A=43: (Deprecated, see A=163 X=3)
A=44: (Deprecated, see A=163 X=4)
A=106: Select mouse pointer. Due to SDL limitations, this simply turns the
pointer on or off, and unlinking does nothing.
A=112: Selects which video bank the VDU drivers access. 4 available.
A=113: Selects which video bank is drawn to the display window.
A=128: ADVAL. As with BASIC ADVAL, only some subfuntions supported.
A=129: INKEY. As with BASIC INKEY, scanning for range of keys not supported.
A=130: High word of user memory.
A=131: Bottom of user memory.
A=132: Top of user memory
A=134: Return text cursor position in X and Y. Identical to 165.
A=135: Return screen mode and character under cursor or 0 if unreadable.
A=160: Read VDU variable (equivalent to VDU(X%))
A=163: Application Support - X < 128 are local to Brandy
X=1: Get or set refresh state (as per *REFRESH)
Y=0: Equivalent to the old behaviour of *REFRESH OFF
(refresh is not re-enabled on an error condition)
Y=1: Equivalent to *REFRESH ON
Y=2: Equivalent to *REFRESH OFF (and *REFRESH ONERROR)
Y=255: Query the state, will return 0, 1 or 2 in Y register.
X=2: Get or set various states [Brandy only]
If NO bits set: return state in Y register.
If ALL bits set: Analogue of Linux's "stty sane" - enables
Refresh, issues a VDU 6 and sets both video bank controls
to 0.
Bits 0 and 1 control or contain the *REFRESH state:
00: No operation.
01: Set with *FX163,1,0
10: Set with *REFRESH ON
11: Set with *REFRESH OFF and *REFRESH ONERROR
Returned values: 01, 10 or 11.
Bits 2 and 3 control or contain the Full Screen state:
00: No operation.
01: Full Screen Off.
10: Full Screen On.
11: Full Screen Toggle.
Returned values: 00 (off) or 10 (on).
Bit 4: If set, do immediate display refresh, equivalent
to *REFRESH
Value not returned.
X=3: Perform a VDU X to the controlling Linux terminal.
X=4: Y=1: CTRL-N and CTRL-P do line editing (default).
Y=0: CTRL-N and CTRL-P just send their codes.
Arrow keys still do line editing.
X=127: Analogue of Linux's "stty sane" - enables Refresh, issues a
VDU 6 and sets both video bank controls to 0.
X=242: Set the line drawing dot pattern style
A=165: Return text cursor position in X and Y. Identical to 134.
A=200: Set Escape key and Reset effects - only Escape key effect supported.
A=210: Sound disabled if X is non-zero.
A=220: Set TAB character
A=220: Set ESCAPE character
A=229: Enable or disable ESCAPE, disabled if X non-zero.
A=230: Define Escape effects.
A=250: Read and write video bank set with OSBYTE 112, returns bank set with
OSBYTE 113 in Y
A=251: Read and write video bank set with OSBYTE 113.
OSBYTEs 166-255 read and write OSBYTE system variables with new=(old AND Y) EOR X,
but only those listed have any effect.
Keyboard OSBYTEs
----------------
INKEY/GET fetches
a keypress
|
Key=TAB ----No-->-+
| |
Char=OSBYTE(219) | *not yet implemented
| |
+------------<-+
|
Char=OSBYTE(222) -No-->--------------+
| |
OSBYTE(229)=0 --No-->--------------+
| |
OSBYTE(200).b0=0 -No->-+ OSBYTE(254).b6=0 -No->-+
| | | |
Set Escape state | Translate to | *FX221-*FX228
| | RISC OS key | not yet
+-------------<-+ mapping | implemented
| | |
| +------------+
| |
Return Return
'no key' keypress
The difference between *FX229 and *FX200 is that *FX229,1 results in the Escape
key returning an ASCII character, and *FX200,1 results in the Escape key not
generating an Escape state.
Escape handler generates an "Escape" error. The error handler then calls the
EscapeAcknowledge code called by OSBYTE 126. This examines OSBYTE 230 to
determine what to do. bit0-bit3 indicate what to do after an Escape, bit4-bit7
indicate that these actions should be done for all errors, not just Escapes.
The default is &00 to do all Escape actions on Escape only.
bit 0=0: close Exec, cancel VDU queue, clear sounds, cancel pending keypresses
bit 1=0: refresh display
bit 2=0: reserved
bit 3=0: reserved
bit 4=1: clear Exec/VDU/Sound/keyboard on errors
bit 5=1: refresh display on errors
bit 6=1: reserved
bit 7=1: reserved
*FX11/12/196/197 keyboard repeat settings are not implemented.
*FX172/173 to return keyboard translation not implemented
*FX178 keyboard interupt disable not implemented
*FX201 keyboard disable not implemented
*FX202 keyboard status no implemented
*FX221-228 top-bit set translations not implemented
*FX4/237 cursor key settings not implemented
*FX238 keypad base not implemented
*FX240 country not implemented
*FX247 soft Break key effects not implemented