mos6530n: 6530 irq pin (shared with PB7) is active low,

chessmate: use mos6530_new_device
This commit is contained in:
hap 2023-07-17 02:32:59 +02:00
parent ee5a323b28
commit 82d3b67a19
4 changed files with 27 additions and 32 deletions

View File

@ -485,7 +485,7 @@ void c2040_device::add_common_devices(machine_config &config)
m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c2040_fdc_device::drv_sel_w)); m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c2040_fdc_device::drv_sel_w));
m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c2040_fdc_device::ds0_w)); m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c2040_fdc_device::ds0_w));
m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c2040_fdc_device::ds1_w)); m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c2040_fdc_device::ds1_w));
m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE).invert();
m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c2040_fdc_device::wps_r)); m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c2040_fdc_device::wps_r));
C2040_FDC(config, m_fdc, XTAL(16'000'000)); C2040_FDC(config, m_fdc, XTAL(16'000'000));

View File

@ -564,7 +564,7 @@ void c8050_device::add_common_devices(machine_config &config)
m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w)); m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w));
m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r)); m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r));
m_miot->pb_rd_callback<6>().set_constant(1); // SINGLE SIDED m_miot->pb_rd_callback<6>().set_constant(1); // SINGLE SIDED
m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE).invert();
C8050_FDC(config, m_fdc, XTAL(12'000'000)/2); C8050_FDC(config, m_fdc, XTAL(12'000'000)/2);
m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7)); m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7));

View File

