Previous 199869 Revisions Next

r21063 Thursday 14th February, 2013 at 12:41:40 UTC by Miodrag Milanović
modernized chinagat (no whatsnew)
[src/mame/drivers]chinagat.c
[src/mame/includes]ddragon.h
[src/mame/video]ddragon.c

trunk/src/mame/video/ddragon.c
r21062r21063
105105   m_bg_tilemap->set_scrolldy(-8, -8);
106106}
107107
108VIDEO_START_MEMBER(ddragon_state,chinagat)
109{
110   m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ddragon_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(ddragon_state::background_scan),this), 16, 16, 32, 32);
111   m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ddragon_state::get_fg_16color_tile_info),this),TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
112
113   m_fg_tilemap->set_transparent_pen(0);
114   m_fg_tilemap->set_scrolldy(-8, -8);
115   m_bg_tilemap->set_scrolldy(-8, -8);
116}
117
118
119108/***************************************************************************
120109
121110  Memory handlers
trunk/src/mame/includes/ddragon.h
r21062r21063
8989   DECLARE_DRIVER_INIT(ddragon2);
9090   DECLARE_DRIVER_INIT(ddragon);
9191   DECLARE_DRIVER_INIT(ddragon6809);
92   DECLARE_DRIVER_INIT(chinagat);
9392   TILEMAP_MAPPER_MEMBER(background_scan);
9493   TILE_GET_INFO_MEMBER(get_bg_tile_info);
9594   TILE_GET_INFO_MEMBER(get_fg_tile_info);
9695   TILE_GET_INFO_MEMBER(get_fg_16color_tile_info);
97   DECLARE_MACHINE_START(chinagat);
98   DECLARE_MACHINE_RESET(chinagat);
99   DECLARE_VIDEO_START(chinagat);
10096   DECLARE_MACHINE_START(ddragon);
10197   DECLARE_MACHINE_RESET(ddragon);
10298   DECLARE_VIDEO_START(ddragon);
10399   UINT32 screen_update_ddragon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
104100   TIMER_DEVICE_CALLBACK_MEMBER(ddragon_scanline);
105   TIMER_DEVICE_CALLBACK_MEMBER(chinagat_scanline);
106101   void draw_sprites(  bitmap_ind16 &bitmap,const rectangle &cliprect );
107102   int scanline_to_vcount( int scanline );
108103};
trunk/src/mame/drivers/chinagat.c
r21062r21063
8383#define MAIN_CLOCK      XTAL_12MHz
8484#define PIXEL_CLOCK     MAIN_CLOCK / 2
8585
86class chinagat_state : public ddragon_state
87{
88public:
89   chinagat_state(const machine_config &mconfig, device_type type, const char *tag)
90      : ddragon_state(mconfig, type, tag) {};
8691
92   TIMER_DEVICE_CALLBACK_MEMBER(chinagat_scanline);
93   DECLARE_DRIVER_INIT(chinagat);
94   DECLARE_MACHINE_START(chinagat);
95   DECLARE_MACHINE_RESET(chinagat);
96   DECLARE_VIDEO_START(chinagat);
97   DECLARE_WRITE8_MEMBER( chinagat_interrupt_w );
98   DECLARE_WRITE8_MEMBER( chinagat_video_ctrl_w );
99   DECLARE_WRITE8_MEMBER( chinagat_bankswitch_w );
100   DECLARE_WRITE8_MEMBER( chinagat_sub_bankswitch_w );
101   DECLARE_READ8_MEMBER( saiyugoub1_mcu_command_r );
102   DECLARE_WRITE8_MEMBER( saiyugoub1_mcu_command_w );
103   DECLARE_WRITE8_MEMBER( saiyugoub1_adpcm_rom_addr_w );
104   DECLARE_WRITE8_MEMBER( saiyugoub1_adpcm_control_w );
105   DECLARE_WRITE8_MEMBER( saiyugoub1_m5205_clk_w );
106   DECLARE_READ8_MEMBER( saiyugoub1_m5205_irq_r );
107};
108
109
110VIDEO_START_MEMBER(chinagat_state,chinagat)
111{
112   m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(chinagat_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(chinagat_state::background_scan),this), 16, 16, 32, 32);
113   m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(chinagat_state::get_fg_16color_tile_info),this),TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
114
115   m_fg_tilemap->set_transparent_pen(0);
116   m_fg_tilemap->set_scrolldy(-8, -8);
117   m_bg_tilemap->set_scrolldy(-8, -8);
118}
87119/*
88120    Based on the Solar Warrior schematics, vertical timing counts as follows:
89121
r21062r21063
99131    Since MAME's video timing is 0-based, we need to convert this.
100132*/
101133
102TIMER_DEVICE_CALLBACK_MEMBER(ddragon_state::chinagat_scanline)
134TIMER_DEVICE_CALLBACK_MEMBER(chinagat_state::chinagat_scanline)
103135{
104136   int scanline = param;
105137   int screen_height = machine().primary_screen->height();
r21062r21063
123155      scanline = 0;
124156}
125157
126static WRITE8_HANDLER( chinagat_interrupt_w )
127{
128   ddragon_state *state = space.machine().driver_data<ddragon_state>();
129
158WRITE8_MEMBER(chinagat_state::chinagat_interrupt_w )
159{   
130160   switch (offset)
131161   {
132162      case 0: /* 3e00 - SND irq */
133         state->soundlatch_byte_w(space, 0, data);
134         state->m_snd_cpu->execute().set_input_line(state->m_sound_irq, (state->m_sound_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE );
163         soundlatch_byte_w(space, 0, data);
164         m_snd_cpu->execute().set_input_line(m_sound_irq, (m_sound_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE );
135165         break;
136166
137167      case 1: /* 3e01 - NMI ack */
138         state->m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
168         m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
139169         break;
140170
141171      case 2: /* 3e02 - FIRQ ack */
142         state->m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
172         m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
143173         break;
144174
145175      case 3: /* 3e03 - IRQ ack */
146         state->m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
176         m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
147177         break;
148178
149179      case 4: /* 3e04 - sub CPU IRQ ack */
150         state->m_sub_cpu->execute().set_input_line(state->m_sprite_irq, (state->m_sprite_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE );
180         m_sub_cpu->execute().set_input_line(m_sprite_irq, (m_sprite_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE );
151181         break;
152182   }
153183}
154184
155static WRITE8_HANDLER( chinagat_video_ctrl_w )
185WRITE8_MEMBER(chinagat_state::chinagat_video_ctrl_w )
156186{
157187   /***************************
158188   ---- ---x   X Scroll MSB
r21062r21063
160190   ---- -x--   Flip screen
161191   --x- ----   Enable video ???
162192   ****************************/
163   ddragon_state *state = space.machine().driver_data<ddragon_state>();
193   m_scrolly_hi = ((data & 0x02) >> 1);
194   m_scrollx_hi = data & 0x01;
164195
165   state->m_scrolly_hi = ((data & 0x02) >> 1);
166   state->m_scrollx_hi = data & 0x01;
167
168   state->flip_screen_set(~data & 0x04);
196   flip_screen_set(~data & 0x04);
169197}
170198
171static WRITE8_HANDLER( chinagat_bankswitch_w )
199WRITE8_MEMBER(chinagat_state::chinagat_bankswitch_w )
172200{
173201   space.machine().root_device().membank("bank1")->set_entry(data & 0x07); // shall we check (data & 7) < 6 (# of banks)?
174202}
175203
176static WRITE8_HANDLER( chinagat_sub_bankswitch_w )
204WRITE8_MEMBER(chinagat_state::chinagat_sub_bankswitch_w )
177205{
178206   space.machine().root_device().membank("bank4")->set_entry(data & 0x07); // shall we check (data & 7) < 6 (# of banks)?
179207}
180208
181static READ8_HANDLER( saiyugoub1_mcu_command_r )
209READ8_MEMBER(chinagat_state::saiyugoub1_mcu_command_r )
182210{
183   ddragon_state *state = space.machine().driver_data<ddragon_state>();
184211#if 0
185   if (state->m_mcu_command == 0x78)
212   if (m_mcu_command == 0x78)
186213   {
187214      space.machine().device<cpu_device>("mcu")->suspend(SUSPEND_REASON_HALT, 1); /* Suspend (speed up) */
188215   }
189216#endif
190   return state->m_mcu_command;
217   return m_mcu_command;
191218}
192219
193static WRITE8_HANDLER( saiyugoub1_mcu_command_w )
220WRITE8_MEMBER(chinagat_state::saiyugoub1_mcu_command_w )
194221{
195   ddragon_state *state = space.machine().driver_data<ddragon_state>();
196   state->m_mcu_command = data;
222   m_mcu_command = data;
197223#if 0
198224   if (data != 0x78)
199225   {
r21062r21063
202228#endif
203229}
204230
205static WRITE8_HANDLER( saiyugoub1_adpcm_rom_addr_w )
231WRITE8_MEMBER(chinagat_state::saiyugoub1_adpcm_rom_addr_w )
206232{
207   ddragon_state *state = space.machine().driver_data<ddragon_state>();
208233   /* i8748 Port 1 write */
209   state->m_i8748_P1 = data;
234   m_i8748_P1 = data;
210235}
211236
212static WRITE8_DEVICE_HANDLER( saiyugoub1_adpcm_control_w )
237WRITE8_MEMBER(chinagat_state::saiyugoub1_adpcm_control_w )
213238{
214   ddragon_state *state = space.machine().driver_data<ddragon_state>();
215
239   device_t *device = machine().device("adpcm");
216240   /* i8748 Port 2 write */
217   UINT8 *saiyugoub1_adpcm_rom = state->memregion("adpcm")->base();
241   UINT8 *saiyugoub1_adpcm_rom = memregion("adpcm")->base();
218242
219243   if (data & 0x80)    /* Reset m5205 and disable ADPCM ROM outputs */
220244   {
221245      logerror("ADPCM output disabled\n");
222      state->m_pcm_nibble = 0x0f;
246      m_pcm_nibble = 0x0f;
223247      msm5205_reset_w(device, 1);
224248   }
225249   else
226250   {
227      if ((state->m_i8748_P2 & 0xc) != (data & 0xc))
251      if ((m_i8748_P2 & 0xc) != (data & 0xc))
228252      {
229         if ((state->m_i8748_P2 & 0xc) == 0) /* Latch MSB Address */
253         if ((m_i8748_P2 & 0xc) == 0) /* Latch MSB Address */
230254         {
231255///             logerror("Latching MSB\n");
232            state->m_adpcm_addr = (state->m_adpcm_addr & 0x3807f) | (state->m_i8748_P1 << 7);
256            m_adpcm_addr = (m_adpcm_addr & 0x3807f) | (m_i8748_P1 << 7);
233257         }
234         if ((state->m_i8748_P2 & 0xc) == 4) /* Latch LSB Address */
258         if ((m_i8748_P2 & 0xc) == 4) /* Latch LSB Address */
235259         {
236260///             logerror("Latching LSB\n");
237            state->m_adpcm_addr = (state->m_adpcm_addr & 0x3ff80) | (state->m_i8748_P1 >> 1);
238            state->m_pcm_shift = (state->m_i8748_P1 & 1) * 4;
261            m_adpcm_addr = (m_adpcm_addr & 0x3ff80) | (m_i8748_P1 >> 1);
262            m_pcm_shift = (m_i8748_P1 & 1) * 4;
239263         }
240264      }
241265
242      state->m_adpcm_addr = ((state->m_adpcm_addr & 0x07fff) | (data & 0x70 << 11));
266      m_adpcm_addr = ((m_adpcm_addr & 0x07fff) | (data & 0x70 << 11));
243267
244      state->m_pcm_nibble = saiyugoub1_adpcm_rom[state->m_adpcm_addr & 0x3ffff];
268      m_pcm_nibble = saiyugoub1_adpcm_rom[m_adpcm_addr & 0x3ffff];
245269
246      state->m_pcm_nibble = (state->m_pcm_nibble >> state->m_pcm_shift) & 0x0f;
270      m_pcm_nibble = (m_pcm_nibble >> m_pcm_shift) & 0x0f;
247271
248///     logerror("Writing %02x to m5205. $ROM=%08x  P1=%02x  P2=%02x  Prev_P2=%02x  Nibble=%08x\n", state->m_pcm_nibble, state->m_adpcm_addr, state->m_i8748_P1, data, state->m_i8748_P2, state->m_pcm_shift);
272///     logerror("Writing %02x to m5205. $ROM=%08x  P1=%02x  P2=%02x  Prev_P2=%02x  Nibble=%08x\n", m_pcm_nibble, m_adpcm_addr, m_i8748_P1, data, m_i8748_P2, m_pcm_shift);
249273
250      if (((state->m_i8748_P2 & 0xc) >= 8) && ((data & 0xc) == 4))
274      if (((m_i8748_P2 & 0xc) >= 8) && ((data & 0xc) == 4))
251275      {
252         msm5205_data_w (device, state->m_pcm_nibble);
253         logerror("Writing %02x to m5205\n", state->m_pcm_nibble);
276         msm5205_data_w (device, m_pcm_nibble);
277         logerror("Writing %02x to m5205\n", m_pcm_nibble);
254278      }
255      logerror("$ROM=%08x  P1=%02x  P2=%02x  Prev_P2=%02x  Nibble=%1x  PCM_data=%02x\n", state->m_adpcm_addr, state->m_i8748_P1, data, state->m_i8748_P2, state->m_pcm_shift, state->m_pcm_nibble);
279      logerror("$ROM=%08x  P1=%02x  P2=%02x  Prev_P2=%02x  Nibble=%1x  PCM_data=%02x\n", m_adpcm_addr, m_i8748_P1, data, m_i8748_P2, m_pcm_shift, m_pcm_nibble);
256280   }
257   state->m_i8748_P2 = data;
281   m_i8748_P2 = data;
258282}
259283
260static WRITE8_DEVICE_HANDLER( saiyugoub1_m5205_clk_w )
284WRITE8_MEMBER(chinagat_state::saiyugoub1_m5205_clk_w )
261285{
262286   /* i8748 T0 output clk mode */
263287   /* This signal goes through a divide by 8 counter */
r21062r21063
265289
266290   /* Actually, T0 output clk mode is not supported by the i8048 core */
267291#if 0
268   ddragon_state *state = space.machine().driver_data<ddragon_state>();
269
270   state->m_m5205_clk++;
271   if (state->m_m5205_clk == 8)
292   device_t *device = machine().device("adpcm");
293   m_m5205_clk++;
294   if (m_m5205_clk == 8)
272295   {
273296      msm5205_vclk_w(device, 1);      /* ??? */
274      state->m_m5205_clk = 0;
297      m_m5205_clk = 0;
275298   }
276299   else
277300      msm5205_vclk_w(device, 0);      /* ??? */
278301#endif
279302}
280303
281static READ8_HANDLER( saiyugoub1_m5205_irq_r )
304READ8_MEMBER(chinagat_state::saiyugoub1_m5205_irq_r )
282305{
283   ddragon_state *state = space.machine().driver_data<ddragon_state>();
284   if (state->m_adpcm_sound_irq)
306   if (m_adpcm_sound_irq)
285307   {
286      state->m_adpcm_sound_irq = 0;
308      m_adpcm_sound_irq = 0;
287309      return 1;
288310   }
289311   return 0;
r21062r21063
291313
292314static void saiyugoub1_m5205_irq_w( device_t *device )
293315{
294   ddragon_state *state = device->machine().driver_data<ddragon_state>();
316   chinagat_state *state = device->machine().driver_data<chinagat_state>();
295317   state->m_adpcm_sound_irq = 1;
296318}
297319
298static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, ddragon_state )
320static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, chinagat_state )
299321   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
300322   AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(ddragon_fgvideoram_w) AM_SHARE("fgvideoram")
301323   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(ddragon_bgvideoram_w) AM_SHARE("bgvideoram")
302324   AM_RANGE(0x3000, 0x317f) AM_WRITE(paletteram_xxxxBBBBGGGGRRRR_byte_split_lo_w) AM_SHARE("paletteram")
303325   AM_RANGE(0x3400, 0x357f) AM_WRITE(paletteram_xxxxBBBBGGGGRRRR_byte_split_hi_w) AM_SHARE("paletteram2")
304326   AM_RANGE(0x3800, 0x397f) AM_WRITE_BANK("bank3") AM_SHARE("spriteram")
305   AM_RANGE(0x3e00, 0x3e04) AM_WRITE_LEGACY(chinagat_interrupt_w)
327   AM_RANGE(0x3e00, 0x3e04) AM_WRITE(chinagat_interrupt_w)
306328   AM_RANGE(0x3e06, 0x3e06) AM_WRITEONLY AM_SHARE("scrolly_lo")
307329   AM_RANGE(0x3e07, 0x3e07) AM_WRITEONLY AM_SHARE("scrollx_lo")
308   AM_RANGE(0x3f00, 0x3f00) AM_WRITE_LEGACY(chinagat_video_ctrl_w)
309   AM_RANGE(0x3f01, 0x3f01) AM_WRITE_LEGACY(chinagat_bankswitch_w)
330   AM_RANGE(0x3f00, 0x3f00) AM_WRITE(chinagat_video_ctrl_w)
331   AM_RANGE(0x3f01, 0x3f01) AM_WRITE(chinagat_bankswitch_w)
310332   AM_RANGE(0x3f00, 0x3f00) AM_READ_PORT("SYSTEM")
311333   AM_RANGE(0x3f01, 0x3f01) AM_READ_PORT("DSW1")
312334   AM_RANGE(0x3f02, 0x3f02) AM_READ_PORT("DSW2")
r21062r21063
316338   AM_RANGE(0x8000, 0xffff) AM_ROM
317339ADDRESS_MAP_END
318340
319static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, ddragon_state )
341static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, chinagat_state )
320342   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
321   AM_RANGE(0x2000, 0x2000) AM_WRITE_LEGACY(chinagat_sub_bankswitch_w)
343   AM_RANGE(0x2000, 0x2000) AM_WRITE(chinagat_sub_bankswitch_w)
322344   AM_RANGE(0x2800, 0x2800) AM_WRITEONLY /* Called on CPU start and after return from jump table */
323345//  AM_RANGE(0x2a2b, 0x2a2b) AM_READNOP /* What lives here? */
324346//  AM_RANGE(0x2a30, 0x2a30) AM_READNOP /* What lives here? */
r21062r21063
326348   AM_RANGE(0x8000, 0xffff) AM_ROM
327349ADDRESS_MAP_END
328350
329static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, ddragon_state )
351static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, chinagat_state )
330352   AM_RANGE(0x0000, 0x7fff) AM_ROM
331353   AM_RANGE(0x8000, 0x87ff) AM_RAM
332354   AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
r21062r21063
334356   AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r)
335357ADDRESS_MAP_END
336358
337static ADDRESS_MAP_START( ym2203c_sound_map, AS_PROGRAM, 8, ddragon_state )
359static ADDRESS_MAP_START( ym2203c_sound_map, AS_PROGRAM, 8, chinagat_state )
338360   AM_RANGE(0x0000, 0x7fff) AM_ROM
339361   AM_RANGE(0x8000, 0x87ff) AM_RAM
340362// 8804 and/or 8805 make a gong sound when the coin goes in
r21062r21063
352374   AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r)
353375ADDRESS_MAP_END
354376
355static ADDRESS_MAP_START( saiyugoub1_sound_map, AS_PROGRAM, 8, ddragon_state )
377static ADDRESS_MAP_START( saiyugoub1_sound_map, AS_PROGRAM, 8, chinagat_state )
356378   AM_RANGE(0x0000, 0x7fff) AM_ROM
357379   AM_RANGE(0x8000, 0x87ff) AM_RAM
358380   AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
359   AM_RANGE(0x9800, 0x9800) AM_WRITE_LEGACY(saiyugoub1_mcu_command_w)
381   AM_RANGE(0x9800, 0x9800) AM_WRITE(saiyugoub1_mcu_command_w)
360382   AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r)
361383ADDRESS_MAP_END
362384
363static ADDRESS_MAP_START( i8748_map, AS_PROGRAM, 8, ddragon_state )
385static ADDRESS_MAP_START( i8748_map, AS_PROGRAM, 8, chinagat_state )
364386   AM_RANGE(0x0000, 0x03ff) AM_ROM
365387   AM_RANGE(0x0400, 0x07ff) AM_ROM     /* i8749 version */
366388ADDRESS_MAP_END
367389
368static ADDRESS_MAP_START( i8748_portmap, AS_IO, 8, ddragon_state )
369   AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ_LEGACY(saiyugoub1_mcu_command_r)
370   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_DEVWRITE_LEGACY("adpcm", saiyugoub1_m5205_clk_w)      /* Drives the clock on the m5205 at 1/8 of this frequency */
371   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_LEGACY(saiyugoub1_m5205_irq_r)
372   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE_LEGACY(saiyugoub1_adpcm_rom_addr_w)
373   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_DEVWRITE_LEGACY("adpcm", saiyugoub1_adpcm_control_w)
390static ADDRESS_MAP_START( i8748_portmap, AS_IO, 8, chinagat_state )
391   AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ(saiyugoub1_mcu_command_r)
392   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_WRITE(saiyugoub1_m5205_clk_w)      /* Drives the clock on the m5205 at 1/8 of this frequency */
393   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(saiyugoub1_m5205_irq_r)
394   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(saiyugoub1_adpcm_rom_addr_w)
395   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(saiyugoub1_adpcm_control_w)
374396ADDRESS_MAP_END
375397
376398
r21062r21063
482504GFXDECODE_END
483505
484506
485static void chinagat_irq_handler( device_t *device, int irq )
507static void chinagat_irq_handler(device_t *device, int irq )
486508{
487   ddragon_state *state = device->machine().driver_data<ddragon_state>();
509   chinagat_state *state = device->machine().driver_data<chinagat_state>();
488510   state->m_snd_cpu->execute().set_input_line(0, irq ? ASSERT_LINE : CLEAR_LINE );
489511}
490512
r21062r21063
507529};
508530
509531
510MACHINE_START_MEMBER(ddragon_state,chinagat)
532MACHINE_START_MEMBER(chinagat_state,chinagat)
511533{
512534   m_maincpu = machine().device<cpu_device>("maincpu");
513535   m_sub_cpu = machine().device("sub");
r21062r21063
532554}
533555
534556
535MACHINE_RESET_MEMBER(ddragon_state,chinagat)
557MACHINE_RESET_MEMBER(chinagat_state,chinagat)
536558{
537559   m_scrollx_hi = 0;
538560   m_scrolly_hi = 0;
r21062r21063
549571}
550572
551573
552static MACHINE_CONFIG_START( chinagat, ddragon_state )
574static MACHINE_CONFIG_START( chinagat, chinagat_state )
553575
554576   /* basic machine hardware */
555577   MCFG_CPU_ADD("maincpu", HD6309, MAIN_CLOCK / 2)     /* 1.5 MHz (12MHz oscillator / 4 internally) */
556578   MCFG_CPU_PROGRAM_MAP(main_map)
557   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddragon_state, chinagat_scanline, "screen", 0, 1)
579   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", chinagat_state, chinagat_scanline, "screen", 0, 1)
558580
559581   MCFG_CPU_ADD("sub", HD6309, MAIN_CLOCK / 2)     /* 1.5 MHz (12MHz oscillator / 4 internally) */
560582   MCFG_CPU_PROGRAM_MAP(sub_map)
r21062r21063
564586
565587   MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* heavy interleaving to sync up sprite<->main cpu's */
566588
567   MCFG_MACHINE_START_OVERRIDE(ddragon_state,chinagat)
568   MCFG_MACHINE_RESET_OVERRIDE(ddragon_state,chinagat)
589   MCFG_MACHINE_START_OVERRIDE(chinagat_state,chinagat)
590   MCFG_MACHINE_RESET_OVERRIDE(chinagat_state,chinagat)
569591
570592   /* video hardware */
571593   MCFG_SCREEN_ADD("screen", RASTER)
572594   MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 0, 240)   /* based on ddragon driver */
573   MCFG_SCREEN_UPDATE_DRIVER(ddragon_state, screen_update_ddragon)
595   MCFG_SCREEN_UPDATE_DRIVER(chinagat_state, screen_update_ddragon)
574596
575597   MCFG_GFXDECODE(chinagat)
576598   MCFG_PALETTE_LENGTH(384)
577599
578   MCFG_VIDEO_START_OVERRIDE(ddragon_state,chinagat)
600   MCFG_VIDEO_START_OVERRIDE(chinagat_state,chinagat)
579601
580602   /* sound hardware */
581603   MCFG_SPEAKER_STANDARD_MONO("mono")
r21062r21063
589611   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
590612MACHINE_CONFIG_END
591613
592static MACHINE_CONFIG_START( saiyugoub1, ddragon_state )
614static MACHINE_CONFIG_START( saiyugoub1, chinagat_state )
593615
594616   /* basic machine hardware */
595617   MCFG_CPU_ADD("maincpu", M6809, MAIN_CLOCK / 8)      /* 68B09EP 1.5 MHz (12MHz oscillator) */
596618   MCFG_CPU_PROGRAM_MAP(main_map)
597   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddragon_state, chinagat_scanline, "screen", 0, 1)
619   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", chinagat_state, chinagat_scanline, "screen", 0, 1)
598620
599621   MCFG_CPU_ADD("sub", M6809, MAIN_CLOCK / 8)      /* 68B09EP 1.5 MHz (12MHz oscillator) */
600622   MCFG_CPU_PROGRAM_MAP(sub_map)
r21062r21063
608630
609631   MCFG_QUANTUM_TIME(attotime::from_hz(6000))  /* heavy interleaving to sync up sprite<->main cpu's */
610632
611   MCFG_MACHINE_START_OVERRIDE(ddragon_state,chinagat)
612   MCFG_MACHINE_RESET_OVERRIDE(ddragon_state,chinagat)
633   MCFG_MACHINE_START_OVERRIDE(chinagat_state,chinagat)
634   MCFG_MACHINE_RESET_OVERRIDE(chinagat_state,chinagat)
613635
614636   /* video hardware */
615637   MCFG_SCREEN_ADD("screen", RASTER)
616638   MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 0, 240)   /* based on ddragon driver */
617   MCFG_SCREEN_UPDATE_DRIVER(ddragon_state, screen_update_ddragon)
639   MCFG_SCREEN_UPDATE_DRIVER(chinagat_state, screen_update_ddragon)
618640
619641   MCFG_GFXDECODE(chinagat)
620642   MCFG_PALETTE_LENGTH(384)
621643
622   MCFG_VIDEO_START_OVERRIDE(ddragon_state,chinagat)
644   MCFG_VIDEO_START_OVERRIDE(chinagat_state,chinagat)
623645
624646   /* sound hardware */
625647   MCFG_SPEAKER_STANDARD_MONO("mono")
r21062r21063
634656   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
635657MACHINE_CONFIG_END
636658
637static MACHINE_CONFIG_START( saiyugoub2, ddragon_state )
659static MACHINE_CONFIG_START( saiyugoub2, chinagat_state )
638660
639661   /* basic machine hardware */
640662   MCFG_CPU_ADD("maincpu", M6809, MAIN_CLOCK / 8)      /* 1.5 MHz (12MHz oscillator) */
641663   MCFG_CPU_PROGRAM_MAP(main_map)
642   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ddragon_state, chinagat_scanline, "screen", 0, 1)
664   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", chinagat_state, chinagat_scanline, "screen", 0, 1)
643665
644666   MCFG_CPU_ADD("sub", M6809, MAIN_CLOCK / 8)      /* 1.5 MHz (12MHz oscillator) */
645667   MCFG_CPU_PROGRAM_MAP(sub_map)
r21062r21063
649671
650672   MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* heavy interleaving to sync up sprite<->main cpu's */
651673
652   MCFG_MACHINE_START_OVERRIDE(ddragon_state,chinagat)
653   MCFG_MACHINE_RESET_OVERRIDE(ddragon_state,chinagat)
674   MCFG_MACHINE_START_OVERRIDE(chinagat_state,chinagat)
675   MCFG_MACHINE_RESET_OVERRIDE(chinagat_state,chinagat)
654676
655677   /* video hardware */
656678   MCFG_SCREEN_ADD("screen", RASTER)
657679   MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 0, 240)   /* based on ddragon driver */
658   MCFG_SCREEN_UPDATE_DRIVER(ddragon_state, screen_update_ddragon)
680   MCFG_SCREEN_UPDATE_DRIVER(chinagat_state, screen_update_ddragon)
659681
660682   MCFG_GFXDECODE(chinagat)
661683   MCFG_PALETTE_LENGTH(384)
662684
663   MCFG_VIDEO_START_OVERRIDE(ddragon_state,chinagat)
685   MCFG_VIDEO_START_OVERRIDE(chinagat_state,chinagat)
664686
665687   /* sound hardware */
666688   MCFG_SPEAKER_STANDARD_MONO("mono")
r21062r21063
890912ROM_END
891913
892914
893DRIVER_INIT_MEMBER(ddragon_state,chinagat)
915DRIVER_INIT_MEMBER(chinagat_state,chinagat)
894916{
895917   UINT8 *MAIN = memregion("maincpu")->base();
896918   UINT8 *SUB = memregion("sub")->base();
r21062r21063
905927
906928
907929/*   ( YEAR  NAME      PARENT    MACHINE   INPUT     INIT    MONITOR COMPANY    FULLNAME     FLAGS ) */
908GAME( 1988, chinagat,   0,        chinagat,   chinagat, ddragon_state, chinagat, ROT0, "Technos Japan (Taito / Romstar license)", "China Gate (US)", GAME_SUPPORTS_SAVE )
909GAME( 1988, saiyugou,   chinagat, chinagat,   chinagat, ddragon_state, chinagat, ROT0, "Technos Japan", "Sai Yu Gou Ma Roku (Japan)", GAME_SUPPORTS_SAVE )
910GAME( 1988, saiyugoub1, chinagat, saiyugoub1, chinagat, ddragon_state, chinagat, ROT0, "bootleg", "Sai Yu Gou Ma Roku (Japan bootleg 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
911GAME( 1988, saiyugoub2, chinagat, saiyugoub2, chinagat, ddragon_state, chinagat, ROT0, "bootleg", "Sai Yu Gou Ma Roku (Japan bootleg 2)", GAME_SUPPORTS_SAVE )
930GAME( 1988, chinagat,   0,        chinagat,   chinagat, chinagat_state, chinagat, ROT0, "Technos Japan (Taito / Romstar license)", "China Gate (US)", GAME_SUPPORTS_SAVE )
931GAME( 1988, saiyugou,   chinagat, chinagat,   chinagat, chinagat_state, chinagat, ROT0, "Technos Japan", "Sai Yu Gou Ma Roku (Japan)", GAME_SUPPORTS_SAVE )
932GAME( 1988, saiyugoub1, chinagat, saiyugoub1, chinagat, chinagat_state, chinagat, ROT0, "bootleg", "Sai Yu Gou Ma Roku (Japan bootleg 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
933GAME( 1988, saiyugoub2, chinagat, saiyugoub2, chinagat, chinagat_state, chinagat, ROT0, "bootleg", "Sai Yu Gou Ma Roku (Japan bootleg 2)", GAME_SUPPORTS_SAVE )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team