diff options
author | cracyc <cracyc@users.noreply.github.com> | 2018-05-29 22:03:31 -0500 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2018-05-29 22:03:31 -0500 |
commit | 0b64e08eac7c52d93a2d1a76281b8ac89d7dc6c2 (patch) | |
tree | a8671bc4984febe779c98845f1374e0f9fdf469a | |
parent | 7582515cedfb2964e9454f18af95edaa84fe4348 (diff) |
pc100: boot dos (nw)
-rw-r--r-- | src/mame/drivers/pc100.cpp | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/mame/drivers/pc100.cpp b/src/mame/drivers/pc100.cpp index 44db620258b..af0af1164a6 100644 --- a/src/mame/drivers/pc100.cpp +++ b/src/mame/drivers/pc100.cpp @@ -135,6 +135,7 @@ private: struct{ uint8_t shift; uint16_t mask; + uint16_t cmd; uint16_t vstart; uint8_t addr; uint8_t reg[8]; @@ -178,15 +179,25 @@ uint32_t pc100_state::screen_update_pc100(screen_device &screen, bitmap_ind16 &b { for(xi=0;xi<16;xi++) { - for(pen_i=0;pen_i<4;pen_i++) - pen[pen_i] = (m_vram[count+pen_i*0x10000] >> xi) & 1; - - dot = 0; - for(pen_i=0;pen_i<4;pen_i++) - dot |= pen[pen_i]<<pen_i; - - if(y < 512 && x*16+xi < 768) /* TODO: safety check */ - bitmap.pix16(y, x*16+xi) = m_palette->pen(dot); + if(m_crtc.cmd != 0xffff) + { + for(pen_i=0;pen_i<4;pen_i++) + pen[pen_i] = (m_vram[count+pen_i*0x10000] >> xi) & 1; + + dot = 0; + for(pen_i=0;pen_i<4;pen_i++) + dot |= pen[pen_i]<<pen_i; + + if(y < 512 && x*16+xi < 768) /* TODO: safety check */ + bitmap.pix16(y, x*16+xi) = m_palette->pen(dot); + } + else + { + dot = (m_vram[count] >> xi) & 1; + + if(y < 512 && x*16+xi < 768) /* TODO: safety check */ + bitmap.pix16(y, x*16+xi) = m_palette->pen(dot ? 15 : 0); + } } count++; @@ -276,13 +287,13 @@ WRITE8_MEMBER( pc100_state::pc100_output_w ) { m_timer_mode = (data & 0x18) >> 3; m_beeper->set_state(((data & 0x40) >> 6) ^ 1); - printf("%02x\n",data & 0xc0); + //printf("%02x\n",data & 0xc0); } } WRITE8_MEMBER( pc100_state::pc100_tc_w ) { - machine().device<upd765a_device>("upd765")->tc_w(data & 0x40); + m_fdc->tc_w(data & 0x40); } READ8_MEMBER( pc100_state::pc100_shift_r ) @@ -319,7 +330,7 @@ WRITE8_MEMBER( pc100_state::pc100_crtc_addr_w ) WRITE8_MEMBER( pc100_state::pc100_crtc_data_w ) { m_crtc.reg[m_crtc.addr] = data; - printf("%02x %02x\n",m_crtc.addr,data); + //printf("%02x %02x\n",m_crtc.addr,data); } @@ -342,7 +353,8 @@ void pc100_state::pc100_io(address_map &map) map(0x3a, 0x3a).w(this, FUNC(pc100_state::pc100_crtc_data_w)); //crtc data reg map(0x3c, 0x3f).rw(this, FUNC(pc100_state::pc100_vs_vreg_r), FUNC(pc100_state::pc100_vs_vreg_w)).umask16(0x00ff); //crtc vertical start position map(0x40, 0x5f).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); -// AM_RANGE(0x60, 0x61) crtc command (16-bit wide) + map(0x60, 0x61).r(read16_delegate([this](address_space &s, offs_t o, u8 mm) { return m_crtc.cmd; }, "pc100_crtc_cmd_r")). + w(write16_delegate([this](address_space &s, offs_t o, u16 d, u8 mm) { m_crtc.cmd = d; }, "pc100_crtc_cmd_w")); map(0x80, 0x81).rw(this, FUNC(pc100_state::pc100_kanji_r), FUNC(pc100_state::pc100_kanji_w)); map(0x82, 0x83).nopw(); //kanji-related? map(0x84, 0x87).nopw(); //kanji "strobe" signal 0/1 @@ -514,7 +526,8 @@ WRITE8_MEMBER( pc100_state::rtc_porta_w ) ---- ---x write */ - m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(!(data & 0x20)); + if(data != 0) // work around 8255 behavior that resets the whole chip on mode write + m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(!(data & 0x20)); m_rtc->write_w((data >> 0) & 1); m_rtc->read_w((data >> 1) & 1); m_rtc->cs1_w((data >> 2) & 1); |