summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-02-09 01:24:35 +1100
committer Vas Crabb <vas@vastheman.com>2017-02-09 01:24:35 +1100
commitfcac51c27406df9af7c113f89defa0b242db20cb (patch)
tree6b37e6c7c366f4a5dd45f1530fbec1714922ac41
parent9b48fc922cd8b221253102604a99c28164422e7d (diff)
osborne1nv: restore row/col portion masking (fixes horizontal scroll), update comments
-rw-r--r--src/mame/drivers/osborne1.cpp12
-rw-r--r--src/mame/machine/osborne1.cpp7
2 files changed, 7 insertions, 12 deletions
diff --git a/src/mame/drivers/osborne1.cpp b/src/mame/drivers/osborne1.cpp
index 47621061e41..27128b98927 100644
--- a/src/mame/drivers/osborne1.cpp
+++ b/src/mame/drivers/osborne1.cpp
@@ -83,14 +83,8 @@ TODO:
Centronics parallel over the same physical interface, so this should be
tested, too.
-* Fix emulation of the Nuevo Video board (scrolling, interrupts, CRTC video
- RAM updates). It would be nice to get a schematic for this. The board
- doesn't appear to have adders necessary to combine the MA output of the
- CRTC with the PIA outputs, and without additional connections to the
- mainboard it would be pretty hard to actually get the PIA output at all.
- However, both vertical scrolling and both manual (ctrl-left/right) and
- automatic horizontal scrolling work when booted to stock Osborne CP/M,
- so something must be getting the values to the CRTC.
+* Complete emulation of the Nuevo Video board (interrupts, CRTC video RAM
+ updates). It would be nice to get a schematic for this.
***************************************************************************/
@@ -133,7 +127,7 @@ static ADDRESS_MAP_START( osborne1nv_io, AS_IO, 8, osborne1_state )
AM_RANGE( 0x00, 0x03 ) AM_WRITE(bankswitch_w)
AM_RANGE( 0x04, 0x04 ) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w)
AM_RANGE( 0x05, 0x05 ) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
- // seems to be something at 0x06 as well, but no idea what
+ // seems to be something at 0x06 as well, but no idea what - BIOS writes 0x07 on boot
ADDRESS_MAP_END
diff --git a/src/mame/machine/osborne1.cpp b/src/mame/machine/osborne1.cpp
index 967712c0c9f..5472ac30bce 100644
--- a/src/mame/machine/osborne1.cpp
+++ b/src/mame/machine/osborne1.cpp
@@ -516,12 +516,13 @@ void osborne1_state::update_acia_rxc_txc()
MC6845_UPDATE_ROW(osborne1nv_state::crtc_update_row)
{
rgb_t const *const palette = m_palette->palette()->entry_list_raw();
- ma = (ma >> 1) | 0xf000;
+ uint16_t const base = (ma >> 1) & 0xF80;
uint32_t *p = &bitmap.pix32(y);
for (uint8_t x = 0; x < x_count; ++x)
{
- uint8_t const chr = m_ram->pointer()[ma + x];
- uint8_t const clr = BIT(m_ram->pointer()[ma + x + 0x1000], 7) ? 2 : 1;
+ uint16_t const offset = base | ((ma + x) & 0x7F);
+ uint8_t const chr = m_ram->pointer()[0xF000 | offset];
+ uint8_t const clr = BIT(m_ram->pointer()[0x10000 | offset], 7) ? 2 : 1;
uint8_t const gfx = ((chr & 0x80) && (ra == 9)) ? 0xFF : m_p_nuevo[(ra << 7) | (chr & 0x7F)];