Skip to content

Commit

Permalink
整理代码
Browse files Browse the repository at this point in the history
  • Loading branch information
copi143 committed Oct 25, 2024
1 parent 95b90d5 commit 8e6def3
Show file tree
Hide file tree
Showing 15 changed files with 160 additions and 164 deletions.
42 changes: 28 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,26 @@ add_subdirectory(include)
set_compile_flag("-std=gnu2x" "-std=gnu++2b")
set_link_flag("")

set_optim_flag("-g -O1") # 调试开 O1
# set_optim_flag("-Ofast") # 编译开 O3
set_optim_flag("-g -O2") # 默认参数,请一直开启调试符号
# set_optim_flag("-g -O1") # 调试开 O1
# set_optim_flag("-O2") #
# set_optim_flag("-O3") # 发布开 O3
# set_optim_flag("-Ofast") #

# add_compile_flag("-w") # 如果你不想编译器输出 warning

add_compile_flag("-fvisibility=hidden") # 隐藏符号

# 目标环境
add_compile_flag("-march=native")

include(cmake/optim) # 优化选项
include(cmake/lto) # 链接时优化
include(cmake/code-gc) # 删除重复代码

# 其它选项
add_compile_flag("-finput-charset=UTF-8 -fexec-charset=UTF-8") # 使用 utf-8 (默认)

include(cmake/disable-warning)

message("本机 环境")
Expand All @@ -61,35 +72,38 @@ add_subdirectory(util)
set_compile_flag("-std=gnu2x" "-std=gnu++2b") # 使用新的 C/C++ 版本
set_link_flag("")

set_optim_flag("-g -O2") # 请一直开启调试符号
set_optim_flag("-g -O2") # 默认参数,请一直开启调试符号
# set_optim_flag("-O1") # 测试通过
# set_optim_flag("-O2") # 测试通过
# set_optim_flag("-O3") # 测试通过

# add_compile_flag("-finstrument-functions") # 日志需要
# set_optim_flag("-Ofast") #

# add_compile_flag("-w") # 如果你不想编译器输出 warning

# if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# add_compile_flag("-emit-obj") # 不输出 llvm-ir
# endif()
add_compile_flag("-fvisibility=hidden") # 隐藏符号

# 告诉编译器没有标准库 (但似乎不需要这个)
# add_link_flag("-nolibc -Qn")
# 目标环境
add_compile_flag("-m32 -mfpmath=387")
add_compile_flag("-mno-mmx -mno-sse")
add_compile_flag("-nostdlib -nostdinc") # 不使用标准库和标准头
add_compile_flag("-ffreestanding") # 我们希望我们的标准库函数能够有和标准库一样的行为,所以我们希望可以不设置此项
# add_link_flag("-nolibc -Qn") # 告诉编译器没有标准库 (但似乎不需要这个)

include(cmake/optim) # 优化选项
include(cmake/lto) # 链接时优化
include(cmake/code-gc) # 删除重复代码

# add_compile_flag("-finstrument-functions") # 日志需要

# if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# add_compile_flag("-emit-obj") # 不输出 llvm-ir
# endif()

