让普通FC的PPU输出原生的RGBS信号甚至是HDMI信号?FC可是四十年前的产物,那个时候还没HDMI呢,我读书少,你别骗我@_@。现在甚至有人用一颗FPGA芯片模拟整个FC,然后在主板上弄一堆FC用到的芯片就宣称这就是原生输出糊弄人,其实起作用的只有那个FPGA,其他的都是摆设根本用不到,现在咸鱼上的骗子太多了,我才没那么容易上当呢,哈哈哈!
上面的疑惑,来源于真实的玩家的对话,我想不只是一个人的疑惑,很多怀旧玩家都有类似的疑惑。到底是骗局还是真的有什么黑科技?下面我们就来探讨一下这个话题。
认为FC的PPU没法输出RGBS信号、甚至HDMI信号的无非就是PPU的管脚上没有相关的信号,FC的PPU太老了,那个年代只能输出CVBS(AV)信号。这么想无可厚非,那么抱着追本思源的心态继续思考,AV信号哪来的?FC是任天堂设计生产的,FC用的CPU和PPU是理光生产的,然后早在上个世纪八十年代任天堂和理光就联合申请了一份专利《T.V. game system having reduced memory needs》,专利编号:US4824106,从这个专利我们可以看到PPU内部的AV信号是从哪来的,下面这张图摘取自该专利文件:

通过上图可以发现PPU的21脚出来的视频数据和PPU的14~17脚有关系,详细的可以去看专利文件,我这里直接说结论:PPU的21脚的视频信号可以通过14~17脚生成。想知道怎么生成首选得搞清楚EXT0~3输出的是什么数据。通过查看专利文件可知EXT0~3输出的正是调色盘的索引,因为FC的机能有限,无法直接用现代计算机常用的RGB值来表示颜色,就引入了调色盘的概念,相信大部分玩家或多或少听说过这个概念,下面是标准的NTSC调色盘:

所谓调色盘就是把64种颜色挨个编上号,0表示灰色,1表示蓝色,2表示深蓝色.....FC的图像绘制是从屏幕的左上角从上到下、从左到右一个一个像素点渲染的,EXT0~3这4个管脚输出的正是渲染屏幕时每个像素点在上面这张调色盘的编号,再通过同步信号即可精确计算屏幕上的每个扫描点在调色盘上的编号。比如行扫描scanline=1,周期扫描cycle=1,表示屏幕的第一个像素点,此时如果EXT0~3输出的值是02就表示屏幕的第一个像素显示调色盘上第02号颜色,查看调色盘得知是蓝色,那么屏幕的第一个像素点就显示蓝色,以类类推,就可以完成整帧的绘制工作。
再回到"FC的PPU的21脚的AV信号哪来的"这个问题上是不是已经有了答案?其实PPU的21脚出来的AV信号就是根据EXT0~3的值、调色盘还有同步信号生成的。如果我们能拿到EXT0~3、同步信号、调色盘这三样东西,就可以根据不同的视频接口编码成任意的视频格式,S-Video、RGBS、VGA、HDMI通通不在话下,无非就是换个编码规则而已。
通过上面的介绍不难看出,FC的PPU是真的能输出原生的各种格式的信号,除了默认的AV信号之外,输出其他信号只缺一个对应的编码器,只要我们实现对应的编码器就可以输出任意格式的原生视频信号。
本人研发的LavaFC已经根据上面的原理实现了让FC输出原生的S-Video、RGBS、HDMI信号,想知道如何实现接着往下看:

