内容发布更新时间 : 2024/12/22 16:52:35星期一 下面是文章的全部内容请认真阅读。
当满足以下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 随机数发生器($400E):
噪声通道有一个1位的伪随机数发生器,它是由一个15位的移位寄存器和一个异或门组成,它能够提供‘长’和‘短’两种类型的伪随机数序列:当寄存器第7位是0时,产生32767位的长序列(32K模式);是1时,产生93位的短序列(93位模式)。93位模式通常在声道中产生较高频率的声音回放。下表说明了在移位寄存器的那些位里进行异或: EDCBA9876543210 模式 <-------------< 32K ** 93位 * * 当前的异或结果在下一个移位周期之前送到移位寄存器的0位,1个位的随机数从E引脚输出,反相然后送到音量衰减器。移位寄存器每接收到两个可编程定时器的时钟脉冲就移位一次,所以它的频率是可编程定时器的一半,也就是低一个音度。系统复位的时候移位寄存器被装入值1。
6、手柄、控制器和扩展口
NES支持很多种输入设备,主要有手柄,光枪、4适配器和摇杆。两个手柄分别通过$4016和$4017访问,用选通脉冲对手柄复位,即对$4016或$4017先写1后写0,这将在游戏手柄的电路里发生个脉冲,然后可以在$4016或$4017读取了。每次读取将返回一个单一的按钮的状态,在第0位(1表示按下,0表没有)。第1位表示了游戏棒是否和端口连接。如果连接就置0,否则是1。第6和7位的$4016/$4017好像有相同的重要性,不知是什么,有些游戏期望当一个按钮按下的时候在$4016/$4017得到$41。复位的时候返回0。
读取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 按AB选开上 下 左 右 忽略 键 键 键 择 始 信号 0 0 0 0 信号用来检测是4端口的接入状态: