Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preliminary support for kof98ae V ROM #27

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 72 additions & 25 deletions 3rdparty/ymfm/src/ymfm_adpcm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,41 @@

namespace ymfm
{

// �w�q�����ܶq
uint32_t g_ym_rom_size = 0xFFFFFF;
void init_ym_rom_size() {
static bool initialized = false;
if (!initialized) {
// ���ե��}���
FILE* fp = fopen(".ym_size.tmp", "r");
if (fp)
{
// �dzƤ@�ӽw�İϨ�Ū���奻
char buffer[32] = {0};
if (fgets(buffer, sizeof(buffer), fp))
{
// �N�Q���i��r�Ŧ��ഫ���ƭ�
unsigned int read_size = 0;
if (sscanf(buffer, "%x", &read_size) == 1)
{
g_ym_rom_size = read_size;
}
}
fclose(fp);
if (remove(".ym_size.tmp") != 0)
{
// �p�G remove ���ѡA�O�����~
if (FILE* debug = fopen("file_delete_error.txt", "w"))
{
fprintf(debug, "Failed to delete ym_size.tmp\n");
perror("Error details"); // ��X�t��~�H��
fclose(debug);
}
}
initialized = true;
}
}
}
//*********************************************************
// ADPCM "A" REGISTERS
//*********************************************************
Expand Down Expand Up @@ -121,26 +155,25 @@ void adpcm_a_channel::save_restore(ymfm_saved_state &state)

void adpcm_a_channel::keyonoff(bool on)
{
// QUESTION: repeated key ons restart the sample?
m_playing = on;
if (m_playing)
{
m_curaddress = m_regs.ch_start(m_choffs) << m_address_shift;
m_curnibble = 0;
m_curbyte = 0;
m_accumulator = 0;
m_step_index = 0;

// don't log masked channels
if (((debug::GLOBAL_ADPCM_A_CHANNEL_MASK >> m_choffs) & 1) != 0)
debug::log_keyon("KeyOn ADPCM-A%d: pan=%d%d start=%04X end=%04X level=%02X\n",
m_choffs,
m_regs.ch_pan_left(m_choffs),
m_regs.ch_pan_right(m_choffs),
m_regs.ch_start(m_choffs),
m_regs.ch_end(m_choffs),
m_regs.ch_instrument_level(m_choffs));
}
m_playing = on;
if (m_playing)
{
m_curaddress = m_regs.ch_start(m_choffs) << m_address_shift;
m_curnibble = 0;
m_curbyte = 0;
m_accumulator = 0;
m_step_index = 0;

// don't log masked channels
if (((debug::GLOBAL_ADPCM_A_CHANNEL_MASK >> m_choffs) & 1) != 0)
debug::log_keyon("KeyOn ADPCM-A%d: pan=%d%d start=%04X end=%04X level=%02X\n",
m_choffs,
m_regs.ch_pan_left(m_choffs),
m_regs.ch_pan_right(m_choffs),
m_regs.ch_start(m_choffs),
m_regs.ch_end(m_choffs),
m_regs.ch_instrument_level(m_choffs));
}
}


Expand All @@ -150,6 +183,7 @@ void adpcm_a_channel::keyonoff(bool on)

bool adpcm_a_channel::clock()
{
init_ym_rom_size(); // �T�O�w��l��
// if not playing, just output 0
if (m_playing == 0)
{
Expand All @@ -175,10 +209,23 @@ bool adpcm_a_channel::clock()
m_playing = m_accumulator = 0;
return true;
}

m_curbyte = m_owner.intf().ymfm_external_read(ACCESS_ADPCM_A, m_curaddress++);
data = m_curbyte >> 4;
m_curnibble = 1;
// ��Channel 3�B�ݭn�ק�a�}��
uint32_t read_address = m_curaddress;
uint32_t reg_value = m_regs.read(m_choffs + 0x08);

if (g_ym_rom_size > 0x1000000)
{
if (reg_value >= 0xF0)
{
read_address += 0x1000000;
}
}

// �ϥέק�᪺�a�}�i����Ū��
m_curbyte = m_owner.intf().ymfm_external_read(ACCESS_ADPCM_A, read_address);
m_curaddress++; // �u�W�[��l�a�}�A���ϥέק�᪺�a�}
data = m_curbyte >> 4;
m_curnibble = 1;
}

// otherwise just extract from the previosuly-fetched byte
Expand Down
7 changes: 6 additions & 1 deletion 3rdparty/ymfm/src/ymfm_adpcm.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@

namespace ymfm
{

// �K�[�����ܶq�n��
extern uint32_t g_ym_rom_size;
//*********************************************************
// INTERFACE CLASSES
//*********************************************************
Expand Down Expand Up @@ -98,6 +99,7 @@ class adpcm_a_registers
uint32_t dump_mask() const { return bitfield(m_regdata[0x00], 0, 6); }
uint32_t total_level() const { return bitfield(m_regdata[0x01], 0, 6); }
uint32_t test() const { return m_regdata[0x02]; }
uint8_t read(uint32_t index) const { return m_regdata[index]; }

// per-channel registers
uint32_t ch_pan_left(uint32_t choffs) const { return bitfield(m_regdata[choffs + 0x08], 7); }
Expand Down Expand Up @@ -160,6 +162,9 @@ class adpcm_a_channel
int32_t m_step_index; // index in the stepping table
adpcm_a_registers &m_regs; // reference to registers
adpcm_a_engine &m_owner; // reference to our owner
uint32_t m_modified_start;
uint32_t m_modified_end;
bool m_address_modified;
};


Expand Down
4 changes: 2 additions & 2 deletions src/devices/sound/ymopn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ template<typename ChipClass>
ym2610_device_base<ChipClass>::ym2610_device_base(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, device_type type) :
ymfm_ssg_device_base<ChipClass>(mconfig, tag, owner, clock, type),
device_memory_interface(mconfig, *this),
m_adpcm_a_config("adpcm_a", ENDIANNESS_LITTLE, 8, 24, 0),
m_adpcm_b_config("adpcm_b", ENDIANNESS_LITTLE, 8, 24, 0),
m_adpcm_a_config("adpcm_a", ENDIANNESS_LITTLE, 8, 25, 0),
m_adpcm_b_config("adpcm_b", ENDIANNESS_LITTLE, 8, 25, 0),
m_adpcm_a_region(*this, "adpcma"),
m_adpcm_b_region(*this, "adpcmb")
{
Expand Down
28 changes: 12 additions & 16 deletions src/hbmame/drivers/kof98.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2110,15 +2110,14 @@ ROM_START( kof98ult ) // all confirmed.

NEO_BIOS_AUDIO_256K( "242ae.m1", CRC(9ade0528) SHA1(67d0c3b146d369416b84c081544fe51fc6c2a140) )

ROM_REGION( 0x1000000, "ymsnd:adpcma", 0 )
ROM_REGION( 0x2000000, "ymsnd:adpcma", 0 )
ROM_LOAD( "242.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
ROM_LOAD( "242.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
ROM_LOAD( "242.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
ROM_LOAD( "242.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
ROM_LOAD( "242ae.v5", 0x1000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x1000000, "ymsnd:adpcmb", 0 )
ROM_LOAD( "242ae.v5", 0x000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )


ROM_REGION( 0x6000000, "sprites", 0 )
ROM_LOAD16_BYTE( "242ult.c1", 0x0000000, 0x800000, CRC(8e297a35) SHA1(8177d37dba3e1e3aea74d255d0a292d03c430c0b) )
ROM_LOAD16_BYTE( "242ult.c2", 0x0000001, 0x800000, CRC(d8a4b216) SHA1(7a8aee14008ee9ccef0d76f710d6d4029098548d) )
Expand Down Expand Up @@ -2989,14 +2988,13 @@ ROM_START( kof98s25 ) // Anniversary Edition

NEO_BIOS_AUDIO_256K( "242ae.m1", CRC(9ade0528) SHA1(67d0c3b146d369416b84c081544fe51fc6c2a140) )

ROM_REGION( 0x1000000, "ymsnd:adpcma", 0 )
ROM_REGION( 0x2000000, "ymsnd:adpcma", 0 )
ROM_LOAD( "242.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
ROM_LOAD( "242.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
ROM_LOAD( "242.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
ROM_LOAD( "242.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
ROM_LOAD( "242ae.v5", 0x1000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x1000000, "ymsnd:adpcmb", 0 )
ROM_LOAD( "242ae.v5", 0x000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x6000000, "sprites", 0 )
ROM_LOAD16_BYTE( "242ae.c1", 0x0000000, 0x800000, CRC(0319cfc9) SHA1(f275015d6bddf392936b35cd7399f929a6d63d29) )
Expand All @@ -3023,14 +3021,13 @@ ROM_START( kof98s26 ) // Anniversary Edition : all confirmed

NEO_BIOS_AUDIO_256K( "242ae.m1", CRC(9ade0528) SHA1(67d0c3b146d369416b84c081544fe51fc6c2a140) )

ROM_REGION( 0x1000000, "ymsnd:adpcma", 0 )
ROM_REGION( 0x2000000, "ymsnd:adpcma", 0 )
ROM_LOAD( "242.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
ROM_LOAD( "242.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
ROM_LOAD( "242.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
ROM_LOAD( "242.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
ROM_LOAD( "242ae.v5", 0x1000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x1000000, "ymsnd:adpcmb", 0 )
ROM_LOAD( "242ae.v5", 0x000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x6000000, "sprites", 0 )
ROM_LOAD16_BYTE( "242ae.c1", 0x0000000, 0x800000, CRC(0319cfc9) SHA1(f275015d6bddf392936b35cd7399f929a6d63d29) )
Expand Down Expand Up @@ -3763,15 +3760,15 @@ ROM_START( kof98hh02 ) //kof98ae2016h

NEO_BIOS_AUDIO_256K( "242ae.m1", CRC(9ade0528) SHA1(67d0c3b146d369416b84c081544fe51fc6c2a140) )

ROM_REGION( 0x1000000, "ymsnd:adpcma", 0 )
ROM_REGION( 0x2000000, "ymsnd:adpcma", 0 )
ROM_LOAD( "242.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
ROM_LOAD( "242.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
ROM_LOAD( "242.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
ROM_LOAD( "242.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
ROM_LOAD( "242ae.v5", 0x1000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x1000000, "ymsnd:adpcmb", 0 )
ROM_LOAD( "242ae.v5", 0x000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )


ROM_REGION( 0x6000000, "sprites", 0 )
ROM_LOAD16_BYTE( "242aea.c1", 0x0000000, 0x800000, CRC(086ec060) SHA1(dace47c251e5c9bea771e221bf550e1b4af5212d) )
ROM_LOAD16_BYTE( "242aea.c2", 0x0000001, 0x800000, CRC(16b9a9a2) SHA1(c8b757e6a84bae33caab07de27ca6c3d84d1893a) )
Expand Down Expand Up @@ -5994,14 +5991,13 @@ ROM_START( kof98hh131 ) //kof98cps

NEO_BIOS_AUDIO_256K( "242hx131.m1", CRC(564b53f8) SHA1(b8f3842d03f19f7af3077373db6410619380b579) )

ROM_REGION( 0x1000000, "ymsnd:adpcma", 0 )
ROM_REGION( 0x2000000, "ymsnd:adpcma", 0 )
ROM_LOAD( "242.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
ROM_LOAD( "242.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
ROM_LOAD( "242.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
ROM_LOAD( "242.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
ROM_LOAD( "242ae.v5", 0x1000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x1000000, "ymsnd:adpcmb", 0 )
ROM_LOAD( "242ae.v5", 0x000000, 0x400000, CRC(afdd9660) SHA1(0d67fb61111256c0d74d4f2b473ab5a42d1909b9) )

ROM_REGION( 0x6000000, "sprites", 0 )
ROM_LOAD16_BYTE( "242hx131.c1", 0x0000000, 0x800000, CRC(9cb35021) SHA1(28f6743acfe4d4d52111fbb4000bd88b012a0e42) )
Expand Down
6 changes: 6 additions & 0 deletions src/hbmame/drivers/neogeo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,12 @@ void neogeo_state::init_neogeo()
m_maincpu->space(AS_PROGRAM).install_read_handler(0x340000, 0x340001, 0, 0x01fffe, 0, read16smo_delegate(*this, FUNC(neogeo_state::in1_r)));
m_sprgen->set_sprite_region(m_region_sprites->base(), m_region_sprites->bytes());
m_sprgen->set_fixed_regions(m_region_fixed->base(), m_region_fixed->bytes(), m_region_fixedbios);
FILE *fp = fopen(".ym_size.tmp", "w");
if (fp) {
uint32_t ymsize = ym_region_size;
fprintf(fp, "%x", ymsize); // �H�Q���i��奻�Φ��g�J
fclose(fp);
}
}


Expand Down