⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smf_conf.h

📁 the test file for GP32 gameboy hack
💻 H
📖 第 1 页 / 共 2 页
字号:
			do { \
				_outp((unsigned short)g_smCtrlAddr[(drv_no)], 0xf4); \
				while (!((_inp((unsigned short)g_smStatAddr[(drv_no)]) \
							& 0x80))) {} \
				_outp((unsigned short)g_smCtrlAddr[(drv_no)], 0); \
			} while (0)
#elif (SM_OS == MS_WINNT)
	extern unsigned char sm_readStatPort(void);
	extern void sm_writeStatPort(unsigned char data);
	extern unsigned char sm_readCtrlPort(void);
	extern void sm_writeCtrlPort(unsigned char data);
	extern unsigned char sm_readAddrPort(void);
	extern void sm_writeAddrPort(unsigned char data);
	extern unsigned char sm_readDataPort(void);
	extern void sm_writeDataPort(unsigned char data);

	#define SM_ALE_EN(drv_no)				sm_writeAddrPort(0x0a)
	#define SM_ALE_DIS(drv_no)				sm_writeAddrPort(0x08)
	#define SM_CLE_EN(drv_no)				sm_writeAddrPort(0x09)
	#define SM_CLE_DIS(drv_no)				sm_writeAddrPort(0x08)
	#define SM_CHIP_EN(drv_no)				sm_writeAddrPort(0x08)
	#define SM_CHIP_DIS(drv_no)				sm_writeAddrPort(0x0c)

	#define SM_WRITE_EN(drv_no)				sm_writeCtrlPort(4)
	#define SM_WRITE_DIS(drv_no)			sm_writeCtrlPort(0)
	#define SM_READ_EN(drv_no)				sm_writeCtrlPort(0xf4)
	#define SM_READ_DIS(drv_no)				sm_writeCtrlPort(0)

	#define SM_WRITE_CMD(drv_no, cmd) 		sm_writeDataPort((unsigned char)(cmd))
	#define SM_WRITE_ADDR(drv_no, addr)		sm_writeDataPort((unsigned char)(addr))
	#define SM_WRITE_DATA(drv_no, data)		sm_writeDataPort((unsigned char)(data))
	#define SM_READ_DATA(drv_no)			sm_readDataPort()

	#define SM_WAIT_TR(drv_no) \
				do { \
					sm_writeCtrlPort(0xf4); \
					while (!((sm_readStatPort() & 0x80))) {} \
					sm_writeCtrlPort(0); \
				} while (0)
#endif	/* SM_OS == MS_WINNT */

#elif (SM_TARGET == WEBVP)
	extern volatile unsigned long* g_smDataAddr[MAX_DRIVE];

	#define SM_ALE_EN(drv_no)				io_SetCPort2(0x4, 0x4)
	#define SM_ALE_DIS(drv_no)				io_SetCPort2(0x4, 0)
	#define SM_CLE_EN(drv_no)				io_SetCPort2(0x2, 0x2)
	#define SM_CLE_DIS(drv_no)				io_SetCPort2(0x2, 0)

	#define SM_CHIP_EN(drv_no)				/* No Codes */

	#define SM_CHIP_DIS(drv_no)				/* No Codes */

	#define SM_WRITE_EN(drv_no)				/* No Codes */
	#define SM_WRITE_DIS(drv_no)			/* No Codes */
	#define SM_READ_EN(drv_no)				/* No Codes */
	#define SM_READ_DIS(drv_no)				/* No Codes */

	#define SM_WRITE_CMD(drv_no, cmd) 		SetD_FastIO(g_smDataAddr[drv_no], cmd)
	#define SM_WRITE_ADDR(drv_no, addr) 	SetD_FastIO(g_smDataAddr[drv_no], addr)
	#define SM_WRITE_DATA(drv_no, data) 	SetD_FastIO(g_smDataAddr[drv_no], data)
	#define SM_READ_DATA(drv_no) 			((unsigned char)GetD_FastIO(g_smDataAddr[drv_no]))

	#define SM_WAIT_TR(drv_no)				smfsWaitUSec(10);
