Problem Halting Execution
Joseph Altmaier <[email protected]> Fri, 28 May 2010 10:36:38 -0500
| Newsgroups | gmane.comp.emulators.sid.devel |
|---|---|
| Message-ID | <[email protected]> |
I'm writing a SID port, and I can't get it to halt properly. What is
the functionality of yield()? It does not seem to stop instruction
flow. When yield() is called step_insns() will return after the break
at the end of the loop but then it gets called again. Included is
pseudocode for my step_insns() function. Any help would be
appreciated.
Thanks!
Joseph Altmaier
void
*processor*_cpu::step_insns ()
{
bool found;
while (true)
{
get next PC
for(int u = 0; u < 2; u++) {//Two execution units
Get next instruction for current execution unit
if (the instruction is not found)
{
Get the instruction manually
}
Instruction disassembley...
try//Execute the instruction and cope with it if the instruction fails.
{
Execute the current instruction for the current execution unit
}
catch (cpu_memory_fault& t)
{
this->memory_trap (t);
this->yield ();
}
catch (cpu_exception& t)
{
this->yield ();//A halt instruction will cause a
cpu_exception and a yeild()
}
try {
if(Second execution unit){
Execute a writeback on a pair of write stacks
}
}
catch (cpu_memory_fault& t)
{
this->memory_trap (t);
this->yield();
}
catch (cpu_exception& t)
{
this->yield ();
}
move ahead through circular pipeline
Do post-instruction processing
}
if (stop_after_insns_p (1))
break;
}
}