Port-mac68k archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

SWFB & NuBus graphic devices



Hello,

I'm trying to support my own NuBus graphic device [1] to get an
'accelerated' console
and perhaps later on X11 support. The NuBus device works in system 7.1 to 8.1
already.
I already have that kind of support in NetBSD/sparc on a different
physical device [2].
Unfortunately, my accelerated device for the console on NetBSD/sparc
is dependent
on some Sun-specific code :-( And it seems that the FB support in NetBSD/mac68k
is quite different.

My test set-up is currently a Qemu emulation of a Quadra 800 with a
custom device
that models my own; the Declaration ROM (which declares the device and the MacOS
driver) is working identically in Qemu and on actual hardware.

So far I've been able to

- Get the device to work in 1bpp with the old 'rcons' infrastructure;
with this, I can set my
  device as the primary monitor (either in MacOS or by 'unplugging'
(virtually) the monitor
  on the internal video of the Q800) and boot NetBSD just fine. This
only required being
  able to clear the interrupt in 'grf_nubus.c' and rebuild the kernel.
However, my
  understanding is that 'rcons' is obsolete, so little point in trying
to go beyond that ?

- Rebuild & boot the swfb kernel ; this works when the internal video
is set as the primary
  device to either 1- or  8-bits in MacOS, and the console then is
either 1- or 8-bits.
  I can also see my own device as a secondary, without the ability to
set the 'cmap'
  (so it won't work with the standard swfb kernel). My understanding
is that no NuBus
  device is supported in swfb - none of them have a function to set
the colormap. Is that
  the case ?

- After adding the appropriate function to set the colormap, I can
boot NetBSD with my
 device set as primary. However, there's some things I don't understand:
 (a) I can only boot if in MacOS the depth is set to 1-bit, if it is
set to 8-bits, the
     internal (set to secondary) screen is cleared, but not the
internal, and nothing
     happens anymore - it seems the kernel crashes without being able to display
     anything on my device.
(b) In dmesg, the internal/secondary screen is mis-detected as using
the primary settings
     (1600x900, 1-bit) rather than its own (1152x870, 8-bits);
appropriately, only the top
     part is cleared. I'm guessing the Booter doesn't support
multi-monitor setup ?
(c) The primary/my device is detected with the appropriate resolution,
but at 8-bits.
     Not really an issue, I can force the device back to 8-bits at the
same time I install
     the colormap function.
(d) The system boots fine and I can use it via ssh, and I see the
color console (with
     the green-then-black text), but I never get a 'login' prompt ;
nothing is displayed
     after the date. If I type, it appears properly on the console. I
_think_ something
     is displayed on the secondary/internal, but with the messed-up
resolution:depth
     it's just noise at the top. It could be the login prompt, but I
don't know (the getty
    is running).

Unfortunately, Qemu doesn't emulate a machine without an internal
video so I can't
try with just my device. I also don't have such hardware, just a Q650
which is a very
similar system to the Q800. 'unplugging' the internal video doesn't
help, so I can't be
sure if the issue is purely due to the dual-screen.

Any pointer or advice is welcome :-)

Cordially,

Romain

[1] <https://github.com/rdolbeau/NuBusFPGA>,
<https://68kmla.org/bb/index.php?threads/nubusfpga-hdmi-on-nubus-macs.40760/>
[2] <https://github.com/rdolbeau/SBusFPGA>

-- 
Romain Dolbeau


Home | Main Index | Thread Index | Old Index