NESASM教程——第四天——制作、载入调色板
来源:互联网 发布:平面设计软件下载 编辑:程序博客网 时间:2024/04/25 18:08
【啥?!】
然。今天将创建并载入调色板。为了创建调色板,我们将使用程序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 <- 0loadpal: ; 注意标签不用缩进,后面跟着一个冒号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见鬼去吧。睡了。
- NESASM教程——第四天——制作、载入调色板
- NESASM教程——第十天——主角DMA
- NESASM教程——第五天——主角出场
- NESASM教程——第七天——使用内存
- NESASM教程——第八天——比较
- NESASM教程——第十一天——JSR指令
- NESASM教程——第十三天——背景
- NESASM教程——第六天——跳转和按键处理
- NESASM教程——第二天——源文件的结构
- NESASM教程——第十二天——VBlank和中断
- NESASM教程——第一天——开始NES汇编
- NESASM教程——第三天——NES编程相关
- NESASM教程——第九天——运动的主角
- NESASM教程总述
- 【Android】自定义View —— 环形调色板
- Qt学习12——调色板QPalette
- 【木头Cocos2d-x 012】游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
- 小迪教程第四天——Php+mysql注入
- 嵌入式第二天:第一个程序Hello,World
- UVA 11270 Tiling Dominoes 初学插头DP
- Android 时间格式 年月日时分秒毫秒
- poj 3635 Full Tank 动态规划思想在spfa算法中的应用
- 北京大学光华管理学院MBA2015年招生信息
- NESASM教程——第四天——制作、载入调色板
- Java多线程-新特征-信号量Semaphore
- 第12周 项目2-(1)求n组数中的最大公约数
- 《人月神话》读后感
- C和指针(3)指针
- POJ3641 Pseudoprime numbers 【快速幂】
- linux 定时重启 tomcat
- UML--------三大结构
- 北京大学光华管理学院2015年工商管理硕士(MBA)专业学位研究生招生简章