Even DOOM Can Now Run DOOM!

For years now, the standard test of any newly hacked piece of hardware has been this: can it run DOOM? id Software’s 1993 classic first-person shooter has appeared on everything, but here’s one from [kgsws] that’s a bit special. It’s DOOM, running inside DOOM itself.

So how has this feat been achieved? There’s a code execution exploit inside the original DOS DOOM II executable, and that has been used to run the more modern Chocolate Doom within the original. It appears as an in-game texture, giving an odd effect as if it’s being watched in a cinema.

The video below the break shows the game-in-game in action, but the real value lies in its in-depth description of the exploit, that takes us through some of the inner workings of the game and ably explains what’s going on. It finishes up with a specially made cinema WAD in which to play DOOM-in-DOOM, and even Hexen-in-DOOM. Pick up your trusty chainsaw, it’s going to be a long night.

Continue reading “Even DOOM Can Now Run DOOM!”

Injecting A Bit Of Rust Via DLL

Ever been frustrated that a software package was missing a feature you want? In the best-case scenario, the software would be open source and you could just tweak the code and rebuild. But in many cases, the software is closed-source. In the case of [Faster than lime], he found a SNES emulator (Snes9X) that didn’t support controllers to showcase the technique. So with a little bit of Rust, he wrote some code that could be injected into the emulator via DLL injection.

It’s a fantastic tutorial that shows the technique. He starts by creating a Rust project that uses the DLL-Syringe crate (the rust version of dependency management). This crate does much of the heavy lifting involved with injecting a DLL into a target process. The rest of the journey is an excellent process of going through the Windows documentation and implementing the features. The DLL just reads the controller and then sends the right input to the program. In the end, [Faster than lime] has a great injected DLL and we have a wonderful time learning about Rust and debugging in an injection environment!

It’s been a while since we last covered DLL injection, and it’s nice to see how the process has evolved. Video after the break.

Continue reading “Injecting A Bit Of Rust Via DLL”

Hacking The RF Protocol Of An Obscure Handheld Game

When you think old school handheld games, you probably imagine something like Nintendo’s Game Boy line or the Sega Game Gear. But outside of those now iconic systems, there was a vast subculture of oddball handheld games vying for a chunk of an adolescent’s weekly allowance. Many of these were legitimately terrible and frankly aren’t worth remembering, but a few offered unique features that were arguably ahead of their time.

One such game was Hasbro’s short-lived P-O-X. As explained by [Zachary Ennenga], the game didn’t spend much time on store shelves as its core concept of defeating undetectable alien invaders hell-bent on destroying our way of life proved to be more than a little problematic when it launched in September of 2001. But that doesn’t mean it didn’t have some cool ideas, such as a wireless ad-hoc multiplayer capability that let your game autonomously battle it out with other units that got close by.

Fascinated by this feature since his youth, [Zach] set out to study how this relatively cheap kid’s toy was able to pull this off back when even the flagship handheld consoles were still using physical link cables for multiplayer. He was aided in his quest by a particularly helpful patent, which not only gave him clues as to the frequency, data rate, modulation, and encoding of the RF signal, but even explained the game’s logic and overall structure. A lot of what was in the document seemed wishful thinking on the part of Hasbro, but reading through the marketing speak still uncovered some salient technical details.

A decoded P-O-X packet.

Armed with an RTL-SDR, GNU Radio, Inspectrum, and a bit of Python, [Zach] was able to identify the signal and begin the process of decoding it. This is where things get really interesting, as the details of his reverse engineering process are widely applicable for all sorts of unknown RF signals. Even if you’re like most people and have nearly zero interest in failed handheld games of the early 2000s, it’s well worth a read. The same techniques he uses to figure out the name and physical characteristics of the invisible foe his game is transmitting could one day help you figure out how to manipulate the data from that wireless weather station you’ve got in the backyard.

Once he figured out the major parts of the protocol, [Zach] moves on to creating his own packets and broadcasting them out in such a way that the real hardware will recognize it. He even comes up with some code that will automatically battle games which wander within range of his Yardstick One, which may come in handy during the inevitable P-O-X Renaissance.

While this might seem like a lot of effort to put into a game that most people have never even heard of, we’ll remind you that some of the greatest hacks to ever grace these pages have been born of similar pursuits. Even if you’re the only person in the world to directly benefit from your current line of research and experimentation, there’s still plenty of like-minded folks in this community that are all to happy to cheer you on from the sidelines.

A Math Based Personality For Games

We make no apologies for being hardware focused here at Hackaday, but that doesn’t mean we aren’t occasionally impressed by a particularly inspired feat of bit wrangling. For example, [t3ssel8r] has taken a break from his game to discuss his procedural animation system and the beautiful math behind it.

Sometimes, rather than having specific keyframes, games will instead use procedural animation. This means that the position is determined on the fly rather than a predetermined set of positions. Developers can use the combination of IK or FK (inverse or forward kinematics) to solve for rotation and positions of the joints that will place the end at a specific position. Particularly with crawling multi-limb things, it’s pretty easy to put a limb on the ground and keep it there until it’s too far away, pick a new spot, and move it there. It’s simple code to write and looks convincing. It can handle complex terrain and situations with different limb positions.

