Implemented DMA vram transfers

This commit is contained in:
Angelo Salese 2009-12-07 15:15:24 +00:00
parent 6540973d1a
commit 9b4440922d

View File

@ -377,6 +377,9 @@ static void sysh1_dma_transfer( const address_space *space, UINT16 dma_index )
if(type & 8)
printf("%08x %08x %08x %08x\n",src,dst,size,type);
if(type == 0xc)
dst |= 0x3000000; //to videoram, FIXME: unknown offset
if(type == 0xd)
dst |= 0x3d00000; //to charram, FIXME: unknown offset
@ -389,7 +392,7 @@ static void sysh1_dma_transfer( const address_space *space, UINT16 dma_index )
//debugger_break(space->machine);
}
if(type == 0xd || type == 0xe)
if(type == 0xc || type == 0xd || type == 0xe)
{
for(s_i=0;s_i<size;s_i+=4)
{
@ -442,6 +445,7 @@ static ADDRESS_MAP_START( system_h1_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_SHARE("share1") AM_WRITENOP
AM_RANGE(0x01000000, 0x01ffffff) AM_ROM AM_REGION("gfx_data",0x0000000)
AM_RANGE(0x03000000, 0x030fffff) AM_RAM //bg vram
AM_RANGE(0x03c00000, 0x03c0ffff) AM_RAM_WRITE(sysh1_pal_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x03d00000, 0x03dfffff) AM_RAM_WRITE(sysh1_char_w) AM_BASE(&h1_charram) //FIXME: half size
AM_RANGE(0x03e00000, 0x03efffff) AM_RAM_WRITE(sysh1_dma_w) AM_BASE(&framebuffer_vram) //FIXME: not all of it
@ -458,7 +462,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( coolridr_submap, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_SHARE("share2")
AM_RANGE(0x01000000, 0x0100ffff) AM_RAM
AM_RANGE(0x01000000, 0x0100ffff) AM_RAM //communication RAM
AM_RANGE(0x03008800, 0x03008803) AM_RAM /*???*/
AM_RANGE(0x03008900, 0x03008903) AM_RAM /*???*/
@ -474,13 +478,15 @@ static ADDRESS_MAP_START( coolridr_submap, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x05200000, 0x052001ff) AM_RAM
AM_RANGE(0x05300000, 0x0530ffff) AM_RAM AM_SHARE("share3") /*Communication area RAM*/
AM_RANGE(0x05ff0000, 0x05ffffff) AM_RAM /*???*/
AM_RANGE(0x06000000, 0x06000fff) AM_RAM
AM_RANGE(0x06000000, 0x06000fff) AM_RAM //UART TX/RX ports
AM_RANGE(0x06100000, 0x06100003) AM_READ_PORT("IN0") AM_WRITENOP
AM_RANGE(0x06100004, 0x06100007) AM_READ_PORT("IN1")
AM_RANGE(0x06100010, 0x06100013) AM_READ_PORT("IN2")
AM_RANGE(0x06100008, 0x0610000b) AM_READ_PORT("IN5")
AM_RANGE(0x0610000c, 0x0610000f) AM_READ_PORT("IN6")
AM_RANGE(0x06100010, 0x06100013) AM_READ_PORT("IN2") AM_WRITENOP
AM_RANGE(0x06100014, 0x06100017) AM_READ_PORT("IN3")
AM_RANGE(0x0610001c, 0x0610001f) AM_READ_PORT("IN4") AM_WRITENOP
AM_RANGE(0x06200000, 0x06200fff) AM_RAM
AM_RANGE(0x06200000, 0x06200fff) AM_RAM //check this!
AM_RANGE(0x07fff000, 0x07ffffff) AM_RAM
AM_RANGE(0x20000000, 0x2001ffff) AM_ROM AM_SHARE("share2")
@ -821,6 +827,57 @@ static INPUT_PORTS_START( coolridr )
PORT_DIPSETTING( 0x00800000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0xff00ff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN6")
PORT_DIPNAME( 0x00000001, 0x00000001, "IN5-0" )
PORT_DIPSETTING( 0x00000001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000002, 0x00000002, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000004, 0x00000004, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000008, 0x00000008, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000010, 0x00000010, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000020, 0x00000020, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000040, 0x00000040, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000080, 0x00000080, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00010000, 0x00010000, "IN5-1" )
PORT_DIPSETTING( 0x00010000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00020000, 0x00020000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00020000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00040000, 0x00040000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00040000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00080000, 0x00080000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00080000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00100000, 0x00100000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00100000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00200000, 0x00200000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00200000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00400000, 0x00400000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00400000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00800000, 0x00800000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00800000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0xff00ff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END