On 06/11/2026 20:31, Michael Kelly wrote:
3) The immediate console uses new frame buffer code shared with the
immediate console. The immediate console requirements are simple but
the kd console seemingly has more complex needs. There are many
circumstances within that module that request moving/clearing of parts
of lines (rather than entire lines). These are commented in the code
as 'slow case' in bmpclear, bmpmvup and bmpmvdown. I realise that
these functions are unused but I have implemented equivalents for
these which at the moment only support the fast case which allows all
the boot log output to appear and scroll correctly. The slow cases are
not used by the debugger either since that interface also works
correctly without them (deleting characters from the middle of an
input line just does 'backspace' and then prints the remaining
characters again. I need to find a method of testing the slow cases
for after I've implemented them. Is it true that cnputc is only used
by gnumach boot (until the Hurd console starts) and the gnumach debugger?
4) There were some performance issues with the boot output scrolling
on actual hardware. I've not looked at this yet but perhaps write
combining might help.
I think these 2 issues are now resolved at least sufficiently for the
moment. I implemented a simple text buffer which retains the displayed
text as character values. Instead of performing the memmove, I now
simply redraw any character that changes value during the scroll. This
avoids ever having to read the video memory, avoids redrawing characters
that are unchanged (there are many spaces for example) and also solves
the testing of the slow and fast cases as there is now no distinction. I
would estimate that scrolling performance is between 10 and 20 times
faster. There are a number of possible improvements but I think it's
good enough at this stage on real hardware.
Mike.