一种实现X86 VBIOS在MIPS架构上运行的方法技术

技术编号:5241276 阅读:327 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了了一种实现X86VBIOS在MIPS架构上成功运行的方法。包含以下步骤:vga_bios_init(void)函数读取video-bios,送入X86模拟器;X86模拟器模拟显存地址0xa0000;X86模拟器模拟显卡bios地址0xc0000;X86模拟器模拟X86CPU寄存器及指令;X86模拟器模拟INT10中断向量;X86模拟器模拟sys bios。本发明专利技术很好的实现了龙芯刀片所要求的显示需求。

【技术实现步骤摘要】

本专利技术提供了一种VBIOS移植的方法,具体提供了一种实现X86 VBIOS在 MIPS架构上运行的方法。
技术介绍
在x86的传统Bios下,处理器工作在实模式,最大寻址空间为1MB,典型的内 存布局如图1所示。其中video-bios是一段二进制代码,是各显卡厂商提供的用于初始化 显示卡控制器的代码,存放在显卡的ROM里,被BIOS读到OxCOOOO开始的地方。需要 注意的是这段代码是x86指令的二进制代码,同时是工作在实模式下的。而我们要采 用的是龙芯处理器或者其它的非X86处理器,显卡厂商也不会提供基于mips的二进制, 这样就对开发带来了困难。在χ86的传统bios下,利用上面的video-bios正确初始化显卡并利用intlO中断 设置了显卡的工作模式后,程序只要将显示的字符或像素值送入固定的VRAM区即可。这段VRAM区域如下图2所示。每个部分的解释如下· 0xB0000-0XB8000 单色字符模式放入的是1字节的字符ascii码CRT索引寄存器端口 0x3b4,CRT数据寄存器端口 0x3b5· 0xB8000-0XC0000 彩色字符模式放入的是1字节的字符ascii码+1字节的颜色属性这时CRT索引寄存器端口 0X3d4,CRT数据寄存器端口 0x3d5· OxAOOOO-OXBOOOO 图形模式放入的最小单位是像素,不再是字符通过上面的介绍我们知道,真正意义上的显卡驱动是由video-bios去实现的,由 它来初始化显卡。绝大部分显卡通过执行存储在VGA ROM里的x86 二进制代码来进行显卡初始 化。在非x86平台上,处理器不能直接运行该代码,显卡一般不能被正确初始化而导致 不可用。
技术实现思路
本专利技术的目的在于克服现有技术的缺点和不足而提供一种采用x86模拟器去模 拟传统VBIOS需要的运行环境,并解释x86 二进制代码。一种实现X86VBIOS在MIPS架构上运行的方法,在PMON基础上扩展了 X86 模拟器模拟传统VGA BIOS的运行环境,并解释X86代码,包含以下步骤A、vga_bios_init (void)函数读取 video-bios,送入 X86 模拟器;B、X86模拟器模拟显存地址OxaOOOO ;C、X86模拟器模拟显卡bios地址OxcOOOO ;D、X86模拟器模拟X86 CPU寄存器及指令;Ε、X86模拟器模拟INTlO中断向量;F、X86 模拟器模拟 sysbios。本专利技术的一种优选方式在于所述步骤A中的读取过程有两种方式,一种是直 接从VGA的rom区域读取二进制代码,另一种是事先将video-bios 二进制文件做成数组写死在程序里。本专利技术的最优选方式在于所述步骤A的读取过程如下Al、申请内存并初始化,若申请失败则报错;A2、从显卡的rom中读取或从静态数组中读取video_bios ;A3、判断读取格式是否正确;A4、设置显示模式。本专利技术具有如下有益效果1.本专利技术的核心是采用一种X86模拟器来实现传统VBIOS需要完成的工作。2.本专利技术可以很好的解决传统VBIOS不公开的弊端。3、本专利技术可以实现灵活的设计,开发成本也能得到降低。4.本专利技术很好的实现了龙芯刀片所要求的显示需求。附图说明图1是典型的内存布局图。图2是VRAM区域图。图3是启动时BIOS调用模拟器的步骤。具体实施方式龙芯BIOS在PMON的基础上扩展了 VGA BIOS模拟器,模拟显卡BIOS运行环境,达到正确初始化显卡的目的。vga_bios_init ()函数就是读取video-bios,并运行x86模拟器来解释执行的。既可以从vga的rom区域里读取二进制代码,也可以事先将video-bios 二进制文 件做成数组写死在程序里。代码的大致流程如下 int vga_bios_init (void) {…pint = (xf86IntlOInfoPtr) mailoc (sizeof(xf86IntlOInfoRec));memset(pint, 0, sizeof(xf86IntlOInfoRec));/*建立intlO运行环境Vif( ! xf86IntlOExecSetup (pint))goto errorO ;…/*可以直接从显卡的ROM里面读*/romaddress = _pci_conf_read (pdev- > pa.pa_tag, 0x30);romaddress& =( 1);/*enable rom address decode*/_pci_conf_write (pdev-> pa.pa_tag,0x30, romaddress | 1);#if defined (VESAFB){extern unsigned char vgarom[];unsigned char *tmp ;/*也可以将video-bios 二进制文件做成静态数组Vromaddress = (unsigned long) vgarom ;}#endifprintk (“ Rom base addr % lx\n “,romaddress);magic = readb (romaddress);magic = readb (romaddress+1);/*判断格式是否正确*/if(magic 二 = 0x55 && magic = = Oxaa) {printk (“ VGAbiosfoundVn");…}/*设置为彩色字符模式VprintfC setting text mode..An");pint- > BIOSseg = V_BIOS > > 4 ;pint- > num = 0x10 ;pint- > ax = 0x0003 ;xiS6ExecX86intlO (pint);}VGA BIOS模拟包括以下几个部分显存地址OxaOOOO模拟,显卡BIOS地址 OxcOOOO模拟,X86CPU寄存器及指令模拟,中断向量主要是INT10模拟和sys BIOS模拟等。权利要求1.一种实现X86VBIOS在MIPS架构上运行的方法,其特征在于在PMON基础上 扩展了 X86模拟器模拟传统VGA BIOS的运行环境,并解释X86代码,包含以下步骤A、vga_bios_init(void)函数读取video-bios,送入 X86 模拟器;B、X86模拟器模拟显存地址OxaOOOO;C、X86模拟器模拟显卡bios地址OxcOOOO;D、X86模拟器模拟X86CPU寄存器及指令; Ε、X86模拟器模拟INTlO中断向量;F、X86模拟器模拟sysbios。2.如权利要求1所述的一种实现X86VBIOS在MIPS架构上运行的方法,其特征在 于所述步骤A中的读取过程有两种方式,一种是直接从VGA Wrom区域读取二进制代 码,另一种是事先将video-bios 二进制文件做成数组写死在程序里。3.权利要求1所述的一种实现X86VBIOS在MIPS架构上运行的方法,其特征在于 所述步骤A的读取过程如下Al、申请内存并初始化,若申请失败则报错;A2、从显卡的rom中读取或从静态数组中读取video-bios ;A3、判本文档来自技高网
...

【技术保护点】
一种实现X86VBIOS在MIPS架构上运行的方法,其特征在于:在PMON基础上扩展了X86模拟器模拟传统VGA BIOS的运行环境,并解释X86代码,包含以下步骤:A、vga_bios_init(void)函数读取video-bios,送入X86模拟器;B、X86模拟器模拟显存地址0xa0000;C、X86模拟器模拟显卡bios地址0xc0000;D、X86模拟器模拟X86 CPU寄存器及指令;E、X86模拟器模拟INT10中断向量;F、X86模拟器模拟sys bios。

【技术特征摘要】

【专利技术属性】
技术研发人员:李丰旺郑臣明李永成尹宁宁吕民强邵宗有刘新春方信我
申请(专利权)人:天津曙光计算机产业有限公司
类型:发明
国别省市:12[中国|天津]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1