mirror of
https://github.com/holub/mame
synced 2025-05-30 17:41:47 +03:00
New systems marked not working
------------------------------ Lucas Deeco SealTouch ST3220 [Carl, Adrian Black]
This commit is contained in:
parent
32c0279c14
commit
6b6e5bba89
@ -29800,6 +29800,9 @@ cjmx
|
|||||||
crzclass
|
crzclass
|
||||||
ddz
|
ddz
|
||||||
|
|
||||||
|
@source:misc/deecoseal.cpp
|
||||||
|
deecoseal
|
||||||
|
|
||||||
@source:misc/dfruit.cpp
|
@source:misc/dfruit.cpp
|
||||||
dfruit
|
dfruit
|
||||||
dfruita
|
dfruita
|
||||||
|
133
src/mame/misc/deecoseal.cpp
Normal file
133
src/mame/misc/deecoseal.cpp
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Carl
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Lucas Deeco SealTouch
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "cpu/i86/i186.h"
|
||||||
|
#include "cpu/mcs51/mcs51.h"
|
||||||
|
#include "screen.h"
|
||||||
|
#include "video/upd7220.h"
|
||||||
|
#include "bus/rs232/rs232.h"
|
||||||
|
#include "machine/mc68681.h"
|
||||||
|
#include "machine/i2cmem.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class deecoseal_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
deecoseal_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
driver_device(mconfig, type, tag),
|
||||||
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_mcs51(*this, "mcs51"),
|
||||||
|
m_crtc(*this, "crtc"),
|
||||||
|
m_duart(*this, "duart")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void deecoseal(machine_config &config);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void machine_start() override ATTR_COLD;
|
||||||
|
void map(address_map &map);
|
||||||
|
void io(address_map &map);
|
||||||
|
void mcs51_map(address_map &map);
|
||||||
|
void crtc_map(address_map &map);
|
||||||
|
|
||||||
|
bool m_port0;
|
||||||
|
|
||||||
|
required_device<i80186_cpu_device> m_maincpu;
|
||||||
|
required_device<cpu_device> m_mcs51;
|
||||||
|
required_device<upd7220_device> m_crtc;
|
||||||
|
required_device<scn2681_device> m_duart;
|
||||||
|
};
|
||||||
|
|
||||||
|
void deecoseal_state::machine_start()
|
||||||
|
{
|
||||||
|
u16 *rom = (u16 *)memregion("bios")->base();
|
||||||
|
u16 swapbuf[128];
|
||||||
|
|
||||||
|
for(int i = 0; i < 32768; i += 128)
|
||||||
|
{
|
||||||
|
u16 *cur = rom + i;
|
||||||
|
memcpy(swapbuf, cur, 256);
|
||||||
|
for(int j = 0; j < 128; j++)
|
||||||
|
{
|
||||||
|
int addr = 0;
|
||||||
|
addr |= ((BIT(j, 3) & !BIT(j, 5)) | (BIT(j, 4) & BIT(j, 5)));
|
||||||
|
addr |= ((BIT(j, 3) & BIT(j, 5)) | (BIT(j, 4) & !BIT(j, 5))) << 1;
|
||||||
|
addr |= ((BIT(j, 0) & BIT(j, 6)) | (BIT(j, 5) & !BIT(j, 6))) << 2;
|
||||||
|
addr |= ((BIT(j, 0) & !BIT(j, 6)) | (BIT(j, 5) & BIT(j, 6))) << 3;
|
||||||
|
addr |= BIT(j, 6) << 4;
|
||||||
|
addr |= ((BIT(j, 1) & !BIT(j, 4)) | (BIT(j, 2) & BIT(j, 4))) << 5;
|
||||||
|
addr |= ((BIT(j, 1) & BIT(j, 4)) | (BIT(j, 2) & !BIT(j, 4))) << 6;
|
||||||
|
cur[j] = swapbuf[addr];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_port0 = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deecoseal_state::map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x00000, 0x0ffff).ram();
|
||||||
|
map(0x40000, 0x43fff).ram();
|
||||||
|
map(0xf0000, 0xfffff).rom().region("bios", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deecoseal_state::io(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x0001).lr16([this](){ m_port0 = !m_port0; return m_port0 ? 0x10 : 0; }, "port0");
|
||||||
|
map(0x0110, 0x011f).rw(m_duart, FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask16(0x00ff);
|
||||||
|
map(0x0180, 0x0183).rw(m_crtc, FUNC(upd7220_device::read), FUNC(upd7220_device::write)).umask16(0x00ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deecoseal_state::mcs51_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x7fff).rom().region("mcs51", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deecoseal_state::crtc_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x7fff).ram();
|
||||||
|
}
|
||||||
|
|
||||||
|
void deecoseal_state::deecoseal(machine_config &config)
|
||||||
|
{
|
||||||
|
I80186(config, m_maincpu, XTAL(24'000'000));
|
||||||
|
m_maincpu->set_addrmap(AS_PROGRAM, &deecoseal_state::map);
|
||||||
|
m_maincpu->set_addrmap(AS_IO, &deecoseal_state::io);
|
||||||
|
|
||||||
|
I80C31(config, m_mcs51, XTAL(24'000'000) / 4); // clock?
|
||||||
|
m_mcs51->set_addrmap(AS_PROGRAM, &deecoseal_state::mcs51_map);
|
||||||
|
|
||||||
|
I2C_X2404P(config, "eeprom");
|
||||||
|
|
||||||
|
UPD7220(config, m_crtc, XTAL(16'257'000) / 2); // unknown clock
|
||||||
|
m_crtc->set_addrmap(AS_PROGRAM, &deecoseal_state::crtc_map);
|
||||||
|
m_crtc->set_screen("screen");
|
||||||
|
|
||||||
|
SCN2681(config, m_duart, XTAL(3'686'400)); // scn2692
|
||||||
|
|
||||||
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
|
screen.set_raw(XTAL(16'257'000), 848, 0, 640, 440, 0, 400);
|
||||||
|
screen.set_screen_update(m_crtc, FUNC(upd7220_device::screen_update));
|
||||||
|
}
|
||||||
|
|
||||||
|
ROM_START(deecoseal)
|
||||||
|
ROM_REGION16_LE(0x10000, "bios", 0)
|
||||||
|
ROM_SYSTEM_BIOS(0, "bios", "bios")
|
||||||
|
ROMX_LOAD("u28_27256_lo_rev_k_lucas_1990.bin", 0x0000, 0x8000, CRC(4f5e0d47) SHA1(646e369464b66705dbab888c8f351121ffc4bc37), ROM_SKIP(1) | ROM_BIOS(0))
|
||||||
|
ROMX_LOAD("u10_27256_hi_rev_k_lucas_1990.bin", 0x0001, 0x8000, CRC(20f7d631) SHA1(797482bc6b4427b8bf750608c5a83185fae02405), ROM_SKIP(1) | ROM_BIOS(0))
|
||||||
|
|
||||||
|
ROM_REGION(0x8000, "mcs51", 0)
|
||||||
|
ROM_LOAD("u34_27256_rev_b_lucas_1989.bin", 0x0000, 0x8000, CRC(01574116) SHA1(75d8dc739bf4ef1db91341f2fb02e0c698e39536))
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
COMP(1990, deecoseal, 0, 0, deecoseal, 0, deecoseal_state, empty_init, "Lucas", "Deeco SealTouch ST3220", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
Loading…
Reference in New Issue
Block a user