#EvalynOS
1 messages · Page 14 of 1
That might be why?
I wonder if @cyan bison s computer has a ps/2 port and still hangs there
And it was differing bugs??
my laptop has real, actual ps2
Could you test it on both if you have a second
Preferably atleast the arrow lake one
then id have to reboot
Because I want to support arrowlake hardware

and like thatd be like really like annoying
I know they deprecated x1apic but idk if they did ps/2
macOS chips are a bit diffrenter though so maybe
Then you wana try the buggy version and the patched one?
i can try the patched one on one of my test subjects from haswell era
Does OBOS use ps2 on that (arrowlake) machine?
Iirc I’ve already validated haswell
no, obos doesn't boot on the arrow lake machine 

No x2apic driver

im good 
if it works™
Before you sleep can you reboot and test it on arrow lake

Maybe I should make an ISO for extra prints on the fucking PS/2 code
Just to nail it done too
remind me
it's only ~20:00 rn
so im not sleeping for a few hours
Wait I think I know why it’s fucking up maybe
Leme read the code
Errrm what the sigma
This could be hanging
Maybe
oh wow a polling loop... hanging

If there is zero ps/2 controler
This would uhhh
Ermmm
Causebissues

I should add a timeout thing
So it can timeout
there should've always been one
i think depending on the chipset, inb on non existent io ports returns 0xff
🥀
and this friend vibecoded it?
then why is he a friend 🥀
So idk how to redo it without copyright or whatever issues
She* and I feel bad 🥀
And I didn’t know at the time 🥀
(mb)
Honestly they sent me a lot NSFW before and I’ve been meaning to distance 🥀
And they use a bitmap allocator 🥀
And didn’t wana use mine
Better one
🥀
ah yeah bitmap allocators, very NSFW
Unprompted
Nah separate

uh
Yeahhhhh
that's concerning
their*
I just kinda stay away with a 10ft poll
FUCK
have i mentioned how much i hate xhci yet?
🥀
No but please do
I FUCKING HATE XHCI
I FUCKING HATE XHCI
I FUCKING HATE XHCI
(limit reached before the bot mutes me)
I FUCKING HATE XHCI
What has XHCI done this time 🥀
xhci: port reset timed out
xhci: trb completed with code 0x4
(0x4 is usb transaction error, the most vague code in the entire spec)
if only i had never made the promise that i would try xhci then my life would be a lot better
You know what the silver lining is of this shit
I think he said something about no liking xhci
You can help others in the future
With this knowledge
And save others the pain
And even make a document on how to make an XHCI driver
That’s more simplified
already exists
but it costs money (i pirated it)
And covers common mistakes
Yeah but a cool one 
((libgen is a very sketchy website, i found out))

this should fix that lil shit big
@peak cloak
this may not work because keyboard

but it will finish most of it
ok last test lelelel
> cat /bin/cat
mayb
#!/bin/cat
this is a quine
WHAT DO YOU MEAN
IT SHOULD BE DISABLED
"do you have serial port at blah blah blah"
Did I give the wrong ISO
@peak cloak I swear to jod
If this prints the serial message

It shouldn’t
why u need serial so bad anyway 
I need it to boot
It shouldn’t even be enabling seriel unless it’s on a goervusor
Hypervisor
Can you send me the full logs of the latest ISOS
I did
I literally did that
Look at this
Look at zis
seriel=hv
It means only enable on hypervisor
Also it’s ps2 breaking it not serial 😭 @peak cloak
This should of fixed it
@peak cloak you got the log
I’m going to sleep
give me a moment
you want me to try this one?
This one has zero code changes
But I tried to do a fresh build

So uhhh
Also send logs
k
And il make an extended logging version after
SHOOT SCREEN WITH GUN
AUTOMATED RIFLE
AK 48
ITS AK 47 BUT BETTER
RUSSIA TECHONOLOLOLOGY
Well yeah there’s no XHCI
Or EHCI
Good thing our good chum @cyan bison is here right
victim 
No your the kvass cat
i dont think i have ever seen you do anything in kvass