However, it doesn’t offer the chance to inject some life or personality into the movement as keyframes do. [t3ssel8r] goes through the equations and reasoning behind his semi-implicit Euler solver-based system. There are some fantastic explanations in the video, but the short version is that he has three parameters to control the system’s frequency, dampening, and initial response. This allows him to tweak the behavior in a somewhat intuitive manner. One problem is stability; if the timesteps get too large, the position quickly explodes outwards. Using eigenvalues (who ever thought you’d use those) to determine the minimum timestep allows the system to remain stable and take multiple smaller steps when needed or just bound the change temporarily.

If you’re looking for more animation, this blender plugin renders your PCB traces in a new light.

Continue reading “A Math Based Personality For Games”

Reverse-Engineering Forgotten Konami Arcade Hardware

When fully-3D video games started arriving in the early 90s, some companies were more prepared for the change than others. Indeed, it would take nearly a decade of experimentation before 3D virtual spaces felt natural. Even then, Konami seems to have shot themselves in the foot at the beginning of this era with their first foray into 3D arcade games. [Mog] shows us the ins-and-outs of these platforms while trying to bring them back to life via MAME.

These arcade machines were among the first available with fully-3D environments, but compared to offerings from other companies are curiously underpowered, even for the time. They include only a single digital signal processor which is tasked with calculating all of the scene geometry while competing machines would use multiple DSP chips to do the same job. As a result the resolution and frame rate are very low. Nonetheless, [Mog] set out to get it working in MAME.

To accomplish this task, [Mog] turned to a set of development tools provided to developers for Konami in the early 90s which would emulate the system on the PCs of the time. It surprisingly still worked on Windows 10 with minor tweaking, and with some other tools provided over the decades of others working on MAME these old Konami machines have some new life with this emulator support.

Not everything works perfectly, but [Mog] reports that most of the bugs and other issues were recently worked out or are being actively worked on by other experts in the field. If you remember these games from the arcade era of the 80s and early 90s, it might be time to grab an old CRT and fire this one up again.

Continue reading “Reverse-Engineering Forgotten Konami Arcade Hardware”

Want A Break From Hardware Hacking? Try Bitburner

If you ever mention to a normal person that you’re a hacker, and they might ask you if you can do something nefarious. The media has unfortunately changed the meaning of the word so that most people think hackers are lawless computer geniuses instead of us simple folk who are probably only breaking the laws meant to prevent you from repairing your own electronics. However, if you want a break, you can fully embrace the Hollywood hacker stereotype with Bitburner. Since it is all online, you don’t even have to dig out your hoodie.

The game takes place in 2077 where, apparently, people are still using green monochrome terminals and writing JavaScript code. Who knew? The operating system is suspiciously Linux-like with commands like alias, cat, cp, kill, and the like. We were nonplussed that in 2077 they’re still using vim, but you can use nano. We always thought real hackers would be emacs users. Our machine only starts out with 8 MB of RAM, too. Good thing you can virtually buy more.

We won’t quibble that cls is a synonym for clear or that you use help instead of man. It is, after all, a game. This means you don’t have to feel bad using the buy command to purchase a program on the virtual dark web, either. Hey, if you can shoot bad guys in an FPS game, why can’t you do business with fake cyber-criminals. Why should Grand Theft Auto players have all the fun?

You know how in a video game you are a much better shot and can sustain a lot more damage than you probably can in real life? The same principle applies here. Using the scan-analyze command helpfully tells you how many open ports connected computers have and how much hacking skill it will require to break in. That’d be handy in real life, we bet.

We did think it was bad form that the tutorial admonished us for not entering the commands it wanted us to. What kind of hacker wouldn’t try something else? Anyway, it’s probably a better diversion than whatever Facebook or phone game your friends are wasting time with. It probably doesn’t impart any real hacking skills, but not everything has to be useful.

If you want a game that might teach you something, try the Bash crawl adventure. Or, go write and play some BASIC games in your browser.

Putting A Little More Juice In Your Emulation Station

After you’ve built a snazzy Raspberry Pi-powered retro gaming console, you might be wondering if you could have just a wee bit more power and run some of those other games you might remember, such as Xbox, Wii, or PS3. Perhaps in the future, a later revision of an RPi could handle it but currently, to emulate the 6th/7th generation of consoles, you need something a little beefier. Luckily, [Zac] got his hands on an old gaming laptop and turned it into his own game console.

The first step was to take the laptop apart and discard the parts not needed. [Zac] stripped away the battery, Bluray drive, and spinning hard disk. That left him with a much smaller PCB that could fit into a small case. The power button was integrated into the keyboard but came into the motherboard by the flat cable keyboard connection. So by bridging a few pins, he could power up the laptop. Next, he upgraded the RAM, wifi card, an NVMe drive, and redid all the thermal paste and putty to try and keep things cool while overclocking the GPU.

The case for the machine heavily used his CNC as it was walnut with a mid-section made of plywood. The top has a gorgeous cast acrylic window to see inside. The part the [Zac] was dreading with the fine pitch soldering. Ultimately he got both wires connected with good connections and no bridging. Because it’s just a PC at its heart, almost every game is on the table. Emulation, some more moderate PC games, streaming from his office PC, and cloud gaming services allow him to access most games made. We love the concept and the idea.

We love the aesthetic of the build but if you prefer to keep your consoles looking a little more faithful, why not put your mini PC inside of an actual N64 case? Video after the break.

Continue reading “Putting A Little More Juice In Your Emulation Station”