static READ_HANDLER( tp84_sh_timer_r ) { /* main xtal 14.318MHz, divided by 4 to get the CPU clock, further */ /* divided by 2048 to get this timer */ /* (divide by (2048/2), and not 1024, because the CPU cycle counter is */ /* incremented every other state change of the clock) */ return (cpu_gettotalcycles() / (2048/2)) & 0x0f; }
int circusc_sh_timer_r(int offset) { int clock; #define CIRCUSCHALIE_TIMER_RATE (14318180/6144) clock = (cpu_gettotalcycles()*4) / CIRCUSCHALIE_TIMER_RATE; return clock & 0xF; }
int mikie_sh_timer_r(int offset) { int clock; #define TIMER_RATE 512 clock = cpu_gettotalcycles() / TIMER_RATE; return clock; }
static READ_HANDLER( junofrst_portA_r ) { int timer; /* main xtal 14.318MHz, divided by 8 to get the CPU clock, further */ /* divided by 1024 to get this timer */ /* (divide by (1024/2), and not 1024, because the CPU cycle counter is */ /* incremented every other state change of the clock) */ timer = (cpu_gettotalcycles() / (1024/2)) & 0x0f; /* low three bits come from the 8039 */ return (timer << 4) | i8039_status; }
static READ_HANDLER( tempest_IN0_r ) { int res; res = readinputport(0); if (avgdvg_done()) res|=0x40; /* Emulate the 3Khz source on bit 7 (divide 1.5Mhz by 512) */ if (cpu_gettotalcycles() & 0x100) res |=0x80; return res; }
int gyruss_portA_r(int offset) { /* need to protect from totalcycles overflow */ static int last_totalcycles = 0; /* number of Z80 clock cycles to count */ static int clock; int current_totalcycles; current_totalcycles = cpu_gettotalcycles(); clock = (clock + (current_totalcycles-last_totalcycles)) % 10240; last_totalcycles = current_totalcycles; return gyruss_timer[clock/1024]; }
int frogger_portB_r(int offset) { /* need to protect from totalcycles overflow */ static int last_totalcycles = 0; /* number of Z80 clock cycles to count */ static int clock; int current_totalcycles; current_totalcycles = cpu_gettotalcycles(); clock = (clock + (current_totalcycles-last_totalcycles)) % 5120; last_totalcycles = current_totalcycles; return frogger_timer[clock/512]; }
static READ_HANDLER( timeplt_portB_r ) { /* need to protect from totalcycles overflow */ static int last_totalcycles = 0; /* number of Z80 clock cycles to count */ static int clock; int current_totalcycles; current_totalcycles = cpu_gettotalcycles(); clock = (clock + (current_totalcycles-last_totalcycles)) % 5120; last_totalcycles = current_totalcycles; return timeplt_timer[clock/512]; }
int megazone_portA_r(int offset) { int clock,timer; /* main xtal 14.318MHz, divided by 8 to get the AY-3-8910 clock, further */ /* divided by 1024 to get this timer */ /* The base clock for the CPU and 8910 is NOT the same, so we have to */ /* compensate. */ /* (divide by (1024/2), and not 1024, because the CPU cycle counter is */ /* incremented every other state change of the clock) */ clock = cpu_gettotalcycles() * 7159/12288; /* = (14318/8)/(18432/6) */ timer = (clock / (1024/2)) & 0x0f; /* low three bits come from the 8039 */ return (timer << 4) | i8039_status; }
int cop01_sound_command_r(int offset) { int res; static int pulse; #define TIMER_RATE 12000 /* total guess */ res = (soundlatch_r(offset) & 0x7f) << 1; /* bit 0 seems to be a timer */ if ((cpu_gettotalcycles() / TIMER_RATE) & 1) { if (pulse == 0) res |= 1; pulse = 1; } else pulse = 0; return res; }
static READ_HANDLER( pandoras_portB_r ) { /* ??? */ return (cpu_gettotalcycles() / 1024) & 0x0f; }