会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑零配件 / 协处理器 / 用于信息处理系统的图形处理器及外部存储系统

用于信息处理系统的图形处理器及外部存储系统

阅读:385发布:2021-02-27

IPRDB可以提供用于信息处理系统的图形处理器及外部存储系统专利检索,专利查询,专利分析的服务。并且本发明公开了一种全编程图形微处理器,它配置在可与主信息处理系统连接的可拆卸外部存储单元中。在示范性实施例中所描述的电视游戏系统包括主电视游戏系统和内置有图形微处理器的插入式电视游戏卡。该游戏卡还包括ROM和RAM。图形协处理器与配置于游戏卡上的三总线结构结合使用。采用该总线结构的图形处理器可执行来自程序ROM,外部RAM或其本身内部的超高速缓存RAM的程序。全用户可编程图形协处理器具有可有效地实现有关3-D图形的算术运算的指令集,例如包括由专用硬件执行以便将单个像素标绘在主电视游戏系统的字符映像显示中的指令,这按程序员的观点来看,就是:虽然主系统是基于符号的,但通过允许对单个像素编址,建立了“虚拟的”位映像。图形协处理器与主处理器交互作用使得任何时候图形协处理器的16个通用寄存器都可由主处理器存取。,下面是用于信息处理系统的图形处理器及外部存储系统专利的具体信息内容。

1.一种信息处理系统(19,20)中的外部存储系统(19),该信息 处理系统具有执行至少部分地存储在外部存储系统(19)中的外部存 储器(10)中的电视图形程序的主处理单元(20),所述外部存储系统 其特征在于:至少有一接插件(1)用来将所述外部存储系统与所述主处理系 统相连;

一外部存储器(10),用于存储由所述主处理单元执行的所述电 视图形程序的第一组程序指令和用于存储所述电视图形程序的第二 组指令;

一图形处理器(2)与所述外部存储器(10)相连,并在使用时经 所述至少一接插件(1)与所述主处理单元(20)相连,以执行所述第 二组指令。

2.如权利要求1所述的外部存储系统,其特征在于所述主处理 单元(20)是电视游戏系统的主处理单元而所述外部存储系统是配置 在电视游戏卡(19)中的。

3.如权利要求1所述的外部存储系统,其特征在于还包括:与 所述外部存储器(10)和所述图形处理器(2)相连用来传送地址,数 据和控制信息的外部存储器总线;随机存取存储器单元(6,8);与所 述随机存取存储器单元(6,8)和所述图形处理器(2)相连用来传送地 址,数据和控制信息的随机存取存储器单元总线;用于在所述图形 处理器和所述主处理单元之间传送地址,数据和控制信息的主处理 单元总线。

4.如权利要求3所述的外部存储系统,其特征在于所述图形处 理器包括对所述外部存储器总线和所述随机存取存储器单元总线中 的至少一个存取进行的装置(131)。

5.如权利要求1所述的外部存储系统,其特征在于所述图形处 理器(2)包括接收从所述主处理单元来的地址信息的装置(HA, 133)以便识别存有将由图形处理器执行的指令的外部存储器位置。

6.如权利要求1所述的外部存储系统,其特征在于所述图形处 理器包括:执行存储在所述外部存储器中的所述第二组指令中至少 某些指令的算术逻辑单元(50)和执行存储在所述外部存储器中的至 少一个有关显示的指令的标绘电路(52)。

7.如权利要求6所述的外部存储系统,其特征在于还包括第一 数据源端总线(X),第二数据源端总线(Y)和一数据目的端总线 (Z),每个所述总线均与所述算术逻辑单元(50)和所述标绘电路 (52)相连。

8.如权利要求1所述的外部存储系统,其特征在于所述图形处 理器还包括超高速缓存控制器(68)和与所述超高速缓存控制器(68) 相连的超高速缓冲存储器(94),所述图形处理器包括执行存储在所 述超高速缓冲存储器中指令的装置(95,60,50)。

9.如权利要求1所述的外部存储系统,其特征在于所述图形处 理器包括多个寄存器(76),所述图形处理器还包括响应对所述多个 寄存器(76)中规定的寄存器(R14)的存取而自动地起动对外部存储 器读取操作的装置(104)。

10.如权利要求1所述的外部存储系统,其特征在于所述外部 存储器是程序只读存储器(ROM)并进而包括一与所述图形处理器 相连的随机存取存储器(RAM)。

11.如权利要求1所述的外部存储系统,其特征在于所述图形 处理器和所述主处理单元可并行地运行执行指令。

12.如权利要求1所述的外部存储系统,其特征在于所述图形 处理器包括将执行的各指令组成流水线的装置(62,60)。

13.如权利要求1所述的外部存储系统,其特征在于所述图形 处理器包括对所述第二组指令译码的装置(60),和在相关指令译码 前预先处理操作代码的先行装置(551)。

14.如权利要求1所述的外部存储系统,其特征在于所述信息 处理系统(20)包括显示目标的显示器(36),而所述第二组指令包括 使所述目标旋转的指令,所述图形处理器包括执行用于旋转所述目 标的所述指令的装置。

15.一种与电视类显示器(36)一起使用的电视游戏系统(19, 20),其特征在于:游戏微处理器(22),用来执行电视游戏程序的指令,和与所述 游戏微处理器相连的画面处理单元(24)以便在所述游戏微处理器 (22)的控制下执行画面处理任务;

程序存储器(10),用来存储所述电视游戏的程序;

可编程图形处理器(2),与所述程序存储器相连并在使用中与所 述游戏微处理器(22)连接以执行至少某些所述电视游戏的程序指 令。

16.如权利要求15所述的电视游戏系统,其特征在于还包括: 与所述程序存储器(10)和所述可编程图形处理器(2)相连,用来传 送地址、数据和控制信息的程序存储器总线;随机存取存储器单元, 与所述随机存取存储器单元(6,8)和所述可编程图形处理器(2)相连 用来传送地址、数据和控制信息的随信存取存储器单元总线;在所 述可编程图形处理器(2)和所述游戏处理器(22)之间传送地址,数 据和控制信息的游戏处理器总线。

17.如权利要求15所述的电视游戏系统,其特征在于所述可编 程图形处理器(2)包括:执行存储在所述程序存储器中所述第二部 分指令中至少某些指令的算术逻辑单元(50)和执行存储在所述程序 存储器中至少一个有关显示的指令的标绘电路(52)。

18.如权利要求15所述的电视游戏系统,其特征在于所述可编 程图形处理器(2)还包括超高速缓存控制器(68)和与所述超高速缓 存控制器(68)相连的超高速缓冲存储器(94),所述可编程图形处理 器包括执行存储在所述超高速缓冲存储器中指令的装置(95,60, 50),藉此所述图形处理器和所述游戏微处理器能够并行地执行指 令。

19.如权利要求15所述的电视游戏系统,其特征在于所述游戏 微处理器(22)和画面处理单元(24)配置在电视游戏系统主处理单元 (20)中而所述程序存储器(10)和图形处理器(2)配置在电视游戏卡 (19)中。

20.一种可编程图形处理器,用于具有至少可执行存储在外部 存储器(10)中的电视图形程序的第一部分的第一处理单元(20)的信 息处理系统,其特征在于,从所述外部存储器(10)接收来自所述电视图形程序第二部分的 指令的装置;

至少可执行所述电视图形的所述第二部分的装置(60,50,52)。

21.如权利要求20所述的可编程图形处理器,其特征在于还包 括接收从所述第一处理单元来的地址信息以识别存有将由图形处理 器执行的指令的外部存储器位置的装置。

22.如权利要求21所述的可编程图形处理器,其特征在于所述 接收地址信息的装置包括接收标识外部存储器存储区地址信息的外 部存储器存储区寄存器和标识在所述存储器存储区内位置的程序计 数器。

23.如权利要求20所述的可编程图形处理器,其特征在于所述 图形处理器包括用来存储包括图形处理器当前正在运行的标志、图 形处理器已将中断信号送给第一处理单元的标志在内的多种图形处 理器状态标志的状态寄存器装置。

24.如权利要求20所述的可编程图形处理器,其特征在于所述 图形处理器包括至少可执行存储在存储在所述外部存储器中所述电 视图形程序的第二部分中的某些指令的算术逻辑单元(50)和执行 存储在所述外部存储器中至少一个有关显示的指令的标绘电路 (52)。

25.如权利要求24所述的可编程图形处理器,其特征在于还包 括第一数据源端总线(X),第二数据源端总线(Y)和数据目的端总 数(Z),所述每一总线均与所述算术逻辑单元和所述标绘电路相连。

26.如权利要求20所述的可编程图形处理器,其特征在于还包 括超高速缓存控制器(68)和与所述超高速缓存控制器相连的超高速 缓冲存储器(94),和执行存储在所述超高速缓冲存储器中的指令的 装置(95,60,50)。

27.如权利要求20所述的可编程图形处理器,其特征在于还包 括:

至少执行一条指令的装置(50);

存储着多种状态条件的状态寄存器;

指令译码器(62),响应所述状态条件中至少一个状态,使所述 至少一规定的指令当所述状态寄存器在某个状况下就控制所述装置 执行起动第一操作,而当所述状态寄存器在第二状况下就使所述装 置执行起动第二操作。

28.如权利要求20所述的可编程图形处理器,其特征在于所述 信息处理系统与显示器相联并且所述图形处理器与所述第一处理单 元协力控制所显示的目标旋转。

29.如权利要求28所述的可编程图形处理器,其特征在于所述 执行装置包括将基于像素格式的数据变换成基于字符格式的数据的 标绘电路(52)。

30.一种图形处理器(2),它与主处理系统(20)和存储着电视图 形程序的程序存储器一起使用,所述图形处理器的特征在于:一算术逻辑单元(50),用来执行存储在所述程序存储器中的指 令;

一程序存储器控制器(104),控制对所述程序存储器的存取并有 选择地使所述主处理系统(10)和所述图形处理器两者的至少一个启 动对所述程序存储器的存取。

31.如权利要求30所述的图形处理器,其特征在于还包括超高 速缓冲存储器(94),所述程序存储器控制器(104)包括将程序指令 装入所述超高速缓冲存储器的装置。

32.如权利要求30所述的图形处理器,其特征在于所述图形处 理器(2)与程序存储器地址总线相连,而所述程序存储器控制器包 括选出一地址将其置于所述程序存储器地址总线上的多路转换器 (414)。

33.如权利要求30所述的图形处理器,其特征在于还包括多个 寄存器(76),所述程序存储器控制器(106)包括响应所述多个寄存 器中的一个被存取而自动地起动程序存储器数据读取的装置。

34.如权利要求30所述的图形处理器,其特征在于所述图形处 理器(2)与随机存取存储器(RAM)(6,8)相连,并进而包括一控制 对所述RAM存取的RAM控制器(88)。

35.一种图形处理器(2),它与主处理系统(20),存储电视图形 程序的程序存储器(10),和随机存取存储器(RAM)(6,8)一起使 用,所述图形处理器的特征在于,从所述主处理系统接收RAM地址的装置(HA);

产生RAM地址的图形处理装置;

一RAM控制器(88),它在主处理系统的RAM地址和图形处 理装置产生的地址之间选择,并将它送给所述RAM。

36.如权利要求35所述的图形处理器,其特征在于还包括至少 一个状态寄存器,而所述RAM控制器包括接收主处理系统产生的 地址(HA)和图形处理装置产生的地址(DEOTADOR)并根据存储 在所述状态寄存器的至少一个状态位的状况将所述地址的一个送给 所述RAM的多路转换器装置(308)。

37.一种信息处理系统中的外部存储系统,所述信息处理系统 (19,20)中具有主处理系统(20)和与所述主系统相连的外部存储系 统(19),所述外部存储系统的特征在于:程序存储器(10);

附加存储器(6,8);

与所述程序存储器(10)和所述附加存储器(6,8)相连的图形处 理器(2);

所述图形处理器包括:

控制对所述程序存储器存取的程序存储器控制器(104);

控制对所述附加存储器存取的附加存储器控制器(88)。

38.如权利要求37所述的外部存储系统,其特征在于所述附加 控制器(88)包括在收到的多个对于所述附加存储器的存取请求间确 定优先级的装置。

39.如权利要求38所述的外部存储系统,其特征在于还包括标 绘电路(52),所述附加存储器控制器(88)接收表明需对存储器存取 以便执行标绘操作的标绘请求信号。

说明书全文

本发明概括地说涉及一种包括其中配备有可编程处理器的独特外 部存储单元的信息处理装置。本发明具体地说涉及一种具有程序存储器 的可拆卸的外部存储单元,程序存储器存储的程序一部分由主处理系统 如电视游戏系统执行,一部分由为增强主系统的高速图形处理能力而设 计的可编程微处理器执行。

本专利申请与同时由桑等人提交的申请顺序号为08/337,142,题为“用 于电视游戏系统等具有像素至字符变换硬件的可编程图形处理器”的专利 申请(现在为美国专利U.S.Pat.No.:5,724,497,代理人案卷号为1248-4), 和同时由桑等人提交的申请顺序号为08/224,411,题为“用于电视游戏系 统等具有增强的存储器控制电路的图形处理器”的专利申请(现在为美国专 利U.S.Pat.No.:5,357,604,代理人案卷号为1248-5)有关。

在电视游戏控制台中配备有8位微处理器和相应的显示处理子系统 的已有技术的电视游戏机。一般通过在游戏卡中以8位乘8位方阵形式 预先存储字符,并利用这些预先存储的字符的各种可编程组合建立起屏 面显示来产生图形。这类已有技术的电视游戏系统一般具有使整个显示 背景和游戏者控制的若干“活动目标”或“子画面”移动的能力。

这类已有技术的系统不能实现这样的电视游戏:在这些游戏中包 含由多边形组合构成的活动目标,而且这些目标必须能被操纵(如旋 转)并在每帧“重新绘制”。例如,这类系统中的已有技术的8位 处理器和相关的显示处理电路无法进行所需的运算来使三维的、 基于多边形的目标有效地旋转或使这类旋转的目标合适地缩放以产 生3-D型特殊效果。本申请发明人认识到精致的图形需要逐个像 素地更新屏面和在实时基础上完成复杂的数学运算。这类已有技术 的基于字符的电视游戏机是无法完成这些任务的。

已有技术的8位电视游戏机也不能有效地完成需要逐个像素地 迅速更新屏面的其他图形技术。例如,这类系统无法有效地在三维 空间使一个目标映像到作为另一个显示目标一部分显示的多边形上 (此后称为质地映像(texture mapping))。

为了超过已有技术的8位机器的图形能力,电视游戏系统已被 设计成采用功能更强的16位处理器。这类16位处理器可为电视游 戏系统提供处理更精致的图形所需的数学机能。例如,这些系统可 生成更高级的彩色和得到更好的图形分辨率。这类16位电视游戏机 是基于字符的系统,能够实现可预先绘制成基于字符或子画面的图 形的多种电视游戏。这类16位电视游戏机还能使具有多种色彩的背 景平面高速移动并在这些平面的后面或前面配置有活动目标。

然而,这类已有技术的16位电视游戏机实现不了具有3-D 型特殊效果的高级电视游戏,这些游戏要显示由多边形所组成并需 每帧变化的复杂目标。例如,这类已有技术的基于字符的16位机器 无法实现需要许多须逐帧地放大或缩小的全方位旋转的目标或子画 面的游戏。本申请发明人认识到要有效地实现涉及全方位旋转和缩 放的基于多边形的目标的这类游戏,必需绘制多边形的边界并逐个 像素地将合适数据填入这类基于多边形的目标。这类任务必须逐个 像素地进行,故要花去大量的时间处理。

在已有技术中,已对可拆卸的游戏卡作了改进,使现行处理器 可访问比与主微处理器相联的现有地址线数目所允许的范围更大的 程序存储器地址空间,从而得到更高级的游戏。例如,这类已有技 术的8位系统采用了包括可执行存储体切换和其他附加功能的多存 储器控制器芯片的游戏卡。然而这类涉及存储体切换的芯片无法使 电视游戏系统胜任上述性质的高速图形处理。

本发明针对已有技术的上述问题,提供一种独特的、全编程的、 设计成配备在与主信息处理系统连接的可拆卸的外部存储单元中的 图形微处理器。在这里所述的示范性实施例中,本发明是在一包括 主电视游戏系统和装有图形微处理器的电视游戏卡的电视游戏系统 中实现的。

这里所述的图形微处理器和电视游戏系统具有许多独特的、优 异的特征,下面综述这些特征。

按照本发明,独特的图形处理器以插件方式与主微处理器连 接。为使处理速度最大,图形处理器可以与主微处理器以并行方式 工作。在一个示范性实施例中,装有图形协处理器的游戏卡还包括 只读存储器(ROM)和随机存取存储器(RAM)。

本发明的图形协处理器对存储事务在本身需要与从主微处理器 读取数据这两者之间作出仲裁。该处理器能与主微处理器同时执行 程序以允许高速处理,在此之前已有技术的电视游戏系统是无法达 到的。

本发明的图形协处理器与配置在游戏卡上的三总线结构结合在 一起工作,从而通过优化主处理器和游戏卡处理器有效使用卡内 RAM和ROM存储设备的能力以使这些存储器得到有效利用。

本发明的全用户编程图形协处理器包括一设计成允许高速处理 的独特指令集。该指令集能有效地实施与3-D图形相关的运算操 作,例如拥有由专用硬件执行的用以在主电视游戏系统的字符映像 的显示中标绘单个像素的专用指令。

该指令集中的许多指令能够在一个机器周期中执行,并设计成 存储在程序ROM的一个字节中。当然,这些指令通过采用专用的 前缀指令可以具有更强的功能。

该指令集拥有独特的基于像素的指令,按程序员的观点来看, 即使主系统是基于字符的,这些指令也能通过允许对单个像素的编 址来建立一“虚拟的”位映像。该像素数据在扫描时由图形处理器转 换为主系统基于字符的16位机器一般所采用的形式的字符数据。这 样,例如程序员虽然使用独特的“标绘(PLOT)”指令来标绘像素, 但当有关数据读到RAM时,该数据转换为16位主机器所能采用 的基于字符的格式。专用像素标绘硬件执行该指令以有效地使高速 3-D型图形得以实施。

本发明的图形协处理器还具有独特的“超高速缓存(CACHE)” 指令和超高速缓冲存储机能以允许存储在程序ROM的程序指令由 图形协处理器高速地从超高速缓存RAM取出执行。该高速缓存指 令允许程序员通过指出所要高速执行的那部分程序就可自动地开始 从图形协处理器内部的高速缓冲存储器执行程序。

该指令集还具有用来辅助对具有高品质3-D型特征的电视游 戏所需的图形技术进行编程的专用指令。这类指令包括上述的像素 标绘指令和合并(MERGE)指令,用来使存储在不同的寄存器中的 子画面数据并接,以更有效地满足显示目标的旋转或/和质地映 像。

