2012-08-16 16:32 by Hundre, 203 visits, 网摘, 收藏, 编辑
摘要:这是一个资源集合贴,用来作为该系列的索引。系列首发地址 http://bbs.shuiyeliying.com/ 论坛,欢迎大家在园子里和论坛留下脚印今天开始决定写一些模拟器开发的文章,本人之前没有过任何模拟器相关的开发经验,学习了一个月的Silverlight.XNA开发,可谓是从零起步。可以预见在这过程中需要大量的学习,所以可以确定文章更新得将会非常慢,希望路过的朋友能多多指点,多提意见和建议。开始之前,先推荐一个博客,博客园的 深蓝的右手 http://www.cnblogs.com/alamiye010/ 感谢深蓝的右手的文章带我进入到游戏开发的领域1. WindowsPhone-Ga
阅读全文
2011-01-31 11:48 by Hundre, 4096 visits, 网摘, 收藏, 编辑
摘要:cosmos全称C# open source manage operation system,是一个使用C#语言基于.net framwark框架编写的开源操作系统,主页www.gocosmos.org。可从cosmos.codeplex.com获取最新的源代码。
阅读全文
2013-05-21 19:59 by Hundre, 12 visits, 网摘, 收藏, 编辑
摘要:距离上一篇文章的发布已经快一年了,在第一篇文章发布之后才发现原来一个模拟器真的不是一般的大,也可能和我的学艺不精有关,这期间花了大量的时间来学习,终于又决定继续写下去,不过还是一些基础的东西,希望被标题吸引过来的朋友不要太失望卡带头部: 在卡带中,内部信息位于0100-014F的这个地址区间中。它包含以下内容0100-0103-入口点 在显示完任天堂的LOGO后,内置的启动程序会跳到这个地址(100h),然后在从这里跳转到位于卡带内的实际程序。通常情况下,这个4字节的区域包含有一条JP 0150h指令,后面跟着一条NOP指令。但也并不总是如此0104—0133—任天堂LOGO这些字节定义了任天
阅读全文
2012-08-16 16:35 by Hundre, 496 visits, 网摘, 收藏, 编辑
摘要:首发地址 http://bbs.shuiyeliying.com/thread-66-1-1.html这是一篇转载的翻译,放在这里仅为了保持系列的完成性,也是一篇个人感觉比较好的模拟器编写入门文章原文地址:http://fms.komkon.org/EMUL8/HOWTO.html转载自:http://blog.csdn.net/xybsoft/article/details/5337278如何编写模拟器我在写这篇文章之前收到很多人的邮件,他们希望编写一个模拟器却不知从何下手。文章中提到的任何观点和建议都来自我个人,切勿将其当成绝对真理。我的文章主要讨论“解释型”模拟器,而不是“编译型”模拟器
阅读全文
2012-08-16 16:32 by Hundre, 203 visits, 网摘, 收藏, 编辑
摘要:这是一个资源集合贴,用来作为该系列的索引。系列首发地址 http://bbs.shuiyeliying.com/ 论坛,欢迎大家在园子里和论坛留下脚印今天开始决定写一些模拟器开发的文章,本人之前没有过任何模拟器相关的开发经验,学习了一个月的Silverlight.XNA开发,可谓是从零起步。可以预见在这过程中需要大量的学习,所以可以确定文章更新得将会非常慢,希望路过的朋友能多多指点,多提意见和建议。开始之前,先推荐一个博客,博客园的 深蓝的右手 http://www.cnblogs.com/alamiye010/ 感谢深蓝的右手的文章带我进入到游戏开发的领域1. WindowsPhone-Ga
阅读全文
2012-03-05 12:33 by Hundre, 1417 visits, 网摘, 收藏, 编辑
摘要:直接开始吧,在KenelTest文件夹下面添加一个自己的项目,这里我的项目是PCIDeviceEnumerator,列出当前自己机子上的PCI设备的VendorID和DeviceID以及设备类型
阅读全文
2012-01-16 08:22 by Hundre, 1306 visits, 网摘, 收藏, 编辑
摘要:访问PCI配置空间可通过两个访问寄存器,CONFIG_ADDRESS寄存器和CONFIG_DATA寄存器。这两个寄存器在PC中分别对应着CF8h和CFCh端口,并且是32位端口,即读写要用的32为IN和OUT汇编指令。当然Cosmos已经对汇编指令进行了封装,我们就不需要直接对汇编指令进行操作了,直接调用即可。
阅读全文
2011-09-28 17:50 by Hundre, 1765 visits, 网摘, 收藏, 编辑
摘要:启动RTL8139
发送0x00到config1(0x52)寄存器来设置LWAKE+LWPTN(这两个应该是针脚的名字)为高电平(to active high.)这一步是启动该设备的关键操作。
软复位
接下来我们应该做一次软复位来清理RX和TX缓冲区并设置所有东西回默认值。这一操作用来清除在通电启动时候仍然留在缓冲区或者寄存器中的垃圾。
发送0x01到Command寄存器(0x37)将会使RTL8139进入软复位。只要这个字节被发送过去,可以检查RST位来确认芯片是否完成复位。如果RST位为high(1),那么复位仍在进行中。
另:在Qemu模拟器中有个小小的bug,如果在执行软复位前检查command寄存器,你可能会发现RST是high(1)。这时,尽管忽略它继续进行初始化操作。
初始化接收缓冲区
这一部分,我们将设置一段芯片地址位置为接收缓存的开始地址。一种方法是,定义个缓存变量并把这个变量地址发送到PBSTART寄存器(0x30),如:
char rx_buffer[8192+16]; // declare the
阅读全文
2011-09-21 17:52 by Hundre, 505 visits, 网摘, 收藏, 编辑
摘要:既然COSMOS使用C#来写的,为什么我们需要一个如此底层的调试?我们觉得很多用户可能只需要用到C#调试器。尽管如此,汇编级调试器对工作在编译器上的用户或者在直接和硬件交互的调试中的用户来说是一个很大的帮助。
阅读全文
2011-08-11 03:18 by Hundre, 1045 visits, 网摘, 收藏, 编辑
摘要:介绍
这篇文章将展示在COSMOS中如何实现基于WINDOWS API调用和内部调用的.net代码。另外,也包含了如何使用COSMOS,汇编或者X#语言与硬件直接进行交互。
Cosmos是什么
Cosmos一个使用Visual Studio作为开发环境的操作系统开发工具(development kit)。尽管如此,任何基于.net的语言,包括VB.NET,Fortran,Delphi Prism,IronPython,F#等等都可以用来进行开发。Cosmos本省和内核运行都是使用C# 来写的,所以命名为Cosmos。而且,NOSMOS(.NET Open Source Managed Operating System)听起来太蠢了。
Cosmos不是传统意义上的操作系统,它更应该叫做操作系统工具(Operating System Kit) ,或者正如我所说的叫做“Operating System Legos”(不知如何翻译,嘿嘿)。Cosmos让您能像使用Visual Studio和C#创建应用程序一样创建操作系统。大部分用户可以在几分钟之内自己写和引导
阅读全文
2011-04-18 17:15 by Hundre, 2249 visits, 网摘, 收藏, 编辑
摘要:在各种库中,有一部分的库是封装了对底层硬件的操作的,例如在屏幕上输入字符,使用网卡发送数据包等。因为是直接对硬件进行操作,所以这一种类型的库的代码是和硬件相关的,这就是为什么我们会有x86的标准C程序库和arm的标准C程序库,两套不同的硬件体系,需要不同的库来完成对硬件的实际操作,每一套库中,都根据不同的硬件情况,按照硬件的规格定义好数据的排列方式(这就是为什么会有int,int16,int32,int64这么多蛋疼的数据类型的原因之一,因为编译器编译后有些数据必须占有足够长的位数以符合硬件产品的规格要求),以及根据硬件的功能提供出相应的函数,然后编译器编译时就能编译出符合硬件要求的格式的数据排列方式和操作这些数据的机器码。
阅读全文
2011-03-28 12:06 by Hundre, 2706 visits, 网摘, 收藏, 编辑
摘要:对于IBM-PC兼容机的硬件启动流程我目前理解是这样的:通电->BIOS初始化与自检->CPU初始化->加载硬盘的0磁道0柱面1扇区的内容进内存并开始执行这一部分的内容。到此,硬件的过程—注意是硬件--就走完了,剩下的就都交给0磁道0柱面1扇区的程序来执行,这里面的东西就是我们程序员要做的东西了。
这里如果没有操作系统的话,那么从0磁道0柱面1扇区开始执行的程序就是我们自己写的程序,但这样一次只能执行一个,很浪费硬件资源,如果要换别的程序的话还得重新启动一次硬件,所以我们希望这个首先执行的程序可以一直运行,然后再向这个程序发出命令,让这个程序来执行我们想要执行的程序,这样就可以不用重启硬件就能运行多个程序了,慢慢地这个我们对其发出命令让其运行别的程序的程序就变成了我们所谓的操作系统了。
阅读全文
2011-02-23 11:31 by Hundre, 2519 visits, 网摘, 收藏, 编辑
摘要:由于是纯C#的开发环境,因此IL2CPU责任重大,需要实现C#语言的各种特性,包括对象的初始化、多态、事件、委托等等,当然到cosmos-12304为止,这些特性还没有全部实现(后面的应该会一步一步的都实现,不过还没有看过后面的源代码,只是猜测而已)。除此之外,IL2CPU还负责处理对.net的运行库(这个运行库并不是.net framework,这个库是COSMOS自己实现的与.net framework类似但要小很多很多的一个库,以后再讲这一部分)
阅读全文
2011-02-03 08:40 by Hundre, 2770 visits, 网摘, 收藏, 编辑
摘要:编译过LINUX的朋友应该都熟悉Make文件吧,在这里面可以清楚的看到使用编译器把C源代码编译成二进制源代码的流程,中间干了什么都可以看得清清楚楚。但使用VS的朋友一般都是程序写好之后直接F5就运行了,后面做了什么我们根本不知道。对于COSMOS的源代码,VS只是帮我们编译成了IL的代码,这种代码无法在没有CLR环境中运行,所以VS还需要把IL代码编译为针对CPU的本地代码。这中间的流程都由MSBuild这个东西控制。对于MSBuild的介绍可以直接查看MSDN文档。总的来说这个东西的地位就相当于Make文件的地位吧,指导VS如何生成可以引导的二进制文件。
阅读全文
2011-01-31 11:48 by Hundre, 4096 visits, 网摘, 收藏, 编辑
摘要:cosmos全称C# open source manage operation system,是一个使用C#语言基于.net framwark框架编写的开源操作系统,主页www.gocosmos.org。可从cosmos.codeplex.com获取最新的源代码。
阅读全文
2010-11-23 20:09 by Hundre, 4838 visits, 网摘, 收藏, 编辑
摘要:流媒体文件格式在流媒体系统中占有重要地位,设计合理的文件格式是提高流媒体服务器工作效率最直接和最有效的办法。该文在剖析常用流媒体系统和文件格式的基础上,特别地对美国xiph.org基金会的开源流媒体工程Ogg文件格式子项目做了深入的分析,指出Ogg格式对媒体编码数据的存储读取和传输具有简洁性,Ogg格式的映射与逆映射与媒体编码数据具有相对独立性,能够有效提高流媒体服务器的工作效率。
阅读全文
2010-11-20 21:56 by Hundre, 17227 visits, 网摘, 收藏, 编辑
摘要:1)RTP是实时数据传输协议。它提供时间标志,序列号以及其它能够保证在实时数据传输时处理时间的方法;它是依靠RVSP保证服务质量标准的。
2)RTCP是RTP的控制部分,是用来保证服务质量和成员管理的。
3)RTSP是开始和指引流媒体数据从流媒体服务器。它又可叫做"网上录像机控制协议".它是提供远程的控制,具体的数据传输是交给RTP的。
4)RSVP是Internet上的资源预订协议,使用RSVP预留一部分网络资源(即带宽),能在一定程度上为流媒体的传输提供QoS。就像TCP的重发和滑动窗口等都是
阅读全文