├── 1 └── 1.asm ├── 2 └── 2.asm ├── 3 └── 3.asm ├── 5 └── 5.asm ├── 6 └── 6.asm ├── 7 ├── zeroes.asm ├── kernel.cpp ├── Binaries │ ├── OS.bin │ ├── boot.bin │ ├── kernel.o │ ├── banana.bin │ ├── full_kernel.bin │ ├── kernel_entry.o │ └── zeroes.bin ├── kernel_entry.asm ├── run.sh └── boot.asm └── README.md /7/zeroes.asm: -------------------------------------------------------------------------------- 1 | times 10240 db 0 2 | -------------------------------------------------------------------------------- /1/1.asm: -------------------------------------------------------------------------------- 1 | jmp $ 2 | times 510-($-$$) db 0 3 | db 0x055, 0x0aa 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OS-Reference 2 | This is: reference code for my OS Series. 3 | -------------------------------------------------------------------------------- /7/kernel.cpp: -------------------------------------------------------------------------------- 1 | extern "C" void main(){ 2 | *(char*)0xb8000 = 'Q'; 3 | return; 4 | } 5 | -------------------------------------------------------------------------------- /7/Binaries/OS.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/OS.bin -------------------------------------------------------------------------------- /7/Binaries/boot.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/boot.bin -------------------------------------------------------------------------------- /7/Binaries/kernel.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/kernel.o -------------------------------------------------------------------------------- /7/Binaries/banana.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/banana.bin -------------------------------------------------------------------------------- /7/kernel_entry.asm: -------------------------------------------------------------------------------- 1 | section .text 2 | [bits 32] 3 | [extern main] 4 | call main 5 | jmp $ 6 | -------------------------------------------------------------------------------- /7/Binaries/full_kernel.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/full_kernel.bin -------------------------------------------------------------------------------- /7/Binaries/kernel_entry.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mell-o-tron/OS-Reference/HEAD/7/Binaries/kernel_entry.o -------------------------------------------------------------------------------- /2/2.asm: -------------------------------------------------------------------------------- 1 | mov ah, 0x0e 2 | mov al, 65 3 | int 0x10 4 | 5 | loop: 6 | inc al 7 | cmp al, 'Z' + 1 8 | je exit 9 | int 0x10 10 | jmp loop 11 | exit: 12 | jmp $ 13 | 14 | times 510-($-$$) db 0 15 | db 0x055, 0x0aa 16 | -------------------------------------------------------------------------------- /3/3.asm: -------------------------------------------------------------------------------- 1 | [org 0x7c00] 2 | mov ah, 0x0e 3 | mov bx, variableName 4 | 5 | printString: 6 | mov al, [bx] 7 | cmp al, 0 8 | je end 9 | int 0x10 10 | inc bx 11 | jmp printString 12 | end: 13 | jmp $ 14 | 15 | variableName: 16 | db "But the fool on the hill", 0 17 | 18 | times 510-($-$$) db 0 19 | dw 0xaa55 20 | -------------------------------------------------------------------------------- /7/run.sh: -------------------------------------------------------------------------------- 1 | export PATH=$PATH:/usr/local/i386elfgcc/bin 2 | 3 | nasm "boot.asm" -f bin -o "Binaries/boot.bin" 4 | nasm "kernel_entry.asm" -f elf -o "Binaries/kernel_entry.o" 5 | i386-elf-gcc -ffreestanding -m32 -g -c "kernel.cpp" -o "Binaries/kernel.o" 6 | nasm "zeroes.asm" -f bin -o "Binaries/zeroes.bin" 7 | 8 | i386-elf-ld -o "Binaries/full_kernel.bin" -Ttext 0x1000 "Binaries/kernel_entry.o" "Binaries/kernel.o" --oformat binary 9 | 10 | cat "Binaries/boot.bin" "Binaries/full_kernel.bin" "Binaries/zeroes.bin" > "Binaries/OS.bin" 11 | 12 | qemu-system-x86_64 -drive format=raw,file="Binaries/OS.bin",index=0,if=floppy, -m 128M 13 | -------------------------------------------------------------------------------- /5/5.asm: -------------------------------------------------------------------------------- 1 | [org 0x7c00] 2 | mov [BOOT_DISK], dl 3 | 4 | ; setting up the stack 5 | 6 | xor ax, ax 7 | mov es, ax 8 | mov ds, ax 9 | mov bp, 0x8000 10 | mov sp, bp 11 | 12 | mov bx, 0x7e00 13 | 14 | ; reading the disk 15 | 16 | mov ah, 2 17 | mov al, 1 18 | mov ch, 0 19 | mov dh, 0 20 | mov cl, 2 21 | mov dl, [BOOT_DISK] 22 | int 0x13 23 | 24 | ; printing what is in the next sector 25 | 26 | mov ah, 0x0e 27 | mov al, [0x7e00] 28 | int 0x10 29 | jmp $ 30 | BOOT_DISK: db 0 31 | 32 | ; magic padding 33 | 34 | times 510-($-$$) db 0 35 | dw 0xaa55 36 | 37 | ; filling the second sector ( the one that will be readed ) with 'A's 38 | 39 | times 512 db 'A' 40 | -------------------------------------------------------------------------------- /6/6.asm: -------------------------------------------------------------------------------- 1 | [org 0x7c00] 2 | 3 | 4 | mov [BOOT_DISK], dl 5 | 6 | 7 | 8 | CODE_SEG equ GDT_code - GDT_start 9 | DATA_SEG equ GDT_data - GDT_start 10 | 11 | cli 12 | lgdt [GDT_descriptor] 13 | mov eax, cr0 14 | or eax, 1 15 | mov cr0, eax 16 | jmp CODE_SEG:start_protected_mode 17 | 18 | jmp $ 19 | 20 | 21 | GDT_start: ; must be at the end of real mode code 22 | GDT_null: 23 | dd 0x0 24 | dd 0x0 25 | 26 | GDT_code: 27 | dw 0xffff 28 | dw 0x0 29 | db 0x0 30 | db 0b10011010 31 | db 0b11001111 32 | db 0x0 33 | 34 | GDT_data: 35 | dw 0xffff 36 | dw 0x0 37 | db 0x0 38 | db 0b10010010 39 | db 0b11001111 40 | db 0x0 41 | 42 | GDT_end: 43 | 44 | GDT_descriptor: 45 | dw GDT_end - GDT_start - 1 46 | dd GDT_start 47 | 48 | 49 | [bits 32] 50 | start_protected_mode: 51 | mov al, 'A' 52 | mov ah, 0x0f 53 | mov [0xb8000], ax 54 | jmp $ 55 | 56 | BOOT_DISK: db 0 57 | 58 | times 510-($-$$) db 0 59 | dw 0xaa55 60 | -------------------------------------------------------------------------------- /7/boot.asm: -------------------------------------------------------------------------------- 1 | [org 0x7c00] 2 | KERNEL_LOCATION equ 0x1000 3 | 4 | 5 | mov [BOOT_DISK], dl 6 | 7 | 8 | xor ax, ax 9 | mov es, ax 10 | mov ds, ax 11 | mov bp, 0x8000 12 | mov sp, bp 13 | 14 | mov bx, KERNEL_LOCATION 15 | mov dh, 2 16 | 17 | mov ah, 0x02 18 | mov al, dh 19 | mov ch, 0x00 20 | mov dh, 0x00 21 | mov cl, 0x02 22 | mov dl, [BOOT_DISK] 23 | int 0x13 ; no error management, do your homework! 24 | 25 | 26 | mov ah, 0x0 27 | mov al, 0x3 28 | int 0x10 ; text mode 29 | 30 | 31 | CODE_SEG equ GDT_code - GDT_start 32 | DATA_SEG equ GDT_data - GDT_start 33 | 34 | cli 35 | lgdt [GDT_descriptor] 36 | mov eax, cr0 37 | or eax, 1 38 | mov cr0, eax 39 | jmp CODE_SEG:start_protected_mode 40 | 41 | jmp $ 42 | 43 | BOOT_DISK: db 0 44 | 45 | GDT_start: 46 | GDT_null: 47 | dd 0x0 48 | dd 0x0 49 | 50 | GDT_code: 51 | dw 0xffff 52 | dw 0x0 53 | db 0x0 54 | db 0b10011010 55 | db 0b11001111 56 | db 0x0 57 | 58 | GDT_data: 59 | dw 0xffff 60 | dw 0x0 61 | db 0x0 62 | db 0b10010010 63 | db 0b11001111 64 | db 0x0 65 | 66 | GDT_end: 67 | 68 | GDT_descriptor: 69 | dw GDT_end - GDT_start - 1 70 | dd GDT_start 71 | 72 | 73 | [bits 32] 74 | start_protected_mode: 75 | mov ax, DATA_SEG 76 | mov ds, ax 77 | mov ss, ax 78 | mov es, ax 79 | mov fs, ax 80 | mov gs, ax 81 | 82 | mov ebp, 0x90000 ; 32 bit stack base pointer 83 | mov esp, ebp 84 | 85 | jmp KERNEL_LOCATION 86 | 87 | 88 | 89 | times 510-($-$$) db 0 90 | dw 0xaa55 91 | -------------------------------------------------------------------------------- /7/Binaries/zeroes.bin: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------