anyways
behold the ultimate test
nothing that nobody complies with
macbook from 2006
I watch the channel from time to time
fair
booting now
nothing happened
i think limine cooked itself
lol 
No limine screen?
cc: mint?
WHY WOULD THEY COMPLY WITH EFI 1.0

I mean is it a troll?
idk
It’s technically a bug with limine?
what are limine system requirements
Limine works on BIOS
I’d presume it should work on that old of EFI
Is that UEFI
no thats just efi
Or JUST efi
before it was uefi
Damn
crap
no technicality
im gonna go boot from usb
somehow
theres no usb bios boot
trying again

ngl i wish i had a powerbook
the aluminum g4 one
i can troll my parents with seemingly two identical laptops


boot picker cd sharted itself
Does limine not support EFI EFI?
retry
I wonder if it was spesific if it was between EFI/UEFI
it just doesnt have a web cam and the battery slots are different design wise
hardware wise they are literally different things entirely
idk
ok so i booted the 32 bit one
It would fail to load
it say report upstream
nah
So
they dont support it

im not gonna be a total poopybutt over it
instead i will make it a selling point for kv- 

Is that Mac even 64bit
Because if not idgaf myself
Is that 64 or 32bit
Oh 
because apple engineers were programming it with one hand probably
i booted your os on a core 2 duo are you demented 
no it does
nevermind they look different
they more resemble each other when opened but thats only the keyboard
Wuh
uhhh

how many drugs u eat
@peak cloak making the special version
i may tomorrow do a cli argument to have a set of KBD inputs to preplay
and | means enter
elebab
its badapple
reversed
because how buffer work
@peak cloak
try zis
Il probably have
kbdpreplay=+|badapple|+
Make the same as that
The pluses are the dilimeter of the sequence
and the bar means enter
But @peak cloak
This is now
Bad Apple
On Apple device
Get ready
wait do apple devices just not have secure boot?
I just fucking wondered how I can boot your os on my laptop without disabling it
oh wait I think I have system integrity protection off
Apple laptops are way less locked down than phones
They are just a lot more esoteric of hardware
nah sip should block unsigned efi apps
difference is sip cannot be disabled on the mobile versions of macos (ios, ipados, watchos)
you can disable that though
Which is iOS?
yeahhhh sorta
@peak cloak how are you getting it to boot on the Mac?
Also did the special ISO work?
no thats someone else

I’m planning my XHCI stuff after my x11 port
Right now I’m trying to get a shell working in userspace
And then bash
And then maybe try and get job control in bash if that wouldn’t be toooo bad
And then it’s onto x11 and maybe dbus if it’s needed and then to get xfce or some other DE
Once I have that il start on XHCI and EHCI (no USB 1.1 if you need that just use ps/2 lmfao)
And then a TCP/IP stack
And maybe a hypervisor snuck in there
I know this is alot of work to do but it’s just high level goals
each of these could take a year from me separately 😭
aside from the shell one, and bash
X11 has an end of year goal
So it is gonna take a year

x11 is my New Year’s resolution
ig to me i would die happy if i can get to have a mlfq scheduler with smp by the end of the year 
(This does not include a DE to be clear)
Oh SMP is after bash

Once I have bash working
I’m going to do a full code cleanup
Inspect every nut and bolt
Fix all the naming
Get it to be perfect
Then it will be time to do SMP and fuck all that up

fair
i wanna have smp before doing any userspace shit cuz im afraid i'll make fucked up decisions incompatible with it if i left it after having the base functionality
Userspace isn’t much different than normal multitasking
mhm makes sense
You just spawn a kernel thread and then have that jump into userspace
And then it’s exexuting 
skill issue, i just start the user thread in user mode
Make sure to allocate a diffrent CR3 thing and a big enough kernel stack because that thread stack will be doing system calls
o i meant more like
a working userspace
ie minimal syscalls and user threads etc
Ahhh
if you just port a little bit of mlibc
It won’t be that bad
POSIX really helps you make not stupid things
Though

