Bananymous
2fec718590
Bootloader: cleanup code
2024-01-08 10:50:55 +02:00
Bananymous
f0cf54e194
Kernel: Reads from PS/2 keyboard and mouse can be terminated
2024-01-05 12:13:44 +02:00
Bananymous
41ae05dd6e
Kernel: Update block_or_eintr API to return ErrorOr<>
2024-01-05 12:13:11 +02:00
Bananymous
40f55be587
Userspace: Write simple mouse test program
...
This program draws circle on framebuffer, that you can move with
mouse, resize with scroll, and recolor with mouse buttons.
2024-01-04 19:50:26 +02:00
Bananymous
54c811ac2e
Kernel: Fix some mouse scrolling bugs and cleanup event generation
2024-01-04 19:50:26 +02:00
Bananymous
12a78c822e
Kernel: Explicitly construct ByteSpan from Span<uint8_t>
...
VSC complains about not finding proper constructor, this fixes that.
2024-01-04 12:17:55 +02:00
Bananymous
e45b544a39
Kernel: Implement PS/2 mouse driver
...
This is realtively simple driver that queries extensions (scroll +
extra buttons) from mouse and reads mouse packages.
2024-01-04 12:17:55 +02:00
Bananymous
d1e187570e
Kernel: Fix old keyboard command
2024-01-04 12:08:23 +02:00
Bananymous
d4191c0d94
Kernel: Reorganize PS/2 files to their own directory
2024-01-04 12:04:45 +02:00
Bananymous
c2957d8761
Kernel: PS/2 device automatically sends commands when appended
2024-01-04 12:04:45 +02:00
Bananymous
891ced4da2
Kernel: Move PS2Device to its own file
2024-01-04 12:04:45 +02:00
Bananymous
8f8d6bddc0
Kernel: Unify PS2Device to handle commands instead of inherited
2024-01-04 12:04:45 +02:00
Bananymous
d2d12d5281
Kernel: validate_{string,pointer}_access now return ErrorOr<void>
...
Now that signals are only processed when returning to userspace,
address validation has to do an early return.
2024-01-03 23:53:04 +02:00
Bananymous
0ba278041b
Kernel: Start exec by loading the ELF file. It might not exist...
2024-01-03 23:50:02 +02:00
Bananymous
ccaa159a73
Bootloader: Add support for ext2 blocks up to 4 KiB
...
This should work with blocks bigger than that, but my linux system
only supports up to 4 KiB, so I cannot test this.
This allows getting rid of forced block size in mkfs and let the
program select appropriately sized blocks.
2024-01-03 18:26:03 +02:00
Bananymous
7356a83a44
Bootloader: Optimize some unnecessary branches on carry add/sub
2024-01-03 17:05:33 +02:00
Bananymous
2a68df81e2
Bootloader: Fix bootloader on bochs
...
Bochs int 0x10 seems to scrap full ebp and top bits in some
registers. I now save all 32-bit registers on call frame. Also
ebp is across all int 0x10 calls.
2024-01-03 13:09:55 +02:00
Bananymous
50ca2ac09e
Bootloader: Interpret 0x7F (DEL) as backspace
...
This allows backspace to work over qemu's serial connection
2024-01-03 11:58:50 +02:00
Bananymous
b0ff2392a1
Kernel: Add some helpful debug prints
...
Log RIP when stack pointer is out of bounds.
Log all syscalls that return ENOTSUP
2024-01-03 02:08:01 +02:00
Bananymous
001e95f973
Kernel: Optimize sse saving/loading
...
Only save and load sse when new thread is trying to execute sse
instruction. There is no need to do that every time we enter kernel.
2024-01-03 02:06:49 +02:00
Bananymous
db0650cf10
LibC: Implement basic atexit. This allows clean exit from doom (soon)
2024-01-03 00:30:37 +02:00
Bananymous
753de3d9f0
ls: Write group name instead of gid in list mode
2024-01-03 00:15:13 +02:00
Bananymous
668c4c8976
LibC: Implement getgrnam and getgrgid
2024-01-03 00:14:49 +02:00
Bananymous
d2bc399770
BAN: Make StringView::split const and fix bug with empties
2024-01-03 00:14:29 +02:00
Bananymous
1bd33e76e5
cat/cat-mmap: print newline if file doesn't end in one
2024-01-02 23:27:13 +02:00
Bananymous
9fa13079f2
Kernel: Implement supplementary groups
...
This code has very ugly file parsing code. I have to create API
for reading files line by line in kernel space...
This allows users to open framebuffer/input files without root.
Mounting has to be moved to userspace soon. It makes no sense to
hard code permissions for every (device) file.
2024-01-02 23:24:32 +02:00
Bananymous
96d831c31a
Kernel/LibC/Userspace: Implement chown and set tty owner on login
2024-01-02 22:19:38 +02:00
Bananymous
07d5d3f936
BAN: Simple iterator now contains valid flag
...
This allows iteration over empty containers
2023-12-29 14:49:57 +02:00
Bananymous
51820b15cb
README: Add packages required by compilation in pacman
2023-12-29 03:11:30 +02:00
Bananymous
9fafafb17e
BuildSystem: Add instructions + fixes to build system
...
You can now easily build with clean ubuntu install
2023-12-28 21:37:18 +02:00
Bananymous
7c6565880d
BuildSystem: Use git apply instead of am
...
This allows you to not have configured git user
2023-12-28 20:16:36 +02:00
Bananymous
93a72ebd06
BuildSystem: Download cmake only if needed
2023-12-28 19:50:22 +02:00
Bananymous
4307968182
All: Start work again on sse support
2023-12-28 19:14:42 +02:00
Bananymous
5d83ab2289
BuildSystem: Download correct cmake if it is not available
2023-12-28 19:13:27 +02:00
Bananymous
af80bad87a
BuildSystem: Allow running custom version of cmake
...
You can now set the environment variable CMAKE_COMMAND to use custom
cmake version.
2023-12-27 13:01:11 +02:00
Bananymous
87272f0cd7
BuildSystem: Create build directory if it doesn't exists
2023-12-27 12:36:40 +02:00
Bananymous
8b5e437936
AOC2023: Implement day25 part1
...
7 starts missing + partly broken day22. I might finish these soon...
2023-12-26 20:04:42 +02:00
Bananymous
3939da4fb0
BuildSystem: Increase image size 50MiB -> 500 MiB
2023-12-26 15:01:12 +02:00
Bananymous
d87fa1a7ea
AOC2023: Implement day24 part1
2023-12-26 14:10:49 +02:00
Bananymous
910a57089b
AOC2023: Implement day23 part1
...
My day22 implementation is off by couple of bricks...
2023-12-26 00:56:35 +02:00
Bananymous
861bf27e96
BAN: Implement abs()
2023-12-26 00:54:06 +02:00
Bananymous
36590fb5c7
AOC2023: Implement day21 part1
2023-12-24 14:58:21 +02:00
Bananymous
ce990c3026
AOC2023: Implement day20 part1
2023-12-24 13:39:26 +02:00
Bananymous
b833239a82
BAN: Make hashmap work with non-copy constructable values
2023-12-24 13:38:47 +02:00
Bananymous
6fec142760
BAN: Add requires clauses for vector
2023-12-24 13:38:20 +02:00
Bananymous
84b2438b3d
BAN: Add requires for copy constructor for linked list
2023-12-24 13:37:49 +02:00
Bananymous
0e714d5eb4
BAN: Implement String::operator==(const String&)
2023-12-24 13:36:46 +02:00
Bananymous
9b8e6e6629
BAN: Implement is_*constructable
2023-12-24 13:36:12 +02:00
Bananymous
4146f2777b
AOC2023: Implement 10 hour solution to day19 part2
2023-12-23 20:53:50 +02:00
Bananymous
64323c51e6
AOC2023: Implement day19 part 1
2023-12-23 18:47:44 +02:00
Bananymous
a0200a7b10
AOC2023: Implement day18 part 1
2023-12-23 18:47:21 +02:00
Bananymous
8add759b5d
AOC2023: Implement day17 part1
2023-12-23 18:46:43 +02:00
Bananymous
2faf90bc2b
AOC2023: Add script to create day template and download input
2023-12-23 18:46:14 +02:00
Bananymous
762d575d70
AOC2023: Add program to run all days
2023-12-23 18:45:40 +02:00
Bananymous
2e77718f07
BAN: Implement find() for StringView
2023-12-23 18:43:52 +02:00
Bananymous
f371fabe35
BAN: HashSet is now internally Vector<LinkedList<T>>
...
It used to be Vector<Vector<T>> but this feels more proper
2023-12-23 16:37:21 +02:00
Bananymous
79a15132da
BAN: Cleanup HashSet
...
I now use BAN::Iterator as the base iterator. Also unstable version
was added.
2023-12-23 16:32:06 +02:00
Bananymous
bacc0db778
BAN: Fix unstable hash map rebucket
2023-12-23 16:31:42 +02:00
Bananymous
3963afe343
BAN: Add unstable version of hash map
...
This version differs only when doing rebucket. If rebucket fails,
the whole hash map is invalidated. This allows rebucketing to use
moving instead of copying.
2023-12-19 22:23:28 +02:00
Bananymous
3b21cc90ae
AOC2023: Add helper for downloading puzzle input
2023-12-19 22:22:31 +02:00
Bananymous
4e900804b8
AOC2023: Implement day16
2023-12-19 22:22:16 +02:00
Bananymous
9ec733904f
AOC2023: Implement day15
2023-12-19 21:42:59 +02:00
Bananymous
3352640d09
LibC: strlen had to be marked not optimized...
2023-12-19 21:42:59 +02:00
Bananymous
637397dd2f
LibC: Make memcpy and memset not optimized
...
GCC does some weird optimizations and breaks these functions
2023-12-19 21:42:59 +02:00
Bananymous
5edbb1d5c4
LibC: make execvp fail if no executable found
2023-12-19 21:42:59 +02:00
Bananymous
f46240e879
AOC2023: Implement day14
2023-12-19 02:49:48 +02:00
Bananymous
68627995f8
AOC2023: Implement day13
2023-12-19 01:25:23 +02:00
Bananymous
951eac6bfa
Kernel: Implement hacky non-block read for ps2 keyboard
2023-12-19 00:20:46 +02:00
Bananymous
0833d7b43f
Kernel: Allow opening files with O_NONBLOCK
2023-12-19 00:20:15 +02:00
Bananymous
1cd5b3c20c
LibC: Fix stpncpy
...
I had misunderstood and tought that the string is always
null terminated
2023-12-15 00:33:37 +02:00
Bananymous
c773e2ed07
LibC: Optimize malloc even further
...
aoc2023/day12 now runs in 3.5 seconds on my machine. This is way
better than the old almost hour.
2023-12-14 23:49:25 +02:00
Bananymous
c4186bd5f0
LibC: Compile with -O2 optimizations
...
I have no idea why libc had no optimizations enabled.
Weird thing is that memcpy optimized to infinite loop if I kept the
__restrict__ attributes in pointers. I don't think there was any ub.
2023-12-14 23:40:08 +02:00
Bananymous
5f640da166
LibC: Optimize malloc by a lot
...
I now cache first free node in malloc_pool and whether the node is
last or not. There allow doing less full iterations over the whole
malloc pool.
Malloc is still unbearably slow and I will have to write a proper
fast malloc at some point. With this patch running aoc2023/day12 is
atleast possible. Probabaly will take closer to an hour...
2023-12-14 15:31:00 +02:00
Bananymous
7320104fd0
LibC: Mark __assert_fail as noreturn
2023-12-14 15:13:54 +02:00
Bananymous
d273c5e77c
rm: Use remove instead of unlink for removing files
2023-12-14 11:03:58 +02:00
Bananymous
8344f2f9ab
AOC2023: Fix day3 implementation
...
I accidently broke my day3 when messing with signed/unsigned integers
2023-12-14 11:03:19 +02:00
Bananymous
600bd7ee0f
LibC: Implement rmdir in unistd.h
2023-12-14 11:02:56 +02:00
Bananymous
adf1e54605
LibC: Implement more functions to string.h
2023-12-14 11:02:30 +02:00
Bananymous
a3de64f5fa
LibC: Implement basic version of system() this assumes Shell exists
2023-12-14 11:00:40 +02:00
Bananymous
8216d09e06
LibC: Implement non-locale specific functions from strings.h
2023-12-14 10:59:39 +02:00
Bananymous
694cda6e40
LibC: Implement remove for stdio
2023-12-14 10:58:50 +02:00
Bananymous
e227a87140
Kernel: Allow creating directories if path ends with '/'
...
Also create and create_dir will now fail with EEXISTS if file exists
2023-12-14 10:56:53 +02:00
Bananymous
6cd5763361
Kernel: Allow cloning of mmapped framebuffer regions
2023-12-14 10:54:06 +02:00
Bananymous
0f1c740fe8
Kernel: Implement two missing ubsan handlers needed by lai
2023-12-14 10:53:36 +02:00
Bananymous
3f3e81fcf2
Bootloader: Align boot information passed to kernel
...
UBSAN found this bug
2023-12-14 10:52:51 +02:00
Bananymous
862993398d
AOC2023: Implement day12
...
There seems to be a problem with my malloc so the hash map is not
working. This code worked fine on my linux with actually working
malloc :D
2023-12-14 10:51:48 +02:00
Bananymous
225c7c6ab4
AOC2023: Implement day11
2023-12-11 14:36:33 +02:00
Bananymous
58633ca373
AOC2023: Remove unnecessary loop
2023-12-10 20:18:59 +02:00
Bananymous
00d57d783e
LibC+userspace: Make everything compile with -Wall -Wextra -Werror
...
I added -Wall -Wextra -Werror as public compile flags to libc. Now
everything in userspace in compiled using these flags. I made all
necessary changes to allow compilation to work.
Only exception is execvp which has a large stack usage. Maybe it
should use malloc for the buffer but posix allows ENOMEM only when
kernel is out of memory... This can be fixed when fexecve is
implemented and there is no need for absolute path.
2023-12-10 19:20:14 +02:00
Bananymous
f077e17b2a
AOC2023: Implement day10
2023-12-10 18:28:04 +02:00
Bananymous
2f8759d2d3
Kernel: Make ext2 fs work with block sizes != 1024
2023-12-10 01:32:30 +02:00
Bananymous
a6bfbbf655
ls: Rewrite whole program for cleaner output
...
ls -l now sorts elements and aligns them by columns.
2023-12-10 01:05:12 +02:00
Bananymous
9d8c9baa3f
LibC: Remove unnecessary RWX mask definition
2023-12-09 19:43:49 +02:00
Bananymous
c273bf98c9
ls+stat: show setuid, setgid and sticky bits
2023-12-09 19:43:25 +02:00
Bananymous
99a5b6e2ef
AOC2023: Cleanup day9 code
...
Move tree building to its own function. Both parts can use the same
tree. This also decreaseas memory usage by one element by row :D
2023-12-09 19:08:13 +02:00
Bananymous
284a012509
Kernel: Add framebuffer information to kernel image
2023-12-09 17:33:58 +02:00
Bananymous
abc69fa3d5
Bootloader: Search framebuffer information from kernel memory
...
Framebuffer information is no longer hard coded into bootloader.
Kernel can define framebuffer info structure in its memory which is
used for finding proper video mode.
2023-12-09 17:32:10 +02:00
Bananymous
8b01e2d4a2
Bootloader: Generalize framebuffer video mode search
...
Framebuffer size is now taken as arguments to vesa_find_video_mode
2023-12-09 16:48:04 +02:00
Bananymous
0c3e5980d6
AOC2023: Implement day9
2023-12-09 16:22:43 +02:00
Bananymous
951873098e
BAN: Rewrite heap sort
...
Heap sort is now more close to gnulibc++ version. This is just more
simplified version.
2023-12-08 22:45:55 +02:00