1 个稳定版本
1.0.4 | 2024年5月17日 |
---|
#185 在 文本编辑器
用于 a2kit
47KB
408 代码行
Apple II 内存映射
这是一个用于与语言服务器一起使用的 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