[Oberon] Oberon.OpenDisplay

eas lab lab.eas at gmail.com
Sat May 17 05:45:01 CEST 2014


It just so happens, that I'm no longer able to ignore the details of
how-the-display works. So I'm lucky that you are investigating it.

> When a display is wider than 640 pixels, Oberon.OpenDisplay
> opens the left boundary of the displayed area a distance to the
> right of the y axis.  Specifically, Oberon.Mod has
>         W0 := DW DIV 8 * 5;
>         IF W0 < 400 THEN W0 := 0 END;
>         OpenDisplay(W0, DW - W0, DH);
>
> For example, if  DW = 1024 and DH = 768
> then W0 = 640 and
>         OpenDisplay(640, 380, 768);
> is executed.
>
Prose is unsuiatble for mathematic. "=>" means "implies".
DW = 1024 => W0=640 => ~(W0 < 400)
=> OpenDisplay(640,1024-640,DH)
=> OpenDisplay(640,384,768)

> Why not just
>         OpenDisplay(0, 1024, 768);

Are my calculations: (640,384,768) wrong?
Using colors in ETHO, helps me a lot.

> or, in general,
>         OpenDisplay(0, DW , DH);
> for any size of display?
>
> There must be a sound reason but it escapes me at present.

> Thanks,                         ... Peter E.

I think the underlying reason is that:
* NOT all integers in the 'range' are valid for DW , DH.
Examination of VESA/VGA settings shows that the hardware
has a set of valid W:H ratios.
So eg. 643:447 is not valid.
The horizontal & vertical sweep frequencies are continuously variable,
but the number of: pixel, chars, lines are discrete/integer.
So it's like a sequence of gear-wheels, which have a limited number of
syncronising combinations.

How would I get the font to display bigger, without increasing the
'frame size' to overflow the screen, and still use the default *12.Scn.Fnt
[for ALO:ARM linux Oberon / for rPi] ?

Let's solve this display mystery, and extract the fundamental rules, and
write them down. Or probably they are already wiki-ed?

== Chris Glur.



More information about the Oberon mailing list