HNHacker News
TopNewBestAskShowJobs

dansalvato

563 karma · joined May 16, 2022

Creator of Doki Doki Literature Club, FrankerFaceZ, and more. Amiga and retro PC enthusiast.

Personal site/blog: https://dansalva.to

submissionscomments
dansalvato··on Resurrecting iChat audio and video conferencing
Assuming you're thinking of FaceTime, I remember there being a patent lawsuit shortly after launch that apparently lasted a couple years: https://www.bbc.com/news/technology-20236114

By that time, not only was Android looking much more competitive, but FaceTime evidently demonstrated to be a massive hit that became very powerful for Apple's branding.

I also read that FaceTime eventually went from P2P to centralized servers (maybe in response to the lawsuit?), which of course is antithetical to the premise of being open.

Lastly, just speculating, but I imagine Steve Jobs had to have been a strong advocate for making it an open standard, if not the driving force. It makes sense that the promise would have fizzled out by the time the lawsuit was over, a year after his death.

dansalvato··on Resurrecting iChat audio and video conferencing
I was a teenager at the time and would watch all of Apple's keynotes. I remember them making a big deal for a while about H.264 support. It's very cool to get a glimpse of the context where engineers like yourself were likely proud of your work, and I'm glad that it was shown through the way that Apple talked about it.
dansalvato··on HTML Can Do That
I had always thought that table sorting seems like the perfect job for HTML, given its data-driven nature, and the possibility of implementing sort information into the attributes of table cell elements.

But thinking about it: Is there a precedent for HTML to be able to include information that instructs the device to present the DOM out of order? Maybe it's out of scope for HTML to have information about presentation order, when the order is supposed to be implied strictly by the DOM hierarchy itself.

Of course, CSS can visually reorder stuff (e.g. `order` on flex/grid items), but MDN has accessibility warnings regarding the use of `order` and visually presenting the data in an order not reflected by the DOM. So, maybe sorting is best done by reordering the DOM after all.

dansalvato··on Linux on Older Hardware: The Complete Revival Guide
It's cool to see your interest in running Linux on highly constrained systems. I might check out eXe Linux, since I spent a bit of time messing with Linux on my Cr-48 Chromebook, which has an Atom N455.

Although, if I'm getting silly enough to try making N455 usable (which was seriously underpowered even at launch), I'm probably going full-on tinkerer mode, which is why I used it as an excuse to learn about Arch Linux. I figured hey, if I only have 2GB RAM and slow 16GB storage, I should have assurance that every single component on the machine is something I opted into installing. Problem is, I can't retain knowledge of the ins and outs of my fully custom environment unless I'm daily driving it, which...how exactly could I daily drive an N455 for anything, other than it being a thin client?

Here's my own blog post covering Arch Linux on the Cr-48: https://dansalva.to/resurrecting-a-prototype-chromebook-with...

Note that since my writing of that post, i915 graphics support in Wayland has been fixed, so it's now viable to run a Wayland DE if desired.

dansalvato··on NetHack 5.0.0
Wow, what a delightful surprise! I'm a huge NetHack fan and have been waiting a long time for the official 3.7 release before switching over to it. I've been a 3.6 holdout, haha.

AFAIK, the backend has moved a lot of map generation logic (and exposure of other data) to a Lua API, which is quite exciting as something for people to play with in tooling, forks, mods, etc.

Minor spoilers below:

I heard about some great balance adjustments that help to mitigate over-reliance on a single kit, such as making certain extrinsic resistances (e.g. wearing rings) stronger than their intrinsic counterparts, which adds to the decision-making in choosing what to equip. Another change I'm really excited for is the unicorn horn no longer being usable for "restore ability", so ability-draining effects (of which there are many) are a more significant threat (they were effectively zero threat until now).

Also very cool to hear the quest is now possible to do early (despite being a Bad Idea) as that has great implications for speedrunning or "fewest turns" runs.

Can't wait to dive in!

dansalvato··on I ported Mac OS X to the Nintendo Wii
I wrote that L-cancel training code! Funny to see it come up out of nowhere. I too have always adored the Wii and its moddability. It'd be my go-to choice if I someday ever get the itch to write console homebrew software of my own.
dansalvato··on Rivian Unveils Custom Silicon, R2 Lidar Roadmap, and Universal Hands Free
I see CarPlay (and CarPlay Ultra) as being for auto makers who don't want to put in all the effort to design and drive a good proprietary UI (CarPlay is a godsend in cars with crappy UI, i.e. most of them).

