1 个稳定版本

1.0.4 2024年5月17日

#185文本编辑器


用于 a2kit

MIT 许可证

47KB
408 代码行

Apple II 内存映射

unit tests

这是一个用于与语言服务器一起使用的 Apple II 特殊地址数据库的 Rust 绑定。核心元素是文件 map.json,它将地址映射到一组描述性字符串。

映射记录

映射记录对应于以下结构

pub struct AddressInfo {
    pub brief: Option<String>,
    pub ctx: Option<String>,
    pub desc: String,
    pub label: Option<String>,
    pub note: Option<String>,
    pub subctx: Option<String>,
    pub typ: String
}

信息通过不透明的 struct MemoryMap 访问。整个数据库可以作为一个 HashMap 借用,如下所示

let a2map = MemoryMap::new();
let full_map: &HashMap<u16,AddressInfo> = a2map.get_all();

要获取单个记录,请使用

let maybe_info: Option<AddressInfo> = a2map.get_one(addr);

参数 addr 的范围是从 -32767 到 65535。例如,get_one(0xfded) 将给出 Rust 的等效值

{
  brief: 'Print character in A',
  desc: 'Invoke output routine whose address is in (56).  Usually prints character in A.',
  label: 'COUT',
  type: 'ROM routine'
}

地址信息字段

  • brief:适合在选择框中显示的简短描述
  • ctx:关于限制上下文的信息,例如硬件要求、适用于特定语言的适用性等。
  • desc:适合悬停的详细描述
  • label:建议的汇编器标签
  • note:其他任何注释
  • subctx:关于子上下文的信息,例如特定语言的特定方面
  • type:数据类型(例如 word)或操作类型(例如 ROM 例程软开关

多上下文记录

文件 map.json 使用逻辑表达式来根据上下文划分信息,例如 ctx 可能具有值 "Applesoft | Integer BASIC"。Rust 绑定提供了一个函数来解析逻辑并生成一个记录数组,每个元素对应一个给定的上下文

let maybe_records: Option<Vec<AddressInfo>> = a2map.get_one_and_split(addr);

如果 ctx 字段没有分割,则不会分割其他字段。不需要使用此函数。如果使用 get_one,则下游将接收到逻辑表达式,可以以任何所需的方式进行解析。

依赖关系

~0.5–1MB
~20K SLoC