After the recent discussion about CHIP-8 interpreters on the NES and actual implementation of one, I couldn't help feeling a bit disappointed at how poorly designed the CHIP-8 is, mainly because of the loose speed specifications and lack of any sort of anti-flicker mechanism. The lack of interesting games to play doesn't help either.
But the idea of simulating another machine on the NES is still pretty cool, so I was thinking if maybe there isn't an actual system out there that would be doable under the constraints of the NES.
The first thing that came to my mind were those cheap 9999 in 1 Brick Games, but unfortunately I couldn't find much technical information about them online, let alone ROM dumps. Those have a number of interesting games, and the display is dead easy to simulate.
Another thing I thought of was the Tamagotchi and it's many clones , but each of those is only a single game, and they aren't particularly exciting to play on a TV.
Then I started to think about more complex systems, like computers from the 70's with specs significantly lower than those of the NES, but still had a decent number of games made for them. The VIC-20 immediately came to mind, because its graphics can be very charismatic, but I didn't fully understand the video hardware (the aspect ratio would be all wrong, that's for sure), and a 1MHz 6502 seems like a tall order for a 1.79MHz 2A03, unless programs are converted via static recompilation or something.
I couldn't help thinking about the Atari 2600 too, and even though the CPU is clocked at 1.19MHz, most of the CPU time is spent on the kernel that draws the image, so if that part can be sped up somehow, maybe the game logic can run at a decent speed. Graphics are primitive, but very dynamic, and can change drastically from one frame to the next, so simulating the TIA would require a lot of tricks (including mid-screen palette changes), and the aspect ratio would be wrong no matter what. Some loss of color would occur, but the palettes are somewhat compatible.
At this point, I'm out of ideas of what could be fun to emulate on the NES. A fun machine to implement would not only have an interesting architecture to recreate, but also software that's fun to run. None of the above candidates are ideal, for various technical reasons. Does anyone have any more ideas?
tokumaru wrote:
Tamagotchi
I thought a tamagotchi style game would be a good fit for a game that runs entirely from RAM with no cart in, thinking that I could make an 8x8 display out of only sprites (flickering between two complementary half-filled open bus patterns).
Though incidentally the Tamagotchi ran on a 6502.
I guess you need to emulate the 6502 to do address translation. You could probably emulate a KIM-I as that probably won't need any address translation, or very little translation. Maybe an Altair 8800, PDP-11 etc. TI-99/4a yes it will be slow, but it already was
If you can use hardware to help with the emulation, maybe you can put something to trap and fire an IRQ/NMI when an invalid address is requested, to give you time to translate it to something else?
Game and Watch?
Oziphantom wrote:
I guess you need to emulate the 6502 to do address translation.
Yeah, which's why I considered using static recompilation, so performance wouldn't take a huge hit.
Quote:
You could probably emulate a KIM-I
Are there any fun programs/games for the KIM-1? Does it even have video display?
Quote:
If you can use hardware to help with the emulation
I'm not THAT invested in this...
Quote:
Game and Watch?
The game-specific LCD screens kill it for me.
It looks like the TRS-80 Model 1 has a simple enough monochrome display (64x16 characters in text mode, 128x48 pixels in bitmap mode), and a decent library of arcade-style games. The tricky part is that its CPU is a 1.774MHz Z80.
My fist thought was to be able to emulate the FDS expansion, but that’d require some hardware assistance too.
There were a lot (ok, a handful) of computer schematics in the east bloc that any hobbyist could build from discrete parts. Their games were naturally quite limited. Gaming culture exploded in russia after zx spectrum got cloned.
There is the PET which has a character ROM you can't change which would be convenient for the NES. Also has a 6502. and only 4K of RAM.
the issue with the PET, TRS-80 and Apple ][ is they expect a keyboard.
You could emulate one of those old Brick Game Tetris clones.
Oziphantom wrote:
There is the PET which has a character ROM you can't change which would be convenient for the NES. Also has a 6502. and only 4K of RAM.
It's a good candidate, the games are just a bit on the ugly side...
Quote:
the issue with the PET, TRS-80 and Apple ][ is they expect a keyboard.
True, but since the focus is on the games, a feature to map buttons to keyboard keys should work fine. A virtual keyboard for the non-game stuff will have to do.
8bitMicroGuy wrote:
You could emulate one of those old Brick Game Tetris clones.
Already mentioned I couldn't find anything about those, no specs, no ROMs, nothing.
anything with specs low enough to be emulated by a NES are going to look crap
Given you have the issue that those machines don't have the VBLank limit, so you are going to need to trap all VRAM updates and then pump it though on the VBlank which is going to drop the amount your emulator can update per frame.
ZX80/81?
Oziphantom wrote:
anything with specs low enough to be emulated by a NES are going to look crap
I think blocky art can look cool, but ASCII/PETSCII is kinda lame. CHIP-8 graphics wouldn't be so back if they weren't so flickery!
Quote:
Given you have the issue that those machines don't have the VBLank limit, so you are going to need to trap all VRAM updates and then pump it though on the VBlank which is going to drop the amount your emulator can update per frame.
Yeah, I was always counting on having a mirror of the video memory in regular RAM so that it could be changed at any time, and periodically uploading it to VRAM.
Quote:
ZX80/81?
I'm not very familiar with those, but the CPU clock scares me a bit. Although it looks like the CPU is involved in the video output, is that correct?
Chip8 is a language not a machine right? so the flickery graphics is down to the implementation and I guess lack of Vsync?
Yeah the Z80 is basically a 2600 with a Z80, its a 3.5Mhz Z80 but that is ~1.0~1.5mhz 6502ish. But lots of the CPU time is spent on graphics for the ZX80, the ZX81 is a bit better I think.
Oziphantom wrote:
Chip8 is a language not a machine right? so the flickery graphics is down to the implementation
Correct - you’re free to improve the interpreter as long as compatibility remains intact. Or free to do whatever you want, but compatibility is a key feature in order to be meaningful.
I’d suggest storing and being able to edit a header along with the program file. Emulation/interpreter speed would be the most important feature.
Back in the day i guess the few chip-8 users there were just modified programs to work with their rig. But since the NES is an absolute factor, there are more or less definitivr answers to the respective problems of each program.
In a sense chip-8 is an intermediary step between assembly and BASIC.
There's a bunch of random arcade games that would be appropriate. (
Like all of Kee Games's 6502-based arcade games from the late 1970s). The problem is that I'm not certain whether it would be sufficiently closer to "emulation" than "porting".
—
tokumaru wrote:
Although it looks like the CPU is involved in the video output, is that correct?
I'd say it's closer to the 7800 than the Galaksija—when the ZX80 is redrawing the screen it's tricked into fetching picture data as though it were executing it, but the hardware shoves a NOP in for the CPU to actually execute.
Nocash has some excellent documentation:
http://problemkaputt.de/zxdocs.htm
I'm glad my topic inspired one of the most active forum members to create a topic
viewtopic.php?f=2&t=10665&hilit=GameboyRemember that? I don't, I just browse old topics. I only joined the forum recently.
Could that be viable?
lidnariq wrote:
The problem is that I'm not certain whether it would be sufficiently closer to "emulation" than "porting".
Yeah, porting doesn't have the same cool factor as emulating.
Quote:
when the ZX80 is redrawing the screen it's tricked into fetching picture data as though it were executing it, but the hardware shoves a NOP in for the CPU to actually execute.
That's cool! They're just using the CPU to fetch video data from RAM then, there's no actual processing going on? If this is the case, the emulation could be significantly sped up by entirely skipping this part, and in turn the CPU time that's left for running programs will have more time to be emulated. The tile-based display of the ZX-80 also translates really well to the NES, I don't think any tricks will be necessary to implement it.
Quote:
Nocash has some excellent documentation:
http://problemkaputt.de/zxdocs.htmThanks, I'll take a look.
orlaisadog wrote:
http://forums.nesdev.com/viewtopic.php?f=2&t=10665&hilit=Gameboy
Remember that?
Crap, I've literally already asked this in the past! Well, this is a topic that interests me after all. As for the feasibility of emulating a Game Boy (not CGB) on the NES, I think it's doable. If you can display the graphics (NES can do 2bpp grayscale just fine) and more RAM than the original machine (might need bankswitchable WRAM for this one), emulation is possible, even if it's extremely slow.
Quote:
Effective CPU Speed in SLOW mode (when Display is enabled)
For 50Hz Display Refresh: 0.804600 MHz
For 60Hz Display Refresh: 0.536400 MHz
Could the NES possibly emulate that in real time? I doubt it, but hopefully it wouldn't be unplayable.
Recompilation? That could go at over full speed!
Edit: Wait, is that ZX80/81?
Gameboy would be really interesting.
Game Boy allows writing to VRAM in its (fairly long) horizontal blanking period, even without the GBC-exclusive HDMA feature. My only released full scale project for Game Boy,
144p Test Suite, uses hblank fairly heavily for transferring rendered VWF text to VRAM. So I don't see Game Boy emulation at anywhere near full speed being possible without hardware assistance (Wide Boy, RetroVision, or GB-on-an-FPGA).
I would expect that most games work without this though. If we can predict what it does and when it happens could we replace it with a mapper IRQ in some cases, such as if it's just scrolling?
IMO, Game Boy wouldn't be anywhere near full speed, period. I'd personal rather work on something that's playable.
OK.
Why am I posting just to say this?
tokumaru wrote:
literally already asked this in the past
Literally
tokumaru wrote:
Does anyone have any ideas of other platforms that are relevant enough to be interesting to see emulated?
I wanted a rom very simple to test in an emuladorde 6502
Without using the memory APU / PPU for and have a weight 8K
https://github.com/mkeller0815/MOUSE2Go ... er/Arduino
Every one of my ideas got discarded when I reminded myself of the tight vblank period.
The PC Engine had ports of NES games with game specific PPU/APU emulation code but you can access VRAM at any given time so it's much more capable for the task.
I would very much like to emulate something on the NES, but not something people will look for 5 seconds out of curiosity and move on, I want to be able to play actual games at a decent speed. The most likely candidates are early home computers with monochrome displays and character-based graphics. I'll keep that in mind for the future, but for now, my time will be better spent on an actual NES game.
marvelus10 wrote:
Does this count?
That's quite interesting!
That's cool! If he really got Intellivision software running that fast, that's quite impressive!
You can download it. I haven't tested it yet though.
Did anything ever come out of this topic?
While I do think that emulating something on the NES would be cool, it'd ultimately serve no purpose, seeing as whatever the NES would be able to handle already runs 100x better elsewhere... So I decided I'd rather spend my time working on an actual NES game instead.
marvelus10 wrote:
Did anything ever come out of this topic?
There is a CHIP-8 emulator