Hey all.
New to the nesdev forum. I have posted this on another forum to gauge interest and would love to some feedback from members of nesdev!
This idea has run through my mind a few times since I have started working on my most recent project. I was wondering what the interest would be in an NES dev kit. The kit would be all inclusive to get someone up and running developing for the NES. It would have all the tools I have created for my own development use including:
-Flashable NES cartridge Easily configurable NES dev cartridge (dip switches instead of soldering pads to select things like horizontal/vertical mirroring)
-Custom ROM programmer and transfer cable (connects to computer via usb and to dev cart via a proprietary connection. Cartridge can be programmed in a matter of a few seconds without being removed from the dev system)
-Transfer software for the computer to connect to the programmer and provide services like ROM erase, dump, burn, verify.
-A well written tutorial to get people started, as well as a useful reference guide
-Well documented code and example programs for beginners and intermediates alike to understand how things work
-A few different software tools for users to choose from and documentation on how to use them and pros and cons of all of them (cc65, asm6, nesasm, etc.)
I wanted to gauge people's interest in this, and if it is high enough I would put resources into creating this and also starting a kickstarter to help fund this.
Feel free to reply with ideas, or at least if you'd be interested in something like this or not!
-mham
I'm here, too. I voiced my opinion in PM and on the post, but just some extra tips with the extra info:
Why have dip switches at all if you have a flash cart? I don't get how that'd work and be able to NOT select the mirroring (Or diagonal or 4-screen) from the GUI/Command-line tool that is used to flash the cart.
I'd imagine it would be hard to gain backers with ideas/plans alone, although I'm just saying that from a nesdev standpoint. I'm always surprised at the things that people on kickstarter will toss their money at considering the high risk of funding something that doesn't even have a prototype yet.
To be honest its a good idea, but there is a lot of work involved with pulling it off. People often come here presenting similar ideas (myself included) which never materialize. Because it's so frequent projects of this sort are taken with a grain of salt. Effectively if you want to get us excited about it, show us something exciting. Talk is talk.
The only technical thing I'd comment on is the majority of people on here already have devices more powerful (but possibly less convenient) than the type of device you're considering. So you'd have to have some 'edge' to convince most people here they need to buy more hardware. Getting people into the project who aren't already nesdever's is a good goal, but it'd imagine it will take a lot of polish and well done tutorials to teach the average joe interested in programming on the nes. There's a large span of the level of knowedge from the people getting started, to be successful I'd imagine you have to cater to all levels without boring them or going over their head.
this idea honestly stemmed from the use of my own development tools that I have created/have been working on. I wouldn't start a kickstarter without at least one kit done. I agree with what you said about how it's crazy how some people back kickstarters without any evidence that the product has been built at all.
The idea here, as I also said on NA forum is that this is to gauge interest in a dev kit. I have tools. I just want to see if anyone else wants them. I want to see more people get into nes development, but I want them to have an easier time than most do, including myself.
It's not a programming course. So it's not for the absolute beginner. But it is for the person that has programming experience and wants to see a project of their own come to life on the nes.
One of the suggestions, in lieu of a dev kit, was to release a small book that is well written and has well documented code to help those just starting out with nes development, and those who are are more advanced alike.
I don't think you need to create any new hardware. But it's not a bad idea to make tutorials, references, examples, tools, and other helpful resources that could encourage people to develop on the NES. More of those would be good. As for Flash carts, there's plenty of those now.
re: hardware:
Emulation is "good enough" 99% of the time, and for when it's not there is powerpak, or help from forums.nesdev.com
Why not try contributing to the nesdev wiki's Getting Started section? Also, infiniteneslives has started to produce flashable multi-mapper carts and a USB flashing interface.
I'm not saying to give up, I'm just not nearly as excited as I would have been prior to INF arriving on the scene
Don't forget the
Everdrive N8, which does have a USB port. I'm not sure what it's for, but I assume you can upload ROMs without having to remove the cart from the console.
What tools are you created/work on?
If you are mentioning the tools such as cc65, ASM6, NESASM, note also "Unofficial MagicKit" which is a improved version of NESASM (it is mentioned in NESdev wiki).
Having different cartridges if they have significant differences, can be helpful, though. I can describe what I would find most helpful (but not right now).
By tools, I don't mean just software, I jump around between compilers. But my hardware setup. It's not revolutionary, but it works for me
My dev cart is one that can remain in the console while being programmed. Right now there is a small external programmer (arduino based) that connects to the computer via usb and to the cartridge via a proprietary connection. I have been working a lot on computer side software for burning the binary data to the cartridge. The command line based side of the software simply accepts an input file and writes it to the cartridge.
I have also been working on improving the speed with which the rom is written to. Right now, writing 1's in every address of a 0 - filled 2K eeprom is less than 3 secs. Closer to 2 secs (reliably without any corruption). My goal is 10 seconds or less for 32k. I know this speed is a lot compared to simply compiling the code and running it on an emulator... but for people like me that like to dev on an actual console, it's worth it.
If I were to roll out a dev kit, the cartridge would most likely have the programmer built into it, so it would be as simple as connecting the cartridge a computer via usb.
mham wrote:
By tools, I don't mean just software, I jump around between compilers. But my hardware setup. It's not revolutionary, but it works for me
My dev cart is one that can remain in the console while being programmed. Right now there is a small external programmer (arduino based) that connects to the computer via usb and to the cartridge via a proprietary connection. I have been working a lot on computer side software for burning the binary data to the cartridge. The command line based side of the software simply accepts an input file and writes it to the cartridge.
I have also been working on improving the speed with which the rom is written to. Right now, writing 1's in every address of a 0 - filled 2K eeprom is less than 3 secs. Closer to 2 secs (reliably without any corruption). My goal is 10 seconds or less for 32k. I know this speed is a lot compared to simply compiling the code and running it on an emulator... but for people like me that like to dev on an actual console, it's worth it.
If I were to roll out a dev kit, the cartridge would most likely have the programmer built into it, so it would be as simple as connecting the cartridge a computer via usb.
At least one person has been after me to add support for some kind of programmer interface to NESICIDE. It sounds like with what you're working on it'd be as simple as integrating another 'external tool' [I currently use CC65 toolchain for example...] I'm interested... Would there be any interactivity available such as run/stop/step or is it simply just a programmer?
10 seconds is a lot, really a lot. It may not seem a big deal initially, until you get into a real game project, when you have to compile and test the code after every few changed lines, many times, thousands of compile/run takes. Especially when you don't have a powerful debugger and have to just guess what is wrong.
as of now, 10 seconds is for writing to the entire chip. ideally, as you keep writing to the chip it should only change what needs to be changed. i know the problem here is that any additional code that is added in will have to push all the code after that back some number of addresses, thus causing everything from the changed code on to have to be rewritten in the rom. but I am still working on this, just fixing a few simple routines helped me to increase speed 100x, so I am sure that I will be able to make this much quicker. considering the byte write time is 150 ns, a full 32k rom should in theory be able to be written to in less than 0.005 seconds.
right now my hardware consists of just a programmer. but I would love to find out more about your plans for NESICIDE, if I can lend a hand I'd be more than willing.
mham wrote:
ideally, as you keep writing to the chip it should only change what needs to be changed.
Unless you're somehow lucky enough to only be programming bits (1->0) and don't have anything to erase (0->1). If you need to erase you'll need to re-write the entire sector at a minimum.
Quote:
considering the byte write time is 150 ns, a full 32k rom should in theory be able to be written to in less than 0.005 seconds.
huh? Pretty sure there aren't any flash chips in the world that are that fast... A single r/w cycle access time is 150ns. It takes lots of cycles to write (program) a byte in flash. Generally several microseconds per byte write time. That and it generally takes several seconds to erase the chip.[/quote]
If you really wanted to optimize for speed you'd want to go with SRAM.
infiniteneslives wrote:
Unless you're somehow lucky enough to only be programming bits (1->0) and don't have anything to erase (0->1). If you need to erase you'll need to re-write the entire sector at a minimum.
True for FLASH, not true for EEPROM.
Quote:
If you really wanted to optimize for speed you'd want to go with SRAM.
I was just thinking the other day from
this thread that a battery-backed NRAM cart would be about as nice as practicable for a NES devcart. I suppose that's approximately what the CopyNES RAM cart was.
Another thing you could do to speed up programming is simulate the volatility of RAM by starting to erase each build after you're done testing it. Send an erase command while you're editing an assembly language file, and then by the time you've finished editing, compiling, and linking the program, the flash should be ready to program the next build.
That and use segments to put the part of the program you're working on in $8000-$9FFF and the part that isn't currently changing in $A000-$FFFF. Depending on the size of your memory's erase blocks, that might save you some programming time.
tepples wrote:
Another thing you could do to speed up programming is simulate the volatility of RAM by starting to erase each build after you're done testing it. Send an erase command while you're editing an assembly language file, and then by the time you've finished editing, compiling, and linking the program, the flash should be ready to program the next build.
That's a fantastic idea! When you go back to the assembler, initiate an erase and then it's ready to program for the next testing round.
It's not erases that are slow, but programming.
(e.g. SST39SF0x0 family: 18ms to erase any given 4KiB or 70ms to erase the entire chip, and 20µs per byte programmed)
With ROM sizes typical of NROM and CNROM, programming 32 KiB at 20 microseconds per byte should take less than a second. With bigger ROM sizes, you may have to use the technique of making most of your changes in one bank.
Wouldn't using Flash for constant testing ruin the memory chips somewhat quickly (like, a couple of years or so?)? Wouldn't RAM be a better option?
tokumaru wrote:
Wouldn't using Flash for constant testing ruin the memory chips somewhat quickly (like, a couple of years or so?)? Wouldn't RAM be a better option?
Absolutely. FRAM could be a wonderful compromise here. Speed of read/write of RAM, non-volatility of FLASH. We had 256K parts on a project I worked on and it was *very* convenient.
i have plenty of different types of memory, and I do plan to experiment with them to find the best options. I have tons of eproms, but the goal of my cartridge is quick programming times. So i'll save the eproms (and proms for that matter) for when projects are more complete.
The arduino is a very good tool for programming the roms. I am working on a small python program that acts as the computer side interface for the programmer. I will first do a command line driven program, but in the future I will do a gui with things like show difference, verify (the command line version will have this), and other features of the sort. Additionally, the eeproms I am using have 64 bytes for chip identification. I can utilize this to keep track of what chips are being used for what projects, so when they are inserted in the programmer, it will automatically know what the chip is for.
tokumaru wrote:
Wouldn't using Flash for constant testing ruin the memory chips somewhat quickly (like, a couple of years or so?)? Wouldn't RAM be a better option?
You're looking at minimum 100,000 write cycle limit typically.
Let's say you develop games as your day job, and flash builds 20 times an hour. 160 flashes a day. 5 days a week, for 800 writes a week. 50 weeks a year for 40K writes a year. Gives you at least 2 1/2 years on flash. So it is possible with heavy abuse.
FRAM is nice, but very limited in size for parallel 5v readily available options. Digikey doesn't even stock such a thing. If you buy in qtys >200 you can pay a hefty $7/chip for a whopping 8KBytes, 32KBytes will cost you TWICE that @ $14. There are other options for suppliers of course, but if places like digikey don't have it readily available it's a pretty rare device. For that price you could socket a 128KB flash and include 15 spare chips to last 40+ years... Pretty sure your pins would wear off the cartridge with that kind of abuse.
~$3 or less for battery backed sram beats em all if you're looking for speed, durability, replace-ability, and non-volatility assuming you will reach EOL of flash. You don't even need a battery for a devcart though...
That plus the fact that you can wear-level flash by overprovisioning. Use a 256Kx8 flash with an 8-position rotary DIP switch controlling A17-15, and you get eight times the write endurance.
tepples wrote:
That plus the fact that you can wear-level flash by overprovisioning. Use a 256Kx8 flash with an 8-position rotary DIP switch controlling A17-15, and you get eight times the write endurance.
another good idea! fwiw, the roms are socketed in my dev cart so they can be easily replaceable. if were to release a dev cart, it could be in some people interest for it to include 1 spare for each chr and prg
Most people savvy enough to program for the NES already have muddled through cobbling together their own solutions - and they like it that way, methinks.
The people that need and want a development kit are the same that are thriving in the Atari 2600 community. They thrive because they have these items available:
* A fully integrated IDE that manages projects, code, art assets within (VisualbB)
* A novice understandable programming language tied into that IDE (batari BASIC)
* An emulator that reports back when you've gone over cycle. (Stella)
* Flash cart that makes testing easy with FAT32 formatted SD card support. (Harmony Cart)
* A storefront to make actual carts with labels (AtariAge)
I think some of these things are starting to happen for the NES community. I think the flash cart portion is the most mature with the PowerPak and EverDrive NES still readily available.
Maybe a better goal is to find pre-existing projects and help them grow/work with eachother to reach the five points above that the 2600 guys enjoy.