自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 mesa解析3

层次结构://-------------------libegl.so-----------------------------------dri2_egl_context//-------------------r600_dri.so-------------------------------__DRIcontextdri_context        &&        

2015-10-14 11:22:41 1261

原创 mesa解析2 显卡驱动软件架构

最底层是radeon_drm_winsys,功能:通过libdrm,和内核drm交互:申请显存bo,显存map到内存,查询bo是否忙(正在被显卡使用)pipe_screen,接口类,功能:查询显卡特性参数。另外,注册了资源构造函数。资源指显存资源,如bo,texturer600_common_screen,继承自pipe_screen,实现了pipe_screen定

2015-09-18 19:07:32 4488

原创 mesa解析1 线程本地存储 libGL.so原理

TLS机制:openGL维护了一个状态机,或者叫上下文;gl开头的api函数,如glUniform4fv,会修改这个上下文系统中,如果有多个基于openGL的程序在运行,则每个程序有一个独立的上下文。每个程序调用gl api都作用于自己的上下文。但是,libGL.so是一个共享库,每个基于openGL的程序都将其映射到自己的地址空间,共享库的代码段在系统运行期间是不变的。要同一份二进制

2015-07-23 17:11:47 2748

原创 JPCSP源码解读16:HLE与模块装载过程

之前说过,jpcsp中使用了HLE技术,用本地码实现了系统软件的功能。HLE,代表的单词是high level emulation,高层仿真。也就是说,模拟的了上层的操作系统,而不仅仅是下层的mips架构的机器。下层的机器提供的服务是执行二进制指令,而上层的操作系统封装出了更多功能,这些功能强大而实用。为了说清楚jpcsp中hle的实现机制,需要从psp中程序的加载与运行说起。////

2012-04-16 15:48:42 1182

原创 JPCSP源码解读15:动态二进制翻译3(翻译引擎最终章)

今天,我们从CodeInstruction. compile(CompilerContextcontext, MethodVisitor mv)这个函数说起。其中,CompilerContext是编译时刻的现场,比如当前正在编译哪个函数,当前正在编译哪条指令,等等这样的信息。在编译某些指令时,需要知道这些信息。举例说,我们正在处理一条分支指令,那么需要从编译时刻上下文查询当前正在编译的code

2012-04-11 17:20:17 1014

原创 JPCSP源码解读14:动态二进制翻译2

JPCSP源码解读14:动态二进制翻译2IExecutable    上一篇中提到,我们现在有CodeInstruction,代表单条指令,以及其两个子类,分别代表无分支基本块和本地码序列。另外,有class writer,class visitor,用于书写java字节码,生成java类。在jpcsp中,定义了一个接口,IExecutable,也就是内部可执行类。对于每一个mip

2012-04-05 23:50:17 1240 1

原创 jpcsp源码解读13:动态二进制翻译1

注意,本文不区分 编译和翻译。在本文中,他们表示同一个意思。首先回顾一下,之前已经说明了,我们有cpu状态,就是cpu中的各个寄存器,还有内存,以及更改这些寄存器的接口函数。另外,我们有译码器(Decoder),有指令分类(Instructions.java中各个Instruction的子类)。译码器通过索引数组的方式,可以确定一条指令属于哪个指令分类,也就是确定指令的功能。在解释执行的情

2012-03-31 20:40:40 1137

原创 jpcsp源码解读12:本地码管理器与Compiler.xml

jpcsp这个模拟器的优化手段实在让人汗颜。之前说过,他把系统调用功能全部用本地码实现了,也就是在软件需要的时候,调用java语言的实现,而不是跳转到内存中相应位置去解释执行,或者对系统调用代码做动态二进制翻译后去执行翻译结果。NativeCodeManager,本地码管理器,这个更暴力,把psp上软件用到的库函数都给用本地码替换掉了。这些需要被替换的代码保存在源码根目录下的Com

2012-03-29 16:13:20 1044

原创 jpcsp源码解读11:近期笔记

最近阅读代码主要牵涉到两个问题,一个是动态二进制翻译,一个是进程管理。两个问题都很棘手,代码量大,复杂度高。今天主要备份一下关键笔记。/////////////////////////////////////////////////////////////////////////启动运行流程:用户点击 运行 按钮RunButtonActionPerformedRunEmu

2012-03-28 21:39:17 591

原创 jpcsp源码解读10:指令的执行

这次要说的是处理器类:    public class Processor主要的成员变量:    public CpuState cpu = new CpuState();       public static final jpcsp.Memory memory = jpcsp.Memory.getInstance();    public ParameterReader

2012-03-23 17:11:41 605

原创 jpcsp源码解读9:指令的抽象描述与指令的译码

