Sign in

William Wenge-Murphy

@billywm.bsky.social
229 followers 52 following 1.5K posts

Software Engineer; JavaScript zealot and 6502 hobbyist. Ornery on main. He/him, Ⓥ, BLMACAB (especially ACAB) github.com/BillyWM billy.wenge-murphy.com

PostsRepliesMedia
William Wenge-Murphy @billywm.bsky.social · 6h
Always remember that people are alive but computers can never be alive, and Live Más
000
William Wenge-Murphy @billywm.bsky.social · 6h
"Computer" is an abstraction (e g. Turing machine) that could be implemented by infinitely many physical systems. You could represent TM states with Taco Bell sauce packets flipped to either side. A quadrillion Taco Bell sauce packets don't give ride to consciousness
100
William Wenge-Murphy @billywm.bsky.social · 6h
Tech weirdos who think computers can have feelings are so cringe.
100
Reposted by William Wenge-Murphy
Hourly Videogame Box Art @vgboxart.bsky.social · 18/05/2026
INSPECTOR MINTON'S INVESTIGATION FILES: THE CLOWN MURDER CASE
INSPECTOR MINTON'S INVESTIGATION FILES: THE CLOWN MURDER CASE
221171395
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So, I was just lightly ribbing by joking the gfx/runtime bit is ROTFO, but it is true, that's "a whole thing". Might be easy, might be insanely nuanced, per game. Just to make the point, technically speaking you can't do a literal 100% decomp on any game with ACE (Turing Complete. Emu required)
000
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So when some game purposely OR accidentally depends on some specific hardware behavior how have to make sure you fully understand what that means in the context of that game, in light of the rest of the program and how it also interacts with that nuanced behavior
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
In most cases this is really well behaved for abstracting away because it expects a specific format so you could turn that into some nice runtime abstraction like the RSP stock microcodes ......except that the occasional game will do something funny like purposely trigger sprite overflow
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
The NES has a lot of MMIO locations. Let's say you see a write to $4014. You certainly shouldn't turn that into C code that does a write into some memory you've malloc()'d. 4014 writes trigger OAM DMA on the PPU - the written byte in a 256 byte "page" to do a block transfer of sprites props from
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
And I'll finish my neverending tweet-essay with these concrete examples: Say you're pointlessly doing an NES recomp. From your ASM experience you probably know what a memory mapped "hardware register" is - a memory write to that address isn't a mem write at all, it's talking to a device
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So, at the very least, if your game isn't well-behaved, the step of "just" figuring out which bytes are code not data and then turning them into C calls for deep hardware understanding to make sure that you're not overlooking something subtle and critical (n64 has annoying cache behavior for one)
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So looking at an ASM sequence of repeated compare-and-branch and saying "oh yeah thats a switch-case, I'll write it that way in C" is all well and good but maybe in another place it's "....the program can reach this function in a different state in a minority of cases and not do what it seems to"
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
But, often, the annoying behavior of the hardware rears its head in the form of *timing*. Multiple parallel pieces running and their exact cycle timing might matter (or even sub-cycle!) So figuring out "what does the code do?" is a larger question of "what is the whole system doing at that moment"
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So for n64, for any given game you choose, maybe everything is well known and well behaved, and you do just need to figure out what is code, what is data, what is the code trying to do, make C versions of each function, compile, link against runtime, call it a day
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
Luckily, however, Nintendo highly encouraged using their own stock microcodes, so most didn't write their own, so the community has gone through and studied and abstracted the behavior of the known microcodes and there's a runtime you can compile against that does this among other things
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
You're trying to eliminate emulation, you don't wanna execute the microcode one instr at a time and set each register and draw dot by dot or whatever it happens to be doing. You want to abstract the whole game data to RSP to RDP pipeline into "make triangle here", "shade with vertex colors" etc
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
The RSP takes custom microcode. It's an entire compressor. RSP microcode is Turing complete. Basically it runs shaders; ahead of its time. The R*D*P is fixed-function so you can just abstract all its behavior into modern high level behavior in your graphics pipeline, but the RSP could do anything.
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
To give a concrete example, I've looked into n64 ('cause I'm more nostalgic for it than Playstation, lol), I know a bit about it technically but not too deep, and one Big Deal on the 64 is the RSP, the chip that massages data into display data for the RDP (R"S"P and R"D"P)
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
So that's why I asked because the answer is kinda "....well, whichever platform you're interested in, you're gonna wanna look at what static recompiler do they have if any, and what supporting runtime exists etc" for each system there will be some community tool chain and knowledge base
100
William Wenge-Murphy @billywm.bsky.social · 02/10/2026
Well, in my experience with reversing it's not the assembly language per se that's the hard part its all the nuances hardware behavior. Its not just "this reads a byte and that does an indirect jump and the pointer comes from this table" its what does that all mean in relation to the HW quirks
100
Reposted by William Wenge-Murphy
K25fF @k25ff.bsky.social · 27/04/2024
"Has anyone drawn skibidi Duchamp’s Fountain yet" –A discord user, about a minute before they saw the worst thing in the world. (1642)
Skibidi Duchamp's Fountain
210535
William Wenge-Murphy @billywm.bsky.social · 01/10/2026
Gonna guess PS1 cause thats the reversing you've done right?
100
William Wenge-Murphy @billywm.bsky.social · 01/10/2026
Which platform? Because that would be platform specific, as far as what you do to statically recompile the code and what framework you hook to to provide graphics and other HW functionality etc (haven't done a recomp but have reversing so not talking out my ass lol)
100
William Wenge-Murphy @billywm.bsky.social · 01/10/2026
The recompile targeting PC part is sort of the Rest Of The Fucking Owl Step lol.
110
Reposted by William Wenge-Murphy
Watermelon_Sir @watermelon-sir.bsky.social · 16/06/2026
Made #spore in #spore
29532
Reposted by William Wenge-Murphy
sap @sap6.bsky.social · 14/09/2026
you're lucky if your phone can even pass the Mcdonalds Anticheat
151
William Wenge-Murphy @billywm.bsky.social · 28/09/2026
I'll have to do a pass and make sure that's not a superficial misunderstanding of their codebase then leave a note in their issues list or throw together a simple PR.
000
William Wenge-Murphy @billywm.bsky.social · 28/09/2026
I pointed ChatGPT at the ExCSS codebase to have it give me a full list of what the parser throws out instead of keeping it in the AST, as a baseline for my fork, and it also just went ahead and found some bugs in their code while it was at it, lol
Screenshot of ChatGPT conversation. Bug part highlighted

"3. Invalid selectors normally make the entire style rule disappear. CreateStyle parses the declarations but ultimately returns null if the selector came back null. RuleList.Add ignores null, so the complete rule vanishes from the visible AST. There is also a bug here: StylesheetComposer.CreateSelector checks AllowInvalidValues when deciding whether to retain an invalid selector, rather than AllowInvalidSelectors. The standalone ParseSelector() method uses the correct option. So the stylesheet parser's tolerance switch is wired incorrectly.

4. An invalid selector that is retained is reduced to one opaque UnknownSelector."
100
William Wenge-Murphy @billywm.bsky.social · 27/09/2026
Some of the funniest Retsupurae content is when they went to Newgrounds and read some of the insane comments on these things aloud youtu.be/40pGaVIuTV4
youtu.be
Screw Detective
YouTube video by retsupurae
010
William Wenge-Murphy @billywm.bsky.social · 27/09/2026
Onions do get me going not gonna lie. It's the pepperoncinis that kill the mood
030
William Wenge-Murphy @billywm.bsky.social · 27/09/2026
Plumbers Don't Wear Ties, they wear low-cut shirts for their big ol' titties
040
William Wenge-Murphy @billywm.bsky.social · 27/09/2026
Yeah i seriously thought it was the sandwich shop and was thinking of playing it
140
William Wenge-Murphy @billywm.bsky.social · 26/09/2026
"Your honor can I please be banned from the courtroom"
000
William Wenge-Murphy @billywm.bsky.social · 26/09/2026
And Licc'em Low Lisa has a chorus, it's not just three and a half minutes of bridge
000
William Wenge-Murphy @billywm.bsky.social · 26/09/2026
If you like this you'll love the Afroman trial, and nobody died except his door.
100
William Wenge-Murphy @billywm.bsky.social · 26/09/2026
Kind of Jim and Jontron. Jimtron.
010
William Wenge-Murphy @billywm.bsky.social · 26/09/2026
All the references to Narodnaya Volya literature in Rick and Morty just go right over my head
010
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
FUCK, I GOT DESTROYED BY WHITNEY'S MILTANK. IT'S BEEN SO LONG SINCE GSC I FORGOT pokerogue.net
pokerogue.net
PokéRogue
A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.
010
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
6.7 beta will be adding a lot, to their credit - including Grid! - but there's still so much low-hanging fruit to make it tempting, including media queries and nesting (nesting being mostly a parsing-side problem). There's dozens of properties that can be lowered without any custom rendering work
000
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
Parsing is drop-in but to get started you have to do a selector engine which is gnarly, and also resolve specificity. And you can do that naively and inefficiently, but to do it *right* you'd need to be doing bookkeeping on subtrees (for partial updates) and....yeah, that's all a whole....thing.
100
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
vh/vw you just look at the viewport size, convert to pixels, inline references. rem, similar, inline a value (em requires cascade). They don't even have hsl()/hsla() either, which, again, you can just lower to rgba() trivially. And apparently ExCSS does a ton of color math for others like lab & lch
100
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
It's really, really tempting to make a preprocessor that "lowers" extended properties to UITK compatible ones. I might not be able to resist. But you have to solve like 5 different problems just to get started, and then you can finally implement a few 'simple' properties.
100
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
UITK also has so many gaps oh my god. Designing without rem or em units is INSANITY. No viewport units is also irritating considering how simple they would be to implement, and that unity uses an off-the-shelf parser (ExCSS) for the syntax side anyway, but a lack of rem or em is CRAZY
100
William Wenge-Murphy @billywm.bsky.social · 25/09/2026
meme, "Tired of looking at BAD SCREEN

Can't wait to get home and look at GOOD SCREEN"
020
Reposted by William Wenge-Murphy
Gwyllm Llwydd @gwyllm.bsky.social · 24/09/2026
10567751327
William Wenge-Murphy @billywm.bsky.social · 23/09/2026
ChatGPT is fantastically stupid about failing to generalize its knowledge of web UI dev to Unity UITK
000
William Wenge-Murphy @billywm.bsky.social · 22/09/2026
Currently addicted to Horsey Game. Set a goal for myself of figuring out the genetics system without looking at guides/wiki
Screenshot of Horsey Game, player's home with pen, barn, etc. All kinds of nonsense going on, all kinds of weird mutante "horses", cars, car hybrids, a horse-millipede-thing wearing one roller skate, etc. $23068 balance.Screenshot of Horsey Game, detail view of a horse named "Pimp My Horse" who is wearing boots, a necktie, a top hat, glasses, a clown nose, and a baloon. Horse is marked "GMO" and various stats are shownHorsey Game screenshot of the genertics lab. A man is in the machine lying backwards saying "I feel violated". Dr Cripin is a horse with a flask in his mouth. Various objects around the lab, flasks bones, etc
000
William Wenge-Murphy @billywm.bsky.social · 20/09/2026
Try not to fill any holes on your way through the parking lot! Actually if you could that would be great it's in pretty rough shape
001
William Wenge-Murphy @billywm.bsky.social · 18/09/2026
Yooka Laylee failed to live up to the Banjo Kazooie legacy because that's only one instrument not two.
011
Reposted by William Wenge-Murphy
icyjiub.bsky.social @icyjiub.bsky.social · 17/09/2026
Slop is when you don't manually rewrite thousands of xml files
281
William Wenge-Murphy @billywm.bsky.social · 18/09/2026
(Lanier's form (a la the meteor shower thing) would presumably be that ALL integers are conscious because all integers represent some tape for some TM that interprets it as consciousness, within the infinity of possibilities)
000