Previous 199869 Revisions Next

r36365 Tuesday 10th March, 2015 at 17:31:13 UTC by Osso
shougi.c, shuuz.c, xain.c: added save state support (nw)
[src/mame/drivers]shougi.c shuuz.c xain.c
[src/mame/includes]shuuz.h xain.h
[src/mame/video]shuuz.c xain.c

trunk/src/mame/drivers/shougi.c
r244876r244877
9292public:
9393   shougi_state(const machine_config &mconfig, device_type type, const char *tag)
9494      : driver_device(mconfig, type, tag),
95      m_videoram(*this, "videoram"),
9695      m_maincpu(*this, "maincpu"),
9796      m_subcpu(*this, "sub"),
98      m_mcu(*this, "mcu") { }
97      m_mcu(*this, "mcu"),
98      m_videoram(*this, "videoram") { }
9999
100   required_device<cpu_device> m_maincpu;
101   required_device<cpu_device> m_subcpu;
102   required_device<cpu_device> m_mcu;
103
100104   required_shared_ptr<UINT8> m_videoram;
105
101106   int m_nmi_enabled;
107   int m_r;
102108   //UINT8 *m_cpu_sharedram;
103109   //UINT8 m_cpu_sharedram_control_val;
104   int m_r;
110   
105111   DECLARE_WRITE8_MEMBER(cpu_sharedram_sub_w);
106112   DECLARE_WRITE8_MEMBER(cpu_sharedram_main_w);
107113   DECLARE_READ8_MEMBER(cpu_sharedram_r);
108114   DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_sub_w);
109115   DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_main_w);
110   DECLARE_WRITE8_MEMBER(shougi_watchdog_reset_w);
111   DECLARE_WRITE8_MEMBER(shougi_mcu_halt_off_w);
112   DECLARE_WRITE8_MEMBER(shougi_mcu_halt_on_w);
116   DECLARE_WRITE8_MEMBER(mcu_halt_off_w);
117   DECLARE_WRITE8_MEMBER(mcu_halt_on_w);
113118   DECLARE_WRITE8_MEMBER(nmi_disable_and_clear_line_w);
114119   DECLARE_WRITE8_MEMBER(nmi_enable_w);
115120   DECLARE_READ8_MEMBER(dummy_r);
121   
116122   DECLARE_PALETTE_INIT(shougi);
117   UINT32 screen_update_shougi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
118   INTERRUPT_GEN_MEMBER(shougi_vblank_nmi);
119   required_device<cpu_device> m_maincpu;
120   required_device<cpu_device> m_subcpu;
121   required_device<cpu_device> m_mcu;
123   virtual void machine_start();
124   
125   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
126   
127   INTERRUPT_GEN_MEMBER(vblank_nmi);
122128};
123129
124130
131void shougi_state::machine_start()
132{
133   save_item(NAME(m_nmi_enabled));
134   save_item(NAME(m_r));
135}
125136
137
126138/***************************************************************************
127139
128140  Convert the color PROMs into a more useable format.
r244876r244877
182194
183195
184196
185UINT32 shougi_state::screen_update_shougi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
197UINT32 shougi_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
186198{
187199   int offs;
188200
r244876r244877
217229
218230WRITE8_MEMBER(shougi_state::cpu_sharedram_sub_w)
219231{
220   if (cpu_sharedram_control_val!=0) logerror("sub CPU access to shared RAM when access set for main cpu\n");
221   cpu_sharedram[offset] = data;
232   if (m_cpu_sharedram_control_val!=0) logerror("sub CPU access to shared RAM when access set for main cpu\n");
233   m_cpu_sharedram[offset] = data;
222234}
223235
224236WRITE8_MEMBER(shougi_state::cpu_sharedram_main_w)
225237{
226   if (cpu_sharedram_control_val!=1) logerror("main CPU access to shared RAM when access set for sub cpu\n");
227   cpu_sharedram[offset] = data;
238   if (m_cpu_sharedram_control_val!=1) logerror("main CPU access to shared RAM when access set for sub cpu\n");
239   m_cpu_sharedram[offset] = data;
228240}
229241
230242READ8_MEMBER(shougi_state::cpu_sharedram_r)
231243{
232   return cpu_sharedram[offset];
244   return m_cpu_sharedram[offset];
233245}
234246
235247#endif
236248
237249WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_sub_w)
238250{
239   //cpu_sharedram_control_val = 0;
251   //m_cpu_sharedram_control_val = 0;
240252   //logerror("cpu_sharedram_ctrl=SUB");
241253}
242254
243255WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_main_w)
244256{
245   //cpu_sharedram_control_val = 1;
257   //m_cpu_sharedram_control_val = 1;
246258   //logerror("cpu_sharedram_ctrl=MAIN");
247259}
248260
249WRITE8_MEMBER(shougi_state::shougi_watchdog_reset_w)
261WRITE8_MEMBER(shougi_state::mcu_halt_off_w)
250262{
251   watchdog_reset_w(space,0,data);
252}
253
254WRITE8_MEMBER(shougi_state::shougi_mcu_halt_off_w)
255{
256263   /* logerror("mcu HALT OFF"); */
257264   m_mcu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
258265}
259266
260WRITE8_MEMBER(shougi_state::shougi_mcu_halt_on_w)
267WRITE8_MEMBER(shougi_state::mcu_halt_on_w)
261268{
262269   /* logerror("mcu HALT ON"); */
263270   m_mcu->set_input_line(INPUT_LINE_HALT,ASSERT_LINE);
r244876r244877
278285   m_nmi_enabled = 1; /* enable NMIs */
279286}
280287
281INTERRUPT_GEN_MEMBER(shougi_state::shougi_vblank_nmi)
288INTERRUPT_GEN_MEMBER(shougi_state::vblank_nmi)
282289{
283290   if ( m_nmi_enabled == 1 )
284291   {
r244876r244877
298305   AM_RANGE(0x4801, 0x4801) AM_WRITE(nmi_disable_and_clear_line_w)
299306   AM_RANGE(0x4802, 0x4802) AM_NOP
300307   AM_RANGE(0x4803, 0x4803) AM_NOP
301   AM_RANGE(0x4804, 0x4804) AM_WRITE(shougi_mcu_halt_off_w)
308   AM_RANGE(0x4804, 0x4804) AM_WRITE(mcu_halt_off_w)
302309   AM_RANGE(0x4807, 0x4807) AM_WRITENOP    //?????? connected to +5v via resistor
303310   AM_RANGE(0x4808, 0x4808) AM_WRITE(cpu_shared_ctrl_main_w)
304311   AM_RANGE(0x4809, 0x4809) AM_WRITE(nmi_enable_w)
305312   AM_RANGE(0x480a, 0x480a) AM_NOP
306313   AM_RANGE(0x480b, 0x480b) AM_NOP
307   AM_RANGE(0x480c, 0x480c) AM_WRITE(shougi_mcu_halt_on_w)
314   AM_RANGE(0x480c, 0x480c) AM_WRITE(mcu_halt_on_w)
308315   AM_RANGE(0x480f, 0x480f) AM_NOP
309316
310317   AM_RANGE(0x5000, 0x5000) AM_READ_PORT("P1")
311   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE(shougi_watchdog_reset_w)   /* game won't boot if watchdog doesn't work */
318   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE(watchdog_reset_w)   /* game won't boot if watchdog doesn't work */
312319   AM_RANGE(0x6000, 0x6000) AM_DEVWRITE("aysnd", ay8910_device, address_w)
313320   AM_RANGE(0x6800, 0x6800) AM_DEVWRITE("aysnd", ay8910_device, data_w)
314321   AM_RANGE(0x7000, 0x73ff) AM_RAM AM_SHARE("share1") /* 2114 x 2 (0x400 x 4bit each) */
r244876r244877
408415
409416   MCFG_CPU_ADD("maincpu", Z80,10000000/4)
410417   MCFG_CPU_PROGRAM_MAP(main_map)
411   MCFG_CPU_VBLANK_INT_DRIVER("screen", shougi_state, shougi_vblank_nmi)
418   MCFG_CPU_VBLANK_INT_DRIVER("screen", shougi_state, vblank_nmi)
412419
413420   MCFG_CPU_ADD("sub", Z80,10000000/4)
414421   MCFG_CPU_PROGRAM_MAP(sub_map)
415422   MCFG_CPU_IO_MAP(readport_sub)
416   /* NMIs triggered in shougi_vblank_nmi() */
423   /* NMIs triggered in vblank_nmi() */
417424
418425   /* MCU */
419426   MCFG_CPU_ADD("mcu", ALPHA8201, 10000000/4/8)
r244876r244877
428435   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
429436   MCFG_SCREEN_SIZE(256, 256)
430437   MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 255)
431   MCFG_SCREEN_UPDATE_DRIVER(shougi_state, screen_update_shougi)
438   MCFG_SCREEN_UPDATE_DRIVER(shougi_state, screen_update)
432439   MCFG_SCREEN_PALETTE("palette")
433440
434441   MCFG_PALETTE_ADD("palette", 32)
r244876r244877
489496
490497
491498
492GAME( 1982, shougi,  0,      shougi, shougi, driver_device,  0, ROT0, "Alpha Denshi Co.", "Shougi", 0 )
493GAME( 1982, shougi2, shougi, shougi, shougi2, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi 2", 0 )
499GAME( 1982, shougi,  0,      shougi, shougi, driver_device,  0, ROT0, "Alpha Denshi Co.", "Shougi", GAME_SUPPORTS_SAVE )
500GAME( 1982, shougi2, shougi, shougi, shougi2, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi 2", GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/shuuz.c
r244876r244877
2525#include "includes/shuuz.h"
2626
2727
28void shuuz_state::machine_start()
29{
30   save_item(NAME(m_cur));
31}
2832
2933/*************************************
3034 *
r244876r244877
245249   /* note: these parameters are from published specs, not derived */
246250   /* the board uses a VAD chip to generate video signals */
247251   MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
248   MCFG_SCREEN_UPDATE_DRIVER(shuuz_state, screen_update_shuuz)
252   MCFG_SCREEN_UPDATE_DRIVER(shuuz_state, screen_update)
249253   MCFG_SCREEN_PALETTE("palette")
250254
251   MCFG_VIDEO_START_OVERRIDE(shuuz_state,shuuz)
252
253255   /* sound hardware */
254256   MCFG_SPEAKER_STANDARD_MONO("mono")
255257
r244876r244877
340342 *
341343 *************************************/
342344
343GAME( 1990, shuuz,  0,     shuuz, shuuz, driver_device,  0, ROT0, "Atari Games", "Shuuz (version 8.0)", 0 )
344GAME( 1990, shuuz2, shuuz, shuuz, shuuz2, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 7.1)", 0 )
345GAME( 1990, shuuz,  0,     shuuz, shuuz, driver_device,  0, ROT0, "Atari Games", "Shuuz (version 8.0)", GAME_SUPPORTS_SAVE )
346GAME( 1990, shuuz2, shuuz, shuuz, shuuz2, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 7.1)", GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/xain.c
r244876r244877
173173      return (vcount - 0x18) | 0x100;
174174}
175175
176TIMER_DEVICE_CALLBACK_MEMBER(xain_state::xain_scanline)
176TIMER_DEVICE_CALLBACK_MEMBER(xain_state::scanline)
177177{
178178   int scanline = param;
179179   int screen_height = m_screen->height();
r244876r244877
209209   }
210210}
211211
212WRITE8_MEMBER(xain_state::xainCPUA_bankswitch_w)
212WRITE8_MEMBER(xain_state::cpuA_bankswitch_w)
213213{
214214   m_pri = data & 0x7;
215215   membank("bank1")->set_entry((data >> 3) & 1);
216216}
217217
218WRITE8_MEMBER(xain_state::xainCPUB_bankswitch_w)
218WRITE8_MEMBER(xain_state::cpuB_bankswitch_w)
219219{
220220   membank("bank2")->set_entry(data & 1);
221221}
222222
223WRITE8_MEMBER(xain_state::xain_sound_command_w)
223WRITE8_MEMBER(xain_state::sound_command_w)
224224{
225225   soundlatch_byte_w(space,offset,data);
226226   m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
227227}
228228
229WRITE8_MEMBER(xain_state::xain_main_irq_w)
229WRITE8_MEMBER(xain_state::main_irq_w)
230230{
231231   switch (offset)
232232   {
r244876r244877
245245   }
246246}
247247
248WRITE8_MEMBER(xain_state::xain_irqA_assert_w)
248WRITE8_MEMBER(xain_state::irqA_assert_w)
249249{
250250   m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
251251}
252252
253WRITE8_MEMBER(xain_state::xain_irqB_clear_w)
253WRITE8_MEMBER(xain_state::irqB_clear_w)
254254{
255255   m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
256256}
257257
258READ8_MEMBER(xain_state::xain_68705_r)
258READ8_MEMBER(xain_state::m68705_r)
259259{
260260   m_mcu_ready = 1;
261261   return m_from_mcu;
262262}
263263
264WRITE8_MEMBER(xain_state::xain_68705_w)
264WRITE8_MEMBER(xain_state::m68705_w)
265265{
266266   m_from_main = data;
267267   m_mcu_accept = 0;
r244876r244877
270270      m_mcu->set_input_line(0, ASSERT_LINE);
271271}
272272
273CUSTOM_INPUT_MEMBER(xain_state::xain_vblank_r)
273CUSTOM_INPUT_MEMBER(xain_state::vblank_r)
274274{
275275   return m_vblank;
276276}
r244876r244877
282282
283283***************************************************************************/
284284
285READ8_MEMBER(xain_state::xain_68705_port_a_r)
285READ8_MEMBER(xain_state::m68705_port_a_r)
286286{
287287   return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
288288}
289289
290WRITE8_MEMBER(xain_state::xain_68705_port_a_w)
290WRITE8_MEMBER(xain_state::m68705_port_a_w)
291291{
292292   m_port_a_out = data;
293293}
294294
295WRITE8_MEMBER(xain_state::xain_68705_ddr_a_w)
295WRITE8_MEMBER(xain_state::m68705_ddr_a_w)
296296{
297297   m_ddr_a = data;
298298}
299299
300READ8_MEMBER(xain_state::xain_68705_port_b_r)
300READ8_MEMBER(xain_state::m68705_port_b_r)
301301{
302302   return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
303303}
304304
305WRITE8_MEMBER(xain_state::xain_68705_port_b_w)
305WRITE8_MEMBER(xain_state::m68705_port_b_w)
306306{
307307   if ((m_ddr_b & 0x02) && (~data & 0x02))
308308   {
r244876r244877
325325   m_port_b_out = data;
326326}
327327
328WRITE8_MEMBER(xain_state::xain_68705_ddr_b_w)
328WRITE8_MEMBER(xain_state::m68705_ddr_b_w)
329329{
330330   m_ddr_b = data;
331331}
332332
333READ8_MEMBER(xain_state::xain_68705_port_c_r)
333READ8_MEMBER(xain_state::m68705_port_c_r)
334334{
335335   m_port_c_in = 0;
336336
r244876r244877
342342   return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
343343}
344344
345WRITE8_MEMBER(xain_state::xain_68705_port_c_w)
345WRITE8_MEMBER(xain_state::m68705_port_c_w)
346346{
347347   m_port_c_out = data;
348348}
349349
350WRITE8_MEMBER(xain_state::xain_68705_ddr_c_w)
350WRITE8_MEMBER(xain_state::m68705_ddr_c_w)
351351{
352352   m_ddr_c = data;
353353}
r244876r244877
385385
386386static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, xain_state )
387387   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
388   AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(xain_charram_w) AM_SHARE("charram")
389   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(xain_bgram1_w) AM_SHARE("bgram1")
390   AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(xain_bgram0_w) AM_SHARE("bgram0")
388   AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
389   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(bgram1_w) AM_SHARE("bgram1")
390   AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(bgram0_w) AM_SHARE("bgram0")
391391   AM_RANGE(0x3800, 0x397f) AM_RAM AM_SHARE("spriteram")
392392   AM_RANGE(0x3a00, 0x3a00) AM_READ_PORT("P1")
393   AM_RANGE(0x3a00, 0x3a01) AM_WRITE(xain_scrollxP1_w)
393   AM_RANGE(0x3a00, 0x3a01) AM_WRITE(scrollxP1_w)
394394   AM_RANGE(0x3a01, 0x3a01) AM_READ_PORT("P2")
395395   AM_RANGE(0x3a02, 0x3a02) AM_READ_PORT("DSW0")
396   AM_RANGE(0x3a02, 0x3a03) AM_WRITE(xain_scrollyP1_w)
396   AM_RANGE(0x3a02, 0x3a03) AM_WRITE(scrollyP1_w)
397397   AM_RANGE(0x3a03, 0x3a03) AM_READ_PORT("DSW1")
398   AM_RANGE(0x3a04, 0x3a04) AM_READ(xain_68705_r)
399   AM_RANGE(0x3a04, 0x3a05) AM_WRITE(xain_scrollxP0_w)
398   AM_RANGE(0x3a04, 0x3a04) AM_READ(m68705_r)
399   AM_RANGE(0x3a04, 0x3a05) AM_WRITE(scrollxP0_w)
400400   AM_RANGE(0x3a05, 0x3a05) AM_READ_PORT("VBLANK")
401401   AM_RANGE(0x3a06, 0x3a06) AM_READ(mcu_comm_reset_r)
402   AM_RANGE(0x3a06, 0x3a07) AM_WRITE(xain_scrollyP0_w)
403   AM_RANGE(0x3a08, 0x3a08) AM_WRITE(xain_sound_command_w)
404   AM_RANGE(0x3a09, 0x3a0c) AM_WRITE(xain_main_irq_w)
405   AM_RANGE(0x3a0d, 0x3a0d) AM_WRITE(xain_flipscreen_w)
406   AM_RANGE(0x3a0e, 0x3a0e) AM_WRITE(xain_68705_w)
407   AM_RANGE(0x3a0f, 0x3a0f) AM_WRITE(xainCPUA_bankswitch_w)
402   AM_RANGE(0x3a06, 0x3a07) AM_WRITE(scrollyP0_w)
403   AM_RANGE(0x3a08, 0x3a08) AM_WRITE(sound_command_w)
404   AM_RANGE(0x3a09, 0x3a0c) AM_WRITE(main_irq_w)
405   AM_RANGE(0x3a0d, 0x3a0d) AM_WRITE(flipscreen_w)
406   AM_RANGE(0x3a0e, 0x3a0e) AM_WRITE(m68705_w)
407   AM_RANGE(0x3a0f, 0x3a0f) AM_WRITE(cpuA_bankswitch_w)
408408   AM_RANGE(0x3c00, 0x3dff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
409409   AM_RANGE(0x3e00, 0x3fff) AM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
410410   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
r244876r244877
413413
414414static ADDRESS_MAP_START( cpu_map_B, AS_PROGRAM, 8, xain_state )
415415   AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
416   AM_RANGE(0x2000, 0x2000) AM_WRITE(xain_irqA_assert_w)
417   AM_RANGE(0x2800, 0x2800) AM_WRITE(xain_irqB_clear_w)
418   AM_RANGE(0x3000, 0x3000) AM_WRITE(xainCPUB_bankswitch_w)
416   AM_RANGE(0x2000, 0x2000) AM_WRITE(irqA_assert_w)
417   AM_RANGE(0x2800, 0x2800) AM_WRITE(irqB_clear_w)
418   AM_RANGE(0x3000, 0x3000) AM_WRITE(cpuB_bankswitch_w)
419419   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")
420420   AM_RANGE(0x8000, 0xffff) AM_ROM
421421ADDRESS_MAP_END
422422
423423static ADDRESS_MAP_START( mcu_map, AS_PROGRAM, 8, xain_state )
424424   ADDRESS_MAP_GLOBAL_MASK(0x7ff)
425   AM_RANGE(0x0000, 0x0000) AM_READWRITE(xain_68705_port_a_r, xain_68705_port_a_w)
426   AM_RANGE(0x0001, 0x0001) AM_READWRITE(xain_68705_port_b_r, xain_68705_port_b_w)
427   AM_RANGE(0x0002, 0x0002) AM_READWRITE(xain_68705_port_c_r, xain_68705_port_c_w)
428   AM_RANGE(0x0004, 0x0004) AM_WRITE(xain_68705_ddr_a_w)
429   AM_RANGE(0x0005, 0x0005) AM_WRITE(xain_68705_ddr_b_w)
430   AM_RANGE(0x0006, 0x0006) AM_WRITE(xain_68705_ddr_c_w)
425   AM_RANGE(0x0000, 0x0000) AM_READWRITE(m68705_port_a_r, m68705_port_a_w)
426   AM_RANGE(0x0001, 0x0001) AM_READWRITE(m68705_port_b_r, m68705_port_b_w)
427   AM_RANGE(0x0002, 0x0002) AM_READWRITE(m68705_port_c_r, m68705_port_c_w)
428   AM_RANGE(0x0004, 0x0004) AM_WRITE(m68705_ddr_a_w)
429   AM_RANGE(0x0005, 0x0005) AM_WRITE(m68705_ddr_b_w)
430   AM_RANGE(0x0006, 0x0006) AM_WRITE(m68705_ddr_c_w)
431431//  AM_RANGE(0x0008, 0x0008) AM_READWRITE(m68705_tdr_r, m68705_tdr_w)
432432//  AM_RANGE(0x0009, 0x0009) AM_READWRITE(m68705_tcr_r, m68705_tcr_w)
433433   AM_RANGE(0x0010, 0x007f) AM_RAM
r244876r244877
513513   PORT_START("VBLANK")
514514   PORT_BIT( 0x03, IP_ACTIVE_LOW,  IPT_UNUSED )
515515   PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_COIN3 )
516   PORT_BIT( 0x18, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state,mcu_status_r, NULL)
517   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state,xain_vblank_r, NULL)   /* VBLANK */
516   PORT_BIT( 0x18, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state, mcu_status_r, NULL)
517   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state, vblank_r, NULL)   /* VBLANK */
518518   PORT_BIT( 0xc0, IP_ACTIVE_LOW,  IPT_UNUSED )
519519INPUT_PORTS_END
520520
r244876r244877
549549GFXDECODE_END
550550
551551
552/* handler called by the 2203 emulator when the internal timers cause an IRQ */
553WRITE_LINE_MEMBER(xain_state::irqhandler)
554{
555   m_audiocpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
556}
557
558552void xain_state::machine_start()
559553{
560554   membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000);
561555   membank("bank2")->configure_entries(0, 2, memregion("sub")->base()  + 0x4000, 0xc000);
562556   membank("bank1")->set_entry(0);
563557   membank("bank2")->set_entry(0);
558   
559   save_item(NAME(m_vblank));
560   
561   if (m_mcu)
562   {
563      save_item(NAME(m_from_main));
564      save_item(NAME(m_from_mcu));
565      save_item(NAME(m_ddr_a));
566      save_item(NAME(m_ddr_b));
567      save_item(NAME(m_ddr_c));
568      save_item(NAME(m_port_a_out));
569      save_item(NAME(m_port_b_out));
570      save_item(NAME(m_port_c_out));
571      save_item(NAME(m_port_a_in));
572      save_item(NAME(m_port_b_in));
573      save_item(NAME(m_port_c_in));
574      save_item(NAME(m_mcu_ready));
575      save_item(NAME(m_mcu_accept));
576   }
564577}
565578
566579static MACHINE_CONFIG_START( xsleena, xain_state )
r244876r244877
568581   /* basic machine hardware */
569582   MCFG_CPU_ADD("maincpu", M6809, CPU_CLOCK)
570583   MCFG_CPU_PROGRAM_MAP(main_map)
571   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xain_state, xain_scanline, "screen", 0, 1)
584   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xain_state, scanline, "screen", 0, 1)
572585
573586   MCFG_CPU_ADD("sub", M6809, CPU_CLOCK)
574587   MCFG_CPU_PROGRAM_MAP(cpu_map_B)
r244876r244877
585598   /* video hardware */
586599   MCFG_SCREEN_ADD("screen", RASTER)
587600   MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248)   /* based on ddragon driver */
588   MCFG_SCREEN_UPDATE_DRIVER(xain_state, screen_update_xain)
601   MCFG_SCREEN_UPDATE_DRIVER(xain_state, screen_update)
589602   MCFG_SCREEN_PALETTE("palette")
590603
591604   MCFG_GFXDECODE_ADD("gfxdecode", "palette", xain)
r244876r244877
596609   MCFG_SPEAKER_STANDARD_MONO("mono")
597610
598611   MCFG_SOUND_ADD("ym1", YM2203, MCU_CLOCK)
599   MCFG_YM2203_IRQ_HANDLER(WRITELINE(xain_state, irqhandler))
612   MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE))
600613   MCFG_SOUND_ROUTE(0, "mono", 0.50)
601614   MCFG_SOUND_ROUTE(1, "mono", 0.50)
602615   MCFG_SOUND_ROUTE(2, "mono", 0.50)
r244876r244877
835848ROM_END
836849
837850
838GAME( 1986, xsleena,  0,       xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan (Taito license)", "Xain'd Sleena (World)", 0 )
839GAME( 1986, xsleenaj, xsleena, xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan", "Xain'd Sleena (Japan)", 0 )
840GAME( 1986, solrwarr, xsleena, xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan (Taito / Memetron license)", "Solar-Warrior (US)", 0 )
841GAME( 1986, xsleenab, xsleena, xsleenab, xsleena, driver_device, 0, ROT0, "bootleg", "Xain'd Sleena (bootleg)", 0 )
851GAME( 1986, xsleena,  0,       xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan (Taito license)", "Xain'd Sleena (World)", GAME_SUPPORTS_SAVE )
852GAME( 1986, xsleenaj, xsleena, xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan", "Xain'd Sleena (Japan)", GAME_SUPPORTS_SAVE )
853GAME( 1986, solrwarr, xsleena, xsleena,  xsleena, driver_device, 0, ROT0, "Technos Japan (Taito / Memetron license)", "Solar-Warrior (US)", GAME_SUPPORTS_SAVE )
854GAME( 1986, xsleenab, xsleena, xsleenab, xsleena, driver_device, 0, ROT0, "bootleg", "Xain'd Sleena (bootleg)", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/shuuz.h
r244876r244877
1919   required_device<atari_vad_device> m_vad;
2020
2121   int m_cur[2];
22   
2223   virtual void update_interrupts();
24   
2325   DECLARE_WRITE16_MEMBER(latch_w);
2426   DECLARE_READ16_MEMBER(leta_r);
2527   DECLARE_READ16_MEMBER(special_port0_r);
28   
29   virtual void machine_start();
30   
2631   TILE_GET_INFO_MEMBER(get_playfield_tile_info);
27   DECLARE_MACHINE_START(shuuz);
28   DECLARE_VIDEO_START(shuuz);
29   UINT32 screen_update_shuuz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
32   
33   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3034
3135   static const atari_motion_objects_config s_mob_config;
3236};
trunk/src/mame/includes/xain.h
r244876r244877
33public:
44   xain_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_charram(*this, "charram"),
7      m_bgram0(*this, "bgram0"),
8      m_bgram1(*this, "bgram1"),
9      m_spriteram(*this, "spriteram"),
106      m_maincpu(*this, "maincpu"),
117      m_audiocpu(*this, "audiocpu"),
128      m_subcpu(*this, "sub"),
139      m_mcu(*this, "mcu"),
1410      m_gfxdecode(*this, "gfxdecode"),
1511      m_screen(*this, "screen"),
16      m_palette(*this, "palette") { }
12      m_palette(*this, "palette"),
13      m_charram(*this, "charram"),
14      m_bgram0(*this, "bgram0"),
15      m_bgram1(*this, "bgram1"),
16      m_spriteram(*this, "spriteram") { }
1717
18   required_device<cpu_device> m_maincpu;
19   required_device<cpu_device> m_audiocpu;
20   required_device<cpu_device> m_subcpu;
21   optional_device<cpu_device> m_mcu;
22   required_device<gfxdecode_device> m_gfxdecode;
23   required_device<screen_device> m_screen;
24   required_device<palette_device> m_palette;
25
26   required_shared_ptr<UINT8> m_charram;
27   required_shared_ptr<UINT8> m_bgram0;
28   required_shared_ptr<UINT8> m_bgram1;
29   required_shared_ptr<UINT8> m_spriteram;
30
1831   int m_vblank;
1932   int m_from_main;
2033   int m_from_mcu;
r244876r244877
2942   UINT8 m_port_c_in;
3043   int m_mcu_ready;
3144   int m_mcu_accept;
32   required_shared_ptr<UINT8> m_charram;
33   required_shared_ptr<UINT8> m_bgram0;
34   required_shared_ptr<UINT8> m_bgram1;
3545   UINT8 m_pri;
3646   tilemap_t *m_char_tilemap;
3747   tilemap_t *m_bgram0_tilemap;
r244876r244877
4050   UINT8 m_scrollyP0[2];
4151   UINT8 m_scrollxP1[2];
4252   UINT8 m_scrollyP1[2];
43   required_shared_ptr<UINT8> m_spriteram;
44   DECLARE_WRITE8_MEMBER(xainCPUA_bankswitch_w);
45   DECLARE_WRITE8_MEMBER(xainCPUB_bankswitch_w);
46   DECLARE_WRITE8_MEMBER(xain_sound_command_w);
47   DECLARE_WRITE8_MEMBER(xain_main_irq_w);
48   DECLARE_WRITE8_MEMBER(xain_irqA_assert_w);
49   DECLARE_WRITE8_MEMBER(xain_irqB_clear_w);
50   DECLARE_READ8_MEMBER(xain_68705_r);
51   DECLARE_WRITE8_MEMBER(xain_68705_w);
52   DECLARE_READ8_MEMBER(xain_68705_port_a_r);
53   DECLARE_WRITE8_MEMBER(xain_68705_port_a_w);
54   DECLARE_WRITE8_MEMBER(xain_68705_ddr_a_w);
55   DECLARE_READ8_MEMBER(xain_68705_port_b_r);
56   DECLARE_WRITE8_MEMBER(xain_68705_port_b_w);
57   DECLARE_WRITE8_MEMBER(xain_68705_ddr_b_w);
58   DECLARE_READ8_MEMBER(xain_68705_port_c_r);
59   DECLARE_WRITE8_MEMBER(xain_68705_port_c_w);
60   DECLARE_WRITE8_MEMBER(xain_68705_ddr_c_w);
53
54   DECLARE_WRITE8_MEMBER(cpuA_bankswitch_w);
55   DECLARE_WRITE8_MEMBER(cpuB_bankswitch_w);
56   DECLARE_WRITE8_MEMBER(sound_command_w);
57   DECLARE_WRITE8_MEMBER(main_irq_w);
58   DECLARE_WRITE8_MEMBER(irqA_assert_w);
59   DECLARE_WRITE8_MEMBER(irqB_clear_w);
60   DECLARE_READ8_MEMBER(m68705_r);
61   DECLARE_WRITE8_MEMBER(m68705_w);
62   DECLARE_READ8_MEMBER(m68705_port_a_r);
63   DECLARE_WRITE8_MEMBER(m68705_port_a_w);
64   DECLARE_WRITE8_MEMBER(m68705_ddr_a_w);
65   DECLARE_READ8_MEMBER(m68705_port_b_r);
66   DECLARE_WRITE8_MEMBER(m68705_port_b_w);
67   DECLARE_WRITE8_MEMBER(m68705_ddr_b_w);
68   DECLARE_READ8_MEMBER(m68705_port_c_r);
69   DECLARE_WRITE8_MEMBER(m68705_port_c_w);
70   DECLARE_WRITE8_MEMBER(m68705_ddr_c_w);
6171   DECLARE_READ8_MEMBER(mcu_comm_reset_r);
62   DECLARE_WRITE8_MEMBER(xain_bgram0_w);
63   DECLARE_WRITE8_MEMBER(xain_bgram1_w);
64   DECLARE_WRITE8_MEMBER(xain_charram_w);
65   DECLARE_WRITE8_MEMBER(xain_scrollxP0_w);
66   DECLARE_WRITE8_MEMBER(xain_scrollyP0_w);
67   DECLARE_WRITE8_MEMBER(xain_scrollxP1_w);
68   DECLARE_WRITE8_MEMBER(xain_scrollyP1_w);
69   DECLARE_WRITE8_MEMBER(xain_flipscreen_w);
70   DECLARE_CUSTOM_INPUT_MEMBER(xain_vblank_r);
72   DECLARE_WRITE8_MEMBER(bgram0_w);
73   DECLARE_WRITE8_MEMBER(bgram1_w);
74   DECLARE_WRITE8_MEMBER(charram_w);
75   DECLARE_WRITE8_MEMBER(scrollxP0_w);
76   DECLARE_WRITE8_MEMBER(scrollyP0_w);
77   DECLARE_WRITE8_MEMBER(scrollxP1_w);
78   DECLARE_WRITE8_MEMBER(scrollyP1_w);
79   DECLARE_WRITE8_MEMBER(flipscreen_w);
80
81   DECLARE_CUSTOM_INPUT_MEMBER(vblank_r);
7182   DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r);
83
7284   TILEMAP_MAPPER_MEMBER(back_scan);
7385   TILE_GET_INFO_MEMBER(get_bgram0_tile_info);
7486   TILE_GET_INFO_MEMBER(get_bgram1_tile_info);
7587   TILE_GET_INFO_MEMBER(get_char_tile_info);
88
7689   virtual void machine_start();
7790   virtual void video_start();
78   UINT32 screen_update_xain(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
79   TIMER_DEVICE_CALLBACK_MEMBER(xain_scanline);
91
92   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
8093   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
8194   inline int scanline_to_vcount(int scanline);
82   DECLARE_WRITE_LINE_MEMBER(irqhandler);
83   required_device<cpu_device> m_maincpu;
84   required_device<cpu_device> m_audiocpu;
85   required_device<cpu_device> m_subcpu;
86   optional_device<cpu_device> m_mcu;
87   required_device<gfxdecode_device> m_gfxdecode;
88   required_device<screen_device> m_screen;
89   required_device<palette_device> m_palette;
95
96   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
9097};
trunk/src/mame/video/shuuz.c
r244876r244877
6868   0                   /* resulting value to indicate "special" */
6969};
7070
71VIDEO_START_MEMBER(shuuz_state,shuuz)
72{
73}
7471
75
76
7772/*************************************
7873 *
7974 *  Main refresh
8075 *
8176 *************************************/
8277
83UINT32 shuuz_state::screen_update_shuuz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
78UINT32 shuuz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
8479{
8580   // start drawing
8681   m_vad->mob()->draw_async(cliprect);
trunk/src/mame/video/xain.c
r244876r244877
8989   m_bgram0_tilemap->set_transparent_pen(0);
9090   m_bgram1_tilemap->set_transparent_pen(0);
9191   m_char_tilemap->set_transparent_pen(0);
92   
93   save_item(NAME(m_pri));
94   save_item(NAME(m_scrollxP0));
95   save_item(NAME(m_scrollyP0));
96   save_item(NAME(m_scrollxP1));
97   save_item(NAME(m_scrollyP1));
9298}
9399
94100
r244876r244877
99105
100106***************************************************************************/
101107
102WRITE8_MEMBER(xain_state::xain_bgram0_w)
108WRITE8_MEMBER(xain_state::bgram0_w)
103109{
104110   m_bgram0[offset] = data;
105111   m_bgram0_tilemap->mark_tile_dirty(offset & 0x3ff);
106112}
107113
108WRITE8_MEMBER(xain_state::xain_bgram1_w)
114WRITE8_MEMBER(xain_state::bgram1_w)
109115{
110116   m_bgram1[offset] = data;
111117   m_bgram1_tilemap->mark_tile_dirty(offset & 0x3ff);
112118}
113119
114WRITE8_MEMBER(xain_state::xain_charram_w)
120WRITE8_MEMBER(xain_state::charram_w)
115121{
116122   m_charram[offset] = data;
117123   m_char_tilemap->mark_tile_dirty(offset & 0x3ff);
118124}
119125
120WRITE8_MEMBER(xain_state::xain_scrollxP0_w)
126WRITE8_MEMBER(xain_state::scrollxP0_w)
121127{
122128   m_scrollxP0[offset] = data;
123129   m_bgram0_tilemap->set_scrollx(0, m_scrollxP0[0]|(m_scrollxP0[1]<<8));
124130}
125131
126WRITE8_MEMBER(xain_state::xain_scrollyP0_w)
132WRITE8_MEMBER(xain_state::scrollyP0_w)
127133{
128134   m_scrollyP0[offset] = data;
129135   m_bgram0_tilemap->set_scrolly(0, m_scrollyP0[0]|(m_scrollyP0[1]<<8));
130136}
131137
132WRITE8_MEMBER(xain_state::xain_scrollxP1_w)
138WRITE8_MEMBER(xain_state::scrollxP1_w)
133139{
134140   m_scrollxP1[offset] = data;
135141   m_bgram1_tilemap->set_scrollx(0, m_scrollxP1[0]|(m_scrollxP1[1]<<8));
136142}
137143
138WRITE8_MEMBER(xain_state::xain_scrollyP1_w)
144WRITE8_MEMBER(xain_state::scrollyP1_w)
139145{
140146   m_scrollyP1[offset] = data;
141147   m_bgram1_tilemap->set_scrolly(0, m_scrollyP1[0]|(m_scrollyP1[1]<<8));
142148}
143149
144150
145WRITE8_MEMBER(xain_state::xain_flipscreen_w)
151WRITE8_MEMBER(xain_state::flipscreen_w)
146152{
147153   flip_screen_set(data & 1);
148154}
r244876r244877
156162
157163void xain_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
158164{
159   UINT8 *spriteram = m_spriteram;
160   int offs;
161
162   for (offs = 0; offs < m_spriteram.bytes();offs += 4)
165   for (int offs = 0; offs < m_spriteram.bytes();offs += 4)
163166   {
164167      int sx,sy,flipx,flipy;
165      int attr = spriteram[offs+1];
166      int numtile = spriteram[offs+2] | ((attr & 7) << 8);
168      int attr = m_spriteram[offs+1];
169      int numtile = m_spriteram[offs+2] | ((attr & 7) << 8);
167170      int color = (attr & 0x38) >> 3;
168171
169      sx = 238 - spriteram[offs+3];
172      sx = 238 - m_spriteram[offs+3];
170173      if (sx <= -7) sx += 256;
171      sy = 240 - spriteram[offs];
174      sy = 240 - m_spriteram[offs];
172175      if (sy <= -7) sy += 256;
173176      flipx = attr & 0x40;
174177      flipy = 0;
r244876r244877
204207   }
205208}
206209
207UINT32 xain_state::screen_update_xain(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
210UINT32 xain_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
208211{
209212   switch (m_pri&0x7)
210213   {


Previous 199869 Revisions Next


© 1997-2024 The MAME Team