本文尝试说明jpcsp中译码器单元的实现方式。/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////首先是对指令的一个抽象描述,Instruction类:    public st

2012-03-23 15:06:11 674

原创 jpcsp源码解读8:cpu状态

从通用寄存器开始说起。通用寄存器用一个类public class GprState来表示,其中的成员变量只有一个:public final int[] gpr = new int[32];也就是用32个整形数模拟32个32位通用寄存器。这个类提供了操作这些寄存器的接口,例子如:public void reset()把32个寄存器都复位清零public final voi

2012-03-22 16:13:18 945

原创 jpcsp源码解读7:HLE

作为一个模拟器,也就是一个虚拟机,所作的事情就是解释执行运行于该机器上的软件代码,包括系统软件和用户态的应用软件。基于这个想法,系统软件应该是被加载到内存中的某些位置,当应用软件使用系统调用时,就跳转到系统函数的入口。在这个过程中,模拟器所做的事前后没有本质区别,就是取指令并解析执行,没有必要区分系统软件还是应用软件。但是为了提高运行速度,jpcsp实现了psp上运行的系统软件的功能,如

2012-03-21 17:28:57 728

原创 jpcsp源码解读6:PSF文件

当你运行了模拟器,通过模拟器菜单选择并加载一个umd镜像,模拟器就用这个umd镜像实例化一个UmdIsoReader(见上一篇,源码解读5)。通过这个UmdIsoReader,从光盘提取的第一个文件是:PSP_GAME/param.sfo这个文件在模拟器源码中用类PSF表示。文件中存放的是一些关于游戏的参数信息,这些信息被组织成表格。这些信息包括:对系统固件的版本要求,游戏的标题(名字

2012-03-20 21:28:50 863

原创 jpcsp源码解读5:umd光盘镜像(.iso)

这次的状况稍显复杂。首先说一下umd光盘镜像文件的内部组织方式。注意,这些内容全部是从源码解读而来,而不是来自关于这种文件格式的标准文档。///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

2012-03-19 16:15:09 2248 1

原创 jpcsp源码解读之四:Clock类

时钟类的行为:当用户请求时,就返回当前时间与初始时间的差值。注意,这是一个模拟器,该类就是模拟目标机器psp的时钟。该类的用户,就是运行于psp机器上的软件(应该是系统软件才会直接从硬件提取时钟信息),或者机器中的其他硬件(比如前一篇提到的Screen类)。返回给用户的时间,应该是机器自加电复位之后,已经运行了的时间。但是模拟器是提供了暂停功能的,暂停期间的时间,不应该被计入模拟器加电复位

2012-03-19 11:36:37 644

原创 jpcsp源码解读之三:Screen类

该类的成员变量只有4个:屏幕的长,宽,一个守护线程DisableScreenSaverThread,还有一个lastPowerTick。注意他们都是static的。lastPowerTick可以理解为上一次屏幕收到电脉冲的时间,收到脉冲就是不要进入屏保。该类中提供了一个函数hleKernelPowerTick用于更新这个变量,以防止屏幕进入屏保。////////////////////

2012-03-19 11:33:53 782

原创 jpcsp源码解读之二:main函数与jpcsp的初始化流程

虽然这个软件是用java语言编写,面向对象,可是总要有个开始的入口,这里关心的就是,main函数在哪里。似乎java中也可以没有main函数,也可能是我的错误认识。暂且不管,jpcsp中是有main函数的。位置是:源包-->jpcsp-->MainGUI.java,在这个文件中搜索main即可找到。public static void main(String args[])//////

2012-03-19 11:30:36 1060

原创 jpcsp源码解读之一:源码的获取与编译,以及psp详尽硬件信息文档

是我心血来潮的想法,要解读一下psp模拟器的源码,并添加详尽的中文注释。这个博客则成为文档。本文面向java语言零基础的程序员,因为我本人的java基础就是零。水平所限,疏漏错误之处欢迎指正。也欢迎更多的人参与进来,一起做这件我觉得比较有趣的事。jpcsp是用java语言编写,源码统计工具显示代码量20万行左右。///////////////////////////////////

2012-03-19 11:28:40 2492 7

jpcsp源码 中文注释版

在读源码过程中,加入了大量中文注释。内含源码解读日志word版,更新到第16篇,介绍了jpcsp的架构和实现细节。 目前进度是,理清了软件启动流程,解释执行引擎,二进制翻译引擎,以及可执行文件的加载过程。 后续计划是,搞清楚psp的固件系统(操作系统)的各个方面(进程管理,I/O,文件系统等),以及图形机制。

2012-04-16

B树索引算法 VC实现

算法框架出自一本书,书名记不得了。对其进行了实现和调试,用100+规模的数据测试通过。内附文档。

2010-01-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除