diff --git a/src/mame/drivers/malzak.c b/src/mame/drivers/malzak.c index eb83c90468e..4136a2abeb5 100644 --- a/src/mame/drivers/malzak.c +++ b/src/mame/drivers/malzak.c @@ -48,41 +48,21 @@ static int malzak_bank1; extern int malzak_x; extern int malzak_y; -extern UINT8* saa5050_vidram; /* Video RAM for SAA 5050 */ +extern UINT8 *saa5050_vidram; /* Video RAM for SAA 5050 */ extern UINT8 *malzak_s2636_0_ram; extern UINT8 *malzak_s2636_1_ram; // in video/malzak.c VIDEO_START( malzak ); VIDEO_UPDATE( malzak ); -WRITE8_HANDLER( playfield_w ); +WRITE8_HANDLER( malzak_playfield_w ); -static READ8_HANDLER( saa5050_r ) -{ - return saa5050_vidram[offset]; -} - -static WRITE8_HANDLER( saa5050_w ) -{ - saa5050_vidram[offset] = data; -} - static READ8_HANDLER( fake_VRLE_r ) { return (malzak_s2636_0_ram[0xcb] & 0x3f) + (video_screen_get_vblank(machine->primary_screen)*0x40); } -static READ8_HANDLER( ram_mirror_r ) -{ - return program_read_byte(0x1000+offset); -} - -static WRITE8_HANDLER( ram_mirror_w ) -{ - program_write_byte(0x1000+offset,data); -} - static READ8_HANDLER( bank_r ) { UINT8* bank = memory_region(REGION_USER2); @@ -110,99 +90,47 @@ static READ8_HANDLER( s2636_portA_r ) } } -/* -static READ8_HANDLER( bank2_r ) -{ // probably very wrong :) - UINT8* bank = memory_region(REGION_USER1); - - return bank[offset + (malzak_bank1 * 0x0400)]; -} -*/ -static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_READ(SMH_ROM) +static ADDRESS_MAP_START( malzak_map, ADDRESS_SPACE_PROGRAM, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0x7fff) + AM_RANGE(0x0000, 0x0bff) AM_ROM AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r) - AM_RANGE(0x1000, 0x10ff) AM_READ(SMH_RAM) - AM_RANGE(0x1100, 0x11ff) AM_READ(SMH_RAM) - AM_RANGE(0x1200, 0x12ff) AM_READ(SMH_RAM) - AM_RANGE(0x1300, 0x13ff) AM_READ(SMH_RAM) - AM_RANGE(0x14cb, 0x14cb) AM_READ(fake_VRLE_r) - AM_RANGE(0x1400, 0x14ff) AM_READ(SMH_RAM) - AM_RANGE(0x1500, 0x15ff) AM_READ(SMH_RAM) - AM_RANGE(0x1600, 0x16ff) AM_READ(SMH_RAM) - AM_RANGE(0x1700, 0x17ff) AM_READ(SMH_RAM) - AM_RANGE(0x1800, 0x1fff) AM_READ(saa5050_r) // SAA 5050 video RAM - AM_RANGE(0x2000, 0x2fff) AM_READ(SMH_ROM) - AM_RANGE(0x3000, 0x3fff) AM_READ(ram_mirror_r) - AM_RANGE(0x4000, 0x4fff) AM_READ(SMH_ROM) - AM_RANGE(0x5000, 0x5fff) AM_READ(ram_mirror_r) - AM_RANGE(0x6000, 0x6fff) AM_READ(SMH_ROM) - AM_RANGE(0x7000, 0x7fff) AM_READ(ram_mirror_r) + AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1100, 0x11ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1200, 0x12ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1300, 0x13ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x14cb, 0x14cb) AM_MIRROR(0x6000) AM_READ(fake_VRLE_r) + AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_0_ram) + AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_1_ram) + AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(SMH_RAM, malzak_playfield_w) + AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1800, 0x1fff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&saa5050_vidram) + AM_RANGE(0x2000, 0x2fff) AM_ROM + AM_RANGE(0x4000, 0x4fff) AM_ROM + AM_RANGE(0x6000, 0x6fff) AM_ROM ADDRESS_MAP_END -static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x1000, 0x10ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1100, 0x11ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1200, 0x12ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1300, 0x13ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1400, 0x14ff) AM_WRITE(SMH_RAM) AM_BASE(&malzak_s2636_0_ram) - AM_RANGE(0x1500, 0x15ff) AM_WRITE(SMH_RAM) AM_BASE(&malzak_s2636_1_ram) - AM_RANGE(0x1600, 0x16ff) AM_WRITE(playfield_w) - AM_RANGE(0x1600, 0x16ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1700, 0x17ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1800, 0x1fff) AM_WRITE(saa5050_w) // SAA 5050 video RAM - AM_RANGE(0x2000, 0x2fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x3000, 0x3fff) AM_WRITE(ram_mirror_w) - AM_RANGE(0x4000, 0x4fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x5000, 0x5fff) AM_WRITE(ram_mirror_w) - AM_RANGE(0x6000, 0x6fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x7000, 0x7fff) AM_WRITE(ram_mirror_w) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( malzak2_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_READ(SMH_ROM) +static ADDRESS_MAP_START( malzak2_map, ADDRESS_SPACE_PROGRAM, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0x7fff) + AM_RANGE(0x0000, 0x0bff) AM_ROM AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r) - AM_RANGE(0x1000, 0x10ff) AM_READ(SMH_RAM) - AM_RANGE(0x1100, 0x11ff) AM_READ(SMH_RAM) - AM_RANGE(0x1200, 0x12ff) AM_READ(SMH_RAM) - AM_RANGE(0x1300, 0x13ff) AM_READ(SMH_RAM) - AM_RANGE(0x14cb, 0x14cb) AM_READ(fake_VRLE_r) - AM_RANGE(0x14cc, 0x14cc) AM_READ(s2636_portA_r) - AM_RANGE(0x1400, 0x14ff) AM_READ(SMH_RAM) - AM_RANGE(0x1500, 0x15ff) AM_READ(SMH_RAM) - AM_RANGE(0x1600, 0x16ff) AM_READ(SMH_RAM) - AM_RANGE(0x1700, 0x17ff) AM_READ(SMH_RAM) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) - AM_RANGE(0x1800, 0x1fff) AM_READ(saa5050_r) // SAA 5050 video RAM - AM_RANGE(0x2000, 0x2fff) AM_READ(SMH_ROM) - AM_RANGE(0x3000, 0x3fff) AM_READ(ram_mirror_r) - AM_RANGE(0x4000, 0x4fff) AM_READ(SMH_ROM) - AM_RANGE(0x5000, 0x5fff) AM_READ(ram_mirror_r) - AM_RANGE(0x6000, 0x6fff) AM_READ(SMH_ROM) - AM_RANGE(0x7000, 0x7fff) AM_READ(ram_mirror_r) + AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1100, 0x11ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1200, 0x12ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1300, 0x13ff) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x14cb, 0x14cb) AM_MIRROR(0x6000) AM_READ(fake_VRLE_r) + AM_RANGE(0x14cc, 0x14cc) AM_MIRROR(0x6000) AM_READ(s2636_portA_r) + AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_0_ram) + AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_1_ram) + AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(SMH_RAM, malzak_playfield_w) + AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE(0x1800, 0x1fff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&saa5050_vidram) + AM_RANGE(0x2000, 0x2fff) AM_ROM + AM_RANGE(0x4000, 0x4fff) AM_ROM + AM_RANGE(0x6000, 0x6fff) AM_ROM ADDRESS_MAP_END -static ADDRESS_MAP_START( malzak2_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x1000, 0x10ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1100, 0x11ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1200, 0x12ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1300, 0x13ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1400, 0x14ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1500, 0x15ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1600, 0x16ff) AM_WRITE(playfield_w) - AM_RANGE(0x1600, 0x16ff) AM_WRITE(SMH_RAM) - AM_RANGE(0x1700, 0x17ff) AM_WRITE(SMH_RAM) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) - AM_RANGE(0x1800, 0x1fff) AM_WRITE(saa5050_w) // SAA 5050 video RAM - AM_RANGE(0x2000, 0x2fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x3000, 0x3fff) AM_WRITE(ram_mirror_w) - AM_RANGE(0x4000, 0x4fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x5000, 0x5fff) AM_WRITE(ram_mirror_w) - AM_RANGE(0x6000, 0x6fff) AM_WRITE(SMH_ROM) - AM_RANGE(0x7000, 0x7fff) AM_WRITE(ram_mirror_w) -ADDRESS_MAP_END - static READ8_HANDLER( s2650_data_r ) { popmessage("S2650 data port read"); @@ -247,19 +175,17 @@ static READ8_HANDLER( collision_r ) return 0xd0 + counter; } -static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 ) +static ADDRESS_MAP_START( malzak_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x00, 0x00) AM_READ(collision_r) // returns where a collision can occur. + AM_RANGE(0x40, 0x40) AM_WRITE(port40_w) // possibly sound codes for dual SN76477s + AM_RANGE(0x60, 0x60) AM_WRITE(port60_w) // possibly playfield scroll X offset AM_RANGE(0x80, 0x80) AM_READ(input_port_0_r) //controls + AM_RANGE(0xa0, 0xa0) AM_WRITE(SMH_NOP) // echoes I/O port read from port 0x80 + AM_RANGE(0xc0, 0xc0) AM_WRITE(portc0_w) // possibly playfield row selection for writing and/or collisions AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(s2650_data_r) // read upon death AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(input_port_2_r) ADDRESS_MAP_END -static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x40, 0x40) AM_WRITE(port40_w) // possibly sound codes for dual SN76477s - AM_RANGE(0x60, 0x60) AM_WRITE(port60_w) // possibly playfield scroll X offset - AM_RANGE(0xa0, 0xa0) AM_WRITE(SMH_NOP) // echoes I/O port read from port 0x80 - AM_RANGE(0xc0, 0xc0) AM_WRITE(portc0_w) // possibly playfield row selection for writing and/or collisions -ADDRESS_MAP_END static INPUT_PORTS_START( malzak ) @@ -415,8 +341,8 @@ static MACHINE_DRIVER_START( malzak ) /* basic machine hardware */ MDRV_CPU_ADD_TAG("main", S2650, 3800000/4) - MDRV_CPU_PROGRAM_MAP(readmem,writemem) - MDRV_CPU_IO_MAP(readport,writeport) + MDRV_CPU_PROGRAM_MAP(malzak_map,0) + MDRV_CPU_IO_MAP(malzak_io_map,0) /* video hardware */ MDRV_SCREEN_ADD("main", RASTER) @@ -451,7 +377,7 @@ static MACHINE_DRIVER_START( malzak2 ) MDRV_IMPORT_FROM( malzak ) MDRV_CPU_MODIFY( "main" ) - MDRV_CPU_PROGRAM_MAP( malzak2_readmem, malzak2_writemem ) + MDRV_CPU_PROGRAM_MAP(malzak2_map,0) MDRV_NVRAM_HANDLER( generic_0fill ) MACHINE_DRIVER_END diff --git a/src/mame/video/malzak.c b/src/mame/video/malzak.c index 025de29b94f..cdc563c8f53 100644 --- a/src/mame/video/malzak.c +++ b/src/mame/video/malzak.c @@ -59,8 +59,6 @@ VIDEO_START( malzak ) int width = video_screen_get_width(machine->primary_screen); int height = video_screen_get_height(machine->primary_screen); - saa5050_vidram = auto_malloc(0x800); - /* configure the S2636 chips */ // s2636_0 = s2636_config(malzak_s2636_0_ram, height, width, -8, -16); // s2636_1 = s2636_config(malzak_s2636_1_ram, height, width, -9, -16); @@ -248,7 +246,7 @@ VIDEO_UPDATE( malzak ) return 0; } -WRITE8_HANDLER( playfield_w ) +WRITE8_HANDLER( malzak_playfield_w ) { int tile = ((malzak_x / 16) * 16) + (offset / 16);