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.



Reply via email to