Previous 199869 Revisions Next

r34853 Wednesday 4th February, 2015 at 18:03:30 UTC by Couriersud
Merge branch 'master' of https://github.com/mamedev/mame.git
[src/mame/drivers]goodejan.c naomi.c sengokmj.c
[src/mess/drivers]pentagon.c spec128.c
[src/mess/video]spectrum.c

trunk/src/mame/drivers/goodejan.c
r243364r243365
7878public:
7979   goodejan_state(const machine_config &mconfig, device_type type, const char *tag)
8080      : driver_device(mconfig, type, tag),
81      m_maincpu(*this, "maincpu"),
82      m_gfxdecode(*this, "gfxdecode"),
83      m_palette(*this, "palette"),
8184      m_sc0_vram(*this, "sc0_vram"),
8285      m_sc1_vram(*this, "sc1_vram"),
8386      m_sc2_vram(*this, "sc2_vram"),
8487      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") { }
8989
90   required_device<cpu_device> m_maincpu;
91   required_device<gfxdecode_device> m_gfxdecode;
92   required_device<palette_device> m_palette;
93
9094   required_shared_ptr<UINT16> m_sc0_vram;
9195   required_shared_ptr<UINT16> m_sc1_vram;
9296   required_shared_ptr<UINT16> m_sc2_vram;
9397   required_shared_ptr<UINT16> m_sc3_vram;
9498   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
98100   tilemap_t *m_sc0_tilemap;
99101   tilemap_t *m_sc1_tilemap;
100102   tilemap_t *m_sc2_tilemap;
101103   tilemap_t *m_sc3_tilemap;
104   
102105   UINT16 m_mux_data;
103106   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);
105111   DECLARE_READ16_MEMBER(mahjong_panel_r);
106112   DECLARE_WRITE16_MEMBER(mahjong_panel_w);
107113   DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
108114   DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
109115   DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
110116   DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
117   DECLARE_WRITE16_MEMBER(layer_en_w);
118   DECLARE_WRITE16_MEMBER(layer_scroll_w);
119   
111120   TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
112121   TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
113122   TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
114123   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   
120127   void seibucrtc_sc0bank_w(UINT16 data);
121128   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
122129   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);
124131};
125132
126133/*******************************
r243364r243365
348355   m_sc3_tilemap->set_transparent_pen(15);
349356
350357   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));
351363}
352364
353UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
365UINT32 goodejan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
354366{
355367   bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
356368
r243364r243365
381393#define GOODEJAN_MHZ3 12000000
382394
383395
384WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w)
396WRITE16_MEMBER(goodejan_state::gfxbank_w)
385397{
386398   seibucrtc_sc0bank_w((data & 0x100)>>8);
387399}
r243364r243365
423435
424436/* totmejan CRTC is at 8000-804f,goodejan is at 8000-807f */
425437static 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)
427439   AM_RANGE(0xb000, 0xb003) AM_WRITENOP
428440   AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w)
429441
r243364r243365
592604   GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x100, 0x10 ) /* Text */
593605GFXDECODE_END
594606
595INTERRUPT_GEN_MEMBER(goodejan_state::goodejan_irq)
607INTERRUPT_GEN_MEMBER(goodejan_state::irq)
596608{
597609   device.execute().set_input_line_and_vector(0,HOLD_LINE,0x208/4);
598610/* vector 0x00c is just a reti */
r243364r243365
616628   MCFG_CPU_ADD("maincpu", V30, GOODEJAN_MHZ2/2)
617629   MCFG_CPU_PROGRAM_MAP(goodejan_map)
618630   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)
620632
621633   SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2)
622634
r243364r243365
626638   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
627639   MCFG_SCREEN_SIZE(32*8, 32*8)
628640   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)
630642   MCFG_SCREEN_PALETTE("palette")
631643
632644   MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
r243364r243365
742754   ROM_LOAD( "fmj08.083", 0x000, 0x100, CRC(9657b7ad) SHA1(e9b469c2b3534593f7fe0ea19cbbf93b55957e42) )
743755ROM_END
744756
745GAME( 1991, totmejan, 0,        totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS )
746GAME( 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 )
747GAME( 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 )
757GAME( 1991, totmejan, 0,        totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
758GAME( 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 )
759GAME( 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
r243364r243365
34663466
34673467   // 840-0016    1999     317-0262-JPN   Naomi
34683468   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) )
34693480ROM_END
34703481
34713482ROM_START( derbyocw )
r243364r243365
39333944   ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated
39343945ROM_END
39353946
3947// IC22 shown in ROM TEST as BAD, but its byte summ matches written on label, verified on 2 cartridges
39363948ROM_START( hotd2p )
39373949   HOTD2_BIOS
39383950   NAOMI_DEFAULT_EEPROM
r243364r243365
39643976   ROM_LOAD( "mpr-21404.ic19s", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
39653977   ROM_LOAD( "mpr-21405.ic20s", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
39663978
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")
39683981ROM_END
39693982
39703983/*
r243364r243365
51575170   ROM_PARAMETER( ":rom_board:segam2crypt:key", "280a8b5d" )
51585171ROM_END
51595172
5173// !!! partial dump, only IC22 dumped. without correct flashroms contents game crashes at certain points.
51605174// prototype - only works with US BIOS
51615175ROM_START( sambap )
51625176   NAOMI_BIOS
r243364r243365
77717785   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
77727786   //PIC16C621A (317-0567-EXP)
77737787   //(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) )
77757789ROM_END
77767790
77777791
r243364r243365
85578571   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
85588572   ROM_LOAD( "610-0752.u3",  0x0000000, 0x1000000, CRC(bab6182e) SHA1(4d25256c81941316887cbb4524a203922f5b7104) )
85598573   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) )
85668580
85678581   ROM_REGION( 4, "rom_key", 0 )
85688582   ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) )
trunk/src/mame/drivers/sengokmj.c
r243364r243365
6666public:
6767   sengokmj_state(const machine_config &mconfig, device_type type, const char *tag)
6868      : driver_device(mconfig, type, tag),
69      m_maincpu(*this, "maincpu"),
70      m_gfxdecode(*this, "gfxdecode"),
71      m_palette(*this, "palette"),
6972      m_sc0_vram(*this, "sc0_vram"),
7073      m_sc1_vram(*this, "sc1_vram"),
7174      m_sc2_vram(*this, "sc2_vram"),
7275      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") { }
7777
78   required_device<cpu_device> m_maincpu;
79   required_device<gfxdecode_device> m_gfxdecode;
80   required_device<palette_device> m_palette;
81
7882   required_shared_ptr<UINT16> m_sc0_vram;
7983   required_shared_ptr<UINT16> m_sc1_vram;
8084   required_shared_ptr<UINT16> m_sc2_vram;
8185   required_shared_ptr<UINT16> m_sc3_vram;
8286   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
8688   tilemap_t *m_sc0_tilemap;
8789   tilemap_t *m_sc1_tilemap;
8890   tilemap_t *m_sc2_tilemap;
8991   tilemap_t *m_sc3_tilemap;
90   UINT16 m_sengokumj_mux_data;
92   
93   UINT16 m_mux_data;
9194   UINT8 m_hopper_io;
9295   UINT16 m_layer_en;
9396   UINT16 m_scrollram[6];
97   
9498   DECLARE_READ16_MEMBER(mahjong_panel_r);
9599   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);
98102   DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
99103   DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
100104   DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
101105   DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
106   DECLARE_WRITE16_MEMBER(layer_en_w);
107   DECLARE_WRITE16_MEMBER(layer_scroll_w);
108   
102109   TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
103110   TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
104111   TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
105112   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);
109115
116   virtual void machine_start();
117   virtual void video_start();
118
110119   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);
113121};
114122
115123
r243364r243365
294302   m_sc2_tilemap->set_transparent_pen(15);
295303   m_sc1_tilemap->set_transparent_pen(15);
296304   m_sc3_tilemap->set_transparent_pen(15);
305
306   save_item(NAME(m_layer_en));
307   save_item(NAME(m_scrollram));
297308}
298309
299UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
310UINT32 sengokmj_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
300311{
301312   bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
302313
r243364r243365
323334}
324335
325336
337void sengokmj_state::machine_start()
338{
339   save_item(NAME(m_mux_data));
340   save_item(NAME(m_hopper_io));
341}
326342
327343
328344/* Multiplexer device for the mahjong panel */
r243364r243365
334350
335351   for(i=0;i<5;i++)
336352   {
337      if(m_sengokumj_mux_data & 1 << i)
353      if(m_mux_data & 1 << i)
338354         res = ioport(mpnames[i])->read();
339355   }
340356
r243364r243365
343359
344360WRITE16_MEMBER(sengokmj_state::mahjong_panel_w)
345361{
346   m_sengokumj_mux_data = (data & 0x3f00) >> 8;
362   m_mux_data = (data & 0x3f00) >> 8;
347363
348364   if(data & 0xc0ff)
349365      logerror("Write to mux %04x\n",data);
350366}
351367
352WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
368WRITE16_MEMBER(sengokmj_state::out_w)
353369{
354370   /* ---- ---- ---x ---- J.P. Signal (?)*/
355371   /* ---- ---- ---- -x-- Coin counter (done AFTER you press start)*/
r243364r243365
362378//  popmessage("%02x",m_hopper_io);
363379}
364380
365READ16_MEMBER(sengokmj_state::sengokmj_system_r)
381READ16_MEMBER(sengokmj_state::system_r)
366382{
367383   return (ioport("SYSTEM")->read() & 0xffbf) | m_hopper_io;
368384}
r243364r243365
387403//  AM_RANGE(0x8080, 0x8081) CRTC extra register?
388404//  AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
389405//  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)
391407   AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w)
392408   AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
393409   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
395411ADDRESS_MAP_END
396412
397413
r243364r243365
538554   GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x700, 0x10 ) /* Text */
539555GFXDECODE_END
540556
541INTERRUPT_GEN_MEMBER(sengokmj_state::sengokmj_interrupt)
557INTERRUPT_GEN_MEMBER(sengokmj_state::interrupt)
542558{
543559   device.execute().set_input_line_and_vector(0,HOLD_LINE,0xc8/4);
544560}
r243364r243365
560576   MCFG_CPU_ADD("maincpu", V30, 16000000/2) /* V30-8 */
561577   MCFG_CPU_PROGRAM_MAP(sengokmj_map)
562578   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)
564580
565581   SEIBU_SOUND_SYSTEM_CPU(14318180/4)
566582
r243364r243365
572588   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
573589   MCFG_SCREEN_SIZE(64*8, 32*8)
574590   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)
576592   MCFG_SCREEN_PALETTE("palette")
577593
578594   MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
r243364r243365
624640   ROM_LOAD( "rs006.89", 0x000, 0x200, CRC(96f7646e) SHA1(400a831b83d6ac4d2a46ef95b97b1ee237099e44) ) /* Priority */
625641ROM_END
626642
627GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS )
643GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
628644/*Non-Bet Version?*/
trunk/src/mess/drivers/pentagon.c
r243364r243365
120120   if (m_port_7ffd_data & 0x20)
121121      return;
122122
123   if ((m_port_7ffd_data ^ data) & 0x08)
124      spectrum_UpdateBorderBitmap();
125
123126   /* store new state */
124127   m_port_7ffd_data = data;
125128
trunk/src/mess/drivers/spec128.c
r243364r243365
172172   if (m_port_7ffd_data & 0x20)
173173         return;
174174
175   if ((m_port_7ffd_data ^ data) & 0x08)
176      spectrum_UpdateBorderBitmap();
177
175178   /* store new state */
176179   m_port_7ffd_data = data;
177180
trunk/src/mess/video/spectrum.c
r243364r243365
3939
4040   m_previous_border_x = 0; m_previous_border_y = 0;
4141   machine().first_screen()->register_screen_bitmap(m_border_bitmap);
42
43   m_screen_location = m_ram->pointer() + (5 << 14);
4244}
4345
4446
r243364r243365
5860   // rising edge
5961   if (state)
6062   {
63      spectrum_UpdateBorderBitmap();
64
6165      m_frame_number++;
6266
6367      if (m_frame_number >= m_frame_invert_count)
r243364r243365
6569         m_frame_number = 0;
6670         m_flash_invert = !m_flash_invert;
6771      }
68
69
70      spectrum_UpdateBorderBitmap();
7172   }
7273}
7374
r243364r243365
103104
104105UINT32 spectrum_state::screen_update_spectrum(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
105106{
107   if (m_border_bitmap.valid())
108      copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect);
109
110#if 0
106111   // note, don't update borders in here, this can time travel w/regards to other timers and may end up giving you
107112   // screen positions earlier than the last write handler gave you
108113
r243364r243365
112117   unsigned char *attr, *scr;
113118   //  int full_refresh = 1;
114119
115   if (m_border_bitmap.valid())
116      copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect);
117
118120   scr=m_screen_location;
119121
120122   for (y=0; y<192; y++)
r243364r243365
149151         attr++;
150152      }
151153   }
154#endif
152155
153156   return 0;
154157}
r243364r243365
191194
192195   if (m_border_bitmap.valid())
193196   {
194      int colour = m_port_fe_data & 0x07;
197      UINT16 border = m_port_fe_data & 0x07;
195198
196199      //printf("update border from %d,%d to %d,%d\n", m_previous_border_x, m_previous_border_y, x, y);
197200
198201      do
199202      {
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;
202205
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
203225         m_previous_border_x += 1;
204226
205227         if (m_previous_border_x >= width)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team