diff -ur eota/boot/2nd/Makefile eota-cx64/boot/2nd/Makefile
--- eota/boot/2nd/Makefile	2001-12-05 18:57:13.000000000 +0900
+++ eota-cx64/boot/2nd/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -7,6 +7,9 @@
 GSTRIP = /usr/bin/strip
 RM = /bin/rm
 
+%.o: %.S
+	$(CC) $(CFLAGS) -c $< -o $@
+
 CSRC=main.c console.c keyboard.c memory.c \
      date.c idt.c cinterrupt.c fd.c \
      misc.c dma.c page.c version.c lib.c ide.c \
@@ -30,9 +33,9 @@
 ITRON = ../../kernel/ITRON
 INCPATH = -I. -I$(COMMON) -I$(ITRON)
 
-CFLAGS=-c -m386 -msoft-float -fno-builtin -Wall -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC $(HDBOOT) $(INCPATH)
+CFLAGS=-c -m32 -msoft-float -fno-builtin -fno-stack-protector -Wall -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC $(HDBOOT) $(INCPATH)
 #CFLAGS=-c -m386 -fno-builtin -msoft-float -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC
-LDOPT32 = -n -Ttext=$(START_ADDR) -static -e start32
+LDOPT32 = -n -Ttext=$(START_ADDR) -static -melf_i386 -e start32
 
 ########################################################################
 #
@@ -75,10 +78,10 @@
 #
 
 build_boot2: build_boot2.c
-	$(CC) -D__LINUX__ -DGCC_USE -o build_boot2 build_boot2.c
+	$(CC) -m32 -D__LINUX__ -DGCC_USE -o build_boot2 build_boot2.c
 
 build_boot2_elf: build_boot2_elf.c
-	$(CC) -D__LINUX__ -DGCC_USE -o build_boot2_elf build_boot2_elf.c
+	$(CC) -m32 -D__LINUX__ -DGCC_USE -o build_boot2_elf build_boot2_elf.c
 
 
 include DEPEND
diff -ur eota/boot/2nd/lib.c eota-cx64/boot/2nd/lib.c
--- eota/boot/2nd/lib.c	1999-03-31 16:17:30.000000000 +0900
+++ eota-cx64/boot/2nd/lib.c	2017-06-16 11:05:09.000000000 +0900
@@ -62,7 +62,8 @@
 static void	write_digit2 ();
 
 
-#define INC(x,type)	(((type *)x) += 1)
+//#define INC(x,type)	(((type *)x) += 1)
+#define INC(x,type)	(x = ((unsigned int) x) + sizeof(type))
 
 void
 boot_printf (char *fmt, ...)
diff -ur eota/boot/2nd/memory.c eota-cx64/boot/2nd/memory.c
--- eota/boot/2nd/memory.c	2001-07-07 22:19:23.000000000 +0900
+++ eota-cx64/boot/2nd/memory.c	2017-06-16 11:05:09.000000000 +0900
@@ -125,7 +125,7 @@
   enable_A20 ();
 #endif
 #endif
-  for (p = (int *)0x100000; (int)p < 0xf000000; (int)p += 0x100000)
+  for (p = (int *)0x100000; (int)p < 0xf000000; p = ((unsigned int) p) + 0x100000)
     {
       *p = 0;
       *p = 0xAA;
diff -ur eota/boot/tool/Makefile eota-cx64/boot/tool/Makefile
--- eota/boot/tool/Makefile	1998-06-12 01:03:28.000000000 +0900
+++ eota-cx64/boot/tool/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -1,4 +1,4 @@
-
+CFLAGS = -m32
 
 
 TARGET=writeboot read_partition getgeo
diff -ur eota/boot/tool/read_partition.c eota-cx64/boot/tool/read_partition.c
--- eota/boot/tool/read_partition.c	1998-06-12 01:05:58.000000000 +0900
+++ eota-cx64/boot/tool/read_partition.c	2017-06-16 11:05:09.000000000 +0900
@@ -68,7 +68,7 @@
   printf ("device: %s\n", av[1]);
   printf ("geometry: C/H/S = %d/%d/%d\n", geo.cylinders, geo.heads, geo.sectors);
 
-  (unsigned char *)par = &(buf[0x1be]);
+  par = (struct hd_partition *) &(buf[0x1be]);
   for (i = 0; i < 4; i++)
     {
       c = par->begin[2] | ((par->begin[1] & 0xC0) << 2);
diff -ur eota/boot/tool/writeboot.c eota-cx64/boot/tool/writeboot.c
--- eota/boot/tool/writeboot.c	1998-06-12 01:06:46.000000000 +0900
+++ eota-cx64/boot/tool/writeboot.c	2017-06-16 11:05:09.000000000 +0900
@@ -265,7 +265,7 @@
       exit (1);
     }
 
-  (unsigned char *)cyl = &buf[HDGEO_OFFSET];
+  cyl = (unsigned short *) &buf[HDGEO_OFFSET];
   head = &buf[HDGEO_OFFSET + 2];
   sec = &buf[HDGEO_OFFSET + 3];
 
@@ -282,7 +282,7 @@
   *sec = info->geo_sector + 1;
 
 
-  (unsigned char *)cyl = &buf[HDPART_OFFSET];
+  cyl = (unsigned short *) &buf[HDPART_OFFSET];
   head = &buf[HDPART_OFFSET + 2];
   sec = &buf[HDPART_OFFSET + 3];
 
diff -ur eota/kernel/BTRON/device/console/Makefile eota-cx64/kernel/BTRON/device/console/Makefile
--- eota/kernel/BTRON/device/console/Makefile	2001-12-28 17:01:59.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/console/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -8,7 +8,7 @@
 CPP=/lib/cpp
 ROOT=../../../ITRON
 #CFLAGS= -b i486-linuxaout -I. -I$(ROOT) -I../../kernlib -fno-builtin $(IDENT)
-CFLAGS= -Wall -I. -I$(ROOT) -I$(ROOT)/kernlib $(IDENT)
+CFLAGS= -m32 -fno-stack-protector -Wall -I. -I$(ROOT) -I$(ROOT)/kernlib $(IDENT)
 OFLAGS= -O2 -fno-builtin $(CFLAGS)
 CC=gcc
 #AS=/usr/local/bin/as
@@ -33,7 +33,7 @@
 all: console
 
 console: $(OBJS) $(SRCS) Makefile
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags ../*/*.[hcs]
diff -ur eota/kernel/BTRON/device/console/console.h eota-cx64/kernel/BTRON/device/console/console.h
--- eota/kernel/BTRON/device/console/console.h	2000-07-25 17:18:38.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/console/console.h	2017-06-16 11:04:57.000000000 +0900
@@ -7,6 +7,8 @@
 
 (C) B-Free Project.
 
+(C) 2003, Tomohide Naniwa
+
 */
 /* $Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/BTRON/device/console/console.h,v 1.16 2000/02/27 15:25:16 naniwa Exp $ */
 
@@ -116,7 +118,7 @@
 #define __CONSOLE_H__	1
 
 
-#include "../../../ITRON/kernlib/device.h"
+#include <kernlib/device.h>
 
 /*  定数の設定
  */
@@ -153,12 +155,12 @@
 #define GR_FILLELLIPSE	0x0000800A
 #define GR_SCROLL       0x0000800B
 
-#define NORM_ATTR	0x1e		/* 通常文字 			*/
+#define NORM_ATTR	0x1e		/* 通常文字 */
 
 #define SCROLL_UP       0
 #define SCROLL_DOWN     1
 
-#define TEXT_VRAM_ADDR	0x800B8000	/* TEXT VRAM のアドレス		*/
+#define TEXT_VRAM_ADDR	0x800B8000	/* TEXT VRAM のアドレス */
 #define TEXT_VRAM_SIZE	2000
 
 #define GDC_ADDR	0x03d4
@@ -168,9 +170,9 @@
 #define GDC_COMMAND	0x03d5
 
 #define	VGA_OVERWRITE			0x00
-#define	VGA_AND				0x10
-#define	VGA_OR				0x20
-#define	VGA_XOR				0x30
+#define	VGA_AND				0x08
+#define	VGA_OR				0x10
+#define	VGA_XOR				0x18
 
 struct gr_point_t
 {
diff -ur eota/kernel/BTRON/device/fd765a/Makefile eota-cx64/kernel/BTRON/device/fd765a/Makefile
--- eota/kernel/BTRON/device/fd765a/Makefile	2002-01-13 13:55:41.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/fd765a/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -10,7 +10,7 @@
 CPP=/lib/cpp
 ROOT=../../../ITRON
 #CFLAGS=-b i486-linuxaout -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I../../../ITRON/kernlib -fno-builtin $(IDENT)
-CFLAGS=-O -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I../../../ITRON/kernlib -fno-builtin $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I../../../ITRON/kernlib -fno-builtin $(IDENT)
 CC=gcc
 #AS=/usr/local/bin/as
 AS=/usr/bin/as
@@ -33,7 +33,7 @@
 all: fd765a
 
 fd765a: $(OBJS) $(SRCS) Makefile
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags ../*/*.[hcs]
diff -ur eota/kernel/BTRON/device/fd765a/fd.c eota-cx64/kernel/BTRON/device/fd765a/fd.c
--- eota/kernel/BTRON/device/fd765a/fd.c	2001-12-25 17:05:45.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/fd765a/fd.c	2017-06-21 20:37:08.069590209 +0900
@@ -165,7 +165,7 @@
  *
  */
 struct spec *fd_data[MAXFD];
-W intr_flag;
+W volatile intr_flag;
 ID waitflag;
 
 
diff -ur eota/kernel/BTRON/device/fd765a/fd.h eota-cx64/kernel/BTRON/device/fd765a/fd.h
--- eota/kernel/BTRON/device/fd765a/fd.h	2001-12-25 17:05:45.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/fd765a/fd.h	2017-06-21 20:37:08.069590209 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* $Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/BTRON/device/fd765a/fd.h,v 1.6 2000/02/06 09:05:07 naniwa Exp $ */
@@ -305,14 +305,14 @@
 extern W    	control_fd();	/* コントロール		*/
 extern W    	change_fd();	/* アクセスモード切り替え */
 extern W    	status_fd();	/* ステータス		*/
-extern W	intr_flag;
+extern volatile W	intr_flag;
 extern struct spec	*fd_data[];
 extern ID	waitflag;
 
 /* fdc.c */
 extern void    	intr_fd();	/* 割り込みハンドラ	*/
 extern void	reset_intr_mask ();
-extern W	wait_int (W *flag);
+extern W	wait_int (volatile W *flag);
 extern W	write_fdc (UW value);
 extern W	read_fdc (void);
 extern W	ready_check (void);
diff -ur eota/kernel/BTRON/device/fd765a/fdc.c eota-cx64/kernel/BTRON/device/fd765a/fdc.c
--- eota/kernel/BTRON/device/fd765a/fdc.c	2001-12-25 21:41:37.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/fd765a/fdc.c	2017-06-21 20:37:08.069590209 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 
@@ -33,7 +33,7 @@
 static int motor_goal = 0;
 static int motor_status = 0;
 
-extern W wait_int_with_timeout(W * flag, W timeout);
+extern W wait_int_with_timeout(volatile W * flag, W timeout);
 
 /*
  *	FDC を制御するための LOW-LEVEL な関数
@@ -721,7 +721,7 @@
  * 割り込みハンドラと同期をとるための関数
  *
  */
-W wait_int(W * flag)
+W wait_int(volatile W * flag)
 {
     while (*flag == FALSE);
     dis_int();
@@ -735,7 +735,7 @@
  * 割り込みハンドラと同期をとるための関数
  *
  */
-W wait_int_with_timeout(W * flag, W timeout)
+W wait_int_with_timeout(volatile W * flag, W timeout)
 {
     W i;
 
diff -ur eota/kernel/BTRON/device/ide/Makefile eota-cx64/kernel/BTRON/device/ide/Makefile
--- eota/kernel/BTRON/device/ide/Makefile	2002-01-13 13:28:48.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/ide/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -8,7 +8,7 @@
 CPP=/lib/cpp
 ROOT=../../../ITRON
 #CFLAGS=-b i486-linuxaout -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I../../kernlib -fno-builtin $(IDENT)
-CFLAGS=-O2 -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I$(ROOT)/kernlib -fno-builtin $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I$(ROOT)/kernlib -fno-builtin $(IDENT)
 CC=gcc
 AS=/usr/local/bin/as
 KP=kp -input-code euc
@@ -31,7 +31,7 @@
 all: ide
 
 ide: $(OBJS) $(SRCS) Makefile
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags *.[hcs]
diff -ur eota/kernel/BTRON/device/ide/misc.c eota-cx64/kernel/BTRON/device/ide/misc.c
--- eota/kernel/BTRON/device/ide/misc.c	2001-05-20 19:00:53.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/ide/misc.c	2017-06-16 11:05:09.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* @(#)$Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/BTRON/device/ide/misc.c,v 1.2 1997/07/06 11:47:57 night Exp $ */
@@ -80,7 +80,8 @@
     }
 }
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+#define INC(p,x)	(p = (VP *) (((UW)p) + sizeof (x)))
 
 /*
  *
@@ -111,15 +112,15 @@
 
 	    case 'd':
 		if ((W) * ap < 0) {
-		    ((W) * ap) = -((W) * ap);
+		    *((W *) ap) = -(*((W *) ap));
 		    putc('-', log_port);
 		}
-		print_digit((W) * ap, 10);
+		print_digit(*((W *) ap), 10);
 		INC(ap, W);
 		break;
 
 	    case 'x':
-		print_digit((UW) * ap, 16);
+	        print_digit(*((UW *)ap), 16);
 		INC(ap, W);
 		break;
 
diff -ur eota/kernel/BTRON/device/keyboard/Makefile eota-cx64/kernel/BTRON/device/keyboard/Makefile
--- eota/kernel/BTRON/device/keyboard/Makefile	2003-04-05 16:26:53.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/keyboard/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -10,7 +10,7 @@
 COMMON=../../../../include
 #CFLAGS=-I. -I$(ROOT) -I$(ROOT)/i386 -I$(ROOT)/h -b i486-linuxaout -I../../kernlib \
 #       -fno-builtin $(IDENT)
-CFLAGS=-O -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/h -I../../kernlib -I$(COMMON) \
+CFLAGS=-m32 -fno-stack-protector -O -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/h -I../../kernlib -I$(COMMON) \
        -fno-builtin $(IDENT)
 CC=gcc
 #AS=/usr/local/bin/as
@@ -34,7 +34,7 @@
 all: keyboard
 
 keyboard: $(OBJS) Makefile
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags ../*/*.[hcs]
diff -ur eota/kernel/BTRON/device/keyboard/interrupt.c eota-cx64/kernel/BTRON/device/keyboard/interrupt.c
--- eota/kernel/BTRON/device/keyboard/interrupt.c	2003-04-05 16:26:19.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/keyboard/interrupt.c	2017-06-17 18:58:49.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2003, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* @(#)$Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/BTRON/device/keyboard/interrupt.c,v 1.14 2000/04/03 14:30:03 naniwa Exp $ */
@@ -120,8 +120,8 @@
 
 W keyboard_select = K_101US;
 
-UW shiftkey_code;
-UW capskey;
+volatile UW shiftkey_code;
+volatile UW capskey;
 
 static void keyboard_interrupt();
 
@@ -142,6 +142,9 @@
 	dbg_printf("keyboard: %d\n", errno);
     }
     shiftkey_code = NORMAL;
+
+    /* This is not good place for initialization. */
+    keyboard_select = K_101US;
 }
 
 static W get_keycode(int cont, int num)
diff -ur eota/kernel/BTRON/device/keyboard/keyboard.h eota-cx64/kernel/BTRON/device/keyboard/keyboard.h
--- eota/kernel/BTRON/device/keyboard/keyboard.h	2002-04-28 16:28:39.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/keyboard/keyboard.h	2017-06-17 19:00:23.000000000 +0900
@@ -108,7 +108,7 @@
 
 extern ID	recvport;
 extern W	initialized;
-extern ID	waitflag;	/* キーボードからキー入力を待つ時に */
+extern volatile ID	waitflag;	/* キーボードからキー入力を待つ時に */
 				/* 使用するイベントフラグの ID */
 extern W	driver_mode;
 extern W	send_msg;
diff -ur eota/kernel/BTRON/device/keyboard/main.c eota-cx64/kernel/BTRON/device/keyboard/main.c
--- eota/kernel/BTRON/device/keyboard/main.c	2003-04-05 16:26:03.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/keyboard/main.c	2017-06-17 19:07:13.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2003, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* @(#)$Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/BTRON/device/keyboard/main.c,v 1.7 2000/04/03 14:30:05 naniwa Exp $ */
@@ -82,7 +82,7 @@
  */
 ID recvport;
 W initialized = 0;
-ID waitflag;			/* キーボードからキー入力を待つ時に */
+volatile ID waitflag;			/* キーボードからキー入力を待つ時に */
 				/* 使用するイベントフラグの ID */
 W driver_mode;
 ID wconsole = 0, local_recv = 0;
diff -ur eota/kernel/BTRON/device/psaux/Makefile eota-cx64/kernel/BTRON/device/psaux/Makefile
--- eota/kernel/BTRON/device/psaux/Makefile	2002-01-13 13:29:40.000000000 +0900
+++ eota-cx64/kernel/BTRON/device/psaux/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -4,7 +4,7 @@
 CPP=/lib/cpp
 ROOT=../../../ITRON
 
-CFLAGS=-O2 -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I$(ROOT)/kernlib -fno-builtin $(IDENT) $(DEBUG)
+CFLAGS=-m32 -fno-stack-protector -O2 -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I$(ROOT)/kernlib -fno-builtin $(IDENT) $(DEBUG)
 
 CC=gcc
 LIBS=$(ROOT)/kernlib/libkernel.a
@@ -23,7 +23,7 @@
 all: psaux
 
 psaux: $(OBJS) 
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 clean:
 	rm -f $(OBJS) psaux
diff -ur eota/kernel/BTRON/init/Makefile eota-cx64/kernel/BTRON/init/Makefile
--- eota/kernel/BTRON/init/Makefile	2003-04-15 23:22:37.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -16,7 +16,7 @@
 #PATH=.:/bin:/usr/bin:../../tool/kp
 CPP=/lib/cpp
 ROOT=../..
-CFLAGS=-O2 -fno-builtin -Wall -I. -I$(ROOT) -I$(ROOT)/ITRON -I../ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -Wall -I. -I$(ROOT) -I$(ROOT)/ITRON -I../ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 $(IDENT)
 CC=gcc
 KP=kp -input-code euc
 MKDEPEND=$(CC) -M
@@ -47,7 +47,7 @@
 	cd ../lib/frtm; ${MAKE}
 	cd lib; ${MAKE}
 	cd libCmd; ${MAKE}
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS) $(KERNLIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS) $(KERNLIBS)
 
 main.s: main.c
 	cc $(CFLAGS) -S main.c
diff -ur eota/kernel/BTRON/init/dosfs/Makefile eota-cx64/kernel/BTRON/init/dosfs/Makefile
--- eota/kernel/BTRON/init/dosfs/Makefile	1998-12-14 11:26:59.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/dosfs/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -8,7 +8,7 @@
 
 #CFLAGS=-g -DDEBUG
 #CFLAGS=-b i486-linuxaout -m386 -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
-CFLAGS=-Wall -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
+CFLAGS=-m32 -fno-stack-protector -Wall -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
 
 
 all: libdosfs.a
diff -ur eota/kernel/BTRON/init/lib/Makefile eota-cx64/kernel/BTRON/init/lib/Makefile
--- eota/kernel/BTRON/init/lib/Makefile	2002-02-17 18:51:17.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/lib/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -8,7 +8,7 @@
 CPP=/lib/cpp
 ROOT=../../..
 #CFLAGS=-b i486-linuxaout -m386 -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin
-CFLAGS=-O2 -DDEBUG -I -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/h -fno-builtin
+CFLAGS=-m32 -fno-stack-protector -O2 -DDEBUG -I -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/h -fno-builtin
 CC=gcc
 KP=kp -input-code euc
 MKDEPEND=$(CC) -M
diff -ur eota/kernel/BTRON/init/lib/stdlib.c eota-cx64/kernel/BTRON/init/lib/stdlib.c
--- eota/kernel/BTRON/init/lib/stdlib.c	2001-02-11 12:47:56.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/lib/stdlib.c	2017-06-16 11:05:09.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 
@@ -57,7 +57,8 @@
     }
 }
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
+#define INC(p,x)	(p = (VP *) ((W)p + sizeof(x)))
 
 /*
  *
@@ -100,20 +101,20 @@
 
 	    case 'd':
 		if ((W) * ap < 0) {
-		    ((W) * ap) = 0 - ((W) * ap);
+		    *((W *) ap) = 0 - *((W *) ap);
 		    putc('-', port);
 		}
-		print_digit(port, (W) * ap, 10);
+		print_digit(port, *((W *) ap), 10);
 		INC(ap, W);
 		break;
 
 	    case 'x':
-		print_digit(port, (W) * ap, 16);
+	        print_digit(port, *((UW *) ap), 16);
 		INC(ap, W);
 		break;
 
 	    case 'o':
-	      print_digit (port, (W)*ap, 8);
+	      print_digit (port, *((UW *)ap), 8);
 	      INC (ap, W);
 	      break;
 
diff -ur eota/kernel/BTRON/init/libCmd/Makefile eota-cx64/kernel/BTRON/init/libCmd/Makefile
--- eota/kernel/BTRON/init/libCmd/Makefile	2002-02-17 19:05:55.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/libCmd/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -3,7 +3,7 @@
 # Makefile for init.
 #
 ROOT = ../../..
-CFLAGS = -O2 -fno-builtin -Wall -I.. -I../lib -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386
+CFLAGS = -m32 -fno-stack-protector -O2 -fno-builtin -Wall -I.. -I../lib -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386
 CXXFLAGS = $(CFLAGS)
 #CFLAGS = -static -g -I. -I./_include -I$(ROOT) -I../../kernlib -I$(ROOT)/h -I$(ROOT)/i386 -D_DEBUG_ON_UNIX
 
diff -ur eota/kernel/BTRON/init/main.c eota-cx64/kernel/BTRON/init/main.c
--- eota/kernel/BTRON/init/main.c	2003-04-19 21:17:57.000000000 +0900
+++ eota-cx64/kernel/BTRON/init/main.c	2017-06-21 20:37:51.768211039 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2000-2003, Tomohide Naniwa
+(C) 2000-2017, Tomohide Naniwa
 
 */
 /* $Id: main.c,v 1.15 2000/01/15 15:17:02 naniwa Exp $ */
