Re: Interest in "modern" SNES Development Hardware?
Posted: Wed Dec 07, 2016 2:41 pm
And if you're going to be manufacturing a game, why not just use a commodity ARM MCU instead of an uncommon GSU or SA-1?
NES Development Forums
https://forums.nesdev.org/
I think no matter which route you go, a portion of users won't want to switch from their preferred language. Personally, I'd go with Python...as long as it doesn't require some obscure library...(complaint/rant removed).tepples wrote: If "Python dependencies" are bad, are GCC/clang dependencies better?
What prior knowledge should a Super NES-specific tutorial assume?
The only non-stock library I rely on is Pillow (Python Imaging Library), and that's common enough to be in PyPI (pip install Pillow), Debian and Ubuntu (sudo apt-get install python3-pil), and Fedora (sudo yum install python3-pillow). Do these instructions still work?dougeff wrote:I think no matter which route you go, a portion of users won't want to switch from their preferred language. Personally, I'd go with Python...as long as it doesn't require some obscure library...(complaint/rant removed).tepples wrote:If "Python dependencies" are bad, are GCC/clang dependencies better?
No you would ideally have to minimize dependecies for a tutorial/devkit like this IMHO. I'd include source and binaries for the most common OS:es. They will become obsolete one day but that's unavoidable. Otherwise we would still be using pcx2snes or whatnot and never have this problem.tepples wrote:If "Python dependencies" are bad, are GCC/clang dependencies better?Pokun wrote:A graphic tool for converting bmp/png files (Tepples made one but it has Python dependencies) to the SNES formats
Oh yeah I forgot about SPC700 macro set for ca65. I didn't realize he included Sony's mnemonics as well (could they really sue anyone for using a bunch of stupid abbrivations though?).Kismet wrote:I think with the SNES Assembly is "too hard" without a manual that actually includes both the 65816 and the S-CPU specific instructions, and how the PPU actually works.tepples wrote:The third is to use ca65 with a macro set that implements SPC700, which blargg made. There are versions that use Sony's official "please don't sue us" mnemonics as well as the standard 65C02 mnemonics.Teach SPC700 programming and how to upload an SPC700 program. There seems to be at least two alternatives for assemblers: Tasm and bass, both using an SPC700 table-file. But bass changes the mnemonics from the official ones, I'm not sure that's a good idea for a tutorial.
What prior knowledge should a Super NES-specific tutorial assume? Programming? Assembly on another architecture? 6502 family? 65816 in particular? Graphics programming? Programming for another tiled VDC?
The one thing I liked about the "family basic" manual for the famicom was that it did a fairly good job of demonstrating how sprites and display priorities worked on the hardware, from within the confines of the hardware, even if the language was clunky. Some simple program with commented source code, and the compiler that creates it, is needs to exist to demonstrate all the features of the SNES.
These kinds of tools is how pygame and such work, since you can't get end users to install python.tepples wrote:How well do py2exe and executables produced with py2exe work under GNU/Linux? The laptop into which I am typing this post does not and has never run a Microsoft Windows operating system, though it does have Wine installed. Besides, if I have four or five Python tools, will each of them bloat by 5 MB when the whole interpreter and its support libraries are added?WheelInventor wrote:Python tools can be converted to nondependent executables with py2exe:
http://www.py2exe.org/index.cgi/Tutorial
There are two pieces. The hardware side, and the software side. If you want a devkit to be of any use, anyone needs to be able to use it without procuring extra bits of hardware (see the Emulator SE, or the Net Yaroze for PS1 development) that are different from the retail hardware. Fundamentally developing for the SNES without a SNES (like a FPGA-SNES or at least a hardware clone) is the blind leading the blind. On the software side, there are emulators, however there are no software emulators that will 100% emulate everything, accurately, on every system, and every operating system. This is why I don't like ARM platforms being promoted for emulators because it's hard enough to get people with a powerful PC to play a game like it was intended, good luck even getting half the accuracy out of a weak ARM part.tepples wrote: Or what did you mean by "self-contained"?
You can cross-compile to operating systems supported by the compiler. Both GCC and Clang can do this. Clang can pretty much compile anything to any platform for which it has a target. The problem today is typically C++ compilers generate rotten code because the developer decided to not use C bindings.tepples wrote: They still depend on the operating system. Or is each developer of tools expected to buy a Mac on which to run Xcode with which to make and test Mac binaries, as well as a Windows license for that Mac on which to run MinGW or Visual Studio with which to make and test Windows binaries?
...
Then a lot of software products are "fundamentally broken" because the developer isn't willing to buy a sufficiently recent Mac every four years on which to continue to build updated binaries.
BASIC today is probably not very fun, but if you want to get people to learn assembler, they need to know how the hardware works. For example, the game "Human Resource Machine" http://tomorrowcorporation.com/humanresourcemachine is teaching you assembler (more or less) in a very blunt way, through trial-and-error. As one more example https://usborne.com/browse-books/featur ... ing-books/ , scroll down the the 1980's books. The "Machine code for beginners" one actually explains how Assembly works in the 6502 and Z80. At least two of these books the public library had and I took them out every chance I had back then.Pokun wrote: I'm still a newbie programmer myself, and I don't know what kind of programming should be taught in a tutorial like this, but I can tell when a tutorial isn't explaining what it's doing properly.
Clang compiles C or C++ to an "Intermediate Representation" that assumes a (relative) abundance of 32-bit-or-more registers. LLVM then has to figure out how to convert that into useful native code on machines that aren't shaped like that.Kismet wrote:Here's a thought experiment. Make Clang compile to SNES 65c816 . There's a LLVM backend for Z80, so why not.
And test the produced executables on what?Kismet wrote:You can cross-compile to operating systems supported by the compiler. Both GCC and Clang can do this.tepples wrote:Or is each developer of tools expected to buy a Mac on which to run Xcode with which to make and test Mac binaries, as well as a Windows license for that Mac on which to run MinGW or Visual Studio with which to make and test Windows binaries?
I started to address both of those in spadtest: it has the beginning of text display routines as well as controller reading routines.Kismet wrote:A production SNES doesn't have a keyboard, so the vast majority of programming tutorials that involve input aren't usable, so you need one that specifically addresses how to initialize the controller for input.
[...]
How do you store a bitmap, how do you get something into video memory, how do you display strings, there's no built in font, so what kind of font fits in the memory.
Thank you, I mean I'm still too much of a newbie programmer to give adequate advice on what programming techniques to teach in a tutorial like this. I already "know" Family BASIC, 6502, 65C02, 65816 and Z80 and can make simple games for at least the NES (using 6502). I don't know so much "gaming programming" which I think is something a tutorial like this might want to teach. Nerdy Nights teaches the basics of state machines which helps a lot when learning how to structure a game.Kismet wrote:BASIC today is probably not very fun, but if you want to get people to learn assembler, they need to know how the hardware works. For example, the game "Human Resource Machine" http://tomorrowcorporation.com/humanresourcemachine is teaching you assembler (more or less) in a very blunt way, through trial-and-error. As one more example https://usborne.com/browse-books/featur ... ing-books/ , scroll down the the 1980's books. The "Machine code for beginners" one actually explains how Assembly works in the 6502 and Z80. At least two of these books the public library had and I took them out every chance I had back then.Pokun wrote: I'm still a newbie programmer myself, and I don't know what kind of programming should be taught in a tutorial like this, but I can tell when a tutorial isn't explaining what it's doing properly.
But getting people (with short attention spans) to read an entire book without being able to do something -now- is the problem with teaching people code. It's far more efficient to show a program and explain it, line by line, let the user compile it themselves (eg http://nehe.gamedev.net/ for OpenGL) and then each successive program builds on the previous one. What is the initial state when the machine is powered on, do you need to initialize variables, or will some garbage collection run? A production SNES doesn't have a keyboard, so the vast majority of programming tutorials that involve input aren't usable, so you need one that specifically addresses how to initialize the controller for input. How do you program the SPC, can do you need to know MIDI, should a MIDI tutorial exist or can something be applied to it? etc. Is a tracker format more appropriate for music? How do you store a bitmap, how do you get something into video memory, how do you display strings, there's no built in font, so what kind of font fits in the memory. One thing that 8-bit microcomputer users had was that there was always a system font in ROM. The NES and SNES do not have this. You can't just dump an error text message to the screen, you need to halt and send a memory dump to a computer to examine it, or try to replicate it on a software emulator on the PC.
What I think prevents people from getting into the SNES is largely because nothing really transfer to it.
I'd just send it to a friend with a Macintosh. For Windows and Linux you need to have to have at least a Linux system and try the Windows build in Wine.tepples wrote:And test the produced executables on what?Kismet wrote:You can cross-compile to operating systems supported by the compiler. Both GCC and Clang can do this.tepples wrote:Or is each developer of tools expected to buy a Mac on which to run Xcode with which to make and test Mac binaries, as well as a Windows license for that Mac on which to run MinGW or Visual Studio with which to make and test Windows binaries?
Please help me overcome my disability: What's a "friend", and how does one find one? If you mean through the social network of NESdev itself, then the only Mac owners I know through #nesdev on EFnet (wyatt8740 and tpw_rules) use PowerPC Macs, which are too old to run binaries made for any Mac from the past ten years. Or can people assume that little supply of free labor to test Mac builds implies little demand for production use of Mac builds?Pokun wrote:I'd just send it to a friend with a Macintosh.tepples wrote:And test the produced executables on what?Kismet wrote:You can cross-compile to operating systems supported by the compiler. Both GCC and Clang can do this.
Making a "Windows" program that inadvertently depends on bugs in Wine is like making a "Super NES" program that inadvertently depends on bugs in Snes9x.Pokun wrote:For Windows and Linux you need to have to have at least a Linux system and try the Windows build in Wine.
I likewise keep waiting for mass market ARM devices capable of running emulators to catch up on input devices. Emulation of a twitchy gridiron football sim designed for buttons using only a touch screen for input will always be Madden-ing.byuu wrote:I keep waiting for ARM to catch up on performance. We keep inching closer, but it's taking so maddeningly long.
I don't think "Atari 2600-level" is really descriptive of all the NES/SNES homebrew that has already been made in C.byuu wrote:And on a 2MHz system that gets about 300,000 instructions per second, that's not really tenable. Unless you're okay with making an Atari 2600-level game on the NES/SNES.
I believe so too.I believe there exists a language between 65xx and C that will be much easier to code for and only sacrifice a tiny bit of performance. But I've yet to come up with it.
Would mac mini a1103 from 2005/06 do? Just got one in, but need to go buy a hdmi adapter to set it up.tepples wrote:If you mean through the social network of NESdev itself, then the only Mac owners I know through #nesdev on EFnet (wyatt8740 and tpw_rules) use PowerPC Macs, which are too old to run binaries made for any Mac from the past ten years. Or can people assume that little supply of free labor to test Mac builds implies little demand for production use of Mac builds?