Fixes malzak2 from crashing

This commit is contained in:
Zsolt Vasvari 2008-03-23 14:02:50 +00:00
parent 90a7af6166
commit 2cf47b7531
2 changed files with 44 additions and 120 deletions

View File

@ -48,41 +48,21 @@ static int malzak_bank1;
extern int malzak_x; extern int malzak_x;
extern int malzak_y; 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_0_ram;
extern UINT8 *malzak_s2636_1_ram; extern UINT8 *malzak_s2636_1_ram;
// in video/malzak.c // in video/malzak.c
VIDEO_START( malzak ); VIDEO_START( malzak );
VIDEO_UPDATE( 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 ) static READ8_HANDLER( fake_VRLE_r )
{ {
return (malzak_s2636_0_ram[0xcb] & 0x3f) + (video_screen_get_vblank(machine->primary_screen)*0x40); 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 ) static READ8_HANDLER( bank_r )
{ {
UINT8* bank = memory_region(REGION_USER2); UINT8* bank = memory_region(REGION_USER2);
@ -110,99 +90,47 @@ static READ8_HANDLER( s2636_portA_r )
} }
} }
/* static ADDRESS_MAP_START( malzak_map, ADDRESS_SPACE_PROGRAM, 8 )
static READ8_HANDLER( bank2_r ) ADDRESS_MAP_GLOBAL_MASK(0x7fff)
{ // probably very wrong :) AM_RANGE(0x0000, 0x0bff) AM_ROM
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)
AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r) AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r)
AM_RANGE(0x1000, 0x10ff) AM_READ(SMH_RAM) AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1100, 0x11ff) AM_READ(SMH_RAM) AM_RANGE(0x1100, 0x11ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1200, 0x12ff) AM_READ(SMH_RAM) AM_RANGE(0x1200, 0x12ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1300, 0x13ff) AM_READ(SMH_RAM) AM_RANGE(0x1300, 0x13ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x14cb, 0x14cb) AM_READ(fake_VRLE_r) AM_RANGE(0x14cb, 0x14cb) AM_MIRROR(0x6000) AM_READ(fake_VRLE_r)
AM_RANGE(0x1400, 0x14ff) AM_READ(SMH_RAM) AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_0_ram)
AM_RANGE(0x1500, 0x15ff) AM_READ(SMH_RAM) AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_1_ram)
AM_RANGE(0x1600, 0x16ff) AM_READ(SMH_RAM) AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(SMH_RAM, malzak_playfield_w)
AM_RANGE(0x1700, 0x17ff) AM_READ(SMH_RAM) AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1800, 0x1fff) AM_READ(saa5050_r) // SAA 5050 video RAM AM_RANGE(0x1800, 0x1fff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&saa5050_vidram)
AM_RANGE(0x2000, 0x2fff) AM_READ(SMH_ROM) AM_RANGE(0x2000, 0x2fff) AM_ROM
AM_RANGE(0x3000, 0x3fff) AM_READ(ram_mirror_r) AM_RANGE(0x4000, 0x4fff) AM_ROM
AM_RANGE(0x4000, 0x4fff) AM_READ(SMH_ROM) AM_RANGE(0x6000, 0x6fff) AM_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)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( malzak2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_WRITE(SMH_ROM) ADDRESS_MAP_GLOBAL_MASK(0x7fff)
AM_RANGE(0x1000, 0x10ff) AM_WRITE(SMH_RAM) AM_RANGE(0x0000, 0x0bff) AM_ROM
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)
AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r) AM_RANGE(0x0c00, 0x0fff) AM_READ(bank_r)
AM_RANGE(0x1000, 0x10ff) AM_READ(SMH_RAM) AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1100, 0x11ff) AM_READ(SMH_RAM) AM_RANGE(0x1100, 0x11ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1200, 0x12ff) AM_READ(SMH_RAM) AM_RANGE(0x1200, 0x12ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x1300, 0x13ff) AM_READ(SMH_RAM) AM_RANGE(0x1300, 0x13ff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x14cb, 0x14cb) AM_READ(fake_VRLE_r) AM_RANGE(0x14cb, 0x14cb) AM_MIRROR(0x6000) AM_READ(fake_VRLE_r)
AM_RANGE(0x14cc, 0x14cc) AM_READ(s2636_portA_r) AM_RANGE(0x14cc, 0x14cc) AM_MIRROR(0x6000) AM_READ(s2636_portA_r)
AM_RANGE(0x1400, 0x14ff) AM_READ(SMH_RAM) AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_0_ram)
AM_RANGE(0x1500, 0x15ff) AM_READ(SMH_RAM) AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&malzak_s2636_1_ram)
AM_RANGE(0x1600, 0x16ff) AM_READ(SMH_RAM) AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(SMH_RAM, malzak_playfield_w)
AM_RANGE(0x1700, 0x17ff) AM_READ(SMH_RAM) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
AM_RANGE(0x1800, 0x1fff) AM_READ(saa5050_r) // SAA 5050 video RAM AM_RANGE(0x1800, 0x1fff) AM_MIRROR(0x6000) AM_RAM AM_BASE(&saa5050_vidram)
AM_RANGE(0x2000, 0x2fff) AM_READ(SMH_ROM) AM_RANGE(0x2000, 0x2fff) AM_ROM
AM_RANGE(0x3000, 0x3fff) AM_READ(ram_mirror_r) AM_RANGE(0x4000, 0x4fff) AM_ROM
AM_RANGE(0x4000, 0x4fff) AM_READ(SMH_ROM) AM_RANGE(0x6000, 0x6fff) AM_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)
ADDRESS_MAP_END 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 ) static READ8_HANDLER( s2650_data_r )
{ {
popmessage("S2650 data port read"); popmessage("S2650 data port read");
@ -247,19 +175,17 @@ static READ8_HANDLER( collision_r )
return 0xd0 + counter; 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(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(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_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) AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(input_port_2_r)
ADDRESS_MAP_END 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 ) static INPUT_PORTS_START( malzak )
@ -415,8 +341,8 @@ static MACHINE_DRIVER_START( malzak )
/* basic machine hardware */ /* basic machine hardware */
MDRV_CPU_ADD_TAG("main", S2650, 3800000/4) MDRV_CPU_ADD_TAG("main", S2650, 3800000/4)
MDRV_CPU_PROGRAM_MAP(readmem,writemem) MDRV_CPU_PROGRAM_MAP(malzak_map,0)
MDRV_CPU_IO_MAP(readport,writeport) MDRV_CPU_IO_MAP(malzak_io_map,0)
/* video hardware */ /* video hardware */
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)
@ -451,7 +377,7 @@ static MACHINE_DRIVER_START( malzak2 )
MDRV_IMPORT_FROM( malzak ) MDRV_IMPORT_FROM( malzak )
MDRV_CPU_MODIFY( "main" ) MDRV_CPU_MODIFY( "main" )
MDRV_CPU_PROGRAM_MAP( malzak2_readmem, malzak2_writemem ) MDRV_CPU_PROGRAM_MAP(malzak2_map,0)
MDRV_NVRAM_HANDLER( generic_0fill ) MDRV_NVRAM_HANDLER( generic_0fill )
MACHINE_DRIVER_END MACHINE_DRIVER_END

View File

@ -59,8 +59,6 @@ VIDEO_START( malzak )
int width = video_screen_get_width(machine->primary_screen); int width = video_screen_get_width(machine->primary_screen);
int height = video_screen_get_height(machine->primary_screen); int height = video_screen_get_height(machine->primary_screen);
saa5050_vidram = auto_malloc(0x800);
/* configure the S2636 chips */ /* configure the S2636 chips */
// s2636_0 = s2636_config(malzak_s2636_0_ram, height, width, -8, -16); // s2636_0 = s2636_config(malzak_s2636_0_ram, height, width, -8, -16);
// s2636_1 = s2636_config(malzak_s2636_1_ram, height, width, -9, -16); // s2636_1 = s2636_config(malzak_s2636_1_ram, height, width, -9, -16);
@ -248,7 +246,7 @@ VIDEO_UPDATE( malzak )
return 0; return 0;
} }
WRITE8_HANDLER( playfield_w ) WRITE8_HANDLER( malzak_playfield_w )
{ {
int tile = ((malzak_x / 16) * 16) + (offset / 16); int tile = ((malzak_x / 16) * 16) + (offset / 16);