summaryrefslogtreecommitdiff
path: root/src/formats/inhx32.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/formats/inhx32.rs')
-rw-r--r--src/formats/inhx32.rs51
1 files changed, 6 insertions, 45 deletions
diff --git a/src/formats/inhx32.rs b/src/formats/inhx32.rs
index d9c31d3..fd7fd7b 100644
--- a/src/formats/inhx32.rs
+++ b/src/formats/inhx32.rs
@@ -16,47 +16,8 @@ pub fn format_inhx32(words: &[Word]) -> String {
return output;
}
-struct Record {
- bytes: Vec<u8>,
-}
-
-impl Record {
- pub fn new() -> Self {
- Self { bytes: Vec::new() }
- }
-
- pub fn byte(&mut self, byte: u8) {
- self.bytes.push(byte);
- }
-
- pub fn be_double(&mut self, double: u16) {
- let [high, low] = double.to_be_bytes();
- self.byte(high);
- self.byte(low);
- }
-
- pub fn le_double(&mut self, double: u16) {
- let [high, low] = double.to_be_bytes();
- self.byte(low);
- self.byte(high);
- }
-
- pub fn to_string(self) -> String {
- let mut sum: u8 = 0;
- for byte in &self.bytes {
- sum = sum.wrapping_add(*byte);
- }
- let checksum = sum.wrapping_neg();
- let mut output = String::new();
- for byte in &self.bytes {
- output.push_str(&format!("{byte:0>2X}"));
- }
- format!(":{output}{checksum:0>2X}\n")
- }
-}
-
-fn data_record(words: &[Word], address: u16) -> Record {
- let mut record = Record::new();
+fn data_record(words: &[Word], address: u16) -> InhxRecord {
+ let mut record = InhxRecord::new();
record.byte((words.len() * 2) as u8);
record.be_double(address * 2);
record.byte(0x00);
@@ -69,8 +30,8 @@ fn data_record(words: &[Word], address: u16) -> Record {
return record;
}
-fn extended_linear_address(address: u16) -> Record {
- let mut record = Record::new();
+fn extended_linear_address(address: u16) -> InhxRecord {
+ let mut record = InhxRecord::new();
record.byte(0x02);
record.be_double(0x0000);
record.byte(0x04);
@@ -78,8 +39,8 @@ fn extended_linear_address(address: u16) -> Record {
return record;
}
-fn terminating_record() -> Record {
- let mut record = Record::new();
+fn terminating_record() -> InhxRecord {
+ let mut record = InhxRecord::new();
record.byte(0x00);
record.be_double(0x0000);
record.byte(0x01);