I don’t listen to posix and I made a cursed abomination
But it somehow still runs doom
Lmfao
my guy, toaster runs doom
straying away from holy posix is the reason this world has all that evil 🙏
ig i will personally go all posix
my dumdum probably wouldnt know any better so 
And I have like 7 random fucking system calls it has to use
Because I diddnt posix them
Once my VFS is proper
I will be making the stuff posix
Like to get the frame buffer
You will MMAP the file
And to get the size info and shit
You will use IOCTLs
🥀
im sry but mmaping files is vmm not vfs
My open() call cannot even see non tarFS files
So it is VFS work

Technically
Also it still has to use some of the VFS right
So MMAP can check where to map from
Etc
And IOCTLs
apple is not bad 
No no
My bad apple
The good Apple device


balenaetcher on a usb, restart with option key, "EFI boot"
there's 2 efi boots though i pick the first one
that first one works fine
macbooks have full uefi
they just dont have much pc compatible crap
This should auto play the keys needed
also i text on discord on a newer macbook air but it doesnt have any normal usb ports so i just airdrop the iso onto the crappy mac which that has balenaetcher
Lmfao
🙏
the balenaetcher is outdated too because mac os is the 2017 version 
later my desk is crap rn
Okay well @peak cloak says the patch works
So when I get home il push this
Play game games
And then get started on the VFS rework
what if i lied 

no it works though
crap i forgot the photo
I really want a photo 
brb
I’m thinking for my driver servers I may have them be mostly bundled together
And written in c++
Like all my pcie drivers will be inside pcid
ACPI in acpid
Etc
And then they can talk internally easily
And they don’t need to go outbound IPC wise much
And it makes it so I have less servers
But internally they will all be separate threads for the most part
Seperated with C++ classes
A lot of the drivers i want many instances off too
So c++ works well and userspace
And the kernel space may have a few duplicate drivers for init shit until they startup
For like swirls
Serial
But then userpaace can take over and init all serial ports properly
And have ACPI to do it right etc
For keyboards and mouse I’d probably have inputd and then do zero copy IPC with shared pages for the buffers of inputs that that server can glob
@peak cloak what’s your opinion on this
Same for @rotund furnace
idk maybe
okay so
if you do want to write drivers in userspace you need to think about how to handle interrupts
because you need to forward the interrupt handlers to the user process obviously
I was gonna have them be a waitable FD
And then the ISR system will plug into that and set the FDs to awake for the schedular
Mainly I’m trying to get what I already have nice
Because my VFS is utter shit
I need to rework my heap a bit
Get my PMM to use buddy stuff
And get actual VMM working so I can locate virtual address space adddresses
Allocate*
And then I can actually get new features like that
Just napkin planing things right now because I can’t code atm
also you will need IOMMU drivers
(fun)
the second a device can DMA any physical address it's over for your system
that kind of defeats the entire purpose of putting drivers in userspace :3

What about systems without an IOMMU
Also my main point was to seperate complexity imo
panic("no iommu");
And security separately
I would use capabilities somewhat so no random program can do this shit
tough luck then

you can't support them safely
actually this is a good point
thank you for this idea
i will be stealing your idea
:3
i had kernel modules before
but userspace drivers sound cooler
And it’s less work and still somewhat safer even lacking an IOMMU
not exactly
in kernel mode the kernel can manage devices
If you let a user program map shit it will explode

True
I mean the kernel can still manage it no
Somewhat atleast
And your gonna be trusting the drivers you make anyways similar to the kernel
And that’s only on non IOMMU devices
Contiguous physical memory
the fart works already dont nuke it
I need that for DMA
then allocate contiguous physical memory with your freelist 
That can fail

