mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
new not working
---------------- Dulmont Magnum [Carl, Dave Jones] isbc: new isbc8630 sct set [Al Kossow]
This commit is contained in:
parent
e029a9c2e8
commit
5ad9b67e1d
@ -657,6 +657,19 @@ if (MACHINES["CDP1871"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/cdp1879.h,MACHINES["CDP1879"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["CDP1879"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/cdp1879.cpp",
|
||||
MAME_DIR .. "src/devices/machine/cdp1879.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/com8116.h,MACHINES["COM8116"] = true
|
||||
|
@ -376,6 +376,7 @@ MACHINES["AY31015"] = true
|
||||
MACHINES["BANKDEV"] = true
|
||||
MACHINES["CDP1852"] = true
|
||||
MACHINES["CDP1871"] = true
|
||||
MACHINES["CDP1879"] = true
|
||||
MACHINES["CMOS40105"] = true
|
||||
--MACHINES["CDU76S"] = true
|
||||
MACHINES["COM8116"] = true
|
||||
@ -901,6 +902,7 @@ function linkProjects_mame_mess(_target, _subtarget)
|
||||
"dms",
|
||||
"dragon",
|
||||
"drc",
|
||||
"dulmont",
|
||||
"eaca",
|
||||
"einis",
|
||||
"elektor",
|
||||
@ -1765,6 +1767,11 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/zrt80.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "dulmont")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/magnum.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "eaca")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/cgenie.cpp",
|
||||
|
152
src/devices/machine/cdp1879.cpp
Normal file
152
src/devices/machine/cdp1879.cpp
Normal file
@ -0,0 +1,152 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont,Carl
|
||||
/**********************************************************************
|
||||
|
||||
cdp1879.c - RCA CDP1879 real-time clock emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "cdp1879.h"
|
||||
#include "machine/timehelp.h"
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type CDP1879 = &device_creator<cdp1879_device>;
|
||||
|
||||
//-------------------------------------------------
|
||||
// cdp1879_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
cdp1879_device::cdp1879_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, CDP1879, "RCA CDP1879", tag, owner, clock, "cdp1879", __FILE__),
|
||||
device_rtc_interface(mconfig, *this),
|
||||
m_irq_w(*this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void cdp1879_device::device_start()
|
||||
{
|
||||
// allocate timers
|
||||
m_clock_timer = timer_alloc();
|
||||
m_clock_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
|
||||
|
||||
m_irq_w.resolve_safe();
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_regs));
|
||||
save_item(NAME(m_comparator_state));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void cdp1879_device::device_reset()
|
||||
{
|
||||
m_regs[0] = m_regs[1] = 0;
|
||||
m_regs[R_CTL_IRQSTATUS] = 0;
|
||||
m_regs[R_CTL_CONTROL] = 0;
|
||||
m_comparator_state = false;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_timer - handler timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void cdp1879_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
advance_seconds();
|
||||
|
||||
// comparator IRQ
|
||||
bool new_state = true;
|
||||
for (int i = R_CNT_SECONDS; i <= R_CNT_MONTH; i++)
|
||||
{
|
||||
if(m_regs[i] != m_regs[i + 6])
|
||||
{
|
||||
new_state = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_comparator_state && new_state) // positive-edge-triggered
|
||||
set_irq(7);
|
||||
|
||||
m_comparator_state = new_state;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rtc_clock_updated -
|
||||
//-------------------------------------------------
|
||||
|
||||
void cdp1879_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
|
||||
{
|
||||
m_regs[R_CNT_SECONDS] = time_helper::make_bcd(second); // seconds (BCD)
|
||||
m_regs[R_CNT_MINUTES] = time_helper::make_bcd(minute); // minutes (BCD)
|
||||
m_regs[R_CNT_HOURS] = time_helper::make_bcd(hour); // hour (BCD)
|
||||
m_regs[R_CNT_DAYOFMONTH] = time_helper::make_bcd(day); // day of the month (BCD)
|
||||
m_regs[R_CNT_MONTH] = time_helper::make_bcd(month); // month (BCD)
|
||||
}
|
||||
|
||||
void cdp1879_device::set_irq(int bit)
|
||||
{
|
||||
m_regs[R_CTL_IRQSTATUS] |= (1 << bit);
|
||||
m_irq_w(ASSERT_LINE);
|
||||
}
|
||||
|
||||
void cdp1879_device::update_rtc()
|
||||
{
|
||||
set_clock_register(RTC_SECOND, bcd_to_integer(m_regs[R_CNT_SECONDS]));
|
||||
set_clock_register(RTC_MINUTE, bcd_to_integer(m_regs[R_CNT_MINUTES]));
|
||||
set_clock_register(RTC_HOUR, bcd_to_integer(m_regs[R_CNT_HOURS]));
|
||||
set_clock_register(RTC_DAY, bcd_to_integer(m_regs[R_CNT_DAYOFMONTH]));
|
||||
set_clock_register(RTC_MONTH, bcd_to_integer(m_regs[R_CNT_MONTH]));
|
||||
}
|
||||
|
||||
READ8_MEMBER(cdp1879_device::read)
|
||||
{
|
||||
if (offset == R_CTL_IRQSTATUS && !space.debugger_access())
|
||||
{
|
||||
// reading the IRQ status clears IRQ line and IRQ status
|
||||
uint8_t data = m_regs[offset];
|
||||
m_regs[R_CTL_IRQSTATUS] = 0;
|
||||
m_irq_w(CLEAR_LINE);
|
||||
return data;
|
||||
}
|
||||
|
||||
return m_regs[offset];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cdp1879_device::write)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case R_CNT_SECONDS:
|
||||
case R_CNT_MINUTES:
|
||||
case R_CNT_HOURS:
|
||||
if(BIT(m_regs[R_CTL_CONTROL], 3))
|
||||
{
|
||||
m_regs[offset + 6] = data;
|
||||
break;
|
||||
}
|
||||
case R_CNT_DAYOFMONTH:
|
||||
case R_CNT_MONTH:
|
||||
m_regs[offset] = data;
|
||||
update_rtc();
|
||||
break;
|
||||
|
||||
case R_CTL_CONTROL:
|
||||
m_regs[offset] = data;
|
||||
break;
|
||||
}
|
||||
}
|
86
src/devices/machine/cdp1879.h
Normal file
86
src/devices/machine/cdp1879.h
Normal file
@ -0,0 +1,86 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont,Carl
|
||||
/**********************************************************************
|
||||
|
||||
cdp1879.h - RCA CDP1879 real-time clock emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __CDP1879_H__
|
||||
#define __CDP1879_H__
|
||||
|
||||
#include "emu.h"
|
||||
#include "dirtc.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_CDP1879_IRQ_CALLBACK(_cb) \
|
||||
devcb = &cdp1879_device::set_irq_cb(*device, DEVCB_##_cb);
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> cdp1879_device
|
||||
|
||||
class cdp1879_device : public device_t,
|
||||
public device_rtc_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cdp1879_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_READ8_MEMBER(read);
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
|
||||
template<class _Object> static devcb_base &set_irq_cb(device_t &device, _Object wr) { return downcast<cdp1879_device &>(device).m_irq_w.set_callback(wr); }
|
||||
|
||||
devcb_write_line m_irq_w;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// device_rtc_interface overrides
|
||||
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
|
||||
virtual bool rtc_feature_leap_year() const override { return true; }
|
||||
|
||||
void set_irq(int bit);
|
||||
void update_rtc();
|
||||
|
||||
private:
|
||||
// registers
|
||||
enum
|
||||
{
|
||||
R_CNT_SECONDS = 2, // 2 = seconds
|
||||
R_CNT_MINUTES, // 3 = minutes
|
||||
R_CNT_HOURS, // 4 = hours
|
||||
R_CNT_DAYOFMONTH, // 5 = day of the month
|
||||
R_CNT_MONTH, // 6 = month
|
||||
R_CTL_IRQSTATUS = 7, // 7 = IRQ status
|
||||
R_CTL_CONTROL = 7, // 7 = IRQ control
|
||||
R_ALM_SECONDS,
|
||||
R_ALM_MINUTES,
|
||||
R_ALM_HOURS
|
||||
};
|
||||
|
||||
u8 m_regs[10];
|
||||
int m_seconds;
|
||||
bool m_comparator_state;
|
||||
|
||||
// timers
|
||||
emu_timer *m_clock_timer;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type CDP1879;
|
||||
|
||||
#endif
|
@ -78,7 +78,7 @@ void isbc_state::machine_reset()
|
||||
static ADDRESS_MAP_START(rpc86_mem, AS_PROGRAM, 16, isbc_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00000, 0xcffff) AM_RAM
|
||||
AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1",0)
|
||||
AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("user1",0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(rpc86_io, AS_IO, 16, isbc_state)
|
||||
@ -102,6 +102,11 @@ static ADDRESS_MAP_START(isbc8605_io, AS_IO, 16, isbc_state)
|
||||
AM_IMPORT_FROM(rpc86_io)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(isbc8630_io, AS_IO, 16, isbc_state)
|
||||
AM_RANGE(0x0100, 0x0101) AM_DEVWRITE8("isbc_215g", isbc_215g_device, write, 0x00ff)
|
||||
AM_IMPORT_FROM(rpc86_io)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(isbc86_mem, AS_PROGRAM, 16, isbc_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00000, 0xfbfff) AM_RAM
|
||||
@ -295,6 +300,14 @@ static MACHINE_CONFIG_DERIVED( isbc8605, rpc86 )
|
||||
MCFG_ISBC_208_IRQ(DEVWRITELINE("pic_0", pic8259_device, ir5_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( isbc8630, rpc86 )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_IO_MAP(isbc8630_io)
|
||||
|
||||
MCFG_ISBC_215_ADD("isbc_215g", 0x100, "maincpu")
|
||||
MCFG_ISBC_215_IRQ(DEVWRITELINE("pic_0", pic8259_device, ir5_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( isbc286, isbc_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I80286, XTAL_16MHz/2)
|
||||
@ -373,16 +386,22 @@ ROM_START( isbc86 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( isbc8605 )
|
||||
ROM_REGION( 0x4000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "i8605mon.bin", 0x0000, 0x4000, CRC(e16acb6e) SHA1(eb9a3fd21f7609d44f8052b6a0603ecbb52dc3f3))
|
||||
ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "i8605mon.bin", 0x4000, 0x4000, CRC(e16acb6e) SHA1(eb9a3fd21f7609d44f8052b6a0603ecbb52dc3f3))
|
||||
ROM_END
|
||||
|
||||
ROM_START( isbc8630 )
|
||||
ROM_REGION( 0x4000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_LOAD16_BYTE( "143780-001_isdm_for_isbc_86-30_socket_u57_i2732a.bin", 0x0000, 0x1000, CRC(db0ef880) SHA1(8ef296066d16881217618e54b410d12157f318ea))
|
||||
ROM_LOAD16_BYTE( "143782-001_isdm_for_isbc_86-30_socket_u39_i2732a.bin", 0x0001, 0x1000, CRC(ea1ebe78) SHA1(f03b63659e8f5e96f481dbc6c2ddef1d22850ebb))
|
||||
ROM_LOAD16_BYTE( "143781-001_isdm_for_isbc_86-30_socket_u58_i2732a.bin", 0x2000, 0x1000, CRC(93732612) SHA1(06e751d0f5ab1fe2c52fd79f6f4725ccf3379791))
|
||||
ROM_LOAD16_BYTE( "143783-001_isdm_for_isbc_86-30_socket_u40_i2732a.bin", 0x2001, 0x1000, CRC(337102d5) SHA1(535f63d24c3948187b208ea594f979bc33579a15))
|
||||
ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_SYSTEM_BIOS( 0, "14378", "14378" )
|
||||
ROMX_LOAD( "143780-001_isdm_for_isbc_86-30_socket_u57_i2732a.bin", 0x4000, 0x1000, CRC(db0ef880) SHA1(8ef296066d16881217618e54b410d12157f318ea), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROMX_LOAD( "143782-001_isdm_for_isbc_86-30_socket_u39_i2732a.bin", 0x4001, 0x1000, CRC(ea1ebe78) SHA1(f03b63659e8f5e96f481dbc6c2ddef1d22850ebb), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROMX_LOAD( "143781-001_isdm_for_isbc_86-30_socket_u58_i2732a.bin", 0x6000, 0x1000, CRC(93732612) SHA1(06e751d0f5ab1fe2c52fd79f6f4725ccf3379791), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROMX_LOAD( "143783-001_isdm_for_isbc_86-30_socket_u40_i2732a.bin", 0x6001, 0x1000, CRC(337102d5) SHA1(535f63d24c3948187b208ea594f979bc33579a15), ROM_SKIP(1) | ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS( 1, "14503", "14503" )
|
||||
ROMX_LOAD( "145032-001_u57.bin", 0x0000, 0x2000, CRC(09a24dea) SHA1(e21277f1d4d72e0858846f7293ac48417b392e3b), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROMX_LOAD( "145030-001_u39.bin", 0x0001, 0x2000, CRC(c58f3a98) SHA1(76f6d5be8ea6854a98f6555320cfcdb814e5c633), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROMX_LOAD( "145033-001_u58.bin", 0x4000, 0x2000, CRC(496aca5f) SHA1(c09f4d2254ece1eb139ef5fd4ad0ce6a55376da5), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROMX_LOAD( "145031-001_u40.bin", 0x4001, 0x2000, CRC(150fcd90) SHA1(4bca0f46b9b05ef0124bac5dea09ddd952e73af2), ROM_SKIP(1) | ROM_BIOS(2))
|
||||
ROM_END
|
||||
|
||||
ROM_START( isbc286 )
|
||||
@ -412,11 +431,11 @@ ROM_START( isbc28612 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( rpc86 )
|
||||
ROM_REGION( 0x4000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_LOAD16_BYTE( "145068-001.bin", 0x0001, 0x1000, CRC(0fa9db83) SHA1(4a44f8683c263c9ef6850cbe05aaa73f4d4d4e06))
|
||||
ROM_LOAD16_BYTE( "145069-001.bin", 0x2001, 0x1000, CRC(1692a076) SHA1(0ce3a4a867cb92340871bb8f9c3e91ce2984c77c))
|
||||
ROM_LOAD16_BYTE( "145070-001.bin", 0x0000, 0x1000, CRC(8c8303ef) SHA1(60f94daa76ab9dea6e309ac580152eb212b847a0))
|
||||
ROM_LOAD16_BYTE( "145071-001.bin", 0x2000, 0x1000, CRC(a49681d8) SHA1(e81f8b092cfa2d1737854b1fa270a4ce07d61a9f))
|
||||
ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
|
||||
ROM_LOAD16_BYTE( "145068-001.bin", 0x4001, 0x1000, CRC(0fa9db83) SHA1(4a44f8683c263c9ef6850cbe05aaa73f4d4d4e06))
|
||||
ROM_LOAD16_BYTE( "145069-001.bin", 0x6001, 0x1000, CRC(1692a076) SHA1(0ce3a4a867cb92340871bb8f9c3e91ce2984c77c))
|
||||
ROM_LOAD16_BYTE( "145070-001.bin", 0x4000, 0x1000, CRC(8c8303ef) SHA1(60f94daa76ab9dea6e309ac580152eb212b847a0))
|
||||
ROM_LOAD16_BYTE( "145071-001.bin", 0x6000, 0x1000, CRC(a49681d8) SHA1(e81f8b092cfa2d1737854b1fa270a4ce07d61a9f))
|
||||
ROM_END
|
||||
/* Driver */
|
||||
|
||||
@ -424,7 +443,7 @@ ROM_END
|
||||
COMP( 19??, rpc86, 0, 0, rpc86, isbc, driver_device, 0, "Intel", "RPC 86",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 1978, isbc86, 0, 0, isbc86, isbc, driver_device, 0, "Intel", "iSBC 86/12A",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 1981, isbc8605, 0, 0, isbc8605, isbc, driver_device, 0, "Intel", "iSBC 86/05",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 1981, isbc8630, 0, 0, rpc86, isbc, driver_device, 0, "Intel", "iSBC 86/30",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 1981, isbc8630, 0, 0, isbc8630, isbc, driver_device, 0, "Intel", "iSBC 86/30",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 19??, isbc286, 0, 0, isbc286, isbc, driver_device, 0, "Intel", "iSBC 286",MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
COMP( 1983, isbc2861, 0, 0, isbc2861, isbc, driver_device, 0, "Intel", "iSBC 286/10", MACHINE_NO_SOUND_HW)
|
||||
COMP( 1983, isbc28612,0, 0, isbc2861, isbc, driver_device, 0, "Intel", "iSBC 286/12", MACHINE_NO_SOUND_HW)
|
||||
|
159
src/mame/drivers/magnum.cpp
Normal file
159
src/mame/drivers/magnum.cpp
Normal file
@ -0,0 +1,159 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Carl
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/i86/i186.h"
|
||||
#include "machine/cdp1879.h"
|
||||
|
||||
class magnum_state : public driver_device
|
||||
{
|
||||
public:
|
||||
magnum_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_palette(*this, "palette"),
|
||||
m_cgrom(*this, "cgrom")
|
||||
{}
|
||||
|
||||
DECLARE_READ8_MEMBER(lcd_r);
|
||||
DECLARE_WRITE8_MEMBER(lcd_w);
|
||||
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
protected:
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override;
|
||||
private:
|
||||
required_device<palette_device> m_palette;
|
||||
required_memory_region m_cgrom;
|
||||
struct lcd
|
||||
{
|
||||
u8 vram[640];
|
||||
u8 cmd;
|
||||
u16 cursor;
|
||||
};
|
||||
lcd m_lcd[2];
|
||||
};
|
||||
|
||||
u32 magnum_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
u8* font = m_cgrom->base();
|
||||
u32 black = m_palette->pen(0);
|
||||
u32 white = m_palette->pen(1);
|
||||
for(int scr = 0; scr < 2; scr++)
|
||||
{
|
||||
u8* vram = m_lcd[!scr].vram;
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
for(int j = 0; j < 40; j++)
|
||||
{
|
||||
for(int k = 0; k < 9; k++)
|
||||
{
|
||||
for(int l = 0; l < 6; l++)
|
||||
bitmap.pix32((i * 9) + k, ((j + (scr * 40)) * 6) + l) = font[(vram[(i * 40) + j] * 16) + k] & (1 << (5 - l)) ? black : white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void magnum_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_lcd[0].vram));
|
||||
save_item(NAME(m_lcd[0].cmd));
|
||||
save_item(NAME(m_lcd[0].cursor));
|
||||
save_item(NAME(m_lcd[1].vram));
|
||||
save_item(NAME(m_lcd[1].cmd));
|
||||
save_item(NAME(m_lcd[1].cursor));
|
||||
}
|
||||
|
||||
void magnum_state::machine_reset()
|
||||
{
|
||||
memset(m_lcd, 0, sizeof(m_lcd));
|
||||
}
|
||||
|
||||
READ8_MEMBER(magnum_state::lcd_r)
|
||||
{
|
||||
//lcd& panel = m_lcd[BIT(offset, 1)];
|
||||
switch(BIT(offset, 0))
|
||||
{
|
||||
case 1:
|
||||
return 0; // bit 8 busy status
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(magnum_state::lcd_w)
|
||||
{
|
||||
lcd& panel = m_lcd[BIT(offset, 1)];
|
||||
switch(BIT(offset, 0))
|
||||
{
|
||||
case 0:
|
||||
switch(panel.cmd)
|
||||
{
|
||||
case 0xa:
|
||||
panel.cursor = ((panel.cursor & 0xff00) | data) % 640;
|
||||
break;
|
||||
case 0xb:
|
||||
panel.cursor = ((panel.cursor & 0x00ff) | (data << 8)) % 640;
|
||||
break;
|
||||
case 0xc:
|
||||
panel.vram[panel.cursor] = data;
|
||||
panel.cursor++;
|
||||
panel.cursor %= 640;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
panel.cmd = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( magnum_map, AS_PROGRAM, 16, magnum_state )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_RAM // fixed 256k for now
|
||||
AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( magnum_io, AS_IO, 16, magnum_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
//AM_RANGE(0x000a, 0x000b) cdp1854 1
|
||||
//AM_RANGE(0x000e, 0x000f) cpd1854 2
|
||||
AM_RANGE(0x0018, 0x001f) AM_READWRITE8(lcd_r, lcd_w, 0x00ff)
|
||||
AM_RANGE(0x0080, 0x008f) AM_DEVREADWRITE8("rtc", cdp1879_device, read, write, 0x00ff)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_CONFIG_START( magnum, magnum_state )
|
||||
MCFG_CPU_ADD("maincpu", I80186, XTAL_12MHz / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(magnum_map)
|
||||
MCFG_CPU_IO_MAP(magnum_io)
|
||||
|
||||
MCFG_DEVICE_ADD("rtc", CDP1879, XTAL_32_768kHz)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(magnum_state, screen_update)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_SIZE(6*80, 9*16)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 6*80-1, 0, 9*16-1)
|
||||
|
||||
MCFG_PALETTE_ADD_MONOCHROME("palette")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( magnum )
|
||||
ROM_REGION(0x20000, "bios", 0)
|
||||
ROM_LOAD16_BYTE("a1.7.88.bin", 0x00000, 0x4000, CRC(57882427) SHA1(97637b65ca43eb9d3bba546fb8ca701ba25ade8d))
|
||||
ROM_LOAD16_BYTE("a1.7.81.bin", 0x00001, 0x4000, CRC(949f53a8) SHA1(b339f1495d9af7dfff0c3a2c24789631f9d1265b))
|
||||
ROM_LOAD16_BYTE("a1.7.87.bin", 0x08000, 0x4000, CRC(25036dda) SHA1(20bc3782a66855b20cb0abe1051fa2eb50c7a860))
|
||||
ROM_LOAD16_BYTE("a1.7.82.bin", 0x08001, 0x4000, CRC(ecf387d8) SHA1(8b42f6ab030afb51f21f4a56c62e5acf7d074066))
|
||||
ROM_LOAD16_BYTE("a1.7.86.bin", 0x10000, 0x4000, CRC(c80b3a6b) SHA1(0f0d2cb653bbeff8f3bab6d20dc30c220a67a315))
|
||||
ROM_LOAD16_BYTE("a1.7.83.bin", 0x10001, 0x4000, CRC(51f56d78) SHA1(df717eada5e6439b1c01d91bd0ea009cd0f8ddfa))
|
||||
ROM_LOAD16_BYTE("a1.7.85.bin", 0x18000, 0x4000, CRC(f5dd5407) SHA1(af2edf7a658bcf648acb8be9f13849f838d96214))
|
||||
ROM_LOAD16_BYTE("a1.7.84.bin", 0x18001, 0x4000, CRC(b3434bb0) SHA1(8000a7aca8fc505b136a618d9eb210c50393eff1))
|
||||
|
||||
ROM_REGION(0x1000, "char", 0)
|
||||
ROM_LOAD("dulmontcharrom.bin", 0x0000, 0x1000, CRC(9dff89bf) SHA1(d359aeba7f0b0c81accf3bca25e7da636c033721))
|
||||
|
||||
ROM_REGION(0x1000, "cgrom", 0) // borrow this rom for the lcd screen as it looks the same, the above is for the crt output
|
||||
ROM_LOAD("hd44780_a00.bin", 0x0000, 0x1000, BAD_DUMP CRC(01d108e2) SHA1(bc0cdf0c9ba895f22e183c7bd35a3f655f2ca96f))
|
||||
ROM_END
|
||||
|
||||
COMP( 1983, magnum, 0, 0, magnum, 0, driver_device, 0, "Dulmont", "Magnum", MACHINE_NO_SOUND_HW)
|
@ -17624,6 +17624,9 @@ magictga // (c) 199? Acclaim
|
||||
@source:magmax.cpp
|
||||
magmax // (c) 1985
|
||||
|
||||
@source:magnum.cpp
|
||||
magnum //
|
||||
|
||||
@source:magtouch.cpp
|
||||
magtouch // (c) 1995
|
||||
|
||||
|
@ -319,6 +319,7 @@ m79152pc.cpp
|
||||
mac.cpp
|
||||
mac128.cpp
|
||||
macpci.cpp
|
||||
magnum.cpp
|
||||
mbc200.cpp
|
||||
mbc55x.cpp
|
||||
mbee.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user