menu: Do not ignore key pressed during countdown
This commit is contained in:
parent
fed6645044
commit
562e3c7c88
6
Makefile
6
Makefile
@ -42,7 +42,7 @@ echfs-test: test.img
|
|||||||
echfs-utils -m -p0 test.img import test/limine.cfg limine.cfg
|
echfs-utils -m -p0 test.img import test/limine.cfg limine.cfg
|
||||||
echfs-utils -m -p0 test.img import test/bg.bmp bg.bmp
|
echfs-utils -m -p0 test.img import test/bg.bmp bg.bmp
|
||||||
./limine-install limine.bin test.img
|
./limine-install limine.bin test.img
|
||||||
qemu-system-x86_64 -net none -smp 4 -hda test.img -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.img -debugcon stdio
|
||||||
|
|
||||||
ext2-test: test.img
|
ext2-test: test.img
|
||||||
$(MAKE) -C test
|
$(MAKE) -C test
|
||||||
@ -60,7 +60,7 @@ ext2-test: test.img
|
|||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
./limine-install limine.bin test.img
|
./limine-install limine.bin test.img
|
||||||
qemu-system-x86_64 -hda test.img -smp 4 -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.img -debugcon
|
||||||
|
|
||||||
fat32-test: test.img
|
fat32-test: test.img
|
||||||
$(MAKE) -C test
|
$(MAKE) -C test
|
||||||
@ -78,4 +78,4 @@ fat32-test: test.img
|
|||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
./limine-install limine.bin test.img
|
./limine-install limine.bin test.img
|
||||||
qemu-system-x86_64 -hda test.img -smp 4 -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.img -debugcon
|
||||||
|
BIN
limine.bin
BIN
limine.bin
Binary file not shown.
@ -74,10 +74,8 @@ uint64_t strtoui16(const char *s) {
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getchar(void) {
|
int getchar_internal(uint32_t eax) {
|
||||||
struct rm_regs r = {0};
|
switch ((eax >> 8) & 0xff) {
|
||||||
rm_int(0x16, &r, &r);
|
|
||||||
switch ((r.eax >> 8) & 0xff) {
|
|
||||||
case 0x4b:
|
case 0x4b:
|
||||||
return GETCHAR_CURSOR_LEFT;
|
return GETCHAR_CURSOR_LEFT;
|
||||||
case 0x4d:
|
case 0x4d:
|
||||||
@ -87,7 +85,13 @@ int getchar(void) {
|
|||||||
case 0x50:
|
case 0x50:
|
||||||
return GETCHAR_CURSOR_DOWN;
|
return GETCHAR_CURSOR_DOWN;
|
||||||
}
|
}
|
||||||
return (char)(r.eax & 0xff);
|
return (char)(eax & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getchar(void) {
|
||||||
|
struct rm_regs r = {0};
|
||||||
|
rm_int(0x16, &r, &r);
|
||||||
|
return getchar_internal(r.eax);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gets_reprint_string(int x, int y, const char *s, size_t limit) {
|
static void gets_reprint_string(int x, int y, const char *s, size_t limit) {
|
||||||
|
@ -9,6 +9,8 @@ int_08_isr:
|
|||||||
iret
|
iret
|
||||||
bits 32
|
bits 32
|
||||||
|
|
||||||
|
extern getchar_internal
|
||||||
|
|
||||||
global pit_sleep_and_quit_on_keypress
|
global pit_sleep_and_quit_on_keypress
|
||||||
pit_sleep_and_quit_on_keypress:
|
pit_sleep_and_quit_on_keypress:
|
||||||
; Hook int 0x08
|
; Hook int 0x08
|
||||||
@ -69,7 +71,6 @@ pit_sleep_and_quit_on_keypress:
|
|||||||
; on keypress
|
; on keypress
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
int 0x16
|
int 0x16
|
||||||
mov eax, 1
|
|
||||||
jmp .done
|
jmp .done
|
||||||
|
|
||||||
.timeout:
|
.timeout:
|
||||||
@ -102,4 +103,8 @@ pit_sleep_and_quit_on_keypress:
|
|||||||
mov edx, dword [0x80*4]
|
mov edx, dword [0x80*4]
|
||||||
mov dword [0x08*4], edx
|
mov dword [0x08*4], edx
|
||||||
|
|
||||||
|
push eax
|
||||||
|
call getchar_internal
|
||||||
|
pop edx
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
@ -202,6 +202,19 @@ static void escape_parse(char c) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'K':
|
||||||
|
switch (esc_value0) {
|
||||||
|
case 2: {
|
||||||
|
int x = get_cursor_pos_x();
|
||||||
|
int y = get_cursor_pos_y();
|
||||||
|
set_cursor_pos(0, y);
|
||||||
|
for (int i = 0; i < cols; i++)
|
||||||
|
raw_putchar(' ');
|
||||||
|
set_cursor_pos(x, y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
escape = 0;
|
escape = 0;
|
||||||
raw_putchar('?');
|
raw_putchar('?');
|
||||||
|
@ -134,23 +134,26 @@ refresh:
|
|||||||
if (max_entries == 0)
|
if (max_entries == 0)
|
||||||
panic("Config contains no entries.");
|
panic("Config contains no entries.");
|
||||||
|
|
||||||
print("\n");
|
print("\nArrows to choose, enter to select, 'e' to edit command line.");
|
||||||
|
|
||||||
|
int c;
|
||||||
|
|
||||||
if (skip_timeout == false) {
|
if (skip_timeout == false) {
|
||||||
|
print("\n\n");
|
||||||
for (int i = timeout; i; i--) {
|
for (int i = timeout; i; i--) {
|
||||||
print("\rBooting automatically in %u, press any key to stop the countdown...", i);
|
print("\rBooting automatically in %u, press any key to stop the countdown...", i);
|
||||||
if (pit_sleep_and_quit_on_keypress(18)) {
|
if ((c = pit_sleep_and_quit_on_keypress(18))) {
|
||||||
skip_timeout = true;
|
skip_timeout = true;
|
||||||
goto refresh;
|
print("\e[2K\r\e[2A");
|
||||||
|
goto timeout_aborted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
goto autoboot;
|
goto autoboot;
|
||||||
}
|
}
|
||||||
|
|
||||||
print("Arrows to choose, enter to select, 'e' to edit command line.");
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
int c = getchar();
|
c = getchar();
|
||||||
|
timeout_aborted:
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case GETCHAR_CURSOR_UP:
|
case GETCHAR_CURSOR_UP:
|
||||||
if (--selected_entry == -1)
|
if (--selected_entry == -1)
|
||||||
|
@ -21,3 +21,11 @@ PROTOCOL=stivale2
|
|||||||
KERNEL_PARTITION=0
|
KERNEL_PARTITION=0
|
||||||
KERNEL_PATH=boot/test.elf
|
KERNEL_PATH=boot/test.elf
|
||||||
KERNEL_CMDLINE=something
|
KERNEL_CMDLINE=something
|
||||||
|
|
||||||
|
:MyOS 1
|
||||||
|
|
||||||
|
PROTOCOL=stivale2
|
||||||
|
|
||||||
|
KERNEL_PARTITION=0
|
||||||
|
KERNEL_PATH=boot/test.elf
|
||||||
|
KERNEL_CMDLINE=something
|
||||||
|
Loading…
Reference in New Issue
Block a user