NESASM教程——第三天——NES编程相关

简介:

【PPU】

NES上发生的一切都需要通过图形方式输出,我们需要对PPU(图像处理单元)编程。其实很简单,就是向特定内存地址写一些数值,然后PPU的设置就被修改为你设置的值。NES所有编程都使用所谓的内存映射寄存器(MMR)实现。如果你给GBA编过程序,肯定知道MMR。但对于Intel芯片知识来说,MMR是个外星人。

【二进制注意事项】

为了绝对清晰,我们将按以下顺序给出内存寄存器的比特(0x63):

bit: 7  6  5  4  3  2  1  0

val:0  1  1  0  0  0  1  1

所以,第7比特位于最左边,第0比特位于最右边。

【设置PPU】

注意首先要做的一件事是设置PPU。我们只需向存储器$2000和$2001写一些值,这两个地址对应两个PPU控制寄存器。为了解释$2000和$2001,下面从YOSHi的文档里面摘抄的寄存器描述:

            2000h - PPU 控制寄存器 1 (只写)
  Bit7  发生VBlank时执行NMI               (0=Disabled, 1=Enabled)
  Bit6  PPU 主从模式选择                  (0=主模式, 1=从模式) (NES中没用)
  Bit5  主角尺寸                          (0=8x8, 1=8x16)
  Bit4  背景Pattern Table 首地址          (0=VRAM 0000h, 1=VRAM 1000h)
  Bit3  主角Pattern Table 首地址          (0=VRAM 0000h, 1=VRAM 1000h)
  Bit2  端口0x2007 VRAM 地址增量          (0=自动增1, 1=自动增32)
  Bit1-0 Name Table卷轴首地址             (0-3=VRAM 2000h,2400h,2800h,2C00h)
  (也就是说,Bit0=水平卷轴滚动256, Bit1=垂直卷轴滚动240)

2001h - PPU 控制寄存器 2 (只写)
  Bit7-5 颜色增强                         (0=正常, 1-7=增强) 
  Bit4  主角可见                          (0=不显示, 1=显示)
  Bit3  背景可见                          (0=不显示, 1=显示)
  Bit2  主角切除                          (0=切除左边8个像素列, 1=不切除)
  Bit1  背景切除                          (0=切除左边8个像素列, 1=不切除)
  Bit0  灰度模式                          (0=彩色模式, 1=灰度模式)  

为了设置PPU,我们进行两次写内存操作,代码为:

	lda #%00001000 
	sta $2000
	lda #%00011110
	sta $2001

我们写入$2000的值表示告诉PPU以下内容:

NMI禁止了;

主角尺寸8x8;

背景Pattern Table起始地址$0000;

主角Pattern Table起始地址$1000;

地址自动增1;

NameTable起始地址$2000;

写入$2001的值告诉PPU:

不要影响调色板;

显示主角;

显示背景;

显示所有位置的主角;

显示最左边8像素;

彩色模式;

你自己应该能从二进制码读懂上述具体含义。

【为了获得输出我们还需要做什么?】

如果你说的是背景,我们还要做:

制作一个背景;

a. 绘制一些tile(用Tile Layer Pro);

b. 在段2首先包含上面的tile文件;

c. 创建并载入一个调色板;

d. 在Name Table中设置显示的tile号码

这样就显示了背景!

如果是主角,那么顺序应该是这样:

制作一个主角:

a. 在Tile Layer Pro中绘制主角;

b. 段2中包含该文件作为第二个;

c. 创建并载入调色板;

d. 在主角数据区(类似GBA中的OAM)设置主角属性;

主角出场!

我们明天学习怎样载入调色板。调色板很重要,一半是背景调色,一半是主角调色。

目录
相关文章
|
6月前
【2023Unity游戏开发教程】零基础带你从小白到超神02——新建第一个项目
【2023Unity游戏开发教程】零基础带你从小白到超神02——新建第一个项目
29 0
|
6月前
|
存储 设计模式 算法
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)
|
JavaScript 前端开发 Linux
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
250 0
刘金玉的零基础VB教程070期:贪吃蛇游戏开发第六节 记分与故障排除
刘金玉的零基础VB教程070期:贪吃蛇游戏开发第六节 记分与故障排除
105 0
刘金玉的零基础VB教程071期:贪吃蛇游戏开发第七节 游戏暂停控制
刘金玉的零基础VB教程071期:贪吃蛇游戏开发第七节 游戏暂停控制
|
Unix C语言 C++
开心档-开发入门网之C++ 教程
开心档-开发入门网之C++ 教程
|
程序员 Python
Python制作七夕表白实例项目-让你的情人心动起来
Python制作七夕表白实例项目-让你的情人心动起来
Python制作七夕表白实例项目-让你的情人心动起来
|
数据库 iOS开发 MacOS
yyds,Win10真香!!!
相对于macOS,Windows功能实用性差、外观丑陋....这似乎成了很多用户的共识。 也许,用过今天介绍的这5款工具之后能够改变你的观点。
yyds,Win10真香!!!
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
环境搭建 GO+版的祝福语管理系统 前期想法 界面展示 整体界面 增加祝福信息 修改操作 删除操作 退出
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)