summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/atarigen.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/atarigen.h')
-rw-r--r--src/mame/machine/atarigen.h289
1 files changed, 289 insertions, 0 deletions
diff --git a/src/mame/machine/atarigen.h b/src/mame/machine/atarigen.h
new file mode 100644
index 00000000000..67d22ab430f
--- /dev/null
+++ b/src/mame/machine/atarigen.h
@@ -0,0 +1,289 @@
+/*##########################################################################
+
+ atarigen.h
+
+ General functions for Atari raster games.
+
+##########################################################################*/
+
+#include "video/atarimo.h"
+#include "video/atarirle.h"
+
+#ifndef __MACHINE_ATARIGEN__
+#define __MACHINE_ATARIGEN__
+
+
+/*##########################################################################
+ CONSTANTS
+##########################################################################*/
+
+#define ATARI_CLOCK_14MHz 14318180
+#define ATARI_CLOCK_20MHz 20000000
+#define ATARI_CLOCK_32MHz 32000000
+#define ATARI_CLOCK_50MHz 50000000
+
+
+
+/*##########################################################################
+ TYPES & STRUCTURES
+##########################################################################*/
+
+typedef void (*atarigen_int_callback)(void);
+
+typedef void (*atarigen_scanline_callback)(running_machine *machine, int scrnum, int scanline);
+
+struct atarivc_state_desc
+{
+ UINT32 latch1; /* latch #1 value (-1 means disabled) */
+ UINT32 latch2; /* latch #2 value (-1 means disabled) */
+ UINT32 rowscroll_enable; /* true if row-scrolling is enabled */
+ UINT32 palette_bank; /* which palette bank is enabled */
+ UINT32 pf0_xscroll; /* playfield 1 xscroll */
+ UINT32 pf0_xscroll_raw; /* playfield 1 xscroll raw value */
+ UINT32 pf0_yscroll; /* playfield 1 yscroll */
+ UINT32 pf1_xscroll; /* playfield 2 xscroll */
+ UINT32 pf1_xscroll_raw; /* playfield 2 xscroll raw value */
+ UINT32 pf1_yscroll; /* playfield 2 yscroll */
+ UINT32 mo_xscroll; /* sprite xscroll */
+ UINT32 mo_yscroll; /* sprite xscroll */
+};
+
+
+
+/*##########################################################################
+ GLOBAL VARIABLES
+##########################################################################*/
+
+extern UINT8 atarigen_scanline_int_state;
+extern UINT8 atarigen_sound_int_state;
+extern UINT8 atarigen_video_int_state;
+
+extern const UINT16 * atarigen_eeprom_default;
+extern UINT16 * atarigen_eeprom;
+extern size_t atarigen_eeprom_size;
+
+extern UINT8 atarigen_cpu_to_sound_ready;
+extern UINT8 atarigen_sound_to_cpu_ready;
+
+extern UINT16 * atarigen_playfield;
+extern UINT16 * atarigen_playfield2;
+extern UINT16 * atarigen_playfield_upper;
+extern UINT16 * atarigen_alpha;
+extern UINT16 * atarigen_alpha2;
+extern UINT16 * atarigen_xscroll;
+extern UINT16 * atarigen_yscroll;
+
+extern UINT32 * atarigen_playfield32;
+extern UINT32 * atarigen_alpha32;
+
+extern tilemap * atarigen_playfield_tilemap;
+extern tilemap * atarigen_playfield2_tilemap;
+extern tilemap * atarigen_alpha_tilemap;
+extern tilemap * atarigen_alpha2_tilemap;
+
+extern UINT16 * atarivc_data;
+extern UINT16 * atarivc_eof_data;
+extern struct atarivc_state_desc atarivc_state;
+
+
+
+/*##########################################################################
+ FUNCTION PROTOTYPES
+##########################################################################*/
+
+/*---------------------------------------------------------------
+ INTERRUPT HANDLING
+---------------------------------------------------------------*/
+
+void atarigen_interrupt_reset(atarigen_int_callback update_int);
+void atarigen_update_interrupts(void);
+
+void atarigen_scanline_int_set(int scrnum, int scanline);
+INTERRUPT_GEN( atarigen_scanline_int_gen );
+WRITE16_HANDLER( atarigen_scanline_int_ack_w );
+WRITE32_HANDLER( atarigen_scanline_int_ack32_w );
+
+INTERRUPT_GEN( atarigen_sound_int_gen );
+WRITE16_HANDLER( atarigen_sound_int_ack_w );
+WRITE32_HANDLER( atarigen_sound_int_ack32_w );
+
+INTERRUPT_GEN( atarigen_video_int_gen );
+WRITE16_HANDLER( atarigen_video_int_ack_w );
+WRITE32_HANDLER( atarigen_video_int_ack32_w );
+
+
+/*---------------------------------------------------------------
+ EEPROM HANDLING
+---------------------------------------------------------------*/
+
+void atarigen_eeprom_reset(void);
+
+WRITE16_HANDLER( atarigen_eeprom_enable_w );
+WRITE16_HANDLER( atarigen_eeprom_w );
+READ16_HANDLER( atarigen_eeprom_r );
+READ16_HANDLER( atarigen_eeprom_upper_r );
+
+WRITE32_HANDLER( atarigen_eeprom_enable32_w );
+WRITE32_HANDLER( atarigen_eeprom32_w );
+READ32_HANDLER( atarigen_eeprom_upper32_r );
+
+NVRAM_HANDLER( atarigen );
+
+
+/*---------------------------------------------------------------
+ SLAPSTIC HANDLING
+---------------------------------------------------------------*/
+
+void atarigen_slapstic_init(int cpunum, int base, int chipnum);
+void atarigen_slapstic_reset(void);
+
+WRITE16_HANDLER( atarigen_slapstic_w );
+READ16_HANDLER( atarigen_slapstic_r );
+
+
+/*---------------------------------------------------------------
+ SOUND I/O
+---------------------------------------------------------------*/
+
+void atarigen_sound_io_reset(int cpu_num);
+
+INTERRUPT_GEN( atarigen_6502_irq_gen );
+READ8_HANDLER( atarigen_6502_irq_ack_r );
+WRITE8_HANDLER( atarigen_6502_irq_ack_w );
+
+void atarigen_ym2151_irq_gen(int irq);
+
+WRITE16_HANDLER( atarigen_sound_w );
+READ16_HANDLER( atarigen_sound_r );
+WRITE16_HANDLER( atarigen_sound_upper_w );
+READ16_HANDLER( atarigen_sound_upper_r );
+
+WRITE32_HANDLER( atarigen_sound_upper32_w );
+READ32_HANDLER( atarigen_sound_upper32_r );
+
+void atarigen_sound_reset(void);
+WRITE16_HANDLER( atarigen_sound_reset_w );
+WRITE8_HANDLER( atarigen_6502_sound_w );
+READ8_HANDLER( atarigen_6502_sound_r );
+
+
+/*---------------------------------------------------------------
+ SOUND HELPERS
+---------------------------------------------------------------*/
+
+void atarigen_set_ym2151_vol(running_machine *machine, int volume);
+void atarigen_set_ym2413_vol(running_machine *machine, int volume);
+void atarigen_set_pokey_vol(running_machine *machine, int volume);
+void atarigen_set_tms5220_vol(running_machine *machine, int volume);
+void atarigen_set_oki6295_vol(running_machine *machine, int volume);
+
+
+/*---------------------------------------------------------------
+ VIDEO CONTROLLER
+---------------------------------------------------------------*/
+
+void atarivc_reset(int scrnum, UINT16 *eof_data, int playfields);
+
+WRITE16_HANDLER( atarivc_w );
+READ16_HANDLER( atarivc_r );
+
+INLINE void atarivc_update_pf_xscrolls(void)
+{
+ atarivc_state.pf0_xscroll = atarivc_state.pf0_xscroll_raw + ((atarivc_state.pf1_xscroll_raw) & 7);
+ atarivc_state.pf1_xscroll = atarivc_state.pf1_xscroll_raw + 4;
+}
+
+
+/*---------------------------------------------------------------
+ PLAYFIELD/ALPHA MAP HELPERS
+---------------------------------------------------------------*/
+
+WRITE16_HANDLER( atarigen_alpha_w );
+WRITE32_HANDLER( atarigen_alpha32_w );
+WRITE16_HANDLER( atarigen_alpha2_w );
+void atarigen_set_playfield_latch(int data);
+void atarigen_set_playfield2_latch(int data);
+WRITE16_HANDLER( atarigen_playfield_w );
+WRITE32_HANDLER( atarigen_playfield32_w );
+WRITE16_HANDLER( atarigen_playfield_large_w );
+WRITE16_HANDLER( atarigen_playfield_upper_w );
+WRITE16_HANDLER( atarigen_playfield_dual_upper_w );
+WRITE16_HANDLER( atarigen_playfield_latched_lsb_w );
+WRITE16_HANDLER( atarigen_playfield_latched_msb_w );
+WRITE16_HANDLER( atarigen_playfield2_w );
+WRITE16_HANDLER( atarigen_playfield2_latched_msb_w );
+
+
+/*---------------------------------------------------------------
+ VIDEO HELPERS
+---------------------------------------------------------------*/
+
+void atarigen_scanline_timer_reset(int scrnum, atarigen_scanline_callback update_graphics, int frequency);
+int atarigen_get_hblank(running_machine *machine, int scrnum);
+WRITE16_HANDLER( atarigen_halt_until_hblank_0_w );
+WRITE16_HANDLER( atarigen_666_paletteram_w );
+WRITE16_HANDLER( atarigen_expanded_666_paletteram_w );
+WRITE32_HANDLER( atarigen_666_paletteram32_w );
+
+
+/*---------------------------------------------------------------
+ MISC HELPERS
+---------------------------------------------------------------*/
+
+void atarigen_swap_mem(void *ptr1, void *ptr2, int bytes);
+void atarigen_blend_gfx(running_machine *machine, int gfx0, int gfx1, int mask0, int mask1);
+
+
+/*---------------------------------------------------------------
+ STATE SAVE
+---------------------------------------------------------------*/
+
+void atarigen_init_save_state(void);
+
+/*##########################################################################
+ GENERAL ATARI NOTES
+############################################################################
+
+ Atari 68000 list:
+
+ Driver Pr? Up? VC? PF? P2? MO? AL? BM? PH?
+ ---------- --- --- --- --- --- --- --- --- ---
+ arcadecl.c * * *
+ atarig1.c * * rle *
+ atarig42.c * * rle *
+ atarigt.c * rle *
+ atarigx2.c * rle *
+ atarisy1.c * * * * * 270->260
+ atarisy2.c * * * * * 150->120
+ badlands.c * * * 250->260
+ batman.c * * * * * * * * 200->160 ?
+ blstroid.c * * * 240->230
+ cyberbal.c * * * * 125->105 ?
+ eprom.c * * * * 170->170
+ gauntlet.c * * * * * * 220->250
+ klax.c * * * * 480->440 ?
+ offtwall.c * * * * 260->260
+ rampart.c * * * 280->280
+ relief.c * * * * * * 240->240
+ shuuz.c * * * * 410->290 fix!
+ skullxbo.c * * * * 150->145
+ thunderj.c * * * * * * * 180->180
+ toobin.c * * * * 140->115 fix!
+ vindictr.c * * * * * * 200->210
+ xybots.c * * * * * 235->238
+ ---------- --- --- --- --- --- --- --- --- ---
+
+ Pr? - do we have verifiable proof on priorities?
+ Up? - have we updated to use new MO's & tilemaps?
+ VC? - does it use the video controller?
+ PF? - does it have a playfield?
+ P2? - does it have a dual playfield?
+ MO? - does it have MO's?
+ AL? - does it have an alpha layer?
+ BM? - does it have a bitmap layer?
+ PH? - does it use the palette hack?
+
+##########################################################################*/
+
+
+#endif