extern	m68k_regs regs;

#define ADPCM_BufSize      96000
#define Mcry_BufSize             48000*2
#define MIDIBUFFERS 1024
#define KeyBufSize 128
#define MIDIDELAYBUF 4096
#define MAX_PATH_TBL      64

typedef struct {
	//HMODULE			mod;

	//PCIFINDDEV		finddev;
	//PCICFGREAD32	read32;
	//PCIMEMWR8		out8;
	//PCIMEMWR16		out16;
	//PCIMEMWR32		out32;
	//PCIMEMRD8		in8;
	//PCIMEMRD16		in16;
	//PCIMEMRD32		in32;

	ULONG			addr;
	ULONG			irq;
	ULONG			avail;
	ULONG			snoopcount;
} _ROMEO;
typedef struct {
	DWORD time;
	BYTE msg;
} DELAYBUFITEM;

typedef struct {
	BYTE PortA;
	BYTE PortB;
	BYTE PortC;
	BYTE Ctrl;
} PIA;

typedef struct {
	int cmd;

	int cyl;
	int drv;
	int ready;
	int ctrl;
	int wexec;

	int rdptr;
	int wrptr;
	int rdnum;
	int wrnum;
	int bufnum;
	int st0;
	int st1;
	int st2;
	BYTE RspBuf[10];
	BYTE PrmBuf[10];
	BYTE DataBuf[0x8000];
	BYTE ScanBuf[0x8000];
} FDC;

typedef struct {
	int SetDelay[4];
	int Types[4];
	int ROnly[4];
	int EMask[4];
	int Blink[4];
	int Access;
} FDDINFO;

extern int ADPCM_VolumeShift ;
extern int dif_table[49*16];
extern signed short ADPCM_BufR[ADPCM_BufSize];
extern signed short ADPCM_BufL[ADPCM_BufSize];

extern long ADPCM_WrPtr ;
extern long ADPCM_RdPtr ;
extern DWORD ADPCM_SampleRate ;
extern DWORD ADPCM_ClockRate ;
extern DWORD ADPCM_Count ;
extern int ADPCM_Step ;
extern int ADPCM_Out ;
extern BYTE ADPCM_Playing ;
extern BYTE ADPCM_Clock ;
extern int ADPCM_PreCounter;
extern int ADPCM_DifBuf ;


extern int ADPCM_Pan ;
extern int OldR , OldL;
extern int Outs[8];
extern int OutsIp[4];
extern int OutsIpR[4];
extern int OutsIpL[4];


//-------------------------------

//bg.c

extern 	BYTE	BG[0x8000];
extern BYTE	Sprite_Regs[0x800];
extern BYTE	BG_Regs[0x12];
extern WORD	BG_CHREND ;
extern WORD	BG_BG0TOP ;
extern WORD	BG_BG0END ;
extern WORD	BG_BG1TOP ;
extern WORD	BG_BG1END ;
extern BYTE	BG_CHRSIZE ;
extern DWORD	BG_AdrMask ;
extern DWORD	BG0ScrollX , BG0ScrollY ;
extern DWORD	BG1ScrollX , BG1ScrollY ;

extern long	BG_HAdjust ;
extern long	BG_VLINE ;

extern BYTE	BG_Dirty0[64*64];
extern BYTE	BG_Dirty1[64*64];
extern BYTE	BGCHR8[8*8*256];
extern BYTE	BGCHR16[16*16*256];

extern WORD	BG_LineBuf[1600];
extern WORD	BG_PriBuf[1600];

extern DWORD	VLINEBG ;


//------------------------------

//crtc.c

extern 	BYTE	CRTC_Regs[24*2];
extern BYTE	CRTC_Mode ;
extern DWORD	TextDotX , TextDotY ;
extern WORD	CRTC_VSTART, CRTC_VEND;
extern WORD	CRTC_HSTART, CRTC_HEND;
extern DWORD	TextScrollX , TextScrollY ;
extern DWORD	GrphScrollX[4] ;		// zɂc
extern DWORD	GrphScrollY[4] ;

