cycles=0;
Stop();
}
- if((ctrl&tmINTERRUPT) && stop)
+ if((ctrl&tmINTERRUPT) && stop) {
+ PRINTF(L_SYS_EMU,"n2timer %d: IRQ triggered",nr);
irq=true;
+ }
}
return irq;
}
ctrl=(ctrl&~tmRUNNING) | (val&tmRUNNING);
if(!Running()) {
Stop();
- PRINTF(L_SYS_EMU,"n2timer: stopped cycles=%x ctrl=%x",cycles,ctrl);
+ PRINTF(L_SYS_EMU,"n2timer %d: stopped cycles=%x ctrl=%x",nr,cycles,ctrl);
}
}
else {
else divisor=4; // This is wrong, but we haven't figured the right value out yet
if(divisor<=0) divisor=1; // sanity
if(!(ctrl&tmLATCHED)) cycles=(unsigned int)(cycles-1)&0xFF;
- PRINTF(L_SYS_EMU,"n2timer: started latch=%x div=%d cycles=%x ctrl=%x",latch,divisor,cycles,ctrl);
+ PRINTF(L_SYS_EMU,"n2timer %d: started latch=%x div=%d cycles=%x ctrl=%x",nr,latch,divisor,cycles,ctrl);
remainder=-1;
if(!(ctrl&tmCONTINUOUS) && cycles==0) ctrl&=~tmRUNNING;
}
cycles=0;
CRCvalue=0xffff; CRCpos=0; CRCstarttime=0; CRCinput=0; CRCupdate=false;
GenCRC16Table();
+ for(int i=0; i<MAX_TIMERS; i++) timer[i].SetNumber(HW_NUM(i));
PRINTF(L_SYS_EMU,"mapmemhw: new HW map off=%04x size=%04x",offset,size);
}
int mask=0;
cycles+=num;
for(int i=0; i<MAX_TIMERS; i++)
- if(timer[i].AddCycles(num)) mask|=(1<<HW_NUM(i));
+ if(timer[i].AddCycles(num)) mask|=1<<timer[i].Number();
return mask;
}
class cN2Timer {
private:
- int ctrl, divisor, cycles, remainder, latch;
+ int ctrl, divisor, cycles, remainder, latch, nr;
enum { tmCONTINUOUS=0x01, tmRUNNING=0x02, tmINTERRUPT=0x04, tmMASK=0xFF, tmLATCHED=0x100 };
//
bool Running(void) { return ctrl&tmRUNNING; }
void Ctrl(unsigned char c);
unsigned char Latch(void) { return latch&0xFF; }
void Latch(unsigned char val);
+ void SetNumber(int Nr) { nr=Nr; }
+ int Number(void) { return nr; }
};
// ----------------------------------------------------------------