mirror of
https://github.com/holub/mame
synced 2025-05-29 00:53:09 +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
|
||||
ddz
|
||||
|
||||
@source:misc/deecoseal.cpp
|
||||
deecoseal
|
||||
|
||||
@source:misc/dfruit.cpp
|
||||
dfruit
|
||||
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