Commit Graph

55 Commits (d280aa0584a2334b16df03aab4b831e2644df87f)

Author SHA1 Message Date
Nigel Barink d280aa0584 Page faults and protetion faults will now hang with a helpful message
to explain what is going on.

I removed previously set barriers from the code to load
the kernel further.
2022-08-19 00:44:52 +02:00
Nigel Barink 7d6c823d79 Basic Launch of Higher half kernel
We now can launch the kernel at 0xC0000000 (or 3 GiB mark) with paging enabled.
A lot of early main is currently not executed to keep debugging as simple as possible
during the initial testing of higher half kernel loading.

A lot of the implementation is straight from wiki.osdev.org/Higher_Half_x86_Bare_Bones. Thanks to all the folks
who keep that wiki updated, its really resourceful.
2022-08-18 01:26:49 +02:00
Nigel Barink bbfea39c23 Fixing include paths for new structure
Removed non-sensical libc folder from project
2022-08-17 14:57:50 +02:00
Nigel Barink 3b3e2597a1 Restructering Kernel folder before moving to higher half kernel
The boot up process will be changed somewhat dramatically, therefor a
restructering of the kernel seems as a good starting point.
2022-08-17 14:29:26 +02:00
Nigel Barink 0b0e37b762 Paging cleanup, more cpu testing and psuedo code for higher half kernel 2022-08-17 14:17:58 +02:00
Nigel Barink 388ac8e7f9 Added checks to be sure paging is actually enabled on the cpu.
- Made a special assembly file to put CPU check function in. E.G. functions to get the state of
	specific registers

In this case I have created a simple assembly function to get the contents of the CR0 register.
With the help of the c++ preprocessor the value can then be used to check if certains bits are set.
For example to check if the PG (paging) bit is set, indicating that paging is enabled for the
processor.
2022-08-16 19:06:16 +02:00
Nigel Barink 9172da075a Added identity paging basics
Followed wiki.osdev.org/Setting_Up_Paging
2022-08-15 19:51:22 +02:00
Nigel Barink 23c68d9863 Setup paging function signatures... Ready to be implemented. 2022-03-18 22:09:04 +01:00
Nigel Barink b4cff3e667 Basic block allocation for physical memory allocation.
- 1 block = 4096 bytes : because this will make page fault handling possibly
somewhat easier

- 1 byte in the bitmap = 8 blocks of physical memory

unsure if the allocation is perfect ... guess i'll find out some day if this is actually correct.

The bitmap needs 16kb to keep track of 2gb of physical memory. Seems a decent percentage to me.
2022-02-26 20:55:34 +01:00
Nigel Barink 7330b81a10 Started definition file for a CMOS driver 2021-12-29 16:28:55 +01:00
Nigel Barink 97606dbf71 Clean up of debugging logs and new commands.
As this project grows it becomes important to keep things properly organised.
In this commit I've put some effort into making the kernel.cpp file more consise and thus improve its
readability.
Certain parts of the code have gotten their own definition file where before it
was only a header file.

- Moving the Supervisor Terminal into its own definition file.
- Subtracting debugging messages with preprocessor ifdef's
- Time and Date is now not just a header but has its own proper definition file
- Banner is displayed when booting up
- Terminal has a couple new commands

	Commmand		Description
	=================|||||===================================================
	DATE (was TIME)		Displays the curren time, date and ticks
	VERSION			Displays system version information
	MEMORY			Displays memory information
2021-12-29 16:15:18 +01:00
Nigel Barink 7496299761 Basic Intel Exceptions
Any interrupt thrown for any Intel defined Exception is not only being caught but
displays an appropriate message to the screen.

Changes made in src/kernel/idt/idt.cpp
2021-12-28 19:54:10 +01:00
Nigel Barink 0d8ef065e0 Interactive supervisor mode
To ease the pain of debuggin I can now interact with the system through a
very simplistic terminal. Hopefully things can be tested more easily by activating
the piece through a simple command. The max characters for a command is 10.

