Bug fixes (numbers in brackets indicate the bug number in Bugs.1-20)
translation table in a keyboard handler.(516) Line fills to the right no longer corrupt the external graphics
cursor.(518, 520) *SCREENLOAD now generates errors correctly (521) *SCREENLOAD now sets the supremacy bit correctly. (522) *SCREENLOAD no longer leaves the cursor on if it needs to change mode. (524) SpriteOp 'Return nth name' now checks for overflowing the name buffer (531) SWI OS_Plot now checks the FX3 status, the VDU queue status and the
spool handle correctly.(538) SpriteOp ReadPixelColour now works correctly in 256 colour modes. (539) Latch B is now initialised to 0 on reset. (572) Circular segments are now plotted correctly. (593) The VDU variables WindowWidth and WindowHeight now return correct values
in all cases.(594) The horizontal interlace register (HIR) is now programmed correctly in
hi-res-mono modes.
Under Arthur OS (and on earlier BBC machines) the ECF pattern was always aligned so that the bottom left of the pattern coincided with the bottom left of the screen. These calls makes the bottom left of the pattern coincide with the point (x,y). The origin is restored to bottom left on a mode change.
bit 1 = 1 => set size of VDU 5 chars bit 2 = 1 => set spacing of VDU 5 charsand x, y are the size of, or spacing between characters in pixels. VDU 5 sizes of 8x8 and 8x16 are optimised for speed; other sizes call the SprExtend module to plot scaled chars (much slower). Setting different VDU 5 spacing does not affect speed. The default size and spacing of VDU 5 chars is 8x8; the default size of VDU 4 chars is 8x8 except in mode 23, when it is 8x16; the default spacing of VDU 4 chars is the same as the sizes, except in gap modes when it is 8x10. The sizes and spacings are reset on a mode change.
The sizes and spacing can be read by calling SWI OS_ReadVduVariables with the following indices:-
GCharSizeX (162) - x size of VDU 5 chars (in pixels), default 8 GCharSizeY (163) - y size of VDU 5 chars (in pixels), default 8 GCharSpaceX (164) - x spacing of VDU 5 chars (in pixels), default 8 GCharSpaceY (165) - y spacing of VDU 5 chars (in pixels), default 8 TCharSizeX (167) - x size of VDU 4 chars (in pixels) TCharSizeY (168) - y size of VDU 4 chars (in pixels) TCharSpaceX (167) - x spacing of VDU 4 chars (in pixels) TCharSpaceY (168) - y spacing of VDU 4 chars (in pixels)
Value in block Information returned in bytes 1 to 8 2 Ecf pattern 1 (in native mode) 3 Ecf pattern 2 (------""------) 4 Ecf pattern 3 (------""------) 5 Ecf pattern 4 (------""------) 6 Dot-dash pattern
MUST be entered in SVC mode
out: All registers preserved (except for PSR)
All coordinates are in terms of pixels from the bottom left of the screen. The line is clipped to the graphics window, and is plotted using the colour and action specified by R3.
If R3>=4 then R3 points to a colour block, which starts on an address which is a multiple of 64, and has the following format:-
Offset Value
0 OR mask for top ECF line 4 EOR mask -------""------- 8 OR mask for next ECF line 12 EOR mask -------""-------- . . . . 56 OR mask for bottom ECF line 60 EOR mask --------""---------
NB the bottom ECF line here would be used on the bottom line of the screen (ie it must be pre-adjusted to take the ECF origin into account.)
The caller should previously have called SWI OS_RemoveCursors to remove the software cursor (and should call SWI OS_RestoreCursors to put it back afterwards).
n+&00..n+&3F is a colour block for the foreground colour + action n+&40..n+&7F is a colour block for the background colour + action n+&80..n+&BF is a colour block for the background colour with store action
(for the definition of a colour block, see above). These colour blocks are updated whenever a GCOL or TINT is issued or the ECF origin is changed. They are intended for use by external programs which want to access screen memory directly but which want to have access to the current colour/action settings.
a) The size of the screen in coordinates is no longer always 1280 by 1024. The size of the screen should be determined by reading VDU variables XWindLimit, YWindLimit, XEigFactor, YEigFactor. Consequently the variable YShftFactor is no longer able to express the full situation, and should not be used.
b) In modes 16 and 17, circles (and arcs, sectors and segments) do not look circular. This is because the aspect ratio of the pixels is not in a 2:1, 1:1 or 1:2 ratio, which are the only ratios the OS can cope with at present.
c) In mode 23, VDU 5 text is single height (by default), not double height like VDU 4 text. (This may change if considered sufficiently undesirable). XEigFactor and YEigFactor are both 1 (not 0 as on 1.20, so default mouse rectangle will be different)
d) Modes 3, 6 and 7 still do not allow graphics, for compatibility with programs written for earlier BBC machines.
e) Modes 11, 14 and 17 are not a multiple of eight pixels high. In these modes the bottom line of the screen corresponds to the bottom line of ECF patterns (by default), but the top line will not correspond to the top line of ECF patterns (by default).
New module - IIC - See document IIC/1 for details
Flood fill is a lot faster (up to 10 times as fast for large areas).
ScreenLoad and ScreenSave are a lot faster if the window is full screen width.
VDU 5 text is about 20% faster.