mirror of
https://github.com/buserror/mii_emu.git
synced 2025-01-05 00:30:43 +00:00
cpu: Added a few cycles here and there
This fixes the joystick reading loop Signed-off-by: Michel Pollet <buserror@gmail.com>
This commit is contained in:
parent
5968ee58b8
commit
abc119b0b7
@ -222,10 +222,10 @@ next_instruction:
|
|||||||
_FETCH(cpu->PC++); // relative branch
|
_FETCH(cpu->PC++); // relative branch
|
||||||
if (((cpu->_D >> d.s_bit) & 1) == d.s_bit_value) {
|
if (((cpu->_D >> d.s_bit) & 1) == d.s_bit_value) {
|
||||||
cpu->_P = cpu->PC + (int8_t)cpu->_P;
|
cpu->_P = cpu->PC + (int8_t)cpu->_P;
|
||||||
|
cpu->cycle++;
|
||||||
if ((cpu->_P & 0xff00) != (cpu->PC & 0xff00))
|
if ((cpu->_P & 0xff00) != (cpu->PC & 0xff00))
|
||||||
cpu->cycle++;
|
cpu->cycle++;
|
||||||
cpu->PC = cpu->_P;
|
cpu->PC = cpu->_P;
|
||||||
cpu->cycle++;
|
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case 0x90: case 0xB0: case 0xF0: case 0x30:
|
case 0x90: case 0xB0: case 0xF0: case 0x30:
|
||||||
@ -241,7 +241,11 @@ next_instruction:
|
|||||||
} break;
|
} break;
|
||||||
case 0x80:
|
case 0x80:
|
||||||
{ // BRA
|
{ // BRA
|
||||||
cpu->PC = cpu->PC + (int8_t)cpu->_P; cpu->cycle++;
|
cpu->_P = cpu->PC + (int8_t)cpu->_P;
|
||||||
|
_FETCH(cpu->PC);// cpu->cycle++;
|
||||||
|
if ((cpu->_P & 0xff00) != (cpu->PC & 0xff00))
|
||||||
|
cpu->cycle++;
|
||||||
|
cpu->PC = cpu->_P;
|
||||||
} break;
|
} break;
|
||||||
case 0x89:
|
case 0x89:
|
||||||
{ // BIT immediate -- does not change N & V!
|
{ // BIT immediate -- does not change N & V!
|
||||||
@ -261,6 +265,7 @@ next_instruction:
|
|||||||
} break;
|
} break;
|
||||||
case 0x18: case 0xD8: case 0x58: case 0xB8:
|
case 0x18: case 0xD8: case 0x58: case 0xB8:
|
||||||
{ // CLC, CLD, CLI, CLV
|
{ // CLC, CLD, CLI, CLV
|
||||||
|
_FETCH(cpu->PC);
|
||||||
cpu->P.P[d.s_bit] = 0;
|
cpu->P.P[d.s_bit] = 0;
|
||||||
} break;
|
} break;
|
||||||
case 0xC9: case 0xC5: case 0xD5: case 0xCD: case 0xDD:
|
case 0xC9: case 0xC5: case 0xD5: case 0xCD: case 0xDD:
|
||||||
@ -284,18 +289,22 @@ next_instruction:
|
|||||||
} break;
|
} break;
|
||||||
case 0x3A:
|
case 0x3A:
|
||||||
{ // DEC
|
{ // DEC
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(--cpu->A);
|
_NZ(--cpu->A);
|
||||||
} break;
|
} break;
|
||||||
case 0xC6: case 0xD6: case 0xCE: case 0xDE:
|
case 0xC6: case 0xD6: case 0xCE: case 0xDE:
|
||||||
{ // DEC
|
{ // DEC
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(--cpu->_D);
|
_NZ(--cpu->_D);
|
||||||
} break;
|
} break;
|
||||||
case 0xCA:
|
case 0xCA:
|
||||||
{ // DEX
|
{ // DEX
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(--cpu->X);
|
_NZ(--cpu->X);
|
||||||
} break;
|
} break;
|
||||||
case 0x88:
|
case 0x88:
|
||||||
{ // DEY
|
{ // DEY
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(--cpu->Y);
|
_NZ(--cpu->Y);
|
||||||
} break;
|
} break;
|
||||||
case 0x49: case 0x45: case 0x55: case 0x4D: case 0x5D:
|
case 0x49: case 0x45: case 0x55: case 0x4D: case 0x5D:
|
||||||
@ -306,18 +315,22 @@ next_instruction:
|
|||||||
} break;
|
} break;
|
||||||
case 0x1A:
|
case 0x1A:
|
||||||
{ // INC
|
{ // INC
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(++cpu->A);
|
_NZ(++cpu->A);
|
||||||
} break;
|
} break;
|
||||||
case 0xE6: case 0xF6: case 0xEE: case 0xFE:
|
case 0xE6: case 0xF6: case 0xEE: case 0xFE:
|
||||||
{ // INC
|
{ // INC
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(++cpu->_D);
|
_NZ(++cpu->_D);
|
||||||
} break;
|
} break;
|
||||||
case 0xE8:
|
case 0xE8:
|
||||||
{ // INX
|
{ // INX
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(++cpu->X);
|
_NZ(++cpu->X);
|
||||||
} break;
|
} break;
|
||||||
case 0xC8:
|
case 0xC8:
|
||||||
{ // INY
|
{ // INY
|
||||||
|
_FETCH(cpu->PC);
|
||||||
_NZ(++cpu->Y);
|
_NZ(++cpu->Y);
|
||||||
} break;
|
} break;
|
||||||
case 0x4C: case 0x6C: case 0x7C:
|
case 0x4C: case 0x6C: case 0x7C:
|
||||||
@ -361,7 +374,7 @@ next_instruction:
|
|||||||
} break;
|
} break;
|
||||||
case 0xEA:
|
case 0xEA:
|
||||||
{ // NOP
|
{ // NOP
|
||||||
cpu->cycle++;
|
_FETCH(cpu->PC);
|
||||||
} break;
|
} break;
|
||||||
case 0x09: case 0x05: case 0x15: case 0x0D: case 0x1D:
|
case 0x09: case 0x05: case 0x15: case 0x0D: case 0x1D:
|
||||||
case 0x19: case 0x01: case 0x11: case 0x12:
|
case 0x19: case 0x01: case 0x11: case 0x12:
|
||||||
|
@ -39,14 +39,9 @@ mii_analog_access(
|
|||||||
case 0xc070: {
|
case 0xc070: {
|
||||||
// multiplying by mii->speed allows reading joystick in 'fast' mode,
|
// multiplying by mii->speed allows reading joystick in 'fast' mode,
|
||||||
// this basically simulate slowing down just for the joystick reading
|
// this basically simulate slowing down just for the joystick reading
|
||||||
|
|
||||||
/* TODO: According to various artivles, the multiplier ought
|
|
||||||
* to be 11, but we're not making the count here, which means it's
|
|
||||||
* likely the emulated core is missing a cycle for one instruction
|
|
||||||
* somewhere... */
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
a->v[i].decay = mii->cycles +
|
a->v[i].decay = mii->cycles +
|
||||||
((a->v[i].value * 10.10) * mii->speed);
|
((a->v[i].value * 11) * mii->speed);
|
||||||
// printf("joystick %d: %d\n", i, a->v[i].value);
|
// printf("joystick %d: %d\n", i, a->v[i].value);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
@ -440,24 +440,6 @@ int main()
|
|||||||
_run_this("SED ADC 99", doSED_ADC(0x99, 1), 0x00, C | D, 0);
|
_run_this("SED ADC 99", doSED_ADC(0x99, 1), 0x00, C | D, 0);
|
||||||
_run_this("SED ADC BD", doSED_ADC(0xBD, 0), 0x23, C | D, 0);
|
_run_this("SED ADC BD", doSED_ADC(0xBD, 0), 0x23, C | D, 0);
|
||||||
|
|
||||||
_run_this("LDA ($aa)",
|
|
||||||
" LDA #$00\n"
|
|
||||||
" TAY\n"
|
|
||||||
" TYA\n"
|
|
||||||
" STA $c064\n"
|
|
||||||
" LDX #$00\n"
|
|
||||||
" LDA $c070\n"
|
|
||||||
" LDY #$00\n"
|
|
||||||
" NOP\n"
|
|
||||||
" NOP\n"
|
|
||||||
"l LDA $c064,X\n"
|
|
||||||
" BPL end\n"
|
|
||||||
" INY \n"
|
|
||||||
" BNE l\n"
|
|
||||||
" DEY \n"
|
|
||||||
"end BRK\n",
|
|
||||||
0xAA, N, 1);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// _run_this("SED ADC FF", doSED_ADC(0xFF, 0), 0x65, C | D | N, 0);
|
// _run_this("SED ADC FF", doSED_ADC(0xFF, 0), 0x65, C | D | N, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user