branches/kale/src/mame/drivers/speedatk.c
| r244597 | r244598 | |
| 7 | 7 | driver by Pierpaolo Prazzoli & Angelo Salese, based on early work by David Haywood |
| 8 | 8 | |
| 9 | 9 | TODO: |
| 10 | | - Video emulation requires a major conversion to the HD46505SP C.R.T. chip (MC6845 clone) |
| 11 | 10 | - It's possible that there is only one coin chute and not two,needs a real board to know |
| 12 | 11 | more about it. |
| 13 | 12 | |
| r244597 | r244598 | |
| 79 | 78 | #include "emu.h" |
| 80 | 79 | #include "cpu/z80/z80.h" |
| 81 | 80 | #include "sound/ay8910.h" |
| 82 | | #include "video/mc6845.h" |
| 83 | 81 | #include "includes/speedatk.h" |
| 84 | 82 | |
| 85 | 83 | #define MASTER_CLOCK XTAL_12MHz |
| 86 | 84 | |
| 85 | void speedatk_state::machine_start() |
| 86 | { |
| 87 | save_item(NAME(m_mux_data)); |
| 88 | save_item(NAME(m_km_status)); |
| 89 | save_item(NAME(m_coin_settings)); |
| 90 | save_item(NAME(m_coin_impulse)); |
| 91 | } |
| 92 | |
| 87 | 93 | UINT8 speedatk_state::iox_key_matrix_calc(UINT8 p_side) |
| 88 | 94 | { |
| 89 | 95 | static const char *const keynames[] = { "P1_ROW0", "P1_ROW1", "P2_ROW0", "P2_ROW1" }; |
| r244597 | r244598 | |
| 175 | 181 | AM_RANGE(0x8000, 0x8000) AM_READWRITE(key_matrix_r,key_matrix_w) |
| 176 | 182 | AM_RANGE(0x8001, 0x8001) AM_READWRITE(key_matrix_status_r,key_matrix_status_w) |
| 177 | 183 | AM_RANGE(0x8800, 0x8fff) AM_RAM |
| 178 | | AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(speedatk_videoram_w) AM_SHARE("videoram") |
| 179 | | AM_RANGE(0xb000, 0xb3ff) AM_RAM_WRITE(speedatk_colorram_w) AM_SHARE("colorram") |
| 184 | AM_RANGE(0xa000, 0xa3ff) AM_RAM AM_SHARE("videoram") |
| 185 | AM_RANGE(0xb000, 0xb3ff) AM_RAM AM_SHARE("colorram") |
| 180 | 186 | ADDRESS_MAP_END |
| 181 | 187 | |
| 182 | 188 | |
| 183 | 189 | static ADDRESS_MAP_START( speedatk_io, AS_IO, 8, speedatk_state ) |
| 184 | 190 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 185 | | AM_RANGE(0x00, 0x01) AM_WRITE(speedatk_6845_w) //h46505 address / data routing |
| 191 | AM_RANGE(0x00, 0x01) AM_WRITE(m6845_w) //h46505 address / data routing |
| 186 | 192 | AM_RANGE(0x24, 0x24) AM_WRITE(watchdog_reset_w) |
| 187 | 193 | AM_RANGE(0x40, 0x40) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 188 | 194 | AM_RANGE(0x40, 0x41) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| r244597 | r244598 | |
| 285 | 291 | GFXDECODE_ENTRY( "gfx2", 0, charlayout_3bpp, 0, 32 ) |
| 286 | 292 | GFXDECODE_END |
| 287 | 293 | |
| 288 | | WRITE8_MEMBER(speedatk_state::speedatk_output_w) |
| 294 | WRITE8_MEMBER(speedatk_state::output_w) |
| 289 | 295 | { |
| 290 | 296 | m_flip_scr = data & 0x80; |
| 291 | 297 | |
| r244597 | r244598 | |
| 308 | 314 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 309 | 315 | MCFG_SCREEN_SIZE(320, 256) |
| 310 | 316 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) |
| 311 | | MCFG_SCREEN_UPDATE_DRIVER(speedatk_state, screen_update_speedatk) |
| 317 | MCFG_SCREEN_UPDATE_DRIVER(speedatk_state, screen_update) |
| 312 | 318 | MCFG_SCREEN_PALETTE("palette") |
| 313 | 319 | |
| 314 | 320 | MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16) /* hand tuned to get ~60 fps */ |
| r244597 | r244598 | |
| 325 | 331 | |
| 326 | 332 | MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/4) //divider is unknown |
| 327 | 333 | MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW")) |
| 328 | | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(speedatk_state, speedatk_output_w)) |
| 334 | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(speedatk_state, output_w)) |
| 329 | 335 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) |
| 330 | 336 | MACHINE_CONFIG_END |
| 331 | 337 | |
| r244597 | r244598 | |
| 350 | 356 | ROM_LOAD( "cb2.bpr", 0x0020, 0x0100, CRC(a604cf96) SHA1(a4ef6e77dcd3abe4c27e8e636222a5ee711a51f5) ) /* lookup table */ |
| 351 | 357 | ROM_END |
| 352 | 358 | |
| 353 | | GAME( 1984, speedatk, 0, speedatk, speedatk, driver_device, 0, ROT0, "Seta Kikaku Corp.", "Speed Attack! (Japan)", 0 ) |
| 359 | GAME( 1984, speedatk, 0, speedatk, speedatk, driver_device, 0, ROT0, "Seta Kikaku Corp.", "Speed Attack! (Japan)", GAME_SUPPORTS_SAVE ) |
branches/kale/src/mame/includes/speedatk.h
| r244597 | r244598 | |
| 1 | #include "video/mc6845.h" |
| 2 | |
| 1 | 3 | class speedatk_state : public driver_device |
| 2 | 4 | { |
| 3 | 5 | public: |
| r244597 | r244598 | |
| 3 | 5 | speedatk_state(const machine_config &mconfig, device_type type, const char *tag) |
| 4 | 6 | : driver_device(mconfig, type, tag), |
| 5 | | m_videoram(*this, "videoram"), |
| 6 | | m_colorram(*this, "colorram"), |
| 7 | 7 | m_maincpu(*this, "maincpu"), |
| 8 | m_crtc(*this, "crtc"), |
| 8 | 9 | m_gfxdecode(*this, "gfxdecode"), |
| 9 | | m_palette(*this, "palette") { } |
| 10 | m_palette(*this, "palette"), |
| 11 | m_videoram(*this, "videoram"), |
| 12 | m_colorram(*this, "colorram") { } |
| 10 | 13 | |
| 14 | required_device<cpu_device> m_maincpu; |
| 15 | required_device<h46505_device> m_crtc; |
| 16 | required_device<gfxdecode_device> m_gfxdecode; |
| 17 | required_device<palette_device> m_palette; |
| 18 | |
| 11 | 19 | required_shared_ptr<UINT8> m_videoram; |
| 12 | 20 | required_shared_ptr<UINT8> m_colorram; |
| 21 | |
| 13 | 22 | UINT8 m_crtc_vreg[0x100]; |
| 14 | 23 | UINT8 m_crtc_index; |
| 15 | 24 | UINT8 m_flip_scr; |
| 16 | | |
| 17 | 25 | UINT8 m_mux_data; |
| 18 | 26 | UINT8 m_km_status; |
| 19 | 27 | UINT8 m_coin_settings; |
| 20 | 28 | UINT8 m_coin_impulse; |
| 29 | |
| 21 | 30 | DECLARE_READ8_MEMBER(key_matrix_r); |
| 22 | 31 | DECLARE_WRITE8_MEMBER(key_matrix_w); |
| 23 | 32 | DECLARE_READ8_MEMBER(key_matrix_status_r); |
| 24 | 33 | DECLARE_WRITE8_MEMBER(key_matrix_status_w); |
| 25 | | DECLARE_WRITE8_MEMBER(speedatk_videoram_w); |
| 26 | | DECLARE_WRITE8_MEMBER(speedatk_colorram_w); |
| 27 | | DECLARE_WRITE8_MEMBER(speedatk_6845_w); |
| 28 | | DECLARE_WRITE8_MEMBER(speedatk_output_w); |
| 34 | DECLARE_WRITE8_MEMBER(videoram_w); |
| 35 | DECLARE_WRITE8_MEMBER(colorram_w); |
| 36 | DECLARE_WRITE8_MEMBER(m6845_w); |
| 37 | DECLARE_WRITE8_MEMBER(output_w); |
| 38 | |
| 39 | virtual void machine_start(); |
| 29 | 40 | virtual void video_start(); |
| 30 | 41 | DECLARE_PALETTE_INIT(speedatk); |
| 31 | | UINT32 screen_update_speedatk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 42 | |
| 43 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 44 | |
| 32 | 45 | UINT8 iox_key_matrix_calc(UINT8 p_side); |
| 33 | | required_device<cpu_device> m_maincpu; |
| 34 | | required_device<gfxdecode_device> m_gfxdecode; |
| 35 | | required_device<palette_device> m_palette; |
| 36 | 46 | }; |
branches/kale/src/mame/video/speedatk.c
| r244597 | r244598 | |
| 5 | 5 | *****************************************************************************************/ |
| 6 | 6 | #include "emu.h" |
| 7 | 7 | #include "includes/speedatk.h" |
| 8 | | #include "video/mc6845.h" |
| 9 | 8 | |
| 10 | 9 | |
| 11 | 10 | PALETTE_INIT_MEMBER(speedatk_state, speedatk) |
| r244597 | r244598 | |
| 50 | 49 | } |
| 51 | 50 | } |
| 52 | 51 | |
| 53 | | WRITE8_MEMBER(speedatk_state::speedatk_videoram_w) |
| 54 | | { |
| 55 | | m_videoram[offset] = data; |
| 56 | | } |
| 57 | | |
| 58 | | WRITE8_MEMBER(speedatk_state::speedatk_colorram_w) |
| 59 | | { |
| 60 | | m_colorram[offset] = data; |
| 61 | | } |
| 62 | | |
| 63 | 52 | void speedatk_state::video_start() |
| 64 | 53 | { |
| 54 | save_item(NAME(m_crtc_vreg)); |
| 55 | save_item(NAME(m_crtc_index)); |
| 56 | save_item(NAME(m_flip_scr)); |
| 65 | 57 | } |
| 66 | 58 | |
| 67 | | WRITE8_MEMBER(speedatk_state::speedatk_6845_w) |
| 59 | WRITE8_MEMBER(speedatk_state::m6845_w) |
| 68 | 60 | { |
| 69 | 61 | if(offset == 0) |
| 70 | 62 | { |
| 71 | 63 | m_crtc_index = data; |
| 72 | | machine().device<mc6845_device>("crtc")->address_w(space,0,data); |
| 64 | m_crtc->address_w(space,0,data); |
| 73 | 65 | } |
| 74 | 66 | else |
| 75 | 67 | { |
| 76 | 68 | m_crtc_vreg[m_crtc_index] = data; |
| 77 | | machine().device<mc6845_device>("crtc")->register_w(space,0,data); |
| 69 | m_crtc->register_w(space,0,data); |
| 78 | 70 | } |
| 79 | 71 | } |
| 80 | 72 | |
| 81 | | UINT32 speedatk_state::screen_update_speedatk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 73 | UINT32 speedatk_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 82 | 74 | { |
| 83 | 75 | int x,y; |
| 84 | 76 | int count; |