From 557293e73034f5350535a9c11c7e761441d4bfaf Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Mon, 16 Aug 2010 15:06:51 +0000 Subject: [PATCH] Hooked up some quick and dirty video routine to Aristocrat Mk-5 [Angelo Salese] --- src/mame/drivers/aristmk5.c | 54 +++++++++++++++++++++++++++---------- src/mame/machine/archimds.c | 11 +++++--- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/mame/drivers/aristmk5.c b/src/mame/drivers/aristmk5.c index 094ade1f7e6..ee364042a57 100644 --- a/src/mame/drivers/aristmk5.c +++ b/src/mame/drivers/aristmk5.c @@ -12,29 +12,54 @@ #include "sound/dac.h" #include "includes/archimds.h" -static ADDRESS_MAP_START( aristmk5_map, ADDRESS_SPACE_PROGRAM, 32 ) - AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(archimedes_memc_logical_r, archimedes_memc_logical_w) - AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */ - AM_RANGE(0x03000000, 0x033fffff) AM_READWRITE(archimedes_ioc_r, archimedes_ioc_w) - AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE(archimedes_memc_page_w) - AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE(archimedes_memc_r, archimedes_memc_w) - AM_RANGE(0x03800000, 0x039fffff) AM_READWRITE(archimedes_vidc_r, archimedes_vidc_w) -ADDRESS_MAP_END - - -static INPUT_PORTS_START( aristmk5 ) -INPUT_PORTS_END +extern UINT8 ioc_regs[0x80/4]; +extern void archimedes_request_irq_a(running_machine *machine, int mask); +extern UINT32 *archimedes_memc_physmem; static VIDEO_START(aristmk5) { } +/* just a quick hack to check out error printing, AA video emulation is A LOT more complex */ static VIDEO_UPDATE(aristmk5) { + int count; + int x,y,xi; + UINT32 *vram = archimedes_memc_physmem; + + // sets video DMA to 0x400 - 0x400 - 0xfe00 + count = 0x800/4; // 0x400 text is offset??? + + for(y=0;y<480;y++) + { + for(x=0;x<640;x+=4) + { + for(xi=0;xi<4;xi++) + if ((x+xi) <= screen->visible_area().max_x && (y) <= screen->visible_area().max_y) + *BITMAP_ADDR32(bitmap, y, x+xi) = screen->machine->pens[(vram[count]>>(xi*8))&0xff]; + + count++; + } + } + return 0; } +static ADDRESS_MAP_START( aristmk5_map, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(archimedes_memc_logical_r, archimedes_memc_logical_w) + AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */ + AM_RANGE(0x03010810, 0x03010813) AM_READNOP //MK-5 specific, watchdog + AM_RANGE(0x03000000, 0x033fffff) AM_READWRITE(archimedes_ioc_r, archimedes_ioc_w) + AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE(archimedes_memc_page_w) + AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE(archimedes_memc_r, archimedes_memc_w) + AM_RANGE(0x03800000, 0x039fffff) AM_READWRITE(archimedes_vidc_r, archimedes_vidc_w) //TODO: this is different here, it appears to contain palette data only +ADDRESS_MAP_END + + +static INPUT_PORTS_START( aristmk5 ) +INPUT_PORTS_END + static DRIVER_INIT( aristmk5 ) { archimedes_driver_init(machine); @@ -51,6 +76,7 @@ static MACHINE_START( aristmk5 ) static MACHINE_RESET( aristmk5 ) { archimedes_reset(machine); + ioc_regs[4]|=1; //set printer busy irq? } static MACHINE_DRIVER_START( aristmk5 ) @@ -63,9 +89,9 @@ static MACHINE_DRIVER_START( aristmk5 ) MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) MDRV_SCREEN_SIZE(64*8, 32*8) - MDRV_SCREEN_VISIBLE_AREA(8*8, 48*8-1, 2*8, 30*8-1) + MDRV_SCREEN_VISIBLE_AREA(8*8, 64*8-1, 0*8, 32*8-1) MDRV_PALETTE_LENGTH(0x200) diff --git a/src/mame/machine/archimds.c b/src/mame/machine/archimds.c index 7d764bda548..7615f6a951d 100644 --- a/src/mame/machine/archimds.c +++ b/src/mame/machine/archimds.c @@ -41,12 +41,13 @@ UINT32 *archimedes_memc_physmem; static UINT32 memc_pagesize; static int memc_latchrom; static INT16 memc_pages[(32*1024*1024)/(4096)]; // the logical RAM area is 32 megs, and the smallest page size is 4k -static UINT32 vidc_regs[256]; -static UINT8 ioc_regs[0x80/4]; +UINT32 vidc_regs[256]; +UINT8 ioc_regs[0x80/4]; static UINT32 ioc_timercnt[4], ioc_timerout[4]; static UINT32 vidc_sndstart, vidc_sndend, vidc_sndcur; -static emu_timer *vbl_timer, *timer[4], *snd_timer; +static emu_timer *timer[4], *snd_timer; +emu_timer *vbl_timer; void archimedes_request_irq_a(running_machine *machine, int mask) { @@ -205,7 +206,8 @@ READ32_HANDLER(archimedes_memc_logical_r) } else { - logerror("ARCHIMEDES_MEMC: Reading unmapped page, what do we do?\n"); + logerror("ARCHIMEDES_MEMC: Reading unmapped page\n"); + return 0xdeadbeef; } } @@ -526,6 +528,7 @@ WRITE32_HANDLER(archimedes_vidc_w) }; #endif + // 0x00 - 0x3c Video Palette Logical Colors (16 colors) // 0x40 Border Color // 0x44 - 0x4c Cursor Palette Logical Colors