extern BYTE	CRTC_FastClr ;
extern BYTE	CRTC_SispScan ;
extern DWORD	CRTC_FastClrLine ;
extern WORD	CRTC_FastClrMask ;
extern WORD	CRTC_IntLine ;
extern BYTE	CRTC_VStep ;

extern BYTE	VCReg0[2] ;
extern BYTE	VCReg1[2] ;
extern BYTE	VCReg2[2] ;

extern BYTE	CRTC_RCFlag[2] ;
extern int HSYNC_CLK ;

//--------------------------

//disk_d88.c

typedef struct {
	BYTE	c;
	BYTE	h;
	BYTE	r;
	BYTE	n;
	WORD	sectors;		// Sector Count
	BYTE	mfm_flg;		// sides
	BYTE	del_flg;		// DELETED DATA
	BYTE	stat;			// STATUS (FDC ret)
	BYTE	reserved2[5];		// Reserved
	WORD	size;			// Sector Size
//	byte	data[0];		// Sector Data
} D88_SECTOR;

typedef struct D88_SECTINFO {
	struct D88_SECTINFO* next;
	D88_SECTOR sect;
} D88_SECTINFO;

extern D88_SECTINFO* D88Cur[4] ;
extern D88_SECTINFO* D88Top[4] ;
extern D88_SECTINFO* D88Trks[4][164];

//D88Cur and D88Top are pointers to ( static D88_SECTINFO* D88Trks[4][164]->next; ) objects


//traverse D88Trks[0][0-163]->next - for each one, write out the D88_SECTOR and sect.size data


//----------------------------

//disk_dim.c

extern int            DIMCur[4] ;
extern int            DIMTrk[4] ;
extern unsigned char* DIMImg[4] ;

//	DIMImg[drv] = (unsigned char*)malloc(1024*9*170+sizeof(DIM_HEADER));		// Maximum size


//----------------------------

//disk_xdf.c

extern int            XDFCur[4] ;
extern int            XDFTrk[4] ;
extern unsigned char* XDFImg[4] ;


	//XDFImg[drv] = (unsigned char*)malloc(1261568);


//--------------------------------

//dmac.c

extern dmac_ch	DMA[4];
extern int dmatrace ;

extern int DMA_IntCH ;
extern int DMA_LastInt ;

//-----------------------------------

//fdc.c

extern FDC fdc;

//-----------------------------------

//fdd.c

extern FDDINFO fdd;


//------------------------------------

//gvram.c

extern BYTE	GVRAM[0x80000];
extern WORD	Grp_LineBuf[1024];
extern WORD	Grp_LineBufSP[1024];		// vCIeB^pobt@
extern WORD	Grp_LineBufSP2[1024];		// x[Xv[pobt@i񔼓rbgi[j
extern WORD	Pal16Adr[256];			// 16bit color pbgAhXvZp

//--------------------------------
//ioc.c

extern 	BYTE	IOC_IntStat ;
extern BYTE	IOC_IntVect ;


//-----------------------------------------

//irq.c

extern BYTE	IRQH_IRQ[8];
extern void	*IRQH_CallBack[8];

//IRQH_Callback can be one of:

//NULL,
//&DMA_Int
//&FDC_Int
//&FDC_Int
//&Mcry_IntCB
//&MFP_IntCallback
//&MIDI_Int
//&SASI_Int
//&SCC_Int
//&IRQH_DefaultVector

//--------------------------------

//mem_wrap.c

extern	BYTE*	MEM;
extern	BYTE*	IPL;
extern	BYTE*	OP_ROM;
extern	BYTE*	FONT;
extern	BYTE	traceflag;


extern    DWORD   BusErrFlag;
extern    DWORD   MemByteAccess;
extern    int     m68000_ICount;
extern    int     m68000_ICountBk;
extern int     ICount;

 //MEM = (BYTE*)malloc(0xc00000);
 //IPL = (BYTE*)malloc(0x40000);
//FONT = (BYTE*)malloc(0xc0000);

//OP_ROM is one of:

//MEM
//GVRAM-0xc00000;  
//SRAM-0xed0000;
//TVRAM-0xe00000;
//_SCSIIPL - 0ea0000h
//IPL-0xfc0000;


//--------------------------------------------

//mercury.c

extern long	Mcry_WrPtr ;
extern long	Mcry_RdPtr ;
extern long	Mcry_SampleRate ;
extern long	Mcry_ClockRate ;
extern long	Mcry_Count ;
extern BYTE	Mcry_Status ;
extern BYTE	Mcry_LRTiming ;
extern short	Mcry_OutDataL ;
extern short	Mcry_OutDataR ;
extern short	Mcry_BufL[Mcry_BufSize];
extern short	Mcry_BufR[Mcry_BufSize];
extern long	Mcry_PreCounter ;

extern short	Mcry_OldR, Mcry_OldL;
extern int	Mcry_DMABytes ;

extern double Mcry_VolumeShift ;
extern int Mcry_SampleCnt ;
extern BYTE Mcry_Vector ;

//-------------------------------

//mfp.c

extern BYTE testflag;
extern BYTE LastKey ;

extern BYTE MFP[24];
extern BYTE Timer_TBO ;
extern BYTE Timer_Reload[4] ;
extern int Timer_Tick[4] ;

//-----------------------------

//midi.c

extern int		MIDI_CTRL;
extern int		MIDI_POS;
extern int		MIDI_SYSCOUNT;
extern BYTE		MIDI_LAST;
extern BYTE		MIDI_BUF[MIDIBUFFERS];
extern BYTE		MIDI_EXCVBUF[MIDIBUFFERS];
extern BYTE		MIDI_EXCVWAIT;

extern BYTE		MIDI_RegHigh ;				// X68Kp
extern BYTE		MIDI_Playing ;				// }X^XCb`
extern BYTE		MIDI_Vector ;
extern BYTE		MIDI_IntEnable ;
extern BYTE		MIDI_IntVect ;
extern BYTE		MIDI_IntFlag ;
extern DWORD		MIDI_Buffered ;
extern long		MIDI_BufTimer ;
extern BYTE		MIDI_R05 ;
extern DWORD		MIDI_GTimerMax ;
extern DWORD		MIDI_MTimerMax ;
extern long		MIDI_GTimerVal ;
extern long		MIDI_MTimerVal ;
extern BYTE		MIDI_TxFull ;
extern BYTE		MIDI_MODULE ;


extern DELAYBUFITEM DelayBuf[MIDIDELAYBUF];
extern int DBufPtrW ;
extern int DBufPtrR ;

extern BYTE		LOADED_TONEMAP ;
extern BYTE		ENABLE_TONEMAP ;
extern BYTE		TONE_CH[16];
extern BYTE		TONEBANK[3][128];
extern BYTE		TONEMAP[3][128];

//---------------------------

//palette.c

extern BYTE	Pal_Regs[1024];
extern WORD	TextPal[256];
extern WORD	GrphPal[256];
extern WORD	Pal16[65536];
extern WORD	Ibit;				// ƂŎg`

extern WORD	Pal_HalfMask, Pal_Ix2;
extern WORD	Pal_R, Pal_G, Pal_B;		// ʋPxύXp


//--------------------

//pia.c

extern PIA pia;

//-----------------

//rtc.c

extern BYTE	RTC_Regs[2][16];
extern BYTE	RTC_Bank ;
extern int RTC_Timer1 ;
extern int RTC_Timer16 ;

//--------------------

//sasi.c

