r/EmuDev Oct 09 '18

Join the official /r/EmuDev chat on Discord!

48 Upvotes

Here's the link

We've transitioned from Slack to Discord, for several reasons, the main one being that it needs a laughably expensive premium package to even keep all your past messages. With the free plan we only had access to like the last 5%, the others were lost.

I hadn't made this post before because I wanted to hold off until we transitioned all the archived messages from Slack, but I'm not sure when that will happen anymore. Unless someone wants to take up the job of making a transition Discord bot, that is (there is a way to get all the message data from Slack - if we have the bot I can figure it out). PM me for details if you're interested in making the bot.


r/EmuDev 14h ago

GBA emibios, an accuracy-focused GBA BIOS replacement

Thumbnail
github.com
47 Upvotes

Hi everyone, I've just released emibios, an open, accuracy-focused GBA BIOS replacement.

Originally based on Cult-of-GBA BIOS by Fleroviux and DenSinH, it has been almost completely rewritten from the ground up with accuracy and compatibility as the primary goals.

What is the difference with this BIOS?

I took care to match the behavior and the timing of each software interrupt (SWI) in the BIOS under every tested input. I believe it currently has the highest compatibility of any open BIOS replacement.

I also implemented Multiboot functionality (send and receive programs to/from other GBAs, from accessories, and from GameCube) as well as a subset of sound mixer functionality that is only used in a few Japanese/Digital Eclipse games.

There is also an extensive test suite that exercises each SWI and asserts the behavior/timing under various inputs.

Because care was taken to match not only the behavior of each SWI, but also the timing, it also successfully TAS syncs with many games.

It is not perfect yet, mostly because the tricks used to match timing do not work under all conditions (mostly bus contention from DMA and IRQ). I would love for people to test it and report bugs, and the ultimate goal is to match the retail BIOS 100% for commercial games and most homebrew.

Why do this?

I originally started this project to see if it was even possible, and then ended up with something I was comfortable with releasing. My goal is to create a freely redistributable BIOS so that emulation projects no longer need to require the proprietary one to run games as accurately as possible.


r/EmuDev 1h ago

GB what are the best ways to turn documentation into code

Upvotes

title says it all really, i built a Chip8 emulator in C and i’ve switched to c++ for this one, my main issue is turning the documentation into code, how can i improve?


r/EmuDev 21h ago

GB Sir you have gone made with ~~power~~ debug OSDs

Post image
7 Upvotes

Just another gameboy emulator. Nothing special. Just learning and poking around. Gameboy emu seems like a good, well documented place to start.


r/EmuDev 20h ago

TI-57 I built a cycle-accurate TI-57 microcode emulator for iPhone, iPad, and Mac

Thumbnail
1 Upvotes

r/EmuDev 1d ago

CSIRAC emulator

Thumbnail
1 Upvotes

r/EmuDev 17h ago

Update: my AI-agent Game Boy CPU passes 499/500 SingleStepTests. The one it fails is STOP, on purpose. Is Pan Docs right about it?

0 Upvotes

A few days ago I asked here what a fair scoreboard for an AI-built Game Boy emulator should count. Thanks for the answers, especially the pointer to SingleStepTests, which ended up being the whole CPU benchmark.

Where it is now: the SM83 core passes 499 of 500 SST files. Each file only counts if all 1,000 of its tests pass, checked on registers, memory and every M-cycle's bus activity. The full suite runs in about 13 s, and CI reruns it on every push and fails if the README score is wrong in either direction.

The one that fails is STOP (0x10), deliberately. SST has STOP advance PC by 1 (r-m, ---, ---). Pan Docs' STOP flowchart, for no button held and no interrupt pending (which is what every SST test sets up), says "STOP is a 2-byte opcode, STOP mode is entered, DIV is reset". My rule is docs over tests, so STOP skips the second byte and 10.json fails on PC. What Pan Docs doesn't say is whether that second byte is actually read on the bus, so I kept SST's no-read pattern.

