NESASM教程——第二天——源文件的结构

【发生了什么?】

嗯,你是个NES小白程序员,今天我们将学习一个NESASM代码文件的结构。不幸的是,我们的汇编器对缩进非常讲究,一行的开始位置只能放标签,放其他所有内容都必须加一个【TAB】键缩进。尽管这样听上去很糟糕,但这样确实提高了可读性,让你更容易理解代码,尤其是大程序。

【关于段(Bank)】

不不不,Bank不会帮你拿着你的钱,它们帮你拿着你的程序和数据。我们将经常用三个段:

段 0 —— 放我们的代码,起始于$8000

段 1 —— 中断向量表,很重要,起始于$FFFA

段 2 —— 我们将主角和背景数据点阵信息放在这里,起始于$0000

我不确定一共有多少段,但显然至少3个。我们将用.bank指令来移动段,用.org指令来告诉汇编器在那个段我们的起始地址是什么。

【INES文件头】

INES文件头放在每个ROM文件的开头,告诉模拟器一些信息,它们是:

.inesprg —— 告诉模拟器有多少个代码段

.ineschr —— 告诉模拟器有多少图片数据段

.inesmir —— 告诉模拟器……我忘了是什么,但总是1

.inesmap —— 我们总是用Mapper 0

我们常用设置为:

	.inesprg 1   ; 一个代码段
	.ineschr 1   ; 一个数据段
	.inesmap 0   ; 使用mapper 0
	.inesmir 1   ; 总是1

这四行将放在(几乎所有)代码文件的最前面。

【段0和.org】

我们使用段0来放代码,起始地址为$8000。代码将这么写:

	.bank 0   ; 段 0.
	.org $8000  ; 去 $8000.

	; 真正代码从这里开始

就这么多。注意分号(;)后面的内容为注释,汇编器忽略一行分号后面的所有内容。

【段1和三个中断向量】

不用长篇大论,直接来点美味小吃代码如何?

	.bank 1     ; 切到段 1
	.org $FFFA  ; 从 $FFFA开始

	.dw 0        ; NMI中断向量
	.dw Start    ; 复位向量,复位时从这个地址开始运行代码,我们给出了Start标签的地址,该标签最终放在段0中
	.dw 0        ; VBlank 中断向量,目前我们不需要

段1内容就这么多,简单!

【段2和图片数据】

段2,我们将从地址$0000开始,里面包含我们的图片数据,可用于背景和主角显示。代码如下:

	.bank 2        ; 切到段 2
	.org $0000    ; 从 $0000开始

	.incbin "our.bkg"  ; 包含二进制文件,内容为我们的背景图片数据
	.incbin "our.spr"  ; 包含二进制文件,内容为我们的主角图片数据

【今天内容复习】

今天真的就这么多。我觉得有点慢了,因为NES编程相对GBA有点痛苦。明天我们会弄明白更多内容。明儿见!

时间: 2024-10-28 23:41:58

NESASM教程——第二天——源文件的结构的相关文章

JavaScript进阶教程(第二课)第1/3页_基础知识

今天我们将学习一项很有用而且很有趣的内容:cookies - 这是用来记录访问过你的网页的人的信息.利用Cookies你能记录访问者的姓名,并且在该访问者再次访问你的站点时向他发出热情的欢迎信息.你还可以利用cookie记忆用户端的特点 - 如果访问者的所接入的网线的速度慢,cookie可以自动告诉你在给其发送网页的时候只发送尽可能少的图片内容.     只要你在合理的范围内使用cookies(不要用它探询用户的个人隐私),cookies还是相当实用得.所以我要向你们介绍cookies的工作原理

jQuery Mobile教程:最简单的页面结构

文章简介:不管你是对jQuery Mobile一无所知或者对它有很大的兴趣在研究过程中,还是已经开始用它做项目的开发者,欢迎加入这个jqm学习之旅. 不管你是对jQuery Mobile一无所知或者对它有很大的兴趣在研究过程中,还是已经开始用它做项目的开发者,欢迎加入这个jqm学习之旅 1.什么是jQuery Mobile? 按照官方的描述:针对智能手机和平板.做过触摸优化的web框架.截止到编写这个教程的时候,目前最新的版本是1.3.0. 2.jQuery Mobile推崇什么? 其实很多读者

第一章 Solidity源文件的结构

第一章 Solidity源文件的结构 源文件可以包含任意数量的智能合约的定义以及任意数量的include指令和pragma伪指令. 版本声明 版本声明代码格式如下: pragma solidity ^0.4.0; 这段代码的声明表示,源文件不会被0.4.0以下版本的编译器编译.当然同时也不会被0.5.0以上版本的编译器起作用(这是由^符号来决定的). 0.4.0 ~ 0.4.9 这些版本支持上面代码声明的源码编译,这样处理的好处是,如果0.4.0编译器有问题,可以随时修复bug,将其调整为0.4

简明 TensorFlow 教程 — 第二部分:混合学习

本文讲的是简明 TensorFlow 教程 - 第二部分:混合学习, 快速上手世界上最流行的深度学习框架. 确保你已经阅读了第一部分 在本文中,我们将演示一个宽 N 深度网络,它使用广泛的线性模型与前馈网络同时训练,以证明它比一些传统的机器学习技术能提供精度更高的预测结果.下面我们将使用混合学习方法预测泰坦尼克号乘客的生存概率. 混合学习技术已被 Google 应用在 Play 商店中提供应用推荐.Youtube 也在使用类似的混合学习技术来推荐视频. 本文的代码可以在这里找到. 广泛深度网络

VBScript教程 第二课在HTML页面中添加VBscript代码_vbs

VB教程 > 第二课在HTML页面中添加VBscript代码 SCRIPT 元素用于将 VBScript 代码添加到 HTML 页面中. <SCRIPT> 标记 VBScript 代码写在成对的 <SCRIPT> 标记之间.例如,以下代码为一个测试传递日期的过程: <SCRIPT LANGUAGE="VBScript"> <!--Function CanDeliver(Dt)CanDeliver = (CDate(Dt) - Now())

数据结构教程 第二十三课 二叉树的存储结构

教学目的: 掌握二叉树的两种存储结构 教学重点: 链式存储结构 教学难点: 链式存储二叉树的基本操作 授课内容: 一.复习二叉树的定义 二叉树的基本特征:每个结点的度不大于2. 二.顺序存储结构 #define MAX_TREE_SIZE 100 typedef TElemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt; 结点编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 结点值 1 2 3 4 5 0 0 0 0 6 7 0 0

数据结构教程 第二十八课 图的存储结构

教学目的: 掌握图的二种存储表示方法 教学重点: 图的数组表示及邻接表表示法 教学难点: 邻接表表示法 授课内容: 一.数组表示法 用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息. // 图的数组(邻接矩阵)存储表示 #define INFINITY INT_MAX //最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef enum{DG,DN,AG,AN} GraphKind;//有向图,有向网,无向图,无向网 typ

NESASM教程总述

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

学习正则表达式30分钟入门教程(第二版)_正则表达式

由于本人内容过多排版比较乱,推荐大家浏览单独网页版 http://www.jb51.net/tools/zhengze.html 本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它. 如何使用本教程 最重要的是--请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门--除非你是超人 :) 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难.当然,如果你看完了这篇教程之后,发现