From f0503916e5d543b628f12dfdc52d65a63d70f4e3 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Wed, 2 Apr 2014 03:56:19 +0000 Subject: [PATCH] Added preliminary cursor drawing, disabled as default, nw --- src/mame/includes/archimds.h | 3 ++- src/mame/machine/archimds.c | 11 +++++++++ src/mame/video/archimds.c | 45 +++++++++++++++++++++++++++++++++--- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/mame/includes/archimds.h b/src/mame/includes/archimds.h index a7e668b6d64..66a963bd7ae 100644 --- a/src/mame/includes/archimds.h +++ b/src/mame/includes/archimds.h @@ -81,6 +81,7 @@ public: UINT8 m_i2c_clk; INT16 m_memc_pages[0x2000]; // the logical RAM area is 32 megs, and the smallest page size is 4k UINT32 m_vidc_regs[256]; + UINT8 m_cursor_vram[0x200]; UINT8 m_ioc_regs[0x80/4]; UINT8 m_vidc_bpp_mode; UINT8 m_vidc_interlace; @@ -120,7 +121,7 @@ private: UINT32 m_memc_pagesize; int m_memc_latchrom; UINT32 m_ioc_timercnt[4], m_ioc_timerout[4]; - UINT32 m_vidc_vidstart, m_vidc_vidend, m_vidc_vidinit, m_vidc_vidcur; + UINT32 m_vidc_vidstart, m_vidc_vidend, m_vidc_vidinit, m_vidc_vidcur,m_vidc_cinit; UINT32 m_vidc_sndstart, m_vidc_sndend, m_vidc_sndcur; UINT8 m_video_dma_on,m_audio_dma_on; UINT8 m_vidc_pixel_clk; diff --git a/src/mame/machine/archimds.c b/src/mame/machine/archimds.c index 22fcf721c58..5130526793e 100644 --- a/src/mame/machine/archimds.c +++ b/src/mame/machine/archimds.c @@ -116,12 +116,18 @@ void archimedes_state::vidc_video_tick() address_space &space = m_maincpu->space(AS_PROGRAM); static UINT8 *vram = m_region_vram->base(); UINT32 size; + UINT32 m_vidc_ccur; size = m_vidc_vidend-m_vidc_vidstart+0x10; for(m_vidc_vidcur = 0;m_vidc_vidcur < size;m_vidc_vidcur++) vram[m_vidc_vidcur] = (space.read_byte(m_vidc_vidstart+m_vidc_vidcur)); + size = m_vidc_vidend-m_vidc_vidstart+0x10; + + for(m_vidc_ccur = 0;m_vidc_ccur < 0x200;m_vidc_ccur++) + m_cursor_vram[m_vidc_ccur] = (space.read_byte(m_vidc_cinit+m_vidc_ccur)); + if(m_video_dma_on) m_vid_timer->adjust(m_screen->time_until_pos(m_vidc_regs[0xb4])); else @@ -943,6 +949,11 @@ WRITE32_MEMBER(archimedes_state::archimedes_memc_w) //printf("MEMC: VIDEND %08x\n",m_vidc_vidend); break; + case 3: /* cursor init */ + m_vidc_cinit = 0x2000000 | (((data>>2)&0x7fff)*16); + //printf("MEMC: CURSOR %08x\n",((data>>2)&0x7fff)*16); + break; + case 4: /* sound start */ //logerror("MEMC: SNDSTART %08x\n",data); archimedes_clear_irq_b(ARCHIMEDES_IRQB_SOUND_EMPTY); diff --git a/src/mame/video/archimds.c b/src/mame/video/archimds.c index 77f0e17a484..61ae01f520a 100644 --- a/src/mame/video/archimds.c +++ b/src/mame/video/archimds.c @@ -85,9 +85,6 @@ UINT32 archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm { pen = vram[count]; - res_x = x+xstart; - res_y = (y+ystart)*(m_vidc_interlace+1); - for(xi=0;xi<2;xi++) { res_x = x+xi+xstart; @@ -145,7 +142,49 @@ UINT32 archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm popmessage("Unemulated bpp mode %02x, contact MAME/MESSdev",m_vidc_bpp_mode); break; } + + + if(0) + { + count = 0; + for(y=0;y<16;y++) + { + for(x=0;x<32;x+=4) + { + for(xi=0;xi<4;xi++) + { + UINT8 cursor_dot; + pen = m_cursor_vram[count]; + + res_x = x+xi+xstart; + res_y = (y+ystart)*(m_vidc_interlace+1); + + cursor_dot = ((pen>>(xi*2))&0x3); + + if(cursor_dot) + { + if(m_vidc_interlace) + { + if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend) + bitmap.pix32(res_y, res_x) = m_palette->pen(cursor_dot+0x10); + if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y+1) <= yend) + bitmap.pix32(res_y+1, res_x) = m_palette->pen(cursor_dot+0x10); + } + else + { + if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend) + bitmap.pix32(res_y, res_x) = m_palette->pen(cursor_dot+0x10); + } + } + } + + count++; + } + } + } } + + return 0; }