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 be1bb80..048f87c 100755 Binary files a/kernel/grub/boot/aphrodite.kernel and b/kernel/grub/boot/aphrodite.kernel differ 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 be1bb80..048f87c 100755 Binary files a/kernel/kernel.flat and b/kernel/kernel.flat differ 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!();