www.pudn.com > potemkin_sourceforPSP.rar > DS7IO.cpp


#include "stdafx.h" 
 
#include "../HW.h" 
#include "DS7IO.h" 
#include "DSGeom.h" 
#include "DSFifo.h" 
#include "DSTables.h" 
 
#include "../GBA/GBAIO.h" 
 
 
DS7IORegion ds7IO; 
 
 
 
struct GX 
{ 
	u32 dispCNT; 
	u16 dispStat; 
	u16 vcount; 
}; 
 
 
void DS7IO_Init() 
{ 
	//dsIO.keyinput = 0x3ff; 
} 
 
 
void DS7IO_SelfTest() 
{ 
 
} 
 
 
 
u8   MEMDECL ReadDS7IO8 (u32 address) 
{ 
	address&=0xffff; 
	LOG(IO,"Unknown 8-bit IO read: %04x",address); 
	return 0; 
} 
 
 
u16  MEMDECL ReadDS7IO16(u32 address) 
{ 
	address&=0xffff; 
	switch(address) 
	{ 
	case 0x180:  
		{ 
			u16 value = (rand()&0xFF) | 0xFF00; 
			LOG(IO,"R16: MAINPINTF");  
			return value; 
		} 
 
	case 0x208: LOG(INTC, "R16: IME"); break; 
 
 
	default: 
		LOG(IO,"Unknown 16-bit IO read: %04x",address); 
		break; 
	} 
	return 0; 
} 
 
u32  MEMDECL ReadDS7IO32(u32 address) 
{ 
	address&=0xffff; 
 
	u32 value = *(u32*)(((u8*)&ds7IO)+address); 
 
	switch(address) 
	{ 
	case 0xB8: LOG(DMA,"R32 DMA0 count/control = %08x",value); break; 
	case 0xC4: LOG(DMA,"R32 DMA1 count/control = %08x",value); break; 
	case 0xD0: LOG(DMA,"R32 DMA2 count/control = %08x",value); break; 
	case 0xDC: LOG(DMA,"R32 DMA3 count/control = %08x",value); break; 
 
	case 0x210:	LOG(INTC,"R32: IE = %08x",value); break; 
	case 0x214:	LOG(INTC,"R32: IF = %08x",value); break; 
 
	case 0x600: //read 
		{ 
			LOG(G3D,"R32 GXSTAT"); 
		} 
		break; 
	default: 
		LOG(IO,"Unknown 32-bit IO read: %04x",address); 
		break; 
	} 
	return value; 
} 
 
void MEMDECL WriteDS7IO8 (u32 address, u8  value) 
{ 
	address&=0xffff; 
	switch (address) { 
	case 0x1A8:  
	case 0x1A9:  
	case 0x1AA:  
	case 0x1AB:  
	case 0x1AC:  
	case 0x1AD:  
	case 0x1AE:  
	case 0x1AF: 
		LOG(IO,"Card command reg written: %04x <- %02x",address,value);  
		break; 
 
	default: 
		LOG(IO,"Unknown 8-bit IO write: %04x <- %02x",address,value); 
	} 
} 
void MEMDECL WriteDS7IO16(u32 address, u16 value) 
{ 
	address&=0xffff; 
	switch (address) { 
	case 0x060: //read 
		{ 
			LOG(G3D,"W16 Disp3DCNT = %04x",value); 
		} 
		break; 
	case 0xB8: LOG(DMA,"W16 DMA0 count = %d",value); break; 
	case 0xBA: LOG(DMA,"W16 DMA0 control = %04x",value); DMAC_CntWrite16(&ds7IO.dmac,0,value); break; 
	case 0xC4: LOG(DMA,"W16 DMA1 count = %d",value); break; 
	case 0xC6: LOG(DMA,"W16 DMA1 control = %04x",value); DMAC_CntWrite16(&ds7IO.dmac,1,value); break; 
	case 0xD0: LOG(DMA,"W16 DMA2 count = %d",value); break; 
	case 0xD2: LOG(DMA,"W16 DMA2 control = %04x",value); DMAC_CntWrite16(&ds7IO.dmac,2,value); break; 
	case 0xDC: LOG(DMA,"W16 DMA3 count = %d",value); break; 
	case 0xDE: LOG(DMA,"W16 DMA3 control = %04x",value); DMAC_CntWrite16(&ds7IO.dmac,3,value); break; 
 
	case 0x1B8:	LOG(IO,"W16: Card encryption reg 3 = %04x", value); break; 
	case 0x1BA:	LOG(IO,"W16: Card encryption reg 4 = %04x", value); break; 
 
	case 0x1C0: 
		LOG(IO,"W16: SERIAL_CR = %08x", value);  
		break; 
 
	case 0x180: LOG(IO,"W16: SUBPINTF = %04x", value); break; 
	case 0x208: LOG(INTC, "W16: IME : %d",value&1); break; 
 
	default: 
		LOG(IO,"Unknown 16-bit IO write: %04x <- %08x",address,value); 
	} 
	*(u16*)(((u8*)&ds7IO)+address) = value; 
} 
 
 
/* 
*	 
 */ 
 
 
