comparison src/cpu.c @ 26:083347ccd508

Implemented vblank interrupts and fixed a bug in exception vector address calculation
author Michael Pavone <pavone@retrodev.com>
date Fri, 01 Apr 2016 21:34:38 -0700
parents fb14515266f4
children 5683d9ba9acc
comparison
equal deleted inserted replaced
25:fb14515266f4 26:083347ccd508
127 void vector_fetch(cpu *context) 127 void vector_fetch(cpu *context)
128 { 128 {
129 context->exception_pc = context->regs[REG_PC] - 2; 129 context->exception_pc = context->regs[REG_PC] - 2;
130 context->exception_sr = context->regs[REG_SR]; 130 context->exception_sr = context->regs[REG_SR];
131 context->regs[REG_SR] &= ~(STATUS_INT0_ENABLE | STATUS_INT1_ENABLE); 131 context->regs[REG_SR] &= ~(STATUS_INT0_ENABLE | STATUS_INT1_ENABLE);
132 context->regs[REG_PC] = cpu_read_16(context, context->vector_base + context->exception); 132 context->regs[REG_PC] = cpu_read_16(context, context->vector_base + context->exception * 2);
133 context->state = STATE_NEED_FETCH; 133 context->state = STATE_NEED_FETCH;
134 } 134 }
135 135
136 uint16_t sign_extend(uint16_t val) 136 uint16_t sign_extend(uint16_t val)
137 { 137 {