专用指令可缓冲数据,以允许本发明的主微处理器和图形协处 理器并行处理。例如,采用一专用指令来提高运行速度,以补偿在 游戏卡中采用存取时间相对慢的ROM。在这种情况下,图形处理器 使用一种只要引用预定的通用寄存器(例如,示范性实施例中寄存 器R14)就会自动开始从ROM读取数据的指令。当发生这类ROM 存取时,也可以执行别的代码。一些周期之后,读取的数据就可供 使用了。当然,与此同时处理器无需等候此数据,而能够完成其他 任务,因此可以写入执行很快的代码。

为有效地处理子程序连接,本发明的图形协处理器还包括连接 (LINK)指令,用以将子程序结束后所要执行的指令的地址在这结 束时刻装入程序计数器R15。

指令集具有RAM回存(store-back)指令。按照该指令,在数据 从RAM读出并用该数据进行操作后,在图形协处理器中的RAM 控制器在相应的上次使用的RAM地址开始已更新数据的回存操 作。这一个周期的回存指令可以方便地用于有效地更新数据块。

本发明的图形协处理器还拥有能利用最低有效字节后跟着最高 有效字节而自动地从RAM读出或写入的指令。该机能可有助于在 编程时为以不同格式存储的数据提供兼容而无需进行任何数据转 置。

本发明的图形处理器可以通过修改内部处理器状态寄存器而设 定为各种不同的标绘方式。这些方式包括每个交替的像素具有不同 颜色的能产生可编程明暗效果的晃动方式。另一可选择方式允许对 颜色进行高半字节和低半字节选择,使两个子画面能够存储在存储 器中某一原来由一个子画面占据的空间。

本发明拥有许多独特的硬件特征。例如,图形协处理器具有专 用标绘电路,它通过利用单片RAM拥有增强的像素数据缓冲。这 种数据缓冲可使对外部数据RAM读出或写入处理量减至最小,并 提高将显示的多边形填以合适数据的速度。

除了如上所述一旦有对寄存器R14的任何访问就起动的读出 缓冲特征外,本发明的图形协处理器还具有写入缓冲特征,可缓冲 想要写到游戏卡RAM的数据,以使马里奥芯片(Mario chip)的中 央处理器尽快地执行别的指令。

本发明的图形协处理器还包括图形处理器和主处理系统均可存 取的16个寄存器,R0-R15。寄存器R0是无需在指令中特地注明 和起累加器作用的缺省寄存器。R15作为程序计数器。寄存器R14 是上面提及的,若被访问便自动开始从ROM读取数据的寄存器。 专用前缀指令可用来定义源和/或目的寄存器。本发明的图形协处 理器与主协处理器的交互作用使得图形协处理器的寄存器可由主处 理器存取。

与图形协处理器相关联的独特的三条总线结构允许较高的并行 度。这3条总线包括主处理器总线,ROM总线和RAM总线。这些 总线在物理上是分开的并可以同时使用。每条总线包括地址线、数据 线和控制线。主处理器总线包括地址线、数据线和控制线,提供图形 协处理器中所需的较宽范围的信号。采用该总线结构的本发明的图 形处理器可以执行来自程序ROM,外部RAM或它本身内部的高速 缓存RAM的程序。

图形协处理器与主微处理器用种种仲裁方式进行接口。在这方 面,通过在一预定的图形处理器状态寄存器位置上装入逻辑“1”, 就由主处理器设定一种仲裁方式,表明主处理器放弃了对游戏卡的 ROM和RAM进行访问。

本申请发明人认识到,尽管在主处理器因相应地对状态寄存器 置位而放弃了对ROM和RAM访问这种场合下,中断还是可以发 生,主处理器可以开始对ROM的访问以读取处理这一中断的程序 的地址。在这种情况下,图形处理器提供给主微处理器的不是程序 ROM的地址而是工作RAM的地址,让主处理器访问它本身内部 的工作RAM。该顶技术阻止主处理器在图形协处理器正执行来自 程序ROM的程序时对该程序ROM进行寻址。

当主处理器需对游戏卡RAM访问时,使图形协处理器状态寄 存器置位使得图形协处理器不能访问RAM,藉此使主处理器从 RAM存取任何所需要的信息,之后再将图形协处理器切换到可对 RAM访问的状态。然而,因其处理速度更快故希望协处理器最大限 度地利用卡上的ROM和RAM。

本发明的图形协处理器设计为将装载于字符数据RAM中的像 素信息有效地转送到主处理器图像RAM供显示。但图像RAM不 能通过任何游戏卡总线由图形协处理器直接存取。必须利用主处理 器的存储器直接存取(DMA)电路进行这种转送。

本发明的图形协处理器接收来自主信息处理系统的若干时钟信 号。图形协处理器中的定时由这些时钟中的一个驱动。

作为本发明的可选配特征,图形协处理器中的电路允许处理器 重新配置,以考虑到将来的变动,而这些变动取决于通过输出地址 线(它们在紧接着加电复位之后用作配置设定输入线)收到的信号状 态。与这些地址线连接的选配项设定电阻的值由图形协处理器读出。 这些信号可用来定义例如与图形处理器一起使用的RAM芯片的种 类,如静态RAM或动态RAM。

结合附图对下面的本发明示范性实施例的详细说明会使本发明 的所有形式和优点更易于理解。

图1是根据本发明示范性实施例的示范性外部存储系统的方框 图;

图2是与目前较佳的示范性实施例的图形协处理器一起使用的 示范性主处理系统的方框图;

图3是内置图形协处理器的游戏卡和内置主处理系统的底座部 件的示范性物理配置的透视图;

图4A和图4B是根据目前较佳示范性实施例的图形协处理器 的方框图;

图5是叙述为起动图形协处理器操作而由主处理系统执行的操 作序列的流程图;

图6是图4A所示的算术逻辑单元的更详细方框图;

图7是图4A所示类型的示范性像素标绘电路的更详细方框 图;

图8A是示出标绘控制器接收的输入信号和标绘控制器产生的 输出信号的方框图;

图8B是像素标绘电路的彩色矩阵中的彩色矩阵单元;

图8C描述有关像素标绘电路的定时、控制和数据信号;

图9是图4A所示的RAM控制器的更详细方框图;

图9A示出有关图9所示的RAM控制器的示范性定时、控制 和数据信号;

图10是图9所示的仲裁逻辑的电路图;

图11是本发明图形协处理器的示范性实施例中的再同步电路 图;

图12是有关图11的再同步电路的定时信号;

图13是本发明图形协处理器的ROM控制器的更详细的方框 图;

图14是根据本发明示范性实施例的图形协处理器的超高速缓 存控制器的方框图;

图15A是本发明图形协处理器中与指令译码有关的电路的方 框图;

图15B示出说明图15A中的先行逻辑的工作用的示范性定时 信号;

图16和17是示出根据本发明示范性实施例的图形协处理器的 寄存器控制逻辑的方框图;

图18是叙述在完成多边形生成任务中图形协处理器的操作程 序的流程图;

图19、20和21是用来说明按照本发明示范性实施例可以生成 的基于多边形的目标的缩放和旋转特征的示范性显示。

根据本发明的示范性实施例,本发明的图形协处理器与任天堂 (美国)股份有限公司在市场销售的商品名为超级任天堂娱乐系统 (Super NES)的16位电视游戏系统交互作用。该超级任天堂娱乐系 统在1991年4月10日提交的申请号为07/651,265的题为“视频处 理装置”的专利申请和1991年8月26日提交的申请号为07/749, 530的题为“存储器直接存取装置和其所使用的外部存储设备”中得 到部分的说明。这些申请通过引用而明显地归并在本申请中。应该 理解本发明不仅仅限于与Super NES有关的应用,还可以用于别 的电视游戏系统或别的非电视游戏用的信息处理系统。

仅为了引用的方便,根据本示范性实施例的图形处理器在此之 后称为“Mario芯片(Mario Chip)”。目前较佳的示范性实施例中所 述的Mario芯片封装在电视游戏卡中。应该理解只要Mario芯片在 使用时与程序存储器和主处理单元连接,将Mario芯片与程序存储 器置于相同卡盒内并不是本发明所必须的。

图1示出根据本发明示范性实施例的示范性电视游戏卡/外部 存储系统。该游戏卡具有其上安装有图1全部元件的印刷电路板(图 上未画出)。该卡具有排列在印刷电路板插入端的接插件电极阵列1 以将信号传送到或传送出Super NES主控制台。接插件电极阵列1 由安装在Super NES主控制台内的相配的接插件容纳。

根据本示范性实施例,配备在游戏卡上的Mario芯片(图形协 处理器)2是100至128插脚的集成电路芯片。Mario芯片接收许多 从主处理系统(例如Super NES)来的控制、地址和数据信号。例如, Mario芯片由插脚P112接收来自主处理系统的21MHz时钟输入, 经插脚P117接收可以为21MHz(或另一预定频率)的系统时钟输 入。该系统时钟输入例如可用来向Mario芯片提供用于主CPU存 储器存取的存储器定时信息和提供为Mario芯片内的操作定时的 时钟信息。Mario芯片2还包括可选配的外部时钟输入(插脚 P110),将Mario芯片与外部晶振4连接起来,以比从主系统接收的 21MHz更高的时钟频率驱动MarioCPU。

主CPU的地址输入(HA)从主处理系统(例如Super NES/图 像处理单元PPU)的地址总线经插脚P37至插脚P62连接到Mario 芯片2。来自主系统的数据输入(HD)类似地从主CPU数据总线经 插脚P65-P72连接到Mario芯片2。另外Mario芯片2经P119从 主CPU接收存储器更新信号RFSH,经插脚P118接收复位信号, 经插脚P104、P105接收读出和写入控制信号。该Mario芯片可产生 中断请求信号IRQ并将该信号IRQ经插脚P120连接到Super NES。也可从Super NES接受其它控制信号,例如经插脚P106接 收可起动对主程序ROM10访问的ROM SEL信号。另外该游戏卡 拥有与Super NES的认证处理器在输入线I、输出线O和复位线R 交换数据的认证处理器3。用来认证游戏卡的认证处理器3和安全 系统可以为美国专利USP 4,799,635示出的那种,该专利通过引 用而归并于此。

Mario芯片经RAM地址总线(RAM A)、及RAM地址插脚 P74-P91和RAM数据总线(RAM D)及数据插脚P93-P100与 RAM6和RAM8连接。这些RAM可以是利用分别经插脚P90- P91连接的行地址和列地址选通信号(RAS,CAS)进行部分控制的 动态存储器件。可采用一个或多个静态RAM来取代动态RAM,这 时插脚P90和P91将被用来在没有行地址和列地址选通信号的情 况下,将地址信号连接到它们各自的RAM。允许写入控制信号WE 可经插脚P107相应地送到RAM6和RAM8。

读、写控制信号(R,W)由主CPU产生并经插脚P104和P105 与Mario芯片连接。Mario芯片通过监测这些读出和写入线能够确 定Super NES CPU所要执行的存储器存取操作的种类。实质上来 自主机的所有地址线和控制线都类似地由Mario芯片监测,以掌握 主CPU所要进行的操作。由Mario芯片接收的ROM和RAM寻址 信号受到监测,并将它们送到相应的存储装置。在这方面,ROM地 址经ROM地址总线和插脚P2至P26与程序ROM10相连,而 RAM地址经插脚P74至P91与RAM6和RAM8相连。从主CPU 出来的ROM和RAM数据输入分别经ROM数据总线和插脚P28 -P35送到ROM10和经RAM数据总线和插脚P93至P100与送 到RAM6和RAM8。

应该认识到Mario芯片除了与这里所述的ROM和RAM外还 可以与较宽度范围的不同存储设备结合一起使用。例如可以期待 Mario芯片与采用CD ROM的电视游戏系统便利地结合一起使用。

例如在图1中不是采用ROM10,而是使用CD ROM(未图 示)来存储字符数据,程序指令,图像、图形和声音数据。将一种常 规类型的CD机座(也未图示)与Mario芯片2合适地连接起来,通 过地址总线P2-P26为存取数据接收存储器地址信号和/或通过数 据总线P28-P35接收指令。至于CD机座和CD ROM存储系统具 体的结构和操作细节是本技术领域的技术人员众所周知的。CD ROM存储带来的优点在于使每字节信息的存储成本显著地降低。 存储数据的成本可以比存储在半导体ROM上低百分之一百到一 千。不幸的是CD ROM存储器存取/读出时间比半导体ROM的还 长。

Mario芯片采用在至少三条总线上的信息允许并行利用的三总 线结构。在这方面,在图1所示的游戏卡中,Mario芯片同ROM总 线(包括ROM数据线、ROM地址线和控制线),RAM总线(包括 RAM地址线、数据线和控制线)和主处理器总线(包括主机地址线、 数据线和控制线)相连。

Mario芯片结构允许发生流水线操作以优化吞吐量。在这方面, Mario芯片可以在从ROM读取一个数据字节时,同时处理其它数 据,还同时向RAM写入另外的数据,因而能非常有效地处理有关 3-D型的图形。如下面进一步说明的那样,Mario芯片2内部采用 16位结构,还设计为与8位的ROM10和RAM6、RAM8等芯片接 口。在内部,所有的内部数据总线和内部寄存器均为16位。从ROM 10读出和写入RAM6、RAM8均被“缓冲”并且一般不会放慢程序 执行。

类似地,Mario芯片2可以从CD ROM存取指令和图形数据 并将该信息写入RAM6、RAM8以便以后通过DMA(存储器直接 存取方法)转送到主处理器(例如Super NES的图像处理单元 PPU)的图像RAM中。本技术领域的技术人员会理解可以对Mario 芯片2进行编程绕过RAM的存储和存取操作而协调从CD ROM 直接转送数据给PPU的图像RAM。

尽管CD ROM的读出存取时间较长,但Mario芯片2极快的 处理速度使CD ROM存储可实际用于图形应用。视频和音频数据在 存储于CD ROM上之前采用常规的数据压缩技术进行压缩。数据压 扩技术对本领域技术人员是众所周知的。在从CD ROM取出压缩的 数据之后,Mario芯片2运用常规的数据解除压缩算法使数据扩展 所需时间比常规图形处理器所能达到的短得多。Mario芯片2用21 MHz时钟信号进行工作,故而Mario芯片2可在规定期间内完成 扩展以转送给RAM6、RAM8。

这样有大量的视频和音频数据(以压缩形式)在典型的CD ROM存取周期内存取。由于在Mario芯片2进行数据扩展后,每数 据字节的实际存取时间显著地减小,因而使其相对长的存取时间的 影响减至最小。在Mario芯片2执行扩展的同时,主图形处理例如 Super NES PPU可自由地进行其他处理任务。当然,对于某一特殊 应用,如果速度不成为其问题,Mario芯片2可以以不压缩的形式 从CD ROM存取数据。

当使用静态RAM时该游戏卡还可以包括一后备电池。后备电 池12经电阻R连接到后备电池电路14以在电源失效时提供静态 RAM的后备电压(VSRAM)和静态RAM芯片选择信号RAMCS以 保全数据。

另外,在选配项设定电阻16与RAM地址总线连接。在平常操 作中,Mario芯片地址线输出到RAM6和RAM8。然而在复位或加 电操作期间,这些地址线根据它们是连在预定的电压Vcc还是接地 而用作输入线以产生高或者低信号。在这种方式下,“1”或“0”合适 地读进内部的Mario芯片寄存器。在复位后,Mario芯片(在执行程 序期间)根据这些电阻的置值,例如可确定与Mario芯片关联的乘 法器时钟频率、RAM的存取时间、要用于Mario芯片内的其他操作 的时钟频率等。Mario芯片通过利用这些选配项设定电阻,例如,无 需对Mario芯片的设计作任何改动,就可适合同若干不同类型的存 储设备一起使用。例如,如果检测出动态RAM置值就要在各相应 时刻加上更新信号。另外,可选配设定可以用来控制例如处理器乘 法器电路的运行速度,和允许图形处理器以比所能执行某些乘法指 令还快的速率执行到的指令。这样,通过启动延迟的乘法操作,能 以比其它方法可用的频率更快的时钟频率运行余下的指令(例如处 理器时钟为30MHz,而可选配设定会有效地以15MHz来执行乘 法指令)。

图2是设计为与图1中示出的示范性游戏卡相连的示范性主电 视游戏系统的方框图。图2可以代表例如由美国任天堂目前销售的 Super NES。但本发明不限于与Super NES有关的应用或具有图2 所示的这种方框图的系统。

该Super NES在控制台20内包括例如可以是65816兼容型微 处理器的16位主CPU。CPU22与例如可以包括存储容量128K字 节的工作RAM32相连。CPU22与图像处理单元(PPU)24相连, PPU又与例如可包括存储容量32K字的图像RAM30相连。 CPU22在垂直或水平回扫消隐间隔期间经PPU24对图像RAM进 行存取。这样,CPU22只能在PPU24对图像RAM存取在进行线 扫描期间以外的时间通过PPU24对图像RAM30进行存取。PPU24 从图像RAM30产生在用户电视36上的图像显示。CPU还与连接 到工作RAM28上的音频处理单元相连。可以包括市售的音响芯片 在内的APU26产生与存储在游戏卡上ROM10内的电视游戏程序 相关的声音。CPU22只能经APU26对工作RAM28进行存取。 PPU24和APU26经射频调制器单元34与用户家用电视36连接。

Super NES中的图像RAM30必须装载存储在游戏卡中的程序 ROM10(它不仅存储游戏程序,还存储玩游戏时所用到的字符数 据)内的合适的字符数据。任何活动目标,譬如所要显示的子画面信 息、或背景信息在使用前必须存入图像RAM30内。该程序ROM10 经与图1中示出的印刷电路板边缘接插件相连的相配的接插件18 由CPU22存取。PPU经共用的主CPU数据总线、地址总线和接头 23与游戏卡连接以提供让PPU数据和控制信号与游戏卡相连的通 路。APU26经共用的主CPU总线和音频总线27与游戏卡连接。

CPU22地址空间的分配,是使得程序ROM10存储单元从位 置0开始并一般分成32K字节的各个区段。程序ROM使用近一半 的CPU地址空间。每个CPU地址空间32K字节区段的顶端位置一 般用来对工作RAM32和各种寄存器编址。程序ROM10一般是4 兆字节。用在Super NES中的CPU22能够对程序ROM10的全体 进行寻址。另一方面,Mario芯片2只包括一16位程序计数器,因 而还包括用以选择程序ROM10中的32K字节存储区的存储区寄 存器。

在本示范性实施例中,Mario芯片具有与Super NES存储器分 配图相对应的全24位地址空间。在从位置$00:8000开始的位置 上含有ROM10,而游戏卡上的RAM芯片6、8则从位置$70:0000 开始。

既然游戏卡上的ROM10和RAM6,RAM8连在分开的总线 上,他们就能由Mario芯片并行存取。而且对RAM6,RAM8的存 取频率比对ROM快,Mario芯片就是设计成利用这性能优点的。 Mario芯片无法对Super NES中的任何存储器进行存取,即无法对 工作RAM32或PPU图像RAM30存取。

