Unfortunately, I haven't been able to come across a real unit.
I've googled around and I've never even seen anyone talking about this hardware. Ie they have owned this HW and did a blog post or something about it. I'd be super interested to know if anyone does actually own one.
Ian: you may be able to just pipe the data to your renderer and display the demos, which would be a high-level emulation. But I wonder what, if anything, the PowerPC on the Pro-1000 was doing and whether it makes sense to properly emulate it as well?
I assume the powerpc just ran the actual code, and by that I mean it processed the display data for the frame, ie parsing the culling does etc. It probably also handled all the input/output from the scsi hardware. The real3d pro-1000 actually had graphics hardware that is entirely missing from the model 3, or not missing they replaced it. The real3d has it's own kind of tilegen which draws background bitmaps, that can scroll and you can apply fog to. In the model3 its been replaced with the tilegen from the system24 and probably model1/2 boards.
I did make a bit more progress with this last night.
- Code: Select all
else if (command->cmd.CDBByte[0] == SCSI_READ6) { // read command
//==========
int address;
int length;
//==========
length = command->cmd.CDBByte[4] * LBA_SIZE;
address = command->cmd.CDBByte[1] & 0x1F;
address = (address << 5) | command->cmd.CDBByte[2];
address = (address << 8) | command->cmd.CDBByte[3];
The read and write methods look something like that for scsi. Basically you have a struct and pull out the addresses and other fields from it. But the address structs for read and write always seem to be zero. I couldn't work that out to start with .. but the io_structs_h header file in the sdk has this
- Code: Select all
} Scsi_Head;
Which contains the field unsigned long address;
So I am pretty sure the data is just following this header. I've yet to actually look at the data though.
I did find this in the SDK
- Code: Select all
/*
The members of this structure Pro_Ret_Dat should not exceed 512 bytes
since this is what is allocated on the HOST and in the PRO
*/
typedef struct
{
Scsi_Head scsi_head;
Stat_Pckt stat_pckt;
unsigned long magic;
Sync_Info sync_info[LINE_RATES];
Misc_Info misc_info;
} Pro_Ret_Dat ;
So I tried just returning this struct and filling out the appropriate members ... and it works. Well it works enough for the test program
https://i.imgur.com/gY5gB7G.pngBefore I just filled the entire 512 byte buffer with 0xFF and it gave the previous screenshots. But here it actually correctly sets the values, so definite progress. Next step is to see what is actually written.