# 其它选项
add_compile_flag("-fno-optimize-sibling-calls") # 关闭尾递归优化
add_compile_flag("-fno-delete-null-pointer-checks") # 不删除程序员进行的空指针检查 (gcc 默认关闭)
add_compile_flag("-fno-strict-aliasing") # 禁用严格别名规则 (gcc 默认关闭)
add_compile_flag("-m32 -mfpmath=387")
add_compile_flag("-mno-mmx -mno-sse")
add_compile_flag("-nostdlib -nostdinc") # 不使用标准库和标准头
add_compile_flag("-finput-charset=UTF-8 -fexec-charset=UTF-8") # 使用 utf-8 (默认)
add_compile_flag("-ffreestanding") # 我们希望我们的标准库函数能够有和标准库一样的行为,所以我们希望可以不设置此项
add_compile_flag("-fno-stack-protector") # 不使用栈保护 (默认使用)
add_compile_flag("-fno-pic -fno-pie") # 不使用 pic 和 pie
add_compile_flag("-fno-asynchronous-unwind-tables")
Expand Down
66 changes: 33 additions & 33 deletions include/kernel/vbe.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,83 +69,83 @@ typedef struct __PACKED__ {
#define VBEMODEINFO_ADDR 0x7000

/**
* \brief 初始化VBE
*\brief 初始化VBE
*/
void vbe_init();

/**
* \brief 获取VBE控制器信息
*\brief 获取VBE控制器信息
*
* \param addr 指向存储控制器信息的结构体的指针
* \return 成功返回0,失败返回非0值
*\param addr 指向存储控制器信息的结构体的指针
*\return 成功返回0,失败返回非0值
*/
int vbe_get_controller_info(VESAControllerInfo *addr);

/**
* \brief 获取VBE模式信息
*\brief 获取VBE模式信息
*
* \param mode VBE模式编号
* \param addr 指向存储模式信息的结构体的指针
* \return 成功返回0,失败返回非0值
*\param mode VBE模式编号
*\param addr 指向存储模式信息的结构体的指针
*\return 成功返回0,失败返回非0值
*/
int vbe_get_mode_info(u16 mode, VESAModeInfo *addr);

/**
* \brief 打印所有可用的VBE模式
*\brief 打印所有可用的VBE模式
*/
void vbe_print_all_modes();

/**
* \brief 匹配指定分辨率和颜色深度的VBE模式
*\brief 匹配指定分辨率和颜色深度的VBE模式
*
* \param width 宽度
* \param height 高度
* \param bpp 每像素位数
* \return 成功返回模式编号,失败返回-1
*\param width 宽度
*\param height 高度
*\param bpp 每像素位数
*\return 成功返回模式编号,失败返回-1
*/
int vbe_match_mode(int width, int height, int bpp);

/**
* \brief 匹配并设置指定分辨率和颜色深度的VBE模式
*\brief 匹配并设置指定分辨率和颜色深度的VBE模式
*
* \param width 宽度
* \param height 高度
* \param bpp 每像素位数
* \return 返回指向设置模式后的帧缓冲区的指针,如果失败则返回NULL
*\param width 宽度
*\param height 高度
*\param bpp 每像素位数
*\return 返回指向设置模式后的帧缓冲区的指针,如果失败则返回NULL
*/
void *vbe_match_and_set_mode(int width, int height, int bpp);

/**
* \brief 设置帧缓冲区偏移
*\brief 设置帧缓冲区偏移
*
* \param xoff X轴偏移
* \param yoff Y轴偏移
* \return 成功返回0,失败返回非0值
*\param xoff X轴偏移
*\param yoff Y轴偏移
*\return 成功返回0,失败返回非0值
*/
int vbe_set_buffer(int xoff, int yoff);

/**
* \brief 翻转帧缓冲区
*\brief 翻转帧缓冲区
*
* \return 成功返回0,失败返回非0值
*\return 成功返回0,失败返回非0值
*/
int vbe_flip();

/**
* \brief 刷新帧缓冲区
*\brief 刷新帧缓冲区
*
* \param buf 指向要刷新的缓冲区的指针
* \return 成功返回0,失败返回非0值
*\param buf 指向要刷新的缓冲区的指针
*\return 成功返回0,失败返回非0值
*/
int vbe_flush(const void *buf);

/**
* \brief 清除屏幕
*\brief 清除屏幕
*
* \param r 红色分量
* \param g 绿色分量
* \param b 蓝色分量
* \return 成功返回0,失败返回非0值
*\param r 红色分量
*\param g 绿色分量
*\param b 蓝色分量
*\return 成功返回0,失败返回非0值
*/
int vbe_clear(byte r, byte g, byte b);

Expand Down
6 changes: 3 additions & 3 deletions include/libc-base/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
size_t __arg1 = (size_t)(port); \
register size_t _a1 asm("edx") = __arg1; \
asm volatile("inb %%dx, %%al\n\t" : "=a"(data) : "r"(_a1) : "memory"); \
data; \
(u8) data; \
})

#define asm_in16(port) \
Expand All @@ -16,7 +16,7 @@
size_t __arg1 = (size_t)(port); \
register size_t _a1 asm("edx") = __arg1; \
asm volatile("inw %%dx, %%ax\n\t" : "=a"(data) : "r"(_a1) : "memory"); \
data; \
(u16) data; \
})

#define asm_in32(port) \
Expand All @@ -25,7 +25,7 @@
size_t __arg1 = (size_t)(port); \
register size_t _a1 asm("edx") = __arg1; \
asm volatile("inl %%dx, %%eax\n\t" : "=a"(data) : "r"(_a1) : "memory"); \
data; \
(u32) data; \
})

