📄 smf_conf.h
字号:
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 + -