为使Mario芯片处理数据或绘入位映像中,数据必须存放在该 Mario芯片的RAM芯片6、8内。这样,在NES CPU程序和马里奥 芯片程序间共用的任何变量一定要在Mario芯片的RAM芯片6、8 内。Mario芯片需要用的任何预先存储的数据可以在ROM10中,任 何变量则在RAM6、RAM8中。

仅仅是Super NES所需要的任何专用变量无需放在游戏卡 RAM6、RAM8中。事实上,RAM6、8的存储空间很宝贵,所以最好 将最优先需要的内容分配给RAM6、RAM8。任何非必需的变量应 该存储在Super NES的内部RAM32中。

Mario芯片写入的位映像是Mario游戏卡RAM6、RAM8中, 并当每一帧位映像已被全部提供时,在Super NES的控制下,通过 DMA转送到PPU的图像RAM30中。

Super NES的CPU22对Super NES控制台内的所有内部 RAM进行存取,就象没有Mario芯片。Mario芯片无法对这RAM 进行存取,故而必须由CPU本身引入MarioROM/RAM芯片和内 部Super NES RAM间转送的所有数据。通过CPU22编程就可传 送数据,或通过DMA传送来移动数据块。对于所有的游戏程序, Mario卡ROM10和RAM6、RAM8都以惯用的方式映入。

CPU22控制哪一个CPU可临时对游戏卡ROM和RAM芯片 进行存取。在加电或复位的情况下,Mario芯片被关断,完全由 CPU22对游戏卡ROM和RAM芯片进行存取。为使Mario芯片运 行程序,有必要使CPU22程序放弃对ROM或RAM芯片,最好是 对两者的存取,而等待Mario芯片完成其所交给的任务,或者 CPU22可将某一程序复制进内部的工作RAM32并在那儿执行它。

Mario芯片有若干可从Super NES CPU侧编程和读出的寄存 器。这些均被映入从位置$00:3000开始的CPU22存储器分配图。

如图2所示,Super NES产生和接收种种控制信号。当Super NES CPU22需对程序ROM10进行存取时,它产生一控制信号 ROM SEL。要开始存储器更新,该Super NES产生一更新信号 RFSH。当Mario结束某一操作时,它发送一中断信号到与Super NES CPU相联的中断请求线上。CPU22另外还产生读出和写入信 号。

系统定时信号是从控制台20中的定时连锁电路21产生出的。 加电/复位信号也是在主控制台20中产生并送到游戏卡。

Super NES还包括认证处理设备25,它按照上面提到的美国 专利USP 4,799,635同游戏卡上的认证处理设备3在输入线I、输 出线O和复位线R上交换数据。美国专利USP 4,799,635指出,该 处理设备25使CPU22处于复位状态直到认证被证实。

在图2中用方框形式表示的Super NES电视游戏机在此只是 总体上的描述。有关包括PPU24在内的Super NES的进一步细节, 例如可以在1991年4月10日申请的申请顺序号为07/651,265的 题为“视频处理装置”的美国专利申清中找到,该申请通过引用而明 显地归并在本申请中。诸如Super NES和游戏卡之间的信息如何传 送之类的再进一步细节可以在1991年8月26日申请的申请顺序号 为07/749,530的题为“图像处理系统中的存储器直接存取装置和其 所使用的外部存储设备”的美国专利申请和1991年11月19日申请 的申请顺序号为07/793,735的题为“镶嵌图像显示装置及所用的外 部存储单元”的美国专利申请中找到,这些申请在此引用而归并在 本申请中。

本申请发明人认识到在一些应用中,需要利用这种主处理器 DMA电路在垂直回扫消隐期间传送的信息比实际可能传送的多。 因而即使会导致画面尺寸略有收缩,还是希望延长垂直回扫消隐时 间。通过采用这一方法,在处理速度和画面更新频率方面就体现出 显著的优点。

图3示出容纳图1所示的Mario芯片和游戏卡上其它结构的游 戏卡盒的示范性机械外观设计的透视图。图3类似地示出容纳图2 示出的Super NES电视游戏硬件的电视游戏控制台20的示范性外 部机座的透视图。这类电视游戏控制台20和相关的可卸下的游戏卡 19示于1991年8月23日申请的申请顺序号为07/748,938题为 “TV游戏机”的美国专利申请的图2-9中,该申请在此引用而归并 在本申请中。

图4A和4B是示于图1中的Mario芯片2的方框图。首先集中 看示于图4A和4B中的各种总线,指令总线INSTR是将指令代码 送到各种Mario芯片元件的8位总线。X、Y和Z总线是16位数据 总线。HA总线是24位的主系统地址总线,在目前较佳实施例中, 使用时与Super NES的地址总线相连。HD总线是使用时与Super NES的数据总线相连的8位的主系统数据总线。PC总线是将Mari- o芯片程序计数器(即通用寄存器块76中的寄存器R15)的输出送 给各种系统元件的16位总线。ROM A总线是20位ROM地址总 线。ROM D总线是8位ROM数据总线。RAM总线是16位RAM 地址总线。RAMD IN总线是8位RAM读出数据总线,RAMD OUT总线是8位写入数据总线。

Mario芯片和Super NES共用游戏卡RAM6、RAM8,起到在 Mario芯片和Super NES之间传递数据的主要机能。Super NES给 地址总线HA和数据总线HD对Mario芯片进行存取。Mario芯片 的寄存器76由Super NES经Super NES的地址总线HA进行存 取。

Super NES经Mario芯片2对游戏卡上程序ROM10和 RAM6、RAM8存取。ROM控制器104和RAM控制器88接收到 由Super NES产生的有关存储器存取的信号,就分别起到ROM和 RAM的存储器存取。顺便解释一下,RAM选择信号RAMCS被 Mario芯片用来确认Super NES正要对该RAM寻址。

示于图4A和4B中的X、Y和Z总线是内部的Mario芯片数据 总线。X和Y总线是源数据总线而Z数据总线则是目的总线。这些 总线载送16位并行数据。

当执行指令时,Mario芯片2可以将指令用的源数据放在X和 /或Y总线上面结果数据放在Z总线上。例如,在执行将两寄存器 的内容相加并将结果放在第三寄存器的指令时,算术逻辑单元 (ALU)50经X和Y总线接收到两个源寄存器的内容并将结果送到 Z总线(转而送到块76中的指定寄存器)。由Mario芯片2的指令译 码电路60对指令操作码译码得出的控制信号被送到ALU50起动 加法(ADD)操作。

正如针对图1说明所注解的那样,与Mario芯片相连接的 ROM总线、RAM总线和Super NES主机总线能并行地进行信号 通讯。Mario芯片2监视经过主机Super NES总线转输的控制、地 址和数据信号以确定主系统正在执行的操作。根据任何给定的时刻 正在执行的Super NES操作可以并行地对游戏卡ROM总线和游 戏卡RAM总线进行存取。在通常的Super NES游戏卡中,主机 CPU的地址线和数据线直接与ROM和RAM相连,这样RAM和 ROM就不能被并行地存取。

根据本发明的一个方面,Mario芯片2使图1中所示的ROM 总线和RAM总线与Super NES总线在物理上分开。Mario芯片2 监视在Super NES总线上传输的信号,并确定什么信号需经不是 分时的两条分开的ROM总线和RAM总线送到ROM芯片和 RAM芯片。通过分开ROM总线RAM总线,Mario芯片能同时从 ROM读出和向RAM写入。在这种方式下,Mario芯片可以用便宜 的其存取时间比RAM存取时间慢得多的ROM芯片有效地工作而 无需等到ROM存取结束后才对RAM存取。

回到图4A,Mario芯片如前面所注明的那样,是全编程处理器 并包括ALU50。除了乘法操作由乘法器64执行和某些像素标绘操 作由标绘硬件52执行外,ALU50执行Mario芯片中所配备的所有 算术功能。一收到出自指令译码器60的合适控制信号,ALU50就执 行加法、减法、异或、移位和其他操作。如图4A所示,ALU50从X、 Y总线上接收所要操作的信号,执行从指令译码器60收到的控制 信号所起动的操作,并将该操作的结果送到Z总线。下面将结合附 图6进一步详细地说明ALU。

Mario芯片2另外包括专用硬件以便有效执行3-D型特殊效 果和其他图形操作,使运用这些性能的电视游戏可以实现。在这方 面,Mario芯片2包括标绘硬件52,它辅助将对像素坐标的编址实 时地变换成Super NES所采用的那种对字符映像的编址。好处是可 以通过指定定义各像素在显示屏上的位置的X和Y坐标来对 Mario芯片进行编程。

这样,图形操作是根据程序员指定像素来执行的,标绘硬件电 路52在扫描时将各像素指定值变换成正确格式化的字符数据。该字 符数据随后映入示于图2中的Super NES图像RAM30中供显示 用的符合要求的地方。在这种方式下,Mario芯片程序员只需将Su- per NES的图像RAM30看作位映像,而实际上它是字符映像。

该标绘硬件52响应种种有关标绘的指令,允许对一特定像素 在显示屏上的X和Y坐标和预定彩色进行可编程的选择,和标绘 相对应的像素使X和Y坐标变换成与具有用来驱动Super NES图 像RAM30的形式的字符定义相对应的地址。

标绘硬件52具有相关的数据锁存器,允许在写到游戏卡RAM 前缓冲尽可能多的像素数据,以使RAM数据事务尽量减少。在X 和Y坐标数据在标绘硬件52中变换和缓冲之后,字符定义数据随 后传送到游戏卡RAM。

该标绘硬件52分别经PLOT X寄存器56和PLOT Y寄存器 58接收X、Y坐标数据。在目前较佳实施例中,PLOT X和PLOT Y 寄存器不是分开的寄存器(如图4A所示)而是Mario芯片通用寄 存器(即示于图4B中的寄存器块76中的寄存器R1和R2)。

该标绘硬件52还经彩色寄存器54接收像素彩色信息。如下面 将会进一步说明的那样,所显示的各像素的彩色存储在8×8寄存 器矩阵中,每个像素的彩色说明占据该矩阵的一列。

标绘硬件52处理字符号地址和与X、Y和色彩输入有关的数据 并将它们送到字符RAM6、RAM8。字符地址经输出线53送到 RAM控制器88和RAM地址总线RAMA。字符数据经输出线55、 多路转换器93和RAM数据总线RAM D DUT送到字符RAM。该 标绘硬件52在与Super NES字符格式保持兼容的同时允许字符中 的像素单独地编址,以藉此提供给程序员一“虚拟的”位映像显示系 统。“虚拟的”位映像保存在游戏卡RAM中并在每帧显示结束时利 用例如上面提到的申请顺序号为07/749,530的美国专利申请中的 DMA电路传送到Super NES的图像RAM30。该标绘硬件52能高 速控制单个像素,使涉及到旋转和缩放目标的某些3-D型图形效 果得以实现。

由于要把像素格式变换成字符格式,标绘硬件52还经RAMD IN和数据锁存器82和输入线83从卡RAM6、RAM8接收与当前 像素X、Y附近的其他像素有关的信息。通过使用从RAM6、RAM 8检索出的和暂时存储在RAM数据锁存器中的以前的像素数据, 可以使对RAM的写入次数降为最小。示于图4A中的RAM数据 锁存器80、84和86还用来缓冲收到的关于某一像素的彩色数据(它 们已存储于游戏卡RAM内的多重位平面中),以将这些数据提供给 标绘硬件52。

RAM数据锁存器80与Super NES数据总线相连因而Super NES能读出该数据锁存器的内容。RAM数据锁存器80、82和86由 RAM控制器88控制。RAM数据锁存器84和86用来接收来自 RAM6、RAM8的数据并将来自RAM6、RAM8的数据送到目的 端总线Z以便于装载进寄存器块76中的预定寄存器。另外与RAM 控制器88相连的锁存器90是缓冲RAM地址的。RAM控制器88 利用存储在锁存器90中的地址经RAM A总线对RAM6、RAM8 寻址。RAM控制器88还可以由Super NES经地址总线HA进行存 取。

标绘硬件52还响应读出像素(READ PIXEL)指令,它读取寄 存器R1的内容所定义的水平位置和寄存器R2的内容所定义的垂 直位置上的像素的彩色信息,并经目的端总线Z和输出线87将结 果存储在寄存器块76中的预定寄存器中。将结合图7、8A和8B和 说明对PLOT硬件52作进一步说明。

流水线缓冲寄存器62和ALU控制指令译码器60与指令总线 INSTR相连以产生控制信号(应用于整个Mario芯片)来起动与置 于指令总线的命令相应的操作。Mario芯片2是在其执行当前指令 的同时就读取所要执行的下一个指令的流水线微处理器。流水线寄 存器62存储所要执行的下一个指令,使得如果可能的话就在一个 周期中执行各指令。置于指令总线上的指令是按存储于寄存器(例如 可以是示于图4B的寄存器块76中的寄存器R15)中的程序计数器 的内容寻址的。

由Mario芯片2执行的指令可以从示于图1中的程序ROM10 或Mario芯片的内部超高速缓存器RAM94得到,或从游戏卡 RAM6、RAM8得到。如果正从ROM10执行程序,ROM控制器 104(示于图4B中)将读取指令并将它置于Mario芯片指令总线IN- STR。如果程序指令是存储在超高速缓存RAM94中,则指令会经 超高速缓存RAM输出总线95直接从超高速缓存输出置于指令总 线上。

对主CPU(即Super NES)的编程,是使程序ROM10部分分 配给Mario芯片程序指令。Super NES程序命令Mario芯片执行一 规定的功能,然后将存取Mario芯片程序代码的ROM10中的地址 提供给Mario芯片。流水线寄存器62读取正执行着的指令的下一字 节指令,以将有关指令的信息提供给指令译码器60,使译码器能在 程序执行当中先行了解即将发生的事件来预期有关处理。部件60中 的译码和控制电路产生命令ALU50、标绘硬件52、超高速缓存控制 装置68等的控制信号,以完成由正执行着的指令代码所指示的操 作。

Mario芯片还包括一个同ALU50分开的高速、并行乘法器64。 乘法器64响应规定的指令操作使从X和Y源端总线接收到的两个 8位数相乘并将16位结果装上目的端总线Z。如果可能该乘法操作 在一个周期内完成。输入到乘法器64的两个数可以带符号或不带符 号。乘法器还能完成长字乘法操作,使两个16位数相乘而产生一个 32位的结果。乘法器还包括相关联的部分乘积寄存器66来存储乘 法操作期间产生的部分乘积。当译出一个乘法操作代码时,就由指 令译码器60输出的控制信号启动乘法器64。乘法器64将在最小4 个时钟周期内执行涉及16位字的乘法的长字乘法指令。

长字乘法指令具有以下格式:

R4(低位字),DREG(高位字)=Sreg*R6 执行该指令就使源寄存器乘以寄存器R6的内容并将32位结果存 储在寄存器R4/DREG(低/高位)。乘法是带符号的并对32位结果 设定零和符号标志。

该操作按照以下六个步骤进行:

步骤1:不带符号的乘法R4[0…15]=SREG[0…7]*R6[0…

       7]

步骤2:X带有符号。R4[0…15]=R4[0…15]+256*SREG[8

       …15]*R6[0…7]。不管乘积的高8位,但保留加法的

       进位。

步骤3:X带有符号。R5[0…15]=CY+(R6[8…15]*SREG[0

       …7])÷256;加上符号。

步骤4:X不带符号,Y带有符号。

       R4[0…15]=R4[0…15]+256*SREG[0…7]*R6[8

       …15]。不管乘积的高8位,但保留加法的进位。

步骤5:Y带有符号,R5[0…15]=R5[0…15]+CY+SREG[0

       …7]+R6[8…15])÷256;加上符号。

步骤6:X、Y带有符号,R5[0…15]=R5[0…15]+RY[8…15]

       *R6[8…15]。

用在本示范性实施例中的乘法器64例如可以是麦格劳-希尔 1984年出版的由卡瓦诺著的《数字计算机算术》中所描述的那种。

参见图4B,超高速缓存控制器68(在图14中会进一步详细图 示)允许程序员有效地起动装载操作,将想要高速执行的那部分程 序装入超高速缓存RAM94。这种“超高速缓存(CACHE)”通常应用 于在图形处理中频繁发生的小程序循环。Mario芯片指令集包括 “CACHE”指令。紧接着该CACHE指令的任何指令被装载进超高 速缓存RAM,直到超高速缓存RAM满载为止。当执行CACHE指 令时,当前程序计数器状态被装载进超高速缓存基址寄存器70。这 样,该超高速缓存基址寄存器的内容规定了超高速缓存开始的起始 位置。

大多数指令在一个周期内执行。来自相对慢的外部存储器象 ROM10和或RAM6、8的指令必须在执行它们之前就取出。这将 花费另外大约6个周期。为提高程序执行速度,应该利用在Mario 芯片内的“超高速缓存”RAM本身。

超高速缓存RAM可以是一512字节的指令超高速缓存器。这 容量与平均程序的大小相比是比较小的,因而程序员必须对如何最 大限定地利用超高速缓存RAM作出决定。能够装入512字节超高 速缓存容量的任何程序循环均能以全速运行,使读取和执行均在一 个周期内进行。因为总线是分开的,故而在执行来自内部的超高速 缓存94的代码时能同时对ROM和RAM存取。

超高速缓存RAM92可以通过在它执行旋转和缩放计算时,在 它利用PLOT指令(将在下面说明)将像素写入RAM6、RAM8 时,同时运行超高速缓存中会从ROM10读出各像素色彩的循环, 来方便地使子画面旋转。所有这一切都是并行地发生的,尽管最慢 的操作降低了速度但仍给出很快的吞吐率。最慢的操作通常是 ROM数据的读取,这就是Mario芯片为什么被设计成利用对 ROM和RAM缓冲存取的原因。

与运行来自相对慢的ROM的程序相比,运行来自超高速缓存 RAM94的程序速度可快约6倍,但它首先必须从ROM装载到超 高速缓存中。这是通过将指令置于所要超高速缓存的任何循环的起 始部分来进行的。从CACHE指令地址起,将只超高速缓存循环的 前512字节。在执行循环第一次迭代的代码时,程序就从ROM10 出来并以60字节块形式复制进超高速缓存RAM。该循环所有进一 步迭代都将来自超高速缓存RAM而不是ROM10。

CACHE指令能随意地用在任何重复的程序循环前面。只是循 环的后续迭代能得益于其程序置在超高速缓存中。如果程序循环大 于512字节并溢出超高速缓存94,它仍将正确地工作,只不过前 512字节从超高速缓存94运行而剩下的照常将从ROM10运行。这 部分地提高了速度但不够理想。

