diff options
Diffstat (limited to 'sux.h')
-rw-r--r-- | sux.h | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -14,13 +14,14 @@ #define STEP_ADDR 0xC010 #define CURSES_BACKSPACE 0x7F -uint8_t kbd_rdy; +extern uint8_t kbd_rdy; + +extern WINDOW *scr; #if debug -uint8_t subdbg; +extern uint8_t subdbg; #endif -WINDOW *scr; #define setflag(flag, bit) ((flag)) ? (cpu->ps.u8[thread] |= bit) : (cpu->ps.u8[thread] &= ~bit) #define getflag(bit) (cpu->ps.u8[thread] & bit) @@ -171,6 +172,9 @@ static inline uint64_t get_addr(struct sux *cpu, uint64_t *tmpaddr, uint8_t opco address.u8[1] = addr[cpu->pc[thread]+1];++tmp; } cpu->pc[thread]+=tmp; + #if getclk + iclk++; + #endif break; } @@ -224,7 +228,7 @@ inline void push(struct sux *cpu, uint64_t value, uint8_t opcode, uint8_t thread uint8_t byte[8]; } r; r.reg = 0; - uint8_t size = ((int8_t)value >= 0) ? value-1 : 0; + uint8_t size = (value > 0) ? value-1 : 0; uint8_t tmp = (size <= 7) ? size : 7; switch (opcode) { case PHA: r.reg = cpu->a[thread]; break; @@ -252,7 +256,7 @@ inline void pull(struct sux *cpu, uint64_t value, uint8_t opcode, uint8_t thread uint8_t byte[8]; } r; r.reg = 0; - uint8_t size = ((int8_t)value >= 0) ? value-1 : 0; + uint8_t size = (value > 0) ? value-1 : 0; uint8_t tmp = (size <= 7) ? size : 7; uint8_t tmp2 = 0; /* Unroll Loop by implementing Duff's Device. */ @@ -267,11 +271,11 @@ inline void pull(struct sux *cpu, uint64_t value, uint8_t opcode, uint8_t thread case 1: cpu->sp[thread]++;tmp2++;r.byte[tmp2] |= addr[(cpu->stk_st[thread] << 16)+cpu->sp[thread]]; } switch (opcode) { - case PLA: cpu->a[thread] = r.reg; break; - case PLB: cpu->b[thread] = r.reg; break; - case PLX: cpu->x[thread] = r.reg; break; - case PLY: cpu->y[thread] = r.reg; break; - case PLP: cpu->ps.u64 = r.reg; break; + case PLA: cpu->a[thread] = r.reg; break; + case PLB: cpu->b[thread] = r.reg; break; + case PLX: cpu->x[thread] = r.reg; break; + case PLY: cpu->y[thread] = r.reg; break; + case PLP: cpu->ps.u64 = r.reg; break; } } |