📄 readme.txt
字号:
修改记录: 1.修改这个文档,修改 Boot.s和setup.s 的输出信息,使其更加美观. 2002.9.1 2.定制djgpp nasm 在win下编译 本版功能: 5.移植到djgpp 使用windows 下的gcc nasm 编译成功,并且使用vmWare调试. 至此,开发方式定型了: sourceinsight, vmvare, djgpp, nasm. ^_^ 下一步考虑使用tc 或者其他的编译器制作setup中的16位程序. (使用C 加强setup.s 的功能) 4.Boot 装载 setup+os 到 0X10000 3.在实模式下跳到 setup, setup 把 os 移动到 0x100000 (1M) 2.然后切换到保护模式,用一句长跳转 jmp dword 8:0x100000 (nasm can mix 16bit and 32bit code) 1.使用了 c++ 主意事项: 2).setup.s 预留了2048(0x800)个字节供以后使用 1).setup.s 预留空间, setup 搬移 os 的位置(紧邻setup之后),应该一致. 总结: 系统从 1M 的地方跑起来,总算像个操作系统的 Loader 了!!!!!曾经遇到Bug 2 :( 2001.12.? 系统起动后跳到 0x10000 ,但是setup地址gdt_48 定义为 gdt,0x9 改为 gdt,0x1 问题解决.Bug 1 :( 2001.12.15 晚 11:51 bug fixed 先看看这个程序段 ;move os.bin to 0x100000 mov esi,0x010800 ;source offset mov edi,0x100000 ;dest offset mov ecx,0x1500 ;count move: mov ax, word [dword ds:esi] mov word [dword ds:edi],ax dec ecx cmp ecx,0 je endmove inc esi inc edi jmp move ;晕倒,没写这一句,怎么他妈的移动! endmove: 看到我写的注释了吗? 一开始竟然没写上 jmp move 后来把 ;dest offset 改为 0xb8000(直接写屏),发现屏幕上只有 一个红色的 f 在闪动,才查到这个问题 Bug 备忘录: 1) 在切换到保护模式后错误的使用 int 0x10 显示字符串 2) 使用不可写的段描述符 向显存写字符 3) 没有把选择子装入 ds 4)今天遇到几个问题: 2002.9.16 a) 去掉了函数c 中的类变量ab, 就不能出现绿色的Copyright信息. b) 去掉全局的类变量aaa, 就不能启动os. (head.s 不工作). 经过反复试验和观察, 结论如下: b) 不能复现, 认为是djgpp 环境运行不稳定,和着copy/b问题,总之, 没有确切原因. 应该不会再出现. a) 再函数重的类变量, (on stack )会调用初始化函数. 而全局的类 变量则要做未知的特殊处理. 所以导致g_x g_y 特别是g_color 没有处世化. 从而再不确定的位置打印出黑色字,被误认为 是os死掉了. 结论: 1) 使用cpp 做os 对全局类变量要有初始化动作,方法未知. 2) 一定要清bss 3) 全局变量一定要初始化. 定义时赋值好像不起作用,其实起 了作用, 因为位置不会变,只有颜色变黑,从而出现误会. 因为定义时赋值为0(黑).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -