From bed5515c8dee2a19c1ba9dbc005e078c613e3cf3 Mon Sep 17 00:00:00 2001 From: Clemens Fries Date: Wed, 5 Dec 2018 18:19:16 +0100 Subject: Move 'boot' stuff to boot/ --- Makefile | 12 ------------ TODO | 8 -------- boot/Makefile | 12 ++++++++++++ boot/TODO | 8 ++++++++ boot/print.asm | 44 ++++++++++++++++++++++++++++++++++++++++++++ boot/printb.asm | 36 ++++++++++++++++++++++++++++++++++++ print.asm | 44 -------------------------------------------- printb.asm | 36 ------------------------------------ 8 files changed, 100 insertions(+), 100 deletions(-) delete mode 100644 Makefile delete mode 100644 TODO create mode 100644 boot/Makefile create mode 100644 boot/TODO create mode 100644 boot/print.asm create mode 100644 boot/printb.asm delete mode 100644 print.asm delete mode 100644 printb.asm diff --git a/Makefile b/Makefile deleted file mode 100644 index c9438a6..0000000 --- a/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -boot.img: print printb - cat print printb > boot.img - -print: print.asm - nasm -Wall print.asm - -printb: printb.asm - nasm -Wall printb.asm - -.PHONY: run -run: boot.img - qemu-system-i386 -drive file=boot.img,format=raw,index=0,if=floppy diff --git a/TODO b/TODO deleted file mode 100644 index 34dec0a..0000000 --- a/TODO +++ /dev/null @@ -1,8 +0,0 @@ -* boot loader, loading a few sectors into memory -* output from loadable -* setting up things to transition to protected mode - * defining a software interrupt in order to call a print() function -* setting up things to transition to long mode - * defining a syscall on order to call a print() function -* writing minimal program in C -* writing a minimal scheduler and running two programs at the same time diff --git a/boot/Makefile b/boot/Makefile new file mode 100644 index 0000000..c9438a6 --- /dev/null +++ b/boot/Makefile @@ -0,0 +1,12 @@ +boot.img: print printb + cat print printb > boot.img + +print: print.asm + nasm -Wall print.asm + +printb: printb.asm + nasm -Wall printb.asm + +.PHONY: run +run: boot.img + qemu-system-i386 -drive file=boot.img,format=raw,index=0,if=floppy diff --git a/boot/TODO b/boot/TODO new file mode 100644 index 0000000..34dec0a --- /dev/null +++ b/boot/TODO @@ -0,0 +1,8 @@ +* boot loader, loading a few sectors into memory +* output from loadable +* setting up things to transition to protected mode + * defining a software interrupt in order to call a print() function +* setting up things to transition to long mode + * defining a syscall on order to call a print() function +* writing minimal program in C +* writing a minimal scheduler and running two programs at the same time diff --git a/boot/print.asm b/boot/print.asm new file mode 100644 index 0000000..97acd8b --- /dev/null +++ b/boot/print.asm @@ -0,0 +1,44 @@ +org 7C00h + +jmp _start + +hello: db 'Hello from the first stage!', 0x0A, 0x0D, 0x0 + +_start: + +; print hello message + +mov ah, 0x0E +xor esi, esi +xor edi, edi +mov si, hello +cld + +.loop: +lodsb +cmp al, 0x00 +je .out +int 0x10 +jmp .loop +.out: + +; load sectors from disk and jump there + +mov ah, 0x02 ; load sectory from disk +mov al, 0x01 ; load one sector +xor ch, ch ; cylinder number +mov cl, 0x02 ; start from sector 2 +xor dh, dh ; head number +xor dl, dl ; drive number + +mov bx, 0x0500 ; start address (see jmp) + ; 0x00000500 to 0x00007BFF, from Overview at http://wiki.osdev.org/Memory_Map_%28x86%29 +int 0x13 + +jmp 0x0500 + +jmp $ + +; stolen from: https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders +times 0200h - 2 - ($ - $$) db 0 ;Zerofill up to 510 bytes +dw 0AA55h ;Boot Sector signature diff --git a/boot/printb.asm b/boot/printb.asm new file mode 100644 index 0000000..a8fa788 --- /dev/null +++ b/boot/printb.asm @@ -0,0 +1,36 @@ +org 0x0500 + + +SECTION .data +boot: db 'Welcome to the second stage!', 0x0A, 0x0D, 0x00 +foo: db 'What a nice message this is!', 0x0A, 0x0D, 0x00 + +SECTION .text + + +jmp start + +print: + push ax + cld + mov ah, 0x0E + + .loop: + lodsb + cmp al, 0x00 + je .out + int 0x10 + jmp .loop + .out: + pop ax + ret + +start: + mov si, boot + call print + + mov si, foo + call print + +; maybe to something here... +; e.g.: how to keep CPU from spinning at 100% diff --git a/print.asm b/print.asm deleted file mode 100644 index 97acd8b..0000000 --- a/print.asm +++ /dev/null @@ -1,44 +0,0 @@ -org 7C00h - -jmp _start - -hello: db 'Hello from the first stage!', 0x0A, 0x0D, 0x0 - -_start: - -; print hello message - -mov ah, 0x0E -xor esi, esi -xor edi, edi -mov si, hello -cld - -.loop: -lodsb -cmp al, 0x00 -je .out -int 0x10 -jmp .loop -.out: - -; load sectors from disk and jump there - -mov ah, 0x02 ; load sectory from disk -mov al, 0x01 ; load one sector -xor ch, ch ; cylinder number -mov cl, 0x02 ; start from sector 2 -xor dh, dh ; head number -xor dl, dl ; drive number - -mov bx, 0x0500 ; start address (see jmp) - ; 0x00000500 to 0x00007BFF, from Overview at http://wiki.osdev.org/Memory_Map_%28x86%29 -int 0x13 - -jmp 0x0500 - -jmp $ - -; stolen from: https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders -times 0200h - 2 - ($ - $$) db 0 ;Zerofill up to 510 bytes -dw 0AA55h ;Boot Sector signature diff --git a/printb.asm b/printb.asm deleted file mode 100644 index a8fa788..0000000 --- a/printb.asm +++ /dev/null @@ -1,36 +0,0 @@ -org 0x0500 - - -SECTION .data -boot: db 'Welcome to the second stage!', 0x0A, 0x0D, 0x00 -foo: db 'What a nice message this is!', 0x0A, 0x0D, 0x00 - -SECTION .text - - -jmp start - -print: - push ax - cld - mov ah, 0x0E - - .loop: - lodsb - cmp al, 0x00 - je .out - int 0x10 - jmp .loop - .out: - pop ax - ret - -start: - mov si, boot - call print - - mov si, foo - call print - -; maybe to something here... -; e.g.: how to keep CPU from spinning at 100% -- cgit