From 39f7dba22948bb4eb2f50db9ad7d764bef40b744 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Tue, 26 Dec 2023 20:46:02 +0100 Subject: [PATCH] Some minor improvements --- other/editor.png | Bin 34292 -> 34701 bytes src/boot.asm | 9 ++++++++- src/fs/edit.asm | 9 ++++++--- src/kernel.asm | 7 ++++--- src/lib/print.asm | 21 ++++++++++++++++++--- 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/other/editor.png b/other/editor.png index 0a3fe94d30ea62e0935124ac603ba88037f19de9..c32203094c86cba5ff03fb55aabfd75c399fd24a 100644 GIT binary patch literal 34701 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 diff --git a/src/boot.asm b/src/boot.asm index a57c8bb..604b675 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -68,7 +68,14 @@ start: mov bl, byte [driveNumber] - ; Far jump to the kernel + ; Setup video mode + mov ax, 0x0003 + int 0x10 + mov ah, 0x0b + mov bx, 0x0001 + int 0x10 + + ; Far jump to the kernel (never returns) jmp KERNEL_LOC:0x0000 readFail: diff --git a/src/fs/edit.asm b/src/fs/edit.asm index faad2ee..24b72ae 100644 --- a/src/fs/edit.asm +++ b/src/fs/edit.asm @@ -2,7 +2,7 @@ launch: pusha - call resetTextMode + call clearText mov di, 0x0e60 ; Offset in vidmem (2nd to last line) mov si, statusBarMsg @@ -36,7 +36,7 @@ getHexCh: mov [hexByte], al jmp getHexCh .putByte: - cmp di, hexCode+256 + cmp di, hexCode+256 jge getHexCh ; Max length reached rol byte [hexByte], 4 or byte [hexByte], al @@ -60,6 +60,9 @@ getHexCh: call print jmp getHexCh .runInput: + mov si, runMsg + call print + pusha call hexCode ; Call the code popa @@ -101,12 +104,12 @@ return: jmp 0x2000:0x0000 ; - Includes - -%include "./src/lib/screen.asm" %include "./src/lib/print.asm" ; ------------ statusBarMsg: db " -- HEX -- ", 0 controlsMsg: db "'$' to execute code; '!' to quit", 0 +runMsg: db ENDL, ENDL, 0 ranMsg: db ENDL, ENDL, " - Finished Execution - ", ENDL, 0 backChars: db 8,8,8,' ',8,8,0 diff --git a/src/kernel.asm b/src/kernel.asm index a32b68d..9d10f94 100644 --- a/src/kernel.asm +++ b/src/kernel.asm @@ -9,6 +9,7 @@ start: xor bx, bx call resetTextMode + call clearText ; Print start message mov si, startMsg @@ -84,7 +85,7 @@ runCommand: mov di, clearCmd call .cmp - je clearScreen + je clear mov di, exitCmd call .cmp @@ -239,8 +240,8 @@ help: ; ; Clears the screen ; -clearScreen: - call resetTextMode +clear: + call clearText jmp input ; diff --git a/src/lib/print.asm b/src/lib/print.asm index 1da7901..e32255f 100644 --- a/src/lib/print.asm +++ b/src/lib/print.asm @@ -78,11 +78,26 @@ printHexByte: hexString: db "0x0000", 0 ; -; Clears the screen +; Clears the screen in text mode +; Assumes VGA text 3 - 80x25, 16 color ; -clear: +clearText: pusha - ; TODO: Make this function + push es + mov ax, 0x0b800 + mov es, ax + xor di, di ; es:di - b800:0000 + + mov al, ' ' ; Fill with spaces + mov ah, 0x17 ; White on blue + mov cx, 80*25 + rep stosw + + mov ah, 2 + xor dx, dx ; Set cursor to 0,0 + int 0x10 + + pop es popa ret