thefarwind / chip-8 Goto Github PK
View Code? Open in Web Editor NEWA Chip-8 emulator written in rust
License: MIT License
A Chip-8 emulator written in rust
License: MIT License
I want to change the name, so the module is 'chip8' rather than 'chip_8'. I know it can be done, but haven't managed to get it working yet.
This is a rarely used function whose implementation I've had a little difficulty looking up. Nevertheless, it needs to be implemented eventually.
According to the spec, this shouldn't cause the game to crash. Games, such as pong, use this feature when wrapping a paddle from top to bottom of the screen.
Currently the ncurses library is baked into the Chip8 struct, rather than being an implementation detail that main is using.
Currently the Audio struct directly references ncurses code. This issue is to create an implementable trait for Audio that chip8 uses.
Currently, 0xF case turns into bad values for both of these instructions, because it sets VF to the overflow/underflow, and then shifts that value left or right.
Instead, this (undefined) behavior should follow the pattern set by the other overflow/underflow operations, which is do the operation to VX, then set VF to the overflow/underflow.
chip 8 is meant to have the display info in memory. This PCR is to make the emulator closer match the intended situation.
draw flag should be set when 00e0 is called.
this was uncovered by a unit test :D
there is currently no real description of this project or it's purpose. Add these details to the readme.
looking at a magazine post about chip8 from way back in the day, it appears that the registers were originally intended to reside in memory. They should be moved there.
Most opcodes increment the pc by a value of two when read. 0xFX0A is supposed to increment to the next instruction -- however, it fails to do so.
instead of skipping if VX != VY, it sets the program counter equal to 2 or 4, which is a major bug.
Currently, the chip8 machine/processor is passing the screen to each ncurses io object when a method using the screen is called. This should be changed so that each object has a reference to the screen, and the machine/processor has no knowledge of the ncurses library.
The stack was designed to live in the memory. this issue is to make the emulator more closely match that design.
Currently, tests heavliy make use of the rand crate. While this is nice for just general checking, if a test fails the test should be reproducible. Therefore, the seed should either be A) Set before hand or B) recorded if an error occurs, and have the random seed be settable.
I would strongly prefer to implement method B.
Testing with pong, the wrong key causes the paddles to move up, and there is no key that causes the paddle to move down.
Seems like using the word fake is more common than mock. Not sure if this will be implemented or declined.
there are missing options for crates/cargo setup. Part of this issue will be looking up the necessary settings and setting them.
there are currently no details on how to build and run debug, build and run release, and run the tests. These should be added to the read me.
this would allow the user to debug programs written for chip-8 to determine what is occuring.
Currently, pixels which are 'on' are displayed as a 4 using ncursesio. this should be changed to a solid block.
None of the functions, structs, etc in the code have any code comments on them. Code comments should be added so that the code has documentation.
this issue is to pull the chip8 logic out into a separate module.
running chip-8 unsyncronized seems to work fine, but for larger emulators, they will need to be synchronized with the host system to work properly.
Therefore, it should be implemented here.
When switching chip8 such that the audio, display, and input are all fed to a new function, all the tests were broken. This is blocked until after audio, display, and input are implemented as traits (see #20).
Currently this is only usable with main.rs. There should be a lib file as well, which main.rs imports.
The test module will have a set of mock io devices to create the chip8 machine and tests inputs and outputs.
This is part of #7. This covers the display logic.
opcode is short for operational code. change any mention of optcode to opcode.
Currently ncurses library is pretty hard-baked into the chip-8 device. It should be pulled out such that it's an implementation detail.
when the index is used by instructions, the index is meant to be incremented over the course of the instructions. This behaviour should be implemented.
this issue is to separate the processor from the rest of the chip 8 machine
There's a lot of code for testing which remains unimplemented. This code needs fleshed out.
Currently all values are hardcoded. Several of these should be specified in a config file.
Currently the tests module is sitting inside of main.rs. This should be moved to a separate file called tests.rs
Move audio out of main.rs and into a separate struct.
Necessary clarifcation before implementation -- VX + I > 0xFFF -> I > 0xFFF or I = VX + I - 0xFFF?
This is part of issue #7. This handles moving the input ncurses keypad logic into another module.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.