Annotation of uae/src/include/events.h, revision 1.1

1.1     ! root        1:  /*
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   *
        !             4:   * Events
        !             5:   * 
        !             6:   * (c) 1995 Bernd Schmidt
        !             7:   */
        !             8: 
        !             9: /* This is tunable. 4 gives good results. */
        !            10: #ifdef LINUX_SOUND_SLOW_MACHINE
        !            11: #define cycles_per_instruction 8
        !            12: #else
        !            13: #define cycles_per_instruction 4
        !            14: #endif
        !            15: 
        !            16: extern unsigned long int cycles, nextevent;
        !            17: typedef void (*evfunc)(void);
        !            18: 
        !            19: struct ev
        !            20: {
        !            21:     int active;
        !            22:     unsigned long int evtime, oldcycles;
        !            23:     evfunc handler;
        !            24: };
        !            25: 
        !            26: enum { 
        !            27:     ev_hsync, ev_copper, ev_cia,
        !            28:     ev_blitter, ev_diskblk, ev_diskindex,
        !            29: #ifndef DONT_WANT_SOUND
        !            30:     ev_aud0, ev_aud1, ev_aud2, ev_aud3,
        !            31:     ev_sample,
        !            32: #endif
        !            33:     ev_max
        !            34: };
        !            35: 
        !            36: extern struct ev eventtab[ev_max];
        !            37: 
        !            38: static __inline__ void events_schedule(void)
        !            39: {
        !            40:     int i;
        !            41:     
        !            42:     unsigned long int mintime = ~0L;
        !            43:     for(i = 0; i < ev_max; i++) {
        !            44:        if (eventtab[i].active) {           
        !            45:            unsigned long int eventtime = eventtab[i].evtime - cycles;
        !            46:            if (eventtime < mintime)
        !            47:                mintime = eventtime;
        !            48:        }
        !            49:     }
        !            50:     nextevent = cycles + mintime;
        !            51: }
        !            52: 
        !            53: static __inline__ void do_cycles_slow(void)
        !            54: {
        !            55:     if ((nextevent - cycles) <= cycles_per_instruction) {
        !            56:        int j;
        !            57:        for(j = 0; j < cycles_per_instruction; j++) {
        !            58:            if (++cycles == nextevent) {
        !            59:                int i;
        !            60:                
        !            61:                for(i = 0; i < ev_max; i++) {
        !            62:                    if (eventtab[i].active && eventtab[i].evtime == cycles) {
        !            63:                        (*eventtab[i].handler)();
        !            64:                    }
        !            65:                }
        !            66:                events_schedule();
        !            67:            }
        !            68:        }
        !            69:     } else {
        !            70:        cycles += cycles_per_instruction;
        !            71:     }
        !            72: }
        !            73: 
        !            74: static __inline__ void do_cycles_fast(void)
        !            75: {
        !            76:     cycles++;
        !            77:     if (nextevent == cycles) {
        !            78:        int i;
        !            79:                
        !            80:        for(i = 0; i < ev_max; i++) {
        !            81:            if (eventtab[i].active && eventtab[i].evtime == cycles) {
        !            82:                (*eventtab[i].handler)();
        !            83:            }
        !            84:        }
        !            85:        events_schedule();
        !            86:     }
        !            87: 
        !            88: }
        !            89: 
        !            90: #ifdef FASTER_CPU
        !            91: #define do_cycles do_cycles_fast
        !            92: #else
        !            93: #define do_cycles do_cycles_slow
        !            94: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.