src/mess/drivers/x68k.c
| r10144 | r10145 | |
| 128 | 128 | #include "machine/8530scc.h" |
| 129 | 129 | #include "machine/hd63450.h" |
| 130 | 130 | #include "machine/rp5c15.h" |
| 131 | #include "machine/mb89352.h" |
| 132 | #include "imagedev/chd_cd.h" |
| 131 | 133 | #include "imagedev/flopdrv.h" |
| 132 | 134 | #include "formats/basicdsk.h" |
| 133 | 135 | #include "formats/dim_dsk.h" |
| r10144 | r10145 | |
| 1945 | 1947 | return state->current_vector[irqline]; |
| 1946 | 1948 | } |
| 1947 | 1949 | |
| 1950 | static WRITE_LINE_DEVICE_HANDLER( x68k_scsi_irq ) |
| 1951 | { |
| 1952 | // TODO : Internal SCSI IRQ vector 0x6c, External SCSI IRQ vector 0xf6 |
| 1953 | } |
| 1954 | |
| 1955 | static WRITE_LINE_DEVICE_HANDLER( x68k_scsi_drq ) |
| 1956 | { |
| 1957 | // TODO |
| 1958 | } |
| 1959 | |
| 1948 | 1960 | static ADDRESS_MAP_START(x68k_map, ADDRESS_SPACE_PROGRAM, 16) |
| 1949 | 1961 | // AM_RANGE(0x000000, 0xbfffff) AM_RAMBANK(1) |
| 1950 | 1962 | AM_RANGE(0xbffffc, 0xbfffff) AM_READWRITE(x68k_rom0_r, x68k_rom0_w) |
| r10144 | r10145 | |
| 1964 | 1976 | AM_RANGE(0xe92000, 0xe92001) AM_DEVREADWRITE8("okim6258", okim6258_status_r, okim6258_ctrl_w, 0x00ff) |
| 1965 | 1977 | AM_RANGE(0xe92002, 0xe92003) AM_DEVREADWRITE8("okim6258", okim6258_status_r, okim6258_data_w, 0x00ff) |
| 1966 | 1978 | AM_RANGE(0xe94000, 0xe95fff) AM_READWRITE(x68k_fdc_r, x68k_fdc_w) |
| 1967 | | AM_RANGE(0xe96000, 0xe97fff) AM_DEVREADWRITE("x68k_hdc",x68k_hdc_r, x68k_hdc_w) |
| 1979 | AM_RANGE(0xe96000, 0xe9601f) AM_DEVREADWRITE("x68k_hdc",x68k_hdc_r, x68k_hdc_w) |
| 1968 | 1980 | AM_RANGE(0xe98000, 0xe99fff) AM_READWRITE(x68k_scc_r, x68k_scc_w) |
| 1969 | 1981 | AM_RANGE(0xe9a000, 0xe9bfff) AM_DEVREADWRITE("ppi8255", x68k_ppi_r, x68k_ppi_w) |
| 1970 | 1982 | AM_RANGE(0xe9c000, 0xe9dfff) AM_READWRITE(x68k_ioc_r, x68k_ioc_w) |
| 1983 | AM_RANGE(0xea0000, 0xea1fff) AM_READWRITE(x68k_exp_r, x68k_exp_w) // external SCSI ROM and controller |
| 1971 | 1984 | AM_RANGE(0xeafa00, 0xeafa1f) AM_READWRITE(x68k_exp_r, x68k_exp_w) |
| 1972 | 1985 | AM_RANGE(0xeafa80, 0xeafa89) AM_READWRITE(x68k_areaset_r, x68k_enh_areaset_w) |
| 1973 | 1986 | AM_RANGE(0xeb0000, 0xeb7fff) AM_READWRITE(x68k_spritereg_r, x68k_spritereg_w) |
| r10144 | r10145 | |
| 1977 | 1990 | AM_RANGE(0xed0000, 0xed3fff) AM_RAMBANK("bank4") AM_SHARE("nvram") |
| 1978 | 1991 | AM_RANGE(0xed4000, 0xefffff) AM_NOP |
| 1979 | 1992 | AM_RANGE(0xf00000, 0xfbffff) AM_ROM |
| 1980 | | // AM_RANGE(0xfc0000, 0xfdffff) AM_READWRITE(x68k_rom0_r, x68k_rom0_w) |
| 1993 | AM_RANGE(0xfc0000, 0xfdffff) AM_READWRITE(x68k_exp_r, x68k_exp_w) // internal SCSI ROM |
| 1981 | 1994 | AM_RANGE(0xfe0000, 0xffffff) AM_ROM |
| 1982 | 1995 | ADDRESS_MAP_END |
| 1983 | 1996 | |
| 1997 | static ADDRESS_MAP_START(x68kxvi_map, ADDRESS_SPACE_PROGRAM, 16) |
| 1998 | // AM_RANGE(0x000000, 0xbfffff) AM_RAMBANK(1) |
| 1999 | AM_RANGE(0xbffffc, 0xbfffff) AM_READWRITE(x68k_rom0_r, x68k_rom0_w) |
| 2000 | // AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(x68k_gvram_r, x68k_gvram_w) AM_BASE_MEMBER(x68k_state, gvram) |
| 2001 | // AM_RANGE(0xe00000, 0xe7ffff) AM_READWRITE(x68k_tvram_r, x68k_tvram_w) AM_BASE_MEMBER(x68k_state, tvram) |
| 2002 | AM_RANGE(0xc00000, 0xdfffff) AM_RAMBANK("bank2") |
| 2003 | AM_RANGE(0xe00000, 0xe7ffff) AM_RAMBANK("bank3") |
| 2004 | AM_RANGE(0xe80000, 0xe81fff) AM_READWRITE(x68k_crtc_r, x68k_crtc_w) |
| 2005 | AM_RANGE(0xe82000, 0xe83fff) AM_READWRITE(x68k_vid_r, x68k_vid_w) |
| 2006 | AM_RANGE(0xe84000, 0xe85fff) AM_READWRITE(x68k_dmac_r, x68k_dmac_w) |
| 2007 | AM_RANGE(0xe86000, 0xe87fff) AM_READWRITE(x68k_areaset_r, x68k_areaset_w) |
| 2008 | AM_RANGE(0xe88000, 0xe89fff) AM_READWRITE(x68k_mfp_r, x68k_mfp_w) |
| 2009 | AM_RANGE(0xe8a000, 0xe8bfff) AM_DEVREADWRITE("rp5c15", x68k_rtc_r, x68k_rtc_w) |
| 2010 | // AM_RANGE(0xe8c000, 0xe8dfff) AM_READWRITE(x68k_printer_r, x68k_printer_w) |
| 2011 | AM_RANGE(0xe8e000, 0xe8ffff) AM_READWRITE(x68k_sysport_r, x68k_sysport_w) |
| 2012 | AM_RANGE(0xe90000, 0xe91fff) AM_READWRITE(x68k_fm_r, x68k_fm_w) |
| 2013 | AM_RANGE(0xe92000, 0xe92001) AM_DEVREADWRITE8("okim6258", okim6258_status_r, okim6258_ctrl_w, 0x00ff) |
| 2014 | AM_RANGE(0xe92002, 0xe92003) AM_DEVREADWRITE8("okim6258", okim6258_status_r, okim6258_data_w, 0x00ff) |
| 2015 | AM_RANGE(0xe94000, 0xe95fff) AM_READWRITE(x68k_fdc_r, x68k_fdc_w) |
| 2016 | AM_RANGE(0xe96000, 0xe9601f) AM_DEVREADWRITE("x68k_hdc",x68k_hdc_r, x68k_hdc_w) |
| 2017 | AM_RANGE(0xe96020, 0xe9603f) AM_DEVREADWRITE8_MODERN("mb89352_int",mb89352_device,mb89352_r,mb89352_w,0x00ff) |
| 2018 | AM_RANGE(0xe98000, 0xe99fff) AM_READWRITE(x68k_scc_r, x68k_scc_w) |
| 2019 | AM_RANGE(0xe9a000, 0xe9bfff) AM_DEVREADWRITE("ppi8255", x68k_ppi_r, x68k_ppi_w) |
| 2020 | AM_RANGE(0xe9c000, 0xe9dfff) AM_READWRITE(x68k_ioc_r, x68k_ioc_w) |
| 2021 | AM_RANGE(0xea0000, 0xea1fff) AM_READWRITE(x68k_exp_r, x68k_exp_w) // external SCSI ROM and controller |
| 2022 | AM_RANGE(0xeafa00, 0xeafa1f) AM_READWRITE(x68k_exp_r, x68k_exp_w) |
| 2023 | AM_RANGE(0xeafa80, 0xeafa89) AM_READWRITE(x68k_areaset_r, x68k_enh_areaset_w) |
| 2024 | AM_RANGE(0xeb0000, 0xeb7fff) AM_READWRITE(x68k_spritereg_r, x68k_spritereg_w) |
| 2025 | AM_RANGE(0xeb8000, 0xebffff) AM_READWRITE(x68k_spriteram_r, x68k_spriteram_w) |
| 2026 | AM_RANGE(0xec0000, 0xecffff) AM_NOP // User I/O |
| 2027 | // AM_RANGE(0xed0000, 0xed3fff) AM_READWRITE(sram_r, sram_w) AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) |
| 2028 | AM_RANGE(0xed0000, 0xed3fff) AM_RAMBANK("bank4") AM_SHARE("nvram") |
| 2029 | AM_RANGE(0xed4000, 0xefffff) AM_NOP |
| 2030 | AM_RANGE(0xf00000, 0xfbffff) AM_ROM |
| 2031 | AM_RANGE(0xfc0000, 0xfdffff) AM_ROM // internal SCSI ROM |
| 2032 | AM_RANGE(0xfe0000, 0xffffff) AM_ROM |
| 2033 | ADDRESS_MAP_END |
| 2034 | |
| 1984 | 2035 | static ADDRESS_MAP_START(x68030_map, ADDRESS_SPACE_PROGRAM, 32) |
| 1985 | 2036 | // AM_RANGE(0x000000, 0xbfffff) AM_RAMBANK(1) |
| 1986 | 2037 | AM_RANGE(0xbffffc, 0xbfffff) AM_READWRITE16(x68k_rom0_r, x68k_rom0_w,0xffffffff) |
| r10144 | r10145 | |
| 1999 | 2050 | AM_RANGE(0xe90000, 0xe91fff) AM_READWRITE16(x68k_fm_r, x68k_fm_w,0xffffffff) |
| 2000 | 2051 | AM_RANGE(0xe92000, 0xe92003) AM_DEVREADWRITE8("okim6258", okim6258_status_r, x68030_adpcm_w, 0x00ff00ff) |
| 2001 | 2052 | AM_RANGE(0xe94000, 0xe95fff) AM_READWRITE16(x68k_fdc_r, x68k_fdc_w,0xffffffff) |
| 2002 | | AM_RANGE(0xe96000, 0xe97fff) AM_DEVREADWRITE16("x68k_hdc",x68k_hdc_r, x68k_hdc_w,0xffffffff) |
| 2053 | AM_RANGE(0xe96000, 0xe9601f) AM_DEVREADWRITE16("x68k_hdc",x68k_hdc_r, x68k_hdc_w,0xffffffff) |
| 2054 | AM_RANGE(0xe96020, 0xe9603f) AM_DEVREADWRITE8_MODERN("mb89352_int",mb89352_device,mb89352_r,mb89352_w,0x00ff00ff) |
| 2003 | 2055 | AM_RANGE(0xe98000, 0xe99fff) AM_READWRITE16(x68k_scc_r, x68k_scc_w,0xffffffff) |
| 2004 | 2056 | AM_RANGE(0xe9a000, 0xe9bfff) AM_DEVREADWRITE16("ppi8255", x68k_ppi_r, x68k_ppi_w,0xffffffff) |
| 2005 | 2057 | AM_RANGE(0xe9c000, 0xe9dfff) AM_READWRITE16(x68k_ioc_r, x68k_ioc_w,0xffffffff) |
| 2058 | AM_RANGE(0xea0000, 0xea1fff) AM_READWRITE16(x68k_exp_r, x68k_exp_w,0xffffffff) // external SCSI ROM and controller |
| 2006 | 2059 | AM_RANGE(0xeafa00, 0xeafa1f) AM_READWRITE16(x68k_exp_r, x68k_exp_w,0xffffffff) |
| 2007 | 2060 | AM_RANGE(0xeafa80, 0xeafa8b) AM_READWRITE16(x68k_areaset_r, x68k_enh_areaset_w,0xffffffff) |
| 2008 | 2061 | AM_RANGE(0xeb0000, 0xeb7fff) AM_READWRITE16(x68k_spritereg_r, x68k_spritereg_w,0xffffffff) |
| r10144 | r10145 | |
| 2012 | 2065 | AM_RANGE(0xed0000, 0xed3fff) AM_RAMBANK("bank4") AM_SHARE("nvram") |
| 2013 | 2066 | AM_RANGE(0xed4000, 0xefffff) AM_NOP |
| 2014 | 2067 | AM_RANGE(0xf00000, 0xfbffff) AM_ROM |
| 2015 | | // AM_RANGE(0xfc0000, 0xfdffff) AM_READWRITE16(x68k_rom0_r, x68k_rom0_w,0xffffffff) |
| 2068 | AM_RANGE(0xfc0000, 0xfdffff) AM_ROM // internal SCSI ROM |
| 2016 | 2069 | AM_RANGE(0xfe0000, 0xffffff) AM_ROM |
| 2017 | 2070 | ADDRESS_MAP_END |
| 2018 | 2071 | |
| r10144 | r10145 | |
| 2445 | 2498 | NULL |
| 2446 | 2499 | }; |
| 2447 | 2500 | |
| 2501 | static const SCSIConfigTable x68k_scsi_devtable = |
| 2502 | { |
| 2503 | 7, /* 7 SCSI devices */ |
| 2504 | { |
| 2505 | { SCSI_ID_0, "harddisk0", SCSI_DEVICE_HARDDISK }, |
| 2506 | { SCSI_ID_1, "harddisk1", SCSI_DEVICE_HARDDISK }, |
| 2507 | { SCSI_ID_2, "harddisk2", SCSI_DEVICE_HARDDISK }, |
| 2508 | { SCSI_ID_3, "harddisk3", SCSI_DEVICE_HARDDISK }, |
| 2509 | { SCSI_ID_4, "harddisk4", SCSI_DEVICE_HARDDISK }, |
| 2510 | { SCSI_ID_5, "mo_disk", SCSI_DEVICE_HARDDISK }, // Magneto-Optical disk |
| 2511 | { SCSI_ID_6, "cdrom", SCSI_DEVICE_CDROM }, // CD-ROM/RW |
| 2512 | } |
| 2513 | }; |
| 2514 | |
| 2515 | static const mb89352_interface x68k_scsi_intf = |
| 2516 | { |
| 2517 | &x68k_scsi_devtable, |
| 2518 | DEVCB_LINE(x68k_scsi_irq), |
| 2519 | DEVCB_LINE(x68k_scsi_drq) |
| 2520 | }; |
| 2521 | |
| 2448 | 2522 | static MACHINE_RESET( x68000 ) |
| 2449 | 2523 | { |
| 2450 | 2524 | x68k_state *state = machine->driver_data<x68k_state>(); |
| r10144 | r10145 | |
| 2704 | 2778 | |
| 2705 | 2779 | MCFG_CPU_MODIFY("maincpu") |
| 2706 | 2780 | MCFG_CPU_CLOCK(16000000) /* 16 MHz */ |
| 2781 | MCFG_CPU_PROGRAM_MAP(x68kxvi_map) |
| 2782 | |
| 2783 | MCFG_MB89352A_ADD("mb89352_int",x68k_scsi_intf) |
| 2784 | MCFG_HARDDISK_ADD("harddisk0") |
| 2785 | MCFG_HARDDISK_ADD("harddisk1") |
| 2786 | MCFG_HARDDISK_ADD("harddisk2") |
| 2787 | MCFG_HARDDISK_ADD("harddisk3") |
| 2788 | MCFG_HARDDISK_ADD("harddisk4") |
| 2789 | MCFG_HARDDISK_ADD("mo_disk") // magneto-optical disk, we'll treat it as an HD for now |
| 2790 | MCFG_CDROM_ADD("cdrom") |
| 2707 | 2791 | MACHINE_CONFIG_END |
| 2708 | 2792 | |
| 2709 | 2793 | static MACHINE_CONFIG_DERIVED( x68030, x68000 ) |
| r10144 | r10145 | |
| 2713 | 2797 | |
| 2714 | 2798 | MCFG_MACHINE_START( x68030 ) |
| 2715 | 2799 | MCFG_MACHINE_RESET( x68000 ) |
| 2800 | |
| 2801 | MCFG_MB89352A_ADD("mb89352_int",x68k_scsi_intf) |
| 2802 | MCFG_HARDDISK_ADD("harddisk0") |
| 2803 | MCFG_HARDDISK_ADD("harddisk1") |
| 2804 | MCFG_HARDDISK_ADD("harddisk2") |
| 2805 | MCFG_HARDDISK_ADD("harddisk3") |
| 2806 | MCFG_HARDDISK_ADD("harddisk4") |
| 2807 | MCFG_HARDDISK_ADD("mo_disk") // magneto-optical disk, we'll treat it as an HD for now |
| 2808 | MCFG_CDROM_ADD("cdrom") |
| 2716 | 2809 | MACHINE_CONFIG_END |
| 2717 | 2810 | |
| 2718 | 2811 | ROM_START( x68000 ) |
| r10144 | r10145 | |
| 2745 | 2838 | ROMX_LOAD( "iplromco.dat", 0xfe0000, 0x020000, CRC(6c7ef608) SHA1(77511fc58798404701f66b6bbc9cbde06596eba7), ROM_BIOS(3) ) |
| 2746 | 2839 | ROM_SYSTEM_BIOS(3, "ipl13", "IPL-ROM V1.3 (92/11/27)") |
| 2747 | 2840 | ROMX_LOAD( "iplrom30.dat", 0xfe0000, 0x020000, CRC(e8f8fdad) SHA1(239e9124568c862c31d9ec0605e32373ea74b86a), ROM_BIOS(4) ) |
| 2841 | ROM_LOAD("scsiinrom.dat",0xfc0000, 0x002000, CRC(1c6c889e) SHA1(3f063d4231cdf53da6adc4db96533725e260076a) BAD_DUMP ) |
| 2842 | // ROM_LOAD("scsiexrom.dat",0xea0000, 0x002000, NO_DUMP ) |
| 2748 | 2843 | ROM_REGION(0x8000, "user1",0) // For Background/Sprite decoding |
| 2749 | 2844 | ROM_FILL(0x0000,0x8000,0x00) |
| 2750 | 2845 | ROM_REGION(0x20000, "user2", 0) |
| 2751 | 2846 | ROM_FILL(0x000,0x20000,0x00) |
| 2752 | | ROM_REGION(0x8000, "scsi", 0) |
| 2753 | | ROM_LOAD("scsiinrom.dat",0x000000, 0x008000, NO_DUMP ) |
| 2754 | 2847 | ROM_END |
| 2755 | 2848 | |
| 2756 | 2849 | ROM_START( x68030 ) |
| r10144 | r10145 | |
| 2765 | 2858 | ROMX_LOAD( "iplromco.dat", 0xfe0000, 0x020000, CRC(6c7ef608) SHA1(77511fc58798404701f66b6bbc9cbde06596eba7), ROM_BIOS(3) ) |
| 2766 | 2859 | ROM_SYSTEM_BIOS(3, "ipl13", "IPL-ROM V1.3 (92/11/27)") |
| 2767 | 2860 | ROMX_LOAD( "iplrom30.dat", 0xfe0000, 0x020000, CRC(e8f8fdad) SHA1(239e9124568c862c31d9ec0605e32373ea74b86a), ROM_BIOS(4) ) |
| 2861 | ROM_LOAD("scsiinrom.dat",0xfc0000, 0x002000, CRC(1c6c889e) SHA1(3f063d4231cdf53da6adc4db96533725e260076a) BAD_DUMP ) |
| 2862 | // ROM_LOAD("scsiexrom.dat",0xea0000, 0x002000, NO_DUMP ) |
| 2768 | 2863 | ROM_REGION(0x8000, "user1",0) // For Background/Sprite decoding |
| 2769 | 2864 | ROM_FILL(0x0000,0x8000,0x00) |
| 2770 | 2865 | ROM_REGION(0x20000, "user2", 0) |
| 2771 | 2866 | ROM_FILL(0x000,0x20000,0x00) |
| 2772 | | ROM_REGION(0x8000, "scsi", 0) |
| 2773 | | ROM_LOAD("scsiinrom.dat",0x000000, 0x008000, NO_DUMP ) |
| 2774 | 2867 | ROM_END |
| 2775 | 2868 | |
| 2776 | 2869 | |