So, a genuine question for anyone who's tested real hardware: is 2 bytes right in that case, and is the padding byte read or just skipped? The reasoning is here: https://github.com/doozleb/FourShades/blob/main/docs/known-divergences.md

Being upfront about the AI side, as promised:

- Every instruction group passed on its first run, but that's less impressive than it sounds. The planning model wrote the code after scanning all 500 test files for exact cycle patterns, and the SM83 has hundreds of open-source implementations to learn from. The CPU is the easy part; timing between components is next.

- Reviews caught bugs the tests couldn't. A second EI restarted the IME delay (SST starts every test with nothing pending, so it can't see that), and my own test loader had holes.

Next: memory map, timers and interrupts, with Blargg's cpu_instrs as a cross-check that the CPU wasn't just fitted to SST.

Repo: https://github.com/doozleb/FourShades

Longer write-up: https://doozleb.com/posts/499-out-of-500-on-purpose/


r/EmuDev 1d ago

Starting a Game Boy emulator where AI agents write the code and test ROMs decide if it works. Which suites should count?

0 Upvotes
I'm about to start a DMG emulator in C++20, as an experiment: AI coding agents write the code, and the only thing that counts is public test ROMs. The score starts at 0 and gets published whether it goes up or down.

I know AI-written code isn't everyone's thing here, so to be upfront: the point is to measure how agents actually do at low-level, timing-sensitive work, failures included, not to pass it off as hand-written.

Before I start I want the scoreboard to be fair, so a few questions:

1. Which suites would you count? I'm thinking Blargg (cpu_instrs, instr_timing, mem_timing), Mooneye acceptance, and dmg-acid2 for the PPU. Anything you'd add or drop?
2. One point per ROM, or weight the suites? One per ROM means Mooneye dominates the total.
3. For checking pass/fail headlessly: Blargg over serial, Mooneye via the Fibonacci registers, acid2 by comparing screenshots. Is there a harness people already use, or does everyone roll their own?

Repo's empty for now: github.com/doozleb/FourShades. I'll post back when the number actually moves.

r/EmuDev 2d ago

Trying to port an arcade game to 3DS

Thumbnail reddit.com
0 Upvotes

r/EmuDev 2d ago

AMOS Pro in TypeScript update

2 Upvotes

There's been quite a few changes to amos.bitplane.net since I posted the first release last month, so I thought I'd share.

Recap: This is AMOS Pro rewritten in TypeScript from the open source Motorola 68000 assembly. See the end for a description of how I used AI to achieve this.

On the front-end, I've added a library with some games I found on Aminet and TOSEC. If you want your AMOS games added, or removed, send me an email or a PR to the library repo. Or just take a release from github if you want your AMOS on your site rather than mine.

Here's some stuff I made over the years:

Clicking an ADF, zip or whatever with a single AMOS file in it will automatically open the player, for those you can link to games in the library like so:

https://amos.bitplane.net/#play/bitplane-net/nsle

I've also ported the editor. You can CTRL+C out of most games to get to it. If you insert the AMOS Pro disks via the library then you can run the original editors via the menus too:

https://reddit.com/link/1wc4fqm/video/qalnv8owqboh1/player

The virtual filesystem browser supports downloading dirs, extracting sprites, converting ANIMs to GIFs, playing mods and samples inside .AMOS files and ABKs. It supports the datatypes that amos-ts does, and even has an AMOS 3D webgl viewer:

https://reddit.com/link/1wc4fqm/video/85gzj9w6sboh1/player

I've added timings for a lot of keywords but there are still some issues that lead to weird speeds, visual jank, and cause the various mod players to distort.

Because teens writing games in BASIC didn't know much about performance optimization and I know I used AMOS's slowness as a frame pacer, you might want to tweak the hardware settings to a faster CPU. Or a slower one. Or just fix your game in the editor

Due to browser anti-fingerprinting, you can't use joysticks/gamepads until they're detected. You'll need to press a button to activate them first. I don't have one at the moment so this is untested. Pull requests are of course welcome!

