mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
undo the intrusive personal-style changes i did a while ago, make Sarayan feel home again =)
This commit is contained in:
parent
7d7f5ca352
commit
6feb9ac5ca
@ -1590,8 +1590,7 @@ INT32 *namcos23_state::c435_getv(UINT16 id)
|
||||
{
|
||||
if(id == 0x8000)
|
||||
return m_light_vector;
|
||||
if(id >= 0x100)
|
||||
{
|
||||
if(id >= 0x100) {
|
||||
memset(m_spv, 0, sizeof(m_spv));
|
||||
return m_spv;
|
||||
}
|
||||
@ -1600,8 +1599,7 @@ INT32 *namcos23_state::c435_getv(UINT16 id)
|
||||
|
||||
INT16 *namcos23_state::c435_getm(UINT16 id)
|
||||
{
|
||||
if(id >= 0x100)
|
||||
{
|
||||
if(id >= 0x100) {
|
||||
memset(m_spm, 0, sizeof(m_spm));
|
||||
return m_spm;
|
||||
}
|
||||
@ -1610,8 +1608,7 @@ INT16 *namcos23_state::c435_getm(UINT16 id)
|
||||
|
||||
void namcos23_state::c435_matrix_matrix_mul() // 0.0
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 4)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 4) {
|
||||
logerror("WARNING: c435_matrix_matrix_mul with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
@ -1635,8 +1632,7 @@ void namcos23_state::c435_matrix_matrix_mul() // 0.0
|
||||
|
||||
void namcos23_state::c435_matrix_vector_mul() // 0.1
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 4)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 4) {
|
||||
logerror("WARNING: c435_matrix_vector_mul with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
@ -1664,8 +1660,7 @@ void namcos23_state::c435_matrix_vector_mul() // 0.1
|
||||
|
||||
void namcos23_state::c435_matrix_set() // 0.4
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 10)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 10) {
|
||||
logerror("WARNING: c435_matrix_set with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
@ -1676,8 +1671,7 @@ void namcos23_state::c435_matrix_set() // 0.4
|
||||
|
||||
void namcos23_state::c435_vector_set() // 0.5
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 7)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 7) {
|
||||
logerror("WARNING: c435_vector_set with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
@ -1688,8 +1682,7 @@ void namcos23_state::c435_vector_set() // 0.5
|
||||
|
||||
void namcos23_state::c435_scaling_set() // 4.4
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xff) != 1)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xff) != 1) {
|
||||
logerror("WARNING: c435_scaling_set with size %d\n", m_c435_buffer[0] & 0xff);
|
||||
return;
|
||||
}
|
||||
@ -1698,8 +1691,7 @@ void namcos23_state::c435_scaling_set() // 4.4
|
||||
|
||||
void namcos23_state::c435_state_set_interrupt() // 4.f.0001
|
||||
{
|
||||
if(m_c435_buffer[0] != 0x4f02)
|
||||
{
|
||||
if(m_c435_buffer[0] != 0x4f02) {
|
||||
logerror("WARNING: c435_state_set_interrupt with size %d\n", m_c435_buffer[0] & 0xff);
|
||||
return;
|
||||
}
|
||||
@ -1711,8 +1703,7 @@ void namcos23_state::c435_state_set_interrupt() // 4.f.0001
|
||||
|
||||
void namcos23_state::c435_state_set() // 4.f
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xff) == 0)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xff) == 0) {
|
||||
logerror("WARNING: c435_state_set with size %d\n", m_c435_buffer[0] & 0xff);
|
||||
return;
|
||||
}
|
||||
@ -1726,8 +1717,7 @@ void namcos23_state::c435_state_set() // 4.f
|
||||
|
||||
void namcos23_state::c435_render() // 8
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 3)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 3) {
|
||||
logerror("WARNING: c435_render with size %d, header %04x", m_c435_buffer[0] & 0xf, m_c435_buffer[0]);
|
||||
return;
|
||||
}
|
||||
@ -1737,8 +1727,7 @@ void namcos23_state::c435_render() // 8
|
||||
|
||||
logerror("render model %x %swith matrix %x and vector %x\n", m_c435_buffer[1], use_scaling ? "scaled " : "", m_c435_buffer[2], m_c435_buffer[3]);
|
||||
|
||||
if(render.count[render.cur] >= RENDER_MAX_ENTRIES)
|
||||
{
|
||||
if(render.count[render.cur] >= RENDER_MAX_ENTRIES) {
|
||||
logerror("WARNING: render buffer full\n");
|
||||
return;
|
||||
}
|
||||
@ -1766,8 +1755,7 @@ void namcos23_state::c435_render() // 8
|
||||
|
||||
void namcos23_state::c435_flush() // c
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 0)
|
||||
{
|
||||
if((m_c435_buffer[0] & 0xf) != 0) {
|
||||
logerror("WARNING: c435_flush with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
@ -1835,10 +1823,9 @@ void namcos23_state::c435_dma(address_space &space, UINT32 adr, UINT32 size)
|
||||
|
||||
READ32_MEMBER(namcos23_state::c435_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0xa:
|
||||
return 1; // Busy flag
|
||||
switch(offset) {
|
||||
case 0xa:
|
||||
return 1; // Busy flag
|
||||
}
|
||||
|
||||
logerror("c435_r %02x @ %08x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -1847,21 +1834,20 @@ READ32_MEMBER(namcos23_state::c435_r)
|
||||
|
||||
WRITE32_MEMBER(namcos23_state::c435_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x7:
|
||||
COMBINE_DATA(&m_c435_address);
|
||||
break;
|
||||
case 0x8:
|
||||
COMBINE_DATA(&m_c435_size);
|
||||
break;
|
||||
case 0x9:
|
||||
if (data & 1)
|
||||
c435_dma(space, m_c435_address, m_c435_size);
|
||||
break;
|
||||
default:
|
||||
logerror("c435_w %02x, %08x @ %08x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0x7:
|
||||
COMBINE_DATA(&m_c435_address);
|
||||
break;
|
||||
case 0x8:
|
||||
COMBINE_DATA(&m_c435_size);
|
||||
break;
|
||||
case 0x9:
|
||||
if(data & 1)
|
||||
c435_dma(space, m_c435_address, m_c435_size);
|
||||
break;
|
||||
default:
|
||||
logerror("c435_w %02x, %08x @ %08x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1883,8 +1869,7 @@ static void render_scanline(void *dest, INT32 scanline, const poly_extent *exten
|
||||
bitmap_rgb32 *bitmap = (bitmap_rgb32 *)dest;
|
||||
UINT32 *img = &bitmap->pix32(scanline, extent->startx);
|
||||
|
||||
for(int x = extent->startx; x < extent->stopx; x++)
|
||||
{
|
||||
for(int x = extent->startx; x < extent->stopx; x++) {
|
||||
float z = w ? 1/w : 0;
|
||||
UINT32 pcol = rd->texture_lookup(*rd->machine, rd->pens, u*z, v*z);
|
||||
float ll = l*z;
|
||||
@ -1948,14 +1933,12 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
{
|
||||
render_t &render = m_render;
|
||||
UINT32 adr = m_ptrom[re->model.model];
|
||||
if(adr >= m_ptrom_limit)
|
||||
{
|
||||
if(adr >= m_ptrom_limit) {
|
||||
logerror("WARNING: model %04x base address %08x out-of-bounds - pointram?\n", re->model.model, adr);
|
||||
return;
|
||||
}
|
||||
|
||||
while(adr < m_ptrom_limit)
|
||||
{
|
||||
while(adr < m_ptrom_limit) {
|
||||
poly_vertex pv[15];
|
||||
|
||||
UINT32 type = m_ptrom[adr++];
|
||||
@ -1973,8 +1956,7 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
UINT32 light = 0;
|
||||
UINT32 extptr = 0;
|
||||
|
||||
if(lmode == 3)
|
||||
{
|
||||
if(lmode == 3) {
|
||||
extptr = adr;
|
||||
adr += ne;
|
||||
}
|
||||
@ -1984,8 +1966,7 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
float minz = FLT_MAX;
|
||||
float maxz = FLT_MIN;
|
||||
|
||||
for(int i=0; i<ne; i++)
|
||||
{
|
||||
for(int i=0; i<ne; i++) {
|
||||
UINT32 v1 = m_ptrom[adr++];
|
||||
UINT32 v2 = m_ptrom[adr++];
|
||||
UINT32 v3 = m_ptrom[adr++];
|
||||
@ -1999,8 +1980,7 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
if(pv[i].p[0] < minz)
|
||||
minz = pv[i].p[0];
|
||||
|
||||
switch(lmode)
|
||||
{
|
||||
switch(lmode) {
|
||||
case 0:
|
||||
pv[i].p[3] = ((light >> (8*(3-i))) & 0xff) / 64.0;
|
||||
break;
|
||||
@ -2010,8 +1990,7 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
case 2:
|
||||
pv[i].p[3] = 1.0;
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
case 3: {
|
||||
UINT32 norm = m_ptrom[extptr++];
|
||||
INT32 nx = u32_to_s10(norm >> 20);
|
||||
INT32 ny = u32_to_s10(norm >> 10);
|
||||
@ -2033,10 +2012,8 @@ void namcos23_state::render_one_model(const namcos23_render_entry *re)
|
||||
|
||||
p->vertex_count = poly_zclip_if_less(ne, pv, p->pv, 4, 0.001f);
|
||||
|
||||
if(p->vertex_count >= 3)
|
||||
{
|
||||
for(int i=0; i<p->vertex_count; i++)
|
||||
{
|
||||
if(p->vertex_count >= 3) {
|
||||
for(int i=0; i<p->vertex_count; i++) {
|
||||
render_project(p->pv[i]);
|
||||
float w = p->pv[i].p[0];
|
||||
p->pv[i].p[1] *= w;
|
||||
@ -2081,8 +2058,7 @@ void namcos23_state::render_flush(bitmap_rgb32 &bitmap)
|
||||
|
||||
const static rectangle scissor(0, 639, 0, 479);
|
||||
|
||||
for(int i=0; i<render.poly_count; i++)
|
||||
{
|
||||
for(int i=0; i<render.poly_count; i++) {
|
||||
const namcos23_poly_entry *p = render.poly_order[i];
|
||||
namcos23_render_data *rd = (namcos23_render_data *)poly_get_extra_data(render.polymgr);
|
||||
*rd = p->rd;
|
||||
@ -2097,10 +2073,8 @@ void namcos23_state::render_run(bitmap_rgb32 &bitmap)
|
||||
const namcos23_render_entry *re = render.entries[!render.cur];
|
||||
|
||||
render.poly_count = 0;
|
||||
for(int i=0; i<render.count[!render.cur]; i++)
|
||||
{
|
||||
switch(re->type)
|
||||
{
|
||||
for(int i=0; i<render.count[!render.cur]; i++) {
|
||||
switch(re->type) {
|
||||
case MODEL:
|
||||
render_one_model(re);
|
||||
break;
|
||||
@ -2137,8 +2111,7 @@ WRITE32_MEMBER(namcos23_state::paletteram_w)
|
||||
COMBINE_DATA(&m_generic_paletteram_32[offset]);
|
||||
|
||||
// each LONGWORD is 2 colors, each OFFSET is 2 colors
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
for(int i = 0; i < 2; i++) {
|
||||
int which = (offset << 2 | i << 1) & 0xfffe;
|
||||
int r = nthbyte(m_generic_paletteram_32, which|0x00001);
|
||||
int g = nthbyte(m_generic_paletteram_32, which|0x10001);
|
||||
@ -2197,7 +2170,7 @@ UINT32 namcos23_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap
|
||||
render_run(bitmap);
|
||||
|
||||
m_bgtilemap->set_palette_offset(m_c404.palbase);
|
||||
if (m_c404.layer & 4)
|
||||
if(m_c404.layer & 4)
|
||||
m_bgtilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
m_vblank_count++;
|
||||
@ -2224,19 +2197,19 @@ void namcos23_state::update_main_interrupts(UINT32 cause)
|
||||
m_main_irqcause = cause;
|
||||
|
||||
// level 2: vblank
|
||||
if (changed & MAIN_VBLANK_IRQ)
|
||||
if(changed & MAIN_VBLANK_IRQ)
|
||||
m_maincpu->set_input_line(MIPS3_IRQ0, (cause & MAIN_VBLANK_IRQ) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// level 3: C361/subcpu
|
||||
if (changed & (MAIN_C361_IRQ | MAIN_SUBCPU_IRQ))
|
||||
if(changed & (MAIN_C361_IRQ | MAIN_SUBCPU_IRQ))
|
||||
m_maincpu->set_input_line(MIPS3_IRQ1, (cause & (MAIN_C361_IRQ | MAIN_SUBCPU_IRQ)) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// level 4: C435
|
||||
if (changed & MAIN_C435_IRQ)
|
||||
if(changed & MAIN_C435_IRQ)
|
||||
m_maincpu->set_input_line(MIPS3_IRQ2, (cause & MAIN_C435_IRQ) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// level 5: C422
|
||||
if (changed & MAIN_C422_IRQ)
|
||||
if(changed & MAIN_C422_IRQ)
|
||||
m_maincpu->set_input_line(MIPS3_IRQ3, (cause & MAIN_C422_IRQ) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// crszone(sys23ev2) has a different configuration, are they hardwired or configured by software? (where?)..
|
||||
@ -2248,8 +2221,7 @@ void namcos23_state::update_main_interrupts(UINT32 cause)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(namcos23_state::interrupt)
|
||||
{
|
||||
if (!m_ctl_vbl_active)
|
||||
{
|
||||
if(!m_ctl_vbl_active) {
|
||||
m_ctl_vbl_active = true;
|
||||
update_main_interrupts(m_main_irqcause | MAIN_VBLANK_IRQ);
|
||||
}
|
||||
@ -2270,37 +2242,36 @@ void namcos23_state::sub_irq(screen_device &screen, bool vblank_state)
|
||||
|
||||
READ16_MEMBER(namcos23_state::c417_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
/* According to timecrs2v4a, +0 is the status word with bits being:
|
||||
15: test mode flag (huh?)
|
||||
10: fifo data ready
|
||||
9: cmd ram data ready
|
||||
8: matrix busy
|
||||
7: output unit busy (inverted)
|
||||
6: hokan/tenso unit busy
|
||||
5: point unit busy
|
||||
4: access unit busy
|
||||
3: c403 busy, called c444 in 500gp (inverted)
|
||||
2: 2nd c435 busy (inverted)
|
||||
1: 1st c435 busy (inverted)
|
||||
0: xcpreq
|
||||
*/
|
||||
case 0:
|
||||
return 0x8e | (m_screen->vblank() ? 0x0000 : 0x8000);
|
||||
case 1:
|
||||
return m_c417.adr;
|
||||
case 4:
|
||||
//logerror("c417_r %04x = %04x (%08x, %08x)\n", c417.adr, c417.ram[c417.adr], space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
return m_c417.ram[m_c417.adr];
|
||||
case 5:
|
||||
if (m_c417.pointrom_adr >= m_ptrom_limit)
|
||||
return 0xffff;
|
||||
return m_ptrom[m_c417.pointrom_adr] >> 16;
|
||||
case 6:
|
||||
if (m_c417.pointrom_adr >= m_ptrom_limit)
|
||||
return 0xffff;
|
||||
return m_ptrom[m_c417.pointrom_adr];
|
||||
switch(offset) {
|
||||
/* According to timecrs2v4a, +0 is the status word with bits being:
|
||||
15: test mode flag (huh?)
|
||||
10: fifo data ready
|
||||
9: cmd ram data ready
|
||||
8: matrix busy
|
||||
7: output unit busy (inverted)
|
||||
6: hokan/tenso unit busy
|
||||
5: point unit busy
|
||||
4: access unit busy
|
||||
3: c403 busy, called c444 in 500gp (inverted)
|
||||
2: 2nd c435 busy (inverted)
|
||||
1: 1st c435 busy (inverted)
|
||||
0: xcpreq
|
||||
*/
|
||||
case 0:
|
||||
return 0x8e | (m_screen->vblank() ? 0x0000 : 0x8000);
|
||||
case 1:
|
||||
return m_c417.adr;
|
||||
case 4:
|
||||
//logerror("c417_r %04x = %04x (%08x, %08x)\n", c417.adr, c417.ram[c417.adr], space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
return m_c417.ram[m_c417.adr];
|
||||
case 5:
|
||||
if(m_c417.pointrom_adr >= m_ptrom_limit)
|
||||
return 0xffff;
|
||||
return m_ptrom[m_c417.pointrom_adr] >> 16;
|
||||
case 6:
|
||||
if(m_c417.pointrom_adr >= m_ptrom_limit)
|
||||
return 0xffff;
|
||||
return m_ptrom[m_c417.pointrom_adr];
|
||||
}
|
||||
|
||||
logerror("c417_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -2309,31 +2280,30 @@ READ16_MEMBER(namcos23_state::c417_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::c417_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
c435_pio_w(data);
|
||||
break;
|
||||
case 1:
|
||||
COMBINE_DATA(&m_c417.adr);
|
||||
break;
|
||||
case 2:
|
||||
m_c417.pointrom_adr = (m_c417.pointrom_adr << 16) | data;
|
||||
break;
|
||||
case 3:
|
||||
m_c417.pointrom_adr = 0;
|
||||
break;
|
||||
case 4:
|
||||
//logerror("c417_w %04x = %04x (%08x, %08x)\n", m_c417.adr, data, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
COMBINE_DATA(m_c417.ram + m_c417.adr);
|
||||
break;
|
||||
case 7:
|
||||
logerror("c417_w: ack IRQ 2 (%x)\n", data);
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C435_IRQ);
|
||||
break;
|
||||
default:
|
||||
logerror("c417_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0:
|
||||
c435_pio_w(data);
|
||||
break;
|
||||
case 1:
|
||||
COMBINE_DATA(&m_c417.adr);
|
||||
break;
|
||||
case 2:
|
||||
m_c417.pointrom_adr = (m_c417.pointrom_adr << 16) | data;
|
||||
break;
|
||||
case 3:
|
||||
m_c417.pointrom_adr = 0;
|
||||
break;
|
||||
case 4:
|
||||
//logerror("c417_w %04x = %04x (%08x, %08x)\n", m_c417.adr, data, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
COMBINE_DATA(m_c417.ram + m_c417.adr);
|
||||
break;
|
||||
case 7:
|
||||
logerror("c417_w: ack IRQ 2 (%x)\n", data);
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C435_IRQ);
|
||||
break;
|
||||
default:
|
||||
logerror("c417_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2371,21 +2341,20 @@ WRITE16_MEMBER(namcos23_state::c412_ram_w)
|
||||
|
||||
READ16_MEMBER(namcos23_state::c412_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x3:
|
||||
return 0x0002; // 0001 = busy, 0002 = game uploads things
|
||||
case 0x8:
|
||||
return m_c412.adr;
|
||||
case 0x9:
|
||||
return m_c412.adr >> 16;
|
||||
case 0xa:
|
||||
return c412_ram_r(space, m_c412.adr, mem_mask);
|
||||
case 0xc:
|
||||
// unknown status, 500gp reads it and waits for a transition
|
||||
// no other games use it?
|
||||
m_c412.status_c ^= 1;
|
||||
return m_c412.status_c;
|
||||
switch(offset) {
|
||||
case 0x3:
|
||||
return 0x0002; // 0001 = busy, 0002 = game uploads things
|
||||
case 0x8:
|
||||
return m_c412.adr;
|
||||
case 0x9:
|
||||
return m_c412.adr >> 16;
|
||||
case 0xa:
|
||||
return c412_ram_r(space, m_c412.adr, mem_mask);
|
||||
case 0xc:
|
||||
// unknown status, 500gp reads it and waits for a transition
|
||||
// no other games use it?
|
||||
m_c412.status_c ^= 1;
|
||||
return m_c412.status_c;
|
||||
}
|
||||
|
||||
logerror("c412_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -2394,25 +2363,24 @@ READ16_MEMBER(namcos23_state::c412_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::c412_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x2:
|
||||
// d0: cz on
|
||||
// other bits: no function?
|
||||
break;
|
||||
case 0x8:
|
||||
m_c412.adr = (data & mem_mask) | (m_c412.adr & (0xffffffff ^ mem_mask));
|
||||
break;
|
||||
case 0x9:
|
||||
m_c412.adr = ((data & mem_mask) << 16) | (m_c412.adr & (0xffffffff ^ (mem_mask << 16)));
|
||||
break;
|
||||
case 0xa:
|
||||
c412_ram_w(space, m_c412.adr, data, mem_mask);
|
||||
m_c412.adr += 2;
|
||||
break;
|
||||
default:
|
||||
logerror("c412_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0x2:
|
||||
// d0: cz on
|
||||
// other bits: no function?
|
||||
break;
|
||||
case 0x8:
|
||||
m_c412.adr = (data & mem_mask) | (m_c412.adr & (0xffffffff ^ mem_mask));
|
||||
break;
|
||||
case 0x9:
|
||||
m_c412.adr = ((data & mem_mask) << 16) | (m_c412.adr & (0xffffffff ^ (mem_mask << 16)));
|
||||
break;
|
||||
case 0xa:
|
||||
c412_ram_w(space, m_c412.adr, data, mem_mask);
|
||||
m_c412.adr += 2;
|
||||
break;
|
||||
default:
|
||||
logerror("c412_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2446,15 +2414,14 @@ WRITE16_MEMBER(namcos23_state::c421_ram_w)
|
||||
|
||||
READ16_MEMBER(namcos23_state::c421_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
return c421_ram_r(space, m_c421.adr & 0xfffff, mem_mask);
|
||||
switch(offset) {
|
||||
case 0:
|
||||
return c421_ram_r(space, m_c421.adr & 0xfffff, mem_mask);
|
||||
|
||||
case 2:
|
||||
return m_c421.adr >> 16;
|
||||
case 3:
|
||||
return m_c421.adr;
|
||||
case 2:
|
||||
return m_c421.adr >> 16;
|
||||
case 3:
|
||||
return m_c421.adr;
|
||||
}
|
||||
|
||||
logerror("c421_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -2463,21 +2430,20 @@ READ16_MEMBER(namcos23_state::c421_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::c421_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
c421_ram_w(space, m_c421.adr & 0xfffff, data, mem_mask);
|
||||
m_c421.adr += 2;
|
||||
break;
|
||||
case 2:
|
||||
m_c421.adr = ((data & mem_mask) << 16) | (m_c421.adr & (0xffffffff ^ (mem_mask << 16)));
|
||||
break;
|
||||
case 3:
|
||||
m_c421.adr = (data & mem_mask) | (m_c421.adr & (0xffffffff ^ mem_mask));
|
||||
break;
|
||||
default:
|
||||
logerror("c421_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0:
|
||||
c421_ram_w(space, m_c421.adr & 0xfffff, data, mem_mask);
|
||||
m_c421.adr += 2;
|
||||
break;
|
||||
case 2:
|
||||
m_c421.adr = ((data & mem_mask) << 16) | (m_c421.adr & (0xffffffff ^ (mem_mask << 16)));
|
||||
break;
|
||||
case 3:
|
||||
m_c421.adr = (data & mem_mask) | (m_c421.adr & (0xffffffff ^ mem_mask));
|
||||
break;
|
||||
default:
|
||||
logerror("c421_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2492,24 +2458,21 @@ READ16_MEMBER(namcos23_state::c422_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::c422_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 1:
|
||||
if (data == 0xfffb)
|
||||
{
|
||||
logerror("c422_w: raise IRQ 3\n");
|
||||
update_main_interrupts(m_main_irqcause | MAIN_C422_IRQ);
|
||||
}
|
||||
else if (data == 0x000f)
|
||||
{
|
||||
logerror("c422_w: ack IRQ 3\n");
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C422_IRQ);
|
||||
}
|
||||
break;
|
||||
switch(offset) {
|
||||
case 1:
|
||||
if(data == 0xfffb) {
|
||||
logerror("c422_w: raise IRQ 3\n");
|
||||
update_main_interrupts(m_main_irqcause | MAIN_C422_IRQ);
|
||||
}
|
||||
else if(data == 0x000f) {
|
||||
logerror("c422_w: ack IRQ 3\n");
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C422_IRQ);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("c422_w: %04x @ %x\n", data, offset);
|
||||
break;
|
||||
default:
|
||||
logerror("c422_w: %04x @ %x\n", data, offset);
|
||||
break;
|
||||
}
|
||||
|
||||
COMBINE_DATA(&m_c422.regs[offset]);
|
||||
@ -2521,8 +2484,7 @@ WRITE16_MEMBER(namcos23_state::c422_w)
|
||||
|
||||
TIMER_CALLBACK_MEMBER(namcos23_state::c361_timer_cb)
|
||||
{
|
||||
if (m_c361.scanline != 0x1ff)
|
||||
{
|
||||
if(m_c361.scanline != 0x1ff) {
|
||||
// need to do a partial update here, but doesn't work properly yet
|
||||
//m_screen->update_partial(m_screen->vpos());
|
||||
update_main_interrupts(m_main_irqcause | MAIN_C361_IRQ);
|
||||
@ -2536,39 +2498,37 @@ TIMER_CALLBACK_MEMBER(namcos23_state::c361_timer_cb)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::c361_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
m_bgtilemap->set_scrollx(0, data&0xfff);
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0:
|
||||
m_bgtilemap->set_scrollx(0, data&0xfff);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_bgtilemap->set_scrolly(0, data&0xfff);
|
||||
break;
|
||||
case 1:
|
||||
m_bgtilemap->set_scrolly(0, data&0xfff);
|
||||
break;
|
||||
|
||||
case 4: // interrupt control
|
||||
m_c361.scanline = data & 0x1ff;
|
||||
m_c361.timer->adjust(m_screen->time_until_pos(m_c361.scanline));
|
||||
break;
|
||||
case 4: // interrupt control
|
||||
m_c361.scanline = data & 0x1ff;
|
||||
m_c361.timer->adjust(m_screen->time_until_pos(m_c361.scanline));
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("c361_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
default:
|
||||
logerror("c361_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(namcos23_state::c361_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
// current raster position
|
||||
// how does it work exactly? it's not understood in namcos22 either (also has a c361)
|
||||
case 5:
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C361_IRQ);
|
||||
return (m_screen->vpos()*2) | (m_screen->vblank() ? 1 : 0);
|
||||
case 6:
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C361_IRQ);
|
||||
return m_screen->vblank() ? 1 : 0;
|
||||
switch(offset) {
|
||||
// current raster position
|
||||
// how does it work exactly? it's not understood in namcos22 either (also has a c361)
|
||||
case 5:
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C361_IRQ);
|
||||
return (m_screen->vpos()*2) | (m_screen->vblank() ? 1 : 0);
|
||||
case 6:
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_C361_IRQ);
|
||||
return m_screen->vblank() ? 1 : 0;
|
||||
}
|
||||
|
||||
logerror("c361_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -2581,53 +2541,48 @@ READ16_MEMBER(namcos23_state::c361_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::ctl_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (m_ctl_led != (data & 0xff))
|
||||
{
|
||||
m_ctl_led = data & 0xff;
|
||||
for (int i = 0; i < 8; i++)
|
||||
output_set_lamp_value(i, (~data<<i & 0x80) ? 0 : 1);
|
||||
}
|
||||
break;
|
||||
switch(offset) {
|
||||
case 0:
|
||||
if(m_ctl_led != (data & 0xff)) {
|
||||
m_ctl_led = data & 0xff;
|
||||
for(int i = 0; i < 8; i++)
|
||||
output_set_lamp_value(i, (~data<<i & 0x80) ? 0 : 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: case 3:
|
||||
// These may be coming from another CPU, in particular the I/O one
|
||||
m_ctl_inp_buffer[offset-2] = (offset == 2 ? m_p1 : m_p2)->read();
|
||||
break;
|
||||
case 5:
|
||||
if(m_ctl_vbl_active)
|
||||
{
|
||||
m_ctl_vbl_active = false;
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_VBLANK_IRQ);
|
||||
}
|
||||
break;
|
||||
case 2: case 3:
|
||||
// These may be coming from another CPU, in particular the I/O one
|
||||
m_ctl_inp_buffer[offset-2] = (offset == 2 ? m_p1 : m_p2)->read();
|
||||
break;
|
||||
case 5:
|
||||
if(m_ctl_vbl_active) {
|
||||
m_ctl_vbl_active = false;
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_VBLANK_IRQ);
|
||||
}
|
||||
break;
|
||||
|
||||
case 6: // gmen wars spams this heavily with 0 prior to starting the GMEN board test
|
||||
if (data != 0)
|
||||
logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
|
||||
default:
|
||||
case 6: // gmen wars spams this heavily with 0 prior to starting the GMEN board test
|
||||
if(data != 0)
|
||||
logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("ctl_w %x, %04x @ %04x (%08x, %08x)\n", offset, data, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(namcos23_state::ctl_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
// 0100 set freezes gorgon (polygon fifo flag)
|
||||
case 1:
|
||||
return 0x0000 | ioport("DSW")->read() | ((m_main_irqcause & MAIN_C361_IRQ) ? 0x400 : 0);
|
||||
case 2: case 3:
|
||||
{
|
||||
UINT16 res = m_ctl_inp_buffer[offset-2] & 0x800 ? 0xffff : 0x0000;
|
||||
m_ctl_inp_buffer[offset-2] = (m_ctl_inp_buffer[offset-2] << 1) | 1;
|
||||
return res;
|
||||
}
|
||||
switch(offset) {
|
||||
// 0100 set freezes gorgon (polygon fifo flag)
|
||||
case 1:
|
||||
return 0x0000 | ioport("DSW")->read() | ((m_main_irqcause & MAIN_C361_IRQ) ? 0x400 : 0);
|
||||
case 2: case 3: {
|
||||
UINT16 res = m_ctl_inp_buffer[offset-2] & 0x800 ? 0xffff : 0x0000;
|
||||
m_ctl_inp_buffer[offset-2] = (m_ctl_inp_buffer[offset-2] << 1) | 1;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
logerror("ctl_r %x @ %04x (%08x, %08x)\n", offset, mem_mask, space.device().safe_pc(), (unsigned int)space.device().state().state_int(MIPS3_R31));
|
||||
@ -2640,39 +2595,34 @@ READ16_MEMBER(namcos23_state::ctl_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::mcuen_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 2:
|
||||
// subcpu irq ack
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_SUBCPU_IRQ);
|
||||
break;
|
||||
switch(offset) {
|
||||
case 2:
|
||||
// subcpu irq ack
|
||||
update_main_interrupts(m_main_irqcause & ~MAIN_SUBCPU_IRQ);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// boot/start the audio mcu
|
||||
if (data)
|
||||
{
|
||||
logerror("mcuen_w: booting H8/3002\n");
|
||||
case 5:
|
||||
// boot/start the audio mcu
|
||||
if(data) {
|
||||
logerror("mcuen_w: booting H8/3002\n");
|
||||
|
||||
// Panic Park: writing 1 when it's already running means reboot?
|
||||
if (m_subcpu_running)
|
||||
{
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
}
|
||||
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
|
||||
m_subcpu_running = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("mcuen_w: stopping H8/3002\n");
|
||||
// Panic Park: writing 1 when it's already running means reboot?
|
||||
if(m_subcpu_running) {
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
m_subcpu_running = false;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("mcuen_w: mask %04x, data %04x @ %x\n", mem_mask, data, offset);
|
||||
break;
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
|
||||
m_subcpu_running = true;
|
||||
} else {
|
||||
logerror("mcuen_w: stopping H8/3002\n");
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
m_subcpu_running = false;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("mcuen_w: mask %04x, data %04x @ %x\n", mem_mask, data, offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2798,10 +2748,8 @@ WRITE16_MEMBER(namcos23_state::sharedram_sub_w)
|
||||
UINT16 *shared16 = reinterpret_cast<UINT16 *>(m_shared_ram.target());
|
||||
|
||||
// fake that an I/O board is connected for games w/o a dump or that aren't properly communicating with it yet
|
||||
if (!m_has_jvsio)
|
||||
{
|
||||
if ((offset == 0x4052/2) && (data == 0x78))
|
||||
{
|
||||
if(!m_has_jvsio) {
|
||||
if((offset == 0x4052/2) && (data == 0x78)) {
|
||||
data = 0;
|
||||
}
|
||||
}
|
||||
@ -2819,12 +2767,9 @@ READ16_MEMBER(namcos23_state::sharedram_sub_r)
|
||||
|
||||
WRITE16_MEMBER(namcos23_state::sub_interrupt_main_w)
|
||||
{
|
||||
if ((mem_mask == 0xffff) && (data == 0x3170))
|
||||
{
|
||||
if((mem_mask == 0xffff) && (data == 0x3170)) {
|
||||
update_main_interrupts(m_main_irqcause | MAIN_SUBCPU_IRQ);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
logerror("Unknown write %x to sub_interrupt_main_w!\n", data);
|
||||
}
|
||||
}
|
||||
@ -2993,8 +2938,7 @@ READ8_MEMBER(namcos23_state::iob_gun_r)
|
||||
UINT16 ypos = m_lighty->read();
|
||||
// ypos is not completely understood yet, there should be a difference between case 1/4 and 2/5
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
switch(offset) {
|
||||
case 0: return xpos&0xff;
|
||||
case 1: return ypos&0xff;
|
||||
case 2: return ypos&0xff;
|
||||
@ -3265,7 +3209,7 @@ DRIVER_INIT_MEMBER(namcos23_state,s23)
|
||||
m_render.count[0] = m_render.count[1] = 0;
|
||||
m_render.cur = 0;
|
||||
|
||||
if ((!strcmp(machine().system().name, "motoxgo")) ||
|
||||
if((!strcmp(machine().system().name, "motoxgo")) ||
|
||||
(!strcmp(machine().system().name, "panicprk")) ||
|
||||
(!strcmp(machine().system().name, "panicprkj")) ||
|
||||
(!strcmp(machine().system().name, "rapidrvr")) ||
|
||||
@ -3285,12 +3229,9 @@ DRIVER_INIT_MEMBER(namcos23_state,s23)
|
||||
(!strcmp(machine().system().name, "crszonev3a")) ||
|
||||
(!strcmp(machine().system().name, "crszonev2a")) ||
|
||||
(!strcmp(machine().system().name, "timecrs2v2b")) ||
|
||||
(!strcmp(machine().system().name, "timecrs2")))
|
||||
{
|
||||
(!strcmp(machine().system().name, "timecrs2"))) {
|
||||
m_has_jvsio = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
m_has_jvsio = 0;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user