在较佳实施例中作为超高速缓存控制器的一部分的超高速缓存 标志位寄存器72对超高速缓存RAM94中已装载的存储器位置进 行标识。该超高速缓存标志位允许Mario芯片迅速地判定某一程序 指令是不是能从更快的超高速缓存RAM执行而不是从程序ROM 10执行。可以由超高速缓存控制器68或Super NES经Super NES 地址总线HA经多路转换器96对超高速缓存RAM94进行存取。

超高速缓存控制器68与程序计数器总线PC相连以装载超高 速缓存基址寄存器70并执行超高速缓冲存储器地址超出范围的校 验操作。

与从ROM10读出可达到的并行度相似,Mario芯片还提供并 行地写入到RAM6、RAM8的途径。不管什么时候只要Mario寄存 器被写入到RAM6、RAM8,它就起动例如在RAM控制器88中的 单独的RAM写入电路进行存储事务。这一般将花去6个周期,但 假使程序员避免在这样做时进行另一个RAM的事务,就不会使该 处理器延迟。例如在两个存储指令之间插入别的处理就能进行得更 迅速。那样RAM写入电路就有时间进行它的工作。如果连续用到 两个写入,那么在进行第一个写入时第二个会使处理器延迟。

例如(使用下面将要说明的指令集中的指令):

FROM R8 ;将R8存入(R13) SM (R13) SM (R14) ;将R0存入(R14) TO R1 FROM R2 ADD R3 ;执行:r1=r2+r3 TO R4 FRUM R5 ADD R6 ;执行:r4=r5+r6

注意这两个存储指令互相太接近了。由于RAM总线正忙于试 图完成第一存储指令因而第二个将多花去6个周期。

运行速度会更快的写入代码的较佳途径是由其他有用的代码间 隔开这两个存储指令。例如:

FROM R8 ;将R8存入(R13) SM (R13) TO R1 FROM R2 ADD R3 ;执行:r1=r2+r3 TO R4 FROM R5 ADD R6 ;执行:r4=r5+r6 SM (R14) ;将R0存入(R14)

在这种方式下,在第一存储指令导致向RAM写入的同时可并 行执行若干个指令,再在几个周期之后进行第二个存储操作。

下面说明的指令集包括一将寄存器写回到最后所用的RAM地 址的快速指令。这通过从RAM取出值,对它进行一些处理,随后将 它快速存回,故而允许“成批的”数据处理。

参见图4B,一直接数据锁存器74与指令总线相连。这一数据 锁存器允许指令本身提供数据源,这样就不需要由指令指定源端寄 存器。该直接数据锁存器74的输出与目的端总线Z相连。它转而与 寄存器块76的一个规定的寄存器相连。指令译码电路60对“直接” 数据指令译码并开始执行相应的向寄存器传送的操作。

示于图4B中的GET B(取字节)寄存器98是与前面所述的延 迟/缓冲读出操作一起使用的。在这方面,已有技术的处理器由于 广泛地利用存取时间相对慢的ROM,只要执行到ROM,一般就不 得不等待它完成数据读取。而利用下面说明的延迟/缓冲读取机制, 在完成数据读取时还可执行其他操作。按照该机制,不管以什么方 法对寄存器块76中的寄存器R14存取或修改,就自动地在R14内 容所标识的地址起动对ROM或RAM的读取。

如图4B所示,寄存器R14与ROM控制器104相连。不论何 时,以任何方式修改寄存器R14的内容,ROM控制器104就起动 对ROM的存取。对ROM存取的结果经与ROM数据总线ROMD 相连的多路转换器装载到GET B寄存器98中。下面列出的指令允 许对在GET B寄存器98中缓冲的信息进行存取。该信息经多路转 换器100装上目的端总线Z随后进入到寄存器块76中的某个寄存 器。

在这种方式下,若已知从ROM读取数据要花去一定个数的处 理周期,就可起动那读取操作并在起动了这数据读取之后,Mario 芯片不是等着不执行其它操作,而是能执行例如与数据读取无关的 代码。GET B寄存器98还可以用来存储经如图4B所示的多路转换 器102从RAM6、RAM8检取出的信息。

在寄存器块76中配备有十六个16位寄存器(R0-R15)。寄存 器R0-R13是通用寄存器(尽管其中某些寄存器往往用于下面所说 明的专用目的)。如上所述,寄存器R14被用作为读出存储器的指 针,当被修改时,就起动从ROM(或RAM)的读出周期。读出的字 节被存储在临时的缓冲器(GET B寄存器98)以便以后由GET L (取低字节)或GET H(取高字节)命令存取。寄存器R15是程序计 数器。在每个指令开始执行时它指向正要存取的下一个指令。

寄存器R0是一通用寄存器,一般用作累加器。对于大多数单个 周期的指令它还是缺省的源端和目的端寄存器。例如,若想要使R0 和R4的内容相加在一起就只须明显地指定寄存器R4。

当执行循环指令时就专用寄存器R11、R12和R13。寄存器R13 存储循环顶端所要执行的指令的地址,而寄存器R12存储循环所要 执行的次数。若寄存器R12的内容非零,则将在R13内容所指定的 地址的指令装到程序计数器(R15)并且执行。寄存器R11存储循环 完成后所要返回的地址。

寄存器控制逻辑78与寄存器块76相连并控制对通用寄存器 R0-R15的存取。根据正要执行的特定指令的格式,指令译码逻辑 60将指定一个或多个寄存器R0-R15。寄存器控制逻辑78指定哪 个寄存器是所要执行的下一条指令需要利用的。寄存器控制逻辑78 将相应的寄存器输出送到X和Y总线。另外,如图4B所示,在寄 存器控制逻辑78的控制下,相应的寄存器R0-R15从Z总线接收 信息。

ROM控制器104一旦收到来自Super NES地址总线HA或来 自Mario芯片的地址就对那地址进行存取。ROM控制器104将在 图13中更详细地示出。从ROM10存取的信息可以装到超高速缓 存RAM94以便快速地执行指令。ROM控制器104和RAM控制 器108都具有在Super NES的和Mario芯片的存取要求间进行仲 裁的总线仲裁单元。

如后面会进一步说明的那样,Mario芯片还利用状态寄存器 (例如在寄存器块76中或在RAM6、RAM8中),这些寄存器可由 Super NES CPU存取,可存储用于标识状态条件的标志,例如0标 志、进位标志、正负符号标志、溢出标志、“运行(GO)”标志(1表示 Mario芯片正在运行而0表示Mario芯片停止运行);ROM字节读 取正在进行标志(表示寄存器R14被存取过);各种方式指示标志包 括ALT1标志、ALT2标志、直接低字节和直接高字节标志,和指示 源寄存器和目的寄存器已由“WITH”前缀命令设定过的标志,和中 断标志。

以图4A和图4B中的方框图形式表示的Mario芯片由Super NES调用,使Mario芯片每秒钟多次接通和关断来执行任务。起初 当Super NES开启时,存储在ROM10中游戏程序被引导。注意在 由Super NES处理器和Mario芯片处理器执行游戏程序之前,游 戏卡首先被认证。顺便解释一下,按照美国专利USP 4,799,635指 出的方法,可先将Super NES CPU置于复位状态,执行与游戏卡 和Super NES主控制台相关联的认证处理器的认证程序来进行这 类认证。

Mario芯片一开始处于关断状态。在这一时刻,Super NES可 不受限制地对游戏卡程序ROM和游戏卡RAM存取。当Super NES需要利用Mario芯片的处理能力来执行图形操作或数学运算 时,Super NES在游戏卡RAM(或在规定的Mario寄存器)中存 储它需要Mario芯片处理的相应的数据,并将所要执行的Mario程 序的地址装入Mario芯片的程序计数器。要由Mario芯片处理的数 据可以是必须旋转和放大或缩小的目标的规定的X、Y坐标数据。 Mario芯片能执行会实施算法来控制具有不同个数的子画面或活动 目标的背景和前景的程序。利用Mario芯片的提高速度的增强硬件 和软件,可使这些操作获得高速性能。

应用Mario芯片来处理子画面能相当大地扩展整个电视游戏 系统的能力。例如,Super NES每帧只限显示128个子画面。随着 运用Super Mario芯片实际上可显示数百个子画面,并例如使它们 旋转。

当Mario芯片完成了由Super NES所请求的功能,就执行 STOP指令,产生一中断信号并传输到Super NES以表明Mario芯 片已完成了它的操作——这转而表明了它已准备好执行下一个任 务。

Mario芯片可用于执行诸如高速乘法运算这类小任务或可用于 画一幅满是子画面的画面。在任何一种情况,只要Super NES在 RAM或ROM总线正由Mario芯片使用的时候不去占用这些总 线,Super NES可自由地与Mario芯片并行地进行处理。注意即使 Super NES交给Mario芯片对游戏卡上的RAM和ROM总线的控 制,Super NES还是可以执行从示于图2中的其工作RAM32出来 的程序。这样,通过将所要执行的Super NES程序从程序ROM复 制到它的工作RAM,而与此同时由Mario芯片执行程序,整个系 统的吞吐量就可得到提高。

示于图5中的流程图表示出为起动Mario芯片从ROM在所要 求的地址处读取并执行代码而由主CPU(例如Super NES CPU)所 执行的“运行Mario(RUN MARIO)”程序的操作顺序。由图5代表 的例行程序一般是在将该程序从程序ROM10复制到示于图2中 的工作RAM32之后由Super NES CPU执行。每当要Mario芯片 进行操作时,就由主CPU执行这例行程序。

如方框125所示,当执行主CPU例行程序RUN MARIO时, 首先完成包括保留Super NES寄存器在内的初始化操作。在初始化 步骤期间,该例行程序从程序ROM10复制到主CPU的工作 RAM32中。

如方框127所示,存储着所要执行的Mario程序代码的ROM 10代码存储区被装进Mario芯片的某一寄存器。另外如方框129所 示,在代码存储区中的实际地址被存储在Mario芯片的屏面基址寄 存器中。

此后,如方框131所示,通过指明将使用4种、16种还是256 种彩色方式来设定I/O输入/输出方式。这些方式对应于主CPU所 运行的彩色方式。另外还设定按可显示字符的个数来限定屏面高度 的方式。

另外还设定将对ROM和RAM总线的控制交给Mario芯片的 方式位。对ROM和RAM总线的控制可分开选定,因而Mario芯 片可设定为它对ROM总线、对RAM总线或对两者进行存取的方 式。若对ROM和RAM均设定“Mario占用(Marioowner)”方式, 则主CPU就不能从ROM或RAM读出或向ROM或RAM写入。 注意若主CPU试图在Mario芯片正使用程序ROM总线时对程序 ROM存取,Mario芯片有一种向Super NES返回伪地址的机能。 向该地址的转移会使Super NES一直被占有直到Mario芯片不再 需要对游戏卡ROM总线进行存取。

如方框133所示,在Mario芯片的程序计数器装上存储着 Mario程序必须执行的第一条指令的地址之后Mario芯片开始运 行。

主CPU然后等待从Mario芯片来的中断信号(方框135)。当接 收到一中断信号,Super NES被告知Mario芯片已完成了它的运行 并已停止(方框137)。如果未收到这类中断信号,则主CPU继续等 待中断(方框135)。在这一期间,Super NES可以通过执行出自示 于图2中的其工作RAM32的程序而与Mario芯片的运行相并行 地执行程序代码。

Super NES随后检验状态寄存器(例如在Mario芯片寄存器块 76中)以确定表明Mario芯片正在运行的Mario芯片的“GO”标志 是否已设定(137)。另外,Mario芯片的状态寄存器中的中断标志被 设定以表明Mario芯片是主CPU所收到的中断信号的源。这样,在 主CPU接收到中断信号之后(135),对相应的Mario状态寄存器检 测以确定Mario芯片是否是中断源(相对于例如是表明垂直回扫消 隐间隔的中断信号)。若Mario芯片已停止运行(137),则清除对于 RAM和ROM的Mario占用方式位,完全由Super NES对ROM 和RAM进行存取。Super NES从该例行程序(141)退出并返回在 进入RUN Mario程序前它所执行的程序点。

当CPU22游戏程序使Mario芯片进入ROM Mario占用方 式,它必须主动地停止对ROM的存取。任何时候只要CPU22因某 些原因需对ROM存取,它就简单地关闭ROM Mario占用方式。当 Mario芯片再一次需要对ROM存取时,Mario芯片会自动地在那 里等待,直到ROM Mario占用方式再一次还给它。若它运行来自内 部超高速缓存RAM的程序就可完全不需要这样做。

若Mario芯片处于对于ROM的Mario占用方式,CPU22游戏 程序不要试图从ROM读出任何东西是重要的。当发生某个中断是, 例如因垂直回扫消隐,它引起不可屏蔽中断(NMI),CPU22就自动 地试图从ROM读取它的中断向量。这是不希望的,因为CPU已明 确地告知Mario芯片它会避开ROM,而后来发生中断,它还是要 从ROM读取。在这种情况,即尽管处于Mario占用方式,但CPU 22仍要对ROM存取的情况下,就会使Mario芯片假设这是中断向 量请求。

在ROM Mario占用方式下,读取中断向量期间,Mario芯片 将把中断向量重新定位到Super NES的内部工作RAM32中栈区 的底部。例如,如果通常中断向量是$00:ffec它就JUMP(转移) 至位置$00:010c。类似地所有来自$00:ffeX的中断向量都使 CPU22 JUMP到它们相应的位置$00:010X。这项技术在CPU 22不该对ROM10存取时避免它存取ROM10,而是把它转移到 Super NES的机载RAM32中。注意基于RAM的中断向量必须含 有向中断处理程序的转移或分支转移。即那里应该存有实际代码而 不仅仅是向量地址。当Mario芯片不处于Mario占用ROM的方式 时,则仍使用平常的ROM中断向量,因而最好继续在这些位置指 向相同的地址,以运行到与基于RAM的中断向量相同的地方。

                     指令集

Mario芯片指令集为对高速图形和其他处理算法的编程提供了 有效的手段。下面对某些指令作简明的说明之后,对不同指令所使 用的某些寄存器作出说明。还包括指令集中的指令进行详细的罗列。

指令是8位指令,一般在一个时钟周期内执行。但这些指令可 由8位前缀指令改动。Mario芯片指令集包括一独特的寄存器优先 代用系统,允许程序员在任何指令之前指定目的端寄存器和两个源 端寄存器。没有这些“前缀”的优先代用,指令将只在累加器上运行。 这样该指令集是具有无数组合的可变字长的指令集。这里有一些一 个字节长、在一个周期内运行的基本指令。通过加上前缀指令,程序 员就能扩展这些指令的作用。指令可视程序员的需要为8、16或24 位。

Mario处理器利用指令启动执行高速的、机载超高速缓存RAM 的程序和对存储器延迟/缓冲的I/O。利用单周期的像素标绘命令, 启动采用上述像素标绘硬件的操作,就能有效地进行图形处理。

在列出Mario指令集之前,先在下面说明由处理器在执行指令 时设定或存取的各种存储器变换的寄存器。首先列出状态标志寄存 器。状态寄存器是16位寄存器,下面标明与该寄存器中16位的各 位相关的标志。 状态标志寄存器16位 位    标志 0    -    备用 1    z    零标志 2    c    进位标志 3    s    符号标志 4    v    溢出标志([位14向位15进位]XOR       [位15向进位位进位])     g    运行标志:1 Mario芯片运行                 0停止 6    r    (R14)ROM字节读取正在进行 7    -    备用

