/* * 致命的な失敗に対する対処ルーチン */ void FatalAssertion(int exp, LPCSTR format, ...) { extern HANDLE PrimaryThreadHandle; extern HANDLE CurrentRunningThreadHandle; if(!exp) { va_list vl; char buffer[1024]; /* エラーが起きた原因を突き止める */ wsprintf(buffer, "Critical assertion fail occured !!\nGetLastError = 0x%08x\n\n", GetLastError()); /* カーネルが動き出していたら... */ if(PrimaryThreadHandle != NULL) { /* カーネルの実行を止める */ dis_int(0); if(CurrentRunningThreadHandle != NULL) SuspendThread(CurrentRunningThreadHandle); hw_timer_terminate(); } /* 警告表示 */ va_start(vl, format); wvsprintf(buffer + lstrlen(buffer), format, vl); MessageBox(PrimaryDialogHandle, buffer, "Assertion Failed", MB_OK|MB_ICONERROR); /* カーネル停止 */ HALQuitRequest(); } }
ER set_clk(unsigned int clk) { BOOL lock; if(clk == 0) clk = TIMER_CLOCK_WINDOWS; hw_timer_terminate(); enter_system_critical_section(&lock); current_timer_clock_unit = clk; leave_system_critiacl_section(&lock); hw_timer_initialize(); return E_OK; }
/* * タイマの停止処理 */ void timer_terminate(VP_INT exinf) { hw_timer_terminate(); }