feature: mirror all diagnostics to syslog, add VESA fallback for gfxd crashes
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

- syslogDump now outputs all five diagnostic sections (Fault Info,
  CPU Registers, Process Info, System Info, Call Stack) to serial,
  matching the on-screen BSOD content
- panic() detects if the crash occurred in the gfxd process and
  falls back to rendering the BSOD directly to the VESA framebuffer
  via driver.video text drawing, bypassing LVGL entirely
- Add DrawChar, DrawString, DrawHex, DrawInt to driver.video for
  8x16 bitmap font rendering directly to the framebuffer
- Export SHOULD_CRASH flag from svc.gfxd interface so test commands
  can trigger a deliberate gfxd crash
- Add app.divzero with DIV0, PF, and CRASHGFXD test commands
- Update doc/src/core/core.panic.md and doc/src/driver/video/driver.video.md
This commit is contained in:
t3hn3rd committed 2026-03-10 12:35:22 +00:00
1 parent 97b4460c48
commit aa28d62e03
7 files changed
+444 -11

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
{
Prog->Ping - ICMP Ping command.
Sends 10 ICMP echo requests to a host, printing round-trip time
for each reply. Sleeps 1 second between pings. Each invocation
uses a heap-allocated state record so multiple terminals can app.ping
concurrently without corrupting each other.
@author(Kieron Morris <[email protected]>)
}
unit app.divzero;
interface
uses
io.stdio, debug.tracer;
procedure init();
implementation
uses
arch.x86.bda, driver.net.types, driver.net.proto.icmp, driver.net.util, core.strings,
proc.mgr, core.util, arch.x86.util, memory.heap, svc.gfxd;
{ ---- Command entry point (runs as a process) ---- }
procedure run_div0(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
begin
asm
XOR EAX, EAX
DIV EAX { this will trigger a divide by zero exception (interrupt 0) }
end;
end;
procedure run_pf(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
begin
asm
MOV EAX, $DEADBEEF
MOV [EAX], EAX { this will trigger a page fault (interrupt 14) }
end;
end;
procedure run_div0_gfxd(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
begin
svc.gfxd.SHOULD_CRASH := true; { set flag to trigger crash in graphics service }
end;
procedure init();
begin
debug.tracer.push_trace('divzero.init');
io.stdio.registerCommand('DIV0', @run_div0, 'Force a divide by zero exception.');
io.stdio.registerCommand('PF', @run_pf, 'Force a page fault.');
io.stdio.registerCommand('CRASHGFXD', @run_div0_gfxd, 'Force a divide by zero exception in the graphics service.');
end;
end.
+3 -1
View File
@@ -33,7 +33,8 @@ uses
//dispatch
driver.storage.filedispatch,
//wasm
app.wasm.runner;
app.wasm.runner,
app.divzero;
{ Initialize all baked-in programs }
procedure init();
@@ -81,6 +82,7 @@ begin
driver.storage.filedispatch.init();
app.wasm.runner.init();
app.setres.init();
app.divzero.init();
end;
end.