New ARM devkit

Well, yesterday I got a new ARM devkit: a STM32103RB dev board with Segger JLink.

20101010346 

Thanks Segger, they provide signed Win7 x64 driver for this product.

Project Seasons Work In Progress 3

这次是把GameCube Digital AV 输出接口做了修改和焊接连线,因为我实在买不到这个插接件了。

DSC01927 DSC01930

Project Seasons Work In Progress 2

采购了一些必要的元器件:

20100807334

然后是组装:

DSC01924

这是今后的样子,现在FPGA的引脚还没有真正连接上:

DSC01926

Project Seasons Work In Progress 1

由于 GameCube 色差线的昂贵和稀少,所以并不是所有的玩家都见过 GameCube 真正的显示效果。尽管我有幸拥有一根 GameCube 色差线,但是我依然计划自制一根。在这里要说明的是,目前全世界尚没有人公开报道过自制成功的先例,我也不能保证能制作成功。

除了最后期的 GameCube 之外,所有的 GameCube  都有 Digital AV Output,这个接口能同时输出数字形式的视频和音频信号,希望获得数字音频信号的朋友可以借助搜索引擎查找到制作的详细方法(图纸如下,制作应该不会有什么难度, by Oscar)。

ngcspdif

下面是一些我整理的资料,以及初步的设计:

任天堂专利:《External interfaces for a 3D graphics system》,这篇专利文档详细介绍了 GameCube 数字输出接口的时序。

GameCube Digital AV Output Pinout

gamecubedigital1

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同步也输出。

ladder

All about Project Chameleon

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.

ui

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:

http://player.youku.com/player.php/sid/XMTkxMTA1MzYw/v.swf

Project Chameleon Work In Progress 14

第一阶段正式完成

历史:

GameCube 使用了定制的光驱接口和通信协议,在任天堂的专利上,称为主板上的P9接口,名字叫做DI。
DI不仅仅是一个光驱接口,只要是使用DI协议的硬件,都可以安装在上面,比如任天堂自己的测试机就是把硬盘通过FPGA接到DI上,街机Triforce也是使用FPGA将GDROM驱动器和存储板接到DI上。

换句话说,我们完全可以自己做一个硬件,替换掉GC的光驱,比如用USB,比如用SD卡,比如用硬盘。国外已经有很多爱好者自己做了这样的设备。但是国内还没有这样的先例。

DSC01919

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之类的。

Project Chameleon Work In Progress 13

焊接完成后,首要的工作就是再检查一遍是否存在短路,以及记录映射关系到文档……这么多线弄乱了可就很糟糕了。

其次的工作就是将FPGA板子和SY2200连接起来:

DSC01908

Project Chameleon Work In Progress 12

为了调试fx2lp固件,现在准备暂时不用FPGA板子上面的fx2lp而将FPGA和SY2200连在一起。

焊这个竟然用了两个多小时……电烙铁温度不足……

DSC01905

DSC01906

另外周末买到了透明的热缩管和杜邦线,效果很好

Untitled

Project Chameleon Work In Progress 11

有了FPGA的JTAG设备很好,但是调试ezusb fx2lp固件仍然是一个非常头疼非常费力的工作,至少56pin的fx2lp不支持在线仿真。这意味着什么呢?当FPGA,fx2lp还有pc上的驱动和UI四个玩意接在一起的时候,变成了一种完全不可调试的混沌设备。对于fx2lp这种设备来说,如果不借助于调试,想要开发支持中断或者GPIF的固件,是一个颇有挑战性的工作。

好在原谅同学把他的SY2200A寄给了我。这东西最大的特点就是,和Cypress官方的开发版硬件id一样,也就是插上就会自动进入调试模式,可以在Keil里面调试了。

sy2200a keildebug

投影键盘原理

projectkb说真的不知道该放在哪个分类,只好放在DIY里面了……说不定哪天我心血来潮真的会去做一个。

很久以前就知道这玩意了,一直觉得很科幻,而且极其昂贵,这玩意究竟是怎么工作的呢?研究了一下,其实很简单……

一共是四个组成部分:

1 投影模块。不要被激光投射出的键盘迷惑了,这玩意只是给人看的,完全不参与识别。

2 红外投射模块。红外投射模块贴着桌面发射平行于桌面的红外光,当手指敲在桌面上也就遮挡了光,也就是手指被红外光照亮了。

3 摄像模块。当手指被照亮,摄像头就看到了,如果只用一个摄像头那么识别还是挺麻烦的(特别是多个手指同时敲击),但是……我们可以用两个摄像头啊。识别处理太容易了。

4 接口模块。通过USB HID或者蓝牙,把自己报告成一个键盘,一个鼠标还是一个随便什么玩意。

画一张图,更容易理解上面的啰嗦文字:

pkb