oemboot.c
来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C语言 代码 · 共 125 行
C
125 行
/*
Copyright(c) 1998,1999 SIC/Hitachi,Ltd.
Module Name:
OEMBOOT.C
Revision History:
26th April 1999 Released
25th June 1999 Modified for Controlling Eboot.bin size
*/
#include <windows.h>
#include <nkintr.h>
#include <memory.h>
#include "rev.h"
#include "shx.h"
#include "s1.h"
#include "drv_glob.h"
// include debug serial support from hal
#define BOOT_LOADER // To avoid including debug ethernet support
#include "..\..\kernel\hal\shx\debug.c"
// include parallel port support from hal
volatile unsigned int *PtrCurMSec; /* current millisecond counter */
typedef volatile DWORD *PVDWORD; /* pointer to a volatile dword */
unsigned int CurMSec_dummy=0; // dummy curmsec variable
// kernel is not running, but some of the included hal functions
// rely on curmsec for timeouts.
#define REG(base,off) (*(volatile unsigned int*)(base+off))
const char Dummy[0x100000] = {0};
/*
* Initialize the display HW. Assume we are in an unknown state, power the
* display down, initialize the frame buffer, and power back up. Display
* ALDER bitmap image while kernel is booting.
*/
static void
InitDisplay()
{
}
//***************************************************************************
// PowerOnSelfTest
//
//
//***************************************************************************
unsigned int PowerOnSelfTest(void) {
EdbgOutputDebugString("Microsoft Windows CE Ethernet Bootloader %d.%d\n",
EBOOT_VERSION_MAJOR,EBOOT_VERSION_MINOR);
EdbgOutputDebugString("Copyright(c) 1998,1999 SIC/Hitachi,Ltd.\n");
PtrCurMSec=&CurMSec_dummy; // setup pointer to curmsec so hal functions will work
return 1;
}
#define BCD(X) (((X)%10) | (((X)/10)<<4))
#define DEC(X) (((X)&0xf) + (((X)>>4)*10))
#define BCD2(X) ( (((X)/1000)<<12) | (((X%1000)/100)<<8) | (((X%100)/10)<<4) | ((X)%10) )
#define DEC2(X) (((X)&0xf) + ((((X)&0x00f0)>>4)*10) + ((((X)&0x0f00)>>8)*100) + ((((X)&0xf000)>>12)*1000) )
/*
@func BOOL | OEMGetRealTime | Get the time from the realtime clock
@rdesc none
@comm OEMGetRealTime is called by the Kernel to get the time from the
real time clock. This function can be called reentrantly, and
thus must protect the hardware from multiple accesses.
*/
BOOL OEMGetRealTime(
LPSYSTEMTIME lpst // @parm pointer to memory to return current time
)
{
WRITE_REGISTER_UCHAR(RTC_RCR1, READ_REGISTER_UCHAR(RTC_RCR1) & (~RTC_RCR1_CIE)); // clear CIE flag
do {
WRITE_REGISTER_UCHAR(RTC_RCR1, READ_REGISTER_UCHAR(RTC_RCR1) & (~RTC_RCR1_CF)); // clear carry flag
lpst->wMilliseconds = 0;
lpst->wSecond = DEC(READ_REGISTER_UCHAR(RTC_RSECCNT));
lpst->wMinute = DEC(READ_REGISTER_UCHAR(RTC_RMINCNT));
lpst->wHour = DEC(READ_REGISTER_UCHAR(RTC_RHRCNT));
lpst->wDayOfWeek = READ_REGISTER_UCHAR(RTC_RWKCNT);
lpst->wDay = DEC(READ_REGISTER_UCHAR(RTC_RDAYCNT));
lpst->wMonth = DEC(READ_REGISTER_UCHAR(RTC_RMONCNT));
lpst->wYear = DEC2(READ_REGISTER_USHORT(RTC_RYRCNT));
} while (READ_REGISTER_UCHAR(RTC_RCR1) & RTC_RCR1_CF); // carry occurred
return TRUE;
}
/*
@func BOOL | OEMSetRealTime | Set the realtime clock
@rdesc none
@comm OEMSetRealTime is called by the Kernel to set the real time clock.
This function can be called reentrantly, and thus must protect the
hardware from multiple accesses.
*/
BOOL OEMSetRealTime(
LPSYSTEMTIME lpst // @parm pointer to new time
)
{
WRITE_REGISTER_UCHAR(RTC_RCR2, READ_REGISTER_UCHAR(RTC_RCR2) & (~RTC_RCR2_START)); // stop clock
WRITE_REGISTER_UCHAR(RTC_RCR2, READ_REGISTER_UCHAR(RTC_RCR2) | RTC_RCR2_RESET); // reset clock
WRITE_REGISTER_UCHAR(RTC_RSECCNT, BCD(lpst->wSecond));
WRITE_REGISTER_UCHAR(RTC_RMINCNT, BCD(lpst->wMinute));
WRITE_REGISTER_UCHAR(RTC_RHRCNT, BCD(lpst->wHour));
WRITE_REGISTER_UCHAR(RTC_RWKCNT, (BYTE)lpst->wDayOfWeek);
WRITE_REGISTER_UCHAR(RTC_RDAYCNT, BCD(lpst->wDay));
WRITE_REGISTER_UCHAR(RTC_RMONCNT, BCD(lpst->wMonth));
WRITE_REGISTER_USHORT(RTC_RYRCNT, BCD2(lpst->wYear));
WRITE_REGISTER_UCHAR(RTC_RCR2, READ_REGISTER_UCHAR(RTC_RCR2) | RTC_RCR2_START); // start clock
return TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?