███████████████████████████████████████████████████████████████████████████████ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ █▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█ █▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓█ █▓▒░╔══════╦════════════════════════════════════════════════════════════╦═╗░▒▓█ █▓▒░║ BACK ║ ╚═╣░▒▓█ █▓▒░╠══════╝ Nox ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░╠═══════════════════════════╦═════════════╦═══════════════════════════╣░▒▓█ █▓▒░║ │ Project URL │ ║░▒▓█ █▓▒░║ └─────────────┘ ║░▒▓█ █▓▒░║ https://github.com/zosko/nox ║░▒▓█ █▓▒░╠══════════════════════════════╦══════╦═══════════════════════════════╣░▒▓█ █▓▒░║ │ What │ ║░▒▓█ █▓▒░║ └──────┘ ║░▒▓█ █▓▒░║ Simple Floppy bootable thing ║░▒▓█ █▓▒░╠═════════════════════════════╦═════════╦═════════════════════════════╣░▒▓█ █▓▒░║ │ Install │ ║░▒▓█ █▓▒░║ └─────────┘ ║░▒▓█ █▓▒░║ - brew install dosfstools ║░▒▓█ █▓▒░║ - brew install nasm ║░▒▓█ █▓▒░║ - brew install qemu ║░▒▓█ █▓▒░╠═══════════════════════╦══════════════════════╦══════════════════════╣░▒▓█ █▓▒░║ │ How to make bootable │ ║░▒▓█ █▓▒░║ └──────────────────────┘ ║░▒▓█ █▓▒░║ - nasm boot.asm -f bin -o boot.img ║░▒▓█ █▓▒░║ - dd if=/dev/zero of=floppy.img bs=512 count=2880 ║░▒▓█ █▓▒░║ - /usr/local/Cellar/dosfstools/4.2/sbin/mkfs.fat -F 12 ║░▒▓█ █▓▒░║ -n "Nox" floppy.img ║░▒▓█ █▓▒░║ - dd if=boot.img of=floppy.img conv=notrunc ║░▒▓█ █▓▒░╠══════════════════════════════╦══════╦═══════════════════════════════╣░▒▓█ █▓▒░║ │ Test │ ║░▒▓█ █▓▒░║ └──────┘ ║░▒▓█ █▓▒░║ - qemu-system-i386 -fda floppy.img ║░▒▓█ █▓▒░╠══════════════════════════════╦══════╦═══════════════════════════════╣░▒▓█ █▓▒░║ │ Code │ ║░▒▓█ █▓▒░║ └──────┘ ║░▒▓█ █▓▒░║ bits 16 ║░▒▓█ █▓▒░║ org 0x7c00 ║░▒▓█ █▓▒░║ x_cursor: db 0 ║░▒▓█ █▓▒░║ y_cursor: db 0 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ genesis: ║░▒▓█ █▓▒░║ mov ax, 0x0003 ║░▒▓█ █▓▒░║ int 0x10 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call color_red ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ loop: ║░▒▓█ █▓▒░║ call read_key ║░▒▓█ █▓▒░║ cmp ah, 0x50 ║░▒▓█ █▓▒░║ je move_down ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp ah, 0x48 ║░▒▓█ █▓▒░║ je move_up ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp ah, 0x4b ║░▒▓█ █▓▒░║ je move_left ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp ah, 0x4d ║░▒▓█ █▓▒░║ je move_right ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp al, 0x31 ║░▒▓█ █▓▒░║ je color_red ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp al, 0x32 ║░▒▓█ █▓▒░║ je color_green ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp al, 0x33 ║░▒▓█ █▓▒░║ je color_blue ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ cmp al, 0x20 ║░▒▓█ █▓▒░║ je draw ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ display_char: ║░▒▓█ █▓▒░║ mov ah, 0x0e ║░▒▓█ █▓▒░║ mov bx, 0x000f ║░▒▓█ █▓▒░║ int 0x10 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ mov ax, 0x0003 ║░▒▓█ █▓▒░║ int 0x10 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ read_key: ║░▒▓█ █▓▒░║ mov ah, 0x00 ║░▒▓█ █▓▒░║ int 0x16 ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ color_red: ║░▒▓█ █▓▒░║ mov bx, 0x00cc ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ color_green: ║░▒▓█ █▓▒░║ mov bx, 0x0022 ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ color_blue: ║░▒▓█ █▓▒░║ mov bx, 0x0099 ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ draw: ║░▒▓█ █▓▒░║ mov cx, 0x01 ║░▒▓█ █▓▒░║ mov al, 0x20 ║░▒▓█ █▓▒░║ mov ah, 0x09 ║░▒▓█ █▓▒░║ int 0x10 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ jmp loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ move_left: ║░▒▓█ █▓▒░║ mov al, [y_cursor] ║░▒▓█ █▓▒░║ cmp al, 0 ║░▒▓█ █▓▒░║ jnle .continue ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ .continue: ║░▒▓█ █▓▒░║ dec al ║░▒▓█ █▓▒░║ mov [y_cursor], al ║░▒▓█ █▓▒░║ call move_cursor ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ move_right: ║░▒▓█ █▓▒░║ mov al, [y_cursor] ║░▒▓█ █▓▒░║ cmp al, 79 ║░▒▓█ █▓▒░║ jl .continue ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ .continue: ║░▒▓█ █▓▒░║ inc al ║░▒▓█ █▓▒░║ mov [y_cursor], al ║░▒▓█ █▓▒░║ call move_cursor ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ move_down: ║░▒▓█ █▓▒░║ mov al, [x_cursor] ║░▒▓█ █▓▒░║ cmp al, 24 ║░▒▓█ █▓▒░║ jl .continue ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ .continue: ║░▒▓█ █▓▒░║ inc al ║░▒▓█ █▓▒░║ mov [x_cursor], al ║░▒▓█ █▓▒░║ call move_cursor ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ move_up: ║░▒▓█ █▓▒░║ mov al, [x_cursor] ║░▒▓█ █▓▒░║ cmp al, 0 ║░▒▓█ █▓▒░║ jnle .continue ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ .continue: ║░▒▓█ █▓▒░║ dec al ║░▒▓█ █▓▒░║ mov [x_cursor], al ║░▒▓█ █▓▒░║ call move_cursor ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ move_cursor: ║░▒▓█ █▓▒░║ mov dh, [x_cursor] ║░▒▓█ █▓▒░║ mov dl, [y_cursor] ║░▒▓█ █▓▒░║ mov bh, 0x00 ║░▒▓█ █▓▒░║ mov ah, 0x02 ║░▒▓█ █▓▒░║ int 0x10 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ call loop ║░▒▓█ █▓▒░║ ret ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ done: ║░▒▓█ █▓▒░║ jmp $ ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░║ times 510 - ($-$$) db 0 ║░▒▓█ █▓▒░║ dw 0xAA55 ║░▒▓█ █▓▒░║ ║░▒▓█ █▓▒░╚═════════════════════════════════════════════════════════════════════╝░▒▓█ █▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓█ █▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ ███████████████████████████████████████████████████████████████████████████████