To achieve this I have had to make the following changes.
- Changed IRQ to update a global status variable
- Added a standalone keyboard driver with getKey functions
- Changed the main kernel loop to display a prompt
- Added a strncmp function to the clib/string file
2021-12-28 19:52:48 +01:00
Nigel Barink 88cc1d75bb Re-enabled interrupts from keyboard, Enabled and configured the PIT to throw interrupts at a regular interval 2021-12-20 21:53:57 +01:00
Nigel Barink 23ede25ed6 Small changes to reflect renaming in readme.md 2021-11-22 20:04:14 +01:00
Nigel Barink ba043ef31b Small improvements on Makefile, TODO.md has been renamed to features.md 2021-11-22 20:01:12 +01:00
Nigel Barink 88c5196586 Rewritten GDT logic 2021-11-16 21:17:49 +01:00
Nigel Barink 3a87b74224 Renaming/Moving stuff into a different file structure 2021-11-16 13:57:15 +01:00
Nigel Barink 32909aaed9 GDT is running again 2021-11-06 21:56:42 +01:00
Nigel Barink 5fb55367ca Implementation of simplistic physical memory manager 2021-11-06 16:27:13 +01:00
Nigel Barink d79fc6e8e2 Split up boot.s into multiple assembly definitions, Started page frame allocator implementation, kterm definition is now considered c plus plus 2021-11-06 14:05:29 +01:00
Nigel Barink bdcf9e66f8 Small adjustment in directory structure of memory and bootloader files in kernel 2021-11-02 21:15:00 +01:00
Nigel Barink c9b789ed7b Added a bunch of new stuff no time to figure out what's what, No longer any compiler warnings 2021-11-02 21:03:11 +01:00
Nigel Barink b4b615ae97 Checked off some todo's 2021-10-23 12:27:13 +01:00
Nigel Barink 092c5d520d Added option to create an iso 2021-10-23 12:26:15 +01:00
Nigel Barink 643f2d708b Added emulator options, Added header for VBE driver, Added CPUID function, Added demodisk.img as drive 2021-07-22 22:14:58 +01:00
Nigel Barink f2c8b8ac5c Improved multiboot compliance 2021-07-22 20:02:47 +01:00
Nigel Barink f48f8072c0 Merge InterruptHandling into MemoryManagement 2021-07-22 19:11:01 +01:00
Nigel Barink 7409e579c8 Basic keyboard input 2021-07-21 21:31:57 +01:00
Nigel Barink 04f941a625 Kernel now responding to keyboard interrupts 2021-05-28 22:20:13 +01:00
Nigel Barink 24a855bb3b Fix up wrong interrupt handler numbers in boot.s 2021-05-28 22:18:50 +01:00
Nigel Barink 7616ad40ee Moving logo to png format gitea doesn't handle svg format, simplified screenshot inclusion in readme 2021-05-26 20:03:53 +01:00
Nigel Barink 8ea45d3818 Adding logo properly to README, hopefully this way it show up in preview on gitea 2021-05-26 19:58:34 +01:00
Nigel Barink fa67df4bc0 Added an otter logo! I think its so cute 2021-05-26 19:54:59 +01:00
Nigel Barink 83d220019c Nicer time print 2021-05-22 19:24:29 +01:00
Nigel Barink 48b65b2276 Kernel now enter continuous time telling mode 2021-05-18 21:14:26 +01:00
Nigel Barink e0dfa69df8 Removed itoa and printf from idt 2021-05-18 21:13:14 +01:00
Nigel Barink 394882ca2e Added CMOS time read function, Added cariage return support to kterm 2021-05-18 21:11:48 +01:00
Nigel Barink 592db0ebcf More work on interrupt handling, Started timer interrupt implementation, PIC remapped hopefully successfull 2021-05-16 15:53:14 +01:00
nigel 28ac6a05af Interrupts are working.. processor no longer resets 2021-05-12 20:43:15 -04:00
Nigel Barink 0d0c06ab09 Working on PIC 2021-05-12 23:48:06 +01:00
Nigel Barink 5e668f5e67 Basics for an proper GDT and IDT 2021-05-12 23:03:00 +01:00
Nigel Barink b41f6a380e Implemented serial for basic debugging, Added MMU enable to kernel main 2021-05-10 21:33:25 +01:00
Nigel Barink 4008fc25e8 Added functions to enable MMU with paging 2021-05-10 21:32:28 +01:00
Nigel Barink 9f2b2a0798 Added first screenshot 2021-05-03 20:46:11 +02:00
Nigel Barink 19274825fe Added introduction, manuals and project structure markdown files to docs 2021-05-03 02:23:49 +02:00
Nigel Barink 660f662079 Added a screenshots folder 2021-05-03 02:22:50 +02:00
Nigel Barink 0f1b61deb9 Updated README.md, Moved planning to TODO.md 2021-05-03 02:22:12 +02:00
Nigel Barink d48ee0d86c Enabled git lfs, Added reference manuals under docs 2021-05-03 01:04:24 +02:00
nigel 9c0146869c added new resource, removed build.sh, make can do everyting now 2021-05-02 15:53:31 -04:00