任天堂产品系统介绍(doc 30页)(正式版) 联系客服

发布时间 : 星期六 文章任天堂产品系统介绍(doc 30页)(正式版)更新完毕开始阅读ff229c74541810a6f524ccbff121dd36a32dc49a

设备 三角波 噪声 方波 三角阶梯发生器 √ 线性计数器 √ 可编程定时器 √ √ √ 音长计数器 √ √ √ 4位DAC √ √ √ 音量衰减单元 √ √ 扫频单元 √ 占空周期发生器 √ 波长转换器 √ 随机数发生器 √ 三角阶梯发生器:

这是一个5位的单向的计数器,只存在于三角波通道,计数器输出的低4位分别通到一个XNOR(异或非)门。4个XNOR门被同一个选通信号控制,当选通是0时,计数器输出的4个低位在门电路的输出端反相;当选通是1时,不反相。选通信号连到计数器的最高位,这样就可以在XNOR门的输出端产生一个计数序列,就造出了一个比较理想的三角阶梯信号发生器。XNOR门的输出反馈到一个4位的DAC输入端。当三角波的音长计数器或线性计数器是0时,这个5位的计算器会暂停,同时锁定,计数器不会被重设置到某一个特定的状态。在系统复位的时候,计数器装入0。计数器的时钟输入直接连接到三角波通道内一个11位的可编程定时器的输出端,这样,这个5位的三角波阶梯信号发生器的输出频率就是通道内可编程定时器频率的1/32。

线性计数器:($4008)

这是一个7位的递减计数器,只存在于三角波通道,计数器减到0时输出。计数器的时钟是240Hz(1/4帧率),用帧来计算长度就是0.25×N,其中N是预先装入的7位的值。计数器会保持计数状态直到输出0,这时线性计数器和三角阶梯发生器的时钟信号被禁止,导致两个计数器被锁定,线性计数器的输出保持是0,声道因此而出现静音。线性计算器有两种工作模式:装入和计数。在装入模式,所有的输入(写到$4008)的值都会在传送到输出,也就没有计数;在计数模式,计数器会从当前值向下减,在$4008的数会被忽略。下表表示了如何通过$4008的最高位设置计数器: 旧值 新值 模式 0 X 计数 1 0 在写周期没有变化,计数 1 1 没有变化 可编程定时器($4002/3、$4006/7、$400A/B、$400F):

这是一个11位可预设的递减计数器,每个声音通道都有,但是注意在噪声通道不是直接可用的,详见“波长转换器”。这个计数器在计数完成的时候自动重载,因此它在减到0前会计算N+1个时钟周期,其中N是预装入的11位值。

这个计数器直接使用6502的频率(1.79MHz)作为时钟,输出频率是

1.79MHz/(N+1)。当到达计数终点的时候会产生一个1时钟周期的脉冲,而输出频率会被反馈到对应于声音通道的特殊设备。对于方波,这个计数终点脉冲会被送到占空周期发生器;对于三角波,会被送到三角阶梯发生器;对于噪声,会被送到随机数发生器。

音长计数器($4003、$4007、$400B、$400F):

这是一个7位的递减计数器,时钟是60Hz,每个声音通道都有。当计数器减到0,计数停止,相应的通道出现静音。可以通过设置音长计数时钟的禁止位来暂停计数,写1则中止计数,0则允许计数。在不同的寄存器里,这个位的位置不同,见寄存器表。计数值通过$4003、$4007、$400B和$400F的3-7位来写入。输入的5位值通过下面2个表转换到计数器的7位值: 第3位=0 帧 4-6位的值 第7位=0 第7位=1 0 05 06 1 0A 0C 2 14 18 3 28 30 4 50 60 5 1E 24 6 07 08 7 0E 10 第3位=1 4-7位 帧 0 7F 1 01 2 02 3 03 4 04 5 05 6 06 7 07 8 08 9 09 A 0A B 0B C 0C D 0C E 0E F 0F 音长计数器的状态可以通过$4015来读取,0表示计数器处于0状态(停止在0),1表示处于非0状态。通过写0到$4015可以令音长计数器永远处于0状态,使得声道被禁止;写1可以取消禁止状态,但它不会改变计数器里面的值。在系统复位时这个寄存器全部5个使用的位都被设置为0。