Rivian is a luxury vehicle brand with a first-class UI/UX. I imagine going with their own first-class UI and CarPlay Ultra would be a mess; two separate interfaces for the same controls, but laid out differently. Makes a lot more sense they'd be working with Apple to integrate more Apple features into their own UI, rather than having to maintain two separate first-class UIs that are bound to have discrepancies.

And there's the more obvious answer that they want the entire driving experience to feel like a Rivian experience, given how important that's been for luxury EVs on the software side. Supporting a canned OS would make the vehicle "feel" the same as every other car that also supports it.

dansalvato··on Valve reveals it’s the architect behind a push to bring Windows games to Arm
From the last interview question in the article (pertaining to Arm):

> We don’t really try to steer the market one direction or another; we just want to make sure that good options are always supported.

Sounds like their priority is to support Steam on the hardware consumers are currently using. Given that, it makes sense they'd go Arm in the Steam Frame, because Fex alone is already a massive undertaking, and Snapdragon is a leading mobile chipset for performance and power efficiency.

dansalvato··on Google Antigravity
I can't believe these "smooth scrolling" scripts are still a thing. I was wondering why I was having a hard time scrolling the page on my phone, when I got to my PC and felt the reason.

It's incredible to think how many employees of this world-leading Web technology company must have visited this site before launch, yet felt nothing wrong with its basic behavior.

dansalvato··on SGI demos from long ago in the browser via WASM
The first thing I noticed when seeing the SGI demos for the first time is that the menu UI is strikingly similar to the file select screen in Super Mario 64.

Of course, Nintendo 64 was developed in partnership with Silicon Graphics, so there's a clear connection, and I'm far from the first to make this observation. Still, I feel as though there must be some untold history where perhaps it was used as a placeholder menu early in development, but the team grew fond of it and eventually used the same effect for the final release.

Here's a decent comparison: https://www.resetera.com/threads/super-mario-64-took-its-3d-...

dansalvato··on I've Had It with Microsoft
This article inspired me to check if Google has something similar for Google Workspace, which also just increased its price due to a bunch of Gemini integration I have absolutely no need for.

As it turns out, they do—but it's hidden from the "Plans and Upgrade" page, which only shows the Standard plan and above. After some digging, I finally found an inconspicuous dropdown on my plan's billing page that had an option to downgrade my plan. Upon clicking it, I was taken back to the earlier "Plans and Upgrade" page, but this time, the Starter plan was made visible on the page.

It's exactly half the price of the Standard plan, just with less storage, no Gemini, and some restrictions on other enterprise features I've never even heard of. Pretty bizarre and upsetting that they completely hide the existence of the Starter plan like that.

I'm hoping I can eventually bring my reliance on Google services down to zero, whenever I can afford the effort it takes to migrate to something better.

dansalvato··on ThornWalli/web-workbench: Old operating system as homepage
The CRT effect is immediately what stood out to me as well. It's the first time I've ever looked at a "CRT filter" that really gave my eyes the sensation of looking at a real CRT, specifically Amiga. It's so good that I would compel the author to share it with Amiga emulator developers to see if there's any chance of it being implemented. Maybe except for the line that occasionally travels from bottom to top, that's more reminiscent to me of a camera artifact and not something I experience with my eyes on Amiga monitors.
dansalvato··on Microsoft Windows 1.0 with Steve Ballmer (1986)
Let's be real, Commodore has no one to blame but themselves for squandering their 5-year lead in hardware and OS. They were carried hard by the passion of their engineers, but irredeemably greedy and soulless at the top. At Microsoft and Apple, engineers were the lifeblood from the very beginning. At Commodore, they were a spreadsheet column.
dansalvato··on Customizable HTML Select
I think some of this stuff isn't the responsibility of HTML. If HTML already has a full autocomplete spec, isn't it the fault of browsers/extensions/OS if the implementation is broken? Or are you saying the spec is too ambiguous?

A lot of stuff becomes redundant under the framing that HTML is designed to provide semantics, not a user interface. How is a toggle button different from a checkbox? How are tabs different from <details>, where you can give multiple <details> tags the same name to ensure only one can be expanded at a time?

Image manipulation is totally out of scope for HTML. <input type="file"> has an attribute to limit the available choices by MIME type. Should there be special attributes for the "image" MIME type to enforce a specific resolution/aspect ratio? Can we expect every user agent to help you resize/crop to the restrictions? Surely, some of them will simply forbid the user from selecting the file. So of course, devs would favor the better user experience of accepting any image, and then providing a crop tool after the fact.

Data grid does seem like a weak spot for HTML, because there are no attributes to tell the user agent if a <table> should be possible to sort, filter, paginate, etc. It's definitely feasible for a user agent to support those operations without having to modify the DOM. (And yes, I think those attributes are the job of HTML, because not every table makes sense to sort/filter, such as tables where the context of the data is dependent on it being displayed in order.)

