diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/machine/archimds.cpp | 11 | ||||
-rw-r--r-- | src/mame/video/archimds.cpp | 10 |
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); |