Andreas Kling
e5e295052f
Hook up the PS2MouseDevice to the AbstractScreen+WindowManager.
...
Render the mouse cursor by xor'ing the pixels. I don't know anything about
hardware cursors yet and this way we don't need to recompose the window
hierarchy every time you move the mouse. :^)
2019-01-11 03:52:09 +01:00
Andreas Kling
31667b47a5
Teach PS2MouseDevice to read the left and right buttons.
2019-01-11 02:45:06 +01:00
Andreas Kling
e740f1195a
Add a simple PS/2 mouse device.
...
It's not hooked up to anything just yet, but it does read movement deltas.
2019-01-11 02:28:53 +01:00
Andreas Kling
d1ceb4b603
Fix uninitialized AbstractScreen instance pointer.
...
...yeah yeah, one day I'm gonna zero out the kernel's BSS segment. Soon..
2019-01-11 01:43:41 +01:00
Andreas Kling
f6d2c3ed87
Hook everything up to run the GUI on top of the kernel.
...
Okay things kinda sorta work. Both Bochs and QEMU now boot into GUI mode.
There's a ton of stuff that doesn't make sense and so many things to rework.
Still it's quite cool to have made it this far. :^)
2019-01-10 23:19:29 +01:00
Andreas Kling
8626e95509
Make Widgets/ build inside the kernel.
2019-01-10 22:52:14 +01:00
Andreas Kling
659c54e32b
Switch into 1024x768x32bpp VESA LFB mode at boot.
...
This is going to be pretty cool once I can hook up the Widgets/ code to it.
2019-01-09 02:29:11 +01:00
Andreas Kling
2735b7e50d
Add PhysicalAddress::offset().
2019-01-08 22:29:34 +01:00
Andreas Kling
355201f34d
Vector<String>() -> { }
2019-01-08 22:28:11 +01:00
Andreas Kling
ba91ab1038
Don't omit frame pointers. Duh. This fixes /proc/PID/stack listings.
2019-01-04 19:02:21 +01:00
Andreas Kling
bad2fe33ad
Fix crash when doing "ls -l" in the /proc/PID directory for a kernel process.
2019-01-04 18:50:16 +01:00
Andreas Kling
7731aef7b2
Let the "reaped unparented process" messages go straight to the debugger.
2019-01-01 03:56:39 +01:00
Andreas Kling
4b6a8f8a08
Unbreak ksym loading and make reading /proc/PID/stack not crash.
2019-01-01 02:20:01 +01:00
Andreas Kling
683185e4aa
MM: Allocate page tables from a separate set of physical pages.
...
The old approach only worked because of an overpermissive accident.
There's now a concept of supervisor physical pages that can be allocated.
They all sit in the low 4 MB of physical memory and are identity mapped,
shared between all processes, and only ring 0 can access them.
2019-01-01 02:09:43 +01:00
Andreas Kling
a5ffa2eec7
Add a PageDirectory::flush() that does nothing if another PD is active.
...
This way callers can just flush() every time after making any modification
and the PageDirectory itself will decide if TLB invalidation is necessary.
2018-12-31 20:52:59 +01:00
Andreas Kling
9eca2ffd41
Make PhysicalPage eternally allocated.
2018-12-31 20:25:42 +01:00
Andreas Kling
3e37a1f5c3
Optimize PageDirectory destruction.
...
Remove an extra hash lookup and only iterate over the actually-used
PhysicalPages that we need to clean up.
2018-12-31 15:18:02 +01:00
Andreas Kling
edac1d6748
Make PageDirectory store physical pages in a HashMap.
...
This container is really just there to keep a retain on the individual
PhysicalPages for each page table. A HashMap does the job with far greater
space efficiency.
2018-12-31 15:10:12 +01:00
Andreas Kling
193ead94f8
Let PageDirectory have a PhysicalPage for the PDB instead of being the PDB.
...
This is more efficient than using the wasteful kmalloc_aligned() approach
to allocation. It also allows much tighter encapsulation of the class.
2018-12-31 14:58:03 +01:00
Andreas Kling
0dd5279eb1
MM: Fix bug when mapping a region with a VMO with non-zero offset.
2018-12-29 03:35:48 +01:00
Andreas Kling
46ce47a984
Use the entry point address from the ELF header instead of looking up _start.
...
I love these kind of dumb gotcha moments. Turns out you can find the entry
address right there in the header. :^)
2018-12-29 03:28:55 +01:00
Andreas Kling
3f3535213b
Fix some issues uncovered by the spawn stress test.
2018-12-26 22:02:24 +01:00
Andreas Kling
f6179ad9f9
Add slightly better kmalloc_aligned() and kfree_aligned().
...
Process page directories can now actually be freed. This could definitely
be implemented in a nicer, less wasteful way, but this works for now.
The spawn stress test can now run for a lot longer but eventually dies
due to kmalloc running out of memory.
2018-12-26 21:47:15 +01:00
Andreas Kling
55c722096d
Process::create_user_process() shouldn't leak a process if exec() fails.
2018-12-26 21:04:27 +01:00
Andreas Kling
2f010e941c
Unbreak the spawn stress test.
2018-12-26 20:57:51 +01:00
Andreas Kling
12a6963a5d
Fix bug where Vnode kept its Inode alive indefinitely.
2018-12-24 23:24:49 +01:00
Andreas Kling
033a42b580
The syncd loop can just be a lambda.
2018-12-24 23:10:48 +01:00
Andreas Kling
503e32552c
Move kernel symbolication code out of init.cpp and into its own KSym files.
...
Also use a simple array of { dword, const char* } for the KSyms and put the
whole shebang in kmalloc_eternal() memory. This was a fugly source of
kmalloc perma-frag.
2018-12-24 23:01:09 +01:00
Andreas Kling
6a9fa3e41a
Let sys$sigaction() fail if called with SIGKILL or SIGSTOP.
2018-12-24 22:22:35 +01:00
Andreas Kling
7bc41532be
Remove FS::read_entire_inode() in favor of Inode::read_entire().
2018-12-21 17:45:42 +01:00
Andreas Kling
3a0a8848fb
Make syscall invocations look pleasant.
...
Old: Syscall::invoke(Syscall::SC_foo, (dword)arg1, (dword)arg2)
New: syscall(SC_foo, arg1, arg2)
2018-12-21 03:02:06 +01:00
Andreas Kling
36bd53b36a
Add a simple /bin/more.
2018-12-21 02:42:30 +01:00
Andreas Kling
4dd50b1f6d
Get rid of three test utilities that I no longer need.
2018-12-21 02:22:21 +01:00
Andreas Kling
ec1c487dcd
Yet another pass of style fixes.
2018-12-21 02:10:45 +01:00
Andreas Kling
89040cdc99
Add a "syncd" kernel process that periodically calls sync().
2018-12-20 02:41:55 +01:00
Andreas Kling
ed7ae6c02c
Add sync() syscall and a /bin/sync.
...
It walks all the live Inode objects and flushes pending metadata changes
wherever needed.
This could be optimized by keeping a separate list of dirty Inodes,
but let's not get ahead of ourselves.
2018-12-20 00:39:29 +01:00
Andreas Kling
d0f06e5f3f
Automatically call Inode::flush_metadata() before an Inode is destroyed.
...
Use a little template magic to have Retainable::release() call out to
T::will_be_destroyed() if such a function exists before actually calling
the destructor. This gives us full access to virtual functions in the
pre-destruction code.
2018-12-19 22:28:09 +01:00
Andreas Kling
1f44cd9dd9
Reworked Inode to have a dirty bit and subclass-implemented flush_metadata().
...
This way we can defer disk writes as long as we like. There's no automatic
flushing happening just yet.
2018-12-19 21:56:45 +01:00
Andreas Kling
d506c857ab
Rename CoreInode to Inode.
...
I don't know what I was thinking here. Clearly Inode is the right name.
2018-12-19 21:18:28 +01:00
Andreas Kling
038d8641f9
Implement utime() along with a naive /bin/touch.
...
This synchronous approach to inodes is silly, obviously. I need to rework
it so that the in-memory CoreInode object is the canonical inode, and then
we just need a sync() that flushes pending changes to disk.
2018-12-19 21:14:55 +01:00
Andreas Kling
4f6438ec66
VirtualConsole: Support the 'A' and 'D' CSI sequences.
...
This makes backspace work correctly when line editing with bash-2.05b.
2018-12-07 01:19:02 +01:00
Andreas Kling
a8c7b6ce86
VirtualConsole: The rightmost column is always a default horizontal tab.
2018-12-07 00:26:12 +01:00
Andreas Kling
2850225587
VirtualConsole: Don't output the bell character.
2018-12-07 00:21:25 +01:00
Andreas Kling
87b10f6e6e
Add basic support for horizontal tabs in the VirtualConsole.
2018-12-07 00:19:08 +01:00
Andreas Kling
ca6847b5bb
Import a simple text editor I started working on.
2018-12-04 00:27:16 +01:00
Andreas Kling
405383fd2f
Refactor the FIFO implementation to use a DoubleBuffer as backing store.
...
This is considerably more efficient than using a CircularQueue.
2018-12-03 02:24:11 +01:00
Andreas Kling
afc56d151f
Omit duplicate lines from the ksyms map.
2018-12-03 02:23:49 +01:00
Andreas Kling
bbfae19238
Move DoubleBuffer to its own files.
2018-12-03 01:51:44 +01:00
Andreas Kling
aff89d2fd7
Yet more coding style fixes.
2018-12-03 01:38:22 +01:00
Andreas Kling
f31e1ceab0
Move InlineLinkedList to AK.
2018-12-03 01:18:54 +01:00