diff options
author | 2020-07-25 13:42:10 -0400 | |
---|---|---|
committer | 2020-07-25 13:42:10 -0400 | |
commit | cb0ad36e92cd48751a50e98d64d6eb246d7fa2ac (patch) | |
tree | 12c05481283cb0e285857e6d3914498cf0d6d43c | |
parent | 36caa9da9698065eb8ada1c76ec5d40be2d3b91c (diff) |
kl5c80a12: Internalize internal RAM and clock divider; update notes
-rw-r--r-- | src/devices/cpu/z80/kl5c80a12.cpp | 39 | ||||
-rw-r--r-- | src/devices/cpu/z80/kl5c80a12.h | 29 | ||||
-rw-r--r-- | src/mame/drivers/ddenlovr.cpp | 8 | ||||
-rw-r--r-- | src/mame/drivers/sigmab98.cpp | 27 |
4 files changed, 57 insertions, 46 deletions
diff --git a/src/devices/cpu/z80/kl5c80a12.cpp b/src/devices/cpu/z80/kl5c80a12.cpp index 45cec5e3c67..6e052b0a216 100644 --- a/src/devices/cpu/z80/kl5c80a12.cpp +++ b/src/devices/cpu/z80/kl5c80a12.cpp @@ -1,28 +1,35 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood,AJR +// copyright-holders:AJR /*************************************************************************** - Kawasaki LSI - KL5C80A12 CPU (KL5C80A12CFP on hng64.c) + Kawasaki Steel (Kawatetsu) KL5C80A12 CPU - Binary compatible with Z80, significantly faster opcode timings, operating at up to 10Mhz - Timers / Counters, Parallel / Serial ports/ MMU, Interrupt Controller + This is based on KC82, an MMU-enhanced version of KC80 (KL5C8400), + Kawasaki's Z80-compatible core with an internal 16-bit architecture + and significantly faster opcode timings, operating at up to 10 MHz + (CLK = XIN/2). - (is this different enough to need it's own core?) - (todo: everything except MMU) + Important functional blocks: + — MMU + — USART (KP51) (unemulated) + — 16-bit timer/counters (KP64, KP63) (unemulated) + — 16-level interrupt controller (KP69) (unemulated) + — Parallel ports (KP65, KP66) (unemulated) + — 512-byte high-speed RAM + — External bus interface unit (unemulated) ***************************************************************************/ #include "emu.h" #include "kl5c80a12.h" -DEFINE_DEVICE_TYPE(KL5C80A12, kl5c80a12_device, "kl5c80a12", "Kawasaki LSI KL5C80A12") +DEFINE_DEVICE_TYPE(KL5C80A12, kl5c80a12_device, "kl5c80a12", "Kawasaki Steel KL5C80A12") kl5c80a12_device::kl5c80a12_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : z80_device(mconfig, KL5C80A12, tag, owner, clock) - , m_program_config("program", ENDIANNESS_LITTLE, 8, 20, 0, 16, 10) - , m_opcodes_config("opcodes", ENDIANNESS_LITTLE, 8, 20, 0, 16, 10) + , m_program_config("program", ENDIANNESS_LITTLE, 8, 20, 0, 16, 10, address_map_constructor(FUNC(kl5c80a12_device::internal_ram), this)) + , m_opcodes_config("opcodes", ENDIANNESS_LITTLE, 8, 20, 0, 16, 10, address_map_constructor(FUNC(kl5c80a12_device::internal_ram), this)) , m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0, address_map_constructor(FUNC(kl5c80a12_device::internal_io), this)) { std::fill_n(&m_mmu_a[0], 4, 0); @@ -32,6 +39,16 @@ kl5c80a12_device::kl5c80a12_device(const machine_config &mconfig, const char *ta //------------------------------------------------- +// internal_ram - map for high-speed internal RAM +//------------------------------------------------- + +void kl5c80a12_device::internal_ram(address_map &map) +{ + map(0xffe00, 0xfffff).ram().share("ram"); +} + + +//------------------------------------------------- // internal_io - map for internal I/O registers //------------------------------------------------- @@ -138,7 +155,7 @@ void kl5c80a12_device::mmu_remap_pages() { int n = 4; u32 base = 0xf0000; // A4 is fixed - for (int i = 0x3f; i >= 0; --i) + for (u8 i = 0x3f; i != 0; --i) { while (n != 0 && m_mmu_b[n] >= i) { diff --git a/src/devices/cpu/z80/kl5c80a12.h b/src/devices/cpu/z80/kl5c80a12.h index 909e0f5568c..511c1214061 100644 --- a/src/devices/cpu/z80/kl5c80a12.h +++ b/src/devices/cpu/z80/kl5c80a12.h @@ -1,15 +1,8 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood,AJR +// copyright-holders:AJR /*************************************************************************** - Kawasaki LSI - KL5C80A12 CPU (KL5C80A12CFP on hng64.c) - - Binary compatible with Z80, significantly faster opcode timings, operating at up to 10Mhz - Timers / Counters, Parallel / Serial ports/ MMU, Interrupt Controller - - (is this different enough to need it's own core?) - (todo: everything, some code currently lives in machine/hng64_net.c but not much) + Kawasaki Steel (Kawatetsu) KL5C80A12 CPU ***************************************************************************/ @@ -19,17 +12,11 @@ #pragma once #include "z80.h" -#include "machine/z80ctc.h" - - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** class kl5c80a12_device : public z80_device { @@ -49,6 +36,10 @@ protected: virtual void device_reset() override; virtual void device_post_load() override; + // device_execute_interface overrides + virtual u64 execute_clocks_to_cycles(u64 clocks) const noexcept override { return (clocks + 2 - 1) / 2; } + virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); } + // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; @@ -61,7 +52,9 @@ protected: virtual u16 arg16() override; private: + void internal_ram(address_map &map); void internal_io(address_map &map); + void mmu_remap_pages(); u8 mmu_r(offs_t offset); void mmu_w(offs_t offset, u8 data); diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index 3abf6bf1f34..72b41323eae 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -10023,7 +10023,7 @@ WRITE_LINE_MEMBER(ddenlovr_state::hanakanz_rtc_irq) void ddenlovr_state::hanakanz(machine_config &config) { /* basic machine hardware */ - KL5C80A12(config, m_maincpu, 8000000); // KL5C80A12 + KL5C80A12(config, m_maincpu, 20'000'000); // KL5C80A12 m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::hanakanz_portmap); @@ -10068,7 +10068,7 @@ void ddenlovr_state::hkagerou(machine_config &config) void ddenlovr_state::kotbinyo(machine_config &config) { /* basic machine hardware */ - KL5C80A12(config, m_maincpu, XTAL(20'000'000) / 2); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !! + KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !! m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::kotbinyo_portmap); @@ -10471,7 +10471,7 @@ void ddenlovr_state::hparadis(machine_config &config) void ddenlovr_state::jongtei(machine_config &config) { /* basic machine hardware */ - KL5C80A12(config, m_maincpu, XTAL(20'000'000) / 2); // KL5C80A12 + KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // KL5C80A12 m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::jongtei_portmap); @@ -10685,7 +10685,7 @@ void ddenlovr_state::seljan2(machine_config &config) void ddenlovr_state::daimyojn(machine_config &config) { /* basic machine hardware */ - KL5C80A12(config, m_maincpu, XTAL(20'000'000) / 2); + KL5C80A12(config, m_maincpu, XTAL(20'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &ddenlovr_state::hanakanz_map); m_maincpu->set_addrmap(AS_IO, &ddenlovr_state::daimyojn_portmap); diff --git a/src/mame/drivers/sigmab98.cpp b/src/mame/drivers/sigmab98.cpp index fbd2694d9c2..ad2dca8c3e1 100644 --- a/src/mame/drivers/sigmab98.cpp +++ b/src/mame/drivers/sigmab98.cpp @@ -38,7 +38,7 @@ Dumped games: ROMs: Video: Sammy Kids Medal Series -CPU : Kawasaki KL5C80A120FP (Z80 Compatible High Speed Microcontroller) +CPU : Kawasaki KL5C80A12CFP (Z80 Compatible High Speed Microcontroller) Video : TAXAN KY-3211 Sound : OKI M9810B NVRAM : 93C46 and battery backed RAM @@ -1362,7 +1362,6 @@ void sigmab98_state::animalc_map(address_map &map) map(0x73000, 0x73021).rw(FUNC(sigmab98_state::vregs_r), FUNC(sigmab98_state::vregs_w)).share("vregs"); map(0x73011, 0x73011).nopw(); // IRQ Enable? Screen disable? map(0x73013, 0x73013).rw(FUNC(sigmab98_state::vblank_r), FUNC(sigmab98_state::vblank_w)); // IRQ Ack? - map(0xffe00, 0xfffff).ram(); // High speed internal RAM } void sigmab98_state::animalc_io(address_map &map) @@ -1393,7 +1392,6 @@ void sigmab98_state::gocowboy_map(address_map &map) map(0x72000, 0x721ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x72800, 0x7287f).ram().share("vtable"); map(0x73000, 0x73021).rw(FUNC(sigmab98_state::vregs_r), FUNC(sigmab98_state::vregs_w)).share("vregs"); - map(0xffe00, 0xfffff).ram(); // High speed internal RAM } @@ -1474,7 +1472,6 @@ void sigmab98_state::haekaka_map(address_map &map) map(0x72800, 0x7287f).ram().share("vtable"); map(0x73000, 0x73021).rw(FUNC(sigmab98_state::vregs_r), FUNC(sigmab98_state::vregs_w)).share("vregs"); map(0x73013, 0x73013).r(FUNC(sigmab98_state::haekaka_vblank_r)); - map(0xffe00, 0xfffff).ram(); // High speed internal RAM } void sigmab98_state::haekaka_io(address_map &map) @@ -1507,7 +1504,6 @@ void sigmab98_state::itazuram_map(address_map &map) map(0x73000, 0x73021).rw(FUNC(sigmab98_state::vregs_r), FUNC(sigmab98_state::vregs_w)).share("vregs"); map(0x73011, 0x73011).nopw(); // IRQ Enable? Screen disable? map(0x73013, 0x73013).r(FUNC(sigmab98_state::haekaka_vblank_r)).nopw(); // IRQ Ack? - map(0xffe00, 0xfffff).ram(); // High speed internal RAM } void sigmab98_state::itazuram_io(address_map &map) @@ -1549,7 +1545,6 @@ void sigmab98_state::tdoboon_map(address_map &map) map(0x72800, 0x7287f).ram().share("vtable"); map(0x73000, 0x73021).rw(FUNC(sigmab98_state::vregs_r), FUNC(sigmab98_state::vregs_w)).share("vregs"); map(0x73013, 0x73013).r(FUNC(sigmab98_state::haekaka_vblank_r)); - map(0xffe00, 0xfffff).ram(); // High speed internal RAM } void sigmab98_state::tdoboon_io(address_map &map) @@ -2018,7 +2013,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(sigmab98_state::sammymdl_irq) void sigmab98_state::sammymdl(machine_config &config) { - KL5C80A12(config, m_maincpu, XTAL(20'000'000) / 2); // !! KL5C80A120FP @ 10MHz? (actually 4 times faster than Z80) !! + KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !! m_maincpu->set_addrmap(AS_PROGRAM, &sigmab98_state::animalc_map); m_maincpu->set_addrmap(AS_IO, &sigmab98_state::animalc_io); @@ -2535,15 +2530,16 @@ void lufykzku_state::init_lufykzku() CPU: - KAWASAKI KL5C80A120FP (@U1) - Z80 Compatible High Speed Microcontroller + KAWASAKI KL5C80A12CFP (@U1) - Z80 Compatible High Speed Microcontroller XTAL 20 MHz (@X1) MX29F040TC-12 VM1211L01 (@U2) - 4M-bit [512kx8] CMOS Equal Sector Flash Memory BSI BS62LV256SC-70 (@U4) - Very Low Power/Voltage CMOS SRAM 32K X 8 bit + (or Toshiba TC55257DFL-70L) Video: - TAXAN KY-3211 ? (@U17) - M548262-60 (@U18) - 262144-Word x 8-Bit Multiport DRAM + TAXAN KY-3211 (@U17) + OKI M548262-60 (@U18) - 262144-Word x 8-Bit Multiport DRAM XTAL 27 MHz (@X3) Sound: @@ -2556,13 +2552,18 @@ void lufykzku_state::init_lufykzku() Other: Xilinx XC9536 VM1212F01 (@U5) - In-System Programmable CPLD - MX29F0??C (@U3) - Empty 32 Pin ROM Socket + MX29F0?TC (@U3) - Empty 32 Pin DIP Socket M5295A (@U8) - Watchdog Timer (Near CUT-DEBUG MODE Jumper) - M93C46MN6T (@U11?) - Serial EEPROM + M93C46MN6T (@U6) - Serial EEPROM + RTC8564 (@U7) - not populated + SN75C1168 (@U10) - Dual RS-422 Transceiver Cell Battery (@BAT) 25 Pin Edge Connector 56 Pin Cartridge Connector - 6 Pin Connector + 6 Pin Connector - +5V (1), GND (2), TCLK (3), TDO (4), TDI (5), TMS (6) + + On Go Go Cowboy, U2 and U10 are unpopulated, but U3 is occupied by a + ST M27C4001-10F1 EPROM. ***************************************************************************/ |