Add ports files and add use ANSI C.
This commit is contained in:
parent
842ae8b49d
commit
37cb11cec0
6
Makefile
6
Makefile
@ -1,11 +1,11 @@
|
||||
ASM=nasm
|
||||
BIN=bin
|
||||
CFLAGS=-ffreestanding -fno-pie -m32
|
||||
CFLAGS=-ffreestanding -fno-pie -m32 -ansi
|
||||
CC=gcc
|
||||
LD=ld
|
||||
LDFLAGS=-melf_i386 -Ttext 0x1000 --oformat binary
|
||||
|
||||
OBJ=kernel/kernel_entry.o kernel/kernel.o
|
||||
OBJ=kernel/kernel_entry.o kernel/kernel.o kernel/ports.o
|
||||
|
||||
all: os-image
|
||||
|
||||
@ -29,5 +29,5 @@ kernel/kernel.bin: $(OBJ)
|
||||
.PHONY: clean
|
||||
|
||||
clean:
|
||||
rm -rf boot/*.bin boot/*.o
|
||||
rm -rf boot/*.bin kernel/*.bin
|
||||
rm -rf kernel/*.o boot/*.o drivers/*.o
|
||||
|
23
kernel/ports.c
Normal file
23
kernel/ports.c
Normal file
@ -0,0 +1,23 @@
|
||||
unsigned char port_byte_in(unsigned char port) {
|
||||
unsigned char res;
|
||||
/*
|
||||
* `"=a" (res)' means: put result of `al' into `res' variable
|
||||
* `"d" (port)' means: load `port' into `dx'.
|
||||
*/
|
||||
__asm__("in %%dx, %%al" : "=a" (res) : "d" (port));
|
||||
return res;
|
||||
}
|
||||
|
||||
void port_byte_out(unsigned char port, unsigned char data) {
|
||||
__asm__("out %%al, %%dx" : : "a" (data), "d" (port));
|
||||
}
|
||||
|
||||
unsigned short port_word_in(unsigned short port) {
|
||||
unsigned short res;
|
||||
__asm__("in %%dx, %%ax" : "=a" (res) : "d" (port));
|
||||
return res;
|
||||
}
|
||||
|
||||
void port_word_out(unsigned short port, unsigned short data) {
|
||||
__asm__("out %%ax, %%dx" : : "a" (data), "d" (port));
|
||||
}
|
18
kernel/ports.h
Normal file
18
kernel/ports.h
Normal file
@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
* return a byte from a port.
|
||||
*/
|
||||
unsigned char port_byte_in(unsigned char port);
|
||||
/*
|
||||
* write a byte of data to a port.
|
||||
*/
|
||||
void port_byte_out(unsigned char port, unsigned char data);
|
||||
/*
|
||||
* return a word of data from a port.
|
||||
*/
|
||||
unsigned short port_word_in(unsigned short port);
|
||||
/*
|
||||
* write a word of data to a port.
|
||||
*/
|
||||
void port_word_out(unsigned short port, unsigned short data);
|
Loading…
Reference in New Issue
Block a user