i8275: Simplify read/write handlers (nw)

This commit is contained in:
AJR 2019-10-05 01:09:18 -04:00
parent 52cd97b79a
commit d2d205a57d
14 changed files with 47 additions and 53 deletions

View File

@ -469,7 +469,7 @@ void i8275_device::device_timer(emu_timer &timer, device_timer_id id, int param,
// read - // read -
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( i8275_device::read ) uint8_t i8275_device::read(offs_t offset)
{ {
if (offset & 0x01) if (offset & 0x01)
{ {
@ -510,7 +510,7 @@ READ8_MEMBER( i8275_device::read )
// write - // write -
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( i8275_device::write ) void i8275_device::write(offs_t offset, uint8_t data)
{ {
if (offset & 0x01) if (offset & 0x01)
{ {
@ -624,9 +624,9 @@ WRITE8_MEMBER( i8275_device::write )
// dack_w - // dack_w -
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( i8275_device::dack_w ) void i8275_device::dack_w(uint8_t data)
{ {
//LOG("I8275 y %u x %u DACK %04x:%02x %u (%u)\n", screen().vpos(), screen().hpos(), offset, data, m_buffer_idx, m_dma_idx); //LOG("I8275 y %u x %u DACK %02x %u (%u)\n", screen().vpos(), screen().hpos(), data, m_buffer_idx, m_dma_idx);
m_write_drq(0); m_write_drq(0);

View File

@ -83,10 +83,10 @@ public:
auto vrtc_wr_callback() { return m_write_vrtc.bind(); } auto vrtc_wr_callback() { return m_write_vrtc.bind(); }
auto lc_wr_callback() { return m_write_lc.bind(); } auto lc_wr_callback() { return m_write_lc.bind(); }
DECLARE_READ8_MEMBER( read ); uint8_t read(offs_t offset);
DECLARE_WRITE8_MEMBER( write ); void write(offs_t offset, uint8_t data);
DECLARE_WRITE8_MEMBER( dack_w ); void dack_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( lpen_w ); DECLARE_WRITE_LINE_MEMBER( lpen_w );

View File

@ -132,7 +132,7 @@ READ8_MEMBER(argo_state::argo_io_r)
case 0xC0: case 0xC0:
case 0xC4: case 0xC4:
offset >>= 2; offset >>= 2;
return m_crtc->read(space, offset&1); return m_crtc->read(offset&1);
case 0xE8: // wants bit 4 low then high case 0xE8: // wants bit 4 low then high
{ {
@ -175,7 +175,7 @@ WRITE8_MEMBER(argo_state::argo_io_w)
case 0xC0: case 0xC0:
case 0xC4: case 0xC4:
offset >>= 2; offset >>= 2;
m_crtc->write(space, offset&1, data); m_crtc->write(offset&1, data);
break; break;
case 0xE8: // hardware scroll case 0xE8: // hardware scroll

View File

@ -369,7 +369,7 @@ READ8_MEMBER(dwarfd_state::dwarfd_ram_r)
} }
else else
{ {
m_crtc->dack_w(space, 0, m_dw_ram[offset], mem_mask); m_crtc->dack_w(m_dw_ram[offset]);
return m_dw_ram[offset]; return m_dw_ram[offset];
} }
} }

View File

@ -448,7 +448,7 @@ uint8_t hp64k_state::hp64k_crtc_filter(uint8_t data)
WRITE16_MEMBER(hp64k_state::hp64k_crtc_w) WRITE16_MEMBER(hp64k_state::hp64k_crtc_w)
{ {
m_crtc->write(space , offset == 0 , hp64k_crtc_filter((uint8_t)data)); m_crtc->write(offset == 0 , hp64k_crtc_filter((uint8_t)data));
} }
WRITE_LINE_MEMBER(hp64k_state::hp64k_crtc_drq_w) WRITE_LINE_MEMBER(hp64k_state::hp64k_crtc_drq_w)
@ -465,7 +465,7 @@ WRITE_LINE_MEMBER(hp64k_state::hp64k_crtc_drq_w)
m_crtc_ptr++; m_crtc_ptr++;
m_crtc->dack_w(prog_space , 0 , hp64k_crtc_filter(data)); m_crtc->dack_w(hp64k_crtc_filter(data));
} }
} }

View File

@ -201,14 +201,14 @@ I8275_DRAW_CHARACTER_MEMBER(ms6102_state::display_attr) // TODO: attributes
READ8_MEMBER(ms6102_state::crtc_r) READ8_MEMBER(ms6102_state::crtc_r)
{ {
m_crtc2->read(space, offset); m_crtc2->read(offset);
return m_crtc1->read(space, offset); // cs is same for both crtcs so they should return the same thing return m_crtc1->read(offset); // cs is same for both crtcs so they should return the same thing
} }
WRITE8_MEMBER(ms6102_state::crtc_w) WRITE8_MEMBER(ms6102_state::crtc_w)
{ {
m_crtc1->write(space, offset, data); m_crtc1->write(offset, data);
m_crtc2->write(space, offset, data); m_crtc2->write(offset, data);
} }
READ8_MEMBER(ms6102_state::misc_status_r) READ8_MEMBER(ms6102_state::misc_status_r)
@ -240,9 +240,9 @@ WRITE8_MEMBER(ms6102_state::pic_w)
WRITE8_MEMBER(ms6102_state::vdack_w) WRITE8_MEMBER(ms6102_state::vdack_w)
{ {
if(m_dmaaddr & 1) if(m_dmaaddr & 1)
m_crtc1->dack_w(space, offset, data); m_crtc1->dack_w(data);
else else
m_crtc2->dack_w(space, offset, data | 0x80); m_crtc2->dack_w(data | 0x80);
} }
IRQ_CALLBACK_MEMBER(ms6102_state::ms6102_int_ack) IRQ_CALLBACK_MEMBER(ms6102_state::ms6102_int_ack)

View File

@ -331,8 +331,7 @@ WRITE_LINE_MEMBER(rt1715_state::crtc_drq_w)
{ {
if (state) if (state)
{ {
address_space &mem = m_maincpu->space(AS_PROGRAM); m_crtc->dack_w(m_p_videoram[m_dma_adr++]);
m_crtc->dack_w(mem, 0, m_p_videoram[m_dma_adr++]);
m_dma_adr %= (80 * 24); m_dma_adr %= (80 * 24);
} }
} }

View File

@ -143,10 +143,7 @@ I8275_DRAW_CHARACTER_MEMBER( tim100_state::crtc_display_pixels )
WRITE_LINE_MEMBER( tim100_state::drq_w ) WRITE_LINE_MEMBER( tim100_state::drq_w )
{ {
if (state) if (state)
{ m_crtc->dack_w(m_p_videoram[m_dma_adr++]);
address_space& mem = m_maincpu->space(AS_PROGRAM);
m_crtc->dack_w(mem, 0, m_p_videoram[m_dma_adr++]);
}
} }
WRITE_LINE_MEMBER( tim100_state::irq_w ) WRITE_LINE_MEMBER( tim100_state::irq_w )

View File

@ -93,17 +93,17 @@ void trs80dt1_state::machine_reset()
READ8_MEMBER( trs80dt1_state::dma_r ) READ8_MEMBER( trs80dt1_state::dma_r )
{ {
m_crtc->dack_w(space, 0, m_p_videoram[offset]); // write to /BS pin m_crtc->dack_w(m_p_videoram[offset]); // write to /BS pin
// Temporary hack to work around a timing issue // Temporary hack to work around a timing issue
// timer interrupts fires too early and ends the psuedo-dma transfer after only 77 chars // timer interrupts fires too early and ends the psuedo-dma transfer after only 77 chars
// we send the last three manually until this is fixed // we send the last three manually until this is fixed
if (offset%80 == 76) { if (offset%80 == 76) {
offset++; offset++;
m_crtc->dack_w(space, 0, m_p_videoram[offset]); m_crtc->dack_w(m_p_videoram[offset]);
offset++; offset++;
m_crtc->dack_w(space, 0, m_p_videoram[offset]); m_crtc->dack_w(m_p_videoram[offset]);
offset++; offset++;
m_crtc->dack_w(space, 0, m_p_videoram[offset]); m_crtc->dack_w(m_p_videoram[offset]);
} }
return 0x7f; return 0x7f;
} }

View File

@ -28,8 +28,8 @@ public:
private: private:
I8275_DRAW_CHARACTER_MEMBER(draw_character); I8275_DRAW_CHARACTER_MEMBER(draw_character);
DECLARE_READ8_MEMBER(crtc_r); u8 crtc_r(offs_t offset);
DECLARE_WRITE8_MEMBER(crtc_w); void crtc_w(offs_t offset, u8 data);
void io_map(address_map &map); void io_map(address_map &map);
void kbd_map(address_map &map); void kbd_map(address_map &map);
@ -44,14 +44,14 @@ I8275_DRAW_CHARACTER_MEMBER(vp60_state::draw_character)
{ {
} }
READ8_MEMBER(vp60_state::crtc_r) u8 vp60_state::crtc_r(offs_t offset)
{ {
return m_crtc->read(space, offset >> 8); return m_crtc->read(offset >> 8);
} }
WRITE8_MEMBER(vp60_state::crtc_w) void vp60_state::crtc_w(offs_t offset, u8 data)
{ {
m_crtc->write(space, offset >> 8, data); m_crtc->write(offset >> 8, data);
} }
void vp60_state::mem_map(address_map &map) void vp60_state::mem_map(address_map &map)

View File

@ -551,9 +551,9 @@ READ8_MEMBER(wicat_state::video_r)
switch(offset) switch(offset)
{ {
case 0x00: case 0x00:
return m_crtc->read(space,0); return m_crtc->read(0);
case 0x02: case 0x02:
return m_crtc->read(space,1); return m_crtc->read(1);
default: default:
return 0xff; return 0xff;
} }
@ -564,10 +564,10 @@ WRITE8_MEMBER(wicat_state::video_w)
switch(offset) switch(offset)
{ {
case 0x00: case 0x00:
m_crtc->write(space,0,data); m_crtc->write(0,data);
break; break;
case 0x02: case 0x02:
m_crtc->write(space,1,data); m_crtc->write(1,data);
break; break;
} }
} }

View File

@ -151,10 +151,9 @@ u8 wy100_state::memory_r(offs_t offset)
logerror("%s: Reading %02X from PCI register %d\n", machine().describe_context(), data, p2 & 3); logerror("%s: Reading %02X from PCI register %d\n", machine().describe_context(), data, p2 & 3);
if (m_bs_enable && !machine().side_effects_disabled()) if (m_bs_enable && !machine().side_effects_disabled())
{ {
address_space &space = machine().dummy_space();
u8 chardata = (data & 0xe0) == 0x80 ? data : data & 0x7f; u8 chardata = (data & 0xe0) == 0x80 ? data : data & 0x7f;
m_crtc[0]->dack_w(space, 0, chardata); m_crtc[0]->dack_w(chardata);
m_crtc[1]->dack_w(space, 0, (chardata & 0xfe) | (BIT(data, 7) ? 0x00 : 0x01)); m_crtc[1]->dack_w((chardata & 0xfe) | (BIT(data, 7) ? 0x00 : 0x01));
} }
return data; return data;
} }
@ -166,9 +165,8 @@ void wy100_state::memory_w(offs_t offset, u8 data)
// CRTC access is write-only // CRTC access is write-only
if (!BIT(p2, 6)) if (!BIT(p2, 6))
{ {
address_space &space = machine().dummy_space(); m_crtc[0]->write(p2 & 1, data);
m_crtc[0]->write(space, p2 & 1, data); m_crtc[1]->write(p2 & 1, data);
m_crtc[1]->write(space, p2 & 1, data);
} }
else if (m_brdy) else if (m_brdy)
m_bs_enable = true; m_bs_enable = true;

View File

@ -36,8 +36,8 @@ protected:
private: private:
void p3_w(u8 data); void p3_w(u8 data);
DECLARE_READ8_MEMBER(bs_24k_r); DECLARE_READ8_MEMBER(bs_24k_r);
DECLARE_WRITE8_MEMBER(crtc_w); void crtc_w(offs_t offset, u8 data);
DECLARE_WRITE8_MEMBER(latch_12k_w); void latch_12k_w(u8 data);
void prg_map(address_map &map); void prg_map(address_map &map);
void ext_map(address_map &map); void ext_map(address_map &map);
@ -72,8 +72,8 @@ READ8_MEMBER(z29_state::bs_24k_r)
u8 chardata = m_charmem[offset]; u8 chardata = m_charmem[offset];
u8 attrdata = m_attrmem[offset] & 0xf; u8 attrdata = m_attrmem[offset] & 0xf;
m_crtc[0]->dack_w(space, 0, chardata & 0x7f); m_crtc[0]->dack_w(chardata & 0x7f);
m_crtc[1]->dack_w(space, 0, (chardata & 0x60) | (BIT(chardata, 7) ? 0x10 : 0) | attrdata); m_crtc[1]->dack_w((chardata & 0x60) | (BIT(chardata, 7) ? 0x10 : 0) | attrdata);
} }
else else
{ {
@ -85,13 +85,13 @@ READ8_MEMBER(z29_state::bs_24k_r)
return m_dmatype ? 0x24 : 0x20; return m_dmatype ? 0x24 : 0x20;
} }
WRITE8_MEMBER(z29_state::crtc_w) void z29_state::crtc_w(offs_t offset, u8 data)
{ {
m_crtc[0]->write(space, offset, data); m_crtc[0]->write(offset, data);
m_crtc[1]->write(space, offset, data); m_crtc[1]->write(offset, data);
} }
WRITE8_MEMBER(z29_state::latch_12k_w) void z29_state::latch_12k_w(u8 data)
{ {
m_nvram->store(!BIT(data, 0)); m_nvram->store(!BIT(data, 0));
m_nvram->recall(!BIT(data, 3)); m_nvram->recall(!BIT(data, 3));

View File

@ -409,7 +409,7 @@ WRITE8_MEMBER(zorba_state::io_write_byte)
address_space& prog_space = m_maincpu->space(AS_IO); address_space& prog_space = m_maincpu->space(AS_IO);
if (offset == 0x10) if (offset == 0x10)
m_crtc->dack_w(space, 0, data); m_crtc->dack_w(data);
else else
prog_space.write_byte(offset, data); prog_space.write_byte(offset, data);
} }