#define asm_out8(port, data) \
Expand Down
2 changes: 1 addition & 1 deletion include/loader/fdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
void sendbyte(int byte);
int getbyte();
void wait_floppy_interrupt();
void reset(void);
void reset();
void floppy_init();
void recalibrate(void);
int fdc_rw(int block, u8 *blockbuff, int read, u32 nosectors);
1 change: 0 additions & 1 deletion include/loader/ide.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ struct IDEHardDiskInfomationBlock {
char ID[40];
};
void ide_read_buffer(u8 channel, u8 reg, u32 buffer, u32 quads);
void ide_write(u8 channel, u8 reg, u8 data);
void ide_read_sectors(u8 drive, u8 numsects, u32 lba, u16 es, u32 edi);
void ide_write_sectors(u8 drive, u8 numsects, u32 lba, u16 es, u32 edi);
void ide_initialize(u32 BAR0, u32 BAR1, u32 BAR2, u32 BAR3, u32 BAR4);
4 changes: 4 additions & 0 deletions src/boot/run-efi.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
qemu-system-x86_64 \
-smp sockets=1,cores=2,threads=2,maxcpus=4 \
-bios OVMF.fd \
-m 1024 \
-vga std -global VGA.vgamem_mb=32 \
-net none \
-serial stdio \
-device sb16 -device intel-hda -device hda-micro \
-drive file=fat:rw:plos-efi,index=0,format=vvfat \
$*
6 changes: 3 additions & 3 deletions src/boot/run.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
qemu-system-i386 \
-smp sockets=1,cores=4,threads=2,maxcpus=8 \
-smp sockets=1,cores=2,threads=2,maxcpus=4 \
-bios seabios.bin \
-vga std \
-m 256 \
-vga std -global VGA.vgamem_mb=32 \
-net nic,model=pcnet -net user \
-serial stdio \
-device sb16 -device intel-hda -device hda-micro \
-device floppy,drive=fda -drive id=fda,if=none,format=raw,file=disk.img \
-device ide-hd,drive=hda,bus=ide.0 -drive id=hda,if=none,format=raw,file=hd.img \
-boot a \
-m 256 \
$*
4 changes: 2 additions & 2 deletions src/kernel/drivers/general/8295a.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <kernel.h>

u8 value_pic0 = 0xfb;
u8 value_pic1 = 0xff;
static u8 value_pic0 = 0xfb;
static u8 value_pic1 = 0xff;

void init_pic() {
asm_out8(PIC0_IMR, 0xff); /* 初始化,所有中断均被屏蔽 */
Expand Down
16 changes: 6 additions & 10 deletions src/kernel/drivers/input/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
#define KEYCMD_WRITE_MODE 0x60
#define KBC_MODE 0x47

int input_char_inSM();
static int input_char_inSM();

static int caps_lock, shift, e0_flag = 0, ctrl = 0;

char keytable[0x54] = { // 按下Shift
static char keytable[0x54] = { // 按下Shift
0, 0x01, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\b', '\t', 'Q',
'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', 10, 0, 'A', 'S', 'D', 'F',
'G', 'H', 'J', 'K', 'L', ':', '\"', '~', 0, '|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M',
'<', '>', '?', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, '7', 'D', '8', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.'};

char keytable1[0x54] = { // 未按下Shift
static char keytable1[0x54] = { // 未按下Shift
0, 0x01, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', '\t', 'q',
'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', 10, 0, 'a', 's', 'd', 'f',
'g', 'h', 'j', 'k', 'l', ';', '\'', '`', 0, '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm',
Expand Down Expand Up @@ -85,26 +85,22 @@ int tty_fifo_get() {
}
}

int input_char_inSM() {
static int input_char_inSM() {
int i;
mtask *task = current_task();
while (1) {
if ((tty_fifo_status() != 0)) {
// 返回扫描码
i = tty_fifo_get(); // 从FIFO缓冲区中取出扫描码
if (i != -1) { break; }
if (i != -1) break;
}
}
return i;
}

int kbhit() {
return tty_fifo_status() != 0; // 进程的键盘FIFO缓冲区是否为空
}

// 扫描码转化ASCII码
// 逻辑与getch函数大同小异
int sc2a(int sc) {
static int sc2a(int sc) {
int ch = sc;
if (ch > 0x80) {
ch -= 0x80;
Expand Down
Loading

0 comments on commit 8e6def3

Please sign in to comment.