trunk/src/emu/machine/intelfsh.c
| r243121 | r243122 | |
| 102 | 102 | const device_type INTEL_TE28F160 = &device_creator<intel_te28f160_device>; |
| 103 | 103 | const device_type SHARP_UNK128MBIT = &device_creator<sharp_unk128mbit_device>; |
| 104 | 104 | const device_type INTEL_28F320J3D = &device_creator<intel_28f320j3d_device>; |
| 105 | const device_type INTEL_28F320J5 = &device_creator<intel_28f320j5_device>; |
| 106 | |
| 105 | 107 | const device_type SST_39VF400A = &device_creator<sst_39vf400a_device>; |
| 106 | 108 | |
| 107 | 109 | static ADDRESS_MAP_START( memory_map8_512Kb, AS_PROGRAM, 8, intelfsh_device ) |
| r243121 | r243122 | |
| 246 | 248 | m_sector_is_4k = true; |
| 247 | 249 | map = ADDRESS_MAP_NAME( memory_map16_32Mb ); |
| 248 | 250 | break; |
| 251 | case FLASH_INTEL_28F320J5: // funkball |
| 252 | m_bits = 16; |
| 253 | m_size = 0x400000; |
| 254 | m_maker_id = MFG_INTEL; |
| 255 | m_device_id = 0x14; |
| 256 | // m_sector_is_4k = true; 128kb? |
| 257 | map = ADDRESS_MAP_NAME( memory_map16_32Mb ); |
| 258 | break; |
| 249 | 259 | case FLASH_SST_39VF020: |
| 250 | 260 | m_bits = 8; |
| 251 | 261 | m_size = 0x40000; |
| r243121 | r243122 | |
| 446 | 456 | intel_28f320j3d_device::intel_28f320j3d_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 447 | 457 | : intelfsh16_device(mconfig, INTEL_28F320J3D, "Intel 28F320J3D Flash", tag, owner, clock, FLASH_INTEL_28F320J3D, "intel_28f320j3d", __FILE__) { } |
| 448 | 458 | |
| 459 | intel_28f320j5_device::intel_28f320j5_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 460 | : intelfsh16_device(mconfig, INTEL_28F320J5, "Intel 28F320J3D_a Flash", tag, owner, clock, FLASH_INTEL_28F320J5, "intel_28f320j5", __FILE__) { } |
| 461 | |
| 462 | |
| 449 | 463 | sst_39vf400a_device::sst_39vf400a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 450 | 464 | : intelfsh16_device(mconfig, SST_39VF400A, "SST 39VF400A Flash", tag, owner, clock, FLASH_SST_39VF400A, "sst_39vf400a", __FILE__) { } |
| 451 | 465 | |
trunk/src/mame/drivers/funkball.c
| r243121 | r243122 | |
| 76 | 76 | #include "machine/idectrl.h" |
| 77 | 77 | #include "video/voodoo.h" |
| 78 | 78 | #include "machine/pcshare.h" |
| 79 | #include "machine/bankdev.h" |
| 80 | #include "machine/intelfsh.h" |
| 79 | 81 | |
| 80 | 82 | |
| 81 | 83 | class funkball_state : public pcat_base_state |
| r243121 | r243122 | |
| 84 | 86 | funkball_state(const machine_config &mconfig, device_type type, const char *tag) |
| 85 | 87 | : pcat_base_state(mconfig, type, tag), |
| 86 | 88 | m_voodoo(*this, "voodoo_0"), |
| 87 | | m_unk_ram(*this, "unk_ram"){ } |
| 89 | m_unk_ram(*this, "unk_ram"), |
| 90 | m_flashbank(*this, "flashbank") |
| 91 | { } |
| 88 | 92 | |
| 89 | 93 | UINT8 m_funkball_config_reg_sel; |
| 90 | 94 | UINT8 m_funkball_config_regs[256]; |
| 91 | 95 | UINT32 m_cx5510_regs[256/4]; |
| 92 | | UINT16 m_flash_addr; |
| 93 | 96 | UINT8 *m_bios_ram; |
| 94 | | UINT8 m_flash_cmd; |
| 95 | | UINT8 m_flash_data_cmd; |
| 96 | 97 | |
| 97 | 98 | UINT32 m_biu_ctrl_reg[256/4]; |
| 98 | 99 | |
| 100 | UINT32 flashbank_addr; |
| 101 | |
| 99 | 102 | // devices |
| 100 | 103 | required_device<voodoo_1_device> m_voodoo; |
| 101 | 104 | |
| 102 | 105 | required_shared_ptr<UINT32> m_unk_ram; |
| 106 | required_device<address_map_bank_device> m_flashbank; |
| 103 | 107 | |
| 104 | 108 | DECLARE_READ8_MEMBER( get_slave_ack ); |
| 105 | | DECLARE_WRITE8_MEMBER( flash_w ); |
| 106 | | DECLARE_READ8_MEMBER( flash_data_r ); |
| 107 | | DECLARE_WRITE8_MEMBER( flash_data_w ); |
| 109 | DECLARE_WRITE32_MEMBER( flash_w ); |
| 108 | 110 | // DECLARE_WRITE8_MEMBER( bios_ram_w ); |
| 109 | 111 | DECLARE_READ8_MEMBER( test_r ); |
| 110 | 112 | DECLARE_READ8_MEMBER( serial_r ); |
| r243121 | r243122 | |
| 272 | 274 | } |
| 273 | 275 | } |
| 274 | 276 | |
| 275 | | WRITE8_MEMBER( funkball_state::flash_w ) |
| 277 | WRITE32_MEMBER(funkball_state::flash_w) |
| 276 | 278 | { |
| 277 | | if(!(offset & 0x2)) |
| 278 | | { |
| 279 | | m_flash_addr = (offset & 1) ? ((m_flash_addr & 0xff) | (data << 8)) : ((m_flash_addr & 0xff00) | (data)); |
| 280 | | //printf("%08x ADDR\n",m_flash_addr << 16); |
| 281 | | } |
| 282 | | else if(offset == 2) |
| 283 | | { |
| 284 | | /* 0x83: read from u29/u30 |
| 285 | | 0x03: read from u3 |
| 286 | | 0x81: init device |
| 287 | | */ |
| 288 | | m_flash_cmd = data; |
| 289 | | printf("%02x CMD\n",data); |
| 290 | | } |
| 291 | | else |
| 292 | | printf("%02x %02x\n",offset,data); |
| 293 | | } |
| 279 | COMBINE_DATA(&flashbank_addr); |
| 280 | int tempbank = (flashbank_addr & 0x7fff) | ((flashbank_addr & 0x00800000) >> 8); |
| 281 | m_flashbank->set_bank(tempbank); |
| 294 | 282 | |
| 295 | | READ8_MEMBER( funkball_state::flash_data_r ) |
| 296 | | { |
| 297 | | if(m_flash_data_cmd == 0x90) |
| 298 | | { |
| 299 | | if(offset == 0 && (m_flash_addr == 0)) |
| 300 | | return 0x89; // manufacturer code |
| 283 | // note, other bits get used, but ignoring to keep the virtual bank space size sane. |
| 301 | 284 | |
| 302 | | if(offset == 2 && (m_flash_addr == 0)) |
| 303 | | return (m_flash_cmd & 0x80) ? 0x15 : 0x14; // device code, 32 MBit in both cases |
| 304 | | |
| 305 | | if(offset > 3) |
| 306 | | printf("%02x FLASH DATA 0x90\n",offset); |
| 307 | | |
| 308 | | return 0; |
| 309 | | } |
| 310 | | |
| 311 | | if(m_flash_data_cmd == 0xff) |
| 312 | | { |
| 313 | | UINT8 *ROM = memregion(m_flash_cmd & 0x80 ? "data_flash" : "prg_flash")->base(); |
| 314 | | |
| 315 | | return ROM[offset + (m_flash_addr << 16)]; |
| 316 | | } |
| 317 | | |
| 318 | | printf("%02x %08x %02x %02x\n",offset,m_flash_addr << 16,m_flash_cmd,m_flash_data_cmd); |
| 319 | | |
| 320 | | return 0; |
| 321 | 285 | } |
| 322 | 286 | |
| 323 | | WRITE8_MEMBER( funkball_state::flash_data_w ) |
| 324 | | { |
| 325 | | if(offset == 0) |
| 326 | | { |
| 327 | | m_flash_data_cmd = data; |
| 328 | | } |
| 329 | | else |
| 330 | | printf("%08x %02x FLASH DATA W %08x\n",offset,data,m_flash_addr << 16); |
| 331 | | } |
| 332 | 287 | |
| 333 | 288 | READ32_MEMBER(funkball_state::biu_ctrl_r) |
| 334 | 289 | { |
| r243121 | r243122 | |
| 378 | 333 | static ADDRESS_MAP_START(funkball_map, AS_PROGRAM, 32, funkball_state) |
| 379 | 334 | AM_RANGE(0x00000000, 0x0009ffff) AM_RAM |
| 380 | 335 | AM_RANGE(0x000a0000, 0x000affff) AM_RAM |
| 381 | | AM_RANGE(0x000b0000, 0x000bffff) AM_READWRITE8(flash_data_r,flash_data_w,0xffffffff) |
| 336 | AM_RANGE(0x000b0000, 0x000bffff) AM_DEVICE("flashbank", address_map_bank_device, amap32) |
| 382 | 337 | AM_RANGE(0x000c0000, 0x000cffff) AM_RAM |
| 383 | 338 | AM_RANGE(0x000d0000, 0x000dffff) AM_RAM |
| 384 | 339 | AM_RANGE(0x000e0000, 0x000e3fff) AM_ROMBANK("bios_ext1") |
| r243121 | r243122 | |
| 398 | 353 | AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0) /* System BIOS */ |
| 399 | 354 | ADDRESS_MAP_END |
| 400 | 355 | |
| 356 | static ADDRESS_MAP_START( flashbank_map, AS_PROGRAM, 32, funkball_state ) |
| 357 | AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE16("u29", intel_28f320j5_device, read, write, 0xffffffff ) |
| 358 | AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE16("u30", intel_28f320j5_device, read, write, 0xffffffff ) |
| 359 | AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE16("u3", intel_28f320j5_device, read, write, 0xffffffff ) |
| 360 | /* it checks for 64MBit chips at 0x80000000 the way things are set up, they must return an intel Flash ID of 0x15 */ |
| 361 | ADDRESS_MAP_END |
| 362 | |
| 401 | 363 | static ADDRESS_MAP_START(funkball_io, AS_IO, 32, funkball_state) |
| 402 | 364 | AM_RANGE(0x0020, 0x0023) AM_READWRITE8(io20_r, io20_w, 0xffff0000) |
| 403 | 365 | AM_IMPORT_FROM(pcat32_io_common) |
| r243121 | r243122 | |
| 409 | 371 | |
| 410 | 372 | AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write) |
| 411 | 373 | |
| 412 | | AM_RANGE(0x0360, 0x0363) AM_WRITE8(flash_w,0xffffffff) |
| 374 | AM_RANGE(0x0360, 0x0363) AM_WRITE(flash_w) |
| 413 | 375 | |
| 414 | 376 | // AM_RANGE(0x0320, 0x0323) AM_READ(test_r) |
| 415 | 377 | AM_RANGE(0x0360, 0x036f) AM_READ8(test_r,0xffffffff) // inputs |
| r243121 | r243122 | |
| 862 | 824 | MCFG_IDE_CONTROLLER_ADD("ide", ata_devices, "hdd", NULL, true) |
| 863 | 825 | MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) |
| 864 | 826 | |
| 827 | MCFG_DEVICE_ADD("flashbank", ADDRESS_MAP_BANK, 0) |
| 828 | MCFG_DEVICE_PROGRAM_MAP(flashbank_map) |
| 829 | MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) |
| 830 | MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) |
| 831 | MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(64) |
| 832 | MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000) |
| 833 | |
| 865 | 834 | /* video hardware */ |
| 866 | 835 | MCFG_DEVICE_ADD("voodoo_0", VOODOO_1, STD_VOODOO_1_CLOCK) |
| 867 | 836 | MCFG_VOODOO_FBMEM(2) |
| r243121 | r243122 | |
| 875 | 844 | MCFG_SCREEN_UPDATE_DRIVER(funkball_state, screen_update) |
| 876 | 845 | MCFG_SCREEN_SIZE(1024, 1024) |
| 877 | 846 | MCFG_SCREEN_VISIBLE_AREA(0, 511, 16, 447) |
| 847 | |
| 848 | MCFG_INTEL_28F320J5_ADD("u29") |
| 849 | MCFG_INTEL_28F320J5_ADD("u30") |
| 850 | MCFG_INTEL_28F320J5_ADD("u3") |
| 878 | 851 | MACHINE_CONFIG_END |
| 879 | 852 | |
| 880 | 853 | ROM_START( funkball ) |
| 881 | 854 | ROM_REGION32_LE(0x20000, "bios", ROMREGION_ERASEFF) |
| 882 | 855 | ROM_LOAD( "512k-epr.u62", 0x010000, 0x010000, CRC(cced894a) SHA1(298c81716e375da4b7215f3e588a45ca3ea7e35c) ) |
| 883 | 856 | |
| 884 | | ROM_REGION(0x8000000, "prg_flash", ROMREGION_ERASE00) |
| 857 | ROM_REGION(0x4000000, "u3", ROMREGION_ERASE00) |
| 885 | 858 | ROM_LOAD16_WORD_SWAP( "flash.u3", 0x0000000, 0x400000, CRC(fb376abc) SHA1(ea4c48bb6cd2055431a33f5c426e52c7af6997eb) ) |
| 886 | 859 | |
| 887 | | ROM_REGION(0x8000000, "data_flash", ROMREGION_ERASE00) |
| 888 | | ROM_LOAD( "flash.u29",0x0000000, 0x400000, CRC(7cf6ff4b) SHA1(4ccdd4864ad92cc218998f3923997119a1a9dd1d) ) |
| 889 | | ROM_LOAD( "flash.u30",0x0400000, 0x400000, CRC(1d46717a) SHA1(acfbd0a2ccf4d717779733c4a9c639296c3bbe0e) ) |
| 860 | ROM_REGION(0x8000000, "u29", ROMREGION_ERASE00) |
| 861 | ROM_LOAD16_WORD_SWAP( "flash.u29",0x0000000, 0x400000, CRC(7cf6ff4b) SHA1(4ccdd4864ad92cc218998f3923997119a1a9dd1d) ) |
| 862 | |
| 863 | ROM_REGION(0x4000000, "u30", ROMREGION_ERASE00) |
| 864 | ROM_LOAD16_WORD_SWAP( "flash.u30",0x0400000, 0x400000, CRC(1d46717a) SHA1(acfbd0a2ccf4d717779733c4a9c639296c3bbe0e) ) |
| 890 | 865 | ROM_END |
| 891 | 866 | |
| 892 | 867 | |