Page 1 of 1

Which homebrew scene to invest in (PSX vs 32X)

Posted: February 11th, 2013, 1:52 am
by ammianus
I just introduced myself, but before I dive in, I wanted to ask the knowledgable people of this forum a question. As I mentioned in my introduction for about the past year I've been attempting to learn how to program for the Sega 32X console. I was one of the few who owned a 32X, and always wished there were better games for it. So my interest in homebrew was a natural thought "hey, if I am going to write old-school, retro games, why not do it on the 32X that needs new games!".

So I've been struggling to realize my game ideas on the 32X for almost a year now. I can get the basic game working now. Still many ways to optimize, let alone gameplay, graphics and sound work that is needed for a real game. There are so many limitations on the 32X that I do get frustrated. Since I also own a PSX (I sold my family's Sega Saturn), I am looking if it would make more sense to jump ship to the PSX dev community?

To continue developing for 32X I need to make the following investments:
- Need Sega Gen A/C adapter
- Need flash cart, such as Mega Everdrive ($140 -$209)
- I haven't used my Sega or 32X in years, so it may not work



On the software side, 32X has many limitations (probably one reason why it wasn't a successful platform). I am really interested in the 2D style graphics of 16-bit and old arcade games. For PlayStation think Castlevania:SOTN, Street Fighter Alpha or Suikoden.

From my perspective, 32X has cons to making really good 2D games:
  • No basic software library. Everything from drawing a sprite to playing a sound you need to figure out how to do yourself.
  • No hardware support for "cool" effects, transparency, sprite scaling, rotations
  • Unlike 16-bit consoles, and some arcade hardware, no layers or sprite HW support: There are just framebuffers that you draw graphics onto, this makes things like scrolling layers, parallax difficult and you have to redraw most of the screen each frame to update sprites against the background.
  • Heterogeneous CPUs: The 32X has dual Hitachi SH2 processors. The console as a whole is supposed to work with the Genesis' Motorolla 68000. There are other sound chips on the Genesis as well, let alone Sega CD. Compiling is complex and requires various custom GCC toolchains you have to build yourself. The Genesis software libraries (SGDK) are not compatible with the current code people have written for 32X. Handling the parallel processing nature of programs is another challenge to spread the work efficiently, avoid deadlocks, caching issues, bus restrictions. I can get away without a lot of assembly knowledge, though I am limited, to less efficient C code.
  • Without using bankswitching, cartridge ROM size is about 5MB. That's not really a lot of uncompressed image data for 2d games. The most compact format is 8bpp images (1 pixel = 1 byte). you can compress the image data in ROM, but that means you need to decompress into RAM, but only 256KB ram is too small to hold many graphics either.
  • Few tools exist for converting images or sound data into formats that can be processed and used by 32X hardware. Its sort of frustrating to have to build the entire infrastructure, you get the sense most in the homebrew scene don't bother with more than a few token images or sounds, rarely does anyone make a real "game" unless it's a port of a PC game.
So despite all of the above, I have managed to figure out how I may get around most of these difficulties. But I still can't help feeling, before getting into the main game development, that the outcome will be limited. If I am to invest money, and significant amounts of time, I want to do it in the way that will allow me to make the most successful game on old console HW. I am not interested in tech demo's or particularly low-level hardware research.

So my question to you all: Compared to 32X, How does PSX Homebrew development compare both at a hardware level as well as a homebrew support level? Especially with 2d type games?
- How much "investment" would I need to run games on real hardware?

Re: Which homebrew scene to invest in (PSX vs 32X)

Posted: February 11th, 2013, 1:18 pm
by Shadow
Hi. Comparing the PSX to the SEGA 32X, they are completely different architectures all together.
That said, the further back you go in the console timeline, the more limitations you will encounter.

The PSX offers CD-ROM to store all your data (which is up in the 600 MB range), 16.7 Million Colours (24-bit TIM images), 2 MB of RAM, 512 KB of SPU RAM, 1 MB VRAM, an adjustable Frame Buffer, Unlimited CLUT's, 360,000 Polygons/sec, Parallax Scrolling and much, much more.

http://psxdev.net/forum/viewtopic.php?f=47&t=21

In my opinion, the 32X would be a nightmare to program on, but it would return you a huge increase in knowledge.
Anyway, just download the Psy-Q SDK, make something simple, and see if you like it (I'm sure you will ;) ).

As for getting the games onto the PSX, you need a 'Comms Link' (Communications Link) device from the PC, to the PSX. You can wait for the PSX Blaster, PSIO, or make your own slower version (or buy it: PSX RS-232) using the serial port on your PC. A modchip will be necessary though, so grab yourself one of those and install it. Nothing else is needed.

http://psxdev.net/help/common_questions.html

Good luck and have fun programming for the PlayStation 1 :)

Re: Which homebrew scene to invest in (PSX vs 32X)

Posted: February 12th, 2013, 11:00 pm
by ammianus
Thank you! Definitely the PSX is another level over the 32X. I'll start trying out the PSY-Q SDK to get some sense of it.

So there is only a single main CPU? Do you have to compile or build code separately for GPU or Sound? That does sound more straightforward.

What about game distribution? Does anyone who wants to play a homebrew game have to have the devices you mentioned?

Re: Which homebrew scene to invest in (PSX vs 32X)

Posted: February 13th, 2013, 6:56 am
by Shadow
Yes. Only 1 CPU (the R3000A - 32-bit).

You compile/build for the whole system. You actually compile a .CPE file, that get's converted to a .EXE (PS-EXE).
The CPE file contains header information, which is removed when using CPE2X (read here). You don't compile in separate objects to the separate chips.

Should you want to send your game to a friend for him to play, he will need a modchip in his PlayStation 1.
That being said, you need to make your game load off of the CD-ROM (very easy) so he can play it, as you will be uploading the PS-EXE (and files such as images, audio, etc into RAM) over the 'Comms Link' (PSX Blaster) where you will have pointers to look exactly where you have uploaded it to (IE: address).

You can write your own dynamic memory allocation program (which I did) that will use Malloc3(); for you.
This is recommended, as you can tell your function to go grab a file off of the CD-ROM, and put it into a free slot that malloc has made (after calling InitHeap3(); ). This will make programming SO much easier and faster as you do not have to worry about memory addressing. All the files can be stored in an array pointer.