diff options
Diffstat (limited to 'opcode.c')
-rw-r--r-- | opcode.c | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -12,8 +12,9 @@ void setps(struct sux *cpu, uint8_t thread) { void adc(struct sux *cpu, uint64_t adr, uint8_t thread, uint8_t regsize) { uint64_t value; value = (uint64_t)addr[adr]; - if (regsize >= 2) + if (regsize >= 2) { value += (uint64_t)addr[adr+1] << 8; + } if (regsize >= 4) { value += (uint64_t)addr[adr+2] << 16; value += (uint64_t)addr[adr+3] << 24; @@ -385,6 +386,7 @@ uint64_t absaddr(struct sux *cpu, uint8_t thread) { | (uint64_t)addr[cpu->pc[thread]+6] << 48 | (uint64_t)addr[cpu->pc[thread]+7] << 56; cpu->pc[thread]+=8; + ibcount+=8; clk++; return adr; } @@ -395,7 +397,11 @@ uint32_t zeromtx(struct sux *cpu, uint8_t thread) { | (uint32_t)addr[cpu->pc[thread]+2] << 16 | (uint32_t)addr[cpu->pc[thread]+3] << 24; cpu->pc[thread]+=4; - clk++; + ibcount+=4; + if (ibcount > 8) { + clk++; + ibcount = 0; + } return adr; } @@ -406,7 +412,11 @@ uint32_t zeromx(struct sux *cpu, uint8_t thread) { | (uint32_t)addr[cpu->pc[thread]+3] << 24; adr += cpu->x[thread]; cpu->pc[thread]+=4; - clk++; + ibcount+=4; + if (ibcount > 8) { + clk++; + ibcount = 0; + } return adr; } @@ -417,6 +427,10 @@ uint32_t zeromy(struct sux *cpu, uint8_t thread) { | (uint32_t)addr[cpu->pc[thread]+3] << 24; adr += cpu->y[thread]; cpu->pc[thread]+=4; - clk++; + ibcount+=4; + if (ibcount > 8) { + clk++; + ibcount = 0; + } return adr; } |