“GO”标志(位5)设定为“1”状态就表明Mario芯片正在运行, 而设定为“0”状态就表明Mario芯片已停止运行(其结果是产生一 中断信号送到Super NES)。该标志位由Super NES处理器检验。位 6是设定来表明当前正在进行ROM字节的读取。列在下面的取 (GET)字节指令要等该标志清零表明已完成数据读取后才得以执 行。状态寄存器的这些最低有效位可以独立地或与余下的8位一起 由Mario芯片处理器或主CPU读出。状态标志寄存器的最高有效 位由规定的前缀指令设定,定义指令解释的各种方式。 位   方式 8    alt1    变更(ADD→ADC,SUB→SBC等…) 9    alt2    变更(ADD→ADD#,SUB→SUB#等…) 10   il      立即字节低位(在ih前进行) 11   ih      立即字节高位(缓冲低位字节直到高位字节就绪) 12   b       设定SReg和DReg,由WITH设定 13   -       备用 14   -       备用 15   irq     中断标志

在如上所述的ALT1方式时,ADD(加法)指令会解释为ADD WITH CARRY(带进位加法)指令,而SUB TRACT(减法)指令 会解释为SUBTRACT WITH CARRY(带进位减法)指令。指令 ALT1起动该方式。

ALT2指令将对ADD指令的解释变更为ADD WITH IMME- DIATE DATA(用立即数据的加法),而对SUBTRACT则变更为 SUBTRACT IMMEDIATE DATA(减去立即数据)。“立即”数据 是紧接着指令以字节给出的。注意指令ALT3会把位8和位9都设 定为逻辑“1”电平。位10和位11根据该立即数据是立即高位字节还 是立即低位字节来设定。状态寄存器的位12定义“b”方式,这里通 过利用前缀指令“WITH”设定源端寄存器和目的端寄存器。状态寄 存器的位15存储有在Mario芯片已停止运行之后设定的Mario中 断信号。

除了上述的状态寄存器以外,Mario芯片还包括许多寄存器。 如上所述,Mario芯片包括16个如图4A和4B的寄存器块76的说 明中所描述的16位宽的寄存器。这些寄存器大多数是通过用寄存器 并能用作数据和地址的存储。但是如上面所注明的,寄存器R15在 所有时候却总是用作程序计数器。一般来说寄存器起两方面作用, 用于同主CPU通信和控制执行程序。另外Mario芯片还采用其他 寄存器,其功能在下表中给出。 寄存器       专用功能 r0           缺省的D Reg和S Reg r1           PLOT指令用的X坐标 r2           PLOT指令用的Y坐标 r3           无 r4           LMULT指令结果的低位字 r5           无 r6           FRMULT和LMULT指令用的乘数字 r7           MERGE(合并)指令用的源1 r8           MERGE(合并)指令用的源2 r9           无 r10          无 r11          用于子程序调用的连接寄存器 r12          用于LOOP(循环)指令的计数 r13          LOOP指令分支转移的地址 r14          ROM地址,一经改动就开始从ROM读取字节 r15          程序计数器 其他寄存器 8位PCBANK    程序代码存储区寄存器 8位ROMBANK   程序数据ROM存储区寄存器64K存          储区 8位RAMBANK   程序数据RAM存储区寄存器64K存          储区 16位SCB      屏面基址 8位NBP       位平面数 8位SCS       屏面列尺寸选择:          256、320、512、640、1024、1280          (屏面16和20个字符高,在2、4和8          个位平面中)

Mario芯片还包括一彩色方式CMODE寄存器。在该寄存器中 有4位在例示性实施例中用以产生下面所述的特殊效果。通过设定 CMODE寄存器所建立的效果,如下面例子中所阐明的那样,是按 照所设定的是16还是256彩色分辨率方式而有所不同。

            CMODE寄存器各位如下: CMODE位0

标绘彩色0位(非透明位)

在16彩色方式时:

若位0=1和所选择的彩色半字节=0则不作标绘

在256彩色方式且位3=0时:

若位0=1和彩色字节=0则不作标绘

在256彩色方式且位3=1时:

若位0=1和彩色低半字节=0则不作标绘

注意:透明性有效ON=0

      透明性无效OFF=1

透明性OFF的唯一用途是将—区域填以0

(用来清屏) CMODE位1

晃动位

在16彩色方式时晃动(高/低半字节给出两种彩色)

若(xpos XOR ypos AND 1)=0选择低半字节

若(xpos XOR ypos AND 1)=1选择高半字节

若透明性有效且所选择的彩色半字节为0则不作标绘

在256色方式时晃动应当没有效果 CMODE位2。

高半字节彩色位

在16彩色方式或在256彩色方式且CMODE位3被置位时

当本位被置位,COLOUR命令将彩色寄存器的低半字节设定 为源字节的高半字节

(用来析取作为另一子画面的高半字节存储的16彩色的子画 面)

若彩色寄存器的低半字节为0则在透明性有效时不作标绘。 CMODE位3

复杂位

仅用于256彩色方式。该位被置位时,彩色高半字节就被锁, COLOUR命令只改变低半字节。

仅从低半字节计算透明性。

在标准的256彩色方式,如果透明性有效,它是从所有位计算 出的

;16彩色方式例

iht r0,$C0 colour ;置彩色$C0 ibt r0,%0000 ;置0 cmode ibt r0,$97 colour plot ;标绘彩色$7 ibt r0,$30 colour plot ;不作标绘,因为彩色 为$0 ;(透明性有效且低半字 节=0) ibt r0,%0001 ;置位1 cmode ibt r0,$40 colour plot ;标绘彩色$0 ;(透明性无效) stop

;16彩色方式且置位2的例

ibt r0,$C0 colour ;置彩色$C0 ;256彩色方式且置位3的例 ibt r0,$C0 colour ;置彩色$C0 iht r0,%1000 ;置位3 cmode ibt r0,$47 colour plot ;标绘彩色$C7 ibt r0,$50 colour plot ;不作标绘,因彩色为 $C0 ;(透明性有效且低半字 节=0) ibt r0,%1001 ;置位3和位1 cmode ibt r0,$60 colour plot ;标绘彩色$C0 ;(透明性无效) stop

;256彩色方式且置位3和位2的例

ibt r0,$C0 colour ;置彩色$C0 ibt r0,%1100 ;置位3和位2 cmode ibt r0,$74 colour plot ;标绘彩色$C7 ibt r0,$03 colour plot ;不作标绘,因彩色为 $C0 ;(透明性有效且低半字 节=0) ibt r0,%1101 ;置位3、位2和位1 cmode ibt r0,$08 colour plot ;标绘彩色$C0 ;(透明性无效) stop

许多Mario芯片寄存器与特殊功能有关联。如上表中所表明 的,若不另外指定,系统就将寄存器R0缺省为某一特殊指令所需 的目的端寄存器或源端寄存器。寄存器R0还可用于ALU的累加 器。如上所述乘法指令返回一个32位的结果。最低有效的16位存 储在寄存器R4中。而寄存器R6则结合有符号带小数的乘法指令 (FRMULT)和长字节乘法指令(LMULT)一起被采用。

寄存器R7和R8用于执行合并指令。该指令取用两个规定的寄 存器(即寄存器R7、R8)并将它们合并在一起以形成子画面的座标 数据。这种座标数据是用于对ROM表寻址以便将规定的子画面映 像在规定的多边形上。这指令通过组合两寄存器的部分来定义包含 在要映像在多边形上的子画面中的下一个像素的彩色的地址,从而 有助于有效地执行质地映像操作。

寄存器R11和R13是用来控制子程序执行的。寄存器R11用 作子程序调用的连接寄存器并存储程序计数器的内容加1。寄存器 11的内容定义循环结束后须存取的地址。寄存器R12用来存储规定 所要执行的循环次数的计数。循环的地址则存储在寄存器R13中。

如上所述,只要寄存器R14的内容被修改,就从ROM在寄存 器R14中所存储的地址处读出一字节。在这种方式下,可结合下面 提到的GET字节指令实现延迟或缓冲的READ操作。

回到上表中的“其他寄存器(Other Registors)”,程序从其开始 执行的程序ROM位置是采用24位地址进行编址。该地址最低有 效的16位在程序计数器中得到。而确定程序存储区的最高有效位则 存储在程序代码存储区(PC Bank)寄存器。

ROM存储区寄存器(ROM BANK)存储最高有效位,以允许 Mario芯片处理器取得存储在ROM10中的程序数据,这些最高有 效位是被附加存储在寄存器R14中的16位ROM地址上。类似地, RAM存储区寄存器(RAMBANK)存储高阶地址位以允许Mario 芯片处理器存取RAM中的程序数据。为有效地扩展Mario处理器 的寻址范围,可将RAM和ROM的存储区寄存器的内容与Mario 芯片的ROM和RAM存取指令一起运用。

屏面基址寄存器(SCB)被用来存储正被建立、旋转、放大或缩 小的子画面或目标的虚拟位映像的地址。执行PLOT像素指令时, 屏面基址寄存器SCB存储RAM中被存取和被写入的地址。

寄存器NBP被用来存储正在使用的位平面数。它一般表明利用 2、4或8个位平面。另外,屏面列向尺寸寄存器SCS被用来按照每 列中所包含的字符数确定关于虚拟的位映像的信息。

下面列出的Mario芯片指令集说明指令的助记符和在对相应 的指令译码时所执行的相应的功能。首先在下面对不是不言自明的 有关指令的某些功能提出简要的评述。

STOP指令是在Mario芯片已完成其操作时执行的,并用以置 “GO”标志为零,同时还产生中断信号给主CPU。

CACHE指令用以定义要复制到Mario芯片超高速缓存RAM 中并从该RAM执行的那部分程序ROM。执行CACHE指令时,程 序计数器的内容被装到超高速缓存基址寄存器并使下面要说明的超 高速缓存标记复位。

Mario芯片包括一系列延迟的分支转移指令,其中接着该转移 的指令如下表所示的那样执行。转移去的地址是相对于程序计数器 的内容的。指令集包括许多种基于下表中所列出条件的延迟转移。

Mario芯片包括许多“前缀”指令,即至/由/自(to/with/ from)。这些前缀指令涉及后续指令的数据往来。例如“TO”前缀为下 一指令设定目的端寄存器(DReg)。“FROM”前缀为下一指令设定源 端寄存器。而“WITH”前缀则两者都设定。

许多指令在操作码中指定第二源寄存器。若没有前缀指令设定 SReg和DReg它们就被缺省为R0。在不是前缀指令的各个指令后, SReg和DReg两者均设定为R0。若Dreg被设定为R15(程序计数 器),因而使下一指令在R15中存储其内容时,就会起动延迟一周期 的转移。

其它前缀指令在状态寄存器的高字节中设定标志以改变后续指 令的操作。所有无前缀指令都使状态字的高字节清零。下面是有关 后续指令可以怎样通过前缀指令被修改的例子。

1sr ;r0=r0向右移1位 to r4 1sr ;r4=r0向右移1位 from r4 1sr ;r0=r4向右移1位 alt1 from r6 to r5 add r7 ;r5=r6+r7+进位 alt1 with r3 add r3 ;r3=r3+r3+进位(6502 rol)

若在状态寄存器中量上“b”标志,“TO”指令就修改为象操作 “MOVE”(赋值)指令一样,TO指令确定信息传送去的寄存器而 FROM指令则确定信息源。

STW指令在缓冲器中存储一特别的字,这样就无须一直等到 完成存储操作后才执行后边的指令。在这种方式下,采用比处理器 慢的RAM并不一定会使处理器速度减慢。

LOOP指令的执行将使得通用寄存器R12内容递减1。若R12 的内容非零,则开始向R13中所确定的地址转移。

Alt1、Alt2和Alt3是设置状态寄存器中上面提到的标志以按 下表中所示的不同的方式解释所执行的指令的前缀指令。

PLOT指令标识所要标绘的像素的X和Y屏面坐标,并在与 X与Y坐标(如寄存器R1和R2中所表示的)相对应的屏面位置上 标绘由COLOR指令所确定的彩色。PLOT像素指令包括使R1内 容的自动递增,以有助于高速标绘水平线而免除一额外的递增指 令。

若Alt1标志被置位则标绘指令被解释为READ PIXEL(读出 像素)指令(RPIX)。通过执行读出像素指令,在指定屏面位置上的 像素彩色被读出,它还可用来将不想要的像素信息从标绘硬件冲 掉。

读出像素指令RPIX实质上是反过来运用标绘硬件,从字符的 矩阵读出以确定在指令中所指定的某一特定像素的颜色。COLOR 指令向彩色硬件提供可由指定的源端寄存器的内容确定的下一个像 素的彩色。

“CMODE”指令设定彩色方式并能用于产生如上面提供的例中 所展示的不同特殊效果。例如,利用CMODE指令可使交替的像素 以不同彩色交替变化,形成浓淡变化,从而产生晃动效果。该 CMODE指令还能用来控制透明性从而使子画面的显示会勾划出背 景显示。通过设定如上例子的有关彩色方式的标志来确定透明性。

指令集还包括在旋转多边形的计算中用来确定所要显示的目标 的梯度或斜率的小数带符号乘法。

递增指令若与寄存器R14一起使用就会起动从ROM的读出。 GETC指令会从ROM取出所存取的字节并将装入彩色寄存器中。

下表说明按照目前较佳实施例的例示性Mario芯片的指令集 (包括上面已讨论过的那些指令)。

                    指令集 十六进制代码  助记符    功能 $00           STOP      使Mario芯片停止运行并产生

                    65816 IRQ g=0 $01           NOP       不操作1周期 $02           CACHE     将超高速缓存基址置为PC并且使

                    超高速缓存标志复位(只要PC不

                    等于当前超高速缓存基址)若超高

                    速缓存基址<>r15则超高速缓存基

                    址=r15,使超高速缓存标志复位 $03           LSR       逻辑右移

                    DReg=SReg LSR1 $04           ROL       带进位循环左移

                    DReg=SReg ROL1 $05 nn        BRA sbyte 总是作延迟转移

                    r15=r15+带符号字节偏移 $06 nn        BGE sbyte 若大于或等于则延迟转移

                    若(s XOR v)=1则r15=r15+带

                    符号字节偏移 $07 nn    BLT sbyte     若小于则延迟转移

                    若(s XOR v)=0则r15=r15+带

                    符号字节偏移 $08 nn    BEQ sbyte     若等于则延迟转移

                    若z=1则r15=r15+带符号字节

                    偏移 $09 nn    BNE sbyte     若不等于则延迟转移

                    若z=0则r15=r15+带符号字节

                    偏移 $0a nn    BPL sbyte     若为正则延迟转移

                    若s=0则r15=r15+带符号字节

                    偏移 $0b nn    BMI sbyte     若为负则延迟转移

                    若s=1则r15=r15+带符号字节

                    偏移 $0c nn    BCC sbyte     若进位清零则延迟转移

                    若c=0则r15=r15+带符号字节

                    偏移 $0d nn    BCS sbyte     若进位置位则延迟转移

                    若c=1则r15=r15+带符号字节

                    偏移 $0e nn    BCC sbyte     若溢出清零则延迟转移    

                    若v=0则r15=r15+带符号字节

                    偏移 $0f nn    BVC sbyte     若溢出置位则延迟转移

                    若v=1则r15=r15+带符号字节

                    偏移 $10-$1f   TO r0…r15    (前缀)设DReg为rn(下一操作码

                    的目的端寄存器)

                    DReg=rn 若b:     MOVE          rn=SReg(无标志置位) $20-$2f    WITH r0…  (前缀)设DReg和SReg为rn

       r15        (源和目的和b标志)

                  DReg=rn

                  SReg=rn

                  b=1 $30-$3b    STW(rn)    在rn中的地址处存储SReg

                  RAM[rn]=SReg(字低/高被缓

                  冲)

                  (偶数地址上的字正常存储) 若alt1:   STB(rn)    在rn中的地址处存储SReg的低

                  字节

                  RAM[rn]=SReg.1(字节被缓冲) $3c:      LOOP       使r12递减1若r12<>0则延迟转

                  移到r13中的地址

                  r12=r12-1

                  若r12<>0,则r15=r13

                  (TO/WITH/FROM不起作用) $3d        ALT1       (前缀)标志alt1置位

                  alt1=1 $3e        ALT2       (前缀)标志alt2置位

                  alt2=1 $3f        ALT3       (前缀)标志alt1&alt2置位

                  alt1=1

                  alt2=1 $40-$4b    LDW(rn)    从rn中的地址处取出装到DReg

                  DReg=RAM[rn](字低/高等待)

                  (偶数地址上的字正常装入) 若alt1:   LDB(rn)    从rn中的地址处取出(无符号字

                  节)装到DReg

                  DReg.h=0

                  DReg.l=RAM[rn](字节等待) $4c            PLOT           在r1,r2(X、Y)处标绘像素且使r1

                          递增(N.B.并未检验r1和r2是否

                          在屏面上,但会在RAM的任何地

                          方绘制)

                          标绘(r1,r2)

                          r1=r1+1 若alt1:       RPIX           读出在r1、r2(x、y)处像素的彩色

                          DReg=点(r1,r2) $4d            SWAP           交换字节

                          DReg.h=SReg.l

                          DReg.l=SReg.h $4e            COLOUR         设定PLOT彩色

                          标绘彩色=SReg 若alt1:       CMODE          设定PLOT彩色方式

                          标绘彩色方式=SReg $4f            NOT            DReg=对SReg取反(NOT

                          SReg) $50-$5f        ADD r0…r15    DReg=SReg+rn 若alt1:       ADC            DReg=SReg+rn+c 若alt2:       ADD            DReg=SReg+#n 若alt1+alt2:  ADC            DReg=SReg+#n+c $60-$6f        SUB r0…r15    DReg=SReg-rn 若alt1:       SBC            DReg=Reg-rn-c 若alt2:       SUB            DReg=SReg-#n 若alt1+alt2:  CMP            SReg|rn(z,s,c,v) $70          MERGE          将r7和r8的高字节合并到DReg

                        中

                        DReg.h=r7.h

                        DReg.l=r8.h

                        在该结果基础上设定标志:

                        s=b15 OR b7

                        v=b14 OR b6 OR s

                        c=b13 OR b5 OR v

                        z=b12 OR b4 OR c $71-$7f      AND r1…r15    DReg=SReg AND rn 若alt1:     BIC            DReg=SReg AND NOT rn 若alt2:     AND            DReg=SReg AND#n 若alt1+alt2:BIC            DReg=SReg AND NOT#n $80-$8f      MULT r0…      DReg=SReg*Rn(带符号的8×8

         r15            位) 若alt1:     UMULT          DReg=SReg*Rn(不带符号的8

                        ×8位) 若alt2:     MULT           DReg=SReg*#n(带符号的8×8

                        位) 若alt1+alt2:UMULT          DReg=SReg*#n(不带符号的8

                        ×8位) $90          SBK            将SReg存到上一次使用的RAM

                        地址 $91-$94      LINK1…4       将返回地址连接到r11

                        r11=r15+1…4 $95          SEX            符号从低字节扩展到字

                        DReg.[b15-b7]=SReg.[b7]

                        DReg.l=SReg.l $96          ASR            算术右移

                        DReg=SReg ASR1 若alt1:    DIV2          除以2(带舍入)

                      DReg=SReg ASR1

                      若DReg=-1则DReg=0 $97         ROR           带进位循环右移

                      DReg=SReg ROR 1 $98-$9d     JMP r8…r13   转移到rn中的地址

                      r15=rn(延迟转移) if alt1:   LJMP          长转移到rn中的地址

                      (ROM Bank来自SReg)

                      并使超高速缓存复位

                      r15=rn(延迟转移)

                      程序ROM存储区寄存器=SReg $9e         LOB           低字节

                      DReg.h=0

                      DReg.l=SReg.l $9f         FMULT         小数带符号乘法

                      DReg=(SReg*r6).hw(带符号的

                      16×16位乘法)

                      c=(SReg*r6).b15 若alt1:    LMULT         长字节带符号乘法

                      DReg=(SReg*r6).hw(带符号的

                      16×16位乘法)

                      r4=(SReg*r6).lw

                      c=(SReg*r6).b15 $a0-$af nn    IBT r0…r15,sbyte       将符号扩展的字节装到

                                   rn中

                                   rn=立即字节(符号扩

                                   展的) 若alt1:      LMS r0…r15,byte        从绝对的偏移字节地址

                                   取出装到rn中

                                   rn=RAM[byte<<1]

                                   (字数据) 若alt2:      SMS r0…r15,byte        将rn存储到绝对的偏

                                   移字节地址

                                   RAM-[byte<<

                                   1]=rn(字数据) $b0-$bf       FROM r0…r15             (前缀)设SReg=rn

                                   SReg=rn 若b:         MOVES                    DReg=rn

                                   (z,s&v(符号低字

                                   节)标志) $c0           HIB                      高字节

                                   DReg.h=0

                                   DReg.l=SReg.h $cl-$cf       OR r1…r15               DReg=SReg OR Rn 若alt1:      XOR                      DReg=SReg XOR Rn 若alt2:      OR                       DReg=SReg OR#n 若alt1+alt2: XOR                      DReg=SReg

                                   XOR#n $do-$de       INC r0…r14              使rn递增

                                   rn=rn+1

                                   (TO/WITH/FROM

                                   不起作用) $df           GETC                     从ROM缓冲器取出字

                                   节来标绘彩色 若alt2:          RAMB                RAM数据存储区寄存

                                  器=SReg 若alt1+alt12:    ROMB                ROM数据存储区寄存

                                  器=SReg $e0…$ee          DEC r0…r14         使rn递减

                                  rn=rn-1

                                  (TO/WITH/FROM

                                  不起作用) $ef               GETB                从ROM缓冲器取出不

                                  带符号的字节送到

                                  DReg

                                  DReg=ROM缓冲器

                                  字节.零扩展 若alt1:          GETBH               从ROM缓冲器取出送

                                  至DReg的高字节

                                  DReg=ROM缓冲器

                                  字节。与低字节合并

                                  DReg=(SReg &

                                  $FF)+(byte<<8)(采

                                  用WITH) 若alt2:          GETBL               从ROM缓冲器取出送

                                  至DReg的低字节

                                  DReg=ROM缓冲器

                                  字节。与高字节合并(采

                                  用WITH) 若alt1+alt2:     GETBS               从ROM缓冲器,取出

                                  带符号字节送至DReg

                                  DReg=ROM缓冲器

                                  字节。符号扩展 $f0-$ffnnnn       LWT r0…r15,word   将立即字装到rn中rn

                                  =立即字(经缓冲的) 若alt1:    LM r0…r15,word    从绝对的字地址取出装

                            到rn中

                            rn=RAM[字地址](字

                            数据) 若alt2:    SM r0…r15,word    将rn存到绝对的字地

                            址

