nesfpga -- Verilog Based NES Targeting FPGA Devices

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
nesfpga -- Verilog Based NES Targeting FPGA Devices
by on (#86761)
Greetings,

This is my first post, so allow me to briefly introduce myself. I'm a recent grad that's currently employed in FPGA based digital hardware design. I'm a retro gamer whose childhood was practically founded on the nintendo's old systems, including, of course, the NES! As such, I've been dedicating my free time towards a personal milestone -- to make an open source FPGA based implementation of the NES. The plan is that it won't end there, but I'm taking it one step at a time. I'd like to thank all of the users and maintainers of this superb resource, and look forward to contributing in any way I can. :-)


--- Project Details ---
overview:
I began this project about a year ago while completing my senior year in college. The project remained stagnant for the passed few months, but recently I've found enough regular free time to get it in motion again. As a side-note I am aware that there are 6502 cores out there, but I would personally rather make the endeavor myself. I feel like I owe it to the system, and it's honestly quite fun!

This project's goal is to create a FPGA based (verilog only) design that performs cycle-accurate execution of 6502 instructions.

The defining feature of this architecture is that native instructions are internally translated to microinstructions to simplify the internal logic of the FPGA. Will preserve inst. cycle count behavior, but not sure if I need to obey bus timing behavior as well yet. A nice side-effect of this is that technically any 8-bit opcode centered ISA can be translated by simply replacing the ROM contents of the translation unit. I've been spending the passed week hacking out a μISA with a software buddy of mine and have finally finished v1.0 of the μISA. Our next tasks are to start writing the translations & research the strictness of bus-timing the MMIO (we're going to be making the PPU as a VGA based interface, so my theory is that we don't need to be completely stringent to the bus-timing limits of the original NES).

As always I'd be glad to share any resources in the project and will give public access to the SVN as soon as we get it setup. In case anyone is interested, here is a link to the first revision of the μISA we've reduced the native ISA to: http://www.2shared.com/document/OUv43aN ... cture.html

by on (#86775)
WELCOME!

WOOT WOOT for open source! I'm really interested in this project because of that.

I'm in a similar situation although I won't graduate for another 6 months. Right now I'm working on the NESDEV1 project for my senior design project this year.

While I would be interested in helping out on this project, only really have time to follow along with your progress. However the work I'm doing may be able to be incorporated with yours in the form of mappers.

How do you plan to implement cartridges/roms? Because my goal is to finish all descrete mappers, MMC1, and MMC3 in verilog, (perhaps MMC2,4, and FME7 later on) fully testing on the devcart/NES and releasing open source. They would seem to be a great addition to your project.

by on (#86810)
Thanks for the kind welcome.

I'm not very savvy with mappers, but it sounds exciting. Fortunately our projects are nicely divided in that they can communicate abstractly to one another.. and clearly a cpu & rom without its associated mapper(s) is not very fun. :) I looked at your project thread and am thoroughly impressed! I can see how it's a lot of work. In light of this, I will definitely need to make the bus timing cycle accurate to interface correctly with standard mappers.

For ROM loading, I've got a flash loader that I wrote a long time ago, but implementing it again in case I can't find it is trivial. The plan is to load ROMs from a flash card. I'm going for trying to shrink the pcb area as much as possible while keeping everything necessary for operation on board.