diff options
| author | Ben Bridle <ben@derelict.engineering> | 2025-02-28 14:35:04 +1300 | 
|---|---|---|
| committer | Ben Bridle <ben@derelict.engineering> | 2025-02-28 14:35:04 +1300 | 
| commit | da5c8173a56d5be7fa23d2b18eaba1542aa31dd6 (patch) | |
| tree | 6ef7aa76568bfa2488b0d0d9a878016eabadcae0 /src/formats/inhx32.rs | |
| parent | dba769e13ca5029643c6068e53fa34ae0fea8421 (diff) | |
| download | torque-asm-da5c8173a56d5be7fa23d2b18eaba1542aa31dd6.zip | |
Implement inhx format
inhx is the original Intel hex format.
Diffstat (limited to 'src/formats/inhx32.rs')
| -rw-r--r-- | src/formats/inhx32.rs | 51 | 
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);  | 
