#pragma once

#ifdef SUPPORT_PEGC

#define PEGC_REG_PPM_BANK_A8	0x000 // mio1 E0004h
#define PEGC_REG_PPM_BANK_B0	0x002 // mio1 E0006h
#define PEGC_REG_MODE			0x000 // mio2 E0100h
#define PEGC_REG_VRAM_ENABLE	0x002 // mio2 E0102h
#define PEGC_REG_PLANE_ACCESS	0x004 // mio2 E0104h
 // mio2 E0106h
#define PEGC_REG_PLANE_ROP		0x008 // mio2 E0108h
#define PEGC_REG_DATASELECT		0x00A // mio2 E010Ah
#define PEGC_REG_MASK			0x00C // mio2 E010Ch
 // mio2 E010Eh
#define PEGC_REG_LENGTH			0x010 // mio2 E0110h
#define PEGC_REG_SHIFT			0x012 // mio2 E0112h
#define PEGC_REG_PALETTE1		0x014 // mio2 E0114h
 // mio2 E0116h
#define PEGC_REG_PALETTE2		0x018 // mio2 E0118h
#define PEGC_REG_PATTERN		0x020 // mio2 E0120h

typedef struct {
	UINT8 enable; // PEGCプレーンモード使用可能
	
	UINT8 lastdata[64]; // PEGCプレーンモード 最後にVRAMから読み取ったデータ
	SINT32 lastdatalen; // PEGCプレーンモード 読み取り済みデータ長さ
	UINT32 remain; // PEGCプレーンモード 転送データ残り？
} _PEGC, *PEGC;


#ifdef __cplusplus
extern "C" {
#endif
	
REG16 MEMCALL pegc_memvgaplane_rd16(UINT32 address);
void MEMCALL pegc_memvgaplane_wr16(UINT32 address, REG16 value);
UINT32 MEMCALL pegc_memvgaplane_rd32(UINT32 address);
void MEMCALL pegc_memvgaplane_wr32(UINT32 address, UINT32 value);

void pegc_reset(const NP2CFG *pConfig);
void pegc_bind(void);

#ifdef __cplusplus
}
#endif


#endif