OSDN Git Service

add MicroBlaze
authorryuz <ryuz@users.sourceforge.jp>
Tue, 5 Apr 2011 12:51:43 +0000 (21:51 +0900)
committerryuz <ryuz@users.sourceforge.jp>
Tue, 5 Apr 2011 12:51:43 +0000 (21:51 +0900)
kernel/build/mb/mb_v8/gcc/Makefile
kernel/source/arch/proc/mb/mb_v8/gcc/kdis_int.S
kernel/source/arch/proc/mb/mb_v8/gcc/kena_int.S
sample/mb/mb_v8/gcc/Makefile
sample/mb/mb_v8/gcc/crt0.S [new file with mode: 0644]
sample/mb/mb_v8/gcc/link.lds [new file with mode: 0644]

index 33e4cb2..15c24e9 100644 (file)
@@ -61,8 +61,8 @@ SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_CC_DIR) $(SRC_IRC_DIR) $(
 
 
 # %jp{オプションフラグ}%en{option flags}
-AFLAGS  = -mcpu=v8.00.a
-CFLAGS  = -mcpu=v8.00.a
+AFLAGS  = -mcpu=v8.00.a -mlittle-endian
+CFLAGS  = -mcpu=v8.00.a -mlittle-endian
 ARFLAGS = 
 
 
index 11a0278..bb60f1a 100644 (file)
                                .align  2
                                .global _kernel_dis_int
 _kernel_dis_int:
+                               mfs             r3, rmsr
+                               andi    r3, r3, -3
+                               mts             rmsr, r3
                                rtsd    r15, 8
-                               msrclr  r3, 0x2000
+                               nop
 
 
 
index bc122f3..3fd9ad9 100644 (file)
                                .align  2
                                .global _kernel_ena_int
 _kernel_ena_int:
+                               mfs             r3, rmsr
+                               ori             r3, r3, 2
+                               mts             rmsr, r3
                                rtsd    r15, 8
-                               msrset  r3, 0x2000
+                               nop
 
 
 /* end of file */
index 46eac38..e940ba6 100644 (file)
@@ -46,7 +46,7 @@ include $(KERNEL_MAKINC_DIR)/common.inc
 
 
 # %jp{リンカスクリプト}%en{linker script}
-LINK_SCRIPT = rom.lds
+LINK_SCRIPT = link.lds
 
 
 # %jp{内蔵RAM}%en{internal RAM}
@@ -62,10 +62,9 @@ SRC_DIRS += . ..
 
 
 # %jp{オプションフラグ}%en{option flags}
-AFLAGS  = -mcpu=v8.00.a
-CFLAGS  = -mcpu=v8.00.a
-LNFLAGS = -mcpu=v8.00.a
-# -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT)
+AFLAGS  = -mcpu=v8.00.a -mlittle-endian
+CFLAGS  = -mcpu=v8.00.a -mlittle-endian
+LNFLAGS = -mcpu=v8.00.a -mlittle-endian -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT)
 
 
 # %jp{コンパイラ依存の設定読込み}%en{compiler dependent definitions}
@@ -88,7 +87,7 @@ TARGET_BIN = $(TARGET).$(EXT_BIN)
 # --------------------------------------
 
 # %jp{アセンブラファイルの追加}%en{assembry sources}
-#ASRCS += ./crt0.S
+ASRCS += ./crt0.S
 
 
 # %jp{C言語ファイルの追加}%en{C sources}
diff --git a/sample/mb/mb_v8/gcc/crt0.S b/sample/mb/mb_v8/gcc/crt0.S
new file mode 100644 (file)
index 0000000..32127bb
--- /dev/null
@@ -0,0 +1,69 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4 Advance                                       */
+/*    Sample program for ADuC7000 series                                    */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2007 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+                               .extern         _kernel_int_isp
+                               .extern         ___data
+                               .extern         ___data_end
+                               .extern         ___bss
+                               .extern         ___bss_end
+                               .extern         main
+
+                               .global         _reset_handler
+
+                               .text
+
+
+
+/************************************************
+  リセットハンドラ
+************************************************/
+                               .align          2
+_reset_handler:        
+                               /* スタック設定 */
+                               lwi             r1, r0, _kernel_int_isp
+                               
+                               addik   r3, r0, ___data
+                               addik   r4, r0, ___data_end
+                               addik   r5, r0, ___data_ro
+                               
+                               /* DATA領域のコピー */
+                               cmpu    r18, r4, r3
+                               bgei    r18, data_loop_end
+data_loop:             
+                               lwi             r6, r5, 0
+                               swi             r6, r3, 0
+                               addik   r3, r3, 4
+                               cmpu    r18, r4, r3
+                               bltid   r18, data_loop
+                               addik   r5, r5, 4
+data_loop_end:
+
+                               /* BSS領域の初期化 */
+                               lwi             r3, r0, ___bss
+                               lwi             r4, r0, ___bss_end
+                               cmpu    r18,r4, r3
+                               bgei    r18, bss_loop_end
+bss_loop:
+                               swi             r0, r3, 0
+                               addik   r3, r3, 4
+                               cmpu    r18, r4, r3
+                               blti    r18, bss_loop
+bss_loop_end:
+                               
+                               
+                               /* main関数の呼び出し */
+                               brlid   r15, main
+                               nop
+                               
+exit_loop:
+                               bri             exit_loop
+
+
+
+/* end of file */
diff --git a/sample/mb/mb_v8/gcc/link.lds b/sample/mb/mb_v8/gcc/link.lds
new file mode 100644 (file)
index 0000000..edd126e
--- /dev/null
@@ -0,0 +1,53 @@
+ENTRY(_reset_handler)
+
+MEMORY
+{
+       vector : o = 0x00000000, l = 0x00000050
+       ro     : o = 0x00000100, l = 0x00007f00
+       rw     : o = 0x00008000, l = 0x00008000
+}
+
+SECTIONS
+{
+       .vector :
+       {
+               ___vector = . ; 
+               */vectors.o(.text)
+               FILL(0xff)
+               ___vector_end = . ; 
+       } > vector
+       .text :
+       {
+                ___text = . ; 
+               *(.text)
+               *(.strings)
+               *(.rodata*)
+               *(.glue*)
+                ___text_end = . ; 
+       } > ro
+       .tors :
+       {
+               . = ALIGN(4);
+               ___ctors = . ;
+               *(.ctors)
+               ___ctors_end = . ;
+               ___dtors = . ;
+               *(.dtors)
+               ___dtors_end = . ;
+       } > ro
+       data : AT (ADDR(.tors) + SIZEOF(.tors))
+       {
+           ___data_ro = ADDR(.tors) + SIZEOF(.tors);
+               ___data = . ;
+               *(.data)
+               ___data_end = . ;
+       } > rw
+       .bss :
+       {
+               ___bss = . ;
+               *(.bss)
+               *(COMMON)
+               ___bss_end = . ;  
+       }  >rw
+}
+