mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
z88: fixed expanded video addressing in RAM carts
This commit is contained in:
parent
52fb4ea49b
commit
78ba1daa9f
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user