diff --git a/Makefile b/Makefile index 6e52cab..d39da74 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# BrewOS Makefile +# BoredOS Makefile # Target Architecture: x86_64 # Host: macOS @@ -11,8 +11,8 @@ SRC_DIR = src/kernel BUILD_DIR = build ISO_DIR = iso_root -KERNEL_ELF = $(BUILD_DIR)/brewos.elf -ISO_IMAGE = brewos.iso +KERNEL_ELF = $(BUILD_DIR)/boredos.elf +ISO_IMAGE = boredos.iso C_SOURCES = $(wildcard $(SRC_DIR)/*.c) CLI_APP_SOURCES = $(wildcard $(SRC_DIR)/cli_apps/*.c) diff --git a/README.md b/README.md index 359d7f9..830bd36 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -# Brew OS 1.45 Beta -BrewOS is now in a Beta stage as i have brought over all apps from brewkernel and have made the DE a lot more usable and stable. +# BoredOS 1.50 Beta +BoredOS is now in a Beta stage as i have brought over all apps from brewkernel and have made the DE a lot more usable and stable. -
-Brew Kernel is a simple x86_64 hobbyist operating system. +
+BoredOS is a simple x86_64 hobbyist operating system. It features a DE (and WM), a FAT32 filesystem, customizable UI and much much more! -![Screenshot 2026-02-10 at 18 59 10](https://github.com/user-attachments/assets/d8602e1a-dc76-4997-a91f-999b23ba3fc3) +![Screenshot](screenshot.jpg) *this screenshot might be outdated* ## Features - Drag and drop mouse centered UI - Customizable UI - Basic Networking Stack -- Brew WM +- Bored WM - Fat 32 FS - 64-bit long mode support - Multiboot2 compliant @@ -29,7 +29,7 @@ It features a DE (and WM), a FAT32 filesystem, customizable UI and much much mor ## Prerequisites -To build BrewOS, you'll need the following tools installed: +To build BoredOS, you'll need the following tools installed: - **x86_64 ELF Toolchain**: `x86_64-elf-gcc`, `x86_64-elf-ld` - **NASM**: Netwide Assembler for compiling assembly code @@ -52,12 +52,12 @@ make This will: 1. Compile all kernel C sources and assembly files 2. Link the kernel ELF binary -3. Generate a bootable ISO image (`brewos.iso`) +3. Generate a bootable ISO image (`boredos.iso`) The build output is organized as follows: - Compiled object files: `build/` - ISO root filesystem: `iso_root/` -- Final ISO image: `brewos.iso` +- Final ISO image: `boredos.iso` ## Running @@ -71,14 +71,14 @@ make run Or manually: ```sh -qemu-system-x86_64 -m 2G -serial stdio -cdrom brewos.iso -boot d +qemu-system-x86_64 -m 2G -serial stdio -cdrom boredos.iso -boot d ``` ### Running on Real Hardware *Warning: This is at YOUR OWN RISK. This software comes with ZERO warranty and may break your system.* -1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `brewos.iso` to a USB drive +1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `boredos.iso` to a USB drive 2. **Prepare the system**: - Enable legacy (BIOS) boot in your system BIOS/UEFI settings @@ -130,7 +130,7 @@ qemu-system-x86_64 -m 2G -serial stdio -cdrom brewos.iso -boot d ## This project was previously labeled as "BrewKernel" -Brewkernel was a text only very simple (and messy) project i started 3 years ago. It was my first work in OSDev and i absolutely loved it. It sadly just got too messy and i myself couldn't understand my own code anymore. About a year ago i started work on BrewOS, and pushed a *"working"* version of it a few days ago as of writing this *(Feb. 10 2026)* +Brewkernel was a text only very simple (and messy) project i started 3 years ago. It was my first work in OSDev and i absolutely loved it. It sadly just got too messy and i myself couldn't understand my own code anymore. About a year ago i started work on BoredOS, and pushed a *"working"* version of it a few days ago as of writing this *(Feb. 10 2026)* Brewkernel has already been deprecated and will not be accepting any pull requests or fix any issues as it is now a public archive. Thanks to everyone who helped me with Brewkernel, even if it were just ideas, and intend to keep working on this for the forseeable future! @@ -143,7 +143,7 @@ This program is free software: you can redistribute it and/or modify it under th NOTICE ------ -This product includes software developed by Chris ("boreddevnl") as part of the BrewKernel project. +This product includes software developed by Chris ("boreddevnl") as part of the BoredOS (Previously Brewkernel/BrewOS) project. Copyright (C) 2024–2026 Chris / boreddevnl (previously boreddevhq) diff --git a/bored.svg b/bored.svg new file mode 100644 index 0000000..ef431d2 --- /dev/null +++ b/bored.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/boredos.iso b/boredos.iso new file mode 100644 index 0000000..7c29f51 Binary files /dev/null and b/boredos.iso differ diff --git a/brewos.iso b/brewos.iso index 82ae834..8c0acab 100644 Binary files a/brewos.iso and b/brewos.iso differ diff --git a/build/about.o b/build/about.o index 76f1a1a..dde6693 100644 Binary files a/build/about.o and b/build/about.o differ diff --git a/build/brewos.elf b/build/boredos.elf similarity index 99% rename from build/brewos.elf rename to build/boredos.elf index ba71df0..3cc7fb6 100755 Binary files a/build/brewos.elf and b/build/boredos.elf differ diff --git a/build/cli_apps/about.o b/build/cli_apps/about.o deleted file mode 100644 index fce9597..0000000 Binary files a/build/cli_apps/about.o and /dev/null differ diff --git a/build/cli_apps/beep.o b/build/cli_apps/beep.o index 4143f9b..de56198 100644 Binary files a/build/cli_apps/beep.o and b/build/cli_apps/beep.o differ diff --git a/build/cli_apps/boredver.o b/build/cli_apps/boredver.o new file mode 100644 index 0000000..14bd0ab Binary files /dev/null and b/build/cli_apps/boredver.o differ diff --git a/build/cli_apps/cc.o b/build/cli_apps/cc.o index 92046fd..96efd10 100644 Binary files a/build/cli_apps/cc.o and b/build/cli_apps/cc.o differ diff --git a/build/cli_apps/cli_utils.o b/build/cli_apps/cli_utils.o index c57edcb..8e960d6 100644 Binary files a/build/cli_apps/cli_utils.o and b/build/cli_apps/cli_utils.o differ diff --git a/build/cli_apps/cowsay.o b/build/cli_apps/cowsay.o index 9ba4f1a..5ddb92e 100644 Binary files a/build/cli_apps/cowsay.o and b/build/cli_apps/cowsay.o differ diff --git a/build/cli_apps/fs_commands.o b/build/cli_apps/fs_commands.o index 7b3bc60..37d9697 100644 Binary files a/build/cli_apps/fs_commands.o and b/build/cli_apps/fs_commands.o differ diff --git a/build/cli_apps/help.o b/build/cli_apps/help.o index 7fb0a5e..b02e8fc 100644 Binary files a/build/cli_apps/help.o and b/build/cli_apps/help.o differ diff --git a/build/cli_apps/letithappen.o b/build/cli_apps/letithappen.o deleted file mode 100644 index a23d4c3..0000000 Binary files a/build/cli_apps/letithappen.o and /dev/null differ diff --git a/build/cli_apps/license.o b/build/cli_apps/license.o deleted file mode 100644 index 6fb7762..0000000 Binary files a/build/cli_apps/license.o and /dev/null differ diff --git a/build/cli_apps/man.o b/build/cli_apps/man.o index 7a28400..8faff42 100644 Binary files a/build/cli_apps/man.o and b/build/cli_apps/man.o differ diff --git a/build/cli_apps/readtheman.o b/build/cli_apps/readtheman.o index 162b0f6..11f2822 100644 Binary files a/build/cli_apps/readtheman.o and b/build/cli_apps/readtheman.o differ diff --git a/build/cli_apps/reboot.o b/build/cli_apps/reboot.o index 8a4114c..59778e6 100644 Binary files a/build/cli_apps/reboot.o and b/build/cli_apps/reboot.o differ diff --git a/build/cli_apps/shutdown.o b/build/cli_apps/shutdown.o index 0e2b9f7..6064f43 100644 Binary files a/build/cli_apps/shutdown.o and b/build/cli_apps/shutdown.o differ diff --git a/build/cli_apps/sweden.o b/build/cli_apps/sweden.o index cceabce..349dae6 100644 Binary files a/build/cli_apps/sweden.o and b/build/cli_apps/sweden.o differ diff --git a/build/cli_apps/txtedit.o b/build/cli_apps/txtedit.o index 07ce268..c7aa630 100644 Binary files a/build/cli_apps/txtedit.o and b/build/cli_apps/txtedit.o differ diff --git a/build/cmd.o b/build/cmd.o index f0d4a9a..16f8e25 100644 Binary files a/build/cmd.o and b/build/cmd.o differ diff --git a/build/control_panel.o b/build/control_panel.o index f6c9857..3540f8e 100644 Binary files a/build/control_panel.o and b/build/control_panel.o differ diff --git a/build/dns.o b/build/dns.o index 3f03630..bf16f6f 100644 Binary files a/build/dns.o and b/build/dns.o differ diff --git a/build/explorer.o b/build/explorer.o index cc74a93..671b525 100644 Binary files a/build/explorer.o and b/build/explorer.o differ diff --git a/build/graphics.o b/build/graphics.o index 80db4a8..af4f4c0 100644 Binary files a/build/graphics.o and b/build/graphics.o differ diff --git a/build/http.o b/build/http.o index 099259c..2762ff9 100644 Binary files a/build/http.o and b/build/http.o differ diff --git a/build/icmp.o b/build/icmp.o index a66bf28..7a0e900 100644 Binary files a/build/icmp.o and b/build/icmp.o differ diff --git a/build/main.o b/build/main.o index d9be3e7..5b52f8f 100644 Binary files a/build/main.o and b/build/main.o differ diff --git a/build/network.o b/build/network.o index fdc7189..cf46caa 100644 Binary files a/build/network.o and b/build/network.o differ diff --git a/build/paint.o b/build/paint.o index b5664aa..3f1e41b 100644 Binary files a/build/paint.o and b/build/paint.o differ diff --git a/build/ps2.o b/build/ps2.o index 22fca5e..381b45e 100644 Binary files a/build/ps2.o and b/build/ps2.o differ diff --git a/build/vm.o b/build/vm.o index 860ac6f..32b0d49 100644 Binary files a/build/vm.o and b/build/vm.o differ diff --git a/build/wm.o b/build/wm.o index e757921..f920dfe 100644 Binary files a/build/wm.o and b/build/wm.o differ diff --git a/iso_root/README.md b/iso_root/README.md index 6529b18..2ef18f7 100644 --- a/iso_root/README.md +++ b/iso_root/README.md @@ -1,32 +1,35 @@ -# Brew OS 1.45 Beta -BrewOS is now in a Beta stage as i have brought over all apps from brewkernel and have made the DE a lot more usable and stable. - -## Brewkernel is now BrewOS! -Brewkernel will from now on be deprecated as it's core became too messy. I have built a less bloated kernel and wrote a DE above it, which is why it is now an OS instead of a kernel (in my opinion). - +# Bored OS 1.50 +BoredOS is now in a Beta stage as i have brought over all apps from brewkernel and have made the DE a lot more usable and stable.
-Brew Kernel is a simple x86_64 hobbyist operating system. +BoredOS is a simple x86_64 hobbyist operating system. It features a DE (and WM), a FAT32 filesystem, customizable UI and much much more! +![Screenshot 2026-02-10 at 18 59 10](https://github.com/user-attachments/assets/d8602e1a-dc76-4997-a91f-999b23ba3fc3) +*this screenshot might be outdated* + ## Features - Drag and drop mouse centered UI - Customizable UI - Basic Networking Stack -- Brew WM +- Bored WM - Fat 32 FS - 64-bit long mode support - Multiboot2 compliant - Text editor - Markdown Viewer - Minesweeper +- Markdown Viewer +- GUI Text editor +- Paint application - IDT - Ability to run on actual x86_64 hardware - CLI +- (Limited) C Compiler ## Prerequisites -To build BrewOS, you'll need the following tools installed: +To build BoredOS, you'll need the following tools installed: - **x86_64 ELF Toolchain**: `x86_64-elf-gcc`, `x86_64-elf-ld` - **NASM**: Netwide Assembler for compiling assembly code @@ -49,12 +52,12 @@ make This will: 1. Compile all kernel C sources and assembly files 2. Link the kernel ELF binary -3. Generate a bootable ISO image (`brewos.iso`) +3. Generate a bootable ISO image (`boredos.iso`) The build output is organized as follows: - Compiled object files: `build/` - ISO root filesystem: `iso_root/` -- Final ISO image: `brewos.iso` +- Final ISO image: `boredos.iso` ## Running @@ -68,14 +71,14 @@ make run Or manually: ```sh -qemu-system-x86_64 -m 2G -serial stdio -cdrom brewos.iso -boot d +qemu-system-x86_64 -m 2G -serial stdio -cdrom boredos.iso -boot d ``` ### Running on Real Hardware *Warning: This is at YOUR OWN RISK. This software comes with ZERO warranty and may break your system.* -1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `brewos.iso` to a USB drive +1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `boredos.iso` to a USB drive 2. **Prepare the system**: - Enable legacy (BIOS) boot in your system BIOS/UEFI settings @@ -126,6 +129,11 @@ qemu-system-x86_64 -m 2G -serial stdio -cdrom brewos.iso -boot d ### +## This project was previously labeled as "BrewKernel" +Brewkernel was a text only very simple (and messy) project i started 3 years ago. It was my first work in OSDev and i absolutely loved it. It sadly just got too messy and i myself couldn't understand my own code anymore. About a year ago i started work on BoredOS, and pushed a *"working"* version of it a few days ago as of writing this *(Feb. 10 2026)* +Brewkernel has already been deprecated and will not be accepting any pull requests or fix any issues as it is now a public archive. +Thanks to everyone who helped me with Brewkernel, even if it were just ideas, and intend to keep working on this for the forseeable future! + ## License Copyright (C) 2024-2026 boreddevnl @@ -135,7 +143,7 @@ This program is free software: you can redistribute it and/or modify it under th NOTICE ------ -This product includes software developed by Chris ("boreddevnl") as part of the BrewKernel project. +This product includes software developed by Chris ("boreddevnl") as part of the BoredOS (Previously Brewkernel/BrewOS) project. Copyright (C) 2024–2026 Chris / boreddevnl (previously boreddevhq) diff --git a/iso_root/brewos.elf b/iso_root/boredos.elf similarity index 99% rename from iso_root/brewos.elf rename to iso_root/boredos.elf index ba71df0..3cc7fb6 100755 Binary files a/iso_root/brewos.elf and b/iso_root/boredos.elf differ diff --git a/iso_root/limine.cfg b/iso_root/limine.cfg index dc8d714..da5b143 100644 --- a/iso_root/limine.cfg +++ b/iso_root/limine.cfg @@ -1,9 +1,9 @@ TIMEOUT=3 -:BrewOS +:BoredOS PROTOCOL=limine - KERNEL_PATH=boot:///brewos.elf + KERNEL_PATH=boot:///boredos.elf #FRAMEBUFFER_WIDTH=1280 #FRAMEBUFFER_HEIGHT=720 diff --git a/limine.cfg b/limine.cfg index dc8d714..da5b143 100644 --- a/limine.cfg +++ b/limine.cfg @@ -1,9 +1,9 @@ TIMEOUT=3 -:BrewOS +:BoredOS PROTOCOL=limine - KERNEL_PATH=boot:///brewos.elf + KERNEL_PATH=boot:///boredos.elf #FRAMEBUFFER_WIDTH=1280 #FRAMEBUFFER_HEIGHT=720 diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000..b0b8a89 Binary files /dev/null and b/screenshot.jpg differ diff --git a/src/kernel/about.c b/src/kernel/about.c index e51b0b3..1232482 100644 --- a/src/kernel/about.c +++ b/src/kernel/about.c @@ -5,35 +5,17 @@ Window win_about; -// Color definitions -#define COLOR_BLUE_LOGO 0xFF1E8AF5 -#define COLOR_GREEN_LOGO 0xFF6DD651 -#define COLOR_YELLOW_LOGO 0xFFF5BE34 -#define COLOR_RED_LOGO 0xFFF05456 -#define COLOR_PURPLE_LOGO 0xFFA65DC2 -#define COLOR_CYAN_LOGO 0xFF368DF7 - static void about_paint(Window *win) { int offset_x = win->x + 15; int offset_y = win->y + 35; - // Draw brewkernel ASCII logo - draw_string(offset_x, offset_y, "( (", COLOR_BLUE_LOGO); - - draw_string(offset_x, offset_y + 15, " ) )", COLOR_GREEN_LOGO); - - draw_string(offset_x, offset_y + 30, " ........", COLOR_YELLOW_LOGO); - - draw_string(offset_x, offset_y + 45, " | |]", COLOR_RED_LOGO); - - draw_string(offset_x, offset_y + 60, " \\ /", COLOR_PURPLE_LOGO); - - draw_string(offset_x, offset_y + 75, " `----'", COLOR_CYAN_LOGO); + + draw_boredos_logo(win->x + 60, offset_y, 4); // Version info - draw_string(offset_x, offset_y + 105, "BrewOS", COLOR_BLACK); - draw_string(offset_x, offset_y + 120, "BrewOS Version 1.45", COLOR_BLACK); - draw_string(offset_x, offset_y + 135, "Kernel Version 2.3.1", COLOR_BLACK); + draw_string(offset_x, offset_y + 105, "BoredOS", COLOR_BLACK); + draw_string(offset_x, offset_y + 120, "BoredOS Version 1.50", COLOR_BLACK); + draw_string(offset_x, offset_y + 135, "Kernel Version 2.4.0", COLOR_BLACK); // Copyright draw_string(offset_x, offset_y + 150, "(C) 2026 boreddevnl.", COLOR_BLACK); @@ -48,7 +30,7 @@ static void about_click(Window *win, int x, int y) { } void about_init(void) { - win_about.title = "About BrewOS"; + win_about.title = "About BoredOS"; win_about.x = 250; win_about.y = 180; win_about.w = 185; diff --git a/src/kernel/boot.asm b/src/kernel/boot.asm index f45af19..4720326 100644 --- a/src/kernel/boot.asm +++ b/src/kernel/boot.asm @@ -1,5 +1,4 @@ -; brew-os/src/kernel/boot.asm -; 64-bit Entry Point for BrewOS +; 64-bit Entry Point for BoredOS section .text global _start diff --git a/src/kernel/cli_apps/about.c b/src/kernel/cli_apps/about.c deleted file mode 100644 index 28e1d24..0000000 --- a/src/kernel/cli_apps/about.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "cli_utils.h" - -void cli_cmd_brewver(char *args) { - (void)args; - cli_write("BrewOS v1.45 Beta\n"); - cli_write("BrewOS Kernel V2.3.1 Beta\n"); -} diff --git a/src/kernel/cli_apps/boredver.c b/src/kernel/cli_apps/boredver.c new file mode 100644 index 0000000..5c9a795 --- /dev/null +++ b/src/kernel/cli_apps/boredver.c @@ -0,0 +1,7 @@ +#include "cli_utils.h" + +void cli_cmd_boredver(char *args) { + (void)args; + cli_write("BrewOS v1.50 Beta\n"); + cli_write("BrewOS Kernel V2.4.0 Beta\n"); +} diff --git a/src/kernel/cli_apps/cli_apps.h b/src/kernel/cli_apps/cli_apps.h index cf05359..9186949 100644 --- a/src/kernel/cli_apps/cli_apps.h +++ b/src/kernel/cli_apps/cli_apps.h @@ -11,11 +11,10 @@ void cli_cmd_reboot(char *args); void cli_cmd_shutdown(char *args); void cli_cmd_uptime(char *args); void cli_cmd_man(char *args); -void cli_cmd_license(char *args); void cli_cmd_txtedit(char *args); void cli_cmd_blind(char *args); void cli_cmd_readtheman(char *args); -void cli_cmd_brewver(char *args); +void cli_cmd_boredver(char *args); void cli_cmd_clear(char *args); void cli_cmd_exit(char *args); diff --git a/src/kernel/cli_apps/cowsay.c b/src/kernel/cli_apps/cowsay.c index f10782b..d85bc6d 100644 --- a/src/kernel/cli_apps/cowsay.c +++ b/src/kernel/cli_apps/cowsay.c @@ -1,7 +1,7 @@ #include "cli_utils.h" void cli_cmd_cowsay(char *args) { - if (!args || !*args) args = (char*)"Brew!"; + if (!args || !*args) args = (char*)"Bored!"; size_t len = cli_strlen(args); cli_write(" "); diff --git a/src/kernel/cli_apps/help.c b/src/kernel/cli_apps/help.c index 77cd82b..ee80669 100644 --- a/src/kernel/cli_apps/help.c +++ b/src/kernel/cli_apps/help.c @@ -6,7 +6,7 @@ void cli_cmd_help(char *args) { cli_write(" HELP - Display this help message\n"); cli_write(" DATE - Display current date and time\n"); cli_write(" CLEAR - Clear the screen\n"); - cli_write(" BREWVER - Gives version info\n"); + cli_write(" BOREDVER - Gives version info\n"); cli_write(" MATH - math (e.g. math + 1 2)\n"); cli_write(" MAN - Show user manual (interactive)\n"); cli_write(" LICENSE - Show license (interactive)\n"); @@ -16,4 +16,5 @@ void cli_cmd_help(char *args) { cli_write(" REBOOT - Reboot system\n"); cli_write(" SHUTDOWN - Shutdown system\n"); cli_write(" MEMINFO - Gives memory info\n"); + cli_write(" CC - C compiler\n"); } diff --git a/src/kernel/cli_apps/license.c b/src/kernel/cli_apps/license.c deleted file mode 100644 index 965de42..0000000 --- a/src/kernel/cli_apps/license.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "cli_utils.h" - -// Forward declaration from cmd.c -extern void pager_wrap_content(const char **lines, int count); -extern void pager_set_mode(void); - -const char* license_pages[] = { - " GNU GENERAL PUBLIC LICENSE", - " Version 3, 29 June 2007", - " Copyright (C) 2024-2026 boreddevnl", - "", - " (License text abbreviated for build size. See https://www.gnu.org/licenses/gpl-3.0.txt)", - "--- End of License ---" -}; -const int license_num_lines = sizeof(license_pages) / sizeof(char*); - -void cli_cmd_license(char *args) { - (void)args; - pager_wrap_content(license_pages, license_num_lines); - pager_set_mode(); -} diff --git a/src/kernel/cli_apps/man.c b/src/kernel/cli_apps/man.c index e2ae3a3..57f1c9d 100644 --- a/src/kernel/cli_apps/man.c +++ b/src/kernel/cli_apps/man.c @@ -5,37 +5,8 @@ extern void pager_wrap_content(const char **lines, int count); extern void pager_set_mode(void); const char* manual_pages[] = { - "BrewKernel User Manual", - "----------------------", - "", - "Welcome to the BrewKernel.", - "", - "== Features ==", - "* Ramdisk-based Filesystem: A simple in-memory filesystem.", - "* VGA Text Mode Driver: Full control over text/colors.", - "* PS/2 Keyboard Driver: Handles key presses.", - "* Simple CLI: A basic shell.", - "", - "== Available Commands ==", - "HELP: Displays a short list of available commands.", - "MAN: Shows this detailed user manual.", - "ABOUT: Displays information about the kernel.", - "MATH: A simple calculator.", - "DATE: Displays the current date and time.", - "TXTEDIT: A simple text editor with file path support.", - " USAGE: txtedit ", - " EXAMPLES:", - " txtedit file.txt (relative path in current directory)", - " txtedit /file.txt (absolute path in root)", - " txtedit /docs/note.txt (absolute path with subdirectories)", - " FEATURES: Create/Edit files, Save (to RAM), Navigation.", - "CLEAR: Clears the entire screen.", - "EXIT: Exits the CLI mode.", - "LICENSE: Displays the full GNU GPL v3.", - "COWSAY: Moo!", - "UPTIME: Shows how long the system has been running.", - "BEEP: Makes a beep sound.", - "--- End of Manual ---" + "No manual round here pal", + }; const int manual_num_lines = sizeof(manual_pages) / sizeof(char*); diff --git a/src/kernel/cmd.c b/src/kernel/cmd.c index 879a600..0e2d714 100644 --- a/src/kernel/cmd.c +++ b/src/kernel/cmd.c @@ -380,14 +380,12 @@ static const CommandEntry commands[] = { {"date", cli_cmd_date}, {"CLEAR", cli_cmd_clear}, {"clear", cli_cmd_clear}, - {"BREWVER", cli_cmd_brewver}, - {"brewver", cli_cmd_brewver}, + {"BOREDVER", cli_cmd_boredver}, + {"boredver", cli_cmd_boredver}, {"MATH", cli_cmd_math}, {"math", cli_cmd_math}, {"MAN", cli_cmd_man}, {"man", cli_cmd_man}, - {"LICENSE", cli_cmd_license}, - {"license", cli_cmd_license}, {"TXTEDIT", cli_cmd_txtedit}, {"txtedit", cli_cmd_txtedit}, {"UPTIME", cli_cmd_uptime}, @@ -924,7 +922,7 @@ static void cmd_key(Window *target, char c) { void cmd_reset(void) { // Reset terminal to fresh state cmd_screen_clear(); - cmd_write("BrewOS Command Prompt\n"); + cmd_write("BoredOS Command Prompt\n"); if (msg_count > 0) { cmd_write("You have "); cmd_write_int(msg_count); @@ -957,14 +955,14 @@ static void create_test_files(void) { fh = fat32_open("README.md", "w"); if (fh) { const char *content = - "# Brew OS 1.44 Beta\n\n" - "BrewOS is now in a Beta stage as i have brought over all apps from brewkernel and have made the DE a lot more usable and stable.\n" - "## Brewkernel is now BrewOS!\n" - "Brewkernel will from now on be deprecated as it's core became too messy. I have built a less bloated kernel and wrote a DE above it, which is why it is now an OS instead of a kernel (in my opinion).\n\n" - "Brew Kernel is a simple x86_64 hobbyist operating system.\n" + "# Bored OS 1.50\n\n" + "BoredOS is now in a Beta stage as i have brought over all apps from boredkernel and have made the DE a lot more usable and stable.\n" + "## Boredkernel is now BoredOS!\n" + "Boredkernel will from now on be deprecated as it's core became too messy. I have built a less bloated kernel and wrote a DE above it, which is why it is now an OS instead of a kernel (in my opinion).\n\n" + "Bored Kernel is a simple x86_64 hobbyist operating system.\n" "It features a DE (and WM), a FAT32 filesystem, customizable UI and much much more!\n\n" "## Features\n" - "- Brew WM\n" + "- Bored WM\n" "- Fat 32 FS\n" "- 64-bit long mode support\n" "- Multiboot2 compliant\n" @@ -973,7 +971,7 @@ static void create_test_files(void) { "- Ability to run on actual x86_64 hardware\n" "- CLI\n\n" "## Prerequisites\n\n" - "To build BrewOS, you'll need the following tools installed:\n\n" + "To build BoredOS, you'll need the following tools installed:\n\n" "- **x86_64 ELF Toolchain**: `x86_64-elf-gcc`, `x86_64-elf-ld`\n" "- **NASM**: Netwide Assembler for compiling assembly code\n" "- **xorriso**: For creating bootable ISO images\n" @@ -990,11 +988,11 @@ static void create_test_files(void) { "This will:\n" "1. Compile all kernel C sources and assembly files\n" "2. Link the kernel ELF binary\n" - "3. Generate a bootable ISO image (`brewos.iso`)\n\n" + "3. Generate a bootable ISO image (`boredos.iso`)\n\n" "The build output is organized as follows:\n" "- Compiled object files: `build/`\n" "- ISO root filesystem: `iso_root/`\n" - "- Final ISO image: `brewos.iso`\n\n" + "- Final ISO image: `boredos.iso`\n\n" "## Running\n\n" "### QEMU Emulation\n\n" "Run the kernel in QEMU:\n\n" @@ -1003,11 +1001,11 @@ static void create_test_files(void) { "```\n\n" "Or manually:\n" "```sh\n" - "qemu-system-x86_64 -m 2G -serial stdio -cdrom brewos.iso -boot d\n" + "qemu-system-x86_64 -m 2G -serial stdio -cdrom boredos.iso -boot d\n" "```\n\n" "### Running on Real Hardware\n\n" "*Warning: This is at YOUR OWN RISK. This software comes with ZERO warranty and may break your system.*\n\n" - "1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `brewos.iso` to a USB drive\n\n" + "1. **Create bootable USB**: Use [Balena Etcher](https://www.balena.io/etcher/) to flash `boredos.iso` to a USB drive\n\n" "2. **Prepare the system**:\n" " - Enable legacy (BIOS) boot in your system BIOS/UEFI settings\n" " - Disable Secure Boot if needed\n\n" @@ -1033,7 +1031,7 @@ static void create_test_files(void) { "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\n" "NOTICE\n" "------\n\n" - "This product includes software developed by Chris (\"boreddevnl\") as part of the BrewKernel project.\n\n" + "This product includes software developed by Chris (\"boreddevnl\") as part of the BoredOS project.\n\n" "Copyright (C) 2024–2026 Chris / boreddevnl (previously boreddevhq)\n\n" "All source files in this repository contain copyright and license\n" "headers that must be preserved in redistributions and derivative works.\n\n" diff --git a/src/kernel/control_panel.c b/src/kernel/control_panel.c index 30ce158..c19d5c9 100644 --- a/src/kernel/control_panel.c +++ b/src/kernel/control_panel.c @@ -3,6 +3,7 @@ #include #include "wm.h" #include "network.h" +#include "cli_apps/cli_utils.h" Window win_control_panel; @@ -12,12 +13,14 @@ Window win_control_panel; #define COLOR_BLUE_BG 0xFF000080 #define COLOR_PURPLE 0xFF800080 #define COLOR_GREY 0xFF454545 +#define MOUSE_BEIGE 0xFFD6D2C4 // Control panel state #define VIEW_MAIN 0 #define VIEW_WALLPAPER 1 #define VIEW_NETWORK 2 #define VIEW_DESKTOP 3 +#define VIEW_MOUSE 4 static int current_view = VIEW_MAIN; static char rgb_r[4] = ""; @@ -208,6 +211,22 @@ static void control_panel_paint_main(Window *win) { draw_rect(offset_x + 5, desk_offset_y + 6, 24, 1, COLOR_BLACK); draw_rect(offset_x + 5, desk_offset_y + 6, 1, 14, COLOR_BLACK); draw_string(offset_x + 40, desk_offset_y + 8, "Desktop", 0xFF000000); + + // Draw Mouse Icon + int mouse_offset_y = desk_offset_y + 35; + // Mouse body + draw_rect(offset_x + 17, mouse_offset_y, 1, 2, COLOR_BLACK); + draw_rect(offset_x + 16, mouse_offset_y - 2, 1, 2, COLOR_BLACK); + draw_rect(offset_x + 10, mouse_offset_y + 2, 15, 20, MOUSE_BEIGE); + draw_rect(offset_x + 10, mouse_offset_y + 2, 15, 1, COLOR_BLACK); + draw_rect(offset_x + 10, mouse_offset_y + 2, 1, 20, COLOR_BLACK); + draw_rect(offset_x + 24, mouse_offset_y + 2, 1, 20, COLOR_BLACK); + draw_rect(offset_x + 10, mouse_offset_y + 21, 15, 1, COLOR_BLACK); + // Buttons separator + draw_rect(offset_x + 10, mouse_offset_y + 8, 15, 1, COLOR_BLACK); + draw_rect(offset_x + 17, mouse_offset_y + 2, 1, 6, COLOR_BLACK); + + draw_string(offset_x + 40, mouse_offset_y + 8, "Mouse", 0xFF000000); } static void control_panel_paint_wallpaper(Window *win) { @@ -468,6 +487,30 @@ static void control_panel_paint_desktop(Window *win) { draw_button(offset_x + 180, section_y, 20, 20, "+", false); } +static void control_panel_paint_mouse(Window *win) { + int offset_x = win->x + 8; + int offset_y = win->y + 30; + + // Back button + draw_string(offset_x, offset_y, "< Back", 0xFF000080); + draw_string(offset_x, offset_y + 25, "Mouse Settings:", 0xFF000000); + + int section_y = offset_y + 60; + draw_string(offset_x, section_y, "Speed:", COLOR_BLACK); + + // Slider track + draw_rect(offset_x + 60, section_y + 8, 200, 2, COLOR_DKGRAY); + + // Slider knob (range 1-50, default 10) + int knob_x = offset_x + 60 + (mouse_speed - 1) * 190 / 49; + draw_button(knob_x, section_y, 10, 18, "", false); + + draw_string(offset_x + 270, section_y + 4, "x", COLOR_BLACK); + char speed_str[4]; + cli_itoa(mouse_speed, speed_str); + draw_string(offset_x + 280, section_y + 4, speed_str, COLOR_BLACK); +} + static void control_panel_paint(Window *win) { if (current_view == VIEW_MAIN) { control_panel_paint_main(win); @@ -477,6 +520,8 @@ static void control_panel_paint(Window *win) { control_panel_paint_network(win); } else if (current_view == VIEW_DESKTOP) { control_panel_paint_desktop(win); + } else if (current_view == VIEW_MOUSE) { + control_panel_paint_mouse(win); } } @@ -508,6 +553,13 @@ static void control_panel_handle_click(Window *win, int x, int y) { y >= desk_offset_y && y < desk_offset_y + 25) { current_view = VIEW_DESKTOP; } + + // Check mouse button + int mouse_offset_y = desk_offset_y + 35; + if (x >= offset_x + 5 && x < offset_x + 120 && + y >= mouse_offset_y && y < mouse_offset_y + 25) { + current_view = VIEW_MOUSE; + } } else if (current_view == VIEW_WALLPAPER) { int offset_x = 8; int offset_y = 30; @@ -862,6 +914,25 @@ static void control_panel_handle_click(Window *win, int x, int y) { desktop_max_cols++; wm_refresh_desktop(); } + } else if (current_view == VIEW_MOUSE) { + int offset_x = 8; + int offset_y = 30; + + // Back button + if (x >= offset_x && x < offset_x + 40 && y >= offset_y && y < offset_y + 15) { + current_view = VIEW_MAIN; + return; + } + + int section_y = offset_y + 60; + // Slider interaction + if (x >= offset_x + 60 && x <= offset_x + 260 && y >= section_y && y <= section_y + 20) { + int new_speed = 1 + (x - (offset_x + 60)) * 49 / 200; + if (new_speed < 1) new_speed = 1; + if (new_speed > 50) new_speed = 50; + mouse_speed = new_speed; + return; + } } } diff --git a/src/kernel/explorer.c b/src/kernel/explorer.c index 0d93ed6..71c2d0c 100644 --- a/src/kernel/explorer.c +++ b/src/kernel/explorer.c @@ -626,13 +626,16 @@ static int explorer_build_context_menu(Window *win, ExplorerContextItem *items_o if (is_dir) { items_out[count++] = (ExplorerContextItem){"New File", 101, true, COLOR_BLACK}; items_out[count++] = (ExplorerContextItem){"New Folder", 102, true, COLOR_BLACK}; - // Separator logic handled in paint - items_out[count++] = (ExplorerContextItem){"---", 0, false, 0}; // Marker - items_out[count++] = (ExplorerContextItem){"Blue", 200, true, COLOR_APPLE_BLUE}; - items_out[count++] = (ExplorerContextItem){"Red", 201, true, COLOR_RED}; - items_out[count++] = (ExplorerContextItem){"Yellow", 202, true, COLOR_APPLE_YELLOW}; - items_out[count++] = (ExplorerContextItem){"Green", 203, true, COLOR_APPLE_GREEN}; - items_out[count++] = (ExplorerContextItem){"Black", 204, true, COLOR_BLACK}; + + // Only show color options if it's NOT the Recycle Bin folder (i love hardcoding stuff cause it's lowk easier (cry about it)) + if (explorer_strcmp(state->items[state->file_context_menu_item].name, "RecycleBin") != 0) { + items_out[count++] = (ExplorerContextItem){"---", 0, false, 0}; // Marker + items_out[count++] = (ExplorerContextItem){"Blue", 200, true, COLOR_APPLE_BLUE}; + items_out[count++] = (ExplorerContextItem){"Red", 201, true, COLOR_RED}; + items_out[count++] = (ExplorerContextItem){"Yellow", 202, true, COLOR_APPLE_YELLOW}; + items_out[count++] = (ExplorerContextItem){"Green", 203, true, COLOR_APPLE_GREEN}; + items_out[count++] = (ExplorerContextItem){"Black", 204, true, COLOR_BLACK}; + } } } return count; @@ -938,6 +941,7 @@ static void explorer_paint(Window *win) { ExplorerState *state = (ExplorerState*)win->data; int offset_x = win->x + 4; int offset_y = win->y + 24; + DirtyRect dirty = graphics_get_dirty_rect(); // Fill background draw_rect(offset_x, offset_y, win->w - 8, win->h - 28, COLOR_LTGRAY); @@ -992,7 +996,13 @@ static void explorer_paint(Window *win) { explorer_draw_icon_label(item_x, item_y, display_name, (i == state->selected_item) ? COLOR_WHITE : COLOR_BLACK); } - graphics_clear_clipping(); + // Restore dirty-rect clipping instead of clearing it entirely. + // This ensures the context menu respects the dirty region. + if (dirty.active) { + graphics_set_clipping(dirty.x, dirty.y, dirty.w, dirty.h); + } else { + graphics_clear_clipping(); + } // Draw dropdown menu if visible if (state->dropdown_menu_visible) { diff --git a/src/kernel/graphics.c b/src/kernel/graphics.c index 7ae59fb..92a446d 100644 --- a/src/kernel/graphics.c +++ b/src/kernel/graphics.c @@ -238,6 +238,39 @@ void graphics_set_bg_pattern(const uint32_t *pattern) { g_use_pattern = true; } +void draw_boredos_logo(int x, int y, int scale) { + + static const uint8_t brewos_bmp[] = { + 0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0, // 0: Ears + 0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0, // 1: Ears + 1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1, // 2: Ears (Separated) + 1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1, // 3: Forehead / Ears + 1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1, // 4: Face + 1,1,2,2,2,1,1,2,2,1,1,2,2,2,1,1, // 5: Eyes start + 1,1,2,2,1,1,1,1,1,1,1,1,2,2,1,1, // 6: Eyes + 1,1,2,2,1,1,1,1,1,1,1,1,2,2,1,1, // 7: Eyes + 1,1,2,2,1,1,1,1,1,1,1,1,2,2,1,1, // 8: Eyes + 1,1,2,2,2,1,1,2,2,1,1,2,2,2,1,1, // 9: Under eyes + 1,1,2,2,2,2,2,1,1,2,2,2,2,2,1,1, // 10: Nose + 1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1, // 11: Cheeks + 1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1, // 12: Jaw + 0,1,1,1,2,2,2,2,2,2,2,2,1,1,1,0, // 13: Chin + 0,0,1,1,1,2,2,2,2,2,2,1,1,1,0,0, // 14: Chin outline + 0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0 // 15: Bottom + }; + + for (int r = 0; r < 16; r++) { + for (int c = 0; c < 16; c++) { + uint8_t p = brewos_bmp[r * 16 + c]; + if (p == 1) { + draw_rect(x + c * scale, y + r * scale, scale, scale, 0xFF1A1A1A); // rgb(26,26,26) + } else if (p == 2) { + draw_rect(x + c * scale, y + r * scale, scale, scale, 0xFFFEFEFE); // rgb(254,254,254) + } + } + } +} + // Double buffering functions void graphics_clear_back_buffer(uint32_t color) { if (!g_fb) return; diff --git a/src/kernel/graphics.h b/src/kernel/graphics.h index 7a3ec6a..08dc18f 100644 --- a/src/kernel/graphics.h +++ b/src/kernel/graphics.h @@ -20,6 +20,9 @@ void draw_desktop_background(void); void graphics_set_bg_color(uint32_t color); void graphics_set_bg_pattern(const uint32_t *pattern); // 128x128 pattern + +void draw_boredos_logo(int x, int y, int scale); + // Get screen dimensions int get_screen_width(void); int get_screen_height(void); diff --git a/src/kernel/paint.c b/src/kernel/paint.c index 4aa9275..1fe6743 100644 --- a/src/kernel/paint.c +++ b/src/kernel/paint.c @@ -146,6 +146,7 @@ static void paint_click(Window *win, int x, int y) { if (x >= 12 && x < 48) { if (y >= win->h - 65 && y < win->h - 45) { paint_reset(); + wm_mark_dirty(win->x, win->y, win->w, win->h); return; } if (y >= win->h - 40 && y < win->h - 20) { @@ -161,6 +162,7 @@ static void paint_click(Window *win, int x, int y) { if (y >= cy && y < cy + 20) { uint32_t colors[] = {COLOR_BLACK, COLOR_RED, COLOR_APPLE_GREEN, COLOR_APPLE_BLUE, COLOR_APPLE_YELLOW, COLOR_WHITE}; current_color = colors[i]; + wm_mark_dirty(win->x, win->y, win->w, win->h); return; } } @@ -168,6 +170,15 @@ static void paint_click(Window *win, int x, int y) { paint_handle_mouse(x, y); } +static void paint_mouse_move(Window *win, int x, int y, uint8_t buttons) { + if (buttons & 0x01) { // Left button down + paint_handle_mouse(x, y); + wm_mark_dirty(win->x, win->y, win->w, win->h); + } else { + paint_reset_last_pos(); + } +} + void paint_init(void) { win_paint.title = "Paint"; win_paint.x = 150; diff --git a/src/kernel/vm.h b/src/kernel/vm.h index 61de13b..9eaf0a3 100644 --- a/src/kernel/vm.h +++ b/src/kernel/vm.h @@ -5,9 +5,9 @@ #include // Simple Stack-Based VM -// Header: "BREWEXE" (7 bytes) + Version (1 byte) +// Header: "BORDEXE" (7 bytes) + Version (1 byte) -#define VM_MAGIC "BREWEXE" +#define VM_MAGIC "BORDEXE" #define VM_STACK_SIZE 256 #define VM_MEMORY_SIZE (64 * 1024) // 64KB diff --git a/src/kernel/wm.c b/src/kernel/wm.c index 8dae568..4f3bc4c 100644 --- a/src/kernel/wm.c +++ b/src/kernel/wm.c @@ -91,6 +91,11 @@ bool desktop_auto_align = true; int desktop_max_rows_per_col = 13; int desktop_max_cols = 23; +// Mouse Settings +int mouse_speed = 10; // Default 1.0x (range 1-50) +static int mouse_accum_x = 0; +static int mouse_accum_y = 0; + // Helper to check if string ends with suffix static bool str_ends_with(const char *str, const char *suffix) { int str_len = 0; while(str[str_len]) str_len++; @@ -368,36 +373,6 @@ void draw_button(int x, int y, int w, int h, const char *text, bool pressed) { draw_string(tx, ty, text, COLOR_BLACK); } -void draw_coffee_cup(int x, int y, int size) { - int cup_w = size; - int cup_h = size - 2; - - draw_rect(x + 1, y + 2, cup_w - 2, cup_h - 3, COLOR_LTGRAY); - - // Cup outline - draw_rect(x + 1, y + 2, cup_w - 2, 1, COLOR_BLACK); // Top - draw_rect(x + 1, y + 2, 1, cup_h - 3, COLOR_BLACK); // Left - draw_rect(x + cup_w - 2, y + 2, 1, cup_h - 3, COLOR_BLACK); // Right - draw_rect(x + 1, y + cup_h - 1, cup_w - 2, 1, COLOR_BLACK); // Bottom - - draw_rect(x + 1, y + cup_h - 1, 1, 1, COLOR_LTGRAY); - draw_rect(x + cup_w - 2, y + cup_h - 1, 1, 1, COLOR_LTGRAY); - - draw_rect(x + cup_w, y + 3, 2, 8, COLOR_BLACK); - draw_rect(x + cup_w - 2, y + 3, 2, 1, COLOR_BLACK); - draw_rect(x + cup_w - 2, y + 10, 2, 1, COLOR_BLACK); - - - int stripe_height = (cup_h - 5) / 6; - int coffee_y = y + 4; - draw_rect(x + 2, coffee_y, cup_w - 4, stripe_height, COLOR_APPLE_BLUE); - draw_rect(x + 2, coffee_y + stripe_height, cup_w - 4, stripe_height, COLOR_APPLE_GREEN); - draw_rect(x + 2, coffee_y + stripe_height * 2, cup_w - 4, stripe_height, COLOR_APPLE_YELLOW); - draw_rect(x + 2, coffee_y + stripe_height * 3, cup_w - 4, stripe_height, COLOR_APPLE_RED); - draw_rect(x + 2, coffee_y + stripe_height * 4, cup_w - 4, stripe_height, COLOR_APPLE_VIOLET); - draw_rect(x + 2, coffee_y + stripe_height * 5, cup_w - 4, stripe_height, COLOR_APPLE_BLUE); -} - void draw_icon(int x, int y, const char *label) { // Simple "File" Icon draw_rect(x + 29, y, 20, 25, COLOR_WHITE); @@ -773,7 +748,9 @@ void wm_paint(void) { for (int i = 0; i < window_count; i++) { Window *win = sorted_windows[i]; if (!win->visible) continue; - if (dirty.active) { + + + if (dirty.active && !win->focused) { if (win->x + win->w <= dirty.x || win->x >= dirty.x + dirty.w || win->y + win->h <= dirty.y || win->y >= dirty.y + dirty.h) { continue; @@ -788,10 +765,10 @@ void wm_paint(void) { // 5. Start Button draw_bevel_rect(2, sh - 26, 90, 24, start_menu_open); - // Draw BrewOS logo - draw_coffee_cup(5, sh - 24, 20); - // Draw BrewOS text - draw_string(35, sh - 18, "BrewOS", COLOR_BLACK); + // Draw Boredos logo + draw_boredos_logo(6, sh - 22, 1); + // Draw BoredOS text + draw_string(35, sh - 18, "BoredOS", COLOR_BLACK); // Clock draw_clock(sw - 80, sh - 20); @@ -811,7 +788,7 @@ void wm_paint(void) { draw_string(8, menu_y + 108, "Minesweeper", COLOR_BLACK); draw_string(8, menu_y + 128, "Control Panel", COLOR_BLACK); draw_string(8, menu_y + 148, "Paint", COLOR_BLACK); - draw_string(8, menu_y + 168, "About BrewOS", COLOR_BLACK); + draw_string(8, menu_y + 168, "About BoredOS", COLOR_BLACK); // Separator line draw_rect(5, menu_y + 185, 110, 1, COLOR_BLACK); @@ -1220,8 +1197,17 @@ void wm_handle_right_click(int x, int y) { prev_mx = mx; prev_my = my; - mx += dx; - my += dy; + mouse_accum_x += dx * mouse_speed; + mouse_accum_y += dy * mouse_speed; + + int move_x = mouse_accum_x / 10; + int move_y = mouse_accum_y / 10; + + mouse_accum_x -= move_x * 10; + mouse_accum_y -= move_y * 10; + + mx += move_x; + my += move_y; if (mx < 0) mx = 0; if (my < 0) my = 0; diff --git a/src/kernel/wm.h b/src/kernel/wm.h index 87486fe..86eb42a 100644 --- a/src/kernel/wm.h +++ b/src/kernel/wm.h @@ -85,4 +85,7 @@ extern bool desktop_auto_align; extern int desktop_max_rows_per_col; extern int desktop_max_cols; +// Mouse Settings +extern int mouse_speed; + #endif