#elif (SM_TARGET == WEBVP_SM)
	extern volatile unsigned long* g_smDataAddr[MAX_DRIVE];

	#define SM_ALE_EN(drv_no)				io_SetSmMas(0x2, 0x2)
	#define SM_ALE_DIS(drv_no)				io_SetSmMas(0x2, 0)
	#define SM_CLE_EN(drv_no)				io_SetSmMas(0x1, 0x1)
	#define SM_CLE_DIS(drv_no)				io_SetSmMas(0x1, 0)

	#define SM_CHIP_EN(drv_no)				/* No Codes */

	#define SM_CHIP_DIS(drv_no)				/* No Codes */

	#define SM_WRITE_EN(drv_no)				/* No Codes */
	#define SM_WRITE_DIS(drv_no)			/* No Codes */
	#define SM_READ_EN(drv_no)				/* No Codes */
	#define SM_READ_DIS(drv_no)				/* No Codes */

	#define SM_WRITE_CMD(drv_no, cmd) 		SetD_FastIO(g_smDataAddr[drv_no], cmd)
	#define SM_WRITE_ADDR(drv_no, addr)		SetD_FastIO(g_smDataAddr[drv_no], addr)
	#define SM_WRITE_DATA(drv_no, data)		SetD_FastIO(g_smDataAddr[drv_no], data)
	#define SM_READ_DATA(drv_no) 			((unsigned char)GetD_FastIO(g_smDataAddr[drv_no]))

	#define SM_WAIT_TR(drv_no) \
				do { \
					smfsWaitUSec(1); \
					while (!(io_GetSmMas() & 1)) {} \
				} while (0)
#elif (SM_TARGET == ISA_SM)
	extern volatile unsigned char* g_smCtrlAddr[MAX_DRIVE];
	extern volatile unsigned char* g_smDataAddr[MAX_DRIVE];
	extern unsigned char g_ctl_val;

	extern int _outp(unsigned short port, int databyte);
	extern int _inp(unsigned short port);

	#define SM_ALE_EN(drv_no) \
				do { \
					g_ctl_val |= 0x01; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
				} while (0)
	#define SM_ALE_DIS(drv_no) \
				do { \
					g_ctl_val &= 0x0e; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
				} while (0)
	#define SM_CLE_EN(drv_no) \
				do { \
					g_ctl_val |= 0x02; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
				} while (0)
	#define SM_CLE_DIS(drv_no) \
				do { \
					g_ctl_val &= 0x0d; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
				} while (0)
	#define SM_CHIP_EN(drv_no) \
				do { \
					g_ctl_val = 0x04; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
					SM_CLE_EN((drv_no)); \
					_outp((unsigned short)g_smDataAddr[(drv_no)], \
							0xff); \
					SM_CLE_DIS((drv_no)); \
				} while (0)
	#define SM_CHIP_DIS(drv_no) \
				do { \
					g_ctl_val = 0xfc; \
					_outp((unsigned short)g_smCtrlAddr[(drv_no)], \
							g_ctl_val); \
				} while (0);

	#define SM_WRITE_EN(drv_no)
	#define SM_WRITE_DIS(drv_no)
	#define SM_READ_EN(drv_no)
	#define SM_READ_DIS(drv_no)

	#define SM_WRITE_CMD(drv_no, cmd) 		_outp((unsigned short)g_smDataAddr[(drv_no)], (cmd))
	#define SM_WRITE_ADDR(drv_no, addr) 	_outp((unsigned short)g_smDataAddr[(drv_no)], (addr))
	#define SM_WRITE_DATA(drv_no, data) 	_outp((unsigned short)g_smDataAddr[(drv_no)], (data))
	#define SM_READ_DATA(drv_no) 			_inp((unsigned short)g_smDataAddr[(drv_no)])

	#define SM_WAIT_TR(drv_no)				smfsWaitUSec(10)
