童年修复系列-SNES芯片组介绍及FPGA实现

超级任天堂1990年11月21日在日本开始发售,北美于1991年8月13日发售,欧洲于1992年4月11日发售。

超级任天堂,简称超任,是任天堂公司开发的家用游戏机。英文名称Super Famicom,简写SFC;在欧美洲销售的产品名为Super Nintendo Entertainment System,简写SNES。超级任天堂是任天堂红白机的后继机种。由于芯片组的复杂,中国鲜有“复制品”出现。

所以今天就来聊一聊SNES的芯片组及其特殊性,同时带来FPGA实现SNES的开源方案。

SNES和现今的PC芯片组很相似-CPU+显卡+声卡组成,同时SNES为了处理复杂的运算增加了一颗DSP芯片,下面就按照组成一个一个介绍。

下图是整机的框图:

整机的总线互联如下:

CPU总线使用的是从6502继承过来的类ISA总线。

CPU

SNES 的 CPU (中央处理单元)是基于 65c816 的处理器-5A22《一块带给无数人年少欢乐的CPU,别说你没用过它在00-中的硬件寄存器);用于慢速访问(即和)和用于非常慢的访问(即4000-在00 到 $3F 中的硬件寄存器 )。这种变速模式来源于6502有一个叫做“ZERO-PAGE”的寻址模式,但是进行了进一步扩展。

它是一个带有 24 位总线的 16 位处理器(16 位数据指针和 8 位组指针)。支持16MB的寻址空间。它有一个计算器和两个寄存器,可以在8位或16位模式之间切换。

然而,它具有许多寻址模式。它使用可变宽度指令。单个指令的宽度可以根据某些寄存器的长度而变化。

PPU

SNES有两个特制的图像处理器,主要运行于256×224的分辨率,最高支持512x448的分辨率,最大发色数32768色,最大同屏幕显示256色,最大活动块数为128个,并支持缩放、回旋、马赛克、半透明、窗口、光栅等特效。

声优芯片

辅助CPU采用一颗SPC700(索尼推出),是一个8位的CPU核心,很接近6502,但有一些不同的寻址模式和复数/分割指令,与一个定制的数字声音信号处理器共同集成在一个模块中。SPC700和65c816通过一个4路双向通道(8位I/O端口)通讯。SPC700有自己独立的64K内存,可以用来存储声音采样或者从65c816下载的程序。CPU有一个内建的64K ROM开机码,用来通过65c816从游戏ROM里加载更多的复杂程序或者采样数据。这个ROM可以被关闭,以存储开机码的64K RAM来代替它的工作。

声音数字信号处理器(Sound DSP)只能播放压缩的声音采样。这种使用一固定比率的压缩算法,可以将16个16位声音采样压缩成8字节加一字节标题的形式。一个采样的最小单位是一个区块,区块的标题字节包含一个移位和一个过滤值(算法解压信息),再加上一个最后区块标记和一个循环标记。循环标记仅仅在最后区块标记存在时才使用。

在同一时间内,最多允许有8个声音通道同时播放声音采样,每个声音通道都有单独的左右声道音量和频率的调节。每个通道都可以定义一个硬件音量调节,并各自设置其回声效果,不过复合的回声效果必须受制于一个8路的FIR声音分流器。一个通道的声音输出可以用来调整在数字序列上的下一个声音通道的频率。DSP也有一个白噪音源,可以播放一个替代采样数据的声音通道。所有的8个音源连同回声数据最后都混合到一个双通道的主音量控制下。DSP有3个间隔定事器,头两个运行在8KHz下,最后一个是64KHz。游戏通常只使用三个中的一个来输出一个恒定的音乐回放频率。

顺便一提SNES的声音处理芯片SPC700是PS之父久多良木负责设计的,所以说索尼大法好可不是白叫的。

声优芯片和整机总线如下图所示:

扩展芯片

数字信号处理器

