New working software list additions
----------------------------------- lk3000: Calculator, Electronic Notebook [hap, Sean Riddle] New NOT_WORKING software list additions --------------------------------------- lk3000: English-German [hap, Sean Riddle]
This commit is contained in:
parent
f23084f1d0
commit
20a03efe41
81
hash/lk3000.xml
Normal file
81
hash/lk3000.xml
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||||
|
<!--
|
||||||
|
license:CC0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Lexicon / Nixdorf LK-3000 cartridges
|
||||||
|
|
||||||
|
serial index:
|
||||||
|
|
||||||
|
LK-3000: main unit
|
||||||
|
LK-3800: adaptor
|
||||||
|
|
||||||
|
LK-0280: Winter Olympics
|
||||||
|
LK-0680: Summer Olympics
|
||||||
|
LK-3050: English-Spanish
|
||||||
|
LK-3060: English-French
|
||||||
|
LK-3070: English-Italian
|
||||||
|
LK-3080: English-German
|
||||||
|
LK-3090: English-Swedish
|
||||||
|
LK-3100: English-Polish
|
||||||
|
LK-3110: English-Portuguese
|
||||||
|
LK-3120: English-Russian
|
||||||
|
LK-3130: English-Greek
|
||||||
|
LK-3200: English-Spanish-French-German-Italian-Greek
|
||||||
|
LK-3500: Electronic Notebook
|
||||||
|
LK-3900: Calculator
|
||||||
|
|
||||||
|
unreleased?:
|
||||||
|
|
||||||
|
LK-3140: English-Arabic
|
||||||
|
LK-3150: English-Hebrew
|
||||||
|
LK-3160: English-Japanese
|
||||||
|
LK-3170: English-Chinese
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<softwarelist name="lk3000" description="LK-3000 Cartridges">
|
||||||
|
|
||||||
|
<software name="calc">
|
||||||
|
<description>Calculator</description>
|
||||||
|
<year>1979</year>
|
||||||
|
<publisher>Lexicon</publisher>
|
||||||
|
<info name="serial" value="LK-3900" />
|
||||||
|
<part name="cart" interface="lk3000">
|
||||||
|
<dataarea name="rom" size="0x2800">
|
||||||
|
<rom name="sc80249p_lk3900m" offset="0x0000" size="0x0800" crc="192edfcf" sha1="527216b6e15b9ab5f83742f437a5a8d8eef14ce2" />
|
||||||
|
</dataarea>
|
||||||
|
</part>
|
||||||
|
</software>
|
||||||
|
|
||||||
|
<software name="german" supported="no">
|
||||||
|
<description>English-German</description>
|
||||||
|
<year>1979</year>
|
||||||
|
<publisher>Lexicon</publisher>
|
||||||
|
<info name="serial" value="LK-3080" />
|
||||||
|
<part name="cart" interface="lk3000">
|
||||||
|
<dataarea name="rom" size="0x2800">
|
||||||
|
<rom name="sc80236p_lk3080m" offset="0x0000" size="0x0800" crc="69019491" sha1="d452d1c7b70310c1da9cea2e8b2b1369e1e4cc92" />
|
||||||
|
<rom name="lk_3080_r1" offset="0x0800" size="0x1000" crc="1712568d" sha1="24db112e0845fcf8451721a1f9a043aed4995d98" /> <!-- EA 8332 -->
|
||||||
|
<rom name="lk_3080_r2" offset="0x1800" size="0x1000" crc="669479d1" sha1="3bae1d6fc80781053c127908b8154e16bee933b9" /> <!-- EA 8332 -->
|
||||||
|
</dataarea>
|
||||||
|
</part>
|
||||||
|
</software>
|
||||||
|
|
||||||
|
<software name="notebook">
|
||||||
|
<description>Electronic Notebook</description>
|
||||||
|
<year>1980</year>
|
||||||
|
<publisher>Lexicon</publisher>
|
||||||
|
<info name="serial" value="LK-3500" />
|
||||||
|
<part name="cart" interface="lk3000">
|
||||||
|
<feature name="ram" value="1" />
|
||||||
|
<dataarea name="rom" size="0x2800">
|
||||||
|
<rom name="sc80293p_lk3500m" offset="0x0000" size="0x0800" crc="ec8e7d7c" sha1="13e0b174647ecea8f0db5511b7b93df504e91aa9" />
|
||||||
|
</dataarea>
|
||||||
|
</part>
|
||||||
|
</software>
|
||||||
|
|
||||||
|
</softwarelist>
|
@ -4497,8 +4497,6 @@ if (BUSES["SAITEK_OSA"]~=null) then
|
|||||||
files {
|
files {
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.cpp",
|
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.h",
|
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.h",
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/modules.cpp",
|
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/modules.h",
|
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.cpp",
|
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.h",
|
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.h",
|
||||||
MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.cpp",
|
MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.cpp",
|
||||||
|
@ -11,6 +11,10 @@ Used by Saitek(SciSys) chess computers Leonardo, Galileo, Renaissance.
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "expansion.h"
|
#include "expansion.h"
|
||||||
|
|
||||||
|
#include "maestro.h"
|
||||||
|
#include "maestroa.h"
|
||||||
|
#include "sparc.h"
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// DEVICE DEFINITIONS
|
// DEVICE DEFINITIONS
|
||||||
@ -153,3 +157,15 @@ device_saitekosa_expansion_interface::device_saitekosa_expansion_interface(const
|
|||||||
device_saitekosa_expansion_interface::~device_saitekosa_expansion_interface()
|
device_saitekosa_expansion_interface::~device_saitekosa_expansion_interface()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// module list
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void saitekosa_expansion_modules(device_slot_interface &device)
|
||||||
|
{
|
||||||
|
device.option_add("analyst", OSA_ANALYST);
|
||||||
|
device.option_add("maestro", OSA_MAESTRO);
|
||||||
|
device.option_add("maestroa", OSA_MAESTROA);
|
||||||
|
device.option_add("sparc", OSA_SPARC);
|
||||||
|
}
|
||||||
|
@ -119,10 +119,10 @@ protected:
|
|||||||
saitekosa_expansion_device *m_expansion;
|
saitekosa_expansion_device *m_expansion;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void saitekosa_expansion_modules(device_slot_interface &device);
|
||||||
|
|
||||||
|
|
||||||
// device type definition
|
// device type definition
|
||||||
DECLARE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device)
|
DECLARE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device)
|
||||||
|
|
||||||
// include here so drivers don't need to
|
|
||||||
#include "modules.h"
|
|
||||||
|
|
||||||
#endif // MAME_BUS_SAITEKOSA_EXPANSION_H
|
#endif // MAME_BUS_SAITEKOSA_EXPANSION_H
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:hap
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Saitek OSA Expansion Slot modules
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "modules.h"
|
|
||||||
|
|
||||||
#include "maestro.h"
|
|
||||||
#include "maestroa.h"
|
|
||||||
#include "sparc.h"
|
|
||||||
|
|
||||||
void saitekosa_expansion_modules(device_slot_interface &device)
|
|
||||||
{
|
|
||||||
device.option_add("analyst", OSA_ANALYST);
|
|
||||||
device.option_add("maestro", OSA_MAESTRO);
|
|
||||||
device.option_add("maestroa", OSA_MAESTROA);
|
|
||||||
device.option_add("sparc", OSA_SPARC);
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:hap
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Saitek OSA Expansion Slot modules
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#ifndef MAME_BUS_SAITEKOSA_MODULES_H
|
|
||||||
#define MAME_BUS_SAITEKOSA_MODULES_H
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
void saitekosa_expansion_modules(device_slot_interface &device);
|
|
||||||
|
|
||||||
#endif // MAME_BUS_SAITEKOSA_MODULES_H
|
|
@ -38,6 +38,9 @@ TODO:
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "bus/generic/carts.h"
|
||||||
|
#include "bus/generic/slot.h"
|
||||||
#include "cpu/m6502/m6502.h"
|
#include "cpu/m6502/m6502.h"
|
||||||
#include "cpu/m6502/m65c02.h"
|
#include "cpu/m6502/m65c02.h"
|
||||||
#include "video/pwm.h"
|
#include "video/pwm.h"
|
||||||
@ -45,8 +48,6 @@ TODO:
|
|||||||
#include "machine/6522via.h"
|
#include "machine/6522via.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "bus/generic/slot.h"
|
|
||||||
#include "bus/generic/carts.h"
|
|
||||||
|
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
#include "softlist.h"
|
#include "softlist.h"
|
||||||
|
@ -403,13 +403,13 @@ static INPUT_PORTS_START( qkracerm )
|
|||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
|
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(u8"÷")
|
||||||
|
|
||||||
PORT_START("IN.2") // DS8874 OUT 6 port K
|
PORT_START("IN.2") // DS8874 OUT 6 port K
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
|
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(u8"×")
|
||||||
|
|
||||||
PORT_START("IN.3") // DS8874 OUT 7 port K
|
PORT_START("IN.3") // DS8874 OUT 7 port K
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
|
||||||
|
@ -8,7 +8,7 @@ It was also licensed to Nixdorf.
|
|||||||
|
|
||||||
Hardware notes:
|
Hardware notes:
|
||||||
- 3870 MCU (Motorola brand) @ 4MHz(2MHz internal)
|
- 3870 MCU (Motorola brand) @ 4MHz(2MHz internal)
|
||||||
- optional extra ROM or RAM
|
- optional external ROM or RAM
|
||||||
- 4*Litronix DL 1414 (16*17segs total)
|
- 4*Litronix DL 1414 (16*17segs total)
|
||||||
- 33-button keypad
|
- 33-button keypad
|
||||||
|
|
||||||
@ -16,13 +16,20 @@ The CPU and memory is on the cartridge. In theory, any hardware configuration
|
|||||||
is possible, but it looks like they always used a 3870.
|
is possible, but it looks like they always used a 3870.
|
||||||
|
|
||||||
cartridge types known:
|
cartridge types known:
|
||||||
- CPU + 4KB ROM (ROM may be unpopulated)
|
- CPU + 4/8KB ROM (ROM may be unpopulated)
|
||||||
- CPU + 2*4KB ROM
|
- CPU + 2*4KB ROM
|
||||||
- CPU + 1KB battery-backed RAM (2*NEC D444)
|
- CPU + 1KB battery-backed RAM (2*NEC D444)
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- external rom access doesn't work ("german" locks up)
|
||||||
|
- external ram should be battery-backed
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "bus/generic/carts.h"
|
||||||
|
#include "bus/generic/slot.h"
|
||||||
#include "cpu/f8/f8.h"
|
#include "cpu/f8/f8.h"
|
||||||
#include "machine/f3853.h"
|
#include "machine/f3853.h"
|
||||||
#include "video/dl1416.h"
|
#include "video/dl1416.h"
|
||||||
@ -40,6 +47,7 @@ public:
|
|||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_dl1414(*this, "dl1414_%u", 0),
|
m_dl1414(*this, "dl1414_%u", 0),
|
||||||
|
m_cart(*this, "cartslot"),
|
||||||
m_inputs(*this, "IN.%u", 0),
|
m_inputs(*this, "IN.%u", 0),
|
||||||
m_digits(*this, "digit%u", 0U)
|
m_digits(*this, "digit%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
@ -56,12 +64,14 @@ private:
|
|||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device_array<dl1414_device, 4> m_dl1414;
|
required_device_array<dl1414_device, 4> m_dl1414;
|
||||||
|
required_device<generic_slot_device> m_cart;
|
||||||
required_ioport_array<8> m_inputs;
|
required_ioport_array<8> m_inputs;
|
||||||
output_finder<16> m_digits;
|
output_finder<16> m_digits;
|
||||||
|
|
||||||
void main_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
void main_io(address_map &map);
|
void main_io(address_map &map);
|
||||||
|
|
||||||
|
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||||
template <int N> void update_display(offs_t offset, u16 data);
|
template <int N> void update_display(offs_t offset, u16 data);
|
||||||
|
|
||||||
u8 p0_r();
|
u8 p0_r();
|
||||||
@ -77,17 +87,23 @@ private:
|
|||||||
u8 m_p1 = 0;
|
u8 m_p1 = 0;
|
||||||
u8 m_p4 = 0;
|
u8 m_p4 = 0;
|
||||||
u8 m_p5 = 0;
|
u8 m_p5 = 0;
|
||||||
|
|
||||||
|
bool m_has_ram = false;
|
||||||
|
u8 m_ram[0x400];
|
||||||
};
|
};
|
||||||
|
|
||||||
void lk3000_state::machine_start()
|
void lk3000_state::machine_start()
|
||||||
{
|
{
|
||||||
m_digits.resolve();
|
m_digits.resolve();
|
||||||
|
memset(m_ram, 0xff, 0x400);
|
||||||
|
|
||||||
// register for savestates
|
// register for savestates
|
||||||
save_item(NAME(m_p0));
|
save_item(NAME(m_p0));
|
||||||
save_item(NAME(m_p1));
|
save_item(NAME(m_p1));
|
||||||
save_item(NAME(m_p4));
|
save_item(NAME(m_p4));
|
||||||
save_item(NAME(m_p5));
|
save_item(NAME(m_p5));
|
||||||
|
save_item(NAME(m_has_ram));
|
||||||
|
save_item(NAME(m_ram));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -96,29 +112,62 @@ void lk3000_state::machine_start()
|
|||||||
I/O
|
I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
// misc
|
||||||
|
|
||||||
|
DEVICE_IMAGE_LOAD_MEMBER(lk3000_state::cart_load)
|
||||||
|
{
|
||||||
|
u32 size = m_cart->common_get_size("rom");
|
||||||
|
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
|
||||||
|
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
|
||||||
|
|
||||||
|
// extra ram (optional)
|
||||||
|
m_has_ram = image.get_feature("ram") != nullptr;
|
||||||
|
|
||||||
|
return image_init_result::PASS;
|
||||||
|
}
|
||||||
|
|
||||||
template <int N>
|
template <int N>
|
||||||
void lk3000_state::update_display(offs_t offset, u16 data)
|
void lk3000_state::update_display(offs_t offset, u16 data)
|
||||||
{
|
{
|
||||||
m_digits[N * 4 + offset] = data;
|
m_digits[N * 4 + offset] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 3870 ports
|
||||||
|
|
||||||
u8 lk3000_state::p0_r()
|
u8 lk3000_state::p0_r()
|
||||||
{
|
{
|
||||||
return 0;
|
return m_p0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lk3000_state::p0_w(u8 data)
|
void lk3000_state::p0_w(u8 data)
|
||||||
{
|
{
|
||||||
|
m_p0 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 lk3000_state::p1_r()
|
u8 lk3000_state::p1_r()
|
||||||
{
|
{
|
||||||
u8 data = 0;
|
u8 data = m_p1;
|
||||||
|
|
||||||
// P10-P13: multiplexed inputs
|
// P10-P13: multiplexed inputs
|
||||||
if (m_p4 & 0x10)
|
if (m_p4 & 0x10)
|
||||||
data |= m_inputs[~m_p4 & 7]->read();
|
data |= m_inputs[~m_p4 & 7]->read();
|
||||||
|
|
||||||
|
// read rom data
|
||||||
|
if (m_p5 & 0x20)
|
||||||
|
{
|
||||||
|
// P00-P06: A0-A6, P50-P54: A7-A11, P07 selects chip
|
||||||
|
u16 offset = (m_p0 & 0x7f) | (m_p5 << 7 & 0xf80) | (m_p0 << 5 & 0x1000);
|
||||||
|
data |= m_cart->read_rom(offset + 0x800);
|
||||||
|
}
|
||||||
|
|
||||||
|
// read ram data
|
||||||
|
if (m_has_ram && m_p4 & 0xc0)
|
||||||
|
{
|
||||||
|
u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300);
|
||||||
|
data |= m_ram[offset];
|
||||||
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +182,7 @@ void lk3000_state::p1_w(u8 data)
|
|||||||
|
|
||||||
u8 lk3000_state::p4_r()
|
u8 lk3000_state::p4_r()
|
||||||
{
|
{
|
||||||
return 0;
|
return m_p4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lk3000_state::p4_w(u8 data)
|
void lk3000_state::p4_w(u8 data)
|
||||||
@ -146,17 +195,25 @@ void lk3000_state::p4_w(u8 data)
|
|||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
m_dl1414[i]->wr_w(BIT(1 << (~data >> 2 & 0xb), i));
|
m_dl1414[i]->wr_w(BIT(1 << (~data >> 2 & 0xb), i));
|
||||||
|
|
||||||
|
// P46: write ram data
|
||||||
|
if (m_has_ram && ~data & m_p4 & 0x40)
|
||||||
|
{
|
||||||
|
u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300);
|
||||||
|
m_ram[offset] = m_p1;
|
||||||
|
}
|
||||||
|
|
||||||
// P40,P41,P42,P44: 7442 to keypad mux
|
// P40,P41,P42,P44: 7442 to keypad mux
|
||||||
m_p4 = data;
|
m_p4 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 lk3000_state::p5_r()
|
u8 lk3000_state::p5_r()
|
||||||
{
|
{
|
||||||
return 0;
|
return m_p5;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lk3000_state::p5_w(u8 data)
|
void lk3000_state::p5_w(u8 data)
|
||||||
{
|
{
|
||||||
|
m_p5 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -168,7 +225,7 @@ void lk3000_state::p5_w(u8 data)
|
|||||||
void lk3000_state::main_map(address_map &map)
|
void lk3000_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
map.global_mask(0x7ff);
|
map.global_mask(0x7ff);
|
||||||
map(0x0000, 0x07ff).rom();
|
map(0x0000, 0x07ff).r("cartslot", FUNC(generic_slot_device::read_rom));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lk3000_state::main_io(address_map &map)
|
void lk3000_state::main_io(address_map &map)
|
||||||
@ -186,55 +243,55 @@ void lk3000_state::main_io(address_map &map)
|
|||||||
|
|
||||||
static INPUT_PORTS_START( lk3000 )
|
static INPUT_PORTS_START( lk3000 )
|
||||||
PORT_START("IN.0")
|
PORT_START("IN.0")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_NAME("A / MET")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_NAME("B / US")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_NAME("C / X>M")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_NAME("D / K")
|
||||||
|
|
||||||
PORT_START("IN.1")
|
PORT_START("IN.1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_NAME("J / C1")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_NAME("K / C2")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_NAME("L / RM")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_NAME("M / %")
|
||||||
|
|
||||||
PORT_START("IN.2")
|
PORT_START("IN.2")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_NAME("S / EXC")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_NAME("T / +/-")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_NAME("U / M+")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("V / 0")
|
||||||
|
|
||||||
PORT_START("IN.3")
|
PORT_START("IN.3")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('e') PORT_NAME("E / 7")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('f') PORT_NAME("F / 8")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('g') PORT_NAME("G / 9")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR('h') PORT_NAME(u8"H / ÷")
|
||||||
|
|
||||||
PORT_START("IN.4")
|
PORT_START("IN.4")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('n') PORT_NAME("N / 4")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('o') PORT_NAME("O / 5")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('p') PORT_NAME("P / 6")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('q') PORT_NAME("Q / +")
|
||||||
|
|
||||||
PORT_START("IN.5")
|
PORT_START("IN.5")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('w') PORT_NAME("W / 1")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('x') PORT_NAME("X / 2")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('y') PORT_NAME("Y / 3")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('z') PORT_NAME("Z / .")
|
||||||
|
|
||||||
PORT_START("IN.6")
|
PORT_START("IN.6")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('?') PORT_NAME("? / P2")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("bs / P1")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('r') PORT_NAME("R / -")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('i') PORT_NAME(u8"I / ×")
|
||||||
|
|
||||||
PORT_START("IN.7")
|
PORT_START("IN.7")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("def / P4")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') PORT_NAME("stp / P3")
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(' ') PORT_NAME("sp / =")
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("f")
|
||||||
|
|
||||||
PORT_START("RESET")
|
PORT_START("RESET")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_NAME("clr")
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_CHAR(127) PORT_NAME("clr")
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +322,13 @@ void lk3000_state::lk3000(machine_config &config)
|
|||||||
DL1414T(config, m_dl1414[2], u32(0)).update().set(FUNC(lk3000_state::update_display<2>));
|
DL1414T(config, m_dl1414[2], u32(0)).update().set(FUNC(lk3000_state::update_display<2>));
|
||||||
DL1414T(config, m_dl1414[3], u32(0)).update().set(FUNC(lk3000_state::update_display<3>));
|
DL1414T(config, m_dl1414[3], u32(0)).update().set(FUNC(lk3000_state::update_display<3>));
|
||||||
config.set_default_layout(layout_lk3000);
|
config.set_default_layout(layout_lk3000);
|
||||||
|
|
||||||
|
// cartridge
|
||||||
|
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "lk3000");
|
||||||
|
m_cart->set_device_load(FUNC(lk3000_state::cart_load));
|
||||||
|
m_cart->set_must_be_loaded(true);
|
||||||
|
|
||||||
|
SOFTWARE_LIST(config, "cart_list").set_original("lk3000");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -276,7 +340,6 @@ void lk3000_state::lk3000(machine_config &config)
|
|||||||
ROM_START( lk3000 )
|
ROM_START( lk3000 )
|
||||||
ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 )
|
ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 )
|
||||||
// none here, it's in the module slot
|
// none here, it's in the module slot
|
||||||
//ROM_LOAD("sc80249p_lk3900m", 0x0000, 0x0800, CRC(192edfcf) SHA1(527216b6e15b9ab5f83742f437a5a8d8eef14ce2) ) // will be moved to swlist
|
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
Loading…
Reference in New Issue
Block a user