From 166e49a100db2c55af4e1cebbd5a08b831f22dc2 Mon Sep 17 00:00:00 2001 From: Morten Delenk Date: Sun, 24 Jul 2016 21:40:17 +0200 Subject: [PATCH] Did some stuff with partitions added a floppy build script for freebsd --- err | 8 ++ kernel/kernel/disk/partitions.cpp | 50 +++++++++ kernel/kernel/filesystem.cpp | 11 ++ kernel/kernel/include/filesystem.hpp | 30 ++++++ kernel/kernel/include/partitions.hpp | 60 +++++++++++ kernel/kernel/include/string.hpp | 2 + kernel/kernel/include/textDISP.hpp | 148 +++++++++++++-------------- kernel/kernel/init.cpp | 7 ++ kernel/kernel/stdstring.cpp | 50 +++++++++ kernel/kernel/syscall.cpp | 6 +- kernel/libhal.a | Bin 500476 -> 501584 bytes log | 69 +++++++++++++ makeimage.sh | 54 ++++++++++ test.elf | Bin 18768 -> 0 bytes user/test.cpp | 15 +-- 15 files changed, 421 insertions(+), 89 deletions(-) create mode 100644 err create mode 100644 kernel/kernel/disk/partitions.cpp create mode 100644 kernel/kernel/filesystem.cpp create mode 100644 kernel/kernel/include/filesystem.hpp create mode 100644 kernel/kernel/include/partitions.hpp create mode 100644 log create mode 100755 makeimage.sh delete mode 100755 test.elf diff --git a/err b/err new file mode 100644 index 0000000..110dc3a --- /dev/null +++ b/err @@ -0,0 +1,8 @@ +xz: Filter chain: --lzma2=dict=8MiB,lc=3,lp=0,pb=2,mode=normal,nice=273,mf=bt4,depth=512 +xz: 94 MiB of memory is required. The limiter is disabled. +xz: Decompression will need 9 MiB of memory. +test.elf: 1,684 B / 14.5 KiB = 0.113 +xz: Filter chain: --lzma2=dict=8MiB,lc=3,lp=0,pb=2,mode=normal,nice=273,mf=bt4,depth=512 +xz: 94 MiB of memory is required. The limiter is disabled. +xz: Decompression will need 9 MiB of memory. +mtgos.fnt: 578.4 KiB / 2,122.7 KiB = 0.272 diff --git a/kernel/kernel/disk/partitions.cpp b/kernel/kernel/disk/partitions.cpp new file mode 100644 index 0000000..b33f458 --- /dev/null +++ b/kernel/kernel/disk/partitions.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +namespace MBR { + struct PartEntry { + char status; + uint8_t CHS_start[3]; + char partitionType; + uint8_t CHS_end[3]; + uint32_t start; + uint32_t size; + }__attribute__((packed)); + struct Mbr { + uint8_t bootstrap[446]; + PartEntry entries[4]; + short bootSignature; + }__attribute__((packed)); +MBR::MBR(uint32_t drive_id):Partitions(drive_id) { + Mbr mbr; + MTGosHAL::disk.readSector(drive_id,0,(uint8_t*)&mbr); + for(int i=0;i<4;i++) { + if(mbr.entries[i].status&0x7F) + break; + count++; + beg[i]=mbr.entries[i].start; + end[i]=beg[i]+mbr.entries[i].size; + } +} +auto MBR::operator=(MBR &o) -> MBR&{ + for(int i=0;i<4;i++) { + this->beg[i]=o.beg[i]; + this->end[i]=o.end[i]; + } + Partitions::operator=(o); + return *this; +} +auto MBR::getPartCount() -> int { + return count; +} +auto MBR::getPartBeg(int part) -> uint64_t { + if(part>=count) + return 0xFFFFFFFFFFFFFFFFull; + return beg[part]; +} +auto MBR::getPartEnd(int part) -> uint64_t { + if(part>=count) + return 0xFFFFFFFFFFFFFFFFull; + return end[part]; +} +} \ No newline at end of file diff --git a/kernel/kernel/filesystem.cpp b/kernel/kernel/filesystem.cpp new file mode 100644 index 0000000..22f58aa --- /dev/null +++ b/kernel/kernel/filesystem.cpp @@ -0,0 +1,11 @@ +/*#include + +File::File(Filesystem &fs, String fname): fs(fs), fname(fname) { + size=getFileSize(fname); +}; +auto Fileread(uint64_t offset, uint64_t length) -> uint8_t*; { + uint8_t *buf=new uint8_t[length]; + if(offset+length>size) + return nullptr; + fs.readFile(fname, offset, offset+length) +}*/ \ No newline at end of file diff --git a/kernel/kernel/include/filesystem.hpp b/kernel/kernel/include/filesystem.hpp new file mode 100644 index 0000000..8aa6d6f --- /dev/null +++ b/kernel/kernel/include/filesystem.hpp @@ -0,0 +1,30 @@ +#pragma once +#include +#include +class Filesystem { + protected: + Partitions parts; + int part; + virtual auto readSector(uint64_t num, uint8_t* buf) -> void = 0; + virtual auto readFile(String &name, uint64_t start, uint64_t end, uint8_t buf) -> void = 0; + virtual auto getFileSize(String &name) -> uint64_t = 0; + public: + friend class File; + friend class Directory; + Filesystem(Partitions &parts, int part): part(part) { + this->parts=parts; + } + virtual auto op(String directory) -> Directory& = 0; + virtual auto openFile(String file) -> File& = 0; +}; +class File { + private: + String name; + Filesystem &fs; + uint64_t size; + File() {} + public: + File(Filesystem &fs, String fname) + + auto read(uint64_t offset, uint64_t length) -> uint8_t*; +} \ No newline at end of file diff --git a/kernel/kernel/include/partitions.hpp b/kernel/kernel/include/partitions.hpp new file mode 100644 index 0000000..d6583f4 --- /dev/null +++ b/kernel/kernel/include/partitions.hpp @@ -0,0 +1,60 @@ +#pragma once +#include +class Partitions { + protected: + uint32_t drive_id; + public: + Partitions(uint32_t drive_id):drive_id(drive_id) {}; + virtual auto operator=(Partitions &o) -> Partitions& {this->drive_id=o.drive_id;return *this;} + virtual auto getPartCount() -> int = 0; + virtual auto getPartBeg(int) -> uint64_t = 0; + virtual auto getPartEnd(int) -> uint64_t = 0; +}; +namespace MBR { +class MBR: public Partitions { + private: + int count; + uint64_t beg[4], end[4]; + public: + MBR(uint32_t drive_id); + virtual auto operator=(MBR &o) -> MBR&; + virtual auto getPartCount() -> int; + virtual auto getPartBeg(int) -> uint64_t; + virtual auto getPartEnd(int) -> uint64_t; +}; +class ModernMBR: public MBR { + private: + char seconds; + char minutes; + char hours; + uint32_t sig; + bool copyProtected; + public: + ModernMBR(uint32_t drive_id); + virtual auto getDiskSec() -> char; + virtual auto getDiskMins() -> char; + virtual auto getDiskHrs() -> char; + virtual auto getDiskSignature() -> char; + virtual auto isCopyProtected() -> bool; +}; +class AST_MBR: public MBR { + private: + int count; + uint64_t beg[4], end[4]; + public: + AST_MBR(uint32_t drive_id); + virtual auto getPartCount() -> int; + virtual auto getPartBeg(int) -> uint64_t; + virtual auto getPartEnd(int) -> uint64_t; +}; +class DiskMGR: public MBR { + private: + int count; + uint64_t beg[12], end[12]; + public: + DiskMGR(uint32_t drive_id); + virtual auto getPartCount() -> int; + virtual auto getPartBeg(int) -> uint64_t; + virtual auto getPartEnd(int) -> uint64_t; +}; +} \ No newline at end of file diff --git a/kernel/kernel/include/string.hpp b/kernel/kernel/include/string.hpp index 9b5fb2d..54c8a40 100644 --- a/kernel/kernel/include/string.hpp +++ b/kernel/kernel/include/string.hpp @@ -1,3 +1,4 @@ +#pragma once #include #include class String { @@ -12,5 +13,6 @@ public: auto operator=(String &) -> String &; auto size() -> size_t; auto operator[](int) -> uint32_t; + operator char*(); }; String &operator""_s(const char *str, size_t len); \ No newline at end of file diff --git a/kernel/kernel/include/textDISP.hpp b/kernel/kernel/include/textDISP.hpp index 276e71a..d6ed747 100644 --- a/kernel/kernel/include/textDISP.hpp +++ b/kernel/kernel/include/textDISP.hpp @@ -7,80 +7,80 @@ #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 96 namespace MTGosHAL { - enum class BG_color : uint32_t { - BLACK=0x000000, - BLUE=0x0000AA, - GREEN=0x00AA00, - CYAN=0x00AAAA, - RED=0xAA0000, - MAGENTA=0xAA00AA, - BROWN=0xAA5500, - LIGHT_GREY=0xAAAAAA, - GREY=0x555555, - LIGHT_BLUE=0x5555FF, - LIGHT_GREEN=0x55FF55, - LIGHT_CYAN=0x55FFFF, - LIGHT_RED=0xFF5555, - LIGHT_MAGENTA=0xFF55FF, - YELLOW=0xFFFF55, - WHITE=0xFFFFFF - }; - enum class FG_color : uint32_t { - BLACK=0x000000, - BLUE=0x0000AA, - GREEN=0x00AA00, - CYAN=0x00AAAA, - RED=0xAA0000, - MAGENTA=0xAA00AA, - BROWN=0xAA5500, - LIGHT_GREY=0xAAAAAA, - GREY=0x555555, - LIGHT_BLUE=0x5555FF, - LIGHT_GREEN=0x55FF55, - LIGHT_CYAN=0x55FFFF, - LIGHT_RED=0xFF5555, - LIGHT_MAGENTA=0xFF55FF, - YELLOW=0xFFFF55, - WHITE=0xFFFFFF - }; + enum class BG_color : uint32_t { + BLACK=0x000000, + BLUE=0x0000AA, + GREEN=0x00AA00, + CYAN=0x00AAAA, + RED=0xAA0000, + MAGENTA=0xAA00AA, + BROWN=0xAA5500, + LIGHT_GREY=0xAAAAAA, + GREY=0x555555, + LIGHT_BLUE=0x5555FF, + LIGHT_GREEN=0x55FF55, + LIGHT_CYAN=0x55FFFF, + LIGHT_RED=0xFF5555, + LIGHT_MAGENTA=0xFF55FF, + YELLOW=0xFFFF55, + WHITE=0xFFFFFF + }; + enum class FG_color : uint32_t { + BLACK=0x000000, + BLUE=0x0000AA, + GREEN=0x00AA00, + CYAN=0x00AAAA, + RED=0xAA0000, + MAGENTA=0xAA00AA, + BROWN=0xAA5500, + LIGHT_GREY=0xAAAAAA, + GREY=0x555555, + LIGHT_BLUE=0x5555FF, + LIGHT_GREEN=0x55FF55, + LIGHT_CYAN=0x55FFFF, + LIGHT_RED=0xFF5555, + LIGHT_MAGENTA=0xFF55FF, + YELLOW=0xFFFF55, + WHITE=0xFFFFFF + }; - class Screen { - private: - FG_color fg; - BG_color bg; - uint32_t* lfb; - int base; - auto putChar(char c) -> void; - public: - auto putChar(unsigned short c) -> void; - auto puts(const char *s) -> void; - auto puts(String &) -> void; - Screen(): fg(FG_color::WHITE), bg(BG_color::BLACK), base(10) { - } - template - auto operator<< (T output) -> Screen & { - puts(output); - return *this; - } - auto clrscr() -> void; - auto scroll() -> void; - auto setColor(FG_color fg) -> Screen &; - auto setColor(BG_color bg) -> Screen &; - auto setColor(FG_color fg, BG_color bg) -> Screen &; - }; - template <> - auto Screen::operator<<(FG_color fg) -> Screen &; - template <> - auto Screen::operator<<(BG_color bg) -> Screen &; - template <> - auto Screen::operator<<(Base output) -> Screen &; - template <> - auto Screen::operator<<(int output) -> Screen &; - template <> - auto Screen::operator<<(long int output) -> Screen &; - template <> - auto Screen::operator<<(char output) -> Screen &; - template <> - auto Screen::operator<<(char* output) -> Screen &; + class Screen { + private: + FG_color fg; + BG_color bg; + uint32_t* lfb; + int base; + auto putChar(char c) -> void; + public: + auto putChar(unsigned short c) -> void; + auto puts(const char *s) -> void; + auto puts(String &) -> void; + Screen(): fg(FG_color::WHITE), bg(BG_color::BLACK), base(10) { + } + template + auto operator<< (T output) -> Screen & { + puts(output); + return *this; + } + auto clrscr() -> void; + auto scroll() -> void; + auto setColor(FG_color fg) -> Screen &; + auto setColor(BG_color bg) -> Screen &; + auto setColor(FG_color fg, BG_color bg) -> Screen &; + }; + template <> + auto Screen::operator<<(FG_color fg) -> Screen &; + template <> + auto Screen::operator<<(BG_color bg) -> Screen &; + template <> + auto Screen::operator<<(Base output) -> Screen &; + template <> + auto Screen::operator<<(int output) -> Screen &; + template <> + auto Screen::operator<<(long int output) -> Screen &; + template <> + auto Screen::operator<<(char output) -> Screen &; + template <> + auto Screen::operator<<(char* output) -> Screen &; } #endif diff --git a/kernel/kernel/init.cpp b/kernel/kernel/init.cpp index 0a6e9e8..f39ea85 100644 --- a/kernel/kernel/init.cpp +++ b/kernel/kernel/init.cpp @@ -7,6 +7,7 @@ #include #include #include +#include void * operator new (size_t, void * p) { return p ; } void * operator new[] (size_t, void * p) { return p ; } void operator delete (void *, void *) { } @@ -42,4 +43,10 @@ void main(void ** files, MTGosHAL::Serial &debug, MTGosHAL::PMM &mm, MTGosHAL::S continue; tasks.initTask(start); } + out << "checking ata0 partitions...\n"; + MBR::MBR part(disk.getDriveNumByName("ATA0m")); + out << "Partition 1: beg=" << (int32_t) part.getPartBeg(0) << " end=" << (int32_t)part.getPartEnd(0) << "\n"; + out << "Partition 2: beg=" << (int32_t)part.getPartBeg(1) << " end=" << (int32_t)part.getPartEnd(1) << "\n"; + out << "Partition 3: beg=" << (int32_t)part.getPartBeg(2) << " end=" << (int32_t)part.getPartEnd(2) << "\n"; + out << "Partition 4: beg=" << (int32_t)part.getPartBeg(3) << " end=" << (int32_t)part.getPartEnd(3) << "\n"; } diff --git a/kernel/kernel/stdstring.cpp b/kernel/kernel/stdstring.cpp index b60743f..d7a09a9 100644 --- a/kernel/kernel/stdstring.cpp +++ b/kernel/kernel/stdstring.cpp @@ -78,3 +78,53 @@ auto String::operator[](int i) -> uint32_t { String &operator""_s(const char *str, size_t len) { return *(new String(str)); } +String::operator char*() { + int strLen=1; + for(uint32_t i=0;i>6); + str[p++]=(uint8_t)((arr[i]&0x3F)|0x80); + } else if(arr[i]<0x1000) { + str[p++]=0xE0u|(uint8_t)(arr[i]>>12); + str[p++]=(uint8_t)(((arr[i]>>6)&0x3F)|0x80); + str[p++]=(uint8_t)((arr[i]&0x3F)|0x80); + } else if(arr[i]<0x20000) { + str[p++]=0xF0u|(uint8_t)(arr[i]>>18); + str[p++]=(uint8_t)(((arr[i]>>12)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>6)&0x3F)|0x80); + str[p++]=(uint8_t)((arr[i]&0x3F)|0x80); + } else if(arr[i]<0x400000) { + str[p++]=0xF8u|(uint8_t)(arr[i]>>24); + str[p++]=(uint8_t)(((arr[i]>>18)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>12)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>6)&0x3F)|0x80); + str[p++]=(uint8_t)((arr[i]&0x3F)|0x80); + } else { + str[p++]=0xFCu|(uint8_t)(arr[i]>>30); + str[p++]=(uint8_t)(((arr[i]>>24)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>18)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>12)&0x3F)|0x80); + str[p++]=(uint8_t)(((arr[i]>>6)&0x3F)|0x80); + str[p++]=(uint8_t)((arr[i]&0x3F)|0x80); + } + } + return (char*)str; +} \ No newline at end of file diff --git a/kernel/kernel/syscall.cpp b/kernel/kernel/syscall.cpp index 5a3406d..7ca16a7 100644 --- a/kernel/kernel/syscall.cpp +++ b/kernel/kernel/syscall.cpp @@ -7,12 +7,14 @@ ScreenOut::ScreenOut(bool err): err(err) { } auto ScreenOut::operator<<(char *text) -> ScreenOut & { + String *tmp = new String(text); if(!text) return *this; if(err) - MTGosHAL::err << String(text); + MTGosHAL::err << *tmp; else - MTGosHAL::out << String(text); + MTGosHAL::out << *tmp; + delete tmp; return *this; } auto ScreenOut::clrscr() -> ScreenOut & { diff --git a/kernel/libhal.a b/kernel/libhal.a index 75fcef555bc85a69fdd22d489ff0d3adbaa584cc..e65dba010dcf1580849be933278ad6592025f61e 100644 GIT binary patch delta 78887 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 delta 78140 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

