trunk/src/mame/drivers/docastle.c
| r26921 | r26922 | |
| 37 | 37 | c003 IN0 |
| 38 | 38 | bit 4-7 = joystick player 2 |
| 39 | 39 | bit 0-3 = joystick player 1 |
| 40 | | c004 flipscreen (proper cocktail mode implemented by Chad Hendrickson Aug 1, 1999) |
| 40 | c004 flipscreen |
| 41 | 41 | c005 IN1 |
| 42 | 42 | bit 7 = START 2 |
| 43 | 43 | bit 6 = unused |
| r26921 | r26922 | |
| 89 | 89 | e000-e008 data from first CPU |
| 90 | 90 | c003 bit 0-3 = joystick |
| 91 | 91 | bit 4-7 = ? |
| 92 | | c004 flipscreen (proper cocktail mode implemented by Chad Hendrickson Aug 1, 1999) |
| 92 | c004 flipscreen |
| 93 | 93 | c005 bit 0 = fire |
| 94 | 94 | bit 1 = fire (again?!) |
| 95 | 95 | bit 2 = ? |
| r26921 | r26922 | |
| 240 | 240 | |
| 241 | 241 | static ADDRESS_MAP_START( docastle_io_map, AS_IO, 8, docastle_state ) |
| 242 | 242 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 243 | | AM_RANGE(0x00, 0x00) AM_NOP // goes to CRT 46505S |
| 244 | | AM_RANGE(0x02, 0x02) AM_NOP // goes to CRT 46505S |
| 243 | AM_RANGE(0x00, 0x00) AM_WRITENOP //AM_DEVWRITE("crtc", mc6845_device, address_w) |
| 244 | AM_RANGE(0x02, 0x02) AM_WRITENOP //AM_DEVWRITE("crtc", mc6845_device, register_w) |
| 245 | 245 | ADDRESS_MAP_END |
| 246 | 246 | |
| 247 | 247 | |
| r26921 | r26922 | |
| 596 | 596 | MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz) |
| 597 | 597 | MCFG_CPU_PROGRAM_MAP(docastle_map) |
| 598 | 598 | MCFG_CPU_IO_MAP(docastle_io_map) |
| 599 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", docastle_state, irq0_line_hold) |
| 599 | MCFG_CPU_VBLANK_INT_DRIVER("screen", docastle_state, irq0_line_hold) |
| 600 | 600 | |
| 601 | 601 | MCFG_CPU_ADD("slave", Z80, XTAL_4MHz) |
| 602 | 602 | MCFG_CPU_PROGRAM_MAP(docastle_map2) |
| 603 | | MCFG_CPU_PERIODIC_INT_DRIVER(docastle_state, irq0_line_hold, 8*60) |
| 603 | MCFG_CPU_PERIODIC_INT_DRIVER(docastle_state, irq0_line_hold, 8*60) // ? |
| 604 | 604 | |
| 605 | 605 | MCFG_CPU_ADD("cpu3", Z80, XTAL_4MHz) |
| 606 | 606 | MCFG_CPU_PROGRAM_MAP(docastle_map3) |
| 607 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", docastle_state, nmi_line_pulse) |
| 607 | MCFG_CPU_VBLANK_INT_DRIVER("screen", docastle_state, nmi_line_pulse) |
| 608 | 608 | |
| 609 | 609 | /* video hardware */ |
| 610 | //MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_9_828MHz / 16, mc6845_intf) |
| 611 | |
| 610 | 612 | MCFG_SCREEN_ADD("screen", RASTER) |
| 611 | | MCFG_SCREEN_REFRESH_RATE(59.60) // measured on pcb, real refresh rate should be derived from XTAL_9_828MHz, how? |
| 612 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 613 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 614 | | MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 4*8, 28*8-1) |
| 613 | MCFG_SCREEN_RAW_PARAMS(XTAL_9_828MHz/2, 0x138, 0+8, 0x110-24, 0x108, 0+32, 0xe0) // from crtc |
| 615 | 614 | MCFG_SCREEN_UPDATE_DRIVER(docastle_state, screen_update_docastle) |
| 616 | 615 | |
| 617 | 616 | MCFG_GFXDECODE(docastle) |
| 618 | 617 | MCFG_PALETTE_LENGTH(512) |
| 619 | 618 | |
| 620 | | |
| 621 | | |
| 622 | 619 | /* sound hardware */ |
| 623 | 620 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 624 | 621 | |
| r26921 | r26922 | |
| 642 | 639 | static MACHINE_CONFIG_DERIVED( dorunrun, docastle ) |
| 643 | 640 | |
| 644 | 641 | /* basic machine hardware */ |
| 645 | | |
| 646 | 642 | MCFG_CPU_MODIFY("maincpu") |
| 647 | 643 | MCFG_CPU_PROGRAM_MAP(dorunrun_map) |
| 648 | 644 | |
| r26921 | r26922 | |
| 656 | 652 | static MACHINE_CONFIG_DERIVED( idsoccer, docastle ) |
| 657 | 653 | |
| 658 | 654 | /* basic machine hardware */ |
| 659 | | |
| 660 | 655 | MCFG_CPU_MODIFY("maincpu") |
| 661 | 656 | MCFG_CPU_PROGRAM_MAP(idsoccer_map) |
| 662 | 657 | |
trunk/src/mame/includes/docastle.h
| r26921 | r26922 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Mr. Do's Castle hardware |
| 4 | |
| 5 | ***************************************************************************/ |
| 6 | |
| 1 | 7 | #include "sound/msm5205.h" |
| 2 | 8 | |
| 3 | 9 | class docastle_state : public driver_device |
| r26921 | r26922 | |
| 5 | 11 | public: |
| 6 | 12 | docastle_state(const machine_config &mconfig, device_type type, const char *tag) |
| 7 | 13 | : driver_device(mconfig, type, tag), |
| 14 | m_maincpu(*this, "maincpu"), |
| 15 | m_slave(*this, "slave"), |
| 16 | m_msm(*this, "msm"), |
| 8 | 17 | m_videoram(*this, "videoram"), |
| 9 | 18 | m_colorram(*this, "colorram"), |
| 10 | | m_spriteram(*this, "spriteram"), |
| 11 | | m_maincpu(*this, "maincpu"), |
| 12 | | m_slave(*this, "slave"), |
| 13 | | m_msm(*this, "msm"){ } |
| 19 | m_spriteram(*this, "spriteram") |
| 20 | { } |
| 14 | 21 | |
| 22 | /* devices */ |
| 23 | required_device<cpu_device> m_maincpu; |
| 24 | required_device<cpu_device> m_slave; |
| 25 | optional_device<msm5205_device> m_msm; |
| 26 | |
| 15 | 27 | /* memory pointers */ |
| 16 | 28 | required_shared_ptr<UINT8> m_videoram; |
| 17 | 29 | required_shared_ptr<UINT8> m_colorram; |
| r26921 | r26922 | |
| 28 | 40 | UINT8 m_buffer0[9]; |
| 29 | 41 | UINT8 m_buffer1[9]; |
| 30 | 42 | |
| 31 | | /* devices */ |
| 32 | | required_device<cpu_device> m_maincpu; |
| 33 | | required_device<cpu_device> m_slave; |
| 34 | | optional_device<msm5205_device> m_msm; |
| 35 | | |
| 36 | 43 | DECLARE_READ8_MEMBER(docastle_shared0_r); |
| 37 | 44 | DECLARE_READ8_MEMBER(docastle_shared1_r); |
| 38 | 45 | DECLARE_WRITE8_MEMBER(docastle_shared0_w); |
trunk/src/mame/video/docastle.c
| r26921 | r26922 | |
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | |
| 3 | | video.c |
| 3 | Mr. Do's Castle hardware |
| 4 | 4 | |
| 5 | 5 | Functions to emulate the video hardware of the machine. |
| 6 | 6 | |
| 7 | | (Cocktail mode implemented by Chad Hendrickson Aug 1, 1999) |
| 8 | | |
| 9 | 7 | ***************************************************************************/ |
| 10 | 8 | |
| 11 | 9 | #include "emu.h" |
| r26921 | r26922 | |
| 111 | 109 | |
| 112 | 110 | void docastle_state::video_start_common( UINT32 tile_transmask ) |
| 113 | 111 | { |
| 114 | | m_do_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(docastle_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 112 | m_do_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(docastle_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 115 | 113 | m_do_tilemap->set_transmask(0, tile_transmask, 0x0000); |
| 116 | 114 | } |
| 117 | 115 | |
| r26921 | r26922 | |
| 152 | 150 | p = palette |
| 153 | 151 | t = tile number |
| 154 | 152 | |
| 155 | | */ |
| 153 | */ |
| 156 | 154 | |
| 157 | 155 | code = m_spriteram[offs + 3]; |
| 158 | 156 | color = m_spriteram[offs + 2] & 0x0f; |
| r26921 | r26922 | |
| 178 | 176 | p = palette |
| 179 | 177 | t = tile number |
| 180 | 178 | |
| 181 | | */ |
| 179 | */ |
| 182 | 180 | |
| 183 | 181 | code = m_spriteram[offs + 3]; |
| 184 | 182 | color = m_spriteram[offs + 2] & 0x1f; |
| r26921 | r26922 | |
| 190 | 188 | |
| 191 | 189 | if (flip_screen()) |
| 192 | 190 | { |
| 193 | | sx = 240 - sx; |
| 194 | | sy = 240 - sy; |
| 191 | sx = 296 - sx; |
| 192 | sy = 248 - sy; |
| 195 | 193 | flipx = !flipx; |
| 196 | 194 | flipy = !flipy; |
| 197 | 195 | } |