Crates.io | a2-memory-map |
lib.rs | a2-memory-map |
version | 1.0.4 |
source | src |
created_at | 2024-05-17 20:39:31.792553 |
updated_at | 2024-05-17 20:39:31.792553 |
description | Database of Apple II memory addresses |
homepage | https://github.com/dfgordon/a2-memory-map |
repository | https://github.com/dfgordon/a2-memory-map |
max_upload_size | |
id | 1243663 |
size | 199,819 |
This is the rust binding to a database of Apple II special addresses intended to be used with language servers. The central element is the file map.json
which maps addresses to a set of descriptive strings.
The map records correspond to the structure
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
}
Information is accessed through the opaque struct MemoryMap
. The whole database can be borrowed as a HashMap
as follows:
let a2map = MemoryMap::new();
let full_map: &HashMap<u16,AddressInfo> = a2map.get_all();
To get a single record use
let maybe_info: Option<AddressInfo> = a2map.get_one(addr);
The argument addr
can range from -32767 to 65535. As an example get_one(0xfded)
will give the rust equivalent of
{
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
: short description suitable for display in a selection boxctx
: notes on limiting context, such as hardware requirements, applicability to given language, etc.desc
: long description suitable for hoverslabel
: suggested assembler labelnote
: any other notessubctx
: notes on sub context, e.g., specific aspect of a languagetype
: data type (e.g. word
) or operation type (e.g. ROM routine
, soft switch
)The map.json
file uses logic expressions to delineate information by context, e.g., ctx
might have the value "Applesoft | Integer BASIC"
. The rust binding provides a function to parse the logic and produce an array of records, with each element corresponding to a given context:
let maybe_records: Option<Vec<AddressInfo>> = a2map.get_one_and_split(addr);
If there is no splitting of the ctx
field, no other fields will be split. It is not required to use this function. If get_one
is used instead, downstream will receive the logic expressions, which can be parsed in any manner desired.