Previous 199869 Revisions Next

r36732 Saturday 28th March, 2015 at 06:41:22 UTC by Osso
portrait.c, spool99.c, stactics.c, tunhunt.c: added / enabled save state support (nw)
[src/emu/sound]tms5220.c
[src/mame/drivers]portrait.c spool99.c stactics.c tunhunt.c
[src/mame/includes]portrait.h stactics.h tunhunt.h
[src/mame/video]portrait.c stactics.c tunhunt.c

trunk/src/emu/sound/tms5220.c
r245243r245244
405405   save_item(NAME(m_digital_select));
406406
407407   save_item(NAME(m_io_ready));
408   
409   save_item(NAME(m_true_timing));
410
411   save_item(NAME(m_rs_ws));
412   save_item(NAME(m_read_latch));
413   save_item(NAME(m_write_latch));
408414}
409415
410416
trunk/src/mame/drivers/portrait.c
r245243r245244
8686#include "emu.h"
8787#include "cpu/z80/z80.h"
8888#include "cpu/mcs48/mcs48.h"
89#include "sound/tms5220.h"
9089#include "machine/nvram.h"
9190#include "includes/portrait.h"
9291
93WRITE8_MEMBER(portrait_state::portrait_ctrl_w)
92WRITE8_MEMBER(portrait_state::ctrl_w)
9493{
9594   /* bits 4 and 5 are unknown */
9695
r245243r245244
106105   output_set_value("photo", (data >> 7) & 1);
107106}
108107
109WRITE8_MEMBER(portrait_state::portrait_positive_scroll_w)
108WRITE8_MEMBER(portrait_state::positive_scroll_w)
110109{
111110   m_scroll = data;
112111}
113112
114WRITE8_MEMBER(portrait_state::portrait_negative_scroll_w)
113WRITE8_MEMBER(portrait_state::negative_scroll_w)
115114{
116115   m_scroll = - (data ^ 0xff);
117116}
118117
119118static ADDRESS_MAP_START( portrait_map, AS_PROGRAM, 8, portrait_state )
120119   AM_RANGE(0x0000, 0x7fff) AM_ROM
121   AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(portrait_bgvideo_write) AM_SHARE("bgvideoram")
122   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(portrait_fgvideo_write) AM_SHARE("fgvideoram")
120   AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(bgvideo_write) AM_SHARE("bgvideoram")
121   AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(fgvideo_write) AM_SHARE("fgvideoram")
123122   AM_RANGE(0x9000, 0x91ff) AM_RAM AM_SHARE("spriteram")
124123   AM_RANGE(0x9200, 0x97ff) AM_RAM
125124   AM_RANGE(0xa000, 0xa000) AM_WRITE(soundlatch_byte_w)
126125   AM_RANGE(0xa010, 0xa010) AM_WRITENOP // ?
127126   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW1")
128127   AM_RANGE(0xa004, 0xa004) AM_READ_PORT("DSW2")
129   AM_RANGE(0xa008, 0xa008) AM_READ_PORT("SYSTEM") AM_WRITE(portrait_ctrl_w)
128   AM_RANGE(0xa008, 0xa008) AM_READ_PORT("SYSTEM") AM_WRITE(ctrl_w)
130129   AM_RANGE(0xa010, 0xa010) AM_READ_PORT("INPUTS")
131   AM_RANGE(0xa018, 0xa018) AM_READNOP AM_WRITE(portrait_positive_scroll_w)
132   AM_RANGE(0xa019, 0xa019) AM_WRITE(portrait_negative_scroll_w)
130   AM_RANGE(0xa018, 0xa018) AM_READNOP AM_WRITE(positive_scroll_w)
131   AM_RANGE(0xa019, 0xa019) AM_WRITE(negative_scroll_w)
133132   AM_RANGE(0xa800, 0xa83f) AM_RAM AM_SHARE("nvram")
134133   AM_RANGE(0xffff, 0xffff) AM_READNOP
135134ADDRESS_MAP_END
r245243r245244
257256   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
258257   MCFG_SCREEN_SIZE(64*8, 64*8)
259258   MCFG_SCREEN_VISIBLE_AREA(0*8, 54*8-1, 0*8, 40*8-1)
260   MCFG_SCREEN_UPDATE_DRIVER(portrait_state, screen_update_portrait)
259   MCFG_SCREEN_UPDATE_DRIVER(portrait_state, screen_update)
261260   MCFG_SCREEN_PALETTE("palette")
262261
263262   MCFG_GFXDECODE_ADD("gfxdecode", "palette", portrait)
r245243r245244
381380
382381
383382
384GAME( 1983, portrait, 0,        portrait, portrait, driver_device,  0, ROT270, "Olympia", "Portraits (set 1)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS )
385GAME( 1983, portraita,portrait, portrait, portrait, driver_device,  0, ROT270, "Olympia", "Portraits (set 2)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS )
383GAME( 1983, portrait, 0,        portrait, portrait, driver_device,  0, ROT270, "Olympia", "Portraits (set 1)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
384GAME( 1983, portraita,portrait, portrait, portrait, driver_device,  0, ROT270, "Olympia", "Portraits (set 2)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/spool99.c
r245243r245244
101101public:
102102   spool99_state(const machine_config &mconfig, device_type type, const char *tag)
103103      : driver_device(mconfig, type, tag),
104      m_main(*this, "mainram"),
105      m_vram(*this, "vram"),
106      m_cram(*this, "cram"),
107104      m_maincpu(*this, "maincpu"),
108105      m_eeprom(*this, "eeprom"),
109106      m_oki(*this, "oki"),
110      m_gfxdecode(*this, "gfxdecode") { }
107      m_gfxdecode(*this, "gfxdecode"),
108      m_main(*this, "mainram"),
109      m_vram(*this, "vram"),
110      m_cram(*this, "cram") { }
111111
112   required_device<cpu_device> m_maincpu;
113   required_device<eeprom_serial_93cxx_device> m_eeprom;
114   required_device<okim6295_device> m_oki;
115   required_device<gfxdecode_device> m_gfxdecode;
116
112117   required_shared_ptr<UINT8> m_main;
113118   required_shared_ptr<UINT8> m_vram;
114119   required_shared_ptr<UINT8> m_cram;
120   
115121   tilemap_t *m_sc0_tilemap;
116   DECLARE_WRITE8_MEMBER(spool99_vram_w);
117   DECLARE_WRITE8_MEMBER(spool99_cram_w);
122   
123   DECLARE_WRITE8_MEMBER(vram_w);
124   DECLARE_WRITE8_MEMBER(cram_w);
118125   DECLARE_READ8_MEMBER(spool99_io_r);
119126   DECLARE_READ8_MEMBER(vcarn_io_r);
120127   DECLARE_WRITE8_MEMBER(eeprom_resetline_w);
121128   DECLARE_WRITE8_MEMBER(eeprom_clockline_w);
122129   DECLARE_WRITE8_MEMBER(eeprom_dataline_w);
130   
123131   DECLARE_DRIVER_INIT(spool99);
124   TILE_GET_INFO_MEMBER(get_spool99_tile_info);
125132   virtual void video_start();
126   UINT32 screen_update_spool99(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
127   required_device<cpu_device> m_maincpu;
128   required_device<eeprom_serial_93cxx_device> m_eeprom;
129   required_device<okim6295_device> m_oki;
130   required_device<gfxdecode_device> m_gfxdecode;
133   
134   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
135   TILE_GET_INFO_MEMBER(get_tile_info);
131136};
132137
133TILE_GET_INFO_MEMBER(spool99_state::get_spool99_tile_info)
138TILE_GET_INFO_MEMBER(spool99_state::get_tile_info)
134139{
135140   int code = ((m_vram[tile_index*2+1]<<8) | (m_vram[tile_index*2+0]));
136141   int color = m_cram[tile_index*2+0];
r245243r245244
143148
144149void spool99_state::video_start()
145150{
146   m_sc0_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(spool99_state::get_spool99_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
151   m_sc0_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(spool99_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
147152}
148153
149UINT32 spool99_state::screen_update_spool99(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
154UINT32 spool99_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
150155{
151156   m_sc0_tilemap->draw(screen, bitmap, cliprect, 0,0);
152157   return 0;
153158}
154159
155WRITE8_MEMBER(spool99_state::spool99_vram_w)
160WRITE8_MEMBER(spool99_state::vram_w)
156161{
157162   m_vram[offset] = data;
158163   m_sc0_tilemap->mark_tile_dirty(offset/2);
159164}
160165
161WRITE8_MEMBER(spool99_state::spool99_cram_w)
166WRITE8_MEMBER(spool99_state::cram_w)
162167{
163168   m_cram[offset] = data;
164169   m_sc0_tilemap->mark_tile_dirty(offset/2);
r245243r245244
229234   AM_RANGE(0xb000, 0xb3ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
230235
231236   AM_RANGE(0xb800, 0xdfff) AM_RAM
232   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(spool99_vram_w) AM_SHARE("vram")
233   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(spool99_cram_w) AM_SHARE("cram")
237   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(vram_w) AM_SHARE("vram")
238   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(cram_w) AM_SHARE("cram")
234239ADDRESS_MAP_END
235240
236241READ8_MEMBER(spool99_state::vcarn_io_r)
r245243r245244
276281
277282   AM_RANGE(0xb000, 0xdfff) AM_RAM
278283//  AM_RANGE(0xdf00, 0xdfff) AM_READWRITE(vcarn_io_r,vcarn_io_w) AM_SHARE("vcarn_io")
279   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(spool99_vram_w) AM_SHARE("vram")
280   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(spool99_cram_w) AM_SHARE("cram")
284   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(vram_w) AM_SHARE("vram")
285   AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(cram_w) AM_SHARE("cram")
281286ADDRESS_MAP_END
282287
283288
r245243r245244
360365   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
361366   MCFG_SCREEN_SIZE(64*8, 32*8)
362367   MCFG_SCREEN_VISIBLE_AREA(7*8, 55*8-1, 1*8, 31*8-1) //384x240,raw guess
363   MCFG_SCREEN_UPDATE_DRIVER(spool99_state, screen_update_spool99)
368   MCFG_SCREEN_UPDATE_DRIVER(spool99_state, screen_update)
364369   MCFG_SCREEN_PALETTE("palette")
365370
366371   MCFG_PALETTE_ADD("palette", 0x200)
r245243r245244
455460
456461
457462
458GAME( 1998, spool99,    0,        spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.36)", 0 )
459GAME( 1998, spool99a,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.33)", 0 )
460GAME( 1998, spool99b,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.31)", 0 )
461GAME( 1998, spool99c,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.26)", 0 )
462GAME( 1998, vcarn,      0,        vcarn,      spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Video Carnival 1999 / Super Royal Card (Version 0.11)", 0 ) //MAME screen says '98, PCB screen says '99?
463GAME( 1998, spool99,    0,        spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.36)", GAME_SUPPORTS_SAVE )
464GAME( 1998, spool99a,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.33)", GAME_SUPPORTS_SAVE )
465GAME( 1998, spool99b,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.31)", GAME_SUPPORTS_SAVE )
466GAME( 1998, spool99c,   spool99,  spool99,    spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Super Pool 99 (Version 0.26)", GAME_SUPPORTS_SAVE )
467GAME( 1998, vcarn,      0,        vcarn,      spool99, spool99_state,    spool99, ROT0,  "Electronic Projects", "Video Carnival 1999 / Super Royal Card (Version 0.11)", GAME_SUPPORTS_SAVE ) //MAME screen says '98, PCB screen says '99?
trunk/src/mame/drivers/stactics.c
r245243r245244
135135 *
136136 *************************************/
137137
138WRITE8_MEMBER(stactics_state::stactics_coin_lockout_w)
138WRITE8_MEMBER(stactics_state::coinlockout_w)
139139{
140140   coin_lockout_w(machine(), offset, ~data & 0x01);
141141}
r245243r245244
148148 *
149149 *************************************/
150150
151INTERRUPT_GEN_MEMBER(stactics_state::stactics_interrupt)
151INTERRUPT_GEN_MEMBER(stactics_state::interrupt)
152152{
153153   move_motor();
154154
r245243r245244
168168   AM_RANGE(0x4000, 0x40ff) AM_MIRROR(0x0700) AM_RAM
169169   AM_RANGE(0x5000, 0x5000) AM_MIRROR(0x0fff) AM_READ_PORT("IN0")
170170   AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_READ_PORT("IN1")
171   AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x0f08) AM_WRITE(stactics_coin_lockout_w)
171   AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x0f08) AM_WRITE(coinlockout_w)
172172   AM_RANGE(0x6002, 0x6005) AM_MIRROR(0x0f08) AM_WRITENOP
173173   AM_RANGE(0x6006, 0x6007) AM_MIRROR(0x0f08) AM_WRITEONLY AM_SHARE("paletteram")
174   /* AM_RANGE(0x6010, 0x6017) AM_MIRROR(0x0f08) AM_WRITE(stactics_sound_w) */
174   /* AM_RANGE(0x6010, 0x6017) AM_MIRROR(0x0f08) AM_WRITE(sound_w) */
175175   AM_RANGE(0x6016, 0x6016) AM_MIRROR(0x0f08) AM_WRITEONLY AM_SHARE("motor_on")  /* Note: This overlaps rocket sound */
176176   AM_RANGE(0x6020, 0x6027) AM_MIRROR(0x0f08) AM_WRITEONLY AM_SHARE("lamps")
177   AM_RANGE(0x6030, 0x6030) AM_MIRROR(0x0f0f) AM_WRITE(stactics_speed_latch_w)
178   AM_RANGE(0x6040, 0x6040) AM_MIRROR(0x0f0f) AM_WRITE(stactics_shot_trigger_w)
179   AM_RANGE(0x6050, 0x6050) AM_MIRROR(0x0f0f) AM_WRITE(stactics_shot_flag_clear_w)
177   AM_RANGE(0x6030, 0x6030) AM_MIRROR(0x0f0f) AM_WRITE(speed_latch_w)
178   AM_RANGE(0x6040, 0x6040) AM_MIRROR(0x0f0f) AM_WRITE(shot_trigger_w)
179   AM_RANGE(0x6050, 0x6050) AM_MIRROR(0x0f0f) AM_WRITE(shot_flag_clear_w)
180180   AM_RANGE(0x6060, 0x606f) AM_MIRROR(0x0f00) AM_WRITEONLY AM_SHARE("display_buffer")
181181   AM_RANGE(0x6070, 0x609f) AM_MIRROR(0x0f00) AM_WRITENOP
182   /* AM_RANGE(0x60a0, 0x60ef) AM_MIRROR(0x0f00) AM_WRITE(stactics_sound2_w) */
182   /* AM_RANGE(0x60a0, 0x60ef) AM_MIRROR(0x0f00) AM_WRITE(sound2_w) */
183183   AM_RANGE(0x60f0, 0x60ff) AM_MIRROR(0x0f00) AM_WRITENOP
184184   AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x0fff) AM_READ_PORT("IN2")
185185   AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0fff) AM_READ_PORT("IN3")
186   AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_WRITE(stactics_scroll_ram_w)
186   AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_WRITE(scroll_ram_w)
187187   AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0fff) AM_READ(vert_pos_r)
188188   AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0fff) AM_READ(horiz_pos_r)
189189   AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("videoram_b")
r245243r245244
210210   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
211211   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
212212   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
213   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state,get_motor_not_ready, NULL)
213   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state, get_motor_not_ready, NULL)
214214
215215   PORT_START("IN1")   /* IN1 */
216216   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_B ) )
r245243r245244
239239   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
240240
241241   PORT_START("IN2")   /* IN2 */
242   PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state,get_rng, NULL)
243   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state,stactics_get_frame_count_d3, NULL)
242   PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state, get_rng, NULL)
243   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state, get_frame_count_d3, NULL)
244244   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
245245   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
246246   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
r245243r245244
250250
251251   PORT_START("IN3")   /* IN3 */
252252   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
253   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state,stactics_get_shot_standby, NULL)
253   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state, get_shot_standby, NULL)
254254   PORT_DIPNAME( 0x04, 0x04, "Number of Barriers" )
255255   PORT_DIPSETTING(    0x04, "4" )
256256   PORT_DIPSETTING(    0x00, "6" )
r245243r245244
262262   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
263263   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
264264   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
265   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state,stactics_get_not_shot_arrive, NULL)
265   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, stactics_state, get_not_shot_arrive, NULL)
266266
267267   PORT_START("FAKE")  /* FAKE */
268268   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
r245243r245244
282282   m_vert_pos = 0;
283283   m_horiz_pos = 0;
284284   *m_motor_on = 0;
285   
286   save_item(NAME(m_vert_pos));
287   save_item(NAME(m_horiz_pos));
285288}
286289
287290
r245243r245244
297300   /* basic machine hardware */
298301   MCFG_CPU_ADD("maincpu", I8080, 1933560)
299302   MCFG_CPU_PROGRAM_MAP(main_map)
300   MCFG_CPU_VBLANK_INT_DRIVER("screen", stactics_state,  stactics_interrupt)
303   MCFG_CPU_VBLANK_INT_DRIVER("screen", stactics_state,  interrupt)
301304
302305
303306   /* video hardware */
r245243r245244
342345 *
343346 *************************************/
344347
345GAMEL( 1981, stactics, 0, stactics, stactics, driver_device, 0, ORIENTATION_FLIP_X, "Sega", "Space Tactics", GAME_NO_SOUND, layout_stactics )
348GAMEL( 1981, stactics, 0, stactics, stactics, driver_device, 0, ORIENTATION_FLIP_X, "Sega", "Space Tactics", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_stactics )
trunk/src/mame/drivers/tunhunt.c
r245243r245244
5555 *
5656 *************************************/
5757
58WRITE8_MEMBER(tunhunt_state::tunhunt_control_w)
58WRITE8_MEMBER(tunhunt_state::control_w)
5959{
6060   /*
6161       0x01    coin counter#2  "right counter"
r245243r245244
8181 *
8282 *************************************/
8383
84READ8_MEMBER(tunhunt_state::tunhunt_button_r)
84READ8_MEMBER(tunhunt_state::button_r)
8585{
8686   int data = ioport("IN0")->read();
8787   return ((data>>offset)&1)?0x00:0x80;
r245243r245244
135135   AM_RANGE(0x1800, 0x1800) AM_WRITEONLY   /* SHEL0H */
136136   AM_RANGE(0x1a00, 0x1a00) AM_WRITEONLY   /* SHEL1H */
137137   AM_RANGE(0x1c00, 0x1c00) AM_WRITEONLY   /* MOBJV */
138   AM_RANGE(0x1e00, 0x1eff) AM_WRITE(tunhunt_videoram_w) AM_SHARE("videoram")  /* ALPHA */
138   AM_RANGE(0x1e00, 0x1eff) AM_WRITE(videoram_w) AM_SHARE("videoram")  /* ALPHA */
139139   AM_RANGE(0x2000, 0x2000) AM_WRITENOP    /* watchdog */
140   AM_RANGE(0x2000, 0x2007) AM_READ(tunhunt_button_r)
140   AM_RANGE(0x2000, 0x2007) AM_READ(button_r)
141141   AM_RANGE(0x2400, 0x2400) AM_WRITENOP    /* INT ACK */
142   AM_RANGE(0x2800, 0x2800) AM_WRITE(tunhunt_control_w)
142   AM_RANGE(0x2800, 0x2800) AM_WRITE(control_w)
143143   AM_RANGE(0x2c00, 0x2fff) AM_WRITEONLY AM_SHARE("spriteram")
144144   AM_RANGE(0x3000, 0x300f) AM_DEVREADWRITE("pokey1", pokey_device, read, write)
145145   AM_RANGE(0x4000, 0x400f) AM_DEVREADWRITE("pokey2", pokey_device, read, write)
r245243r245244
277277   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
278278   MCFG_SCREEN_SIZE(256, 256-16)
279279   MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 255-16)
280   MCFG_SCREEN_UPDATE_DRIVER(tunhunt_state, screen_update_tunhunt)
280   MCFG_SCREEN_UPDATE_DRIVER(tunhunt_state, screen_update)
281281   MCFG_SCREEN_PALETTE("palette")
282282
283283   MCFG_GFXDECODE_ADD("gfxdecode", "palette", tunhunt)
r245243r245244
390390 *************************************/
391391
392392/*         rom   parent  machine    inp         init */
393GAME( 1979,tunhunt,  0,       tunhunt,   tunhunt, driver_device,    0,  ORIENTATION_SWAP_XY, "Atari", "Tunnel Hunt", 0 )
394GAME( 1981,tunhuntc, tunhunt, tunhunt,   tunhunt, driver_device,    0,  ORIENTATION_SWAP_XY, "Atari (Centuri license)", "Tunnel Hunt (Centuri)", 0 )
393GAME( 1979,tunhunt,  0,       tunhunt,   tunhunt, driver_device,    0,  ORIENTATION_SWAP_XY, "Atari", "Tunnel Hunt", GAME_SUPPORTS_SAVE )
394GAME( 1981,tunhuntc, tunhunt, tunhunt,   tunhunt, driver_device,    0,  ORIENTATION_SWAP_XY, "Atari (Centuri license)", "Tunnel Hunt (Centuri)", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/portrait.h
r245243r245244
55public:
66   portrait_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag),
8      m_maincpu(*this, "maincpu"),
9      m_gfxdecode(*this, "gfxdecode"),
10      m_palette(*this, "palette"),
811      m_tms(*this, "tms"),
912      m_bgvideoram(*this, "bgvideoram"),
1013      m_fgvideoram(*this, "fgvideoram"),
11      m_spriteram(*this, "spriteram"),
12      m_maincpu(*this, "maincpu"),
13      m_gfxdecode(*this, "gfxdecode"),
14      m_palette(*this, "palette") { }
14      m_spriteram(*this, "spriteram") { }
1515
16   required_device<cpu_device> m_maincpu;
17   required_device<gfxdecode_device> m_gfxdecode;
18   required_device<palette_device> m_palette;
1619   required_device<tms5200_device> m_tms;
20
1721   required_shared_ptr<UINT8> m_bgvideoram;
1822   required_shared_ptr<UINT8> m_fgvideoram;
23   required_shared_ptr<UINT8> m_spriteram;
24
1925   int m_scroll;
2026   tilemap_t *m_foreground;
2127   tilemap_t *m_background;
22   required_shared_ptr<UINT8> m_spriteram;
23   DECLARE_WRITE8_MEMBER(portrait_ctrl_w);
24   DECLARE_WRITE8_MEMBER(portrait_positive_scroll_w);
25   DECLARE_WRITE8_MEMBER(portrait_negative_scroll_w);
26   DECLARE_WRITE8_MEMBER(portrait_bgvideo_write);
27   DECLARE_WRITE8_MEMBER(portrait_fgvideo_write);
28
29   DECLARE_WRITE8_MEMBER(ctrl_w);
30   DECLARE_WRITE8_MEMBER(positive_scroll_w);
31   DECLARE_WRITE8_MEMBER(negative_scroll_w);
32   DECLARE_WRITE8_MEMBER(bgvideo_write);
33   DECLARE_WRITE8_MEMBER(fgvideo_write);
34
2835   TILE_GET_INFO_MEMBER(get_bg_tile_info);
2936   TILE_GET_INFO_MEMBER(get_fg_tile_info);
37
3038   virtual void video_start();
3139   DECLARE_PALETTE_INIT(portrait);
32   UINT32 screen_update_portrait(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
40
41   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3342   inline void get_tile_info( tile_data &tileinfo, int tile_index, const UINT8 *source );
3443   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
35   required_device<cpu_device> m_maincpu;
36   required_device<gfxdecode_device> m_gfxdecode;
37   required_device<palette_device> m_palette;
3844};
trunk/src/mame/includes/stactics.h
r245243r245244
1212public:
1313   stactics_state(const machine_config &mconfig, device_type type, const char *tag)
1414      : driver_device(mconfig, type, tag),
15      m_maincpu(*this, "maincpu"),
1516      m_palette_val(*this, "paletteram"),
1617      m_motor_on(*this, "motor_on"),
1718      m_lamps(*this, "lamps"),
r245243r245244
1920      m_videoram_b(*this, "videoram_b"),
2021      m_videoram_d(*this, "videoram_d"),
2122      m_videoram_e(*this, "videoram_e"),
22      m_videoram_f(*this, "videoram_f"),
23      m_maincpu(*this, "maincpu") { }
23      m_videoram_f(*this, "videoram_f") { }
2424
25   /* machine state */
26   int    m_vert_pos;
27   int    m_horiz_pos;
28   /* video state */
25   required_device<cpu_device> m_maincpu;
2926
3027   required_shared_ptr<UINT8> m_palette_val;
3128   required_shared_ptr<UINT8> m_motor_on;
r245243r245244
3532   required_shared_ptr<UINT8> m_videoram_d;
3633   required_shared_ptr<UINT8> m_videoram_e;
3734   required_shared_ptr<UINT8> m_videoram_f;
38
35   
36   /* machine state */
37   int    m_vert_pos;
38   int    m_horiz_pos;
39   
40   /* video state */
3941   UINT8  m_y_scroll_d;
4042   UINT8  m_y_scroll_e;
4143   UINT8  m_y_scroll_f;
r245243r245244
4547   UINT16 m_beam_state;
4648   UINT16 m_old_beam_state;
4749   UINT16 m_beam_states_per_frame;
50
4851   DECLARE_READ8_MEMBER(vert_pos_r);
4952   DECLARE_READ8_MEMBER(horiz_pos_r);
50   DECLARE_WRITE8_MEMBER(stactics_coin_lockout_w);
51   DECLARE_WRITE8_MEMBER(stactics_scroll_ram_w);
52   DECLARE_WRITE8_MEMBER(stactics_speed_latch_w);
53   DECLARE_WRITE8_MEMBER(stactics_shot_trigger_w);
54   DECLARE_WRITE8_MEMBER(stactics_shot_flag_clear_w);
55   DECLARE_CUSTOM_INPUT_MEMBER(stactics_get_frame_count_d3);
56   DECLARE_CUSTOM_INPUT_MEMBER(stactics_get_shot_standby);
57   DECLARE_CUSTOM_INPUT_MEMBER(stactics_get_not_shot_arrive);
53   DECLARE_WRITE8_MEMBER(coinlockout_w);
54   DECLARE_WRITE8_MEMBER(scroll_ram_w);
55   DECLARE_WRITE8_MEMBER(speed_latch_w);
56   DECLARE_WRITE8_MEMBER(shot_trigger_w);
57   DECLARE_WRITE8_MEMBER(shot_flag_clear_w);
58
59   DECLARE_CUSTOM_INPUT_MEMBER(get_frame_count_d3);
60   DECLARE_CUSTOM_INPUT_MEMBER(get_shot_standby);
61   DECLARE_CUSTOM_INPUT_MEMBER(get_not_shot_arrive);
5862   DECLARE_CUSTOM_INPUT_MEMBER(get_motor_not_ready);
5963   DECLARE_CUSTOM_INPUT_MEMBER(get_rng);
64   INTERRUPT_GEN_MEMBER(interrupt);
65
6066   virtual void machine_start();
61   DECLARE_VIDEO_START(stactics);
67   virtual void video_start();
6268   DECLARE_PALETTE_INIT(stactics);
63   UINT32 screen_update_stactics(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
64   INTERRUPT_GEN_MEMBER(stactics_interrupt);
69
70   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6571   void update_beam();
6672   inline int get_pixel_on_plane(UINT8 *videoram, UINT8 y, UINT8 x, UINT8 y_scroll);
6773   void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect);
6874   void set_indicator_leds(int data, const char *output_name, int base_index);
6975   void update_artwork();
7076   void move_motor();
71   required_device<cpu_device> m_maincpu;
7277};
7378/*----------- defined in video/stactics.c -----------*/
7479MACHINE_CONFIG_EXTERN( stactics_video );
trunk/src/mame/includes/tunhunt.h
r245243r245244
33public:
44   tunhunt_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_workram(*this, "workram"),
7      m_videoram(*this, "videoram"),
8      m_spriteram(*this, "spriteram"),
96      m_maincpu(*this, "maincpu"),
107      m_gfxdecode(*this, "gfxdecode"),
118      m_screen(*this, "screen"),
129      m_palette(*this, "palette"),
10      m_workram(*this, "workram"),
11      m_videoram(*this, "videoram"),
12      m_spriteram(*this, "spriteram"),
1313      m_generic_paletteram_8(*this, "paletteram") { }
1414
15   UINT8 m_control;
15   required_device<cpu_device> m_maincpu;
16   required_device<gfxdecode_device> m_gfxdecode;
17   required_device<screen_device> m_screen;
18   required_device<palette_device> m_palette;
19
1620   required_shared_ptr<UINT8> m_workram;
1721   required_shared_ptr<UINT8> m_videoram;
1822   required_shared_ptr<UINT8> m_spriteram;
23   required_shared_ptr<UINT8> m_generic_paletteram_8;
24
25   UINT8 m_control;
1926   tilemap_t *m_fg_tilemap;
2027   bitmap_ind16 m_tmpbitmap;
21   DECLARE_WRITE8_MEMBER(tunhunt_control_w);
22   DECLARE_READ8_MEMBER(tunhunt_button_r);
23   DECLARE_WRITE8_MEMBER(tunhunt_videoram_w);
28   
29   DECLARE_WRITE8_MEMBER(control_w);
30   DECLARE_READ8_MEMBER(button_r);
31   DECLARE_WRITE8_MEMBER(videoram_w);
2432   DECLARE_READ8_MEMBER(dsw2_0r);
2533   DECLARE_READ8_MEMBER(dsw2_1r);
2634   DECLARE_READ8_MEMBER(dsw2_2r);
2735   DECLARE_READ8_MEMBER(dsw2_3r);
2836   DECLARE_READ8_MEMBER(dsw2_4r);
37   
2938   TILE_GET_INFO_MEMBER(get_fg_tile_info);
39
3040   virtual void video_start();
3141   DECLARE_PALETTE_INIT(tunhunt);
32   UINT32 screen_update_tunhunt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
42
43   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3344   void set_pens();
3445   void draw_motion_object(bitmap_ind16 &bitmap, const rectangle &cliprect);
3546   void draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect);
3647   void draw_shell(bitmap_ind16 &bitmap, const rectangle &cliprect, int picture_code,
3748      int hposition,int vstart,int vstop,int vstretch,int hstretch);
38   required_device<cpu_device> m_maincpu;
39   required_device<gfxdecode_device> m_gfxdecode;
40   required_device<screen_device> m_screen;
41   required_device<palette_device> m_palette;
42   required_shared_ptr<UINT8> m_generic_paletteram_8;
4349};
trunk/src/mame/video/portrait.c
r245243r245244
99#include "includes/portrait.h"
1010
1111
12WRITE8_MEMBER(portrait_state::portrait_bgvideo_write)
12WRITE8_MEMBER(portrait_state::bgvideo_write)
1313{
1414   m_background->mark_tile_dirty(offset/2);
1515   m_bgvideoram[offset] = data;
1616}
1717
18WRITE8_MEMBER(portrait_state::portrait_fgvideo_write)
18WRITE8_MEMBER(portrait_state::fgvideo_write)
1919{
2020   m_foreground->mark_tile_dirty(offset/2);
2121   m_fgvideoram[offset] = data;
r245243r245244
6767   m_background = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(portrait_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32 );
6868   m_foreground = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(portrait_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32 );
6969
70   m_foreground->set_transparent_pen(7 );
70   m_foreground->set_transparent_pen(7);
71   
72   save_item(NAME(m_scroll));
7173}
7274
7375
r245243r245244
180182   }
181183}
182184
183UINT32 portrait_state::screen_update_portrait(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
185UINT32 portrait_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
184186{
185187   rectangle cliprect_scroll, cliprect_no_scroll;
186188
trunk/src/mame/video/stactics.c
r245243r245244
9090 *
9191 *************************************/
9292
93WRITE8_MEMBER(stactics_state::stactics_scroll_ram_w)
93WRITE8_MEMBER(stactics_state::scroll_ram_w)
9494{
9595   if (data & 0x01)
9696   {
r245243r245244
111111 *
112112 *************************************/
113113
114CUSTOM_INPUT_MEMBER(stactics_state::stactics_get_frame_count_d3)
114CUSTOM_INPUT_MEMBER(stactics_state::get_frame_count_d3)
115115{
116116   return (m_frame_count >> 3) & 0x01;
117117}
r245243r245244
124124 *
125125 *************************************/
126126
127WRITE8_MEMBER(stactics_state::stactics_speed_latch_w)
127WRITE8_MEMBER(stactics_state::speed_latch_w)
128128{
129129   /* This writes to a shift register which is clocked by   */
130130   /* a 555 oscillator.  This value determines the speed of */
r245243r245244
149149}
150150
151151
152WRITE8_MEMBER(stactics_state::stactics_shot_trigger_w)
152WRITE8_MEMBER(stactics_state::shot_trigger_w)
153153{
154154   m_shot_standby = 0;
155155}
156156
157157
158WRITE8_MEMBER(stactics_state::stactics_shot_flag_clear_w)
158WRITE8_MEMBER(stactics_state::shot_flag_clear_w)
159159{
160160   m_shot_arrive = 0;
161161}
162162
163163
164CUSTOM_INPUT_MEMBER(stactics_state::stactics_get_shot_standby)
164CUSTOM_INPUT_MEMBER(stactics_state::get_shot_standby)
165165{
166166   return m_shot_standby;
167167}
168168
169169
170CUSTOM_INPUT_MEMBER(stactics_state::stactics_get_not_shot_arrive)
170CUSTOM_INPUT_MEMBER(stactics_state::get_not_shot_arrive)
171171{
172172   return !m_shot_arrive;
173173}
r245243r245244
352352 *
353353 *************************************/
354354
355VIDEO_START_MEMBER(stactics_state,stactics)
355void stactics_state::video_start()
356356{
357357   m_y_scroll_d = 0;
358358   m_y_scroll_e = 0;
r245243r245244
363363   m_shot_arrive = 0;
364364   m_beam_state = 0;
365365   m_old_beam_state = 0;
366   
367   save_item(NAME(m_y_scroll_d));
368   save_item(NAME(m_y_scroll_e));
369   save_item(NAME(m_y_scroll_f));
370   save_item(NAME(m_frame_count));
371   save_item(NAME(m_shot_standby));
372   save_item(NAME(m_shot_arrive));
373   save_item(NAME(m_beam_state));
374   save_item(NAME(m_old_beam_state));
375   save_item(NAME(m_beam_states_per_frame));
366376}
367377
368378
r245243r245244
373383 *
374384 *************************************/
375385
376UINT32 stactics_state::screen_update_stactics(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
386UINT32 stactics_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
377387{
378388   update_beam();
379389   draw_background(bitmap, cliprect);
r245243r245244
399409   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
400410   MCFG_SCREEN_SIZE(32*8, 32*8)
401411   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
402   MCFG_SCREEN_UPDATE_DRIVER(stactics_state, screen_update_stactics)
412   MCFG_SCREEN_UPDATE_DRIVER(stactics_state, screen_update)
403413   MCFG_SCREEN_PALETTE("palette")
404414
405415   MCFG_PALETTE_ADD("palette", 0x400)
406416
407417   MCFG_PALETTE_INIT_OWNER(stactics_state,stactics)
408   MCFG_VIDEO_START_OVERRIDE(stactics_state,stactics)
409418MACHINE_CONFIG_END
trunk/src/mame/video/tunhunt.c
r245243r245244
4848
4949/****************************************************************************************/
5050
51WRITE8_MEMBER(tunhunt_state::tunhunt_videoram_w)
51WRITE8_MEMBER(tunhunt_state::videoram_w)
5252{
5353   m_videoram[offset] = data;
5454   m_fg_tilemap->mark_tile_dirty(offset);
r245243r245244
7878
7979   m_fg_tilemap->set_transparent_pen(0);
8080   m_fg_tilemap->set_scrollx(0, 64);
81   
82   save_item(NAME(m_control));
8183}
8284
8385PALETTE_INIT_MEMBER(tunhunt_state, tunhunt)
8486{
85   int i;
86
8787   /* Tunnel Hunt uses a combination of color proms and palette RAM to specify a 16 color
8888    * palette.  Here, we manage only the mappings for alphanumeric characters and SHELL
8989    * graphics, which are unpacked ahead of time and drawn using MAME's drawgfx primitives.
9090    */
9191
9292   /* motion objects/box */
93   for (i = 0; i < 0x10; i++)
93   for (int i = 0; i < 0x10; i++)
9494      palette.set_pen_indirect(i, i);
9595
9696   /* AlphaNumerics (1bpp)
r245243r245244
152152   //const UINT8 *color_prom = memregion( "proms" )->base();
153153   int color;
154154   int shade;
155   int i;
156155   int red,green,blue;
157156
158   for( i=0; i<16; i++ )
157   for( int i=0; i<16; i++ )
159158   {
160159      color = m_generic_paletteram_8[i];
161160      shade = 0xf^(color>>4);
r245243r245244
207206 */
208207
209208   bitmap_ind16 &tmpbitmap = m_tmpbitmap;
210   UINT8 *spriteram = m_spriteram;
211   UINT8 *tunhunt_ram = m_workram;
212   //int skip = tunhunt_ram[MOBST];
213   int x0 = 255-tunhunt_ram[MOBJV];
214   int y0 = 255-tunhunt_ram[MOBJH];
209   //int skip = m_workram[MOBST];
210   int x0 = 255-m_workram[MOBJV];
211   int y0 = 255-m_workram[MOBJH];
215212   int scalex,scaley;
216213   int line,span;
217214   int x,span_data;
r245243r245244
222219   for( line=0; line<64; line++ )
223220   {
224221      x = 0;
225      source = &spriteram[line*0x10];
222      source = &m_spriteram[line*0x10];
226223      for( span=0; span<0x10; span++ )
227224      {
228225         span_data = source[span];
r245243r245244
236233         tmpbitmap.pix16(line, x++) = 0;
237234   } /* next line */
238235
239   switch( tunhunt_ram[VSTRLO] )
236   switch( m_workram[VSTRLO] )
240237   {
241238   case 0x01:
242239      scaley = (1<<16)*0.33; /* seems correct */
r245243r245244
247244      break;
248245
249246   default:
250      scaley = (1<<16)*tunhunt_ram[VSTRLO]/4; /* ??? */
247      scaley = (1<<16)*m_workram[VSTRLO]/4; /* ??? */
251248      break;
252249   }
253250   scalex = (1<<16);
r245243r245244
284281        1280: 07 03 00      01  07 06 04 05 02 07 03 00     09 0a   0b 0c       palette select
285282        ->hue 06 02 ff      60  06 05 03 04 01 06 02 ff     d2 00   c2 ff
286283*/
287   UINT8 *tunhunt_ram = m_workram;
288284   int span,x,y;
289285   int color;
290286//  rectangle bbox;
r245243r245244
300296            z = 0;
301297            for( span=3; span<16; span++ )
302298            {
303               x0 = tunhunt_ram[span+0x1080];
304               y0 = tunhunt_ram[span+0x1480];
305               y1 = tunhunt_ram[span+0x1400];
299               x0 = m_workram[span+0x1080];
300               y0 = m_workram[span+0x1480];
301               y1 = m_workram[span+0x1400];
306302
307303               if( y>=y0 && y<=y1 && x>=x0 && x0>=z )
308304               {
309                  color = tunhunt_ram[span+0x1280]&0xf;
305                  color = m_workram[span+0x1280]&0xf;
310306                  z = x0; /* give priority to rightmost spans */
311307               }
312308            }
r245243r245244
365361         255-hposition-16,vstart-32,0 );
366362}
367363
368UINT32 tunhunt_state::screen_update_tunhunt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
364UINT32 tunhunt_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
369365{
370366   set_pens();
371367


Previous 199869 Revisions Next


© 1997-2024 The MAME Team