@@ -100,7 +100,7 @@
 #include "h/lowlib.h"
 #include "posix_if.h"
 #include "lib/init-stdlib.h"
-#define RELID "2003/4/19-1"
+#define RELID "2017/6/21-1"
 
 
 /*
diff -ur eota/kernel/BTRON/lib/frtm/Makefile eota-cx64/kernel/BTRON/lib/frtm/Makefile
--- eota/kernel/BTRON/lib/frtm/Makefile	2002-01-13 13:36:55.000000000 +0900
+++ eota-cx64/kernel/BTRON/lib/frtm/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -16,7 +16,7 @@
 #PATH=.:/bin:/usr/bin:../../tool/kp
 CPP=/lib/cpp
 ROOT=../../..
-CFLAGS=-O2 -fno-builtin -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/POSIX/libc/others $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/POSIX/libc/others $(IDENT)
 CC=gcc
 KP=kp -input-code euc
 MKDEPEND=$(CC) -M
diff -ur eota/kernel/BTRON/make/Makefile eota-cx64/kernel/BTRON/make/Makefile
--- eota/kernel/BTRON/make/Makefile	2003-04-15 23:22:47.000000000 +0900
+++ eota-cx64/kernel/BTRON/make/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -6,7 +6,7 @@
 INC=../../ITRON/h
 BUILDSRC=build.c $(INC)/itron_module.h
 #CFLAGS=$(DEBUG) -I$(INC)
-CFLAGS=$(DEBUG)
+CFLAGS=$(DEBUG) -m32 
 CC=gcc
 
 KERNLIB=kernlib
diff -ur eota/kernel/BTRON/make/build.c eota-cx64/kernel/BTRON/make/build.c
--- eota/kernel/BTRON/make/build.c	2003-04-19 21:19:12.000000000 +0900
+++ eota-cx64/kernel/BTRON/make/build.c	2017-06-18 13:33:31.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2003, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 
@@ -16,7 +16,7 @@
 #include <sys/file.h>
 
 #if defined(linux) && (! defined(EOTA))
-#include <a.out.h>
+#include <linux/a.out.h>
 #else
 /* copied from "a.out.h" of Linux */
 struct exec {
@@ -36,11 +36,13 @@
 #include "../../ITRON/h/itron_module.h"	/* module_info 構造体の参照のため */
 
 #define	MAX_LINE	1000
-#define ALIGN(x,al)	((((int)x) + (al) - 1) & ~(al - 1))
+#define ALIGN(x,al)	((((unsigned int) x) + (al) - 1) & ~(al - 1))
 #define BLOCKSIZE	1024
 #define PAGESIZE	4096
 
 
+#undef DEBUG
+
 #ifdef DEBUG
 
 #define DPRINTF(x)	printf x;
@@ -122,9 +124,9 @@
 struct config_entry module_table[MAX_MODULE];
 
 
-void usage(void)
+void usage(char *cmd)
 {
-    fprintf(stderr, "Usage: %s configuration-file output-file\n");
+  fprintf(stderr, "Usage: %s configuration-file output-file\n", cmd);
 }
 
 
@@ -136,7 +138,7 @@
     cmd = av[0];
 
     if (ac < 2) {
-	usage();
+	usage(cmd);
 	exit(0);
     }
 
@@ -306,6 +308,7 @@
 	    perror("fread");
 	    exit(1);
 	}
+	DPRINTF(("elf.e_type = %d\n", elf.e_type));
 
 	/* プログラムヘッダの読み取り */
 	phead = (struct Pheader *) malloc(elf.e_phentsize * elf.e_phnum);
@@ -331,20 +334,28 @@
 	    + ALIGN(phead[elf.e_phnum - 1].p_filesz,
 		    phead[elf.e_phnum - 1].p_align) - phead[0].p_offset;
 #else
