Previous 199869 Revisions Next

r31731 Friday 22nd August, 2014 at 09:41:31 UTC by Barry Rodewald
fm77av: converted various MMU functions to use bankdev.  Dragon Buster is now
       almost 3 times faster than it was.
memory.c: increased static handler limit, so that having a larger number of
         address map bank devices don't hit it.
[src/emu]memory.c
[src/mess/drivers]fm7.c
[src/mess/includes]fm7.h

trunk/src/emu/memory.c
r31730r31731
204204{
205205   STATIC_INVALID = 0,                                 // invalid - should never be used
206206   STATIC_BANK1 = 1,                                   // first memory bank
207   STATIC_BANKMAX = 124,                               // last memory bank
207   STATIC_BANKMAX = 252,                               // last memory bank
208208   STATIC_NOP,                                         // NOP - reads = unmapped value; writes = no-op
209209   STATIC_UNMAP,                                       // unmapped - same as NOP except we log errors
210210   STATIC_WATCHPOINT,                                  // watchpoint - used internally
trunk/src/mess/includes/fm7.h
r31730r31731
44#include "sound/beep.h"
55#include "sound/2203intf.h"
66#include "machine/wd17xx.h"
7#include "machine/bankdev.h"
78
89/*
910 *
r31730r31731
141142      m_joy1(*this, "joy1"),
142143      m_joy2(*this, "joy2"),
143144      m_dsw(*this, "DSW"),
144      m_palette(*this, "palette")
145      m_palette(*this, "palette"),
146      m_avbank1(*this, "av_bank1"),
147      m_avbank2(*this, "av_bank2"),
148      m_avbank3(*this, "av_bank3"),
149      m_avbank4(*this, "av_bank4"),
150      m_avbank5(*this, "av_bank5"),
151      m_avbank6(*this, "av_bank6"),
152      m_avbank7(*this, "av_bank7"),
153      m_avbank8(*this, "av_bank8"),
154      m_avbank9(*this, "av_bank9"),
155      m_avbank10(*this, "av_bank10"),
156      m_avbank11(*this, "av_bank11"),
157      m_avbank12(*this, "av_bank12"),
158      m_avbank13(*this, "av_bank13"),
159      m_avbank14(*this, "av_bank14"),
160      m_avbank15(*this, "av_bank15"),
161      m_avbank16(*this, "av_bank16")
145162   {
146163   }
147164
r31730r31731
342359   required_ioport m_dsw;
343360   required_device<palette_device> m_palette;
344361
362   optional_device<address_map_bank_device> m_avbank1;
363   optional_device<address_map_bank_device> m_avbank2;
364   optional_device<address_map_bank_device> m_avbank3;
365   optional_device<address_map_bank_device> m_avbank4;
366   optional_device<address_map_bank_device> m_avbank5;
367   optional_device<address_map_bank_device> m_avbank6;
368   optional_device<address_map_bank_device> m_avbank7;
369   optional_device<address_map_bank_device> m_avbank8;
370   optional_device<address_map_bank_device> m_avbank9;
371   optional_device<address_map_bank_device> m_avbank10;
372   optional_device<address_map_bank_device> m_avbank11;
373   optional_device<address_map_bank_device> m_avbank12;
374   optional_device<address_map_bank_device> m_avbank13;
375   optional_device<address_map_bank_device> m_avbank14;
376   optional_device<address_map_bank_device> m_avbank15;
377   optional_device<address_map_bank_device> m_avbank16;
378
345379protected:
346380   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
347381};
trunk/src/mess/drivers/fm7.c
r31730r31731
3131     - Keyboard repeat is not implemented
3232     - Optional Kanji ROM use is not implemented
3333     - Other optional hardware is not implemented (RS232, Z80 card...)
34     - FM-77AV and later aren't working (extra features not yet implemented)
34     - FM-77AV20 and later aren't working (extra features not yet implemented)
3535
3636************************************************************************************************/
3737
r31730r31731
4848#include "formats/fm7_cas.h"
4949#include "imagedev/flopdrv.h"
5050#include "bus/centronics/dsjoy.h"
51
5251#include "includes/fm7.h"
5352
5453/* key scancode conversion table
r31730r31731
997996
998997void fm7_state::fm7_update_bank(address_space & space, int bank, UINT8 physical)
999998{
1000   UINT8* RAM = memregion("maincpu")->base();
999   address_map_bank_device* avbank[16] = { m_avbank1, m_avbank2, m_avbank3, m_avbank4, m_avbank5, m_avbank6, m_avbank7
1000         , m_avbank8, m_avbank9, m_avbank10, m_avbank11, m_avbank12, m_avbank13, m_avbank14, m_avbank15, m_avbank16 };
1001
1002   avbank[bank]->set_bank(physical);
1003/*   UINT8* RAM = memregion("maincpu")->base();
10011004   UINT16 size = 0xfff;
10021005   char bank_name[10];
10031006
r31730r31731
10951098   }
10961099   space.install_readwrite_bank(bank*0x1000,(bank*0x1000)+size,bank_name);
10971100   membank(bank_name)->set_base(RAM+(physical<<12));
1101   */
10981102}
10991103
11001104void fm7_state::fm7_mmr_refresh(address_space& space)
r31730r31731
11271131         membank("bank24")->set_base(RAM+window_addr);
11281132      }
11291133   }
1134   else
1135   {
1136      space.install_readwrite_handler(0x7000,0x7fff,read8_delegate(FUNC(address_map_bank_device::read8),(address_map_bank_device*)m_avbank8),write8_delegate(FUNC(address_map_bank_device::write8),(address_map_bank_device*)m_avbank8));
1137   }
1138   if(m_init_rom_en)
1139   {
1140      UINT8* ROM = memregion("init")->base();
1141      membank("init_bank_r")->set_base(ROM);
1142   }
1143   else
1144   {
1145      membank("init_bank_r")->set_base(RAM+0x36000);
1146   }
1147   if(m_basic_rom_en)
1148   {
1149      UINT8* ROM = memregion("fbasic")->base();
1150      membank("fbasic_bank_r")->set_base(ROM);
1151   }
1152   else
1153   {
1154      membank("fbasic_bank_r")->set_base(RAM+0x38000);
1155   }
11301156}
11311157
11321158WRITE8_MEMBER(fm7_state::fm7_mmr_w)
r31730r31731
15811607ADDRESS_MAP_END
15821608
15831609static ADDRESS_MAP_START( fm77av_mem, AS_PROGRAM, 8, fm7_state )
1584   AM_RANGE(0x0000,0x0fff) AM_RAMBANK("bank1")
1585   AM_RANGE(0x1000,0x1fff) AM_RAMBANK("bank2")
1586   AM_RANGE(0x2000,0x2fff) AM_RAMBANK("bank3")
1587   AM_RANGE(0x3000,0x3fff) AM_RAMBANK("bank4")
1588   AM_RANGE(0x4000,0x4fff) AM_RAMBANK("bank5")
1589   AM_RANGE(0x5000,0x5fff) AM_RAMBANK("bank6")
1590   AM_RANGE(0x6000,0x6fff) AM_RAMBANK("bank7")
1591   AM_RANGE(0x7000,0x7fff) AM_RAMBANK("bank8")
1592   AM_RANGE(0x8000,0x8fff) AM_RAMBANK("bank9")
1593   AM_RANGE(0x9000,0x9fff) AM_RAMBANK("bank10")
1594   AM_RANGE(0xa000,0xafff) AM_RAMBANK("bank11")
1595   AM_RANGE(0xb000,0xbfff) AM_RAMBANK("bank12")
1596   AM_RANGE(0xc000,0xcfff) AM_RAMBANK("bank13")
1597   AM_RANGE(0xd000,0xdfff) AM_RAMBANK("bank14")
1598   AM_RANGE(0xe000,0xefff) AM_RAMBANK("bank15")
1599   AM_RANGE(0xf000,0xfbff) AM_RAMBANK("bank16")
1610   AM_RANGE(0x0000,0x0fff) AM_DEVREADWRITE("av_bank1", address_map_bank_device, read8, write8)
1611   AM_RANGE(0x1000,0x1fff) AM_DEVREADWRITE("av_bank2", address_map_bank_device, read8, write8)
1612   AM_RANGE(0x2000,0x2fff) AM_DEVREADWRITE("av_bank3", address_map_bank_device, read8, write8)
1613   AM_RANGE(0x3000,0x3fff) AM_DEVREADWRITE("av_bank4", address_map_bank_device, read8, write8)
1614   AM_RANGE(0x4000,0x4fff) AM_DEVREADWRITE("av_bank5", address_map_bank_device, read8, write8)
1615   AM_RANGE(0x5000,0x5fff) AM_DEVREADWRITE("av_bank6", address_map_bank_device, read8, write8)
1616   AM_RANGE(0x6000,0x6fff) AM_DEVREADWRITE("av_bank7", address_map_bank_device, read8, write8)
1617   AM_RANGE(0x7000,0x7fff) AM_DEVREADWRITE("av_bank8", address_map_bank_device, read8, write8)
1618   AM_RANGE(0x8000,0x8fff) AM_DEVREADWRITE("av_bank9", address_map_bank_device, read8, write8)
1619   AM_RANGE(0x9000,0x9fff) AM_DEVREADWRITE("av_bank10", address_map_bank_device, read8, write8)
1620   AM_RANGE(0xa000,0xafff) AM_DEVREADWRITE("av_bank11", address_map_bank_device, read8, write8)
1621   AM_RANGE(0xb000,0xbfff) AM_DEVREADWRITE("av_bank12", address_map_bank_device, read8, write8)
1622   AM_RANGE(0xc000,0xcfff) AM_DEVREADWRITE("av_bank13", address_map_bank_device, read8, write8)
1623   AM_RANGE(0xd000,0xdfff) AM_DEVREADWRITE("av_bank14", address_map_bank_device, read8, write8)
1624   AM_RANGE(0xe000,0xefff) AM_DEVREADWRITE("av_bank15", address_map_bank_device, read8, write8)
1625   AM_RANGE(0xf000,0xfbff) AM_DEVREADWRITE("av_bank16", address_map_bank_device, read8, write8)
16001626   AM_RANGE(0xfc00,0xfc7f) AM_RAM
16011627   AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w)
16021628   // I/O space (FD00-FDFF)
r31730r31731
16571683   AM_RANGE(0xe000,0xffff) AM_ROMBANK("bank21")
16581684ADDRESS_MAP_END
16591685
1686static ADDRESS_MAP_START( fm7_banked_mem, AS_PROGRAM, 8, fm7_state)
1687   // Extended RAM
1688   AM_RANGE(0x00000,0x0ffff) AM_RAM AM_REGION("maincpu",0x00000)
1689
1690   // Sub CPU space
1691   AM_RANGE(0x10000,0x1bfff) AM_READWRITE(fm7_vram_r,fm7_vram_w) // VRAM
1692   AM_RANGE(0x1c000,0x1cfff) AM_RAM AM_REGION("maincpu",0x1c000) // Console RAM
1693   AM_RANGE(0x1d000,0x1d37f) AM_RAM AM_REGION("maincpu",0x1d000) // Work RAM
1694   AM_RANGE(0x1d380,0x1d3ff) AM_RAM AM_SHARE("shared_ram")
1695   // I/O space (D400-D4FF)
1696   AM_RANGE(0x1d400,0x1d401) AM_READ(fm7_sub_keyboard_r)
1697   AM_RANGE(0x1d402,0x1d402) AM_READ(fm7_cancel_ack)
1698   AM_RANGE(0x1d403,0x1d403) AM_READ(fm7_sub_beeper_r)
1699   AM_RANGE(0x1d404,0x1d404) AM_READ(fm7_attn_irq_r)
1700   AM_RANGE(0x1d408,0x1d408) AM_READWRITE(fm7_crt_r,fm7_crt_w)
1701   AM_RANGE(0x1d409,0x1d409) AM_READWRITE(fm7_vram_access_r,fm7_vram_access_w)
1702   AM_RANGE(0x1d40a,0x1d40a) AM_READWRITE(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1703   AM_RANGE(0x1d40e,0x1d40f) AM_WRITE(fm7_vram_offset_w)
1704   AM_RANGE(0x1d410,0x1d42b) AM_READWRITE(fm77av_alu_r, fm77av_alu_w)
1705   AM_RANGE(0x1d430,0x1d430) AM_READWRITE(fm77av_video_flags_r,fm77av_video_flags_w)
1706   AM_RANGE(0x1d431,0x1d432) AM_READWRITE(fm77av_key_encoder_r,fm77av_key_encoder_w)
1707   AM_RANGE(0x1d500,0x1d7ff) AM_RAM AM_REGION("maincpu",0x1d500) // Work RAM
1708   AM_RANGE(0x1d800,0x1dfff) AM_ROMBANK("bank20")
1709   AM_RANGE(0x1e000,0x1ffff) AM_ROMBANK("bank21")
1710
1711   // more RAM?
1712   AM_RANGE(0x20000,0x2ffff) AM_RAM AM_REGION("maincpu",0x20000)
1713
1714   // Main CPU space
1715   AM_RANGE(0x30000,0x35fff) AM_RAM AM_REGION("maincpu",0x30000)
1716   AM_RANGE(0x36000,0x37fff) AM_READ_BANK("init_bank_r") AM_WRITE_BANK("init_bank_w")
1717   AM_RANGE(0x38000,0x3fbff) AM_READ_BANK("fbasic_bank_r") AM_WRITE_BANK("fbasic_bank_w")
1718   AM_RANGE(0x3fc00,0x3ffff) AM_RAM AM_REGION("maincpu",0x3fc00)
1719
1720ADDRESS_MAP_END
1721
16601722/* Input ports */
16611723INPUT_PORTS_START( fm7_keyboard )
16621724   PORT_START("key1")
r31730r31731
19532015   if(m_type == SYS_FM77AV || m_type == SYS_FM77AV40EX || m_type == SYS_FM11)
19542016   {
19552017      fm7_mmr_refresh(m_maincpu->space(AS_PROGRAM));
2018      membank("fbasic_bank_w")->set_base(RAM+0x38000);
2019      membank("init_bank_w")->set_base(RAM+0x36000);
19562020   }
19572021   if(m_type == SYS_FM11)
19582022   {
r31730r31731
19702034   "floppy_5_25"
19712035};
19722036
2037#define MCFG_ADDRESS_BANK(tag) \
2038MCFG_DEVICE_ADD(tag, ADDRESS_MAP_BANK, 0) \
2039MCFG_DEVICE_PROGRAM_MAP(fm7_banked_mem) \
2040MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) \
2041MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) \
2042MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
2043
2044
19732045static MACHINE_CONFIG_START( fm7, fm7_state )
19742046   /* basic machine hardware */
19752047   MCFG_CPU_ADD("maincpu", M6809, XTAL_2MHz)
r31730r31731
21082180
21092181   MCFG_MACHINE_START_OVERRIDE(fm7_state,fm77av)
21102182
2183   MCFG_ADDRESS_BANK("av_bank1")
2184   MCFG_ADDRESS_BANK("av_bank2")
2185   MCFG_ADDRESS_BANK("av_bank3")
2186   MCFG_ADDRESS_BANK("av_bank4")
2187   MCFG_ADDRESS_BANK("av_bank5")
2188   MCFG_ADDRESS_BANK("av_bank6")
2189   MCFG_ADDRESS_BANK("av_bank7")
2190   MCFG_ADDRESS_BANK("av_bank8")
2191   MCFG_ADDRESS_BANK("av_bank9")
2192   MCFG_ADDRESS_BANK("av_bank10")
2193   MCFG_ADDRESS_BANK("av_bank11")
2194   MCFG_ADDRESS_BANK("av_bank12")
2195   MCFG_ADDRESS_BANK("av_bank13")
2196   MCFG_ADDRESS_BANK("av_bank14")
2197   MCFG_ADDRESS_BANK("av_bank15")
2198   MCFG_ADDRESS_BANK("av_bank16")
2199
21112200   /* video hardware */
21122201   MCFG_SCREEN_ADD("screen", RASTER)
21132202   MCFG_SCREEN_REFRESH_RATE(60)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team