With a buddy allocator it’s really easy to get 2mb to 4kb pages and powers of two inbetween
how 
Fragmentation
Buddy allocators automatically defragmenter themselves
oh
defragme-
yeah no i just cant understand buddy allocators
you do whatever
like literally i cant understand how the fart works
It’s actually really easy
tell me
The freelist is stored in the free pages themselves
So when you XOR an address it points to the physical page
Which has the actual free list node
and then you have many ranks of free lists
And then to allocate you look through them and split as needed
And when freeing you XOR to check if you can merge blocks
And blocks are always paired
So it’s really easy
And just works
really easy they all said
where do you get the free pages
The fuckinf memory map
You use the pages themselves to store the information
So you don’t even need a boot strap allocator for your initial free list pages
@peak cloak does that make sense
And then you use HHDM to make it easypz
No HHDM?
Krill issue
honestly not really
severe brain capacity deficiency
The pages themselves that are free yeah
You just store the node in there
For the free list
And when you do phys addr XOR block size
k
You get the buddy if that block
And that buddy also stores the freelist node
That you need to use to operate
Like to remove it or add etc
Or to check status
And then you just store a bunch of pointers to the heads on the BSS in C
And then when starting it you fill in all of the blocks the highest they go
And because the free blocks themselves describe themselves
And then when you give it out
You just zero it out
Because the metadata isn’t needed when it’s allocated
As it’s a free list
Not a not free and free list
And you can use PFNdb too
No
F
It’s several free lists
One for each order
Like 4kb 8kb 16kb 32kb 64kb 128kb 256kb 512kb 1mb 2mb
@urban mulch maybe you can explain this better
No there is no need
oh
what do these freelists have in them
per order
like ik its a dumb question but like
Like weather it’s buddy is allocated or not
And it has pointers to the next and previous
This may also be in the PFNdb
And if you take an allocation of 4kb
And then take it’s address
And XOR it by 0x1000
You get the buddy
Because every page has a pair
A 2mb block becomes two 1mb blocks in the 1mb free list
And you keep splitting as you go down to the proper size
And when you free you check if the other block is free so you can merge it in the PFNdb
oh
Oh god is it buddy allocators again?
I have explained this one too many times already XD
now with additional challenge (i literally dont understand anything)
yes
ive made one in the past
Okay, do you know what a PFNDB is?
PFNDB is Page Frame Number DataBase. It is metadata about each page of accounted physical memory.
oh
You may have heard of struct page. A PFNDB is an array of those.
fair
what are the contents of struct page
is it like whether it can be accessed in usermode and other such crap or what
For the buddy allocator, there are two main important things:
- Whether the page is in use and if so, for what
- The order of the block to which the page belongs.
Usually you'll also have a reference count but this is not inherent to buddy allocators and we will be supposing it is not there.
A buddy allocator is effectively an array of freelist allocators.
pretty sure it also contains stuff about CoW
Each freelist within using blocks twice as large as the one below
cows live on farms not in my allocator
The "order" of such a block describes how large it is. An order 0 block is one page large. Every order up, twice as large.
A block is PAGE_SIZE << block_order bytes large and aligned physically.
And here comes the neat trick: If a freelist for a smaller order doesn't have a block available, you split a higher-order block until you get one of the desired order. Splitting a block converts it into two blocks one order smaller.
When you free a block, you use the PFNDB to determine how large it is (unless you use sized frees) and find its buddy.
The buddy of such a block is found as follows:
e.g. order 0 block 0x4000-4fff has a buddy at 0x5000-0x5fff.
buddy_page_number = page_number ^ (1 << block_order) (where page_number is physical address divided by page size)
If you free a block and see that its buddy has the same order and is also free, you coalesce the blocks.
This is simply the opposite of splitting a block. since you know the address of the buddy, you can remove it from the correct order's freelist without having to search. Then you coalesce the blocks into one larger block, updating the PFNDB entry of every page in the block to reflect the new situation.
Repease coalescing checks until you can no longer coalesce, then add the result to the appropriate freelist.
a sec
where do you allocate these freelists
the start of the block or something?
The list heads are allocated statically. So you decide an arbitrary maximum order. I chose my maximum to be all the way up at 64, though no block will ever be this large in reality.
fair enough
You do of course need memory to store the PFNDB too. Choose some arbitrary location in the immediately usable memory as the bootloader reports. This overhead is acceptable.
ight
i have the first memory region have some base metadata and pointers to the other metadata tables, the first region ofc has its own,
then thoes tables store the size of it etc and also has an array for the PFBdb and its trivial to goto master table > sub table > PFBDB entry with a few checks
its easy enough to implement and uses the memory in a region its self for it
cinema
i have to implement a pmm soon im almost done with exiting my stupid bootloader creation
helped a lot ig
(i have 1% of the idea of whats going on instead of 0.5%
)
yes why do you ask
mintsuki should do it im not porting limine
i dont want ai slop on MY architecture 
(as in its easy to make a limine os)
(not in that limine is slop its not its fire)
(MAUHAHAHAHAHAHAHA)
honestly the documentation is utter poo
good 
i should probably use limone when i port to the bunch of crap i have planned
claiming the entirety of powerpc for yourself is absolutely vile behavior ngl
powerpc is 32 bit anyways
i dont know anything about 64 bit powerpc yet
i dont want any imac g5 abuse though 
https://git.evalyngoemer.com/user/sign_up
I got this properly working so people can make pull requests and shit properly on my server 
I hope it works
Email is a fucking bitch
And it’s public
the robits
I’m taking over codeberg
the chat gipities
host kvass 
Make an account and push it
Be my guest
i thought this was for you only
This is a public service
make pull requests for os
fair
You can also have your own repos
I’m just doing a public service since I have the gear
Always good to have extra mirrors and shit
swear on your soul that you wont pull up my password and find where i live and post it on the dark web

