x01.os.16: 添加功能
准备工作
1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件。
2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中。
3.bmp.nasm 需用 nasm.exe 编译,格式为 -f win32,参看 app/makefile。
4.app/haribote.rule 文件作了少许修改。
使用方法
1.进入 src 文件夹,双击 cmd.bat,在命令行窗口分别输入如下命令即可:
cd apilib
make
cd ../app
make
cd ../
make
2.操作系统启动后,shift + F2 可打开新终端,输入 exit 可关闭终端。
3.终端中分别输入 winhi 回车,type boot.s 回车可获取初步体验。效果图如下:
4.终端中输入 tview boot.s 可浏览文件,gview 1.bmp 可查看图片,按 q 或 Q 关闭。效果图如下:
5.终端中输入 ball 是个小游戏,空格键发射子弹,4、6 两个数字键左右移动,打 X 关闭。效果图如下:
一点改进
1.添加 apilib/api028.s 文件,内容如下:
[format "WCOFF"]
[instrset "i486p"]
[bits ]
[file "api028.nas"] global _api_setlang [section .text]
_api_setlang: ; void api_setlang(int mode);
mov edx,
mov eax, [esp + ]
int 0x40
ret
2.apilib/makefile 当然要作相应修改,改动的地方只有一处,就是在 ApiObjs 中添加 api028.obj。
3.修改app/api.h,也只添加一处,即 api_setlang 的声明: void api_setlang(int mode);
4.修改app/calc.c 中的 HariMain(),开头添加如下代码:
int oldmode = api_getlang();
api_setlang();
在倒数第二行添加如下代码:
api_setlang(oldmode);
5. 还有就是 console.c 中的 hrb_api() 函数,需添加 else if (edx == 28) {...}, 可参看源代码。
按使用方法 1 重新编译.。OK! calc 现在可以不受日文字符的干扰了。
以上也是添加自己功能的一般步骤。
x01.wos.5 下载链接:os 源代码
又:代码也可到我的置顶随笔x01.Lab.Download中获取,上面的是 CSDN 中的链接。由于博客园有时不能显示图片,所以在 CSDN 中也弄了一份。
x01.os.16: 添加功能的更多相关文章
- x01.os.5: DOS 功能调用
DOS 功能调用(INT 21)-------------------------------AH = 0-2E 适用 DOS 1.0 以上版本AH = 2F-57 适用 DOS 2.0 以上版本AH ...
- x01.os.14: 时间都去哪儿了
时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...
- x01.os.13: 文件系统
停了两天电,忽然得空闲.找来破吉他,已然不成弦. 丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...
- x01.os.9: 进程切换
进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...
- x01.os.7: 傻子一样的等
傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...
- Lua判断OS并添加cpath
Lua判断OS并添加cpath(金庆的专栏)Lua初始化时需要根据OS来设置package.cpath, 如果是Windows系统则添加 ?.dll, 否则添加 ?.so.不然加载错误后缀名的动态库会 ...
- HOOK大法实现不修改程序代码给程序添加功能
[文章标题]: HOOK大法实现不修改程序代码给程序添加功能[文章作者]: 0x18c0[软件名称]: Scylla[使用工具]: OD.Stub_PE.ResHacker[版权声明]: 本文原创于0 ...
- OpenStack IceHouse版cinder模块新添加功能
感谢朋友支持本博客.欢迎共同探讨交流.因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/gaoxingnengjisua ...
- x01.os.8: 加载内核
在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...
随机推荐
- spring入门(二)【加载properties文件】
在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...
- Spring 整合 Redis
http://blog.csdn.net/java2000_wl/article/details/8543203/ pom构建: <modelVersion>4.0.0</model ...
- 微信公众平台关于fakeid和openid的解析
今天在开发项目的时候遇到了个问题: 搞不清楚微信官方接口的fromusername(openid)和公众平台内每个粉丝所拥有的fakeid,于是在测试号中开始了对以上两项的研究,结果如下: 1.对 ...
- 本机jdbc连接报The user specified as a definer ('root'@'%') does not exist
昨晚一台测试服务器连接本机的mysql时,有些调用存储过程报"The user specified as a definer ('root'@'%') does not exist" ...
- 【转载】GUID vs INT Debate
I recently read a blog post on what was better using GUIDs or Integer values. This is been an age lo ...
- 阿里巴巴开源Weex 开发教程
Weex 是什么 Weex是阿里发布的一款用WEB方式开发原生app的开源产品 Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS.安卓.Yu ...
- 使用 HTML5 Canvas 绘制出惊艳的水滴效果
HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...
- 【CSS3】 CSS3:弹性盒子(Flex Box)
Flex布局是什么 如何指定一个容器为Flex布局 Flex的基本语法 display flex-direction justify-content align-items flew-wrap ali ...
- asp.net保存网上图片到服务器
本文讲述的是根据一个图片的url地址,保存图片到asp.net服务器端的实现方法. 可以先了解这篇文章http://keleyi.com/a/bjac/0899dpgi.htm,以更好的理解本文. 首 ...
- git 新建服务器的版本以及项目的用户
一, git客户端账号生成 1. git的客户端的公钥生成 ssh-keygen -t rsa -C "test@gmail.com" mac机器会在 /Users/用户/.ssh ...