| Previous | 199869 Revisions | Next |
| r18595 Thursday 18th October, 2012 at 19:54:41 UTC by Luca Elia |
|---|
| suna8.c update [Luca Elia] * Emulated the protection in sparkman * Support for two sprite chips * Support for two sample ROMs * Fixed color cycling in hardhea2 * Per-game tile banking New games added or promoted from NOT_WORKING status --------------------------------------------------- Spark Man (v2.0, 2 sets) [Luca Elia, Stefan Lindberg] |
| [src/mame/audio] | suna8.c |
| [src/mame/drivers] | suna8.c |
| [src/mame/includes] | suna8.h |
| [src/mame/video] | suna8.c |
| r18594 | r18595 | |
|---|---|---|
| 9 | 9 | #include "includes/suna8.h" |
| 10 | 10 | |
| 11 | 11 | #define FREQ_HZ 8000 |
| 12 | #define | |
| 12 | #define SAMPLEN 0x1000 | |
| 13 | 13 | |
| 14 | SAMPLES_START( suna8_sh_start ) | |
| 15 | { | |
| 16 | suna8_state *state = device.machine().driver_data<suna8_state>(); | |
| 17 | running_machine &machine = device.machine(); | |
| 18 | ||
| 19 | int i, len = state->memregion("samples")->bytes() * 2; // 2 samples per byte | |
| 20 | UINT8 *ROM = state->memregion("samples")->base(); | |
| 21 | ||
| 22 | state->m_samplebuf = auto_alloc_array(machine, INT16, len); | |
| 23 | ||
| 24 | // Convert 4 bit to 16 bit samples | |
| 25 | for(i = 0; i < len; i++) | |
| 26 | state->m_samplebuf[i] = (INT8)(((ROM[i/2] << ((i & 1)?0:4)) & 0xf0) ^ 0x80) * 0x100; | |
| 27 | ||
| 28 | state->m_numsamples = len / SAMPLEN; | |
| 29 | } | |
| 30 | ||
| 31 | WRITE8_MEMBER(suna8_state::suna8_samples_number_w) | |
| 32 | { | |
| 33 | m_sample = data & 0xf; | |
| 34 | logerror("%s: sample number = %02X\n", machine().describe_context(), data); | |
| 35 | } | |
| 36 | ||
| 37 | void suna8_state::play_sample(int index) | |
| 38 | { | |
| 39 | samples_device *samples = downcast<samples_device *>(machine().device("samples")); | |
| 40 | ||
| 41 | if (index < m_numsamples) | |
| 42 | { | |
| 43 | samples->start_raw(0, &m_samplebuf[SAMPLEN * index], SAMPLEN, FREQ_HZ); | |
| 44 | logerror("%s: starting sample %02X\n", machine().describe_context(), index); | |
| 45 | } | |
| 46 | else | |
| 47 | { | |
| 48 | logerror("%s: warning, invalid sample %02X\n", machine().describe_context(), index); | |
| 49 | } | |
| 50 | } | |
| 51 | ||
| 14 | 52 | WRITE8_MEMBER(suna8_state::suna8_play_samples_w) |
| 15 | 53 | { |
| 54 | logerror("%s: play sample = %02X\n", machine().describe_context(), data); | |
| 16 | 55 | if ( data ) |
| 17 | 56 | { |
| 18 | samples_device *samples = downcast<samples_device *>(machine().device("samples")); | |
| 19 | 57 | if ( ~data & 0x10 ) |
| 20 | 58 | { |
| 21 | | |
| 59 | play_sample(m_sample); | |
| 22 | 60 | } |
| 23 | 61 | else if ( ~data & 0x08 ) |
| 24 | 62 | { |
| 25 | m_sample &= 3; | |
| 26 | samples->start_raw(0, &m_samplebuf[NUMSAMPLES * (m_sample+7)], NUMSAMPLES, FREQ_HZ); | |
| 63 | play_sample((m_sample & 3) + 7); | |
| 27 | 64 | } |
| 65 | else if ( ~data & 0x40 ) // sparkman, second sample rom | |
| 66 | { | |
| 67 | play_sample(m_sample + 0x10); | |
| 68 | } | |
| 28 | 69 | } |
| 29 | 70 | } |
| 30 | 71 | |
| r18594 | r18595 | |
| 34 | 75 | { |
| 35 | 76 | if (( m_sample != 0 ) && ( ~data & 0x30 )) // don't play sample zero when those bits are active |
| 36 | 77 | { |
| 37 | samples_device *samples = downcast<samples_device *>(machine().device("samples")); | |
| 38 | samples->start_raw(0, &m_samplebuf[NUMSAMPLES * m_sample], NUMSAMPLES, FREQ_HZ); | |
| 78 | play_sample(m_sample); | |
| 39 | 79 | } |
| 40 | 80 | } |
| 41 | 81 | } |
| 42 | ||
| 43 | WRITE8_MEMBER(suna8_state::suna8_samples_number_w) | |
| 44 | { | |
| 45 | m_sample = data & 0xf; | |
| 46 | } | |
| 47 | ||
| 48 | SAMPLES_START( suna8_sh_start ) | |
| 49 | { | |
| 50 | suna8_state *state = device.machine().driver_data<suna8_state>(); | |
| 51 | running_machine &machine = device.machine(); | |
| 52 | ||
| 53 | int i, len = state->memregion("samples")->bytes() * 2; // 2 samples per byte | |
| 54 | UINT8 *ROM = state->memregion("samples")->base(); | |
| 55 | ||
| 56 | state->m_samplebuf = auto_alloc_array(machine, INT16, len); | |
| 57 | ||
| 58 | // Convert 4 bit to 16 bit samples | |
| 59 | for(i = 0; i < len; i++) | |
| 60 | state->m_samplebuf[i] = (INT8)(((ROM[i/2] << ((i & 1)?0:4)) & 0xf0) ^ 0x80) * 0x100; | |
| 61 | } |
| r18594 | r18595 | |
|---|---|---|
| 10 | 10 | m_maincpu(*this,"maincpu"), |
| 11 | 11 | m_hardhead_ip(*this, "hardhead_ip"), |
| 12 | 12 | m_spriteram(*this, "spriteram"), |
| 13 | m_wram(*this, "wram") | |
| 13 | m_wram(*this, "wram"), | |
| 14 | m_banked_paletteram(*this, "paletteram") | |
| 14 | 15 | { } |
| 15 | 16 | |
| 16 | 17 | required_device<cpu_device> m_maincpu; |
| 17 | 18 | optional_shared_ptr<UINT8> m_hardhead_ip; |
| 18 | 19 | optional_shared_ptr<UINT8> m_spriteram; |
| 19 | 20 | optional_shared_ptr<UINT8> m_wram; |
| 21 | optional_shared_ptr<UINT8> m_banked_paletteram; | |
| 20 | 22 | |
| 21 | 23 | UINT8 m_rombank; |
| 22 | 24 | UINT8 m_rombank_latch; |
| 23 | 25 | UINT8 m_spritebank; |
| 24 | UINT8 m_gfxbank; // starfigh | |
| 25 | UINT8 m_use_gfxbank; // "" | |
| 26 | 26 | UINT8 m_palettebank; |
| 27 | 27 | UINT8 m_paletteram_enab; |
| 28 | 28 | UINT8 m_prot2; |
| r18594 | r18595 | |
| 31 | 31 | UINT8 m_protection_val; |
| 32 | 32 | UINT8 m_nmi_enable; |
| 33 | 33 | UINT8 m_spritebank_latch; |
| 34 | UINT8 m_ | |
| 34 | UINT8 m_write_disable; | |
| 35 | 35 | |
| 36 | enum GFXBANK_TYPE_T | |
| 37 | { | |
| 38 | GFXBANK_TYPE_SPARKMAN, | |
| 39 | GFXBANK_TYPE_BRICKZN, | |
| 40 | GFXBANK_TYPE_STARFIGH | |
| 41 | } m_gfxbank_type; | |
| 42 | UINT8 m_gfxbank; | |
| 36 | 43 | |
| 37 | int m_text_dim; / | |
| 44 | int m_text_dim; // vertical size of the text layer (0 = no text layer) | |
| 38 | 45 | |
| 46 | // samples | |
| 47 | INT16 *m_samplebuf; | |
| 48 | int m_sample; | |
| 49 | int m_numsamples; | |
| 50 | ||
| 39 | 51 | #if TILEMAPS |
| 40 | 52 | tilemap_t *m_bg_tilemap; |
| 41 | 53 | int m_tiles; |
| r18594 | r18595 | |
| 45 | 57 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 46 | 58 | #endif |
| 47 | 59 | |
| 48 | INT16 *m_samplebuf; | |
| 49 | int m_sample; | |
| 50 | ||
| 51 | 60 | DECLARE_READ8_MEMBER(hardhead_protection_r); |
| 52 | 61 | DECLARE_WRITE8_MEMBER(hardhead_protection_w); |
| 53 | 62 | DECLARE_READ8_MEMBER(hardhead_ip_r); |
| r18594 | r18595 | |
| 65 | 74 | DECLARE_WRITE8_MEMBER(brickzn_rombank_w); |
| 66 | 75 | DECLARE_WRITE8_MEMBER(brickzn_enab_palram_w); |
| 67 | 76 | DECLARE_WRITE8_MEMBER(brickzn_disab_palram_w); |
| 77 | DECLARE_WRITE8_MEMBER(brickzn_pcm_w); | |
| 78 | DECLARE_WRITE8_MEMBER(brickzn_banked_paletteram_w); | |
| 68 | 79 | |
| 80 | // hardhea2 | |
| 69 | 81 | DECLARE_WRITE8_MEMBER(hardhea2_nmi_w); |
| 70 | 82 | DECLARE_WRITE8_MEMBER(hardhea2_flipscreen_w); |
| 71 | 83 | DECLARE_WRITE8_MEMBER(hardhea2_leds_w); |
| r18594 | r18595 | |
| 84 | 96 | DECLARE_READ8_MEMBER(starfigh_cheats_r); |
| 85 | 97 | DECLARE_WRITE8_MEMBER(starfigh_leds_w); |
| 86 | 98 | |
| 87 | DECLARE_WRITE8_MEMBER(sparkman_cmd_prot_w); | |
| 99 | // sparkman | |
| 100 | DECLARE_WRITE8_MEMBER(sparkman_rombank_latch_w); | |
| 101 | DECLARE_WRITE8_MEMBER(sparkman_rombank_w); | |
| 102 | DECLARE_WRITE8_MEMBER(sparkman_spritebank_latch_w); | |
| 103 | DECLARE_WRITE8_MEMBER(sparkman_spritebank_w); | |
| 104 | DECLARE_WRITE8_MEMBER(sparkman_write_disable_w); | |
| 88 | 105 | DECLARE_WRITE8_MEMBER(suna8_wram_w); |
| 89 | DECLARE_WRITE8_MEMBER(sparkman_flipscreen_w); | |
| 90 | DECLARE_WRITE8_MEMBER(sparkman_leds_w); | |
| 91 | 106 | DECLARE_WRITE8_MEMBER(sparkman_coin_counter_w); |
| 92 | DECLARE_WRITE8_MEMBER(sparkman_spritebank_w); | |
| 93 | DECLARE_WRITE8_MEMBER(sparkman_rombank_w); | |
| 94 | 107 | DECLARE_READ8_MEMBER(sparkman_c0a3_r); |
| 95 | DECLARE_WRITE8_MEMBER(sparkman_en_trash_w); | |
| 96 | DECLARE_WRITE8_MEMBER(brickzn_pcm_w); | |
| 97 | 108 | |
| 98 | 109 | DECLARE_READ8_MEMBER(banked_paletteram_r); |
| 99 | DECLARE_WRITE8_MEMBER( brickzn_banked_paletteram_w ); | |
| 100 | 110 | DECLARE_READ8_MEMBER(suna8_banked_spriteram_r); |
| 101 | 111 | DECLARE_WRITE8_MEMBER(suna8_spriteram_w); |
| 102 | 112 | DECLARE_WRITE8_MEMBER(suna8_banked_spriteram_w); |
| r18594 | r18595 | |
| 108 | 118 | DECLARE_DRIVER_INIT(brickzn); |
| 109 | 119 | DECLARE_DRIVER_INIT(hardhead); |
| 110 | 120 | DECLARE_DRIVER_INIT(suna8); |
| 121 | ||
| 122 | void suna8_vh_start_common(int text_dim, GFXBANK_TYPE_T gfxbank_type); | |
| 123 | DECLARE_VIDEO_START(suna8_textdim8); | |
| 111 | 124 | DECLARE_VIDEO_START(suna8_textdim12); |
| 112 | DECLARE_VIDEO_START(suna8_textdim8); | |
| 125 | DECLARE_VIDEO_START(suna8_sparkman); | |
| 126 | DECLARE_VIDEO_START(suna8_brickzn); | |
| 127 | DECLARE_VIDEO_START(suna8_starfigh); | |
| 128 | ||
| 113 | 129 | DECLARE_MACHINE_RESET(brickzn); |
| 114 | DECLARE_VIDEO_START(suna8_textdim0); | |
| 115 | DECLARE_VIDEO_START(suna8_textdim0_gfxbank); | |
| 116 | 130 | DECLARE_MACHINE_RESET(hardhea2); |
| 117 | 131 | UINT32 screen_update_suna8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 118 | 132 | TIMER_DEVICE_CALLBACK_MEMBER(brickzn_interrupt); |
| 119 | 133 | TIMER_DEVICE_CALLBACK_MEMBER(hardhea2_interrupt); |
| 134 | ||
| 135 | // samples | |
| 120 | 136 | DECLARE_WRITE8_MEMBER(suna8_play_samples_w); |
| 121 | 137 | DECLARE_WRITE8_MEMBER(rranger_play_samples_w); |
| 122 | 138 | DECLARE_WRITE8_MEMBER(suna8_samples_number_w); |
| 139 | void play_sample(int index); | |
| 123 | 140 | }; |
| 124 | 141 | |
| 125 | 142 | /*----------- defined in audio/suna8.c -----------*/ |
| r18594 | r18595 | |
|---|---|---|
| 91 | 91 | attr = m_spriteram[ 2 * tile_index + 1 ]; |
| 92 | 92 | } |
| 93 | 93 | SET_TILE_INFO_MEMBER( |
| 94 | | |
| 94 | m_page / 8, | |
| 95 | 95 | ( (attr & 0x03) << 8 ) + code + m_tiles*0x400, |
| 96 | 96 | (attr >> 2) & 0xf, |
| 97 | 97 | TILE_FLIPYX( (attr >> 6) & 3 )); |
| r18594 | r18595 | |
| 102 | 102 | READ8_MEMBER( suna8_state::banked_paletteram_r ) |
| 103 | 103 | { |
| 104 | 104 | offset += m_palettebank * 0x200; |
| 105 | return m_ | |
| 105 | return m_banked_paletteram[offset]; | |
| 106 | 106 | } |
| 107 | 107 | |
| 108 | 108 | READ8_MEMBER(suna8_state::suna8_banked_spriteram_r) |
| r18594 | r18595 | |
| 140 | 140 | UINT16 rgb; |
| 141 | 141 | |
| 142 | 142 | offset += m_palettebank * 0x200; |
| 143 | m_generic_paletteram_8[offset] = data; | |
| 144 | rgb = (m_generic_paletteram_8[offset&~1] << 8) + m_generic_paletteram_8[offset|1]; | |
| 143 | m_banked_paletteram[offset] = data; | |
| 144 | rgb = (m_banked_paletteram[offset&~1] << 8) + m_banked_paletteram[offset|1]; | |
| 145 | 145 | |
| 146 | 146 | if (m_prot2_prev == 0x3c && m_prot2 == 0x80) |
| 147 | 147 | { |
| r18594 | r18595 | |
| 179 | 179 | |
| 180 | 180 | |
| 181 | 181 | |
| 182 | ||
| 182 | void suna8_state::suna8_vh_start_common(int text_dim, GFXBANK_TYPE_T gfxbank_type) | |
| 183 | 183 | { |
| 184 | suna8_state *state = machine.driver_data<suna8_state>(); | |
| 184 | m_text_dim = text_dim; | |
| 185 | m_spritebank = 0; | |
| 186 | m_gfxbank = 0; | |
| 187 | m_gfxbank_type = gfxbank_type; | |
| 188 | m_palettebank = 0; | |
| 185 | 189 | |
| 186 | state->m_text_dim = dim; | |
| 187 | state->m_spritebank = 0; | |
| 188 | state->m_gfxbank = 0; | |
| 189 | state->m_use_gfxbank = 0; | |
| 190 | state->m_palettebank = 0; | |
| 190 | if (!m_text_dim) | |
| 191 | { | |
| 192 | m_banked_paletteram.allocate(0x200 * 2); | |
| 191 | 193 | |
| 192 | if (!state->m_text_dim) | |
| 193 | { | |
| 194 | state->m_generic_paletteram_8.allocate(0x200 * 2); | |
| 195 | state->m_spriteram.allocate(0x2000 * 2); | |
| 196 | memset(state->m_spriteram,0,0x2000 * 2); // helps debugging | |
| 194 | m_spriteram.allocate(0x2000 * 2 * 2); // 2 RAM banks, sparkman has 2 "chips" | |
| 195 | memset(m_spriteram,0,0x2000 * 2 * 2); // helps debugging | |
| 197 | 196 | } |
| 198 | 197 | |
| 199 | 198 | #if TILEMAPS |
| 200 | | |
| 199 | m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(suna8_state::get_tile_info),this), TILEMAP_SCAN_COLS, | |
| 201 | 200 | |
| 202 | 8, 8, 0x20*( | |
| 201 | 8, 8, 0x20*(m_text_dim ? 4 : 16), 0x20); | |
| 203 | 202 | |
| 204 | | |
| 203 | m_bg_tilemap->set_transparent_pen(15); | |
| 205 | 204 | #endif |
| 206 | 205 | } |
| 207 | 206 | |
| 208 | VIDEO_START_MEMBER(suna8_state,suna8_textdim0) { suna8_vh_start_common(machine(), 0); } | |
| 209 | VIDEO_START_MEMBER(suna8_state,suna8_textdim8) { suna8_vh_start_common(machine(), 8); } | |
| 210 | VIDEO_START_MEMBER(suna8_state,suna8_textdim12) { suna8_vh_start_common(machine(), 12); } | |
| 207 | VIDEO_START_MEMBER(suna8_state,suna8_textdim8) { suna8_vh_start_common( 8, GFXBANK_TYPE_SPARKMAN); } | |
| 208 | VIDEO_START_MEMBER(suna8_state,suna8_textdim12) { suna8_vh_start_common( 12, GFXBANK_TYPE_SPARKMAN); } | |
| 209 | VIDEO_START_MEMBER(suna8_state,suna8_sparkman) { suna8_vh_start_common( 0, GFXBANK_TYPE_SPARKMAN); } | |
| 210 | VIDEO_START_MEMBER(suna8_state,suna8_brickzn) { suna8_vh_start_common( 0, GFXBANK_TYPE_BRICKZN); } | |
| 211 | VIDEO_START_MEMBER(suna8_state,suna8_starfigh) { suna8_vh_start_common( 0, GFXBANK_TYPE_STARFIGH); } | |
| 211 | 212 | |
| 212 | VIDEO_START_MEMBER(suna8_state,suna8_textdim0_gfxbank) { suna8_vh_start_common(machine(), 0); m_use_gfxbank = 1; } | |
| 213 | ||
| 214 | 213 | /*************************************************************************** |
| 215 | 214 | |
| 216 | 215 | |
| r18594 | r18595 | |
| 219 | 218 | |
| 220 | 219 | ***************************************************************************/ |
| 221 | 220 | |
| 222 | static void draw_normal_sprites(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect) | |
| 221 | static void draw_normal_sprites(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect, int which) | |
| 223 | 222 | { |
| 224 | 223 | suna8_state *state = machine.driver_data<suna8_state>(); |
| 225 | UINT8 *spriteram = state->m_spriteram; | |
| 224 | ||
| 225 | UINT8 *spriteram = state->m_spriteram + which * 0x2000 * 2; | |
| 226 | ||
| 226 | 227 | int i; |
| 227 | 228 | int mx = 0; // multisprite x counter |
| 228 | 229 | |
| r18594 | r18595 | |
| 290 | 291 | flipy = bank & 0x10; |
| 291 | 292 | srcy = (((bank & 0x80)>>4) + (bank & 0x04) + ((~bank >> 4)&2)) * 2; |
| 292 | 293 | srcpg = ((code >> 4) & 3) + 4; |
| 293 | gfxbank = (bank & 0x3) + 4; // brickzn: 06,a6,a2,b2->6 | |
| 294 | if (state->m_use_gfxbank) | |
| 294 | gfxbank = (bank & 0x3); | |
| 295 | switch (state->m_gfxbank_type) | |
| 295 | 296 | { |
| 296 | // starfigh: boss 2 head, should be p7 g7 x8/c y4: | |
| 297 | // 67 74 88 03 | |
| 298 | // 67 76 ac 03 | |
| 299 | // starfigh: boss 2 chainguns should be p6 g7: | |
| 300 | // a8 68/a/c/e 62 23 | |
| 301 | // 48 68/a/c/e 62 23 | |
| 302 | // starfigh: player, p4 g0: | |
| 303 | // 64 40 d3 20 | |
| 304 | // starfigh: title star, p5 g1 / p7 g0: | |
| 305 | // 70 56/8/a/c 0e 01 (gfxhi=1) | |
| 306 | // 6f 78/a/c/e 0f 04 "" | |
| 307 | gfxbank = (bank & 0x3); | |
| 308 | if (gfxbank == 3) gfxbank += state->m_gfxbank; | |
| 297 | case suna8_state::GFXBANK_TYPE_SPARKMAN: | |
| 298 | break; | |
| 299 | ||
| 300 | case suna8_state::GFXBANK_TYPE_BRICKZN: | |
| 301 | gfxbank += 4; // brickzn: 06,a6,a2,b2->6 | |
| 302 | break; | |
| 303 | ||
| 304 | case suna8_state::GFXBANK_TYPE_STARFIGH: | |
| 305 | // starfigh: boss 2 head, should be p7 g7 x8/c y4: | |
| 306 | // 67 74 88 03 | |
| 307 | // 67 76 ac 03 | |
| 308 | // starfigh: boss 2 chainguns should be p6 g7: | |
| 309 | // a8 68/a/c/e 62 23 | |
| 310 | // 48 68/a/c/e 62 23 | |
| 311 | // starfigh: player, p4 g0: | |
| 312 | // 64 40 d3 20 | |
| 313 | // starfigh: title star, p5 g1 / p7 g0: | |
| 314 | // 70 56/8/a/c 0e 01 (gfxhi=1) | |
| 315 | // 6f 78/a/c/e 0f 04 "" | |
| 316 | if (gfxbank == 3) | |
| 317 | gfxbank += state->m_gfxbank; | |
| 318 | break; | |
| 309 | 319 | } |
| 310 | 320 | colorbank = (bank & 8) >> 3; |
| 311 | 321 | break; |
| r18594 | r18595 | |
| 318 | 328 | srcy = (((bank & 0x80)>>4) + (bank & 0x04) + ((~bank >> 4)&3)) * 2; |
| 319 | 329 | srcpg = (code >> 4) & 3; |
| 320 | 330 | gfxbank = bank & 0x03; |
| 321 | i | |
| 331 | switch (state->m_gfxbank_type) | |
| 322 | 332 | { |
| 323 | // starfigh: boss 2 tail, p2 g7: | |
| 324 | // 61 20 1b 27 | |
| 325 | if (gfxbank == 3) gfxbank += state->m_gfxbank; | |
| 333 | case suna8_state::GFXBANK_TYPE_STARFIGH: | |
| 334 | // starfigh: boss 2 tail, p2 g7: | |
| 335 | // 61 20 1b 27 | |
| 336 | if (gfxbank == 3) | |
| 337 | gfxbank += state->m_gfxbank; | |
| 338 | break; | |
| 339 | ||
| 340 | default: | |
| 341 | break; | |
| 326 | 342 | } |
| 327 | 343 | break; |
| 328 | 344 | } |
| r18594 | r18595 | |
| 364 | 380 | sy = max_y - sy; tile_flipy = !tile_flipy; |
| 365 | 381 | } |
| 366 | 382 | |
| 367 | drawgfx_transpen( bitmap,cliprect,machine.gfx[ | |
| 383 | drawgfx_transpen( bitmap, cliprect, machine.gfx[which], | |
| 368 | 384 | tile + (attr & 0x3)*0x100 + gfxbank, |
| 369 | 385 | (((attr >> 2) & 0xf) | colorbank) + 0x10 * state->m_palettebank, // hardhea2 player2 |
| 370 | 386 | tile_flipx, tile_flipy, |
| 371 | sx, sy, | |
| 387 | sx, sy, 0xf); | |
| 372 | 388 | } |
| 373 | 389 | } |
| 374 | 390 | |
| r18594 | r18595 | |
| 384 | 400 | int max_x = machine.primary_screen->width() - 8; |
| 385 | 401 | int max_y = machine.primary_screen->height() - 8; |
| 386 | 402 | |
| 387 | /* Earlier games only */ | |
| 388 | if (!state->m_text_dim) return; | |
| 389 | ||
| 390 | 403 | for (i = 0x1900; i < 0x19ff; i += 4) |
| 391 | 404 | { |
| 392 | 405 | int srcpg, srcx,srcy, dimx,dimy, tx, ty; |
| r18594 | r18595 | |
| 436 | 449 | tile + (attr & 0x3)*0x100 + bank, |
| 437 | 450 | (attr >> 2) & 0xf, |
| 438 | 451 | flipx, flipy, |
| 439 | sx, sy, | |
| 452 | sx, sy, 0xf); | |
| 440 | 453 | } |
| 441 | 454 | } |
| 442 | 455 | |
| r18594 | r18595 | |
| 462 | 475 | { |
| 463 | 476 | int max_tiles = memregion("gfx1")->bytes() / (0x400 * 0x20); |
| 464 | 477 | |
| 465 | if (machine().input().code_pressed_once(KEYCODE_Q)) { m_page--; machine().tilemap().mark_all_dirty(); } | |
| 466 | if (machine().input().code_pressed_once(KEYCODE_W)) { m_page++; machine().tilemap().mark_all_dirty(); } | |
| 478 | if (machine().input().code_pressed_once(KEYCODE_Q)) { m_page--; machine().tilemap().mark_all_dirty(); } | |
| 479 | if (machine().input().code_pressed_once(KEYCODE_W)) { m_page++; machine().tilemap().mark_all_dirty(); } | |
| 467 | 480 | if (machine().input().code_pressed_once(KEYCODE_E)) { m_tiles--; machine().tilemap().mark_all_dirty(); } |
| 468 | 481 | if (machine().input().code_pressed_once(KEYCODE_R)) { m_tiles++; machine().tilemap().mark_all_dirty(); } |
| 469 | 482 | if (machine().input().code_pressed_once(KEYCODE_A)) { m_trombank--; machine().tilemap().mark_all_dirty(); } |
| 470 | 483 | if (machine().input().code_pressed_once(KEYCODE_S)) { m_trombank++; machine().tilemap().mark_all_dirty(); } |
| 471 | 484 | |
| 472 | m_rombank &= 0xf; | |
| 473 | m_page &= m_text_dim ? 3 : 7; | |
| 474 | m_tiles %= max_tiles; | |
| 485 | m_trombank &= 0xf; | |
| 486 | m_page &= m_text_dim ? 3 : (machine().gfx[1] ? 15 : 7); | |
| 487 | m_tiles %= max_tiles; | |
| 475 | 488 | if (m_tiles < 0) m_tiles += max_tiles; |
| 476 | 489 | |
| 477 | 490 | m_bg_tilemap->set_scrollx(0, 0x100 * m_page); |
| r18594 | r18595 | |
| 487 | 500 | #endif |
| 488 | 501 | #endif |
| 489 | 502 | { |
| 490 | draw_normal_sprites(machine() ,bitmap,cliprect); | |
| 491 | draw_text_sprites(machine(), bitmap,cliprect); | |
| 503 | // Normal sprites | |
| 504 | draw_normal_sprites(machine(), bitmap,cliprect, 0); | |
| 505 | ||
| 506 | // More normal sprites (second sprite "chip" in sparkman) | |
| 507 | if (machine().gfx[1]) | |
| 508 | draw_normal_sprites(machine(), bitmap,cliprect, 1); | |
| 509 | ||
| 510 | // Text sprites (earlier games only) | |
| 511 | if (m_text_dim) | |
| 512 | draw_text_sprites(machine(), bitmap,cliprect); | |
| 492 | 513 | } |
| 493 | 514 | return 0; |
| 494 | 515 | } |
| r18594 | r18595 | |
|---|---|---|
| 14 | 14 | Year + Game Game PCB Epoxy CPU Samples Notes |
| 15 | 15 | -------------------------------------------------------------------------------------- |
| 16 | 16 | 88 Hard Head KRB-14 60138-0083 S562008 Yes Encryption + Protection |
| 17 | 88 Rough Ranger K030087 ? S562008 Yes | |
| 18 | 89 Spark Man KRB-16 60136-081 T568009 Yes Not Working (Protection) | |
| 17 | 88 Rough Ranger K030087 ? S562008 Yes Not Encrypted | |
| 18 | 89 Spark Man KRB-16 60136-081 T568009 Yes Encryption + Protection | |
| 19 | 19 | 90 Star Fighter KRB-17 60484-0082 T568009 Yes Encryption + Protection |
| 20 | 20 | 91 Hard Head 2 ? ? T568009 - Encryption + Protection |
| 21 | 21 | 92 Brick Zone ? ? Yes - Encryption + Protection |
| r18594 | r18595 | |
| 23 | 23 | |
| 24 | 24 | Notes: |
| 25 | 25 | |
| 26 | - sparkman: to get past the roms test screen put a watchpoint at ca40. | |
| 27 | When hit, clear ca41. Most of the garbage you'll see is probably due | |
| 28 | to imperfect graphics emulation (e.g. gfx banking) than protection. | |
| 29 | ||
| 30 | 26 | - hardhea2: in test mode press P1&P2 button 2 to see a picture of each level |
| 31 | 27 | |
| 32 | 28 | ***************************************************************************/ |
| r18594 | r18595 | |
| 402 | 398 | |
| 403 | 399 | /* Address lines scrambling */ |
| 404 | 400 | memcpy(decrypt, RAM, size); |
| 405 | for (i = 0; i < 0x | |
| 401 | for (i = 0; i < 0x50000; i++) | |
| 406 | 402 | { |
| 407 | static const UINT8 swaptable[ | |
| 403 | static const UINT8 swaptable[0x50] = | |
| 408 | 404 | { |
| 409 | 1,1,1,1,0,0,1,1 | |
| 405 | 1,1,1,1, 0,0,1,1, 0,0,0,0, 0,0,0,0, // 8000-ffff not used | |
| 406 | 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, | |
| 407 | 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, | |
| 408 | 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, | |
| 409 | 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0 // bank $0e, $8xxx, $9xxx (hand in title screen) | |
| 410 | 410 | }; |
| 411 | 411 | int addr = i; |
| 412 | 412 | |
| 413 | if (swaptable[(i & 0x7000) >> 12]) | |
| 414 | addr = BITSWAP16(addr, 15,14,13,12,11,10,9,7,8,6,5,4,3,2,1,0); | |
| 413 | if (swaptable[(i & 0xff000) >> 12]) | |
| 414 | addr = BITSWAP24(addr, 23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,7,8,6,5,4,3,2,1,0); | |
| 415 | 415 | |
| 416 | 416 | RAM[i] = decrypt[addr]; |
| 417 | 417 | } |
| r18594 | r18595 | |
| 449 | 449 | RAM[i] = BITSWAP8(RAM[i], 5,6,7,4,3,2,1,0) ^ 0x44; |
| 450 | 450 | } |
| 451 | 451 | |
| 452 | // !!!!!! PATCHES !!!!!! | |
| 453 | ||
| 454 | // c083 bit 7 protection | |
| 455 | decrypt[0x0ee0] = 0x00; | |
| 456 | decrypt[0x0ee1] = 0x00; | |
| 457 | decrypt[0x0ee2] = 0x00; | |
| 458 | ||
| 459 | // c083 bit 7 protection | |
| 460 | decrypt[0x1ac3] = 0x00; | |
| 461 | decrypt[0x1ac4] = 0x00; | |
| 462 | decrypt[0x1ac5] = 0x00; | |
| 463 | ||
| 452 | 464 | machine().root_device().membank("bank1")->configure_entries(0, 16, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000); |
| 453 | 465 | } |
| 454 | 466 | |
| r18594 | r18595 | |
| 618 | 630 | AM_RANGE(0xc280, 0xc280) AM_READ_PORT("DSW1") // DSW 1 |
| 619 | 631 | AM_RANGE(0xc2c0, 0xc2c0) AM_READ_PORT("DSW2") // DSW 2 |
| 620 | 632 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram") // Palette |
| 621 | AM_RANGE(0xc800, 0xdfff) AM_RAM // RAM | |
| 622 | AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(suna8_spriteram_w) AM_SHARE("spriteram") // Sprites | |
| 633 | AM_RANGE(0xc800, 0xdfff) AM_RAM // Work RAM | |
| 634 | AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(suna8_spriteram_w) AM_SHARE("spriteram") // Sprites | |
| 623 | 635 | ADDRESS_MAP_END |
| 624 | 636 | |
| 625 | 637 | |
| r18594 | r18595 | |
| 792 | 804 | // c144 reads? |
| 793 | 805 | // c14a reads? |
| 794 | 806 | |
| 795 | AM_RANGE(0xc600, 0xc7ff) AM_READWRITE(banked_paletteram_r, brickzn_banked_paletteram_w) // Palette (Banked) | |
| 796 | AM_RANGE(0xc800, 0xdfff) AM_RAM AM_SHARE("wram") // RAM | |
| 807 | AM_RANGE(0xc600, 0xc7ff) AM_READWRITE(banked_paletteram_r, brickzn_banked_paletteram_w) AM_SHARE("paletteram") // Palette (Banked) | |
| 808 | AM_RANGE(0xc800, 0xdfff) AM_RAM AM_SHARE("wram") // Work RAM | |
| 797 | 809 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) |
| 798 | 810 | ADDRESS_MAP_END |
| 799 | 811 | |
| r18594 | r18595 | |
| 912 | 924 | AM_RANGE(0xc533, 0xc533) AM_WRITE(hardhea2_rambank_0_w ) |
| 913 | 925 | // Protection *** |
| 914 | 926 | |
| 915 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram" ) // Palette (Banked??) | |
| 916 | AM_RANGE(0xc800, 0xdfff) AM_RAMBANK("bank2") // RAM (Banked?) | |
| 917 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) | |
| 927 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram") // Palette | |
| 928 | AM_RANGE(0xc800, 0xdfff) AM_RAMBANK("bank2") // Work RAM (Banked) | |
| 929 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) | |
| 918 | 930 | ADDRESS_MAP_END |
| 919 | 931 | |
| 920 | 932 | |
| r18594 | r18595 | |
| 923 | 935 | ***************************************************************************/ |
| 924 | 936 | |
| 925 | 937 | /* |
| 926 | C280-C2FF: 7--- ---- | |
| 927 | -6-- ---- Disable Sound Latch Writes? | |
| 928 | --54 ---- | |
| 938 | C280-C2FF: 76-- ---- | |
| 939 | --5- ---- Disable Sound Latch Writes | |
| 940 | ---4 ---- | |
| 929 | 941 | ---- 3210 ROM Bank (Latched) |
| 930 | 942 | */ |
| 931 | 943 | WRITE8_MEMBER(suna8_state::starfigh_rombank_latch_w) |
| r18594 | r18595 | |
| 1016 | 1028 | AM_RANGE(0xc500, 0xc500) AM_WRITE(starfigh_sound_latch_w ) // To Sound CPU (can be disabled) |
| 1017 | 1029 | // (c522 + R & 0x1f) write? |
| 1018 | 1030 | |
| 1019 | AM_RANGE(0xc600, 0xc7ff) AM_READWRITE(banked_paletteram_r, paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram" ) // Palette (Banked??) | |
| 1020 | AM_RANGE(0xc800, 0xdfff) AM_RAM // RAM | |
| 1021 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) | |
| 1031 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram") // Palette | |
| 1032 | AM_RANGE(0xc800, 0xdfff) AM_RAM // Work RAM | |
| 1033 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) | |
| 1022 | 1034 | ADDRESS_MAP_END |
| 1023 | 1035 | |
| 1024 | 1036 | |
| r18594 | r18595 | |
| 1027 | 1039 | ***************************************************************************/ |
| 1028 | 1040 | |
| 1029 | 1041 | /* |
| 1030 | Thrash protection code snippet: | |
| 1031 | ||
| 1032 | 0B48: 3E 81 ld a,$81 | |
| 1033 | 0B4A: 32 BF C3 ld ($C3BF),a | |
| 1034 | 0B4D: 21 10 D0 ld hl,$C808 | |
| 1035 | 0B50: 11 11 D0 ld de,$C809 | |
| 1036 | 0B53: ED 5F ld a,r ;check this, pretty pointless | |
| 1037 | 0B55: 77 ld (hl),a | |
| 1038 | 0B56: 01 80 00 ld bc,$0080 | |
| 1039 | 0B59: ED B0 ldir | |
| 1040 | 0B5B: 3E 18 ld a,$18 | |
| 1041 | 0B5D: 32 C4 C3 ld ($C3C4),a | |
| 1042 | 0B60: 21 67 13 ld hl,$0B67 | |
| 1043 | 0B63: 22 00 D0 ld ($C800),hl | |
| 1044 | 0B66: C9 ret | |
| 1045 | ||
| 1042 | C200: 765432-- | |
| 1043 | ------1- Sprite RAM Bank (Inverted by Sprite Bank Latch) | |
| 1044 | -------0 Sprite "chip" "" | |
| 1046 | 1045 | */ |
| 1046 | WRITE8_MEMBER(suna8_state::sparkman_spritebank_w) | |
| 1047 | { | |
| 1048 | m_spritebank = ((data >> 1) & 0x01) | ((data << 1) & 0x02); | |
| 1049 | if ((m_spritebank_latch >> 1) & 0x01) | |
| 1050 | m_spritebank ^= 0x03; | |
| 1047 | 1051 | |
| 1048 | /* This is a command-based protection. */ | |
| 1049 | WRITE8_MEMBER(suna8_state::sparkman_cmd_prot_w) | |
| 1050 | { | |
| 1051 | switch(data) | |
| 1052 | { | |
| 1053 | case 0xa6: m_nmi_enable = 1; break; | |
| 1054 | case 0x00: m_nmi_enable = 0; break; | |
| 1055 | case 0x18: m_trash_prot = 0; break; | |
| 1056 | case 0xce: m_trash_prot = 0; break; | |
| 1057 | case 0x81: m_trash_prot = 1; break; | |
| 1058 | case 0x99: m_trash_prot = 1; break; | |
| 1059 | case 0x54: m_spritebank = 1; break; | |
| 1060 | default: logerror("CPU #0 - PC %04X: unknown protection command: %02X\n",space.device().safe_pc(),data); | |
| 1061 | } | |
| 1052 | logerror("CPU #0 - PC %04X: spritebank = %02X (%X)\n",space.device().safe_pc(),data,m_spritebank); | |
| 1062 | 1053 | } |
| 1063 | 1054 | |
| 1064 | WRITE8_MEMBER(suna8_state::suna8_wram_w) | |
| 1055 | /* | |
| 1056 | C280: 76-- ---- | |
| 1057 | --5- ---- Disable Sound Latch Writes | |
| 1058 | ---4 ---- | |
| 1059 | ---- 3210 ROM Bank (Latched) | |
| 1060 | */ | |
| 1061 | WRITE8_MEMBER(suna8_state::sparkman_rombank_latch_w) | |
| 1065 | 1062 | { |
| 1066 | if (!m_trash_prot) | |
| 1067 | m_wram[offset] = data; | |
| 1063 | m_rombank_latch = data; | |
| 1064 | logerror("CPU #0 - PC %04X: rom bank latch %04X = %02X\n",space.device().safe_pc(), 0xc280 + offset, data); | |
| 1068 | 1065 | } |
| 1069 | 1066 | |
| 1070 | 1067 | /* |
| 1071 | 7654 321- | |
| 1072 | ---- ---0 Flip Screen | |
| 1068 | C300: 76-- ---- | |
| 1069 | --5- ---- Invert Sprite Chip and Bank | |
| 1070 | ---4 ---- Almost Always On? | |
| 1071 | ---- 321- | |
| 1072 | ---- ---0 Flip Screen | |
| 1073 | 1073 | */ |
| 1074 | WRITE8_MEMBER(suna8_state::sparkman_ | |
| 1074 | WRITE8_MEMBER(suna8_state::sparkman_spritebank_latch_w) | |
| 1075 | 1075 | { |
| 1076 | 1076 | flip_screen_set(data & 0x01); |
| 1077 | //if (data & ~0x01) logerror("CPU #0 - PC %04X: unknown flipscreen bits: %02X\n",space.device().safe_pc(),data); | |
| 1077 | m_spritebank_latch = (data >> 4) & 0x03; | |
| 1078 | logerror("CPU #0 - PC %04X: spritebank latch = %02X\n",space.device().safe_pc(),data); | |
| 1078 | 1079 | } |
| 1079 | 1080 | |
| 1080 | WRITE8_MEMBER(suna8_state::sparkman_leds_w) | |
| 1081 | /* | |
| 1082 | C380: 76------ | |
| 1083 | --5----- NMI Enable | |
| 1084 | ---4321- | |
| 1085 | -------0 Work RAM Writes Disable | |
| 1086 | */ | |
| 1087 | WRITE8_MEMBER(suna8_state::sparkman_write_disable_w) | |
| 1081 | 1088 | { |
| 1082 | set_led_status(machine(), 0, data & 0x01); | |
| 1083 | set_led_status(machine(), 1, data & 0x02); | |
| 1084 | //if (data & ~0x03) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",space.device().safe_pc(),data); | |
| 1089 | m_write_disable = (data >> 0) & 1; // bit 0 = disable RAM writes. See code at b48, d4d | |
| 1090 | m_nmi_enable = (data >> 5) & 1; // see code at 66 | |
| 1091 | if (data & ~0x21) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",space.device().safe_pc(),data); | |
| 1085 | 1092 | } |
| 1086 | 1093 | |
| 1087 | WRITE8_MEMBER(suna8_state::sparkman_coin_counter_w) | |
| 1094 | // RAM writes can be disabled | |
| 1095 | WRITE8_MEMBER(suna8_state::suna8_wram_w) | |
| 1088 | 1096 | { |
| 1089 | coin_counter_w(machine(), 0, data & 0x01); | |
| 1097 | if (!m_write_disable) | |
| 1098 | m_wram[offset] = data; | |
| 1090 | 1099 | } |
| 1091 | 1100 | |
| 1092 | 1101 | /* |
| 1093 | 7654 32-- | |
| 1094 | ---- --1- Sprite RAM Bank | |
| 1095 | ---- ---0 Sprite RAM Bank? | |
| 1096 | */ | |
| 1097 | WRITE8_MEMBER(suna8_state::sparkman_spritebank_w) | |
| 1098 | { | |
| 1099 | if(data == 0xf7) //??? | |
| 1100 | m_spritebank = 0; | |
| 1101 | else | |
| 1102 | m_spritebank = (data) & 1; | |
| 1103 | //if (data & ~0x02) logerror("CPU #0 - PC %04X: unknown spritebank bits: %02X\n",space.device().safe_pc(),data); | |
| 1104 | } | |
| 1102 | C400: 7654 32-- | |
| 1103 | ---- --1- Start 2 Led | |
| 1104 | ---- ---0 Start 1 Led | |
| 1105 | 1105 | |
| 1106 | /* | |
| 1107 | 7654 ---- | |
| 1108 | ---- 3210 ROM Bank | |
| 1106 | Writes to C400 also set ROM bank from latch | |
| 1109 | 1107 | */ |
| 1110 | 1108 | WRITE8_MEMBER(suna8_state::sparkman_rombank_w) |
| 1111 | 1109 | { |
| 1112 | int bank = data & 0x0f; | |
| 1110 | set_led_status(machine(), 0, data & 0x01); | |
| 1111 | set_led_status(machine(), 1, data & 0x02); | |
| 1113 | 1112 | |
| 1114 | | |
| 1113 | if (data & ~0x03) logerror("CPU #0 - PC %04X: unknown leds bits: %02X\n",space.device().safe_pc(),data); | |
| 1115 | 1114 | |
| 1115 | // ROM Bank: | |
| 1116 | ||
| 1117 | int bank = m_rombank_latch & 0x0f; | |
| 1118 | ||
| 1116 | 1119 | membank("bank1")->set_entry(bank); |
| 1117 | m_rombank = data; | |
| 1120 | ||
| 1121 | m_rombank = m_rombank_latch; | |
| 1122 | logerror("CPU #0 - PC %04X: rom bank = %02X\n",space.device().safe_pc(), m_rombank); | |
| 1118 | 1123 | } |
| 1119 | 1124 | |
| 1120 | READ8_MEMBER(suna8_state::sparkman_c0a3_r) | |
| 1125 | /* | |
| 1126 | C480: 7654321- | |
| 1127 | -------0 Coin Counter | |
| 1128 | */ | |
| 1129 | WRITE8_MEMBER(suna8_state::sparkman_coin_counter_w) | |
| 1121 | 1130 | { |
| 1122 | | |
| 1131 | coin_counter_w(machine(), 0, data & 0x01); | |
| 1123 | 1132 | } |
| 1124 | 1133 | |
| 1125 | #if 0 | |
| 1126 | WRITE8_MEMBER(suna8_state::sparkman_en_trash_w) | |
| 1134 | // To do: implement this, affects the duration of copyright screen | |
| 1135 | READ8_MEMBER(suna8_state::sparkman_c0a3_r) | |
| 1127 | 1136 | { |
| 1128 | | |
| 1137 | return (machine().primary_screen->frame_number() & 1) ? 0x80 : 0; | |
| 1129 | 1138 | } |
| 1130 | #endif | |
| 1131 | 1139 | |
| 1132 | 1140 | static ADDRESS_MAP_START( sparkman_map, AS_PROGRAM, 8, suna8_state ) |
| 1133 | AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM | |
| 1134 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM | |
| 1135 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("P1") // P1 (Inputs) | |
| 1136 | AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P2") // P2 | |
| 1137 | AM_RANGE(0xc002, 0xc002) AM_READ_PORT("DSW1") // DSW 1 | |
| 1138 | AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW2") // DSW 2 | |
| 1139 | AM_RANGE(0xc080, 0xc080) AM_READ_PORT("BUTTONS") // Buttons | |
| 1140 | AM_RANGE(0xc0a3, 0xc0a3) AM_READ(sparkman_c0a3_r ) // ??? | |
| 1141 | AM_RANGE(0xc200, 0xc200) AM_WRITE(sparkman_spritebank_w ) // Sprite RAM Bank | |
| 1142 | AM_RANGE(0xc280, 0xc280) AM_WRITE(sparkman_rombank_w ) // ROM Bank (?mirrored up to c2ff?) | |
| 1143 | AM_RANGE(0xc300, 0xc300) AM_WRITE(sparkman_flipscreen_w ) // Flip Screen | |
| 1144 | AM_RANGE(0xc380, 0xc3ff) AM_WRITE(sparkman_cmd_prot_w ) // Protection | |
| 1145 | AM_RANGE(0xc400, 0xc400) AM_WRITE(sparkman_leds_w ) // Leds | |
| 1146 | AM_RANGE(0xc480, 0xc480) AM_WRITE(sparkman_coin_counter_w ) // Coin Counter | |
| 1147 | AM_RANGE(0xc500, 0xc500) AM_WRITE(soundlatch_byte_w ) // To Sound CPU | |
| 1148 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram" ) // Palette (Banked??) | |
| 1149 | AM_RANGE(0xc800, 0xdfff) AM_RAM_WRITE(suna8_wram_w) AM_SHARE("wram") // RAM | |
| 1141 | AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM | |
| 1142 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM | |
| 1143 | ||
| 1144 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("P1") // P1 (Inputs) | |
| 1145 | AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P2") // P2 | |
| 1146 | AM_RANGE(0xc002, 0xc002) AM_READ_PORT("DSW1") // DSW 1 | |
| 1147 | AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW2") // DSW 2 | |
| 1148 | AM_RANGE(0xc080, 0xc080) AM_READ_PORT("BUTTONS") // Buttons | |
| 1149 | AM_RANGE(0xc0a3, 0xc0a3) AM_READ(sparkman_c0a3_r ) // ??? | |
| 1150 | ||
| 1151 | AM_RANGE(0xc200, 0xc27f) AM_WRITE(sparkman_spritebank_w ) // Sprite RAM Bank | |
| 1152 | AM_RANGE(0xc280, 0xc2ff) AM_WRITE(sparkman_rombank_latch_w ) // ROM Bank Latch | |
| 1153 | AM_RANGE(0xc300, 0xc37f) AM_WRITE(sparkman_spritebank_latch_w ) // Sprite RAM Bank Latch (Invert) + Flip Screen | |
| 1154 | AM_RANGE(0xc380, 0xc3ff) AM_WRITE(sparkman_write_disable_w ) // Work RAM Writes Disable + NMI Enable | |
| 1155 | AM_RANGE(0xc400, 0xc47f) AM_WRITE(sparkman_rombank_w ) // ROM Bank + Leds | |
| 1156 | AM_RANGE(0xc480, 0xc480) AM_WRITE(sparkman_coin_counter_w ) // Coin Counter | |
| 1157 | AM_RANGE(0xc500, 0xc57f) AM_WRITE(starfigh_sound_latch_w ) // To Sound CPU (can be disabled) | |
| 1158 | ||
| 1159 | AM_RANGE(0xc600, 0xc7ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram") // Palette | |
| 1160 | AM_RANGE(0xc800, 0xdfff) AM_RAM_WRITE(suna8_wram_w) AM_SHARE("wram") // RAM | |
| 1150 | 1161 | AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) |
| 1151 | 1162 | ADDRESS_MAP_END |
| 1152 | 1163 | |
| r18594 | r18595 | |
| 1701 | 1712 | PORT_DIPSETTING( 0x00, "5" ) |
| 1702 | 1713 | |
| 1703 | 1714 | PORT_START("BUTTONS") // Buttons - $c080 |
| 1704 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) | |
| 1705 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) | |
| 1706 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
| 1715 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // P1 bomb | |
| 1716 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // P2 bomb | |
| 1717 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ? | |
| 1707 | 1718 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1708 | 1719 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1709 | 1720 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1710 | 1721 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1711 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_ | |
| 1722 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) // protection | |
| 1712 | 1723 | |
| 1713 | 1724 | INPUT_PORTS_END |
| 1714 | 1725 | |
| r18594 | r18595 | |
| 1737 | 1748 | GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16*2 ) // [0] Sprites (brickzn has 2 palette RAMs) |
| 1738 | 1749 | GFXDECODE_END |
| 1739 | 1750 | |
| 1751 | static GFXDECODE_START( suna8_x2 ) | |
| 1752 | GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 16*2 ) // [0] Sprites | |
| 1753 | GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 16*2 ) // [1] Sprites (sparkman has 2 sprite "chips") | |
| 1754 | GFXDECODE_END | |
| 1740 | 1755 | |
| 1741 | 1756 | |
| 1757 | ||
| 1742 | 1758 | /*************************************************************************** |
| 1743 | 1759 | |
| 1744 | 1760 | |
| r18594 | r18595 | |
| 1931 | 1947 | MCFG_GFXDECODE(suna8) |
| 1932 | 1948 | MCFG_PALETTE_LENGTH(256 * 2) // 2 x Palette RAM |
| 1933 | 1949 | |
| 1934 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_ | |
| 1950 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_brickzn) | |
| 1935 | 1951 | |
| 1936 | 1952 | /* sound hardware */ |
| 1937 | 1953 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r18594 | r18595 | |
| 2031 | 2047 | MCFG_GFXDECODE(suna8) |
| 2032 | 2048 | MCFG_PALETTE_LENGTH(256) |
| 2033 | 2049 | |
| 2034 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_t | |
| 2050 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_starfigh) | |
| 2035 | 2051 | |
| 2036 | 2052 | /* sound hardware */ |
| 2037 | 2053 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r18594 | r18595 | |
| 2075 | 2091 | MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) |
| 2076 | 2092 | MCFG_SCREEN_UPDATE_DRIVER(suna8_state, screen_update_suna8) |
| 2077 | 2093 | |
| 2078 | MCFG_GFXDECODE(suna8) | |
| 2094 | MCFG_GFXDECODE(suna8_x2) // 2 sprite "chips" | |
| 2079 | 2095 | MCFG_PALETTE_LENGTH(512) |
| 2080 | 2096 | |
| 2081 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_ | |
| 2097 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_sparkman) | |
| 2082 | 2098 | |
| 2083 | 2099 | /* sound hardware */ |
| 2084 | 2100 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r18594 | r18595 | |
| 2585 | 2601 | |
| 2586 | 2602 | ROM_START( sparkman ) |
| 2587 | 2603 | ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ |
| 2588 | ROM_LOAD( "sparkman.e7", 0x00000, 0x08000, CRC(d89c5780) SHA1(177f0ae21c00575a7eb078e86f3a790fc95211e4) ) /* "SPARK MAN MAIN PROGRAM 1989,8,12 K.H.T (SUNA ELECTRPNICS) V 2.0 SOULE KOREA" */ | |
| 2589 | ROM_LOAD( "sparkman.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) | |
| 2590 | ROM_LOAD( "sparkman.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) | |
| 2591 | ROM_LOAD( "sparkman.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) | |
| 2592 | ROM_LOAD( "sparkman.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) | |
| 2604 | ROM_LOAD( "sparkman.e7", 0x00000, 0x08000, CRC(d89c5780) SHA1(177f0ae21c00575a7eb078e86f3a790fc95211e4) ) // "SPARK MAN MAIN PROGRAM 1989,8,12 K.H.T (SUNA ELECTRPNICS) V 2.0 SOULE KOREA" | |
| 2605 | ROM_LOAD( "10.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) | |
| 2606 | ROM_LOAD( "12.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) | |
| 2607 | ROM_LOAD( "11.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) | |
| 2608 | ROM_LOAD( "13.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) | |
| 2593 | 2609 | |
| 2594 | 2610 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ |
| 2595 | ROM_LOAD( " | |
| 2611 | ROM_LOAD( "14.h11", 0x00000, 0x08000, CRC(06822f3d) SHA1(d30592cecbcd4dbf67e5a8d9c151d60b3232a54d) ) | |
| 2596 | 2612 | |
| 2597 | ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* Sprites */ | |
| 2598 | ROM_LOAD( "sparkman.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) | |
| 2599 | ROM_LOAD( "sparkman.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) | |
| 2600 | ROM_LOAD( "sparkman.r1", 0x20000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) | |
| 2601 | ROM_LOAD( "sparkman.u1", 0x30000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) | |
| 2613 | ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (0) */ | |
| 2614 | // bitplanes 0-1 | |
| 2615 | ROM_LOAD( "p3.u1", 0x00000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) // banks 00-03 | |
| 2616 | ROM_LOAD( "p2.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) // banks 04-07 | |
| 2617 | ROM_FILL( 0x20000, 0x10000, 0xFF ) | |
| 2618 | ROM_FILL( 0x30000, 0x10000, 0xFF ) | |
| 2619 | ROM_LOAD( "p1.r1", 0x40000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) // banks 10,11 | |
| 2620 | ROM_FILL( 0x50000, 0x10000, 0xFF ) | |
| 2621 | ROM_FILL( 0x60000, 0x10000, 0xFF ) | |
| 2622 | ROM_FILL( 0x70000, 0x10000, 0xFF ) | |
| 2623 | // bitplanes 2-3 | |
| 2624 | ROM_LOAD( "p6.u2", 0x80000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) | |
| 2625 | ROM_LOAD( "p5.t2", 0x90000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) | |
| 2626 | ROM_FILL( 0xa0000, 0x10000, 0xFF ) | |
| 2627 | ROM_FILL( 0xb0000, 0x10000, 0xFF ) | |
| 2628 | ROM_LOAD( "p4.r2", 0xc0000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) | |
| 2629 | ROM_FILL( 0xd0000, 0x10000, 0xFF ) | |
| 2630 | ROM_FILL( 0xe0000, 0x10000, 0xFF ) | |
| 2631 | ROM_FILL( 0xf0000, 0x10000, 0xFF ) | |
| 2602 | 2632 | |
| 2603 | ROM_LOAD( "sparkman.u6", 0x40000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) | |
| 2604 | ROM_LOAD( "sparkman.t2", 0x50000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) | |
| 2605 | ROM_LOAD( "sparkman.r2", 0x60000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) | |
| 2606 | ROM_LOAD( "sparkman.u2", 0x70000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) | |
| 2633 | ROM_REGION( 0x100000, "gfx2", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (1) */ | |
| 2634 | // bitplanes 0-1 | |
| 2635 | ROM_LOAD( "p7.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) // banks 00-03 (alt gfx) | |
| 2636 | ROM_COPY( "gfx2", 0x00000, 0x10000, 0x10000 ) | |
| 2637 | ROM_COPY( "gfx2", 0x00000, 0x20000, 0x10000 ) | |
| 2638 | ROM_COPY( "gfx2", 0x00000, 0x30000, 0x10000 ) | |
| 2639 | ROM_COPY( "gfx2", 0x00000, 0x40000, 0x10000 ) | |
| 2640 | ROM_COPY( "gfx2", 0x00000, 0x50000, 0x10000 ) | |
| 2641 | ROM_COPY( "gfx2", 0x00000, 0x60000, 0x10000 ) | |
| 2642 | ROM_COPY( "gfx2", 0x00000, 0x70000, 0x10000 ) | |
| 2643 | // bitplanes 2-3 | |
| 2644 | ROM_LOAD( "p8.u6", 0x80000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) | |
| 2645 | ROM_COPY( "gfx2", 0x80000, 0x90000, 0x10000 ) | |
| 2646 | ROM_COPY( "gfx2", 0x80000, 0xa0000, 0x10000 ) | |
| 2647 | ROM_COPY( "gfx2", 0x80000, 0xb0000, 0x10000 ) | |
| 2648 | ROM_COPY( "gfx2", 0x80000, 0xc0000, 0x10000 ) | |
| 2649 | ROM_COPY( "gfx2", 0x80000, 0xd0000, 0x10000 ) | |
| 2650 | ROM_COPY( "gfx2", 0x80000, 0xe0000, 0x10000 ) | |
| 2651 | ROM_COPY( "gfx2", 0x80000, 0xf0000, 0x10000 ) | |
| 2607 | 2652 | |
| 2608 | ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ | |
| 2609 | ROM_LOAD( "sparkman.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) | |
| 2610 | ||
| 2611 | ROM_REGION( 0x8000, "samples2", 0 ) /* Samples */ | |
| 2612 | ROM_LOAD( "sprkman.b11", 0x0000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) | |
| 2653 | ROM_REGION( 0x8000 * 2, "samples", 0 ) /* Samples */ | |
| 2654 | ROM_LOAD( "15.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) | |
| 2655 | ROM_LOAD( "16.b11", 0x8000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) | |
| 2613 | 2656 | ROM_END |
| 2614 | 2657 | |
| 2615 | ||
| 2616 | 2658 | ROM_START( sparkmana ) |
| 2617 | 2659 | ROM_REGION( 0x50000, "maincpu", 0 ) /* Main Z80 Code */ |
| 2618 | ROM_LOAD( "p9.7f", 0x00000, 0x08000, CRC(b114cb2b) SHA1(4f79bf65ef17147004f7a8d1d6a58dac0293cdc7) ) // sparkman.e7 99.972534% (9 bytes differ, version string is the same) | |
| 2619 | ROM_LOAD( "sparkman.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) | |
| 2620 | ROM_LOAD( "sparkman.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) | |
| 2621 | ROM_LOAD( "sparkman.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) | |
| 2622 | ROM_LOAD( "sparkman.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) | |
| 2660 | ROM_LOAD( "p9.7f", 0x00000, 0x08000, CRC(b114cb2b) SHA1(4f79bf65ef17147004f7a8d1d6a58dac0293cdc7) ) // sparkman.e7 99.972534% (9 bytes differ, version string is the same) | |
| 2661 | ROM_LOAD( "10.g7", 0x10000, 0x10000, CRC(48b4a31e) SHA1(771d1f1a2ce950ce2b661a4081471e98a7a7d53e) ) | |
| 2662 | ROM_LOAD( "12.g8", 0x20000, 0x10000, CRC(b8a4a557) SHA1(10251b49fb44fb1e7c71fde8fe9544df29d27346) ) | |
| 2663 | ROM_LOAD( "11.i7", 0x30000, 0x10000, CRC(f5f38e1f) SHA1(25f0abbac1298fad1f8e7202db05e48c3598bc88) ) | |
| 2664 | ROM_LOAD( "13.i8", 0x40000, 0x10000, CRC(e54eea25) SHA1(b8ea884ee1a24953b6406f2d1edf103700f542d2) ) | |
| 2623 | 2665 | |
| 2624 | 2666 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* Music Z80 Code */ |
| 2625 | ROM_LOAD( " | |
| 2667 | ROM_LOAD( "14.h11", 0x00000, 0x08000, CRC(06822f3d) SHA1(d30592cecbcd4dbf67e5a8d9c151d60b3232a54d) ) | |
| 2626 | 2668 | |
| 2627 | ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* Sprites */ | |
| 2628 | ROM_LOAD( "sparkman.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) | |
| 2629 | ROM_LOAD( "sparkman.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) | |
| 2630 | ROM_LOAD( "sparkman.r1", 0x20000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) | |
| 2631 | ROM_LOAD( "sparkman.u1", 0x30000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) | |
| 2669 | ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (0) */ | |
| 2670 | // bitplanes 0-1 | |
| 2671 | ROM_LOAD( "p3.u1", 0x00000, 0x10000, CRC(39dbd414) SHA1(03fe938ed1191329b6a2f7ed54c6ef69273998df) ) // banks 00-03 | |
| 2672 | ROM_LOAD( "p2.t1", 0x10000, 0x10000, CRC(2e474203) SHA1(a407126d92e529568129d5246f89d51330ff5d32) ) // banks 04-07 | |
| 2673 | ROM_FILL( 0x20000, 0x10000, 0xFF ) | |
| 2674 | ROM_FILL( 0x30000, 0x10000, 0xFF ) | |
| 2675 | ROM_LOAD( "p1.r1", 0x40000, 0x08000, CRC(7115cfe7) SHA1(05fde6279a1edc97e79b1ff3f72b2da400a6a409) ) // banks 10,11 | |
| 2676 | ROM_FILL( 0x50000, 0x10000, 0xFF ) | |
| 2677 | ROM_FILL( 0x60000, 0x10000, 0xFF ) | |
| 2678 | ROM_FILL( 0x70000, 0x10000, 0xFF ) | |
| 2679 | // bitplanes 2-3 | |
| 2680 | ROM_LOAD( "p6.u2", 0x80000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) | |
| 2681 | ROM_LOAD( "p5.t2", 0x90000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) | |
| 2682 | ROM_FILL( 0xa0000, 0x10000, 0xFF ) | |
| 2683 | ROM_FILL( 0xb0000, 0x10000, 0xFF ) | |
| 2684 | ROM_LOAD( "p4.r2", 0xc0000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) | |
| 2685 | ROM_FILL( 0xd0000, 0x10000, 0xFF ) | |
| 2686 | ROM_FILL( 0xe0000, 0x10000, 0xFF ) | |
| 2687 | ROM_FILL( 0xf0000, 0x10000, 0xFF ) | |
| 2632 | 2688 | |
| 2633 | ROM_LOAD( "sparkman.u6", 0x40000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) | |
| 2634 | ROM_LOAD( "sparkman.t2", 0x50000, 0x10000, CRC(0df5da2a) SHA1(abbd5ba22b30f17d203ecece7afafa0cbe78352c) ) | |
| 2635 | ROM_LOAD( "sparkman.r2", 0x60000, 0x08000, CRC(6904bde2) SHA1(c426fa0c29b1874c729b981467f219c422f863aa) ) | |
| 2636 | ROM_LOAD( "sparkman.u2", 0x70000, 0x10000, CRC(e6551db9) SHA1(bed2a9ba72895f3ba876b4e0a41c33ea8a3c5af2) ) | |
| 2689 | ROM_REGION( 0x100000, "gfx2", ROMREGION_INVERT | ROMREGION_ERASEFF) /* Sprites (1) */ | |
| 2690 | // bitplanes 0-1 | |
| 2691 | ROM_LOAD( "p7.u4", 0x00000, 0x10000, CRC(17c16ce4) SHA1(b4127e9aedab69193bef1d85e68003e225913417) ) // banks 00-03 (alt gfx) | |
| 2692 | ROM_COPY( "gfx2", 0x00000, 0x10000, 0x10000 ) | |
| 2693 | ROM_COPY( "gfx2", 0x00000, 0x20000, 0x10000 ) | |
| 2694 | ROM_COPY( "gfx2", 0x00000, 0x30000, 0x10000 ) | |
| 2695 | ROM_COPY( "gfx2", 0x00000, 0x40000, 0x10000 ) | |
| 2696 | ROM_COPY( "gfx2", 0x00000, 0x50000, 0x10000 ) | |
| 2697 | ROM_COPY( "gfx2", 0x00000, 0x60000, 0x10000 ) | |
| 2698 | ROM_COPY( "gfx2", 0x00000, 0x70000, 0x10000 ) | |
| 2699 | // bitplanes 2-3 | |
| 2700 | ROM_LOAD( "p8.u6", 0x80000, 0x10000, CRC(414222ea) SHA1(e05f0504c6e735c73027312a85cc55fc98728e53) ) | |
| 2701 | ROM_COPY( "gfx2", 0x80000, 0x90000, 0x10000 ) | |
| 2702 | ROM_COPY( "gfx2", 0x80000, 0xa0000, 0x10000 ) | |
| 2703 | ROM_COPY( "gfx2", 0x80000, 0xb0000, 0x10000 ) | |
| 2704 | ROM_COPY( "gfx2", 0x80000, 0xc0000, 0x10000 ) | |
| 2705 | ROM_COPY( "gfx2", 0x80000, 0xd0000, 0x10000 ) | |
| 2706 | ROM_COPY( "gfx2", 0x80000, 0xe0000, 0x10000 ) | |
| 2707 | ROM_COPY( "gfx2", 0x80000, 0xf0000, 0x10000 ) | |
| 2637 | 2708 | |
| 2638 | ROM_REGION( 0x8000, "samples", 0 ) /* Samples */ | |
| 2639 | ROM_LOAD( "sparkman.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) | |
| 2640 | ||
| 2641 | ROM_REGION( 0x8000, "samples2", 0 ) /* Samples */ | |
| 2642 | ROM_LOAD( "sprkman.b11", 0x0000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) | |
| 2709 | ROM_REGION( 0x8000 * 2, "samples", 0 ) /* Samples */ | |
| 2710 | ROM_LOAD( "15.b10", 0x0000, 0x8000, CRC(46c7d4d8) SHA1(99f38cc044390ee4646498667ad2bf536ce91e8f) ) | |
| 2711 | ROM_LOAD( "16.b11", 0x8000, 0x8000, CRC(d6823a62) SHA1(f8ce748aa7bdc9c95799dd111fd872717e46d416) ) | |
| 2643 | 2712 | ROM_END |
| 2644 | 2713 | |
| 2645 | 2714 | /*************************************************************************** |
| r18594 | r18595 | |
| 2655 | 2724 | machine().root_device().membank("bank1")->configure_entries(0, 16, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000); |
| 2656 | 2725 | } |
| 2657 | 2726 | |
| 2658 | // Working Games | |
| 2659 | 2727 | GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", 0 ) |
| 2660 | 2728 | GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0, unprotected, bootleg?)", 0) // protection is patched out in this. |
| 2661 | 2729 | GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg", "Super Ranger (bootleg)", 0 ) |
| r18594 | r18595 | |
| 2663 | 2731 | GAME( 1988, hardhead, 0, hardhead, hardhead, suna8_state, hardhead, ROT0, "SunA", "Hard Head", 0 ) |
| 2664 | 2732 | GAME( 1988, hardheadb, hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0, "bootleg", "Hard Head (bootleg)", 0 ) |
| 2665 | 2733 | GAME( 1988, pop_hh, hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0, "bootleg", "Popper (Hard Head bootleg)", 0 ) |
| 2734 | GAME( 1989, sparkman, 0, sparkman, sparkman, suna8_state, sparkman, ROT0, "SunA", "Spark Man (v2.0, set 1)", 0 ) | |
| 2735 | GAME( 1989, sparkmana, sparkman, sparkman, sparkman, suna8_state, sparkman, ROT0, "SunA", "Spark Man (v2.0, set 2)", 0 ) | |
| 2666 | 2736 | GAME( 1990, starfigh, 0, starfigh, starfigh, suna8_state, starfigh, ROT90, "SunA", "Star Fighter (v1)", 0 ) |
| 2667 | 2737 | GAME( 1991, hardhea2, 0, hardhea2, hardhea2, suna8_state, hardhea2, ROT0, "SunA", "Hard Head 2 (v2.0)", 0 ) |
| 2668 | 2738 | GAME( 1992, brickzn, 0, brickzn, brickzn, suna8_state, brickzn, ROT90, "SunA", "Brick Zone (v5.0, Joystick)", 0 ) |
| 2669 | 2739 | GAME( 1992, brickznv4, brickzn, brickzn, brickzn, suna8_state, brickznv4, ROT90, "SunA", "Brick Zone (v4.0, Spinner)", 0 ) |
| 2670 | ||
| 2671 | // Non Working Games | |
| 2672 | GAME( 1989, sparkman, 0, sparkman, sparkman, suna8_state, sparkman, ROT0, "SunA", "Spark Man (v2.0, set 1)", GAME_NOT_WORKING ) | |
| 2673 | GAME( 1989, sparkmana, sparkman, sparkman, sparkman, suna8_state, sparkman, ROT0, "SunA", "Spark Man (v2.0, set 2)", GAME_NOT_WORKING ) |
| Previous | 199869 Revisions | Next |