extern BYTE SASI_Buf[256];
extern BYTE SASI_Phase ;
extern DWORD SASI_Sector ;
extern DWORD SASI_Blocks ;
extern BYTE SASI_Cmd[6];
extern BYTE SASI_CmdPtr ;
extern WORD SASI_Device ;
extern BYTE SASI_Unit ;
extern short SASI_BufPtr ;
extern BYTE SASI_RW ;
extern BYTE SASI_Stat ;
extern BYTE SASI_Mes ;
extern BYTE SASI_Error ;
extern BYTE SASI_SenseStatBuf[4];
extern BYTE SASI_SenseStatPtr ;
extern int hddtrace;

//------------------------

//scc.c

extern signed char MouseX ;
extern signed char MouseY ;
extern BYTE MouseSt ;

extern BYTE SCC_RegsA[16] ;
extern BYTE SCC_RegNumA ;
extern BYTE SCC_RegSetA ;
extern BYTE SCC_RegsB[16] ;
extern BYTE SCC_RegNumB ;
extern BYTE SCC_RegSetB ;
extern BYTE SCC_Vector ;
extern BYTE SCC_Dat[3] ;
extern BYTE SCC_DatNum ;

//----------------------

//scsi.c

extern 	BYTE	SCSIIPL[0x2000];

//-----------------

//sram.c

extern 	BYTE	SRAM[0x4000];
//-------------------

//sysport.c

extern BYTE	SysPort[7];

//------------------
//tvram.c

extern BYTE	TVRAM[0x80000];
extern BYTE	TextDrawWork[1024*1024];
extern BYTE	TextDirtyLine[1024];
extern BYTE	TextDrawPattern[2048*4];
extern BYTE	Text_TrFlag[1024];

//----------------------------

//windrv.c

extern path_buff_s	path_tbl[MAX_PATH_TBL];	//FCBpathׂ̃e[u
extern int	path_cur_prio;
extern char	win_letter;
extern int	num_win_drv;
extern char	win_drvs[32];

extern files_buff_s files_tbl[MAX_FILES_TBL];
extern int files_next;		//pointer
extern int files_num;
extern int fatr;

extern int	gr_files ;
extern char	gr_buf[16][256];


//--------------------------


//joystick.c

extern BYTE JoyKeyState0 ;
extern BYTE JoyKeyState1 ;
extern BYTE JoyState0[2] ;
extern BYTE JoyState1[2] ;
extern BYTE JoyPortData[2] ;

//---------------------

//juliet.c

extern _ROMEO		romeo ;

//------------------

//keyboard.c

extern BYTE	KeyBufWP;
extern BYTE	KeyBufRP;
extern BYTE	KeyBuf[KeyBufSize];
extern BYTE	KeyEnable ;
extern BYTE	KeyIntFlag ;

//---------------------

//windraw.c

extern 	int	Draw_Opaque;
extern int	FullScreenFlag ;
extern	BYTE	Draw_RedrawAllFlag;
extern	BYTE	Draw_DrawFlag ;
extern 	BYTE	Draw_ClrMenu ;
extern BYTE            Debug_Text, Debug_Grp, Debug_Sp;
extern 	BYTE	Draw_BitMask[800];
extern BYTE	Draw_TextBitMask[800];
extern int	winx, winy;
extern int	winh, winw;
extern WORD	FrameCount ;
extern int	SplashFlag ;
extern WORD	WinDraw_Pal16B, WinDraw_Pal16R, WinDraw_Pal16G;
extern int	WindowX ;
extern int	WindowY ;

//-----------------------

//mouse68k

extern int	MousePosX ;
extern int	MousePosY ;
extern BYTE	MouseStat ;
extern BYTE	MouseSW ;
extern POINT	CursorPos;
extern int	mousex, mousey;

//--------------

//winx68k.c

extern WORD      VLINE_TOTAL ;
extern DWORD     VLINE ;
extern DWORD     vline ;
extern BYTE DispFrame ;
extern DWORD SoundSampleRate;
extern int CurFrameRate ;
extern int NoWaitMode ;
extern int ClkUsed ;
extern int FrameSkipCount ;
extern int FrameSkipQueue ;
