From c015d443f6b7fa884c2331fc0c142fc7288d2b9a Mon Sep 17 00:00:00 2001 From: Arthur Beck Date: Sat, 25 Jan 2025 11:10:03 -0600 Subject: [PATCH] Worked more on EGA text mode output. Made good progress. --- kernel/config.aphro.example | 4 ++-- kernel/grub/boot/aphrodite.kernel | Bin 33976 -> 34544 bytes kernel/grub/boot/grub/grub.cfg | 4 ++-- kernel/kernel.flat | Bin 33976 -> 34544 bytes kernel/src/include/arch/x86/egatext.rs | 27 ++++++++++++++++++++++++- kernel/src/include/arch/x86/output.rs | 4 ++++ kernel/src/include/arch/x86/ports.rs | 2 +- kernel/src/internal/arch/x86/entry.rs | 7 ++++--- 8 files changed, 39 insertions(+), 9 deletions(-) diff --git a/kernel/config.aphro.example b/kernel/config.aphro.example index a91c120..387c61c 100644 --- a/kernel/config.aphro.example +++ b/kernel/config.aphro.example @@ -1,5 +1,5 @@ -# config.aphro for aphrodite devel-bc19d1a-out-of-tree -CFG_VERSION=devel-bc19d1a-out-of-tree +# config.aphro for aphrodite devel-2df6e24-out-of-tree +CFG_VERSION=devel-2df6e24-out-of-tree CONT_WITH_DIFFERENT_VERSION=false # Begin metadata diff --git a/kernel/grub/boot/aphrodite.kernel b/kernel/grub/boot/aphrodite.kernel index be1bb802da13cdfa796ad74b342fc139626c6095..048f87c99f2f27c6eb981629d9f55d4e2b9230ed 100755 GIT binary patch delta 8180 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 diff --git a/kernel/grub/boot/grub/grub.cfg b/kernel/grub/boot/grub/grub.cfg index 38cb25a..ba863f4 100644 --- a/kernel/grub/boot/grub/grub.cfg +++ b/kernel/grub/boot/grub/grub.cfg @@ -1,8 +1,8 @@ set timeout=15 set default=0 -menuentry "Aphrodite" --class aphrodite --class kernel --class os $menuentry_id_option 'aphrodite-basic-devel-bc19d1a-out-of-tree' { - echo 'Loading Aphrodite aphrodite-devel-bc19d1a-out-of-tree ...' +menuentry "Aphrodite" --class aphrodite --class kernel --class os $menuentry_id_option 'aphrodite-basic-devel-2df6e24-out-of-tree' { + echo 'Loading Aphrodite aphrodite-devel-2df6e24-out-of-tree ...' multiboot2 /boot/aphrodite.kernel boot } \ No newline at end of file diff --git a/kernel/kernel.flat b/kernel/kernel.flat index be1bb802da13cdfa796ad74b342fc139626c6095..048f87c99f2f27c6eb981629d9f55d4e2b9230ed 100755 GIT binary patch delta 8180 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 diff --git a/kernel/src/include/arch/x86/egatext.rs b/kernel/src/include/arch/x86/egatext.rs index 6d0200b..e97f0f2 100644 --- a/kernel/src/include/arch/x86/egatext.rs +++ b/kernel/src/include/arch/x86/egatext.rs @@ -82,4 +82,29 @@ impl FramebufferInfo { } Ok((x, y)) } -} \ No newline at end of file + + /// Disables the cursor. + pub fn disable_cursor(self) { + super::ports::outb(0x3D4, 0x0A); + super::ports::outb(0x3D5, 0x20); + } + + /// Enables the cursor. + pub fn enable_cursor(self, start_scan: u8, end_scan: u8) { + super::ports::outb(0x3D4, 0x0A); + super::ports::outb(0x3D5, (super::ports::inb(0x3D5) & 0xC0) | start_scan); + + super::ports::outb(0x3D4, 0x0B); + super::ports::outb(0x3D5, (super::ports::inb(0x3D5) & 0xE0) | end_scan); + } + + /// Sets the cursor's location. + pub fn set_cursor_location(self, pos: (u32, u32)) { + let addr = pos.1 * self.width + pos.0; + + super::ports::outb(0x3D4, 0x0F); + super::ports::outb(0x3D5, (addr & 0xFF) as u8); + super::ports::outb(0x3D4, 0x0E); + super::ports::outb(0x3D5, ((addr >> 8) & 0xFF) as u8); + } +} diff --git a/kernel/src/include/arch/x86/output.rs b/kernel/src/include/arch/x86/output.rs index 95e046f..2d7887d 100644 --- a/kernel/src/include/arch/x86/output.rs +++ b/kernel/src/include/arch/x86/output.rs @@ -123,6 +123,7 @@ macro_rules! message_funcs { OUTPUT_TERM_POSITION = info.write_str(OUTPUT_TERM_POSITION, $prefix, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION = info.write_str(OUTPUT_TERM_POSITION, s, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION.1 += 1; + OUTPUT_TERM_POSITION.0 = 0; } Ok(()) } @@ -147,6 +148,7 @@ macro_rules! message_funcs { OUTPUT_TERM_POSITION = info.write_str(OUTPUT_TERM_POSITION, $prefix, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION = info.write_bytes(OUTPUT_TERM_POSITION, s, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION.1 += 1; + OUTPUT_TERM_POSITION.0 = 0; } Ok(()) } @@ -188,6 +190,7 @@ macro_rules! message_funcs { } OUTPUT_TERM_POSITION = info.write_str(OUTPUT_TERM_POSITION, s, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION.1 += 1; + OUTPUT_TERM_POSITION.0 = 0; } Ok(()) } @@ -210,6 +213,7 @@ macro_rules! message_funcs { } OUTPUT_TERM_POSITION = info.write_bytes(OUTPUT_TERM_POSITION, s, WHITE_ON_BLACK)?; OUTPUT_TERM_POSITION.1 += 1; + OUTPUT_TERM_POSITION.0 = 0; } Ok(()) } diff --git a/kernel/src/include/arch/x86/ports.rs b/kernel/src/include/arch/x86/ports.rs index cc15d09..36a040b 100644 --- a/kernel/src/include/arch/x86/ports.rs +++ b/kernel/src/include/arch/x86/ports.rs @@ -26,7 +26,7 @@ pub fn inb(port: u16) -> u8 { let out; unsafe { asm!( - "in {}, {1:x}", out(reg_byte) out, in(reg) port + "in al, dx", out("al") out, in("dx") port ) } out diff --git a/kernel/src/internal/arch/x86/entry.rs b/kernel/src/internal/arch/x86/entry.rs index c2a1736..f915cb6 100644 --- a/kernel/src/internal/arch/x86/entry.rs +++ b/kernel/src/internal/arch/x86/entry.rs @@ -278,10 +278,11 @@ extern "C" fn _start() -> ! { bpp: framebuffer_info.bpp }; ega.clear_screen(BLACK_ON_BLACK); + ega.enable_cursor(14, 15); + ega.set_cursor_location((0, 0)); + tdebugsln("Testing EGA Text framebuffer...", ega).unwrap(); + tdebugsln("Testing EGA Text framebuffer...", ega).unwrap(); tdebugsln("Testing EGA Text framebuffer...", ega).unwrap(); - for _ in 0..100000000 { - asm!("nop"); - } }, _ => { unreachable!();