summaryrefslogtreecommitdiff
path: root/src/formats/debug.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-03-06 20:33:27 +1300
committerBen Bridle <ben@derelict.engineering>2025-03-11 16:59:26 +1300
commit1ecee352f5844b0809d7ae66df52e34f42b44c8e (patch)
tree472b6fd57ff7f64ac3f8cd676cbe7a113ba01f05 /src/formats/debug.rs
parentf2ed89083f5326a7a6f0a1720033d3388aa431fb (diff)
downloadtorque-asm-1ecee352f5844b0809d7ae66df52e34f42b44c8e.zip
Rewrite entire assembler
The language is now more general, the code is better structured, error reporting is more detailed, and many new language features have been implemented: - conditional blocks - first-class strings - more expression operators - binary literals - negative values - invocations in constant expressions
Diffstat (limited to 'src/formats/debug.rs')
-rw-r--r--src/formats/debug.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/formats/debug.rs b/src/formats/debug.rs
new file mode 100644
index 0000000..23fd34f
--- /dev/null
+++ b/src/formats/debug.rs
@@ -0,0 +1,18 @@
+use crate::*;
+
+
+pub fn format_debug(segments: &[Segment]) -> Result<Vec<u8>, FormatError> {
+ let mut output = String::new();
+ for segment in segments {
+ // Find maximum width of all words in the segment.
+ let width = segment.words.iter().map(|w| w.to_string().chars().count()).max().unwrap_or(0);
+ let address = &segment.address;
+ output.push_str(&format!("SEGMENT: 0x{address:>04x}\n"));
+ for word in &segment.words {
+ let string = word.to_string();
+ let w = width as usize;
+ output.push_str(&format!(" {string:>w$}\n"));
+ }
+ }
+ return Ok(output.as_bytes().to_vec());
+}