meijinsn: correct audiocpu irq freq, add unemulated protection flag

This commit is contained in:
hap 2022-12-29 12:22:50 +01:00
parent cae6f799a4
commit b205a9f0f2
3 changed files with 15 additions and 12 deletions

View File

@ -11,7 +11,7 @@ and old alpha shougi hardware (framebuffer).
There's probably no upright cabinet, only cocktail table (controls in 2p mode are inverted).
TODO:
- not sure if protection simulation is right, there is a problem on the selection screen,
- protection simulation isn't right, there is a problem on the selection screen,
it's usually not possible to choose tsume shogi (3 difficulty levels)
Buttons:
@ -215,7 +215,7 @@ void meijinsn_state::sound_io_map(address_map &map)
map(0x00, 0x01).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0x01, 0x01).r("aysnd", FUNC(ay8910_device::data_r));
map(0x02, 0x02).w("soundlatch", FUNC(generic_latch_8_device::clear_w));
map(0x04, 0x04).w("dac", FUNC(dac_8bit_r2r_device::write));
map(0x04, 0x04).w("dac", FUNC(dac_6bit_r2r_device::write));
map(0x06, 0x06).nopw();
}
@ -357,14 +357,14 @@ void meijinsn_state::machine_reset()
void meijinsn_state::meijinsn(machine_config &config)
{
// basic machine hardware
M68000(config, m_maincpu, 8000000);
M68000(config, m_maincpu, 16_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &meijinsn_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(meijinsn_state::interrupt), "screen", 0, 1);
z80_device &audiocpu(Z80(config, "audiocpu", 4000000));
z80_device &audiocpu(Z80(config, "audiocpu", 16_MHz_XTAL / 4));
audiocpu.set_addrmap(AS_PROGRAM, &meijinsn_state::sound_map);
audiocpu.set_addrmap(AS_IO, &meijinsn_state::sound_io_map);
audiocpu.set_periodic_int(FUNC(meijinsn_state::irq0_line_hold), attotime::from_hz(160*60));
audiocpu.set_periodic_int(FUNC(meijinsn_state::irq0_line_hold), attotime::from_hz(16_MHz_XTAL / 0x800));
GENERIC_LATCH_8(config, "soundlatch");
@ -382,12 +382,12 @@ void meijinsn_state::meijinsn(machine_config &config)
// sound hardware
SPEAKER(config, "mono").front_center();
ay8910_device &aysnd(AY8910(config, "aysnd", 2000000));
ay8910_device &aysnd(AY8910(config, "aysnd", 16_MHz_XTAL / 8));
aysnd.port_a_read_callback().set("soundlatch", FUNC(generic_latch_8_device::read));
aysnd.port_b_write_callback().set_nop(); // ?
aysnd.add_route(ALL_OUTPUTS, "mono", 0.25);
DAC_8BIT_R2R(config, "dac").add_route(ALL_OUTPUTS, "mono", 1.0);
DAC_6BIT_R2R(config, "dac").add_route(ALL_OUTPUTS, "mono", 0.5);
}
@ -448,5 +448,5 @@ ROM_END
} // Anonymous namespace
GAME( 1986, meijinsn, 0, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, meijinsna, meijinsn, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, meijinsn, 0, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE )
GAME( 1986, meijinsna, meijinsn, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen (set 2)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE )

View File

@ -63,7 +63,7 @@ E0C6S46_PIXEL_UPDATE(tamag1_state::pixel_update)
static const int seg2x[0x28] =
{
0, 1, 2, 3, 4, 5, 6, 7,
35, 8, 9,10,11,12,13,14,
35,8, 9, 10,11,12,13,14,
15,34,33,32,31,30,29,28,
27,26,25,24,36,23,22,21,
20,19,18,17,16,37,38,39

View File

@ -2,12 +2,13 @@
// copyright-holders:David Haywood, hap
/*
Chess King (), LCD handheld presumably from Taiwan.
Chess King (), LCD handheld console presumably from Taiwan.
Hold down u+d+l+r buttons at boot to enter a test/data clear mode of sorts.
TODO:
- lots of unknown writes
- sound emulation is guessed
- dump/add more cartridges? considering how unknown the handheld is, maybe only a handful were released
- LCD chip(s) is not emulated, maybe the I/O chip does a DMA from RAM to the LCD?
- chess game is buggy, assume that's just the way it is, aka BTANB
eg. sometimes it makes an illegal move, or castling doesn't erase the king from its original spot
@ -191,9 +192,11 @@ uint8_t chessking_state::cartridge_r(offs_t offset)
if (m_cart_bank == 1)
return m_mainrom[offset & 0x1ffff];
else if (m_cart_bank & 4)
// banks 4-7 go to cartridge
else if (m_cart_bank >= 4)
return m_cart->read_rom(offset | (m_cart_bank & 3) << 19);
// other banks: maybe cartridge too?
return 0;
}