|
11911
|
Create: Starfall by @linqfy | Stardance
|
linqfy
|
0
|
5.77
|
0
|
[]
|
[{"post_id": 15054, "ts": "202 [{"post_id": 15054, "ts": "2026-06-24T13:32:30Z", "hours": 2.4792, "text": "Devlog #4 - Coding a Custom Sun & Planet Shader for My Space Mod! I finally got around to adding the skybox, the sun, and all of the space effects to my mod! For the sun shader, I wanted it to look super bright and alive instead of just a flat texture. I wrote a shader that procedurally generates solar granules and convection cells using 3D noise (FBM) so it looks like it’s churning. Then, I disabled the ACES tonemapping clamp on the sun itself. This lets it output raw HDR values up to 18.0, making it act as an actual light source that triggers a massive, blinding emission. The biggest headache was the bloom disappearing whenever the sun went slightly off-screen. To fix it, I split the bloom into two parts: the screen-space lens flares (ghosts, streaks) and the massive ambient Rayleigh/Mie scattering. I rewrote the scattering math to run in 3D using the angle of your camera relative to the sun. Now, even if you look completely away, the massive orange and blue sun glow naturally wraps around the edges of your screen. I also added some dynamic wobbling and chromatic aberration to the anamorphic streaks to make the camera lens feel real. This is just the first beta, but I’m really liking how it looks for now! The planets are also looking way better now too, I added a back-lit refraction glow that bends light around their dark sides, and boosted their atmospheric scattering so they actually bloom when the light hits them. Still got a ton of space stuff to research and code, but this is a solid start."}, {"post_id": 11039, "ts": "2026-06-18T02:08:34Z", "hours": 1.3178, "text": "Devlog #3 - Multi-planet rendering + LOD I made some massive rendering breakthroughs today. The main goal was getting multiple planets working in the 3D world without tanking the GPU. I built a system that lets me add as many planets as I want, tweak their colors, and set their exact positions. Performance is a big priority, so I implemented a custom Level of Detail (LOD) system. When you are far away, the mod swaps the planet for a low-poly version that keeps the textures intact. As you fly closer, it dynamically cranks up the polygon count so it rounds out into a high-quality sphere. It saves a ton of rendering overhead. I did run into some weird graphical glitches. At one point, the planets were following the camera around the screen instead of staying fixed in the world, and looking at them from certain angles turned them into morphing blobs. It took some digging, but I figured out it was a mix of matrix projection issues and backface culling deleting half the triangles. I manually reconstructed the model-view matrix from the camera’s rotation to get the world translations plotting perfectly, and disabled culling during the planet render passes so the spheres stay solid. Everything is pushed and working great now. I finally have a sky filled with actual 3D planets you can fly towards."}, {"post_id": 9682, "ts": "2026-06-16T03:01:41Z", "hours": 0.3042, "text": "Devlog #2 - Planets Are No Longer Fake (Prev devlog was a billboard test lmao) Got the first 3D planets rendering in-game today. My original plan was to render planets as simple quads facing the camera, but I realized that would become a nightmare once I wanted proper depth, spinning textures, or atmospheric effects. Instead, I wrote a UV sphere mesh generator using Minecraft’s Tesselator and now planets are rendered as actual 3D geometry. The nice part is that planets naturally intersect with the world and correctly handle depth occlusion without any special tricks. The tradeoff is a higher polygon count, but that’s easy to control through sphere subdivisions and should be plenty fast for distant celestial bodies. The screenshot is still using placeholder colors and a debug UI, but seeing a real planet hanging in the sky for the first time was a pretty cool milestone."}, {"post_id": 9649, "ts": "2026-06-16T01:48:58Z", "hours": 1.6683, "text": "Devlog #1 - Project Setup Complete Started work on a Minecraft space exploration mod for NeoForge, inspired by Outer Wilds in Minecraft. Today was mostly project setup: getting NeoForge configured, integrating Create Aeronautics/Sable, and setting up Veil for rendering. Most of the time was spent making dependencies play nicely together and fixing configuration issues before I could even think about writing code (Big headache here). Not much to show yet, but the foundation is finally in place and I can start working on the actual fun stuff: planets, exploration mechanics, and more. Looking forward to seeing where this project goes."}]...
|
Title: Create: Starfall by @linqfy | Stardance
De Title: Create: Starfall by @linqfy | Stardance
Devlogs:
Devlog #1 - Project Setup Complete Started work on a Minecraft space exploration mod for NeoForge, inspired by Outer Wilds in Minecraft. Today was mostly project setup: getting NeoForge configured, integrating Create Aeronautics/Sable, and setting up Veil for rendering. Most of the time was spent making dependencies play nicely together and fixing configuration issues before I could even think about writing code (Big headache here). Not much to show yet, but the foundation is finally in place and I can start working on the actual fun stuff: planets, exploration mechanics, and more. Looking forward to seeing where this project goes.
Devlog #2 - Planets Are No Longer Fake (Prev devlog was a billboard test lmao) Got the first 3D planets rendering in-game today. My original plan was to render planets as simple quads facing the camera, but I realized that would become a nightmare once I wanted proper depth, spinning textures, or atmospheric effects. Instead, I wrote a UV sphere mesh generator using Minecraft’s Tesselator and now planets are rendered as actual 3D geometry. The nice part is that planets naturally intersect with the world and correctly handle depth occlusion without any special tricks. The tradeoff is a higher polygon count, but that’s easy to control through sphere subdivisions and should be plenty fast for distant celestial bodies. The screenshot is still using placeholder colors and a debug UI, but seeing a real planet hanging in the sky for the first time was a pretty cool milestone.
Devlog #3 - Multi-planet rendering + LOD I made some massive rendering breakthroughs today. The main goal was getting multiple planets working in the 3D world without tanking the GPU. I built a system that lets me add as many planets as I want, tweak their colors, and set their exact positions. Performance is a big priority, so I implemented a custom Level of Detail (LOD) system. When you are far away, the mod swaps the planet for a low-poly version that keeps the textures intact. As you fly closer, it dynamically cranks up the polygon count so it rounds out into a high-quality sphere. It saves a ton of rendering overhead. I did run into some weird graphical glitches. At one point, the planets were following the camera around the screen instead of staying fixed in the world, and looking at them from certain angles turned them into morphing blobs. It took some digging, but I figured out it was a mix of matrix projection issues and backface culling deleting half the triangles. I manually reconstructed the model-view matrix from the camera’s rotation to get the world translations plotting perfectly, and disabled culling during the planet render passes so the spheres stay solid. Everything is pushed and working great now. I finally have a sky filled with actual 3D planets you can fly towards.
Devlog #4 - Coding a Custom Sun & Planet Shader for My Space Mod! I finally got around to adding the skybox, the sun, and all of the space effects to my mod! For the sun shader, I wanted it to look super bright and alive instead of just a flat texture. I wrote a shader that procedurally generates solar granules and convection cells using 3D noise (FBM) so it looks like it’s churning. Then, I disabled the ACES tonemapping clamp on the sun itself. This lets it output raw HDR values up to 18.0, making it act as an actual light source that triggers a massive, blinding emission. The biggest headache was the bloom disappearing whenever the sun went slightly off-screen. To fix it, I split the bloom into two parts: the screen-space lens flares (ghosts, streaks) and the massive ambient Rayleigh/Mie scattering. I rewrote the scattering math to run in 3D using the angle of your camera relative to the sun. Now, even if you look completely away, the massive orange and blue sun glow naturally wraps around the edges of your screen. I also added some dynamic wobbling and chromatic aberration to the anamorphic streaks to make the camera lens feel real. This is just the first beta, but I’m really liking how it looks for now! The planets are also looking way better now too, I added a back-lit refraction glow that bends light around their dark sides, and boosted their atmospheric scattering so they actually bloom when the light hits them. Still got a ton of space stuff to research and code, but this is a solid start....
|
1793234989.4832423
|
1793839789.4832423
|
|
11950
|
Assembly os x64 custom kernel and bootloader by @s Assembly os x64 custom kernel and bootloader by @scrt401 | Stardance...
|
scrt401
|
1
|
415.3
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-17T10:02:38Z", "hours": 415.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Simple os with access to Ring 0 stuff the ai no work sadly", "repo": "https://github.com/majster0su0lin/SofaOs/tree/SofaOs-x86/x64", "demo": "https://github.com/majster0su0lin/SofaOs/releases/tag/V1"}]...
|
[{"post_id": 69772, "ts": "202 [{"post_id": 69772, "ts": "2026-09-17T19:19:09Z", "hours": 0.3047, "text": "ok so let me defend originality : it is a ring 0 os made for hardvare inspection while i saw others did os stuff to before me on stardance i already made an os before stardance in arm , technicality : assembly ,usability : it is meant to inspect pcs when something goes wrong hardvare level not daily driver, you decide storitelyng i pored my heart into those devlogs"}, {"post_id": 69042, "ts": "2026-09-16T08:32:04Z", "hours": 9.0064, "text": "Ok so refined devlogs polished sofaos and GitHub couldn’t ship because rhe whole kernel inflated from 52 to 838 sectors by some miracle, destroyed interrupt table, tensor hard coded stuff and other stuff it ruined my day also ok so let me defend originality : it is a ring 0 os made for hardvare inspection while i saw others did os stuff to before me on stardance i already made an os before stardance in arm , technicality : assembly ,usability : it is meant to inspect pcs when something goes wrong hardvare level not daily driver, you decide storitelyng i pored my heart into those devlogs"}, {"post_id": 68695, "ts": "2026-09-15T15:39:08Z", "hours": 3.1717, "text": "So today i finished argmax which finds closest token to response, now i have everything but it still has some errors it prints 0 every time so meybie some register colision but the good thing is that it doesn’t crash."}, {"post_id": 66064, "ts": "2026-09-11T17:07:16Z", "hours": 6.7411, "text": "Ok i have successfully made detokenizator which goes trough the token id book that many times as a token because token id =id book entries untill the token, and also i have made matrix–vector dot product calculator which goes through all token ids and translates them into a big amount of vectors which then in another step i will be doing comparison hbuf with all these vectors to find a token with lovest diff and that will be our output token, but big but it still isn’t tested i will be testing it when i will have the full command done for now i just want to live in an illusion that my code is error free"}, {"post_id": 65678, "ts": "2026-09-11T00:04:31Z", "hours": 7.4689, "text": "There was a problem with pointers in rnsm found it when i did double check and from there errors just piled up but at least its fixed now"}, {"post_id": 65088, "ts": "2026-09-09T23:44:59Z", "hours": 10.7261, "text": "Today i got help from my great teacher and was able to do more than usual, today i did hbuf setuper it basically just calls fcon 576 times to translate the values from 16 bit quantization to 32 then i have written a function RMSNorm which uses hbuf and weights you give it and calculates rescaled feuture vector"}, {"post_id": 64514, "ts": "2026-09-08T23:45:58Z", "hours": 4.1469, "text": "I have no idea how to fix it so i retreated ro the ol reliable method by first hardcoding it and after some time actually fixing it"}, {"post_id": 64041, "ts": "2026-09-08T05:17:04Z", "hours": 9.4239, "text": "Today i am a bit better so i did the harder part that is needed to be done, i have made tensor info gatherer, basically each layer has 9 tensor info, so for my model 9*30 tensor infos, also the string i am comparing in the function needs to be like [blk.][number of current layer in decimal(use bintrn)][specification string], it still doesn’t work but it will be something like infinite inc loop to memory or division basically smth that generates general protection, also because I was smart i saved my previous error where i used tensor info praser so i didn’t Neded to reerite it."}, {"post_id": 63041, "ts": "2026-09-06T16:40:58Z", "hours": 13.9978, "text": "Ok so uuh those 5l of Kofola wasn’t a great ide today i got a fever or flu or whatever the thing that makes you feel hot but i made some progress even though it was hard cuz i had a headache and couldn’t do anything so what i did i made a f16 to 32 translation and you might say hmm but this doesn’t seem too vomplex first of all i had to split registers inro 3 sections do calculation on them and the glue them together to xmm0 but what you might not know is if you don’t allow xmm is 32 bit mode it will throw gp an the whole code and you cant know why it crashed because whole runtime in crash log looks absolutely normal for some reason also I don’t actually care about the time anymore i just want to get this working so i can get a laptop to not code on my phone"}, {"post_id": 62412, "ts": "2026-09-05T19:08:49Z", "hours": 4.2733, "text": "Ok bad News today i drank 5l of Kofola and now me attention me hyperactive me cant concentrate but did token and bos token enumetion there was a problem with division because of no xor rdx,rdx but ez fix if boestoken add 1 it adds tokwn"}, {"post_id": 61794, "ts": "2026-09-04T21:32:05Z", "hours": 9.7972, "text": "Made the metadata praser work i was using tensor format and nkt metadata Format also verifyed it works on pc"}, {"post_id": 61430, "ts": "2026-09-04T10:41:02Z", "hours": 10.1667, "text": "Tokenizer done now for vector context calculator . The tokenizer was somwhat refusing to work but one rewrite later it subdued to my power it is split into teo parts the text decoder and encoder decoder formats the words for encoder and encoder finds tokens for the words"}, {"post_id": 61031, "ts": "2026-09-03T18:48:37Z", "hours": 9.1417, "text": "Ok i gave lost the war against the matadata praser i will not fight it now i will fix it in second ship for now i have hard coded the data needed and also made the core of the tokenizer which was relatively easy compared to the praser"}, {"post_id": 60700, "ts": "2026-09-03T07:49:19Z", "hours": 9.9789, "text": "Ok all metadata entry data prased but when i delete the print at the bottom it for some reason triple faults going to report every ±9 hrs because i need to speedrun this because the stardance is ending soon now onto tensor data praser"}, {"post_id": 60330, "ts": "2026-09-02T16:41:32Z", "hours": 9.3447, "text": "Ok bigg devlog todat i decided to speedrun this so i can ship this project as fast as possible also changed the model to a smaller native f16 quantization and It works which is a proof that anyone can put their model into sofaos and run it rn it just loops troug metadata to find general architecture"}, {"post_id": 59645, "ts": "2026-09-01T15:49:30Z", "hours": 5.2714, "text": "Hello good news today have started on setting up the data from GGUF rn it is just getting version metadata entryes and tensor entry, I Also started a loop for the metadata entryes but just started this one was easy cuz it has prefixed everything 4 bytes gguf magic 4 version 8 metadata entryes and 8 tensor info entry which makes 24 bytes in total"}, {"post_id": 58380, "ts": "2026-08-30T19:52:10Z", "hours": 6.5333, "text": "I have successfully loaded whole LLM problem was that It was loading 1 gb by 512 bytes and that takes very long and thats why it seemed it hanged I fixed it by giving it a counter so you can see that it doesn’t hang"}, {"post_id": 57573, "ts": "2026-08-29T19:16:39Z", "hours": 6.3667, "text": "Ok sooo I made the code buuut it hangs when I do the loading idk what happening will have to debug"}, {"post_id": 55739, "ts": "2026-08-27T18:30:20Z", "hours": 6.9333, "text": "Ok I give up on writing it, cuz GGUF file structure is ass and I can’t write it in the way it should be I am going to pull a cheap trick by putting a control string at the end of the file to know when the file is ending below is structure of how the whole file should look like"}, {"post_id": 54996, "ts": "2026-08-26T12:56:49Z", "hours": 8.4742, "text": "Ok I was figuring out how to load the gguf file which I think I got right but I can’t find a way to know how many sectors to pull out of disk because the metadata in gguf aren’t always the same nor size of the entries are the same so there is now way to know when they end and I need them to find the size of the file in picture you can see how the metadata is structured"}, {"post_id": 54059, "ts": "2026-08-24T20:31:14Z", "hours": 2.0172, "text": "Ok I have made a new command inout it let’s user chose number port in and port to listen from and it spits out response from the port as you can see I tried corrupting time register and it worked"}, {"post_id": 53159, "ts": "2026-08-23T16:30:52Z", "hours": 4.3508, "text": "Ok so I half rewritten the code for sector read I had to drop hard coded 0 and look for actuall devices to get the data from as you can see it works still"}, {"post_id": 52420, "ts": "2026-08-22T15:26:25Z", "hours": 4.1333, "text": "Ok so I was working on gluing gguf file at the end of my iso you can see image it was successful also needed to generalize ahci driver to work on all PCs now writing the gguf retrieve from disk code"}, {"post_id": 51949, "ts": "2026-08-21T22:06:31Z", "hours": 6.9186, "text": "Ok so uuuh….. Somehow secr destroyditself up and I had to fix it the thing is that from 0xffffff… Somehow one of the f magically dissapeared and I had to basically trace whole Drs sector to find what was wrong also waking aps for some reason isn’t working even I am using textbook code to wake it up I now have no idea why is it not working mameybie I will gat back to it at the end and now do the special function because everyone on stardance for some reason started doing X64 os so I had to come up with something radical, I am going to make a full local assembly llm chat engine like llama.cpp fully in assembly for sofaos all things from scratch tokenizer network loading calculation and other stuff I have nothing really to show so just enjoy some random pic from my gallery"}, {"post_id": 50626, "ts": "2026-08-19T21:25:41Z", "hours": 1.5097, "text": "Aps not responding should put 67 to px67 but aps not doing idk if because of qemu or whatever I don’t want to debug this piece of shi"}, {"post_id": 48801, "ts": "2026-08-17T10:37:03Z", "hours": 9.8594, "text": "Spent I don’t even know how much time I lost track of time doing this shit I did it whole night I am happy that I am going to sleep at 12:33 the error was that I wasn’t sending enough sipis so the aps didn’t actually wake up but I didn’t knew that so I was tracing the whole os to find the error then I actually checked on internet how should it be done and that’s when I was finally able to fix this simple ass problem"}, {"post_id": 46606, "ts": "2026-08-13T23:28:04Z", "hours": 9.4331, "text": "Finished the core wakeup now I can wakeup any numver of cores that I have and now I am going to make some serious multitasking i still need to do the trampoline to launch the cores to 64 bit mode but they will be fast also the limit of cores for legacy PCs is 255 but it is still engouh to wake up amd epyc"}, {"post_id": 45351, "ts": "2026-08-11T19:00:05Z", "hours": 7.7386, "text": "Ok I have found the number of cores which is a huge milestone now I need to find what is the bsp to not wakeup already woken up core number of cores is in a memory buffer 256 bytes big cous the CPU doesn’t have enough IDs for more than 255 cores so even In future it will be ok"}, {"post_id": 42209, "ts": "2026-08-06T20:25:10Z", "hours": 6.2731, "text": "Found Madt table finally going to get number of cores to wakeup"}, {"post_id": 41610, "ts": "2026-08-05T22:27:33Z", "hours": 7.7322, "text": "I did some preparations for init sipi sipi trampoline to wake up more cores for multitasking it just finds acpi rsdp in memory I also want to be able for user to chose how many cores to wakeup"}, {"post_id": 39343, "ts": "2026-08-02T08:01:35Z", "hours": 9.4314, "text": "Added the ability to read what’s on the disk there was a problem with R14 cuz one function that I called used it but push and pop fixed it after I traced the problem without it would print 20 endlessly till it crashed"}, {"post_id": 36740, "ts": "2026-07-29T00:11:34Z", "hours": 4.6686, "text": "Ok I have found the solution instead of looking trough all ports it stops on the firt found idk how it works but it works now I can extract data from disk"}, {"post_id": 35588, "ts": "2026-07-27T03:43:28Z", "hours": 9.2492, "text": "Something is very wrong here. Every debug marker along the boot/init path prints exactly like it should, and it still never makes it to the shell. Going to need a proper trace through this instead of guessing."}, {"post_id": 32921, "ts": "2026-07-22T12:09:35Z", "hours": 8.0367, "text": "PCI bus enumeration, done by brute-force, but like every os does it this way loop over every bus, device, and function number, write a config address to IO port 0xCF8 , read whatever comes back from 0xCFC . All ones means nothing’s there; anything else gets recorded. Once every device on the bus is found, it scans the results for a class code matching AHCI (SATA storage), grabs that device’s BAR5, and starts bringing the controller up — reset bit set, poll until it clears, enable global host control. This is what opens up actual disk read/write instead of relying on BIOS"}, {"post_id": 29065, "ts": "2026-07-15T18:30:38Z", "hours": 0.2567, "text": "Added whatindr just copied function whatincr and changed registers from control to debug"}, {"post_id": 28980, "ts": "2026-07-15T16:38:29Z", "hours": 12.4869, "text": "I added so when the user types it automatically moves screen to VGA buffer so it doesn’t overwrite bad memmory and implemented this thing for cpritn too so if you are near end of the screen it automatically moves up (number of rewrites this function took 3) in pic you can see how cpritn automatically moved up"}, {"post_id": 26737, "ts": "2026-07-11T18:16:27Z", "hours": 9.8742, "text": "Added translate which translates number from hex to dec and also the other way and command to see what in memory I had to make a new function to accept hex and Dec and figure out which one is which than grab byte from memory not 8 bytes was stuck on that then output which was easy cus I already have function for that then added translate which just uses hexbin function for Dec and bin for hex and outputs in the other format also I don’t have much time to code because I am a slave on a construction now and I get paid absolute minimum"}, {"post_id": 20804, "ts": "2026-07-02T14:45:38Z", "hours": 7.6444, "text": "Ok so today I have made saythis command which is basically echo (system says what you tell it to) and whatincr which basically spits out what is in control registers which might be useful for some repairman or whatever but I had to make new functions like bintrn which turns normal pc number into decimal ASCII string but I had the loop wrong it started at wrong point but now it should work"}, {"post_id": 18754, "ts": "2026-06-29T23:04:10Z", "hours": 7.3631, "text": "Added scroll up, just the reverse of scroll down — but still needed its own direction logic and its own set of variables reset correctly, and the first version was so badly written that i just rewrote the thing"}, {"post_id": 16826, "ts": "2026-06-27T10:08:25Z", "hours": 14.0714, "text": "Limited coding time cuz i am on vacation in Berlin but made progress on scrolling the screen now scrolls down good text overflows the bottom. Scroll up still doesn’t exist the first attempt was so tangled it wasn’t worth saving, so that one got scrapped rather than patched."}, {"post_id": 14559, "ts": "2026-06-23T18:40:49Z", "hours": 15.5939, "text": "Added more text commands and started on ones that actually do something, like echo. Also started work on moving text up and down the screen, which is lowk hard"}, {"post_id": 12479, "ts": "2026-06-20T11:33:22Z", "hours": 9.3064, "text": "Completed the command system — a compare routine ( cmper ) checks whatever’s typed against a table of known command strings and jumps straight to that command’s handler on a match. First command wired up was cls , mostly because the screen clearer routine already existed. Everything else gets added the same way from here."}, {"post_id": 11616, "ts": "2026-06-18T22:21:16Z", "hours": 5.1686, "text": "Terminal UI is functional now — Enter does something, and extended interrupts (arrow keys) get decoded properly instead of coming through as garbage. Also added a distinct sys response visual state vs just characters The color choices right now are not best need to actually look into color theory."}, {"post_id": 11321, "ts": "2026-06-18T15:03:42Z", "hours": 3.1789, "text": "Forgot to say this last time, but there’s now a basic (not working) concept of user input reaching the system layer — just the shape of how it should work, not the real thing yet. Finishing that up next so it actually looks like a terminal. Worth sayi the cursor ( curzor ) tracking and the cls screen-clear command both went in a little earlier and are what everything since has been built on top of."}, {"post_id": 11192, "ts": "2026-06-18T09:50:01Z", "hours": 8.1875, "text": "Text now behaves like a normal shell — typing lands where it should, and added a working delete/backspace key plus some general UI cleanup. Starting to lok like an actual terminal instead of a proof of concept."}, {"post_id": 10930, "ts": "2026-06-17T22:14:13Z", "hours": 4.3675, "text": "Keyboard handler is fixed. Can freely type now. thought: there’s currently nothing stopping unrestricted writes from going past where they should, which means someone could in theory type their way into overwriting parts of the running system. Needs boundaries before this goes further."}, {"post_id": 10672, "ts": "2026-06-17T15:09:06Z", "hours": 4.9003, "text": "Fixed yesterday’s error. Now testing on real hardware to check whether the machine actually virtualizes PS2 keyboard controller the same way QEMU does, since the handler logic depends on that"}, {"post_id": 10316, "ts": "2026-06-16T23:51:15Z", "hours": 8.5125, "text": "Tried implementing a keyboard press handler. Sadly, it does not work. Something in the interrupt handling isn’t right — more debugging needed before typing does anything useful."}, {"post_id": 9785, "ts": "2026-06-16T07:03:14Z", "hours": 6.5003, "text": "Finally transitioned into 64-bit mode, so the actual OS can start getting written now. Not going to explain every step in detail since it’s always the same , but simple: built page tables using 2MB pages so the fourth paging level (the 4KB page table) could be skipped entirely, set up the stack, and did the rest of the long-mode setup (PAE, the EFER long-mode-enable bit, then paging itself) before the far jump into 64-bit code."}, {"post_id": 9416, "ts": "2026-06-15T19:29:46Z", "hours": 6.1778, "text": "Big milestone got it running on an actual my pc instead of just QEMU. Had to go back into stage 1 real BIOSes are pickier than QEMU’s about a few things. Nothing structural changed, just les forgiving to handle."}, {"post_id": 9090, "ts": "2026-06-15T05:59:09Z", "hours": 5.4553, "text": "Ok found the bug it was bad cmp flag check still a bad Habit I have from arm to instead of je is Zero try to do arm syntax and do jz, (BZ branch if zero) but now it works ok"}, {"post_id": 8967, "ts": "2026-06-14T22:37:16Z", "hours": 14.9994, "text": "Pulled an all-nighter and finally got a boot working — turned out QEMU was set to -nographic, so my VGA output was being generated correctly but never actually displayed. Once I fixed that, i found a new problem up: once in 32-bit mode, my code started printing from the top of the screen and overwriting text the BIOS had already written. Progress, but a new bug was right behind the old one. Still it doesn’t want to move forward it should print k at the end so something is wrong I am going to investigate It."}, {"post_id": 8362, "ts": "2026-06-13T22:01:15Z", "hours": 16.1964, "text": "I hate this stupid code , literally the only thing I do is find an error, find what could possibly cause it, fix it, and it still doesn’t work. Do that a hundred times, and it turns out the BIOS — which promises not to touch DL — corrupts it anyway during interrupt 0x16. Whatever. Still not fully working, but at least I’ve got the core structure for moving into 32-bit mode. I hate this — why do all x64 processors have to wake up going “uhm I think I’m an IBM processor from 1967” instead of just dropping into 64-bit like ARM does? Also my PC screen broke, so now I’m SSH’d in through Termux to code this thing. I hate assembly but low-key need a new PC — that old Compaq 6510b with 2GHz and two cores isn’t cutting it anymore."}, {"post_id": 7061, "ts": "2026-06-11T20:39:29Z", "hours": 3.8658, "text": "Getting close to 32-bit mode. Added a memory tester using INT 0x15, EAX=0xE820 so the OS actually knows how much RAM exists and where, instead of assuming. Also built two different A20 gate openers — the fast method through port 0x92 first, and a manual read/write test on mirrored addresses as a fallback if that doesn’t take. If one fails, the other starts"}, {"post_id": 6770, "ts": "2026-06-11T10:43:03Z", "hours": 5.9658, "text": "Went back and leaned stage 1 more heavily on the print funtion ( cpritn ) instead of duplicating printing logic, and tightened up the handoff into stage 2. Stage 2 now loads the kernel using a preset Disk Address Packet instead of recalculating the sector count and offset from scratch every single time it runs."}, {"post_id": 5895, "ts": "2026-06-09T21:12:59Z", "hours": 2.0008, "text": "Added LBA (logical block addressing) table implementation — sadly no support hard drives that don’t support it. Also added a test so if the computer’s too old to do extended reads, it just refuses to boot instead of silently corrupting stuff. Auto-retry if something goes wrong, and it jumps to address 0x7E00, where the end of the 2# stage starts."}, {"post_id": 5202, "ts": "2026-06-08T21:59:31Z", "hours": 0.3206, "text": "Did some testing on the 1# stage bootloader today. Now I need to link it up to the 2# stage and then to the actual OS — right now the 1# stage basically just saves what the BIOS hands us (bios present) and tells the system where the 2# stage lives."}]...
|
Title: Assembly os x64 custom kernel and bootloade Title: Assembly os x64 custom kernel and bootloader by @scrt401 | Stardance
Devlogs:
Did some testing on the 1# stage bootloader today. Now I need to link it up to the 2# stage and then to the actual OS — right now the 1# stage basically just saves what the BIOS hands us (bios present) and tells the system where the 2# stage lives.
Added LBA (logical block addressing) table implementation — sadly no support hard drives that don’t support it. Also added a test so if the computer’s too old to do extended reads, it just refuses to boot instead of silently corrupting stuff. Auto-retry if something goes wrong, and it jumps to address 0x7E00, where the end of the 2# stage starts.
Went back and leaned stage 1 more heavily on the print funtion ( cpritn ) instead of duplicating printing logic, and tightened up the handoff into stage 2. Stage 2 now loads the kernel using a preset Disk Address Packet instead of recalculating the sector count and offset from scratch every single time it runs.
Getting close to 32-bit mode. Added a memory tester using INT 0x15, EAX=0xE820 so the OS actually knows how much RAM exists and where, instead of assuming. Also built two different A20 gate openers — the fast method through port 0x92 first, and a manual read/write test on mirrored addresses as a fallback if that doesn’t take. If one fails, the other starts
I hate this stupid code , literally the only thing I do is find an error, find what could possibly cause it, fix it, and it still doesn’t work. Do that a hundred times, and it turns out the BIOS — which promises not to touch DL — corrupts it anyway during interrupt 0x16. Whatever. Still not fully working, but at least I’ve got the core structure for moving into 32-bit mode. I hate this — why do all x64 processors have to wake up going “uhm I think I’m an IBM processor from 1967” instead of just dropping into 64-bit like ARM does? Also my PC screen broke, so now I’m SSH’d in through Termux to code this thing. I hate assembly but low-key need a new PC — that old Compaq 6510b with 2GHz and two cores isn’t cutting it anymore.
Pulled an all-nighter and finally got a boot working — turned out QEMU was set to -nographic, so my VGA output was being generated correctly but never actually displayed. Once I fixed that, i found a new problem up: once in 32-bit mode, my code started printing from the top of the screen and overwriting text the BIOS had already written. Progress, but a new bug was right behind the old one. Still it doesn’t want to move forward it should print k at the end so something is wrong I am going to investigate It.
Ok found the bug it was bad cmp flag check still a bad Habit I have from arm to instead of je is Zero try to do arm syntax and do jz, (BZ branch if zero) but now it works ok
Big milestone got it running on an actual my pc instead of just QEMU. Had to go back into stage 1 real BIOSes are pickier than QEMU’s about a few things. Nothing structural changed, just les forgiving to handle.
Finally transitioned into 64-bit mode, so the actual OS can start getting written now. Not going to explain every step in detail since it’s always the same , but simple: built page tables using 2MB pages so the fourth paging level (the 4KB page table) could be skipped entirely, set up the stack, and did the rest of the long-mode setup (PAE, the EFER long-mode-enable bit, then paging itself) before the far jump into 64-bit code.
Tried implementing a keyboard press handler. Sadly, it does not work. Something in the interrupt handling isn’t right — more debugging needed before typing does anything useful.
Fixed yesterday’s error. Now testing on real hardware to check whether the machine actually virtualizes PS2 keyboard controller the same way QEMU does, since the handler logic depends on that
Keyboard handler is fixed. Can freely type now. thought: there’s currently nothing stopping unrestricted writes from going past where they should, which means someone could in theory type their way into overwriting parts of the running system. Needs boundaries before this goes further.
Text now behaves like a normal shell — typing lands where it should, and added a working delete/backspace key plus some general UI cleanup. Starting to lok like an actual terminal instead of a proof of concept.
Forgot to say this last time, but there’s now a basic (not working) concept of user input reaching the system layer — just the shape of how it should work, not the real thing yet. Finishing that up next so it actually looks like a terminal. Worth sayi the cursor ( curzor ) tracking and the cls screen-clear command both went in a little earlier and are what everything since has been built on top of.
Terminal UI is functional now — Enter does something, and extended interrupts (arrow keys) get decoded properly instead of coming through as garbage. Also added a distinct sys response visual state vs just characters The color choices right now are not best need to actually look into color theory.
Completed the command system — a compare routine ( cmper ) checks whatever’s typed against a table of known command strings and jumps straight to that command’s handler on a match. First command wired up was cls , mostly because the screen clearer routine already existed. Everything else gets added the same way from here.
Added more text commands and started on ones that actually do something, like echo. Also started work on moving text up and down the screen, which is lowk hard
Limited coding time cuz i am on vacation in Berlin but made progress on scrolling the screen now scrolls down good text overflows the bottom. Scroll up still doesn’t exist the first attempt was so tangled it wasn’t worth saving, so that one got scrapped rather than patched.
Added scroll up, just the reverse of scroll down — but still needed its own direction logic and its own set of variables reset correctly, and the first version was so badly written that i just rewrote the thing
Ok so today I have made saythis command which is basically echo (system says what you tell it to) and whatincr which basically spits out what is in control registers which might be useful for some repairman or whatever but I had to make new functions like bintrn which turns normal pc number into decimal ASCII string but I had the loop wrong it started at wrong point but now it should work
Added translate which translates number from hex to dec and also the other way and command to see what in memory I had to make a new function to accept hex and Dec and figure out which one is which than grab byte from memory not 8 bytes was stuck on that then output which was easy cus I already have function for that then added translate which just uses hexbin function for Dec and bin for hex and outputs in the other format also I don’t have much time to code because I am a slave on a construction now and I get paid absolute minimum
I added so when the user types it automatically moves screen to VGA buffer so it doesn’t overwrite bad memmory and implemented this thing for cpritn too so if you are near end of the screen it automatically moves up (number of rewrites this function took 3) in pic you can see how cpritn automatically moved up
Added whatindr just copied function whatincr and changed registers from control to debug
PCI bus enumeration, done by brute-force, but like every os does it this way loop over every bus, device, and function number, write a config address to IO port 0xCF8 , read whatever comes back from 0xCFC . All ones means nothing’s there; anything else gets recorded. Once every device on the bus is found, it scans the results for a class code matching AHCI (SATA storage), grabs that device’s BAR5, and starts bringing the controller up — reset bit set, poll until it clears, enable global host control. This is what opens up actual disk read/write instead of relying on BIOS
Something is very wrong here. Every debug marker along the boot/init path prints exactly like it should, and it still never makes it to the shell. Going to need a proper trace through this instead of guessing.
Ok I have found the solution instead of looking trough all ports it stops on the firt found idk how it works but it works now I can extract data from disk
Added the ability to read what’s on the disk there was a problem with R14 cuz one function that I called used it but push and pop fixed it after I traced the problem without it would print 20 endlessly till it crashed
I did some preparations for init sipi sipi trampoline to wake up more cores for multitasking it just finds acpi rsdp in memory I also want to be able for user to chose how many cores to wakeup
Found Madt table finally going to get number of cores to wakeup
Ok I have found the number of cores which is a huge milestone now I need to find what is the bsp to not wakeup already woken up core number of cores is in a memory buffer 256 bytes big cous the CPU doesn’t have enough IDs for more than 255 cores so even In future it will be ok
Finished the core wakeup now I can wakeup any numver of cores that I have and now I am going to make some serious multitasking i still need to do the trampoline to launch the cores to 64 bit mode but they will be fast also the limit of cores for legacy PCs is 255 but it is still engouh to wake up amd epyc
Spent I don’t even know how much time I lost track of time doing this shit I did it whole night I am happy that I am going to sleep at 12:33 the error was that I wasn’t sending enough sipis so the aps didn’t actually wake up but I didn’t knew that so I was tracing the whole os to find the error then I actually checked on internet how should it be done and that’s when I was finally able to fix this simple ass problem
Aps not responding should put 67 to px67 but aps not doing idk if because of qemu or whatever I don’t want to debug this piece of shi
Ok so uuuh….. Somehow secr destroyditself up and I had to fix it the thing is that from 0xffffff… Somehow one of the f magically dissapeared and I had to basically trace whole Drs sector to find what was wrong also waking aps for some reason isn’t working even I am using textbook code to wake it up I now have no idea why is it not working mameybie I will gat back to it at the end and now do the special function because everyone on stardance for some reason started doing X64 os so I had to come up with something radical, I am going to make a full local assembly llm chat engine like llama.cpp fully in assembly for sofaos all things from scratch tokenizer network loading calculation and other stuff I have nothing really to show so just enjoy some random pic from my gallery
Ok so I was working on gluing gguf file at the end of my iso you can see image it was successful also needed to generalize ahci driver to work on all PCs now writing the gguf retrieve from disk code
Ok so I half rewritten the code for sector read I had to drop hard coded 0 and look for actuall devices to get the data from as you can see it works still
Ok I have made a new command inout it let’s user chose number port in and port to listen from and it spits out response from the port as you can see I tried corrupting time register and it worked
Ok I was figuring out how to load the gguf file which I think I got right but I can’t find a way to know how many sectors to pull out of disk because the metadata in gguf aren’t always the same nor size of the entries are the same so there is now way to know when they end and I need them to find the size of the file in picture you can see how the metadata is structured
Ok I give up on writing it, cuz GGUF file structure is ass and I can’t write it in the way it should be I am going to pull a cheap trick by putting a control string at the end of the file to know when the file is ending below is structure of how the whole file should look like
Ok sooo I made the code buuut it hangs when I do the loading idk what happening will have to debug
I have successfully loaded whole LLM problem was that It was loading 1 gb by 512 bytes and that takes very long and thats why it seemed it hanged I fixed it by giving it a counter so you can see that it doesn’t hang
Hello good news today have started on setting up the data from GGUF rn it is just getting version metadata entryes and tensor entry, I Also started a loop for the metadata entryes but just started this one was easy cuz it has prefixed everything 4 bytes gguf magic 4 version 8 metadata entryes and 8 tensor info entry which makes 24 bytes in total
Ok bigg devlog todat i decided to speedrun this so i can ship this project as fast as possible also changed the model to a smaller native f16 quantization and It works which is a proof that anyone can put their model into sofaos and run it rn it just loops troug metadata to find general architecture
Ok all metadata entry data prased but when i delete the print at the bottom it for some reason triple faults going to report every ±9 hrs because i need to speedrun this because the stardance is ending soon now onto tensor data praser
Ok i gave lost the war against the matadata praser i will not fight it now i will fix it in second ship for now i have hard coded the data needed and also made the core of the tokenizer which was relatively easy compared to the praser
Tokenizer done now for vector context calculator . The tokenizer was somwhat refusing to work but one rewrite later it subdued to my power it is split into teo parts the text decoder and encoder decoder formats the words for encoder and encoder finds tokens for the words
Made the metadata praser work i was using tensor format and nkt metadata Format also verifyed it works on pc
Ok bad News today i drank 5l of Kofola and now me attention me hyperactive me cant concentrate but did token and bos token enumetion there was a problem with division because of no xor rdx,rdx but ez fix if boestoken add 1 it adds tokwn
Ok so uuh those 5l of Kofola wasn’t a great ide today i got a fever or flu or whatever the thing that makes you feel hot but i made some progress even though it was hard cuz i had a headache and couldn’t do anything so what i did i made a f16 to 32 translation and you might say hmm but this doesn’t seem too vomplex first of all i had to split registers inro 3 sections do calculation on them and the glue them together to xmm0 but what you might not know is if you don’t allow xmm is 32 bit mode it will throw gp an the whole code and you cant know why it crashed because whole runtime in crash log looks absolutely normal for some reason also I don’t actually care about the time anymore i just want to get this working so i can get a laptop to not code on my phone
Today i am a bit better so i did the harder part that is needed to be done, i have made tensor info gatherer, basically each layer has 9 tensor info, so for my model 9*30 tensor infos, also the string i am comparing in the function needs to be like [blk.][number of current layer in decimal(use bintrn)][specification string], it still doesn’t work but it will be something like infinite inc loop to memory or division basically smth that generates general protection, also because I was smart i saved my previous error where i used tensor info praser so i didn’t Neded to reerite it.
I have no idea how to fix it so i retreated ro the ol reliable method by first hardcoding it and after some time actually fixing it
Today i got help from my great teacher and was able to do more than usual, today i did hbuf setuper it basically just calls fcon 576 times to translate the values from 16 bit quantization to 32 then i have written a function RMSNorm which uses hbuf and weights you give it and calculates rescaled feuture vector
There was a problem with pointers in rnsm found it when i did double check and from there errors just piled up but at least its fixed now
Ok i have successfully made detokenizator which goes trough the token id book that many times as a token because token id =id book entries untill the token, and also i have made matrix–vector dot product calculator which goes through all token ids and translates them into a big amount of vectors which then in another step i will be doing comparison hbuf with all these vectors to find a token with lovest diff and that will be our output token, but big but it still isn’t tested i will be testing it when i will have the full command done for now i just want to live in an illusion that my code is error free
So today i finished argmax which finds closest token to response, now i have everything but it still has some errors it prints 0 every time so meybie some register colision but the good thing is that it doesn’t crash.
Ok so refined devlogs polished sofaos and GitHub couldn’t ship because rhe whole kernel inflated from 52 to 838 sectors by some miracle, destroyed interrupt table, tensor hard coded stuff and other stuff it ruined my day also ok so let me defend originality : it is a ring 0 os made for hardvare inspection while i saw others did os stuff to before me on stardance i already made an os before stardance in arm , technicality : assembly ,usability : it is meant to inspect pcs when something goes wrong hardvare level not daily driver, you decide storitelyng i pored my heart into those devlogs
ok so let me defend originality : it is a ring 0 os made for hardvare inspection while i saw others did os stuff to before me on stardance i already made an os before stardance in arm , technicality : assembly ,usability : it is meant to inspect pcs when something goes wrong hardvare level not daily driver, you decide storitelyng i pored my heart into those devlogs
Ships:
Simple os with access to Ring 0 stuff the ai no work sadly...
|
1793008448.7407556
|
1793872448.7407556
|