vis: WIP (nw)

This commit is contained in:
cracyc 2016-09-17 15:36:41 -05:00
parent 8993c2fe54
commit 26b7deb7d3
2 changed files with 36 additions and 9 deletions

View File

@ -112,6 +112,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
{
case CMD_SET_MODE:
m_mode = data;
m_buf[0] = 0;
m_buf_count = 1;
break;
case CMD_LOCK:
m_locked = data & 1 ? true : false;
@ -167,7 +169,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
m_buf[5] = dec_2_bcd((last >> 16) & 0xff);
m_buf[6] = dec_2_bcd((last >> 8) & 0xff);
m_buf[7] = dec_2_bcd(last & 0xff);
m_buf_count = 8;
m_buf[8] = 0;
m_buf_count = 9;
}
else
{
@ -183,8 +186,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
UINT32 start = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk));
UINT32 end = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk < tracks ? m_curtoctrk + 1 : 0xaa));
m_buf[0] = 1; // track type?
m_buf[1] = dec_2_bcd(m_curtoctrk + 1);
m_buf[2] = dec_2_bcd(m_curtoctrk + 1);
m_buf[1] = 0; // track num except when reading toc
m_buf[2] = dec_2_bcd(m_curtoctrk); // index
m_buf[3] = dec_2_bcd((start >> 16) & 0xff);
m_buf[4] = dec_2_bcd((start >> 8) & 0xff);
m_buf[5] = dec_2_bcd(start & 0xff);

View File

@ -12,10 +12,12 @@ public:
vis_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mb(*this, "mb")
m_mb(*this, "mb"),
m_pic1(*this, "mb:pic8259_slave")
{ }
required_device<cpu_device> m_maincpu;
required_device<at_mb_device> m_mb;
required_device<pic8259_device> m_pic1;
DECLARE_READ8_MEMBER(sysctl_r);
DECLARE_WRITE8_MEMBER(sysctl_w);
@ -23,24 +25,23 @@ public:
DECLARE_WRITE8_MEMBER(unk_w);
DECLARE_READ8_MEMBER(unk2_r);
DECLARE_READ8_MEMBER(unk3_r);
DECLARE_READ8_MEMBER(cdrom_r);
DECLARE_WRITE8_MEMBER(cdrom_w);
DECLARE_READ8_MEMBER(pad_r);
DECLARE_WRITE8_MEMBER(pad_w);
protected:
void machine_reset() override;
private:
UINT8 m_sysctl;
UINT8 m_unkidx;
UINT8 m_unk[16];
UINT8 m_cdcmd, m_cdstat;
UINT8 m_pad[4];
};
void vis_state::machine_reset()
{
m_cdcmd = 0;
m_cdstat = 0;
m_sysctl = 0;
}
//chipset registers?
READ8_MEMBER(vis_state::unk_r)
{
if(offset)
@ -61,11 +62,32 @@ READ8_MEMBER(vis_state::unk2_r)
return 0x40;
}
//memory card reader?
READ8_MEMBER(vis_state::unk3_r)
{
return 0x00;
}
READ8_MEMBER(vis_state::pad_r)
{
if(offset == 2)
return 0xde;
return 0;
}
WRITE8_MEMBER(vis_state::pad_w)
{
switch(offset)
{
case 1:
if(data == 0x10)
m_pic1->ir1_w(CLEAR_LINE);
else if(data == 0x16)
m_pic1->ir1_w(ASSERT_LINE);
}
m_pad[offset] = data;
}
READ8_MEMBER(vis_state::sysctl_r)
{
return m_sysctl;
@ -84,6 +106,7 @@ static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state )
AM_RANGE(0x000000, 0x09ffff) AM_RAM
AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000)
AM_RANGE(0x100000, 0x15ffff) AM_RAM
AM_RANGE(0x300000, 0x3fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000)
ADDRESS_MAP_END
@ -93,6 +116,7 @@ static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state )
AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff)
AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff)
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
AM_RANGE(0x023c, 0x023f) AM_READWRITE8(pad_r, pad_w, 0xffff)
AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff)
ADDRESS_MAP_END