私は動作するシンプルなカスタム OS を持っています (今のところあまり機能しません:D)。現在、キーボードをサポートしていないアセンブリ ファイル (boot.s) を使用しています。
アセンブリ ファイル (boot.s):
# set magic number to 0x1BADB002 to identified by bootloader
.set MAGIC, 0x1BADB002
# set flags to 0
.set FLAGS, 0
# set the checksum
.set CHECKSUM, -(MAGIC + FLAGS)
# set multiboot enabled
.section .multiboot
# define type to long for each data defined as above
.long MAGIC
.long FLAGS
.long CHECKSUM
# set the stack bottom
stackBottom:
# define the maximum size of stack to 512 bytes
.skip 512
# set the stack top which grows from higher to lower
stackTop:
.section .text
.global _start
.type _start, @function
_start:
# assign current stack pointer location to stackTop
mov $stackTop, %esp
# call the kernel main source
call KERNEL_MAIN
cli
# put system in infinite loop
hltLoop:
hlt
jmp hltLoop
.size _start, . - _start
これは欠けている部分だと思いますが、インテルの構文であり、使用できません。
load_idt:
mov edx, [esp + 4]
lidt [edx]
sti
ret
read_port:
mov edx, [esp + 4]
in al, dx
ret
write_port:
mov edx, [esp + 4]
mov al, [esp + 4 + 4]
out dx, al
ret
keyboard_handler:
call keyboard_handler
iretd
次のコマンドで boot.s をコンパイルしています。
as --32 boot.s -o boot.o
キーボード部分 (Intel 構文) を AT&T に変換するのを手伝ってくれる人はいますか? :)