moa
Nuked-MD-FPGA
moa | Nuked-MD-FPGA | |
---|---|---|
5 | 6 | |
49 | 283 | |
- | - | |
8.1 | 9.1 | |
19 days ago | 7 months ago | |
Rust | Verilog | |
GNU General Public License v3.0 only | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
moa
-
Structuring NES emulator components in Rust
The code is here if you're interested: https://github.com/transistorfet/moa System is the top level component and devices.rs has the traits that System uses to interact with the components. The machines directory has the system definitions that build a specific machine to emulate.
-
Emulating the Sega Genesis - Part III
A few months ago, I wrote a 68000 emulator in Rust named Moa. My original goal was to emulate a simple computer I had previously built. After only a few weeks, I had that software up and running in the emulator, and my attention turned to what other platforms with 68000s I could try emulating. My thoughts quickly turned to the Sega Genesis and without thinking about it too much, I dove right in. What started as an unserious half-thought of "wouldn't that be cool" turned into a few months of fighting documentation, game programming hacks, and my sanity with some side quests along the way, all in the name of finding and squashing bugs in the 68k emulator I had already written.
-
Emulating the Sega Genesis - Part II
There's not much to it. Only one window can be created at the moment, and input is not yet supported. The threaded option is also not shown here. Before long, the code grew more complicated, and now includes parsing of command line arguments with the clap crate. To see the latest version, check out the Genesis machine-specific binary and the MiniFB host impl and main loop
-
Making a 68000 Emulator in Rust
Since the 68000 has a reasonably orthogonal instruction set, we can break down the opcode word into sub-components, and build up instructions by separately interpreting those sub-components, rather than having a match arm for each of the 65536 combinations. There is a really helpful chart by GoldenCrystal which shows the full breakdown of opcodes for the 68000. We can look at the first 4 bits of the instruction word to separate it into 16 broad categories of instruction, and then further break it down from there. The full code can be seen here
Nuked-MD-FPGA
-
FPGAs and the Renaissance of Retro Hardware
The reality is that the vast majority of these FPGA-based clones don't actually perfectly emulate the logic. They're using the same reverse engineering techniques the traditional emulator developers used and sometimes even the same community documentation. The results are often quite good, but they're making a new implementation that matches the observed behavior of the original system to the best of their abilities.
Now there are some exceptions. Nuked MD FPGA[0] is a recent example of an FPGA recreation that is a fairly direct translation of the original logic using silicon die analysis. In this case, the logic is basically identical, but as you guessed the physical layout is different. Generally speaking, you write FPGA "gateware" in a language like Verilog or VHDL. These don't intrinsically have any information about the physical layout of the logic which is handled by the toolchain instead. As wmf says, this is generally not a problem most of the time. For synchronous logic, either the total propagation delay is small enough for a single cycle or it isn't. The toolchain will estimate this delay and report whether you met timing or not for the configured clockspeed.
Not everything you can do in silicon translates well to FPGAs (both clock edges is also generally not well supported for instance), but for the most part these things are easy enough to work around.
[0] https://github.com/nukeykt/Nuked-MD-FPGA
-
Nuked-MD-FPGA – accurate Sega Genesis re-implementation based on decapped chips
Kinda, sorta? This is like saying "a computer is not enough, you need a binary." What's here is the source code in Verilog. This produces a netlist (set of gates) which is synthesized into an actual bitstream (proprietary gate configuration file) for a specific FPGA hosted on a specific board.
In this case, the project isn't very documented but it looks like fairly generic Verilog without a lot of vendor specific extensions. So, what you need is a Verilog toolchain which can synthesize the source code into a netlist, and then into a bitstream, and the right set of extra code to target an actual physical piece of hardware.
Right now, it looks like the only board support that's checked into the repository is for the Icarus Verilog simulation environment: https://github.com/nukeykt/Nuked-MD-FPGA/tree/main/icarus .
But, the overall setup looks pretty simple and generic, so it should (hopefully) be possible to synthesize to your board of choice by reimplementing run.v and memstubs.v towards an actual hardware configuration.
- Nuked-MD-FPGA -- cycle-accurate Sega Genesis/MD hardware implementation based on reverse-engineering console's chips
What are some alternatives?
m100LE - A Wordle-like game for the vintage Tandy (Radio Shack) Model 100
MegaDrivePlusPlus - Universal Region mod, 50/60 Hz switch and In-Game-Reset (IGR) for Sega Mega Drive (AKA Genesis)
CLK - A latency-hating emulator of: the Acorn Electron and Archimedes, Amstrad CPC, Apple II/II+/IIe and early Macintosh, Atari 2600 and ST, ColecoVision, Enterprise 64/128, Commodore Vic-20 and Amiga, MSX 1/2, Oric 1/Atmos, early PC compatibles, Sega Master System, Sinclair ZX80/81 and ZX Spectrum.
Genesis_MiSTer - Sega Genesis for MiSTer
martypc - An IBM PC/XT emulator written in Rust.
Nuked-OPN2 - Cycle-accurate Yamaha YM3438(YM2612) emulator
Nuked-MD - Cycle accurate Mega Drive emulator
analogue-pocket-utils - Collection of IP and information on how to develop for openFPGA and Analogue Pocket
piston - A modular game engine written in Rust
SGDK - SGDK - A free and open development kit for the Sega Mega Drive
freebee - FreeBee - AT&T 3B1 / 7300 UNIX PC emulator
independence-day - Gno.land airdrop scripts.