On 3/6/23 12:51 AM, Paul Ruizendaal via TUHS wrote:
I’ve now read through SunOS man pages and it would
seem that the /dev/fb file was indeed similar to /dev/fbdev on Linux 15 years later. Not
quite the same though, as initially it seems to have been tied to the kernel part of the
SunWindows software.
/dev/fb was a basic device-independent interface that indirected to the
hardware that was actually installed for operations like open(),
ioctl(), and mmap(). Through those the window systems figured out what
they were actually working with. The (4S) man pages had entries for each
of the frame buffers and graphics processors if you're able to find them.
Sunview did have some kernel support but /dev/fb and the support of
mmap() were more generic and used by the non-kernel parts of the window
systems (as well as diagnostics).
Sun had quite a collection of frame buffers through the years, including
oscillating usage of graphics accelerators that might be viewed as
wobbles in the wheel rather than true rotation per Sutherland's paper.
(Cultural note: the Computer History Museum published a 2-part oral
history with Ivan Sutherland, and its home page currently features the
interviews. The first part can be found at
https://youtu.be/Bjr7qLeyvlw.
Each part is several hours long.)
On 3/6/23 12:51 AM, Paul Ruizendaal via TUHS wrote:
The later Linux usage is designed around mmap() and I
am not sure when that arrived in SunOS (the mmap call exists in the manpages of 4.2BSD,
but was not implemented at that time). Maybe at the time of the Sun-1 and Sun-2 it worked
differently.
mmap() was in SunOS starting (I believe) with the BSD-derived SunOS 1.x.
Prior to 4.0 it could be used with character devices that supported
being mapped into an address space: frame buffers, graphics
accelerators, and the bus address spaces of VME or Multibus being
possible sources. There might have been others that I'm not recalling now.
The implementation had a number of restrictions from the BSD
specification. All mappings had to be MAP_SHARED. The caller had to
specify (page-aligned) addresses within its data segment as the process
address space had the traditional text, data, and stack segments vs.
being available as a vector of pages.