trunk/src/mess/includes/coleco.h
| r32245 | r32246 | |
| 9 | 9 | #include "sound/sn76496.h" |
| 10 | 10 | #include "video/tms9928a.h" |
| 11 | 11 | #include "machine/coleco.h" |
| 12 | | #include "imagedev/cartslot.h" |
| 12 | #include "bus/coleco/exp.h" |
| 13 | 13 | |
| 14 | 14 | class coleco_state : public driver_device |
| 15 | 15 | { |
| r32245 | r32246 | |
| 17 | 17 | coleco_state(const machine_config &mconfig, device_type type, const char *tag) |
| 18 | 18 | : driver_device(mconfig, type, tag), |
| 19 | 19 | m_maincpu(*this, "maincpu"), |
| 20 | m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG), |
| 20 | 21 | m_ram(*this, "ram") |
| 21 | 22 | { } |
| 22 | 23 | |
| 23 | 24 | required_device<cpu_device> m_maincpu; |
| 25 | required_device<colecovision_cartridge_slot_device> m_cart; |
| 24 | 26 | required_shared_ptr<UINT8> m_ram; |
| 25 | 27 | |
| 26 | 28 | virtual void machine_start(); |
| 27 | 29 | virtual void machine_reset(); |
| 28 | 30 | |
| 31 | DECLARE_READ8_MEMBER( cart_r ); |
| 29 | 32 | DECLARE_READ8_MEMBER( paddle_1_r ); |
| 30 | 33 | DECLARE_READ8_MEMBER( paddle_2_r ); |
| 31 | 34 | DECLARE_WRITE8_MEMBER( paddle_off_w ); |
trunk/src/mess/drivers/coleco.c
| r32245 | r32246 | |
| 222 | 222 | } |
| 223 | 223 | } |
| 224 | 224 | |
| 225 | READ8_MEMBER( coleco_state::cart_r ) |
| 226 | { |
| 227 | return m_cart->bd_r(space, offset & 0x7fff, 0, 0, 0, 0, 0); |
| 228 | } |
| 229 | |
| 225 | 230 | void coleco_state::machine_start() |
| 226 | 231 | { |
| 227 | 232 | memset(m_ram, 0xff, m_ram.bytes()); // initialize RAM |
| r32245 | r32246 | |
| 238 | 243 | m_joy_analog_state[port] = 0; |
| 239 | 244 | } |
| 240 | 245 | |
| 246 | if (m_cart->exists()) |
| 247 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xffff, read8_delegate(FUNC(coleco_state::cart_r),this)); |
| 248 | |
| 241 | 249 | save_item(NAME(m_joy_mode)); |
| 242 | 250 | save_item(NAME(m_last_nmi_state)); |
| 243 | 251 | save_item(NAME(m_joy_irq_state)); |
| r32245 | r32246 | |
| 264 | 272 | // return retval; |
| 265 | 273 | //} |
| 266 | 274 | |
| 267 | | DEVICE_IMAGE_LOAD_MEMBER( coleco_state,czz50_cart ) |
| 268 | | { |
| 269 | | UINT8 *ptr = memregion("maincpu")->base() + 0x8000; |
| 270 | | UINT32 size; |
| 271 | 275 | |
| 272 | | if (image.software_entry() == NULL) |
| 273 | | { |
| 274 | | size = image.length(); |
| 275 | | if (image.fread(ptr, size) != size) |
| 276 | | return IMAGE_INIT_FAIL; |
| 277 | | return IMAGE_INIT_PASS; |
| 278 | | } |
| 279 | | else |
| 280 | | { |
| 281 | | memcpy(ptr, image.get_software_region("rom"), image.get_software_region_length("rom")); |
| 282 | | return IMAGE_INIT_PASS; |
| 283 | | } |
| 284 | | } |
| 285 | | |
| 286 | | |
| 287 | 276 | /* Machine Drivers */ |
| 288 | 277 | |
| 289 | 278 | static MACHINE_CONFIG_START( coleco, coleco_state ) |
| r32245 | r32246 | |
| 306 | 295 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 307 | 296 | |
| 308 | 297 | /* cartridge */ |
| 309 | | MCFG_CARTSLOT_ADD("cart") |
| 310 | | MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin") |
| 311 | | MCFG_CARTSLOT_NOT_MANDATORY |
| 312 | | MCFG_CARTSLOT_INTERFACE("coleco_cart") |
| 298 | MCFG_COLECOVISION_CARTRIDGE_SLOT_ADD(COLECOVISION_CARTRIDGE_SLOT_TAG, colecovision_cartridges, NULL) |
| 313 | 299 | |
| 314 | 300 | /* software lists */ |
| 315 | 301 | MCFG_SOFTWARE_LIST_ADD("cart_list","coleco") |
| r32245 | r32246 | |
| 335 | 321 | /* basic machine hardware */ |
| 336 | 322 | MCFG_CPU_MODIFY("maincpu") // note: cpu speed unverified, assume it's the same as ColecoVision |
| 337 | 323 | MCFG_CPU_PROGRAM_MAP(czz50_map) |
| 338 | | |
| 339 | | /* cartridge */ |
| 340 | | MCFG_CARTSLOT_MODIFY("cart") |
| 341 | | MCFG_CARTSLOT_LOAD(coleco_state, czz50_cart) |
| 342 | 324 | MACHINE_CONFIG_END |
| 343 | 325 | |
| 344 | 326 | static MACHINE_CONFIG_DERIVED( dina, czz50 ) |
| r32245 | r32246 | |
| 364 | 346 | ROM_SYSTEM_BIOS( 1, "thick", "Thick characters" ) |
| 365 | 347 | // differences to 0x3aa93ef3 modified characters, added a pad 2 related fix |
| 366 | 348 | ROMX_LOAD( "colecoa.rom", 0x0000, 0x2000, CRC(39bb16fc) SHA1(99ba9be24ada3e86e5c17aeecb7a2d68c5edfe59), ROM_BIOS(2) ) |
| 367 | | ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) |
| 368 | 349 | ROM_END |
| 369 | 350 | |
| 370 | 351 | /* PAL Colecovision BIOS |
| r32245 | r32246 | |
| 384 | 365 | ROM_START (colecop) |
| 385 | 366 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 386 | 367 | ROM_LOAD( "r72114a_8317.u2", 0x0000, 0x2000, CRC(d393c0cc) SHA1(160077afb139943725c634d6539898db59f33657) ) |
| 387 | | ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) |
| 388 | 368 | ROM_END |
| 389 | 369 | |
| 390 | 370 | ROM_START (svi603) |
| 391 | 371 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 392 | 372 | ROM_LOAD( "svi603.rom", 0x0000, 0x2000, CRC(19e91b82) SHA1(8a30abe5ffef810b0f99b86db38b1b3c9d259b78) ) |
| 393 | | ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) |
| 394 | 373 | ROM_END |
| 395 | 374 | |
| 396 | 375 | ROM_START( czz50 ) |