Generalized rant below:

Yes, there are pain points based on the user interfaces people want to build. But if we remember that a) HTML is a semantic language, not a UI language; and b) not every user agent is a visual Web browser with point-and-click controls, then the solution to some of these headaches becomes a lot less obvious. HTML is not built for the common denominator of UI; it's built to make the Web possible to navigate with nothing but a screen reader, a next/previous button, and a select/confirm button. If the baseline spec for the Web deviates from that goal, then we no longer have a Web that's as free and open as we like to think it is.

That may be incredibly obvious to the many Web devs (who are much more qualified than me) reading this, but it's not something any end user understands, unless they're forced to understand it through their use of assistive technology. But how about aspiring Web devs? Do they learn these important principles when looking up React tutorials to build some application? Probably not—they're going to hate "dealing with" HTML because it's not streamlined for their specific purpose. I'm not saying the commenter I'm replying to is part of that group (again, they're probably way more experienced than me), but it reminded me that I want to make these points to those who aren't educated on the subject matter.

dansalvato··on Test if a number is even
> There's also BTST #0,xx but it wastefully needs an extra 16 bits say which bit to test (even though the bit can only be from 0-31)

That reminds me, it's theoretically fastest to do `and d1,d0` e.g. in a loop if d1 is pre-loaded with the value (4 cycles and 1 read). `btst d1,d0` is 6 cycles and 1 read.

> the blitter is active and you set BLTPRI

I thought BLTPRI enabled meant the blitter takes every even DMA cycle it needs, and when disabled it gives the CPU 1 in every 4 even DMA cycles. But yes, I'm splitting hairs a bit when it comes to DMA performance because I code game/demo stuff targeting stock A500, meaning one of those cases (blitter running or 5+ bitplanes enabled) is very likely to be true.

dansalvato··on Test if a number is even
That is true, I deliberately set up an isolated scenario to do these fun theoretical tests. It actually took some effort to stop the compiler from being too smart, because it would want to transform the result into a return value, or even into a pointer offset, to avoid branching.
dansalvato··on Test if a number is even
The interesting thing about testing values (like testing whether a number is even) is that at the assembly level, the CPU sets flags when the arithmetic happens, rather than needing a separate "compare" instruction.

gcc likes to use `and edi,1` (logical AND between 32-bit edi register and 1). Meanwhile, clang uses `test dil,1` which is similar, except the result isn't stored back in the register, which isn't relevant in my test case (it could be relevant if you want to return an integer value based on the results of the test).

After the logical AND happens, the CPU's ZF (zero) flag is set if the result is zero, and cleared if the result is not zero. You'd then use `jne` (jump if not equal) or maybe `cmovne` (conditional move - move register if not equal). Note again that there is no explicit comparison instruction. If you don't use O3, the compiler does produce an explicit `cmp` instruction, but it's redundant.

Now, the question is: Which is more efficient, gcc's `and edi,1` or clang's `test dil,1`? The `dil` register was added for x64; it's the same register as `edi` but only the lower 8 bits. I figured `dil` would be more efficient for this reason, because the `1` operand is implied to be 8 bits and not 32 bits. However, `and edi,1` encodes to 3 bytes while `test dil,1` encodes to 4 bytes. I guess the `and` instruction lets you specify the bit size of the operand regardless of the register size.

There is one more option, which neither compiler used: `shr edi,1` will perform a right shift on EDI, which sets the CF (carry) flag if a 1 is shifted out. That instruction only encodes to 2 bytes, so size-wise it's the most efficient.

The right-shift option fascinates me, because I don't think there's really a C representation of "get the bit that was right-shifted out". Both gcc and clang compile `(i >> 1) << 1 == i` the same as `i & 1 == 0` and `i % 2 == 0`.

Which of the above is most efficient on CPU cycles? Who knows, there are too many layers of abstraction nowadays to have a definitive answer without benchmarking for a specific use case.

I code a lot of Motorola 68000 assembly. On m68k, shifting right by 1 and performing a logical AND both take 8 CPU cycles. But the right-shift is 2 bytes smaller, because it doesn't need an extra 16 bits for the operand. That makes a difference on Amiga, because (other than size) the DMA might be shared with other chips, so you're saving yourself a memory read that could stall the CPU while it's waiting its turn. Therefore, at least on m68k, shifting right is the fastest way to test if a value is even.

dansalvato··on Amiga Games Released in 2024 Index
I'm thrilled to see someone bring up Magicore! I don't do much publicity because it's been a quiet 2 years working on the game engine, without much flashy content to show for it. But we're ramping up to begin production of the final game assets, so I anticipate having a lot more to share this coming year.

Here is a small demo I threw together for AmiWest 2024, from last October: https://youtu.be/xIYrhKHEPEA

I also have a personal blog which is largely a development blog for Magicore (https://dansalva.to/blog). My next post will be about a recent feature where I use Amiga's hardware acceleration to draw rays of light that can be obstructed by passing objects. Proof of concept video here: https://youtu.be/rFWFTuWx82M

dansalvato··on The Bluesky Bubble: This is a relapse, not a fix
> For all its flaws, it's the only service that reflects society's pulse in real-time.

Is there such thing as accurately "reflecting society's pulse" within individual posts? Sure, maybe you can pull big data to understand public sentiment on certain topics or events. But the platform's goal is to present users with content they are most likely to engage with, so that they spend as much time on the platform as possible (and therefore view as many ads as possible). That content does not reflect society—it's often targeted ragebait. When users are goaded en masse by ragebait and engagement farming, some percentage are going to develop a distorted view of public sentiment, and their own engagement will further the issue.

The fact is that content discovery algorithms and moderation largely shape the tone and personality of a platform, both for a viewer and for a contributor (who is psychologically inclined to want to fit in).

Twitter isn't going to collapse and die overnight, but this could be the start of a 5-year trend where the "utility" of Twitter over other platforms gradually shrinks as reputable brands and public figures diversify their presence.

dansalvato··on Dolphin Progress Release 2407 and 2409
Others in the thread have already made good points about Yuzu, but to add to the discussion: A lot of people think Nintendo is indiscriminate with their takedowns, but they typically only go after things that:

* They think will significantly hurt their brand (or already has)

* They think will significantly hurt their bottom line (or already has)

An interesting case study on this is in 2006, before the launch of the Wii, Nintendo issued removal of certain NES ROMs from popular ROM-sharing websites. Rather than removing all Nintendo ROMs from those sites, Nintendo specifically provided them a list of the NES games that were slated to launch on Wii Virtual Console. I'm struggling to find a source for this, but I distinctly remember it happening because there were some odd inclusions like Wario's Woods, while Super Mario Bros. 3 remained untouched. If anyone is good at searching old news articles, I would really love to have a tangible source for this memory of mine.

On the other hand, the worst takedown I've ever seen Nintendo make was when they issued a C&D against a brilliant Commodore 64 port of Super Mario Bros.: https://www.eurogamer.net/nintendo-takes-down-mario-bros-c64...

Pretty sure that one happened because the release effectively went viral, with a lot of mainstream tech/gaming websites covering it. Still, as a retrocomputing enthusiast, it's hard for me to be an apologist over that one.

dansalvato··on 1M Users
I wasn't really on MySpace either, but I think it's exactly where your complaint lies that drew such a huge demographic. When I think MySpace, I think teenagers who are still discovering their identity—not seasoned creators with a catalog of work to show off.

The masses were given a means to make a page that encapsulated their identity and connect it with others, during a time where it was suddenly made possible for everyone to express themselves, but still difficult to produce meaningful online content. I think Tumblr eventually ended up capturing a lot of that, but I also feel that there is a sense of pressure around having a space where the purpose is to publish content (even if just reblogging). It was really meaningful to a lot of people that they could have a simple space to express themselves through custom mouse cursors, cringey quotes, and autoplaying emo music.

Nowadays, this expression of identity for younger audiences seems to be driven by being a part of online communities with common interests, expressing oneself through content (now that it's so easy to make and share). But I think MySpace was there for people at the right time.

dansalvato··on Cosy Computing
I've spent most of my life as a hardcore tech enthusiast, always excited for the latest and greatest. But in this era of homogeneous Electron apps, and now LLMs, I can't find much to be enthusiastic about anymore.

Most of the novelty has evaporated since every device nowadays can do everything imaginable (and if not locally, then via cloud). On old computers, it's just cool to see different kinds of software and games running on it. It makes you want to explore the possibilities. People used to be enthusiastic about the cool stuff their computer could do.

For a while now, I've wanted to set up a retro computer as a "daily driver" of sorts. It feels like a lot of our everyday uses for technology have not changed much over the decades—communication, news, entertainment, writing, organization, etc. If I lean back and ask myself what I actually use a computer for (other than specific stuff for work), I find it kind of hard to answer the question, which likely means I'm wasting a lot of time doing things that aren't deliberate or meaningful.

I love retro computers (especially Amiga), and doing stuff on them will always fill me with enthusiasm.

dansalvato··on Riven
The Steam releases of original Myst and Riven are the ScummVM ports, which work great on modern hardware. You'll find it as "Myst: Masterpiece Edition". Masterpiece Edition is effectively the same as the original release, but with better color fidelity on the visuals. I think the one downside of Masterpiece Edition is that some of the audio tracks were cut short to fit on the CD. Still, I'd say the Steam release is definitely the most hassle-free way of playing the game today.
dansalvato··on FC8 – Faster 68K Decompression (2016)
As of now, I'm loading all the level assets in advance, but many of the assets in RAM stay compressed until they're needed, such as backgrounds and fullscreen graphics. I decompress those asynchronously into video memory when I need them. The second video in this blog post shows the decompression happening onscreen in realtime: https://dansalva.to/coding-the-anime-woosh-screen-on-amiga/
dansalvato··on FC8 – Faster 68K Decompression (2016)
I'm working on a game for Amiga (another 68k-based platform) and settled on ZX0 to decompress assets on the fly: https://github.com/einar-saukas/ZX0

I was originally using LZ4, but I switched to ZX0 after learning that it can do in-place decompression, which means I don't have to allocate separate memory for the compressed data. I'm very happy with the compression ratio, and decompression of large assets (~48kb) only takes a few frames on a 7MHz 68000.

Also of note is LZ4W, included in Sega Genesis Dev Kit (and discussed in the comments section of OP's article), a variant of LZ4 that only uses word-aligned operations. That makes it much faster on the 68000, which can struggle to efficiently handle 8-bit data. More info here: https://github.com/Stephane-D/SGDK/blob/master/bin/lz4w.txt

dansalvato··on Coding the anime "woosh" screen on Amiga
I use the same trick today! I have some "benchmark" macros set up which forcibly override the background color when I want to see where in the frame my operations are taking place.

> Didn't know there were people still trying to squeeze more out of that chipset nowadays.

You will be amazed. The demoscene has gotten insanely good since around 2017. Here are some of my favorites that all run on a stock Amiga 500 (with the trapdoor memory):

https://www.youtube.com/watch?v=2jciCr8zEhw

https://www.youtube.com/watch?v=iD9xk3SDSYc

https://www.youtube.com/watch?v=pYtleuGV7ok

https://www.youtube.com/watch?v=E0OzX7plbeY

https://www.youtube.com/watch?v=rIV4AhfugIs

dansalvato··on Coding the anime "woosh" screen on Amiga
I was born in 1991, and we had an Amiga 1000 before eventually upgrading to a PC running Windows 95. So, I was always nostalgic for Amiga, but my passion grew once I began to understand more about the unique and powerful chips driving its capabilities.

Today, I work full-time as an independent game developer. I think it's fair to say that making an Amiga game has been a lifelong dream of mine, and I finally have the skills to make it happen. I want to help demonstrate that with today's tools and proliferation of knowledge, we can breathe new life into our beloved classic hardware by creating gaming experiences with modern design principles.

dansalvato··on Coding the anime "woosh" screen on Amiga
Amiga has its strengths, but I find that the SNES outperforms it in video games, because the SNES graphics chips were designed for video games first and foremost.

One major reason is sprites: Amiga can display 8 4-color sprites, or 4 16-color sprites, and the colors are shared with the bitplanes.

SNES can display 128 16-color sprites, and the sprites get 8 palettes all to themselves.

This leads to much more colorful-looking visuals on SNES. Since Amiga is all bitplanes, enabling more colors and higher resolution results in a massive performance hit. Most game entities would need to be blit on top of the background, and then the background "restored" every frame that entity moves. SNES' native support for multiple tile layers and good sprites means that the CPU can do a lot less work to achieve a lot more.

Amiga can do some very cool stuff that SNES can't, especially with the blitter, but SNES is much more practical and powerful for video games.

dansalvato··on AMD Zen 5 CPUs Reportedly Made on TSMC's 3nm Process, Mass Production in Q3
I often see sentiment that x86 architecture itself is fundamentally a bottleneck, compared to ARM/RISC, when it comes to efficiency and performance per watt. Does someone with the right expertise have insight to share on this? I'm curious what the factors are here. I would imagine that a factor is that most ARM implementations we see (like from Qualcomm, Nvidia, and Apple) are full-on SoCs which will naturally have efficiency benefits. But I'd love to learn more about this before "taking sides" and declaring that so-and-so architecture is the future, or whatever.
dansalvato··on Amiga Emulator: WinUAE 5.2.0
Thanks for your insight, you are more knowledgable on this than I am. I guess it speaks for itself that I don't tend to see the Amiga community strictly taking sides, and most are just tired of seeing this happen at all.
Page 1 of 4Next →