#include "application/example/hello/hello.h"
#include "boot.h"
#include "ostimer.h"
-#include "uart.h"
+#if 0
+
long g_SystemHeap[128 * 1024 / sizeof(long)];
+#define SYSTEM_HEAP_ADDR ((void *)g_SystemHeap)
+#define SYSTEM_HEAP_SIZE sizeof(g_SystemHeap)
+
+#else
+
+#define SYSTEM_HEAP_ADDR ((void *)0x00200000)
+#define SYSTEM_HEAP_SIZE 0x00100000
+
+#endif
+
+
+extern SYSTIM_CPUTIME SysTim_TimeCounter; /* デフォルトのタイマカウンタ */
+
int Boot_Process(VPARAM Param);
/* システム初期化 */
memset(&SysInf, 0, sizeof(SysInf));
- SysInf.pSysMemBase = g_SystemHeap;
- SysInf.SysMemSize = sizeof(g_SystemHeap);
+ SysInf.pSysMemBase = SYSTEM_HEAP_ADDR;
+ SysInf.SysMemSize = SYSTEM_HEAP_SIZE;
SysInf.SysMemAlign = 8;
SysInf.pIoMemBase = NULL;
SysInf.SystemStackSize = 2048;
Command_AddCommand("hello", Hello_Main);
-
/*************************/
/* 起動メッセージ */
/*************************/
# ----------------------------------------------------------------------------
# Hyper Operating System V4 Advance
#
-# Copyright (C) 1998-2007 by Project HOS
+# Copyright (C) 1998-2008 by Project HOS
# http://sourceforge.jp/projects/hos/
# ----------------------------------------------------------------------------
SysInt_Clear(INTNO_TIMER0);
/* %jp{タイムティック供給} */
- SysTim_Signal(1000000); /* 1ms */
+ SysTim_Signal(1000000); /* 1ms = 1,000,000 ns */
}
+/** システム時刻をナノ秒に換算(システム用) */
+unsigned long SysTim_SysTimeToNanosecond(SYSTIM_SYSTIME SysTime)
+{
+ return (unsigned long)(SysTime % 1000000000);
+}
+
+/* システム時刻を秒に換算(システム用) */
+unsigned long SysTim_SysTimeToSecond(SYSTIM_SYSTIME SysTime)
+{
+ return (unsigned long)(SysTime / 1000000000);
+}
+
+
+
+
+
/* end of file */
+
/* %jp{カーネル独自の設定}%en{kernel} */
-KERNEL_HEP_MEM(65536, NULL);
+/* KERNEL_HEP_MEM(65536, NULL); */
+KERNEL_HEP_MEM(0x100000, 0x100000);
KERNEL_INT_STK(2048, NULL);
KERNEL_SYS_STK(2048, NULL);
KERNEL_MAX_TSKID(32);
/* システム時刻取得 */
SYSTIM_SYSTIME SysTim_GetSystemTime(void)
{
-/*
- SYSTIM tim;
- get_tim(&tim);
- return tim;
-*/
return SysTim_TimeCounter;
}
mfc0 $10, $14 /* EPC */
sw $8, 72($sp)
sw $9, 76($sp)
+ la $26, _kernel_ictxcb
+ lbu $27, 0($26)
sw $10, 80($sp)
- jal _kernel_sta_inh /* %jp{割込み開始処理} */
- sw $10, 76($sp)
+ /* %jp{多重割込み判定} */
+ bne $0, $27, multiple_int
+ addiu $27, 1
+ sb $27, 0($26)
+
+ /* %jp{スタック入れ替え} */
+ move $27, $sp
+ lw $sp, 4($26)
+ nop
+ add $sp, -4
+ sw $27, 0($sp)
+ /* %jp{割込み開始処理} */
+ jal _kernel_sta_inh
+ sw $10, 76($sp)
+ /* %jp{割込みハンドラ実行} */
la $4, 0
- jal _kernel_exe_inh /* %jp{割込みハンドラ実行} */
+ jal _kernel_exe_inh
nop
+ /* %jp{スタック復帰} */
+ lw $sp, 0($sp)
+ la $26, _kernel_ictxcb
+ sb $0, 0($26)
+
- jal _kernel_end_inh /* %jp{割込み終了処理} */
+ /* %jp{割込み終了処理} */
+ jal _kernel_end_inh
nop
+ret_exc_hdr:
mfc0 $26, $12 /* STATUS */
ori $26, $26, 0x04
mtc0 $26, $12
addiu $sp, 84
jr $26
rfe
+
+
+multiple_int:
+ sb $27, 0($26)
+
+ /* %jp{割込みハンドラ実行} */
+ la $4, 0
+ jal _kernel_exe_inh
+ nop
+
+ j ret_exc_hdr
.end _kernel_exc_hdr
.PHONY : all
all: kernel_make makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) $(TARGET_BIN)
+.PHONY : run
+run: $(TARGET_BIN)
+ jelly_loader -r $(TARGET_BIN)
+
# %jp{クリーン}%en{clean}
.PHONY : clean
clean: makeexe_clean
/** %jp{メイン関数} */
int main()
{
-/* Uart_PutString("---- start ----\r\n"); */
-
-
/* %jp{カーネルの動作開始} */
vsta_knl();