#else
/*
	#define SM_ALE_EN(drv_no)
	#define SM_ALE_DIS(drv_no)
	#define SM_CLE_EN(drv_no)
	#define SM_CLE_DIS(drv_no)
	#define SM_CHIP_EN(drv_no)
	#define SM_CHIP_DIS(drv_no)

	#define SM_WRITE_EN(drv_no)
	#define SM_WRITE_DIS(drv_no)
	#define SM_READ_EN(drv_no)
	#define SM_READ_DIS(drv_no)

	#define SM_WRITE_CMD(drv_no, cmd)
	#define SM_WRITE_ADDR(drv_no, addr)
	#define SM_WRITE_DATA(drv_no, data)
	#define SM_READ_DATA(drv_no)

	#define SM_WAIT_TR(drv_no)
*/

	// ***************

	#include "GP32.h"

	// add SM_WP_DIS() to smfsUserInit();
	#define SM_WP_EN()						(rPDDAT &=~ 0x40)	// PD6
	#define SM_WP_DIS()						(rPDDAT |= 0x40)	// PD6

	#define SM_ALE_EN(drv_no)				(rPEDAT |= 0x10)	// PE4
	#define SM_ALE_DIS(drv_no)				(rPEDAT &=~ 0x10)	// PE4

	#define SM_CLE_EN(drv_no)				(rPEDAT |= 0x20)	// PE5
	#define SM_CLE_DIS(drv_no)				(rPEDAT &=~ 0x20)	// PE5

	#define SM_CHIP_EN(drv_no)				(rPDDAT &=~ 0x80)	// PD7
	#define SM_CHIP_DIS(drv_no)				(rPDDAT |= 0x80)	// PD7

	#define SM_READ_EN(drv_no)				(rPBCON &=~ 0xFFFF)
	#define SM_READ_DIS(drv_no)				(rPBCON |= 0x5555)

	#define SM_WRITE_EN(drv_no)				SM_READ_DIS(drv_no)
	#define SM_WRITE_DIS(drv_no)			SM_READ_EN(drv_no)

	#define SM_WRITE_DATA(drv_no, data)		{ rPBDAT = (rPBDAT & 0xff00) | data; rPEDAT &=~ 0x08; rPEDAT |= 0x08; }
	#define SM_READ_DATA(drv_no)			({unsigned char data; rPDDAT &=~ 0x100; data = (rPBDAT & 0xFF); rPDDAT |= 0x100; data; })

	#define SM_WRITE_CMD(drv_no, cmd)		SM_WRITE_DATA(drv_no, cmd)
	#define SM_WRITE_ADDR(drv_no, addr)		SM_WRITE_DATA(drv_no, addr)

	#define SM_WAIT_TR(drv_no)				while (!(rPDDAT & 0x200))
#endif



/**********
 **********/
#ifndef NO_MALLOC
	#define SM_MALLOC(size)			malloc((size))
	#define SM_FREE(addr)			free((addr))
#endif


/**********
 * Global Variables  & Functions defined in smf_conf.c
 **********/

/**********
 * Platform Dependent Functions
 **********/
extern int smfsUserInit(void);
extern void smfsWaitUSec(unsigned long usec);

/*
 * p_time is an array of 8 bytes
 * from lowest address =>
 * 		msec/4(1), sec(1), min(1), hour(1), day(1), month(1), year(2)
 */
extern unsigned long smfsGetTime(unsigned char p_time[]);


/**********
 * Standard Library Functions used
 **********/

/* (if no standard library provided, these functions must be defined) */
#ifdef NO_STDLIB
	extern int sm_memcmp(const void* buf1, const void* buf2, unsigned int count);
	extern void* sm_memcpy(void* dst, const void* src, unsigned int count);
	extern void* sm_memset(void* dst, int val, unsigned int count);
	extern int sm_strcmp(const char* src, const char* dst);
	extern char* sm_strcpy(char* dst, const char* src);
	extern unsigned int sm_strlen(const char* str);
#else	/* NO_STDLIB */
	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
#endif


#ifdef NO_MALLOC
	extern void* malloc(unsigned int size);
	extern void free(void* memblock);
#else	/* NO_MALLOC */
	#include <stdlib.h>
#endif


#if (SM_OS == MS_WINNT)
	extern HANDLE g_ioDev;
#endif


#ifdef __cplusplus
}
#endif


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -