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

📄 pm.c

📁 AT91RM9200-U-Boot at91rm9200u-boot移植源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    return 0;}char * PMAPI PM_getCurrentPath(    char *path,    int maxLen){    return getcwd(path,maxLen);}char PMAPI PM_getBootDrive(void){ return 'C'; }const char * PMAPI PM_getVBEAFPath(void){ return "c:\\"; }const char * PMAPI PM_getNucleusPath(void){    static char path[256];    char        *env;    if ((env = getenv("NUCLEUS_PATH")) != NULL)        return env;    if ((env = getenv("WINBOOTDIR")) != NULL) {        /* Running in a Windows 9x DOS box or DOS mode */        strcpy(path,env);        strcat(path,"\\system\\nucleus");        return path;        }    if ((env = getenv("SystemRoot")) != NULL) {        /* Running in an NT/2K DOS box */        strcpy(path,env);        strcat(path,"\\system32\\nucleus");        return path;        }    return "c:\\nucleus";}const char * PMAPI PM_getNucleusConfigPath(void){    static char path[256];    strcpy(path,PM_getNucleusPath());    PM_backslash(path);    strcat(path,"config");    return path;}const char * PMAPI PM_getUniqueID(void){ return "DOS"; }const char * PMAPI PM_getMachineName(void){ return "DOS"; }int PMAPI PM_kbhit(void){    return kbhit();}int PMAPI PM_getch(void){    return getch();}PM_HWND PMAPI PM_openConsole(PM_HWND hwndUser,int device,int xRes,int yRes,int bpp,ibool fullScreen){    /* Not used for DOS */    (void)hwndUser;    (void)device;    (void)xRes;    (void)yRes;    (void)bpp;    (void)fullScreen;    return 0;}int PMAPI PM_getConsoleStateSize(void){    return sizeof(DOS_stateBuf);}void PMAPI PM_saveConsoleState(void *stateBuf,PM_HWND hwndConsole){    RMREGS          regs;    DOS_stateBuf    *sb = stateBuf;    /* Save the old video mode state */    regs.h.ah = 0x0F;    PM_int86(0x10,&regs,&regs);    sb->oldMode = regs.h.al & 0x7F;    sb->old50Lines = false;    if (sb->oldMode == 0x3) {        regs.x.ax = 0x1130;        regs.x.bx = 0;        regs.x.dx = 0;        PM_int86(0x10,&regs,&regs);        sb->old50Lines = (regs.h.dl == 42 || regs.h.dl == 49);        }    (void)hwndConsole;}void PMAPI PM_setSuspendAppCallback(int (_ASMAPIP saveState)(int flags)){    /* Not used for DOS */    (void)saveState;}void PMAPI PM_restoreConsoleState(const void *stateBuf,PM_HWND hwndConsole){    RMREGS              regs;    const DOS_stateBuf  *sb = stateBuf;    /* Retore 50 line mode if set */    if (sb->old50Lines) {        regs.x.ax = 0x1112;        regs.x.bx = 0;        PM_int86(0x10,&regs,&regs);        }    (void)hwndConsole;}void PMAPI PM_closeConsole(PM_HWND hwndConsole){    /* Not used for DOS */    (void)hwndConsole;}void PMAPI PM_setOSCursorLocation(int x,int y){    uchar *_biosPtr = PM_getBIOSPointer();    PM_setByte(_biosPtr+0x50,x);    PM_setByte(_biosPtr+0x51,y);}void PMAPI PM_setOSScreenWidth(int width,int height){    uchar *_biosPtr = PM_getBIOSPointer();    PM_setWord(_biosPtr+0x4A,width);    PM_setWord(_biosPtr+0x4C,width*2);    PM_setByte(_biosPtr+0x84,height-1);    if (height > 25) {        PM_setWord(_biosPtr+0x60,0x0607);        PM_setByte(_biosPtr+0x85,0x08);        }    else {        PM_setWord(_biosPtr+0x60,0x0D0E);        PM_setByte(_biosPtr+0x85,0x016);        }}void * PMAPI PM_mallocShared(long size){    return PM_malloc(size);}void PMAPI PM_freeShared(void *ptr){    PM_free(ptr);}#define GetRMVect(intno,isr)    *(isr) = ((ulong*)rmZeroPtr)[intno]#define SetRMVect(intno,isr)    ((ulong*)rmZeroPtr)[intno] = (isr)ibool PMAPI PM_doBIOSPOST(    ushort axVal,    ulong BIOSPhysAddr,    void *mappedBIOS,    ulong BIOSLen){    static int      firstTime = true;    static uchar    *rmZeroPtr;    long            Current10,Current6D,Current42;    RMREGS          regs;    RMSREGS         sregs;    /* Create a zero memory mapping for us to use */    if (firstTime) {        rmZeroPtr = PM_mapPhysicalAddr(0,0x7FFF,true);        firstTime = false;        }    /* Remap the secondary BIOS to 0xC0000 physical */    if (BIOSPhysAddr != 0xC0000L || BIOSLen > 32768) {        /* DOS cannot virtually remap the BIOS, so we can only work if all         * the secondary controllers are identical, and we then use the         * BIOS on the first controller for all the remaining controllers.         *         * For OS'es that do virtual memory, and remapping of 0xC0000         * physical (perhaps a copy on write mapping) should be all that         * is needed.         */        return false;        }    /* Save current handlers of int 10h and 6Dh */    GetRMVect(0x10,&Current10);    GetRMVect(0x6D,&Current6D);    /* POST the secondary BIOS */    GetRMVect(0x42,&Current42);    SetRMVect(0x10,Current42);  /* Restore int 10h to STD-BIOS */    regs.x.ax = axVal;    PM_callRealMode(0xC000,0x0003,&regs,&sregs);    /* Restore current handlers */    SetRMVect(0x10,Current10);    SetRMVect(0x6D,Current6D);    /* Second the primary BIOS mappin 1:1 for 0xC0000 physical */    if (BIOSPhysAddr != 0xC0000L) {        /* DOS does not support this */        (void)mappedBIOS;        }    return true;}void PMAPI PM_sleep(ulong milliseconds){    ulong           microseconds = milliseconds * 1000L;    LZTimerObject   tm;    LZTimerOnExt(&tm);    while (LZTimerLapExt(&tm) < microseconds)        ;    LZTimerOffExt(&tm);}int PMAPI PM_getCOMPort(int port){    switch (port) {        case 0: return 0x3F8;        case 1: return 0x2F8;        }    return 0;}int PMAPI PM_getLPTPort(int port){    switch (port) {        case 0: return 0x3BC;        case 1: return 0x378;        case 2: return 0x278;        }    return 0;}PM_MODULE PMAPI PM_loadLibrary(    const char *szDLLName){    (void)szDLLName;    return NULL;}void * PMAPI PM_getProcAddress(    PM_MODULE hModule,    const char *szProcName){    (void)hModule;    (void)szProcName;    return NULL;}void PMAPI PM_freeLibrary(    PM_MODULE hModule){    (void)hModule;}int PMAPI PM_setIOPL(    int level){    return level;}/****************************************************************************REMARKS:Internal function to convert the find data to the generic interface.****************************************************************************/static void convertFindData(    PM_findData *findData,    struct find_t *blk){    ulong   dwSize = findData->dwSize;    memset(findData,0,findData->dwSize);    findData->dwSize = dwSize;    if (blk->attrib & _A_RDONLY)        findData->attrib |= PM_FILE_READONLY;    if (blk->attrib & _A_SUBDIR)        findData->attrib |= PM_FILE_DIRECTORY;    if (blk->attrib & _A_ARCH)        findData->attrib |= PM_FILE_ARCHIVE;    if (blk->attrib & _A_HIDDEN)        findData->attrib |= PM_FILE_HIDDEN;    if (blk->attrib & _A_SYSTEM)        findData->attrib |= PM_FILE_SYSTEM;    findData->sizeLo = blk->size;    strncpy(findData->name,blk->name,PM_MAX_PATH);    findData->name[PM_MAX_PATH-1] = 0;}#define FIND_MASK   (_A_RDONLY | _A_ARCH | _A_SUBDIR | _A_HIDDEN | _A_SYSTEM)/****************************************************************************REMARKS:Function to find the first file matching a search criteria in a directory.****************************************************************************/void * PMAPI PM_findFirstFile(    const char *filename,    PM_findData *findData){    struct find_t *blk;    if ((blk = PM_malloc(sizeof(*blk))) == NULL)        return PM_FILE_INVALID;    if (_dos_findfirst((char*)filename,FIND_MASK,blk) == 0) {        convertFindData(findData,blk);        return blk;        }    return PM_FILE_INVALID;}/****************************************************************************REMARKS:Function to find the next file matching a search criteria in a directory.****************************************************************************/ibool PMAPI PM_findNextFile(    void *handle,    PM_findData *findData){    struct find_t *blk = handle;    if (_dos_findnext(blk) == 0) {        convertFindData(findData,blk);        return true;        }    return false;}/****************************************************************************REMARKS:Function to close the find process****************************************************************************/void PMAPI PM_findClose(    void *handle){    PM_free(handle);}/****************************************************************************REMARKS:Function to determine if a drive is a valid drive or not. Under Unix thisfunction will return false for anything except a value of 3 (consideredthe root drive, and equivalent to C: for non-Unix systems). The drivenumbering is:    1   - Drive A:    2   - Drive B:    3   - Drive C:    etc****************************************************************************/ibool PMAPI PM_driveValid(    char drive){    RMREGS  regs;    regs.h.dl = (uchar)(drive - 'A' + 1);    regs.h.ah = 0x36;               // Get disk information service    PM_int86(0x21,&regs,&regs);    return regs.x.ax != 0xFFFF;     // AX = 0xFFFF if disk is invalid}/****************************************************************************REMARKS:Function to get the current working directory for the specififed drive.Under Unix this will always return the current working directory regardlessof what the value of 'drive' is.****************************************************************************/void PMAPI PM_getdcwd(    int drive,    char *dir,    int len){    uint oldDrive,maxDrives;    _dos_getdrive(&oldDrive);    _dos_setdrive(drive,&maxDrives);    getcwd(dir,len);    _dos_setdrive(oldDrive,&maxDrives);}/****************************************************************************REMARKS:Function to change the file attributes for a specific file.****************************************************************************/void PMAPI PM_setFileAttr(    const char *filename,    uint attrib){#if defined(TNT) && defined(_MSC_VER)    DWORD attr = 0;    if (attrib & PM_FILE_READONLY)        attr |= FILE_ATTRIBUTE_READONLY;    if (attrib & PM_FILE_ARCHIVE)        attr |= FILE_ATTRIBUTE_ARCHIVE;    if (attrib & PM_FILE_HIDDEN)        attr |= FILE_ATTRIBUTE_HIDDEN;    if (attrib & PM_FILE_SYSTEM)        attr |= FILE_ATTRIBUTE_SYSTEM;    SetFileAttributes((LPSTR)filename, attr);#else    uint attr = 0;    if (attrib & PM_FILE_READONLY)        attr |= _A_RDONLY;    if (attrib & PM_FILE_ARCHIVE)        attr |= _A_ARCH;    if (attrib & PM_FILE_HIDDEN)        attr |= _A_HIDDEN;    if (attrib & PM_FILE_SYSTEM)        attr |= _A_SYSTEM;    _dos_setfileattr(filename,attr);#endif}/****************************************************************************REMARKS:Function to create a directory.****************************************************************************/ibool PMAPI PM_mkdir(    const char *filename){#ifdef  __GNUC__    return mkdir(filename,S_IRUSR) == 0;#else    return mkdir(filename) == 0;#endif}/****************************************************************************REMARKS:Function to remove a directory.****************************************************************************/ibool PMAPI PM_rmdir(    const char *filename){    return rmdir(filename) == 0;}/*-------------------------------------------------------------------------*/

⌨️ 快捷键说明

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