The other reason (besides GPU power) that C would be fine for coding the main game logic on the Vulcan-74 hardware is program memory usage.
On a platform like C64 or even Amiga, all active graphics and sound data must be loaded into the program memory, as it is the only memory.
On Vulcan, there are 6 independent memory systems, each having their own function and busses.
1) Video Memory : Dual 120K banks @ 20MHz for double buffering.
2) Sprite Memory : 1024K @ 4MHz with automatic alpha pixels.
3) PlayField Memory : 1024K @ 16MHz for background images.
4) Sound Memory : 1024K @ 2MHz for 4 Voice Stereo Output.
5) Program Memory : 64K @ 10ns for 6502 Program.
6) Cartridge Memory : 4-64MB SPI Flash (External) used as game cartridge.
Once the 64K Program Memory is loaded from the Cartridge by the Vulcan Boot Logic, the 6502 is free to load all the other Memories by selecting data from the Cartridge Memory.
The 6502 main program can be 65280 bytes in size (256 bytes are mapped as Vulcan IO).
So depending on how "friendly" I find CC65, a little bulky code produced by the compiler may still make it worthwhile once the assembly libraries are completed.
Since all screen access is 16 bit, and all memory access is 20 bit, a C compiler would certainly make doing things like this much easier...
Code:
// MOVE BOING BALLS
for(q=0;q<balls;q++){
xx[q]=xx[q]+dx[q];
if (xx[q]>400-76-5) dx[q]=-dx[q];
if (xx[q]<4) dx[q]=-dx[q];
yy[q]=yy[q]+dy[q];
if (yy[q]>300-76-5) dy[q]=-dy[q];
if (yy[q]<4) dy[q]=-dy[q];
RunSprite(xx[q],yy[q],76,76,BoingBalls);
}
BoingBalls = BoingBalls + 5776;
if (BoingBalls == 86640) BoingBalls = 0;
This simple bit of code just cycles the location of the stored Checker Ball images in the Sprite Memory as they move.
Since each Sprite is 76x76 in size, the 20 bit address is changed by 5776 for each new rotation.
I wrote that in 30 seconds, but even as a "half-assed" assembly programmer, I doubt I could have coded that in a few hours.
The real magic happens in this line, though...
Code:
RunSprite(xx[q],yy[q],76,76,BoingBalls);
Here, an assembly routine takes over and sends the required data to the Vulcan GPU, toggling the required IO lines.
Anyhow, I will see if this kind of thing can be done in CC65 without having to piss around for hours in a DOS box!
Brad