OuK*XG 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 F0RU^zPJ;jd diff --git a/log b/log new file mode 100644 index 0000000..b02ea4a --- /dev/null +++ b/log @@ -0,0 +1,69 @@ +Cleaning build... +gmake -C kernel clean +gmake[1]: Entering directory '/usr/home/morten/sources/MTGos/kernel' +gmake -C hal clean +gmake[2]: Entering directory '/usr/home/morten/sources/MTGos/kernel/hal' +rm -rf hal.o +gmake -C x86 clean +gmake[3]: Entering directory '/usr/home/morten/sources/MTGos/kernel/hal/x86' +rm -rf ./init/idt.o ./init/Multitasking.o ./init/gdt.o ./init/init.o ./asm/snippets.o ./mm/pmm2.o ./mm/pmm.o ./mm/vmm3.o ./mm/pmm3.o ./io/keyboard.o ./io/textDISP.o ./io/serial.o ./io/output.o ./boot/boot.o ./blk/BlockDevice.o ./blk/ide.o +gmake[3]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/hal/x86' +gmake[2]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/hal' +gmake -C kernel clean +gmake[2]: Entering directory '/usr/home/morten/sources/MTGos/kernel/kernel' +rm -rf ./stdstring.o ./Multitasking.o ./filesystem.o ./init.o ./disk/partitions.o ./elf.o ./syscall.o ./string.o +gmake[2]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/kernel' +gmake[1]: Leaving directory '/usr/home/morten/sources/MTGos/kernel' +rm -rf mtgos +find . -name '*.o' -delete +Building... +gmake -C kernel +gmake[1]: Entering directory '/usr/home/morten/sources/MTGos/kernel' +gmake -C hal +gmake[2]: Entering directory '/usr/home/morten/sources/MTGos/kernel/hal' +gmake -C x86 +gmake[3]: Entering directory '/usr/home/morten/sources/MTGos/kernel/hal/x86' +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o init/idt.o init/idt.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o init/Multitasking.o init/Multitasking.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o init/gdt.o init/gdt.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o init/init.o init/init.cpp +i686-elf-gcc -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -Ic_include/ -I../../kernel/c_include -ffreestanding -std=c11 -fno-builtin -Werror -nostdlib -g -fpie -c -o asm/snippets.o asm/snippets.S +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o mm/pmm2.o mm/pmm2.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o mm/pmm.o mm/pmm.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o mm/vmm3.o mm/vmm3.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o mm/pmm3.o mm/pmm3.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o io/keyboard.o io/keyboard.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o io/textDISP.o io/textDISP.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o io/serial.o io/serial.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o io/output.o io/output.cpp +i686-elf-gcc -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -Ic_include/ -I../../kernel/c_include -ffreestanding -std=c11 -fno-builtin -Werror -nostdlib -g -fpie -c -o boot/boot.o boot/boot.S +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o blk/BlockDevice.o blk/BlockDevice.cpp +i686-elf-g++ -g3 -DDEBUG -m32 -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -I../../kernel/c_include -I../../kernel/include -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fno-pie -Wno-reorder -c -o blk/ide.o blk/ide.cpp +gmake[3]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/hal/x86' +ar rcs ../libhal.a x86/init/idt.o x86/init/Multitasking.o x86/init/gdt.o x86/init/init.o x86/asm/snippets.o x86/mm/pmm2.o x86/mm/pmm.o x86/mm/vmm3.o x86/mm/pmm3.o x86/io/keyboard.o x86/io/textDISP.o x86/io/serial.o x86/io/output.o x86/boot/boot.o x86/blk/BlockDevice.o x86/blk/ide.o +gmake[2]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/hal' +gmake -C kernel +gmake[2]: Entering directory '/usr/home/morten/sources/MTGos/kernel/kernel' +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o stdstring.o stdstring.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o Multitasking.o Multitasking.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o filesystem.o filesystem.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o init.o init.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o disk/partitions.o disk/partitions.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o elf.o elf.cpp +i686-elf-g++ -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o syscall.o syscall.cpp +i686-elf-gcc -g3 -DDEBUG -Wall -fno-stack-protector -nostdinc -Ic_include/ -ffreestanding -std=c11 -fno-builtin -Werror -nostdlib -g -fpie -c -o string.o string.c +gmake[2]: Leaving directory '/usr/home/morten/sources/MTGos/kernel/kernel' +i686-elf-g++ -nostdlib -nodefaultlibs -nostdlib -fno-builtin -T kernel-x86.ld -z max-page-size=0x1000 -o mtgos kernel/stdstring.o kernel/Multitasking.o kernel/filesystem.o kernel/init.o kernel/disk/partitions.o kernel/elf.o kernel/syscall.o kernel/string.o libhal.a -lgcc +gmake[1]: Leaving directory '/usr/home/morten/sources/MTGos/kernel' +mv kernel/mtgos mtgos +gmake -C user +gmake[1]: Entering directory '/usr/home/morten/sources/MTGos/user' +i686-elf-g++ -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o mtgos.o mtgos.cpp +i686-elf-g++ -Wall -fno-stack-protector -nostdinc -std=c++14 -Iinclude/ -Ic_include/ -fno-rtti -fno-exceptions -ffreestanding -fno-builtin -Werror -nostdlib -fno-use-cxa-atexit -Wextra -Wno-unused -g -fpie -c -o test.o test.cpp +i686-elf-gcc -c -o x86/syscall.o x86/syscall.S +i686-elf-ld -Ttest-x86.ld -L/opt/lib/gcc/i686-elf/6.1.0/ -o test.elf mtgos.o test.o x86/syscall.o -lgcc +gmake[1]: Leaving directory '/usr/home/morten/sources/MTGos/user' +mv user/*.elf . +stripping +Compressing... +How many megabytes should the image be? diff --git a/makeimage.sh b/makeimage.sh new file mode 100755 index 0000000..3125103 --- /dev/null +++ b/makeimage.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +unamestr=`uname` +if [[ "$unamestr" != 'FreeBSD' ]]; then + echo "This script only works on FreeBSD" + exit -1 +fi +echo "Cleaning build..." +gmake clean +echo "Building..." +gmake +echo "stripping" +strip --strip-debug mtgos +strip --strip-debug test.elf +echo "Compressing..." +xz -vv9e mtgos +xz -vv9e test.elf +xz -vv9ek mtgos.fnt +echo "How many kilobytes should the image be?" +read length +echo "OK. Creating image..." +dd if=/dev/zero of=mtgos.img bs=1K count=$length +echo "Enter your password for the remaining part of the executable." +sudo id +echo "Mounting image..." +dev=$(sudo mdconfig -a -t vnode mtgos.img) +echo "Partitioning image..." +sudo gpart create -s MBR $dev +sudo gpart add -t freebsd -b 512 ${dev} +echo "Formatting partition..." +sudo mkfs.ext2 /dev/${dev}s1 +echo "Mounting image..." +mkdir mount +sudo mount -t ext2fs /dev/${dev}s1 mount +echo "Installing grub... (May take some time)" +sudo grub-install --target=i386-pc --boot-directory=mount /dev/$dev --compress=xz --install-modules="normal part_msdos ext2 multiboot biosdisk xzio" --modules="normal part_msdos ext2 multiboot biosdisk xzio" --locales="" --force +echo "Copying files..." +sudo mv mtgos.xz mtgos.fnt.xz test.elf.xz mount +echo "Creating grub.cfg" +cat > grub.cfg << "EOF" +menuentry "MTGos" { + multiboot /mtgos.xz + module /test.elf.xz + module /mtgos.fnt.xz +} +EOF +sudo mv grub.cfg mount/grub +echo "Unmounting everything" +sync +sleep 0.5 +sudo umount mount +sudo mdconfig -d -u ${dev#md} +echo "Finalizing..." +rm -rf mount +echo "Done!" diff --git a/test.elf b/test.elf deleted file mode 100755 index 9d3d13d880b7d21d0652258e02c26f6a0bcba777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18768 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 diff --git a/user/test.cpp b/user/test.cpp index 4f06f6f..dfff932 100644 --- a/user/test.cpp +++ b/user/test.cpp @@ -10,17 +10,6 @@ void main() { char arr[4]="123"; ScreenOut out=ScreenOut(false); - int i; - out.setColor(BGColor::BLUE, FGColor::YELLOW); - for(;;) { - long double a; - long double b=a; - out << a; - a+=0.5; - if(a!=b+0.5) - out << " "; - else - out << "="; - out << a; - } + out << "Hallo! Ich bin ein Testprogramm, welches sämtliche Funktionen von MTGos, die vom Usermode zugreifbar sind, testet.\nHello! This is a test program which tests every function from MTGos that is accessable from userspace.\n"; + out << "Bonjour! Je suis une programme de test. Je teste toute la fonction de MTGos, que est accessible pour le mode d'utilisateur.\nこんにちは。私はテストのプログラムです。全てのアクセス可能な関数は試します。\näöüßÄÖÜẞ\n"; }