Added alignment masks

This commit is contained in:
DataHoarder 2023-10-08 16:20:47 +02:00
parent 2ed56d5936
commit b4e6435498
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
2 changed files with 12 additions and 13 deletions

View file

@ -2,7 +2,6 @@ package go_inthex
import (
"encoding/binary"
"errors"
"strings"
)
@ -15,15 +14,7 @@ func Encode(stream *Stream) (hex []byte, err error) {
}
emitAddress := func(addr uint32) error {
if (addr & 0xFFFF) == 0 {
emitRecord(Record{
Code: RecordExtendedLinearAddress,
Address: uint16(addr >> 16),
Data: nil,
})
return nil
} else if (addr&0xFFF0000F) == 0 && (addr&0xF) == 0 {
if addr <= 0x000FFFF0 && (addr&(^RecordExtendedSegmentAddressMask)) == 0 {
emitRecord(Record{
Code: RecordExtendedSegmentAddress,
Address: uint16(addr / 16),
@ -32,7 +23,13 @@ func Encode(stream *Stream) (hex []byte, err error) {
return nil
} else {
return errors.New("non-aligned address")
emitRecord(Record{
Code: RecordExtendedLinearAddress,
Address: uint16(addr >> 16),
Data: nil,
})
return nil
}
}
@ -40,8 +37,7 @@ func Encode(stream *Stream) (hex []byte, err error) {
const sectionSize = 1 << 16
for _, r := range stream.Regions {
baseAddress := r.Address
if err = emitAddress(baseAddress); err != nil {
if err = emitAddress(r.Address); err != nil {
return nil, err
}

View file

@ -12,6 +12,9 @@ import (
type RecordCode uint8
const ExtendedLinearAddressMask uint32 = 0xFFFF0000
const RecordExtendedSegmentAddressMask uint32 = 0x000FFFF0
const (
RecordData = RecordCode(iota)
RecordEOF