Mercurial > hg > Members > mitsuki > haribote
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) }