#汇编 #模拟器 #cpu #硬件设备 #模拟器 #游戏

bin+lib dcpu16

DCPU-16 汇编器、反汇编器和模拟器

11 个版本 (4 个重大更改)

使用旧的 Rust 2015

0.4.0 2016 年 12 月 18 日
0.3.0 2016 年 12 月 17 日
0.2.0 2016 年 12 月 16 日
0.1.0 2016 年 12 月 15 日
0.0.6 2015 年 6 月 16 日

#347 in 模拟器

每月 42 次下载
用于 dcpu16-gui

MIT 许可证

135KB
3K SLoC

Crates.io

DCPU-16

使用 Rust 编写的 DCPU-16 汇编器、反汇编器和模拟器。

DCPU-16 是来自 Notch (2012 年) 从未完成的游戏 0x10c 的 CPU 规范。有关 DCPU-16 的更多信息

要使用硬件设备(如显示器、键盘等)运行 DCPU-16 程序,请使用

完成的功能

DCPU-16 功能完善,可供使用

  • 汇编器
    • 标签
    • 字符串字面量
    • 算术字面量(例如 SET A, 0x8000+100*3
    • 可读的错误消息
  • 反汇编器
    • 独立的分词器
    • 着色输出
  • 模拟器
    • 支持所有 DCPU-16 v1.7 指令
    • 一些额外的指令,适合调试和测试
    • 设备
      • 显示器(LEM1802)
      • 键盘
      • 软盘驱动器(M35FD)

计划扩展功能

  • 更多单元测试
  • 并发支持
  • DCPU-16 计算机之间的通信
  • 一种简单的编程语言,编译为 DCPU-16

二进制文件

运行 cargo build --release 并将 dcpu16/target/release 添加到您的 PATH

  • 汇编器
    • $dcpu16-assembler program.asm -oprogram.bin
  • 反汇编器
    • $dcpu16-disassembler program.bin
  • 分词器
    • $dcpu16-tokenizer program.bin
  • 模拟器
    • $dcpu16 -pprogram.bin

除了提供二进制文件外,这个包还可以用作库,并嵌入到其他程序中。一个例子可以在dcpu16-gui中看到。

扩展

一些扩展(可能是临时的)

--- Special opcodes: (5 bits) --------------------------------------------------
 C | VAL  | NAME  | DESCRIPTION
---+------+-------+-------------------------------------------------------------
 0 | 0x13 | OUT a | prints a null-terminated string located at a in memory
 0 | 0x14 | OUV a | prints a value in decimal and then a newline
---+------+-------+-------------------------------------------------------------

由于不支持硬件,你可以使用OUT来输出到常规标准输出。另一个临时行为是,如果CPU读取到0x00指令,则会终止。

汇编器的扩展

-- Assembler instructions ------------------------------------------------------
 FORMAT       | DESCRIPTION
--------------+-----------------------------------------------------------------
 DAF c, v     | DATA FILL - repeats a value a certain number of times
              | c (count) and v (value) must be numerical literals
              | e.g. DAF 256, 0xffff  ; Fill 256 words with -1
--------------+-----------------------------------------------------------------

示例

将以下内容保存为prog.asm

            OUT hello                   ; Print the string defined at 'hello'
            DAT 0                       ; This will terminate the program    

:hello      DAT "Hello World!\n", 0

汇编程序

$ assembler prog.asm -o prog.bin

运行它

$ emulator prog.bin
Hello World!

依赖项

~445KB