trunk/src/mame/drivers/yunsun16.c
| r242144 | r242145 | |
| 101 | 101 | |
| 102 | 102 | ***************************************************************************/ |
| 103 | 103 | |
| 104 | | WRITE16_MEMBER(yunsun16_state::yunsun16_sound_bank_w) |
| 104 | WRITE8_MEMBER(yunsun16_state::sound_bank_w) |
| 105 | 105 | { |
| 106 | | if (ACCESSING_BITS_0_7) |
| 107 | | { |
| 108 | | int bank = data & 3; |
| 109 | | UINT8 *dst = memregion("oki")->base(); |
| 110 | | UINT8 *src = dst + 0x80000 + 0x20000 * bank; |
| 111 | | memcpy(dst + 0x20000, src, 0x20000); |
| 112 | | } |
| 106 | membank("okibank")->set_entry(data & 3); |
| 113 | 107 | } |
| 114 | 108 | |
| 115 | 109 | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state ) |
| r242144 | r242145 | |
| 126 | 120 | AM_RANGE(0x80010c, 0x80010f) AM_RAM AM_SHARE("scrollram_1") // Scrolling |
| 127 | 121 | AM_RANGE(0x800114, 0x800117) AM_RAM AM_SHARE("scrollram_0") // Scrolling |
| 128 | 122 | AM_RANGE(0x800154, 0x800155) AM_RAM AM_SHARE("priorityram") // Priority |
| 129 | | AM_RANGE(0x800180, 0x800181) AM_WRITE(yunsun16_sound_bank_w) // Sound |
| 123 | AM_RANGE(0x800180, 0x800181) AM_WRITE8(sound_bank_w, 0x00ff) // Sound |
| 130 | 124 | AM_RANGE(0x800188, 0x800189) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // Sound |
| 131 | 125 | AM_RANGE(0x8001fe, 0x8001ff) AM_WRITENOP // ? 0 (during int) |
| 132 | 126 | AM_RANGE(0x900000, 0x903fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 133 | | AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(yunsun16_vram_1_w) AM_SHARE("vram_1") // Layer 1 |
| 134 | | AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(yunsun16_vram_0_w) AM_SHARE("vram_0") // Layer 0 |
| 127 | AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1 |
| 128 | AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // Layer 0 |
| 135 | 129 | AM_RANGE(0x910000, 0x910fff) AM_RAM AM_SHARE("spriteram") // Sprites |
| 136 | 130 | AM_RANGE(0xff0000, 0xffffff) AM_RAM |
| 137 | 131 | ADDRESS_MAP_END |
| r242144 | r242145 | |
| 155 | 149 | |
| 156 | 150 | DRIVER_INIT_MEMBER(yunsun16_state,magicbub) |
| 157 | 151 | { |
| 158 | | // remove_mem_write16_handler (0, 0x800180, 0x800181 ); |
| 159 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w),this)); |
| 152 | m_maincpu->space(AS_PROGRAM).unmap_write(0x800180, 0x800181); |
| 153 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w), this)); |
| 160 | 154 | } |
| 161 | 155 | |
| 162 | 156 | /*************************************************************************** |
| r242144 | r242145 | |
| 179 | 173 | AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write) // M6295 |
| 180 | 174 | ADDRESS_MAP_END |
| 181 | 175 | |
| 176 | static ADDRESS_MAP_START( oki_map, AS_0, 8, yunsun16_state ) |
| 177 | AM_RANGE(0x00000, 0x1ffff) AM_ROM |
| 178 | AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank") |
| 179 | ADDRESS_MAP_END |
| 182 | 180 | |
| 181 | |
| 183 | 182 | /*************************************************************************** |
| 184 | 183 | |
| 185 | 184 | |
| r242144 | r242145 | |
| 566 | 565 | m_sprites_scrolldy = -0x0f; |
| 567 | 566 | } |
| 568 | 567 | |
| 568 | MACHINE_START_MEMBER(yunsun16_state, shocking) |
| 569 | { |
| 570 | machine_start(); |
| 571 | membank("okibank")->configure_entries(0, 0x80000 / 0x20000, memregion("oki")->base(), 0x20000); |
| 572 | membank("okibank")->set_entry(0); |
| 573 | } |
| 574 | |
| 575 | MACHINE_RESET_MEMBER(yunsun16_state, shocking) |
| 576 | { |
| 577 | machine_reset(); |
| 578 | membank("okibank")->set_entry(0); |
| 579 | } |
| 580 | |
| 569 | 581 | /*************************************************************************** |
| 570 | 582 | Magic Bubble |
| 571 | 583 | ***************************************************************************/ |
| r242144 | r242145 | |
| 622 | 634 | MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) |
| 623 | 635 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 624 | 636 | MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold) |
| 637 | |
| 638 | MCFG_MACHINE_START_OVERRIDE(yunsun16_state, shocking) |
| 639 | MCFG_MACHINE_RESET_OVERRIDE(yunsun16_state, shocking) |
| 625 | 640 | |
| 626 | | |
| 627 | 641 | /* video hardware */ |
| 628 | 642 | MCFG_SCREEN_ADD("screen", RASTER) |
| 629 | 643 | MCFG_SCREEN_RAW_PARAMS(XTAL_16MHz/2, 512, 0, 0x180-4, 260, 0, 0xe0) /* TODO: completely inaccurate */ |
| r242144 | r242145 | |
| 640 | 654 | MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) |
| 641 | 655 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) |
| 642 | 656 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) |
| 657 | MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map) |
| 643 | 658 | MACHINE_CONFIG_END |
| 644 | 659 | |
| 645 | 660 | |
| r242144 | r242145 | |
| 786 | 801 | ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) ) |
| 787 | 802 | ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) ) |
| 788 | 803 | |
| 789 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 804 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 790 | 805 | ROM_LOAD( "u131", 0x000000, 0x040000, CRC(9bdb08e4) SHA1(4d8bdeb9b503b0959a6ae3f3fb3574350b01b1a1) ) |
| 791 | | ROM_RELOAD( 0x040000, 0x040000 ) |
| 792 | | ROM_RELOAD( 0x080000, 0x040000 ) |
| 793 | | ROM_RELOAD( 0x0c0000, 0x040000 ) |
| 794 | 806 | |
| 795 | 807 | ROM_END |
| 796 | 808 | |
| r242144 | r242145 | |
| 862 | 874 | ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(436499c7) SHA1(ec1390b6d5656c99d91cf6425d319f4796bcb28a) ) |
| 863 | 875 | ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(358280fe) SHA1(eac3cb65fe75bc2da14896734f4a339480b54a2c) ) |
| 864 | 876 | |
| 865 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 877 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 866 | 878 | ROM_LOAD( "u131.bin", 0x000000, 0x080000, CRC(bcf7aa12) SHA1(f7bf5258396ed0eb7e85eccf250c6d0a333a4d61) ) |
| 867 | | ROM_RELOAD( 0x080000, 0x080000 ) |
| 868 | | |
| 879 | |
| 869 | 880 | ROM_END |
| 870 | 881 | |
| 871 | 882 | /*************************************************************************** |
| r242144 | r242145 | |
| 892 | 903 | ROM_LOAD( "yunsun16.u22", 0x080000, 0x040000, CRC(d6db0388) SHA1(f5d8f7740b602c402a8dd6c4ebd357cf15a0dfac) ) |
| 893 | 904 | ROM_LOAD( "yunsun16.u23", 0x0c0000, 0x040000, CRC(1fa33b2e) SHA1(4aa0dee8d34aac19cf6b7ba3f79ca022ad8d7760) ) |
| 894 | 905 | |
| 895 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 906 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 896 | 907 | ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) ) |
| 897 | | ROM_RELOAD( 0x080000, 0x080000 ) |
| 898 | | |
| 908 | |
| 899 | 909 | ROM_END |
| 900 | 910 | |
| 901 | 911 | ROM_START( shockingk ) |
| r242144 | r242145 | |
| 916 | 926 | ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(59260de1) SHA1(2dd2d7ab93fa751cb9142400a3ff91391477d555) ) |
| 917 | 927 | ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(00e4af23) SHA1(a4d23f16748385dd8c87cae3e16593e5a0195c24) ) |
| 918 | 928 | |
| 919 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 929 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 920 | 930 | ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) ) |
| 921 | | ROM_RELOAD( 0x080000, 0x080000 ) |
| 922 | | |
| 931 | |
| 923 | 932 | ROM_END |
| 924 | 933 | |
| 925 | 934 | |
| r242144 | r242145 | |
| 949 | 958 | ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) ) |
| 950 | 959 | ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) ) |
| 951 | 960 | |
| 952 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 961 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 953 | 962 | ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) ) |
| 954 | | ROM_RELOAD( 0x080000, 0x080000 ) |
| 955 | | |
| 963 | |
| 956 | 964 | ROM_END |
| 957 | 965 | |
| 958 | 966 | ROM_START( bombkicka ) // marked 'Bomb Kick 98' |
| r242144 | r242145 | |
| 973 | 981 | ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) ) |
| 974 | 982 | ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) ) |
| 975 | 983 | |
| 976 | | ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */ |
| 984 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 977 | 985 | ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) ) |
| 978 | | ROM_RELOAD( 0x080000, 0x080000 ) |
| 979 | | |
| 986 | |
| 980 | 987 | ROM_END |
| 981 | 988 | |
| 982 | 989 | /*************************************************************************** |
trunk/src/mame/includes/yunsun16.h
| r242144 | r242145 | |
| 9 | 9 | public: |
| 10 | 10 | yunsun16_state(const machine_config &mconfig, device_type type, const char *tag) |
| 11 | 11 | : driver_device(mconfig, type, tag), |
| 12 | m_maincpu(*this, "maincpu"), |
| 13 | m_audiocpu(*this, "audiocpu"), |
| 14 | m_gfxdecode(*this, "gfxdecode"), |
| 15 | m_screen(*this, "screen"), |
| 16 | m_palette(*this, "palette"), |
| 12 | 17 | m_vram_0(*this, "vram_0"), |
| 13 | 18 | m_vram_1(*this, "vram_1"), |
| 14 | 19 | m_scrollram_0(*this, "scrollram_0"), |
| 15 | 20 | m_scrollram_1(*this, "scrollram_1"), |
| 16 | 21 | m_priorityram(*this, "priorityram"), |
| 17 | | m_spriteram(*this, "spriteram"), |
| 18 | | m_audiocpu(*this, "audiocpu"), |
| 19 | | m_maincpu(*this, "maincpu"), |
| 20 | | m_gfxdecode(*this, "gfxdecode"), |
| 21 | | m_screen(*this, "screen"), |
| 22 | | m_palette(*this, "palette") { } |
| 22 | m_spriteram(*this, "spriteram") { } |
| 23 | 23 | |
| 24 | /* devices */ |
| 25 | required_device<cpu_device> m_maincpu; |
| 26 | optional_device<cpu_device> m_audiocpu; |
| 27 | required_device<gfxdecode_device> m_gfxdecode; |
| 28 | required_device<screen_device> m_screen; |
| 29 | required_device<palette_device> m_palette; |
| 30 | |
| 24 | 31 | /* memory pointers */ |
| 25 | 32 | required_shared_ptr<UINT16> m_vram_0; |
| 26 | 33 | required_shared_ptr<UINT16> m_vram_1; |
| r242144 | r242145 | |
| 36 | 43 | int m_sprites_scrolldx; |
| 37 | 44 | int m_sprites_scrolldy; |
| 38 | 45 | |
| 39 | | /* devices */ |
| 40 | | optional_device<cpu_device> m_audiocpu; |
| 41 | | DECLARE_WRITE16_MEMBER(yunsun16_sound_bank_w); |
| 46 | DECLARE_WRITE8_MEMBER(sound_bank_w); |
| 42 | 47 | DECLARE_WRITE16_MEMBER(magicbub_sound_command_w); |
| 43 | | DECLARE_WRITE16_MEMBER(yunsun16_vram_0_w); |
| 44 | | DECLARE_WRITE16_MEMBER(yunsun16_vram_1_w); |
| 48 | DECLARE_WRITE16_MEMBER(vram_0_w); |
| 49 | DECLARE_WRITE16_MEMBER(vram_1_w); |
| 45 | 50 | DECLARE_DRIVER_INIT(magicbub); |
| 46 | | TILEMAP_MAPPER_MEMBER(yunsun16_tilemap_scan_pages); |
| 51 | DECLARE_MACHINE_START(shocking); |
| 52 | DECLARE_MACHINE_RESET(shocking); |
| 53 | TILEMAP_MAPPER_MEMBER(tilemap_scan_pages); |
| 47 | 54 | TILE_GET_INFO_MEMBER(get_tile_info_0); |
| 48 | 55 | TILE_GET_INFO_MEMBER(get_tile_info_1); |
| 49 | 56 | virtual void machine_start(); |
| r242144 | r242145 | |
| 52 | 59 | UINT32 screen_update_yunsun16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 53 | 60 | void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 54 | 61 | DECLARE_WRITE_LINE_MEMBER(soundirq); |
| 55 | | required_device<cpu_device> m_maincpu; |
| 56 | | required_device<gfxdecode_device> m_gfxdecode; |
| 57 | | required_device<screen_device> m_screen; |
| 58 | | required_device<palette_device> m_palette; |
| 59 | 62 | }; |
trunk/src/mame/video/yunsun16.c
| r242144 | r242145 | |
| 38 | 38 | #define PAGES_PER_TMAP_X (0x4) |
| 39 | 39 | #define PAGES_PER_TMAP_Y (0x4) |
| 40 | 40 | |
| 41 | | TILEMAP_MAPPER_MEMBER(yunsun16_state::yunsun16_tilemap_scan_pages) |
| 41 | TILEMAP_MAPPER_MEMBER(yunsun16_state::tilemap_scan_pages) |
| 42 | 42 | { |
| 43 | 43 | return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X + |
| 44 | 44 | (row % TILES_PER_PAGE_Y) + |
| r242144 | r242145 | |
| 67 | 67 | (attr & 0x20) ? TILE_FLIPX : 0); |
| 68 | 68 | } |
| 69 | 69 | |
| 70 | | WRITE16_MEMBER(yunsun16_state::yunsun16_vram_0_w) |
| 70 | WRITE16_MEMBER(yunsun16_state::vram_0_w) |
| 71 | 71 | { |
| 72 | 72 | COMBINE_DATA(&m_vram_0[offset]); |
| 73 | 73 | m_tilemap_0->mark_tile_dirty(offset / 2); |
| 74 | 74 | } |
| 75 | 75 | |
| 76 | | WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w) |
| 76 | WRITE16_MEMBER(yunsun16_state::vram_1_w) |
| 77 | 77 | { |
| 78 | 78 | COMBINE_DATA(&m_vram_1[offset]); |
| 79 | 79 | m_tilemap_1->mark_tile_dirty(offset / 2); |
| r242144 | r242145 | |
| 90 | 90 | |
| 91 | 91 | void yunsun16_state::video_start() |
| 92 | 92 | { |
| 93 | | m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this), |
| 93 | m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this), |
| 94 | 94 | 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); |
| 95 | | m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this), |
| 95 | m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this), |
| 96 | 96 | 16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); |
| 97 | 97 | |
| 98 | 98 | m_tilemap_0->set_scrolldx(-0x34, 0); |