NESASM教程——第四天——制作、载入调色板

【啥?!】

然。今天将创建并载入调色板。为了创建调色板,我们将使用程序PAL.exe,我在第一天给你的那个zip文件中有这个。运行它,你将看到一个窗口,有32个灰色的盒子,你可以从底部彩色盒子中选取绘制颜色填充它们。当你制作调色板时一定要保证每行第一个颜色是黑色,否则你后面制作背景和主角时会看到很多意外的东西。

保存调色板为our.pal。

*新的段落:什么是调色板,简单直接*

*如果我本文后面说了一些和这段矛盾的东西,忽略它*

调色板基本上是一组可供选择的颜色。我们的调色板有32种颜色,占用32字节(每个颜色占1字节)。16种颜色是为主角准备的,16种为背景准备。尽管你可以选择16种,但实际上每个主角只能选4种,背景的每个16x16像素块也只能选4种。现在说起来太复杂,所以我们后面详细介绍。

*新的段落结束*

【怎样载入调色板】

我们通过写入两个内存映射寄存器来为PPU载入调色板。首先向$2006写两次,作为调色板载入的完整首地址($3F00),然后向$2007写入32字节调色板数据。

然而,我们载入调色板之前,应该先学习一点其他知识。

【变址寻址】

你应该记得第一天和第二天,我说X,Y寄存器可以用于变址寻址。这里你会看到怎么做。

;假设X等于6

lda $2002, x; 从内存地址($2002+6)处载入数据,即从$2008处

;假设Y等于9

lda $2000, y; 从内存地址$2009处载入数据

注意你可以载入到任意寄存器,不仅仅是A

【其他】

你需要知道的是:load和store指令可以采用一个标签作为基地址。代码如下:

somelabel: .incbin "our.pal";包含一个pal文件,标签为它的首地址

lda somelabel, x; 从标签表示的地址+X处向A载入一个值

例子程序只写了怎么向A中载入值,其他X,Y是类似的。如果你读过我的Intel汇编教程(http://patater.com/gbaguy/x86asm.htm)或其他基本汇编书籍/文章,你应该已经知道标签的作用。这是基础,不用我多说。

【载入调色板】

为了不让我的键盘一个劲敲,还是让代码自己说话吧。

	lda #$3F   ;
	sta $2006  ;
	lda #$00   ;
	sta $2006  ;
	; 上面这4行告诉$2006:我们后面准备向$3F00地址处写一些东西,由于一次只能写一个字节,所以上面需要store两次

	ldx #$00   ; X <- 0
loadpal:   ; 注意标签不用缩进,后面跟着一个冒号
	lda ourpal, x   ; 从地址ourpal+x处载入调色板数据到A.

	sta $2007       ; 写到$2007里面,PPU会自己放到上面我们设置的首地址$3F00
	; 

	inx    ; 没见过这个指令?就是Increment X的意思,X++
	; 

	cpx #32   ; 比较X和32,也就是数一下已经写入多少调色板数据了.

	bne loadpal  ; BNE表示如果不相等就跳转,所以X不等于32时会跳到loadpal位置,而X==32时则循环结束,调色板载入结束。

假设ourpal是一个定义在汇编源文件后面的标签

ourpal: .incbin "our.pal"; 为我们的调色板贴标签,用于载入代码;

明天我们将完整代码文件放到一起,并显示我们的主角。

【新指令】

上面代码看到了三个新指令:

INX——X增加1;另外INY表示Y增加1;但没有INA,我听说6502设计者忘了这个。在SNES中增加了INA指令,用了下一代6502(65C02)

CPX——比较X和另外的值。还有CPY和CPA。这里值只能是立即数,不允许内存寻址。

BNE——如果上一条CPk(k = A, X, Y)指令结果为“不等”,则跳到一个标签处。另外还有BEQ,当结果相等才跳转。后面我还会详细介绍。

【今日回顾】

载入调色板是十分重要的,因为如果没有它,后面背景显示、主角显示都扯淡。

载入调色板是十分简单的,因为它就是它,一旦写好了就不用动,不需要你再为它做什么。

明天我们讲主角显示。

NES见鬼去吧。睡了。

时间: 2024-09-18 10:57:00

NESASM教程——第四天——制作、载入调色板的相关文章

NESASM教程总述

本教程是关于使用NESASM汇编器为任天堂娱乐系统(NES, Nintendo Entertainment System)编程的.该教程由浅入深,简化了NES汇编学习过程.在进一步尝试前你几乎必须了解另一种汇编语言,因为本文假设你(哪怕一丁点)基本汇编常识是具备的.例如了解GBA或者Intel x86汇编将对理解基础有很大帮助.祝你在学习NES汇编编程的旅途中一切顺利! 第一天--开始NES汇编 第二天--源代码文件结构 第三天--关于NES编程 第四天--制作并载入调色板 第五天--显示主角

NESASM教程——第五天——主角出场

[主角] 主角和背景比起来,你肯定觉得背景会更简单.错!主角才简单得要命. 制造主角只需要向SPR-RAM写入一点点内容(主角的x,y坐标,tile编号,等等). 等等,我觉得咱们得先绘制主角的图片才行,走起~:) [Tile Layer Pro] 存储主角像素块的表格称为Pattern Table,大小4KB,位于PPU $0000~$0FFF或$1000~1FFF(由PPU 控制寄存器设置,见第三天内容). 绘制像素块的工具可以用Tile Layer Pro,我们从一个空白的像素块开始. 运

