Conrad Pankoff
c02b8b715d
Kernel: Implement MBR partition loader ( #168 )
...
This implements a basic MBR partition loader, which removes the reliance
on a hard-coded filesystem offset in the stage2 init.
2019-06-02 14:57:44 +02:00
Conrad Pankoff
32d78a8526
Kernel: Rename OffsetDiskDevice to DiskPartition
2019-06-02 12:37:29 +02:00
Conrad Pankoff
6f43f81fb4
Kernel: Implement OffsetDiskDevice to prepare for partition support
...
This implements a passthrough disk driver that translates the read/write
block addresses by a fixed offset. This could form the basis of MBR
partition support if we were to parse the MBR table at boot and create that
OffsetDiskDevice dynamically, rather than seeking to a fixed offset.
This also introduces a dependency in the form of grub. You'll need to have
32-bit grub binaries installed to build the project now.
As a bonus, divorcing Serenity from qemu's kernel loading means we can now
*technically* boot on real hardware. It just... doesn't get very far yet.
If you write the `_disk_image` file to an IDE hard drive and boot it in a
machine that supports all the basic PC hardware, it *will* start loading
the kernel.
2019-06-02 12:37:29 +02:00
Andreas Kling
4320c5fd58
Kernel: Make better use of the multiboot info.
...
Define the multiboot info struct properly so we don't have to grab at byte
offsets in the memory access checker code. Also print kernel command line
in init().
2019-06-02 09:53:42 +02:00
Robin Burchell
d31ce9eccd
Misc: Add a simple init process
...
This doesn't do much right now, just fork off a bunch of stuff and set priorities.
2019-05-30 02:57:15 +02:00
Christopher Dumas
dd84dcf31f
Launcher loads applications from Launcher.ini, is started by default, and is resized automatically
...
Co-Authored-By: Andreas Kling <awesomekling@gmail.com>
2019-05-24 20:40:09 +02:00
Andreas Kling
e24e486714
Snake: Flesh out a basic snake game :^)
2019-04-20 03:24:50 +02:00
Andreas Kling
0e6b273620
LibGUI: Start working on GTableView inline editing.
...
This is pretty shaky still, but the basic idea is that you subclass GModel
and return true for editable indices. The table view also needs to have its
editable flag set.
2019-04-18 22:27:14 +02:00
Andreas Kling
3817f5f619
Kernel+LibC: Add a DebugLogDevice that forwards everything to I/O port 0xe9.
...
This is then used to implement the userspace dbgprintf() in a far more
efficient way than what we had before. :^)
2019-04-18 16:08:52 +02:00
Andreas Kling
33920df299
AK: Try to use StringViews more for substrings and splitting.
2019-04-16 02:39:16 +02:00
Andreas Kling
29d0412a06
Kernel: Remove system.h and make the uptime global a qword.
2019-04-14 01:29:14 +02:00
Andreas Kling
6f90f41516
VisualBuilder: Add some more GWidget default properties.
2019-04-12 14:47:21 +02:00
Andreas Kling
0f5114852a
Kernel: Spawn text editor by default while I work on it.
2019-04-12 00:58:09 +02:00
Andreas Kling
93b76628a5
GGroupBox: Improve appearance with new FrameShape::Box style.
2019-04-11 14:27:31 +02:00
Andreas Kling
a58d7fd8bb
Kernel: Get rid of Kernel/types.h, separate LinearAddress/PhysicalAddress.
2019-04-06 14:29:29 +02:00
Andreas Kling
ec7817af37
Kernel: Spawn /bin/Taskbar on startup.
...
I think it's good enough now to be there by default. :^)
2019-04-04 20:19:07 +02:00
Andreas Kling
b9738fa8ac
Kernel: Move VM-related files into Kernel/VM/.
...
Also break MemoryManager.{cpp,h} into one file per class.
2019-04-03 15:13:07 +02:00
Andreas Kling
ab43658c55
Kernel: Move devices into Kernel/Devices/.
2019-04-03 12:36:40 +02:00
Andreas Kling
9fca94269e
Kernel: Move TTY-related files into Kernel/TTY/.
2019-04-03 12:28:45 +02:00
Andreas Kling
f9864940eb
Kernel: Move FS-related files into Kernel/FileSystem/
2019-04-03 12:25:24 +02:00
Andreas Kling
649c81a714
Kernel: Move networking related files into Kernel/Net/.
2019-04-02 19:54:38 +02:00
Andreas Kling
94c68dc55a
Kernel: Spawn the Launcher by default.
2019-04-01 22:04:09 +02:00
Andreas Kling
ee4d7c18c8
Kernel: Use a multiboot header instead of a convoluted two-part bootloader.
...
The old bootloader was hilariously complicated, requiring a floppy disk with
the kernel on it, and a hard drive with the file system. This patch removes
the floppy disk from the equation and replaces it with a multiboot header.
This means the kernel can now be booted with qemu-system-i386 -kernel kernel
2019-04-01 21:43:07 +02:00
Andreas Kling
750d79dcaf
Kernel: Initialize the CPU to allow SSE on startup.
...
I still need to add support for SSE to the context switching code, but now
at least one process can use it.
2019-03-27 13:40:00 +01:00
Andreas Kling
239c0bd6a6
Kernel: Make block() and yield() automatically call Scheduler::yield().
...
This exposed some places we were accidentally doing a double yield().
2019-03-24 01:52:10 +01:00
Andreas Kling
60d25f0f4a
Kernel: Introduce threads, and refactor everything in support of it.
...
The scheduler now operates on threads, rather than on processes.
Each process has a main thread, and can have any number of additional
threads. The process exits when the main thread exits.
This patch doesn't actually spawn any additional threads, it merely
does all the plumbing needed to make it possible. :^)
2019-03-23 22:03:17 +01:00
Andreas Kling
9120b05a40
Rename DNSLookupServer => LookupServer.
2019-03-20 04:26:30 +01:00
Andreas Kling
0e4a1936ca
LibC: Implement gethostbyname() by talking to the DNSLookupServer.
...
We now talk to the lookup server over a local socket and it does the lookup
on our behalf. Including some retry logic, which is nice, because it seems
like DNS requests disappear in the ether pretty damn often where I am.
2019-03-20 01:15:22 +01:00
Andreas Kling
35098cbde1
Kernel: Add a NetworkTask and a received network packet queue.
...
It will be easier to deal with incoming packets in a separate task.
2019-03-11 12:43:45 +01:00
Andreas Kling
97664fad60
Kernel: A bunch of hacking towards initial Ethernet support.
2019-03-10 20:59:23 +01:00
Andreas Kling
405413c354
Kernel: Start adding support for E1000 network adapters.
2019-03-10 15:25:33 +01:00
Andreas Kling
7d1142c7d9
Make it possible to sort a GTableModel by column+order.
...
This is accomplished by putting a GSortingProxyTableModel between the model
and the view. It's pretty simplistic but it works for this use case. :^)
2019-03-09 13:33:52 +01:00
Andreas Kling
a738b5cb69
TextEditor: Open an empty document by default.
2019-03-07 17:15:59 +01:00
Andreas Kling
9158de6c41
Begin working on a graphical TextEditor.
...
It's gonna be a wrapper around a new GTextEditor widget so I can easily
reuse the functionality anywhere I need it. :^)
2019-03-07 00:31:06 +01:00
Andreas Kling
166aadc4e1
ProcessManager: Start working on a graphical process manager.
...
I need a table view widget for this thing, so I'm also using this to
prototype a model/view thingy.
2019-02-28 01:43:50 +01:00
Andreas Kling
2cfcbdc735
AK: Add Retained<T>, like RetainPtr, but never null.
...
Also use some Clang attribute wizardry to get a warning for use-after-move.
2019-02-25 12:43:52 +01:00
Andreas Kling
d4973842c9
Kernel: Run the sync daemon once every second.
...
This is obviously not a final design, but 10 seconds was way too long.
2019-02-17 15:18:35 +01:00
Andreas Kling
ff786aa38a
Spawn Launcher and FileManager on startup by default again.
...
I disabled this while debugging WindowServer-in-userspace, and now that it
works fine we can bring these back up.
2019-02-17 11:31:52 +01:00
Andreas Kling
b6bf26430d
Kernel: Have devices automagically register themselves with the VFS.
2019-02-17 10:38:07 +01:00
Andreas Kling
bd2fdcbbaa
Kernel: Rename BochsVGADevice to BXVGADevice.
2019-02-17 08:41:05 +01:00
Andreas Kling
10b43f3d1d
Kernel: Rename Keyboard to KeyboardDevice.
2019-02-17 08:39:09 +01:00
Andreas Kling
53c69dbade
Start the WindowServer process with high priority.
2019-02-17 00:21:26 +01:00
Andreas Kling
640360e958
Move WindowServer to userspace.
...
This is a monster patch that required changing a whole bunch of things.
There are performance and stability issues all over the place, but it works.
Pretty cool, I have to admit :^)
2019-02-17 00:13:47 +01:00
Andreas Kling
799177feda
Kernel: Make BochsVGADevice a BlockDevice and support mmapping it.
...
Currently you can only mmap the entire framebuffer.
Using this when starting up the WindowServer gets us yet another step
closer towards it moving into userspace. :^)
2019-02-16 09:57:42 +01:00
Andreas Kling
994279d56c
Kernel: Add Device base class for CharacterDevice.
...
..to prepare for adding a BlockDevice class.
2019-02-16 00:47:20 +01:00
Andreas Kling
022f7790db
Use modern C++ attributes instead of __attribute__ voodoo.
...
This is quite nice, although I wish [[gnu::always_inline]] implied inline.
Also "gnu::" is kind of a wart, but whatcha gonna do.
2019-02-15 12:30:48 +01:00
Andreas Kling
18210c606d
Kernel: Remove GUIEventDevice.
...
It's no longer used since all communication now happens across sockets. :^)
2019-02-15 08:59:55 +01:00
Andreas Kling
c5a00a56c8
WindowServer: Put a clock in the top right corner of the screen.
...
This way we don't even need the Clock app anymore. Very cool :^)
2019-02-13 09:27:08 +01:00
Andreas Kling
111589a558
Kernel: Make sure processes always start out with fds 0, 1 and 2 open.
...
If we don't have a TTY for the process, fall back to /dev/null.
2019-02-12 11:25:25 +01:00
Andreas Kling
f311d0f353
Kernel: Don't bother trying to pass environment to init's testing processes.
2019-02-12 10:19:52 +01:00