Well, yesterday I got a new ARM devkit: a STM32103RB dev board with Segger JLink.
Thanks Segger, they provide signed Win7 x64 driver for this product.
由于 GameCube 色差线的昂贵和稀少,所以并不是所有的玩家都见过 GameCube 真正的显示效果。尽管我有幸拥有一根 GameCube 色差线,但是我依然计划自制一根。在这里要说明的是,目前全世界尚没有人公开报道过自制成功的先例,我也不能保证能制作成功。
除了最后期的 GameCube 之外,所有的 GameCube 都有 Digital AV Output,这个接口能同时输出数字形式的视频和音频信号,希望获得数字音频信号的朋友可以借助搜索引擎查找到制作的详细方法(图纸如下,制作应该不会有什么难度, by Oscar)。
下面是一些我整理的资料,以及初步的设计:
任天堂专利:《External interfaces for a 3D graphics system》,这篇专利文档详细介绍了 GameCube 数字输出接口的时序。
GameCube Digital AV Output Pinout:
Pin | Signal | Pin | Signal |
1 | DetectCable (pull high 1.8V) | 2 | 54MHz Clock |
3 | ClkSelect | 4 | GND |
5 | +12V | 6 | 27MHz Clock |
7 | VDATA0 | 8 | GND |
9 | VDATA1 | 10 | VDATA2 |
11 | GND | 12 | VDATA3 |
13 | VDATA4 | 14 | GND |
15 | VDATA5 | 16 | VDATA6 |
17 | +3.3V | 18 | VDATA7 |
19 | LRCK (Audio) | 20 | GND |
21 | Data (Audio) | 22 | BCLK (Audio) |
Video is sent as 4:2:2 YCrCb component. <Y><Cr><Y><Cb><Y><Cr><Y><Cb>
Y is set to 0 during blanking intervals, and Cr/Cb packets are used to transmit sync and flag information.
Bit | Flag | Description | Options |
0 | I | Interlaced Flag | 0 = Interlaced, 1 = Non-Interlaced |
1 | M | Screen Mode Flag | 0 = NTSC, 1 = PAL |
2 | K | Color Burst Blanking Flag | 0 = Color Burst Should be Blanked Out |
3 | B | Color Burst Flag | 0 = Indicates location of Color Burst |
4 | H | Horizontal Sync | 0 = Horizontal Sync Active |
5 | V | Vertical Sync | 0 = Verical Sync Active |
6 | F | Field | 0 = Odd Field, 1 = Even Field |
7 | C | Composite Sync | 0 = Composite Sync Active |
目前的设想是,使用xilinx Spartan3s400 FPGA 作为和 GameCube 的接口,外接梯形电阻网络来构成DAC(购买高速视频DAC还是挺麻烦的,暂时用梯形电阻网络)。FPGA根据信号时序进行锁存,YPbPr三路信号同时输出给DAC,HV同步也输出。
Today, I’ll write some text about Project Chameleon.
Project Chameleon is NOT SO complex in my opinion, see the picture followed (PC part is not in this picture):
The GameCube DVD drive port is P9 on mainboard, the P9 connected to a xilinx Spartan3s400 FPGA board, we can see the board is on the top of GameCube.
A xilinx platform cable usb connected to FPGA board’s JTAG port.
At the right side is a SY2200A ez-usb DK. the chip is Cypress 68013A ez-usb, this board connected to FPGA borad too and a RS232 debug cable to pc.
These mess of hardwares work like this: GameCube send dvd read command (DI command) via P9, FPGA simulate the DVD drive, and a FIFO in FPGA keeps the DI command. PC read DI command vis usb, the ez-usb, read DI command FIFO in fact.
so PC now get the Di command, parse the command, and write data back to ez-usb then to FPGA and finally to P9.
above is the PC server. the main problem is Cypress doesn’t supply the win7 x64 signed driver, so I write a UMDF driver myself.
Here is Chameleon running Metroid Prime:
第一阶段正式完成
历史:
GameCube 使用了定制的光驱接口和通信协议,在任天堂的专利上,称为主板上的P9接口,名字叫做DI。
DI不仅仅是一个光驱接口,只要是使用DI协议的硬件,都可以安装在上面,比如任天堂自己的测试机就是把硬盘通过FPGA接到DI上,街机Triforce也是使用FPGA将GDROM驱动器和存储板接到DI上。
换句话说,我们完全可以自己做一个硬件,替换掉GC的光驱,比如用USB,比如用SD卡,比如用硬盘。国外已经有很多爱好者自己做了这样的设备。但是国内还没有这样的先例。
2007年底,我看到crazynation公开的GC DVD模拟器,我很有兴趣的想仿做一个。于是我开始了这个计划,本以为几个月就能完成,结果直到今天才算是完成。
硬件上主要有两部分组成,一片xilinx Spartan3 FPGA 负责DI协议模拟转换,一片Cypress ez-usb fx2lp负责USB2.0接口通信。
GC本体发出的光盘读取指令经过FPGA的协议转化,通过usb传输给pc,然后pc将游戏机所请求的iso数据又通过usb传送给FPGA,进一步交给GC。
在制作过程中遇到了各种未曾遇到的问题,比如驱动,Cypress没有提供win7 x64驱动,写传统的WDM驱动我又搞不到数字签名,这个卡了我很长时间,
今年年初我啃了半个月WDF UMDF文档,写了个UMDF驱动这才算搞定。
又比如VHDL,因为我是做软件的,之前从没接触过FPGA,也是硬啃了一个星期,设计修改了很多次。
最后非常谢谢支持我的朋友们,孤高の英雄,寄给我了一台GC,录像上这台就是,没有安装直读,但是在光驱模拟器的强大仿真下,GC已经认为自己读取到了z盘。
还有原谅我还活着,他把自己的一片上海思跃Sy2200A 开发板寄给了我,如果没有这个,这个计划恐怕2012年也完不成了。
实际运行录像:
http://v.youku.com/v_show/id_XMTkwNjkyMTk2.html
http://player.youku.com/player.php/sid/XMTkwNjkyMTk2/v.swf
第二阶段做可能就是优化速度了,现在loading非常慢。
未来的计划可能还包括wii的光驱模拟,以及自制GC数字输出,可能会是DVI之类的。
说真的不知道该放在哪个分类,只好放在DIY里面了……说不定哪天我心血来潮真的会去做一个。
很久以前就知道这玩意了,一直觉得很科幻,而且极其昂贵,这玩意究竟是怎么工作的呢?研究了一下,其实很简单……
一共是四个组成部分:
1 投影模块。不要被激光投射出的键盘迷惑了,这玩意只是给人看的,完全不参与识别。
2 红外投射模块。红外投射模块贴着桌面发射平行于桌面的红外光,当手指敲在桌面上也就遮挡了光,也就是手指被红外光照亮了。
3 摄像模块。当手指被照亮,摄像头就看到了,如果只用一个摄像头那么识别还是挺麻烦的(特别是多个手指同时敲击),但是……我们可以用两个摄像头啊。识别处理太容易了。
4 接口模块。通过USB HID或者蓝牙,把自己报告成一个键盘,一个鼠标还是一个随便什么玩意。
画一张图,更容易理解上面的啰嗦文字: