trunk/src/mess/includes/fm7.h
| r31730 | r31731 | |
| 4 | 4 | #include "sound/beep.h" |
| 5 | 5 | #include "sound/2203intf.h" |
| 6 | 6 | #include "machine/wd17xx.h" |
| 7 | #include "machine/bankdev.h" |
| 7 | 8 | |
| 8 | 9 | /* |
| 9 | 10 | * |
| r31730 | r31731 | |
| 141 | 142 | m_joy1(*this, "joy1"), |
| 142 | 143 | m_joy2(*this, "joy2"), |
| 143 | 144 | 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") |
| 145 | 162 | { |
| 146 | 163 | } |
| 147 | 164 | |
| r31730 | r31731 | |
| 342 | 359 | required_ioport m_dsw; |
| 343 | 360 | required_device<palette_device> m_palette; |
| 344 | 361 | |
| 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 | |
| 345 | 379 | protected: |
| 346 | 380 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 347 | 381 | }; |
trunk/src/mess/drivers/fm7.c
| r31730 | r31731 | |
| 31 | 31 | - Keyboard repeat is not implemented |
| 32 | 32 | - Optional Kanji ROM use is not implemented |
| 33 | 33 | - 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) |
| 35 | 35 | |
| 36 | 36 | ************************************************************************************************/ |
| 37 | 37 | |
| r31730 | r31731 | |
| 48 | 48 | #include "formats/fm7_cas.h" |
| 49 | 49 | #include "imagedev/flopdrv.h" |
| 50 | 50 | #include "bus/centronics/dsjoy.h" |
| 51 | | |
| 52 | 51 | #include "includes/fm7.h" |
| 53 | 52 | |
| 54 | 53 | /* key scancode conversion table |
| r31730 | r31731 | |
| 997 | 996 | |
| 998 | 997 | void fm7_state::fm7_update_bank(address_space & space, int bank, UINT8 physical) |
| 999 | 998 | { |
| 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(); |
| 1001 | 1004 | UINT16 size = 0xfff; |
| 1002 | 1005 | char bank_name[10]; |
| 1003 | 1006 | |
| r31730 | r31731 | |
| 1095 | 1098 | } |
| 1096 | 1099 | space.install_readwrite_bank(bank*0x1000,(bank*0x1000)+size,bank_name); |
| 1097 | 1100 | membank(bank_name)->set_base(RAM+(physical<<12)); |
| 1101 | */ |
| 1098 | 1102 | } |
| 1099 | 1103 | |
| 1100 | 1104 | void fm7_state::fm7_mmr_refresh(address_space& space) |
| r31730 | r31731 | |
| 1127 | 1131 | membank("bank24")->set_base(RAM+window_addr); |
| 1128 | 1132 | } |
| 1129 | 1133 | } |
| 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 | } |
| 1130 | 1156 | } |
| 1131 | 1157 | |
| 1132 | 1158 | WRITE8_MEMBER(fm7_state::fm7_mmr_w) |
| r31730 | r31731 | |
| 1581 | 1607 | ADDRESS_MAP_END |
| 1582 | 1608 | |
| 1583 | 1609 | static 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) |
| 1600 | 1626 | AM_RANGE(0xfc00,0xfc7f) AM_RAM |
| 1601 | 1627 | AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w) |
| 1602 | 1628 | // I/O space (FD00-FDFF) |
| r31730 | r31731 | |
| 1657 | 1683 | AM_RANGE(0xe000,0xffff) AM_ROMBANK("bank21") |
| 1658 | 1684 | ADDRESS_MAP_END |
| 1659 | 1685 | |
| 1686 | static 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 | |
| 1720 | ADDRESS_MAP_END |
| 1721 | |
| 1660 | 1722 | /* Input ports */ |
| 1661 | 1723 | INPUT_PORTS_START( fm7_keyboard ) |
| 1662 | 1724 | PORT_START("key1") |
| r31730 | r31731 | |
| 1953 | 2015 | if(m_type == SYS_FM77AV || m_type == SYS_FM77AV40EX || m_type == SYS_FM11) |
| 1954 | 2016 | { |
| 1955 | 2017 | 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); |
| 1956 | 2020 | } |
| 1957 | 2021 | if(m_type == SYS_FM11) |
| 1958 | 2022 | { |
| r31730 | r31731 | |
| 1970 | 2034 | "floppy_5_25" |
| 1971 | 2035 | }; |
| 1972 | 2036 | |
| 2037 | #define MCFG_ADDRESS_BANK(tag) \ |
| 2038 | MCFG_DEVICE_ADD(tag, ADDRESS_MAP_BANK, 0) \ |
| 2039 | MCFG_DEVICE_PROGRAM_MAP(fm7_banked_mem) \ |
| 2040 | MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) \ |
| 2041 | MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) \ |
| 2042 | MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000) |
| 2043 | |
| 2044 | |
| 1973 | 2045 | static MACHINE_CONFIG_START( fm7, fm7_state ) |
| 1974 | 2046 | /* basic machine hardware */ |
| 1975 | 2047 | MCFG_CPU_ADD("maincpu", M6809, XTAL_2MHz) |
| r31730 | r31731 | |
| 2108 | 2180 | |
| 2109 | 2181 | MCFG_MACHINE_START_OVERRIDE(fm7_state,fm77av) |
| 2110 | 2182 | |
| 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 | |
| 2111 | 2200 | /* video hardware */ |
| 2112 | 2201 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2113 | 2202 | MCFG_SCREEN_REFRESH_RATE(60) |