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

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

unix.superglobalmegacorp.com

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