Split up exec386_dynarec() a bit.
This commit is contained in:
parent
eb524e6f12
commit
5a94c78cbb
1 changed files with 316 additions and 341 deletions
|
|
@ -240,29 +240,8 @@ static void prefetch_flush()
|
|||
|
||||
int cpu_end_block_after_ins = 0;
|
||||
|
||||
static int cycles_main = 0;
|
||||
void exec386_dynarec(int cycs)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint32_t addr;
|
||||
int tempi;
|
||||
int cycdiff;
|
||||
int oldcyc;
|
||||
int cyc_period = cycs / 2000; /*5us*/
|
||||
|
||||
cycles_main += cycs;
|
||||
while (cycles_main > 0)
|
||||
{
|
||||
int cycles_start;
|
||||
|
||||
cycles += cyc_period;
|
||||
cycles_start = cycles;
|
||||
|
||||
while (cycles>0)
|
||||
{
|
||||
oldcyc=cycles;
|
||||
// if (output && CACHE_ON()) pclog("Block %04x:%04x %04x:%08x\n", CS, pc, SS,ESP);
|
||||
if (!CACHE_ON()) /*Interpret block*/
|
||||
static inline void exec_interpreter(void)
|
||||
{
|
||||
cpu_block_end = 0;
|
||||
x86_was_reset = 0;
|
||||
|
|
@ -313,28 +292,14 @@ void exec386_dynarec(int cycs)
|
|||
if (trap)
|
||||
{
|
||||
trap = 0;
|
||||
flags_rebuild();
|
||||
if (msw&1)
|
||||
{
|
||||
pmodeint(1,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
writememw(ss,(SP-2)&0xFFFF,cpu_state.flags);
|
||||
writememw(ss,(SP-4)&0xFFFF,CS);
|
||||
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
||||
SP-=6;
|
||||
addr = (1 << 2) + idt.base;
|
||||
cpu_state.flags &= ~I_FLAG;
|
||||
cpu_state.flags &= ~T_FLAG;
|
||||
cpu_state.pc=readmemw(0,addr);
|
||||
loadcs(readmemw(0,addr+2));
|
||||
}
|
||||
cpu_state.oldpc = cpu_state.pc;
|
||||
x86_int(1);
|
||||
}
|
||||
|
||||
cpu_end_block_after_ins = 0;
|
||||
}
|
||||
else
|
||||
|
||||
static inline void exec_recompiler(void)
|
||||
{
|
||||
uint32_t phys_addr = get_phys(cs+cpu_state.pc);
|
||||
int hash = HASH(phys_addr);
|
||||
|
|
@ -595,6 +560,32 @@ void exec386_dynarec(int cycs)
|
|||
|
||||
}
|
||||
|
||||
|
||||
static int cycles_main = 0;
|
||||
void exec386_dynarec(int cycs)
|
||||
{
|
||||
uint8_t temp;
|
||||
int tempi;
|
||||
int cycdiff;
|
||||
int oldcyc;
|
||||
int cyc_period = cycs / 2000; /*5us*/
|
||||
|
||||
cycles_main += cycs;
|
||||
while (cycles_main > 0)
|
||||
{
|
||||
int cycles_start;
|
||||
|
||||
cycles += cyc_period;
|
||||
cycles_start = cycles;
|
||||
|
||||
while (cycles>0)
|
||||
{
|
||||
oldcyc=cycles;
|
||||
// if (output && CACHE_ON()) pclog("Block %04x:%04x %04x:%08x\n", CS, pc, SS,ESP);
|
||||
if (!CACHE_ON()) /*Interpret block*/
|
||||
exec_interpreter();
|
||||
else
|
||||
exec_recompiler();
|
||||
cycdiff=oldcyc-cycles;
|
||||
tsc += cycdiff;
|
||||
|
||||
|
|
@ -637,25 +628,9 @@ void exec386_dynarec(int cycs)
|
|||
temp=picinterrupt();
|
||||
if (temp!=0xFF)
|
||||
{
|
||||
cpu_state.oldpc = cpu_state.pc;
|
||||
x86_int(temp);
|
||||
// pclog("IRQ %02X %04X:%04X %04X:%04X\n", temp, SS, SP, CS, pc);
|
||||
CPU_BLOCK_END();
|
||||
flags_rebuild();
|
||||
if (msw&1)
|
||||
{
|
||||
pmodeint(temp,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
writememw(ss,(SP-2)&0xFFFF,cpu_state.flags);
|
||||
writememw(ss,(SP-4)&0xFFFF,CS);
|
||||
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
||||
SP-=6;
|
||||
addr=temp<<2;
|
||||
cpu_state.flags &= ~I_FLAG;
|
||||
cpu_state.flags &= ~T_FLAG;
|
||||
cpu_state.pc=readmemw(0,addr);
|
||||
loadcs(readmemw(0,addr+2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue