mirror of
https://github.com/fadden/6502bench.git
synced 2026-04-25 21:18:25 +00:00
Attempt to generate segment names for cc65
This worked, sort of. The problem is that SourceGen will revert to hex output in certain situations, such as a broken symbolic reference. There happens to be one in the ZIPPY example, and it's on a relative branch. The goal with the segment stuff is to allow cc65 to treat the source as relocatable code. In that context, a relative branch to an absolute address doesn't make any sense, so the assembler reports a range error. We don't currently have a mechanism that guarantees no references are broken (and no affordance for finding them), so we can't make this mode the default yet. Instead, we continue to use the generic config, but generate the correct set of lines as comments. (issue #39)
This commit is contained in:
+28
-16
@@ -85,8 +85,20 @@ namespace SourceGen {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the address map entry index associated with the specified offset, or -1
|
||||
/// if there is no address map entry there.
|
||||
/// Returns the Nth entry in the address map.
|
||||
/// </summary>
|
||||
public AddressMapEntry this[int i] {
|
||||
get { return mAddrList[i]; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Number of entries in the address map.
|
||||
/// </summary>
|
||||
public int Count { get { return mAddrList.Count; } }
|
||||
|
||||
/// <summary>
|
||||
/// Returns the Address value of the address map entry associated with the specified
|
||||
/// offset, or -1 if there is no address map entry there. The offset must match exactly.
|
||||
/// </summary>
|
||||
public int Get(int offset) {
|
||||
foreach (AddressMapEntry ad in mAddrList) {
|
||||
@@ -97,6 +109,20 @@ namespace SourceGen {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the index of the address map entry that contains the given offset.
|
||||
/// We assume the offset is valid.
|
||||
/// </summary>
|
||||
private int IndexForOffset(int offset) {
|
||||
for (int i = 1; i < mAddrList.Count; i++) {
|
||||
if (mAddrList[i].Offset > offset) {
|
||||
return i - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return mAddrList.Count - 1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds, updates, or removes a map entry.
|
||||
/// </summary>
|
||||
@@ -165,20 +191,6 @@ namespace SourceGen {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the index of the address map entry that contains the given offset.
|
||||
/// We assume the offset is valid.
|
||||
/// </summary>
|
||||
private int IndexForOffset(int offset) {
|
||||
for (int i = 1; i < mAddrList.Count; i++) {
|
||||
if (mAddrList[i].Offset > offset) {
|
||||
return i - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return mAddrList.Count - 1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the given address falls into the range spanned by the
|
||||
/// address map entry.
|
||||
|
||||
Reference in New Issue
Block a user