changeset 1:70754edc1f50

runnable
author mir3636
date Wed, 10 Oct 2018 18:50:50 +0900
parents 1a23828953f2
children 461420da09c6 74b19f0bedc5
files Makefile asmhead.asm iplelf.asm os.ls
diffstat 4 files changed, 22 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Wed Oct 03 21:06:50 2018 +0900
+++ b/Makefile	Wed Oct 10 18:50:50 2018 +0900
@@ -25,7 +25,7 @@
 	make -r haribote.img
 
 kernel.elf: asmhead.bin bootpack.o nasmfunc.o
-	i386-elf-ld -m elf_i386 -e asmhead -o kernel.elf -T os.ls asmhead.bin bootpack.o nasmfunc.o
+	i386-elf-ld -m elf_i386 -e asmhead -o kernel.elf -T os.ls asmhead.bin bootpack.o nasmfunc.o -Map kernel.map
 
 elf.img : iplelf.bin kernel.elf
 	mformat -f 1440 -C -B iplelf.bin -i elf.img ::
@@ -41,11 +41,11 @@
 	make clean
 	rm haribote.img
 
-elf: elf.img kernel.elf
+elf: elf.img
 	qemu-system-i386 -fda elf.img -m 512M  
 
-elfd: elf.img kernel.elf
-	qemu-system-i386 -fda elf.img -m 512M -gdb tcp::1234 -S 
+elfd: elf.img
+	qemu-system-i386 -fda elf.img -m 512M -gdb tcp::1233 -S
 
 do: haribote.img
 	qemu-system-i386 -fda haribote.img -m 512M
--- a/asmhead.asm	Wed Oct 03 21:06:50 2018 +0900
+++ b/asmhead.asm	Wed Oct 10 18:50:50 2018 +0900
@@ -1,6 +1,7 @@
 ; haribote-os
 ; TAB=4
 
+bits    16
 
 BOTPAK EQU 0x00280000 ; bootpackのロード先
 DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所
@@ -18,11 +19,14 @@
 
 section .text
 
+    extern HariMain
+    extern _data_start
+    extern _data_size
+    extern _data_addr
     global asmhead
 
 asmhead:
     
-
 ; 画面モードを設定
 
     MOV     AL,0x13 ; VGAグラフィックス、320*200*8bitカラー
@@ -81,7 +85,7 @@
 
 ; bootpackの転送
 
-    MOV     ESI,bootpack ; 転送元
+    MOV     ESI,HariMain ; 転送元
     MOV     EDI,BOTPAK ; 転送先
     MOV     ECX,512*1024/4
     CALL    memcpy
@@ -111,17 +115,17 @@
 ; bootpack の起動
 
     MOV     EBX,BOTPAK
-    MOV     ECX,[EBX+16]
+    MOV     ECX,_data_size
     ADD     ECX,3 ; ECX += 3
     SHR     ECX,2 ; ECX /= 4
     JZ      skip ;転送すべきものがない
-    MOV     ESI,[EBX+20] ; 転送元
+    MOV     ESI,_data_addr ; 転送元
     ADD     ESI,EBX
-    MOV     EDI,[EBX+12] ; 転送先
+    MOV     EDI,_data_start ; 転送先
     CALL    memcpy
 skip:
-    MOV     ESP,[EBX+12] ; スタック初期値
-    JMP     DWORD 2*8:0x0000001b
+    MOV     ESP,_data_start ; スタック初期値
+    JMP     DWORD 2*8:0x0
 
 waitkbdout:
     IN      AL,0x64
@@ -151,4 +155,3 @@
     DD      GDT0
 
     ALIGNB  16,DB 0
-bootpack:
--- a/iplelf.asm	Wed Oct 03 21:06:50 2018 +0900
+++ b/iplelf.asm	Wed Oct 10 18:50:50 2018 +0900
@@ -83,7 +83,7 @@
     MOV     [0x0ff0],CH ; IPLがどこまで読んだかをメモ
 ;    MOV     SI,0xd000+0x18 ; ELF entry point offset
 ;    MOV     AX,[SI]
-    JMP	    0xd190
+    JMP	    0xc200
 
 error:
     MOV     SI,msg
--- a/os.ls	Wed Oct 03 21:06:50 2018 +0900
+++ b/os.ls	Wed Oct 10 18:50:50 2018 +0900
@@ -4,24 +4,17 @@
 ENTRY(asmhead)
 
 SECTIONS {
-	.head 0x0 : {
-		LONG(64 * 1024) /* 0 : size(stack+.data+heap) */
-		LONG(0x69726148) /* 4 : "Hari" */
-		LONG(0) /* 8 : mmarea*/
-		LONG(0x310000) /* 12 : stack初期値 & .data転送先 */
-		LONG(SIZEOF(.data)) /* 16 : size of .data */
-		LONG(LOADADDR(.data)) /* 20 : size of .data */
-		LONG(0xE9000000) /* 24 : E9000000 */
-		LONG(HariMain - 0x20) /* 28 : entry - 0x20 */
-		LONG(0) /* 32 : heap領域開始アドレス */
-	}
+
+    . = 0xc200;
 
-    . = 0xd18d;
+    .text   : {*(.text)}
 
-.text	: {*(.text)}
 
 	.data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) {
+        _data_start = .;
 		*(.data)
+        _data_size = SIZEOF(.data);
+        _data_addr = LOADADDR(.data);
 		*(.rodata*)
 		*(.bss)
 	}