+	DPRINTF(("e_phnum %d\n",elf.e_phnum));
 	if (elf.e_phnum == 1) {
 	    info_table[i].mod_info.length =
 		ALIGN(phead[0].p_filesz, phead[0].p_align);
 	    info_table[i].mod_info.length =
 		ALIGN(info_table[i].mod_info.length, PAGESIZE);
-	} else {
+	}
+	else if (phead[1].p_filesz == 0) {
+	    info_table[i].mod_info.length =
+		ALIGN(phead[0].p_filesz, phead[0].p_align);
+	    info_table[i].mod_info.length =
+		ALIGN(info_table[i].mod_info.length, PAGESIZE);
+	}
+	else {
 	    DPRINTF(
 		    ("vaddr0 %x, offset %d filesz0 %d, vaddr1 %x offset %d filesz1 %d\n",
 		     phead[0].p_vaddr, phead[0].p_offset,
 		     phead[0].p_filesz, phead[1].p_vaddr,
 		     phead[1].p_offset, phead[1].p_filesz));
 	    info_table[i].mod_info.length =
-		phead[elf.e_phnum - 1].p_vaddr - phead[0].p_vaddr +
-		phead[elf.e_phnum - 1].p_filesz;
+		phead[1].p_vaddr - phead[0].p_vaddr +
+		phead[1].p_filesz;
 	    info_table[i].mod_info.length =
 		ALIGN(info_table[i].mod_info.length, PAGESIZE);
 	}
@@ -376,14 +387,23 @@
 		= ALIGN(phead[0].p_memsz, phead[0].p_align);
 	    info_table[i].mod_info.mem_length
 		= ALIGN(info_table[i].mod_info.mem_length, PAGESIZE);
-	} else {
+	}
+	else {
 	    info_table[i].mod_info.mem_length =
-		phead[elf.e_phnum - 1].p_vaddr - phead[0].p_vaddr +
-		phead[elf.e_phnum - 1].p_memsz;
+		phead[1].p_vaddr - phead[0].p_vaddr +
+		phead[1].p_memsz;
 	    info_table[i].mod_info.mem_length =
 		ALIGN(info_table[i].mod_info.mem_length, PAGESIZE);
 	}
 #endif
+#ifdef DEBUG
+	for (j = 0; j < elf.e_phnum; j++) {
+	  DPRINTF(("%d p_type = %x p_flags = %d p_filesz = %d p_align = %d\n", j,
+		   phead[j].p_type, phead[j].p_flags,
+		   phead[j].p_filesz, phead[j].p_align
+		   ));
+	}
+#endif
 
 	info_table[i].offset = phead[0].p_offset;
 
@@ -548,7 +568,13 @@
 
     /* Data エリアの読み取り
      */
