|
|
1.1 ! root 1: ! 2: STATIC_INLINE void cycles_do_special (void) ! 3: { ! 4: } ! 5: STATIC_INLINE void set_cycles (int c) ! 6: { ! 7: } ! 8: ! 9: STATIC_INLINE void events_schedule (void) ! 10: { ! 11: int i; ! 12: ! 13: unsigned long int mintime = ~0L; ! 14: for (i = 0; i < ev_max; i++) { ! 15: if (eventtab[i].active) { ! 16: unsigned long int eventtime = eventtab[i].evtime - currcycle; ! 17: if (eventtime < mintime) ! 18: mintime = eventtime; ! 19: } ! 20: } ! 21: nextevent = currcycle + mintime; ! 22: } ! 23: ! 24: STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add) ! 25: { ! 26: if (is_lastline && eventtab[ev_hsync].evtime - currcycle <= cycles_to_add ! 27: && (long int)(read_processor_time () - vsyncmintime) < 0) ! 28: return; ! 29: ! 30: while ((nextevent - currcycle) <= cycles_to_add) { ! 31: int i; ! 32: cycles_to_add -= (nextevent - currcycle); ! 33: currcycle = nextevent; ! 34: ! 35: for (i = 0; i < ev_max; i++) { ! 36: if (eventtab[i].active && eventtab[i].evtime == currcycle) { ! 37: (*eventtab[i].handler)(); ! 38: } ! 39: } ! 40: events_schedule(); ! 41: } ! 42: currcycle += cycles_to_add; ! 43: } ! 44: ! 45: STATIC_INLINE void do_cycles_fast (void) ! 46: { ! 47: if (is_lastline && eventtab[ev_hsync].evtime - currcycle <= 1 ! 48: && (long int)(read_processor_time () - vsyncmintime) < 0) ! 49: return; ! 50: ! 51: currcycle++; ! 52: if (nextevent == currcycle) { ! 53: int i; ! 54: ! 55: for (i = 0; i < ev_max; i++) { ! 56: if (eventtab[i].active && eventtab[i].evtime == currcycle) { ! 57: (*eventtab[i].handler) (); ! 58: } ! 59: } ! 60: events_schedule(); ! 61: } ! 62: ! 63: } ! 64: ! 65: /* This is a special-case function. Normally, all events should lie in the ! 66: future; they should only ever be active at the current cycle during ! 67: do_cycles. However, a snapshot is saved during do_cycles, and so when ! 68: restoring it, we may have other events pending. */ ! 69: STATIC_INLINE void handle_active_events (void) ! 70: { ! 71: int i; ! 72: for (i = 0; i < ev_max; i++) { ! 73: if (eventtab[i].active && eventtab[i].evtime == currcycle) { ! 74: (*eventtab[i].handler)(); ! 75: } ! 76: } ! 77: } ! 78: ! 79: STATIC_INLINE unsigned long get_cycles (void) ! 80: { ! 81: return currcycle; ! 82: } ! 83: ! 84: extern void init_eventtab (void); ! 85: ! 86: #if /* M68K_SPEED == 1 */ 0 ! 87: #define do_cycles do_cycles_fast ! 88: #else ! 89: #define do_cycles do_cycles_slow ! 90: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.