SNES 的 S-DSP (数字信号处理器)用于向扬声器输出数据。产生的声音以 32 KHz 运行。S-DSP 使用比特率降低将所需的大小减少到原始大小的 9/16。S-DSP 是「自带鬼畜」,你输入一个PCM格式的音源进去,比如把F♂A乐器输入进去,然后往sound chip的寄存器里写入你要的包络,音调之类的,sound chip上的协处理器就会帮你处理输出,其实就和做音乐用的合成器播放软音源差不多。

DSP-1

DSP-1是一种主要用于数学和伪 3D 投影的芯片。这通常使用model 7。这是其中最常用的芯片。它也适用于 2D 旋转等。

SA-1

SA-1是 CPU 的更快版本,但在访问方面存在一些差异。它带有“I-RAM”和“BW-RAM”。它通常以大约 11 MHz 的速度运行,当访问与 CPU 相同的东西时,它的速度为 5 MHz。

GSU

GSU是著名的 SuperFX 芯片的技术名称。GSU 可用于绘制颜色。它在很多方面都比 SNES 的 CPU 更强大。它是一个伪RISC。它可用于绘制许多事物,例如精灵和对象的旋转或制作伪 3D 效果。

CX4是 Capcom 使用的芯片,它在三角和图形方面非常强大。它可以绘制线条、波浪和 3D 线框,旋转精灵并进行三角计算等。应用到的游戏包括:洛克人X2,洛克人X3 等卡普空街机移植作品。

SDD-1

数据解压芯片,解压使用 ASIC 无算压缩算法压制的数据,它活跃在 SFC 主 CPU 和 ROM之间,负责透明实时数据解压工作,针对一些资源太大的游戏,为了节省卡带空间成本而引入了该芯片,使用游戏包括:星之海洋,街霸 Alpha 2 等。

SNES FPGA实现

硬件

还是GameGirl硬件

开源地址:

https://github.com/suisuisi/gamegirl/tree/master/Hardware

FPGA程序

上面的CPU和SPC700都已经介绍过了。

chip文件夹下还有上面介绍的芯片,组成芯片组:

开源地址:

https://github.com/suisuisi/gamegirl/tree/master/CoreCPU/SNES

使用方法:

将编译产生的.rbf文件拷贝到SD卡的根目录:

产生的二进制文件在下面路径:

https://github.com/suisuisi/gamegirl/tree/master/Binaries/cores/snes

然后将游戏同步放到SD卡里,通过OSD就可以选择游戏,注意游戏启动及中间过渡阶段会有黑屏,所以需要等待。。。

视频

时间仓促还没来得及拍视频,后续补上。

NOW

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名 主标题 内容简单介绍 是否有中文版
UG476 7 Series FPGAs GTX/GTH  Transceivers GTX和GTH介绍,PCIe、serdes等学习必备
UG471 7 Series FPGAs SelectIO Resources 描述 7 系列 FPGA 中可用的 SelectIO资源。
UG1114 PetaLinux Tools Documentaton PetaLinux 工具文档 参考指南 是,V2019.2
UG949 UltraFAST 设计方法指南(适用于 Vivado  Design Suite) 赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标 是,V2018.1
IP手册 pg057 FIFO Generator FIFO生成器IP使用手册
pg104 Complex Multiplier 复数乘法器IP使用手册
pg122 RAM-Based Shift Register  移位寄存器IP使用手册

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

简谈:如何学习FPGA

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建收音机(一)

AD936x+ZYNQ搭建OpenWIFI

无招胜有招-Vivado非工程模式下的详细设计

面试中经常会遇到的FPGA基本概念,你会几个?

推荐一些可以获取免费的国外的原版书籍(电子版)网站

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)

Verilog数字系统基础设计-CR

Verilog数字系统基础设计-奇偶校验

建立和保持时间及时序简单理解

(Xilinx)FPGA中LVDS差分高速传输的实现

Xilinx Multiboot实例演示

高速串行通信常用的编码方式-8b/10b编码/解码
Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

再说System Verilog 与 Verilog 的关系

图书推荐|一本图像/视频处理的强大工具书

Verilog HDL-同步技术

再说System Verilog 与 Verilog 的关系

数模混合信号建模语言Verilog-AMS

Intel/Altera 系列FPGA简介

