Beispiel #1
0
u8 psxHwRead8(u32 add) {
	unsigned char hard;

	switch (add) {
		case 0x1f801040: hard = sioRead8();break; 
#ifdef ENABLE_SIO1API
		case 0x1f801050: hard = SIO1_readData8(); break;
#endif
		case 0x1f801800: hard = cdrRead0(); break;
		case 0x1f801801: hard = cdrRead1(); break;
		case 0x1f801802: hard = cdrRead2(); break;
		case 0x1f801803: hard = cdrRead3(); break;
		default:
			hard = psxHu8(add); 
#ifdef PSXHW_LOG
			PSXHW_LOG("*Unkwnown 8bit read at address %x\n", add);
#endif
			return hard;
	}

#ifdef PSXHW_LOG
	PSXHW_LOG("*Known 8bit read at address %x value %x\n", add, hard);
#endif
	return hard;
}
Beispiel #2
0
u16 psxHwRead16(u32 add) {
	unsigned short hard;

	switch (add) {
#ifdef PSXHW_LOG
		case 0x1f801070: PSXHW_LOG("IREG 16bit read %x\n", psxHu16(0x1070));
			return psxHu16(0x1070);
#endif
#ifdef PSXHW_LOG
		case 0x1f801074: PSXHW_LOG("IMASK 16bit read %x\n", psxHu16(0x1074));
			return psxHu16(0x1074);
#endif

		case 0x1f801040:
			hard = sioRead8();
			hard|= sioRead8() << 8;
#ifdef PAD_LOG
			PAD_LOG("sio read16 %x; ret = %x\n", add&0xf, hard);
#endif
			return hard;
		case 0x1f801044:
			hard = sioReadStat16();
#ifdef PAD_LOG
			PAD_LOG("sio read16 %x; ret = %x\n", add&0xf, hard);
#endif
			return hard;
		case 0x1f801048:
			hard = sioReadMode16();
#ifdef PAD_LOG
			PAD_LOG("sio read16 %x; ret = %x\n", add&0xf, hard);
#endif
			return hard;
		case 0x1f80104a:
			hard = sioReadCtrl16();
#ifdef PAD_LOG
			PAD_LOG("sio read16 %x; ret = %x\n", add&0xf, hard);
#endif
			return hard;
		case 0x1f80104e:
			hard = sioReadBaud16();
#ifdef PAD_LOG
			PAD_LOG("sio read16 %x; ret = %x\n", add&0xf, hard);
#endif
			return hard;
#ifdef ENABLE_SIO1API
		case 0x1f801050:
			hard = SIO1_readData16();
			return hard;
		case 0x1f801054:
			hard = SIO1_readStat16();
			return hard;
		case 0x1f80105a:
			hard = SIO1_readCtrl16();
			return hard;
		case 0x1f80105e:
			hard = SIO1_readBaud16();
			return hard;
#endif
		case 0x1f801100:
			hard = psxRcntRcount(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 count read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801104:
			hard = psxRcntRmode(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 mode read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801108:
			hard = psxRcntRtarget(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 target read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801110:
			hard = psxRcntRcount(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 count read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801114:
			hard = psxRcntRmode(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 mode read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801118:
			hard = psxRcntRtarget(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 target read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801120:
			hard = psxRcntRcount(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 count read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801124:
			hard = psxRcntRmode(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 mode read16: %x\n", hard);
#endif
			return hard;
		case 0x1f801128:
			hard = psxRcntRtarget(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 target read16: %x\n", hard);
#endif
			return hard;

		//case 0x1f802030: hard =   //int_2000????
		//case 0x1f802040: hard =//dip switches...??

		default:
			if (add >= 0x1f801c00 && add < 0x1f801e00) {
            	hard = SPU_readRegister(add);
			} else {
				hard = psxHu16(add); 
#ifdef PSXHW_LOG
				PSXHW_LOG("*Unkwnown 16bit read at address %x\n", add);
#endif
			}
            return hard;
	}
	
#ifdef PSXHW_LOG
	PSXHW_LOG("*Known 16bit read at address %x value %x\n", add, hard);
#endif
	return hard;
}
Beispiel #3
0
u32 psxHwRead32(u32 add) {
	u32 hard;

	switch (add) {
		case 0x1f801040:
			hard = sioRead8();
			hard |= sioRead8() << 8;
			hard |= sioRead8() << 16;
			hard |= sioRead8() << 24;
#ifdef PAD_LOG
			PAD_LOG("sio read32 ;ret = %x\n", hard);
#endif
			return hard;
#ifdef ENABLE_SIO1API
		case 0x1f801050:
			hard = SIO1_readData32();
			return hard;
#endif
#ifdef PSXHW_LOG
		case 0x1f801060:
			PSXHW_LOG("RAM size read %x\n", psxHu32(0x1060));
			return psxHu32(0x1060);
#endif
#ifdef PSXHW_LOG
		case 0x1f801070: PSXHW_LOG("IREG 32bit read %x\n", psxHu32(0x1070));
			return psxHu32(0x1070);
#endif
#ifdef PSXHW_LOG
		case 0x1f801074: PSXHW_LOG("IMASK 32bit read %x\n", psxHu32(0x1074));
			return psxHu32(0x1074);
#endif

		case 0x1f801810:
			hard = GPU_readData();
#ifdef PSXHW_LOG
			PSXHW_LOG("GPU DATA 32bit read %x\n", hard);
#endif
			return hard;
		case 0x1f801814:
			gpuSyncPluginSR();
			hard = HW_GPU_STATUS;
			if (hSyncCount < 240 && (HW_GPU_STATUS & PSXGPU_ILACE_BITS) != PSXGPU_ILACE_BITS)
				hard |= PSXGPU_LCF & (psxRegs.cycle << 20);
#ifdef PSXHW_LOG
			PSXHW_LOG("GPU STATUS 32bit read %x\n", hard);
#endif
			return hard;

		case 0x1f801820: hard = mdecRead0(); break;
		case 0x1f801824: hard = mdecRead1(); break;

#ifdef PSXHW_LOG
		case 0x1f8010a0:
			PSXHW_LOG("DMA2 MADR 32bit read %x\n", psxHu32(0x10a0));
			return SWAPu32(HW_DMA2_MADR);
		case 0x1f8010a4:
			PSXHW_LOG("DMA2 BCR 32bit read %x\n", psxHu32(0x10a4));
			return SWAPu32(HW_DMA2_BCR);
		case 0x1f8010a8:
			PSXHW_LOG("DMA2 CHCR 32bit read %x\n", psxHu32(0x10a8));
			return SWAPu32(HW_DMA2_CHCR);
#endif

#ifdef PSXHW_LOG
		case 0x1f8010b0:
			PSXHW_LOG("DMA3 MADR 32bit read %x\n", psxHu32(0x10b0));
			return SWAPu32(HW_DMA3_MADR);
		case 0x1f8010b4:
			PSXHW_LOG("DMA3 BCR 32bit read %x\n", psxHu32(0x10b4));
			return SWAPu32(HW_DMA3_BCR);
		case 0x1f8010b8:
			PSXHW_LOG("DMA3 CHCR 32bit read %x\n", psxHu32(0x10b8));
			return SWAPu32(HW_DMA3_CHCR);
#endif

#ifdef PSXHW_LOG
/*		case 0x1f8010f0:
			PSXHW_LOG("DMA PCR 32bit read %x\n", psxHu32(0x10f0));
			return SWAPu32(HW_DMA_PCR); // dma rest channel
		case 0x1f8010f4:
			PSXHW_LOG("DMA ICR 32bit read %x\n", psxHu32(0x10f4));
			return SWAPu32(HW_DMA_ICR); // interrupt enabler?*/
#endif

		// time for rootcounters :)
		case 0x1f801100:
			hard = psxRcntRcount(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 count read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801104:
			hard = psxRcntRmode(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 mode read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801108:
			hard = psxRcntRtarget(0);
#ifdef PSXHW_LOG
			PSXHW_LOG("T0 target read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801110:
			hard = psxRcntRcount(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 count read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801114:
			hard = psxRcntRmode(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 mode read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801118:
			hard = psxRcntRtarget(1);
#ifdef PSXHW_LOG
			PSXHW_LOG("T1 target read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801120:
			hard = psxRcntRcount(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 count read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801124:
			hard = psxRcntRmode(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 mode read32: %x\n", hard);
#endif
			return hard;
		case 0x1f801128:
			hard = psxRcntRtarget(2);
#ifdef PSXHW_LOG
			PSXHW_LOG("T2 target read32: %x\n", hard);
#endif
			return hard;

		default:
			hard = psxHu32(add); 
#ifdef PSXHW_LOG
			PSXHW_LOG("*Unkwnown 32bit read at address %x\n", add);
#endif
			return hard;
	}
#ifdef PSXHW_LOG
	PSXHW_LOG("*Known 32bit read at address %x\n", add);
#endif
	return hard;
}
Beispiel #4
0
u32 psxHwRead32(u32 add) {
    u32 hard;

    switch (add) {
    case 0x1f801040:
        hard = sioRead8();
        hard |= sioRead8() << 8;
        hard |= sioRead8() << 16;
        hard |= sioRead8() << 24;
#ifdef PAD_LOG
        PAD_LOG("sio read32 ;ret = %x\n", hard);
#endif
        return hard;
#ifdef ENABLE_SIO1API
    case 0x1f801050:
        hard = SIO1_readData32();
#ifdef SIO1_LOG
        SIO1_LOG("sio1 read32 ;ret = %x\n", hard);
#endif
        return hard;
#endif
#ifdef PSXHW_LOG
    case 0x1f801060:
        PSXHW_LOG("RAM size read %x\n", psxHu32(0x1060));
        return psxHu32(0x1060);
#endif
#ifdef PSXHW_LOG
    case 0x1f801070:
        PSXHW_LOG("IREG 32bit read %x\n", psxHu32(0x1070));
        return psxHu32(0x1070);
#endif
#ifdef PSXHW_LOG
    case 0x1f801074:
        PSXHW_LOG("IMASK 32bit read %x\n", psxHu32(0x1074));
        return psxHu32(0x1074);
#endif

    case 0x1f801810:
        hard = GPU_readData();
#ifdef PSXHW_LOG
        PSXHW_LOG("GPU DATA 32bit read %x\n", hard);
#endif
        return hard;
    case 0x1f801814:
        hard = gpuReadStatus();
#ifdef PSXHW_LOG
        PSXHW_LOG("GPU STATUS 32bit read %x\n", hard);
#endif
        return hard;

    case 0x1f801820:
        hard = mdecRead0();
        break;
    case 0x1f801824:
        hard = mdecRead1();
        break;

#ifdef PSXHW_LOG
    case 0x1f8010a0:
        PSXHW_LOG("DMA2 MADR 32bit read %x\n", psxHu32(0x10a0));
        return SWAPu32(HW_DMA2_MADR);
    case 0x1f8010a4:
        PSXHW_LOG("DMA2 BCR 32bit read %x\n", psxHu32(0x10a4));
        return SWAPu32(HW_DMA2_BCR);
    case 0x1f8010a8:
        PSXHW_LOG("DMA2 CHCR 32bit read %x\n", psxHu32(0x10a8));
        return SWAPu32(HW_DMA2_CHCR);
#endif

#ifdef PSXHW_LOG
    case 0x1f8010b0:
        PSXHW_LOG("DMA3 MADR 32bit read %x\n", psxHu32(0x10b0));
        return SWAPu32(HW_DMA3_MADR);
    case 0x1f8010b4:
        PSXHW_LOG("DMA3 BCR 32bit read %x\n", psxHu32(0x10b4));
        return SWAPu32(HW_DMA3_BCR);
    case 0x1f8010b8:
        PSXHW_LOG("DMA3 CHCR 32bit read %x\n", psxHu32(0x10b8));
        return SWAPu32(HW_DMA3_CHCR);
#endif

#ifdef PSXHW_LOG
    case 0x1f8010f0:
        PSXHW_LOG("DMA PCR 32bit read %x\n", HW_DMA_PCR);
        return SWAPu32(HW_DMA_PCR); // DMA control register
    case 0x1f8010f4:
        PSXHW_LOG("DMA ICR 32bit read %x\n", HW_DMA_ICR);
        return SWAPu32(HW_DMA_ICR); // DMA interrupt register (enable/ack)
#endif

    // time for rootcounters :)
    case 0x1f801100:
        hard = psxRcntRcount(0);
#ifdef PSXHW_LOG
        PSXHW_LOG("T0 count read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801104:
        hard = psxRcntRmode(0);
#ifdef PSXHW_LOG
        PSXHW_LOG("T0 mode read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801108:
        hard = psxRcntRtarget(0);
#ifdef PSXHW_LOG
        PSXHW_LOG("T0 target read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801110:
        hard = psxRcntRcount(1);
#ifdef PSXHW_LOG
        PSXHW_LOG("T1 count read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801114:
        hard = psxRcntRmode(1);
#ifdef PSXHW_LOG
        PSXHW_LOG("T1 mode read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801118:
        hard = psxRcntRtarget(1);
#ifdef PSXHW_LOG
        PSXHW_LOG("T1 target read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801120:
        hard = psxRcntRcount(2);
#ifdef PSXHW_LOG
        PSXHW_LOG("T2 count read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801124:
        hard = psxRcntRmode(2);
#ifdef PSXHW_LOG
        PSXHW_LOG("T2 mode read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801128:
        hard = psxRcntRtarget(2);
#ifdef PSXHW_LOG
        PSXHW_LOG("T2 target read32: %x\n", hard);
#endif
        return hard;
    case 0x1f801014:
        hard = psxHu32(add);
#ifdef PSXHW_LOG
        PSXHW_LOG("SPU delay [0x1014] read32: %8.8lx\n", hard);
#endif
        return hard;

    default:
        hard = psxHu32(add);
#ifdef PSXHW_LOG
        PSXHW_LOG("*Unknown 32bit read at address %x (0x%8.8lx)\n", add, hard);
#endif
        return hard;
    }
#ifdef PSXHW_LOG
    PSXHW_LOG("*Known 32bit read at address %x\n", add);
#endif
    return hard;
}
Beispiel #5
0
static u32 io_read_sio32()
{
	return sioRead8() | (sioRead8() << 8) | (sioRead8() << 16) | (sioRead8() << 24);
}
Beispiel #6
0
/* IO handlers */
static u32 io_read_sio16()
{
	return sioRead8() | (sioRead8() << 8);
}