0.MIC29150:美国微芯生产的LDO型电压转换芯片,可以稳定输出5V电压,最大输出电流1.5A,相较于开关型的电源芯片或者
USB接口电源拥有更强的抗干扰能力和更好的稳定性,缺点就是价格昂贵、发热。
1.RP2A03:FC/NES游戏机的CPU。
2.RP2C02:FC/NES游戏机的PPU。
3.74LS139:FC/NES游戏机的译码器。
4.6264:FC/NES游戏机的CPU内存。
5.6264:FC/NES游戏机的PPU内存。
6.74LS373:FC/NES游戏机的PPU地址锁存器。
7.74HC368:FC/NES游戏机的反向缓冲器。
8.74HC368:FC/NES游戏机的反向缓冲器。
9.21.47727Mhz有源晶振:等同于FC/NES游戏机的晶振电路,有源晶振更稳定,时钟信号质量更好。
10.PGL12G-6CLPG144:紫光同创生产的FPGA芯片,用途:
(1).监听与修改FC的CPU与PPU通信的数据,激活PPU的主从模式让PPU从ext0-3这4个引脚输出原生图像的数字信号;
(2).将ext0-3输出的原生图像重新编码成低解RGB888信号;
(3).将ext0-3输出的原生图像重新编码成HDMI信号。
11.BH7240:视频编码器,输入RGB888数字信号,可以同时输出RGBS、S-Video、CVBS(AV)三路模拟信号。
12.TLV3502:4.5ns高速反相比较器,用于分离消隐、ext4信号。
13.SGM8051:视频放大器。
14.LMV7219M5X:7ns高速反相比较器,用于分离同步信号。
15.PCM1808:可以将模拟音频信号采样成数字音频信号,然后通过I2S协议进入到FPGA内部合并到HDMI的音频当中。
16.12.288Mhz晶振:给PCM1808提供时钟,相较于使用FPGA的PLL分频出来的时钟,外挂时钟拥有更好的时钟质量。
17.27Mhz:FPGA的主时钟,HDMI的像素时钟就是以该时钟为时钟源然后PLL出来的。
18.W25Q64:用于存储FPGA的固件还有用户保存的配置数据。
19.TPS7A7001:LDO类型的可编程压降芯片,搭配不同的电阻可以输出不同的电压,相较于廉价的AMS1117拥有更好的性能,
此处输出电压为3.3V。
20.TPS7A7001:LDO类型的可编程压降芯片,搭配不同的电阻可以输出不同的电压,相较于廉价的AMS1117拥有更好的性能,
此处输出电压为1.1V。
21.SN74LVC541APW:电平转换芯片,FC系统使用5V电平,FPGA系统使用3.3V电平,不加电平转换强行把FPGA链接到FC的
CPU等5V器件上虽然也能运行但是稳定性、卡带兼容性、器件寿命都会大打折扣。
22.SN74LVC4245APWR:电平转换芯片,用途同上。
23.SN74LVC541APW:同上。
24.SN74LVC4245APWR:同上。
25.DB307:整流桥,实现电源不分正负极输出。
26.TDA1308:飞利浦出的音频运放芯片。
27.AZ1045-04F.R7G:HDMI接口防静电保护芯片。
28.AZ1045-04F.R7G:同上。
由上图可以看出,LavaFC拥有完整的原装FC游戏机结构,相当于原装FC游戏机+RGB套件+HDMI套件的集大成者。
下面是完整的原理图:


上面的疑惑,来源于真实的玩家的对话,我想不只是一个人的疑惑,很多怀旧玩家都有类似的疑惑。到底是骗局还是真的有什么黑科技?下面我们就来探讨一下这个话题。
认为FC的PPU没法输出RGBS信号、甚至HDMI信号的无非就是PPU的管脚上没有相关的信号,FC的PPU太老了,那个年代只能输出CVBS(AV)信号。这么想无可厚非,那么抱着追本思源的心态继续思考,AV信号哪来的?FC是任天堂设计生产的,FC用的CPU和PPU是理光生产的,然后早在上个世纪八十年代任天堂和理光就联合申请了一份专利《T.V. game system having reduced memory needs》,专利编号:US4824106,从这个专利我们可以看到PPU内部的AV信号是从哪来的,下面这张图摘取自该专利文件:

通过上图可以发现PPU的21脚出来的视频数据和PPU的14~17脚有关系,详细的可以去看专利文件,我这里直接说结论:PPU的21脚的视频信号可以通过14~17脚生成。想知道怎么生成首选得搞清楚EXT0~3输出的是什么数据。通过查看专利文件可知EXT0~3输出的正是调色盘的索引,因为FC的机能有限,无法直接用现代计算机常用的RGB值来表示颜色,就引入了调色盘的概念,相信大部分玩家或多或少听说过这个概念,下面是标准的NTSC调色盘:

