trunk/src/mame/drivers/poo.c
| r18075 | r18076 | |
| 50 | 50 | { |
| 51 | 51 | public: |
| 52 | 52 | poo_state(const machine_config &mconfig, device_type type, const char *tag) |
| 53 | | : driver_device(mconfig, type, tag) , |
| 53 | : driver_device(mconfig, type, tag), |
| 54 | m_maincpu(*this, "maincpu"), |
| 55 | m_subcpu(*this, "subcpu"), |
| 54 | 56 | m_sprites(*this, "sprites"), |
| 55 | 57 | m_scrolly(*this, "scrolly"), |
| 56 | | m_vram(*this, "vram"){ } |
| 58 | m_vram(*this, "vram") |
| 59 | { } |
| 57 | 60 | |
| 61 | required_device<cpu_device> m_maincpu; |
| 62 | required_device<cpu_device> m_subcpu; |
| 58 | 63 | required_shared_ptr<UINT8> m_sprites; |
| 59 | 64 | required_shared_ptr<UINT8> m_scrolly; |
| 60 | 65 | required_shared_ptr<UINT8> m_vram; |
| 66 | |
| 61 | 67 | UINT8 m_vram_colbank; |
| 62 | | DECLARE_READ8_MEMBER(unk_inp_r); |
| 63 | | DECLARE_READ8_MEMBER(unk_inp2_r); |
| 64 | | DECLARE_READ8_MEMBER(unk_inp3_r); |
| 65 | | DECLARE_WRITE8_MEMBER(unk_w); |
| 68 | |
| 66 | 69 | DECLARE_WRITE8_MEMBER(sound_cmd_w); |
| 67 | 70 | DECLARE_WRITE8_MEMBER(poo_vregs_w); |
| 68 | 71 | DECLARE_READ8_MEMBER(timer_r); |
| r18075 | r18076 | |
| 72 | 75 | }; |
| 73 | 76 | |
| 74 | 77 | |
| 78 | /******************************************************************************************/ |
| 79 | |
| 80 | void poo_state::palette_init() |
| 81 | { |
| 82 | const UINT8 *color_prom = machine().root_device().memregion("proms")->base(); |
| 83 | int i,r,g,b,val; |
| 84 | int bit0,bit1,bit2; |
| 85 | |
| 86 | for (i = 0; i < 0x100; i++) |
| 87 | { |
| 88 | val = (color_prom[i+0x100]) | (color_prom[i+0x000]<<4); |
| 89 | |
| 90 | bit0 = 0; |
| 91 | bit1 = (val >> 6) & 0x01; |
| 92 | bit2 = (val >> 7) & 0x01; |
| 93 | b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 94 | bit0 = (val >> 3) & 0x01; |
| 95 | bit1 = (val >> 4) & 0x01; |
| 96 | bit2 = (val >> 5) & 0x01; |
| 97 | g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 98 | bit0 = (val >> 0) & 0x01; |
| 99 | bit1 = (val >> 1) & 0x01; |
| 100 | bit2 = (val >> 2) & 0x01; |
| 101 | r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 102 | |
| 103 | palette_set_color(machine(), i, MAKE_RGB(r, g, b)); |
| 104 | } |
| 105 | } |
| 106 | |
| 75 | 107 | void poo_state::video_start() |
| 76 | 108 | { |
| 77 | 109 | } |
| r18075 | r18076 | |
| 118 | 150 | return 0; |
| 119 | 151 | } |
| 120 | 152 | |
| 121 | | READ8_MEMBER(poo_state::unk_inp_r) |
| 122 | | { |
| 123 | | return 0x00;//machine().rand(); |
| 124 | | } |
| 125 | 153 | |
| 126 | | #if 0 |
| 154 | /******************************************************************************************/ |
| 127 | 155 | |
| 128 | | READ8_MEMBER(poo_state::unk_inp2_r) |
| 129 | | { |
| 130 | | return 0xff; |
| 131 | | } |
| 132 | | |
| 133 | | READ8_MEMBER(poo_state::unk_inp3_r) |
| 134 | | { |
| 135 | | return machine().rand(); |
| 136 | | } |
| 137 | | #endif |
| 138 | | |
| 139 | | |
| 140 | | #if 0 |
| 141 | | WRITE8_MEMBER(poo_state::unk_w) |
| 142 | | { |
| 143 | | printf("%02x %02x\n",data,offset); |
| 144 | | } |
| 145 | | #endif |
| 146 | | |
| 147 | | /* soundlatch write */ |
| 148 | 156 | WRITE8_MEMBER(poo_state::sound_cmd_w) |
| 149 | 157 | { |
| 150 | | soundlatch_byte_w(space, 0, (data & 0xff)); |
| 151 | | machine().device("subcpu")->execute().set_input_line(0, HOLD_LINE); |
| 158 | soundlatch_byte_w(space, 0, data); |
| 159 | m_subcpu->set_input_line(0, HOLD_LINE); |
| 152 | 160 | } |
| 153 | 161 | |
| 154 | 162 | WRITE8_MEMBER(poo_state::poo_vregs_w) |
| r18075 | r18076 | |
| 161 | 169 | AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP |
| 162 | 170 | AM_RANGE(0x8000, 0x8fff) AM_RAM |
| 163 | 171 | AM_RANGE(0x9000, 0x97ff) AM_RAM |
| 164 | | AM_RANGE(0x9800, 0x9801) AM_READ(unk_inp_r) //AM_WRITE(unk_w ) |
| 172 | AM_RANGE(0x9800, 0x9801) AM_NOP // ? |
| 165 | 173 | |
| 166 | 174 | AM_RANGE(0xb000, 0xb07f) AM_RAM AM_SHARE("sprites") |
| 167 | 175 | AM_RANGE(0xb080, 0xb0ff) AM_RAM AM_SHARE("scrolly") |
| r18075 | r18076 | |
| 177 | 185 | AM_RANGE(0xb700, 0xb700) AM_WRITE(poo_vregs_w) |
| 178 | 186 | |
| 179 | 187 | AM_RANGE(0xb800, 0xbfff) AM_RAM AM_SHARE("vram") |
| 180 | | |
| 181 | 188 | ADDRESS_MAP_END |
| 182 | 189 | |
| 183 | 190 | static ADDRESS_MAP_START( unclepoo_main_portmap, AS_IO, 8, poo_state ) |
| r18075 | r18076 | |
| 185 | 192 | ADDRESS_MAP_END |
| 186 | 193 | |
| 187 | 194 | |
| 188 | | |
| 189 | 195 | static ADDRESS_MAP_START( unclepoo_sub_map, AS_PROGRAM, 8, poo_state ) |
| 190 | 196 | AM_RANGE(0x0000, 0x0fff) AM_ROM |
| 191 | 197 | AM_RANGE(0x4000, 0x43ff) AM_RAM |
| r18075 | r18076 | |
| 199 | 205 | ADDRESS_MAP_END |
| 200 | 206 | |
| 201 | 207 | |
| 208 | /******************************************************************************************/ |
| 209 | |
| 202 | 210 | static INPUT_PORTS_START( unclepoo ) |
| 203 | 211 | PORT_START("P1") |
| 204 | 212 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| r18075 | r18076 | |
| 265 | 273 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!5") |
| 266 | 274 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 267 | 275 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 268 | | PORT_DIPNAME( 0x20, 0x00, "Test Mode" ) PORT_DIPLOCATION("SW2:!6") |
| 276 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!6") // ??? Locks up at boot if set to ON |
| 269 | 277 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 270 | 278 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 271 | 279 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:!7") |
| 272 | 280 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 273 | 281 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 274 | | PORT_DIPNAME( 0x80, 0x00, "Start with 255 Lives (Cheat)" ) PORT_DIPLOCATION("SW2:!8") |
| 282 | PORT_DIPNAME( 0x80, 0x00, "255 Lives (Cheat)" ) PORT_DIPLOCATION("SW2:!8") |
| 275 | 283 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 276 | 284 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 277 | 285 | INPUT_PORTS_END |
| 278 | 286 | |
| 287 | |
| 288 | /******************************************************************************************/ |
| 289 | |
| 279 | 290 | static const gfx_layout tiles8x8_layout = |
| 280 | 291 | { |
| 281 | 292 | 8,8, |
| r18075 | r18076 | |
| 291 | 302 | GFXDECODE_ENTRY( "gfx", 0, tiles8x8_layout, 0, 0x20 ) |
| 292 | 303 | GFXDECODE_END |
| 293 | 304 | |
| 294 | | void poo_state::palette_init() |
| 295 | | { |
| 296 | | const UINT8 *color_prom = machine().root_device().memregion("proms")->base(); |
| 297 | | int i,r,g,b,val; |
| 298 | | int bit0,bit1,bit2; |
| 299 | 305 | |
| 300 | | for (i = 0; i < 0x100; i++) |
| 301 | | { |
| 302 | | val = (color_prom[i+0x100]) | (color_prom[i+0x000]<<4); |
| 303 | | |
| 304 | | bit0 = 0; |
| 305 | | bit1 = (val >> 6) & 0x01; |
| 306 | | bit2 = (val >> 7) & 0x01; |
| 307 | | b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 308 | | bit0 = (val >> 3) & 0x01; |
| 309 | | bit1 = (val >> 4) & 0x01; |
| 310 | | bit2 = (val >> 5) & 0x01; |
| 311 | | g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 312 | | bit0 = (val >> 0) & 0x01; |
| 313 | | bit1 = (val >> 1) & 0x01; |
| 314 | | bit2 = (val >> 2) & 0x01; |
| 315 | | r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 316 | | |
| 317 | | palette_set_color(machine(), i, MAKE_RGB(r, g, b)); |
| 318 | | } |
| 319 | | } |
| 320 | | |
| 321 | 306 | READ8_MEMBER(poo_state::timer_r) |
| 322 | 307 | { |
| 323 | | return downcast<cpu_device *>(&space.device())->total_cycles() / 16; |
| 308 | return m_subcpu->total_cycles() / 16; |
| 324 | 309 | } |
| 325 | 310 | |
| 326 | | |
| 327 | 311 | static const ay8910_interface ay8910_config = |
| 328 | 312 | { |
| 329 | 313 | AY8910_LEGACY_OUTPUT, |
| r18075 | r18076 | |
| 335 | 319 | }; |
| 336 | 320 | |
| 337 | 321 | static MACHINE_CONFIG_START( unclepoo, poo_state ) |
| 322 | |
| 338 | 323 | /* basic machine hardware */ |
| 339 | 324 | MCFG_CPU_ADD("maincpu", Z80,18000000/6) /* ? MHz */ |
| 340 | 325 | MCFG_CPU_PROGRAM_MAP(unclepoo_main_map) |
| r18075 | r18076 | |
| 358 | 343 | MCFG_GFXDECODE(unclepoo) |
| 359 | 344 | MCFG_PALETTE_LENGTH(0x100) |
| 360 | 345 | |
| 361 | | |
| 346 | /* sound hardware */ |
| 362 | 347 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 363 | 348 | MCFG_SOUND_ADD("ay", AY8910, 18000000/12) /* ? Mhz */ |
| 364 | 349 | MCFG_SOUND_CONFIG(ay8910_config) |
| r18075 | r18076 | |
| 366 | 351 | MACHINE_CONFIG_END |
| 367 | 352 | |
| 368 | 353 | |
| 354 | /******************************************************************************************/ |
| 369 | 355 | |
| 370 | 356 | ROM_START( unclepoo ) |
| 371 | 357 | ROM_REGION( 0x8000, "maincpu", 0 ) |
| r18075 | r18076 | |
| 387 | 373 | ROM_LOAD( "diatec_l.bin", 0x100, 0x100, CRC(b04d466a) SHA1(1438abeae76ef807ba34bd6d3e4c44f707dbde6e) ) |
| 388 | 374 | ROM_END |
| 389 | 375 | |
| 390 | | GAME( 1983, unclepoo, 0, unclepoo, unclepoo, driver_device, 0, ROT90, "Diatec", "Uncle Poo", GAME_NO_COCKTAIL ) |
| 376 | |
| 377 | GAME( 1983, unclepoo, 0, unclepoo, unclepoo, driver_device, 0, ROT90, "Diatec", "Uncle Poo", GAME_NO_COCKTAIL ) |