sim_cpu.cpp File Reference
|
yasimavr
|
Loading...
Searching...
No Matches
Macros | |
| #define | CPU_READ_GPREG(d) (m_regs[(d)]) |
| #define | CPU_WRITE_GPREG(d, v) (m_regs[(d)] = (v)) |
| #define | get_flash16le(addr) (m_flash[addr] | (m_flash[addr + 1] << 8)) |
| #define | get_d5(o) const uint8_t d = (o >> 4) & 0x1f; |
| #define | get_vd5(o) |
| #define | get_r5(o) const uint8_t r = ((o >> 5) & 0x10) | (o & 0xf); |
| #define | get_d5_a6(o) |
| #define | get_vd5_s3(o) |
| #define | get_vd5_s3_mask(o) |
| #define | get_vd5_vr5(o) |
| #define | get_d5_vr5(o) |
| #define | get_h4_k8(o) |
| #define | get_vh4_k8(o) |
| #define | get_d5_q6(o) |
| #define | get_a5(o) const uint8_t a = ((o >> 3) & 0x1f); |
| #define | get_a5_b3(o) |
| #define | get_a5_b3mask(o) |
| #define | get_o12(op) const int16_t o = ((int16_t)((op << 4) & 0xffff)) >> 3; |
| #define | get_vp2_k6(o) |
| #define | get_sreg_bit(o) const uint8_t b = (o >> 4) & 7; |
| #define | get_r16le(r) (CPU_READ_GPREG(r) | (CPU_READ_GPREG(r + 1) << 8)) |
| #define | set_r16le(r, v) |
| #define | set_flags_zns(res) |
| #define | set_flags_zns16(res) |
| #define | set_flags_add_zns(res, rd, rr) |
| #define | set_flags_sub_zns(res, rd, rr) |
| #define | set_flags_Rzns(res) |
| #define | set_flags_sub_Rzns(res, rd, rr) |
| #define | set_flags_zcvs(res, vr) |
| #define | set_flags_zcnvs(res, vr) |
| #define | set_flags_znv0s(res) |
| #define | INVALID_OPCODE |
| #define | TRACE_JUMP if (m_debug_probe) m_debug_probe->_cpu_notify_jump(new_pc) |
| #define | TRACE_CALL if (m_debug_probe) m_debug_probe->_cpu_notify_call(new_pc) |
| #define | TRACE_RET if (m_debug_probe) m_debug_probe->_cpu_notify_ret() |
| #define | TRACE_OP(f, ...) |
| #define | EIND_VALID (use_extended_addressing() && m_config.eind.valid()) |
| #define | RAMPZ_VALID (use_extended_addressing() && m_config.rampz.valid()) |
Functions | |
| const char * | sreg_to_str (const uint8_t *sreg, char *sreg_str) |
Variables | |
| YASIMAVR_USING_NAMESPACE const char | sreg_flag_names [8] = {'c', 'z', 'n', 'v', 's', 'h', 't', 'i'} |
Macro Definition Documentation
◆ CPU_READ_GPREG
| #define CPU_READ_GPREG | ( | d | ) | (m_regs[(d)]) |
◆ CPU_WRITE_GPREG
| #define CPU_WRITE_GPREG | ( | d, | |
| v | |||
| ) | (m_regs[(d)] = (v)) |
◆ EIND_VALID
| #define EIND_VALID (use_extended_addressing() && m_config.eind.valid()) |
◆ get_a5
| #define get_a5 | ( | o | ) | const uint8_t a = ((o >> 3) & 0x1f); |
◆ get_a5_b3
| #define get_a5_b3 | ( | o | ) |
◆ get_a5_b3mask
| #define get_a5_b3mask | ( | o | ) |
Value:
get_a5(o) \
const uint8_t mask = 1 << (o & 0x7);
◆ get_d5
| #define get_d5 | ( | o | ) | const uint8_t d = (o >> 4) & 0x1f; |
◆ get_d5_a6
| #define get_d5_a6 | ( | o | ) |
◆ get_d5_q6
| #define get_d5_q6 | ( | o | ) |
Value:
get_d5(o) \
const uint8_t q = ((o & 0x2000) >> 8) | ((o & 0x0c00) >> 7) | (o & 0x7);
◆ get_d5_vr5
| #define get_d5_vr5 | ( | o | ) |
Value:
◆ get_flash16le
| #define get_flash16le | ( | addr | ) | (m_flash[addr] | (m_flash[addr + 1] << 8)) |
◆ get_h4_k8
| #define get_h4_k8 | ( | o | ) |
Value:
const uint8_t h = 16 + ((o >> 4) & 0xf); \
const uint8_t k = ((o & 0x0f00) >> 4) | (o & 0xf);
◆ get_o12
| #define get_o12 | ( | op | ) | const int16_t o = ((int16_t)((op << 4) & 0xffff)) >> 3; |
◆ get_r16le
| #define get_r16le | ( | r | ) | (CPU_READ_GPREG(r) | (CPU_READ_GPREG(r + 1) << 8)) |
◆ get_r5
| #define get_r5 | ( | o | ) | const uint8_t r = ((o >> 5) & 0x10) | (o & 0xf); |
◆ get_sreg_bit
| #define get_sreg_bit | ( | o | ) | const uint8_t b = (o >> 4) & 7; |
◆ get_vd5
| #define get_vd5 | ( | o | ) |
Value:
get_d5(o) \
const uint8_t vd = CPU_READ_GPREG(d);
◆ get_vd5_s3
| #define get_vd5_s3 | ( | o | ) |
◆ get_vd5_s3_mask
| #define get_vd5_s3_mask | ( | o | ) |
Value:
get_vd5_s3(o) \
const uint8_t mask = 1 << s;
◆ get_vd5_vr5
| #define get_vd5_vr5 | ( | o | ) |
Value:
get_r5(o) \
get_d5(o) \
◆ get_vh4_k8
| #define get_vh4_k8 | ( | o | ) |
Value:
get_h4_k8(o) \
const uint8_t vh = CPU_READ_GPREG(h);
◆ get_vp2_k6
| #define get_vp2_k6 | ( | o | ) |
Value:
const uint8_t p = 24 + ((o >> 3) & 0x6); \
const uint8_t k = ((o & 0x00c0) >> 2) | (o & 0xf); \
◆ INVALID_OPCODE
| #define INVALID_OPCODE |
Value:
do { \
char msg[50]; \
sprintf(msg, "Bad opcode 0x%04x at PC=0x%04lx", opcode, m_pc); \
m_device->crash(CRASH_INVALID_OPCODE, msg); \
} while(0);
◆ RAMPZ_VALID
| #define RAMPZ_VALID (use_extended_addressing() && m_config.rampz.valid()) |
◆ set_flags_add_zns
| #define set_flags_add_zns | ( | res, | |
| rd, | |||
| rr | |||
| ) |
◆ set_flags_Rzns
| #define set_flags_Rzns | ( | res | ) |
◆ set_flags_sub_Rzns
| #define set_flags_sub_Rzns | ( | res, | |
| rd, | |||
| rr | |||
| ) |
◆ set_flags_sub_zns
| #define set_flags_sub_zns | ( | res, | |
| rd, | |||
| rr | |||
| ) |
◆ set_flags_zcnvs
| #define set_flags_zcnvs | ( | res, | |
| vr | |||
| ) |
◆ set_flags_zcvs
| #define set_flags_zcvs | ( | res, | |
| vr | |||
| ) |
◆ set_flags_zns
| #define set_flags_zns | ( | res | ) |
◆ set_flags_zns16
| #define set_flags_zns16 | ( | res | ) |
◆ set_flags_znv0s
| #define set_flags_znv0s | ( | res | ) |
Value:
m_sreg[SREG_V] = 0; \
set_flags_zns(res);
◆ set_r16le
| #define set_r16le | ( | r, | |
| v | |||
| ) |
Value:
CPU_WRITE_GPREG(r, (v)); \
CPU_WRITE_GPREG(r + 1, (v) >> 8);
◆ TRACE_CALL
| #define TRACE_CALL if (m_debug_probe) m_debug_probe->_cpu_notify_call(new_pc) |
◆ TRACE_JUMP
| #define TRACE_JUMP if (m_debug_probe) m_debug_probe->_cpu_notify_jump(new_pc) |
◆ TRACE_OP
| #define TRACE_OP | ( | f, | |
| ... | |||
| ) |
Value:
m_device->logger().log(Logger::Level_Trace, "PC=0x%04X SREG=%s | " f, \
m_pc, \
sreg_to_str(m_sreg, sreg_str), \
##__VA_ARGS__)
◆ TRACE_RET
| #define TRACE_RET if (m_debug_probe) m_debug_probe->_cpu_notify_ret() |
Function Documentation
◆ sreg_to_str()
| const char * sreg_to_str | ( | const uint8_t * | sreg, |
| char * | sreg_str | ||
| ) |
Variable Documentation
◆ sreg_flag_names
| YASIMAVR_USING_NAMESPACE const char sreg_flag_names[8] = {'c', 'z', 'n', 'v', 's', 'h', 't', 'i'} |
Generated by