$4016 是 手柄1 的选通 ...
此 IO端口 在读写时候有着不同的行为 ...
首先读手柄的状态 ... 要先向 $4016 写 1 此时内部的计数器开始工作并且会为数据流上锁... 表示已经做好准备 ... 此时在往$4016 写0 解锁 数据才能正确读取出来 ...
数据流一共有 24 bit 如图
信号用来检测是4端口的接入状态:
%0000:没有连接设备
%0001:只有$4016手柄
%0010:只有$4017手柄 (此段话摘自任天堂产品文件)
对于一般的输入 ... 只要 获取0 - 7 位即可 ...
NES的输入设备流还有一个十分古怪的之处 ... 每次读取只能读取 1 Bit 也就是想要完整的获取手柄的输入必须要读取8次 $4016 ...
6502 伪代码 ...
LDA #$1
STA $4016 ; 写 1 复位设备 此时设备以及准备好并且上锁
LDA #$0
STA $4016 ; 解锁 获取输入设备数据流 此时可以开始获取数据流
LDA $4016 ; 第1次读 获取 A键 的状态
LDA $4016 ; 第2次读 获取 B键 的状态
LDA $4016 ; 第3次读 获取 Select键 的状态
LDA $4016 ; 第4次读 获取 Start键 的状态
LDA $4016 ; 第5次读 获取 上键 的状态
LDA $4016 ; 第6次读 获取 下键 的状态
LDA $4016 ; 第7次读 获取 左键 的状态
LDA $4016 ; 第8次读 获取 右键 的状态
有心的朋友 看过 NES模拟器的源代码就知道 ... $4016内部有一个计数器 ... 复位之后此计数器被初始化为0 ... 在初始化之后每一次读取计数器都会自增 之后左移 计数器值 ...
高级语言伪代码就是 ...
bool isLocked = TRUE ; 数据流锁
uint Counter4016 = 0 ; 移位计数器
UINT InputData ; 输入数据 可以来自 IDirectInput8 也可以来自Win消息回调
BYTE ReadAddr4016 () {
if(isLocked == TRUE)
return 0 ; 如被锁定什么也读不到 直接返回一个无意义的值
else {
return (InputData >> Counter4016) & 1
++Counter4016 ; 每次读取后自增 1 访问下一位数据
}
}
VOID WriteAddr4016(BYTE val){
if(val == 0)
isLocked = FALSE ; 解锁
else (val == 1) {
Counter4016 = 0 ; 初始化计数器 从 第一位开始读取数据流
isLocked = TRUE ; 锁定
}
}
}
$4017 同理
分享到:
相关推荐
【标题】"NES游戏开发工具 NES游戏编程 NES游戏教程"涉及的是8位家用游戏机——Nintendo Entertainment System(NES)的游戏制作技术。NES是1980年代末至1990年代初流行的家用游戏机,它承载了一代人的游戏记忆。这...
STM32_NES游戏项目是将经典的NES(Nintendo Entertainment System)游戏移植到基于STM32微控制器的系统上的实现。这个项目的核心在于利用STM32的处理能力来模拟NES游戏机的硬件,使得用户可以在连接了TFT液晶屏的STM...
【标题解析】:“426 个nes游戏打包下载”这一标题表明了资源的主要内容,即包含426款nes游戏的集合,这些游戏已经打包为可供下载的格式。nes是Nintendo Entertainment System(任天堂娱乐系统)的缩写,是一款在80...
《中国象棋nes.rar》是一个压缩包,其中包含了一个名为“中国象棋.nes”的文件。这个文件是nes格式,nes是Nintendo Entertainment System(任天堂娱乐系统)的简称,是80年代末到90年代初流行的家用游戏机平台。nes...
标题中的“nes.rar”指的是一个RAR格式的压缩文件,它可能包含了关于NES(Nintendo Entertainment System,任天堂娱乐系统)游戏机及其周边设备的相关资料。NES是80年代末期非常流行的一款家用游戏机,它的游戏卡带...
【标题】:“389个 nes游戏打包” 在标题中提到的“nes游戏打包”是指包含389款nes游戏的集合。NES,全称为Nintendo Entertainment System,是任天堂公司于1983年发布的第一代家用游戏主机。这款主机在全球范围内...
10. **输入设备状态控制区**($4016-$4017):这部分内存用于读取输入设备的状态。 11. **扩展ROM区**($4020-$5FFF):这部分用于扩展ROM的访问,不同游戏可能会使用不同大小的ROM空间。 12. **SRAM区**($6000-$7...
《超级玛丽nes游戏.rar》是一个压缩包,包含了经典的“超级玛丽”游戏的NES(Nintendo Entertainment System,任天堂娱乐系统)格式文件。NES是8位时代的家用游戏机平台,这个压缩包中的游戏是那个时期的代表作,...
NES模拟器代码,可用于野火STM32MINI板NES模拟器实验
【标题】"NES模拟器(virtualNES)"是一个用于在现代计算机上运行经典任天堂娱乐系统(NES)游戏的软件模拟器。NES模拟器允许用户在个人电脑上体验8位时代的电子游戏,无需拥有原始硬件。 【描述】"其为一款模拟器...
【nes模拟器和小蜜蜂小游戏】相关知识点 nes模拟器,全称为Nintendo Entertainment System(任天堂娱乐系统)模拟器,是一种软件程序,旨在在个人电脑或其他现代设备上模拟老式NES游戏机的功能,使得用户可以在没有...
【标题】"nes游戏模拟器在线玩nes的游戏"所涉及的知识点主要集中在nes游戏和nes模拟器上。nes,全称是Nintendo Entertainment System,是任天堂公司在1983年推出的一款家用游戏机,它在游戏历史上具有重要的地位,...
【游戏】NES游戏资源打包,这是一份专为游戏爱好者准备的珍贵集合,包含了大量经典的NES(Nintendo Entertainment System,任天堂娱乐系统)游戏资源。NES是80年代末至90年代初风靡全球的一款家用游戏机,它开启了...
在STM32上制作的NES模拟器,不需要外部RAM,不需要NOR、NAND、SPIflash等,直接使用stm32片上外设。超频至128M后还算基本流畅,能玩一些64K以下的nes游戏,超级玛丽、坦克大战等。
【手机nes模拟器】是一种专为移动设备设计的软件,用于在智能手机或平板电脑上运行经典的8位游戏,这些游戏最初是在NES(Nintendo Entertainment System)游戏机上发布的。nes模拟器利用现代移动设备的硬件资源,...
**NBasic to NES:从编程到游戏开发的旅程** NBasic是一种高级编程语言,专为在8位系统上,特别是任天堂娱乐系统(NES)上创建游戏而设计。这个编程环境使得开发者,无论经验水平如何,都能相对轻松地编写代码并将...
标题中的“移植NES模拟器到STM32G431 详细移植教程 CubeMX HAL库”揭示了本次讨论的核心内容,即如何将经典的NES(Nintendo Entertainment System)游戏模拟器移植到STM32G431微控制器上,并利用CubeMX和HAL库进行...
【电脑端nes模拟器】 电脑端nes模拟器是一种软件应用,设计用于在个人计算机上运行经典的8位nes(Nintendo Entertainment System)游戏。nes是任天堂公司在1980年代末至1990年代初推出的家用游戏主机,拥有丰富的...
【标题】:“400个nes游戏打包”指的是一个包含400款经典nes游戏的压缩文件集合。NES,全称Nintendo Entertainment System,是任天堂公司在1983年推出的第一代家用游戏机,它在全球范围内产生了深远影响,孕育了众多...
【标题】"NES小游戏(经典坦克、魂斗罗..)" 涉及到的是一个包含多款经典8位游戏的集合,主要以NES(Nintendo Entertainment System)平台上的游戏为主。NES是任天堂公司于1983年推出的一款家用游戏机,在全球范围内...