From e768e0c20616d38f34704db3f47bc1329cf01e58 Mon Sep 17 00:00:00 2001 From: Elysium Dev Date: Thu, 18 Jul 2024 14:12:13 +0800 Subject: [PATCH] Updated docs --- docs/chapters.md | 432 +++++++++++++++++++++++------------------------ 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/docs/chapters.md b/docs/chapters.md index 83eb264..a4b7b26 100644 --- a/docs/chapters.md +++ b/docs/chapters.md @@ -1,221 +1,221 @@ # 各章简要 -| Day | Section | Code | Title | Description | -| ------ | ------- | ------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 0 day | 1 | | 前言 | | -| | 2 | | 何谓操作系统 | | -| | 3 | | 开发操作系统的各种方法 | | -| | 4 | | 无知则无畏 | | -| | 5 | | 如何开发操作系统 | | -| | 6 | | 操作系统开发中的困难 | | -| | 7 | | 学习本书时的注意事项(重要!) | 版权说明 | -| | 8 | | 各章内容摘要 | | -| 01 day | 1 | helloos0 | 先动手操作 | | -| | 2 | | 究竟做了些什么 | | -| | 3 | helloos1 | 初次体验汇编程序 | | -| | 4 | helloos2 | 加工润色 | | -| 02 day | 1 | | 介绍文本编辑器 | | -| | 2 | helloos3 | 继续开发 | | -| | 3 | helloos4 | 先制作启动区 | | -| | 4 | helloos5 | Makefile 入门 | | -| 03 day | 1 | harib00a | 制作真正的 IPL | 软盘结构 | -| | 2 | harib00b | 试错 | | -| | 3 | harib00c | 读到 18 扇区 | | -| | 4 | harib00d | 读入 10 个柱面 | | -| | 5 | harib00e | | | -| | 6 | harib00f | | | -| | 7 | harib00g | | | -| | 8 | harib00h | | | -| | 9 | harib00i | | | -| | 10 | harib00j | | | -| 04 day | 1 | harib01a | | | -| | 2 | harib01b | | | -| | 3 | harib01c | | | -| | 4 | harib01d | | | -| | 5 | harib01e | | | -| | 6 | harib01f | | | -| | 7 | harib01g | | | -| | 8 | harib01h | | | -| 05 day | 1 | harib02a | | 保存内存中的启动信息,不用看 | -| | 2 | harib02b | | 增加结构体定义,有 C 语言基础可以不用看 | -| | 3 | harib02c | | 改为指针访问,有 C 语言基础可以不用看 | -| | 4 | harib02d | | 显示字符,本质上是写 VRAM | -| | 5 | harib02e | | 增加 ASCII 字符集,在 UTILS 下编写了一个 makefont 工具 | -| | 6 | harib02f | | 显示字符串,5 基础上的扩展 | -| | 7 | harib02g | | sprintf,增加 C 语言实现。自定义标准头文件和库[^1] | -| | 8 | harib02h | | 显示鼠标箭头,本质是写 VRAM | -| | 9 | harib02i | GDT 与 IDT 的初始化 | GDT 与 IDT | -| 06 day | 1 | harib03a | 分割源文件 | 代码重构,不用重点看 | -| | 2 | harib03b | 整理 Makefile | 不用重点看 | -| | 3 | harib03c | 整理头文件 | 代码重构,不用重点看 | -| | 4 | | 意犹未尽 | GDT 相关 | -| | 5 | harib03d | 初始化 PIC | | -| | 6 | harib03e | 中断处理程序的制作 | | -| 07 day | 1 | harib04a | 获取按键编码 | | -| | 2 | harib04b | 加快中断处理 | | -| | 3 | harib04c | 制作 FIFO 缓冲区 | | -| | 4 | harib04d | 改善 FIFO 缓冲区 | | -| | 5 | harib04e | 整理 FIFO 缓冲区 | | -| | 6 | harib04f | 总算讲到鼠标了 | | -| | 7 | harib04g | 从鼠标接收数据 | | -| 08 day | 1 | harib05a | 鼠标解读(1) | | -| | 2 | harib05b | 稍事整理 | | -| | 3 | harib05c | 鼠标解读(2) | | -| | 4 | harib05d | 移动鼠标指针 | | -| | 5 | | 通往 32 位模式之路 | 重点章节,描述了 Haribote 操作系统的内存分布 | -| 09 day | 1 | harib06a | 整理源文件 | 代码重构,非重点。参照书中的 Makefile 进行了整理,尽量与原书中的结构和名称保持一致。此处 Makefile 可做为基线 | -| | 2 | harib06b | 内存容量检查(1) | 运行结果为 32MB(这个结果是对的),与书中 3072MB 不一致(书中问题是编译器优化导致的结果)。为与书中结果一致,需要设置 QEMU 内存为 32MB(QEMU 帮助文档指出默认内存为 128MiB)。 | -| | 3 | harib06c | 内存容量检查(2) | 用汇编代码替换了 C 程序进行内存容量检查 | -| | 4 | harib06d | 挑战内存管理 | 电脑内存 128MB,这个数字在书中出现多次。在 13 天中指出使用的是 192MB 内存的组装机。 | -| 10 day | 1 | harib07a | 内存管理(续) | 主要讲向上向下取整的方法,非重点 | -| | 2 | harib07b | 叠加处理 | | -| | 3 | harib07c | 提高叠加处理速度(1) | | -| | 4 | harib07d | 提高叠加处理速度(2) | | -| 11 day | 1 | harib08a | 鼠标显示问题 | | -| | 2 | harib08b | 实现画面外的支持 | | -| | 3 | harib08c | shtctl 的指定省略 | 代码重构,非重点 | -| | 4 | harib08d | 显示窗口 | | -| | 5 | harib08e | 小实验 | | -| | 6 | harib08f | 高速计数器 | | -| | 7 | harib08g | 消除闪烁(1) | | -| | 8 | harib08h | 消除闪烁(2) | | -| 12 day | 1 | harib09a | 使用定时器 | | -| | 2 | harib09b | 计量时间 | | -| | 3 | harib09c | 超时功能 | | -| | 4 | harib09d | 使用多个定时器 | | -| | 5 | harib09e | 加快中断处理(1) | | -| | 6 | harib09f | 加快中断处理(2) | | -| | 7 | harib09g | 加快中断处理(3) | | -| 13 day | 1 | harib10a | 简化字符串显示 | 代码重构 | -| | 2 | harib10b | 重新调整 FIFO 缓冲区(1) | | -| | 3 | harib10c ~ harib10f | 测试性能 | ?运行起来显示很卡。规避方法是在 count++语句下加一行: sprintf(s, "%010d", count); 如此可取得与书中描述一致的效果。在 Raspberry Pi 5 上 QEMU 中运行计数结果为 0010233783 | -| | 4 | harib10g | 重新调整 FIFO 缓冲区(2) | ?运行起来显示很卡。规避方法如上。 | -| | 5 | harib10h | 加快中断处理(4) | ?运行起来显示很卡,规避同前 | -| | 6 | harib10i | 使用"哨兵"简化程序 | ?运行起来显示很卡,规避同前 | -| 14 day | 1 | harib11a | | ?运行起来显示很卡,规避同前 | -| | 2 | harib11b | | ?运行起来显示很卡,规避同前 | -| | 3 | harib11c | | ?运行起来显示很卡,规避同前 | -| | 4 | harib11d | | ?display issues, blank screen. In the book it uses 0xe0000000 as the VRAM address. Inserted a code block to fetch and set the VRAM to make it work. VBE mode | -| | 5 | harib11e | | ?运行起来显示很卡,规避同前, display is correct. There must be something changed for the display to work correctly. | -| | 6 | harib11f | | works great. Must be something fixed to make it run smoothly. That's because the var `count` is removed. | -| | 7 | harib11g | | works great | -| | 8 | harib11h | | works great | -| | 9 | harib11i | | works great | -| 15 day | 1 | harib12a | | works great | -| | 2 | harib12b | | works great | -| | 3 | harib12c | | works great | -| | 4 | harib12d | | works great | -| | 5 | harib12e | | ?运行起来显示很卡,应该和前面是同样原因,count 计数的问题 | -| | 6 | harib12f | | ?运行起来显示很卡 | -| | 7 | harib12g | | ?运行起来显示很卡 | -| 16 day | 1 | harib13a | 任务管理自动化 | ?运行起来显示很卡 | -| | 2 | harib13b | 让任务休眠 | ?运行起来显示很卡 | -| | 3 | harib13c | 增加窗口数量 | black screen. 超级卡,需要等很久才会有图像显示出来。规避方法:在 asmhead.nas 开始处直接 JMP scrn320,或者将 mtask.c 中 task->priority = 2; /_ 0.02 秒 _/ 改为一个较大的数值比如 20,和 CPU 性能相关 | -| | 4 | harib13d | 设定任务优先级(1) | black screen。规避方法同 harib13c | -| | 5 | harib13e | 设定任务优先级(2) | ?运行起来显示很卡 | -| 17 day | 1 | harib14a | 闲置任务 | works perfect | -| | 2 | harib14b | 创建命令行窗口 | works perfect | -| | 3 | harib14c | 切换输入窗口 | works perfect | -| | 4 | harib14d | 实现字符输入 | works perfect | -| | 5 | harib14e | 符号的输入 | works perfect | -| | 6 | harib14f | 大写字母与小写字母 | works perfect | -| | 7 | harib14g | 对各种锁定键的支持 | works perfect | -| 18 day | 1 | harib15a | 控制光标闪烁(1) | | -| | 2 | harib15b | 控制光标闪烁(2) | | -| | 3 | harib15c | 对回车键的支持 | | -| | 4 | harib15d | 对窗口滚动的支持 | | -| | 5 | harib15e | mem 命令 | | -| | 6 | harib15f | cls 命令 | newly added strcmp.obj | -| | 7 | harib15g | dir 命令 | | -| 19 day | 1 | harib16a | type 命令 | | -| | 2 | harib16b | type 命令改良 | | -| | 3 | harib16c | 对 FAT 的支持 | FAT 说明 | -| | 4 | harib16d | 代码整理 | 代码重构,非重点 | -| | 5 | harib16e | 第一个应用程序 | | -| 20 day | 1 | harib17a | 程序整理 | 代码重构 | -| | 2 | harib17b | 显示单个字符的 API(1) | 必须使用.hrb 这个文件扩展名才能执行 | -| | 3 | harib17c | 显示单个字符的 API(2) | 书中用的跳转是; CALL 2\*8:0xbe3 根据.map 文件中的实际地址值进行调整 | -| | 4 | harib17d | 结束应用程序 | | -| | 5 | harib17e | 不随操作系统版本而改变的 API | | -| | 6 | harib17f | 为应用程序自由命名 | | -| | 7 | harib17g | 当心寄存器 | | -| | 8 | harib17h | 用 API 显示字符串 | | -| 21 day | 1 | harib18a | 攻克难题——字符串显示 API | | -| | 2 | harib18b | 用 C 语言编写应用程序 | 运行 a 后不返回提示符,这是因为作者使用了自定义工具,代码中会查找 Hari 四个字符并替换。引入 app.lds 解决了这个问题 | -| | 3 | harib18c | 保护操作系统(1) | 运行 a 后不返回提示符。处理同前 | -| | 4 | harib18d | 保护操作系统(2) | | -| | 5 | harib18e | 对异常的支持 | | -| | 6 | harib18f | 保护操作系统(3) | | -| | 7 | harib18g | 保护操作系统(4) | works perfect。重点章节 | -| 22 day | 1 | harib19a | 保护操作系统(5) | Started to use mtools(后记:已全部更新). | -| | 2 | harib19b | 帮助发现 bug | [^7] | -| | 3 | harib19c | 强制结束应用程序 | | -| | 4 | harib19d | 用 C 语言显示字符串(1) | | -| | 5 | harib19e | 用 C 语言显示字符串(2) | 如作者指出 hrb 文件使用了自定义的格式,并且使用作者开发的工具生成的。引入 hrb.lds。尚未理解“0x001c 中存放的是应用程序运行入口地址减去 0x20 后的值。为什么不直接写上入口地址而是要减掉一个数呢?” | -| | 6 | harib19f | 显示窗口 | | -| | 7 | harib19g | 在窗口中描绘字符和方块 | | -| 23 day | 1 | harib20a | 编写 malloc | | -| | 2 | harib20b | 画点 | | -| | 3 | harib20c | 刷新窗口 | | -| | 4 | harib20d | 画直线 | | -| | 5 | harib20e | 关闭窗口 | | -| | 6 | harib20f | 键盘输入 API | | -| | 7 | harib20g | 用键盘输入来消遣一下 | | -| | 8 | harib20h | 强制结束并关闭窗口 | | -| 24 day | 1 | harib21a | 窗口切换(1) | | -| | 2 | harib21b | 窗口切换(2) | | -| | 3 | harib21c | 移动窗口 | | -| | 4 | harib21d | 用鼠标关闭窗口 | | -| | 5 | harib21e | 将输入切换到应用程序窗口 | | -| | 6 | harib21f | 用鼠标切换输入窗口 | | -| | 7 | harib21g | 定时器 API | There is no display of the hour value. It's related to the implementation of the sprintf function. | -| | 8 | harib21h | 取消定时器 | Same display problem as the last section. | -| 25 day | 1 | harib22a | 蜂鸣器发声 | | -| | 2 | harib22b | 增加更多的颜色(1) | | -| | 3 | harib22c | 增加更多的颜色(2) | | -| | 4 | harib22d | 窗口初始位置 | | -| | 5 | harib22e | 增加命令行窗口(1) | | -| | 6 | harib22f | 增加命令行窗口(2) | 在 QEMU 中运行并没有出现像书中所说的 QEMU 出错退出的问题 | -| | 7 | harib22g | 增加命令行窗口(3) | | -| | 8 | harib22h | 增加命令行窗口(4) | | -| | 9 | harib22i | 变得更像真正的操作系统(1) | 在 QEMU 中运行并没有出现像书中所说的不断重启的问题 | -| | 10 | harib22j | 变得更像真正的操作系统(2) | | -| 26 day | 1 | harib23a | 提高窗口移动速度(1) | | -| | 2 | harib23b | 提高窗口移动速度(2) | | -| | 3 | harib23c | 提高窗口移动速度(3) | | -| | 4 | harib23d | 提高窗口移动速度(4) | | -| | 5 | harib23e | 启动时只打开一个命令行窗口 | | -| | 6 | harib23f | 增加更多的命令行窗口 | | -| | 7 | harib23g | 关闭命令行窗口(1) | | -| | 8 | harib23h | 关闭命令行窗口(2) | | -| | 9 | harib23i | start 命令 | | -| | 10 | harib23j | ncst 命令 | | -| 27 day | 1 | harib24a | 先来修复 bug | | -| | 2 | harib24b | 应用程序运行时关闭命令行窗口 | | -| | 3 | harib24c | 保护应用程序(1) | | -| | 4 | harib24d | 保护应用程序(2) | LDT | -| | 5 | harib24e | 优化应用程序的大小 | | -| | 6 | harib24f | 库 | | -| | 7 | harib24g | 整理 make 环境 | | -| 28 day | 1 | harib25a | alloca(1) | | -| | 2 | harib25b | alloca(2) | | -| | 3 | harib25c | 文件操作 API | | -| | 4 | harib25d | 命令行 API | | -| | 5 | harib25e | 日文文字显示(1) | | -| | 6 | harib25f | 日文文字显示(2) | | -| | 7 | harib25g | 日文文字显示(3) | 从此 ipl10->ipl20。typeipl.hrb 用于显示 ipl10.nas,由于此文件从这里开始不存在,typeipl 无显示输出 | -| 29 day | 1 | harib26a | 修复 bug | | -| | 2 | harib26b | 文件压缩 | 此处引入 tek 压缩[^9] | -| | 3 | | 标准函数 | | -| | 4 | harib26c | 非矩形窗口 | | -| | 5 | harib26d | bball | | -| | 6 | harib26e | 外星人游戏 | | -| 30 day | 1 | harib27a | 命令行计算器 | | -| | 2 | harib27b | 文本阅览器 | | -| | 3 | harib27c | MML 播放器 | | -| | 4 | harib27d | 图片阅览器 | JPEG 图片显示有问题 | -| | 5 | harib27e | IPL 的改良 | 从此 ipl20->ipl09。在 Linux 上查看 img 文件是 0x430a0,需要 15 个柱面,因为没有使用 tek 压缩字库文件。将 9 改为 15(此值因开发环境不同可能有差异) | -| | 6 | harib27f | 光盘启动 | | +| Day | Section | Code | Title | Description | +| ---------------------------------------- | ------- | ------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 day 着手开发之前 | 1 | | 前言 | | +| | 2 | | 何谓操作系统 | | +| | 3 | | 开发操作系统的各种方法 | | +| | 4 | | 无知则无畏 | | +| | 5 | | 如何开发操作系统 | | +| | 6 | | 操作系统开发中的困难 | | +| | 7 | | 学习本书时的注意事项(重要!) | 版权说明 | +| | 8 | | 各章内容摘要 | | +| 01 day 从计算机结构到汇编程序入门 | 1 | helloos0 | 先动手操作 | | +| | 2 | | 究竟做了些什么 | | +| | 3 | helloos1 | 初次体验汇编程序 | | +| | 4 | helloos2 | 加工润色 | | +| 02 day 汇编语言学习与 Makefile 入门 | 1 | | 介绍文本编辑器 | | +| | 2 | helloos3 | 继续开发 | | +| | 3 | helloos4 | 先制作启动区 | | +| | 4 | helloos5 | Makefile 入门 | | +| 03 day 进入 32 位模式并导入 C 语言 | 1 | harib00a | 制作真正的 IPL | 软盘结构 | +| | 2 | harib00b | 试错 | | +| | 3 | harib00c | 读到 18 扇区 | | +| | 4 | harib00d | 读入 10 个柱面 | | +| | 5 | harib00e | 着手开发操作系统 | | +| | 6 | harib00f | 从启动区执行操作系统 | | +| | 7 | harib00g | 确认操作系统的执行情况 | | +| | 8 | harib00h | 32 位模式前期准备 | | +| | 9 | harib00i | 开始导入 C 语言 | | +| | 10 | harib00j | 实现 HLT | | +| 04 day C 语言与画面显示的练习 | 1 | harib01a | 用 C 语言实现内存写入 | | +| | 2 | harib01b | 条纹图案 | | +| | 3 | harib01c | 挑战指针 | | +| | 4 | harib01d | 指针应用(1) | | +| | 5 | harib01e | 指针应用(2) | | +| | 6 | harib01f | 色号设定 | | +| | 7 | harib01g | 绘制矩形 | | +| | 8 | harib01h | 今天的成果 | | +| 05 day 结构体、文字显示与 GDT/IDT 初始化 | 1 | harib02a | 接收启动信息 | 保存内存中的启动信息,不用看 | +| | 2 | harib02b | 试用结构体 | 增加结构体定义,有 C 语言基础可以不用看 | +| | 3 | harib02c | 试用箭头记号 | 改为指针访问,有 C 语言基础可以不用看 | +| | 4 | harib02d | 显示字符 | 显示字符,本质上是写 VRAM | +| | 5 | harib02e | 增加字体 | 增加 ASCII 字符集,在 UTILS 下编写了一个 makefont 工具 | +| | 6 | harib02f | 显示字符串 | 显示字符串,5 基础上的扩展 | +| | 7 | harib02g | 显示变量值 | sprintf,增加 C 语言实现。自定义标准头文件和库[^1] | +| | 8 | harib02h | 显示鼠标指针 | 显示鼠标箭头,本质是写 VRAM | +| | 9 | harib02i | GDT 与 IDT 的初始化 | GDT 与 IDT | +| 06 day 分割编译与中断处理 | 1 | harib03a | 分割源文件 | 代码重构,不用重点看 | +| | 2 | harib03b | 整理 Makefile | 不用重点看 | +| | 3 | harib03c | 整理头文件 | 代码重构,不用重点看 | +| | 4 | | 意犹未尽 | GDT 相关 | +| | 5 | harib03d | 初始化 PIC | | +| | 6 | harib03e | 中断处理程序的制作 | | +| 07 day FIFO 与鼠标控制 | 1 | harib04a | 获取按键编码 | | +| | 2 | harib04b | 加快中断处理 | | +| | 3 | harib04c | 制作 FIFO 缓冲区 | | +| | 4 | harib04d | 改善 FIFO 缓冲区 | | +| | 5 | harib04e | 整理 FIFO 缓冲区 | | +| | 6 | harib04f | 总算讲到鼠标了 | | +| | 7 | harib04g | 从鼠标接收数据 | | +| 08 day 鼠标控制与 32 位模式切换 | 1 | harib05a | 鼠标解读(1) | | +| | 2 | harib05b | 稍事整理 | | +| | 3 | harib05c | 鼠标解读(2) | | +| | 4 | harib05d | 移动鼠标指针 | | +| | 5 | | 通往 32 位模式之路 | 重点章节,描述了 Haribote 操作系统的内存分布 | +| 09 day 内存管理 | 1 | harib06a | 整理源文件 | 代码重构,非重点。参照书中的 Makefile 进行了整理,尽量与原书中的结构和名称保持一致。此处 Makefile 可做为基线 | +| | 2 | harib06b | 内存容量检查(1) | 运行结果为 32MB(这个结果是对的),与书中 3072MB 不一致(书中问题是编译器优化导致的结果)。为与书中结果一致,需要设置 QEMU 内存为 32MB(QEMU 帮助文档指出默认内存为 128MiB)。 | +| | 3 | harib06c | 内存容量检查(2) | 用汇编代码替换了 C 程序进行内存容量检查 | +| | 4 | harib06d | 挑战内存管理 | 电脑内存 128MB,这个数字在书中出现多次。在 13 天中指出使用的是 192MB 内存的组装机。 | +| 10 day 叠加处理 | 1 | harib07a | 内存管理(续) | 主要讲向上向下取整的方法,非重点 | +| | 2 | harib07b | 叠加处理 | | +| | 3 | harib07c | 提高叠加处理速度(1) | | +| | 4 | harib07d | 提高叠加处理速度(2) | | +| 11 day 制作窗口 | 1 | harib08a | 鼠标显示问题 | | +| | 2 | harib08b | 实现画面外的支持 | | +| | 3 | harib08c | shtctl 的指定省略 | 代码重构,非重点 | +| | 4 | harib08d | 显示窗口 | | +| | 5 | harib08e | 小实验 | | +| | 6 | harib08f | 高速计数器 | | +| | 7 | harib08g | 消除闪烁(1) | | +| | 8 | harib08h | 消除闪烁(2) | | +| 12 day 定时器(1) | 1 | harib09a | 使用定时器 | | +| | 2 | harib09b | 计量时间 | | +| | 3 | harib09c | 超时功能 | | +| | 4 | harib09d | 使用多个定时器 | | +| | 5 | harib09e | 加快中断处理(1) | | +| | 6 | harib09f | 加快中断处理(2) | | +| | 7 | harib09g | 加快中断处理(3) | | +| 13 day 定时器(2) | 1 | harib10a | 简化字符串显示 | 代码重构 | +| | 2 | harib10b | 重新调整 FIFO 缓冲区(1) | | +| | 3 | harib10c ~ harib10f | 测试性能 | ?运行起来显示很卡。规避方法是在 count++语句下加一行: sprintf(s, "%010d", count); 如此可取得与书中描述一致的效果。在 Raspberry Pi 5 上 QEMU 中运行计数结果为 0010233783 | +| | 4 | harib10g | 重新调整 FIFO 缓冲区(2) | ?运行起来显示很卡。规避方法如上。 | +| | 5 | harib10h | 加快中断处理(4) | ?运行起来显示很卡,规避同前 | +| | 6 | harib10i | 使用"哨兵"简化程序 | ?运行起来显示很卡,规避同前 | +| 14 day 高分辨率及键盘输入 | 1 | harib11a | 继续测试性能 | ?运行起来显示很卡,规避同前 | +| | 2 | harib11b | | ?运行起来显示很卡,规避同前 | +| | 3 | harib11c | | ?运行起来显示很卡,规避同前 | +| | 4 | harib11d | 提高分辨率(1) | ?display issues, blank screen. In the book it uses 0xe0000000 as the VRAM address. Inserted a code block to fetch and set the VRAM to make it work. VBE mode | +| | 5 | harib11e | 提高分辨率(2) | ?运行起来显示很卡,规避同前, display is correct. There must be something changed for the display to work correctly. | +| | 6 | harib11f | 键盘输入(1) | works great. Must be something fixed to make it run smoothly. That's because the var `count` is removed. | +| | 7 | harib11g | 键盘输入(2) | works great | +| | 8 | harib11h | 追记内容(1) | works great | +| | 9 | harib11i | 追记内容(2) | works great | +| 15 day 多任务(1) | 1 | harib12a | 挑战任务切换 | works great | +| | 2 | harib12b | 任务切换进阶 | works great | +| | 3 | harib12c | 做个简单的多任务(1) | works great | +| | 4 | harib12d | 做个简单的多任务(2) | works great | +| | 5 | harib12e | 提高运行速度 | ?运行起来显示很卡,应该和前面是同样原因,count 计数的问题 | +| | 6 | harib12f | 测试运行速度 | ?运行起来显示很卡 | +| | 7 | harib12g | 多任务进阶 | ?运行起来显示很卡 | +| 16 day 多任务(2) | 1 | harib13a | 任务管理自动化 | ?运行起来显示很卡 | +| | 2 | harib13b | 让任务休眠 | ?运行起来显示很卡 | +| | 3 | harib13c | 增加窗口数量 | black screen. 超级卡,需要等很久才会有图像显示出来。规避方法:在 asmhead.nas 开始处直接 JMP scrn320,或者将 mtask.c 中 task->priority = 2; /_ 0.02 秒 _/ 改为一个较大的数值比如 20,和 CPU 性能相关 | +| | 4 | harib13d | 设定任务优先级(1) | black screen。规避方法同 harib13c | +| | 5 | harib13e | 设定任务优先级(2) | ?运行起来显示很卡 | +| 17 day 命令行窗口 | 1 | harib14a | 闲置任务 | works perfect | +| | 2 | harib14b | 创建命令行窗口 | works perfect | +| | 3 | harib14c | 切换输入窗口 | works perfect | +| | 4 | harib14d | 实现字符输入 | works perfect | +| | 5 | harib14e | 符号的输入 | works perfect | +| | 6 | harib14f | 大写字母与小写字母 | works perfect | +| | 7 | harib14g | 对各种锁定键的支持 | works perfect | +| 18 day dir 命令 | 1 | harib15a | 控制光标闪烁(1) | | +| | 2 | harib15b | 控制光标闪烁(2) | | +| | 3 | harib15c | 对回车键的支持 | | +| | 4 | harib15d | 对窗口滚动的支持 | | +| | 5 | harib15e | mem 命令 | | +| | 6 | harib15f | cls 命令 | newly added strcmp.obj | +| | 7 | harib15g | dir 命令 | | +| 19 day 应用程序 | 1 | harib16a | type 命令 | | +| | 2 | harib16b | type 命令改良 | | +| | 3 | harib16c | 对 FAT 的支持 | FAT 说明 | +| | 4 | harib16d | 代码整理 | 代码重构,非重点 | +| | 5 | harib16e | 第一个应用程序 | | +| 20 day API | 1 | harib17a | 程序整理 | 代码重构 | +| | 2 | harib17b | 显示单个字符的 API(1) | 必须使用.hrb 这个文件扩展名才能执行 | +| | 3 | harib17c | 显示单个字符的 API(2) | 书中用的跳转是; CALL 2\*8:0xbe3 根据.map 文件中的实际地址值进行调整 | +| | 4 | harib17d | 结束应用程序 | | +| | 5 | harib17e | 不随操作系统版本而改变的 API | | +| | 6 | harib17f | 为应用程序自由命名 | | +| | 7 | harib17g | 当心寄存器 | | +| | 8 | harib17h | 用 API 显示字符串 | | +| 21 day 保护操作系统 | 1 | harib18a | 攻克难题——字符串显示 API | | +| | 2 | harib18b | 用 C 语言编写应用程序 | 运行 a 后不返回提示符,这是因为作者使用了自定义工具,代码中会查找 Hari 四个字符并替换。引入 app.lds 解决了这个问题 | +| | 3 | harib18c | 保护操作系统(1) | 运行 a 后不返回提示符。处理同前 | +| | 4 | harib18d | 保护操作系统(2) | | +| | 5 | harib18e | 对异常的支持 | | +| | 6 | harib18f | 保护操作系统(3) | | +| | 7 | harib18g | 保护操作系统(4) | works perfect。重点章节 | +| 22 day 用 C 语言编写应用程序 | 1 | harib19a | 保护操作系统(5) | Started to use mtools(后记:已全部更新). | +| | 2 | harib19b | 帮助发现 bug | [^7] | +| | 3 | harib19c | 强制结束应用程序 | | +| | 4 | harib19d | 用 C 语言显示字符串(1) | | +| | 5 | harib19e | 用 C 语言显示字符串(2) | 如作者指出 hrb 文件使用了自定义的格式,并且使用作者开发的工具生成的。引入 hrb.lds。尚未理解“0x001c 中存放的是应用程序运行入口地址减去 0x20 后的值。为什么不直接写上入口地址而是要减掉一个数呢?” | +| | 6 | harib19f | 显示窗口 | | +| | 7 | harib19g | 在窗口中描绘字符和方块 | | +| 23 day 图形处理相关 | 1 | harib20a | 编写 malloc | | +| | 2 | harib20b | 画点 | | +| | 3 | harib20c | 刷新窗口 | | +| | 4 | harib20d | 画直线 | | +| | 5 | harib20e | 关闭窗口 | | +| | 6 | harib20f | 键盘输入 API | | +| | 7 | harib20g | 用键盘输入来消遣一下 | | +| | 8 | harib20h | 强制结束并关闭窗口 | | +| 24 day 窗口操作 | 1 | harib21a | 窗口切换(1) | | +| | 2 | harib21b | 窗口切换(2) | | +| | 3 | harib21c | 移动窗口 | | +| | 4 | harib21d | 用鼠标关闭窗口 | | +| | 5 | harib21e | 将输入切换到应用程序窗口 | | +| | 6 | harib21f | 用鼠标切换输入窗口 | | +| | 7 | harib21g | 定时器 API | There is no display of the hour value. It's related to the implementation of the sprintf function. | +| | 8 | harib21h | 取消定时器 | Same display problem as the last section. | +| 25 day 增加命令行窗口 | 1 | harib22a | 蜂鸣器发声 | | +| | 2 | harib22b | 增加更多的颜色(1) | | +| | 3 | harib22c | 增加更多的颜色(2) | | +| | 4 | harib22d | 窗口初始位置 | | +| | 5 | harib22e | 增加命令行窗口(1) | | +| | 6 | harib22f | 增加命令行窗口(2) | 在 QEMU 中运行并没有出现像书中所说的 QEMU 出错退出的问题 | +| | 7 | harib22g | 增加命令行窗口(3) | | +| | 8 | harib22h | 增加命令行窗口(4) | | +| | 9 | harib22i | 变得更像真正的操作系统(1) | 在 QEMU 中运行并没有出现像书中所说的不断重启的问题 | +| | 10 | harib22j | 变得更像真正的操作系统(2) | | +| 26 day 为窗口移动提速 | 1 | harib23a | 提高窗口移动速度(1) | | +| | 2 | harib23b | 提高窗口移动速度(2) | | +| | 3 | harib23c | 提高窗口移动速度(3) | | +| | 4 | harib23d | 提高窗口移动速度(4) | | +| | 5 | harib23e | 启动时只打开一个命令行窗口 | | +| | 6 | harib23f | 增加更多的命令行窗口 | | +| | 7 | harib23g | 关闭命令行窗口(1) | | +| | 8 | harib23h | 关闭命令行窗口(2) | | +| | 9 | harib23i | start 命令 | | +| | 10 | harib23j | ncst 命令 | | +| 27 day LDT 与库 | 1 | harib24a | 先来修复 bug | | +| | 2 | harib24b | 应用程序运行时关闭命令行窗口 | | +| | 3 | harib24c | 保护应用程序(1) | | +| | 4 | harib24d | 保护应用程序(2) | LDT | +| | 5 | harib24e | 优化应用程序的大小 | | +| | 6 | harib24f | 库 | | +| | 7 | harib24g | 整理 make 环境 | | +| 28 day 文件操作与文字显示 | 1 | harib25a | alloca(1) | | +| | 2 | harib25b | alloca(2) | | +| | 3 | harib25c | 文件操作 API | | +| | 4 | harib25d | 命令行 API | | +| | 5 | harib25e | 日文文字显示(1) | | +| | 6 | harib25f | 日文文字显示(2) | | +| | 7 | harib25g | 日文文字显示(3) | 从此 ipl10->ipl20。typeipl.hrb 用于显示 ipl10.nas,由于此文件从这里开始不存在,typeipl 无显示输出 | +| 29 day 压缩与简单的应用程序 | 1 | harib26a | 修复 bug | | +| | 2 | harib26b | 文件压缩 | 此处引入 tek 压缩[^9] | +| | 3 | | 标准函数 | | +| | 4 | harib26c | 非矩形窗口 | | +| | 5 | harib26d | bball | | +| | 6 | harib26e | 外星人游戏 | | +| 30 day 高级的应用程序 | 1 | harib27a | 命令行计算器 | | +| | 2 | harib27b | 文本阅览器 | | +| | 3 | harib27c | MML 播放器 | | +| | 4 | harib27d | 图片阅览器 | JPEG 图片显示有问题 | +| | 5 | harib27e | IPL 的改良 | 从此 ipl20->ipl09。在 Linux 上查看 img 文件是 0x430a0,需要 15 个柱面,因为没有使用 tek 压缩字库文件。将 9 改为 15(此值因开发环境不同可能有差异) | +| | 6 | harib27f | 光盘启动 | | [^1]: 见 utils/libc. [^5]: JMP location.