trunk/src/mame/drivers/seicross.c
| r243709 | r243710 | |
| 60 | 60 | memcpy(data, init, sizeof(init)); |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | void seicross_state::machine_start() |
| 64 | { |
| 65 | save_item(NAME(m_portb)); |
| 66 | save_item(NAME(m_irq_mask)); |
| 67 | } |
| 68 | |
| 63 | 69 | void seicross_state::machine_reset() |
| 64 | 70 | { |
| 65 | 71 | /* start with the protection mcu halted */ |
| r243709 | r243710 | |
| 68 | 74 | |
| 69 | 75 | |
| 70 | 76 | |
| 71 | | READ8_MEMBER(seicross_state::friskyt_portB_r) |
| 77 | READ8_MEMBER(seicross_state::portB_r) |
| 72 | 78 | { |
| 73 | 79 | return (m_portb & 0x9f) | (ioport("DEBUG")->read_safe(0) & 0x60); |
| 74 | 80 | } |
| 75 | 81 | |
| 76 | | WRITE8_MEMBER(seicross_state::friskyt_portB_w) |
| 82 | WRITE8_MEMBER(seicross_state::portB_w) |
| 77 | 83 | { |
| 78 | 84 | //logerror("PC %04x: 8910 port B = %02x\n", space.device().safe_pc(), data); |
| 79 | 85 | /* bit 0 is IRQ enable */ |
| r243709 | r243710 | |
| 98 | 104 | AM_RANGE(0x0000, 0x77ff) AM_ROM |
| 99 | 105 | AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("share1") |
| 100 | 106 | AM_RANGE(0x8820, 0x887f) AM_RAM AM_SHARE("spriteram") |
| 101 | | AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(seicross_videoram_w) AM_SHARE("videoram") /* video RAM */ |
| 107 | AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") /* video RAM */ |
| 102 | 108 | AM_RANGE(0x9800, 0x981f) AM_RAM AM_SHARE("row_scroll") |
| 103 | 109 | AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_SHARE("spriteram2") |
| 104 | | AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(seicross_colorram_w) AM_SHARE("colorram") |
| 110 | AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") |
| 105 | 111 | AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0") /* IN0 */ |
| 106 | 112 | AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") /* IN1 */ |
| 107 | 113 | AM_RANGE(0xb000, 0xb000) AM_READ_PORT("TEST") /* test */ |
| r243709 | r243710 | |
| 390 | 396 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */ /* frames per second, vblank duration */) |
| 391 | 397 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 392 | 398 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) |
| 393 | | MCFG_SCREEN_UPDATE_DRIVER(seicross_state, screen_update_seicross) |
| 399 | MCFG_SCREEN_UPDATE_DRIVER(seicross_state, screen_update) |
| 394 | 400 | MCFG_SCREEN_PALETTE("palette") |
| 395 | 401 | |
| 396 | 402 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", seicross) |
| r243709 | r243710 | |
| 401 | 407 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 402 | 408 | |
| 403 | 409 | MCFG_SOUND_ADD("aysnd", AY8910, 1536000) |
| 404 | | MCFG_AY8910_PORT_B_READ_CB(READ8(seicross_state, friskyt_portB_r)) |
| 405 | | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(seicross_state, friskyt_portB_w)) |
| 410 | MCFG_AY8910_PORT_B_READ_CB(READ8(seicross_state, portB_r)) |
| 411 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(seicross_state, portB_w)) |
| 406 | 412 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 407 | 413 | |
| 408 | 414 | MCFG_DAC_ADD("dac") |
| r243709 | r243710 | |
| 600 | 606 | } |
| 601 | 607 | |
| 602 | 608 | |
| 603 | | GAME( 1981, friskyt, 0, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 1)", GAME_NO_COCKTAIL ) |
| 604 | | GAME( 1981, friskyta, friskyt, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 2)", GAME_NO_COCKTAIL ) |
| 605 | | GAME( 1981, friskytb, friskyt, nvram, friskyt, seicross_state, friskytb, ROT0, "Nichibutsu", "Frisky Tom (set 3, encrypted)", GAME_NO_COCKTAIL ) // protection mcu runs encrypted opcodes |
| 606 | | GAME( 1982, radrad, 0, no_nvram, radrad, driver_device, 0, ROT0, "Nichibutsu USA", "Radical Radial", GAME_NO_COCKTAIL ) |
| 607 | | GAME( 1984, seicross, 0, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Seicross", GAME_NO_COCKTAIL ) |
| 608 | | GAME( 1984, sectrzon, seicross, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Sector Zone", GAME_NO_COCKTAIL ) |
| 609 | GAME( 1981, friskyt, 0, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 610 | GAME( 1981, friskyta, friskyt, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 611 | GAME( 1981, friskytb, friskyt, nvram, friskyt, seicross_state, friskytb, ROT0, "Nichibutsu", "Frisky Tom (set 3, encrypted)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // protection mcu runs encrypted opcodes |
| 612 | GAME( 1982, radrad, 0, no_nvram, radrad, driver_device, 0, ROT0, "Nichibutsu USA", "Radical Radial", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 613 | GAME( 1984, seicross, 0, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Seicross", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 614 | GAME( 1984, sectrzon, seicross, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Sector Zone", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/seicross.h
| r243709 | r243710 | |
| 5 | 5 | public: |
| 6 | 6 | seicross_state(const machine_config &mconfig, device_type type, const char *tag) |
| 7 | 7 | : driver_device(mconfig, type, tag), |
| 8 | m_maincpu(*this, "maincpu"), |
| 9 | m_mcu(*this, "mcu"), |
| 10 | m_nvram(*this, "nvram"), |
| 11 | m_gfxdecode(*this, "gfxdecode"), |
| 12 | m_palette(*this, "palette"), |
| 8 | 13 | m_spriteram(*this, "spriteram"), |
| 9 | 14 | m_videoram(*this, "videoram"), |
| 10 | 15 | m_row_scroll(*this, "row_scroll"), |
| 11 | 16 | m_spriteram2(*this, "spriteram2"), |
| 12 | | m_colorram(*this, "colorram"), |
| 13 | | m_maincpu(*this, "maincpu"), |
| 14 | | m_mcu(*this, "mcu"), |
| 15 | | m_nvram(*this, "nvram"), |
| 16 | | m_gfxdecode(*this, "gfxdecode"), |
| 17 | | m_palette(*this, "palette") { } |
| 17 | m_colorram(*this, "colorram") { } |
| 18 | 18 | |
| 19 | required_device<cpu_device> m_maincpu; |
| 20 | required_device<cpu_device> m_mcu; |
| 21 | optional_device<nvram_device> m_nvram; |
| 22 | required_device<gfxdecode_device> m_gfxdecode; |
| 23 | required_device<palette_device> m_palette; |
| 24 | |
| 19 | 25 | required_shared_ptr<UINT8> m_spriteram; |
| 20 | 26 | required_shared_ptr<UINT8> m_videoram; |
| 21 | 27 | required_shared_ptr<UINT8> m_row_scroll; |
| r243709 | r243710 | |
| 24 | 30 | |
| 25 | 31 | UINT8 m_portb; |
| 26 | 32 | tilemap_t *m_bg_tilemap; |
| 27 | | void nvram_init(nvram_device &nvram, void *data, size_t size); |
| 33 | UINT8 m_irq_mask; |
| 28 | 34 | |
| 29 | | UINT8 m_irq_mask; |
| 30 | | DECLARE_WRITE8_MEMBER(seicross_videoram_w); |
| 31 | | DECLARE_WRITE8_MEMBER(seicross_colorram_w); |
| 32 | | DECLARE_READ8_MEMBER(friskyt_portB_r); |
| 33 | | DECLARE_WRITE8_MEMBER(friskyt_portB_w); |
| 35 | DECLARE_WRITE8_MEMBER(videoram_w); |
| 36 | DECLARE_WRITE8_MEMBER(colorram_w); |
| 37 | DECLARE_READ8_MEMBER(portB_r); |
| 38 | DECLARE_WRITE8_MEMBER(portB_w); |
| 39 | |
| 34 | 40 | TILE_GET_INFO_MEMBER(get_bg_tile_info); |
| 41 | |
| 42 | INTERRUPT_GEN_MEMBER(vblank_irq); |
| 43 | |
| 44 | virtual void machine_start(); |
| 35 | 45 | virtual void machine_reset(); |
| 36 | 46 | virtual void video_start(); |
| 37 | 47 | DECLARE_PALETTE_INIT(seicross); |
| 38 | | UINT32 screen_update_seicross(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 39 | | INTERRUPT_GEN_MEMBER(vblank_irq); |
| 48 | DECLARE_DRIVER_INIT(friskytb); |
| 49 | |
| 50 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 40 | 51 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 41 | | required_device<cpu_device> m_maincpu; |
| 42 | | required_device<cpu_device> m_mcu; |
| 43 | | optional_device<nvram_device> m_nvram; |
| 44 | | required_device<gfxdecode_device> m_gfxdecode; |
| 45 | | required_device<palette_device> m_palette; |
| 46 | | |
| 47 | | DECLARE_DRIVER_INIT(friskytb); |
| 52 | |
| 53 | void nvram_init(nvram_device &nvram, void *data, size_t size); |
| 48 | 54 | }; |
trunk/src/mame/video/seicross.c
| r243709 | r243710 | |
| 54 | 54 | } |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | | WRITE8_MEMBER(seicross_state::seicross_videoram_w) |
| 57 | WRITE8_MEMBER(seicross_state::videoram_w) |
| 58 | 58 | { |
| 59 | 59 | m_videoram[offset] = data; |
| 60 | 60 | m_bg_tilemap->mark_tile_dirty(offset); |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | | WRITE8_MEMBER(seicross_state::seicross_colorram_w) |
| 63 | WRITE8_MEMBER(seicross_state::colorram_w) |
| 64 | 64 | { |
| 65 | 65 | /* bit 5 of the address is not used for color memory. There is just */ |
| 66 | 66 | /* 512k of memory; every two consecutive rows share the same memory */ |
| r243709 | r243710 | |
| 94 | 94 | |
| 95 | 95 | void seicross_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ) |
| 96 | 96 | { |
| 97 | | UINT8 *spriteram = m_spriteram; |
| 98 | | UINT8 *spriteram_2 = m_spriteram2; |
| 99 | 97 | int offs; |
| 100 | 98 | |
| 101 | 99 | for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4) |
| 102 | 100 | { |
| 103 | | int x = spriteram[offs + 3]; |
| 101 | int x = m_spriteram[offs + 3]; |
| 104 | 102 | m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, |
| 105 | | (spriteram[offs] & 0x3f) + ((spriteram[offs + 1] & 0x10) << 2) + 128, |
| 106 | | spriteram[offs + 1] & 0x0f, |
| 107 | | spriteram[offs] & 0x40,spriteram[offs] & 0x80, |
| 108 | | x,240-spriteram[offs + 2],0); |
| 103 | (m_spriteram[offs] & 0x3f) + ((m_spriteram[offs + 1] & 0x10) << 2) + 128, |
| 104 | m_spriteram[offs + 1] & 0x0f, |
| 105 | m_spriteram[offs] & 0x40,m_spriteram[offs] & 0x80, |
| 106 | x,240-m_spriteram[offs + 2],0); |
| 109 | 107 | if(x>0xf0) |
| 110 | 108 | m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, |
| 111 | | (spriteram[offs] & 0x3f) + ((spriteram[offs + 1] & 0x10) << 2) + 128, |
| 112 | | spriteram[offs + 1] & 0x0f, |
| 113 | | spriteram[offs] & 0x40,spriteram[offs] & 0x80, |
| 114 | | x-256,240-spriteram[offs + 2],0); |
| 109 | (m_spriteram[offs] & 0x3f) + ((m_spriteram[offs + 1] & 0x10) << 2) + 128, |
| 110 | m_spriteram[offs + 1] & 0x0f, |
| 111 | m_spriteram[offs] & 0x40,m_spriteram[offs] & 0x80, |
| 112 | x-256,240-m_spriteram[offs + 2],0); |
| 115 | 113 | } |
| 116 | 114 | |
| 117 | 115 | for (offs = m_spriteram2.bytes() - 4; offs >= 0; offs -= 4) |
| 118 | 116 | { |
| 119 | | int x = spriteram_2[offs + 3]; |
| 117 | int x = m_spriteram2[offs + 3]; |
| 120 | 118 | m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, |
| 121 | | (spriteram_2[offs] & 0x3f) + ((spriteram_2[offs + 1] & 0x10) << 2), |
| 122 | | spriteram_2[offs + 1] & 0x0f, |
| 123 | | spriteram_2[offs] & 0x40,spriteram_2[offs] & 0x80, |
| 124 | | x,240-spriteram_2[offs + 2],0); |
| 119 | (m_spriteram2[offs] & 0x3f) + ((m_spriteram2[offs + 1] & 0x10) << 2), |
| 120 | m_spriteram2[offs + 1] & 0x0f, |
| 121 | m_spriteram2[offs] & 0x40,m_spriteram2[offs] & 0x80, |
| 122 | x,240-m_spriteram2[offs + 2],0); |
| 125 | 123 | if(x>0xf0) |
| 126 | 124 | m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, |
| 127 | | (spriteram_2[offs] & 0x3f) + ((spriteram_2[offs + 1] & 0x10) << 2), |
| 128 | | spriteram_2[offs + 1] & 0x0f, |
| 129 | | spriteram_2[offs] & 0x40,spriteram_2[offs] & 0x80, |
| 130 | | x-256,240-spriteram_2[offs + 2],0); |
| 125 | (m_spriteram2[offs] & 0x3f) + ((m_spriteram2[offs + 1] & 0x10) << 2), |
| 126 | m_spriteram2[offs + 1] & 0x0f, |
| 127 | m_spriteram2[offs] & 0x40,m_spriteram2[offs] & 0x80, |
| 128 | x-256,240-m_spriteram2[offs + 2],0); |
| 131 | 129 | } |
| 132 | 130 | } |
| 133 | 131 | |
| 134 | | UINT32 seicross_state::screen_update_seicross(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 132 | UINT32 seicross_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 135 | 133 | { |
| 136 | 134 | int col; |
| 137 | 135 | |