From 9378fb90732a06c086ed59ea66317eda82653e7e Mon Sep 17 00:00:00 2001 From: ggn Date: Wed, 26 Oct 2022 21:30:21 +0300 Subject: [PATCH] Fix for #210 - 6502 mode with -fr working --- 6502.c | 20 +++++++++++++++++++- direct.c | 4 ++++ object.c | 11 ++++++++++- rmac.c | 2 ++ rmac.h | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/6502.c b/6502.c index db6c638..c523086 100644 --- a/6502.c +++ b/6502.c @@ -243,7 +243,7 @@ int d_6502() regtab = reg65tab; regcheck = reg65check; regaccept = reg65accept; - + used_architectures |= M6502; return 0; } @@ -569,3 +569,21 @@ void m6502obj(int ofd) } } +// Write raw 6502 org'd code. +// Super copypasta'd from above function +void m6502raw(int ofd) +{ + CHUNK *ch = sect[M6502].scode; + + // If no 6502 code was generated, bail out + if ((ch == NULL) || (ch->challoc == 0)) + return; + + register uint8_t *p = ch->chptr; + + for (uint16_t *l = &orgmap[0][0]; l < currentorg; l += 2) + { + // Write the segment data + uint32_t unused = write(ofd, p + l[0], l[1] - l[0]); + } +} diff --git a/direct.c b/direct.c index 65a119d..4511c6a 100644 --- a/direct.c +++ b/direct.c @@ -2006,6 +2006,7 @@ int d_56001(void) regtab = reg56tab; regcheck = reg56check; regaccept = reg56accept; + used_architectures |= M56001P | M56001X | M56001Y | M56001L; return 0; } @@ -2037,6 +2038,7 @@ int d_gpu(void) regtab = regrisctab; regcheck = regrisccheck; regaccept = regriscaccept; + //used_architectures |= MGPU; // TODO: Should GPU/DSP have their own dedicated sections in the long run? return 0; } @@ -2068,6 +2070,7 @@ int d_dsp(void) regtab = regrisctab; regcheck = regrisccheck; regaccept = regriscaccept; + //used_architectures |= MDSP; // TODO: Should GPU/DSP have their own dedicated sections in the long run? return 0; } @@ -2340,6 +2343,7 @@ int d_objproc(void) rgpu = 0; // Unset GPU assembly rdsp = 0; // Unset DSP assembly dsp56001 = 0; // Unset 56001 assembly + //used_architectures |= MOP; // TODO: Should OP have its own dedicated section in the long run? return OK; } diff --git a/object.c b/object.c index 78c225f..6a69fcf 100644 --- a/object.c +++ b/object.c @@ -859,9 +859,18 @@ for(int j=0; j