所谓调色盘就是把64种颜色挨个编上号,0表示灰色,1表示蓝色,2表示深蓝色.....FC的图像绘制是从屏幕的左上角从上到下、从左到右一个一个像素点渲染的,EXT0~3这4个管脚输出的正是渲染屏幕时每个像素点在上面这张调色盘的编号,再通过同步信号即可精确计算屏幕上的每个扫描点在调色盘上的编号。比如行扫描scanline=1,周期扫描cycle=1,表示屏幕的第一个像素点,此时如果EXT0~3输出的值是02就表示屏幕的第一个像素显示调色盘上第02号颜色,查看调色盘得知是蓝色,那么屏幕的第一个像素点就显示蓝色,以类类推,就可以完成整帧的绘制工作。
再回到"FC的PPU的21脚的AV信号哪来的"这个问题上是不是已经有了答案?其实PPU的21脚出来的AV信号就是根据EXT0~3的值、调色盘还有同步信号生成的。如果我们能拿到EXT0~3、同步信号、调色盘这三样东西,就可以根据不同的视频接口编码成任意的视频格式,S-Video、RGBS、VGA、HDMI通通不在话下,无非就是换个编码规则而已。
通过上面的介绍不难看出,FC的PPU是真的能输出原生的各种格式的信号,除了默认的AV信号之外,输出其他信号只缺一个对应的编码器,只要我们实现对应的编码器就可以输出任意格式的原生视频信号。
本人研发的LavaFC已经根据上面的原理实现了让FC输出原生的S-Video、RGBS、HDMI信号,想知道如何实现接着往下看:

0.MIC29150:美国微芯生产的LDO型电压转换芯片,可以稳定输出5V电压,最大输出电流1.5A,相较于开关型的电源芯片或者
USB接口电源拥有更强的抗干扰能力和更好的稳定性,缺点就是价格昂贵、发热。
1.RP2A03:FC/NES游戏机的CPU。
2.RP2C02:FC/NES游戏机的PPU。
3.74LS139:FC/NES游戏机的译码器。
4.6264:FC/NES游戏机的CPU内存。
5.6264:FC/NES游戏机的PPU内存。
6.74LS373:FC/NES游戏机的PPU地址锁存器。
7.74HC368:FC/NES游戏机的反向缓冲器。
8.74HC368:FC/NES游戏机的反向缓冲器。
9.21.47727Mhz有源晶振:等同于FC/NES游戏机的晶振电路,有源晶振更稳定,时钟信号质量更好。
10.PGL12G-6CLPG144:紫光同创生产的FPGA芯片,用途:
(1).监听与修改FC的CPU与PPU通信的数据,激活PPU的主从模式让PPU从ext0-3这4个引脚输出原生图像的数字信号;
(2).将ext0-3输出的原生图像重新编码成低解RGB888信号;
(3).将ext0-3输出的原生图像重新编码成HDMI信号。
11.BH7240:视频编码器,输入RGB888数字信号,可以同时输出RGBS、S-Video、CVBS(AV)三路模拟信号。
12.TLV3502:4.5ns高速反相比较器,用于分离消隐、ext4信号。
13.SGM8051:视频放大器。
14.LMV7219M5X:7ns高速反相比较器,用于分离同步信号。
15.PCM1808:可以将模拟音频信号采样成数字音频信号,然后通过I2S协议进入到FPGA内部合并到HDMI的音频当中。
16.12.288Mhz晶振:给PCM1808提供时钟,相较于使用FPGA的PLL分频出来的时钟,外挂时钟拥有更好的时钟质量。
17.27Mhz:FPGA的主时钟,HDMI的像素时钟就是以该时钟为时钟源然后PLL出来的。
18.W25Q64:用于存储FPGA的固件还有用户保存的配置数据。
19.TPS7A7001:LDO类型的可编程压降芯片,搭配不同的电阻可以输出不同的电压,相较于廉价的AMS1117拥有更好的性能,
此处输出电压为3.3V。
20.TPS7A7001:LDO类型的可编程压降芯片,搭配不同的电阻可以输出不同的电压,相较于廉价的AMS1117拥有更好的性能,
此处输出电压为1.1V。
21.SN74LVC541APW:电平转换芯片,FC系统使用5V电平,FPGA系统使用3.3V电平,不加电平转换强行把FPGA链接到FC的
CPU等5V器件上虽然也能运行但是稳定性、卡带兼容性、器件寿命都会大打折扣。
22.SN74LVC4245APWR:电平转换芯片,用途同上。
23.SN74LVC541APW:同上。
24.SN74LVC4245APWR:同上。
25.DB307:整流桥,实现电源不分正负极输出。
26.TDA1308:飞利浦出的音频运放芯片。
27.AZ1045-04F.R7G:HDMI接口防静电保护芯片。
28.AZ1045-04F.R7G:同上。
由上图可以看出,LavaFC拥有完整的原装FC游戏机结构,相当于原装FC游戏机+RGB套件+HDMI套件的集大成者。
下面是完整的原理图:

