From 2c5764025542375cf66d6eb178fd9468b9022726 Mon Sep 17 00:00:00 2001 From: Christoffer Bubach Date: Fri, 9 Jan 2015 04:53:14 +0100 Subject: [PATCH 1/1] made it assemble under os x, moved loading position of kernel + install script for osx --- boot/BOS_boot.asm | 27 ++++++------ boot/BOS_boot.bin | Bin 512 -> 512 bytes doc/bochsrc-osx.txt | 24 +++++++++++ kernel/kernel.asm | 38 ++++++++--------- kernel/kernel.sys | Bin 17869 -> 17869 bytes kernel/krl_incs/idt.inc | 31 +++++++------- kernel/krl_incs/rmode_int.inc | 32 +++++++------- kernel/realmode/a20.inc | 10 ++--- kernel/realmode/do_all_16bit.inc | 16 +++---- mac-install.sh | 70 +++++++++++++++++++++++++++++++ utils/osxfasm | Bin 0 -> 100460 bytes 11 files changed, 173 insertions(+), 75 deletions(-) create mode 100644 doc/bochsrc-osx.txt mode change 100755 => 100644 kernel/kernel.asm mode change 100755 => 100644 kernel/krl_incs/idt.inc mode change 100755 => 100644 kernel/realmode/a20.inc create mode 100755 mac-install.sh create mode 100755 utils/osxfasm diff --git a/boot/BOS_boot.asm b/boot/BOS_boot.asm index c77b7e3..a7a5c12 100755 --- a/boot/BOS_boot.asm +++ b/boot/BOS_boot.asm @@ -24,30 +24,33 @@ ; 0x0000:0x6c00 -> 0x0000:0x7400 IDT, 256 descriptors ; 0x0000:0x7400 -> 0x0000:0x7c00 GDT, 256 descriptors ; 0x0000:0x7c00 -> 0x0000:0x7e00 bootsector -; 0x0000:0x7e00 <- 0x0000:0xffff ~32,5kb stack for boot -; 0x1000:0x0000 -> 0x9000:0xffff 576kb kernel/free space -; 0xa000:0x0000 -> ............. VGA mem etc. +; 0x0000:0x7e00 <- 0x0000:0x8000 512b stack for boot +; 0x0000:0x8000 -> 0x9000:0xffff 608kb kernel/free space +;;;; 0x0000:0x7e00 <- 0x0000:0xffff ~32,5kb stack for boot +;;;; 0x1000:0x0000 -> 0x9000:0xffff 576kb kernel/free space +; 0xA000:0x0000 -> ............. VGA mem etc. use16 org 0x7C00 -boot: jmp near start +boot: + jmp short start nop ;------------------------------------------; ; Standard BIOS Parameter Block, "BPB". ; ;------------------------------------------; - bpbOEM db 'BOS 0.04' + bpbOEM db 'BOS 0.04' bpbSectSize dw 512 bpbClustSize db 1 bpbReservedSec dw 1 - bpbFats db 2 + bpbFats db 2 bpbRootSize dw 224 bpbTotalSect dw 2880 - bpbMedia db 240 + bpbMedia db 240 bpbFatSize dw 9 bpbTrackSect dw 18 - bpbHeads dw 2 + bpbHeads dw 2 bpbHiddenSect dd 0 bpbLargeSect dd 0 ;---------------------------------; @@ -56,7 +59,7 @@ boot: jmp near start bpbDriveNo db 0 bpbReserved db 0 bpbSignature db 41 ; 0 = nothing more. 41 = three more (below).. - bpbID dd 1 + bpbID dd 1 bpbVolumeLabel db 'BOOT FLOPPY' bpbFileSystem db 'FAT12 ' @@ -71,7 +74,7 @@ start: mov ds, ax ; registers. mov es, ax mov ss, ax - mov sp, 0xFFFF ; Stack.. + mov sp, 0x8000 ; Stack.. mov [bpbDriveNo], dl @@ -227,7 +230,7 @@ start: ;-----------------------------------; found: mov bp, [bx+26] ; bp=cluster number from directory entry - mov di, 0x1000 ; 1000 (segment) + mov di, 0x800 ; 1000 (segment) .next_block: xor cx, cx @@ -272,7 +275,7 @@ found: ; the file is loaded ; ;-----------------------; quit: - jmp 0x1000:0x0000 ; jump to loaded file (64kb in mem) + jmp 0x0000:0x8000 ; jump to loaded file (64kb in mem) ;-------------------------------------; diff --git a/boot/BOS_boot.bin b/boot/BOS_boot.bin index b196cc4773e0d8db1d115c2bde722045644ac8b5..48d8b8321418eceb814bd9883c6ff45b792680cc 100755 GIT binary patch delta 30 lcmZo*X<(V)!Nkxo(d#WE$7BmeSH_0Pjf}Od3=9mRs{n^{2wVUF delta 30 mcmZo*X<(V)!Sw(CM6b7u0+THmU6~me1SU5!)-p4Mt^xp|zzK2y diff --git a/doc/bochsrc-osx.txt b/doc/bochsrc-osx.txt new file mode 100644 index 0000000..9fbb925 --- /dev/null +++ b/doc/bochsrc-osx.txt @@ -0,0 +1,24 @@ +####################################### +# # +# BOCHS config file for BOS # +# # +####################################### + +#display_library: term +romimage: file=/usr/local/Cellar/bochs/2.6.2/share/bochs/BIOS-bochs-latest +megs: 32 +vgaromimage: file=/usr/local/Cellar/bochs/2.6.2/share/bochs/VGABIOS-elpin-2.40 +floppya: 1_44=/Volumes/BOS, status=inserted +boot: a +floppy_bootsig_check: disabled=0 +log: bochsout.txt +panic: action=ask +error: action=report +info: action=report +debug: action=ignore +debugger_log: debugger.out +keyboard_serial_delay: 250 +keyboard_paste_delay: 100000 +mouse: enabled=0 +keyboard_mapping: enabled=0, map= +user_shortcut: keys=ctrlaltdel \ No newline at end of file diff --git a/kernel/kernel.asm b/kernel/kernel.asm old mode 100755 new mode 100644 index 40c2225..df6d48f --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -1,24 +1,24 @@ ;-------------------------------------------------------; -; BOS kernel ; +; BOS kernel ; ;-------------------------------------------------------; -; BOS 32-bit kernel, expects to be loaded at 64kb ; -; in mem. Small amount of 16-bit code included. ; -; ; -; For any comments on this code, mail me. ; -; http://bos.asmhackers.net/ asmhacker@gmail.com ; -; ; -; by: Christoffer Bubach, 2003-2005 ; +; BOS 32-bit kernel, expects to be loaded at 64kb ; +; in mem. Small amount of 16-bit code included. ; +; ; +; For any comments on this code, mail me. ; +; http://bos.asmhackers.net/ asmhacker@gmail.com ; +; ; +; by: Christoffer Bubach, 2003-2005 ; ;-------------------------------------------------------; use16 -org 0x10000 +org 0x8000 ;---------------------------; ; jump to starting point ; ;---------------------------; - jmp start + jmp start ;----------------------------------------; -; 16-bit include files ; +; 16-bit include files ; ;----------------------------------------; include 'realmode/a20.inc' ; Function to set the a20-gate. include 'realmode/gdt.inc' ; Global Description Table. @@ -30,7 +30,7 @@ org 0x10000 ;--------------------------; -; 16-bit entry point ; +; 16-bit entry point ; ;--------------------------; start: cli @@ -48,10 +48,10 @@ start: cli mov ax, cs ; save cs - mov [realmode_cs - 0x10000], ax ; in variables.inc + mov [realmode_cs], ax ; in variables.inc - lgdt [gdtr - 0x10000] ; Load the GDT descriptor - lidt [idtr - 0x10000] ; Load the IDT descriptor + lgdt [gdtr] ; Load the GDT descriptor + lidt [idtr] ; Load the IDT descriptor mov eax, cr0 or al, 1 @@ -62,7 +62,7 @@ start: ;--------------------------; -; 32-bit entry point ; +; 32-bit entry point ; ;--------------------------; use32 flush: @@ -84,7 +84,7 @@ flush: call init_cmd jmp shell - ;int 0x32 + ;int 0x32 .hang: cli @@ -93,7 +93,7 @@ flush: ;----------------------------------------; -; 32-bit include files ; +; 32-bit include files ; ;----------------------------------------; include 'krl_incs/idt.inc' ; The Interrupt Description Table. include 'krl_incs/text.inc' ; The default textmode functions. @@ -112,7 +112,7 @@ flush: include 'krl_incs/time_date.inc' ; Print time and date. include 'krl_incs/timer.inc' ; Timer IRQ. include 'krl_incs/vga.inc' ; VGA functions. - ; include 'krl_incs/font8x16.inc' ; Standard font. + ; include 'krl_incs/font8x16.inc' ; Standard font. include 'krl_incs/dma.inc' ; DMA code. include 'krl_incs/fdc.inc' ; Floppy code. include 'krl_incs/mario.inc' ; Mario sprite. diff --git a/kernel/kernel.sys b/kernel/kernel.sys index d553f80a31cce04d9cdae7f45d0cb53b4593eee2..b0c3de35bb1a90adc0c18747e4b961b8fe69ca0d 100755 GIT binary patch delta 7135 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 PykUqNlZ$Kd-%tM!6|q|D delta 7137 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 NM|m)~q8a~w`hSt?)#(5L diff --git a/kernel/krl_incs/idt.inc b/kernel/krl_incs/idt.inc old mode 100755 new mode 100644 index a899cbc..cafbc63 --- a/kernel/krl_incs/idt.inc +++ b/kernel/krl_incs/idt.inc @@ -1,15 +1,15 @@ ;----------------------------------------------------------; -; BOS kernel Christoffer Bubach, 2003-2005. ; +; BOS kernel Christoffer Bubach, 2003-2005. ; ;----------------------------------------------------------; -; ; -; set/modify IDT entries ; -; ; +; ; +; set/modify IDT entries ; +; ; ;----------------------------------------------------------; ;--------------------------------------------------; -; set up IDT ; +; set up IDT ; ; in: edi = pointer to "unhandled int"-function. ; ;--------------------------------------------------; init_idt: @@ -40,9 +40,9 @@ init_idt: ;--------------------------------------; -; modify IDT, set any int ; -; in: cl = int number ; -; edi = int function pointer ; +; modify IDT, set any int ; +; in: cl = int number ; +; edi = int function pointer ; ;--------------------------------------; set_int: push eax @@ -51,7 +51,8 @@ set_int: mov al, 8 ; 8 bytes for each int mul cl ; cl * al = ax movzx ecx, ax ; ecx = offset in IDT (1/2 for dword list) - mov [(idt_list+ecx/2)], edi ; add new int to idt entry list + ;;mov [(idt_list+ecx/2)], edi ; add new int to idt entry list + mov dword [(idt_list+ecx)], edi ; add new int to idt entry list mov eax, edi mov [(0x6c00+ecx)], ax @@ -71,9 +72,9 @@ set_int: ;------------------------------------------------; -; get int address ; -; in: cl = int number ; -; out: esi = address or 0 if none present ; +; get int address ; +; in: cl = int number ; +; out: esi = address or 0 if none present ; ;------------------------------------------------; get_int: push eax @@ -90,8 +91,8 @@ get_int: ;----------------------------------------; -; sets ints from list ; -; in: esi = pointer to int list ; +; sets ints from list ; +; in: esi = pointer to int list ; ;----------------------------------------; set_idt_list: push eax @@ -117,7 +118,7 @@ set_idt_list: ;------------------------------; ; list of idt entries. ; -; 0 = not handled ; +; 0 = not handled ; ;------------------------------; idt_list: dd isr00 dd isr01 diff --git a/kernel/krl_incs/rmode_int.inc b/kernel/krl_incs/rmode_int.inc index bd2dbe2..ed5716d 100755 --- a/kernel/krl_incs/rmode_int.inc +++ b/kernel/krl_incs/rmode_int.inc @@ -24,7 +24,7 @@ rmode_int: mov word [realmode_cx], cx mov word [realmode_dx], dx call disable_irqs - jmp pword 0x18:do_16pmode-0x10000 ; must substract 0x10000 from + jmp pword 0x18:do_16pmode ; must substract 0x10000 from ; data addresses becasue of ; fasm strict "org" behavior use16 @@ -41,7 +41,7 @@ do_16pmode: and al, 0xFE mov cr0, eax - jmp 0x1000:(do_realm-0x10000) + jmp 0x1000:(do_realm) do_realm: mov ax, cs @@ -53,34 +53,34 @@ do_realm: mov gs, ax mov ss, ax - lidt [ridtr - 0x10000] ; realmode/variables.inc + lidt [ridtr] ; realmode/variables.inc sti - mov ax, word [realmode_ax - 0x10000] - mov bx, word [realmode_bx - 0x10000] - mov cx, word [realmode_cx - 0x10000] - mov dx, word [realmode_dx - 0x10000] + mov ax, word [realmode_ax] + mov bx, word [realmode_bx] + mov cx, word [realmode_cx] + mov dx, word [realmode_dx] push ax ; this is some cool shit.. ;) - mov al, [int_number - 0x10000] ; interrupt to preform - mov [$+5 - 0x10000], al ; move it to right pos. + mov al, [int_number] ; interrupt to preform + mov [$+5], al ; move it to right pos. pop ax db 0xCD ; opcode for int. db 0x00 ; move int_number here jnc .no_error - mov byte [realmode_error - 0x10000], 1 + mov byte [realmode_error], 1 .no_error: - mov word [realmode_ax - 0x10000], ax - mov word [realmode_bx - 0x10000], bx - mov word [realmode_cx - 0x10000], cx - mov word [realmode_dx - 0x10000], dx + mov word [realmode_ax], ax + mov word [realmode_bx], bx + mov word [realmode_cx], cx + mov word [realmode_dx], dx cli - lgdt [gdtr - 0x10000] - lidt [idtr - 0x10000] + lgdt [gdtr] + lidt [idtr] mov eax, cr0 or al, 1 mov cr0, eax diff --git a/kernel/realmode/a20.inc b/kernel/realmode/a20.inc old mode 100755 new mode 100644 index f0ab1c8..f9a561c --- a/kernel/realmode/a20.inc +++ b/kernel/realmode/a20.inc @@ -1,9 +1,9 @@ ;----------------------------------------------------------; -; BOS 0.04 Christoffer Bubach, 2005. ; +; BOS 0.04 Christoffer Bubach, 2005. ; ;----------------------------------------------------------; -; ; -; Realmode functions to set a20-gate. ; -; ; +; ; +; Realmode functions to set a20-gate. ; +; ; ;----------------------------------------------------------; ;----------------------; @@ -39,7 +39,7 @@ enable_a20: ret ;------------------------; -; test if A20 is set ; +; test if A20 is set ; ;------------------------; a20_test: mov al, byte [fs:0] diff --git a/kernel/realmode/do_all_16bit.inc b/kernel/realmode/do_all_16bit.inc index f0fb4c3..86f7799 100755 --- a/kernel/realmode/do_all_16bit.inc +++ b/kernel/realmode/do_all_16bit.inc @@ -11,7 +11,7 @@ ;---------------------; do_all_16bit: call getmem ; realmode/mem.inc - mov [ram_amount - 0x10000], eax + mov [ram_amount], eax xor eax, eax ; clear mem for IDT and GDT mov edi, 0x6c00 ; IDT address @@ -20,15 +20,15 @@ do_all_16bit: mov eax, cs shl eax, 4 - mov [gdt.BOS_16code - 0x10000 + 2], ax ; Prepare GDT by - mov [gdt.BOS_16data - 0x10000 + 2], ax ; setting 16-bit base. + mov [gdt.BOS_16code + 2], ax ; Prepare GDT by + mov [gdt.BOS_16data + 2], ax ; setting 16-bit base. shr eax, 16 - mov [gdt.BOS_16code - 0x10000 + 4], al - mov [gdt.BOS_16data - 0x10000 + 4], al - mov [gdt.BOS_16code - 0x10000 + 7], ah - mov [gdt.BOS_16data - 0x10000 + 7], ah + mov [gdt.BOS_16code + 4], al + mov [gdt.BOS_16data + 4], al + mov [gdt.BOS_16code + 7], ah + mov [gdt.BOS_16data + 7], ah - lea esi, [gdt - 0x10000] + lea esi, [gdt] mov edi, 0x7400 ; GDT address mov ecx, (gdt_end - gdt)/4 rep movsd ; Move it to final pos. diff --git a/mac-install.sh b/mac-install.sh new file mode 100755 index 0000000..18b1cc6 --- /dev/null +++ b/mac-install.sh @@ -0,0 +1,70 @@ +#! /bin/sh + +# BOS MacOS X Installer version 0.2 +# You must be root to run this script because of the floppy/loopback device + +echo +echo " BOS - MacOS X installer" +echo "-------------------------" +echo "Requires: Homebrew mtools" +echo + +if [ `id -u` != "0" ]; then + echo "You must be root to use this installer!" + echo +fi + +if [ -z "$1" ]; then + echo "Usage is:" + echo "$0 image - Creates a floppy image called bos.img" + echo "$0 floppy - Install BOS into a floppy ( must be inserted )" + echo + echo "Note: this installer will create a bootable image/floppy." + echo "Floppy creation is not tested ( I don't have a floppy reader ) and it should be already formatted" + exit +fi + +echo "Compiling BOS..." +./utils/osxfasm kernel/kernel.asm kernel/kernel.sys +./utils/osxfasm boot/BOS_boot.asm boot/BOS_boot.bin + +if [ "$1" = "floppy" ]; then + echo "Starting floppy installation..." + + #Install BOS_boot.bin as bootsector into bos.img + dd if=boot/BOS_boot.bin of=/dev/fd0 bs=1 count=512 + mount /mnt/floppy + + #Insert kernel.sys into image + cp kernel/kernel.sys /mnt/floppy + + #Umount & cleanup + umount /mnt/floppy + + echo "BOS installed." + +else + echo "Starting image creation..." + + #Create image + rm -rf ./bos.img + mformat -C -f 1440 -v BOS -i bos.img :: + + #Erhm, it isn't pretty.... + DISKNAME=`hdiutil attach -nomount bos.img` + diskutil mount $DISKNAME + MOUNTNAME=`diskutil info $DISKNAME | grep 'Mount Point' | cut -d : -f 2 | sed 's/^ *//g' | sed 's/ *$//g';` + + #Mounted, copy kernel.sys + cp kernel/kernel.sys $MOUNTNAME + + #Install BOS_boot.bin as bootsector into bos.img + umount $DISKNAME + dd if=boot/BOS_boot.bin of=$DISKNAME bs=1 count=512 + + #Detach + hdiutil detach $DISKNAME + chmod 0777 bos.img + + echo "BOS image created!" +fi \ No newline at end of file diff --git a/utils/osxfasm b/utils/osxfasm new file mode 100755 index 0000000000000000000000000000000000000000..408cf0e34b9122f83cd8aa9021b341893a60c635 GIT binary patch literal 100460 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 literal 0 HcmV?d00001 -- 2.52.0