mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
Merge pull request #4984 from cam900/taitoair_args
taitoair.cpp : Updates
This commit is contained in:
commit
3625c9ca0a
@ -209,7 +209,7 @@ perhaps? The two writes seem to take only two values.
|
||||
MEMORY handlers
|
||||
***********************************************************/
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::system_control_w)
|
||||
void taitoair_state::system_control_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if ((ACCESSING_BITS_0_7 == 0) && ACCESSING_BITS_8_15)
|
||||
data >>= 8;
|
||||
@ -222,32 +222,32 @@ WRITE16_MEMBER(taitoair_state::system_control_w)
|
||||
logerror("68K:%06x writing %04x to TMS32025. %s HOLD , %s RESET\n", m_maincpu->pcbase(), data, ((data & 4) ? "Clear" : "Assert"), ((data & 1) ? "Clear" : "Assert"));
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::lineram_r)
|
||||
u16 taitoair_state::lineram_r(offs_t offset)
|
||||
{
|
||||
return m_line_ram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::lineram_w)
|
||||
void taitoair_state::lineram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15 && ACCESSING_BITS_0_7)
|
||||
m_line_ram[offset] = data;
|
||||
|
||||
//if(offset == 0x3fff)
|
||||
//if (offset == 0x3fff)
|
||||
// printf("LineRAM go %d\n",(int)m_screen->frame_number());
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dspram_r)
|
||||
u16 taitoair_state::dspram_r(offs_t offset)
|
||||
{
|
||||
return m_dsp_ram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dspram_w)
|
||||
void taitoair_state::dspram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15 && ACCESSING_BITS_0_7)
|
||||
m_dsp_ram[offset] = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_HOLD_signal_r)
|
||||
u16 taitoair_state::dsp_HOLD_signal_r()
|
||||
{
|
||||
/* HOLD signal is active low */
|
||||
// logerror("TMS32025:%04x Reading %01x level from HOLD signal\n", m_dsp->pcbase(), m_dsp_hold_signal);
|
||||
@ -255,43 +255,39 @@ READ16_MEMBER(taitoair_state::dsp_HOLD_signal_r)
|
||||
return m_dsp_hold_signal;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_HOLDA_signal_w)
|
||||
void taitoair_state::dsp_HOLDA_signal_w(offs_t offset, u16 data)
|
||||
{
|
||||
if (offset)
|
||||
logerror("TMS32025:%04x Writing %01x level to HOLD-Acknowledge signal\n", m_dsp->pcbase(), data);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::airsys_paletteram16_w)/* xxBBBBxRRRRxGGGG */
|
||||
void taitoair_state::paletteram_w(offs_t offset, u16 data, u16 mem_mask)/* xxBBBBxRRRRxGGGG */
|
||||
{
|
||||
int a;
|
||||
|
||||
COMBINE_DATA(&m_paletteram[offset]);
|
||||
|
||||
a = m_paletteram[offset];
|
||||
const u16 a = m_paletteram[offset];
|
||||
m_palette->set_pen_color(offset, pal4bit(a >> 0), pal4bit(a >> 5), pal4bit(a >> 10));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::airsys_gradram_w)
|
||||
void taitoair_state::gradram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
uint32_t pen;
|
||||
int r,g,b;
|
||||
//int pal_r,pal_g,pal_b;
|
||||
|
||||
COMBINE_DATA(&m_gradram[offset]);
|
||||
offset &= 0x1fff;
|
||||
|
||||
pen = (m_gradram[offset])|(m_gradram[(offset+0x2000)]<<16);
|
||||
const u32 pen = (m_gradram[offset]) | (m_gradram[(offset + 0x2000)] << 16);
|
||||
/* TODO: correct? */
|
||||
r = (pen & 0x00007f) >> 0;
|
||||
g = (pen & 0x007f00) >> (8);
|
||||
b = (pen & 0x7f0000) >> (16);
|
||||
u8 r = (pen & 0x00007f) >> 0;
|
||||
u8 g = (pen & 0x007f00) >> (8);
|
||||
u8 b = (pen & 0x7f0000) >> (16);
|
||||
|
||||
r = (r << 1) | (r & 1);
|
||||
g = (g << 1) | (g & 1);
|
||||
b = (b << 1) | (b & 1);
|
||||
|
||||
m_palette->set_pen_color(offset+0x2000, r, g, b);
|
||||
m_palette->set_pen_color(offset + 0x2000, r, g, b);
|
||||
}
|
||||
|
||||
|
||||
@ -301,7 +297,7 @@ WRITE16_MEMBER(taitoair_state::airsys_gradram_w)
|
||||
|
||||
READ16_MEMBER(taitoair_state::stick_input_r)
|
||||
{
|
||||
switch( offset )
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* "counter 1" lo */
|
||||
return m_yoke->throttle_r(space,0) & 0xff;
|
||||
@ -321,7 +317,7 @@ READ16_MEMBER(taitoair_state::stick_input_r)
|
||||
|
||||
READ16_MEMBER(taitoair_state::stick2_input_r)
|
||||
{
|
||||
switch( offset )
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* "counter 3" lo */
|
||||
return m_yoke->sticky_r(space,0);
|
||||
@ -333,9 +329,9 @@ READ16_MEMBER(taitoair_state::stick2_input_r)
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitoair_state::sound_bankswitch_w)
|
||||
void taitoair_state::sound_bankswitch_w(u8 data)
|
||||
{
|
||||
membank("z80bank")->set_entry(data & 3);
|
||||
m_z80bank->set_entry(data & 3);
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -348,17 +344,17 @@ WRITE8_MEMBER(taitoair_state::sound_bankswitch_w)
|
||||
[2] (unused)
|
||||
[3] both games uses 0xb7, most likely a register setting.
|
||||
*/
|
||||
WRITE16_MEMBER(taitoair_state::dma_regs_w)
|
||||
void taitoair_state::dma_regs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
printf("%08x %04x\n",offset,data);
|
||||
|
||||
if(offset == 0 && ACCESSING_BITS_8_15)
|
||||
if (offset == 0 && ACCESSING_BITS_8_15)
|
||||
{
|
||||
if(data == 0x1fff)
|
||||
if (data == 0x1fff)
|
||||
{
|
||||
fb_erase_op();
|
||||
}
|
||||
else if(data & 0x8000)
|
||||
else if (data & 0x8000)
|
||||
{
|
||||
/*! @todo it also flushes current palette. */
|
||||
fb_copy_op();
|
||||
@ -366,7 +362,7 @@ WRITE16_MEMBER(taitoair_state::dma_regs_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitoair_state::coin_control_w)
|
||||
void taitoair_state::coin_control_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
|
||||
machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
|
||||
@ -383,8 +379,8 @@ void taitoair_state::airsys_map(address_map &map)
|
||||
map(0x000000, 0x0bffff).rom();
|
||||
map(0x0c0000, 0x0cffff).ram().share("m68000_mainram");
|
||||
map(0x140000, 0x140001).w(FUNC(taitoair_state::system_control_w)); /* Pause the TMS32025 */
|
||||
map(0x180000, 0x187fff).ram().w(FUNC(taitoair_state::airsys_gradram_w)).share("gradram"); /* "gradiation ram (0/1)" */
|
||||
map(0x188000, 0x189fff).mirror(0x2000).ram().w(FUNC(taitoair_state::airsys_paletteram16_w)).share("paletteram");
|
||||
map(0x180000, 0x187fff).ram().w(FUNC(taitoair_state::gradram_w)).share("gradram"); /* "gradiation ram (0/1)" */
|
||||
map(0x188000, 0x189fff).mirror(0x2000).ram().w(FUNC(taitoair_state::paletteram_w)).share("paletteram");
|
||||
map(0x800000, 0x820fff).rw(m_tc0080vco, FUNC(tc0080vco_device::word_r), FUNC(tc0080vco_device::word_w)); /* tilemaps, sprites */
|
||||
map(0x906000, 0x906007).w(FUNC(taitoair_state::dma_regs_w)); // DMA?
|
||||
map(0x908000, 0x90ffff).ram().share("line_ram"); /* "line ram" */
|
||||
@ -418,38 +414,38 @@ void taitoair_state::sound_map(address_map &map)
|
||||
|
||||
/********************************** TMS32025 ********************************/
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_test_start_w)
|
||||
void taitoair_state::dsp_test_start_w(u16 data)
|
||||
{
|
||||
m_dsp_test_object_type = data;
|
||||
m_dsp_test_or_clip = 0;
|
||||
m_dsp_test_and_clip = 0xf;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_test_x_w)
|
||||
void taitoair_state::dsp_test_x_w(u16 data)
|
||||
{
|
||||
m_dsp_test_x = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_test_y_w)
|
||||
void taitoair_state::dsp_test_y_w(u16 data)
|
||||
{
|
||||
m_dsp_test_y = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_test_z_w)
|
||||
void taitoair_state::dsp_test_z_w(u16 data)
|
||||
{
|
||||
m_dsp_test_z = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_test_point_r)
|
||||
u16 taitoair_state::dsp_test_point_r()
|
||||
{
|
||||
uint16_t r = 0;
|
||||
if(m_dsp_test_x < -m_dsp_test_z)
|
||||
u16 r = 0;
|
||||
if (m_dsp_test_x < -m_dsp_test_z)
|
||||
r |= 1;
|
||||
if(m_dsp_test_x > m_dsp_test_z)
|
||||
if (m_dsp_test_x > m_dsp_test_z)
|
||||
r |= 2;
|
||||
if(m_dsp_test_y < -m_dsp_test_z)
|
||||
if (m_dsp_test_y < -m_dsp_test_z)
|
||||
r |= 4;
|
||||
if(m_dsp_test_y > m_dsp_test_z)
|
||||
if (m_dsp_test_y > m_dsp_test_z)
|
||||
r |= 8;
|
||||
|
||||
m_dsp_test_or_clip |= r;
|
||||
@ -457,60 +453,60 @@ READ16_MEMBER(taitoair_state::dsp_test_point_r)
|
||||
return r;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_test_or_clip_r)
|
||||
u16 taitoair_state::dsp_test_or_clip_r()
|
||||
{
|
||||
return m_dsp_test_or_clip;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_test_and_clip_r)
|
||||
u16 taitoair_state::dsp_test_and_clip_r()
|
||||
{
|
||||
return m_dsp_test_and_clip;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_a_1_w)
|
||||
void taitoair_state::dsp_muldiv_a_1_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_a_1 = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_b_1_w)
|
||||
void taitoair_state::dsp_muldiv_b_1_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_b_1 = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_c_1_w)
|
||||
void taitoair_state::dsp_muldiv_c_1_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_c_1 = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_muldiv_1_r)
|
||||
u16 taitoair_state::dsp_muldiv_1_r()
|
||||
{
|
||||
if(m_dsp_muldiv_c_1 == 0)
|
||||
if (m_dsp_muldiv_c_1 == 0)
|
||||
return 0xffff; /**< @todo true value? */
|
||||
|
||||
return m_dsp_muldiv_a_1*m_dsp_muldiv_b_1/m_dsp_muldiv_c_1;
|
||||
return m_dsp_muldiv_a_1 * m_dsp_muldiv_b_1 / m_dsp_muldiv_c_1;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_a_2_w)
|
||||
void taitoair_state::dsp_muldiv_a_2_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_a_2 = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_b_2_w)
|
||||
void taitoair_state::dsp_muldiv_b_2_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_b_2 = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(taitoair_state::dsp_muldiv_c_2_w)
|
||||
void taitoair_state::dsp_muldiv_c_2_w(u16 data)
|
||||
{
|
||||
m_dsp_muldiv_c_2 = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(taitoair_state::dsp_muldiv_2_r)
|
||||
u16 taitoair_state::dsp_muldiv_2_r()
|
||||
{
|
||||
if(m_dsp_muldiv_c_2 == 0)
|
||||
if (m_dsp_muldiv_c_2 == 0)
|
||||
return 0xffff; /**< @todo true value? */
|
||||
|
||||
return m_dsp_muldiv_a_2*m_dsp_muldiv_b_2/m_dsp_muldiv_c_2;
|
||||
return m_dsp_muldiv_a_2 * m_dsp_muldiv_b_2 / m_dsp_muldiv_c_2;
|
||||
}
|
||||
|
||||
|
||||
@ -653,16 +649,12 @@ INPUT_PORTS_END
|
||||
static const gfx_layout tilelayout =
|
||||
{
|
||||
16,16, /* 16x16 pixels */
|
||||
RGN_FRAC(1,4),
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 0, 1, 2, 3 },
|
||||
{ 4, 0, 12, 8,
|
||||
RGN_FRAC(1,4)+4, RGN_FRAC(1,4), RGN_FRAC(1,4)+12, RGN_FRAC(1,4)+8,
|
||||
RGN_FRAC(2,4)+4, RGN_FRAC(2,4), RGN_FRAC(2,4)+12, RGN_FRAC(2,4)+8,
|
||||
RGN_FRAC(3,4)+4, RGN_FRAC(3,4), RGN_FRAC(3,4)+12, RGN_FRAC(3,4)+8 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
|
||||
8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
|
||||
16*16
|
||||
{ STEP4(0, 1) },
|
||||
{ STEP16(15*4, -4) },
|
||||
{ STEP16(0, 16*4) },
|
||||
16*16*4
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_airsys )
|
||||
@ -676,7 +668,7 @@ GFXDECODE_END
|
||||
|
||||
void taitoair_state::machine_start()
|
||||
{
|
||||
membank("z80bank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
m_z80bank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
|
||||
save_item(NAME(m_q.header));
|
||||
save_item(NAME(m_q.pcount));
|
||||
@ -690,11 +682,9 @@ void taitoair_state::machine_start()
|
||||
|
||||
void taitoair_state::machine_reset()
|
||||
{
|
||||
int i;
|
||||
|
||||
m_dsp_hold_signal = ASSERT_LINE;
|
||||
|
||||
for (i = 0; i < TAITOAIR_POLY_MAX_PT; i++)
|
||||
for (int i = 0; i < TAITOAIR_POLY_MAX_PT; i++)
|
||||
{
|
||||
m_q.p[i].x = 0;
|
||||
m_q.p[i].y = 0;
|
||||
@ -737,7 +727,7 @@ void taitoair_state::airsys(machine_config &config)
|
||||
// m_screen->set_visarea(0*16, 32*16-1, 3*16, 28*16-1);
|
||||
// Estimated, assume same as mlanding.cpp
|
||||
m_screen->set_raw(16000000, 640, 0, 512, 462, 3*16, 28*16);
|
||||
m_screen->set_screen_update(FUNC(taitoair_state::screen_update_taitoair));
|
||||
m_screen->set_screen_update(FUNC(taitoair_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_airsys);
|
||||
@ -809,14 +799,14 @@ ROM_START( topland )
|
||||
ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "b62-33.39", 0x000000, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
|
||||
ROM_LOAD16_BYTE( "b62-36.48", 0x000001, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
|
||||
ROM_LOAD16_BYTE( "b62-29.27", 0x040000, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
|
||||
ROM_LOAD16_BYTE( "b62-34.40", 0x040001, 0x20000, CRC(a7e10ca4) SHA1(862c23c095f96f9e0cae00d70947782d5f4e45e6) )
|
||||
ROM_LOAD16_BYTE( "b62-35.47", 0x080000, 0x20000, CRC(cba7bac5) SHA1(5305c84abcbcc23281744454803b849853b26632) )
|
||||
ROM_LOAD16_BYTE( "b62-30.28", 0x080001, 0x20000, CRC(30e37cb8) SHA1(6bc777bdf1a56952dbfbe2f595279a43e2fa98fd) )
|
||||
ROM_LOAD16_BYTE( "b62-31.29", 0x0c0000, 0x20000, CRC(3feebfe3) SHA1(5b014d7d6fa1daf400ac1a437f551281debfdba6) )
|
||||
ROM_LOAD16_BYTE( "b62-32.30", 0x0c0001, 0x20000, CRC(66806646) SHA1(d8e0c37b5227d8583d523164ffc6828b4508d5a3) )
|
||||
ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
|
||||
ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
|
||||
ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
|
||||
ROM_LOAD64_BYTE( "b62-34.40", 0x000004, 0x20000, CRC(a7e10ca4) SHA1(862c23c095f96f9e0cae00d70947782d5f4e45e6) )
|
||||
ROM_LOAD64_BYTE( "b62-35.47", 0x000003, 0x20000, CRC(cba7bac5) SHA1(5305c84abcbcc23281744454803b849853b26632) )
|
||||
ROM_LOAD64_BYTE( "b62-30.28", 0x000002, 0x20000, CRC(30e37cb8) SHA1(6bc777bdf1a56952dbfbe2f595279a43e2fa98fd) )
|
||||
ROM_LOAD64_BYTE( "b62-31.29", 0x000001, 0x20000, CRC(3feebfe3) SHA1(5b014d7d6fa1daf400ac1a437f551281debfdba6) )
|
||||
ROM_LOAD64_BYTE( "b62-32.30", 0x000000, 0x20000, CRC(66806646) SHA1(d8e0c37b5227d8583d523164ffc6828b4508d5a3) )
|
||||
|
||||
ROM_REGION( 0xa0000, "ymsnd", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "b62-17.5", 0x00000, 0x20000, CRC(36447066) SHA1(91c8cc4e99534b2d533895a342abb22766a20090) )
|
||||
@ -858,14 +848,14 @@ ROM_START( toplandj )
|
||||
ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "b62-33.39", 0x000000, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
|
||||
ROM_LOAD16_BYTE( "b62-36.48", 0x000001, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
|
||||
ROM_LOAD16_BYTE( "b62-29.27", 0x040000, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
|
||||
ROM_LOAD16_BYTE( "b62-34.40", 0x040001, 0x20000, CRC(a7e10ca4) SHA1(862c23c095f96f9e0cae00d70947782d5f4e45e6) )
|
||||
ROM_LOAD16_BYTE( "b62-35.47", 0x080000, 0x20000, CRC(cba7bac5) SHA1(5305c84abcbcc23281744454803b849853b26632) )
|
||||
ROM_LOAD16_BYTE( "b62-30.28", 0x080001, 0x20000, CRC(30e37cb8) SHA1(6bc777bdf1a56952dbfbe2f595279a43e2fa98fd) )
|
||||
ROM_LOAD16_BYTE( "b62-31.29", 0x0c0000, 0x20000, CRC(3feebfe3) SHA1(5b014d7d6fa1daf400ac1a437f551281debfdba6) )
|
||||
ROM_LOAD16_BYTE( "b62-32.30", 0x0c0001, 0x20000, CRC(66806646) SHA1(d8e0c37b5227d8583d523164ffc6828b4508d5a3) )
|
||||
ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
|
||||
ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
|
||||
ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
|
||||
ROM_LOAD64_BYTE( "b62-34.40", 0x000004, 0x20000, CRC(a7e10ca4) SHA1(862c23c095f96f9e0cae00d70947782d5f4e45e6) )
|
||||
ROM_LOAD64_BYTE( "b62-35.47", 0x000003, 0x20000, CRC(cba7bac5) SHA1(5305c84abcbcc23281744454803b849853b26632) )
|
||||
ROM_LOAD64_BYTE( "b62-30.28", 0x000002, 0x20000, CRC(30e37cb8) SHA1(6bc777bdf1a56952dbfbe2f595279a43e2fa98fd) )
|
||||
ROM_LOAD64_BYTE( "b62-31.29", 0x000001, 0x20000, CRC(3feebfe3) SHA1(5b014d7d6fa1daf400ac1a437f551281debfdba6) )
|
||||
ROM_LOAD64_BYTE( "b62-32.30", 0x000000, 0x20000, CRC(66806646) SHA1(d8e0c37b5227d8583d523164ffc6828b4508d5a3) )
|
||||
|
||||
ROM_REGION( 0xa0000, "ymsnd", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "b62-17.5", 0x00000, 0x20000, CRC(36447066) SHA1(91c8cc4e99534b2d533895a342abb22766a20090) )
|
||||
@ -908,14 +898,14 @@ ROM_START( ainferno )
|
||||
ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "c45-11.28", 0x000000, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
|
||||
ROM_LOAD16_BYTE( "c45-15.40", 0x000001, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
|
||||
ROM_LOAD16_BYTE( "c45-12.29", 0x040000, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )
|
||||
ROM_LOAD16_BYTE( "c45-16.41", 0x040001, 0x20000, CRC(c6eb93b0) SHA1(d0b1adfce5c1f4e21c5d84527d22ace14578f2d7) )
|
||||
ROM_LOAD16_BYTE( "c45-13.30", 0x080000, 0x20000, CRC(69b82af6) SHA1(13c035e84affa59734c6dd1b07963c08654b5f5a) )
|
||||
ROM_LOAD16_BYTE( "c45-17.42", 0x080001, 0x20000, CRC(0dbee000) SHA1(41073d5cf20df12d5ba1c424c9d9f0b2d9836d5d) )
|
||||
ROM_LOAD16_BYTE( "c45-14.31", 0x0c0000, 0x20000, CRC(481b6f29) SHA1(0b047e805663b144dc2388c86438950fcdc29658) )
|
||||
ROM_LOAD16_BYTE( "c45-18.43", 0x0c0001, 0x20000, CRC(ba7ecf3b) SHA1(dd073b7bfbf2f88432337027ae9fb6c4f02a538f) )
|
||||
ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
|
||||
ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
|
||||
ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )
|
||||
ROM_LOAD64_BYTE( "c45-16.41", 0x000004, 0x20000, CRC(c6eb93b0) SHA1(d0b1adfce5c1f4e21c5d84527d22ace14578f2d7) )
|
||||
ROM_LOAD64_BYTE( "c45-13.30", 0x000003, 0x20000, CRC(69b82af6) SHA1(13c035e84affa59734c6dd1b07963c08654b5f5a) )
|
||||
ROM_LOAD64_BYTE( "c45-17.42", 0x000002, 0x20000, CRC(0dbee000) SHA1(41073d5cf20df12d5ba1c424c9d9f0b2d9836d5d) )
|
||||
ROM_LOAD64_BYTE( "c45-14.31", 0x000001, 0x20000, CRC(481b6f29) SHA1(0b047e805663b144dc2388c86438950fcdc29658) )
|
||||
ROM_LOAD64_BYTE( "c45-18.43", 0x000000, 0x20000, CRC(ba7ecf3b) SHA1(dd073b7bfbf2f88432337027ae9fb6c4f02a538f) )
|
||||
|
||||
ROM_REGION( 0xa0000, "ymsnd", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "c45-01.5", 0x00000, 0x20000, CRC(052997b2) SHA1(3aa8b4f759a1c196de39754a9ccdf4fabdbab388) )
|
||||
@ -963,14 +953,14 @@ ROM_START( ainfernoj )
|
||||
ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "c45-11.28", 0x000000, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
|
||||
ROM_LOAD16_BYTE( "c45-15.40", 0x000001, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
|
||||
ROM_LOAD16_BYTE( "c45-12.29", 0x040000, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )
|
||||
ROM_LOAD16_BYTE( "c45-16.41", 0x040001, 0x20000, CRC(c6eb93b0) SHA1(d0b1adfce5c1f4e21c5d84527d22ace14578f2d7) )
|
||||
ROM_LOAD16_BYTE( "c45-13.30", 0x080000, 0x20000, CRC(69b82af6) SHA1(13c035e84affa59734c6dd1b07963c08654b5f5a) )
|
||||
ROM_LOAD16_BYTE( "c45-17.42", 0x080001, 0x20000, CRC(0dbee000) SHA1(41073d5cf20df12d5ba1c424c9d9f0b2d9836d5d) )
|
||||
ROM_LOAD16_BYTE( "c45-14.31", 0x0c0000, 0x20000, CRC(481b6f29) SHA1(0b047e805663b144dc2388c86438950fcdc29658) )
|
||||
ROM_LOAD16_BYTE( "c45-18.43", 0x0c0001, 0x20000, CRC(ba7ecf3b) SHA1(dd073b7bfbf2f88432337027ae9fb6c4f02a538f) )
|
||||
ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
|
||||
ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
|
||||
ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )
|
||||
ROM_LOAD64_BYTE( "c45-16.41", 0x000004, 0x20000, CRC(c6eb93b0) SHA1(d0b1adfce5c1f4e21c5d84527d22ace14578f2d7) )
|
||||
ROM_LOAD64_BYTE( "c45-13.30", 0x000003, 0x20000, CRC(69b82af6) SHA1(13c035e84affa59734c6dd1b07963c08654b5f5a) )
|
||||
ROM_LOAD64_BYTE( "c45-17.42", 0x000002, 0x20000, CRC(0dbee000) SHA1(41073d5cf20df12d5ba1c424c9d9f0b2d9836d5d) )
|
||||
ROM_LOAD64_BYTE( "c45-14.31", 0x000001, 0x20000, CRC(481b6f29) SHA1(0b047e805663b144dc2388c86438950fcdc29658) )
|
||||
ROM_LOAD64_BYTE( "c45-18.43", 0x000000, 0x20000, CRC(ba7ecf3b) SHA1(dd073b7bfbf2f88432337027ae9fb6c4f02a538f) )
|
||||
|
||||
ROM_REGION( 0xa0000, "ymsnd", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "c45-01.5", 0x00000, 0x20000, CRC(052997b2) SHA1(3aa8b4f759a1c196de39754a9ccdf4fabdbab388) )
|
||||
|
@ -20,13 +20,13 @@
|
||||
enum { TAITOAIR_FRAC_SHIFT = 16, TAITOAIR_POLY_MAX_PT = 16 };
|
||||
|
||||
struct taitoair_spoint {
|
||||
int32_t x, y;
|
||||
s32 x, y;
|
||||
};
|
||||
|
||||
struct taitoair_poly {
|
||||
struct taitoair_spoint p[TAITOAIR_POLY_MAX_PT];
|
||||
int pcount;
|
||||
uint16_t header;
|
||||
u16 header;
|
||||
};
|
||||
|
||||
|
||||
@ -50,18 +50,19 @@ public:
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_screen(*this, "screen")
|
||||
, m_palette(*this, "palette")
|
||||
, m_z80bank(*this, "z80bank")
|
||||
{ }
|
||||
|
||||
void airsys(machine_config &config);
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint16_t> m_m68000_mainram;
|
||||
required_shared_ptr<uint16_t> m_line_ram;
|
||||
required_shared_ptr<uint16_t> m_dsp_ram; // Shared 68000/TMS32025 RAM
|
||||
required_shared_ptr<uint16_t> m_paletteram;
|
||||
required_shared_ptr<uint16_t> m_gradram;
|
||||
required_shared_ptr<uint16_t> m_tc0430grw;
|
||||
required_shared_ptr<u16> m_m68000_mainram;
|
||||
required_shared_ptr<u16> m_line_ram;
|
||||
required_shared_ptr<u16> m_dsp_ram; // Shared 68000/TMS32025 RAM
|
||||
required_shared_ptr<u16> m_paletteram;
|
||||
required_shared_ptr<u16> m_gradram;
|
||||
required_shared_ptr<u16> m_tc0430grw;
|
||||
|
||||
/* video-related */
|
||||
taitoair_poly m_q;
|
||||
@ -80,70 +81,72 @@ private:
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_memory_bank m_z80bank;
|
||||
|
||||
std::unique_ptr<bitmap_ind16> m_framebuffer[2];
|
||||
|
||||
/* 3d info */
|
||||
int16_t m_frustumLeft;
|
||||
int16_t m_frustumBottom;
|
||||
int16_t m_eyecoordBuffer[4]; /* homogeneous */
|
||||
s16 m_frustumLeft;
|
||||
s16 m_frustumBottom;
|
||||
s16 m_eyecoordBuffer[4]; /* homogeneous */
|
||||
|
||||
bool m_gradbank;
|
||||
|
||||
uint16_t m_dsp_test_object_type;
|
||||
int16_t m_dsp_test_or_clip, m_dsp_test_and_clip;
|
||||
int16_t m_dsp_test_x, m_dsp_test_y, m_dsp_test_z;
|
||||
u16 m_dsp_test_object_type;
|
||||
s16 m_dsp_test_or_clip, m_dsp_test_and_clip;
|
||||
s16 m_dsp_test_x, m_dsp_test_y, m_dsp_test_z;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(dsp_test_start_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_test_x_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_test_y_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_test_z_w);
|
||||
DECLARE_READ16_MEMBER(dsp_test_point_r);
|
||||
DECLARE_READ16_MEMBER(dsp_test_or_clip_r);
|
||||
DECLARE_READ16_MEMBER(dsp_test_and_clip_r);
|
||||
void dsp_test_start_w(u16 data);
|
||||
void dsp_test_x_w(u16 data);
|
||||
void dsp_test_y_w(u16 data);
|
||||
void dsp_test_z_w(u16 data);
|
||||
u16 dsp_test_point_r();
|
||||
u16 dsp_test_or_clip_r();
|
||||
u16 dsp_test_and_clip_r();
|
||||
|
||||
int16_t m_dsp_muldiv_a_1, m_dsp_muldiv_b_1, m_dsp_muldiv_c_1;
|
||||
s16 m_dsp_muldiv_a_1, m_dsp_muldiv_b_1, m_dsp_muldiv_c_1;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_a_1_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_b_1_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_c_1_w);
|
||||
DECLARE_READ16_MEMBER(dsp_muldiv_1_r);
|
||||
void dsp_muldiv_a_1_w(u16 data);
|
||||
void dsp_muldiv_b_1_w(u16 data);
|
||||
void dsp_muldiv_c_1_w(u16 data);
|
||||
u16 dsp_muldiv_1_r();
|
||||
|
||||
int16_t m_dsp_muldiv_a_2, m_dsp_muldiv_b_2, m_dsp_muldiv_c_2;
|
||||
s16 m_dsp_muldiv_a_2, m_dsp_muldiv_b_2, m_dsp_muldiv_c_2;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_a_2_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_b_2_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_muldiv_c_2_w);
|
||||
DECLARE_READ16_MEMBER(dsp_muldiv_2_r);
|
||||
void dsp_muldiv_a_2_w(u16 data);
|
||||
void dsp_muldiv_b_2_w(u16 data);
|
||||
void dsp_muldiv_c_2_w(u16 data);
|
||||
u16 dsp_muldiv_2_r();
|
||||
|
||||
//bitmap_ind16 *m_buffer3d;
|
||||
DECLARE_WRITE16_MEMBER(system_control_w);
|
||||
DECLARE_READ16_MEMBER(lineram_r);
|
||||
DECLARE_WRITE16_MEMBER(lineram_w);
|
||||
DECLARE_READ16_MEMBER(dspram_r);
|
||||
DECLARE_WRITE16_MEMBER(dspram_w);
|
||||
DECLARE_READ16_MEMBER(dsp_HOLD_signal_r);
|
||||
DECLARE_WRITE16_MEMBER(dsp_HOLDA_signal_w);
|
||||
DECLARE_WRITE16_MEMBER(airsys_paletteram16_w);
|
||||
DECLARE_WRITE16_MEMBER(airsys_gradram_w);
|
||||
void system_control_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 lineram_r(offs_t offset);
|
||||
void lineram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 dspram_r(offs_t offset);
|
||||
void dspram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 dsp_HOLD_signal_r();
|
||||
void dsp_HOLDA_signal_w(offs_t offset, u16 data);
|
||||
void paletteram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void gradram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
DECLARE_READ16_MEMBER(stick_input_r);
|
||||
DECLARE_READ16_MEMBER(stick2_input_r);
|
||||
DECLARE_WRITE8_MEMBER(coin_control_w);
|
||||
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_flags_w);
|
||||
DECLARE_WRITE16_MEMBER(dma_regs_w);
|
||||
void coin_control_w(u8 data);
|
||||
void sound_bankswitch_w(u8 data);
|
||||
void dsp_flags_w(offs_t offset, u16 data);
|
||||
void dma_regs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update_taitoair(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
int draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
int draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset );
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
int draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
int draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset);
|
||||
void fb_copy_op(void);
|
||||
void fb_fill_op(void);
|
||||
void fb_erase_op(void);
|
||||
|
||||
void fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect, uint16_t header, int32_t x1, int32_t x2, int32_t sl1, int32_t sl2, int32_t y1, int32_t y2, int32_t *nx1, int32_t *nx2 );
|
||||
void fill_poly( bitmap_ind16 &bitmap, const rectangle &cliprect, const struct taitoair_poly *q );
|
||||
void fill_slope(bitmap_ind16 &bitmap, const rectangle &cliprect, u16 header, s32 x1, s32 x2, s32 sl1, s32 sl2, s32 y1, s32 y2, s32 *nx1, s32 *nx2);
|
||||
void fill_poly(bitmap_ind16 &bitmap, const rectangle &cliprect, const struct taitoair_poly *q);
|
||||
|
||||
void DSP_map_data(address_map &map);
|
||||
void DSP_map_program(address_map &map);
|
||||
|
@ -70,7 +70,7 @@ static const int zoomy_conv_table[] =
|
||||
Screen refresh
|
||||
***************************************************************************/
|
||||
|
||||
int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
return draw_sprites(bitmap,cliprect, 0x3f8 / 2);
|
||||
}
|
||||
@ -79,20 +79,14 @@ int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
@param start_offset DMA sprite offset source
|
||||
@return value acquired by a pause flag acquisition.
|
||||
*/
|
||||
int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset )
|
||||
int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset)
|
||||
{
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
//const uint16_t stop_values[4] = { 0xc00, 0, 0, 0 };
|
||||
static const int size[] = { 1, 2, 4, 4 };
|
||||
int x0, y0, x, y, dx, dy, ex, ey, zx, zy;
|
||||
int ysize;
|
||||
int j, k;
|
||||
int offs; /* sprite RAM offset */
|
||||
int tile_offs; /* sprite chain offset */
|
||||
int zoomx, zoomy; /* zoom value */
|
||||
//const u16 stop_values[4] = { 0xc00, 0, 0, 0 };
|
||||
static const u8 size[] = { 1, 2, 4, 4 };
|
||||
|
||||
for (offs = start_offset; offs >= 0; offs -= 0x008 / 2)
|
||||
for (int offs = start_offset; offs >= 0; offs -= 0x008 / 2)
|
||||
{
|
||||
/*!
|
||||
Starting at a particular sequence, sprite DMA seems to stop there and resume via "something",
|
||||
@ -101,23 +95,23 @@ int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
@todo reported sequence for DMA pause flag is 0x0c** 0x0000 0x0000 0x0000.
|
||||
Verify how exactly via HW test. Continuing may be determined by a DMA bit write.
|
||||
*/
|
||||
if(m_tc0080vco->sprram_r(offs + 0) == 0xc00 ||
|
||||
if (m_tc0080vco->sprram_r(offs + 0) == 0xc00 ||
|
||||
m_tc0080vco->sprram_r(offs + 0) == 0xcff) // Air Inferno
|
||||
return offs - 8/2;
|
||||
|
||||
x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff;
|
||||
y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
|
||||
zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
|
||||
zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
|
||||
tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
|
||||
ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
|
||||
|
||||
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff;
|
||||
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
|
||||
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
|
||||
int zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
|
||||
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
|
||||
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
/* Convert zoomy value to real value as zoomx */
|
||||
zoomy = zoomy_conv_table[zoomy];
|
||||
|
||||
int dx, dy, ex, ey, zx, zy;
|
||||
if (zoomx < 63)
|
||||
{
|
||||
dx = 8 + (zoomx + 2) / 8;
|
||||
@ -160,37 +154,33 @@ int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
y0 += 2;
|
||||
}
|
||||
|
||||
y = y0;
|
||||
for (j = 0; j < ysize; j ++)
|
||||
int y = y0;
|
||||
for (int j = 0; j < ysize; j++)
|
||||
{
|
||||
x = x0;
|
||||
for (k = 0; k < 4; k ++)
|
||||
int x = x0;
|
||||
for (int k = 0; k < 4; k++)
|
||||
{
|
||||
if (tile_offs >= 0x1000)
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
|
||||
color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
|
||||
flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
|
||||
flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
|
||||
const u32 tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
|
||||
const u32 color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
|
||||
int flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
|
||||
int flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
|
||||
|
||||
if (m_tc0080vco->flipscreen_r())
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
|
||||
|
||||
m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
|
||||
m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
|
||||
tile,
|
||||
color,
|
||||
flipx, flipy,
|
||||
x, y,
|
||||
zx, zy, 0
|
||||
);
|
||||
zx, zy, 0);
|
||||
}
|
||||
tile_offs ++;
|
||||
tile_offs++;
|
||||
x += dx;
|
||||
}
|
||||
y += dy;
|
||||
@ -201,7 +191,7 @@ int taitoair_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
return 0;
|
||||
}
|
||||
|
||||
void taitoair_state::fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect, uint16_t header, int32_t x1, int32_t x2, int32_t sl1, int32_t sl2, int32_t y1, int32_t y2, int32_t *nx1, int32_t *nx2 )
|
||||
void taitoair_state::fill_slope(bitmap_ind16 &bitmap, const rectangle &cliprect, u16 header, s32 x1, s32 x2, s32 sl1, s32 sl2, s32 y1, s32 y2, s32 *nx1, s32 *nx2)
|
||||
{
|
||||
if (y1 > cliprect.max_y)
|
||||
return;
|
||||
@ -230,7 +220,7 @@ void taitoair_state::fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
|
||||
if (x1 > x2 || (x1==x2 && sl1 > sl2))
|
||||
{
|
||||
int32_t t, *tp;
|
||||
s32 t, *tp;
|
||||
t = x1;
|
||||
x1 = x2;
|
||||
x2 = t;
|
||||
@ -258,17 +248,17 @@ void taitoair_state::fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
if (xx2 > cliprect.max_x)
|
||||
xx2 = cliprect.max_x;
|
||||
|
||||
if(header & 0x4000 && machine().input().code_pressed(KEYCODE_Q))
|
||||
if (header & 0x4000 && machine().input().code_pressed(KEYCODE_Q))
|
||||
{
|
||||
base_color = machine().rand() & 0x3fff;
|
||||
grad_col = 0;
|
||||
}
|
||||
else if(m_paletteram[(header & 0xff)+0x300] & 0x8000)
|
||||
else if (m_paletteram[(header & 0xff)+0x300] & 0x8000)
|
||||
{
|
||||
/* Terrain elements, with a gradient applied. */
|
||||
/*! @todo it's unknown if gradient color applies by global screen Y coordinate or there's a calculation to somewhere ... */
|
||||
base_color = ((header & 0x3f) * 0x80) + 0x2040;
|
||||
if(header & 0x3fe0)
|
||||
if (header & 0x3fe0)
|
||||
base_color = machine().rand() & 0x3fff;
|
||||
grad_col = (y1 >> 3) & 0x3f;
|
||||
}
|
||||
@ -295,22 +285,21 @@ void taitoair_state::fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
*nx2 = x2;
|
||||
}
|
||||
|
||||
void taitoair_state::fill_poly( bitmap_ind16 &bitmap, const rectangle &cliprect, const struct taitoair_poly *q )
|
||||
void taitoair_state::fill_poly(bitmap_ind16 &bitmap, const rectangle &cliprect, const struct taitoair_poly *q)
|
||||
{
|
||||
int32_t sl1, sl2, cury, limy, x1, x2;
|
||||
int pmin, pmax, i, ps1, ps2;
|
||||
s32 sl1, sl2, x1, x2;
|
||||
struct taitoair_spoint p[TAITOAIR_POLY_MAX_PT * 2];
|
||||
uint16_t header = q->header;
|
||||
u16 header = q->header;
|
||||
int pcount = q->pcount;
|
||||
|
||||
for (i = 0; i < pcount; i++)
|
||||
for (int i = 0; i < pcount; i++)
|
||||
{
|
||||
p[i].x = p[i + pcount].x = q->p[i].x << TAITOAIR_FRAC_SHIFT;
|
||||
p[i].y = p[i + pcount].y = q->p[i].y;
|
||||
}
|
||||
|
||||
pmin = pmax = 0;
|
||||
for (i = 1; i < pcount; i++)
|
||||
int pmin = 0, pmax = 0;
|
||||
for (int i = 1; i < pcount; i++)
|
||||
{
|
||||
if (p[i].y < p[pmin].y)
|
||||
pmin = i;
|
||||
@ -318,8 +307,8 @@ void taitoair_state::fill_poly( bitmap_ind16 &bitmap, const rectangle &cliprect,
|
||||
pmax = i;
|
||||
}
|
||||
|
||||
cury = p[pmin].y;
|
||||
limy = p[pmax].y;
|
||||
s32 cury = p[pmin].y;
|
||||
s32 limy = p[pmax].y;
|
||||
|
||||
if (cury == limy)
|
||||
return;
|
||||
@ -332,8 +321,8 @@ void taitoair_state::fill_poly( bitmap_ind16 &bitmap, const rectangle &cliprect,
|
||||
if (limy > cliprect.max_y)
|
||||
limy = cliprect.max_y;
|
||||
|
||||
ps1 = pmin + pcount;
|
||||
ps2 = pmin;
|
||||
int ps1 = pmin + pcount;
|
||||
int ps2 = pmin;
|
||||
|
||||
goto startup;
|
||||
|
||||
@ -469,7 +458,7 @@ void taitoair_state::fb_fill_op()
|
||||
@todo still don't know how this works. It calls three values (0x1fff-0x5fff-0xdfff), for two or three offsets.
|
||||
In theory this should fit into framebuffer draw, display, clear and swap in some way.
|
||||
*/
|
||||
WRITE16_MEMBER(taitoair_state::dsp_flags_w)
|
||||
void taitoair_state::dsp_flags_w(offs_t offset, u16 data)
|
||||
{
|
||||
rectangle cliprect;
|
||||
|
||||
@ -480,67 +469,67 @@ WRITE16_MEMBER(taitoair_state::dsp_flags_w)
|
||||
cliprect.max_x = m_screen->width() - 1;
|
||||
cliprect.max_y = m_screen->height() - 1;
|
||||
|
||||
/* clear and copy operation if offset is 0x3001 */
|
||||
if (offset == 1)
|
||||
{
|
||||
/* clear and copy operation if offset is 0x3001 */
|
||||
if(offset == 1)
|
||||
{
|
||||
fb_copy_op();
|
||||
}
|
||||
fb_copy_op();
|
||||
}
|
||||
|
||||
/* if offset 0x3001 OR 0x3002 we put data in the buffer fb */
|
||||
if(offset)
|
||||
{
|
||||
fb_fill_op();
|
||||
}
|
||||
/* if offset 0x3001 OR 0x3002 we put data in the buffer fb */
|
||||
if (offset)
|
||||
{
|
||||
fb_fill_op();
|
||||
}
|
||||
}
|
||||
|
||||
void taitoair_state::video_start()
|
||||
{
|
||||
int width, height;
|
||||
|
||||
width = m_screen->width();
|
||||
height = m_screen->height();
|
||||
int width = m_screen->width();
|
||||
int height = m_screen->height();
|
||||
m_framebuffer[0] = std::make_unique<bitmap_ind16>(width, height);
|
||||
m_framebuffer[1] = std::make_unique<bitmap_ind16>(width, height);
|
||||
//m_buffer3d = std::make_unique<bitmap_ind16>(width, height);
|
||||
}
|
||||
|
||||
uint32_t taitoair_state::screen_update_taitoair(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 taitoair_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int sprite_ptr;
|
||||
m_tc0080vco->tilemap_update();
|
||||
|
||||
uint32_t counter1 = (m_tc0430grw[0] << 16) | m_tc0430grw[1];
|
||||
uint32_t inc1x = int16_t(m_tc0430grw[2]);
|
||||
uint32_t inc1y = int16_t(m_tc0430grw[3]);
|
||||
uint32_t counter2 = (m_tc0430grw[4] << 16) | m_tc0430grw[5];
|
||||
uint32_t inc2x = int16_t(m_tc0430grw[6]);
|
||||
uint32_t inc2y = int16_t(m_tc0430grw[7]);
|
||||
u32 counter1 = (m_tc0430grw[0] << 16) | m_tc0430grw[1];
|
||||
u32 inc1x = s16(m_tc0430grw[2]);
|
||||
u32 inc1y = s16(m_tc0430grw[3]);
|
||||
u32 counter2 = (m_tc0430grw[4] << 16) | m_tc0430grw[5];
|
||||
u32 inc2x = s16(m_tc0430grw[6]);
|
||||
u32 inc2y = s16(m_tc0430grw[7]);
|
||||
|
||||
// Deltas are 118/31
|
||||
int dx = cliprect.min_x + 118;
|
||||
int dy = cliprect.min_y - 48 + 31;
|
||||
|
||||
counter1 += dx*inc1x + dy*inc1y;
|
||||
counter2 += dx*inc2x + dy*inc2y;
|
||||
counter1 += dx * inc1x + dy * inc1y;
|
||||
counter2 += dx * inc2x + dy * inc2y;
|
||||
|
||||
for(int y = cliprect.min_y; y <= cliprect.max_y; y++) {
|
||||
uint32_t c1b = counter1;
|
||||
uint32_t c2b = counter2;
|
||||
uint16_t *dest = &bitmap.pix(y, cliprect.min_x);
|
||||
for(int x = cliprect.min_x; x <= cliprect.max_x; x++) {
|
||||
uint16_t base = 0;
|
||||
uint32_t cntr = 0;
|
||||
if(c2b & 0x800000) {
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
u32 c1b = counter1;
|
||||
u32 c2b = counter2;
|
||||
u16 *dest = &bitmap.pix(y, cliprect.min_x);
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
u16 base = 0;
|
||||
u32 cntr = 0;
|
||||
if (c2b & 0x800000)
|
||||
{
|
||||
base = 0x2040;
|
||||
cntr = c2b;
|
||||
} else if(c1b & 0x800000) {
|
||||
}
|
||||
else if (c1b & 0x800000)
|
||||
{
|
||||
base = 0x2000;
|
||||
cntr = c1b;
|
||||
}
|
||||
if(m_gradbank == true)
|
||||
base|= 0x1000;
|
||||
if (m_gradbank == true)
|
||||
base |= 0x1000;
|
||||
|
||||
*dest++ = base | (cntr >= 0x83f000 ? 0x3f : (cntr >> 12) & 0x3f);
|
||||
|
||||
@ -551,13 +540,11 @@ uint32_t taitoair_state::screen_update_taitoair(screen_device &screen, bitmap_in
|
||||
counter2 += inc2y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
copybitmap_trans(bitmap, *m_framebuffer[1], 0, 0, 0, 0, cliprect, 0);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0);
|
||||
|
||||
sprite_ptr = draw_sprites(bitmap, cliprect);
|
||||
int sprite_ptr = draw_sprites(bitmap, cliprect);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user