4日目

ここらへんから開発は主にCでおこなうようになっていくのでここで説明することは減っていきます。
4日目についてはbootpack.cなどはOS自作本とまったく同じでOK
異なるのはnaskfunc.nasに対応するasmfunc.Sを作ったくらいです。


//
// asmfunc.S
//

.file "asmfunc.S"

.code32

.globl io_hlt
io_hlt:
	hlt
	ret

.globl io_cli
io_cli:
	cli
	ret

.globl io_sti
io_sti:
	sti
	ret

.globl write_mem8
write_mem8:	// void write_mem8(int addr, int data)
	movl 4(%esp), %ecx		// addrを%ecxに代入
	movb 8(%esp), %al		// dataを%alに代入
	movb %al, (%ecx)
	ret

.globl io_out8
io_out8:
	movl	4(%esp), %edx	// port
	movb	8(%esp), %al	// data
	outb	%al, %dx
	ret

.globl io_in8
io_in8:
	movl	4(%esp), %edx	// port
	movl	$0, %eax
	inb	%dx, %al
	ret

	
.globl io_load_eflags
io_load_eflags:		// int io_load_eflags(void)
	pushf		// push %eflags
	popl	%eax
	ret

.globl io_store_eflags
io_store_eflags:	// void io_store_eflags(int eflags)
	movl	4(%esp), %eax
	push	%eax
	popf		// pop %eflags
	ret

MakefileはOBJを書換えるだけでOK

OBJS = crt.o bootpack.o asmfunc.o