static u32 __declspec(align(16)) writeBlock[16]; 
static u32 *wbPtr; 
static int wbCount; 
static int x,y,z; 
 
void MEMDECL WriteDS7IO32(u32 address, u32 value) 
{ 
	address&=0xffffff; 
	 
	switch (address) { 
	case 0x060: 
		LOG(G3D,"Disp3DCNT %08x",value); 
		break; 
 
	case 0xB0: LOG(DMA,"W32 DMA0 source = %08x",value); break; 
	case 0xB4: LOG(DMA,"W32 DMA0 dest = %08x",value); break; 
	case 0xB8: 
		LOG(DMA,"W32 DMA0 control = %08x",value);  
		DMAC_CntWrite32(&ds7IO.dmac, 0, value);  
		return; //can't have the write overwrite what we did 
	case 0xBC: LOG(DMA,"W32 DMA1 source = %08x",value); break; 
	case 0xC0: LOG(DMA,"W32 DMA1 dest = %08x",value); break; 
	case 0xC4: 
		LOG(DMA,"W32 DMA1 control = %08x",value);  
		DMAC_CntWrite32(&ds7IO.dmac, 1, value);  
		return; 
	case 0xC8: LOG(DMA,"W32 DMA2 source = %08x",value); break; 
	case 0xCC: LOG(DMA,"W32 DMA2 dest = %08x",value); break; 
	case 0xD0:  
		LOG(DMA,"W32 DMA2 control = %08x",value); 
		DMAC_CntWrite32(&ds7IO.dmac, 2, value);  
		return; 
	case 0xD4: LOG(DMA,"W32 DMA3 source = %08x",value); break; 
	case 0xD8: LOG(DMA,"W32 DMA3 dest = %08x",value); break; 
	case 0xDC: 
		LOG(DMA,"W32 DMA3 control = %08x",value);  
		DMAC_CntWrite32(&ds7IO.dmac, 3, value);  
		return; 
 
	case 0x180: LOG(IO,"W32: MAINPINTF = %08x", value); break; 
	case 0x184: LOG(IO,"W32: MAINP_FIFO_CNT = %08x", value); break; 
	case 0x188: LOG(IO,"W32: SEND_FIFO_OFFSET = %08x", value); break; 
	case 0x100000: LOG(IO,"W32: RECV_FIFO = %08x", value); break; 
 
	case 0x1A0: 
		MessageBox(0,"Card access",0,0); 
		LOG(IO,"W32: MAINPINTF = %08x", value);  
		break; 
 
	case 0x1B0:	LOG(IO,"W32: Card encryption reg 1 = %08x", value); break; 
	case 0x1B4:	LOG(IO,"W32: Card encryption reg 2 = %08x", value); break; 
 
	case 0x1C0: 
		LOG(IO,"W32: SERIAL_CR = %08x", value);  
		break; 
 
	case 0x204: LOG(MEMMAP,"W32: EXMEMCNT = %08x", value); break; 
	case 0x208: LOG(INTC, "W32: IME : %d",value&1); break; 
	case 0x210: LOG(INTC, "W32: IE = %08x",value); break; 
	case 0x214: LOG(INTC, "W32: IF = %08x",value); break; 
 
	case 0x240: LOG(MEMMAP,"W32: WVRAMSTAT = %08x",value); // ARM7 only!! 
 
	default: 
		LOG(IO,"Unknown 32-bit IO write: %04x <- %08x",address,value); 
		break; 
	} 
	//*(u32*)(((u8*)&dsIO)+address) = value; 
} 
 
 
 
u32  MEMDECL ReadDS7IONoEffect(u32 address) 
{ 
	return 0; 
} 
 
 
TCHAR* MEMDECL GetDS7IORegName(u32 address) 
{ 
	/* 
	if ((address&0xFFFFFF)<0x54) 
	{ 
		return GBADispRegs[(address&0xFF) / 2].description; 
	} 
	else*/ 
		return "unknown"; 
}