Annotation of generator/ym2612/driver.h, revision 1.1

1.1     ! root        1: #ifndef DRIVER_H
        !             2: #define DRIVER_H
        !             3: 
        !             4: #include "osd_cpu.h"
        !             5: #include "memory.h"
        !             6: #include "mamedbg.h"
        !             7: #include "osdepend.h"
        !             8: #include "mame.h"
        !             9: #include "common.h"
        !            10: #include "drawgfx.h"
        !            11: #include "palette.h"
        !            12: #include "cpuintrf.h"
        !            13: #include "sndintrf.h"
        !            14: #include "input.h"
        !            15: #include "inptport.h"
        !            16: #include "usrintrf.h"
        !            17: #include "cheat.h"
        !            18: #include "tilemap.h"
        !            19: #include "profiler.h"
        !            20: 
        !            21: #ifdef MAME_NET
        !            22: #include "network.h"
        !            23: #endif /* MAME_NET */
        !            24: 
        !            25: 
        !            26: #define MAX_CPU 8      /* MAX_CPU is the maximum number of CPUs which cpuintrf.c */
        !            27:                                        /* can run at the same time. Currently, 8 is enough. */
        !            28: 
        !            29: #define MAX_SOUND 5    /* MAX_SOUND is the maximum number of sound subsystems */
        !            30:                                        /* which can run at the same time. Currently, 5 is enough. */
        !            31: 
        !            32: 
        !            33: 
        !            34: struct MachineDriver
        !            35: {
        !            36:        /* basic machine hardware */
        !            37:        const struct MachineCPU cpu[MAX_CPU];
        !            38:        float frames_per_second;
        !            39:        int vblank_duration;    /* in microseconds - see description below */
        !            40:        int cpu_slices_per_frame;       /* for multicpu games. 1 is the minimum, meaning */
        !            41:                                                                /* that each CPU runs for the whole video frame */
        !            42:                                                                /* before giving control to the others. The higher */
        !            43:                                                                /* this setting, the more closely CPUs are interleaved */
        !            44:                                                                /* and therefore the more accurate the emulation is. */
        !            45:                                                                /* However, an higher setting also means slower */
        !            46:                                                                /* performance. */
        !            47:        void (*init_machine)(void);
        !            48: #ifdef MESS
        !            49:        void (*stop_machine)(void); /* needed for MESS */
        !            50: #endif
        !            51: 
        !            52:     /* video hardware */
        !            53:        int screen_width,screen_height;
        !            54:        const struct rectangle default_visible_area;    /* the visible area can be changed at */
        !            55:                                                                        /* run time, but it should never be larger than the */
        !            56:                                                                        /* one specified here, in order not to force the */
        !            57:                                                                        /* OS dependant code to resize the display window. */
        !            58:        const struct GfxDecodeInfo *gfxdecodeinfo;
        !            59:        unsigned int total_colors;      /* palette is 3*total_colors bytes long */
        !            60:        unsigned int color_table_len;   /* length in shorts of the color lookup table */
        !            61:        void (*vh_init_palette)(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
        !            62: 
        !            63:        int video_attributes;   /* ASG 081897 */
        !            64: 
        !            65:        void (*vh_eof_callback)(void);  /* called every frame after osd_update_video_and_audio() */
        !            66:                                                                        /* This is useful when there are operations that need */
        !            67:                                                                        /* to be performed every frame regardless of frameskip, */
        !            68:                                                                        /* e.g. sprite buffering or collision detection. */
        !            69:        int (*vh_start)(void);
        !            70:        void (*vh_stop)(void);
        !            71:        void (*vh_update)(struct osd_bitmap *bitmap,int full_refresh);
        !            72: 
        !            73:        /* sound hardware */
        !            74:        int sound_attributes;
        !            75:        int obsolete1;
        !            76:        int obsolete2;
        !            77:        int obsolete3;
        !            78:        const struct MachineSound sound[MAX_SOUND];
        !            79: 
        !            80:        /*
        !            81:           use this to manage nvram/eeprom/cmos/etc.
        !            82:           It is called before the emulation starts and after it ends. Note that it is
        !            83:           NOT called when the game is reset, since it is not needed.
        !            84:           file == 0, read_or_write == 0 -> first time the game is run, initialize nvram
        !            85:           file != 0, read_or_write == 0 -> load nvram from disk
        !            86:           file == 0, read_or_write != 0 -> not allowed
        !            87:           file != 0, read_or_write != 0 -> save nvram to disk
        !            88:         */
        !            89:        void (*nvram_handler)(void *file,int read_or_write);
        !            90: };
        !            91: 
        !            92: 
        !            93: 
        !            94: /* VBlank is the period when the video beam is outside of the visible area and */
        !            95: /* returns from the bottom to the top of the screen to prepare for a new video frame. */
        !            96: /* VBlank duration is an important factor in how the game renders itself. MAME */
        !            97: /* generates the vblank_interrupt, lets the game run for vblank_duration microseconds, */
        !            98: /* and then updates the screen. This faithfully reproduces the behaviour of the real */
        !            99: /* hardware. In many cases, the game does video related operations both in its vblank */
        !           100: /* interrupt, and in the normal game code; it is therefore important to set up */
        !           101: /* vblank_duration accurately to have everything properly in sync. An example of this */
        !           102: /* is Commando: if you set vblank_duration to 0, therefore redrawing the screen BEFORE */
        !           103: /* the vblank interrupt is executed, sprites will be misaligned when the screen scrolls. */
        !           104: 
        !           105: /* Here are some predefined, TOTALLY ARBITRARY values for vblank_duration, which should */
        !           106: /* be OK for most cases. I have NO IDEA how accurate they are compared to the real */
        !           107: /* hardware, they could be completely wrong. */
        !           108: #define DEFAULT_60HZ_VBLANK_DURATION 0
        !           109: #define DEFAULT_30HZ_VBLANK_DURATION 0
        !           110: /* If you use IPT_VBLANK, you need a duration different from 0. */
        !           111: #define DEFAULT_REAL_60HZ_VBLANK_DURATION 2500
        !           112: #define DEFAULT_REAL_30HZ_VBLANK_DURATION 2500
        !           113: 
        !           114: 
        !           115: 
        !           116: /* flags for video_attributes */
        !           117: 
        !           118: /* bit 1 of the video attributes indicates whether or not dirty rectangles will work */
        !           119: #define        VIDEO_SUPPORTS_DIRTY            0x0002
        !           120: 
        !           121: /* bit 0 of the video attributes indicates raster or vector video hardware */
        !           122: #define        VIDEO_TYPE_RASTER                       0x0000
        !           123: #define        VIDEO_TYPE_VECTOR                       0x0001
        !           124: 
        !           125: /* bit 3 of the video attributes indicates that the game's palette has 6 or more bits */
        !           126: /*       per gun, and would therefore require a 24-bit display. This is entirely up to */
        !           127: /*       the OS dependant layer, the bitmap will still be 16-bit. */
        !           128: #define VIDEO_NEEDS_6BITS_PER_GUN      0x0008
        !           129: 
        !           130: /* ASG 980417 - added: */
        !           131: /* bit 4 of the video attributes indicates that the driver wants its refresh after */
        !           132: /*       the VBLANK instead of before. */
        !           133: #define        VIDEO_UPDATE_BEFORE_VBLANK      0x0000
        !           134: #define        VIDEO_UPDATE_AFTER_VBLANK       0x0010
        !           135: 
        !           136: /* In most cases we assume pixels are square (1:1 aspect ratio) but some games need */
        !           137: /* different proportions, e.g. 1:2 for Blasteroids */
        !           138: #define VIDEO_PIXEL_ASPECT_RATIO_MASK 0x0060
        !           139: #define VIDEO_PIXEL_ASPECT_RATIO_1_1 0x0000
        !           140: #define VIDEO_PIXEL_ASPECT_RATIO_1_2 0x0020
        !           141: #define VIDEO_PIXEL_ASPECT_RATIO_2_1 0x0040
        !           142: 
        !           143: #define VIDEO_DUAL_MONITOR 0x0080
        !           144: 
        !           145: /* Mish 181099:  See comments in vidhrdw/generic.c for details */
        !           146: #define VIDEO_BUFFERS_SPRITERAM 0x0100
        !           147: 
        !           148: /* game wants to use a hicolor or truecolor bitmap (e.g. for alpha blending) */
        !           149: #define VIDEO_RGB_DIRECT                       0x0200
        !           150: 
        !           151: /* automatically extend the palette creating a darker copy for shadows */
        !           152: #define VIDEO_HAS_SHADOWS                      0x0400
        !           153: 
        !           154: /* automatically extend the palette creating a brighter copy for highlights */
        !           155: #define VIDEO_HAS_HIGHLIGHTS           0x0800
        !           156: 
        !           157: /* generic aspect ratios */
        !           158: #define VIDEO_ASPECT_RATIO_MASK                0xffff0000
        !           159: #define VIDEO_ASPECT_RATIO_NUM(a)      (((a) >> 24) & 0xff)
        !           160: #define VIDEO_ASPECT_RATIO_DEN(a)      (((a) >> 16) & 0xff)
        !           161: #define VIDEO_ASPECT_RATIO(n,d)                ((((n) & 0xff) << 24) | (((d) & 0xff) << 16))
        !           162: 
        !           163: 
        !           164: /* flags for sound_attributes */
        !           165: #define        SOUND_SUPPORTS_STEREO           0x0001
        !           166: 
        !           167: 
        !           168: 
        !           169: struct GameDriver
        !           170: {
        !           171:        const char *source_file;        /* set this to __FILE__ */
        !           172:        const struct GameDriver *clone_of;      /* if this is a clone, point to */
        !           173:                                                                                /* the main version of the game */
        !           174:        const char *name;
        !           175:        const char *description;
        !           176:        const char *year;
        !           177:        const char *manufacturer;
        !           178:        const struct MachineDriver *drv;
        !           179:        const struct InputPortTiny *input_ports;
        !           180:        void (*driver_init)(void);      /* optional function to be called during initialization */
        !           181:                                                                /* This is called ONCE, unlike Machine->init_machine */
        !           182:                                                                /* which is called every time the game is reset. */
        !           183: 
        !           184:        const struct RomModule *rom;
        !           185: #ifdef MESS
        !           186:        const struct IODevice *dev;
        !           187: #endif
        !           188: 
        !           189:        UINT32 flags;   /* orientation and other flags; see defines below */
        !           190: };
        !           191: 
        !           192: 
        !           193: /* values for the flags field */
        !           194: 
        !           195: #define ORIENTATION_MASK               0x0007
        !           196: #define        ORIENTATION_FLIP_X                      0x0001  /* mirror everything in the X direction */
        !           197: #define        ORIENTATION_FLIP_Y                      0x0002  /* mirror everything in the Y direction */
        !           198: #define ORIENTATION_SWAP_XY                    0x0004  /* mirror along the top-left/bottom-right diagonal */
        !           199: 
        !           200: #define GAME_NOT_WORKING                       0x0008
        !           201: #define GAME_UNEMULATED_PROTECTION     0x0010  /* game's protection not fully emulated */
        !           202: #define GAME_WRONG_COLORS                      0x0020  /* colors are totally wrong */
        !           203: #define GAME_IMPERFECT_COLORS          0x0040  /* colors are not 100% accurate, but close */
        !           204: #define GAME_IMPERFECT_GRAPHICS                0x0080  /* graphics are wrong/incomplete */
        !           205: #define GAME_NO_COCKTAIL                       0x0100  /* screen flip support is missing */
        !           206: #define GAME_NO_SOUND                          0x0200  /* sound is missing */
        !           207: #define GAME_IMPERFECT_SOUND           0x0400  /* sound is known to be wrong */
        !           208: #define NOT_A_DRIVER                           0x4000  /* set by the fake "root" driver_0 and by "containers" */
        !           209:                                                                                        /* e.g. driver_neogeo. */
        !           210: #ifdef MESS
        !           211: #define GAME_COMPUTER               0x8000  /* Driver is a computer (needs full keyboard) */
        !           212: #define GAME_COMPUTER_MODIFIED      0x0800     /* Official? Hack */
        !           213: #define GAME_ALIAS                  NOT_A_DRIVER       /* Driver is only an alias for an existing model */
        !           214: #endif
        !           215: 
        !           216: 
        !           217: #define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME)     \
        !           218: extern const struct GameDriver driver_##PARENT;        \
        !           219: const struct GameDriver driver_##NAME =                \
        !           220: {                                                                                      \
        !           221:        __FILE__,                                                               \
        !           222:        &driver_##PARENT,                                               \
        !           223:        #NAME,                                                                  \
        !           224:        FULLNAME,                                                               \
        !           225:        #YEAR,                                                                  \
        !           226:        COMPANY,                                                                \
        !           227:        &machine_driver_##MACHINE,                              \
        !           228:        input_ports_##INPUT,                                    \
        !           229:        init_##INIT,                                                    \
        !           230:        rom_##NAME,                                                             \
        !           231:        MONITOR                                                                 \
        !           232: };
        !           233: 
        !           234: #define GAMEX(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS)      \
        !           235: extern const struct GameDriver driver_##PARENT;        \
        !           236: const struct GameDriver driver_##NAME =                \
        !           237: {                                                                                      \
        !           238:        __FILE__,                                                               \
        !           239:        &driver_##PARENT,                                               \
        !           240:        #NAME,                                                                  \
        !           241:        FULLNAME,                                                               \
        !           242:        #YEAR,                                                                  \
        !           243:        COMPANY,                                                                \
        !           244:        &machine_driver_##MACHINE,                              \
        !           245:        input_ports_##INPUT,                                    \
        !           246:        init_##INIT,                                                    \
        !           247:        rom_##NAME,                                                             \
        !           248:        (MONITOR)|(FLAGS)                                               \
        !           249: };
        !           250: 
        !           251: 
        !           252: /* monitor parameters to be used with the GAME() macro */
        !           253: #define        ROT0    0
        !           254: #define        ROT90   (ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X)        /* rotate clockwise 90 degrees */
        !           255: #define        ROT180  (ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y)         /* rotate 180 degrees */
        !           256: #define        ROT270  (ORIENTATION_SWAP_XY|ORIENTATION_FLIP_Y)        /* rotate counter-clockwise 90 degrees */
        !           257: 
        !           258: /* this allows to leave the INIT field empty in the GAME() macro call */
        !           259: #define init_0 0
        !           260: 
        !           261: 
        !           262: extern const struct GameDriver *drivers[];
        !           263: 
        !           264: #endif

unix.superglobalmegacorp.com

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