Added fun fault recovery :3 (I think I spotted a race condition in exception handling during testing, but whatever, that can wait)

This commit is contained in:
Lucia Ceionia 2023-02-02 01:44:35 -06:00
parent ce771b19bb
commit 7937de6ef0
2 changed files with 31 additions and 1 deletions

View File

@ -65,6 +65,7 @@ extern struct Int13DiskPacket_t v86disk_addr_packet;
extern void enter_v86(uint32_t ss, uint32_t esp, uint32_t cs, uint32_t eip); extern void enter_v86(uint32_t ss, uint32_t esp, uint32_t cs, uint32_t eip);
extern void v86Test(); extern void v86Test();
extern void v86TransFlag();
extern void v86GfxMode(); extern void v86GfxMode();
extern void v86TextMode(); extern void v86TextMode();
extern void v86DiskRead(); extern void v86DiskRead();
@ -120,10 +121,14 @@ void error_environment() {
ensure_v86env(); ensure_v86env();
FARPTR v86_entry = i386LinearToFp(v86TextMode); FARPTR v86_entry = i386LinearToFp(v86TextMode);
enter_v86(0x8000, 0xFF00, FP_SEG(v86_entry), FP_OFF(v86_entry)); enter_v86(0x8000, 0xFF00, FP_SEG(v86_entry), FP_OFF(v86_entry));
printStr("Oh noes!!! System error! ;c", &error_screen[80]); printStr("Oh noes!!! System error! ;c Press E for a fun recovery :3", &error_screen[80]);
uint16_t *vga_text = ((uint16_t*)0xB8000); uint16_t *vga_text = ((uint16_t*)0xB8000);
for (int i = 0; i < 80*50; i++) for (int i = 0; i < 80*50; i++)
vga_text[i] = error_screen[i]; vga_text[i] = error_screen[i];
uint8_t key;
for (key = get_key(); key != 'e' && key != 'E'; key = get_key());
v86_entry = i386LinearToFp(v86TransFlag);
enter_v86(0x8000, 0xFF00, FP_SEG(v86_entry), FP_OFF(v86_entry));
} }
/* /*

View File

@ -45,6 +45,31 @@ int 3
int 0x30 ; exit int 0x30 ; exit
jmp $ jmp $
global v86TransFlag
v86TransFlag:
push cs
pop es
mov ax, 0x13
int 0x10
mov ax,0x1012
xor bx,bx
mov cx,5
mov dx,.c
int 0x10
push 0xa000
pop es
xor di,di
xor ax,ax
.loop:
mov cx, 12800
rep stosb
inc ax
cmp ax,5
jl .loop
int 0x30
jmp $
.c: db `\0263>=*.\?\?\?=*.\0263>`
global v86GfxMode global v86GfxMode
v86GfxMode: v86GfxMode:
mov ax, 0x13 mov ax, 0x13