-    if (elf.e_phnum == 2) {
+    if (elf.e_phnum >= 2 && phead[1].p_filesz == 0) {
+	DPRINTF(("only TEXT\n"));
+	padding =
+	    ALIGN(phead[0].p_filesz, phead[0].p_align) - phead[0].p_filesz;
+	output_padding(out, padding);
+    }
+    else if (elf.e_phnum == 2 || elf.e_phnum == 3) {
 	/* padding の出力 */
 	padding =
 	    phead[1].p_vaddr - (phead[0].p_vaddr + phead[0].p_filesz);
diff -ur eota/kernel/ITRON/common/console.c eota-cx64/kernel/ITRON/common/console.c
--- eota/kernel/ITRON/common/console.c	2000-07-10 09:06:50.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/console.c	2017-06-16 11:05:09.000000000 +0900
@@ -208,7 +208,7 @@
   req.header.msgtyp = DEV_WRI;
   req.body.wri_req.dd = 0xAA;
   req.body.wri_req.size = 1;
-  req.body.wri_req.dt[0] = (B) (ch & 0xff);
+  req.body.wri_req.dt[0] = (B) (ch & 0x00ff);
   error = snd_mbf (console_driver, sizeof (req), &req);
   if (error != E_OK)
     {
@@ -249,7 +249,7 @@
   switch (ch)
     {
     default:
-      if (ch & 0xFF00)
+      if (ch & 0x00FF00)
 	{
 	  c = halfword_swap (ch);
 	  write_kanji_vram (cursor.x, cursor.y, c, NORM_ATTR);
@@ -433,7 +433,7 @@
 #endif
   
   addr = (short *)TEXT_VRAM_ADDR;
-  ch = ch | (addr [CURSOR_POS (x, y)] & 0xff00);
+  ch = ch | (addr [CURSOR_POS (x, y)] & 0x0ff00);
   addr [CURSOR_POS (x, y)] = ch;
 }
 
@@ -462,12 +462,12 @@
 #endif
   UH	 first, second;
 
-  first = ((kanji >> 8) & 0xff) - 0x20;
-  second = (kanji << 8) & 0xff00;
+  first = ((kanji >> 8) & 0x00ff) - 0x20;
+  second = (kanji << 8) & 0x0ff00;
 
   addr = (unsigned short *)TEXT_VRAM_ADDR;
   addr [CURSOR_POS (x, y)] = second | first;
-  addr [CURSOR_POS (x + 1, y)] = second | (first | 0x80);
+  addr [CURSOR_POS (x + 1, y)] = second | (first | 0x080);
 }
 
 /*************************************************************************
@@ -489,9 +489,9 @@
 #endif
   addr = CURSOR_POS (x, y);
   outb (GDC_ADDR, 0x0e);
-  outb (GDC_DATA, (addr >> 8) & 0xff);
+  outb (GDC_DATA, (addr >> 8) & 0x00ff);
   outb (GDC_ADDR, 0x0f);
-  outb (GDC_DATA, addr & 0xff);
+  outb (GDC_DATA, addr & 0x00ff);
 #ifdef notdef
   ena_int ();
 #endif
diff -ur eota/kernel/ITRON/common/debug.c eota-cx64/kernel/ITRON/common/debug.c
--- eota/kernel/ITRON/common/debug.c	2000-01-31 09:47:19.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/debug.c	2017-06-16 11:05:09.000000000 +0900
@@ -495,7 +495,7 @@
     {
       while ((inb (0x64) & 0x02) == 0x02)
 	;
-      outb (0x64, 0xf0);
+      outb (0x64, 0x0f0);
     }
 }
 
@@ -616,7 +616,7 @@
 static void
 wakeup_func (W ac, B **av)
 {
-  set_flg (sleep_flag, 0xffff);
+  set_flg (sleep_flag, 0x00ffff);
   clr_flg (sleep_flag, 0);
   set_timer (50, (void (*)(W))wakeup_func, NULL);
 }
@@ -1389,8 +1389,8 @@
   set_idt (32, 0x08, (int)int32_handler & 0x7fffffff, INTERRUPT_DESC, 0);
   reset_intr_mask (0);
   outb (TIMER_CONTROL, 0x36);
-  outb (TIMER0_WRITE, 1193 & 0xff);
-  outb (TIMER0_WRITE, (1193 >> 8) & 0xff);
+  outb (TIMER0_WRITE, 1193 & 0x00ff);
+  outb (TIMER0_WRITE, (1193 >> 8) & 0x00ff);
 }
 
 
diff -ur eota/kernel/ITRON/common/kalloc.c eota-cx64/kernel/ITRON/common/kalloc.c
--- eota/kernel/ITRON/common/kalloc.c	2000-02-13 18:04:38.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/kalloc.c	2017-06-16 11:05:09.000000000 +0900
@@ -129,7 +129,7 @@
 	{
 	  /* サイズが大きい場合; front の指すエントリから後半分を削る */
 	  front->size -= size + sizeof (struct kmem_entry);
-	  (UW )front = ((UW) front->body) + (front->size);
+	  front = ((UW) front->body) + (front->size);
 	  front->size = size;
 	  break;
 	}
diff -ur eota/kernel/ITRON/common/lowlib.c eota-cx64/kernel/ITRON/common/lowlib.c
--- eota/kernel/ITRON/common/lowlib.c	2002-01-14 20:55:55.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/lowlib.c	2017-06-16 11:05:09.000000000 +0900
@@ -50,7 +50,7 @@
 
     printk("LOWLIB: call init function in module.\n");
 
-    (VP) init = modp->entry;
+    init = (ER (*)()) modp->entry;
     errno = (init) (&lowlib_table[nlowlib]);
     if (errno == E_OK) {
 	bcopy(modp->name, lowlib_table[nlowlib].name, MAX_MODULE_NAME);
diff -ur eota/kernel/ITRON/common/main.c eota-cx64/kernel/ITRON/common/main.c
--- eota/kernel/ITRON/common/main.c	2002-02-17 12:52:41.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/main.c	2017-06-18 15:59:00.000000000 +0900
@@ -76,8 +76,8 @@
 void banner(void);
 
 /* 外部変数の宣言 */
-extern W do_timer;
-extern UW system_ticks;
+extern volatile W do_timer;		/* defined in ibmpc/timer.c */
+extern volatile UW system_ticks;	/* defined in ibmpc/timer.c */
 extern ID posix_manager;
 extern char doing;
 
@@ -248,6 +248,7 @@
     ID rid;
     T_CTSK pktsk;
     T_TCB *new_taskp;
+    ER err;
 
     info = (struct boot_header *) MODULE_TABLE;
     if ((entry < 1) || (entry >= info->count)) {
@@ -261,11 +262,11 @@
     pktsk.stksz = KERNEL_STACK_SIZE;
     pktsk.addrmap = NULL;
     pktsk.startaddr = (FP) modulep[entry].entry;
-    if (new_task(&pktsk, &rid, FALSE) != E_OK) {
-	printk("Can not make new task.\n");
+    if ((err = new_task(&pktsk, &rid, FALSE)) != E_OK) {
+        printk("Can not make new task for %d by %d.\n", entry, err);
 	return;
     }
-    printk("Task id = %d, eip = 0x%x\n", rid, modulep[entry].entry);
+    printk("Task id = %d, eip = 0x%x \n", rid, modulep[entry].entry);
     new_taskp = get_tskp(rid);
     if (new_taskp == NULL) {
 	printk("new task is NULL.\n");
@@ -325,6 +326,9 @@
 
     info = (struct boot_header *) MODULE_TABLE;
     for (i = 1; i < info->count; i++) {
+#ifdef notdef
+        printk("run %d-th module type = %d\n", i, info->modules[i].type);
+#endif
 	if (info->modules[i].type == lowlib) {
 	    ER errno;
 
@@ -348,6 +352,9 @@
     struct boot_header *info; 
 
     init_interrupt();
+#if 1
+    printk("\nstart init console\n");
+#endif
     simple_init_console();	/* コンソールに文字を出力できるようにする */
     printk("init_itron: start\n");
 
diff -ur eota/kernel/ITRON/common/misc.c eota-cx64/kernel/ITRON/common/misc.c
--- eota/kernel/ITRON/common/misc.c	2001-12-26 17:09:55.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/misc.c	2017-06-18 15:55:44.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* misc.c ---
@@ -28,7 +28,7 @@
  */
 UH halfword_swap(UH w)
 {
-    w = ((w & 0xff) << 8) | ((w & 0xff00) >> 8);
+    w = ((w & 0x00ff) << 8) | ((w & 0x00ff00) >> 8);
     return (w);
 }
 
@@ -38,8 +38,11 @@
  */
 VP bcopy(VP src, VP dest, W count)
 {
+    B *sp, *dp;
+    sp = (B *) src;
+    dp = (B *) dest;
     while (count-- > 0) {
-	*((B *) dest)++ = *((B *) src)++;
+	*dp++ = *sp++;
     }
     return (dest);
 }
@@ -50,8 +53,10 @@
  */
 void bzero(VP src, W count)
 {
+    B *sp;
+    sp = (B *) src;
     while (count-- > 0) {
-	*((UB *) src)++ = 0;
+	*sp++ = 0;
     }
 }
 
diff -ur eota/kernel/ITRON/common/pmemory.c eota-cx64/kernel/ITRON/common/pmemory.c
--- eota/kernel/ITRON/common/pmemory.c	2002-02-17 12:50:45.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/pmemory.c	2017-06-18 15:58:39.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* pmemory.c
@@ -81,7 +81,7 @@
     }
     if (page) {
 	for (k = 0; k < page / BITS; ++k, ++i) {
-	    memory_map[i] = map_mask[8];
+	    memory_map[i] = map_mask[BITS];
 	}
 	for (j = 0; j < page % BITS; ++j) {
 	    memory_map[i] |= map_mask[j];
@@ -143,7 +143,8 @@
 #if 0
     printk("release: ");
 #endif
-    if (boot_info->count == 0) {
+    
+    if (boot_info->count == 0) { /* for only debug use */
 	extern unsigned char end;
 
 /* #ifdef DEBUG */
@@ -161,7 +162,7 @@
 #endif				/* DEBUG */
 	    release_memory(boot_info->modules[i].paddr,
 			   boot_info->modules[i].mem_length);
-#if 0
+#ifdef DEBUG
 	    printk("\n");
 #endif
 	}
@@ -175,7 +176,7 @@
 	    if (!byte_free)
 		byte_free = i;
 	    free_mem += BITS;
-	} else if (memory_map[i] != map_mask[8]) {
+	} else if (memory_map[i] != map_mask[BITS]) {
 	    if (!bit_free)
 		bit_free = i;
 	    for (j = 0; j < BITS; ++j) {
@@ -190,7 +191,7 @@
     ena_int();
 #endif
 
-#ifdef notdef
+#ifdef DEBUG
     printk("physmem = %d, base_mem = %d, ext_mem = %d\n", physmem_max,
 	   base_mem, ext_mem);
     printk("memory_map = %d(%d), free_mem = %d\n",
@@ -220,7 +221,7 @@
 	found = 0;
 	j = 0;
 	for (i = bit_free; i < memory_map_size; ++i) {
-	    if (memory_map[i] != map_mask[8]) {
+	    if (memory_map[i] != map_mask[BITS]) {
 		for (j = 0; j < BITS; ++j) {
 		    if (!(memory_map[i] & map_mask[j])) {
 			memory_map[i] |= map_mask[j];
@@ -232,7 +233,7 @@
 	    }
 	    if (found) {
 		for (k = bit_free; k < memory_map_size; ++k) {
-		    if (memory_map[k] != map_mask[8]) {
+		    if (memory_map[k] != map_mask[BITS]) {
 			bit_free = k;
 			break;
 		    }
@@ -277,7 +278,7 @@
 	for (j = 0; j < size / BITS; ++j) {
 	    if (memory_map[i + j] == MEM_FREE)
 		free_mem -= BITS;
-	    memory_map[i + j] = map_mask[8];
+	    memory_map[i + j] = map_mask[BITS];
 	}
 	for (k = 0; k < size % BITS; ++k) {
 	    memory_map[i + j] |= map_mask[k];
diff -ur eota/kernel/ITRON/common/printf.c eota-cx64/kernel/ITRON/common/printf.c
--- eota/kernel/ITRON/common/printf.c	2001-04-08 20:55:12.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/printf.c	2017-06-17 16:55:57.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* printk.c --- printk 関係の関数
@@ -18,8 +18,8 @@
 #include "func.h"
 
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
-
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
+#define INC(p,x)	(p = (VP *) (((UW)p) + sizeof (x)))
 
 static void print_string(B *);
 static void print_digit(UW, UW);
@@ -39,7 +39,7 @@
 
 
 /*
- *
+ * should be debug
  */
 W vprintk(B * fmt, VP arg0)
 {
@@ -54,17 +54,17 @@
 		break;
 
 	    case 'd':
-		if ((W) * ap < 0) {
-		    ((W) * ap) = -((W) * ap);
+	        if (*((W *)ap) < 0) {
+		    *((W *)ap) = -(*((W *) ap));
 		    putchar('-');
 		}
-		print_digit((W) * ap, 10);
+		print_digit(*((W *) ap), 10);
 		INC(ap, W);
 		break;
 
 	    case 'x':
-		print_digit((UW) * ap, 16);
-		INC(ap, W);
+	        print_digit(*((UW *)ap), 16);
+		INC(ap, UW);
 		break;
 
 	    default:
@@ -93,7 +93,7 @@
 
 static void print_digit0(UW d, UW base)
 {
-    static B digit_table[] = "0123456789ABCDEF";
+    B digit_table[] = "0123456789ABCDEF";
 
     if (d < base) {
 	putchar(digit_table[d]);
diff -ur eota/kernel/ITRON/common/system.c eota-cx64/kernel/ITRON/common/system.c
--- eota/kernel/ITRON/common/system.c	1999-04-13 13:49:06.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/system.c	2017-06-16 11:05:09.000000000 +0900
@@ -40,7 +40,7 @@
     case ROOTFS_INFO:
       rootfs = (W *)args->buf;
       info = (struct boot_header *)MODULE_TABLE;
-      (UW)info |= 0x80000000;
+      info = (struct boot_header *) ((UW) info | 0x80000000);
       *rootfs = info->machine.rootfs;
       printk ("vsys_inf: rootfs_info: rootfs = 0x%x\n", info->machine.rootfs);	/* */
       return (E_OK);
diff -ur eota/kernel/ITRON/common/task.c eota-cx64/kernel/ITRON/common/task.c
--- eota/kernel/ITRON/common/task.c	2002-09-28 16:04:20.000000000 +0900
+++ eota-cx64/kernel/ITRON/common/task.c	2017-06-18 18:49:00.886584851 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* task.c $Revision: 1.16 $
@@ -124,12 +124,15 @@
  *
  */
 
-extern UW system_ticks;
+extern volatile UW system_ticks;	/* defined in ibmpc/timer.c */
 
 T_TCB *run_task;		/* 現在、走行中のタスク */
 char doing = 0;
 
 static T_TCB *task;
+#ifdef notdef
+#define TASKITEM(x) (task_buffer[x - MIN_TSKID]) 
+#endif
 static T_TCB task_buffer[MAX_TSKID - MIN_TSKID + 1];
 static T_TCB *ready_task[MAX_PRIORITY + 1];
 #ifdef notdef
@@ -165,7 +168,7 @@
     int i;
 
     for (i = 1; i < MAX_TSKID; i++) {
-	switch (task[i].tskstat) {
+        switch (task[i].tskstat) {
 	case TTS_RUN:
 	    printk("%d (%d)  <RUN>           0x%x\n", i,
 		   task[i].tsklevel, task[i].context.eip);
@@ -251,7 +254,11 @@
     }
 
 /*  bzero (kernel_tss, sizeof (TASK_STATE_SEG_T) * MAX_TASK); */
+#ifdef notdef
     task = &task_buffer[-1];
+#else
+    task = task_buffer - MIN_TSKID;
+#endif
 }
 
 
@@ -322,7 +329,7 @@
 
     /* セレクタをセット */
     task[KERNEL_TASK].tss_selector =
-	((KERNEL_TASK + TSS_BASE) << 3) & 0xfff8;
+	((KERNEL_TASK + TSS_BASE) << 3) & 0x0fff8;
     create_context(&task[KERNEL_TASK]);
 
     /* タスクレジスタの値を設定する. */
@@ -346,6 +353,7 @@
 
     err = make_task_stack(task, pk_ctsk->stksz, &sp);
     if (err != E_OK) {
+        printk("error make_task_stack\n");
 	return (err);
     }
 
@@ -390,7 +398,7 @@
        task->context.t = 0;
        task->context.iobitmap = 0;
      */
-    task->tss_selector = ((TSS_BASE + task->tskid) << 3) & 0xfff8;
+    task->tss_selector = ((TSS_BASE + task->tskid) << 3) & 0x0fff8;
     task->use_fpu = 0;		/* 初期状態では FPU は利用しない */
 #endif				/* I386 */
     create_context(task);	/* コンテキスト領域(TSS)のアドレスをGDTにセット */
@@ -408,10 +416,15 @@
     INT err;
 #endif
 
-/*  err = pget_blk (&sp, TMPL_SYS, ROUNDUP (size, PAGE_SIZE)); */
+#ifdef notdef
+    err = pget_blk (&sp, TMPL_SYS, ROUNDUP (size, PAGE_SIZE));
     /* スタックポインタは 0x80000000 の仮想アドレスでアクセスする必要がある。 */
-    (*sp) = palloc(PAGES(size));
-    (UW) (*sp) |= 0x80000000;
+    (UW) (*sp) |= 0x80000000; 
+#else
+    /* 仮想アドレスへのメモリの割当は palloc 内部で実行済 */
+    *sp = palloc(PAGES(size));
+#endif
+    
 #ifdef TSKSW_DEBUG
     printk("sp = 0x%x\n", *sp);
 #endif
@@ -655,7 +668,7 @@
     if (tcb->tskstat != TTS_RDY) {
 	doing = 0;
 	ena_int();
-#if 1
+#ifdef TSKSW_DEBUG
 	printk
 	    ("%s, %d: tcb->tskstat != TTS_RDY, lvl = %d id = %d stat = %d\n",
 	     __FILE__, __LINE__, tskid, tcb->tskid, tcb->tskstat);
@@ -694,13 +707,13 @@
 
 /* resume を呼び出す。resume の引数は、TSS へのセレクタ */
 #ifdef TSKSW_DEBUG
-    printk("resume (0x%x)\n", ((tcb->tskid + TSS_BASE) << 3) & 0xfff8);
+    printk("resume (0x%x)\n", ((tcb->tskid + TSS_BASE) << 3) & 0x0fff8);
 #endif
 #if 0
     ena_int();			/* resume の中で実行されるはず */
 #endif
     resume((UW) (tcb->tskid + TSS_BASE) << 3);
-/*  print_context (((tcb->tskid + TSS_BASE) << 3) & 0xfff8); */
+/*  print_context (((tcb->tskid + TSS_BASE) << 3) & 0x0fff8); */
     doing = 0;
 
     /* 正常に終了した：次のタスクスイッチの時にここに戻る */
@@ -792,24 +805,24 @@
 #endif
 /* resume を呼び出す。resume の引数は、TSS へのセレクタ */
 #ifdef TSKSW_DEBUG
-    printk("resume (0x%x)\n", ((tcb->tskid + TSS_BASE) << 3) & 0xfff8);
+    printk("resume (0x%x)\n", ((tcb->tskid + TSS_BASE) << 3) & 0x0fff8);
 #endif
     delayed_dispatch = FALSE;
     ena_int();
     resume((UW) (tcb->tskid + TSS_BASE) << 3);
-/*  print_context (((tcb->tskid + TSS_BASE) << 3) & 0xfff8); */
+/*  print_context (((tcb->tskid + TSS_BASE) << 3) & 0x0fff8); */
     return (E_OK);		/* 正常に終了した：次のタスクスイッチの時にここに戻る */
 }
 #endif				/* task_switch2 */
 
 void print_context(UW selector)
 {
+#ifdef TSKSW_DEBUG
     TASK_DESC *desc;
     T_I386_CONTEXT *tcb;
 
-    desc = (TASK_DESC *) get_gdt(((selector >> 3) - TSS_BASE) & 0xffff);
+    desc = (TASK_DESC *) get_gdt(((selector >> 3) - TSS_BASE) & 0x0ffff);
     tcb = (T_I386_CONTEXT *) GET_TSS_ADDR(*desc);
-#ifdef TSKSW_DEBUG
     printk("task ID = %d\n", (selector >> 3) - TSS_BASE);
     printk("TSS addr = 0x%x\n", tcb);
     printk("EIP = 0x%x\n", tcb->eip);
@@ -869,7 +882,7 @@
     newtask->tsklevel = pk_ctsk->itskpri;
     newtask->tsklevel0 = pk_ctsk->itskpri;
     if (make_task_context(newtask, pk_ctsk) != E_OK) {
-	return (E_NOMEM);
+  	return (E_NOMEM);
     }
 
     /* 仮想メモリのマッピングテーブルを引数 pk_ctsk の指定したマップに
@@ -1626,8 +1639,9 @@
 	err = cre_tsk(i, pk_ctsk);
 	if (err == E_OK) {
 	    *rid = i;
-	    if (run_flag == TRUE)
+	    if (run_flag == TRUE) {
 		sta_tsk(i, 0);
+	    }
 	    return (E_OK);
 	}
     }
diff -ur eota/kernel/ITRON/i386/fault.c eota-cx64/kernel/ITRON/i386/fault.c
--- eota/kernel/ITRON/i386/fault.c	2002-02-25 17:01:12.000000000 +0900
+++ eota-cx64/kernel/ITRON/i386/fault.c	2017-06-17 18:25:45.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* fault.c
@@ -37,9 +37,9 @@
 #if 0
 BOOL on_interrupt = FALSE;	/* 割り込み中かどうかを示すフラグ */
 #else
-W on_interrupt = 0;
+volatile W on_interrupt = 0;
 #endif
-BOOL delayed_dispatch = FALSE;
+volatile BOOL delayed_dispatch = FALSE;
 
 /*
  * 割り込みハンドラテーブル
@@ -65,7 +65,7 @@
 W init_interrupt(void)
 {
     W i;
-    GATE_DESC cg;
+    static GATE_DESC cg;
 
     printk("init_interrupt\n");
     /* 8259 の初期化 */
@@ -166,6 +166,9 @@
 #endif
     on_interrupt = 0;
     delayed_dispatch = FALSE;
+#ifdef notdef
+    printk("init_interrupt end.\n");
+#endif
     return (E_OK);
 }
 
@@ -200,7 +203,9 @@
  * 処理：	外部割り込みが発生したときの処理を行う。
  *
  */
-static int mask;
+//satic int mask;
+int fault_mask;
+
 void interrupt(W intn)
 {
 #if 0
@@ -270,17 +275,21 @@
 
     /* 割込みの禁止フラグの OFF */
     if (intn > 40) {	/* slave */
-      mask = ~(1 << (intn - 40));
-      asm("cli");
-      asm("inb $0xA1, %al");
-      asm("andb mask, %al");
-      asm("outb %al, $0xA1");
+      //      mask = ~(1 << (intn - 40));
+      fault_mask = ~(1 << (intn - 40));
+      asm volatile ("cli");
+      asm volatile ("inb $0xA1, %al");
+      //      asm volatile ("andb mask, %al");
+      asm volatile ("andb fault_mask, %al");
+      asm volatile ("outb %al, $0xA1");
     } else {		/* master */
-      mask = ~(1 << (intn - 32));
-      asm("cli");
-      asm("inb $0x21, %al");
-      asm("andb mask, %al");
-      asm("outb %al, $0x21");
+      //      mask = ~(1 << (intn - 32));
+      fault_mask = ~(1 << (intn - 32));
+      asm volatile ("cli");
+      asm volatile ("inb $0x21, %al");
+      //      asm volatile ("andb mask, %al");
+      asm volatile ("andb fault_mask, %al");
+      asm volatile ("outb %al, $0x21");
     }
 
 #if 0
@@ -499,43 +508,43 @@
 {
     if (intn == 1) {
 	ena_int();
-	printk("\nFAULT: Interrupt Number is %d ", intn);
+	printk("\nFAULT: Interrupt Number is [%d]", intn);
 	printk("PID = %d eflags = 0x%x\n", run_task->tskid, eflags);
 	return;
     }
 
     dis_int();
-    printk("\nFAULT: Interrupt Number is %d.\n", intn);
-    printk("PID = %d\n", run_task->tskid);
-    printk("run_task->state.state = %d\n", run_task->tskstat);
+    printk("\nFAULT: Interrupt Number is [%d].\n", intn);
+    printk("PID = %d \n", run_task->tskid);
+    printk("run_task->state.state = %d \n", run_task->tskstat);
 /*  printk ("tss selector      = %d\n", run_task->tss_selector); */
-    printk("run_task->context.backlink = 0%x\n",
+    printk("run_task->context.backlink = 0%x \n",
 	   run_task->context.backlink);
-    printk("run_task->context.cs  = 0x%x\n", run_task->context.cs);
-    printk("run_task->context.ds  = 0x%x\n", run_task->context.ds);
-    printk("run_task->context.ss  = 0x%x\n", run_task->context.ss);
-    printk("run_task->context.eip = 0x%x\n", run_task->context.eip);
-    printk("run_task->context.esp = 0x%x\n", run_task->context.esp);
-    printk("context addr = %d (0x%x)\n", run_task, run_task);
-    printk("ss0 = 0x%x/ss1 = 0x%x/ss2 = 0x%x\n",
+    printk("run_task->context.cs  = 0x%x \n", run_task->context.cs);
+    printk("run_task->context.ds  = 0x%x \n", run_task->context.ds);
+    printk("run_task->context.ss  = 0x%x \n", run_task->context.ss);
+    printk("run_task->context.eip = 0x%x \n", run_task->context.eip);
+    printk("run_task->context.esp = 0x%x \n", run_task->context.esp);
+    printk("context addr = %d (0x%x) \n", run_task, run_task);
+    printk("ss0 = 0x%x/ss1 = 0x%x/ss2 = 0x%x \n",
 	   run_task->context.ss0,
 	   run_task->context.ss1, run_task->context.ss2);
-    printk("esp0 = 0x%x/esp1 = 0x%x/esp2 = 0x%x\n",
+    printk("esp0 = 0x%x/esp1 = 0x%x/esp2 = 0x%x \n",
 	   run_task->context.esp0,
 	   run_task->context.esp1, run_task->context.esp2);
 
-    printk("current stack segment = 0x%x\n", run_task->context.ss);
-    printk("stack pointer = 0x%x\n", run_task->context.esp);
-    printk("initial stack pointer = 0x%x\n", run_task->initial_stack);
-    printk("error code = 0x%x\n", errcode);
-    printk("fault addr = 0x%x\n", get_cr2());
-    printk("       eip = 0x%x\n", eip);
-    printk("        cs = 0x%x\n", cs);
-    printk("    eflags = 0x%x\n", eflags);
-    printk("       esp = 0x%x\n", esp);
-    printk("       cr3 = 0x%x\n", get_cr3());
+    printk("current stack segment = 0x%x \n", run_task->context.ss);
+    printk("stack pointer = 0x%x \n", run_task->context.esp);
+    printk("initial stack pointer = 0x%x \n", run_task->initial_stack);
+    printk("error code = 0x%x \n", errcode);
+    printk("fault addr = 0x%x \n", get_cr2());
+    printk("       eip = 0x%x \n", eip);
+    printk("        cs = 0x%x \n", cs);
+    printk("    eflags = 0x%x \n", eflags);
+    printk("       esp = 0x%x \n", esp);
+    printk("       cr3 = 0x%x \n", get_cr3());
 #if 0
-    printk("        ss = 0x%x\n", ss);
+    printk("        ss = 0x%x \n", ss);
 #endif
     ena_int();
     for (;;);
@@ -544,7 +553,7 @@
 /**************************************************************************
  *
  */
-W wait_int(W * flag)
+W wait_int(volatile W * flag)
 {
     while (*flag == FALSE);
     dis_int();
diff -ur eota/kernel/ITRON/i386/i386.h eota-cx64/kernel/ITRON/i386/i386.h
--- eota/kernel/ITRON/i386/i386.h	2002-01-08 20:52:07.000000000 +0900
+++ eota-cx64/kernel/ITRON/i386/i386.h	2017-06-16 11:05:09.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2002, Tomohide Naniwa
+(C) 2002-2017, Tomohide Naniwa
 
 */
 /* 
@@ -182,8 +182,8 @@
   (desc.offset0 | (desc.offset1 << 16));
 
 #define SET_OFFSET_GATE(desc,x)		\
-(desc.offset0 = x & 0xffff);		\
-  (desc.offset1 = (x >> 16) & 0xffff);
+(desc.offset0 = x & 0x0ffff);		\
+  (desc.offset1 = (x >> 16) & 0x0ffff);
 
 
 #define STACK_DIR	SMALL
@@ -202,7 +202,7 @@
 
 #define ADDR_MAP_SIZE	1024
 
-#define dis_int(args...)	asm("cli");
-#define ena_int(args...)	asm("sti");
+#define dis_int(args...)	asm volatile ("cli");
+#define ena_int(args...)	asm volatile ("sti");
 
 #endif /* _I386_H_ */
diff -ur eota/kernel/ITRON/i386/interrupt.h eota-cx64/kernel/ITRON/i386/interrupt.h
--- eota/kernel/ITRON/i386/interrupt.h	2002-01-09 20:29:35.000000000 +0900
+++ eota-cx64/kernel/ITRON/i386/interrupt.h	2017-06-17 18:26:09.000000000 +0900
@@ -55,9 +55,9 @@
 #if 0
 extern BOOL	on_interrupt;
 #else
-extern W	on_interrupt;
+extern volatile W	on_interrupt;
 #endif
-extern BOOL	delayed_dispatch;
+extern volatile BOOL	delayed_dispatch;
 
 extern W	init_interrupt (void);
 extern void	reset_intr_mask (W);
@@ -69,7 +69,7 @@
 extern void	fault(UW intn, UW edi, UW esi, UW ebp, UW esp, UW ebx, UW edx,
 	   UW ecx, UW eax, UW es, UW ds,
 	   UW errcode, UW eip, UW cs, UW eflags);
-extern W	wait_int (W *);
+extern W	wait_int (volatile W *);
 extern void	set_idt (UW, UW, UW, UW, UW);
 extern void	protect_fault(UW edi, UW esi, UW ebp, UW esp, UW ebx, UW edx,
 		   UW ecx, UW eax, UW es, UW ds,
diff -ur eota/kernel/ITRON/i386/virtual_mem.c eota-cx64/kernel/ITRON/i386/virtual_mem.c
--- eota/kernel/ITRON/i386/virtual_mem.c	2002-02-17 13:01:46.000000000 +0900
+++ eota-cx64/kernel/ITRON/i386/virtual_mem.c	2017-06-18 15:58:17.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* @(#)$Header: /usr/local/src/master/B-Free/Program/btron-pc/kernel/ITRON/i386/virtual_memory.c,v 1.26 2000/01/26 08:31:49 naniwa Exp $ */
@@ -176,7 +176,7 @@
     int i;
     I386_PAGE_ENTRY *p;
 
-    (UW) dest = (UW) RTOV((UW) dest);
+    dest = (ADDR_MAP) RTOV((UW) dest);
     newp = (ADDR_MAP) (palloc(1));	/* ページディレクトリのアロケート */
     bzero((VP) newp, PAGE_SIZE);
 
@@ -246,7 +246,7 @@
 	if (dest[i].present) {
 	    p = (I386_PAGE_ENTRY *) (dest[i].frame_addr << PAGE_SHIFT);
 	    if ((UW) p <= KERNEL_SIZE) {
-		(UW) p = RTOV((UW) p);
+	        p = (I386_PAGE_ENTRY *) RTOV((UW) p);
 	    }
 	    if (i < ADDR_MAP_SIZE / 2) {
 		for (j = 0; j < PAGE_SIZE / sizeof(I386_PAGE_ENTRY); j++) {
@@ -256,7 +256,7 @@
 		    }
 		}
 	    }
-	    (UW) p = VTOR((UW) p);
+	    p = (I386_PAGE_ENTRY *) VTOR((UW) p);
 	    pfree((VP) p, 1);
 	}
     }
@@ -293,7 +293,7 @@
 #endif				/* DEBUG */
 /*  task->context.cr3 &= 0x7fffffff; */
     dirent = (I386_DIRECTORY_ENTRY *) (task->context.cr3);
-    ((UW) dirent) = RTOV((UW) dirent);
+    dirent = (I386_DIRECTORY_ENTRY *) RTOV((UW) dirent);
     dirindex = vpage & DIR_MASK;
     dirindex = dirindex >> DIR_SHIFT;
     pageindex = (vpage & PAGE_MASK) >> PAGE_SHIFT;
@@ -341,7 +341,7 @@
     }
 
     if ((UW) pageent <= KERNEL_SIZE) {
-	(UW) pageent = RTOV((UW) pageent);
+        pageent = (I386_PAGE_ENTRY *) RTOV((UW) pageent);
     }
 
     if (pageent[pageindex].present == 1) {
@@ -382,7 +382,7 @@
     ER errno;
 
     dirent = (I386_DIRECTORY_ENTRY *) (task->context.cr3);
-    ((UW) dirent) = RTOV((UW) dirent);
+    dirent = (I386_DIRECTORY_ENTRY *) RTOV((UW) dirent);
     dirindex = vpage & DIR_MASK;
     dirindex = dirindex >> DIR_SHIFT;
     pageindex = (vpage & PAGE_MASK) >> PAGE_SHIFT;
@@ -407,7 +407,7 @@
     }
 
     if ((UW) pageent <= KERNEL_SIZE) {
-	(UW) pageent = RTOV((UW) pageent);
+	pageent = (I386_PAGE_ENTRY *) RTOV((UW) pageent);
     }
 
     ppage = VTOR(pageent[pageindex].frame_addr << PAGE_SHIFT);
@@ -439,7 +439,7 @@
     if (newp == NULL) {
 	return (NULL);
     }
-    bzero(newp, PAGE_SIZE);
+    //    bzero(newp, PAGE_SIZE);  already bzero-ed in palloc()
     for (i = 0, pp = newp; i < PAGE_SIZE / sizeof(I386_PAGE_ENTRY);
 	 ++i, ++pp) {
 	pp->present = 0;
@@ -478,7 +478,7 @@
     }
 
     dirent = (I386_DIRECTORY_ENTRY *) taskp->context.cr3;
-    ((UW) dirent) = RTOV((UW) dirent);
+    dirent = (I386_DIRECTORY_ENTRY *) RTOV((UW) dirent);
     dirindex = (addr & DIR_MASK) >> DIR_SHIFT;
     pageindex = (addr & PAGE_MASK) >> PAGE_SHIFT;
     if (dirent[dirindex].present != 1) {
@@ -487,7 +487,7 @@
 
     pageent =
 	(I386_PAGE_ENTRY *) (dirent[dirindex].frame_addr << PAGE_SHIFT);
-    ((UW) pageent) = RTOV((UW) pageent);
+    pageent = (I386_PAGE_ENTRY *) RTOV((UW) pageent);
     if (pageent[pageindex].present != 1) {
 	return (NULL);
     }
@@ -637,6 +637,9 @@
     W counter;
 #endif
 
+#ifdef DEBUG
+    printk("vdel_reg %d %d\n", id, rid);
+#endif
     taskp = get_tskp(id);
     if (taskp == NULL) {
 	/*
@@ -726,7 +729,7 @@
     }
 
     size = PAGES(size);
-    (UW) start = CUTDOWN(start, PAGE_SIZE);
+    start = (VP) CUTDOWN(start, PAGE_SIZE);
     if (pmemfree() < size)
 	return (E_NOMEM);
     res = E_OK;
@@ -798,7 +801,7 @@
     }
 
     size = ROUNDUP(size, PAGE_SIZE);
-    (UW) start = CUTDOWN(start, PAGE_SIZE);
+    start = (VP) CUTDOWN(start, PAGE_SIZE);
     for (counter = 0; counter < (size >> PAGE_SHIFT); counter++) {
 	if (vunmap(taskp, ((UW) start + (counter << PAGE_SHIFT))) == FALSE) {
 	    return (E_SYS);
@@ -836,6 +839,9 @@
     T_TCB *taskp, *dstp;
     UW counter;
 
+#ifdef DEBUG
+    printk("vdup_reg %d %d %d\n", src, dst, rid);
+#endif
     taskp = (T_TCB *) get_tskp(src);
     if (taskp->tskstat == TTS_NON) {
 	return (E_PAR);
@@ -1142,7 +1148,7 @@
 	 i < ROUNDUP(max_mem, PAGE_SIZE * ADDR_MAP_SIZE) /
 	 (PAGE_SIZE * ADDR_MAP_SIZE); ++i) {
 	pageent = (I386_PAGE_ENTRY *) alloc_pagetable(ACC_KERNEL);
-#if 0
+#ifdef DEBUG
 	printk("%d: page = %x  ", i, pageent);
 #endif
 	if (pageent == NULL) {
@@ -1161,12 +1167,12 @@
 	dp1->read_write = dp2->read_write = 1;
 	dp1->u_and_s = dp2->u_and_s = ACC_KERNEL;
 	dp1->zero2 = dp2->zero2 = 0;
-	dp1->access = dp2->zero2 = 0;
-	dp1->dirty = dp2->zero2 = 0;
+	dp1->access = dp2->access = 0;
+	dp1->dirty = dp2->dirty = 0;
 	dp1->user = dp2->user = ACC_KERNEL;
 	dp1->zero1 = dp2->zero1 = 0;
     }
     /* TLB キャッシュをフラッシュする */
-    asm("movl %cr3, %eax");
-    asm("movl %eax, %cr3");
+    asm volatile ("movl %cr3, %eax");
+    asm volatile ("movl %eax, %cr3");
 }
diff -ur eota/kernel/ITRON/ibmpc/timer.c eota-cx64/kernel/ITRON/ibmpc/timer.c
--- eota/kernel/ITRON/ibmpc/timer.c	2002-02-12 17:05:48.000000000 +0900
+++ eota-cx64/kernel/ITRON/ibmpc/timer.c	2017-06-18 13:05:21.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* timer.c
@@ -31,8 +31,8 @@
 #define TIMER_FREQ	1193182L
 
 /* 大域変数の宣言 */
-W do_timer = 0;
-UW system_ticks = 0;
+volatile W do_timer = 0;
+volatile UW system_ticks = 0;
 
 static struct timer_list {
     struct timer_list *next;
diff -ur eota/kernel/ITRON/kernlib/Makefile eota-cx64/kernel/ITRON/kernlib/Makefile
--- eota/kernel/ITRON/kernlib/Makefile	2003-04-05 15:52:43.000000000 +0900
+++ eota-cx64/kernel/ITRON/kernlib/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -3,10 +3,16 @@
 #
 
 # -DDEBUG
-COPT=-O2 -fno-builtin
+COPT=-O2 -fno-builtin -m32 -fno-stack-protector
 CFLAGS=$(COPT) -I../h -I../i386 -I.. -I../servers
 CC=gcc
 
+%.o: %.c
+	$(CC) $(CFLAGS) -c $< -o $@
+
+%.o: %.S
+	$(CC) $(CFLAGS) -c $< -o $@
+
 OBJS=	call_kernel.o sys_task.o sys_message.o sys_debug.o \
 	port_manager.o message_port.o io.o sys_errno.o sys_intrpt.o \
 	sys_virtual.o sys_misc.o eventflag.o sys_evtflg.o sys_time.o
diff -ur eota/kernel/ITRON/kernlib/sys_debug.c eota-cx64/kernel/ITRON/kernlib/sys_debug.c
--- eota/kernel/ITRON/kernlib/sys_debug.c	2002-02-14 22:45:55.000000000 +0900
+++ eota-cx64/kernel/ITRON/kernlib/sys_debug.c	2017-06-17 19:10:35.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2002, Tomohide Naniwa
+(C) 2002-2017, Tomohide Naniwa
 
 */
 /* デバッグ用のシステムコール
@@ -59,7 +59,8 @@
 #define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
 #endif
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+#define INC(p,x)	(p = (VP *) (((UW)p) + sizeof (x)))
 
 /*
  *
@@ -86,16 +87,16 @@
 		break;
 
 	    case 'd':
-		if ((W) * ap < 0) {
-		    ((W) * ap) = -((W) * ap);
+	      if (*((W *) ap) < 0) {
+		    *((W *) ap) = -(* ((W *)ap));
 		    dbg_putchar('-');
 		}
-		print_digit((W) * ap, 10);
+		print_digit(*((UW *)ap), 10);
 		INC(ap, W);
 		break;
 
 	    case 'x':
-		print_digit((UW) * ap, 16);
+	        print_digit(*((UW *) ap), 16);
 		INC(ap, W);
 		break;
 
diff -ur eota/kernel/ITRON/make/Makefile eota-cx64/kernel/ITRON/make/Makefile
--- eota/kernel/ITRON/make/Makefile	2003-04-05 15:57:18.000000000 +0900
+++ eota-cx64/kernel/ITRON/make/Makefile	2017-06-17 16:09:03.000000000 +0900
@@ -17,7 +17,7 @@
 #AS=/usr/local/bin/as-new
 LD=ld
 AS=as
-CFLAGS=-O2 -fno-builtin -I. -I.. -I../h -I../i386 -I../ibmpc -I$(COMMON) -Wall -fno-builtin $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -I. -I.. -I../h -I../i386 -I../ibmpc -I$(COMMON) -Wall -fno-builtin $(IDENT)
 CC=gcc
 MKDEPEND=$(CC) -M
 STARTADDR=0x80020000
@@ -79,7 +79,7 @@
 all: itron.image
 
 itron.image: $(OBJS) libkernel.a port_manager
-	$(LD) -static -o itron.image -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(OTHEROBJ)
+	$(LD) -melf_i386 -static -zstack-size=0 -o itron.image -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(OTHEROBJ)
 
 libkernel.a:
 	${MAKE} -C ../kernlib
diff -ur eota/kernel/ITRON/servers/Makefile eota-cx64/kernel/ITRON/servers/Makefile
--- eota/kernel/ITRON/servers/Makefile	2002-01-10 17:03:18.000000000 +0900
+++ eota-cx64/kernel/ITRON/servers/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -13,8 +13,10 @@
 
 CC=gcc
 INC=-I../../ITRON/h -I../../ITRON/i386
-CFLAGS=$(INC) -O2 -fno-builtin
+CFLAGS=$(INC) -O2 -fno-builtin -m32 -fno-stack-protector
 
+%.o: %.c
+	$(CC) $(CFLAGS) -c $< -o $@
 
 OBJS=port-manager.o database.o
 
@@ -23,7 +25,7 @@
 
 
 $(TARGET): $(OBJS)
-	$(LD) -static -o $(TARGET) -e $(ENTRY) -Ttext=$(LOAD_POINT)  $(OBJS) ../kernlib/libkernel.a	
+	$(LD) -static -o $(TARGET) -e $(ENTRY) -melf_i386 -Ttext=$(LOAD_POINT)  $(OBJS) ../kernlib/libkernel.a	
 
 
 clean:
diff -ur eota/kernel/POSIX/app/Makefile eota-cx64/kernel/POSIX/app/Makefile
--- eota/kernel/POSIX/app/Makefile	2002-01-14 20:46:24.000000000 +0900
+++ eota-cx64/kernel/POSIX/app/Makefile	2017-06-16 11:05:09.000000000 +0900
@@ -14,7 +14,7 @@
 CPP=/lib/cpp
 ROOT=../..
 #CFLAGS=-Wall -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/POSIX/libc/others $(IDENT)
-CFLAGS=-Wall -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/POSIX/libc/others $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -Wall -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/POSIX/libc/others $(IDENT)
 CC=gcc
 KP=kp -input-code euc
 MKDEPEND=$(CC) -M
@@ -41,7 +41,7 @@
 all: test psauxtst2
 
 test: $(OBJS) $(LIBS) $(KERNLIBS)
-	$(LD) -Bstatic -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS) $(KERNLIBS)
+	$(LD) -melf_i386 -Bstatic -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS) $(KERNLIBS)
 
 psauxtst2: psauxtst2.o $(LIBS) $(KERNLIBS)
 	$(LD) -Bstatic -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) psauxtst2.o $(LIBS) $(KERNLIBS)
diff -ur eota/kernel/POSIX/libc/Makefile eota-cx64/kernel/POSIX/libc/Makefile
--- eota/kernel/POSIX/libc/Makefile	2003-04-06 18:51:49.000000000 +0900
+++ eota-cx64/kernel/POSIX/libc/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -9,7 +9,7 @@
 #ROOT=../../ITRON
 ROOT=../..
 #CFLAGS=-b i486-linuxaout -I. -I$(ROOT) -I../kernlib -I../../ITRON/h -I../../ITRON/i386 -fno-builtin $(IDENT)
-CFLAGS=-O2 -fno-builtin -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -I. -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT)/ITRON/h $(IDENT)
 CC=gcc
 KP=kp -input-code euc
 MKDEPEND=$(CC) -M
diff -ur eota/kernel/POSIX/libc/malloc/Makefile eota-cx64/kernel/POSIX/libc/malloc/Makefile
--- eota/kernel/POSIX/libc/malloc/Makefile	1996-11-11 22:33:31.000000000 +0900
+++ eota-cx64/kernel/POSIX/libc/malloc/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -2,7 +2,7 @@
 #
 #
 
-CFLAGS=-g -I../../../../include
+CFLAGS=-m32 -fno-stack-protector -g -I../../../../include
 
 all: malloc.o
 
diff -ur eota/kernel/POSIX/libc/others/stdlib.c eota-cx64/kernel/POSIX/libc/others/stdlib.c
--- eota/kernel/POSIX/libc/others/stdlib.c	2000-07-25 16:48:18.000000000 +0900
+++ eota-cx64/kernel/POSIX/libc/others/stdlib.c	2017-06-16 11:05:33.000000000 +0900
@@ -73,7 +73,8 @@
     }
 }
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x *)))
+#define INC(p,x)	(p = (((UW)p) + sizeof (x *)))
 
 /*
  *
@@ -123,20 +124,20 @@
 	    case 'd':
 	      if ((W)*ap < 0)
 		{
-		  ((W)*ap) = 0 - ((W)*ap);
+		  *((W *)ap) = 0 - *((W *) ap);
 		  putc ('-', port);
 		}
-	      print_digit (port, (W)*ap, 10);
+	      print_digit (port, *((W *)ap), 10);
 	      INC (ap, W);
 	      break;
 
 	    case 'x':
-	      print_digit (port, (W)*ap, 16);
+	      print_digit (port, *((UW *)ap), 16);
 	      INC (ap, W);
 	      break;
 
 	    case 'o':
-	      print_digit (port, (W)*ap, 8);
+	      print_digit (port, *((W *)ap), 8);
 	      INC (ap, W);
 	      break;
 
diff -ur eota/kernel/POSIX/lowlib/Makefile eota-cx64/kernel/POSIX/lowlib/Makefile
--- eota/kernel/POSIX/lowlib/Makefile	2002-01-13 13:32:24.000000000 +0900
+++ eota-cx64/kernel/POSIX/lowlib/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -65,13 +65,13 @@
 
 # DEBUG  = -DDEBUG
 IDENT  = $(DEBUG)
-CFLAGS = -O2 -I../libc/include -I../libc/include/sys -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib $(IDENT)
+CFLAGS = -m32 -fno-stack-protector -O2 -I../libc/include -I../libc/include/sys -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib $(IDENT)
 CC=gcc
 
 all: lowlib
 
 lowlib: $(OBJS) SYSCALLS
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 SYSCALLS:
 	$(MAKE) -C syscalls
diff -ur eota/kernel/POSIX/lowlib/syscalls/Makefile eota-cx64/kernel/POSIX/lowlib/syscalls/Makefile
--- eota/kernel/POSIX/lowlib/syscalls/Makefile	2003-04-05 16:13:08.000000000 +0900
+++ eota-cx64/kernel/POSIX/lowlib/syscalls/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -36,7 +36,7 @@
 #ROOT=../../../ITRON
 ROOT=../../..
 CC=gcc
-CFLAGS = -O2 -Wall -I../../libc/include -I../../libc/include/sys -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/kernlib $(IDENT)
+CFLAGS = -m32 -fno-stack-protector -O2 -Wall -I../../libc/include -I../../libc/include/sys -I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/kernlib $(IDENT)
 
 
 OBJS =	_make_cnnct.o \
diff -ur eota/kernel/POSIX/manager/Makefile eota-cx64/kernel/POSIX/manager/Makefile
--- eota/kernel/POSIX/manager/Makefile	2003-04-15 23:23:02.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -20,9 +20,12 @@
 IDENT=$(DEBUG) -DKERNEL
 ROOT=../..
 INC=-I$(ROOT) -I$(ROOT)/ITRON -I$(ROOT)/ITRON/servers -I$(ROOT)/ITRON/h
-CFLAGS=-O2 -fno-builtin -Wall $(INC) $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -Wall $(INC) $(IDENT)
 CC=gcc
 
+%.o: %.S
+	$(CC) $(CFLAGS) -c $*.S
+
 ENTRY=startup
 STARTADDR=0x00001000
 
@@ -41,7 +44,7 @@
 	${MAKE} posix_manager
 
 posix_manager:	$(OBJS) $(LIBS)
-	$(LD) -static -o $@ -e $(ENTRY) -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e $(ENTRY) -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 	size $@
 
 clean:
diff -ur eota/kernel/POSIX/manager/dosfs/Makefile eota-cx64/kernel/POSIX/manager/dosfs/Makefile
--- eota/kernel/POSIX/manager/dosfs/Makefile	1998-12-19 13:47:53.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/dosfs/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -8,7 +8,7 @@
 
 #CFLAGS=-g -DDEBUG
 #CFLAGS=-b i486-linuxaout -m386 -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
-CFLAGS=-Wall -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
+CFLAGS=-m32 -fno-stack-protector -Wall -DDEBUG -I -I. -I$(ROOT) -I../../kernlib -I../../../ITRON -I../../../ITRON/i386 -I../../../ITRON/h -fno-builtin 
 
 
 all: libdosfs.a
diff -ur eota/kernel/POSIX/manager/exec.c eota-cx64/kernel/POSIX/manager/exec.c
--- eota/kernel/POSIX/manager/exec.c	2002-02-18 04:33:30.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/exec.c	2017-06-16 11:04:57.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2003, Tomohide Naniwa
 
 */
 
@@ -82,8 +82,6 @@
     ID signal_task;
 #endif
     struct proc *procp;
-    ID rid;
-
 
 #ifdef notdef
     printk("[PM] exec_program: path = \"%s\"\n", pathname);	/* */
@@ -199,13 +197,27 @@
     }
 
     /* 残りの region の作成 */
-    vnew_reg(req->caller, (VP) VADDR_HEAP, 0, STD_HEAP_SIZE,
-	     VM_READ | VM_WRITE | VM_USER, NULL, &rid);	/* heap */
+    errno = vcre_reg(req->caller, HEAP_REGION,
+		     (VP) VADDR_HEAP, 0, STD_HEAP_SIZE,
+	     VM_READ | VM_WRITE | VM_USER, NULL);	/* heap */
+#ifdef DEBUG
+    if (errno) {
+      dbg_printf("[EXEC]: vcre_reg return %d\n", errno);
+    }
+    {
+      T_REGION reg;
+
+      errno = vsts_reg(req->caller, HEAP_REGION, (VP) & reg);
+      dbg_printf("[EXEC] err = %d sa %x, min %x, max %x\n",
+		 errno, reg.start_addr, reg.min_size, reg.max_size);
+    }
+#endif
+
 #if 0
     /* stack の region は fork から呼ばれる vcpy_stk で実行される */
-    vnew_reg(req->caller,
+    vcre_reg(req->caller, STACK_REGION,
 	     (VP) VADDR_STACK_HEAD, STD_STACK_SIZE, STD_STACK_SIZE,
-	     VM_READ | VM_WRITE | VM_USER, NULL, &rid);	/* stack */
+	     VM_READ | VM_WRITE | VM_USER, NULL);	/* stack */
 #endif
 
 #if 0
@@ -374,8 +386,6 @@
     W vaddr;
     static B buf[PAGE_SIZE];
     UW start, size;
-    ID rid;
-
 
     start = CUTDOWN(text->p_vaddr, PAGE_SIZE);
     size =
@@ -383,8 +393,8 @@
 		(text->p_vaddr - CUTDOWN(text->p_vaddr, PAGE_SIZE)),
 		PAGE_SIZE);
     /* text region の設定 */
-    vnew_reg(task, (VP) start, size, size,
-	     VM_READ | VM_EXEC | VM_USER, NULL, &rid);
+    vcre_reg(task, TEXT_REGION, (VP) start, size, size,
+	     VM_READ | VM_EXEC | VM_USER, NULL);
 
     errno = alloc_memory(procid, start, size, VM_READ | VM_EXEC);
     if (errno) {
@@ -438,7 +448,6 @@
     W vaddr;
     static B buf[PAGE_SIZE];
     UW start, size;
-    ID rid;
 
     start = CUTDOWN(data->p_vaddr, PAGE_SIZE);
     size =
@@ -446,8 +455,8 @@
 		(data->p_vaddr - CUTDOWN(data->p_vaddr, PAGE_SIZE)),
 		PAGE_SIZE);
     /* data+bss region の設定 */
-    vnew_reg(task, (VP) start, size, size,
-	     VM_READ | VM_WRITE | VM_USER, NULL, &rid);	/* data+bss */
+    vcre_reg(task, DATA_REGION, (VP) start, size, size,
+	     VM_READ | VM_WRITE | VM_USER, NULL);	/* data+bss */
     errno = alloc_memory(procid, start, size, VM_READ | VM_WRITE);
     if (errno) {
 #ifdef EXEC_DEBUG
diff -ur eota/kernel/POSIX/manager/fork.c eota-cx64/kernel/POSIX/manager/fork.c
--- eota/kernel/POSIX/manager/fork.c	2002-01-28 17:28:25.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/fork.c	2017-06-16 11:04:57.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2003, Tomohide Naniwa
 
 */
 
@@ -160,11 +160,15 @@
 #endif
 
     /* region のコピー */
-    vdup_reg(source->proc_maintask, 1, destination->proc_maintask);	/* text */
-    vdup_reg(source->proc_maintask, 2, destination->proc_maintask);	/* data+bss */
-    vdup_reg(source->proc_maintask, 3, destination->proc_maintask);	/* heap */
+    /* text */
+    vdup_reg(source->proc_maintask, destination->proc_maintask, TEXT_REGION);
+    /* data+bss */
+    vdup_reg(source->proc_maintask, destination->proc_maintask, DATA_REGION);
+    /* heap */
+    vdup_reg(source->proc_maintask, destination->proc_maintask, HEAP_REGION);
 #ifdef notdef
-    vdup_reg(source->proc_maintask, 4, destination->proc_maintask);	/* stack */
+    /* stack */
+    vdup_reg(source->proc_maintask, destination->proc_maintask, STACK_REGION);
 #endif
 
     /* 仮想空間の生成 */
diff -ur eota/kernel/POSIX/manager/log.c eota-cx64/kernel/POSIX/manager/log.c
--- eota/kernel/POSIX/manager/log.c	2002-01-21 23:10:25.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/log.c	2017-06-16 11:05:33.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001-2002, Tomohide Naniwa
+(C) 2001-2017, Tomohide Naniwa
 
 */
 /* log.c - ログ出力用の関数
@@ -96,7 +96,8 @@
     }
 }
 
-#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+//#define INC(p,x)	(((W)p) = (((W)p) + sizeof (x)))
+#define INC(p,x)	(p = (VP *) (((UW)p) + sizeof (x)))
 
 /*
  *
@@ -127,15 +128,15 @@
 
 	    case 'd':
 		if ((W) * ap < 0) {
-		    ((W) * ap) = -((W) * ap);
+		    *((W *) ap) = - *((W* )ap);
 		    putc('-', log_port);
 		}
-		print_digit((W) * ap, 10);
+		print_digit(*((W *) ap), 10);
 		INC(ap, W);
 		break;
 
 	    case 'x':
-		print_digit((UW) * ap, 16);
+	        print_digit(*((UW *)ap), 16);
 		INC(ap, W);
 		break;
 
diff -ur eota/kernel/POSIX/manager/posix_fs.h eota-cx64/kernel/POSIX/manager/posix_fs.h
--- eota/kernel/POSIX/manager/posix_fs.h	2002-02-14 23:27:46.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/posix_fs.h	2017-06-16 11:05:33.000000000 +0900
@@ -366,9 +366,10 @@
 
 extern W do_df();
 
-extern struct fs fs_buf[], *free_fs, *rootfs;
-extern struct inode inode_buf[], *free_inode, *rootfile;
-extern struct file file_buf[], *free_file;
+extern struct fs fs_buf[MAX_MOUNT], *free_fs, *rootfs;
+extern struct inode inode_buf[MAX_INODE], *free_inode, *rootfile;
+//extern struct file file_buf[], *free_file;
+extern struct file *file_buf, *free_file;
 
 #endif
 
diff -ur eota/kernel/POSIX/manager/process.c eota-cx64/kernel/POSIX/manager/process.c
--- eota/kernel/POSIX/manager/process.c	2002-02-03 18:06:41.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/process.c	2017-06-16 11:04:57.000000000 +0900
@@ -210,9 +210,15 @@
     procp->proc_ppid = procinfo->proc_ppid;
 
     /* region の生成 */
-    vnew_reg(tskid, 0, 0x7fffffff, 0x7fffffff, procinfo->proc_access, NULL, &rid);	/* text */
-    vnew_reg(tskid, 0, 0x7fffffff, 0x7fffffff, procinfo->proc_access, NULL, &rid);	/* data+bss */
-    vnew_reg(tskid, 0, 0, 0x7fffffff, procinfo->proc_access, NULL, &rid);	/* heap */
+    /* text */
+    vcre_reg(tskid, TEXT_REGION,
+	     0, 0x7fffffff, 0x7fffffff, procinfo->proc_access, NULL);
+    /* data+bss */
+    vcre_reg(tskid, DATA_REGION,
+	     0, 0x7fffffff, 0x7fffffff, procinfo->proc_access, NULL);
+    /* heap */
+    vcre_reg(tskid, HEAP_REGION,
+	     0, 0, 0x7fffffff, procinfo->proc_access, NULL);
 #if 0
     vnew_reg(tskid, 0, PAGE_SIZE, 0x7fffffff, procinfo->proc_access, NULL, &rid);	/* stack */
 #endif
diff -ur eota/kernel/POSIX/manager/sfs/Makefile eota-cx64/kernel/POSIX/manager/sfs/Makefile
--- eota/kernel/POSIX/manager/sfs/Makefile	2001-12-28 17:02:24.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/sfs/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -10,7 +10,7 @@
 ROOT=../../../ITRON
 INC=-I$(ROOT) -I$(ROOT)/kernlib -I$(ROOT)/h
 IDENT=-DKERNEL # -DDEBUG
-CFLAGS=-O2 -fno-builtin -Wall $(INC) $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -fno-builtin -Wall $(INC) $(IDENT)
 CC=gcc
 
 OBJS=sfs_fs.o sfs_block.o sfs_file.o sfs_dir.o sfs_inode.o sfs_device.o \
diff -ur eota/kernel/POSIX/manager/syscalls/Makefile eota-cx64/kernel/POSIX/manager/syscalls/Makefile
--- eota/kernel/POSIX/manager/syscalls/Makefile	2003-04-05 16:18:56.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/syscalls/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -35,7 +35,7 @@
 #DEBUG=-DEXEC_DEBUG -DDEBUG
 IDENT=$(DEBUG) -DKERNEL
 INC=-I.. -I../../../ITRON -I../../../ITRON/h
-CFLAGS = -O2 -fno-builtin -Wall $(INC) $(IDENT)
+CFLAGS = -m32 -fno-stack-protector -O2 -fno-builtin -Wall $(INC) $(IDENT)
 CC=gcc
 
 OBJS =	access.o \
diff -ur eota/kernel/POSIX/manager/syscalls/brk.c eota-cx64/kernel/POSIX/manager/syscalls/brk.c
--- eota/kernel/POSIX/manager/syscalls/brk.c	2002-02-17 13:08:52.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/syscalls/brk.c	2017-06-16 11:04:57.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2003, Tomohide Naniwa
 
 */
 /*
@@ -30,12 +30,17 @@
     if (err)
 	return err;
 
-    err = vsts_reg(req->caller, 3, (VP) & reg);
+    err = vsts_reg(req->caller, HEAP_REGION, (VP) & reg);
 #ifdef DEBUG
-    printk("[PM] err = %d sa %x, min %x, max %x, ea %x\n",
+    dbg_printf("[PM] err = %d id %d, sa %x, min %x, max %x, ea %x\n",
+	       req->caller,
 	   err, reg.start_addr, reg.min_size, reg.max_size,
 	   req->param.par_brk.end_adr);
 #endif
+    if (err) {
+	put_response(req, err, -1, 0, 0);
+	return (FAIL);
+    }
 
     err = EP_OK;
     start = reg.start_addr + reg.min_size;
@@ -63,10 +68,10 @@
 	return (FAIL);
     }
 
-    /* for debug */
 #ifdef DEBUG
-    vsts_reg(req->caller, 3, (VP) & reg);
-    printk("[PM] after brk sa %x, min %x, max %x\n",
+    /* for debug */
+    vsts_reg(req->caller, HEAP_REGION, (VP) & reg);
+    dbg_printf("[PM] after brk sa %x, min %x, max %x\n",
 	   reg.start_addr, reg.min_size, reg.max_size);
 #endif
 
diff -ur eota/kernel/POSIX/manager/syscalls/exit.c eota-cx64/kernel/POSIX/manager/syscalls/exit.c
--- eota/kernel/POSIX/manager/syscalls/exit.c	2001-04-08 13:28:44.000000000 +0900
+++ eota-cx64/kernel/POSIX/manager/syscalls/exit.c	2017-06-16 11:04:57.000000000 +0900
@@ -7,7 +7,7 @@
 
 (C) B-Free Project.
 
-(C) 2001, Tomohide Naniwa
+(C) 2001-2003, Tomohide Naniwa
 
 */
 /*
@@ -86,11 +86,11 @@
 
   /* region の開放, 実際には必要無いだろう */
   tskid = req->caller,
-  vdel_reg(tskid, 1); /* text */
-  vdel_reg(tskid, 2); /* data+bss */
-  vdel_reg(tskid, 3); /* heap */
+  vdel_reg(tskid, TEXT_REGION); /* text */
+  vdel_reg(tskid, DATA_REGION); /* data+bss */
+  vdel_reg(tskid, HEAP_REGION); /* heap */
 #ifdef notdef
-  vdel_reg(tskid, 4); /* stack */
+  vdel_reg(tskid, STACK_REGION); /* stack */
 #endif
 
   put_response (req, EP_OK, 0, 0, 0);
diff -ur eota/kernel/POSIX/mkfs/Makefile eota-cx64/kernel/POSIX/mkfs/Makefile
--- eota/kernel/POSIX/mkfs/Makefile	2002-07-21 13:38:07.000000000 +0900
+++ eota-cx64/kernel/POSIX/mkfs/Makefile	2017-06-18 20:13:22.863850505 +0900
@@ -16,7 +16,7 @@
 %.no: %.c
 	$(CC) $(NCFLAGS) -c $< -o $@
 
-CFLAGS=-Wall
+CFLAGS=-Wall -m32
 
 all: mksfs statfs sfsck
 eota: mksfs-e statfs-e sfsck-e
diff -ur eota/kernel/POSIX/servers/ramdisk/Makefile eota-cx64/kernel/POSIX/servers/ramdisk/Makefile
--- eota/kernel/POSIX/servers/ramdisk/Makefile	2002-01-18 18:17:44.000000000 +0900
+++ eota-cx64/kernel/POSIX/servers/ramdisk/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -7,7 +7,7 @@
 CPP=/lib/cpp
 ROOT=../../..
 #CFLAGS=-b i486-linuxaout -I. -I$(ROOT) -I$(ROOT)/h -I$(ROOT)/i386 -I../../../ITRON/kernlib -fno-builtin $(IDENT)
-CFLAGS=-O2 -I. -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/kernlib -fno-builtin $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -I. -I$(ROOT)/ITRON -I$(ROOT)/ITRON/h -I$(ROOT)/ITRON/i386 -I$(ROOT)/ITRON/kernlib -fno-builtin $(IDENT)
 CC=gcc
 #AS=/usr/local/bin/as
 AS=/usr/bin/as
@@ -30,7 +30,7 @@
 all: ramdisk
 
 ramdisk: $(OBJS) $(SRCS) $(LIBS) Makefile
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags ../*/*.[hcs]
diff -ur eota/kernel/POSIX/servers/wconsole/Makefile eota-cx64/kernel/POSIX/servers/wconsole/Makefile
--- eota/kernel/POSIX/servers/wconsole/Makefile	2003-04-15 23:22:55.000000000 +0900
+++ eota-cx64/kernel/POSIX/servers/wconsole/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -9,7 +9,7 @@
 ROOT=../../..
 #CFLAGS= -b i486-linuxaout -I. -I$(ROOT) -I../../kernlib -fno-builtin $(IDENT)
 #CFLAGS= -I. -I$(ROOT) -I$(ROOT)/kernlib -fno-builtin $(IDENT)
-CFLAGS=-O2 -I. -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT) $(IDENT)
+CFLAGS=-m32 -fno-stack-protector -O2 -I. -I$(ROOT)/ITRON -I$(ROOT)/ITRON/kernlib -I$(ROOT) $(IDENT)
 CC=gcc
 #AS=/usr/local/bin/as
 AS=/usr/bin/as
@@ -36,7 +36,7 @@
 	${MAKE} wconsole
 
 wconsole: $(OBJS) $(SRCS) Makefile $(LIBS)
-	$(LD) -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
+	$(LD) -melf_i386 -static -o $@ -e ${ENTRY} -Ttext=$(STARTADDR) $(OBJS) $(LIBS)
 
 tags:
 	etags ../*/*.[hcs]
diff -ur eota/kernel/POSIX/servers/wconsole/misc.c eota-cx64/kernel/POSIX/servers/wconsole/misc.c
--- eota/kernel/POSIX/servers/wconsole/misc.c	2003-04-05 16:16:49.000000000 +0900
+++ eota-cx64/kernel/POSIX/servers/wconsole/misc.c	2017-06-16 11:04:57.000000000 +0900
@@ -117,11 +117,6 @@
   if (video_mode == GRAPHIC_MODE && winid == focus) {
     if (x >= w[winid].column || y >= w[winid].line) return;
 #ifdef notdef
-    draw_istring(w[winid].font_w*x + w[winid].x + 1,
-		 w[winid].font_h*y + w[winid].y + 1,
-		 " ", 0, 8, 0);
-#else
-#if 0
     fillbox_vga(w[winid].font_w*x + w[winid].x + 1,
 		w[winid].font_h*y + w[winid].y + 1,
 		w[winid].font_w, w[winid].font_h, VGA16_DGRAY, VGA_XOR);
@@ -132,7 +127,6 @@
 	     w[winid].font_h*y + w[winid].y + w[winid].font_h + 1,
 	     VGA16_LGRAY, VGA_OVERWRITE);
 #endif
-#endif
     return;
   }
   dis_int ();
@@ -149,11 +143,6 @@
 {
   if (video_mode == GRAPHIC_MODE) {
 #ifdef notdef
-    draw_istring(w[winid].font_w*w[winid].curpos.x + w[winid].x + 1,
-		 w[winid].font_h*w[winid].curpos.y + w[winid].y + 1,
-		 " ", VGA16_BLACK, VGA16_WHITE, 0);
-#else
-#if 0
     fillbox_vga(w[winid].font_w*w[winid].curpos.x + w[winid].x + 1,
 		w[winid].font_h*w[winid].curpos.y + w[winid].y + 1,
 		w[winid].font_w, w[winid].font_h, VGA16_DGRAY, VGA_XOR);
@@ -167,7 +156,6 @@
 	     + w[winid].font_h + 1,
 	     VGA16_WHITE, VGA_OVERWRITE);
 #endif
-#endif
   }
 }
 
diff -ur eota/sfsboot/2nd/Makefile eota-cx64/sfsboot/2nd/Makefile
--- eota/sfsboot/2nd/Makefile	2002-02-24 12:47:15.000000000 +0900
+++ eota-cx64/sfsboot/2nd/Makefile	2017-06-16 11:58:53.000000000 +0900
@@ -29,10 +29,11 @@
 ITRON = ../../kernel/ITRON
 INCPATH = -I. -I$(COMMON) -I$(ITRON)
 
-NOFLAGS=-c -m386 -msoft-float -fno-builtin -Wall -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC $(HDBOOT) $(INCPATH)
-CFLAGS=-O $(NOFLAGS)
+#NOFLAGS=-c -m386 -msoft-float -fno-builtin -Wall -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC $(HDBOOT) $(INCPATH)
+NOFLAGS=-c -m32 -msoft-float -fno-builtin -Wall -D__LINUX__ -DSUPPORT_144 $(DEBUG) -DIBMPC $(HDBOOT) $(INCPATH)
+CFLAGS=-O $(NOFLAGS) -fno-stack-protector
 
-LDOPT32 = -n -Ttext=$(START_ADDR) -static -e _main
+LDOPT32 = -n -Ttext=$(START_ADDR) -static -e _main  -melf_i386
 
 ########################################################################
 #
@@ -74,7 +75,7 @@
 	$(ETAGS) $(CSRC)
 
 mkdepend:
-	$(CC) -M -D__LINUX__ $(CSRC) > DEPEND
+	$(CC) -m32 -M -D__LINUX__ $(CSRC) > DEPEND
 
 #######################################################################
 #
@@ -82,7 +83,7 @@
 #
 
 build_boot2: build_boot2.c
-	$(CC) -D__LINUX__ -DGCC_USE -o build_boot2 build_boot2.c
+	$(CC) -m32 -D__LINUX__ -DGCC_USE -o build_boot2 build_boot2.c
 
 
 #include DEPEND
diff -ur eota/sfsboot/2nd/bootos.c eota-cx64/sfsboot/2nd/bootos.c
--- eota/sfsboot/2nd/bootos.c	2002-01-24 19:48:31.000000000 +0900
+++ eota-cx64/sfsboot/2nd/bootos.c	2017-06-16 21:08:50.000000000 +0900
@@ -20,10 +20,11 @@
   }
   
   boot_printf ("[%s]\n",info->name);
-  boot_printf ("Module: exec type = 0x%x, Text size = %d, Data size = %d\n",
+  boot_printf ("Module: exec type = 0x%x, Text size = %d, Data size = %d, Entry = %x\n",
 	       N_MAGIC(*exec_info),
 	       exec_info->a_text,
-	       exec_info->a_data);
+	       exec_info->a_data,
+	       exec_info->a_entry);
 
   if((N_MAGIC(*exec_info) == 0413) || (N_MAGIC(*exec_info) == NMAGIC)) {
     if(read_file(ip, offset + BLOCK_SIZE, exec_info->a_text + exec_info->a_data, 
diff -ur eota/sfsboot/2nd/cinterrupt.c eota-cx64/sfsboot/2nd/cinterrupt.c
--- eota/sfsboot/2nd/cinterrupt.c	2002-01-24 17:22:11.000000000 +0900
+++ eota-cx64/sfsboot/2nd/cinterrupt.c	2017-06-16 19:23:23.000000000 +0900
@@ -97,7 +97,7 @@
  *
  */
 int
-wait_int (int *flag)
+wait_int (volatile int *flag)
 {
   set_int();
   while(*flag == FALSE);
diff -ur eota/sfsboot/2nd/fd.c eota-cx64/sfsboot/2nd/fd.c
--- eota/sfsboot/2nd/fd.c	2000-08-26 22:34:02.000000000 +0900
+++ eota-cx64/sfsboot/2nd/fd.c	2017-06-23 21:27:28.435686916 +0900
@@ -32,7 +32,7 @@
 };
 
 struct status		fd_status;
-static int		intr_flag = FALSE;
+static volatile int	intr_flag = FALSE;
 
 static struct spec	fd_spec[] = 
 {
diff -ur eota/sfsboot/2nd/interrupt.h eota-cx64/sfsboot/2nd/interrupt.h
--- eota/sfsboot/2nd/interrupt.h	2000-07-31 15:58:55.000000000 +0900
+++ eota-cx64/sfsboot/2nd/interrupt.h	2017-06-16 19:24:14.000000000 +0900
@@ -19,8 +19,6 @@
 #define	INT_IDE			46		/* IDE HD */
 #define	INT_IDE2		47		/* IDE HD */
 
-extern int      wait_int (int *flag);
-
 extern void     int32_handler (void);
 extern void	int33_handler (void);   /* keyboard */ 
 extern void     int35_handler (void);
@@ -50,7 +48,7 @@
 extern void     intr_fd();
 extern void	intr_ide ();
 
-extern int      wait_int (int *flag);
+extern int      wait_int (volatile int *flag);
 
 void reset_intr_mask(int intn);
 
diff -ur eota/sfsboot/2nd/keyboard.c eota-cx64/sfsboot/2nd/keyboard.c
--- eota/sfsboot/2nd/keyboard.c	2003-04-05 15:29:58.000000000 +0900
+++ eota-cx64/sfsboot/2nd/keyboard.c	2017-06-23 21:28:04.653883757 +0900
@@ -92,8 +92,8 @@
 
 int  keyboard_type;
 
-int	cbuf;
-int	input_flag;
+volatile int	cbuf;
+volatile int	input_flag;
 
 
 /*
@@ -207,7 +207,7 @@
 {
   int		ch;
   int		i;
-  static int	mode = 0;
+  int		mode = 0;
 
   ch = inb (KEY_DATA);	/* get scan code */
   for (i = 0; i < 100; i++)
diff -ur eota/sfsboot/2nd/lib.c eota-cx64/sfsboot/2nd/lib.c
--- eota/sfsboot/2nd/lib.c	2000-07-31 15:58:55.000000000 +0900
+++ eota-cx64/sfsboot/2nd/lib.c	2017-06-16 11:05:33.000000000 +0900
@@ -8,7 +8,8 @@
 static void	write_digit2 ();
 
 
-#define INC(x,type)	(((type *)x) += 1)
+//#define INC(x,type)	(((type *)x) += 1)
+#define INC(x,type)	(x = (void *) (((unsigned int) x) + sizeof(type)))
 
 void
 boot_printf (char *fmt, ...)
diff -ur eota/sfsboot/2nd/memory.c eota-cx64/sfsboot/2nd/memory.c
--- eota/sfsboot/2nd/memory.c	2002-02-11 11:20:37.000000000 +0900
+++ eota-cx64/sfsboot/2nd/memory.c	2017-06-16 11:05:33.000000000 +0900
@@ -25,7 +25,7 @@
 
   ext_mem = *p;
 #else
-  for (p = (int *)0x100000; (int)p < 0xf000000; (int)p += 0x100000)
+  for (p = (int *)0x100000; (int)p < 0xf000000; p = ((unsigned int) p) + 0x100000)
     {
       *p = 0;
       *p = 0xAA;
diff -ur eota/sfsboot/2nd/start16.asm eota-cx64/sfsboot/2nd/start16.asm
--- eota/sfsboot/2nd/start16.asm	2002-02-10 22:12:51.000000000 +0900
+++ eota-cx64/sfsboot/2nd/start16.asm	2017-06-16 12:05:17.000000000 +0900
@@ -21,6 +21,7 @@
 CENTURY		equ	0ff7h
 	
 	section .text
+	bits 16
 
 	org	0000h
 
diff -ur eota/sfsboot/2nd/start32.asm eota-cx64/sfsboot/2nd/start32.asm
--- eota/sfsboot/2nd/start32.asm	2000-08-08 22:31:09.000000000 +0900
+++ eota-cx64/sfsboot/2nd/start32.asm	2017-06-18 14:17:20.000000000 +0900
@@ -31,7 +31,8 @@
 	push	eax
 	push	eax
 	cld
-	call	08h:MODE32_ADDR
+;	call	08h:MODE32_ADDR
+	call	08h:0038001Dh		; address should find from mode32.sym
 
 ;-----------------------------------------------------------
 	align	4
@@ -43,4 +44,4 @@
 
 
 
-					
\ ＜ゃ絨障壕障
+					
diff -ur eota/sfsboot/Makefile eota-cx64/sfsboot/Makefile
--- eota/sfsboot/Makefile	2002-07-21 13:25:31.000000000 +0900
+++ eota-cx64/sfsboot/Makefile	2017-06-16 11:05:33.000000000 +0900
@@ -25,7 +25,7 @@
 LD=ld
 GCC=gcc
 
-CFLAGS=-D__LINUX__
+CFLAGS=-D__LINUX__ -m32
 
 all: 1stboot 2ndboot mkmap mkboot mkhdboot
 
@@ -36,16 +36,16 @@
 	cd 2nd ; ${MAKE} 2ndboot
 
 mkmap: mkmap.c
-	$(GCC) -o mkmap mkmap.c
+	$(GCC) -m32 -o mkmap mkmap.c
 
 mkboot: mkboot.c
-	$(GCC) -o mkboot mkboot.c
+	$(GCC) -m32 -o mkboot mkboot.c
 
 mkhdboot: mkhdboot.c
-	$(GCC) -o mkhdboot mkhdboot.c
+	$(GCC) -m32 -o mkhdboot mkhdboot.c
 
 modboot: modboot.c
-	$(GCC) -o modboot modboot.c
+	$(GCC) -m32 -o modboot modboot.c
 
 modboot-e: modboot.no $(NLIBS) $(NKERNLIBS)
 	$(LD) -Bstatic -o $@ -e ${NENTRY} -Ttext=$(STARTADDR) modboot.no $(NLIBS) $(NKERNLIBS) 
