Bananymous
90deb9fb43
BAN: Make debug output thread safe
...
Now file lock is only acquired once per message, not once per character
2026-01-09 20:30:35 +02:00
Bananymous
12489a4c6b
Kernel: Fix 32 bit target compile and runtime
...
Apparently I have to reload stack in the fork trampoline. Not sure why
or why not on x86_64. Also sse builtins did not compile
2026-01-09 17:06:57 +02:00
Bananymous
74f70ae4bd
Kernel/LibC: Use builtin functions over inline asm
...
Getting flags and saving/restoring sse state and reading TSC can be done
using compiler builtins
2026-01-09 15:39:19 +02:00
Bananymous
a9ceab0415
Kernel: Use syscall/sysret for syscalls in x86_64
2026-01-09 15:18:58 +02:00
Bananymous
94bd74d0bb
BuildSystem: Update qemu script
...
Default to intel-hda instead of ac97 for audio
If we are accelerating with kvm, use host cpu and disable migratable to
allow invariant TSC
2026-01-08 17:16:20 +02:00
Bananymous
b2d8199480
ports/openal-soft: Add SDL2 as a dependency
2026-01-08 17:13:59 +02:00
Bananymous
e60f3711f8
ports: Update openssl 3.3.1->3.6.0
2026-01-08 17:13:59 +02:00
Bananymous
6ec9e4f7b8
ports: Update freetype 2.13.3->2.14.1
2026-01-08 17:13:59 +02:00
Bananymous
9eb3834ae5
Kernel: Add syscall-less clock_gettime
...
If the processor has invariant TSC it can be used to measure time. We
keep track of the last nanosecond and TSC values and offset them based
on the current TSC. This allows getting current time in userspace.
The implementation maps a single RO page to every processes' address
space. The page contains the TSC info which gets updated every 100 ms.
If the processor does not have invariant TSC, this page will not
indicate the capability for TSC based timing.
There was the problem about how does a processor know which cpu it is
running without doing syscall. TSC counters may or may not be
synchronized between cores, so we need a separate TSC info for each
processor. I ended up adding sequence of bytes 0..255 at the start of
the shared page. When a scheduler gets a new thread, it updates the
threads gs/fs segment to point to the byte corresponding to the current
cpu.
This TSC based timing is also used in kernel. With 64 bit HPET this
probably does not bring much of a benefit, but on PIT or 32 bit HPET
this removes the need to aquire a spinlock to get the current time.
This change does force the userspace to not use gs/fs themselves and
they are both now reserved. Other one is used for TLS (this can be
technically used if user does not call libc code) and the other for
the current processor index (cannot be used as kernel unconditionally
resets it after each load balance).
I was looking at how many times timer's current time was polled
(userspace and kernel combined). When idling in window manager, it was
around 8k times/s. When running doom it peaked at over 1 million times
per second when loading and settled at ~30k times/s.
2026-01-08 17:13:59 +02:00
Bananymous
ee57cf3e9a
Kernel: Expose usb device's device descriptor
...
This is used by the joystick detection code but i forgot to commit this
:D
2026-01-08 13:46:11 +02:00
Bananymous
fea5d1d82b
BAN: Fix wrong include in heap
2026-01-07 22:12:20 +02:00
Bananymous
c84a30d4dd
ports/SDL2: Update to new joystick interface
2026-01-07 19:07:42 +02:00
Bananymous
24d91eee90
Kernel/LibInput: Rework Joystick handling
...
Joystick axis and buttons are now named to standard values, this allows
interfacing multiple different controllers (only DS3 is supported)
Add ioctl calls for userspace to set joystick player leds and rumble
Only use DS3 code paths when we detect that the attached device is
actually an DS3 controller
update test-joystick program to the new interface and add support to
control rumble and player leds
2026-01-07 19:01:07 +02:00
Bananymous
a5318448f5
userspace: Add audioctl utility to configure audio server
2026-01-06 22:26:11 +02:00
Bananymous
b7c40eeb57
AudioServer: Handle multiple audio devices with multiple pins
...
This makes audio server configurable during runtime!
2026-01-06 22:26:11 +02:00
Bananymous
e7c9be1875
AudioServer: Increase send buffer size and hardcode volume to 20%
2026-01-06 22:26:11 +02:00
Bananymous
8f1b314802
Kernel: Add ioctls to select audio device's output pin
2026-01-06 22:26:11 +02:00
Bananymous
da6794c8ce
Kernel: Implement HD audio driver
...
This is very basic and does not support a lot of stuff (like changing
the output pin :D)
2026-01-06 22:26:10 +02:00
Bananymous
e926beba5a
test-mouse: Fix mouse fd cleanup
...
I was creating a local variable shadowing the global one. This prevented
cleanup to close it. (this is not really necessary as the program dies
anyway)
2026-01-06 21:58:56 +02:00
Bananymous
3ad053cf6d
image: Add option to change resize algoritm
...
Also benchmark timing is now done cpu clock, not monotonic one
2026-01-06 21:58:56 +02:00
Bananymous
bc11469a0b
mkdir: Fix mkdir error handling
2026-01-06 21:58:56 +02:00
Bananymous
a00695bdac
LibC: Add stubs that I have locally
...
I'm not sure if these are used by anything but I would assume so as I
have added them :D
functions added:
- getprotobyname
- open_memstream
- munlock
- lockf
- nice
- crypt
- getsid
- wcstoul
2026-01-06 21:58:56 +02:00
Bananymous
89959b800c
LibC: Implement random and srandom
2026-01-06 21:58:56 +02:00
Bananymous
3e19c3b62e
LibC: Fix timeradd and timersub overflow/underflow
2026-01-06 21:58:56 +02:00
Bananymous
d970debb4d
LibC: Define MAXPATHLEN in sys/param.h
...
This file is not POSIX, but some software seems to rely on it
2026-01-06 21:58:56 +02:00
Bananymous
d0ba52073f
LibC: Add stubs for shm_* functions
2026-01-06 21:58:56 +02:00
Bananymous
943e3b6f51
LibC: Define IN_CLASS* macros
...
These are not POSIX but some software seems to rely on them
2026-01-06 21:58:56 +02:00
Bananymous
25d43682aa
LibC: Bump FOPEN_MAX 16->64
2026-01-06 21:58:56 +02:00
Bananymous
ad16de59f8
Kernel: Implement basic F_{GET,SET}LK{,W}
...
At the moment these lock the whole file which is not what is supposed to
happen. Some port was trying to use these and this seems to work for
that. This may cause deadlocks but that should be easy enough to find
the reason because of the debug warnings
2026-01-06 21:58:56 +02:00
Bananymous
8634bbb792
Kernel: Don't save/restore sse or reschedule on spurious interrupts
...
I think these should be just fully ignored :D
2026-01-06 21:58:56 +02:00
Bananymous
60ec5d30fd
init: Start Clipboard server on startup
...
I had forgotten to commit this when I added the clipboard server :D
2026-01-06 21:58:56 +02:00
Bananymous
7667fe6ca5
LibC: Implement sem_timedwait
2026-01-06 21:58:56 +02:00
Bananymous
4b5a8196c3
Kernel: Fix bitmap byte index calculation in PMM
...
No idea how I had not crashed here earlier, but running on real hw with
a bit initrd ended up crashing :D
2026-01-04 01:16:43 +02:00
Bananymous
706c0816dd
Kernel: Move smp_initialized flag after schedulers are initialized
...
Before this real hardware failed to boot with smp enabled. Allocating
the idle thread does a page mapping which ends up broadcasting TLB
shootdown to other processes. This ends up failing somewhere halting the
processors never allowing them to initialize their scheduler
2026-01-03 23:39:07 +02:00
Bananymous
a8aa89362d
ports/SDL2: Add support for game controllers
...
SuperTux and tuxracer now work with controller support!
2026-01-03 20:42:42 +02:00
Bananymous
7964698ae5
userspace: Add simple joystick test app
2026-01-03 20:42:42 +02:00
Bananymous
65664b0d65
Kernel: Add support for DualShock 3 controllers
...
This driver accepts any HID joystick devices but button and axis
mappings will only work on a PS3 controller
2026-01-03 20:07:08 +02:00
Bananymous
08bfa0971e
Kernel: Rework storage device and disk cache locking
...
Syncing the disk cache no longer blocks the underlying storage device
and the disk cache itself during sync
2026-01-02 18:06:56 +02:00
Bananymous
912c5ea0bf
Kernel: Implement basic RWLock
2026-01-02 17:50:22 +02:00
Bananymous
6cdf5a5a7f
Kernel: Make AHCI controller thread safe
2026-01-02 17:50:22 +02:00
Bananymous
50ba743faf
Terminal: Cleanup CSI handling and add =c,>c,c,E,F
2026-01-02 17:13:46 +02:00
Bananymous
e26aac3067
Kernel: Decrease the number of syncs done by ext2 inodes
...
Each allocated inode used to call sync(). Each sync reads and writes
a block from the filesystem. Doing a 1 MiB write ended up syncing around
257 times
2026-01-01 23:54:09 +02:00
Bananymous
941e8aa5d5
Kernel: Optimize ext2 filesystem
...
block lookup can now also allocate blocks so there is no need to do
multiple lookups of the block did not exist
2026-01-01 23:15:35 +02:00
Bananymous
33b6536e6b
Kernel: Make disk cache entry lookup O(log n)
...
I have absolutely no idea why i was doing a linear lookup here :D
2026-01-01 20:40:38 +02:00
Bananymous
9fbd9288b2
Kernel: Fix symlink deletion from tmpfs
...
Small symlinks store their target in inline storage of data block
indices. Freeing blocks did not account for this and tried to interpret
the link target as block inidices to delete
2026-01-01 20:40:38 +02:00
Bananymous
bef1a56007
ports: Update git 2.48.1->2.52.0
...
also remove curl link hack as updating curl port fixed the issue
2026-01-01 20:40:38 +02:00
Bananymous
bc71ff5e81
ports: Update curl 8.11.1->8.17.0
...
This fixes broken DT_NEEDED dependencies in curl!
2026-01-01 20:40:38 +02:00
Bananymous
bd50444d06
ports: Update ca-certificates 2024-07-02 -> 2025-12-02
2025-12-31 19:28:55 +02:00
Bananymous
2efd6f92b2
rm: add -f and -i options
...
rm *should* now be posix compatible
2025-12-31 19:28:55 +02:00
Bananymous
7fdfad4088
Kernel: Mount /tmp with sticky bit set
2025-12-31 19:28:55 +02:00
Bananymous
31a1968798
Kernel: Cleanup scheduling while idling
...
If there are no threads in the run queue and we are idle, attempt to
wake up threads from the sleep queue
2025-12-31 19:28:55 +02:00
Bananymous
b0bd4ad546
Kernel: Fix dup2 return value
...
We returned the wrong fd number :D
2025-12-31 19:28:55 +02:00
Bananymous
dc454b9a6a
Kernel: Fix SA_RESETHAND handling order
...
if SA_RESETHAND was set, alt stack would not get used
2025-12-31 19:28:55 +02:00
Bananymous
f06e5d33e7
Kernel: Rework socket binding to an address
...
Sockets are no longer bound to an interface, but an ipv4 address. This
allows servers at 0.0.0.0 talk to multiple different interfaces
2025-12-31 19:28:55 +02:00
Bananymous
efdbd1576f
ports/SDL2: disable static lib and enable semaphores
...
Also add libiconv as a dep so SDL_iconv_string etc works
2025-12-28 15:30:02 +02:00
Bananymous
0421fbdc25
LibC: Implement sem_getvalue
2025-12-28 15:29:37 +02:00
Bananymous
bd426199f8
Kernel: Remove unused (and broken) code from signal trampoline
2025-12-28 03:53:38 +02:00
Bananymous
8e00b3d110
ports: Add ffmpeg port
...
This allows basic video and audio playback on banan-os!
2025-12-28 00:12:03 +02:00
Bananymous
6fbf1469aa
LibC: define static_assert in assert.h
...
This is needed from C11 until C23
2025-12-28 00:12:03 +02:00
Bananymous
280d3fd919
LibC: Fix assert.h include guard
2025-12-28 00:12:03 +02:00
Bananymous
40ce95b87f
LibC: Add definition for TCP_MAXSEG
...
This is not implemented yet
2025-12-27 23:37:03 +02:00
Bananymous
e7d644b874
AudioServer: Fix rounding the number of samples when resampling
...
If client tried to play a single sample at lower frequency as the
kenrel, audio server would never play it leading to the client hanging
This makes calculations round the number of samples always up to fix
this
2025-12-18 16:05:28 +02:00
Bananymous
c64159d5c3
AudioServer: Fix resampling math
...
This caused resampled audio to freeze the whole audio system after few
minutes of playing (like doom)
2025-12-18 14:59:55 +02:00
Bananymous
e2ccc3026f
BAN: Remove unnecessary c++ header inclusion
2025-12-16 16:44:42 +02:00
Bananymous
2af6066ee3
LibC: Fix sysconf(_SC_OPEN_MAX)
2025-12-16 05:20:18 +02:00
Bananymous
fc16b5331c
LibC: Fix backtrace compilation
...
Also dump backtrace on SIGABRT
2025-12-16 05:20:00 +02:00
Bananymous
b2723a0c5f
aoc2025: Implement day12 solution
2025-12-15 19:06:17 +02:00
Bananymous
01042a24f0
aoc2025: Implement day11 solution
2025-12-15 17:57:45 +02:00
Bananymous
f9643b3881
aoc2025: Implement day10 solution
2025-12-15 14:42:03 +02:00
Bananymous
d2d18bea5d
aoc2025: Implement day9 solution
2025-12-13 03:09:15 +02:00
Bananymous
87e595b83e
aoc2025: Implement day8 solution
2025-12-12 22:37:03 +02:00
Bananymous
08031b1227
aoc2025: Implement day7 solution
2025-12-12 21:15:22 +02:00
Bananymous
9a87c1f734
aoc2025: Implement day6 solution
2025-12-12 20:17:12 +02:00
Bananymous
edeb667ead
aoc2025: Implement day5 solution
2025-12-12 06:30:03 +02:00
Bananymous
db2aa495b8
aoc2025: Implement day4 solution
2025-12-12 06:08:00 +02:00
Bananymous
ddfb591094
aoc2025: Implement day3 solution
2025-12-12 04:34:40 +02:00
Bananymous
e8f1ba3722
aoc2025: Implement day2 solution
2025-12-12 02:49:33 +02:00
Bananymous
19c4f34ccb
aoc2025: Implement day1 solution
2025-12-12 02:49:10 +02:00
Bananymous
5d9e9c021a
aoc2025: Prepare programming environment
2025-12-12 02:48:40 +02:00
Bananymous
6a924db68c
Kernel: Implement FIONREAD for tty and pty
2025-11-24 18:15:10 +02:00
Bananymous
9d0990e5e8
Kernel: Implement /proc/<n>/fd
2025-11-24 00:19:51 +02:00
Bananymous
3207f5d61f
Kernel: Fix possible page fault on file lookup
2025-11-23 19:49:07 +02:00
Bananymous
c72b351bba
LibC: Implement glob{,free}
2025-11-23 05:33:44 +02:00
Bananymous
1f9b296ae7
cp: Add -r/--recursive flag
2025-11-23 02:25:05 +02:00
Bananymous
e3e2e7b4df
userspace: Implement mv utility
2025-11-23 02:24:52 +02:00
Bananymous
4ec8f4a4bf
Kernel/LibC: Implement rename{,at}
2025-11-22 23:55:10 +02:00
Bananymous
05d59a05df
Kernel: Remove obsolete kprint
...
This hasn't been in use in 3 years :)
2025-11-22 06:21:50 +02:00
Bananymous
11ccbe6506
ports/SDL2: Add clipboard support
2025-11-22 01:24:06 +02:00
Bananymous
673711a246
ports/mesa: Require llvm
...
I dont't really even want to suppot softpipe as that is so slow
2025-11-22 00:40:14 +02:00
Bananymous
fff5139d80
Kernel: Add /proc/<n>/cwd
...
Also update /proc/<n>/* permissions to match what linux does :D
2025-11-18 05:40:36 +02:00
Bananymous
812e70c626
ports: Add zsh port
2025-11-18 05:40:36 +02:00
Bananymous
db7ffcf9d5
Kernel/Terminal: Add support for bracketed paste mode
...
This gets rid of annoying warnings when running some programs like bash
2025-11-18 05:40:36 +02:00
Bananymous
8f6cb9c057
Terminal: Add selection and clipboard support
...
text can now be copied with ctrl+shift+c and pasted with ctrl+shift+v
2025-11-18 05:40:36 +02:00
Bananymous
291f298d19
userspace: Implement LibClipboard and ClipboardServer
...
programs can now connect to the clipboard server using libclipboard and
get and set the clipboard of the current user
2025-11-18 05:40:36 +02:00
Bananymous
d60f12d3b8
Kernel: Add support for SCM_CREDENTIALS and fix recvmsg
...
recvmsg was broken when receiving into more than a single iovec
2025-11-18 05:40:36 +02:00
Bananymous
b8a2573bb4
userspace: Implement ImageViewer utility
...
This supports viewing images and doing basic zooming and panning
2025-11-17 20:58:12 +02:00
Bananymous
7ce8e610f5
stat: Fix handling of symlinks
2025-11-17 05:26:07 +02:00
Bananymous
839b9c8f07
Kernel: Check parent's sticky bit in unlink
2025-11-17 05:26:07 +02:00
Bananymous
db20801521
Shell: Add exec builtin
2025-11-17 05:26:07 +02:00
Bananymous
160a9278c9
LibC: Fix RTLD_* definitions
2025-11-17 05:26:07 +02:00