一块带给无数人年少欢乐的CPU,别说你没用过它

Verilog在编写第一行代码之前

【例说】Verilog HDL 编译器指令,你见过几个?

穿越时空的爱恋-Z80 CPU的前世今生

【Vivado】那些事儿-汇总篇

古老CPU启示录-晶体管之路

童年修复系列-SNES芯片组介绍及FPGA实现相关推荐

  1. 童年修复系列-PC Engine/TurboGrafx-16介绍及FPGA实现

    拯救童年系列-PC Engine/TurboGrafx-16介绍及FPGA实现 国内的很少有这款游戏机的体验,但是在日本这款游戏机是大受欢迎(曾在销量上打败任天堂的FC游戏机).下面就简单介绍一下这款 ...

  2. 拯救童年系列-GameBoy介绍及FPGA实现

    拯救童年系列-GameBoy介绍及FPGA实现 这个掌上游戏机应该不需要过多言语,大部分的80后.90后的青春记忆,记忆中是那个抱着Game Boy的漫长午后,那个躲在被子里打着手电筒玩Game Bo ...

  3. Intel 5 6 7 8系列芯片组介绍

    Intel 5 6 7 8系列芯片组介绍 Iknow.2015-11-05 22:40|知识编号:122257 操作步骤: [Inetl 5.6.7.8系列芯片组介绍] 芯片组是主板电路的核心.一定意 ...

  4. asp.net core 系列 19 EFCore介绍

    asp.net core 系列 19 EFCore介绍 原文:asp.net core 系列 19 EFCore介绍 一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2 ...

  5. 热修复系列——Android热修复技术进阶篇

    目录 1 前言 2 热修复技术 2.1 Dexposed 2.2 AndFix 2.3 QZone 2.4 Tinker 2.6 epic 2.7 YAHFA 2.8 FastHook 2.9 美团R ...

  6. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  7. 提炼游戏引擎系列:开篇介绍

    前言 大家好!本系列记录了从炸弹人游戏中提炼2D游戏引擎YEngine2D雏形的实战过程,您可以通过本系列了解到引擎提炼的思想.引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识.希望对您能有 ...

  8. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二--Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  9. WPF入门教程系列四——Dispatcher介绍

    WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...

  10. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:   1. 并行编程和多线程编程的区别. ...

最新文章

  1. github 慢_告别github 下载慢问题,让你的github下载速度起飞
  2. 计算机网络原理和OSI模型与TCP模型
  3. 小白教程:Visual Studio2017配置GitHub图文教程
  4. OkHttp使用介绍 和 使用进阶
  5. 声明式事务控制的实现
  6. 02.德国博士练习_01_cluster_install
  7. jsp将鼠标放到那显示信息
  8. Agrona的Threadsafe堆外缓冲区
  9. 查看是否安装显卡驱动,查看可以使用的驱动版本
  10. 智慧园区主要功能及典型案例分析
  11. idea 添加servlet依赖_详解如何使用IntelliJ IDEA新建一个Servlet项目
  12. 2 万字长文详解 10 大多线程面试题|原力计划
  13. PowerShell: 如何使用powershell处理Excel
  14. html网页自动提示框代码,多种网页弹出窗口代码
  15. 听音室-HIFI入门之10张公认的经典发烧碟
  16. ajax 发送 put 请求
  17. think in java学习笔记
  18. 港大火星实验室最新工作:用于精确实时3D SLAM的高效概率自适应体素地图
  19. IT 路,梦里思路长。
  20. Data Analysis - Day9 - Numpy Functions

热门文章

  1. 浅谈SQL注入防御手段
  2. CAD小型软件开发二
  3. linux下journalctl日志在哪,journalctl---系统日志
  4. Python3制作网易云音乐下载器
  5. CSI.SAP2000.v19.1.1 Win32_64 2CD通用有限元软件
  6. 日志查看工具 logviewer pro的使用
  7. 六、配置基于 IP 子网划分 VLAN 示例
  8. 几种直方图均衡方法汇总
  9. android webview 清空内容,Android WebView清空缓存
  10. QT界面美化与添加多个界面