图6至图17更为详细地示出图4A和图4B中用方框图示出的 各组成部分。为更清楚地展现本发明的独到特征,那些对本技术领 域的技术人员来说是常规或显然的,以及会使这些独到的特征不能 被清楚看到的电路细节不在下面的图中示出。

可用作ALU单元50的例示性算术逻辑单元示于图6。如图4A 和图6所示ALU50与X、Y和Z总线相连。因此,Mario芯片的通 用寄存器R0-R15与ALU相连。

ALU50经16位加法器/减法器152执行加法和减法功能, ALU50还包括常规的“AND”逻辑电路154,“OR”逻辑电路156,和 EXCLUSIVE OR(异或)”逻辑电路158。

ALU还包括常规的移位功能电路,其中任何进位位移位到最 高有效位位置而结果则经线160送到多路转换器164。另外,ALU 50执行常规的字节交换操作,可使载于总线上的最低有效字节和 最高有效字节交换,而结果则沿线162送到多路转换器164。X和Y 总线如图6所示与电路152,154,156和158相连。

加法器/减法器152,电路154,156,158的各自输出,移位输出 和交换功能输出与16位、6进1“出”的多路转换器164相连。根据 译出的指令,向目的端总线Z输出相应的结果。

加法器/减法器152除了从X总线接收16位,还根据送到多 路转换器150的指令译码器输入接收在总线Y送来的信息或指令 本身的信息。

ALU50还包括CPU标志发生电路166。CPU标志电路166产 生零,溢出,符号和进位信号以便于装到电路166中的至少一个标 志寄存器。CPU标志可由指令译码电路60置位,该电路对指令所 产生的进位起动、零起动,符号起动和溢出起动信号进行译码,根 据加法器/减法器152所确定的相应条件来使标志置位。还可根据 输入标志电路166的目的端(或结果)总线Z的内容使这些标志置 位。标志例如可用来触发基于较广的条件范围的条件转移操作。

图7、8A和8B更为详细地示出图4A中的像素标绘电路(52、 54、56和58)。该电路执行PLOT命令,它取出某一特定的X坐标 和Y坐标,并在那些屏面坐标处以由COLOR命令装载的彩色寄存 器54的内容所确定的彩色标绘像素。

Super NES如上面所注明的那样采用字符映像的显示屏面。标 绘硬件用以将像素坐标地址数据变换为字符映像的地址数据。

Super NES的字符是定义在位平面中的。字符可有2、4或8位 平面以确定4、16或256种彩色。字符定义的每个字节包括该字符的 一个像素行的位平面。这些像素从左到右,从高位到低位被确定。对 于256彩色方式操作,有8RAM位置需要更新。

像素标绘电路具有一个本地缓冲机构,它包括彩色矩阵206,该 矩阵可存储要显示的某一特定字节的所有各位,因为这些位可能最 终都需要更新。位平面计数器208与彩色矩阵电路206相连。像素 坐标从X和Y总线装载到像素X和像素Y寄存器202、204。在本 例示性实施例,通用寄存器R1和R2用作图7中示出的标绘X寄 存器202和标绘Y寄存器。这些寄存器接收按PLOT命令规定要标 绘的像素的X和Y座标。

标绘X和标绘Y寄存器202、204与基于全加器和半加器的字 符地址计算电路相连,该电路按地址输出到2位置滚桶式移位电路 214,进而与标绘地址寄存器216和地址比较器218相连。标绘X寄 存器的三个最低有效位与多路分解器212相连进而与位未决寄存器 210相连。

示于图8A中的标绘控制器200接收表明已对PLOT像素 (PLOT)或READ像素(RPIX)命令译码的信号以及下述其他控制 信号。标绘控制器200产生以下述方式使用的标绘电路控制信号。

如上所述,标绘控制电路200产生在像素标绘硬件52中使用 的控制信号。如图8A所示,像素控制电路200接收从位未决寄存器 210的输出,该输出是经AND门201与像素控制电路200相连的。 若位未决寄存器210的所有8位都被置位,就通知像素控制逻辑 200可跳过读出周期并可将彩色矩阵206的信息写到RAM。

像素控制电路200还响应PLOT命令起动其操作。像素控制逻 辑200也响应READ像素命令RPIX起动基本相同的操作,不过新 信息并不写到彩色矩阵206以输出到RAM。如上所述,若需要知道 屏面上特定像素的彩色就执行READ像素命令,该命令也可用来 将彩色矩阵206的现存信息冲掉。

控制器200还接收RAM完成控制信号RAM DONE,它表明 已完成RAM存取。如上所述,RAM完成信号还用来使标记彩色矩 阵206的位平面的位平面计数器208递增。标绘控制器200还接收 从地址比较器218来的PLEQ信号,这表明地址匹配无需将彩色矩 阵206的内容写到RAM,从而表明应继续对当前的彩色矩阵内容 更新。该标绘控制器200还接收告知标绘控制器200有关必须读出 和写入多少字节的屏面方式(SCR.MD)控制信号。

标绘控制电路200产生使彩色矩阵206的内容在它的第二缓冲 级缓冲的转储控制信号DUMP(结合图7和图8B一起参考)。控制 器200另外产生使位未决寄存器清零信号CLRPND和装载位未决 寄存器控制信号LDPND并将这些信号送到位未决寄存器210。另 外,控制器200产生与结合图8B说明的彩色矩阵单元相关的LD- PIX和BPR控制信号。

假定像素标绘硬件未被另外占用,指令译码器对PLOT命令的 译码和输入到标绘控制器200的PLOT信号就起动产生装载未决 (寄存器)信号LDPND。LDPND信号被送到位未决寄存器210而使 数据得以从多路分解器212装到位未决寄存器210中。清未决(寄存 器)信号CLRPND是响应表明未决数据已写到RAM去的RAM完 成信号RAMDONE而产生的。此后位未决寄存器闲置以供下一像 素标绘信息使用。

图8C中所示的是说明由标绘控制器200接收的信号,各种地 址和数据信号,其他有关的控制信号和标绘控制器所产生的上述输 出控制信号之间的关系的时序图。例示性的地址值、数据值等仅仅是 用于说明而示出的。

标绘硬件52如下面那样工作。当标绘控制器200确定标绘硬件 52未被占用,示于图4A中的彩色寄存器54的内容被装进8×8彩 色矩阵电路206的水平行。彩色矩阵206按行装载而按列读出。彩 色寄存器54的内容由COLOR命令更新。任何后续PLOT命令将 通过彩色寄存器54这个寄存器将彩色数据装进彩色矩阵。

彩色矩阵中装上彩色寄存器各位的垂直位置是由存储在标绘X 寄存器202中的3位最低有效位确定的。这样这标绘地址的三位最 低有效位就决定了彩色矩阵206中的所要更新的一行位。

位未决寄存器210是用来记录屏面字符的分节的哪些特定位正 被更新。寄存器210包括表明各位已被写到屏面的相关部分的16个 寄存器标志。该位未决寄存器210是响应由标绘控制器200所产生 的信号LDPND而被装载的并由信号CLRPND清除。

若为更新在相同区域的屏面映像而要执行后续的标绘命令,一 给定位的操作就与装入到8×8彩色矩阵206的对应于像素的附加 彩色数据一同重复。另一位则利用存于标绘X寄存器202中的标绘 地址的最低有效位置设于位未决寄存器210中。特定位是经与标绘 X寄存器202相连的3路至8路多路分解器装载到位未决寄存器 210中。若所要更新的像素水平位置在8个像素以外,或它处在不同 的垂直位置时,则已写入矩阵206的数据必须读出到RAM6(或 RAM8)此后彩色矩阵206就可自由接收新的彩色数据。在接收到 要求写到RAM的后续标绘命令之前,彩色矩阵206的当前内容一 直在像素标绘硬件中例如在彩色矩阵206中被缓冲。

当来自彩色矩阵206的数据被写到RAM6或RAM8就通过 使用示于图7中的逻辑门,半加器和全加器进行地址变换计算以将 X、Y坐标变换成RAM地址。实际的地址计算是按照下面给出的注 释和例示性代码进行的。这些计算会随着所采用的是4、16还是256 彩色方式有所不同。所给出的例示性计算是针对256彩色方式的。

这些256彩色字符具有16字节的4组,各自确定位平面对共 有64字节。

位映像是通过将独特的字符放在所需屏面区的每个位置上而建 立的。当进行与Super NES相关的标绘时,最好以列组织字符。

例如(128个像素高的屏面)

字符号

0    16    32    …    …

     1     17    33    …

     2     18    24    …

     ·    ·    ·

     ·    ·    ·

     15    31    47    …

Super NES并不限于256个字符,故而位映像容量主要受到存 储器和DMA传送时间的约束。例如Mario芯片能在128和160个 像素高的屏面上标绘。最大屏面宽度是32个字符或256个像素。

下面的算法是举例说明如何采用按列组织的虚拟位映像控制像 素标绘。

先对所有的位平面从X坐标的三位最低有效位计算像素掩码。

像素号     掩码

0          %10000000

1          %01000000

7          %00000001

接下来利用去除了低3位的Y座标计算沿着一列的下行偏移 量,以给出沿一列的字符数,然后乘上字符大小。

屏面彩色    以字节为单位的字符大小

4           16

16          32

256         64

接下来从X座标去除低3位计算字符到顶的偏移,乘以列大 小。列大小是列的字符数乘以字符大小。

一般的列大小

彩色        字符高

            16         20

4           256字节    320字节

16          512字节    640字节

256         1024字节   1280字节

Y坐标的低3位给出沿字符向下的字节偏移。所有偏移与当前 位映像指针之和给出含有像素第一位平面的字节的地址。随后的位 平面交替地从上一次平面移上1字节和移上15字节。然后,像素各 位就可用像素掩码置位或清零。各位平面的位被置位或清零呈该像 素所需的存储在彩色寄存器54中的彩色数中相应位的状态。

示范码

;以65816代码在4个位平面上标绘用于我们的游戏演示 ;程序基本上是表驱动的 ;寄存器A、X和Y是16位 置彩色 ;取彩色并加倍 lda Colour asl a tax ;设置位平面0和1的彩色掩码 lda mask1 tab,x sta mask1 ;设置位平面2和3的彩色掩码 lda mask2 tab,x sta mask2 rts 标绘 ;取水平和垂直坐标 ;使两者加倍并送到Y和Z寄存器 lda plot x1 asl a tay ;Y是X坐标*2 lda plot y1 asl a tax ;X是Y坐标*2 ;取沿列向下的偏移 lda pyoftab,x ;加列偏移初值 clc adc pxoftab,y ;加两倍的缓冲器指示(选择位映像) clc adc drawmap tax ;X是含有所需要的像素的字从位映象基址的偏移 ;Y是像素的X坐标*2 ;作位平面0和1 lda.l bitmapbase,x ;取含有像素字 and pbittabn,y ;掩去老像素彩色 sta pmask lda maskl ;将彩色和像素掩码一起掩去 and pbittab,y ora pmask ;加入其他像素 sta.l bitmapbase,x ;存到位映像 ;作位平面2和3 lda.l bitmapbase+16,x and pbittabn,y sta pmask lda mask2 and pbittab,y ora pmask sta.l bitmapbase+16,x rts ;像素位掩码对的256字表 pbittab rept32 ;num_col dw $8080,$4040,$2020,$1010,$0808,$0404 $0202,$0101 endr ;字反向的上表 pbittabn rept 32 ;num_col dw $7f7f,-$4040,-$2020,-$1010,-$808,-$404,-$202,- $101 endr

;对位平面0和1的彩色掩码(彩色0至15)

mask1 tab dw $0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00, $ffff dw $0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00, $ffff

;对位平面2和3的彩色掩码(彩色0至15)

mask2 tab dw $0000,$0000,$0000,$0000,$00ff,$00ff,$00ff, $00ff dw $ff00,$ff00,$ff00,$ff00,$ffff,$ffff,$ffff, $ffff col_size equ.Number_char_rows*8*Number_bit_planes (16) (4)

;对字符列表起始位置的偏移

pxoftab temp=0 rept 32 ;字符列数 dw temp,temp,temp,temp,temp,temp,temp,temp temp=temp+col_size endr

 ;沿列表向下偏移

pyoftab temp=0 rept 32 dw temp dw temp+2 dw temp+4 dw temp+6 dw temp+8 dw temp+10 dw temp+12 dw temp+14 temp=temp+32 endr

更为仔细地参看图7,确定所要标绘的像素位置的屏面上的X 和Y坐标被装载到PLOT X和Y寄存器202和204(这些寄存器实 质上可以是寄存器块76中的R1和R2寄存器)。装入到PLOT X寄 存器202的标绘地址的3位最低有效位按指定的X和Y坐标确定 位平面字节中的哪一位将被写入。累加器R0的内容被装入到由标 绘X寄存器202的最低有效位所选定的彩色矩阵206的列。

若标绘X寄存器202是0,则定义该像素的8位的各位中将更 新最低有效位。随着标绘X寄存器202为0,3路至8路多路分解器 将使位未决寄存器中最低有效位置为逻辑“1”。

既然位未决寄存器210的相应位表明无需作修改位未决寄存器 210被RAM控制器用来表明无需从RAM写出的间隔。

位未决寄存器210用作像素掩码缓冲器以防止从RAM覆盖写 入新数据。为完成这一功能,如图7中所示,位未决寄存器210的内 容作为输入送到彩色矩阵电路206。

若BIT_PENDING寄存器210是0,则计算像素的屏面地址, 并将它装到标绘地址寄存器216,该字节中的像素位置用来使 BIT_PENDING寄存器210中的相同位置位。若BIT_PENDING 寄存器210是非零,则使BUSY标志置位。

若新计算出的地址等于PLOT_ADDR寄存器216的内容,则 新的像素位位置在BIT_PENDING寄存器210中置位并使BUSY 标志复位。

若新地址不同于PLOT_ADDR寄存器的内容,则采取以下步 骤。 步骤1

若BIT_PENDING寄存器210包含FFh则直接进行步骤3。 步骤2

从RAM的PLOT_ADDR+屏面基址处读取字节送到临时的 数据缓冲器PLOT_BUFF中。 步骤3

若BIT_PEND寄存器210所屏蔽的数据缓冲器中的各位全部 等于PLOT_COLOR寄存器矩阵的第0行,则直接进行步骤5。 步骤4

将PLOT_COLOR寄存器矩阵的第0行写入到由BIT_PEND- ING寄存器启用的PLOT_BUFF的所有位。将数据缓冲器内容写 回到RAM的PLOT_ADDR处。 步骤5

执行相同操作(PLOT_ADDR+1)和执行PLOT_COLOR寄 存器矩阵的第1行。 步骤6

若为8或256彩色方式,在(PLOT_ADDR+16)上执行相同的 操作和执行PLOT_COLOR寄存器矩阵的第2行。 继续直到所有彩色位更新

标绘X和标绘Y寄存器的内容是图7中所表示的全加器和半 加器电路处理的。在图7的方框图中对全加器FA和半加器HA的 配置和有关的逻辑电路进行了简化。地址的计算可如下完成:

地址=屏面基址+2*y[0.2]+

      (y[3..7]+x[3..7]*16+(x[3..7]*4)

              &&scr_ht)

      *字符大小

      中间项为 因而例如用6个全加器和1个半加器产生一10位的中间结果px [0..9]。

为使中间结果移位成为所选定的彩色方式用的正确精度,该结 果送到由字符大小值所控制的12×3多路转换器。这与y的较低位 y[0..2]结合形成16位屏面地址。要完成该地址计算,这再与允许 将屏面置于1K边界上的屏面基址值scr[9..22]相加。

这地址随后送到根据所选择的4、16或256彩色分辨率用来将 所送到的地址信息输入乘以1或2或4的双位置滚桶式移位器 214。

移位电路214的输出被送到起到RAM地址的缓冲存储器作用 的标绘地址寄存器216。由于在执行标绘命令之后,寄存器R1和 R2即标绘X和标绘Y寄存器的内容会改变,因而该地址需缓冲。

地址比较器218对作为从移位电路214的输出由标绘硬件确定 的新地址与存储在标绘地址寄存器216的旧地址进行比较。若地址 不同则该地址必须写到RAM。若存储于地址寄存器216的标绘地 址与移位电路214的输出相同,地址比较器218就产生(送到标绘 控制器200的)控制信号PLEQ。

回到彩色矩阵206,上面已说明过彩色矩阵206是按列读出的。 位平面计数器208与彩色矩阵206相连以确定要读出哪一列。位平 面计数器208与RAM控制器88相连,当完成RAM操作,RAM 控制器88产生使位平面计数器递增的信号。

彩色矩阵206包括诸如图8B所示的这类单元的阵列。在8×8 矩阵206的一个矩阵元中有64个这类单元。当对标绘命令译码时, 控制器200将指令控制信号LDPIX送到锁存器220,使该锁存器装 有来自彩色寄存器54的彩色数据COL。由控制器200产生控制信 号DUMP表明彩色矩阵206中的第一级缓冲已完成和数据需输出 给屏面。一旦产生DUMP信号,锁存在锁存器220中的数据就送给 门电路226和锁存器228。当DUMP信号被有效地送到门电路226, 门电路则将数据送到锁存器228。同时,门224关闭进而阻止来自锁 存器228的同相输出端的反馈回路使它保持以前所存储的数据。

当数据从RAM读进来并填到数据间隔时,控制信号BPR就 向门222提供零输入且LDRAM信号将处于零状态。在这类情况 下,来自RAMD输入的数据输入将经过门电路226送进锁存器 228。锁存器228中的数据随后可读出如图7所示经RAM控制器送 到RAM数据总线。其他这类单元组合在一起将由X,Y像素标识所 表示的像素数据转换成同Super NES字符格式相兼容的字符数据。

在图9中详细示出的RAM控制器88产生有关存取游戏卡 RAM(s)的各种控制信号。游戏卡RAM(s)必须在Super NES、 Mario芯片的标绘硬件,和从所执行的Mario芯片程序取数据过程 之间共用。RAM控制器88的作用在于确保在相应的时刻将相应的 地址送给RAM地址总线。相应时刻的RAM存取信号的产生是由 图10中更详细示出的仲裁逻辑310部分地控制的。

RAM控制器88包括一在来自RAM数据插脚经RAMD数据 总线的输入与指令总线之间多路复用的多路转换器304。响应从指 令译码器60来的信号使指令总线或RAM数据总线选通,相应的 RAM输出则置于目的端Z总线上。

RAM控制器88还包括一16位数据寄存器300,在从指令译码 器60所收到信号的控制下保留来存储从16位X总线或16位Y总 线来的向RAM写入的数据。装进数据寄存器300的数据被分成低 字节和高字节,经多路转换器302根据从译码器60收到的指令而 将低字节或高字节送到RAM数据插脚。

