From 47fe4cd04b70a9369d20cf8407a362e5620b22d0 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sun, 22 Aug 2010 01:24:50 +0000 Subject: [PATCH] Improved visible area stuff, not worth --- src/mame/machine/archimds.c | 20 ++++++++++++++------ src/mame/video/archimds.c | 14 ++++++++++---- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/mame/machine/archimds.c b/src/mame/machine/archimds.c index a5a18891e3e..706220f17df 100644 --- a/src/mame/machine/archimds.c +++ b/src/mame/machine/archimds.c @@ -38,7 +38,7 @@ static const int page_sizes[4] = { 4096, 8192, 16384, 32768 }; -#define IOC_LOG 1 +#define IOC_LOG 0 UINT32 *archimedes_memc_physmem; static UINT32 memc_pagesize; @@ -589,7 +589,15 @@ READ32_HANDLER(archimedes_ioc_r) logerror("IOC: Internal Podule Read\n"); return 0xffff; case 5: + switch(ioc_addr & 0xfffc) + { + #ifdef MESS + case 0x50: return 0; //fdc type, new model returns 5 here + #endif + } + logerror("IOC: Internal Latches Read %08x\n",ioc_addr); + return 0xffff; } } @@ -663,7 +671,7 @@ WRITE32_HANDLER(archimedes_ioc_w) } - logerror("I/O: W %x @ %x (mask %08x)\n", data, (offset*4)+0x3000000, mem_mask); + logerror("(PC=%08x) I/O: W %x @ %x (mask %08x)\n", cpu_get_pc(space->cpu), data, (offset*4)+0x3000000, mem_mask); } READ32_HANDLER(archimedes_vidc_r) @@ -737,10 +745,10 @@ WRITE32_HANDLER(archimedes_vidc_w) { case VIDC_HCR: vidc_regs[VIDC_HCR] = ((val >> 14)<<1)+1; break; // case VIDC_HSWR: vidc_regs[VIDC_HSWR] = (val >> 14)+1; break; - case VIDC_HBSR: vidc_regs[VIDC_HBSR] = (val >> 14)+1; break; + case VIDC_HBSR: vidc_regs[VIDC_HBSR] = ((val >> 14)<<1)+1; break; case VIDC_HDSR: vidc_regs[VIDC_HDSR] = (val >> 14); break; case VIDC_HDER: vidc_regs[VIDC_HDER] = (val >> 14); break; - case VIDC_HBER: vidc_regs[VIDC_HBER] = (val >> 14)+1; break; + case VIDC_HBER: vidc_regs[VIDC_HBER] = ((val >> 14)<<1)+1; break; // #define VIDC_HCSR 0x98 // #define VIDC_HIR 0x9c @@ -844,7 +852,7 @@ WRITE32_HANDLER(archimedes_memc_w) case 7: /* Control */ memc_pagesize = ((data>>2) & 3); - logerror("MEMC: %x to Control (page size %d, %s, %s)\n", data & 0x1ffc, page_sizes[memc_pagesize], ((data>>10)&1) ? "Video DMA on" : "Video DMA off", ((data>>11)&1) ? "Sound DMA on" : "Sound DMA off"); + logerror("(PC = %08x) MEMC: %x to Control (page size %d, %s, %s)\n", cpu_get_pc(space->cpu), data & 0x1ffc, page_sizes[memc_pagesize], ((data>>10)&1) ? "Video DMA on" : "Video DMA off", ((data>>11)&1) ? "Sound DMA on" : "Sound DMA off"); video_dma_on = ((data>>10)&1); @@ -954,6 +962,6 @@ WRITE32_HANDLER(archimedes_memc_page_w) // now go ahead and set the mapping in the page table memc_pages[log] = phys + (memc*0x80); -// printf("MEMC_PAGE(%d): W %08x: log %x to phys %x, MEMC %d, perms %d\n", memc_pagesize, data, log, phys, memc, perms); + printf("PC=%08x = MEMC_PAGE(%d): W %08x: log %x to phys %x, MEMC %d, perms %d\n", cpu_get_pc(space->cpu),memc_pagesize, data, log, phys, memc, perms); } diff --git a/src/mame/video/archimds.c b/src/mame/video/archimds.c index 13f4a3b97ef..33749cf6f5b 100644 --- a/src/mame/video/archimds.c +++ b/src/mame/video/archimds.c @@ -15,14 +15,20 @@ VIDEO_UPDATE( archimds_vidc ) { int xstart,ystart,xend,yend; int res_x,res_y; + int calc_dxs = 0,calc_dxe = 0; + const UINT8 x_step[4] = { 5, 7, 11, 19 }; /* border color */ bitmap_fill(bitmap, cliprect, screen->machine->pens[0x10]); - /* display area x/y */ - xstart = vidc_regs[VIDC_HBSR]-vidc_regs[VIDC_HDSR]; - ystart = vidc_regs[VIDC_VBSR]-vidc_regs[VIDC_VDSR]; - xend = vidc_regs[VIDC_HDER]+xstart; + /* define X display area thru BPP mode register */ + calc_dxs = (vidc_regs[VIDC_HDSR]*2)+x_step[vidc_bpp_mode & 3]; + calc_dxe = (vidc_regs[VIDC_HDER]*2)+x_step[vidc_bpp_mode & 3]; + + /* now calculate display clip rectangle start/end areas */ + xstart = (calc_dxs)-vidc_regs[VIDC_HBSR]; + ystart = (vidc_regs[VIDC_VDSR])-vidc_regs[VIDC_VBSR]; + xend = (calc_dxe)+xstart; yend = vidc_regs[VIDC_VDER]+ystart; /* disable the screen if display params are invalid */