mirror of
https://github.com/PCSX2/pcsx2.git
synced 2025-04-02 10:52:54 -04:00
git-svn-id: http://pcsx2.googlecode.com/svn/branches/pcsx2_0.9.2@159 96395faa-99c1-11dd-bbfe-3dabce05a288
204 lines
4.5 KiB
C
204 lines
4.5 KiB
C
/* Pcsx2 - Pc Ps2 Emulator
|
|
* Copyright (C) 2002-2003 Pcsx2 Team
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __IPU_H__
|
|
#define __IPU_H__
|
|
|
|
#include "Common.h"
|
|
|
|
#ifdef __WIN32__
|
|
#pragma pack(1)
|
|
#endif
|
|
|
|
//
|
|
// Bitfield Structure
|
|
//
|
|
typedef union {
|
|
struct {
|
|
u32 OPTION : 28; // VDEC decoded value
|
|
u32 CMD : 4; // last command
|
|
u32 _BUSY;
|
|
};
|
|
struct {
|
|
u32 DATA;
|
|
u32 BUSY;
|
|
};
|
|
} tIPU_CMD;
|
|
|
|
#define IPU_CTRL_IFC_M (0x0f<< 0)
|
|
#define IPU_CTRL_OFC_M (0x0f<< 4)
|
|
#define IPU_CTRL_CBP_M (0x3f<< 8)
|
|
#define IPU_CTRL_ECD_M (0x01<<14)
|
|
#define IPU_CTRL_SCD_M (0x01<<15)
|
|
#define IPU_CTRL_IDP_M (0x03<<16)
|
|
#define IPU_CTRL_AS_M (0x01<<20)
|
|
#define IPU_CTRL_IVF_M (0x01<<21)
|
|
#define IPU_CTRL_QST_M (0x01<<22)
|
|
#define IPU_CTRL_MP1_M (0x01<<23)
|
|
#define IPU_CTRL_PCT_M (0x07<<24)
|
|
#define IPU_CTRL_RST_M (0x01<<30)
|
|
#define IPU_CTRL_BUSY_M (0x01<<31)
|
|
|
|
#define IPU_CTRL_IFC_O ( 0)
|
|
#define IPU_CTRL_OFC_O ( 4)
|
|
#define IPU_CTRL_CBP_O ( 8)
|
|
#define IPU_CTRL_ECD_O (14)
|
|
#define IPU_CTRL_SCD_O (15)
|
|
#define IPU_CTRL_IDP_O (16)
|
|
#define IPU_CTRL_AS_O (20)
|
|
#define IPU_CTRL_IVF_O (21)
|
|
#define IPU_CTRL_QST_O (22)
|
|
#define IPU_CTRL_MP1_O (23)
|
|
#define IPU_CTRL_PCT_O (24)
|
|
#define IPU_CTRL_RST_O (30)
|
|
#define IPU_CTRL_BUSY_O (31)
|
|
|
|
|
|
//
|
|
// Bitfield Structure
|
|
//
|
|
typedef union {
|
|
struct {
|
|
u32 IFC : 4; // Input FIFO counter
|
|
u32 OFC : 4; // Output FIFO counter
|
|
u32 CBP : 6; // Coded block pattern
|
|
u32 ECD : 1; // Error code pattern
|
|
u32 SCD : 1; // Start code detected
|
|
u32 IDP : 2; // Intra DC precision
|
|
u32 resv0 : 2;
|
|
u32 AS : 1; // Alternate scan
|
|
u32 IVF : 1; // Intra VLC format
|
|
u32 QST : 1; // Q scale step
|
|
u32 MP1 : 1; // MPEG1 bit strea
|
|
u32 PCT : 3; // Picture Type
|
|
u32 resv1 : 3;
|
|
u32 RST : 1; // Reset
|
|
u32 BUSY : 1; // Busy
|
|
};
|
|
u32 _u32;
|
|
} tIPU_CTRL;
|
|
|
|
#define IPU_BP_BP_M (0x7f<< 0)
|
|
#define IPU_BP_IFC_M (0x0f<< 8)
|
|
#define IPU_BP_FP_M (0x03<<16)
|
|
|
|
#define IPU_BP_BP_O ( 0)
|
|
#define IPU_BP_IFC_O ( 8)
|
|
#define IPU_BP_FP_O (16)
|
|
|
|
|
|
//
|
|
// Bitfield Structure
|
|
//
|
|
typedef struct {
|
|
u32 BP; // Bit stream point
|
|
u16 IFC; // Input FIFO counter
|
|
u8 FP; // FIFO point
|
|
u8 bufferhasnew;
|
|
} tIPU_BP;
|
|
|
|
#ifdef __WIN32__
|
|
#pragma pack()
|
|
#endif
|
|
|
|
typedef struct {
|
|
u32 FB : 6;
|
|
u32 UN2 :10;
|
|
u32 QSC : 5;
|
|
u32 UN1 : 3;
|
|
u32 DTD : 1;
|
|
u32 SGN : 1;
|
|
u32 DTE : 1;
|
|
u32 OFM : 1;
|
|
u32 cmd : 4;
|
|
} tIPU_CMD_IDEC;
|
|
|
|
typedef struct {
|
|
u32 FB : 6;
|
|
u32 UN2 :10;
|
|
u32 QSC : 5;
|
|
u32 UN1 : 4;
|
|
u32 DT : 1;
|
|
u32 DCR : 1;
|
|
u32 MBI : 1;
|
|
u32 cmd : 4;
|
|
} tIPU_CMD_BDEC;
|
|
|
|
typedef struct {
|
|
u32 MBC :11;
|
|
u32 UN2 :15;
|
|
u32 DTE : 1;
|
|
u32 OFM : 1;
|
|
u32 cmd : 4;
|
|
} tIPU_CMD_CSC;
|
|
|
|
#define SCE_IPU_BCLR 0x0
|
|
#define SCE_IPU_IDEC 0x1
|
|
#define SCE_IPU_BDEC 0x2
|
|
#define SCE_IPU_VDEC 0x3
|
|
#define SCE_IPU_FDEC 0x4
|
|
#define SCE_IPU_SETIQ 0x5
|
|
#define SCE_IPU_SETVQ 0x6
|
|
#define SCE_IPU_CSC 0x7
|
|
#define SCE_IPU_PACK 0x8
|
|
#define SCE_IPU_SETTH 0x9
|
|
|
|
typedef struct {
|
|
tIPU_CMD cmd;
|
|
u32 dummy0[2];
|
|
tIPU_CTRL ctrl;
|
|
u32 dummy1[3];
|
|
u32 ipubp;
|
|
u32 dummy2[3];
|
|
u32 top;
|
|
u32 topbusy;
|
|
u32 dummy3[2];
|
|
} IPUregisters, *PIPUregisters;
|
|
|
|
#define ipuRegs ((IPUregisters*)(PS2MEM_HW+0x2000))
|
|
|
|
void dmaIPU0();
|
|
void dmaIPU1();
|
|
|
|
int ipuInit();
|
|
void ipuReset();
|
|
void ipuShutdown();
|
|
int ipuFreeze(gzFile f, int Mode);
|
|
BOOL ipuCanFreeze();
|
|
|
|
u32 ipuRead32(u32 mem);
|
|
int ipuConstRead32(u32 x86reg, u32 mem);
|
|
|
|
u64 ipuRead64(u32 mem);
|
|
void ipuConstRead64(u32 mem, int mmreg);
|
|
|
|
void ipuWrite32(u32 mem,u32 value);
|
|
void ipuConstWrite32(u32 mem, int mmreg);
|
|
|
|
void ipuWrite64(u32 mem,u64 value);
|
|
void ipuConstWrite64(u32 mem, int mmreg);
|
|
|
|
int ipu0Interrupt();
|
|
int ipu1Interrupt();
|
|
|
|
u8 getBits32(u8 *address, u32 advance);
|
|
u8 getBits16(u8 *address, u32 advance);
|
|
u8 getBits8(u8 *address, u32 advance);
|
|
int getBits(u8 *address, u32 size, u32 advance);
|
|
|
|
#endif
|