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有点痛苦。明天我们会弄明白更多内容。明儿见!

目录
相关文章
|
24天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
2月前
|
程序员 C++
开心档之 C++ 引用
开心档之 C++ 引用
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
分享261个Python源码源代码总有一个是你想要的
分享261个Python源码源代码总有一个是你想要的
127 0
|
3月前
|
文字识别 NoSQL 物联网
分享55个C源码源代码总有一个是你想要的
分享55个C源码源代码总有一个是你想要的
30 1
|
3月前
|
存储 编解码 Go
编程之美:自定义二进制文件实用指南
编程之美:自定义二进制文件实用指南
38 0
|
5月前
|
算法 编译器 C语言
算法小白的心得笔记:分清楚执行程序和动态链接库的编译方式。
-fPIC 选项:这个选项告诉编译器生成位置无关代码(Position Independent Code)。这种代码同样可以在内存的任何位置执行,因为它使用的是相对地址而不是绝对地址。这对于动态库是必要的,因为动态库在被加载时,其在内存中的位置是不确定的。
27 0
|
10月前
|
缓存 自然语言处理 小程序
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
137 0
|
10月前
|
存储 机器学习/深度学习 JSON
【Python考试资源】包含重点知识、坑点知识,期末考试看这一份就够了
本文章总结Python的各类知识,并将知识之间进行对比,对期末考试非常有效
173 0
|
10月前
|
存储 C语言
PE导出表,C语言打印导出表信息【滴水逆向三期49笔记+作业】(上)
PE导出表,C语言打印导出表信息【滴水逆向三期49笔记+作业】
|
10月前
|
存储 C语言
PE导出表,C语言打印导出表信息【滴水逆向三期49笔记+作业】(下)
PE导出表,C语言打印导出表信息【滴水逆向三期49笔记+作业】

相关实验场景

更多