RAM控制器88还包括一20位地址多路转换器308。多路转换 器308对应从仲裁电路310收到的控制信号(即从仲裁电路310中 所产生的代码确认CACK,数据确认DACK,或标绘确认PACK信 号获得的信号),选择其一地址输入。来自Super NES地址总线HA 的地址信号由多路转换器308接收,只要Mario“占用”状态位置为 零就经存储器定时信号发生器312送到RAM地址总线。通过将信 号RAN送给还接收RAM刷新控制信号RFSH的仲裁电路310告 知仲裁电路310Mario芯片占用RAM的状态。RAN和RFSH信号 用“或”连在一起以形成图10中所示的“暂停”信号。

地址多路转换器308还从16位多路转换器寄存器306接收地 址输入。多路转换器寄存器306根据由指令译码器60所产生的选择 信号接收Y总线的内容或指令总线的内容。多路转换器308还接收 作为地址输入的数据存储区寄存器314的输出和图9中所示的程序 计数器PC的内容。屏面存储区寄存器316的输出用于形成输入到 多路转换器308的标绘地址的最高有效位,而从图7的标绘电路输 入最低有效位。屏面存储区寄存器316和数据存储区寄存器314均 装上了主数据总线HD来的数据并且可由主CPU寻址。这些寄存器 示于图9中,但本身不是一定得配置于RAM控制器88中,而是将 它们的内容送给RAM控制器。例如数据存储区寄存器314可以在 下述ROM控制器104中而屏面存储区寄存器可以配置在标绘硬件 52中。

所要输出的多路转换器308输入信号是如下选择的。若发生代 码确认信号CACK,则选择代码存储区和程序计数器PC输入。若 发生数据确认信号DACK,则选择数据存储区加多路转换器寄存器 输入。若出现标绘确认信号PACK,则选择标绘地址。最后若既无 CACK、DACK也无PACK信号出现,就选择主机(即SNES)地址 输入。

多路转换器308的20位地址输出送到存储器定时信号发生器 312,它则在合适的时刻将这些地址信号送给RAM6、RAM8。存储 器定时信号发生器312接收仲裁块310中葛莱计数器(gray counter)来的输出。存储器定时信号发生器312对葛莱计数器来的 输出译码,并产生经RAM地址总线RAMA对图1中的RAM6、 RAM8寻址的输出信号。另外一种方式是,定时信号发生器312如 图1所示产生包括行地址选通信号RAS,列地址选通信号CAS和 写入允许信号WE在内的用于存取RAM6、RAM8的控制信号。

存储器定时信号发生器312产生一反馈给仲裁逻辑310表明 RAM周期结束的DONE信号。存储器定时信号发生器312还产生 一用来将外部RAM来的数据锁存进RAM控制器中的数据锁存器 (未示出)的数据锁存信号DATLAT。RAM来的数据随后例如是经 RAM数据总线RAMD_IN送给Mario芯片电路。定时信号发生器 312来的RAM A地址信号输出可送给游戏卡上的任一静态RAM。 若游戏卡中用的是动态RAM则产生控制信号CAS、RAS和WE。 如上面说明的选配项电阻的设定所表明的,静态或动态RAM信号 是根据Mario芯片的配置而相应地产生的。图9A中示出定时信号 发生器312产生的示范性定时信号和其他有关信号。所示出的示范 性地址和数据值仅用于说明。RAM DONE信号则示于图8C中。

在合适的时刻存取RAM的信号产生是部分地由仲裁逻辑310 控制的。如图10所示,仲裁逻辑310接收有关存储器存取输入的信 号CACHE(超高速缓存)请求CACHERQ,数据请求DATRQ和标 绘请求PLTRQ。这些输入信号每一个分别临时地存储在锁存器 325,327,329中。若所要执行的Mario指令出自RAM或ROM,则 通过接收到CACHE请求信号CAC HERQ来起动处理,该信号就 图10而言是用来确认正执行的指令不是来自超高速缓存RAM因 而一定是来自RAM或ROM的。这样CACHE请求信号 CACHERQ表明不能从CACHE(超高速缓存)94取出指令执行。 数据请求信号DATARQ是作为对需对RAM存取的指令(例如装 字节、装字指令)译码的结果产生的。另外,仲裁逻辑310接收响应 标绘命令的译码而由标绘控制器200产生的标绘请求信号 PLTRQ。

当Mario芯片正在运行和Mario占用位被置位时仲裁逻辑310 才起动(如状态寄存器SUSPEND(暂停)方式位处于“0”状态所表 明的)。在收到和存储CACHE请求,数据请求,和标绘请求信号 后,锁存器325,327和329分别产生CRQ,DRQ和PRQ信号。门 331,333和335接收各自锁存器的同相输出端来的这些信号并为这 些信号建立优先级。在这方面,CACHE请求信号具有最高的优先 级,数据具有第二位高的优先级而标绘请求则具有最低的优先级。 CACHE请求信号被给予最高优先级是因为它表明已试图执行来自 CACHE指令,但必须从RAM存取指令。若较高优先级请求已经使 其各自的锁存器置位,则门电路333和335用以确保较低优先级的 请求无法使锁存器339和341置位。只有系统不是处于暂停状态, 锁存器337,339,341才能置位,因为SUSPEND(暂停)方式信号被 输入到门331,333和335中的各个门。当Mario芯片占用即可自由 地存取RAM时SUSPEND方式信号会处于低逻辑电平状态。若 SUSPEND被置为1锁存器337,339和341不能被置位,当确认锁 存器337,339和341中的任一个已经为“1”(即一个周期已经在进 行)时也不能被置位。门331、333和335建立RAM的优先级。若 CACHE REQUEST(超高速缓存请求)锁存器337被置位则数据确 认锁存器339就不会被置位,若CACHE或DATA请求锁存器被 置位则标绘确认锁存器341也不会被置位。

锁存器337一由超高速缓存请求信号置位就产生超高速缓存确 认信号CACK,而它一由图10中的逻辑电路确立,CACHE 94(或 RAM)就可供使用。若图10中的逻辑电路确定RAM未被其它方式 占用,就会同样地产生数据确认信号DACK和标绘请求确认信号 PACK,以确认数据请求和标绘请求。

锁存器337,339和341的同相输出送到门电路343,进而经 NOR门344使产生RAM存取的定时信号的葛莱计数器345复位。 本技术领域的技术人员会理解葛莱计数器是每次仅有一个输出位改 变的计数器,这可方便地用来控制RAM存取时间。

由定时信号发生器312产生的DONE(完成)信号由NOR门 344和锁存器337,339,341接收。DONE信号表明一个RAM周期 已结束。DONE信号的产生触发仲裁逻辑310中的相应锁存器的清 零,使已锁存的请求取消。DONE信号还送到始发电路例如超高速 缓存控制器68或标绘控制器52,以表明RAM存取结束。

按照本发明的另一实施例,Mario芯片可采用双时钟系统。这 样Mario芯片处理器无需由例如驱动上面提到的RAM控制器电路 的相同时钟来驱动。例如RAM控制器88可由Super NES来的 21MHz时钟信号来驱动而Mario芯片处理器可由另一个可变频时 钟驱动。在此方式下Mario芯片处理器可不限定工作于21MHz时 钟频率。

按照这示范性实施例的Mario芯片可采用异步态机器控制电 路;诸如示于图11的执行再同步双时钟接口功能的那种电路。若采 用不同的时钟系统而不是工作在另一时钟频率的存储器控制器来实 施,则图11电路可以用来与Mario芯片处理器接口。

示于图11中的再同步电路接收与时钟信号CK不同步的外来 的时钟信号DIN。不论DIN的频率是高于还是低于时钟频率CK, 再同步电路都会由DIN产生一与CK同步的信号。

如图12的说明,图11所示电路响应信号DIN从状态010,经 过110;100,101,111回到起始状态010。图11的再同步电路可用 在诸如ROM控制器104和RAM控制器88这类接收双时钟信号 的任何接口电路。

图11所示的电路因由门F对锁存器A置位故而通过将从其闲 置或复位态“010”切换成状态“110”而响应外来的信号DIN。再同步 时钟CK一旦变低(也许已经为真),锁存器B由门E复位形成状态 “100”,当时钟再次变高时,由门A使锁存器C置位形成状态 “101”。

锁存器C在图11中的Q从所示的该电路产生输出。当输入信 号再次变低,锁存器就再次由门C置位形成状态“111”。当时钟信号 CK在到达状态“111”之后又变低时,锁存器A由门G复位形成状 态011。此后时钟CK再变高并且由门B使锁存器C复位,回到状 态机器闲置态,其输出就不起作用。

图13更为详细地示出图4B的ROM控制器104。ROM控制器 104包括超高速缓存加载器400,它可部分地控制将存储在ROM10 或游戏卡RAM中的当前执行的程序指令载入芯片超高速缓存 RAM94。指令是以16字节的组加载进超高速缓存RAM94的。当 在16字节段当中遇到转移指令,在执行转移之前还是必须继续地 填满一完整的16字节段。CACHE加载电路400包括一2位状态 机,它通过确保16字节CACHE段的剩下的字节加载进超高速缓 存RAM94来响应对转移指令的译码。超高速缓存加载逻辑状态机 的第一状态是闲置状态,若程序执行超出超高速缓存器的范围或程 序数据已被加载进超高速缓存,则该闲置状态为真。第二状态表明 超高速缓存的加载和从游戏卡ROM或RAM来的指令的执行是同 时发生的。第三状态是由对转移指令的译码触发的,该状态处于有 效直到16字节的超高速缓存段中的所有字节均已被加载。当执行转 移而该转移落到与超高速缓存16字节边界不精确对应的地址时就 遇到第四状态,在这种情况下,超高速缓存从该边界的开始位置被 填充到16字节段中对应于程序所转移的地址的那部分。

图4B中示出的超高速缓存控制器68产生输入到超高速缓存 加载器400的CACHE信号,它表明目前在超高速缓存RAM94中 无法提供所需要的指令。因而必须从ROM读取指令。代码存储区信 号标识所要存取的地址的三位最高有效位并且表明所要存取的是程 序ROM还是RAM。超高速缓存加载器400还包括在程序执行期间 保持与程序计数器PC的各最低有效位相应计数的计数器。该计数 器是经超高速缓存加载器的PC输入端加载的。

ROM控制器104中的超高速缓存加载电路400还接收WAIT (等待)和GO控制信号,它们表明Mario处理器因某些原因而处于 WAIT状态和Mario芯片在“工作”或“运行”方式。在这种情况下超 高速缓存加载电路400产生一CODEFEFCH(代码读取)控制信 号,送给示于图13中的NOR门408,进而送给ROM定时计数器 406的清零输入。当超高速缓存加载电路400产生代码读取信号 CODE FETCH,就优先于数据读取而启动代码读取,因为在数据 读取前必须开始代码读取。图10所示的包括优先级逻辑在内的仲裁 电路可用来使所产生的信号被给予比数据读取高的优先级。

当清零信号从ROM定时计数器406取消,就起动一计数周 期。ROM定时计数器406用来产生ROM RDY定时信号,它表明 在ROM数据插脚可获得ROM数据,该信号是从门电路410输出 的。

ROM数据就绪信号ROM RDY门与再同步电路402相连,而 该电路例如可包括图11中所说明的再同步电路。在达到与处理器时 钟同步之后,产生信号ROM DCK使锁存器404复位和产生 DATAFETCH信号表示对寄存器R14的存取触发了数据读取,而 这又导致发出EN_R14信号。当ROM定时计数器406已达到一规 定计数,确保在ROM数据插脚上可获得数据时就产生 DATAFETCH信号。

图13中所示的ROM控制器从下述的输入中的任意一个选择 出地址信号的多路转换器414的输出端产生ROM地址。代码存储 区寄存器412是从Super NES数据总线HD加载的,以确定从哪一 个ROM程序存储区取出并执行该Mario代码。代码存储区寄存器 412向多路转换器414提供具有23位的ROM地址的8位。该 ROM地址的最低有效位是从程序计数器PC的内容得到的。当正向 超高速缓存RAM写入数据时,4位最低有效位是来自于由超高速 缓存加载器400所产生的CACHE LOAD信号。另外的多路转换器 414地址输入是每当存取寄存器R14时,从Mario通用寄存器R14 的内容产生的。

对R14的存取致使数据读取锁存器404产生DATAFETCH 信号,该信号用作控制信号使多路转换器414选择其R14输入(和 从Super NES数据总线HD加载的数据存储区寄存器416的内 容)。该数据存储区寄存器416包含有与R14读取操作有关的数据 存储区的最高有效位。

数据读取信号另外送给门408,它将起动由ROM定时计数器 406进行的计数,进而经门410产生ROM就绪信号ROM RDY,当 ROM RDY信号产生时,就可从ROM数据总线ROM D[7:0]获 得数据。

地址多路转换器414还接收从Super NES地址总线HA来的 ROM地址。根据送给多路转换器414控制输入端的信号“ROM”的 状态将选择Super NES地址总线。“ROM”控制信号向Mario ROM 控制器表明Super NES拥有对ROM地址总线的控制。

对转移指令译码后,程序计数器的内容加上由超高速缓存加载 器的计数器所产生的四位最低有效位被输入地址多路转换器414。 这允许向超高速缓存段加载上在转移被译码前正在加载的16字节 的剩余部分。

多路转换器422提供ROM控制器104中从ROM数据插脚 ROM D至Mario芯片的目的端总线Z的数据通路。已经由锁存器 404产生的DATAFETCH信号和由ROM定时计数器406产生的 ROM RDY信号被送给门418而使ROM缓冲器420的加载得以进 行。ROM数据总线ROM D[7…0]来的ROM数据被装进ROM缓 冲器420。

多路转换器422响应指令代码(诸如通过存取寄存器R14触发 的自动进行数据读取的GET B这类指令代码)的译码选取一输入。 若对代码读取操作译码,ROM控制器104就会将指令送到图15A 中所示的Mario芯片中的指令总线。若对GET B指令译码,存储在 寄存器420中被缓冲的字节就被置于Z总线上。某些GET B指令 操作涉及X总线上经图13中所示的多路转换器的相对应的输入端 输入的数据,送给目的端总线Z的数据可随后装进Mario通用寄存 器76中的一个。

在图14中更为详细地示出超高速缓存控制器68。超高速缓存 控制器68包括一标记锁存器506。标记锁存器506包括例如表明指 令是否已存储在超高速缓存RAM94(为便于说明将它配置于超高 速缓存控制器中示出)中的64个锁存器。

标记锁存器506中的64个标志中的每一个都对应于存储在超 高速缓存RAM94中的16位信息。在从ROM或RAM取出指令执 行的同时超高速缓存RAM94被载上指令。在如上说明的那样执行 转移指令时,RAM94经与图13中示出的ROM控制器104一起说 明的超高速缓存加载器400被加上16字节段的剩下字节。在加载上 这些剩余的字节之前,该整个字节段不能经标记锁存器506标志为 已加载。

参见门电路510,当程序计数器已从0计数到15,14位减法器 502输出一超出范围的信号(它被反转)当ROM控制器输出其 ROM数据就绪信号ROMRDY(表明将要输出一字节),门电路510 就使标记锁存器506在由多路分解器504寻址的位置上置位。

当对超高速缓存指令译码;在总线501上产生一表明后续指令 将从超高速缓存RAM存储器94执行的控制信号。总线501上的控 制信号被送给超高速缓存基址寄存器500的加载输入端,并用于向 超高速缓存基址寄存器500装入程序计数器PC的13位最高有效 位。同时如图14所示,标记锁存器506被清零。

超高速缓存基址寄存器500的输出和程序计数器的最高有效位 (例如第3-15位)被送给减法器502,它确定程序计数器PC来的 地址输入是否在超高速缓存RAM94的范围内。减法器502例如输 出其六位最低有效位作为超高速缓存RAM地址的最高有效位,而 地址的三位最低有效位则从程序计数器PC送来。

超出范围信号O/RANGE是从减法器502来的进位输出信号 而产生的,并被翻转。该翻转的超范围信号高时用来起动对锁存器 矩阵506中的一个锁存器的置位。该锁存器置位将取决于经多路分 解器504从减法器502来的超高速缓存地址输出,并与超高速缓存 RAM94的16字节段相对应,以表明指令是存储在超高速缓存中 与输出的超高速缓存RAM地址相应的地方。标记锁存器506的输 出被送给多路转换器512,它将64个标记锁存信号中的一个送到 NOR门514,这个锁存信号是根据多路转换器的选择输入确定的, 它选定与DEMUX504输出的64条选择线中某一条对应的锁存信 号作为输出。输入到NOR门514的另一输入是表明所需要的指令 不能在超高速缓存RAM94中找到因而需从外部读取的超范围信 号。

图15示出图4A中示出的ALU控制/指令译码器的方框图。 如图15所示,ALU控制器/指令译码器60接收超高速缓存RAM 94,ROM控制器104和RAM控制器88来的指令。这些Mario芯 片元件不是ALU/指令译码器的一部分,但仅仅为便于说明才在图 15中画出。

多路转换器525从超高速缓存RAM94,ROM控制器104或 RAM控制器88选出指令输出,并将所选择的指令输入到流水线锁 存器527。多路转换器525选择基于RAM的指令还是基于ROM的 指令,取决于代码存储区寄存器的规定位例如位4的状态。这样根 据一装入代码存储区寄存器的地址信息,将对ROM或RAM来的 指令进行译码。另外多路转换器525也可根据由超高速缓存器68送 来的控制信号CACHE CTL的状态而从超高速缓存RAM94选择 指令,该信号表明所要执行的指令是在超高速缓存RAM94范围 内,而且某一相应的标记位已如超高速缓存控制器68的说明中那 样被置位。

当被程序计数器起动信号PCEN.IL.IH启动时,流水线锁存 器527接收多路转换器来的8位指令,而这起动信号例如当正由 ROM(或RAM)读取指令时,是由ROM控制器104(或RAM控 制器88)产生的。由于从RAM或ROM读取指令需花一个处理周期 还多,因而指令译码器操作是由各自的ROM或RAM控制器104, 88所产生的程序计数器起动信号PCEN触发的。

另一方面,若从超高速缓存RAM取出指令执行,程序计数器 起动信号PCEN在所有时刻都是起作用的,并且指令执行是以处理 器时钟频率全速执行的。由于ROM10的存取时间比超高速缓存 RAM94或游戏卡RAM的存取时间慢许多,因而对ROM存取时, 产生PCEN信号的间隔,必须不如相应的超高速缓存RAM的,或 动态或静态RAM的译码起动信号那样频繁。

暂时存在流水线锁存器527的指令被输出给图示性地由门电路 537,539和541所代表的常规的指令译码电路,以产生表示操作代 码1,2,…N的信号。

加载进流水线锁存器527的指令还被送给先行控制逻辑551。 先行控制逻辑551用于提供操作代码的译码预告,它将用来从 Mario芯片寄存器块76中选取合适的寄存器。这样,为了在对操作 码进行译码之前优化执行的速度,迅速地确定了需被存取的寄存 器,以便对该指令所需的数据进行高速存取。

先行控制逻辑响应指令操作码以及各种程序译码控制标志。指 令译码电路60包括程序控制标志检测器逻辑543,它响应以前已译 码的操作代码而产生ALT1和ALT2信号,以表明如上所述的相应 的前缀指令已经被译码。下面说明的与此有关的ALT1 PRE信号也 是由标志检测器逻辑543产生的。另外产生IL和IH信号以表明已 对需要立即数的指令进行译码(这里L和H分别指低字节和高字 节)。IH和IL标志用来阻止涉及立即数的指令被当作操作码译码。 因而也需要非IL信号( IL)和非IH信号( IH)来起动流水线锁存器 527。ALT1和ALT2信号如前面说明的那样用来修改后续产生的 操作码,并输入到例如在门电路541所示的译码逻辑537,539,541 等,按照前面对这些信号的讨论来修改输出操作码。

先行控制逻辑551根据预译码的操作代码和对先前的操作代码 (例如前缀代码ALT1或ALT2)译码时所产生的信号而产生寄存器 选择信号。例如如程序控制标志检测逻辑543中所示,若ALT1信 号由译码逻辑545译码,则产生ALT1 PRE信号,该信号由程序控 制标志检测逻辑543输出,并进而经OR门549送给先行逻辑531。 该ALT1 PRE信号还使ALT1锁存器547置位。OR门549还将锁 存器547来的ALT1信号输出,并将ALT1信号送给译码逻辑 537,539,541等。

在图15中示意地表示先行控制逻辑如何产生4个寄存器选择 控制位XSEL0,XSEL1,XSEL2和XSEL3。这四个控制位随后送 给在图17中结合寄存器控制逻辑76一起说明的多路转换器620和 622,该控制逻辑选取16个寄存器中一个的内容输出给X总线供正 执行的指令使用。

这样,指令在装进流水线锁存器527前被送给先行译码逻辑单 元529,它产生一寄存器选择位XSEL_U0,进而锁存进锁存器535 然后作为信号XSEL0输出。锁存器535由程序计数器信号PCEN 起动。类似地逻辑电路531产生锁存进锁存器533作为信号XSEL1 输出的XSEL_U1。ALT1 PRE信号被送给先行逻辑551中的各种 译码逻辑电路529,531等,并被用于确定由寄存器控制逻辑76所 选定的合适的寄存器。例如在先行控制电路551中所示,ALT1 PRE 信号是送给逻辑电路531的信号之一它产生锁存在锁存器533中进 而输出信号USEL1的USEL_U1。

图15B示出用于说明先行逻辑551操作的示范性定时信号。图 15B示出时钟信号CK,和有关超高速缓存RAM数据存取的示范 性指令操作码。还示出表明流水线锁存器被加载时,将执行指令译 码操作时,产生寄存器选择信号时和将寄存器来的信息加载在目的 端Z总线上时的定时信号。

如图15B所示,超高速缓存RAM数据操作码(操作码1)将在 时钟脉冲CK上升沿之后的某一时刻变为有效。操作码存储在流水 线锁存器527中直到例如第二个时钟脉冲的上升沿,这时操作码2 被锁存进锁存器527。紧接着收到锁存器227来的输出之后,在图 18中示意地画出的某个时刻指令译码器60开始对与操作码1相应 的指令进行译码。该指令译码的结果,如上所述相应地将控制信号 送给诸如ALU50,超高速缓存控制器68和标绘硬件52等这类 Mario芯片元件。

示于图15中的先行电路551通过在对操作码2译码前的某一 时刻产生信号XSEL_U开始寄存器选择译码过程。该XSEL_U0信 号代表被锁存进锁存器535之前的译码逻辑529的输出。例如在某 一时刻由锁存器535输出XSEL-0信号,使得该指令所需的数据 会在指令执行周期中尽早地被存取,以便于尽快地送给相应的总 线。

图16中示出用来产生有关Y和Z总线的寄存器选择信号的寄 存器控制逻辑78的一部分。多路转换器604选取16个寄存器的哪 一个将从Z总线被写入,而多路转换器606则选取送给Y总线的那 个寄存器。  

多路转换器604和606分别接收来自4位寄存器600和602的 输入。寄存器600和602用来完成上述的“FROM”和“TO”前缀指 令。寄存器600和602分别由“TO”和“FROM”前缀的译码来起动, 它们将指令总线的最低有效位送给寄存器600和602。寄存器600 和602响应用来使上述的控制标志复位的指令而被清零。

多路转换器604和606另外接收从寄存器块76中的各种寄存 器来的输入。另外,多路转换器604,606接收从指令总线上的最低 有效位来的输入来执行其四个最低有效位确定指令的目的端或源端 寄存器的指令。另外为使Super NES可对该寄存器存取,将Super NES地址总线来的规定的最低有效位送给多路转换器604和606。 该多路转换器604和606分别选取送给Z和Y总线的寄存器。

图17示出寄存器块76和配置于图4B的寄存器控制逻辑78中 的附加寄存器选择控制逻辑。由对FROM指令译码就产生的 FROMSET信号设定FROMX寄存器618。一收到FROMSET信 号,Y总线的内容就被加载进寄存器618。装进寄存器618的数据随 后成为用在后续指令执行中的数据。寄存器618的内容被作为输入 之一送给多路转换器622,。多路转换器622还接收寄存器R0(用于 缺省寄存器)的内容作为其输入之一。

多路转换器622的另一输入是多路转换器620的输出。多路转 换器620接收程序计数器(即寄存器R15)的内容、在执行MERGE 指令时所用的寄存器、和寄存器R1(例如在执行标绘指令中所用的) 来的输入作为输入。多路转换器620根据由图15A中示出的先行逻 辑551所产生的XSEL2和XSEL3位的状态选取这些输入的一个 输入。

多路转换器622的另一个输入与Y总线上的内容相接,以将与 Y总线上相同数据放在X总线上。如前所述,多路转换器622的另 一输入是上述FROM X寄存器618的输出。多路转换器622的输出 是根据图1SA中所产生的XSEL0和XSEL1位的状态选取的,并 送给X总线。

与寄存器R0-R15中的许多寄存器有关的专用功能在上面已 详细说明,这里将不重复。寄存器R0-R3的输出送给多路转换器 608,寄存器R4-R7的输出送给多路转换器610,寄存器R8-R11 的输出送给多路转换器612,而寄存器R12-R15的输出送给多路 转换器614。多路转换器608,610,612,614各自的四个输入中的一 个均是由YSEL1和YSEL0选取的,这些是从图16中所示的多路 转换器606输出的。多路转换器608,610,612和614的输出进而输 入到多路转换器616。多路转换器616根据图16中的多路转换器 606输出的YSEL2和YSEL3的状态选取四个输入中的一个。多路 转换器616使其输出送到缓冲寄存器617,其输出进而送到Y总线。

回到寄存器R0-R15的输入,每个寄存器有一个由如上结合 图16所示而产生的ZSEL位0至位3所选取的起动输入。每个寄存 器还具有一时钟输入CK和一数据输入DATA-IN,在相应地缓冲 之后经该数据输入端从Z总线接收数据。

结合各种乘法操作使用的寄存器R4还包括停用低位和停用高 位输入以及允许低位和允许高位输入。寄存器R15即程序计数器 PC,它可接收从图13的ROM控制器中的超高速缓存加载器400 来的信号CCHLD,在当前的超高速缓存16字节段被装进超高速缓 存RAM之前禁止转移操作。程序计数器另外从指令译码器接收一 程序循环暂停信号LOOPEN,这表明得进行分支转移并允许向PC 加上寄存器R13的内容。寄存器R15另外接收加电复位信号RE- SET和执行循环指令时将寄存器R13的内容装入程序计数器的输 入RN。

如上所述,本发明的图形协处理器结合主电视游戏系统可以方 便地用来产生涉及例如基于多边形目标的旋转、放大和/或缩小的 各种特殊效果。图18是画出梯形用的示范性Mario芯片程序的流程 图,说明可如何对Mario芯片编程以产生所要显示的基于多边形的 目标的一部分。下面提出一种用于产生这类多边形的Mario程序同 时对Mario硬件如何执行程序加以详尽的解释。

首先参见图18中示出的高层流程图,最初将寄存器块R1至 R15的某些寄存器与梯形的产生中所用的变量关联起来(例如寄存 器R1存储像素X位置,寄存器R2存储像素Y位置线,寄存器R7 存储梯形高度等)。此后,如方框650所示建立循环计数器和计算初 始像素值。

如方框652所示,随后进行查询以确定梯形水平线之一的长 度。若从该线的终点减去该线的起点的结果是负值(-VE),则该程 序分支转移至方框660。若从该线的终点减去该线的起点的结果是 正值表明还未超出该线的长度,则使循环计数器递减(654)并执行 标绘像素指令而画出合适的像素(656)。

如方框658所示,随后进行查询以确定循环计数器的内容是否 为零。若循环计数器不为零则进行转移以分支转移回方框654以使 循环计数器(654)递减并标绘另一个像素(656)。

若循环计数器等于零,则多边形左侧的X坐标和多边形右侧的 X坐标被更新(660)。此后使梯形Y HEIGHT(Y高度)递减(622), 若结果不为零则程序将通过分支转移回方框650重新执行(664),使 Y坐标递增以移到下一扫描线(665)。若Y HEIGHT等于零,则程 序将全部执行好,梯形就完成(666)。

为说明产生图形的Mario芯片指令集的运用,下面给出实施图 18流程图绘制梯形的示范性程序。

;绘制梯形循环 rx=1 ;标绘x位置 ry=2 ;标绘y位置 rx1=3 ;顶线左侧x位置 rx1inc=4 ;顶线左侧x位置递增 rx2=5 ;顶线右侧x位置 rx2inc=6 ;顶线右侧x位置递增 rdy=7 ;梯形y高度 rlen=12 ;循环计数,水平线(hline)长度 rloop=13 ;循环标记 hlines miwt rloop,hlines 2 ;设定hline循环的起始 hlines 1 mfrom rx1 ;x=(rx1)>>8 mto rx mhib mfrom rx2 mhib mto rlen msub rx ;长度,rlen=(rx2>>8)-(rx1>>8) mbmi hlines 3 ;若rlen<0则跳过hline mnop minc rlen ;总是绘制一个像素 hlines 2 mloop mplot ;绘制水平线 hlines 3 mwith rx1 ;rx1+=rx1inc madd rx1inc mwith rx2 ;rx2+=rx2inc madd rx2inc mdec rdy ;rdy-=1 mbne hlines ;重复rdy次数 1 minc ry ;和下行的下一个y

为说明Mario芯片硬件如何用来执行程序,以下的说明是针对 上面给出的梯形生成程序的。在执行梯形生成程序前,主计算机系 统例如Super NES如上面结合图5流程图的说明所解释的那样直 接向代码存储区寄存器和屏面基址寄存器写入。另外,Super NES 将从Super NES地址总线HA译码得出的XEQ地址的低字节写入 ROM控制器104中的局域寄存器。Super NES随后将高字节写到 ROM控制器104,它与该局域寄存器的内容组合并送到Z总线。此 后启动寄存器R15用作Mario芯片的程序计数器。

一检测到上面Super NES向ROM控制器104写入操作的后 沿就使Mario的“GO”标志置位。若程序计数器减超高速缓存基址 寄存器大于超高速缓存容量,或超高速缓存标志与程序计数器的积 减去超高速缓存基址寄存器除以16等于零,就将程序计数器的内 容送给ROM10而起动ROM定时计数器(图13方框406)。

一开始,在执行绘制梯形子程序之前,用于梯形循环程序的变 量与Super Mario寄存器是相关联的,如梯形程序列的初始部分中 所示,例如,作为“标绘X位置”的“rx”与寄存器R1是相关联的, 而变量“rloop”则与寄存器R13相关联。

分配好这些寄存器之后,梯形程序开始如下执行。当ROM控 制器104中的ROM定时计数器达到5的计数(近200纳秒),就将 所要执行的第一条指令“IWT rloop,hlines 2”从ROM数据总线锁 存进图4A中的流水线寄存器62。数据同时被写入超高速缓存 RAM94。在执行指令“IWT rloop,hlines”时,使程序计数器递增。 设置“IL”和“IH”标志以表明指令流的下面两字节是立即数据。当 ROM定时计数器406达到5,就将立即数据(低字节)写入超高速缓 冲RAM94,并保存在ROM控制器104中的暂时寄存器。重复 ROM读取机能,该立即数的高字节与低字节结合并送到Z总线。为 设置循环计数器,起动寄存器R13并在那儿存储Z总线的内容。在 该例行程序的这一时刻开始,就从存储器读出每条指令直到遇到循 环指令为止。

在执行指令“FROM RX1”时,指令代码的最低四位被装进寄 存器控制器中的四位“FROM Y”寄存器602(见图16)。另外允许 RX1(寄存器R3)来的数据上Y总线并将它存进16位“FROM X” 寄存器618。在执行“TO RX”指令时,指令代码的最低四位被装进 寄存器控制器中的四位“起动Z”寄存器600(见图16)。

“HIB”指令是通过将“FROM X”寄存器的十六位内容装入X总 线而执行的。ALU将X总线的高字节放到Z总线的低字节上并使 Z总线上的高字节设为零。这去除X位置的小数部分并在寄存器 RX(寄存器R1)留下第一水平线的起点。

在执行指令“FROM RX2”时,执行如上所述执行“FROM RX1”中相似的操作。该“HIB”指令导致对梯形的顶线右侧X坐标进 行操作(类似于上面所说的那些)从而将第一水平线的终点留在寄存 器R0(用作累加器的缺省寄存器)。

“RLEN”指令和“SUB RX”指令是通过从线的终点减去该线的 起点而被执行的RLEN(12)=R0-Rx。若结果为负,符号标志将被 置位,表明条件假。

“BMI HLINES3”指令是两字节指令,若符号标志置位,第一 字节就设立一标志。若条件标志置位,第二字节是转移偏移(这里 R15等于R15加上该指令)。若不是,R15不被替换而程序继续正常 进行。

执行“INC RLEN”指令以使线长度寄存器加1以确保至少标绘 一个像素。“LOOP”指令用于进行R12=R12-1的计算。若R12不 是零,则R15(程序计数器)装上13的内容藉此实行转移。

若此刻的程序在超高速缓存RAM94的范围内,则超高速缓存 装载电路400将检测出该转移,并继续加载超高速缓存RAM94, 而在这样做时暂停执行程序。结束时,程序计数器加上其新值而从 超高速缓存RAM94读取下面的指令。

为执行“标绘”指令,循环/标绘指令配对形成水平线绘制的算 法。标绘指令将使由R1、R2(作为X和Y坐标)编址的屏面像素设 定为图4A中示出的“COLOR寄存器”54中所设定的彩色。含有该 像素的字符的地址是由标绘硬件52计算的。该新像素数据保存在字 符线缓冲器(彩色矩阵),直到Mario芯片移到一不同的字符位置进 行标绘。当所有彩色信息都已复制到彩色矩阵中的双缓冲机构的第 二级,就将该信息写入到外部RAM。

执行“WITH RX1”的“ADD RX1 INC”指令以更新该梯形的左 侧X坐标。类似地“WITH RX2”和“ADD RX2 INC”用来更新梯形 的右侧。“DEC RDY”,“BNE Hlines 1”和“INC RY”指令用来移到 下一个Y位置(下一扫描行)直到梯形完成。

下面的程序列表说明可如何对Mario芯片编程以使8位X,Y 和Z点的阵列旋转。该程序说明根据本发明的例示性实施例对图形 协处理器编程以执行旋转操作。下面给出该程序的列表:

LISTING ROTATE: ;由寄存器rmat 1211,rmat 2133,rmat 2322,ramt3231,
rmat0033中的旋转矩阵旋转8位X,Y,Z点的矩阵 ;矩阵元是8位带符号小数 ;即127=127/128=接近1 ;-128=-128/128=-1 ;这些均被压缩存储在每个寄存器内作为2个8位单元 rx =1 ;x ry =2 ;y rz =3 ;z rt =4 ;temp rmat 1211 =5 ;矩阵元11和12 rmat 2113 =6 ;矩阵元13和21 rmat 2322 =7 ;矩阵元22和23 rmat 3231 =8 ;矩阵元31和32 rmat 0033 =9 ;矩阵元33 routptr =10 ;至旋转点缓冲器指针(ptr) msh-rotpoints8 miwt r14,pointsaddr ;指向所要旋转点的ROM指 针 miwt r12,numpoints ;所要旋转的点的数目 miwt routptr,m-rotp- ;指向旋转点缓冲器的RAM nts 指针 mcache ;设定超高速缓存地址 mmove r13,pc ;初始循环地址 mmatrotploop mto rx ;取x mgetb minc r14 mfrom rmat 1211 ;11 mto rt mmult rx ;mll*x mto ry ;取y mgetb minc r14 mfrom rmat 2113 ;21 mhib mmult ry ;m21*y mto rt madd rt mto rz ;取z mgetb minc r14 mfrom rmat 3231 ;31 mmult rz ;m31*z madd rt madd r0 mhib mstb (routptr) ;存储旋转后的x minc routptr mfrom rmat 1211 ;12 mhib mto rt mmult rx ;m12*x mfrom rmat 2322 ;22 mmult ry ;m22*y mto rt madd rt mfrom rmat 3231 ;32 mhib mmult rz ;m32*z madd rt madd r0 mhib mstb (rout ptr) ;存储旋转后的y minc routptr mfrom rmat2113 ;13 mto rt mmult rx ;m13*x mfrom rmat 2322 ;23 mhib mmult ry ;m23*y mto rt madd rt mfrom rmat 0033 ;33 mmult rz ;m33*z madd rt madd r0 mhib mstb (routptr) ;存储旋转后的z mloop minc routptr

图19、20和21说明当结合主计算机系统例如Super NES使用 本发明的可编程图形协处理器时可产生的某些特殊效果。如图19所 示,描绘出一个目标即直升机的侧视图。该图并不意图准确地反映 使用Mario芯片所能产生的高品质显示。图20和21则示出图19给 出的直升机的放大的和旋转的图像。本发明的图形协处理器可用来 产生包括涉及高速旋转和缩放的基于多边形的目标在内的3D型 (和其他的)特殊效果,而仅最低限度地加重电视游视主处理系统的 负担。

本发明已经详细地说明和图释了,应该理解详尽的揭示仅是用 作说明和解释。虽然上述实施例被视作较佳实施例,应该理解该领 域技术人员可以作出多种变化和改动,而下面的权利要求正是用来 覆盖这类在本发明实质和保护范围之内的变化和改动的。

高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用