- skichamp now works, but controls are not hooked up and seems to overload the display lists like many non-working Step 2.x games do. To bypass the drive board error, enter the test menu and exit again. It will reboot and run.

- Added some notes on the cause of the "NO DAUGHTER BOARD DETECTED" error in Real3D.cpp.
- Removed some debug code from texture uploader.
This commit is contained in:
Bart Trzynadlowski 2011-08-02 03:33:40 +00:00
parent 2ca7898f1a
commit fce3c7ad7c
4 changed files with 27 additions and 15 deletions

View file

@ -284,12 +284,11 @@ int ppc_execute(int cycles)
{
ppc.pc = ppc.npc;
//if (ppc.pc == 0x279C)
// printf("R3=%08X\n", REG(3));
// Debug breakpoints
//if (ppc.pc == 0x9e4d4)
// printf("%X R0=%08X\n", ppc.pc, REG(0));
opcode = *ppc.op++; // Supermodel byte reverses each aligned word (converting them to little endian) so they can be fetched directly
//opcode = BSWAP32(*ppc.op++);
ppc.npc = ppc.pc + 4;
#ifdef SUPERMODEL_DEBUGGER

View file

@ -381,14 +381,16 @@ void CRender3D::UploadTextures(unsigned x, unsigned y, unsigned width, unsigned
{
unsigned xi, yi;
// debug: make everything red
// Make everything red
#ifdef DEBUG
for (int i = 0; i < 512*512; )
{
textureBuffer[i++] = 1.0f;
textureBuffer[i++] = 0.0f;
textureBuffer[i++] = 0.0f;
textureBuffer[i++] = 1.0f;
}
}
#endif
for (xi = x/32; xi < (x+width)/32; xi++)
for (yi = y/32; yi < (y+height)/32; yi++)

View file

@ -1126,7 +1126,7 @@ void CModel3::Write8(UINT32 addr, UINT8 data)
// Sound Board
case 0x08:
//printf("PPC: %08X=%02X * (PC=%08X, LR=%08X)\n", addr, data, ppc_get_pc(), ppc_get_lr());
printf("PPC: %08X=%02X * (PC=%08X, LR=%08X)\n", addr, data, ppc_get_pc(), ppc_get_lr());
if ((addr&0xF) == 0) // MIDI data port
SoundBoard.WriteMIDIPort(data);
else if ((addr&0xF) == 4) // MIDI control port
@ -1916,10 +1916,6 @@ void CModel3::RunFrame(void)
#endif
}
// End frame
GPU.EndFrame();
TileGen.EndFrame();
IRQ.Assert(0x0D);
return;
ThreadError:
@ -2123,6 +2119,7 @@ void CModel3::RunMainBoardFrame(void)
* by writing 0x37 and will disable/enable interrupts to control command
* output.
*/
//printf("\t-- BEGIN (Ctrl=%02X, IRQEn=%02X, IRQPend=%02X) --\n", midiCtrlPort, IRQ.ReadIRQEnable()&0x40, IRQ.ReadIRQState());
int irqCount = 0;
while ((midiCtrlPort&0x20))
//while (midiCtrlPort == 0x27) // 27 triggers IRQ sequence, 06 stops it
@ -2140,11 +2137,16 @@ void CModel3::RunMainBoardFrame(void)
++irqCount;
if (irqCount > 128)
{
printf("MIDI FIFO OVERFLOW!\n");
printf("\tMIDI FIFO OVERFLOW! (IRQEn=%02X, IRQPend=%02X)\n", IRQ.ReadIRQEnable()&0x40, IRQ.ReadIRQState());
break;
}
}
IRQ.Deassert(0x40); //todo: no longer needed, remove it
//printf("\t-- END --\n");
// End frame
GPU.EndFrame();
TileGen.EndFrame();
IRQ.Assert(0x0D);
}
void CModel3::Reset(void)
@ -2365,6 +2367,11 @@ void CModel3::Patch(void)
*(UINT32 *) &crom[0x600000+0x3199C] = 0x60000000;
}
else if (!strcmp(Game->id, "skichamp"))
{
// Base address of program in CROM: 0x480000
*(UINT32 *) &crom[0x480000+0x96B9C] = 0x60000000; // decrementer loop
}
}
// Reverses all aligned 16-bit words, thereby switching their endianness (assumes buffer size is divisible by 2)
@ -2669,7 +2676,7 @@ CModel3::~CModel3(void)
#if 0
Dump("ram", ram, 0x800000, TRUE, FALSE);
//Dump("vrom", vrom, 0x4000000, TRUE, FALSE);
//Dump("crom", crom, 0x800000, TRUE, FALSE);
Dump("crom", crom, 0x800000, TRUE, FALSE);
//Dump("bankedCrom", &crom[0x800000], 0x7000000, TRUE, FALSE);
//Dump("soundROM", soundROM, 0x80000, FALSE, TRUE);
//Dump("sampleROM", sampleROM, 0x800000, FALSE, TRUE);

View file

@ -369,6 +369,8 @@ void CReal3D::WriteTAP(unsigned tck, unsigned tms, unsigned tdi, unsigned trst)
switch (tapState)
{
case 3: // Capture-DR
//printf("TAP: Capture-DR\n");
//bit = 0;
/*
* Read ASIC IDs.
@ -413,7 +415,7 @@ void CReal3D::WriteTAP(unsigned tck, unsigned tms, unsigned tdi, unsigned trst)
{
InsertID(0x416C7057, 1 + 0 * 32);
InsertID(0x416C3057, 1 + 1 * 32);
InsertID(0x316C4057, 1 + 2 * 32);
InsertID(0x316C4057, 1 + 2 * 32); // skichamp at PC=A89F4, this value causes "NO DAUGHTER BOARD" message
InsertID(0x416C5057, 1 + 3 * 32);
InsertID(0x316C6057, 1 + 4 * 32 + 1);
InsertID(0x316C6057, 1 + 5 * 32 + 1);
@ -424,6 +426,7 @@ void CReal3D::WriteTAP(unsigned tck, unsigned tms, unsigned tdi, unsigned trst)
case 4: // Shift-DR
tapTDO = Shift(tapID, tapIDSize);
//printf("TAP: Shift-DR Bit %d\n", bit++);
break;
case 10: // Capture-IR
@ -448,6 +451,7 @@ void CReal3D::WriteTAP(unsigned tck, unsigned tms, unsigned tdi, unsigned trst)
*/
tapIR &= 0x3FFFFFFFFFFFULL;
tapCurrentInstruction = tapIR;
//printf("TAP: Update-IR %XLL\n", tapCurrentInstruction);
break;
default: