adapted to Kick Assembler 65C02 support, slightly improved build segment tool
This commit is contained in:
1 parent
03b4e5146c
commit
42c516f44f
3 files changed
+42
-28
No files matched your search
@@ -225,20 +225,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Handle processor configuration
|
|
||||||
|
|
||||||
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
|
||||||
|
|
||||||
#define HAS_BCD_SAFE_INTERRUPTS
|
|
||||||
|
|
||||||
.pseudocommand phx { .byte $DA }
|
|
||||||
.pseudocommand phy { .byte $5A }
|
|
||||||
.pseudocommand plx { .byte $FA }
|
|
||||||
.pseudocommand ply { .byte $7A }
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Handle I/O configuration
|
// Handle I/O configuration
|
||||||
|
|
||||||
#if CONFIG_RS232_UP2400 || CONFIG_RS232_UP9600
|
#if CONFIG_RS232_UP2400 || CONFIG_RS232_UP9600
|
||||||
@@ -246,6 +232,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Handle configuration of various features
|
// Handle configuration of various features
|
||||||
|
|
||||||
#if CONFIG_BCD_SAFE_INTERRUPTS
|
#if CONFIG_BCD_SAFE_INTERRUPTS
|
||||||
|
|||||||
+32
-13
@@ -1,8 +1,27 @@
|
|||||||
//
|
//
|
||||||
// Provide pseudocommands to make CPU optimizations easier
|
// Provide pseudocommands (and other goodies) to make CPU optimizations easier
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
||||||
|
.cpu _65c02
|
||||||
|
#define HAS_OPCODES_65C02
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_CPU_CSG_65CE02
|
||||||
|
#define HAS_OPCODES_65CE02
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_CPU_WDC_65816
|
||||||
|
#define HAS_OPCODES_65816
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
||||||
|
#define HAS_BCD_SAFE_INTERRUPTS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// These are not exactly for optimization - but to encourage proper usage of panic screen
|
// These are not exactly for optimization - but to encourage proper usage of panic screen
|
||||||
//
|
//
|
||||||
@@ -35,7 +54,7 @@
|
|||||||
|
|
||||||
.pseudocommand phx_trash_a
|
.pseudocommand phx_trash_a
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
#if HAS_OPCODES_65C02
|
||||||
phx
|
phx
|
||||||
#else
|
#else
|
||||||
txa
|
txa
|
||||||
@@ -45,7 +64,7 @@
|
|||||||
|
|
||||||
.pseudocommand phy_trash_a
|
.pseudocommand phy_trash_a
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
#if HAS_OPCODES_65C02
|
||||||
phy
|
phy
|
||||||
#else
|
#else
|
||||||
tya
|
tya
|
||||||
@@ -55,7 +74,7 @@
|
|||||||
|
|
||||||
.pseudocommand plx_trash_a
|
.pseudocommand plx_trash_a
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
#if HAS_OPCODES_65C02
|
||||||
plx
|
plx
|
||||||
#else
|
#else
|
||||||
pla
|
pla
|
||||||
@@ -65,7 +84,7 @@
|
|||||||
|
|
||||||
.pseudocommand ply_trash_a
|
.pseudocommand ply_trash_a
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816
|
#if HAS_OPCODES_65C02
|
||||||
ply
|
ply
|
||||||
#else
|
#else
|
||||||
pla
|
pla
|
||||||
@@ -81,7 +100,7 @@
|
|||||||
|
|
||||||
.pseudocommand bcs_far dst
|
.pseudocommand bcs_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $B3, mod(offset, $100), floor(offset / $100)
|
.byte $B3, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -93,7 +112,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bcc_far dst
|
.pseudocommand bcc_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $93, mod(offset, $100), floor(offset / $100)
|
.byte $93, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -105,7 +124,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand beq_far dst
|
.pseudocommand beq_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02 && XXX_DISABLED // XXX causes problems with XEMU, investigate why
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $F3, mod(offset, $100), floor(offset / $100)
|
.byte $F3, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -117,7 +136,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bne_far dst
|
.pseudocommand bne_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $D3, mod(offset, $100), floor(offset / $100)
|
.byte $D3, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -129,7 +148,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bmi_far dst
|
.pseudocommand bmi_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $33, mod(offset, $100), floor(offset / $100)
|
.byte $33, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -141,7 +160,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bpl_far dst
|
.pseudocommand bpl_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $13, mod(offset, $100), floor(offset / $100)
|
.byte $13, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -153,7 +172,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bvc_far dst
|
.pseudocommand bvc_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $53, mod(offset, $100), floor(offset / $100)
|
.byte $53, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
@@ -165,7 +184,7 @@ __l:
|
|||||||
|
|
||||||
.pseudocommand bvs_far dst
|
.pseudocommand bvs_far dst
|
||||||
{
|
{
|
||||||
#if CONFIG_CPU_CSG_65CE02
|
#if HAS_OPCODES_65CE02
|
||||||
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
.var offset = mod($10000 + dst.getValue() - *, $10000)
|
||||||
.byte $73, mod(offset, $100), floor(offset / $100)
|
.byte $73, mod(offset, $100), floor(offset / $100)
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -748,7 +748,8 @@ void BinningProblem::performObviousSteps(DualStream &logOutput)
|
|||||||
|
|
||||||
std::string spacing;
|
std::string spacing;
|
||||||
|
|
||||||
bool repeat = true;
|
bool repeat = true;
|
||||||
|
bool lastGap = false;
|
||||||
while (repeat && !floatingRoutines.empty() && !gaps.empty())
|
while (repeat && !floatingRoutines.empty() && !gaps.empty())
|
||||||
{
|
{
|
||||||
repeat = false;
|
repeat = false;
|
||||||
@@ -766,6 +767,13 @@ void BinningProblem::performObviousSteps(DualStream &logOutput)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!lastGap && gaps.size() == 1)
|
||||||
|
{
|
||||||
|
lastGap = true;
|
||||||
|
logOutput << "selected gap: $" << std::hex << gapAddress << std::dec <<
|
||||||
|
" (size: " << gaps[gapAddress] << ") - the last remaining" << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
if (matchingGaps == 1)
|
if (matchingGaps == 1)
|
||||||
{
|
{
|
||||||
// Routine can only be placed in this particular gap - do so
|
// Routine can only be placed in this particular gap - do so
|
||||||
|
|||||||
Reference in new issue
Block a user