From e305764cde47f6a05ca5b39790141264d3155bd4 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Thu, 2 May 2024 11:09:05 +0200 Subject: [PATCH] Added setup screen on bootup. Also added src/config.asm, where you can configure some stuff --- other/setup.png | Bin 0 -> 9074 bytes src/config.asm | 7 ++++ src/stage2.asm | 100 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 other/setup.png create mode 100644 src/config.asm diff --git a/other/setup.png b/other/setup.png new file mode 100644 index 0000000000000000000000000000000000000000..148b2806a1a32db9a02fd8e75866738d3695f634 GIT binary patch literal 9074 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 0xffff) shit breaks + push cx + push ax + push dx + xor bx, bx + mov cx, 10 +.nextDigit: + xor ah, ah + int 0x16 + mov ah, 0x0e + + cmp al, 0x08 ; Backspace + je .backspace + cmp al, 0x0d ; Enter + je .enter + + cmp al, '0' ; Make sure user entered a number + jl .nextDigit + cmp al, '9' + jg .nextDigit + + int 0x10 ; Print the digit + + sub al, '0' ; Convert to integer + mov ah, 0 + imul bx, bx, 10 ; bx *= 10 + add bx, ax ; bx += ax + jmp .nextDigit + +.backspace: + cmp bx, 0 ; Check if we can backspace + je .nextDigit + int 0x10 ; go back one space + + mov ax, bx + xor dx, dx + div cx ; dx:ax / cx -> ax = result, dx = remainder + mov bx, ax + + mov ah, 0x0e + mov al, ' ' + int 0x10 + mov al, 0x08 + int 0x10 + + jmp .nextDigit + +.enter: + pop dx + pop ax + pop cx + ret + ;; 32 Bit entry code [bits 32] protected_start: @@ -267,6 +347,11 @@ vbeErr: db "VBE Error!", 0 modeNotFoundErr: db "VBE Mode not found!", 0 acpiFuncErr: db "ACPI Function not supported!", 0 +gfxChooseMsg: db "Please enter desired values" ; No NULL terminator, we want to print gfxWidthMsg right after anyway +gfxWidthMsg: db 0x0a, 0x0d, "Width: ", 0 +gfxHeightMsg: db 0x0a, 0x0d, "Height: ", 0 +gfxBppMsg: db 0x0a, 0x0d, "Bits Per Pixel: ", 0 + ;; GDT GDT: .start: @@ -297,9 +382,16 @@ CODE_SEG equ GDT.codeDescriptor - GDT.start DATA_SEG equ GDT.dataDescriptor - GDT.start ;; VBE Stuff +%ifdef FORCE_RESOLUTION width: dw 1920 height: dw 1080 bpp: db 32 +%else +width: dw 0 +height: dw 0 +bpp: db 0 +%endif + offset: dw 0 _segment: dw 0 ; segment is a keyword mode: dw 0