mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
d3efa47f81
* [metal] Refactoring: separate out sys_writev_vga() and _vga_init() modules * [metal] Read VGA info from BDA before long mode entry, not after If using a pre-existing VGA text console, the VGA initialization code now retrieves the cursor position & character height from the BIOS data area while still in real mode — rather than reading from the BIOS data area only after entering long mode. (This should help make the code more correct, if Cosmopolitan were to support UEFI graphics output in the future. If the program were booted via UEFI, then the long mode IsMetal() code would still be activated, but the BIOS data area might not have been initialized in that case.) This change also means that there are now a few more fields in the `struct mman`. * [metal] VGA console can now show "screen of death" upon a crash There is now a new function _klog_vga(), which can be called by kprintf() to output system messages — e.g. information about CPU exceptions — on the VGA screen. * [metal] CPU exception handler now dumps cr2 value * [metal] Add demo of program crash reporting w/ bare metal VGA TTY * [metal] Reduce size of "screen of death" code
33 lines
1.4 KiB
C
33 lines
1.4 KiB
C
#if 0
|
|
/*─────────────────────────────────────────────────────────────────╗
|
|
│ To the extent possible under law, Justine Tunney has waived │
|
|
│ all copyright and related or neighboring rights to this file, │
|
|
│ as it is written in the following disclaimers: │
|
|
│ • http://unlicense.org/ │
|
|
│ • http://creativecommons.org/publicdomain/zero/1.0/ │
|
|
╚─────────────────────────────────────────────────────────────────*/
|
|
#endif
|
|
#include "libc/calls/calls.h"
|
|
#include "libc/calls/termios.h"
|
|
#include "libc/isystem/unistd.h"
|
|
#include "libc/math.h"
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/str/str.h"
|
|
#include "libc/sysv/consts/termios.h"
|
|
|
|
/**
|
|
* @fileoverview Demo of program crash reporting with Bare Metal VGA TTY.
|
|
*
|
|
* make -j8 o//examples/vga2.com
|
|
* qemu-system-x86_64 -hda o//examples/vga2.com -serial stdio
|
|
*/
|
|
|
|
STATIC_YOINK("vga_console");
|
|
STATIC_YOINK("_idt");
|
|
|
|
int main(int argc, char *argv[]) {
|
|
volatile int x = 1;
|
|
volatile int y = 2;
|
|
printf("\e[92;44mHello World!\e[0m %d\n", 1 / (x + y - 3));
|
|
for (;;);
|
|
}
|