trunk/src/mess/machine/bbc.c
| r29274 | r29275 | |
| 1959 | 1959 | /************************************** |
| 1960 | 1960 | BBC B Rom loading functions |
| 1961 | 1961 | ***************************************/ |
| 1962 | | DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart ) |
| 1962 | |
| 1963 | int bbc_state::exp_rom_load(device_image_interface &image, int index) |
| 1963 | 1964 | { |
| 1964 | 1965 | UINT8 *RAM = m_region_user1->base(); |
| 1965 | 1966 | int size, read_; |
| 1966 | | int addr = 0; |
| 1967 | | int index = 0; |
| 1968 | | |
| 1969 | | size = image.length(); |
| 1970 | | |
| 1971 | | if (strcmp(image.device().tag(),":cart1") == 0) |
| 1967 | int addr = 0x8000 + (0x4000 * index); |
| 1968 | |
| 1969 | if (image.software_entry() == NULL) |
| 1972 | 1970 | { |
| 1973 | | index = 0; |
| 1971 | size = image.length(); |
| 1972 | logerror("loading rom %s, at %.4x size:%.4x\n", image.filename(), addr, size); |
| 1973 | |
| 1974 | switch (size) |
| 1975 | { |
| 1976 | case 0x2000: |
| 1977 | read_ = image.fread(RAM + addr, size); |
| 1978 | if (read_ != size) |
| 1979 | return 1; |
| 1980 | image.fseek(0, SEEK_SET); |
| 1981 | read_ = image.fread(RAM + addr + 0x2000, size); |
| 1982 | break; |
| 1983 | case 0x4000: |
| 1984 | read_ = image.fread(RAM + addr, size); |
| 1985 | break; |
| 1986 | default: |
| 1987 | read_ = 0; |
| 1988 | logerror("bad rom file size of %.4x\n", size); |
| 1989 | break; |
| 1990 | } |
| 1991 | |
| 1992 | if (read_ != size) |
| 1993 | return IMAGE_INIT_FAIL; |
| 1974 | 1994 | } |
| 1975 | | if (strcmp(image.device().tag(),":cart2") == 0) |
| 1976 | | { |
| 1977 | | index = 1; |
| 1978 | | } |
| 1979 | | if (strcmp(image.device().tag(),":cart3") == 0) |
| 1980 | | { |
| 1981 | | index = 2; |
| 1982 | | } |
| 1983 | | if (strcmp(image.device().tag(),":cart4") == 0) |
| 1984 | | { |
| 1985 | | index = 3; |
| 1986 | | } |
| 1987 | | addr = 0x8000 + (0x4000 * index); |
| 1995 | return IMAGE_INIT_PASS; |
| 1996 | } |
| 1988 | 1997 | |
| 1998 | DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbc_exp_rom ) |
| 1999 | { |
| 2000 | if (strcmp(image.device().tag(),":exp_rom1") == 0) |
| 2001 | return exp_rom_load(image, 0); |
| 1989 | 2002 | |
| 1990 | | logerror("loading rom %s at %.4x size:%.4x\n", image.filename(), addr, size); |
| 2003 | if (strcmp(image.device().tag(),":exp_rom2") == 0) |
| 2004 | return exp_rom_load(image, 1); |
| 1991 | 2005 | |
| 2006 | if (strcmp(image.device().tag(),":exp_rom3") == 0) |
| 2007 | return exp_rom_load(image, 2); |
| 2008 | |
| 2009 | if (strcmp(image.device().tag(),":exp_rom4") == 0) |
| 2010 | return exp_rom_load(image, 3); |
| 1992 | 2011 | |
| 1993 | | switch (size) |
| 1994 | | { |
| 1995 | | case 0x2000: |
| 1996 | | read_ = image.fread(RAM + addr, size); |
| 1997 | | if (read_ != size) |
| 1998 | | return 1; |
| 1999 | | image.fseek(0, SEEK_SET); |
| 2000 | | read_ = image.fread(RAM + addr + 0x2000, size); |
| 2001 | | break; |
| 2002 | | case 0x4000: |
| 2003 | | read_ = image.fread(RAM + addr, size); |
| 2004 | | break; |
| 2005 | | default: |
| 2006 | | read_ = 0; |
| 2007 | | logerror("bad rom file size of %.4x\n", size); |
| 2008 | | break; |
| 2009 | | } |
| 2010 | | |
| 2011 | | if (read_ != size) |
| 2012 | | return 1; |
| 2013 | | return 0; |
| 2012 | return IMAGE_INIT_FAIL; |
| 2014 | 2013 | } |
| 2015 | 2014 | |
| 2016 | 2015 | |
| 2017 | 2016 | /************************************** |
| 2018 | 2017 | BBC Master Rom loading functions |
| 2019 | 2018 | ***************************************/ |
| 2019 | |
| 2020 | 2020 | DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcm_cart ) |
| 2021 | 2021 | { |
| 2022 | 2022 | UINT8 *RAM = m_region_user1->base(); |
| 2023 | | int size, read_; |
| 2024 | | int addr = 0; |
| 2025 | | int index = 0; |
| 2023 | UINT32 size; |
| 2024 | int addr = 0, index = 0; |
| 2026 | 2025 | |
| 2027 | | size = image.length(); |
| 2028 | | |
| 2029 | 2026 | if (strcmp(image.device().tag(),":cart1") == 0) |
| 2030 | | { |
| 2031 | 2027 | index = 0; |
| 2032 | | } |
| 2033 | 2028 | if (strcmp(image.device().tag(),":cart2") == 0) |
| 2034 | | { |
| 2035 | 2029 | index = 1; |
| 2036 | | } |
| 2037 | | if (strcmp(image.device().tag(),":cart3") == 0) |
| 2030 | addr += index * 0x8000; |
| 2031 | |
| 2032 | if (image.software_entry() == NULL) |
| 2038 | 2033 | { |
| 2039 | | index = 2; |
| 2034 | size = image.length(); |
| 2035 | logerror("loading rom %s, size:%.4x\n", image.filename(), size); |
| 2036 | |
| 2037 | if (size != 0x8000) |
| 2038 | { |
| 2039 | image.seterror(IMAGE_ERROR_UNSUPPORTED, "Invalid rom file size"); |
| 2040 | return IMAGE_INIT_FAIL; |
| 2041 | } |
| 2042 | |
| 2043 | image.fread(RAM + addr, size); |
| 2040 | 2044 | } |
| 2041 | | if (strcmp(image.device().tag(),":cart4") == 0) |
| 2045 | else |
| 2042 | 2046 | { |
| 2043 | | index = 3; |
| 2044 | | } |
| 2045 | | addr = 0x8000 + (0x4000 * index); |
| 2047 | size = image.get_software_region_length("rom"); |
| 2048 | logerror("loading rom %s, size:%.4x\n", image.filename(), size); |
| 2046 | 2049 | |
| 2047 | | |
| 2048 | | logerror("loading rom %s at %.4x size:%.4x\n", image.filename(), addr, size); |
| 2049 | | |
| 2050 | | |
| 2051 | | switch (size) |
| 2052 | | { |
| 2053 | | case 0x2000: |
| 2054 | | read_ = image.fread(RAM + addr, size); |
| 2055 | | if (read_ != size) |
| 2056 | | return 1; |
| 2057 | | image.fseek(0, SEEK_SET); |
| 2058 | | read_ = image.fread(RAM + addr + 0x2000, size); |
| 2059 | | break; |
| 2060 | | case 0x4000: |
| 2061 | | read_ = image.fread(RAM + addr, size); |
| 2062 | | break; |
| 2063 | | default: |
| 2064 | | read_ = 0; |
| 2065 | | logerror("bad rom file size of %.4x\n", size); |
| 2066 | | break; |
| 2050 | memcpy(RAM + addr, image.get_software_region("rom"), size); |
| 2067 | 2051 | } |
| 2068 | 2052 | |
| 2069 | | if (read_ != size) |
| 2070 | | return 1; |
| 2071 | | return 0; |
| 2053 | return IMAGE_INIT_PASS; |
| 2072 | 2054 | } |
| 2073 | 2055 | |
| 2074 | 2056 | |
trunk/src/mess/drivers/bbc.c
| r29274 | r29275 | |
| 639 | 639 | } |
| 640 | 640 | |
| 641 | 641 | static MACHINE_CONFIG_FRAGMENT( bbc_cartslot ) |
| 642 | | MCFG_CARTSLOT_ADD("cart1") |
| 642 | MCFG_CARTSLOT_ADD("exp_rom1") |
| 643 | 643 | MCFG_CARTSLOT_EXTENSION_LIST("rom") |
| 644 | 644 | MCFG_CARTSLOT_NOT_MANDATORY |
| 645 | | MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) |
| 645 | MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom) |
| 646 | MCFG_CARTSLOT_INTERFACE("bbc_cart") |
| 646 | 647 | |
| 647 | | MCFG_CARTSLOT_ADD("cart2") |
| 648 | MCFG_CARTSLOT_ADD("exp_rom2") |
| 648 | 649 | MCFG_CARTSLOT_EXTENSION_LIST("rom") |
| 649 | 650 | MCFG_CARTSLOT_NOT_MANDATORY |
| 650 | | MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) |
| 651 | MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom) |
| 652 | MCFG_CARTSLOT_INTERFACE("bbc_cart") |
| 651 | 653 | |
| 652 | | MCFG_CARTSLOT_ADD("cart3") |
| 654 | MCFG_CARTSLOT_ADD("exp_rom3") |
| 653 | 655 | MCFG_CARTSLOT_EXTENSION_LIST("rom") |
| 654 | 656 | MCFG_CARTSLOT_NOT_MANDATORY |
| 655 | | MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) |
| 657 | MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom) |
| 658 | MCFG_CARTSLOT_INTERFACE("bbc_cart") |
| 656 | 659 | |
| 657 | | MCFG_CARTSLOT_ADD("cart4") |
| 660 | MCFG_CARTSLOT_ADD("exp_rom4") |
| 658 | 661 | MCFG_CARTSLOT_EXTENSION_LIST("rom") |
| 659 | 662 | MCFG_CARTSLOT_NOT_MANDATORY |
| 660 | | MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) |
| 663 | MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom) |
| 664 | MCFG_CARTSLOT_INTERFACE("bbc_cart") |
| 661 | 665 | MACHINE_CONFIG_END |
| 662 | 666 | |
| 663 | 667 | |
| r29274 | r29275 | |
| 929 | 933 | MCFG_CASSETTE_ADD( "cassette", bbc_cassette_interface ) |
| 930 | 934 | |
| 931 | 935 | /* cartridges */ |
| 932 | | MCFG_CARTSLOT_ADD("cart") |
| 936 | MCFG_CARTSLOT_ADD("cart1") |
| 933 | 937 | MCFG_CARTSLOT_EXTENSION_LIST("bin") |
| 934 | 938 | MCFG_CARTSLOT_NOT_MANDATORY |
| 935 | 939 | MCFG_CARTSLOT_LOAD(bbc_state, bbcm_cart) |
| 936 | 940 | MCFG_CARTSLOT_INTERFACE("bbcm_cart") |
| 941 | MCFG_CARTSLOT_ADD("cart2") |
| 942 | MCFG_CARTSLOT_EXTENSION_LIST("bin") |
| 943 | MCFG_CARTSLOT_NOT_MANDATORY |
| 944 | MCFG_CARTSLOT_LOAD(bbc_state, bbcm_cart) |
| 945 | MCFG_CARTSLOT_INTERFACE("bbcm_cart") |
| 937 | 946 | |
| 938 | 947 | /* software lists */ |
| 939 | 948 | MCFG_SOFTWARE_LIST_ADD("cass_ls_m", "bbcm_cass") |