trunk/src/mame/drivers/goodejan.c
| r243364 | r243365 | |
| 78 | 78 | public: |
| 79 | 79 | goodejan_state(const machine_config &mconfig, device_type type, const char *tag) |
| 80 | 80 | : driver_device(mconfig, type, tag), |
| 81 | m_maincpu(*this, "maincpu"), |
| 82 | m_gfxdecode(*this, "gfxdecode"), |
| 83 | m_palette(*this, "palette"), |
| 81 | 84 | m_sc0_vram(*this, "sc0_vram"), |
| 82 | 85 | m_sc1_vram(*this, "sc1_vram"), |
| 83 | 86 | m_sc2_vram(*this, "sc2_vram"), |
| 84 | 87 | m_sc3_vram(*this, "sc3_vram"), |
| 85 | | m_spriteram16(*this, "sprite_ram"), |
| 86 | | m_maincpu(*this, "maincpu"), |
| 87 | | m_gfxdecode(*this, "gfxdecode"), |
| 88 | | m_palette(*this, "palette") { } |
| 88 | m_spriteram16(*this, "sprite_ram") { } |
| 89 | 89 | |
| 90 | required_device<cpu_device> m_maincpu; |
| 91 | required_device<gfxdecode_device> m_gfxdecode; |
| 92 | required_device<palette_device> m_palette; |
| 93 | |
| 90 | 94 | required_shared_ptr<UINT16> m_sc0_vram; |
| 91 | 95 | required_shared_ptr<UINT16> m_sc1_vram; |
| 92 | 96 | required_shared_ptr<UINT16> m_sc2_vram; |
| 93 | 97 | required_shared_ptr<UINT16> m_sc3_vram; |
| 94 | 98 | required_shared_ptr<UINT16> m_spriteram16; |
| 95 | | required_device<cpu_device> m_maincpu; |
| 96 | | required_device<gfxdecode_device> m_gfxdecode; |
| 97 | | required_device<palette_device> m_palette; |
| 99 | |
| 98 | 100 | tilemap_t *m_sc0_tilemap; |
| 99 | 101 | tilemap_t *m_sc1_tilemap; |
| 100 | 102 | tilemap_t *m_sc2_tilemap; |
| 101 | 103 | tilemap_t *m_sc3_tilemap; |
| 104 | |
| 102 | 105 | UINT16 m_mux_data; |
| 103 | 106 | UINT16 m_seibucrtc_sc0bank; |
| 104 | | DECLARE_WRITE16_MEMBER(goodejan_gfxbank_w); |
| 107 | UINT16 m_layer_en; |
| 108 | UINT16 m_scrollram[6]; |
| 109 | |
| 110 | DECLARE_WRITE16_MEMBER(gfxbank_w); |
| 105 | 111 | DECLARE_READ16_MEMBER(mahjong_panel_r); |
| 106 | 112 | DECLARE_WRITE16_MEMBER(mahjong_panel_w); |
| 107 | 113 | DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w); |
| 108 | 114 | DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w); |
| 109 | 115 | DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w); |
| 110 | 116 | DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w); |
| 117 | DECLARE_WRITE16_MEMBER(layer_en_w); |
| 118 | DECLARE_WRITE16_MEMBER(layer_scroll_w); |
| 119 | |
| 111 | 120 | TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info); |
| 112 | 121 | TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info); |
| 113 | 122 | TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info); |
| 114 | 123 | TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info); |
| 115 | | INTERRUPT_GEN_MEMBER(goodejan_irq); |
| 116 | | DECLARE_WRITE16_MEMBER(layer_en_w); |
| 117 | | DECLARE_WRITE16_MEMBER(layer_scroll_w); |
| 118 | | UINT16 m_layer_en; |
| 119 | | UINT16 m_scrollram[6]; |
| 124 | |
| 125 | INTERRUPT_GEN_MEMBER(irq); |
| 126 | |
| 120 | 127 | void seibucrtc_sc0bank_w(UINT16 data); |
| 121 | 128 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri); |
| 122 | 129 | virtual void video_start(); |
| 123 | | UINT32 screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 130 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 124 | 131 | }; |
| 125 | 132 | |
| 126 | 133 | /******************************* |
| r243364 | r243365 | |
| 348 | 355 | m_sc3_tilemap->set_transparent_pen(15); |
| 349 | 356 | |
| 350 | 357 | m_seibucrtc_sc0bank = 0; |
| 358 | |
| 359 | save_item(NAME(m_mux_data)); |
| 360 | save_item(NAME(m_seibucrtc_sc0bank)); |
| 361 | save_item(NAME(m_layer_en)); |
| 362 | save_item(NAME(m_scrollram)); |
| 351 | 363 | } |
| 352 | 364 | |
| 353 | | UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 365 | UINT32 goodejan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 354 | 366 | { |
| 355 | 367 | bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen |
| 356 | 368 | |
| r243364 | r243365 | |
| 381 | 393 | #define GOODEJAN_MHZ3 12000000 |
| 382 | 394 | |
| 383 | 395 | |
| 384 | | WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w) |
| 396 | WRITE16_MEMBER(goodejan_state::gfxbank_w) |
| 385 | 397 | { |
| 386 | 398 | seibucrtc_sc0bank_w((data & 0x100)>>8); |
| 387 | 399 | } |
| r243364 | r243365 | |
| 423 | 435 | |
| 424 | 436 | /* totmejan CRTC is at 8000-804f,goodejan is at 8000-807f */ |
| 425 | 437 | static ADDRESS_MAP_START( common_io_map, AS_IO, 16, goodejan_state ) |
| 426 | | AM_RANGE(0x9000, 0x9001) AM_WRITE(goodejan_gfxbank_w) |
| 438 | AM_RANGE(0x9000, 0x9001) AM_WRITE(gfxbank_w) |
| 427 | 439 | AM_RANGE(0xb000, 0xb003) AM_WRITENOP |
| 428 | 440 | AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w) |
| 429 | 441 | |
| r243364 | r243365 | |
| 592 | 604 | GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x100, 0x10 ) /* Text */ |
| 593 | 605 | GFXDECODE_END |
| 594 | 606 | |
| 595 | | INTERRUPT_GEN_MEMBER(goodejan_state::goodejan_irq) |
| 607 | INTERRUPT_GEN_MEMBER(goodejan_state::irq) |
| 596 | 608 | { |
| 597 | 609 | device.execute().set_input_line_and_vector(0,HOLD_LINE,0x208/4); |
| 598 | 610 | /* vector 0x00c is just a reti */ |
| r243364 | r243365 | |
| 616 | 628 | MCFG_CPU_ADD("maincpu", V30, GOODEJAN_MHZ2/2) |
| 617 | 629 | MCFG_CPU_PROGRAM_MAP(goodejan_map) |
| 618 | 630 | MCFG_CPU_IO_MAP(goodejan_io_map) |
| 619 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, goodejan_irq) |
| 631 | MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, irq) |
| 620 | 632 | |
| 621 | 633 | SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2) |
| 622 | 634 | |
| r243364 | r243365 | |
| 626 | 638 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 627 | 639 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 628 | 640 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) //TODO: dynamic resolution |
| 629 | | MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update_goodejan) |
| 641 | MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update) |
| 630 | 642 | MCFG_SCREEN_PALETTE("palette") |
| 631 | 643 | |
| 632 | 644 | MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0) |
| r243364 | r243365 | |
| 742 | 754 | ROM_LOAD( "fmj08.083", 0x000, 0x100, CRC(9657b7ad) SHA1(e9b469c2b3534593f7fe0ea19cbbf93b55957e42) ) |
| 743 | 755 | ROM_END |
| 744 | 756 | |
| 745 | | GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS ) |
| 746 | | GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS ) |
| 747 | | GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS ) |
| 757 | GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 758 | GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 759 | GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/naomi.c
| r243364 | r243365 | |
| 3466 | 3466 | |
| 3467 | 3467 | // 840-0016 1999 317-0262-JPN Naomi |
| 3468 | 3468 | ROM_PARAMETER( ":rom_board:segam2crypt:key", "280fee35" ) |
| 3469 | /* |
| 3470 | 838-13661 RS422/RS232C BD DOC |
| 3471 | IC1 - Toshiba TMPZ84C015BF-10 Z80-based MCU |
| 3472 | IC6 - Toshiba TC551001CF-70L 128k x8 SRAM |
| 3473 | IC8 - Sega 315-5338A |
| 3474 | OSC1 - 19.680MHz OSC2 - 32.000MHz |
| 3475 | |
| 3476 | connected between Naomi motherboard and card reader/printer, accessed via MIE MCU ports 0x09-0x0d |
| 3477 | */ |
| 3478 | ROM_REGION( 0x10000, "rs422_io", 0 ) |
| 3479 | ROM_LOAD( "epr-22083.ic7", 0x0000, 0x10000, CRC(c70b0de9) SHA1(329c924b4d29017482b1ecca839fb610ca20b2af) ) |
| 3469 | 3480 | ROM_END |
| 3470 | 3481 | |
| 3471 | 3482 | ROM_START( derbyocw ) |
| r243364 | r243365 | |
| 3933 | 3944 | ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated |
| 3934 | 3945 | ROM_END |
| 3935 | 3946 | |
| 3947 | // IC22 shown in ROM TEST as BAD, but its byte summ matches written on label, verified on 2 cartridges |
| 3936 | 3948 | ROM_START( hotd2p ) |
| 3937 | 3949 | HOTD2_BIOS |
| 3938 | 3950 | NAOMI_DEFAULT_EEPROM |
| r243364 | r243365 | |
| 3964 | 3976 | ROM_LOAD( "mpr-21404.ic19s", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) ) |
| 3965 | 3977 | ROM_LOAD( "mpr-21405.ic20s", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) ) |
| 3966 | 3978 | |
| 3967 | | ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated |
| 3979 | // 315-5881 populated, have no 317-xxxx label, key unknown |
| 3980 | ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") |
| 3968 | 3981 | ROM_END |
| 3969 | 3982 | |
| 3970 | 3983 | /* |
| r243364 | r243365 | |
| 5157 | 5170 | ROM_PARAMETER( ":rom_board:segam2crypt:key", "280a8b5d" ) |
| 5158 | 5171 | ROM_END |
| 5159 | 5172 | |
| 5173 | // !!! partial dump, only IC22 dumped. without correct flashroms contents game crashes at certain points. |
| 5160 | 5174 | // prototype - only works with US BIOS |
| 5161 | 5175 | ROM_START( sambap ) |
| 5162 | 5176 | NAOMI_BIOS |
| r243364 | r243365 | |
| 7771 | 7785 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 7772 | 7786 | //PIC16C621A (317-0567-EXP) |
| 7773 | 7787 | //(sticker 253-5508-0567) |
| 7774 | | ROM_LOAD("317-0567-exp.pic", 0x00, 0x4000, NO_DUMP ) |
| 7788 | ROM_LOAD("317-0567-exp.pic", 0x00, 0x4000, CRC(cd1d2b2d) SHA1(78203ee0339f76eb76da08d7de43e7e44e4b7d32) ) |
| 7775 | 7789 | ROM_END |
| 7776 | 7790 | |
| 7777 | 7791 | |
| r243364 | r243365 | |
| 8557 | 8571 | ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE) |
| 8558 | 8572 | ROM_LOAD( "610-0752.u3", 0x0000000, 0x1000000, CRC(bab6182e) SHA1(4d25256c81941316887cbb4524a203922f5b7104) ) |
| 8559 | 8573 | ROM_LOAD( "610-0752.u1", 0x1000000, 0x1000000, CRC(3086bc47) SHA1(eb7b04db90d296985528f0cfdd4545f184c40b64) ) |
| 8560 | | ROM_LOAD( "610-0752.u2", 0x2000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) ) |
| 8561 | | ROM_LOAD( "610-0752.u4", 0x3000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) ) |
| 8562 | | ROM_LOAD( "610-0752.u14", 0x4000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) ) |
| 8563 | | ROM_LOAD( "610-0752.u15", 0x5000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) ) |
| 8564 | | ROM_LOAD( "610-0752.u16", 0x6000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) ) |
| 8565 | | ROM_LOAD( "610-0752.u17", 0x7000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) ) |
| 8574 | ROM_LOAD( "610-0752.u4", 0x2000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) ) |
| 8575 | ROM_LOAD( "610-0752.u2", 0x3000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) ) |
| 8576 | ROM_LOAD( "610-0752.u15", 0x4000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) ) |
| 8577 | ROM_LOAD( "610-0752.u17", 0x5000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) ) |
| 8578 | ROM_LOAD( "610-0752.u14", 0x6000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) ) |
| 8579 | ROM_LOAD( "610-0752.u16", 0x7000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) ) |
| 8566 | 8580 | |
| 8567 | 8581 | ROM_REGION( 4, "rom_key", 0 ) |
| 8568 | 8582 | ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) |
trunk/src/mame/drivers/sengokmj.c
| r243364 | r243365 | |
| 66 | 66 | public: |
| 67 | 67 | sengokmj_state(const machine_config &mconfig, device_type type, const char *tag) |
| 68 | 68 | : driver_device(mconfig, type, tag), |
| 69 | m_maincpu(*this, "maincpu"), |
| 70 | m_gfxdecode(*this, "gfxdecode"), |
| 71 | m_palette(*this, "palette"), |
| 69 | 72 | m_sc0_vram(*this, "sc0_vram"), |
| 70 | 73 | m_sc1_vram(*this, "sc1_vram"), |
| 71 | 74 | m_sc2_vram(*this, "sc2_vram"), |
| 72 | 75 | m_sc3_vram(*this, "sc3_vram"), |
| 73 | | m_spriteram16(*this, "sprite_ram"), |
| 74 | | m_maincpu(*this, "maincpu"), |
| 75 | | m_gfxdecode(*this, "gfxdecode"), |
| 76 | | m_palette(*this, "palette") { } |
| 76 | m_spriteram16(*this, "sprite_ram") { } |
| 77 | 77 | |
| 78 | required_device<cpu_device> m_maincpu; |
| 79 | required_device<gfxdecode_device> m_gfxdecode; |
| 80 | required_device<palette_device> m_palette; |
| 81 | |
| 78 | 82 | required_shared_ptr<UINT16> m_sc0_vram; |
| 79 | 83 | required_shared_ptr<UINT16> m_sc1_vram; |
| 80 | 84 | required_shared_ptr<UINT16> m_sc2_vram; |
| 81 | 85 | required_shared_ptr<UINT16> m_sc3_vram; |
| 82 | 86 | required_shared_ptr<UINT16> m_spriteram16; |
| 83 | | required_device<cpu_device> m_maincpu; |
| 84 | | required_device<gfxdecode_device> m_gfxdecode; |
| 85 | | required_device<palette_device> m_palette; |
| 87 | |
| 86 | 88 | tilemap_t *m_sc0_tilemap; |
| 87 | 89 | tilemap_t *m_sc1_tilemap; |
| 88 | 90 | tilemap_t *m_sc2_tilemap; |
| 89 | 91 | tilemap_t *m_sc3_tilemap; |
| 90 | | UINT16 m_sengokumj_mux_data; |
| 92 | |
| 93 | UINT16 m_mux_data; |
| 91 | 94 | UINT8 m_hopper_io; |
| 92 | 95 | UINT16 m_layer_en; |
| 93 | 96 | UINT16 m_scrollram[6]; |
| 97 | |
| 94 | 98 | DECLARE_READ16_MEMBER(mahjong_panel_r); |
| 95 | 99 | DECLARE_WRITE16_MEMBER(mahjong_panel_w); |
| 96 | | DECLARE_WRITE16_MEMBER(sengokmj_out_w); |
| 97 | | DECLARE_READ16_MEMBER(sengokmj_system_r); |
| 100 | DECLARE_WRITE16_MEMBER(out_w); |
| 101 | DECLARE_READ16_MEMBER(system_r); |
| 98 | 102 | DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w); |
| 99 | 103 | DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w); |
| 100 | 104 | DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w); |
| 101 | 105 | DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w); |
| 106 | DECLARE_WRITE16_MEMBER(layer_en_w); |
| 107 | DECLARE_WRITE16_MEMBER(layer_scroll_w); |
| 108 | |
| 102 | 109 | TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info); |
| 103 | 110 | TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info); |
| 104 | 111 | TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info); |
| 105 | 112 | TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info); |
| 106 | | INTERRUPT_GEN_MEMBER(sengokmj_interrupt); |
| 107 | | DECLARE_WRITE16_MEMBER(layer_en_w); |
| 108 | | DECLARE_WRITE16_MEMBER(layer_scroll_w); |
| 113 | |
| 114 | INTERRUPT_GEN_MEMBER(interrupt); |
| 109 | 115 | |
| 116 | virtual void machine_start(); |
| 117 | virtual void video_start(); |
| 118 | |
| 110 | 119 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri); |
| 111 | | virtual void video_start(); |
| 112 | | UINT32 screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 120 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 113 | 121 | }; |
| 114 | 122 | |
| 115 | 123 | |
| r243364 | r243365 | |
| 294 | 302 | m_sc2_tilemap->set_transparent_pen(15); |
| 295 | 303 | m_sc1_tilemap->set_transparent_pen(15); |
| 296 | 304 | m_sc3_tilemap->set_transparent_pen(15); |
| 305 | |
| 306 | save_item(NAME(m_layer_en)); |
| 307 | save_item(NAME(m_scrollram)); |
| 297 | 308 | } |
| 298 | 309 | |
| 299 | | UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 310 | UINT32 sengokmj_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 300 | 311 | { |
| 301 | 312 | bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen |
| 302 | 313 | |
| r243364 | r243365 | |
| 323 | 334 | } |
| 324 | 335 | |
| 325 | 336 | |
| 337 | void sengokmj_state::machine_start() |
| 338 | { |
| 339 | save_item(NAME(m_mux_data)); |
| 340 | save_item(NAME(m_hopper_io)); |
| 341 | } |
| 326 | 342 | |
| 327 | 343 | |
| 328 | 344 | /* Multiplexer device for the mahjong panel */ |
| r243364 | r243365 | |
| 334 | 350 | |
| 335 | 351 | for(i=0;i<5;i++) |
| 336 | 352 | { |
| 337 | | if(m_sengokumj_mux_data & 1 << i) |
| 353 | if(m_mux_data & 1 << i) |
| 338 | 354 | res = ioport(mpnames[i])->read(); |
| 339 | 355 | } |
| 340 | 356 | |
| r243364 | r243365 | |
| 343 | 359 | |
| 344 | 360 | WRITE16_MEMBER(sengokmj_state::mahjong_panel_w) |
| 345 | 361 | { |
| 346 | | m_sengokumj_mux_data = (data & 0x3f00) >> 8; |
| 362 | m_mux_data = (data & 0x3f00) >> 8; |
| 347 | 363 | |
| 348 | 364 | if(data & 0xc0ff) |
| 349 | 365 | logerror("Write to mux %04x\n",data); |
| 350 | 366 | } |
| 351 | 367 | |
| 352 | | WRITE16_MEMBER(sengokmj_state::sengokmj_out_w) |
| 368 | WRITE16_MEMBER(sengokmj_state::out_w) |
| 353 | 369 | { |
| 354 | 370 | /* ---- ---- ---x ---- J.P. Signal (?)*/ |
| 355 | 371 | /* ---- ---- ---- -x-- Coin counter (done AFTER you press start)*/ |
| r243364 | r243365 | |
| 362 | 378 | // popmessage("%02x",m_hopper_io); |
| 363 | 379 | } |
| 364 | 380 | |
| 365 | | READ16_MEMBER(sengokmj_state::sengokmj_system_r) |
| 381 | READ16_MEMBER(sengokmj_state::system_r) |
| 366 | 382 | { |
| 367 | 383 | return (ioport("SYSTEM")->read() & 0xffbf) | m_hopper_io; |
| 368 | 384 | } |
| r243364 | r243365 | |
| 387 | 403 | // AM_RANGE(0x8080, 0x8081) CRTC extra register? |
| 388 | 404 | // AM_RANGE(0x80c0, 0x80c1) CRTC extra register? |
| 389 | 405 | // AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0 |
| 390 | | AM_RANGE(0x8180, 0x8181) AM_WRITE(sengokmj_out_w) |
| 406 | AM_RANGE(0x8180, 0x8181) AM_WRITE(out_w) |
| 391 | 407 | AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w) |
| 392 | 408 | AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1") |
| 393 | 409 | AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r) |
| 394 | | AM_RANGE(0xc004, 0xc005) AM_READ(sengokmj_system_r) //switches |
| 410 | AM_RANGE(0xc004, 0xc005) AM_READ(system_r) //switches |
| 395 | 411 | ADDRESS_MAP_END |
| 396 | 412 | |
| 397 | 413 | |
| r243364 | r243365 | |
| 538 | 554 | GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x700, 0x10 ) /* Text */ |
| 539 | 555 | GFXDECODE_END |
| 540 | 556 | |
| 541 | | INTERRUPT_GEN_MEMBER(sengokmj_state::sengokmj_interrupt) |
| 557 | INTERRUPT_GEN_MEMBER(sengokmj_state::interrupt) |
| 542 | 558 | { |
| 543 | 559 | device.execute().set_input_line_and_vector(0,HOLD_LINE,0xc8/4); |
| 544 | 560 | } |
| r243364 | r243365 | |
| 560 | 576 | MCFG_CPU_ADD("maincpu", V30, 16000000/2) /* V30-8 */ |
| 561 | 577 | MCFG_CPU_PROGRAM_MAP(sengokmj_map) |
| 562 | 578 | MCFG_CPU_IO_MAP(sengokmj_io_map) |
| 563 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, sengokmj_interrupt) |
| 579 | MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, interrupt) |
| 564 | 580 | |
| 565 | 581 | SEIBU_SOUND_SYSTEM_CPU(14318180/4) |
| 566 | 582 | |
| r243364 | r243365 | |
| 572 | 588 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 573 | 589 | MCFG_SCREEN_SIZE(64*8, 32*8) |
| 574 | 590 | MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1) //TODO: dynamic resolution |
| 575 | | MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update_sengokmj) |
| 591 | MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update) |
| 576 | 592 | MCFG_SCREEN_PALETTE("palette") |
| 577 | 593 | |
| 578 | 594 | MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0) |
| r243364 | r243365 | |
| 624 | 640 | ROM_LOAD( "rs006.89", 0x000, 0x200, CRC(96f7646e) SHA1(400a831b83d6ac4d2a46ef95b97b1ee237099e44) ) /* Priority */ |
| 625 | 641 | ROM_END |
| 626 | 642 | |
| 627 | | GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 643 | GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 628 | 644 | /*Non-Bet Version?*/ |
trunk/src/mess/video/spectrum.c
| r243364 | r243365 | |
| 39 | 39 | |
| 40 | 40 | m_previous_border_x = 0; m_previous_border_y = 0; |
| 41 | 41 | machine().first_screen()->register_screen_bitmap(m_border_bitmap); |
| 42 | |
| 43 | m_screen_location = m_ram->pointer() + (5 << 14); |
| 42 | 44 | } |
| 43 | 45 | |
| 44 | 46 | |
| r243364 | r243365 | |
| 58 | 60 | // rising edge |
| 59 | 61 | if (state) |
| 60 | 62 | { |
| 63 | spectrum_UpdateBorderBitmap(); |
| 64 | |
| 61 | 65 | m_frame_number++; |
| 62 | 66 | |
| 63 | 67 | if (m_frame_number >= m_frame_invert_count) |
| r243364 | r243365 | |
| 65 | 69 | m_frame_number = 0; |
| 66 | 70 | m_flash_invert = !m_flash_invert; |
| 67 | 71 | } |
| 68 | | |
| 69 | | |
| 70 | | spectrum_UpdateBorderBitmap(); |
| 71 | 72 | } |
| 72 | 73 | } |
| 73 | 74 | |
| r243364 | r243365 | |
| 103 | 104 | |
| 104 | 105 | UINT32 spectrum_state::screen_update_spectrum(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 105 | 106 | { |
| 107 | if (m_border_bitmap.valid()) |
| 108 | copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect); |
| 109 | |
| 110 | #if 0 |
| 106 | 111 | // note, don't update borders in here, this can time travel w/regards to other timers and may end up giving you |
| 107 | 112 | // screen positions earlier than the last write handler gave you |
| 108 | 113 | |
| r243364 | r243365 | |
| 112 | 117 | unsigned char *attr, *scr; |
| 113 | 118 | // int full_refresh = 1; |
| 114 | 119 | |
| 115 | | if (m_border_bitmap.valid()) |
| 116 | | copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect); |
| 117 | | |
| 118 | 120 | scr=m_screen_location; |
| 119 | 121 | |
| 120 | 122 | for (y=0; y<192; y++) |
| r243364 | r243365 | |
| 149 | 151 | attr++; |
| 150 | 152 | } |
| 151 | 153 | } |
| 154 | #endif |
| 152 | 155 | |
| 153 | 156 | return 0; |
| 154 | 157 | } |
| r243364 | r243365 | |
| 191 | 194 | |
| 192 | 195 | if (m_border_bitmap.valid()) |
| 193 | 196 | { |
| 194 | | int colour = m_port_fe_data & 0x07; |
| 197 | UINT16 border = m_port_fe_data & 0x07; |
| 195 | 198 | |
| 196 | 199 | //printf("update border from %d,%d to %d,%d\n", m_previous_border_x, m_previous_border_y, x, y); |
| 197 | 200 | |
| 198 | 201 | do |
| 199 | 202 | { |
| 200 | | UINT16* bm = &m_border_bitmap.pix16(m_previous_border_y); |
| 201 | | bm[m_previous_border_x] = colour; |
| 203 | UINT16 scrx = m_previous_border_x - SPEC_LEFT_BORDER; |
| 204 | UINT16 scry = m_previous_border_y - SPEC_TOP_BORDER; |
| 202 | 205 | |
| 206 | if (scrx < SPEC_DISPLAY_XSIZE && scry < SPEC_DISPLAY_YSIZE) |
| 207 | { |
| 208 | // this can/must be optimised |
| 209 | if ((scrx & 7) == 0) { |
| 210 | UINT16 *bm = &m_border_bitmap.pix16(m_previous_border_y, m_previous_border_x); |
| 211 | UINT8 attr = *(m_screen_location + ((scry & 0xF8) << 2) + (scrx >> 3) + 0x1800); |
| 212 | UINT8 scr = *(m_screen_location + ((scry & 7) << 8) + ((scry & 0x38) << 2) + ((scry & 0xC0) << 5) + (scrx >> 3)); |
| 213 | UINT16 ink = (attr & 0x07) + ((attr >> 3) & 0x08); |
| 214 | UINT16 pap = (attr >> 3) & 0x0f; |
| 215 | |
| 216 | if (m_flash_invert && (attr & 0x80)) |
| 217 | scr = ~scr; |
| 218 | |
| 219 | for (UINT8 b = 0x80; b != 0; b >>= 1) |
| 220 | *bm++ = (scr & b) ? ink : pap; |
| 221 | } |
| 222 | } else |
| 223 | m_border_bitmap.pix16(m_previous_border_y, m_previous_border_x) = border; |
| 224 | |
| 203 | 225 | m_previous_border_x += 1; |
| 204 | 226 | |
| 205 | 227 | if (m_previous_border_x >= width) |