scn2674/scn2672: Remove MCFG macros (nw)

This commit is contained in:
AJR 2018-09-08 10:05:06 -04:00
parent 80adcb6f16
commit 4a4898a6b2
13 changed files with 203 additions and 196 deletions

View File

@ -6,27 +6,8 @@
#pragma once
#define MCFG_SCN2672_INTR_CALLBACK(_intr) \
downcast<scn2672_device &>(*device).set_intr_callback(DEVCB_##_intr);
#define MCFG_SCN2672_CHARACTER_WIDTH(_value) \
downcast<scn2672_device &>(*device).set_character_width(_value);
#define MCFG_SCN2672_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \
downcast<scn2672_device &>(*device).set_display_callback(scn2672_device::draw_character_delegate(&_class::_method, #_class "::" #_method, this));
#define SCN2672_DRAW_CHARACTER_MEMBER(_name) void _name(bitmap_rgb32 &bitmap, int x, int y, uint8_t linecount, uint8_t charcode, uint8_t attrcode, uint16_t address, bool cursor, bool dw, bool lg, bool ul, bool blink)
#define MCFG_SCN2674_INTR_CALLBACK(_intr) \
downcast<scn2674_device &>(*device).set_intr_callback(DEVCB_##_intr);
#define MCFG_SCN2674_CHARACTER_WIDTH(_value) \
downcast<scn2674_device &>(*device).set_character_width(_value);
#define MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \
downcast<scn2674_device &>(*device).set_display_callback(scn2674_device::draw_character_delegate(&_class::_method, #_class "::" #_method, this));
#define SCN2674_DRAW_CHARACTER_MEMBER(_name) void _name(bitmap_rgb32 &bitmap, int x, int y, uint8_t linecount, uint8_t charcode, uint8_t attrcode, uint16_t address, bool cursor, bool dw, bool lg, bool ul, bool blink)
@ -40,9 +21,22 @@ public:
typedef device_delegate<void (bitmap_rgb32 &bitmap, int x, int y, uint8_t linecount, uint8_t charcode, uint8_t attrcode, uint16_t address, bool cursor, bool dw, bool lg, bool ul, bool blink)> draw_character_delegate;
// static configuration
template <class Object> devcb_base &set_intr_callback(Object &&cb) { return m_intr_cb.set_callback(std::forward<Object>(cb)); }
auto intr_callback() { return m_intr_cb.bind(); }
void set_character_width(int value) { m_hpixels_per_column = value; }
template <typename Object> void set_display_callback(Object &&cb) { m_display_cb = std::forward<Object>(cb); }
template <class FunctionClass>
void set_display_callback(void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint16_t, bool, bool, bool, bool, bool), const char *name)
{
set_display_callback(draw_character_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
}
template <class FunctionClass>
void set_display_callback(const char *devname, void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint16_t, bool, bool, bool, bool, bool), const char *name)
{
set_display_callback(draw_character_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
}
void set_display_callback(draw_character_delegate callback)
{
m_display_cb = callback;
}
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );

View File

@ -58,24 +58,25 @@ static INPUT_PORTS_START(ampex210p)
INPUT_PORTS_END
MACHINE_CONFIG_START(ampex210_state::ampex210p)
MCFG_DEVICE_ADD("maincpu", Z80, 4'000'000)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
void ampex210_state::ampex210p(machine_config &config)
{
Z80(config, m_maincpu, 4'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &ampex210_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &ampex210_state::io_map);
mos6551_device &acia(MOS6551(config, "acia", 1'843'200));
acia.irq_handler().set_inputline("maincpu", INPUT_LINE_IRQ0);
MCFG_DEVICE_ADD("pvtc", SCN2672, 2'178'000)
MCFG_SCN2672_INTR_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_SCN2672_CHARACTER_WIDTH(10)
MCFG_SCN2672_DRAW_CHARACTER_CALLBACK_OWNER(ampex210_state, draw_character)
MCFG_VIDEO_SET_SCREEN("screen")
scn2672_device &pvtc(SCN2672(config, "pvtc", 2'178'000));
pvtc.intr_callback().set_inputline("maincpu", INPUT_LINE_NMI);
pvtc.set_character_width(10);
pvtc.set_display_callback(FUNC(ampex210_state::draw_character));
pvtc.set_screen("screen");
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(21'780'000, 1000, 0, 800, 363, 0, 300) // clock guessed
MCFG_SCREEN_UPDATE_DEVICE("pvtc", scn2672_device, screen_update)
MACHINE_CONFIG_END
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(21'780'000, 1000, 0, 800, 363, 0, 300); // clock guessed
screen.set_screen_update("pvtc", FUNC(scn2672_device::screen_update));
}
ROM_START(ampex210p) // Z80 (+6551,MC2672,3515260-01, 3 xtals, speaker) // 8k ram // amber

View File

@ -42,7 +42,7 @@ private:
void keyboard_map(address_map &map);
void kbd_io_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<i8085a_cpu_device> m_maincpu;
required_device<screen_device> m_screen;
//required_region_ptr<u8> m_p_chargen;
};
@ -106,35 +106,36 @@ static INPUT_PORTS_START( cit220p )
INPUT_PORTS_END
MACHINE_CONFIG_START(cit220_state::cit220p)
MCFG_DEVICE_ADD("maincpu", I8085A, 6000000)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
MCFG_I8085A_SOD(WRITELINE(*this, cit220_state, sod_w))
void cit220_state::cit220p(machine_config &config)
{
I8085A(config, m_maincpu, 6000000);
m_maincpu->set_addrmap(AS_PROGRAM, &cit220_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &cit220_state::io_map);
m_maincpu->out_sod_func().set(FUNC(cit220_state::sod_w));
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(24553200, 1580, 0, 1320, 259, 0, 240) // dot clock guessed
MCFG_SCREEN_UPDATE_DEVICE("avdc", scn2674_device, screen_update)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(24553200, 1580, 0, 1320, 259, 0, 240); // dot clock guessed
m_screen->set_screen_update("avdc", FUNC(scn2674_device::screen_update));
MCFG_DEVICE_ADD("avdc", SCN2674, 24553200 / 10)
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE))
MCFG_SCN2674_CHARACTER_WIDTH(10)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(cit220_state, draw_character)
MCFG_DEVICE_ADDRESS_MAP(0, char_map)
MCFG_DEVICE_ADDRESS_MAP(1, attr_map)
MCFG_VIDEO_SET_SCREEN("screen")
scn2674_device &avdc(SCN2674(config, "avdc", 24553200 / 10));
avdc.intr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
avdc.set_character_width(10);
avdc.set_display_callback(FUNC(cit220_state::draw_character));
avdc.set_addrmap(0, &cit220_state::char_map);
avdc.set_addrmap(1, &cit220_state::attr_map);
avdc.set_screen(m_screen);
scn2681_device &duart(SCN2681(config, "duart", 3686400));
duart.irq_cb().set_inputline("maincpu", I8085_RST55_LINE);
duart.outport_cb().set("usart", FUNC(i8251_device::write_txc)).bit(3); // 9600 baud?
duart.outport_cb().append("usart", FUNC(i8251_device::write_rxc)).bit(3);
MCFG_DEVICE_ADD("usart", I8251, 3000000)
I8251(config, "usart", 3000000);
MCFG_DEVICE_ADD("kbdmcu", I8035, 4608000)
MCFG_DEVICE_PROGRAM_MAP(keyboard_map)
MCFG_DEVICE_IO_MAP(kbd_io_map)
MACHINE_CONFIG_END
mcs48_cpu_device &kbdmcu(I8035(config, "kbdmcu", 4608000));
kbdmcu.set_addrmap(AS_PROGRAM, &cit220_state::keyboard_map);
kbdmcu.set_addrmap(AS_IO, &cit220_state::kbd_io_map);
}
ROM_START( cit220p )

View File

@ -94,40 +94,42 @@ void microterm_state::mt5510_io_map(address_map &map)
static INPUT_PORTS_START( microterm )
INPUT_PORTS_END
MACHINE_CONFIG_START(microterm_state::mt420)
MCFG_DEVICE_ADD("maincpu", Z80, 4'000'000)
MCFG_DEVICE_PROGRAM_MAP(mt420_mem_map)
MCFG_DEVICE_IO_MAP(mt420_io_map)
void microterm_state::mt420(machine_config &config)
{
Z80(config, m_maincpu, 4'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &microterm_state::mt420_mem_map);
m_maincpu->set_addrmap(AS_IO, &microterm_state::mt420_io_map);
scn2681_device &duart(SCN2681(config, "duart", XTAL(3'686'400))); // MC2681
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL)); // MC2681
duart.irq_cb().set_inputline(m_maincpu, 0);
duart.outport_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
MC2661(config, "aci", XTAL(3'686'400)); // SCN2641
MC2661(config, "aci", 3.6864_MHz_XTAL); // SCN2641
EEPROM_93C46_16BIT(config, "eeprom").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(9'877'680), 612, 0, 480, 269, 0, 250)
//MCFG_SCREEN_RAW_PARAMS(XTAL(15'300'720), 948, 0, 792, 269, 0, 250)
MCFG_SCREEN_UPDATE_DEVICE("avdc", scn2674_device, screen_update)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(9.87768_MHz_XTAL, 612, 0, 480, 269, 0, 250);
//screen.set_raw(15.30072_MHz_XTAL, 948, 0, 792, 269, 0, 250);
screen.set_screen_update("avdc", FUNC(scn2674_device::screen_update));
MCFG_DEVICE_ADD("avdc", SCN2674, XTAL(9'877'680) / 6)
//MCFG_DEVICE_CLOCK(XTAL(15'300'720) / 6)
MCFG_SCN2674_CHARACTER_WIDTH(6)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(microterm_state, draw_character)
MCFG_DEVICE_ADDRESS_MAP(0, mt420_vram_map)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
scn2674_device &avdc(SCN2674(config, "avdc", 9.87768_MHz_XTAL / 6));
//avdc.set_clock(15.30072_MHz_XTAL / 6);
avdc.set_character_width(6);
avdc.set_display_callback(FUNC(microterm_state::draw_character));
avdc.set_addrmap(0, &microterm_state::mt420_vram_map);
avdc.set_screen("screen");
}
MACHINE_CONFIG_START(microterm_state::mt5510)
MCFG_DEVICE_ADD("maincpu", Z80, XTAL(6'000'000))
MCFG_DEVICE_PROGRAM_MAP(mt5510_mem_map)
MCFG_DEVICE_IO_MAP(mt5510_io_map)
void microterm_state::mt5510(machine_config &config)
{
Z80(config, m_maincpu, 6_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &microterm_state::mt5510_mem_map);
m_maincpu->set_addrmap(AS_IO, &microterm_state::mt5510_io_map);
scn2681_device &duart(SCN2681(config, "duart", XTAL(3'686'400)));
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
duart.irq_cb().set_inputline(m_maincpu, 0);
duart.outport_cb().set("eeprom1", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
@ -140,10 +142,10 @@ MACHINE_CONFIG_START(microterm_state::mt5510)
EEPROM_93C46_16BIT(config, "eeprom2").do_callback().set("duart", FUNC(scn2681_device::ip5_w));
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(45'830'400) / 2, 1120, 0, 960, 341, 0, 300) // wild guess at resolution
MCFG_SCREEN_UPDATE_DRIVER(microterm_state, mt5510_update)
MACHINE_CONFIG_END
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(45.8304_MHz_XTAL / 2, 1120, 0, 960, 341, 0, 300); // wild guess at resolution
screen.set_screen_update(FUNC(microterm_state::mt5510_update));
}
/**************************************************************************************************************

View File

@ -1295,11 +1295,11 @@ MACHINE_CONFIG_START(mpu4vid_state::mpu4_vid)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
MCFG_DEVICE_ADD("scn2674_vid", SCN2674, 0)
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("video", M68K_IRQ_3))
MCFG_SCN2674_CHARACTER_WIDTH(8)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(mpu4vid_state, display_pixels)
MCFG_DEVICE_ADDRESS_MAP(0, mpu4_vram)
SCN2674(config, m_scn2674, 0);
m_scn2674->intr_callback().set_inputline("video", M68K_IRQ_3);
m_scn2674->set_character_width(8);
m_scn2674->set_display_callback(FUNC(mpu4vid_state::display_pixels));
m_scn2674->set_addrmap(0, &mpu4vid_state::mpu4_vram);
MCFG_DEVICE_ADD("video", M68000, VIDEO_MASTER_CLOCK )

View File

@ -1008,12 +1008,12 @@ MACHINE_CONFIG_START(octopus_state::octopus)
// MCFG_SCREEN_PALETTE("palette")
// MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("crtc", SCN2674, 0) // character clock can be selectable, either 16MHz or 17.6MHz
MCFG_SCN2674_INTR_CALLBACK(WRITELINE("pic_slave", pic8259_device, ir0_w))
MCFG_SCN2674_CHARACTER_WIDTH(8)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(octopus_state, display_pixels)
MCFG_DEVICE_ADDRESS_MAP(0, octopus_vram)
MCFG_VIDEO_SET_SCREEN("screen")
SCN2674(config, m_crtc, 0); // character clock can be selectable, either 16MHz or 17.6MHz
m_crtc->intr_callback().set("pic_slave", FUNC(pic8259_device::ir0_w));
m_crtc->set_character_width(8);
m_crtc->set_display_callback(FUNC(octopus_state::display_pixels));
m_crtc->set_addrmap(0, &octopus_state::octopus_vram);
m_crtc->set_screen("screen");
ADDRESS_MAP_BANK(config, "z80_bank").set_map(&octopus_state::octopus_mem).set_options(ENDIANNESS_LITTLE, 8, 32, 0x10000);

View File

@ -118,15 +118,15 @@ MACHINE_CONFIG_START(qvt201_state::qvt201)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5516APL-2 or uPD446C-2 + battery
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(48.654_MHz_XTAL / 3, 102 * 10, 0, 80 * 10, 265, 0, 250)
//MCFG_SCREEN_RAW_PARAMS(48.654_MHz_XTAL / 2, 170 * 9, 0, 132 * 9, 265, 0, 250)
MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2672_device, screen_update)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(48.654_MHz_XTAL / 3, 102 * 10, 0, 80 * 10, 265, 0, 250);
//screen.set_raw(48.654_MHz_XTAL / 2, 170 * 9, 0, 132 * 9, 265, 0, 250);
screen.set_screen_update("crtc", FUNC(scn2672_device::screen_update));
MCFG_DEVICE_ADD("crtc", SCN2672, 48.654_MHz_XTAL / 30)
MCFG_SCN2672_CHARACTER_WIDTH(10) // 9 in 132-column mode
MCFG_SCN2672_INTR_CALLBACK(WRITELINE("mainint", input_merger_device, in_w<0>))
MCFG_VIDEO_SET_SCREEN("screen")
scn2672_device &crtc(SCN2672(config, "crtc", 48.654_MHz_XTAL / 30));
crtc.set_character_width(10); // 9 in 132-column mode
crtc.intr_callback().set("mainint", FUNC(input_merger_device::in_w<0>));
crtc.set_screen("screen");
MACHINE_CONFIG_END

View File

@ -86,27 +86,30 @@ void tr175_state::ramdac_map(address_map &map)
static INPUT_PORTS_START( tr175 )
INPUT_PORTS_END
MACHINE_CONFIG_START(tr175_state::tr175)
MCFG_DEVICE_ADD("maincpu", M68000, 12'000'000)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
void tr175_state::tr175(machine_config &config)
{
M68000(config, m_maincpu, 12'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &tr175_state::mem_map);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'322'000), 900, 0, 720, 449, 0, 416) // guess
MCFG_SCREEN_UPDATE_DEVICE("avdc", scn2674_device, screen_update)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(28.322_MHz_XTAL, 900, 0, 720, 449, 0, 416); // guess
screen.set_screen_update("avdc", FUNC(scn2674_device::screen_update));
MCFG_DEVICE_ADD("avdc", SCN2674, XTAL(28'322'000) / 18) // guess
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_2))
MCFG_SCN2674_CHARACTER_WIDTH(18) // guess
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(tr175_state, draw_character)
MCFG_DEVICE_ADDRESS_MAP(0, vram_map)
MCFG_VIDEO_SET_SCREEN("screen")
scn2674_device &avdc(SCN2674(config, "avdc", 28.322_MHz_XTAL / 18)); // guess
avdc.intr_callback().set_inputline("maincpu", M68K_IRQ_2);
avdc.set_character_width(18); // guess
avdc.set_display_callback(FUNC(tr175_state::draw_character));
avdc.set_addrmap(0, &tr175_state::vram_map);
avdc.set_screen("screen");
MCFG_DEVICE_ADD("duart", SCN2681, XTAL(11'059'200) / 3) // is this the right clock?
MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_1))
scn2681_device &duart(SCN2681(config, "duart", 11.0592_MHz_XTAL / 3)); // is this the right clock?
duart.irq_cb().set_inputline("maincpu", M68K_IRQ_1);
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette")
MACHINE_CONFIG_END
PALETTE(config, "palette", 0x100);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0));
ramdac.set_addrmap(0, &tr175_state::ramdac_map);
ramdac.set_palette("palette");
}

View File

@ -82,29 +82,29 @@ void tv955_state::mem_map(address_map &map)
static INPUT_PORTS_START( tv955 )
INPUT_PORTS_END
MACHINE_CONFIG_START(tv955_state::tv955)
MCFG_DEVICE_ADD("maincpu", M65C02, 19.3396_MHz_XTAL / 9)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
void tv955_state::tv955(machine_config &config)
{
M65C02(config, m_maincpu, 19.3396_MHz_XTAL / 9);
m_maincpu->set_addrmap(AS_PROGRAM, &tv955_state::mem_map);
MCFG_INPUT_MERGER_ANY_HIGH("mainirq")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", m6502_device::IRQ_LINE))
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
MCFG_DEVICE_ADD("keyboard", I8049, 5.7143_MHz_XTAL)
I8049(config, "keyboard", 5.7143_MHz_XTAL);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // HM6116LP-4 + 3.2V battery
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(19.3396_MHz_XTAL, 846, 0, 720, 381, 0, 364)
//MCFG_SCREEN_RAW_PARAMS(31.684_MHz_XTAL, 1386, 0, 1188, 381, 0, 364)
MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2674_device, screen_update)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(19.3396_MHz_XTAL, 846, 0, 720, 381, 0, 364);
//screen.set_raw(31.684_MHz_XTAL, 1386, 0, 1188, 381, 0, 364);
screen.set_screen_update("crtc", FUNC(scn2674_device::screen_update));
MCFG_DEVICE_ADD("crtc", SCN2674, 19.3396_MHz_XTAL / 9)
SCN2674(config, m_crtc, 19.3396_MHz_XTAL / 9);
// Character clock is 31.684_MHz_XTAL / 9 in 132-column mode
// Character cells are 9 pixels wide by 14 pixels high
MCFG_SCN2674_CHARACTER_WIDTH(9)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(tv955_state, draw_character)
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("maincpu", m6502_device::NMI_LINE))
MCFG_VIDEO_SET_SCREEN("screen")
m_crtc->set_character_width(9);
m_crtc->set_display_callback(FUNC(tv955_state::draw_character));
m_crtc->intr_callback().set_inputline(m_maincpu, m6502_device::NMI_LINE);
m_crtc->set_screen("screen");
MOS6551(config, m_hostuart, 0);
m_hostuart->set_xtal(3.6864_MHz_XTAL);
@ -117,7 +117,7 @@ MACHINE_CONFIG_START(tv955_state::tv955)
mos6551_device &keybuart(MOS6551(config, "keybuart", 0));
keybuart.set_xtal(3.6864_MHz_XTAL / 2);
keybuart.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
MACHINE_CONFIG_END
}
/**************************************************************************************************************

View File

@ -70,30 +70,31 @@ void tv965_state::program_map(address_map &map)
static INPUT_PORTS_START( tv965 )
INPUT_PORTS_END
MACHINE_CONFIG_START(tv965_state::tv965)
MCFG_DEVICE_ADD("maincpu", G65816, 44.4528_MHz_XTAL / 10)
MCFG_DEVICE_DATA_MAP(mem_map)
MCFG_DEVICE_PROGRAM_MAP(program_map)
void tv965_state::tv965(machine_config &config)
{
G65816(config, m_maincpu, 44.4528_MHz_XTAL / 10);
m_maincpu->set_addrmap(AS_DATA, &tv965_state::mem_map);
m_maincpu->set_addrmap(AS_PROGRAM, &tv965_state::program_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // CXK5864BP-10L + battery
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(26.9892_MHz_XTAL, 1020, 0, 800, 441, 0, 416)
//MCFG_SCREEN_RAW_PARAMS(44.4528_MHz_XTAL, 1680, 0, 1320, 441, 0, 416)
MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2672_device, screen_update)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(26.9892_MHz_XTAL, 1020, 0, 800, 441, 0, 416);
//m_screen->set_raw(44.4528_MHz_XTAL, 1680, 0, 1320, 441, 0, 416);
m_screen->set_screen_update("crtc", FUNC(scn2672_device::screen_update));
MCFG_DEVICE_ADD("crtc", SCN2672, 26.9892_MHz_XTAL / 10)
MCFG_SCN2672_CHARACTER_WIDTH(10)
MCFG_SCN2672_DRAW_CHARACTER_CALLBACK_OWNER(tv965_state, draw_character)
MCFG_SCN2672_INTR_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_VIDEO_SET_SCREEN("screen")
scn2672_device &crtc(SCN2672(config, "crtc", 26.9892_MHz_XTAL / 10));
crtc.set_character_width(10);
crtc.set_display_callback(FUNC(tv965_state::draw_character));
crtc.intr_callback().set_inputline("maincpu", INPUT_LINE_NMI);
crtc.set_screen("screen");
mos6551_device &acia1(MOS6551(config, "acia1", 0));
acia1.set_xtal(3.6864_MHz_XTAL / 2); // divider not verified, possibly even programmable
mos6551_device &acia2(MOS6551(config, "acia2", 0));
acia2.set_xtal(3.6864_MHz_XTAL / 2); // divider not verified, possibly even programmable
MACHINE_CONFIG_END
}
/**************************************************************************************************************

View File

@ -107,17 +107,18 @@ void v550_state::machine_start()
m_usart->write_cts(0);
}
MACHINE_CONFIG_START(v550_state::v550)
MCFG_DEVICE_ADD("maincpu", Z80, 34.846_MHz_XTAL / 16) // NEC D780C (2.177875 MHz verified)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
void v550_state::v550(machine_config &config)
{
Z80(config, m_maincpu, 34.846_MHz_XTAL / 16); // NEC D780C (2.177875 MHz verified)
m_maincpu->set_addrmap(AS_PROGRAM, &v550_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &v550_state::io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // NEC D444C-2 + battery
MCFG_DEVICE_ADD("gdc", UPD7220, 34.846_MHz_XTAL / 16) // NEC D7220D (2.177875 MHz verified)
MCFG_VIDEO_SET_SCREEN("screen")
upd7220_device &gdc(UPD7220(config, "gdc", 34.846_MHz_XTAL / 16)); // NEC D7220D (2.177875 MHz verified)
gdc.set_screen("screen");
MCFG_DEVICE_ADD("ppi", I8255, 0) // NEC D8255AC-5
I8255(config, "ppi"); // NEC D8255AC-5
I8251(config, m_usart, 34.846_MHz_XTAL / 16); // NEC D8251AC
m_usart->rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>));
@ -137,21 +138,21 @@ MACHINE_CONFIG_START(v550_state::v550)
brg2.fr_handler().set("usart", FUNC(i8251_device::write_txc));
brg2.fr_handler().append("usart", FUNC(i8251_device::write_rxc));
MCFG_DEVICE_ADD("kbdmcu", I8035, 4'608'000)
MCFG_DEVICE_PROGRAM_MAP(kbd_map)
mcs48_cpu_device &kbdmcu(I8035(config, "kbdmcu", 4'608'000));
kbdmcu.set_addrmap(AS_PROGRAM, &v550_state::kbd_map);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(34.846_MHz_XTAL, 19 * 102, 0, 19 * 80, 295, 0, 272)
MCFG_SCREEN_UPDATE_DRIVER(v550_state, screen_update)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(34.846_MHz_XTAL, 19 * 102, 0, 19 * 80, 295, 0, 272);
m_screen->set_screen_update(FUNC(v550_state::screen_update));
MCFG_DEVICE_ADD("pvtc", SCN2672, 34.846_MHz_XTAL / 19)
MCFG_DEVICE_ADDRESS_MAP(0, pvtc_char_map)
MCFG_DEVICE_ADDRESS_MAP(1, pvtc_attr_map)
MCFG_SCN2672_CHARACTER_WIDTH(19)
MCFG_SCN2672_INTR_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_VIDEO_SET_SCREEN("screen")
scn2672_device &pvtc(SCN2672(config, "pvtc", 34.846_MHz_XTAL / 19));
pvtc.set_addrmap(0, &v550_state::pvtc_char_map);
pvtc.set_addrmap(1, &v550_state::pvtc_attr_map);
pvtc.set_character_width(19);
pvtc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
pvtc.set_screen("screen");
// SCB2673 clock verified at 17.423 MHz
MACHINE_CONFIG_END
}
ROM_START( v550 )

View File

@ -22,7 +22,8 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_p_chargen(*this, "chargen")
, m_avdc(*this, "avdc")
, m_chargen(*this, "chargen")
{ }
void vp122(machine_config &config);
@ -39,7 +40,8 @@ private:
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_region_ptr<u8> m_p_chargen;
required_device<scn2674_device> m_avdc;
required_region_ptr<u8> m_chargen;
};
@ -87,25 +89,26 @@ void vp122_state::attr_map(address_map &map)
static INPUT_PORTS_START( vp122 )
INPUT_PORTS_END
MACHINE_CONFIG_START(vp122_state::vp122)
MCFG_DEVICE_ADD("maincpu", I8085A, 8_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
void vp122_state::vp122(machine_config &config)
{
I8085A(config, m_maincpu, 8_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &vp122_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &vp122_state::io_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MK48Z02
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(14.916_MHz_XTAL, 960, 0, 800, 259, 0, 240)
//MCFG_SCREEN_RAW_PARAMS(22.096_MHz_XTAL, 1422, 0, 1188, 259, 0, 240)
MCFG_SCREEN_UPDATE_DEVICE("avdc", scn2674_device, screen_update)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(14.916_MHz_XTAL, 960, 0, 800, 259, 0, 240);
//m_screen->set_raw(22.096_MHz_XTAL, 1422, 0, 1188, 259, 0, 240);
m_screen->set_screen_update("avdc", FUNC(scn2674_device::screen_update));
MCFG_DEVICE_ADD("avdc", SCN2674, 14.916_MHz_XTAL / 10)
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE))
MCFG_SCN2674_CHARACTER_WIDTH(10) // 9 in 132-column modes
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(vp122_state, draw_character)
MCFG_DEVICE_ADDRESS_MAP(0, char_map)
MCFG_DEVICE_ADDRESS_MAP(1, attr_map)
MCFG_VIDEO_SET_SCREEN("screen")
SCN2674(config, m_avdc, 14.916_MHz_XTAL / 10);
m_avdc->intr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
m_avdc->set_character_width(10); // 9 in 132-column modes
m_avdc->set_display_callback(FUNC(vp122_state::draw_character));
m_avdc->set_addrmap(0, &vp122_state::char_map);
m_avdc->set_addrmap(1, &vp122_state::attr_map);
m_avdc->set_screen("screen");
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
duart.irq_cb().set_inputline("maincpu", I8085_RST55_LINE);
@ -113,11 +116,11 @@ MACHINE_CONFIG_START(vp122_state::vp122)
duart.outport_cb().append("usart", FUNC(i8251_device::write_rxc)).bit(3);
// OP7 = 0 for 80-column modes, 1 for 132-column modes
MCFG_DEVICE_ADD("usart", I8251, 8_MHz_XTAL / 2)
I8251(config, "usart", 8_MHz_XTAL / 2);
MCFG_DEVICE_ADD("pit", PIT8253, 0)
PIT8253(config, "pit", 0);
// Input clocks are video-related and should differ for 80-column and 132-column modes
MACHINE_CONFIG_END
}
/**************************************************************************************************************

View File

@ -115,10 +115,11 @@ MACHINE_CONFIG_START(pcd_video_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 3)
MCFG_PALETTE_INIT_OWNER(pcdx_video_device, pcdx)
MCFG_DEVICE_ADD("crtc", SCN2674, 0)
MCFG_SCN2674_CHARACTER_WIDTH(16)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcd_video_device, display_pixels)
MCFG_VIDEO_SET_SCREEN("screen")
scn2674_device &crtc(SCN2674(config, "crtc", 0));
crtc.set_character_width(16);
crtc.set_display_callback(FUNC(pcd_video_device::display_pixels));
crtc.set_screen("screen");
MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", pcd_video_device, mouse_timer, attotime::from_hz(15000)) // guess
MACHINE_CONFIG_END
@ -158,12 +159,12 @@ MACHINE_CONFIG_START(pcx_video_device::device_add_mconfig)
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("crtc", SCN2674, 0)
MCFG_SCN2674_INTR_CALLBACK(INPUTLINE("graphics", MCS51_INT0_LINE))
MCFG_SCN2674_CHARACTER_WIDTH(16)
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcx_video_device, display_pixels)
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_DEVICE_ADDRESS_MAP(0, pcx_vram)
scn2674_device &crtc(SCN2674(config, "crtc", 0));
crtc.intr_callback().set_inputline("graphics", MCS51_INT0_LINE);
crtc.set_character_width(16);
crtc.set_display_callback(FUNC(pcx_video_device::display_pixels));
crtc.set_screen("screen");
crtc.set_addrmap(0, &pcx_video_device::pcx_vram);
MACHINE_CONFIG_END