diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d159169..0000000 --- a/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/README.md b/README.md deleted file mode 100644 index 1f1bee4..0000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -

-

A simple & lightweight x86 operating system

- -## -### Building & Running -Use the `Makefile` in order to build the binaries/objects et cetera- with make. -
-**To build the OS image run**: `$ make os-image` -
-**To build the OS image (WITH GRUB) run**: `$ make eOS.iso` -#### Emulation -You can launch eOS with a VM like qemu. Launch *qemu* via *make* by running: `$ make run`. - - $ make (option) - run : Runs the OS with qemu - drun : Recompiles the OS and runs it with qemu - clean : Remove all object/binary/image files -## -### Planned Features -Go to [eOS v1.0 Kanban Board](https://github.com/E-Almqvist/eOS/projects/1) to see the current progress & planned features of the project. -## -
-
-
-
- -### Resources -These are the most common resources I used in order to build eOS. I highly recommend them. -##### Books - - [Operating Systems: From 0 to 1](https://tuhdo.github.io/os01/) (Open-Source, unfinished) - - [Writing a Simple Operating System - from Scratch](https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf) -##### Wikis - - [OSDev.org](https://wiki.osdev.org/Expanded_Main_Page) diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 32bdb54..0000000 --- a/TODO.md +++ /dev/null @@ -1,12 +0,0 @@ -# TO DO - - Malloc - - String Library - - - Concat - - Format - - - Scrolling - - Multiboot support (for grub etc) - - Rendering (VGA) - - User input (Keyboard) - - File system? diff --git a/bootloader/bios/convert.asm b/bootloader/bios/convert.asm deleted file mode 100644 index 50643d0..0000000 --- a/bootloader/bios/convert.asm +++ /dev/null @@ -1,41 +0,0 @@ -HEX_OUT: db "0x0000", ASCII_END - -; SR to convert hex values into ASCII strings -; This SR is going to mess up some registers -; since it fills the register with the desired -; pointer toward the string. - -hex_to_ascii: - mov cx, 0 ; incrementor - - hexloop: - cmp cx, 4 ; check if we reached the end - je hexreturn ; if so just return our new ASCII string - - mov ax, dx - - ; mask the hex value in ax so that we get the last "char" - and ax, 0x000f - - ; convert ax into ASCII (numeric) - add al, ASCII_OFFSET_NUM ; add 0x30 - - cmp al, 0x39 ; if al (char) > "9" - jle hexloop2 - - add al, 7 ; 7 distance from "A" - - hexloop2: - ; Write the char into the HEX_OUT string - mov bx, HEX_OUT + 5 - sub bx, cx - - mov [bx], al ; write the char into the string - ror dx, 4 ; "rotate" the string - - inc cx ; increment and go onto next char - jmp hexloop - - hexreturn: - mov bx, HEX_OUT - ret diff --git a/bootloader/bios/disk.asm b/bootloader/bios/disk.asm deleted file mode 100644 index 1dbc359..0000000 --- a/bootloader/bios/disk.asm +++ /dev/null @@ -1,45 +0,0 @@ -disk_read: - push dx ; store dx on stack so that we can compare later - - mov ah, BIOS_DISK_READ ; specify function - - mov al, dh ; read dh amount of sectors - mov ch, 0x00 ; CYLINDER - mov dh, 0x00 ; HEAD - mov cl, 0x02 ; SECTOR - - int BIOS_DISK_INT ; interrupt - - ; Error checks - jc read_error ; carry flag set -> error - - pop dx - cmp dh, al ; if dh != al then error - jne sector_error - - ret - -sector_error: - mov bx, sector_error_string - call println - -read_error: - ; Inform the user - mov bx, read_error_string - call println - - ; Print the error - mov bx, error_code_string - call print - - mov dh, ah - call print_hex - - mov bx, [ASCII_END] - call println - - jmp $ - -read_error_string: db ASCII_CARRIAGE_RETURN, ASCII_LINEBREAK, "ERROR! Disk read failed.", ASCII_END -error_code_string: db "Error code: ", ASCII_END -sector_error_string: db "Invalid number of sectors read!", ASCII_END diff --git a/bootloader/bios/print.asm b/bootloader/bios/print.asm deleted file mode 100644 index 24b8435..0000000 --- a/bootloader/bios/print.asm +++ /dev/null @@ -1,51 +0,0 @@ -; Input/Output subroutines - -; Subroutine to print a string -print: - pusha ; save current state of registers - - printLoop: - ; Char check - mov al, [bx] ; load the char - cmp al, ASCII_END ; check if end of string - je printreturn ; if al == ASCII_END then return end | lua is good psuedo-code - - - ; BIOS Printing - mov ah, BIOS_TTY_MODE ; enter teletype mode - int BIOS_TTY_INT ; interupt and print the char (from line 10) - - ; Preperation for next iteration - inc bx ; increment the pointer to get next char - jmp printLoop ; repeat - - printreturn: - popa ; restore all registers - ret ; return to previous location - - -newline: db ASCII_CARRIAGE_RETURN, ASCII_LINEBREAK, ASCII_END ; used for printing newlines - -; Subroutine to print a string on a new line -println: - pusha - - ; Print the input string - call print ; this will print whatever is in [bx], so clear it if you dont want to print anything - - ; Print the newline - mov bx, newline - call print - - popa - ret - - -; Subroutine to print a hex value -print_hex: - pusha - call hex_to_ascii - call print - popa - - ret diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm deleted file mode 100644 index 09432ff..0000000 --- a/bootloader/bootloader.asm +++ /dev/null @@ -1,96 +0,0 @@ -[org 0x7c00] ; bootsector - KERNEL_OFFSET equ 0x1000 - - ; Save the boot drive index - mov [BOOT_DRIVE], dl - - ; Move the stack pointer somewhere safe - mov bp, 0x9000 ; move it to 0x8000 - mov sp, bp - - ; Load kernel into memory - mov bx, stat_kernel_load - call println - call load_kernel - - ; Switching to PM - mov bx, stat_pm_init - call println - call pm_preinit - - jmp $ ; inf loop - -%include "bootloader/equ/ascii.asm" -%include "bootloader/equ/bios.asm" - -; BIOS SRs -%include "bootloader/bios/convert.asm" -%include "bootloader/bios/print.asm" -%include "bootloader/bios/disk.asm" - -; Protected Mode SRs -%include "bootloader/equ/vga.asm" -%include "bootloader/pm/vga/print.asm" - -; GDT & switching to PM -%include "bootloader/pm/gdt.asm" ; GDT defined here - -; Switching to PM -[bits 16] -pm_preinit: - cli ; Switch interupts - - lgdt [gdt_descriptor] ; Tell the CPU about the GDT - - mov eax, cr0 ; Set first bit of the CR0 register - or eax, 0x1 ; to 1 - mov cr0, eax ; Update the control register - - ; Initialize PM - jmp GDT_CODE_SEG:pm_init - -[bits 32] -; Init registers & stack when in PM -pm_init: - mov ax, GDT_DATA_SEG ; Point the segment registers to GDT_DATA_SEG - ; Segment registers - mov ds, ax - mov ss, ax - mov es, ax - mov fs, ax - mov gs, ax - - mov ebp, 0x900000 ; Update the stack pointer - mov esp, ebp - - call BEGIN_PM - -BEGIN_PM: - ; Inform of mode switch - mov ebx, stat_boot_success - call vga_print - - ; Execute kernel code - call KERNEL_OFFSET - - jmp $ - -[bits 16] - -load_kernel: - mov bx, KERNEL_OFFSET ; Load kernel at the kernel offset - mov dh, 9 ; Read 15 sectors - mov dl, [BOOT_DRIVE] ; Drive index - call disk_read ; Load the kernel - - ret - -stat_pm_init: db "Entering 32bit Protected Mode...", ASCII_END -stat_kernel_load: db "Loading kernel into memory...", ASCII_END -stat_boot_success: db "Booting complete!", ASCII_END - -BOOT_DRIVE: db 0 - -; Bootsector -times 510-($-$$) db 0 -dw 0xaa55 ; magic BIOS numbers diff --git a/bootloader/equ/ascii.asm b/bootloader/equ/ascii.asm deleted file mode 100644 index 8ae3828..0000000 --- a/bootloader/equ/ascii.asm +++ /dev/null @@ -1,13 +0,0 @@ -; ASCII EQUs -ASCII_END equ 0 -ASCII_BELL equ 7 -ASCII_BACKSPACE equ 8 -ASCII_HORIZONTAL_TAB equ 9 -ASCII_VERTICAL_TAB equ 11 -ASCII_LINEBREAK equ 10 -ASCII_CARRIAGE_RETURN equ 13 -ASCII_CLEAR equ 12 - -; Offsets -ASCII_OFFSET_NUM equ 0x30 -ASCII_OFFSET_CHAR equ 0x40 diff --git a/bootloader/equ/bios.asm b/bootloader/equ/bios.asm deleted file mode 100644 index 3294bde..0000000 --- a/bootloader/equ/bios.asm +++ /dev/null @@ -1,7 +0,0 @@ -; EQUs (lazy variables) for BIOS stuff -BIOS_TTY_INT equ 0x10 -BIOS_TTY_MODE equ 0x0e - -BIOS_DISK_INT equ 0x13 -BIOS_DISK_READ equ 0x02 - diff --git a/bootloader/equ/vga.asm b/bootloader/equ/vga.asm deleted file mode 100644 index a3f90d7..0000000 --- a/bootloader/equ/vga.asm +++ /dev/null @@ -1,4 +0,0 @@ -; VGA EQUs - -VIDEO_MEM equ 0xb8000 - diff --git a/bootloader/pm/gdt.asm b/bootloader/pm/gdt.asm deleted file mode 100644 index 4c73f1d..0000000 --- a/bootloader/pm/gdt.asm +++ /dev/null @@ -1,43 +0,0 @@ -; GDT - -gdt_start: - -gdt_null: ; NULL descriptor - dd 0x0 ; 4-bytes of - dd 0x0 ; 0x0 (0) = NULL - -gdt_code: ; Code SD - ; Range: 0x0 - 0xfffff - ; Flags1: 1001b (present:2 privilege:descriptor type) - ; Type: 1010b (code:conforming:readable:accessed) - ; Flags2: 1100b (granularity:32bit default:64bit seg:AVL) - - dw 0xffff ; Limit (bits 0-15) - dw 0x0 ; Base (bits 0-15) - db 0x0 ; Base (bits 16-23) - db 10011010b ; Flags1 : Type - db 11001111b ; Flags2 : Limit (16-19) - db 0x0 ; Base (bits 24-31) - -gdt_data: ; Data SD - ; Same flags as gdt_code but different type flags - ; Type: 0010b (code:expand dowm:writable:accessed) - - dw 0xffff ; Limit (bits 0-15) - dw 0x0 ; Base (bits 0-15) - db 0x0 ; Base (bits 16-23) - db 10010010b ; Flags1 : Type - db 11001111b ; Flags2 : Limit (16-19) - db 0x0 ; Base (bits 24-31) - -gdt_end: ; Mark the end so we can get the delta-memory (size of GDT) - -; GDT descriptor -gdt_descriptor: - dw gdt_end - gdt_start - 1 ; GDT size - dd gdt_start ; GDT pointer - - -; Lazy constants -GDT_CODE_SEG equ gdt_code - gdt_start -GDT_DATA_SEG equ gdt_data - gdt_start diff --git a/bootloader/pm/vga/print.asm b/bootloader/pm/vga/print.asm deleted file mode 100644 index 6d1031e..0000000 --- a/bootloader/pm/vga/print.asm +++ /dev/null @@ -1,27 +0,0 @@ -[bits 32] - -; VGA base address: 0xb8000 -; Charpos = 0xb8000 + 2(row*80 + col) - -vga_color_buf: db 0x0f ; Buffer to be changed so that we can choose colors! - -vga_print: - pusha - mov edx, VIDEO_MEM - - vga_print_loop: - mov al, [ebx] ; Pointer to char - mov ah, [vga_color_buf] ; Color code - - cmp al, ASCII_END ; Check if end of string - je vga_print_return ; If end then return - - mov [edx], ax ; Move charpos - inc ebx ; Increment to next - add edx, 2 - - jmp vga_print_loop ; Loop back until end of string - - vga_print_return: - popa - ret diff --git a/drivers/vga.c b/drivers/vga.c deleted file mode 100644 index 48dfa60..0000000 --- a/drivers/vga.c +++ /dev/null @@ -1,75 +0,0 @@ -// VGA Graphics Library -#include "vga.h" -#include "../kernel/io.h" -#include "../lib/str.h" - -static unsigned int cursor_row = 0; -static unsigned int cursor_col = 0; - -void vga_init() { - // Disable cursor - port_outb(0x3d4, 0x0a); - port_outb(0x3d5, 0x20); - - // Clear screen - clear_screen(); -} - -/* - VGA & Memory Functions -*/ -char* get_memory_charpos(unsigned int col, unsigned int row) { - return (char*)(VGA_ADDRESS + 2*((row*80) + col)); -} - -void writechar(char c, unsigned int col, unsigned int row, int attribute_byte) { - if( !attribute_byte ) - attribute_byte = 0x0f; - - char* mem = get_memory_charpos(col, row); - *mem = c; // Write the character - *(mem+1) = attribute_byte; // Write the attribute_byte - -} - -void set_cursor_pos(unsigned int col, unsigned int row) { - cursor_col = col; - cursor_row = row; -} - - -/* - Graphics Functions -*/ -void clear_screen() { - for( int c = 0; c < MAX_COLS; c++ ) - for( int r = 0; r < MAX_ROWS; r++ ) - writechar(0x20, c, r, 0xf0); -} - -/* - General Printing Functions -*/ -void print(char* str, int attribute_byte) { - for( char* c = str; *c != '\0'; c++ ) - writechar(*c, (unsigned int)(c - str) + cursor_col, cursor_row, attribute_byte); -} - -void println(char* str, int attribute_byte) { - print(str, attribute_byte); - cursor_row++; // Increment to next y-pos (newline) -} - -void printalign(char* str, int attribute_byte, enum align alignment) { - unsigned int strlenbuf = strlen(str); - - if( !alignment || alignment == LEFT ) { - print(str, attribute_byte); - } else if ( alignment == RIGHT ) { - set_cursor_pos(MAX_COLS - strlenbuf, cursor_row); - } else if ( alignment == MIDDLE ) { - set_cursor_pos((MAX_COLS/2) - (strlenbuf/2), cursor_row); - } - - print(str, attribute_byte); -} diff --git a/drivers/vga.h b/drivers/vga.h deleted file mode 100644 index 04306ae..0000000 --- a/drivers/vga.h +++ /dev/null @@ -1,19 +0,0 @@ -#define VGA_ADDRESS (char*)0xb8000 -#define VGA_ADDRESS_MAX (char*)0xb8fa0 - -#define MAX_ROWS 25 -#define MAX_COLS 80 - -static unsigned int cursor_row; -static unsigned int cursor_col; - -enum align {LEFT, RIGHT, MIDDLE}; - -char* get_memory_charpos(unsigned int col, unsigned int row); -void writechar(char c, unsigned int col, unsigned int row, int colorcode); -void clear_screen(); -void set_cursor_pos(); -void print(); -void println(); -void printalign(char* str, int attribute_byte, enum align alignment); -void vga_init(); diff --git a/grub/grub.cfg b/grub/grub.cfg deleted file mode 100644 index c3ebe15..0000000 --- a/grub/grub.cfg +++ /dev/null @@ -1,3 +0,0 @@ -menuentry "eOS" { - multiboot /boot/eOS.bin -} diff --git a/kernel/io.c b/kernel/io.c deleted file mode 100644 index 951ba67..0000000 --- a/kernel/io.c +++ /dev/null @@ -1,26 +0,0 @@ -// Function to read a byte from port -unsigned char port_inb(unsigned short port) { - unsigned char res; - __asm__("in %%dx, %%al" : "=a" (res) : "d" (port)); - - return res; -} - -// to write a byte to port -void port_outb(unsigned short port, unsigned char data) { - __asm__("out %%al, %%dx" : :"a" (data), "d" (port)); -} - - -// Read word from port -unsigned short port_inw(unsigned short port) { - unsigned short res; - __asm__("in %%dx, %%ax" : "=a" (res) : "d" (port)); - - return res; -} - -// write word to port -void port_outw(unsigned short port, unsigned short data) { - __asm__("out %%ax, %%dx" : :"a" (data), "d" (port)); -} diff --git a/kernel/io.h b/kernel/io.h deleted file mode 100644 index 74b7419..0000000 --- a/kernel/io.h +++ /dev/null @@ -1,5 +0,0 @@ -unsigned char port_inb(); -void port_outb(); - -unsigned short port_inw(); -void port_outw(); diff --git a/kernel/kernel.c b/kernel/kernel.c deleted file mode 100644 index 517032e..0000000 --- a/kernel/kernel.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "memory.h" -#include "../drivers/vga.h" -#include "../lib/str.h" -#include "../lib/strf.h" - -void main() { - vga_init(); // Initialize the screen first - // i.e. clear the screen et cetera. - - char* title = "eOS Version 0.2 2021"; - set_cursor_pos(0, 2); - printalign(title, 0xf0, MIDDLE); - - char* subtitle = "A x86 operating system, licenced under GPL-2.0"; - set_cursor_pos(0, 3); - printalign(subtitle, 0xf8, MIDDLE); - - - char* strbuf = "String concat: "; - char* str2 = "WORKS! :D"; - strbuf = strcat(strbuf, str2); - set_cursor_pos(0, 0); - println(strbuf, 0xf0); -} diff --git a/kernel/kernel_entry.asm b/kernel/kernel_entry.asm deleted file mode 100644 index 3d2fa88..0000000 --- a/kernel/kernel_entry.asm +++ /dev/null @@ -1,5 +0,0 @@ -[bits 32] -[extern main] - -call main -jmp $ diff --git a/kernel/memory.c b/kernel/memory.c deleted file mode 100644 index 8986d54..0000000 --- a/kernel/memory.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "memory.h" - -char* malloc(unsigned int size) { - return " "; -} - -void mfree(char* p) { - -} diff --git a/kernel/memory.h b/kernel/memory.h deleted file mode 100644 index b2b140d..0000000 --- a/kernel/memory.h +++ /dev/null @@ -1,2 +0,0 @@ -char* malloc(unsigned int size); -void mfree(char* p); diff --git a/lib/str.c b/lib/str.c deleted file mode 100644 index d9345e1..0000000 --- a/lib/str.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "str.h" - -unsigned int strlen(char* str) { - unsigned int len = 0; - for( char* c = str; *c != '\0'; c++ ) // search for end-of-string - len++; - - return len; -} - -char* strcat(char* buf, char* str) { - unsigned int bufferlen = strlen(buf); - - // remove the 0x0 char from the buffer - *(buf + bufferlen) = 0x3f; // replace end-of-string - // with a placeholder - - // concat the str to buf - int cc = 0; - for( char* c = str; *c != '\0'; c++ ) { - *(buf + bufferlen + cc) = *c; - cc++; - } - - *(buf + bufferlen + cc) = '\0'; // add end-of-string - - return buf; -} diff --git a/lib/str.h b/lib/str.h deleted file mode 100644 index f50e596..0000000 --- a/lib/str.h +++ /dev/null @@ -1,2 +0,0 @@ -unsigned int strlen(char* str); -char* strcat(char* buf, char* str); diff --git a/lib/strf.c b/lib/strf.c deleted file mode 100644 index 65dddc7..0000000 --- a/lib/strf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "strf.h" - -#define int_offset 48 -// 0:48 - 9:57 - -char* int_to_str(int i, char* strbuf) { - if( i == 0 ) { - return (char*)(int_offset); - } else { - char cbuf; - cbuf = (char)((i % 10) + int_offset); - - return int_to_str(i / 10, strbuf + cbuf); - } -} diff --git a/lib/strf.h b/lib/strf.h deleted file mode 100644 index 29649bc..0000000 --- a/lib/strf.h +++ /dev/null @@ -1 +0,0 @@ -char* int_to_str(int i, char* strbuf); diff --git a/logo.png b/logo.png deleted file mode 100644 index d401a9d..0000000 Binary files a/logo.png and /dev/null differ diff --git a/preview.png b/preview.png deleted file mode 100644 index 42cc7ae..0000000 Binary files a/preview.png and /dev/null differ