Fireworks MX晕光文字特效四种制作方法详解

详解 本节我们一起来学习制作晕光效果的特效字,这里我们总共罗列了四种效果的晕光字效果图,在随后的讲解中我们会逐一对其制作方法来做一个讲解,希望本节教程能够对你制作晕光特效有所帮助.先来看效果图. [操作步骤] 第一种晕光特效字的制作方法: 1.将编辑区的背景色设为黑色,在编辑区输入文字"night",字体选用"Times New Roman",字号为"96"大小,字体颜色为"#003399",字体采用"加粗"

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

Wix 安装部署教程(四) 添加安装文件及快捷方式

原文:Wix 安装部署教程(四) 添加安装文件及快捷方式       通过之前三篇的介绍,大家对wix的xml部署方式也应该有一些认识,今天天气不错,再来一发.主要介绍桌面,开始菜单,卸载等功能的如何添加.希望园友们支持! 一.如何添加文件      Demo打包程序很简单,就一个exe,但实际过程中,往往还要引用一些dll,配置文件.我们如何安装到目标文件下呢.这个就比windows installer 麻烦些了,在windows installer中直接一个添加引用就可以了. 但wix也不麻

Android简明开发教程十四:Context Menu绘制几何图形

上下文相关菜单(Context Menu)类同PC上按鼠标右键显示的菜单,在Android平台上是长按来激活Context Menu,Context Menu一般用来显示和当前UI内容相关的菜单. Context Menu的用法和Option Menu非常类似: 首先是创建 菜单资源,在res/menu 下新建menu_context_shape.xml,用来显示Oval,Pear,Shape2D: <?xml version="1.0″ encoding="utf-8″?>

Flash教程实例:如何制作别样的绿

  设置影片属性;使用"文字工具"写入文字;使用帧动作设置动作;使用帧属性设置帧的属性;创建新元件.本文对Flash教程实例 :如何制作别样的绿进行了具体阐述供阅读. [步骤] (1) 启动Flash MX 2004,如果"属性"面板没有打开,可选择菜单栏中的"窗口"|"属性"命令打开它.在"属性"面板中,设置动画尺寸大小为600×300px.确认 "帧频"文本框中的数值为12.&quo

python-flask文档中教程步骤四代码执行错误

问题描述 flask文档中教程步骤四代码执行错误 按照说的执行之后 解决方案 看你的文档,哪里来的get_db函数,前几章有没有交代

使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置

原文:使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[四]--实现模型工厂,依赖注入以及格式配置 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在上一篇中,我们已经初步开始使用Web Api了,但同时出现了一些很多不足之处,本章我们就着重来解决这些不足. 上篇导航:http://www.cnblogs.com/fzrain/p/3510035.html 配置JSON的格式 Web Api提供Xml和JSON作