summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/machine/archimds.cpp11
-rw-r--r--src/mame/video/archimds.cpp10
2 files changed, 9 insertions, 12 deletions
diff --git a/src/mame/machine/archimds.cpp b/src/mame/machine/archimds.cpp
index e7c42dda2e4..35c2f74999a 100644
--- a/src/mame/machine/archimds.cpp
+++ b/src/mame/machine/archimds.cpp
@@ -131,7 +131,7 @@ void archimedes_state::vidc_video_tick()
uint32_t m_vidc_ccur;
uint32_t offset_ptr;
- size = m_vidc_vidend-m_vidc_vidstart+0x10;
+ size = (m_vidc_vidend - m_vidc_vidstart + 0x10) & 0x1fffff;
offset_ptr = m_vidc_vidinit;
if(offset_ptr >= m_vidc_vidend+0x10) // TODO: correct?
@@ -1002,8 +1002,7 @@ WRITE32_MEMBER(archimedes_state::archimedes_vidc_w)
case VIDC_HDSR: m_vidc_regs[VIDC_HDSR] = (val >> 14); break;
case VIDC_HDER: m_vidc_regs[VIDC_HDER] = (val >> 14); break;
case VIDC_HBER: m_vidc_regs[VIDC_HBER] = ((val >> 14)<<1)+1; break;
- case VIDC_HCSR: m_vidc_regs[VIDC_HCSR] = (val >> 13) & 0x7ff; break;
-// #define VIDC_HCSR 0x98
+ case VIDC_HCSR: m_vidc_regs[VIDC_HCSR] = ((val >> 13) & 0x7ff) + 6; break;
// #define VIDC_HIR 0x9c
case VIDC_VCR: m_vidc_regs[VIDC_VCR] = ((val >> 14)<<1)+1; break;
@@ -1012,10 +1011,8 @@ WRITE32_MEMBER(archimedes_state::archimedes_vidc_w)
case VIDC_VDSR: m_vidc_regs[VIDC_VDSR] = (val >> 14)+1; break;
case VIDC_VDER: m_vidc_regs[VIDC_VDER] = (val >> 14)+1; break;
case VIDC_VBER: m_vidc_regs[VIDC_VBER] = (val >> 14)+1; break;
- case VIDC_VCSR: m_vidc_regs[VIDC_VCSR] = (val >> 14) & 0x3ff; break;
- case VIDC_VCER: m_vidc_regs[VIDC_VCER] = (val >> 14) & 0x3ff; break;
-// #define VIDC_VCSR 0xb8
-// #define VIDC_VCER 0xbc
+ case VIDC_VCSR: m_vidc_regs[VIDC_VCSR] = ((val >> 14) & 0x3ff) + 1; break;
+ case VIDC_VCER: m_vidc_regs[VIDC_VCER] = ((val >> 14) & 0x3ff) + 1; break;
}
diff --git a/src/mame/video/archimds.cpp b/src/mame/video/archimds.cpp
index 8576c624ed7..9e46b00bafe 100644
--- a/src/mame/video/archimds.cpp
+++ b/src/mame/video/archimds.cpp
@@ -15,7 +15,7 @@ uint32_t archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bi
int res_x,res_y;
int xsize,ysize;
int calc_dxs = 0,calc_dxe = 0;
- const uint8_t x_step[4] = { 5, 7, 11, 19 };
+ const uint8_t x_step[4] = { 19, 11, 7, 5 };
/* border color */
bitmap.fill(m_palette->pen(0x10), cliprect);
@@ -181,7 +181,8 @@ uint32_t archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bi
if(m_cursor_enabled == true)
{
count = 0;
- for(y=0;y<16;y++)
+ int cursor_h = m_vidc_regs[VIDC_VCER] - m_vidc_regs[VIDC_VCSR];
+ for(y=0; y<cursor_h; y++)
{
for(x=0;x<32;x+=4)
{
@@ -190,9 +191,8 @@ uint32_t archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bi
uint8_t cursor_dot;
pen = m_cursor_vram[count];
- // FIXME: cursor is a couple of pixels out of position
- res_x = xstart + m_vidc_regs[VIDC_HCSR] - (m_vidc_regs[VIDC_HDSR] * 2 + x_step[3 - (m_vidc_bpp_mode & 3)]) + x+xi;
- res_y = (m_vidc_regs[VIDC_VCSR] - m_vidc_regs[VIDC_VDSR] + ystart + y) * (m_vidc_interlace + 1);
+ res_x = m_vidc_regs[VIDC_HCSR] - m_vidc_regs[VIDC_HBSR] + x + xi;
+ res_y = (m_vidc_regs[VIDC_VCSR] - m_vidc_regs[VIDC_VBSR] + y) * (m_vidc_interlace + 1);
cursor_dot = ((pen>>(xi*2))&0x3);