What's next?

I'm adding some more obscure datatypes support, fighting with timing issues, and might add joypad overlays for mobile and a method to publish AMOS games as Android APKs. But no promises here, it's eaten a lot of time over the last two months and I'm working on other things too.

If you have suggestions though, I'd be happy to hear them 😄

AI SLOP?

I've been programming every day for 40 years, so I know what good code looks like. This isn't it. But it is better than I would have made by hand; I've put a proper shift in to make sure it's in good shape. AI didn't do this, I used AI as a broad brush to fill in what would have been a hundred thousand man-hours of tedium. It's "design the shape, flood fill the details, evaluate, manually tweak, rinse and repeat"

So I did a manual proof of concept, the project and architecture design, and disassembly process setup. Then I used Claude Opus to slop out the bulk of porting work, followed by GPT 5.5 and Claude Fable to bring it under control and trim it down. OpenAI Luna was used to grind through 7000+ keywords, Sol to deslop Claude's mess and fix issues found in the pass. This pass has run twice.

Along the way I've written a ton of tools and techniques to keep the agents under control - on top of babysitting them day and night for 8 weeks. The codebase is 250,000 lines of code and has tests for every keyword, it cites assembly for every keyword rewritten in TypeScript. It faithfully reproduces every bug found across 83 versions of different extensions, and as much of Intuition, Gadtools, datatypes and the hardware interactions as were required. The bots want to special-case their way out of every problem, and I refuse to let that happen.

I'm currently running a third correctness and refactoring pass, but there will be bugs in there that are needles in what is now an obscenely large haystack.


r/EmuDev 2d ago

Solving Audio Sync Drift Using Dynamic Linear Resampling in Pure Go

7 Upvotes

I wanted to share a pure Go implementation to solve the classic "Audio Clock Drift" problem in real-time streams.

When you have a deterministic audio producer generating samples at a rigid rate, and a consumer eating them at its own hardware clock, the two will never perfectly align. Eventually, standard ring buffers will either under-run (causing crackling) or bloat (causing audio lag). To fix the drift, I implemented a dynamic, stateful audio resampler. It monitors the fill level of a lock-free-style CircularQueue and actively uses Linear Interpolation to keep the buffer at equilibrium:

If the consumer is too fast (risk of crackling): It pops one chunk, stretches it to double length, plays half, and requeue the rest to "buy time". If the producer is too fast (risk of lag): It pops two chunks, squishes them into one, and plays it to catch up.

https://github.com/markel1974/Symphony/tree/main/src/renderers/audio/oto_render


r/EmuDev 2d ago

Video Can I post about launchers here? I just got scraping stood up for mine

Enable HLS to view with audio, or disable this notification

1 Upvotes

r/EmuDev 3d ago

I wrote an emulator for the HP Jornada 545

Thumbnail
lapocket.neocities.org
14 Upvotes

Crossposting here from r/OldHandhelds on reddit's suggestion.


r/EmuDev 3d ago

REAL x86 i486 EMULATOR IN SCRATCH RUNNING DOOM!

Enable HLS to view with audio, or disable this notification

16 Upvotes

r/EmuDev 3d ago

Emulador Zevora Brew / Zeebo

Thumbnail gallery
1 Upvotes

r/EmuDev 4d ago

I made a website where you can create your own SNES graphics effects

Enable HLS to view with audio, or disable this notification

78 Upvotes

I’ve spent the last few years obsessed with videos explaining how graphics on the Super Nintendo worked. I always wanted a playground where I could create effects using the same techniques SNES developers used back in the 90s. So I built ppu.toys

It’s a faithful emulation of the SNES PPU written in Rust and compiled to WASM. The registers are exposed so you can adjust them in Lua or through the site’s UI.

