summaryrefslogtreecommitdiff
path: root/Kernel
AgeCommit message (Collapse)Author
2019-01-16Add a PTY multiplexer (/dev/ptmx) device.Andreas Kling
When you open /dev/ptmx, you get a file descriptor pointing to one of the available MasterPTY's. If none are available, you get an EBUSY. This makes it possible to open multiple (up to 4) Terminals. :^) To support this, I also added a CharacterDevice::open() that gets control when VFS is opening a CharacterDevice. This is useful when we want to return a custom FileDescriptor like we do here.
2019-01-16Get rid of Vnode concept.Andreas Kling
We already have an abstraction between Process and Inode/CharacterDevice/FIFO and it's called FileDescriptor. :^)
2019-01-16Let each MasterPTY create its slave.Andreas Kling
2019-01-16Catch anyone trying to use a DoubleBuffer with interrupts disabled.Andreas Kling
2019-01-16Use a CircularQueue for the PS/2 mouse driver.Andreas Kling
2019-01-16Rename FileDescriptor::has_data_available_for_reading() -> can_read().Andreas Kling
2019-01-16Tidy up memory map a bit and write out the general map in MemoryManager.Andreas Kling
There was a bug that given enough supervisor page allocation, we would eventually start dipping into the kmalloc range.
2019-01-16Pass the process to CharacterDevice::read/write.Andreas Kling
This is much nicer than grabbing directly at 'current' inside a read().
2019-01-16Rename CharacterDevice::has_data_available_for_reading() -> can_read().Andreas Kling
2019-01-16Implement basic support for POSIX-style select().Andreas Kling
Now we can block on both the PTY *and* the GUI event stream in Terminal.
2019-01-15Oops, finish WindowServer rename.Andreas Kling
2019-01-15Add internal locking to DoubleBuffer.Andreas Kling
2019-01-15Rename WindowComposer -> WindowServer.Andreas Kling
I keep referring to it as the windowing server anyway.
2019-01-15Allow character devices to block write attempts until there is more space.Andreas Kling
2019-01-15Make it possible for a process to switch controlling terminals.Andreas Kling
Via the TIOCSCTTY and TIOCNOTTY ioctls.
2019-01-15Slap an InterruptDisabler on gui$invalidate_window().Andreas Kling
This is obviously not a permanent solution but it works now to allow the windowing system to withstand invalidation spam.
2019-01-15Let's do dword-at-a-time memcpy() and memset() in userspace as well.Andreas Kling
Also fix a dumb bug that showed up when I was memsetting something other than zeroes.
2019-01-15Add very basic KeyDown events to the GUI event stream.Andreas Kling
The Terminal program now hosts an interactive shell. :^)
2019-01-15Let's just assume we have 32MB of physical memory to work with.Andreas Kling
I should eventually figure out the exact amount of memory but not now.
2019-01-15Add basic PTY support.Andreas Kling
For now, there are four hard-coded PTYs: /dev/pt{m,s}[0123] Use this in the Terminal to open a pty pair and spawn a shell.
2019-01-15Start working on a graphical Terminal program.Andreas Kling
2019-01-14Build Painter & friends into LibC. Use it in the GUI test app.Andreas Kling
2019-01-14Share GraphicsBitmaps between the windowing server and the client process.Andreas Kling
This is pretty cool. :^) GraphicsBitmaps are now mapped into both the server and the client address space (usually at different addresses but that doesn't matter.) Added a GUI syscall for getting a window's backing store, and another one for invalidating a window so that the server redraws it.
2019-01-14Start refactoring the windowing system to use an event loop.Andreas Kling
Userspace programs can now open /dev/gui_events and read a stream of GUI_Event structs one at a time. I was stuck on a stupid problem where we'd reenter Scheduler::yield() due to having one of the has_data_available_for_reading() implementations using locks.
2019-01-14TTY::write() should return the number of bytes written.Andreas Kling
2019-01-13gui$create_widget() shouldn't try to make button corners opaque.Andreas Kling
2019-01-13Let's use the existing Rect and Color types in the GUI API.Andreas Kling
Any type that doesn't depend on indirect data can probably be used here.
2019-01-13Add basic GUI API for creating labels and buttons.Andreas Kling
2019-01-13Fix Userland build.Andreas Kling
2019-01-13Start working on a GUI kernel API.Andreas Kling
2019-01-13Make GraphicsBitmaps be Region-backed when running in the kernel.Andreas Kling
This is a lot better than having them in kmalloc memory. I'm gonna need a way to keep track of which process owns which bitmap eventually, maybe through some sort of resource keying system. We'll see.
2019-01-12Don't use dword-by-dword memset/memcpy if the addresses are unaligned.Andreas Kling
Also don't enable the large kmalloc catcher by default.
2019-01-12Paper over a race in DoubleBuffer.Andreas Kling
I'm still somewhat okay throwing InterruptDisabler at races as they screw me. Eventually I'm gonna have to devise a different strategy though.
2019-01-12Print process name and PID when kmalloc() panics.Andreas Kling
2019-01-12Optimize WindowManager::flush() with fast_dword_copy().Andreas Kling
2019-01-12Make the kernel's memcpy() and memset() go fast with dword copies.Andreas Kling
Also I learned that the ABI allows us to assume DF=0 on function entry.
2019-01-12All right, let's double buffer the display. It looks so much better.Andreas Kling
This performs like dogshit. I need to make some optimizations. :^)
2019-01-12Make PS2MouseDevice behave more like a proper character device.Andreas Kling
Get rid of the goofy MouseClient interface and have the GUI event loop just read mouse data from the character device. The previous approach was awful as it was sending us into random GUI code in the mouse interrupt handler.
2019-01-12Get rid of the "root widget" concept in WindowManager.Andreas Kling
Instead just create a GraphicsBitmap wrapper around the display framebuffer and teach Painter how to draw directly into a GraphicsBitmap.
2019-01-12Reduce PS2MouseDevice debug spam in every dang mouse interrupt.Andreas Kling
2019-01-12Make the kernel's memset do a "rep stosb" because.Andreas Kling
2019-01-11Hook up the Keyboard device to the AbstractScreen.Andreas Kling
Basic text editing in a TextBox works. How very cool :^)
2019-01-11Throw up some widgets on screen so we can see what they look like.Andreas Kling
2019-01-11Hook up the PS2MouseDevice to the AbstractScreen+WindowManager.Andreas Kling
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-11Teach PS2MouseDevice to read the left and right buttons.Andreas Kling
2019-01-11Add a simple PS/2 mouse device.Andreas Kling
It's not hooked up to anything just yet, but it does read movement deltas.
2019-01-11Fix uninitialized AbstractScreen instance pointer.Andreas Kling
...yeah yeah, one day I'm gonna zero out the kernel's BSS segment. Soon..
2019-01-10Hook everything up to run the GUI on top of the kernel.Andreas Kling
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-10Make Widgets/ build inside the kernel.Andreas Kling
2019-01-09Switch into 1024x768x32bpp VESA LFB mode at boot.Andreas Kling
This is going to be pretty cool once I can hook up the Widgets/ code to it.