@ -2,8 +2,10 @@
// copyright-holders:Curt Coder // copyright-holders:Curt Coder
/********************************************************************** /**********************************************************************
MOS Technology 6530 Memory, I/O, Timer Array emulation MOS Technology 6530 MIOT (Memory, I/O, Timer Array)
MOS Technology 6532 RAM, I/O, Timer Array emulation Rockwell calls it RRIOT: ROM, RAM, I/O, Timer
MOS Technology 6532 RIOT (RAM, I/O, Timer Array)
**********************************************************************/ **********************************************************************/
@ -105,7 +107,7 @@ mos6530_device_base::mos6530_device_base(const machine_config &mconfig, device_t
m_pb_out(0), m_pb_out(0),
m_pb_ddr(0), m_pb_ddr(0),
m_ie_timer(false), m_ie_timer(false),
m_irq_timer(true), m_irq_timer(false),
m_ie_edge(false), m_ie_edge(false),
m_irq_edge(false), m_irq_edge(false),
m_timershift(0), m_timershift(0),
@ -228,10 +230,11 @@ void mos6530_new_device::update_pb()
uint8_t data = (m_pb_out & m_pb_ddr) | (m_pb_ddr ^ 0xff); uint8_t data = (m_pb_out & m_pb_ddr) | (m_pb_ddr ^ 0xff);
if (m_ie_timer) { if (m_ie_timer) {
// active low!
if (m_irq_timer) if (m_irq_timer)
data |= IRQ_TIMER;
else
data &= ~IRQ_TIMER; data &= ~IRQ_TIMER;
else
data |= IRQ_TIMER;
} }
if (m_out8_pb_cb.isunset()) { if (m_out8_pb_cb.isunset()) {
@ -505,8 +508,7 @@ uint8_t mos6530_device_base::timer_r(bool ie)
{ {
uint8_t data = get_timer(); uint8_t data = get_timer();
if (!machine().side_effects_disabled()) if (!machine().side_effects_disabled()) {
{
timer_irq_enable(ie); timer_irq_enable(ie);
LOGTIMER("%s %s %s Timer read %02x IE %u\n", machine().time().as_string(), machine().describe_context(), name(), data, m_ie_timer ? 1 : 0); LOGTIMER("%s %s %s Timer read %02x IE %u\n", machine().time().as_string(), machine().describe_context(), name(), data, m_ie_timer ? 1 : 0);

View File

@ -45,7 +45,7 @@ MOS MPS 6332 005 2179
#include "emu.h" #include "emu.h"
#include "cpu/m6502/m6504.h" #include "cpu/m6502/m6504.h"
#include "machine/mos6530.h" #include "machine/mos6530n.h"
#include "sound/dac.h" #include "sound/dac.h"
#include "video/pwm.h" #include "video/pwm.h"
#include "speaker.h" #include "speaker.h"
@ -83,7 +83,7 @@ protected:
private: private:
// devices/pointers // devices/pointers
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<mos6530_device> m_miot; required_device<mos6530_new_device> m_miot;
required_device<pwm_display_device> m_display; required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac; required_device<dac_bit_interface> m_dac;
optional_ioport_array<5> m_inputs; optional_ioport_array<5> m_inputs;
@ -179,10 +179,10 @@ u8 chmate_state::input_r()
void chmate_state::main_map(address_map &map) void chmate_state::main_map(address_map &map)
{ {
map.global_mask(0x1fff); map.global_mask(0x1fff);
map(0x0000, 0x00ff).mirror(0x100).ram(); map(0x0000, 0x00ff).mirror(0x0100).ram();
map(0x0b00, 0x0b0f).rw(m_miot, FUNC(mos6530_device::read), FUNC(mos6530_device::write)); map(0x0b00, 0x0b0f).mirror(0x0030).m(m_miot, FUNC(mos6530_new_device::io_map));
map(0x0b80, 0x0bbf).ram(); // 6530 RAM map(0x0b80, 0x0bbf).m(m_miot, FUNC(mos6530_new_device::ram_map));
map(0x0c00, 0x0fff).rom(); // 6530 ROM map(0x0c00, 0x0fff).m(m_miot, FUNC(mos6530_new_device::rom_map));
map(0x1000, 0x1fff).rom(); map(0x1000, 0x1fff).rom();
} }
@ -268,10 +268,10 @@ void chmate_state::chmate(machine_config &config)
M6504(config, m_maincpu, 8_MHz_XTAL/8); M6504(config, m_maincpu, 8_MHz_XTAL/8);
m_maincpu->set_addrmap(AS_PROGRAM, &chmate_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &chmate_state::main_map);
MOS6530(config, m_miot, 8_MHz_XTAL/8); MOS6530_NEW(config, m_miot, 8_MHz_XTAL/8);
m_miot->in_pa_callback().set(FUNC(chmate_state::input_r)); m_miot->pa_rd_callback().set(FUNC(chmate_state::input_r));
m_miot->out_pa_callback().set(FUNC(chmate_state::digit_w)); m_miot->pa_wr_callback().set(FUNC(chmate_state::digit_w));
m_miot->out_pb_callback().set(FUNC(chmate_state::control_w)); m_miot->pb_wr_callback().set(FUNC(chmate_state::control_w));
// video hardware // video hardware
PWM_DISPLAY(config, m_display).set_size(4+1, 8); PWM_DISPLAY(config, m_display).set_size(4+1, 8);
@ -302,22 +302,15 @@ void chmate_state::mk2a(machine_config &config)
*******************************************************************************/ *******************************************************************************/
ROM_START( chmate ) ROM_START( chmate )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD("6530_024", 0x0c00, 0x0400, CRC(4f28c443) SHA1(e33f8b7f38e54d7a6e0f0763f2328cc12cb0eade) )
ROM_LOAD("6332_005", 0x1000, 0x1000, CRC(6f10991b) SHA1(90cdc5a15d9ad813ad20410f21081c6e3e481812) ) ROM_LOAD("6332_005", 0x1000, 0x1000, CRC(6f10991b) SHA1(90cdc5a15d9ad813ad20410f21081c6e3e481812) )
ROM_REGION( 0x400, "miot", 0 )
ROM_LOAD("6530_024", 0x0000, 0x0400, CRC(4f28c443) SHA1(e33f8b7f38e54d7a6e0f0763f2328cc12cb0eade) )
ROM_END ROM_END
ROM_START( ccmk2 ) #define rom_ccmk2 rom_chmate
ROM_REGION( 0x10000, "maincpu", 0 ) #define rom_ccmk2a rom_chmate
ROM_LOAD("6530_024", 0x0c00, 0x0400, CRC(4f28c443) SHA1(e33f8b7f38e54d7a6e0f0763f2328cc12cb0eade) )
ROM_LOAD("6332_005", 0x1000, 0x1000, CRC(6f10991b) SHA1(90cdc5a15d9ad813ad20410f21081c6e3e481812) )
ROM_END
ROM_START( ccmk2a )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("6530_024", 0x0c00, 0x0400, CRC(4f28c443) SHA1(e33f8b7f38e54d7a6e0f0763f2328cc12cb0eade) )
ROM_LOAD("6332_005", 0x1000, 0x1000, CRC(6f10991b) SHA1(90cdc5a15d9ad813ad20410f21081c6e3e481812) )
ROM_END
} // anonymous namespace } // anonymous namespace