diff options
author | 2017-02-10 22:30:30 +0000 | |
---|---|---|
committer | 2017-02-14 12:28:37 +0000 | |
commit | 78ba1daa9f41ba185b1cc342725cb10751494d27 (patch) | |
tree | 72039fed480580805f1e1f15f4ffd0cf960d496b /src | |
parent | 52fb4ea49b3f91d2505e8a0094dceb4d34e4e2cf (diff) |
z88: fixed expanded video addressing in RAM carts
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/z88/z88.cpp | 13 | ||||
-rw-r--r-- | src/devices/bus/z88/z88.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/z88.cpp | 48 | ||||
-rw-r--r-- | src/mame/video/z88.cpp | 15 |
4 files changed, 54 insertions, 24 deletions
diff --git a/src/devices/bus/z88/z88.cpp b/src/devices/bus/z88/z88.cpp index ac6b1b7d101..193d483a147 100644 --- a/src/devices/bus/z88/z88.cpp +++ b/src/devices/bus/z88/z88.cpp @@ -203,3 +203,16 @@ WRITE8_MEMBER(z88cart_slot_device::write) if (m_cart) m_cart->write(space, offset, data); } + + +/*------------------------------------------------- + get_cart_base +-------------------------------------------------*/ + +uint8_t* z88cart_slot_device::get_cart_base() +{ + if (m_cart) + return m_cart->get_cart_base(); + else + return nullptr; +} diff --git a/src/devices/bus/z88/z88.h b/src/devices/bus/z88/z88.h index 9d6a76c4edd..05d5a7fbca7 100644 --- a/src/devices/bus/z88/z88.h +++ b/src/devices/bus/z88/z88.h @@ -116,7 +116,7 @@ public: // reading and writing virtual DECLARE_READ8_MEMBER(read); virtual DECLARE_WRITE8_MEMBER(write); - + virtual uint8_t* get_cart_base(); private: static const device_timer_id TIMER_FLP_CLEAR = 0; diff --git a/src/mame/drivers/z88.cpp b/src/mame/drivers/z88.cpp index 601af78ddba..647ac4affe9 100644 --- a/src/mame/drivers/z88.cpp +++ b/src/mame/drivers/z88.cpp @@ -10,6 +10,7 @@ TODO: - speaker controlled by txd + - cartridges should be hot swappable - expansion interface - serial port @@ -607,14 +608,14 @@ READ8_MEMBER(z88_state::kb_r) } static SLOT_INTERFACE_START(z88_cart) - SLOT_INTERFACE("32krom", Z88_32K_ROM) // 32KB ROM cart - SLOT_INTERFACE("128krom", Z88_128K_ROM) // 128KB ROM cart - SLOT_INTERFACE("256krom", Z88_256K_ROM) // 256KB ROM cart - SLOT_INTERFACE("32kram", Z88_32K_RAM) // 32KB RAM cart - SLOT_INTERFACE("128kram", Z88_128K_RAM) // 128KB RAM cart - SLOT_INTERFACE("512kram", Z88_512K_RAM) // 512KB RAM cart - SLOT_INTERFACE("1024kram",Z88_1024K_RAM) // 1024KB RAM cart - SLOT_INTERFACE("1024kflash",Z88_1024K_FLASH) // 1024KB Flash cart + SLOT_INTERFACE("32krom", Z88_32K_ROM) // 32KB ROM cart + SLOT_INTERFACE("128krom", Z88_128K_ROM) // 128KB ROM cart + SLOT_INTERFACE("256krom", Z88_256K_ROM) // 256KB ROM cart + SLOT_INTERFACE("32kram", Z88_32K_RAM) // 32KB RAM cart + SLOT_INTERFACE("128kram", Z88_128K_RAM) // 128KB RAM cart + SLOT_INTERFACE("512kram", Z88_512K_RAM) // 512KB RAM cart + SLOT_INTERFACE("1024kram", Z88_1024K_RAM) // 1024KB RAM cart + SLOT_INTERFACE("1024kflash", Z88_1024K_FLASH) // 1024KB Flash cart SLOT_INTERFACE_END static MACHINE_CONFIG_START( z88, z88_state ) @@ -650,12 +651,12 @@ static MACHINE_CONFIG_START( z88, z88_state ) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - // internal ram + /* internal ram */ MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("128K") MCFG_RAM_EXTRA_OPTIONS("32K,64K,256K,512k") - // cartridges + /* cartridges */ MCFG_DEVICE_ADD("slot1", Z88CART_SLOT, 0) MCFG_DEVICE_SLOT_INTERFACE(z88_cart, nullptr, false) MCFG_Z88CART_SLOT_OUT_FLP_CB(DEVWRITELINE("blink", upd65031_device, flp_w)) @@ -665,6 +666,9 @@ static MACHINE_CONFIG_START( z88, z88_state ) MCFG_DEVICE_ADD("slot3", Z88CART_SLOT, 0) MCFG_DEVICE_SLOT_INTERFACE(z88_cart, nullptr, false) MCFG_Z88CART_SLOT_OUT_FLP_CB(DEVWRITELINE("blink", upd65031_device, flp_w)) + + /* software lists */ + MCFG_SOFTWARE_LIST_ADD("cart_list", "z88_cart") MACHINE_CONFIG_END @@ -745,15 +749,15 @@ ROM_START(z88tr) ROMX_LOAD("z88v317tk.rom", 0x00000, 0x20000, CRC(9468d677) SHA1(8d76e94f43846c736bf257d15d531c2df1e20fae), ROM_BIOS(1) ) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ -COMP( 1988, z88 , 0, 0, z88, z88 , driver_device, 0, "Cambridge Computers", "Z88" , MACHINE_NOT_WORKING) -COMP( 1988, z88de, z88, 0, z88, z88de, driver_device, 0, "Cambridge Computers", "Z88 (German)" , MACHINE_NOT_WORKING) -COMP( 1988, z88es, z88, 0, z88, z88es, driver_device, 0, "Cambridge Computers", "Z88 (Spanish)" , MACHINE_NOT_WORKING) -COMP( 1988, z88fr, z88, 0, z88, z88fr, driver_device, 0, "Cambridge Computers", "Z88 (French)" , MACHINE_NOT_WORKING) -COMP( 1988, z88it, z88, 0, z88, z88it, driver_device, 0, "Cambridge Computers", "Z88 (Italian)" , MACHINE_NOT_WORKING) -COMP( 1988, z88se, z88, 0, z88, z88se, driver_device, 0, "Cambridge Computers", "Z88 (Swedish)" , MACHINE_NOT_WORKING) -COMP( 1988, z88fi, z88, 0, z88, z88se, driver_device, 0, "Cambridge Computers", "Z88 (Finnish)" , MACHINE_NOT_WORKING) -COMP( 1988, z88no, z88, 0, z88, z88no, driver_device, 0, "Cambridge Computers", "Z88 (Norwegian)", MACHINE_NOT_WORKING) -COMP( 1988, z88dk, z88, 0, z88, z88no, driver_device, 0, "Cambridge Computers", "Z88 (Danish)" , MACHINE_NOT_WORKING) -COMP( 1988, z88ch, z88, 0, z88, z88ch, driver_device, 0, "Cambridge Computers", "Z88 (Swiss)" , MACHINE_NOT_WORKING) -COMP( 1988, z88tr, z88, 0, z88, z88tr, driver_device, 0, "Cambridge Computers", "Z88 (Turkish)" , MACHINE_NOT_WORKING) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1988, z88 , 0, 0, z88, z88 , driver_device, 0, "Cambridge Computers", "Z88" , MACHINE_NOT_WORKING) +COMP( 1988, z88de, z88, 0, z88, z88de, driver_device, 0, "Cambridge Computers", "Z88 (German)" , MACHINE_NOT_WORKING) +COMP( 1988, z88es, z88, 0, z88, z88es, driver_device, 0, "Cambridge Computers", "Z88 (Spanish)" , MACHINE_NOT_WORKING) +COMP( 1988, z88fr, z88, 0, z88, z88fr, driver_device, 0, "Cambridge Computers", "Z88 (French)" , MACHINE_NOT_WORKING) +COMP( 1988, z88it, z88, 0, z88, z88it, driver_device, 0, "Cambridge Computers", "Z88 (Italian)" , MACHINE_NOT_WORKING) +COMP( 1988, z88se, z88, 0, z88, z88se, driver_device, 0, "Cambridge Computers", "Z88 (Swedish)" , MACHINE_NOT_WORKING) +COMP( 1988, z88fi, z88, 0, z88, z88se, driver_device, 0, "Cambridge Computers", "Z88 (Finnish)" , MACHINE_NOT_WORKING) +COMP( 1988, z88no, z88, 0, z88, z88no, driver_device, 0, "Cambridge Computers", "Z88 (Norwegian)", MACHINE_NOT_WORKING) +COMP( 1988, z88dk, z88, 0, z88, z88no, driver_device, 0, "Cambridge Computers", "Z88 (Danish)" , MACHINE_NOT_WORKING) +COMP( 1988, z88ch, z88, 0, z88, z88ch, driver_device, 0, "Cambridge Computers", "Z88 (Swiss)" , MACHINE_NOT_WORKING) +COMP( 1988, z88tr, z88, 0, z88, z88tr, driver_device, 0, "Cambridge Computers", "Z88 (Turkish)" , MACHINE_NOT_WORKING) diff --git a/src/mame/video/z88.cpp b/src/mame/video/z88.cpp index ede51b5ee1e..d0f405d3e1c 100644 --- a/src/mame/video/z88.cpp +++ b/src/mame/video/z88.cpp @@ -21,7 +21,20 @@ inline void z88_state::plot_pixel(bitmap_ind16 &bitmap, int x, int y, uint16_t c // convert absolute offset into correct address to get data from inline uint8_t* z88_state::convert_address(uint32_t offset) { - return (offset < 0x80000 ? m_bios : m_ram_base) + (offset & 0x7ffff); + uint8_t *ptr = nullptr; + + if (offset < 0x080000) // rom + ptr = m_bios + (offset & 0x7ffff); + else if (offset < 0x100000) // slot0 + ptr = m_ram_base + (offset & 0x7ffff); + else if (offset < 0x200000) // slot1 + ptr = m_carts[1]->get_cart_base() + (offset & 0xfffff); + else if (offset < 0x300000) // slot2 + ptr = m_carts[2]->get_cart_base() + (offset & 0xfffff); + else if (offset < 0x400000) // slot3 + ptr = m_carts[3]->get_cart_base() + (offset & 0xfffff); + + return ptr; } /*************************************************************************** |