Someone just demonstrated that the entire Uxn toolchain can be reconstructed from nothing but a POSIX shell, xxd and sed. It's down to taking 34 minutes to build the Uxntal assembler.
bootstrap: https://joe.cz/uxn/uxn1b-drifloon.txt
repo: https://gitlab.com/racketeer/uxnsh
#uxn
@neauoire that's the kind of tech development I like to see.
yet what we get on the news is a slopfestival
@capeta I don't think most people would be interested in this kind of stuff X) gotta get off the newsfeeds!
@neauoire Hmm, browsed the code a bit, it uses `local`, which is not POSIX, so this seems to be bash/zsh specific. Still, really cool, and shouldn't take much effort to port it to plain POSIX sh.
OpenBSD 7.9 will be deployed on the hosts as soon as possible!
We want to wait for the first errata to appear.
21 new VMs were added and 61 VMs were renewed.
We donated €1125 to the #OpenBSD Foundation, €66755 since we started.
Thank you, our users, and OpenBSD developers for an awesome OS!
Stay safe, healthy & sane!
#RUNBSD in 2026
Illustrated tear-downs and break-downs of everyday products, like mechanical pencils, lighters and pez dispensers, that you may have taken for granted. Drawn by Bryan Macomber, a mechanical engineer and artist.
A really neat idea.
Is it me or does Apple Music feel like a alpha product? Hickups, frame skips, weird crashes … what is going on?
OpenBSD on MNT Pocket Reform (with RK3588)! next question: can it rotate the framebuffer console?
installing openbsd over usb network to a usb stick!
"Relinking to create unique kernel..."
hmm, the installed system boots but hangs at repeated output of `> init: can't open /dev/console: Device not configured`... any hints?
fixed it
nice, sshd works too! > Welcome to OpenBSD: The proactively secure Unix-like operating system.
got X running, but xrandr -o won't budge, need to figure out how to make a xorg.conf (this feels extremely retro) or how to install some wayland compositor
okaay, worked with a tiny xorg.conf and setting `Option "Rotate" "CCW"` for `Driver "wsfb"`
it works! it's just a bit smol on this high res screen
Gretchen the Goblin [they/them if you wanna be polite she/her if you wanna flirt] » 🌐
@goblin@girlcock.club
@mntmn oh dont do this id love one but i cannot afford one right now this is all too tempting
# pkg_add qutebrowser#openbsd
@mntmn I really want to try this out. Not a big X11 fan but it was pretty easy getting a usable desktop on other machines so a pocket would be fun with this.
@cararemixed it is extremely snappy as it's just cpu writing pixels to framebuffer with nothing in between...
@mntmn oh yeah, openbsd does that :D this way, even if a bad actor get a stack overflow, calling instruction at a fixed offset result in random instruction. This way, a working exploit need to figure out where the instructions it need to call are and that change after each reboot so getting a persistent exploit is harder.
It's all defense in depth
I made a zine, it's called Fractions Are Everything, it invites the reader into looking at fractions a little differently.
The typesetting is done entirely in #Uxn.
@neauoire mind if i print out a copy for my local zine library?
@neauoire Vector text rendering fo uxn is so cool to see. You could animate your new logo for xxiivv with it.
@andnull yes! I've been shy to openly say that it changes everything.. but it changes everything!
@neauoire Oh, this opens the world in terms of text setting. I have been wanting to see a permacomputing adjacent project attempt to talk CTL* and how far you could push it on a system such as uxn.
*not everything tho, some stuff does just require a 5mb lookup table on the side such as word breaking iirc
Print them! Share them! Spread the love of commutative arithmetic.
@neauoire im so happy on how it turned out, thank you so much <3
@neauoire It looks amazing! That font is very beautiful. And doing this in Uxn is awesome. Move over, LaTeX :-D
@wim_v12e This came together after having the issue where I'd make the zines in GIMP, and I had these large print resolution files that I can't version. This is entirely textual, and it allows me to make it all pixel-perfect :)
The zine rom is 3236 bytes!
@neauoire amazing! is this the font format you posted about earlier?
@wim_v12e it is! You can see the renderer here: https://git.sr.ht/~rabbits/zine_fractions/tree/main/item/src/hershey.tal
docs: https://wiki.xxiivv.com/site/hershey
@neauoire Thanks, I've bookmarked that. So with this we could have Japanese in Adelie?
@wim_v12e yeah! I have some 200ish characters only tho, we'd have to fill in the blanks:
https://git.sr.ht/~rabbits/hershey/tree/main/item/etc/japanese.jhf
@neauoire Ah, how come that is different from https://paulbourke.net/dataformats/hershey/japanese.gz ?
@wim_v12e OH DANG, I took the wrong file, yes this is MUCH more complete.
Then yes, to answer your question, now you can write in japanese in uxn.
@neauoire let the fun begin! though it will have to wait until I'm done with the boring work stuff
@wim_v12e The file is truncated at 80 columns, which is a pain because it adds bytes in an otherwise clean stream of points, usually I clean those files by hand but this one is massive, you might have to make a program that reads each line, and if it's not a space-padded decimal number, erases the linebreak.
If you can't figure it out, lemme know and I'll make a little script in uxn to clean it up.
This is delightful!
And I'm obsessed with that beautiful script font. The numbers render so beautifully
@neauoire
I'm a competent English reader since childhood, but I have to confess that cursive just slightly breaks my brain. Can't really read it fluently without getting stuck every few seconds.
@eladhen it's worth practicing, I hope the zine helps you practice not only fractions but also cursive!
@neauoire Beautiful and fascinating as always! Did you also draw the fonts? Is there a Uxn program to do that?
@arnaudb I didn't, it's one of the original hershey fonts, I've only implemented a renderer for the vector data.
https://wiki.xxiivv.com/site/hershey
@neauoire this is beautiful. Im embarrassed to say I am confused about what I'm supposed to do in the puzzle on the last page
@robd multiply 1 by 3315(the result is 3315), check what prime factors are in that number, and fill in the little box under each prime in the row, then use 3315, multiply it by 2926, and fill in the primes found that number, and so on :)
For example, if the number is 15, fill in the squares under 3 and 5.
@neauoire I absolutely ❤️ this. Was working through the ideas (and end puzzle) on the couch and my wife asked what I was doing. I said "interacting with social media"
@neauoire I love fractions. I really should try making some math zines too.
BTW if you're looking for an open hardware, repairable laptop made by a small team in berlin with no venture capital, maybe MNT Reform Next could be interesting for you: https://www.crowdsupply.com/mnt/mnt-reform-next
@mntmn When it becomes available in the MNT shop after crowdfunding ends, will it be shipped from Europe or from the US when bought in the MNT store?
@mntmn mal rein interessehalber - mit welchen Distributionen wurde das Gerät denn schon so getestet?
Ausgeliefert wurden die noch nicht, oder?
TFW you receive 14kWh of raw LFP battery cells 💙
@flaki Oof that must be heavy 😳
@to I'm glad I won't be lugging them up to the 4th floor with no elevator! :D
(roughly 5.4kg/cell, so about 21kg per box)
Fun fact: while a not-insignificant volume of those boxes is padding, sure, it's still absolutely bonkers to me that the car below actually has almost 5 times(!) as much battery storage hidden beneath the floor (~72kWh)
Hoookay, so plot twist: they didn't actually send me the CALB 280Ah battery cells I ordered, these are *CATL* 280Ah battery cells that are branded (according to the sticker on the battery) as CALB 280Ah cells, but the identification QR code seems intact and untampered-with which tells the true story. So far they look okay and new, no terrible bloating, voltages look fine, but crucially these are rated for 6000+ cycles, which is no slouch, but not the 10000 cycles the CALB are known for.
https://flaki.social/@flaki/116636156518043476
@hi cost of the 16 cells was slightly over 1000€ (free shipping). Ordered them in late March so it took almost two months for them to arrive, as they had to be shipped from China first, but some more "mainstream" cells* they might have in stock. It eventually shipped in about a week from their polish warehouse, no customs or anything needed.
___
* I specifically wanted these 280AH CALB prismatic cells because of their longevity, they are rated for 9000 cycles
https://lythbattery.com/10000-cycle-calb-280ah-lifepo4-battery-cell-l173f280a/
Yeah not only that, these are strictly inferior cells to the CALB, the differences are not just theoretical longevity. Check the datasheets - the CATL is not only rated for less cycles, it's very choosy about temperature of the cell when it comes to charging/discharging.
That's what I get for ordering from shady online Chinese resellers. 
"Send detailed complaint to the seller who re-stickered your battery cells to look like different cells" was not how I hoped this day would end, but oh well.
At least these do look like "Grade A" new cells, so I guess you could say it could be worse...
https://flaki.social/@flaki/116636983502006268
@sheddi it's quite something to send clearly a different kind of cell and just re-sticker it to whatever the customer ordered 🤣 even their own website confirms the QR code belongs to CATL cells
@hi cost of the 16 cells was slightly over 1000€ (free shipping). Ordered them in late March so it took almost two months for them to arrive, as they had to be shipped from China first, but some more "mainstream" cells* they might have in stock. It eventually shipped in about a week from their polish warehouse, no customs or anything needed.
___
* I specifically wanted these 280AH CALB prismatic cells because of their longevity, they are rated for 9000 cycles
https://lythbattery.com/10000-cycle-calb-280ah-lifepo4-battery-cell-l173f280a/
what would the cost of the system with all the battery management, inverters, etc? also i assume assembly will take quite a long time...
@hi if you know what you are doing (=not me), assembly shouldn't actually take too long.
If you want it to "just work" I recommend buying 48V rack-mount or free-standing batteries from Ali Expess - 15kWh comes around 1.5-2k €, not much more than the parts (raw cells, box, BMS) and these are ready to plug into & talk to your inverter.
An inverter will set you back 500-1500€ on average, depends on your needs.
Solar panels are tricky to find by the piece (usually you need to buy a whole palette, and be a company ideally), this is especially true for the mounting hardware. You can buy consumer stuff like Ecoflow, or lower priced Renogy, Eco-worthy but they are still overpriced. I was lucky to find these panels in DEPO, I bought the last ones.
You need some wiring, solar breaker box, other breakers but all in all very doable within 5k.
The tricky part is the installation (of the panels, and the electrical installation of the inverter; next toot)
@hi it's pretty much impossible to find someone to do installation for you with your hardware. You can do the installation and then have it inspected by someone, but they can basically charge as much as they like.
If you are off-grid this is not really a problem—if you roughly know what you are doing you can build a fairly safe 48V system and live happily ever after. However if you have grid power and at any point you want to connect the two systems (with e.g. a hybrid inverter), you are legally not allowed unless you do the paperwork, inspection, etc. That costs Big Buck, see above. And also lots of time. I still don't have an electricity connection installed at the plot, and we started the process last summer. 😶
If you are off-grid, can source the panels and install them (e.g. on roof) and are willing to learn a bunch from YT and forums, you can do this stuff in a few months and under 5K EUR.
If you are seriously thinking about learning #Vim / #Neovim, do yourself a favor and proceed as follows:
1. Grok ed(1).
2. Grok vi(1).
3. Ask yourself whether you really need anything ed(1) and vi(1) don't provide.
If your answer to step 3 is "yes", go ahead. But first, do steps 1 and 2.
Here is how to do step 1: Read the man page (it's rather short), read "Ed Mastery" by @mwl (those two steps are interchangeable and even parallelizable), then use it consistently.
Here is how to do step 2: Read the man page (it's rather short as well, though not as short as ed's), then use it consistently.
Also, have a look at https://stackoverflow.com/a/1220118.
i learned it the hard way—in exactly the wrong order: vim, then vi, then ed/sed...
@hi Same here - from Vim to vi to ed. While I do use (Neo)Vim, I am convinced that learning plain vi and ed has improved my way of using "improved" versions of ed/vi.
There is this truly profound core, around which Vim and its decendants have added layers upon layers of functionality (not all of it bad, of course - some of it simply superflous, some of it really good). But it is remarkable how much is contained in this small, beautiful core. And it is just as remarkable how often this core is fully sufficient - we often need way less than we think we do (a very general principle in life...).
Dang it, I'm so upset that "grok" makes me think of apartheid clyde and his "ai" garbage.
Not remotely your fault.
But dang. 😆 🤦♂️
I even remember that word from the somewhat infamous late 80s William Shatner #SNL "move out of your parents' basement and get a life!" skit where the one guy had on a T-Shirt saying "I GROK SPOCK," and we all went hunting in our dictionaries for what the heck grok meant. 😄
P.S., #TIL I learned about marks in (even vanilla) vi/nvi.
I HAVE BEEN USING vi FOR A QUARTER CENTURY 🤣
I have no defense. I plead guilty of cluelessness and not RTFMming.
@thorstenzoeller There's one thing I desperately need from vim that ed and vi do not provide: keymaps. I don't know how to replace them. I need to type in Russian and at the same time be able to control my editor. Switching keyboard layouts back and forth is quite unhandy. So it's an internationalization issue.
It would be cool to find a solution that does not require vim or Emacs.
@chesheer Keymaps are definitely a feature I would consider highly useful and an improvement over ed and vi, and I can relate very well to being dependent on it.
It is my 3rd month of running #snac #snac2 instance. I wanted to share a few words about how awesome this software is.
Few points that make snac icredibly good for my usecase are:
After 3 month of posting (2 active users and 3 semi active users) my data dir is ~500MB and memory usage is ~200MB
it means i can keep running it on my infrastructure without even thinking too much about load
@grunfink@comam.es thanks for such a awesome piece of software 🩷🩷🩷
please vote anonymously and boost this poll for transparency and participation:
How frequently do you chat with LLM?
| not at all: | 5257 |
| a few times per month: | 1143 |
| multiple times per week: | 1061 |
| over 1 hour per day: | 335 |
The wrestlers at the carnival said to A "I saw you doing something cool before" and got her to do it in the ring: https://orllewin.uk/video/98ce184e12
Long hot day for me but the kids had a proper memory making time. P had never seen wrestling before and thought it was the best thing ever. He met an owl too which couldn't compete. A's dance group did a show, she was great and they all had a good time.
@mikael got some css work to do but yeah, YouTube prompted me to verify my age so I got to work on this instead (turns out they have a video method that doesn't require ID but still...).
Some awful PHP and a simple Android app (I'm adding scaling to the Android app which you can do natively now, no need to add ffmpeg as a dependency)
@oppen The positive side of me is actually hopeful about some of the crap things happening to the internet currently. Hoping it will drive people away from the age gated VLOPs (in EU speech).
What scales the video natively now? aspect-ratio:9:16;? Or are you talking about re-encoding the video itself?
@mikael media3 has a Transformer API (https://share.google/3LFJaq9QiFwg0qfMH) to re-ecode video at a smaller size so I'm using that to keep storage down on my server
Figured out proportional spacing between glyphs. It's amazing this works on 8-bit systems. You can almost taste that vib ribbon energy.
@neauoire
Oooh, very cool.
Are the vector fonts a new file format?
The first public release of GrapheneOS Speech Services is now available in our App Store. After installing it, it can be activated as a text-to-speech service by tapping it in Settings > System > Language & region > Speech > Text-to-speech output > Preferred engine and approving it in the dialog.
@hi Yes, we plan to add speech-to-text too. US English speech-to-text may be higher priority than adding more languages to text-to-speech but we haven't decided yet. We can do both at once since we have more developers now and are in the process of hiring more people.
That was unexpected ! Good job @solene ! ![]()
@ledeuns I had some much backlog related to OpenBSD, and 1/4 of links are dead now and a huge chunk of the rest is almost obsolete ^^' I didn't have much content but at least I can start with a fresh backlog, the daunting backlog is gone now.
https://www.openbsd.org/plus79.html
https://cdn.openbsd.org/pub/OpenBSD/7.9/
@hi Ooo in https://cdn.openbsd.org/pub/OpenBSD/7.9/ANNOUNCEMENT it says 19th of May, which is tomorrow for me atm 
We'll soon find out if that's a placeholder or the actual #OpenBSD release date! 
no, i don't want to use fossil fuel cars or burn firewood instead of harvesting solar.
i just don't want subscriptions, clouds, and apps.
i want standard interfaces, open protocols, open firmware.
@hi you have the choice. Either a 372MB phone app or a 372MB PWA. What you like best? 😬
Let's make a Pi Pico 2 powered video card.
This is going to be a long thread that either ends in glorious triumph or hilarious failure.
The goal of this card will initially be to implement CGA-compatible text mode.
Taking a page from the Seequa Chameleon, it will decode 16K of video memory from B0000-C0000, repeating it four times. This simplifies decoding. We may tighten that up later.
It will have a 4K region at AF000-B0000 where two soft fonts of 2K each can be written.
It will have IO addresses for a mode register, status register, color control register, CRTC registers, and eight palette registers.
This may seem overly ambitious - but I have an ace up my sleeve.
I have all the decoding PALs from a Seequa Chameleon on sitting on my desk. Including one that just decodes address ranges AF000-B0000, B0000-C0000 and produces an active-low chip select. And including another that decodes all the CGA's IO ranges.
It's cheating, yes. But it's an amazing shortcut to be able to leverage those. They can be replaced later with GALs or some other kind of modern CPLD.
A CGA card does not need a crystal - thanks to IBM's penny-pinching design decisions, the entire system crystal was tuned for an NTSC display, driving a master clock of 14.31818MHz.
This clock was delivered to the ISA bus via the OSC pin.
Deep in your modern PC, somewhere in the guts of its highly integrated chipset, there's a clock ticking away at this frequency.
14.31818MHz is not a transcendental number. It happens to be 315/22.
Thanks to @polpo for pointing out if I'm already overclocking my Pico 2's to 300MHz, I might as well go to 315.
Despite my fundamental lack of electronics background, I'm probably better equipped to make a bespoke CGA card than most people on the planet. At least that's my internal pep talk.
...so why not?
This project will live on a breadboard for a while. The first milestone should be emitting some sort of test pattern on a standalone circuit to a real CGA monitor.
To do this we need to control five pins to start - the colors red, green, and blue (we'll ignore intensity, or pin it high), and the two sync signals, horizontal and vertical.
To simulate the OSC pin, I will program another Pico to just generate a 14.3181818 clock.
"What's my purpose?"
"You generate a clock."
Internally, the Pico will run MartyPC's CGA emulation, including my implementation of the Motorola 6845.
To cheat a bit, we'll tweak it a bit so it starts up with the register values pre-set for the PC's 80 column text mode, so it won't require programmatic set up.
This wasn't just a spur of the moment decision. I think ultimately, GlyphBlaster just makes more sense as an ISA card rather than being limited to living in the font ROM socket, and I've always wanted to make my own ISA card.
Designs for ISA cards in KiCad can be found all over the place, but they usually have other people's projects on them.
One thing I worked on previously is making a clean ISA card template in KiCad that you could start a new ISA card project with.
Credit to @tubetime as I basically took his EGA card project and scraped everything off of it, keeping the edge connector, and IO plate engineering drawings.
I own a lot of ISA cards and I took measurements from several video cards, and there's no real standard - things vary a lot. You'll notice on this particular layout, the board edge dips down to give the most usable real estate after the end of the 8-bit ISA edge connector.
Unfortunately this means you can't plug an an original IBM CGA into your AT. We'll probably want to avoid that limitation. With a Pico replacing most of the logic on the board I don't really think we're going to need a full-length card in the first place.
On GlyphBlaster currently, I fight a lot with bus contention between the two ARM cores. Embassy, the USB-CDC connection and the network stack live on Core 0, whereas GlyphBlaster's video routines run on Core 1, so you might assume they could run independently.
But they still contend for the same flash - if I add some intensive video effect, I can starve Core 0 and it will stop responding to network requests or my USB debugging session.
The solution is to tag routines on Core 1 with #[unsafe(link_section = ".data.ram_func")] to force it to run out of RAM instead of flash, but this compounds my already dire RAM situation.
With a full board though, we could have a separate microcontroller that just handles the Wi-Fi. Maybe another RP2350? Maybe an ESP32? STM32 lol? I don't know. Worry about that later.
We'll definitely be using an RP2350B directly instead of soldering on a Pico 2 board. But I guess it's okay to still call this a Pico.
We basically double the number of available GPIO pins, meaning I no longer have to make compromises. Light pen? Sure. Capture every address line? You betcha. QSPI PSRAM? All day long.
Raspberry Pi is nice enough to provide a reference KiCad project, so you can more or less copy and paste a RP2350 into your project.
@gloriouscow If you're making a whole ISA card, then you're overlapping with #PicoMEM, #PicoGUS, and #PicoIDE which could be a good place to steal from / ask about!
@gloriouscow With your graphics card, all that's needed is an Pico 8086 emulator and you've got an "Oops, all Pico!" IBM PC :P
Okay, first priority - let's make our Pico OSC pin simulator.
Raspberry Pi has a very nice Pico development plugin for Visual Studio Code. We just choose "New Rust Project," name it, and click create.
This gives you an rp-hal project, and GlyphBlaster is currently written against Embassy, and I don't really feel like rewriting all the overclocking code, so I'm just going to switch this to Embassy too and copy-paste that stuff.
I would like to thank FreddyV of PicoMEM for giving me the tips on how to stably overclock a Pico. It requires tweaking the on-board flash timings in a way I never would have figured out for myself.
The key do doing this in Embassy is this bit:
const PICO_SYS_CLOCK_HZ: u32 = 300_000_000;
const FLASH_QMI_TIMING_UPDATE_THRESHOLD_HZ: u32 = 280_000_000;
const FLASH_QMI_TIMING_HIGH_SPEED_HZ: u32 = 380_000_000;
const OVERCLOCK_FLASH_QMI_CLKDIV: u8 = if PICO_SYS_CLOCK_HZ > FLASH_QMI_TIMING_HIGH_SPEED_HZ {
4
} else {
3
};
const OVERCLOCK_FLASH_QMI_RXDELAY: u8 = if PICO_SYS_CLOCK_HZ > FLASH_QMI_TIMING_HIGH_SPEED_HZ {
4
} else {
3
};//...
let timing = embassy_rp::pac::QMI.mem(0).timing();
timing.modify(|w| {
w.set_clkdiv(OVERCLOCK_FLASH_QMI_CLKDIV);
w.set_rxdelay(OVERCLOCK_FLASH_QMI_RXDELAY);
});
I'll use GPIO16 for this which conveniently puts it on the top right corner of the Pico 2 board.
Our PIO program is stupid simple:
let clock_program = pio_asm!(
".wrap_target",
"set pins, 1 [10]",
"set pins, 0 [10]",
".wrap"
);
.wrap_target is just a standard label for the PIO loop, which will be restarted at the end with .wrap. The value in brackets is how many cycles to spin - the set itself takes one cycle, then we spin for 10 after. This should give us the 11 cycles on, 11 cycles off behavior we want.
'pins' here just targets GPIO16, via this:
let clock_pin = pio1.common.make_pio_pin(p.PIN_16);
clock_sm_config.set_set_pins(&[&clock_pin]);
PIO is the secret sauce that makes Picos so good at interfacing with retro hardware. They allow you to react to pin changes instantly, and read and write busses, doing the sort of high speed bus interactions that were normally the exclusive purview of FPGAs.
All in all, not too shabby for a $5 board. Let's see how our clock looks, right after I unbag this and hook it up.
14.318MHz, baby.
Believe it or not, a sawtooth clock isn't that hideous. This is pretty much what the OSC pin looks like for realsies.
@gloriouscow Could that be a probe issue? Not all probes go up that high in frequency.
@casandro Nah, I've gotten a clean read from a 66MHz crystal on this probe from a 386 motherboard. This is probably a limitation of the Pico's GPIO drive strength. I'm not sure if that's something you can configure on a Pico, you can on an STM32, although I usually don't as it can produce overshoots which ends up being worse to deal with.
@casandro The real CGA also cleans up the OSC pin by immediately passing it through an 74LS04 which we will probably also do.
It's actually kind of silly how close we already are to outputting something on a real CGA monitor.
We could drive two additional PIO state machines with divisors to control HSYNC and VSYNC.
Now, if you just output color all the time, you have no idea whether your picture is actually synchronized - the monitor will just keep the beam on all the time, so if you just say, emit magenta forever, you'll just see a solid magenta screen even if the monitor has no vertical hold.
So we're going to have a color latch like the CGA does.
This is a 74LS174 flip-flop, that is fed our generated colors and is clocked by /OSC.
The CGA doesn't use the 174's clear input, but we can - another GPIO output of the Pico should be able to pull that low to blank the screen, I think. Having a vertical blanking area will let us tell if we have vertical hold.
I can't overstate how useful it is to have a working digital simulation of the thing you are intending to make.
Time to start breadboarding!
You know, I just thought of something - the same technique I use in GlyphBlaster of formatting video frames as 912x262 would work for a static test. Except we expand it to 8 bits. That's 238KB which will still fit in the Pico's RAM.
The lower nibble will drive the RGBI outputs, while two bits in the upper nibble can directly drive HSYNC and VSYNC. We just need to center a 640x200 image in a 912x262 black bitmap, then just paint the sync periods in the overscan.
Screw boring test patterns, lets go directly for graphics!
we can represent this with a 8-bit palette in Aesprite. We have our normal RGBI palette, then we have hsync (green), vsync (blue) and hsync-in-vsync (cyan).
Now I just need a good picture to use. The easiest thing is to take a 320x200 4bpp image from Tandy or EGA graphics, and horizontally stretch it 2x.
There sure is a lot of 320x200 pornography.
I'm gonna use the title screen from 1990's VAXINE by The Assembly Line, published by US Gold.
I don't remember anything about this game, but the title graphics are bangin'
this is our final 912x262 video signal bitmap. The graphics don't actually need to be centered, since we're not trying to sync to VSYNC - we're producing VSYNC, so it can happen whenever. In this case its easier to translate CRTC parameters keeping the active display area origin at 0,0.
Now we just need to save it as a raw binary.
"RAW binary" isn't one of Aseprite's export options, unfortunately, but we have BMP. The resulting BMP file is 240,022 bytes. That's an additional 1,078 bytes. That just so happens to be:
BMP file header: 14 bytes
DIB header: 40 bytes
palette: 1024 bytes (256 entries × 4 bytes)
------------------------------
final data offset: 1078 bytes
one thing i've been struggling with all evening is how to restart the DMA buffer without inducing some sort of sync-killing delay or jitter
@gloriouscow that was kind of a pain when I was doing a similar thing, are you chaining two dma channels? Iirc that's fast but I couldn't make it wait for the frame buffer to be ready so there was some tearing. I also didn't have a lookup table so that would complicate matters
Here is a writeup (not mine) of some PIO/DMA graphics gymnastics that does involve a lookup table, maybe some of the tricks will be useful: https://dmitry.gr/?r=06.%20Thoughts&proj=09.ComplexPioMachines
Good luck and I look forward to seeing the updates!
We have a picture. It isn't perfect - there's some flickery bits - I don't know if dot crawl is the right word. Not sure what's going on there.
Driving sync signals with a single image buffer was untenable - it's really difficult to have seamless, continuous DMA on the Pico. Every time you restart DMA there's a discontinuity, and if the thing you're DMA'ing represents every single clock cycle in a video field, inserting extra time messes up your picture.
So separate PIO programs generate hsync and vsync, and we restart our now image-only DMA in vsync, just like the OG Glyphblaster does, which we already know works.
I think the crawling may be that the color output is not perfectly aligned with the dot clock.
I'm starting to think a pico is not the appropriate thing to build a video card with.
all my fun ideas always end up with me concluding i should use an FPGA.
FPGAs are like the crabs of electronics projects. everything wants to turn into an FPGA if you give it enough time.
@gloriouscow is the pico generating the dot clock? EDIT: the same one generating the pixel data
@gloriouscow oh there's no clock on the CGA port just HSYNC VSYNC and it's an alignment issue?
@ldcd correct there's no clock line on the video connector. The monitor has PLLs to synchronize to vertical and horizontal frequencies within a certain range. A CGA monitor expects a 15.7kHZ hsync, for example. The signal, although digital in color, is put through analog circuit and so the monitor does not have to sample colors.
The Pi in the rgb2hdmi is sampling the color at a certain period within a dot window. If I am writing colors out of phase with the sampling then we will have various flickering going on. Why only in those specific areas? I am not really sure.
I do have a de10 nano FPGA board. It's in my MiSTer. Which I never use!
@gloriouscow A bit more expensive than 2 x $5 though 😅
Right. This isn't completely baffling or anything
Oh, wait, I remember this level from ZZT.
I think the elf needs food badly
okay this isn't that confusing
for example, these are the snake pins. you can choose from left snakes or right snakes
you know, there's a very good reason NOT to use an FPGA
when you actually use the proper tools for a job, it stops becoming a hack.
you're no longer a hacker, you're some kind of engineer or something. ugh.
Well, I did an FPGA thing. Can check that off the bucket list.
Okay, lets see if I can get a 14.31818MHz clock out of this thing.
We have a 50MHz clock source, on a pin called FPGA_CLK1_50.
How do we get 14.31818MHz out of that?
By attaching a PLL to it, hopefully.
module de10_clock_test (
input wire FPGA_CLK1_50,
output wire GPIO_1_0
); wire clk_osc;
wire pll_locked;
cga_pll pll_inst (
.refclk (FPGA_CLK1_50),
.rst (1'b0),
.outclk_0 (clk_osc),
.locked (pll_locked)
);
assign GPIO_1_0 = clk_osc;
endmodule
pll_inst is a PLL instantiation. But notice it says nothing about like dividers or anything. We have to go into something confusingly called the IP (Incendiary Pickle) Catalog to actually configure the PLL.
This is far as a I get because doing this causes Quartus to hang.
@gloriouscow I think it's easy to just default to implementing solutions in software. There are plenty of good reasons why - the tooling is usually better and more familiar, it requires less specialized knowledge, it's often easier to throw together the first PoC and to extend it later.
Often the "proper" solution is that you probably should be working at a lower level - whether that's FPGAs or discrete components. The classic example is using an Arduino to make a blinking light. I don't think there should be any shame in it no matter what solution one uses, but good engineering involves knowing when you've outgrown the current approach
@gloriouscow the 2350 also has an extremely flexible clock tree for micro; each off the gpouts has an individual int/frac divider with duty cycle correction and coarse phase adjustment
The PLL can also run up to 1600MHz (don't think any of the IO buffers can manage that though) and you can input an external clock to it (I think this is what you're doing)
@ldcd The plan is to drive the ISA board version off OSC, yeah. Can you give a Pico 2 board an external oscillator?
@gloriouscow I’m pretty happy with my decision to use an ESP32 on PicoIDE. It’s a little awkward dealing with a different SDK and toolchain but kind of fun?
@gloriouscow I’ve found the drawings in the EISA spec (https://picogus.com/docs/isa/EISA_Specification-v3.1.pdf) to be the closest thing to actual cards I’ve seen BTW
@gloriouscow keep in mind the descender behind the edge fingers will prevent this card from fitting in a 16-bit slot. you might want to pull that back.
@gloriouscow glad we're not at the state of vibe hardware yet where we need to convince it to actually do that
@gloriouscow I’ve done the exact same thing for a VGA 25.175MHz clock. :)
@bytex64 just out of curiosity what's the derivation of that how how did you drive it with a pico?
@gloriouscow IIRC it’s the regular fractional divider PWM mode but it was a while ago. I do have the source for it: https://github.com/bytex64/tt-munch/tree/main/clockgen
It’s also not super exact. IIRC the closest it could get was like 25.150 or something.
@gloriouscow let’s rather not buy stuff off the “surveillance cop, proud of it and silencing questioning voices” organisation
@mirabilos do you know how little that narrows it down
@gloriouscow the raspberry pi foundation, in this case (I have more grievances than just that one, too)
Chat, is this bad? (the breaker is off…)

Not exactly sure what's going on, I thought it was a bad breaker, but no a brand new one exhibits this same issue. No other sockets exhibit the same, they have zero voltage across when their respective breaker is off.
And yes, I have called a Qualified Electrician to take a look because this is the same wall socket that had an electric stove hooked up to and when I got rid of the stove the quick connectors used to hook it up were all sad and melty, so I don't trust this wiring. It is probably Evil 
@hi I know when I reached the limits of my knowledge and it's time to hand it over (there are also some other things I have been wanting to have inspected...).
Now if only I could find an English-speaking electrician...
@hi (since the breaker works, I suspect shenanigans in the neutral wire, as that's not actually connected to the breaker, but there is enough current flowing that it tripped the residual current breaker when I (I guess) touched the wires to the ground wire - which is how I found out about the Evil in the first place - but also not enough current to trigger the contactless live wire tester)
how is your estonian, by the way?
@hi ma õppin :)
It's good enough to tell the electrician I'm calling that I'm looking for an english-speaking electrician, but certainly not good enough to explain in the ways my apartment's electrical wiring is cursed and in need of being exorcised :D
requirements:
I use VLC
@hi seconding @continue 's suggestion for VLC.
I just use it for my podcasts (which I batch download into one flat directory as you mention wanting to play) so I can't speak to the video aspects, but I've seen support in there. It plays when the phone is locked and remembers where you left off. And in my case, I like that I can crank playback speed since I usually listen at 2–2.5× while maintaining pitch. It also has an EQ to help make some podcasts easier to understand.
Interesting. It seems like there are way more Linux users here than I expected.
So, let’s do a little roll call:
What are you using?
Linux?
Windows?
macOS?
BSD?
Something beautifully weird?
I’m curious 👀
#Linux #LinuxUser #Fediverse #Mastodon #OpenSource #Tech #OldschoolInternet
| Linux: | 268 |
| Windows: | 17 |
| macOS: | 46 |
| BSD: | 39 |
A very unimportant question because u got a new iPad with a keyboard case:
When you put stickers on your laptop or laptop-type thing, do you place them so they are right side up for you when your laptop is closed or right side up for others when it’s open?
| For me when closed: | 3 |
| For others when open: | 12 |
Being a corporation is not punk. But which is *least* punk?
| Microsoft: | 24 |
| Google: | 9 |
| Apple: | 7 |
| IBM: | 29 |
@a they are all so painfully not punk...
@rose_alibi I picked these four because dropping in, like, Palantir or a defense contractor would've just swamped the results.
@a IBM by the tiniest margin though
same here, and I'm pretty sure that IBM these days won't even deal with anyone who isn't a large corporate, especially since they sold their hardware division to Lenovo many years ago..
@vfrmedia @rose_alibi Hrm, you might be right; I think my mental model of them is stuck pre-sale.
ok new touchscreen samples for MNT Vector (7inch tablet) are in, and they're great. now how to build and run Gnome Mobile on Debian...
eINK? Or LCD? Or LED?
Just curious (and always looking for good eINK devices to make into book readers. An MNT based device with eINK, running debian, could use calibre as its ebook reader)
@mntmn Hello,
Are you interested in purchasing Qatar/ Kazakhstan Origin Petroleum Products on FOB, CIF, TTO (LPG + D2 + LNG + PETCOKE + JET A1+ EN590 + NPK + E.T.C )?
Please revert ASAP for more information on prices, terms and conditions of sales.
FOR SCO KINDLY CONTACT ME
Email: gibsonhugo744@gmail.com
Best Regards
@mntmn I love it (ofc). Would be awesome if it would be possible to back it without the...sbc-card (cannot remember the proper term) if I wanna move around and upgrade my MNT Reform Next.
@mntmn Ooooooooohhhh... If it:
Runs "Libby" https://askubuntu.com/questions/1555829/how-to-install-libby-in-ubuntu
Isn't too heavy to hold for a long time
Runs some other pdf/ebook reader software
.... it could 100% be my new e-reader.
@mntmn That's pretty flickery on camera. Looks smooth otherwise, though.
I made this a few years ago, to compare the size of the entire screen on an original 128k Mac with the size of the Safari icon on modern macOS. Enjoy!
Psst! Hey, you, yes you,
here's another zine about some obscure computing paradigm.
https://wiki.xxiivv.com/site/pocket_nets
How it started/how it's going.
Building your own battery bank isn't particularly cheap, the cells here cost ~70 euro (a little less in bulk), the BMS is another 20, and then all the equipment and materials - while you can easily find a similar-size ~20Ah batteries under 100 EUR.
However what you get with building your own (besides the skills/experience) is *flexibility*.
See, the 20Ah "Trolling motor" battery from Renogy is $90, and you get a decent 12V battery for that price with about 240Wh of capacity. But it's a *dumb* battery. Want to monitor your battery status, capacity, charging/discharging? Most brands will sell you a "smart" battery - with a hefty markup! - that has bluetooth and an app* you can download (though, probably not in this size/price category).
But can you get one with *wired* monitoring? And, maybe a 24V one without having to deal with balancing series-connected batteries? No money can buy that.
Mine can do all of this and more.
___
* that needs an account, see next post
The most infuriating bit, of course is the standard enshittification "you don't actually own the thing you bought" part.
My Ecoflow power station locks most features in an app that needs a cloud account to do *anything at all*. And it has Bluetooth! My Anker power station? Better, at least it lets you control the device with the app over bluetooth, however it will try to upsell you on connecting it to wifi(!!) and logging in at every opportunity, and will only do firmware updates when you log in and connect it to wifi. So you need to connect to wifi to fix security issues caused by...connecting your batteries to the internet.
https://flaki.social/@flaki/115016229202016176
This reminded me of the screenshot I took the other day and forgot to post
https://flaki.social/@flaki/115016139335121817Important context: Anker's power stations can be accessed via Bluetooth & their app. They really want you, though, to create a cloud account, to the point that they nag you every time you start up the app, but you can skip it. The one thing you *need* to have a cloud account for is connecting your power station to wifi: and while they will tell you you have a pending firmware update, you can only install it by connecting to wifi (which requires linking to a cloud account).
With that context now you can really see the beauty here: please install this latest firmware update that fixes important security issues arising when connecting your fucking SOLAR POWER BANK to the cloud by... being forced to connect said overgrown phone charger to the internet.
Fuckin A+, brilliant, no notes.
![]()
Funnily enough, the JBD BMS I used for this custom battery build supports Bluetooth, and comes with its own app.
That only lets you view rudimentary statistics. And you can't even configure your BMS to your battery bank's specifics until you create an account with them and log in!
But then, here's the kicker, to put insult to injury if you do all these and then *dare to disable wifi* (still logged in!!) the app will forget everything about this BMS and will refuse to give you proper access until you reconnect to wifi!
But remember, the flexibility part? Trivially you can use a variety of hardware/software solutions (probably the easiest is ESPHome/Home Assistant) to control the BMS without the app - either wired with the on-board UART port or via Bluetooth.
https://github.com/syssi/esphome-jbd-bms
@flaki week you write this up somewhere? I'm super curious
@coldclimate eventually
https://flaki.social/@flaki/116533375955761568
@asciijungle it's evolving :)
There will likely be a blogpost out of it eventually. I have been experimenting with solar power for a while now, so I have a bunch of stuff lying about that I don't regularly use, like this Ecoflow River 3 power station and a couple amorphous silicone (=flexible/light portable) panels that I stuck on my East-facing balcony so they get to take in the AM sun.
The easiest is to just hook everything up to the power station's AC output and only enable AC charging when the sun doesn't provide power and the battery level is low (you could automate this with home assistant or similar if you wanted).
Better is running whatever you can from DC power and skipping the inverter altogether. Even with voltage conversion and other losses you are going to see at least the same or better efficiency.
My next step is more storage and a higher-voltage battery (which improves DC power conversion losses), skipping the Ecoflow power station entirely and going full DIY.
tiny lua compiler: a lua compiler in a single file, that's well-documented, that was hand-crafted over several years, and made to teach you compiler/tokenizer/parser/lexer design.
this is a crazy impressive project, and in a time when people are haphazardly slopcoding projects, is a standard to live by.
@vga256 I love this so much. It reminded me of this 21-line spelling corrector in Python https://impythonist.wordpress.com/2014/03/18/peter-norvigs-21-line-spelling-corrector-using-probability-theory/
I sell Libreboot, and Libreboot accessories.
Libreboot is free/opensource boot firmware, replacing proprietary BIOS/UEFI. I'm Libreboot's founder and lead developer, and I use sales to fund the project.
Libreboot gives you better security and customisation. As a Free Software project, Libreboot democratises the boot firmware, giving you control. It's your computer, nobody elses.
Debian Linux, other distro or a BSD of your choice can be preinstalled.
@libreleah of course this is probably in their ball court as much as yours but I'm curious if you have any plans or interest in doing framework laptops with libreboot?
@wombatpandaa I have no such plans, and I'm aware that the company responsible for Framework products has made some rather problematic political choices as of late; if a Libreboot port were to become technically viable, I still very likely would not touch Framework with a fourty-kilometer barge pole.
@libreleah I wasn't aware of any political faux pas, I may have to look into that. Whatever the case, fair enough! In this era we have to be willing to carefully pick our battles.
@wombatpandaa If free boot firmware were supported, you could just use whatever they/someone provides. As I said, I'm almost certainly not touching Framework at all. I don't want to be associated with that company in any way whatsoever.
@libreleah gotcha, thanks for being straight with me about it! And for all the work you do for the open source community.
@libreleah You make the same mistake like most selling laptops. You didn't put the screen size anywhere. Its not even in the specs.
Screensize is mostly the first decision when buying a new laptop. And there are few who already know how many inches has a Lenovo T480...
@evangeligal correct! i've fixed this now. i simply put it in the title of each product page. i don't even think about screen sizes myself, easy to overlook.
@moses_izumi i mean, i didn't do that, someone else did and i merged their patche. making your own battery packs should be feasible. e.g. a bunch of lipo batteries wired in parallel for amperage. there are probably already solutions for this that you can just buy. generic portable power supplies. for a high power desktop, yeah get a large UPS (that's what i use at home and at the lab)
so long as the voltages match you should be fine
@moses_izumi the libreboot documentation needs a massive audit and cleanup, and add a few missing bits.
i did this for the libreboot build system from 2023-2025, essentially re-writing it incrementally over a two-year period. that same obsessive love is needed for lbwww.git i think