Tricking NES games to run on laptops
Format
SOECS Senior Project Demonstration
Faculty Mentor Name
Shon Vick
Faculty Mentor Department
Computer Science
Additional Faculty Mentor Name
Osvaldo Jimenez
Additional Faculty Mentor Department
Computer Science
Abstract/Artist Statement
One of the fundamental problems in software engineering is that software only runs on the hardware it was designed to run on. If a language such as assembly is used, the resulting code can only run on the hardware that supports it. Higher level languages also only work for systems that have a compiler for them. The benefit of having platform specific code is that it allows programmers to apply system level optimizations, but has the downside of being platform specific. Once the platform is outdated or is no longer in development, the old code can no longer be run.
In an attempt to solve this problem, one can write code that emulates the behavior of older systems, thereby “tricking” the older software to run on current hardware. Such an emulator requires software components for each individual piece of hardware. The complexity lies in the fact that systems have multiple processing units that run in parallel, whereas code by its very nature (the Von Neumann Architecture) is sequential. Older systems also had additional hardware that would be plugged in through cartridges to expand the original system’s capabilities. These ASICs must be emulated accurately as well to run the programs.
To understand how the NES works at the lowest level, documents that were written detailing the original hardware were used. A lot of time was spent reading about the results of reverse engineering the hardware and designing a program that accurately modeled it. Audiences can expect a detailed description of how the internals of the NES worked, along with playing some NES games using the emulator.
Location
School of Engineering & Computer Science
Start Date
4-5-2018 2:30 PM
End Date
4-5-2018 4:00 PM
Tricking NES games to run on laptops
School of Engineering & Computer Science
One of the fundamental problems in software engineering is that software only runs on the hardware it was designed to run on. If a language such as assembly is used, the resulting code can only run on the hardware that supports it. Higher level languages also only work for systems that have a compiler for them. The benefit of having platform specific code is that it allows programmers to apply system level optimizations, but has the downside of being platform specific. Once the platform is outdated or is no longer in development, the old code can no longer be run.
In an attempt to solve this problem, one can write code that emulates the behavior of older systems, thereby “tricking” the older software to run on current hardware. Such an emulator requires software components for each individual piece of hardware. The complexity lies in the fact that systems have multiple processing units that run in parallel, whereas code by its very nature (the Von Neumann Architecture) is sequential. Older systems also had additional hardware that would be plugged in through cartridges to expand the original system’s capabilities. These ASICs must be emulated accurately as well to run the programs.
To understand how the NES works at the lowest level, documents that were written detailing the original hardware were used. A lot of time was spent reading about the results of reverse engineering the hardware and designing a program that accurately modeled it. Audiences can expect a detailed description of how the internals of the NES worked, along with playing some NES games using the emulator.