5 个版本
使用旧 Rust 2015
0.1.4 | 2021 年 11 月 15 日 |
---|---|
0.1.3 | 2021 年 8 月 10 日 |
0.1.2 | 2016 年 2 月 22 日 |
0.1.1 | 2016 年 2 月 16 日 |
0.1.0 | 2016 年 2 月 11 日 |
#306 在 模拟器
被用于 ya6502
57KB
1K SLoC
一个作为宏实现的 MOS6502 汇编器 
如果你想要失去一点理智,那么这个库就是为你准备的!
(不开玩笑,你真的想用一个 宏 来汇编东西?)
实现的功能
- 完整的编译时汇编到可执行机器代码
- 机器代码以常量
u8
数组的形式输出(你可以将其存储在static
或const
中) - 支持标签(例如
loop: jmp loop
,beq start
) - 支持所有官方 6502 指令和寻址模式
lib.rs
:
一个作为宏实现的 MOS6502 汇编器。
注意:由于 Rust 宏的限制,与典型的 6502 汇编语法有两个偏差
- 对于绝对寻址模式,需要在助记符后使用
abs
(例如lda abs 0xffff
)。 - 对于累加器寻址模式,需要在助记符后使用
a
(例如lsr a
)。
示例
#[macro_use] #[no_link]
extern crate rustasm6502;
fn main() {
let machine_code = assemble6502! {
lda #0x00
ldx #0x00
ldy #0x00
txs
main:
adc 0xff // Zero-Page
adc abs 0x1234 // Absolute address 0x1234
ror a // Rotate the accumulator
beq main
end:
jmp end
};
assert_eq!(machine_code, [
0xA9, 0x00,
0xA2, 0x00,
0xA0, 0x00,
0x9A,
0x65, 0xff,
0x6D, 0x34, 0x12, // Little-endian
0x6A,
0xF0, (-8i8) as u8,
0x4C, 15, 0,
]);
}