4位DAC:

这是一个标准的4位DAC(数模转换)单元,有16级输出电压,4个声道共用。在2A03里,方波1和方波2混合通过引脚1输入,三角波和噪音通过引脚2输入。这些模拟量输出需要一个负的电流源,以使得电压的级输出变成平滑的声音信号。因为NES只外置了一个100欧姆的下拉电阻,使得输出波形的幅值很小,但是也获得最小的不平滑度。这个不平滑度小到难以发现,就算用示波器也不明显。

音量衰减单元($4000、$4004、$400C):

音量衰减器只存在于方波和噪声通道。当衰减禁止位(第4位)被设置为1,当前的音量值(0-3位)被直接送到DAC。在下列情况中,音量值会被忽略,而直接送0到DAC。

·声道硬件要停止声音,例如音长计数器或扫频单元;

·处于占空周期或随机数发生器输出频率信号的负值部分,也即在声音使能的时候送到DAC的或者是音量值或者是0(无声)。

当衰减禁止位被清零,0-3位当前的值就是衰减率。衰减率是指音量从最大值向下线性衰减的速度,衰减速度是240/(N+1),N的值从$0-$F。当衰减到0之后,根据寄存器第5位的状态将发生两种情况: 第5位 行为 0 音量停在0,声道静音 1 音量循环不断从最大值减到0 只有通过对寄存器进行写操作才能重新设置硬件的衰减状态,否则就一直按当前状态进行衰减甚至循环,即使寄存器的第4位被设置成禁止衰减也没有用。

扫频单元:

这个东西只存在在方波通道中。当寄存器的第7位被设为1,扫频被激活,波长会实时地增加或减少(对应频率降低或提高)。波长的值通过$4002/3和$4006/7被不断的读入和更新,写到那里的值会立刻反应到声音里。第4-6位代表了频率扫略速度,或者说$4002/3和$4006/7里波长值被改变的频率。刷新率是120Hz/(N+1),N是写入的值,从0-7。第3位控制扫频的模式,1表示波长减少,0表示波长增加。第0-2位是右移量,用来控制波长增量的右移量,见下表:

第3位 表达式,N是右移量从0-7 0 波长=波长+(波长>>N) 1 波长=波长-(波长>>N) 当满足以下3个条件,波长寄存器每个周期都会被更新: ·第7位被设置,即扫频使能; ·右移量不等于0; ·音量计数器的值非0。

以下两种情况会暂停扫描时钟,使声道静音,而不管扫描刷新率是多少或扫描使能位是否设置:

·11位的波长值小于$008;

·扫频处于增加模式,而进位标志=1。硬件在波长寄存器被更新之前总要检查进位标志的。

占空周期发生器($4000、$4004):

占空周期发生器只存在于方波通道,它使用可编程定时器的输出频率作为时钟,使用4位计数器来产生4种类型的占空周期,因此它的输出频率是可编程定时器的1/16,输出信号反馈到音量衰减器。占空类型见下表: 6、7位 一个时钟周期里的占空周期(正/负) 00 2/14 01 4/12 10 8/8 11 12/4 波长转换器($400E):

这个东西只存在于噪声通道,用来将一个给定的4位值转换成11位的波长,然后送到可编程定时器。下表是转换关系: 0-3位 音度 音阶 CPU时钟周期(11位波长+1) 0 15 A 002 1 14 A 004 2 13 A 008 3 12 A 010 4 11 A 020 5 11 D 030 6 10 A 040 7 10 F 050 8 10 C 065 9 9 A 07F A 9 D 0BE B 8 A 0FE C 8 D 17D D 7 A 1FC E 6 A 3F9 F 5 A 7F2