This page is a mirror of Tepples' nesdev forum mirror (URL TBD).
Last updated on Oct-18-2019 Download

An IDE for NES 8-bit

An IDE for NES 8-bit
by on (#38470)
I'm trying to generate interest in and gather feedback on a tool I've been working on for a while...

www.nesicide.com

Would you use it to create NES games? What improvements would you need? It doesn't yet have the following, but I hope to get to it someday:

HELP files!
Sound/music support
Paint-style nametable creation

Everything else is there in one form or other. I have posted a few demo projects that I created, also.

Thanks!

by on (#38474)
Looks very promising, hope you'll keep the good work up.
You would probably want to place pre-defined routines with it that does common task to get the thing more newbie-friendly.

by on (#38475)
I want to have your man babies.

by on (#38476)
Niiiice!

Already got two boys keeping the rest of my life busier than busy. This project keeps me from going insane... :lol:

by on (#38477)
Bregalad wrote:
Looks very promising, hope you'll keep the good work up.
You would probably want to place pre-defined routines with it that does common task to get the thing more newbie-friendly.


Yeah, I'm thinking something along the lines of a code library, with starter-project-like wizards for different mappers, etc (including mapper interface functions).

For music I want to implement something similar to NerdTracker...one of these days!

by on (#38479)
I take my hat off too you. I have planned from time to time to have this kind of idea for WedNESday, but never got round to doing it. ;)

by on (#38483)
The project by itself seems promising. I had a similar idea but still different but since I still have a lot of things to learn about the nes and my time is limited, I decided to focus on making a game first.

I fiddled around a little bit with it and I have a few questions. First, how do you set a bank to be at a specific address or the size? Now they seems to be always at $8000. Depending on the mapper configuration, that will be important to be able to set it.

Second, the project format is proprietary and only one file. Is it possible to extract the data into independent files?

I may have more comments once I play more with it.

by on (#38485)
Yes! :D

Now to answer your questions:

1. Yes! :D
2. I'd like to see something like NerdTracker implemented; even if it is buggy :)

by on (#38486)
great software!! :)

by on (#38488)
This is outstanding. I would definitely use it.

by on (#38490)
Suggestion: Change the format of how you save the project to be pure text to make it friendlier to revision control systems. The current format is a mix of binary and text - and I imagine would be a pain in the butt to try to use "diff" on.

by on (#38491)
Examples of text formats around which you can build an exporter include XML, JSON, and even INI.

by on (#38494)
Damn this looks cool. I think i'll have to "port' pung development into this.

by on (#38495)
nice a saw something similar and outdated a long time ago, thought it was this and completely dismissed it. now that i look at the page, it looks very promisng. thanks :)

by on (#38496)
Gonna give it a try! I'll try to keep my eye out for updates, but please continue to post here when new features are added!

EDIT: Some suggestions after a quick glance. Perhaps when showing the palette, you can include the hex number for each color. Also, it would be great if you could magnify (2x) the nametable editor.

by on (#38498)
No Carrier wrote:
Gonna give it a try! I'll try to keep my eye out for updates, but please continue to post here when new features are added!

EDIT: Some suggestions after a quick glance. Perhaps when showing the palette, you can include the hex number for each color. Also, it would be great if you could magnify (2x) the nametable editor.


Wow! Thanks for all the great feedback. I'll try to answer all the questions. I want to put together a HELP file for the tool, also...eventually!

1. Exporting to binary or assembly source is supported. Right click on anything in the left side, like a background pattern or the PATTERNS (to export all) and you should see "Export Binary" or "Export Source".
2. To magnify the nametable editor from 1x, 2x, 4x to 8x, either mousewheel over the nametable graphic or right click and select Zoom->100%, 200%, etc.
3. To organize assembly banks to different addresses, use the .org directive. You can specify several ".text" segments (give each a name) like:

.text bank1
.org $8000

...

.text bank2
.org $c000

Size is not yet implemented but I thought something similar to P65's .checkpc would be appropriate.

I will definately look at implementing the suggestions, all great and hope to make this a very useful tool.
I used the Windows "CArchive" class to save/load (the project is in MSVC++ after all). I agree a better file format could be used. There is indeed a mix of binary and text data in the file.

I am adding features daily. Some of them are "little" while others are big. For example, I had just added the "Alpha tile and "Set Alpha Caret" feature to the nametable dev form right before posting. I saw it listed as a feature in someone else's tile editor and thought it'd be cool!

More later! Keep the suggestions flowing. I'd be happy to answer questions via direct mail, also...

christopher_pow@hotmail.com

by on (#38499)
I disagree. You have created much like a frontend + CHR editor. Well, ASM coding is still required, so newbies might get frustrated if 6502 knowledge is strictly required. Next, we have tons of good and bad 6502 disassemblers, and I can't see any improvement about editing subroutines or linking them with your CHR tools, like loading tiles from a certain location as example. For my best, it does not take out manual work.

You barely has implemented a "run" button (using an emulator to run your new 6502 code?), or even a "debug" menu. How would a programmer get inside the things without breakpoints or anything to debug/trace the new 6502 code? Only "edit"s. And *how* does your program locates the SMB1 and Zelda title screens?

My respect, of course. I hope you improve this software, really.

by on (#38500)
Fx3 wrote:
I disagree. You have created much like a frontend + CHR editor. Well, ASM coding is still required, so newbies might get frustrated if 6502 knowledge is strictly required. Next, we have tons of good and bad 6502 disassemblers, and I can't see any improvement about editing subroutines or linking them with your CHR tools, like loading tiles from a certain location as example. For my best, it does not take out manual work.

You barely has implemented a "run" button (using an emulator to run your new 6502 code?), or even a "debug" menu. How would a programmer get inside the things without breakpoints or anything to debug/trace the new 6502 code? Only "edit"s. And *how* does your program locates the SMB1 and Zelda title screens?

My respect, of course. I hope you improve this software, really.


I think better help within the tool would have gone a long way to answering your questions. The Emulator does have debug support...click on Breakpoints in the lower right corner of the Emulator form to get to the breakpoints dialog. I have thought about extending it so you can have multiple breakpoints defined and enabled/disabled much like a good IDE but haven't got that far yet. To make changes to assembly and see your updates in the Emulator you just need to right click and select "Assemble..." then go to the Emulator and hit "Reset" and "Run". Code trace is also on the list of improvements...

The SMB1 and Zelda title screens were captured directly from the tool running the SMB1 and Zelda ROMs imported into it via the ROM Snooper (again, right click on the ROMS item and select "ROM Snooper". Import a NES ROM and play). Of course, my mapper support is currently limited to no mapper and MMC1 with a few others in the works.

Thanks for your feedback! It is making it more obvious to me that I need to put some effort into help! I thought a screenshot gallery (posted on website) would be a good start for most.

by on (#38501)
NESICIDE wrote:
The SMB1 and Zelda title screens were captured directly from the tool running the SMB1 and Zelda ROMs imported into it via the ROM Snooper (again, right click on the ROMS item and select "ROM Snooper". Import a NES ROM and play).


Unless you're using your own emulator, I don't know how your program would capture the current CPU state on an 3rd part emulator..?

NESICIDE wrote:
Of course, my mapper support is currently limited to no mapper and MMC1 with a few others in the works.


It shoudn't be, as ASM coding & running wouldn't matter for an IDE. Even to debug it shouldn't be mapper dependent though. There's no special context of a full mapper knowledgement for an IDE ambient. If I can launch my emulator through your program, fine. Your "ASM text editor" needn't to recognize specific mapper writes...

...unless I'm misunderstanding the things?

by on (#38502)
Fx3 wrote:
Unless you're using your own emulator, I don't know how your program would capture the current CPU state on an 3rd part emulator..?


Yes, click on ROM (in the tree-view at the left). Click on EMULATOR in the list-view at the bottom left. Then the Emulator pops into the Form view. I have a bit of trouble getting the EMULATOR item to show up in the tree-view like I want it to...so it's not as obvious that the EMULATOR is there, but it is.

If you right-click on ROM in the tree-view you can select ROM Snooper which will open a file dialog for you to load in a precreated NES ROM (SMB1, Zelda, Zelda 2, Kid Icarus, etc.) or even one that you exported from NESICIDE. Then go to the EMULATOR form and select the ROM from the combo-box at the top of the form. Then click "Reset" and "Go".

So, yes, it is my own emulator, my own assembler/disassembler. I agree with you that there are many others available. This whole thing started as a pet project. It's not perfect and won't, probably ever, meet everyone's expectations...but it is my attempt at it.

by on (#38503)
Looks pretty amazing so far, but I would recommend using a different palette, or allow users to import their own. The one you're currently using is really old and inaccurate, and games developed with it might not look so good in either newer emulators (like Nestopia) or real hardware.

I have a good all-purpose NTSC palette grabbed from Nestopia I can upload when I get home, if you're interested.

by on (#38505)
BMF54123 wrote:
I have a good all-purpose NTSC palette grabbed from Nestopia I can upload when I get home, if you're interested.


That would be great! Thanks.

by on (#38508)
hi,
haven't been so enthusiastic over 6502 programming in a while. the idea of an IDE kindof makes it seem like i can accomplish what i want a lot faster. but anyway. when i try to run the parallax demo, i can't run the emulator. is there a reason for this?

by on (#38510)
Here's the palette, taken from Nestopia at default NTSC settings.

Image

by on (#38511)
NESICIDE wrote:
2. To magnify the nametable editor from 1x, 2x, 4x to 8x, either mousewheel over the nametable graphic or right click and select Zoom->100%, 200%, etc.


Not bad, but I would like to see the entire nametable visible when zooming. Perhaps being able to maximize the window that the IDE runs in would be helpful for this purpose. That is one thing I like about tepple's pineight nametable editor - not that you can zoom in and out, but you can see the whole nametable at 2x size.

by on (#38512)
No Carrier wrote:
Not bad, but I would like to see the entire nametable visible when zooming. Perhaps being able to maximize the window that the IDE runs in would be helpful for this purpose. That is one thing I like about tepple's pineight nametable editor - not that you can zoom in and out, but you can see the whole nametable at 2x size.


I'm still looking for the correct combination of windows message handlers and magic incantations that can make widget resizing on window resizing a reality.

by on (#38533)
Laserbeak43 wrote:
hi,
haven't been so enthusiastic over 6502 programming in a while. the idea of an IDE kindof makes it seem like i can accomplish what i want a lot faster. but anyway. when i try to run the parallax demo, i can't run the emulator. is there a reason for this?


I'm still struggling with save-state with the emulator. The NPF file that I have put up on the website, when I download it and load it into NESICIDE and hit "Go" in the Emulator it doesn't display anything. However, if I hit "Reset" either while it is still running or hit "Stop", "Reset", and "Go" it works. I have made a few improvements to the save-state logic but have not yet put those up on the site in the form of a new ZIP. If that doesn't work for you, there's a chance--as always--that your system has something going on that makes my emulator not work. If other NES emulators work on your system then I would suppose mine should also work.

The improvements I'm talking about allow you to stop the emulation, save the NPF, and pick up in the emulation where you left off the next time you load the NPF and hit "Go" (unless you hit "Reset" first, of course).

by on (#38542)
So you can actually write code in this thing and instantly run it ala 6502 Simulator? Niiiice.

... But it would be great if it also worked as a frontend for an existing assembler (say nesasm or ca65), so you can build an existing project and play it.

by on (#38544)
those are cool features. i wont be able to verify what's causing the error till i run my other emus though. I've just recently installed 32-bit vista, and haven't really gotten back into nesdev since.
i'll be...you know what? why not...

loads fine in fceuxdsp...
runs fine in nintendulator as well...
hmm, lemme try nesicide one more time...
ahhh sweet. i see the emulator. maybe it had something to do with me closing the previous project and opening a new one withought exiting nesicide?
hmm lemme check... nope. weird. oh well. if i ever manage to reproduce it, i'll let you know. thank :)

by on (#38545)
Laserbeak43 wrote:
loads fine in fceuxdsp...
runs fine in nintendulator as well...
hmm, lemme try nesicide one more time...
ahhh sweet. i see the emulator. maybe it had something to do with me closing the previous project and opening a new one withought exiting nesicide?
hmm lemme check... nope. weird. oh well. if i ever manage to reproduce it, i'll let you know. thank :)


Thanks for the real-time debugging! :D
There is a slight "problem" with the EMULATOR item not showing up in the tree-view (top left) when the ROM item is expanded. So you kind of clumsily have to click on ROM, then move down to the list-view (bottom left) and click on EMULATOR. Has to do with the way the form-view (right side) switching code works...and, since it is only a minor nuisance, has not been top on the list.

by on (#38548)
strat wrote:
So you can actually write code in this thing and instantly run it ala 6502 Simulator? Niiiice.

... But it would be great if it also worked as a frontend for an existing assembler (say nesasm or ca65), so you can build an existing project and play it.


Yep. I was shocked it was that easy, myself, to be honest! :shock: Not that I've created Metroid or anything, but the possibility is at least not a pipe dream.

I need to formally put a plug out...I wonder if there's a DLL frontend for any of these existing assemblers? The reason I implemented my own assembler is several-fold:

1. Desire to keep everything in one neat-n-tidy exe package.
2. Lex/Yacc experience burning a hole in the back of my head trying to get lost forever...needed a project just like this to keep it live!
3. Desire to *not* have to use Windows system calls, execl calls, or any other sort of clumsy interface and whatever "hack" file presence checking and temporary files and all that mess to interface to an outside executable.

The assembler I wrote is actually a separate package built as a static library (in Cygwin) and linked into NESICIDE. It has a fairly simple interface that would, I think, work well in a DLL (I just haven't promoted it to DLL yet, see 1 above):

void assemble ( const char* buffer_in, char** buffer_out, int* size );
int get_num_errors ( void );
void get_errors ( char** errors );

Basically NESICIDE concatenates all of the subroutine elements and passes the whopping mess to "assemble", which allocates memory and returns the a pointer to the assembled result (unless there are errors) and how many bytes were assembled. All the while, the errors are kept and retrievable via "get_errors".

by on (#46571)
strat wrote:
... But it would be great if it also worked as a frontend for an existing assembler (say nesasm or ca65), so you can build an existing project and play it.

I've had a few requests for this so it is planned for the next release.

by on (#46581)
nice

by on (#46582)
I used it. But I am not understood how very quick the project which completes me to need.
It's very good for made NES game.
If can increases the wrong prompt which in this software's above in the compilation process possibly occurs, that was better. Also has is must have a concrete example to explain how it does use. 8)