Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>6502 AssemblerNew to Visual Studio Code? Get it now.
6502 Assembler

6502 Assembler

Preview

ZENG GE

|
5,683 installs
| (1) | Free
A simple 6502 assembler plugin for VSCode
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

6502编译器插件

我已放弃更新该版本的更新,新开了一个坑,新坑地址 可以在搜索插件 ZG Assembler,该插件能提供更好的体验

English Version

如果新版造成错误过多,请使用老版本,版本0.0.17

项目设置

当打开项目文件夹时,会在 .vscode 文件夹内生成 6502-project.json 文件

{
	"compileTimes": 2,
	"suggestion": true,
	"singleFile": {
		"outFile": "",
		"copyCodeToClipboard": true
	},
	"projects": [
		{
			"name": "project1",
			"entry": "main.65s",
			"includes": [
				"**/*.65s"
			],
			"excludes": [],
			"outFile": "",
			"patchFile": "",
			"copyCodeToClipboard": false
		}
	]
}

功能介绍

编译

在65s文件下的编辑器内,点击鼠标右键则会出现编译菜单。

局部标签

若文件内使用标签(非6502编译器指令)以.(点)开头,则该标签的有效范围仅仅于本文件。 这样有利于可以在不同文件使用相同名称的标签。

数据组

:(冒号),详情请参阅6502编译器指令的 .DBG .DWG .ENDD 命令。

注释

;(分号),后面的文字用于注释,这里提供了新的功能:折叠。 折叠功能以 ;+... 开始, ;-... 结束,同样,折叠会被视为注释,但是这里可以把代码进行折叠,这样可以省略一些可以不需要查看的代码。

简易标签

当标签以全部是+号或全部是-号的时候,则是特殊标签。例如:

-       LDA $2002
        BPL -

编译结果则为:AD 02 20 10 FB。 这里+号为向下查找最近的+号标记,-号为向上查找最近的-号标记。 在++,--后可以添加标签名称,比如++mark,这里寓意也是向下查找最近的++mark标签。 当然,这里使用+-号可能会比较混乱,建议使用局部变量标签。


编译器命令 (不区分大小写)

.BASE

注意:编译自上而下,一些第一次编译需要赋值的变量如果第一次编译未知则编译不成功。 设置生成文件地址,默认为.BASE 0,这里不等同与.ORG。 例如:若.BASE $10,则生成的文件编译内容从$10开始写入,之前的$F个地址为0。 注意:如果使用.BASE命令,则在.ORG之后,否则编译错误。


.ORG

设置开始编译地址,例如:.ORG $8000,则编译将从$8000开始。 也可以使用.ORG *,表示从当前地址开始编译。不过要知道当前地址,否则编译器报错。

注意:如果使用 .BASE 命令,则在 .ORG 之后,否则编译错误。


.DEF

定义一个常量,例如:.DEF idefined $12

注意:temp = $12虽然也能定义,但是可以重复定义。


.DB

表示字节,后可以写多个字节。 若字节大于$FF(255),则编译器会报错 例如:

    .DB $40, 40, @01010010, >address

.DW

表示双字节,先低位再高位。 若双字节大于$FFFF(65535),则编译器会报错 例如:

    .DW $40, 60000, @01010101, address

.DBG .DWG .ENDD

数据组,用于定位数据位置。 例如:

    .DWG data
	.data1, .data2, .data3, .data1
	.ENDD

	LDA data:.data1		;0
	LDA data:.data3     ;2
	LDA data:.data1:1	;3

.HEX

生成一段16进制数据,可以用空格隔开。 注意:之后只能输入16进制数据,否则编译器会报错。 例如:

    .HEX 12 34567 89

生成结果为 12 34 56 07 89

.IF .ELSEIF .ELSE .ENDIF

这里是一套判断条件,根据条件是否成立是否编译相应内容。 注:必须要在使用这些之前知道参数的信息,否则编译报错 例如:

    .IF a == 5
    ...
    .ELSEIF b >= 5
    ...
    .ELSEIF c != 3
    ...
    .ELSE
    ...
    .ENDIF

.IFDEF .IFNDEF

这里是一套判断条件,根据条件是否成立是否编译相应内容。 用法同 .IF 的命令类似,后面可以用 .ELSE .ENDIF 这里是判断变量是否存在,.IFDEF为判断变量是否存在,.IFNDEF为判断变量是否不存在。

注:必须要在使用这些之前知道参数的信息,否则编译报错

.INCBIN

可以读取引用文件的二进制内容,后面双引号内请填写本文件的相对路径。 例如:

    .INCBIN "文件夹\文件.bin"。

.INCLUDE

可以引用文件,后面双引号内请填写本文件的相对路径。 如果引用文件内也有引用文件,请相对于主编译文件路径填写。 例如:

    .INCLUDE "文件夹\文件.65s"。

.MACRO .ENDM

用这里的指令可以自定义函数,所要使用的函数要在编译之前定义好,否则编译器会报错。

所有自定义函数内的标签属于局部变量,请勿在函数外部使用。 例如:

    .MACRO 参数名 参数1,参数2,参数3... (注:参数个数不限,也可以没有参数,参数之间用逗号隔开)
    ...
    .ENDM

如下方法调用: 参数名 参数1,参数2,参数3...

实例1:

    .MACRO TXY
    TXA
    TAY
    .ENDM

    TXY

编译之后结果为:8A A8

实例2:

    .MACRO test a,b
    .IF 3 == a
    LDA 3
    .ELSEIF 4 == a
    LDX 4
    .ELSEIF 5 == a && 5 == b
    LDY 5
    .ELSE
    LDA 6
    STA 6
    .ENDIF
    .ENDM

    test 3,3
    test 4,3
    test 5,4
    test 5,5

编译之后结果为:A5 03 A6 04 A5 06 85 06 A4 05


.REPEAT .ENDR

可以重复某个指令多次,在 .REPEAT 后输入表达式即可。 注意:每个 .REPEAT 和 .ENDR 必须成对出现,可以嵌套。 例如:

    .REPEAT 2
    NOP
    .REPEAT 3
    ASL
    .ENDR
    .ENDR

对应编译的结果相当于:NOP ASL ASL ASL NOP ASL ASL ASL


.MSG

编译到这里的时候将会显示对话框。

注意:这里所有数字结果将会是10进制呈现,并且.MSG命令后的表达式按照标准进行运算,如果先是字符串相加,则后面的数字将会按照字符串的进行拼接,请注意!

例如:

    .ORG $8000
    测试地址1 = $50
    测试地址2 = 50
    .MSG "测试结果:" + (测试地址1 + 测试地址2)

这里则会在输出窗口显示 测试结果:130

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft