Windows Live Messenger

Windows Live Messenger 可以算是现在微软所有软件产品中最傻逼但是还不得不用的楷模。

从微软的开发团队来说,我还没见过或者听说过技术糟糕的,那么Windows Live Messenger这样一个产品到底是怎么回事呢?

我不善于从微软获取一些八卦,咱们今天在这里暂时从这个糟糕透顶的软件的表现来分析一下:

  • 错误代码:很多人肯定见过Windows Live Messenger不能登录或者其他一些时候的错误代码,0x????????。OK,作为一个错误报告机制,你把这玩意直接丢给用户是什么意思?而且这些白痴一样的代码既不是Win32 error code,也不是COM,是完全自定义的,从常用的工具中,比如GetLastError,或者ErrorLookUp中根本就找不到,即便上网查找也经常遇到含糊不清的各种猜测(显然,你我都不知道,老外当然也不知道)。
  • 群:Windows Live Messenger的群功能我就不说了,这个实在是没法说了,简直就是一滩屎。
  • 功能衰退:我很好奇,作为微软的产品竟然有功能衰退。比如以前版本点在联系人的头像上可以看他space的更新,但是现在没有了。
  • 不兼容:Windows 7 发布这眼瞅着一年了,Windows Live Messenger不能缩到系统托盘到底你妈逼还改不改啊???

OK,OK,不继续列举了,从Windows Live Messenger已知的技术文献来看,架构和协议设计的都还好,那到底是怎么出来现在这样一个傻逼的产品?我的推测是:

  1. 扯皮。从各种现有的八卦来看,微软这样的软件恐龙企业在很多年前已经在研发环节有了大规模的扯皮现象(vista开始菜单),Windows Live Messenger有很多功能是和比如space集成的,那必然有扯皮。
  2. 产品定义混乱。简单的说就是产品经理也不知道要做什么,或者说不知道竞争对手在做什么,亦或是他根本就没用过Windows Live Messenger。
发表在 计算机与 Internet | 留下评论

Project Seasons Work In Progress 2

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

20100807334

然后是组装:

DSC01924

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

DSC01926

发表在 硬件DIY | 留下评论

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

发表在 硬件DIY | 留下评论

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

发表在 硬件DIY | 留下评论

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

发表在 硬件DIY | 一条评论

做点有意义的事情吧

刚删了个msn联系人,原因无他,只因此人经常在live space更新一些政治,宗教,修真的玩意。

我无法理解一个受过高等教育的程序员为什么会热衷于这些东西,练轮子了?被传销了?喝三鹿了?

发表在 胡言乱语 | 留下评论

Project Chameleon Work In Progress 13

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

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

DSC01908

发表在 硬件DIY | 留下评论