这是一个汇编+C语言开发的操作系统
本项目为个人开发os的初次尝试,跟随川合秀实所提供资料进行开发。
当前运行后会读取磁盘10个柱面并执行dickos.sys加载boot引导程序包。
设定16色调色板
初始化GDT & IDT
初始化可编程中断控制器PIC
调用函数boxFill8使用指针操作VRAM显示桌面GUI
在桌面打印DICKOS并显示鼠标坐标
内存分配采取分段式分配方式,以4KB为单位,分配失败时使用鸵鸟算法处理 😆
在桌面打印内存大小与可用内存大小
初始化键盘控制电路并激活鼠标,在鼠标与键盘产生中断时打印相应数据,完成部分键盘中断码识别,当前可用输入英文大小写字母、数字、英文符号,并完成CapsLock NumLock SrollLock与对应键盘led灯状态的改变与识别。
使用图层处理重叠问题
鼠标移动实现,鼠标点击时将改变processA窗口的位置。
实现多进程,采用时间片轮转+多级反馈进行进程调度,初始由主进程完成各功能与设备的初始化,并创建控制台进程,主进程处理键盘鼠标与中断。
鼠标点击或者按下tab可将当前切换当前活动窗口,此时普通字符的中断数据将由主进程发送给目标进程以实现在其他窗口接收键盘数据。
点击窗口关闭按钮可以关闭对应窗口与进程
完成对fat16文件系统的解析。
控制台指令采用windows风格,当前以实现指令如下
mem 检查内存容量与当前内存可用空间
cls 清屏
dir 显示当前目录所有文件信息
type filename 显示指定文件名的文件内容(完成换行符制表表的显示)
start applicationName 从新的控制台开启目标程序
ncst applicationName 不打开新的控制台启动目标程序
applicationName 可用直接使用应用程序名来启动应用程序(自动检测是否为应用程序,开辟应用程序专有内存并创建新的进程以运行应用程序运行结束返回控制台)
exit 退出控制台
可以按下shift + F1以强行终止当前活动应用程序的运行
可以按下shift + F2以打开新的控制台
当前可运行应用程序如下
helloC 使用C语言编写,在逐个控制台打印hello,用于测试系统调用API中打印单个字符
helloCS 使用C语言编写,在控制台输出字符串hello,world用于测试系统调用API中打印字符串
winHelo 使用C语言编写,创建新的hello窗口,以测试测试系统调用API绘制窗口功能
winHelo2 使用C语言编写,创建新的hello窗口并在窗口中绘制黄色矩形并显示hello world,以测试测试系统调用API在图层中绘制矩形和在图层中显示字符功能
winHelo2 使用C语言编写,使用malloc申请内存空间绘制窗口显示hello world
star1 使用C语言编写,创建新的窗口并打印星星
star2 使用C语言编写,创建新的窗口并打印星星(不刷新窗口)
stars 使用C语言编写,创建新的窗口并随机打印星空
walk 使用C语言编写,接收键盘数据可以通过方向键控制目标移动
prime 使用C语言编写,1000以内的素数
prime2 使用C语言编写,10000以内的素数,malloc申请内存空间
prime2 使用C语言编写,10000以内的素数,_alloc自动申请内存空间
line 使用C语言编写,打印数条直线
color 使用C语言编写,打印6色阶调色板
color2 使用C语言编写,打印21色阶(伪)调色板
deepDown 启动蜂鸣器 由高音至低音鸣笛
noodle 使用C语言编写,泡沫伴侣,就是个简单的计时程序
完成一般异常中断处理与栈异常中断处理以阻止尝试恶意破坏dickOS的应用程序,防御测试已完成,测试使用应用程序源码crack1.c、crack2.nas、crack3.nas、crack4.nas、crack5.nas、crack6.nas依然存在于otherApp文件夹下。测试死循环,数据访问异常等bug的程序bug1.c、bug2.c、bug3.c于部分老旧程序也依旧存在于otherApp文件夹下,但其生成的应用程序已经在操作系统中移除,若想测试请手动修改Makefile中的文件生成规则,将其编译为应用程序后复制到fat16文件系统根目录便可使用控制台运行(注:Qemu有bug若想测试防御功能需要真机运行)
make # 生成一个包含操作系统内核及全部应用程序的磁盘映像
make run # make后启动qemu模拟器语学操作系统
make install # 生成必要文件并将其安装至a驱动器
make full # 将操作系统内核、api库与应用程序make后生成磁盘映像
make run_full # make full 后 make run
make install_full # make full 后 make install
make run_os # make操作系统内核后 make run(只对操作系统内核修改时执行该命令)
make clean # 该指令已移除,不执行任何操作
make src_only # 删除临时文件并删除dickos.img映像
make clean_full # 对操作系统内核、api库和应用程序全部执行make clean清除所有临时文件
make src_only_full # 对操作系统内核、api库和应用程序全部执行make src_only清除所有临时文件与编译产物
make refresh # make full 后 make clean_full0x00000000 ~ 0x000fffff : 启动中使用 之后变为空(1MB) 部分被VRAM与BIOS使用,并不全空
0x00100000 ~ 0x00267fff : 保存软盘内容(1440KB)
0x00268000 ~ 0x0026f7ff : 空(30KB)
0x0026f800 ~ 0x0026ffff : IDT(2KB)
0x00270000 ~ 0x0027ffff : GDT(64KB)
0x00280000 ~ 0x002fffff : bootpack.hrb(512KB)
0x00300000 ~ 0x003fffff : 栈及其他(1MB)
0x00400000 ~ : 空
- 川合秀实
- RWFD
- 平木敬太郎
- Kiyoto
川合堂许可协议-01 ver.1.0
2000.12.30 H.Kawai (川合秀实)
0.概要
通俗地说:“这是自由软件,使用前使用后都无须支付任何费用,可以自由使用,也可以
复制、修改,以及用于商业目的,但是作者对软件的bug以及因此所造成的损失不负任何责
任。”
为了保护软件使用者以及软件修改者、参考者的利益,即便作者将来为该软件中所使用的
算法申请专利,也保证不会向使用者收取授权费用。
1.目的
适用于本协议的软件,旨在为公众带来利益,以及为软件技术的进步做出贡献。
2.宗旨
本协议并不代表作者放弃著作权(仅放弃独家复制发布的权利),使用者可以自由复制并
再次发布本软件的一部分甚至全部内容。使用时无须支付任何费用,对本软件的解析、修改
也无须支付任何费用。
适用于本协议的软件,可以无条件地用作商业目的,甚至可以将软件直接有偿出售。
对于以适用于本协议的软件的一部分或全部内容为基础,在此之上所开发的软件(下称“
派生物”),可以赋予任何种类的许可协议。即,派生物的作者可以禁止对派生物进行复制,
也可以只允许派生物以有偿形式发布。派生物的著作权属于该派生物的生成者,适用于本协
议的软件作者不会对其派生物主张著作权。
在派生物的文档中,没有义务对原始软件的作者进行介绍,但这句话,理所当然地,不意
味着禁止这一行为。
在发布派生物时,没有义务取得原始软件作者的同意,但这句话,理所当然地,不意味着
禁止这一行为。
作者不对软件的质量作出任何保证,因此,由于使用本软件所造成的损害,或者没有达到
所期望的结果,作者不负任何责任。
对于适用于本协议的软件中所使用的技术,除了事先取得作者授权的人以外,禁止其他人
对其申请专利。但如果附加了新的技术并生成了派生物,允许对于追加的部分申请专利。作
者在将来有可能对软件中的技术申请专利,但保证不会向派生物以及软件的使用收取授权费
用。本保证不仅适用于申请专利之前所生成的派生物,也适用于专利取得后所生成的派生物。
将解析结果汇总并申请专利,需要事先取得作者的同意,但对于申请专利以外的行为,没
有任何限制。
3.补充
基本上,作者十分欢迎复制本软件。如果要表示对作者的感谢,请将本软件推荐给更多的
人,并复制给他们使用。作者希望有更多的人使用本软件,因此对于复制的行为非常支持。
除此之外,如果可以将使用后的感想发给作者,作者一定会感到更加高兴。
对于本协议所授权的软件,仅修改著作权信息并再次发布的行为,本协议并没有禁止,而
是作为派生物来处理。这并不是一个漏洞。因此,如果你认为有必要仅修改著作权信息并再
次发布本软件,是完全可以这样做的。
除了修复bug、增加新功能等修改行为以外,对于为代码添加注释增加易读性、对文档进行
补充等,不会反映在编译产物及运行结果上的修改也同样欢迎。如果生成了这样的派生物,
欢迎和作者联系(但这并不是义务)。
如果你有任何疑问,或者对于制作派生物方面感到缺少某些信息,可以向作者提问。但是,
受作者精力所限可能无法一一进行回复,请大家谅解。对于协议本身漏洞的指摘,请联系作
者或川合堂。
也许,对于本协议所授权的软件中所使用的技术,禁止未经作者允许申请专利这一点,和
日本的专利法是向抵触的(希望大家提出自己的见解)。对此,最初提出本协议的川合秀实
的见解如下。
指定专利法的背景,是因为如果发明者为了保护自己发明所带来的利益,而拒绝将发明的
详情公开,会阻碍科学技术的进步,因此在法律上对于其所公开的内容,在一定时间内给予
独家使用的保护,这是专利法的精神所在。在本协议中,作者并没有故意隐藏发明的详细内
容,因此即便禁止对其申请专利我认为也不违背专利法的精神。相反,不理解本协议精神的
人,如果申请了专利并对原创的软件及派生物收取授权费用,这种担心反倒阻碍了科学技术
的进步。因此,本协议的目的是事先消除这种担心,我认为和专利法是不抵触的。
当然,最稳妥的做法是,作者对原创软件中可以被认作发明的全部内容申请并取得专利,
事前防止其他人来取得相关的专利,但是这对于作者来说负担很大。申请专利的负担和是否
公开软件内容之间必须要有所取舍的话,可能有些人会放弃公开软件内容。这并不是专利法
精神所期待的,也不符合我们的目的(参见“1.目的”)。
此外,当发明的详细内容由于专利法的形式限制没有记述并明确的,由作者以外的人在未
经许可的情况下将其解析并明确的行为,在本协议中是允许的。对于这部分内容,可以无偿
公开,也可以有偿出售。
不过,对于协议所授权的软件中的所有技术,并不能保证在使用时完全避免支付授权费用
的可能性。如果在发布的时间点仍然有效的专利技术,在软件中被使用的话,该专利的所有
者可以要求支付授权费用。本协议所保证的不收取专利授权费用,是针对软件内被认为是新
发明的那一部分技术。
如果需要将本协议适用于自己开发的软件,在事前事后均无须经过作者同意,可任意使用。
如果有任何不方便之处,可以对协议文本进行修改。如需修改协议文本,为了避免歧义,请
同时修改协议的名称。
川合堂URL http://www.imasy.org/~mone/kawaido/ 川合秀实URL http://www.imasy.org/~kawai