And to have a git server that’s not corpo owners
And one that actually preforms well
Unlike codeberg

random stranger on the internet vs small german company
Hey
I’m no random stranger
unrandom unstranger
whenever mintsuki chooses to host limine on your server thats when codeberg will decide to go boom boom

i only know of them because of limine 
also apparently codeberg is a non profit
random stranger on the internet vs small german nonprofit
Yeah they are
But they are never online

true 
apparently codeberg's about page links to several other git hosting websites
sourcehut and other crap
im probably just gonna make a mirror on your crap and host kvass on codeberg probably
Why not host on mine
And mirror to codeberg

what if you reconsider tomorrow or smth
I won’t
Im literally planning on hardware upgrades just for this
For my birthday I’m gonna get two 8tb hard drives
ddos
3 gb of hard drive storage instead of 2
parental figures
what happened to your parents 
I don’t think anyone is gonna ddos this anyways
It’s a dinky ass git server
Not some massive as target
put ddos prevention crap too
Do I look like I’m made of money
make your own ddos prevention crap
Do I look like I’m made of pure solid diamond

But yeah kvass always has a home my git server
no youre made of french baguette
Oh also secret

WHAT OS
Shhhhh
But yeah @peak cloak
Why not fucking have kvass there
Don’t you want to support honest workers
Who cares about non profits
im willing to host kvass on literally any obscure git hoster that exists
github is literally unholy to me
That’s an evil gif
But I’m not actuslt evil
You know me

What if I made it good apple and made it green
maybe
anyways im not gonna say where i actually host kvass but im gonna mirror it to codeberg and your evil website
ok fine
im gonna invest early
whenever i opensource it though
bitcoin became worth like 3 bazillion mario coins
just slap MIT
call it a day
oh btw @peak cloak
WJHAT
wdym pushit
ok honestly lemme just enter the kernel like a sane person and then im gonna open sauce it
ok i return
there is no typo

O
why did you send me a picture of a mcdonalds in australia
Was it engadine maccas (we had a prime minister claim to have not shit himself there)
i lied
MUAHAHAHAHAHAHAHAHAH
also WHAT
there's a clip of him telling the news that "I did not shit myself at an engadine maccas in 1997"
(He shit himself)
I can neither confirm nor deny that
I am confirming it
Thinking about my tmpFS how how ls works
How the fuck does LS work
As in the system calls / mlibc sysdeps
For tmpfs I’d probably store an inode that’s a directory that points to data blocks that have data
And then my data blocks would be a bunch of pages from the PMM for a file and will be contiguous if possible
But il have a seperate linked list to store those said pages
So for now it will be bad
But later it can grab 2mb blocks at a time
And then string those together
And then that will use the normal heapy heap
And il probably do an uhh slab of many orders
But il store free data right before the pointer I give
So a 512 byte order is more 528
But ehhh
Worth it imo
This seem reasonable?
And then I could do a hashmap for file names to “inodes” or whatever
Not sure exactly where to store the inode numbers or how to index them or whatever shit
String into hashmap = inode
And that’s a regular array that’s resizable or some shit
You should strongly consider personally gate-keeping who gets to register.
You don't want some internet rando asshat to join and upload 5TiB of illegal content
Should I add manual approval after signing up?
Fore sure
I know I wouldn't want to risk letting internet randos access an effectively unmoderated service I host
What’s the config thing for that again?
Or I can go look on that thing but the document is fucking ass
but I would be moderating jt atleast the bare minimum 
Why can’t I have both
Make random people need an email before me approving them
Okay I can make them default restricted
“DEFAULT_USER_IS_RESTRICTED: false: Give new users restricted permissions by default.”
I cant find any info on what the fuck that means though
It literally locks down the account more than users with no account

@urban mulch what exactly do you propose I should do here
Just do MANUAL_CONFIRM then
what is this lol
Forgejo
I guess it’s still
Good for password resets
You're hosting your own version of forgejo?
Why not
I thought I could open it up but they seem to have stupid config options

Wait big brain idea @soft snow
For my tmpfs
Il just use ext2
And then il have a generic rambd
Which will be allocated with like 32mb of ram or some shit
Or based on the initramfs
Then that gets unloaded into the ext2
Which is ontop of ram block device
And it’s all 4kb blocks because paging or some shit
And then that same ext2 driver
Will work on everything else I may or may not need
And then I have a really solid filesystem
huh what is this dude on
what
Never heard anything like it
not exactly the most conventional initrd formatt
but it sure should work
and it kills two birds with one stone
and its readable and writeable
it also means i cant horrible fuck up designing a tmpfs
is there anything wrong with this though?
Plus it means I could technically put any filesystem ontop of the other driver? So you could allocate tmpfs devices easy and then treat them exactly like a disk in userspace too
idk it's just not an fs that you can easily generate
I mean it’s also not horribly hard
And I need to be able to have ext2 drivers anyways later
Wouldn’t it not be make the super block and other starting structures and then read the tar file and then create the files and folders as needed?
for tiny little macros?
my utils folder is the junk drawer of the kernel
You'll end up with a single file concerned with too many things not related to each other.
You can already see it is wrong because you have both alignment helpers and logging in one file
maybe i can have utils/macros/logging and utils/macros/alignment
no, just put the macros in the header files that define the relevant things
So log macros in your log header files
💀
bug patched
and confirmed workin
let me validate and push this
this has the seriel + ps/2 + tsc patches
shit i need to update the readme

waow i fixed it
it properly says you need clang

Nix fixes this btw
shut up
should i fucking bundle a nix package config file
talk cheap send patches?
I don’t use nix enough to write coherent configs :/
i never said they had to be good
Ah then
it just has to spin up compile GCC and the kernel and spit out an iso
so people who wana use the kernel can do it easily
and get like reproducable iso hashes
download stuff = yes
Build kernel = very good
Run = very good
Lag = none
Build time = short
Bugs = no
There is config
@rotund furnace Can you also put the parameter
popularity = > windows
Pls
Thank you for patches
Really backs up the talk
I’m getting side tracked 
I’m making proper implementations of shit
Because that hex to u64 function is dumb and stupid
Making ones that are like
Properly C compliant mostly sorta not really

But like still better
@rotund furnace the VMM rb tree stuff should work on any memory map right not just the one right
wana make sure im not high
where each CR3 has its own rbtree for its mappings for user processes
and my kernel ones all use the main one thatl just manager the upper part
hm?
like every process should have the VMM instace stuff
each address space has a vmm which has the rb tree root
yes yes




