`
黑色杰克史密斯
  • 浏览: 16244 次
社区版块
存档分类
最新评论

NES 的$4016

    博客分类:
  • NES
 
阅读更多
$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游戏教程

    【标题】"NES游戏开发工具 NES游戏编程 NES游戏教程"涉及的是8位家用游戏机——Nintendo Entertainment System(NES)的游戏制作技术。NES是1980年代末至1990年代初流行的家用游戏机,它承载了一代人的游戏记忆。这...

    STM32_NES游戏.rar_STM32_NES_nes_stm32 小 游戏_stm32nes_stm32nes文件

    STM32_NES游戏项目是将经典的NES(Nintendo Entertainment System)游戏移植到基于STM32微控制器的系统上的实现。这个项目的核心在于利用STM32的处理能力来模拟NES游戏机的硬件,使得用户可以在连接了TFT液晶屏的STM...

    426 个nes游戏打包下载

    【标题解析】:“426 个nes游戏打包下载”这一标题表明了资源的主要内容,即包含426款nes游戏的集合,这些游戏已经打包为可供下载的格式。nes是Nintendo Entertainment System(任天堂娱乐系统)的缩写,是一款在80...

    中国象棋nes.rar

    《中国象棋nes.rar》是一个压缩包,其中包含了一个名为“中国象棋.nes”的文件。这个文件是nes格式,nes是Nintendo Entertainment System(任天堂娱乐系统)的简称,是80年代末到90年代初流行的家用游戏机平台。nes...

    nes.rar_nes手柄_nes游戏_woreucb_单片机nes游戏_游戏机

    标题中的“nes.rar”指的是一个RAR格式的压缩文件,它可能包含了关于NES(Nintendo Entertainment System,任天堂娱乐系统)游戏机及其周边设备的相关资料。NES是80年代末期非常流行的一款家用游戏机,它的游戏卡带...

    389个 nes游戏打包

    【标题】:“389个 nes游戏打包” 在标题中提到的“nes游戏打包”是指包含389款nes游戏的集合。NES,全称为Nintendo Entertainment System,是任天堂公司于1983年发布的第一代家用游戏主机。这款主机在全球范围内...

    nes系统概述

    10. **输入设备状态控制区**($4016-$4017):这部分内存用于读取输入设备的状态。 11. **扩展ROM区**($4020-$5FFF):这部分用于扩展ROM的访问,不同游戏可能会使用不同大小的ROM空间。 12. **SRAM区**($6000-$7...

    超级玛丽nes游戏.rar

    《超级玛丽nes游戏.rar》是一个压缩包,包含了经典的“超级玛丽”游戏的NES(Nintendo Entertainment System,任天堂娱乐系统)格式文件。NES是8位时代的家用游戏机平台,这个压缩包中的游戏是那个时期的代表作,...

    STM32移植NES模拟器玩游戏.rar_attemptxry_nes模拟器移植_stm32 nes模拟器_stm游戏代码。_w

    NES模拟器代码,可用于野火STM32MINI板NES模拟器实验

    NES模拟器(virtualNES)

    【标题】"NES模拟器(virtualNES)"是一个用于在现代计算机上运行经典任天堂娱乐系统(NES)游戏的软件模拟器。NES模拟器允许用户在个人电脑上体验8位时代的电子游戏,无需拥有原始硬件。 【描述】"其为一款模拟器...

    nes模拟器和小蜜蜂小游戏

    【nes模拟器和小蜜蜂小游戏】相关知识点 nes模拟器,全称为Nintendo Entertainment System(任天堂娱乐系统)模拟器,是一种软件程序,旨在在个人电脑或其他现代设备上模拟老式NES游戏机的功能,使得用户可以在没有...

    nes游戏模拟器在线玩nes的游戏

    【标题】"nes游戏模拟器在线玩nes的游戏"所涉及的知识点主要集中在nes游戏和nes模拟器上。nes,全称是Nintendo Entertainment System,是任天堂公司在1983年推出的一款家用游戏机,它在游戏历史上具有重要的地位,...

    【游戏】NES游戏资源打包

    【游戏】NES游戏资源打包,这是一份专为游戏爱好者准备的珍贵集合,包含了大量经典的NES(Nintendo Entertainment System,任天堂娱乐系统)游戏资源。NES是80年代末至90年代初风靡全球的一款家用游戏机,它开启了...

    STM32_NES.rar_STM32 NES_STM32 GBA模拟器_STM32做NES_nes制作器_site:www.

    在STM32上制作的NES模拟器,不需要外部RAM,不需要NOR、NAND、SPIflash等,直接使用stm32片上外设。超频至128M后还算基本流畅,能玩一些64K以下的nes游戏,超级玛丽、坦克大战等。

    手机nes模拟器(含80个经典游戏)

    【手机nes模拟器】是一种专为移动设备设计的软件,用于在智能手机或平板电脑上运行经典的8位游戏,这些游戏最初是在NES(Nintendo Entertainment System)游戏机上发布的。nes模拟器利用现代移动设备的硬件资源,...

    Nbasic编译为Nes

    **NBasic to NES:从编程到游戏开发的旅程** NBasic是一种高级编程语言,专为在8位系统上,特别是任天堂娱乐系统(NES)上创建游戏而设计。这个编程环境使得开发者,无论经验水平如何,都能相对轻松地编写代码并将...

    移植NES模拟器到STM32G431 详细移植教程 CubeMX HAL库

    标题中的“移植NES模拟器到STM32G431 详细移植教程 CubeMX HAL库”揭示了本次讨论的核心内容,即如何将经典的NES(Nintendo Entertainment System)游戏模拟器移植到STM32G431微控制器上,并利用CubeMX和HAL库进行...

    电脑端nes模拟器

    【电脑端nes模拟器】 电脑端nes模拟器是一种软件应用,设计用于在个人计算机上运行经典的8位nes(Nintendo Entertainment System)游戏。nes是任天堂公司在1980年代末至1990年代初推出的家用游戏主机,拥有丰富的...

    400个 nes游戏打包

    【标题】:“400个nes游戏打包”指的是一个包含400款经典nes游戏的压缩文件集合。NES,全称Nintendo Entertainment System,是任天堂公司在1983年推出的第一代家用游戏机,它在全球范围内产生了深远影响,孕育了众多...

    NES小游戏(经典坦克、魂斗罗。。)

    【标题】"NES小游戏(经典坦克、魂斗罗..)" 涉及到的是一个包含多款经典8位游戏的集合,主要以NES(Nintendo Entertainment System)平台上的游戏为主。NES是任天堂公司于1983年推出的一款家用游戏机,在全球范围内...

Global site tag (gtag.js) - Google Analytics