Removed jalmah.c / ddealer / hachamf / tdragon protection routines due of license change, wondering how people are going to reimplement these without resorting to decap ...

This commit is contained in:
Angelo Salese 2013-10-15 16:54:48 +00:00
parent 86bed4601a
commit 3fe679b23d
6 changed files with 7 additions and 2952 deletions

1
.gitattributes vendored
View File

@ -3284,7 +3284,6 @@ src/mame/drivers/jackie.c svneol=native#text/plain
src/mame/drivers/jackpool.c svneol=native#text/plain
src/mame/drivers/jaguar.c svneol=native#text/plain
src/mame/drivers/jailbrek.c svneol=native#text/plain
src/mame/drivers/jalmah.c svneol=native#text/plain
src/mame/drivers/jangou.c svneol=native#text/plain
src/mame/drivers/jankenmn.c svneol=native#text/plain
src/mame/drivers/jantotsu.c svneol=native#text/plain

View File

@ -314,65 +314,7 @@ UINT32 ddealer_state::screen_update_ddealer(screen_device &screen, bitmap_ind16
TIMER_DEVICE_CALLBACK_MEMBER(ddealer_state::ddealer_mcu_sim)
{
/*coin/credit simulation*/
/*$fe002 is used,might be for multiple coins for one credit settings.*/
m_coin_input = (~(ioport("IN0")->read()));
if (m_coin_input & 0x01)//coin 1
{
if((m_input_pressed & 0x01) == 0)
m_mcu_shared_ram[0x000 / 2]++;
m_input_pressed = (m_input_pressed & 0xfe) | 1;
}
else
m_input_pressed = (m_input_pressed & 0xfe);
if (m_coin_input & 0x02)//coin 2
{
if ((m_input_pressed & 0x02) == 0)
m_mcu_shared_ram[0x000 / 2]++;
m_input_pressed = (m_input_pressed & 0xfd) | 2;
}
else
m_input_pressed = (m_input_pressed & 0xfd);
if (m_coin_input & 0x04)//service 1
{
if ((m_input_pressed & 0x04) == 0)
m_mcu_shared_ram[0x000 / 2]++;
m_input_pressed = (m_input_pressed & 0xfb) | 4;
}
else
m_input_pressed = (m_input_pressed & 0xfb);
/*0x104/2 is some sort of "start-lock",i.e. used on the girl selection.
Without it,the game "steals" one credit if you press the start button on that.*/
if (m_mcu_shared_ram[0x000 / 2] > 0 && m_work_ram[0x104 / 2] & 1)
{
if (m_coin_input & 0x08)//start 1
{
if ((m_input_pressed & 0x08) == 0 && (~(m_work_ram[0x100 / 2] & 1)))
m_mcu_shared_ram[0x000 / 2]--;
m_input_pressed = (m_input_pressed & 0xf7) | 8;
}
else
m_input_pressed = (m_input_pressed & 0xf7);
if (m_coin_input & 0x10)//start 2
{
if((m_input_pressed & 0x10) == 0 && (~(m_work_ram[0x100 / 2] & 2)))
m_mcu_shared_ram[0x000 / 2]--;
m_input_pressed = (m_input_pressed & 0xef) | 0x10;
}
else
m_input_pressed = (m_input_pressed & 0xef);
}
/*random number generators,controls order of cards*/
m_mcu_shared_ram[0x10 / 2] = machine().rand() & 0xffff;
m_mcu_shared_ram[0x12 / 2] = machine().rand() & 0xffff;
m_mcu_shared_ram[0x14 / 2] = machine().rand() & 0xffff;
m_mcu_shared_ram[0x16 / 2] = machine().rand() & 0xffff;
}
@ -395,76 +337,10 @@ Protection handling,identical to Hacha Mecha Fighter / Thunder Dragon with diffe
******************************************************************************************************/
#define PROT_JSR(_offs_,_protvalue_,_pc_) \
if(m_mcu_shared_ram[(_offs_)/2] == _protvalue_) \
{ \
m_mcu_shared_ram[(_offs_)/2] = 0xffff; /*(MCU job done)*/ \
m_mcu_shared_ram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\
m_mcu_shared_ram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\
m_mcu_shared_ram[(_offs_+6-0x10)/2] = _pc_; /*LO-DWORD*/\
}
#define PROT_INPUT(_offs_,_protvalue_,_protinput_,_input_) \
if(m_mcu_shared_ram[_offs_] == _protvalue_) \
{\
m_mcu_shared_ram[_protinput_] = ((_input_ & 0xffff0000)>>16);\
m_mcu_shared_ram[_protinput_+1] = (_input_ & 0x0000ffff);\
}
WRITE16_MEMBER(ddealer_state::ddealer_mcu_shared_w)
{
COMBINE_DATA(&m_mcu_shared_ram[offset]);
switch(offset)
{
case 0x086/2: PROT_INPUT(0x086/2,0x1234,0x100/2,0x80000); break;
case 0x164/2: PROT_INPUT(0x164/2,0x5678,0x104/2,0x80002); break;
case 0x62e/2: PROT_INPUT(0x62e/2,0x9ca3,0x108/2,0x80008); break;
case 0x734/2: PROT_INPUT(0x734/2,0xaba2,0x10c/2,0x8000a); break;
/*These enables something for sure,maybe the random number generator?*/
//00054C: 33FC B891 000F E828 move.w #$b891, $fe828.l
//000554: 33FC C760 000F E950 move.w #$c760, $fe950.l
//00055C: 33FC D45F 000F EA7C move.w #$d45f, $fea7c.l
//000564: 33FC E32E 000F ED4A move.w #$e32e, $fed4a.l
case 0x40e/2: PROT_JSR(0x40e,0x8011,0x6992); break;//score
case 0x41e/2: break;//unused
case 0x42e/2: PROT_JSR(0x42e,0x8007,0x6004); break;//cards on playfield/hand (ram side)
case 0x43e/2: PROT_JSR(0x43e,0x801d,0x6176); break;//second player sub-routine
case 0x44e/2: PROT_JSR(0x44e,0x8028,0x6932); break;//"gun card" logic
case 0x45e/2: PROT_JSR(0x45e,0x803e,0x6f90); break;//card delete
case 0x46e/2: PROT_JSR(0x46e,0x8033,0x93c2); break;//card movements
case 0x47e/2: PROT_JSR(0x47e,0x8026,0x67a0); break;//cards on playfield (vram side)
case 0x48e/2: PROT_JSR(0x48e,0x8012,0x6824); break;//cards on hand (vram side)
case 0x49e/2: PROT_JSR(0x49e,0x8004,0x9696); break;//write to text layer
case 0x4ae/2: PROT_JSR(0x4ae,0x8035,0x95fe); break;//write to scroll layer
case 0x4be/2: PROT_JSR(0x4be,0x8009,0x9634); break;//show girls sub-routine
case 0x4ce/2: PROT_JSR(0x4ce,0x802a,0x9656); break;
case 0x4de/2: PROT_JSR(0x4de,0x803b,0x96c2); break;
case 0x4ee/2: PROT_JSR(0x4ee,0x800c,0x5ca4); break;//palette ram buffer
case 0x4fe/2: PROT_JSR(0x4fe,0x8018,0x9818); break;
/*Start-up vector,I think that only the first ram address can be written by the main CPU,or it is a whole sequence.*/
case 0x000/2:
if (m_mcu_shared_ram[0x000 / 2] == 0x60fe)
{
m_mcu_shared_ram[0x000 / 2] = 0x0000;//coin counter
m_mcu_shared_ram[0x002 / 2] = 0x0000;//coin counter "decimal point"
m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
}
break;
case 0x002/2:
case 0x004/2:
if (m_mcu_shared_ram[0x002 / 2] == 0x0000 && m_mcu_shared_ram[0x004 / 2] == 0x0214)
m_mcu_shared_ram[0x004 / 2] = 0x4ef9;
break;
case 0x008/2:
if (m_mcu_shared_ram[0x008 / 2] == 0x000f)
m_mcu_shared_ram[0x008 / 2] = 0x0604;
break;
case 0x00c/2:
if (m_mcu_shared_ram[0x00c / 2] == 0x000f)
m_mcu_shared_ram[0x00c / 2] = 0x0000;
break;
}
}
static ADDRESS_MAP_START( ddealer, AS_PROGRAM, 16, ddealer_state )
@ -690,4 +566,4 @@ ROM_START( ddealer )
ROM_LOAD( "6.ic86", 0x100, 0x100, NO_DUMP )
ROM_END
GAME( 1991, ddealer, 0, ddealer, ddealer, ddealer_state, ddealer, ROT0, "NMK", "Double Dealer", GAME_SUPPORTS_SAVE )
GAME( 1991, ddealer, 0, ddealer, ddealer, ddealer_state, ddealer, ROT0, "NMK", "Double Dealer", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_SUPPORTS_SAVE )

File diff suppressed because it is too large Load Diff

View File

@ -479,163 +479,10 @@ static ADDRESS_MAP_START( bioship_map, AS_PROGRAM, 16, nmk16_state )
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
/******************************************************************************************
Thunder Dragon & Hacha Mecha Fighter shares some ram with the MCU,the job of the latter
is to provide some jsr vectors used by the game for gameplay calculations.Also it has
the job to give the vectors of where the inputs are to be read & to calculate the coin
settings,the latter is in a TIMER_DEVICE_CALLBACK to avoid sync problems.
To make a long story short,this MCU is an alternative version of the same protection
used by the MJ-8956 games (there are even the same kind of error codes!(i.e the number
printed on the up-left corner of the screen)...
Note: I'm 100% sure of the Thunder Dragon vectors because I've compared it with the
bootleg sets,I'm *not* 100% sure of the Hacha Mecha Fighter vectors because I don't have
anything to compare and I don't know if for example an option should be there if you lose a
life,but the game looks pretty much hard without it.
******************************************************************************************/
#define PROT_JSR(_offs_,_protvalue_,_pc_) \
if(m_mainram[(_offs_)/2] == _protvalue_) \
{ \
m_mainram[(_offs_)/2] = 0xffff; /*(MCU job done)*/ \
m_mainram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\
m_mainram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\
m_mainram[(_offs_+6-0x10)/2] = _pc_; /*LO-DWORD*/\
}
#define PROT_INPUT(_offs_,_protvalue_,_protinput_,_input_) \
if(m_mainram[_offs_] == _protvalue_) \
{ \
m_mainram[_protinput_] = ((_input_ & 0xffff0000)>>16);\
m_mainram[_protinput_+1] = (_input_ & 0x0000ffff);\
}
#ifdef UNUSED_FUNCTION
READ16_MEMBER(nmk16_state::mcu_shared_r)
{
return nmk16_mcu_shared_ram[offset];
}
#endif
//td - hmf
//008D9E - 00796e
/*
007B9E: bra 7b9c
007BA0: move.w #$10, $f907a.l
007BA8: bsr 8106
007BAC: bsr dfc4
007BB0: bsr c44e
007BB4: bcs 7cfa
007BB8: bsr d9c6
007BBC: bsr 9400
007BC0: bsr 7a54
007BC4: bsr da06
007BC8: cmpi.w #$3, $f907a.l
007BD0: bcc 7be2
007BD2: move.w #$a, $f530e.l
007BDA: move.w #$a, $f670e.l
007BE2: bsr 81aa
007BE6: bsr 8994
007BEA: bsr 8c36
007BEE: bsr 8d0c
007BF2: bsr 870a
007BF6: bsr 9d66
007BFA: bsr b3f2
007BFE: bsr b59e
007C02: bsr 9ac2
007C06: bsr c366
thunder dragon algorithm (level 1):
90 - spriteram update
a0 - tilemap update
b0 - player inputs
c0 - controls sprite animation
d0 - player shoots
e0 - controls power-ups
f0 - player bombs
00 - controls player shoots
10 - ?
20 - level logic
30 - enemy appearence
40 - enemy energy
50 - enemy energy 2
60 - enemy shoots
hacha mecha fighter algorithm (level 1):
90 - spriteram update (d9c6)
a0 - tilemap update (d1f8?)
b0 - player inputs (da06)
c0 - controls sprite animation (81aa)
d0 - player shoots (8994)
e0 - controls power-ups & options (8d0c)
f0 - player bombs (8c36)
00 - controls player shoots (870a)
10 - ?
20 - level logic (9642)
30 - enemy appearence (9d66)
40 - enemy energy (b3f2)
50 - enemy energy 2 (b59e)
60 - enemy shoots (9ac2)
70 - ?
80 - <unused>
*/
WRITE16_MEMBER(nmk16_state::hachamf_mainram_w)
{
COMBINE_DATA(&m_mainram[offset]);
switch(offset)
{
case 0xe058/2: PROT_INPUT(0xe058/2,0xc71f,0xe000/2,0x00080000); break;
case 0xe182/2: PROT_INPUT(0xe182/2,0x865d,0xe004/2,0x00080002); break;
case 0xe51e/2: PROT_INPUT(0xe51e/2,0x0f82,0xe008/2,0x00080008); break;
case 0xe6b4/2: PROT_INPUT(0xe6b4/2,0x79be,0xe00c/2,0x0008000a); break;
case 0xe10e/2: PROT_JSR(0xe10e,0x8007,0x870a);//870a not 9d66
PROT_JSR(0xe10e,0x8000,0xd9c6); break;
case 0xe11e/2: PROT_JSR(0xe11e,0x8038,0x972a);//972a
PROT_JSR(0xe11e,0x8031,0xd1f8); break;
case 0xe12e/2: PROT_JSR(0xe12e,0x8019,0x9642);//OK-9642
PROT_JSR(0xe12e,0x8022,0xda06); break;
case 0xe13e/2: PROT_JSR(0xe13e,0x802a,0x9d66);//9d66 not 9400 - OK
PROT_JSR(0xe13e,0x8013,0x81aa); break;
case 0xe14e/2: PROT_JSR(0xe14e,0x800b,0xb3f2);//b3f2 - OK
PROT_JSR(0xe14e,0x8004,0x8994); break;
case 0xe15e/2: PROT_JSR(0xe15e,0x803c,0xb59e);//b59e - OK
PROT_JSR(0xe15e,0x8035,0x8d0c); break;
case 0xe16e/2: PROT_JSR(0xe16e,0x801d,0x9ac2);//9ac2 - OK
PROT_JSR(0xe16e,0x8026,0x8c36); break;
case 0xe17e/2: PROT_JSR(0xe17e,0x802e,0xc366);//c366 - OK
PROT_JSR(0xe17e,0x8017,0x870a); break;
case 0xe18e/2: PROT_JSR(0xe18e,0x8004,0xd620); //unused
PROT_JSR(0xe18e,0x8008,0x972a); break; //unused
case 0xe19e/2: PROT_JSR(0xe19e,0x8030,0xd9c6);//OK-d9c6
PROT_JSR(0xe19e,0x8039,0x9642); break;
case 0xe1ae/2: PROT_JSR(0xe1ae,0x8011,0xd1f8);//d1f8 not c67e
PROT_JSR(0xe1ae,0x802a,0x9d66); break;
case 0xe1be/2: PROT_JSR(0xe1be,0x8022,0xda06);//da06
PROT_JSR(0xe1be,0x801b,0xb3f2); break;
case 0xe1ce/2: PROT_JSR(0xe1ce,0x8003,0x81aa);//81aa
PROT_JSR(0xe1ce,0x800c,0xb59e); break;
case 0xe1de/2: PROT_JSR(0xe1de,0x8034,0x8994);//8994 - OK
PROT_JSR(0xe1de,0x803d,0x9ac2); break;
case 0xe1ee/2: PROT_JSR(0xe1ee,0x8015,0x8d0c);//8d0c not 82f6
PROT_JSR(0xe1ee,0x802e,0xc366); break;
case 0xe1fe/2: PROT_JSR(0xe1fe,0x8026,0x8c36);//8c36
PROT_JSR(0xe1fe,0x8016,0xd620); break; //unused
case 0xef00/2:
if(m_mainram[0xef00/2] == 0x60fe)
{
m_mainram[0xef00/2] = 0x0000; //this is the coin counter
m_mainram[0xef02/2] = 0x0000;
m_mainram[0xef04/2] = 0x4ef9;
m_mainram[0xef06/2] = 0x0000;
m_mainram[0xef08/2] = 0x7dc2;
}
break;
}
}
static ADDRESS_MAP_START( hachamf_map, AS_PROGRAM, 16, nmk16_state )
@ -663,195 +510,12 @@ ADDRESS_MAP_END
WRITE16_MEMBER(nmk16_state::tdragon_mainram_w)
{
COMBINE_DATA(&m_mainram[offset]);
switch(offset)
{
case 0xe066/2: PROT_INPUT(0xe066/2,0xe23e,0xe000/2,0x000c0000); break;
case 0xe144/2: PROT_INPUT(0xe144/2,0xf54d,0xe004/2,0x000c0002); break;
case 0xe60e/2: PROT_INPUT(0xe60e/2,0x067c,0xe008/2,0x000c0008); break;
case 0xe714/2: PROT_INPUT(0xe714/2,0x198b,0xe00c/2,0x000c000a); break;
case 0xe70e/2: PROT_JSR(0xe70e,0x8007,0x9e22);
PROT_JSR(0xe70e,0x8000,0xd518); break;
case 0xe71e/2: PROT_JSR(0xe71e,0x8038,0xaa0a);
PROT_JSR(0xe71e,0x8031,0x8e7c); break;
case 0xe72e/2: PROT_JSR(0xe72e,0x8019,0xac48);
PROT_JSR(0xe72e,0x8022,0xd558); break;
case 0xe73e/2: PROT_JSR(0xe73e,0x802a,0xb110);
PROT_JSR(0xe73e,0x8013,0x96da); break;
case 0xe74e/2: PROT_JSR(0xe74e,0x800b,0xb9b2);
PROT_JSR(0xe74e,0x8004,0xa062); break;
case 0xe75e/2: PROT_JSR(0xe75e,0x803c,0xbb4c);
PROT_JSR(0xe75e,0x8035,0xa154); break;
case 0xe76e/2: PROT_JSR(0xe76e,0x801d,0xafa6);
PROT_JSR(0xe76e,0x8026,0xa57a); break;
case 0xe77e/2: PROT_JSR(0xe77e,0x802e,0xc6a4);
PROT_JSR(0xe77e,0x8017,0x9e22); break;
case 0xe78e/2: PROT_JSR(0xe78e,0x8004,0xaa0a);
PROT_JSR(0xe78e,0x8008,0xaa0a); break;
case 0xe79e/2: PROT_JSR(0xe79e,0x8030,0xd518);
PROT_JSR(0xe79e,0x8039,0xac48); break;
case 0xe7ae/2: PROT_JSR(0xe7ae,0x8011,0x8e7c);
PROT_JSR(0xe7ae,0x802a,0xb110); break;
case 0xe7be/2: PROT_JSR(0xe7be,0x8022,0xd558);
PROT_JSR(0xe7be,0x801b,0xb9b2); break;
case 0xe7ce/2: PROT_JSR(0xe7ce,0x8003,0x96da);
PROT_JSR(0xe7ce,0x800c,0xbb4c); break;
case 0xe7de/2: PROT_JSR(0xe7de,0x8034,0xa062);
PROT_JSR(0xe7de,0x803d,0xafa6); break;
case 0xe7ee/2: PROT_JSR(0xe7ee,0x8015,0xa154);
PROT_JSR(0xe7ee,0x802e,0xc6a4); break;
case 0xe7fe/2: PROT_JSR(0xe7fe,0x8026,0xa57a);
PROT_JSR(0xe7fe,0x8016,0xa57a); break;
case 0xef00/2:
if(m_mainram[0xef00/2] == 0x60fe)
{
m_mainram[0xef00/2] = 0x0000; //this is the coin counter
m_mainram[0xef02/2] = 0x0000;
m_mainram[0xef04/2] = 0x4ef9;
m_mainram[0xef06/2] = 0x0000;
m_mainram[0xef08/2] = 0x92f4;
}
break;
}
}
/*coin setting MCU simulation*/
void nmk16_state::mcu_run(UINT8 dsw_setting)
{
UINT16 coin_input;
UINT8 dsw[2];
UINT8 i;
/*Accept the start button but needs some m68k processing first,otherwise you can't start a play with 1 credit inserted*/
if(m_start_helper & 1 && m_mainram[0x9000/2] & 0x0200) /*start 1 */
{
m_mainram[0xef00/2]--;
m_start_helper = m_start_helper & 2;
}
if(m_start_helper & 2 && m_mainram[0x9000/2] & 0x0100) /*start 2*/
{
m_mainram[0xef00/2]--;
m_start_helper = m_start_helper & 1;
}
/*needed because of the uncompatibility of the dsw settings.*/
if(dsw_setting) // Thunder Dragon
{
dsw[0] = (ioport("DSW2")->read() & 0x7);
dsw[1] = (ioport("DSW2")->read() & 0x38) >> 3;
for(i=0;i<2;i++)
{
switch(dsw[i] & 7)
{
case 0: m_mainram[0x9000/2]|=0x4000; break; //free play
case 1: m_coin_count_frac[i] = 1; m_coin_count[i] = 4; break;
case 2: m_coin_count_frac[i] = 1; m_coin_count[i] = 3; break;
case 3: m_coin_count_frac[i] = 1; m_coin_count[i] = 2; break;
case 4: m_coin_count_frac[i] = 4; m_coin_count[i] = 1; break;
case 5: m_coin_count_frac[i] = 3; m_coin_count[i] = 1; break;
case 6: m_coin_count_frac[i] = 2; m_coin_count[i] = 1; break;
case 7: m_coin_count_frac[i] = 1; m_coin_count[i] = 1; break;
}
}
}
else // Hacha Mecha Fighter
{
dsw[0] = (ioport("DSW1")->read() & 0x0700) >> 8;
dsw[1] = (ioport("DSW1")->read() & 0x3800) >> 11;
for(i=0;i<2;i++)
{
switch(dsw[i] & 7)
{
case 0: m_mainram[0x9000/2]|=0x4000; break; //free play
case 1: m_coin_count_frac[i] = 4; m_coin_count[i] = 1; break;
case 2: m_coin_count_frac[i] = 3; m_coin_count[i] = 1; break;
case 3: m_coin_count_frac[i] = 2; m_coin_count[i] = 1; break;
case 4: m_coin_count_frac[i] = 1; m_coin_count[i] = 4; break;
case 5: m_coin_count_frac[i] = 1; m_coin_count[i] = 3; break;
case 6: m_coin_count_frac[i] = 1; m_coin_count[i] = 2; break;
case 7: m_coin_count_frac[i] = 1; m_coin_count[i] = 1; break;
}
}
}
/*read the coin port*/
coin_input = (~(ioport("IN0")->read()));
if(coin_input & 0x01)//coin 1
{
if((m_input_pressed & 0x01) == 0)
{
if(m_coin_count_frac[0] != 1)
{
m_mainram[0xef02/2]+=m_coin_count[0];
if(m_coin_count_frac[0] == m_mainram[0xef02/2])
{
m_mainram[0xef00/2]+=m_coin_count[0];
m_mainram[0xef02/2] = 0;
}
}
else
m_mainram[0xef00/2]+=m_coin_count[0];
}
m_input_pressed = (m_input_pressed & 0xfe) | 1;
}
else
m_input_pressed = (m_input_pressed & 0xfe);
if(coin_input & 0x02)//coin 2
{
if((m_input_pressed & 0x02) == 0)
{
if(m_coin_count_frac[1] != 1)
{
m_mainram[0xef02/2]+=m_coin_count[1];
if(m_coin_count_frac[1] == m_mainram[0xef02/2])
{
m_mainram[0xef00/2]+=m_coin_count[1];
m_mainram[0xef02/2] = 0;
}
}
else
m_mainram[0xef00/2]+=m_coin_count[1];
}
m_input_pressed = (m_input_pressed & 0xfd) | 2;
}
else
m_input_pressed = (m_input_pressed & 0xfd);
if(coin_input & 0x04)//service 1
{
if((m_input_pressed & 0x04) == 0)
m_mainram[0xef00/2]++;
m_input_pressed = (m_input_pressed & 0xfb) | 4;
}
else
m_input_pressed = (m_input_pressed & 0xfb);
/*The 0x9000 ram address is the status */
if(m_mainram[0xef00/2] > 0 && m_mainram[0x9000/2] & 0x8000) //enable start button
{
if(coin_input & 0x08)//start 1
{
if((m_input_pressed & 0x08) == 0 && (!(m_mainram[0x9000/2] & 0x0200))) //start 1
m_start_helper = 1;
m_input_pressed = (m_input_pressed & 0xf7) | 8;
}
else
m_input_pressed = (m_input_pressed & 0xf7);
if(coin_input & 0x10)//start 2
{
/*Decrease two coins to let two players play with one start 2 button and two credits inserted at the insert coin screen.*/
if((m_input_pressed & 0x10) == 0 && (!(m_mainram[0x9000/2] & 0x0100))) // start 2
m_start_helper = (m_mainram[0x9000/2] == 0x8000) ? (3) : (2);
m_input_pressed = (m_input_pressed & 0xef) | 0x10;
}
else
m_input_pressed = (m_input_pressed & 0xef);
}
// ...
}
TIMER_DEVICE_CALLBACK_MEMBER(nmk16_state::tdragon_mcu_sim)
@ -7437,10 +7101,10 @@ GAME( 1991, acrobatm, 0, acrobatm, acrobatm, driver_device, 0, ROT
GAME( 1992, strahl, 0, strahl, strahl, driver_device, 0, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 1)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1992, strahla, strahl, strahl, strahl, driver_device, 0, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, tdragon, 0, tdragon, tdragon, nmk16_state, tdragon, ROT270, "NMK (Tecmo license)", "Thunder Dragon (9th Jan. 1992)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, tdragon1, tdragon, tdragon, tdragon, nmk16_state, tdragon, ROT270, "NMK (Tecmo license)", "Thunder Dragon (4th Jun. 1991)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, tdragon, 0, tdragon, tdragon, nmk16_state, tdragon, ROT270, "NMK (Tecmo license)", "Thunder Dragon (9th Jan. 1992)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, tdragon1, tdragon, tdragon, tdragon, nmk16_state, tdragon, ROT270, "NMK (Tecmo license)", "Thunder Dragon (4th Jun. 1991)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, hachamf, 0, hachamf, hachamf, nmk16_state, hachamf, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1991, hachamf, 0, hachamf, hachamf, nmk16_state, hachamf, ROT0, "NMK", "Hacha Mecha Fighter (19th Sep. 1991)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1992, macross, 0, macross, macross, nmk16_state, nmk, ROT270, "Banpresto", "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )

View File

@ -7679,7 +7679,6 @@ omegaf // UPL-89016 (c) 1989
omegafs // UPL-89016 (c) 1989
// UPL/NMK/Banpresto games
urashima // UPL-89052
tharrier // UPL-89053 (c) 1989 UPL
tharrieru // UPL-89053 (c) 1989 UPL + American Sammy license
mustang // UPL-90058 (c) 1990 UPL
@ -7730,13 +7729,6 @@ airattcka // (c) 1996 Comad
// Bee-Oh games on unofficial hardware based on nmk16.c
manybloc // (c) 1991 Bee-Oh
// Jaleco Mahjong Games, Similar Hardware to the NMK ones above?
daireika // (c) 1989 Jaleco/NMK
mjzoomin // (c) 1990
kakumei // (c) 1990
kakumei2 // (c) 1992
suchipi // (c) 1993
// NMK Double Dealer, Similar Hardware to Jaleco Mahjong games above
ddealer // (c) 1991 NMK
@ -9981,7 +9973,7 @@ thedeep // (c) 1987 Wood Place
rundeep // (c) 1988 Cream (bootleg?)
wallc // (c) 1984 Midcoin
wallca // (c) 1984 Midcoin
sidampkr //
sidampkr //
wink // (c) 1985 Midcoin
winka // (c) 1985 Midcoin
24cdjuke // (c) 1988 Midcoin
@ -10233,7 +10225,7 @@ dambustr // (c) 1981 South West Research
dambustra // (c) 1981 South West Research
dambustruk // (c) 1981 South West Research
gunpey // (c) 2000 Banpresto
hideseek //
hideseek //
spaceg // (c) 19??
gldarrow // (c) 1984 Meyco Games
wldarrow // (c) 1982 Meyco Games

View File

@ -1429,7 +1429,6 @@ $(MAMEOBJ)/nmk.a: \
$(DRIVERS)/acommand.o \
$(DRIVERS)/cultures.o \
$(DRIVERS)/ddealer.o \
$(DRIVERS)/jalmah.o \
$(DRIVERS)/macrossp.o $(VIDEO)/macrossp.o \
$(DRIVERS)/nmk16.o $(MACHINE)/nmk004.o $(VIDEO)/nmk16.o \
$(DRIVERS)/quizdna.o $(VIDEO)/quizdna.o \