diff options
author | Benji Dial <Benji3.141@gmail.com> | 2019-12-23 01:33:26 -0500 |
---|---|---|
committer | Benji Dial <Benji3.141@gmail.com> | 2019-12-23 01:33:26 -0500 |
commit | e520b52cd58f70af9a17f330fe1ce98ce059762c (patch) | |
tree | a4d8ec52453b0a8f872aea1ab3c4c5867543c90c | |
parent | 4edc0cb2313541e74026c25b52a8f9685d953a14 (diff) | |
download | portland-os-e520b52cd58f70af9a17f330fe1ce98ce059762c.tar.gz |
small changes, part 1
-rw-r--r-- | doc/design/kernel_functions.txt | 4 | ||||
-rw-r--r-- | doc/design/memory_map.txt | 2 | ||||
-rw-r--r-- | makefile | 17 | ||||
-rw-r--r-- | src/bootloader.asm | 14 | ||||
-rw-r--r-- | src/kernel/link.ld | 11 | ||||
-rw-r--r-- | src/kernel/main.c | 4 | ||||
-rw-r--r-- | src/kernel/mem.c | 2 | ||||
-rw-r--r-- | src/kernel/misc.h | 2 | ||||
-rw-r--r-- | src/kernel/proc.c | 2 |
9 files changed, 34 insertions, 24 deletions
diff --git a/doc/design/kernel_functions.txt b/doc/design/kernel_functions.txt deleted file mode 100644 index 8981e86..0000000 --- a/doc/design/kernel_functions.txt +++ /dev/null @@ -1,4 +0,0 @@ -allocate: - ax in: number of pages - dx in: process id - ebx out: address, or 0x0000_0000 on failure
\ No newline at end of file diff --git a/doc/design/memory_map.txt b/doc/design/memory_map.txt index 27da346..74ac2d5 100644 --- a/doc/design/memory_map.txt +++ b/doc/design/memory_map.txt @@ -13,8 +13,8 @@ 0x0001 = unavailable 0x0002 = kernel other = process number - 0x4000 - 0x6fff : not assigned + 0x7000 - 0x7bff : bootloader scratch 0x7000 : memory map bios buffer 0x7c00 - 0x7fff : bootloader
\ No newline at end of file @@ -1,5 +1,5 @@ -floppy: out bootloader files - mkfs.fat -C -f 1 -F 12 -n "PORTLAND OS" -R 4 -S 512 out/floppy.img 1440 +floppy: bootloader fs + mkfs.fat -C -f 1 -F 12 -n "PORTLAND OS" -R 2 -S 512 out/floppy.img 1440 mkdir out/floppy_mount mount out/floppy.img out/floppy_mount cp out/fs/* out/floppy_mount/ @@ -7,16 +7,13 @@ floppy: out bootloader files dd if=obj/bootloader.bin of=out/floppy.img bs=1 seek=62 conv=notrunc bootloader: obj - nasm src/bootloader.bin -o obj/bootloader.bin + nasm src/bootloader.asm -o obj/bootloader.bin -kernel: obj out - gcc -c src/kernel/main.c -o obj/kmain.o -ffreestanding - gcc -c src/kernel/vga.c -o obj/kvga.o -ffreestanding - ld obj/kmain.o obj/kvga.o -o out/kernel.out -nostdlib --oformat=i386-aout +kernel: fs + gcc src/kernel/*.c -o out/fs/kernel.sys -ffreestanding -nostdlib -m32 -T src/kernel/link.ld -files: kernel - mkdir out/fs - cp out/kernel.out out/fs/kernel.sys +fs: out + mkdir -p out/fs obj: mkdir -p obj diff --git a/src/bootloader.asm b/src/bootloader.asm index 08d1daf..583c169 100644 --- a/src/bootloader.asm +++ b/src/bootloader.asm @@ -24,7 +24,7 @@ fat_header: .oem_name equ 0x7c03;mkfs.fat - ignored .bytes_per_sector equ 0x7c0b;0x0200 - assumed .sectors_per_cluster equ 0x7c0d;0x01 - assumed -.reserved_sectors equ 0x7c0e;0x0004 - other values handled +.reserved_sectors equ 0x7c0e;0x0002 - handled .n_fats equ 0x7c10;0x01 - assumed .root_dir_entries equ 0x7c11; - .n_sectors equ 0x7c13;0x0b40 - @@ -231,6 +231,12 @@ load_kernel: mov word [dap.offset], bx xor bx, bx shr ebx, 4 + jmp .over_sig + +times $$ + 0x01fe - $ db 0 +dw 0xaa55 + +.over_sig: test ebx, 0xffff_0000 jnz halt mov word [dap.segment], bx @@ -269,9 +275,7 @@ load_kernel: mov ebx, dword [pointers.kernel] - ;Parse kernel executable header, - ;Go through relocation tables, - ;Get kernel_start. + ;TODO cli @@ -292,7 +296,7 @@ dq 0x00c0_9200_8000_0ff7 dap: dw 0x0010 -.length dw 0x0003 +.length dw 0x0001 .offset dw 0x7e00 .segment dw 0x0000 .start dd 0x0000_0001 diff --git a/src/kernel/link.ld b/src/kernel/link.ld new file mode 100644 index 0000000..64dd0be --- /dev/null +++ b/src/kernel/link.ld @@ -0,0 +1,11 @@ +OUTPUT_FORMAT(binary) +SECTIONS { + . = 0x01000000; + .text : { + main = .; + *(.text) + } + .rodata : { *(.rodata) } + .data : { *(.data) } + .bss : { *(.bss) } +}
\ No newline at end of file diff --git a/src/kernel/main.c b/src/kernel/main.c index 54b0a83..6a8630b 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,12 +24,14 @@ OF THIS SOFTWARE. #include "misc.h" void main(void) { + *(uint16_t *)0x0000200e = 0x0000; + *(uint32_t *)0x0000050c = (uint32_t)allocate_pages(16 * sizeof(struct file_handle_info), 2); for (struct file_handle_info *i = FILE_HANDLES, *l = FILE_HANDLES + 65536; i < l; ++i) i->first_sector = 0; *(uint32_t *)0x00000510 = (uint32_t)allocate_pages(16 * sizeof(struct proc_info), 2); - for (struct proc_info *i = FILE_HANDLES, *l = FILE_HANDLES + 65536; i < l; ++i) + for (struct proc_info *i = PROCS, *l = PROCS + 65536; i < l; ++i) i->memory_start = 0; uint16_t pages_free = 0, pages_total = 0; diff --git a/src/kernel/mem.c b/src/kernel/mem.c index f12fbf7..509c768 100644 --- a/src/kernel/mem.c +++ b/src/kernel/mem.c @@ -36,6 +36,6 @@ void *allocate_pages(uint16_t n_pages, uint16_t proc_n) { } void deallocate_pages(void *from, uint16_t n_pages) { - for (uint16_t *mb = MMAP + ((uint32_t)from / 0x1000), *l = mb + n_pages; mb < l; ++mb) + for (uint16_t *mb = MMAP + (uint32_t)from / 0x1000, *l = mb + n_pages; mb < l; ++mb) *mb = 0; }
\ No newline at end of file diff --git a/src/kernel/misc.h b/src/kernel/misc.h index c68bccc..d333f26 100644 --- a/src/kernel/misc.h +++ b/src/kernel/misc.h @@ -22,6 +22,6 @@ OF THIS SOFTWARE. #ifndef MISC_H #define MISC_H -void print_32(uint32_t n); +void put_16(uint16_t n); #endif
\ No newline at end of file diff --git a/src/kernel/proc.c b/src/kernel/proc.c index dba6b92..a0fb863 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -25,7 +25,7 @@ uint16_t new_proc(uint8_t *file) { uint16_t handle = open_file(file); if (handle) for (uint16_t id = 3; id; ++id) - if (!(PROCS[id].memory_start)) { + if (!PROCS[id].memory_start) { uint32_t size = get_size(id); void *mem = PROCS[id].memory_start = allocate_pages(PROCS[id].n_pages = (size - 1) / 4096 + 1, id); read_file(handle, size, mem); |