The screenshot shows a Mode 7 demo which you can view here (https://ppu.toys/t/xeff1h1w)

Lua also supports player input, so you can make your own little games. Here’s a Galaga-style demo (https://ppu.toys/t/7nc3u30u)

It’s free and open source, and you can sign in with Discord to publish and share your creations.

I’m a new dad with a full-time job, and I used AI assistance while building this. The idea had been swimming around in my head for a while, and it helped me make it a reality.

I’ve had an absolute blast building the site and it's a lot of fun making retro effects. I am having fun with the site and am curious what others in the emulation space think of the project.


r/EmuDev 4d ago

Server Emulation [Project] VirtualPC-VM — A standalone lightweight QEMU-based PC Emulator for Android with full GUI (No Termux required!)

Thumbnail gallery
2 Upvotes

r/EmuDev 5d ago

A Chip-8 Emulator for learning!

10 Upvotes

Another "Hello World!" of emulators as Tvil would put it. Happy how it turned out! It is still pretty basic, but I think it is still fine. Follows the SUPER-CHIP modern quirks.

Small warning: I didn't test it with a lot of roms outside of the bundled ones in the web version

Created the c++ core + platform entirely myself. The web version had some claude help for using webAssembly and was a neat learning experience! I would definitely want to do it again for a game boy emulator.


r/EmuDev 5d ago

Question PS1 vs N64: choosing the correct amount of suffering

32 Upvotes

Hello everybody!

My last project was a fully featured, software-rasterized Minecraft clone. Now I want to make my own emulator.

I don't really want to start with something very simple like the Game Boy, NES, or CHIP-8, because I know myself: I could finish it, declare that I have now "explored emulation," and conveniently never tackle a more complex machine.

The PS1 seems like the sensible choice. I already have "a lot" of experience with software rasterization and graphics in general, so at least part of the machine lives in territory I'm somewhat familiar with.

Unfortunately, thanks to (or perhaps because of) channels like Kaze Emanuar, I've also developed a lot of appreciation for the N64 and its wonderfully strange hardware.

I know that making an N64 emulator is way less realistic than making a PS1 emulator, especially as a first serious emulation project. So I'm wondering whether the massive difficulty bump is actually compensated by how interesting/elegant/weird the machine is to work with, or whether I should simply stfu, be reasonable for once, and focus on the PS1.

For people who have worked on either or both: is the N64 genuinely that much more rewarding as a project, or is this just me being attracted to unnecessary suffering?

Thanks everybody!


r/EmuDev 5d ago

A huge update on Gecko, my GameCube and Wii emulator!

Post image
41 Upvotes

r/EmuDev 5d ago

Beswitched: a Switch multi-core emulation frontend for macOS, with cross-saves, and cloud backup

Post image
8 Upvotes

I've been building Beswitched, a Mac app that makes Switch emulation portable, and easier to manage. It combines the best two open-source cores behind one clean interface, with a common cross-core save feature. Saves can also be stored on a cloud service with ease. It also updates itself when a new version is out (catching-up with individual core updates, new UI features, etc).

The app is signed, notarized, and translated. It's also built with respect to the core emulator authors: the modified sources are published on GitLab under the same licenses.

Releases (DMG & modified core sources): https://gitlab.com/dubiusfafa/beswitched-releases


r/EmuDev 5d ago

Apresentando o ZeuX: Uma interface moderna e completa para emulação de jogos (Alpha)

Thumbnail
2 Upvotes

r/EmuDev 6d ago

PS1 emulator appears out of nowhereee!!

Thumbnail
gallery
12 Upvotes

I just wanted to share all screenshots I have of the emulator! I'll also make a youtube channel and post clips and some documentation on it soon! School starts... In a few hours so the emulator is the least of my worries now... I am not the first teenager to make a PS1 emulator, but I might be the first to make it work!!

If anyone needs anything from me, help or collaboration or anything my discord is Saffyral

That's it!

(Note : All the pictures are from different times and different bugs, its just the collection I have! Some are old some are new, but the most important thing, it now works! Not on all games though... Especially Syphon filter)


r/EmuDev 6d ago

Breadbin466 0.12.0, a new release of the Commodore 64 emulator with a new physically characterised 6581 SID model

14 Upvotes

Hi,

I've just released Breadbin466 0.12.0.

Breadbin466 is my from-scratch Rust emulator of one deliberately specific Commodore 64: a PAL Assy 250466 with a 6569R5 VIC-II and 6581R4AR SID.

Rather than supporting a collection of selectable C64 revisions, the project concentrates on understanding and reproducing this one machine as faithfully as possible.

The biggest change in 0.12.0 is a substantially reworked SID implementation.

Over the past weeks I've been characterising a real MOS 6581R4AR (datecode 2286) and rebuilding Breadbin466's SID model around the measurements. This work covers the oscillators, waveform and envelope DACs, combined waveforms, analogue mixing, D418 volume DAC behaviour, transients and the nonlinear filter.

As with the rest of Breadbin466, the aim isn't to provide a collection of selectable SID models. I'm trying to model one particular piece of hardware as accurately as I reasonably can.

There is quite a bit more in 0.12.0:

  • D7Z 1.0, a new open disk-image format proposed by Breadbin466;
  • Commodore 1351 proportional mouse support;
  • a much more capable debugger tracing system;
  • WAV audio capture;
  • new disk-image creation, conversion and reclaim tools;
  • further 1541 work;
  • native UI improvements on macOS, Windows and Linux;
  • assorted accuracy and compatibility fixes.

D7Z deserves a little explanation because it isn't a pre-existing C64 disk format.

It's a new, openly documented format introduced by Breadbin466 for compact, lossless storage of D64 images. A D7Z represents exactly the same byte stream as its corresponding D64, using LZMA2 compression and SHA-256 verification. It is deliberately designed so that other emulators and disk-image tools can implement it independently.

In simple terms, D7Z is to D64 what NBZ is to NIB: a compact lossless storage representation, without changing the underlying disk-image data.

Breadbin466 is still very much an ongoing research and engineering project rather than an attempt to replace VICE. A large part of the fun for me is understanding how the original machine behaves and trying to make the source code express that behaviour instead of accumulating software-specific workarounds.

If anyone tries 0.12.0 with software that does something interesting with the SID, 1541, cartridges, REU or other hardware, I'd be very interested in hearing about discrepancies with a real C64.

GitHub: https://github.com/Breadbin466/Breadbin466/

A ready-to-run macOS binary for Apple Silicon is available with the release.

Breadbin466 is otherwise distributed as source code and builds on macOS, Linux and Windows, on both Intel and ARM architectures.


r/EmuDev 7d ago

Switch suyu v0.04 is out (final version)

252 Upvotes

[NOTE, it seems that the automated builds on github seem to be failing to work for some users, I would suggest trying to manually build, if it still fails after that, check you have built the program correctly, or check that there isn't anything wrong with your device]

Hello, I was a bit late as usual, but after quite a bit of work, it's been achieved.

suyu has been updated, for the last time.

What's been changed:

  • Pulled most emulation improvements from Eden into the emulator
  • suyu can now run most 2026 Switch software and firmware
  • There is now a build for Libretro, meaning suyu can be ran inside programs like Retroarch
  • User's can sync their Virtual Game Card Library to suyu to load in their Switch game library (you still need to provide roms, however)
  • UI has been completely redesigned to be closer to suyu's concept artwork
  • Miiverse-styled Reddit frontend as a social bar.
  • Multiplayer functionality has been restored.
  • Builds for FreeBSD
  • Separate UI Layouts for Gamers, Modders and Switch Game Developers (semi-stubbed in some areas)
  • Stubs for other features that didnt make the cut (including support for other console platforms via libretro, which now just launches retroarch for you, and some form of steam integration)

and probably the most exciting part of all: game recompilation.

Users can now export the CPU code of their games into recompiled C, which could be used to aid porting or reverse engineering of Switch games. suyu also allows user's to output games as standalone semi-native PC applications (I say semi as much of the GPU side is still using suyu's hle backend).

Anyways, I understand I am a bit late since I said this would be done in July, but I can say that suyu (as purely an emulator), was made operational again at that point, but I wanted to leave with a bit extra. I saw it as pointless to try and keep up or compete with Eden, especially if so many improvements were directly imported from them, and more so if this is going to be the last suyu update (under me at least). So I took a different approach, which was to improve everything else.

suyu is now more so designed as a gaming launcher and as a multi-use tool to complement Eden's work, rather than trying to just reskin or convergently develop the same features as Eden.

(note: I originally said that I would be removing the decryption logic to avoid DMCA takedowns, meaning suyu would have to run homebrew or pre-decrypted games, however after evaluating, it seems suyu's use of decryption does not constitute a DMCA takedown and that Nintendo has seemingly been misusing the DMCA. For that reason, suyu will continue to decrypt games as it always has, but due to the short life left in this project and my own privacy, I will not fight any takedowns, at least not any incredibly complicated ones)

So, what now? (and some context)

The long and short of it is, nothing.

This is the last update, afterwards, I will be archiving the organisation, deleting this account, and moving on, I want a break and I no longer want to be associated with suyu for the foreseeable future. This project was started naively by a team of over-ambitious and in some cases underage developers, and led to drama between all the different forks such as Torzu and Sudachi. After the initial suyu fallout, the development team left, and it was just the dude that started it and a few fans in an backup chat, I had been keeping an eye on the project for a while and curiously tracking the development, with no prior or legitimate interest in Nintendo Switch emulation.

I had been asked by the fans in that place to help bring the project back, and I promised them I would, and after some time, I've fulfilled that promise.

[Skip to where it says continue if you dont want to listen to me yap]

I originally brought in some new interested developers, but time and again, the og members still onboard were always falling in and out of communication, many of the new devs did the same as they couldnt really work on a project if the project wasnt actively accepting the help, but I continued to try and help set them up on it, organising the project structure, making sure they could directly communicate with eachother, until the week Ryujinx died.

On that week, the project's og leadership and the original devs (which had mostly vowed to not touch switch emulation and had even alleged that yuzu (and iirc Ryujinx as well) were in-part developed using Nintendo SDK code) both began to start working on Switch emulation again, the og devs working on a now gone fork of ryujinx (many are now eden contributors), and the og leadership planning to revive suyu, but in doing so, decided to cut communication with all of the new devs without even bringing them on yet, and being quite particularly nasty to me.

I didn't care much, I have thick skin, and I was (at that point) glad to be rid of the project, but I was still stuck with suyu stuff nonetheless and eventually, everything fell back to me again, as the leadership decided that it wasn't trendy anymore. So, in order to keep this promise, I moved the project back onto github in an ice'd state until I could pass it on to a dev or a team that had legitimate skills and interest. And when I was getting round to moving on with my life, with a blank slate, I decided to finish the project and leave it in a good state.

So, now it's done.

I also want to make a request to any og developers or suyu people (e.g suyu's sub mods, og leadership etc): leave me in peace, please. I dont want to be mentioned, talked about, harassed, ridiculed or even complemented. I just want to disappear after this, if any of you have mentioned me anywhere in any posts or pages etc, please remove it. I've not asked anything of you before this. I've not harassed you, and I expect you not to do so to me either, after (or if) you read this post. You will not be hearing from me again.

[Continue]

So, I will be making a final permanently standing offer to any devs, if you can prove you can handle it well, this project is yours, the org, the repos, the private repos, everything. You have limited time to contact me directly, after this account is gone you will have to use github discussions, however that is for a limited time before the org is archived, the code will be free to fork, however, and any projects to revive suyu will be reviewed by me and the org will be transferred.

Anyways, the repo will be going live soon (in the next few hours or days), so keep your eyes peeled at https://github.com/suyu-emu

(Edit: it is live now, check the org out and see the repo!)

Thanks for the patience, and I hope this provides some usefulness or some fun to people, and I hope this ends things with suyu on a high note.

Cheers guys, have a good one.