trunk/src/mess/drivers/studio2.c
| r24790 | r24791 | |
| 177 | 177 | |
| 178 | 178 | TODO: |
| 179 | 179 | |
| 180 | | - mpt02 clones' colors |
| 181 | | - visicom colors |
| 182 | 180 | - NE555 discrete sound |
| 183 | 181 | |
| 184 | 182 | */ |
| r24790 | r24791 | |
| 299 | 297 | static ADDRESS_MAP_START( visicom_map, AS_PROGRAM, 8, visicom_state ) |
| 300 | 298 | AM_RANGE(0x0000, 0x0fff) AM_ROM |
| 301 | 299 | AM_RANGE(0x1000, 0x10ff) AM_RAM |
| 302 | | AM_RANGE(0x1100, 0x11ff) AM_RAM AM_SHARE("color_ram") |
| 303 | | AM_RANGE(0x1300, 0x13ff) AM_RAM AM_SHARE("color_ram1") |
| 300 | AM_RANGE(0x1100, 0x11ff) AM_RAM AM_SHARE("color0_ram") |
| 301 | AM_RANGE(0x1300, 0x13ff) AM_RAM AM_SHARE("color1_ram") |
| 304 | 302 | ADDRESS_MAP_END |
| 305 | 303 | |
| 306 | 304 | static ADDRESS_MAP_START( visicom_io_map, AS_IO, 8, visicom_state ) |
| r24790 | r24791 | |
| 364 | 362 | |
| 365 | 363 | static const rgb_t VISICOM_PALETTE[] = |
| 366 | 364 | { |
| 367 | | MAKE_RGB(0x00, 0x80, 0x00), |
| 368 | | MAKE_RGB(0x00, 0x00, 0xff), |
| 369 | | MAKE_RGB(0x00, 0xff, 0x00), |
| 370 | | MAKE_RGB(0xff, 0x00, 0x00) |
| 365 | MAKE_RGB(0x00, 0x40, 0x00), |
| 366 | MAKE_RGB(0xaf, 0xdf, 0xe4), |
| 367 | MAKE_RGB(0xb9, 0xc4, 0x2f), |
| 368 | MAKE_RGB(0xef, 0x45, 0x4a) |
| 371 | 369 | }; |
| 372 | 370 | |
| 371 | UINT32 visicom_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 372 | { |
| 373 | m_vdc->screen_update(screen, bitmap, cliprect); |
| 374 | |
| 375 | m_vdc->m_bitmap.fill(VISICOM_PALETTE[0], cliprect); |
| 376 | |
| 377 | return 0; |
| 378 | } |
| 379 | |
| 373 | 380 | READ_LINE_MEMBER( mpt02_state::rdata_r ) |
| 374 | 381 | { |
| 375 | 382 | return BIT(m_color, 0); |
| r24790 | r24791 | |
| 423 | 430 | DEVCB_NULL |
| 424 | 431 | }; |
| 425 | 432 | |
| 433 | WRITE8_MEMBER( visicom_state::dma_w ) |
| 434 | { |
| 435 | int sx = m_screen->hpos() + 4; |
| 436 | int y = m_screen->vpos(); |
| 437 | |
| 438 | UINT8 addr = offset & 0xff; |
| 439 | UINT8 color0 = m_color0_ram[addr]; |
| 440 | UINT8 color1 = m_color1_ram[addr]; |
| 441 | |
| 442 | for (int x = 0; x < 8; x++) |
| 443 | { |
| 444 | int color = (BIT(color1, 7) << 1) | BIT(color0, 7); |
| 445 | m_vdc->m_bitmap.pix32(y, sx + x) = VISICOM_PALETTE[color]; |
| 446 | color0 <<= 1; |
| 447 | color1 <<= 1; |
| 448 | } |
| 449 | } |
| 450 | |
| 451 | static COSMAC_INTERFACE( visicom_cosmac_intf ) |
| 452 | { |
| 453 | DEVCB_LINE_VCC, |
| 454 | DEVCB_DRIVER_LINE_MEMBER(studio2_state, clear_r), |
| 455 | DEVCB_NULL, |
| 456 | DEVCB_NULL, |
| 457 | DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef3_r), |
| 458 | DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef4_r), |
| 459 | DEVCB_DRIVER_LINE_MEMBER(studio2_state, q_w), |
| 460 | DEVCB_NULL, |
| 461 | DEVCB_DRIVER_MEMBER(visicom_state, dma_w), |
| 462 | NULL, |
| 463 | DEVCB_NULL, |
| 464 | DEVCB_NULL |
| 465 | }; |
| 466 | |
| 426 | 467 | WRITE8_MEMBER( mpt02_state::dma_w ) |
| 427 | 468 | { |
| 428 | 469 | UINT8 addr = ((offset & 0xe0) >> 2) | (offset & 0x07); |
| r24790 | r24791 | |
| 511 | 552 | else |
| 512 | 553 | { |
| 513 | 554 | size_t size = image.get_software_region_length("rom"); |
| 514 | | if (size) memcpy(ptr, image.get_software_region("rom_800"), MAX(size, 0x800)); |
| 555 | if (size) memcpy(ptr, image.get_software_region("rom"), MAX(size, 0x800)); |
| 515 | 556 | } |
| 516 | 557 | |
| 517 | 558 | return IMAGE_INIT_PASS; |
| r24790 | r24791 | |
| 554 | 595 | MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_579545MHz/2) |
| 555 | 596 | MCFG_CPU_PROGRAM_MAP(visicom_map) |
| 556 | 597 | MCFG_CPU_IO_MAP(visicom_io_map) |
| 557 | | MCFG_CPU_CONFIG(studio2_cosmac_intf) |
| 598 | MCFG_CPU_CONFIG(visicom_cosmac_intf) |
| 558 | 599 | |
| 559 | 600 | /* video hardware */ |
| 560 | 601 | MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2) |
| 561 | | MCFG_CDP1861_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2/8, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1)) |
| 602 | MCFG_SCREEN_UPDATE_DRIVER(visicom_state, screen_update) |
| 603 | MCFG_CDP1861_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1)) |
| 562 | 604 | |
| 563 | 605 | /* sound hardware */ |
| 564 | 606 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| r24790 | r24791 | |
| 653 | 695 | |
| 654 | 696 | /* Game Drivers */ |
| 655 | 697 | |
| 656 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ |
| 657 | | CONS( 1977, studio2, 0, 0, studio2, studio2, studio2_state, studio2, "RCA", "Studio II", GAME_SUPPORTS_SAVE ) |
| 658 | | CONS( 1978, visicom, studio2,0, visicom, studio2, studio2_state, studio2, "Toshiba", "Visicom COM-100 (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 659 | | CONS( 1978, mpt02, studio2,0, mpt02, studio2, studio2_state, studio2, "Soundic", "Victory MPT-02 Home TV Programmer (Austria)", GAME_SUPPORTS_SAVE ) |
| 660 | | CONS( 1978, mpt02h, studio2,0, mpt02, studio2, studio2_state, studio2, "Hanimex", "MPT-02 Jeu TV Programmable (France)", GAME_SUPPORTS_SAVE) |
| 661 | | CONS( 1978, mtc9016, studio2,0, mpt02, studio2, studio2_state, studio2, "Mustang", "9016 Telespiel Computer (Germany)", GAME_SUPPORTS_SAVE ) |
| 662 | | CONS( 1978, shmc1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Sheen", "1200 Micro Computer (Australia)", GAME_SUPPORTS_SAVE ) |
| 663 | | CONS( 1978, cm1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Conic", "M-1200 (?)", GAME_SUPPORTS_SAVE ) |
| 664 | | CONS( 1978, apollo80, studio2,0, mpt02, studio2, studio2_state, studio2, "Academy", "Apollo 80 (Germany)", GAME_SUPPORTS_SAVE ) |
| 698 | // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS |
| 699 | CONS( 1977, studio2, 0, 0, studio2, studio2, studio2_state, studio2, "RCA", "Studio II", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
| 700 | CONS( 1978, visicom, studio2,0, visicom, studio2, studio2_state, studio2, "Toshiba", "Visicom COM-100 (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
| 701 | CONS( 1978, mpt02, studio2,0, mpt02, studio2, studio2_state, studio2, "Soundic", "Victory MPT-02 Home TV Programmer (Austria)", GAME_SUPPORTS_SAVE ) |
| 702 | CONS( 1978, mpt02h, studio2,0, mpt02, studio2, studio2_state, studio2, "Hanimex", "MPT-02 Jeu TV Programmable (France)", GAME_SUPPORTS_SAVE ) |
| 703 | CONS( 1978, mtc9016, studio2,0, mpt02, studio2, studio2_state, studio2, "Mustang", "9016 Telespiel Computer (Germany)", GAME_SUPPORTS_SAVE ) |
| 704 | CONS( 1978, shmc1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Sheen", "1200 Micro Computer (Australia)", GAME_SUPPORTS_SAVE ) |
| 705 | CONS( 1978, cm1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Conic", "M-1200 (?)", GAME_SUPPORTS_SAVE ) |
| 706 | CONS( 1978, apollo80, studio2,0, mpt02, studio2, studio2_state, studio2, "Academy", "Apollo 80 (Germany)", GAME_SUPPORTS_SAVE ) |