LoginLogin
Nintendo shutting down 3DS + Wii U online services, see our post

CHIP-8 Emulator/Interpreter

Root / Submissions / [.]

RaichuBenderCreated:
Download:4D4X3EK3
Version:0.9.8Size:
Update - 12Me21 made his own version. Check it out here: http://smilebasicsource.com/page?pid=693 This version is pretty much obsolete now, since I'm not going to improve it. You can still download it for the included games. CHIP-8 is an interpreted language created by Joseph Weisbecker and was meant to be used for the COSMAC VIP and Telmac 1800 8-bit microcomputers in the mid '70s. It was later reintroduced on graphics calculators. Several ports were made for other platforms as well. The reason it was created is that it makes creating games much easier. Control the games using a 16-key keypad. The display resolution is 64x32, so the sprites are very low-detailed. The only sound output is a beep. This set comes with a couple of CHIP-8 ROMs that are public domain, meaning everyone can share them without any problems. Here is a list of them: 15PUZZLE ADDITION ANIMALRACE ASTRODOGE - my personal favorite BLINKY BLITZ BRIX CONNECT4 GUESS HANOI HELLO HIDDEN INVADERS KALEID MAZE MERLIN MISSILE PARTICLES PONG PONG2 - a better version of PONG PUZZLE SIERPINSKI SIRPINSKI STAR STARFIELD SYZYGY TANK TETRIS TICTAC TRIP8 UFO VBRIX VERS WIFEOFF ZERO

Known issues

There are graphical issues in some games.

To do

Add Super CHIP-8 support. Bug fixes Make the touch keypad better Release log

0.9.0 - Initial release

0.9.1 - Minor bug fix, the score counter in Pong and Brix both work now!

0.9.8 - Multiple changes:

Real-time debug information added, saving/loading states added, improved audio, completely recoded render system so that it is much faster, more ROMs added, bug fixes.

Instructions:

Run CHIP-8 and enter a rom name. Use the buttons or keypad on the touch screen to control the games. Reset with L and fast forward with R. Save state with X Load state with Y Open the PRG in edit mode and you can change colors, button mapping and button rapid fire.

Does the interpreter run at the proper one-point-whatever MHz speed? In other words, how are you timing it/controlling the speed?

Replying to:snail_
Does the interpreter run at the proper one-point-whatever MHz speed? In other words, how are you timing it/controlling the speed?
Because there is no real CHIP-8 CPU, there is no documented speed. It VSYNCs every time it draws a sprite or clears the screen and when it makes sound. I'll add a speed setting in the future.

Replying to:snail_
Does the interpreter run at the proper one-point-whatever MHz speed? In other words, how are you timing it/controlling the speed?
Ah, ok. That's a very reasonable way to time it since most programs are going to run some kind of graphics anyway.

tetris isn't working...

Replying to:12Me21
tetris isn't working...
I know. It's a shame. I can't figure out what the cause of the problem is...

could you use DIALOG to input the filenames? it's much easier to type.

Replying to:12Me21
could you use DIALOG to input the filenames? it's much easier to type.
Sure, it'll be in the next update :D

How in the world do I make a program with this? Too complicated. XD Anyways nice emulator! I like it a lot!

Replying to:CodeTrooper
How in the world do I make a program with this? Too complicated. XD Anyways nice emulator! I like it a lot!
Thanks, it means a lot to me! Back then everything was done using ASM and binary. Programmers were really hardcore. But because the Telmac 1800 was so hard to program for, they invented a much easier type of binary code called CHIP-8. It wasn't really popular, but it succeeded in making programming much easier for that time. Today you can find it everywhere, from small hobbyists to easter eggs in video games.

Man, I need to update this. I have this 1.0 version that I haven't even released yet.

I don't see how to download this. Does it come as source code? I want to see how you did it all.

Replying to:SMSbill
I don't see how to download this. Does it come as source code? I want to see how you did it all.
There is a public key you need to use to download this in SmileBASIC.

I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1

Replying to:12Me21
I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1
Oh, wow. Thanks! Expect an update very soon! EDIT: This is a good opportunity for me to fix and optimize the code even more.

Replying to:12Me21
I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1
here's a video of tetris on my improved version of your interpreter: https://www.youtube.com/watch?v=hhLuMBrIVIc

Replying to:12Me21
I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1
hey, 12me21, thanks for the fix bro. [poll=p64][/poll]

here's my version: P3A3EEZF (doesn't come with the games) The "slow" button controls the speed: 0=unlimited, 1=1KHz, 2=500Hz Change the controls during a game by pressing the "CONTROLS" button and using the D-pad/A button to select a key, then press the button you want to control that key. press B to exit.

Replying to:12Me21
I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1
Neat!

Tetris is unplayable

Replying to:3dsdiamond
Tetris is unplayable
Use the the fix two comments below:
I fixed the bug that caused some games (like tetris) to not work simple fix: 1: add V[&HF]=0 at the beginning of the DRW function 2: remove the other line that sets V[&HF]=0 3: replace V[&HF]=1 with IF P[I2] THEN V[&HF]=1