从 Sony PLAYSTATION 3 构建 Linux 实验设备

http://tech.ddvip.com   2008年06月11日    社区交流

内容摘要:在本系列文章中,Lewin Edwards 将向您展示如何从游戏控制台转到音频带宽频谱分析器和函数生成器。首先,他将介绍本项目的设计内容,然后在您开始着手在 Cell/B.E. 处理器上生成并分析信号时详细介绍用户接口的实现。

  对于这个系统来说,优点是您永远都不需要担心更新屏幕内容时在一帧中间导致动画产生 “撕裂” 效应。

  ps3fb 还提供了一些 ioctl 命令,让您可以按照一种单缓冲区模式来显示自己的屏幕,此时您可以停止周期性的中断,并在应用程序认为合适的时机显式地将新的视频数据写入 GPU(当然,这依然要通过系统管理程序)。X 就使用了这种模式。

  我刚才提到的那个讨厌的 bug 是指标准模式信息查询 ioctl 并不能正常工作,至少对于电视分辨率来说是如此。正如前面介绍的一样,NTSC 和 PAL 分辨率都会报告 576x384 像素的虚拟/物理大小。这甚至都不正确;NTSC 屏幕的实际宽度是 720 像素,而高度(由映射和日益累积变大的 RAM 边缘决定)实际上大约是 480 行,不过 framebuffer 控制台看起来在 400 行就停止了,480 行距离整个扫描区域的屏幕底部还有一段距离,至少对于默认的视频配置来说是如此。

  因此,如果您简单地编译并运行通用 framebuffer 代码,它并不能显式地理解 PS3 会这样中断。我的解决方案是强制代码相信自己是在一个 720x400 像素的屏幕上运行的,这看起来似乎可以很好地工作。如果您正在使用 NTSC 电视机之外的其他设备作为输出设备,可能会希望进行这种修改;不过尽管代码能够正常操作,但是可能不会产生一个清晰的显示输出。

  PS3 输出的另外一点非常怪异的事情是整个扫描区域的颜色是上一次扫描线的最后一个像素的输出颜色。关于这一点,我认为是 RAMDAC 对于每个 DMA 循环都有一个像素插销,当光栅超过 framebuffer 区域时,这个插销就会闭合,直到垂直空白间隔出现位置,此时会重新加载一个黑色的像素值。另外一种可能是这种现象是由于系统管理软件中的某种竞争所导致的。

来源:ibm    作者:Lewin Edwards    责编:豆豆技术应用

正在加载评论...