mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
New working machines
-------------------- Gerät 32620 (Sprach/Morsegenerator) [Dirk Best, natarii, Crypto Museum] New working software list additions -------------------- English (Polish speaker) [Crypto Museum] German [Crypto Museum] German (older) [Crypto Museum] Spanish [Crypto Museum] dac.h: Add AD7520 DAC
This commit is contained in:
parent
03df3f088e
commit
c3bf2135f2
81
hash/sprachmg.xml
Normal file
81
hash/sprachmg.xml
Normal file
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<!--
|
||||
license:CC0
|
||||
-->
|
||||
|
||||
<softwarelist name="sprachmg" description="Gerät 32620 (Sprach/Morsegenerator) Speech Modules">
|
||||
|
||||
<!-- Recreated from samples -->
|
||||
<software name="english">
|
||||
<description>English (Polish speaker)</description>
|
||||
<year>198?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="rom" interface="sprachmg">
|
||||
<dataarea name="pcb1" size="0xc000">
|
||||
<rom name="32620_en-1.bin" offset="0x0000" size="0x2000" crc="f99a4f83" sha1="eed383b51ea5408905335f2ce9376bf828c4fd2e" status="baddump" />
|
||||
<rom name="32620_en-2.bin" offset="0x2000" size="0x2000" crc="1be4c666" sha1="f3d8ab6e3782c2434f8312b252589ef066918e1d" status="baddump" />
|
||||
<rom name="32620_en-3.bin" offset="0x4000" size="0x2000" crc="10e8e115" sha1="2721da167265b6c5aa49f33b6ea0d9f01c5350c5" status="baddump" />
|
||||
<rom name="32620_en-4.bin" offset="0x6000" size="0x2000" crc="69ae7f4b" sha1="f582c487336ac94cbcc531435d0bad536426ce2c" status="baddump" />
|
||||
<rom name="32620_en-5.bin" offset="0x8000" size="0x2000" crc="ac76f264" sha1="f01b026c3c8bab1d1aa8c15bce9c0883da5a2c27" status="baddump" />
|
||||
<rom name="32620_en-6.bin" offset="0xa000" size="0x2000" crc="fbb240c9" sha1="1386529ce06836db5eb273cf0434cb2eeff165aa" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="pcb2" size="0xc000">
|
||||
<rom name="32620_en-7.bin" offset="0x0000" size="0x2000" crc="0ad5e9e3" sha1="c27a45e2fdc9d5da91cb263d3157f51376155824" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="german">
|
||||
<description>German</description>
|
||||
<year>1984</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="rom" interface="sprachmg">
|
||||
<dataarea name="pcb1" size="0xc000">
|
||||
<rom name="2620_8401-1.bin" offset="0x0000" size="0x2000" crc="05f58420" sha1="d7a81e337b1f97b861d1f39569d8b236266d1335" />
|
||||
<rom name="2620_8401-2.bin" offset="0x2000" size="0x2000" crc="df8b0bb9" sha1="fe69b905819f95bfd17fdf41f8a1a68e0848c624" />
|
||||
<rom name="2620_8401-3.bin" offset="0x4000" size="0x2000" crc="13554a48" sha1="04dec28efac7b974787db0d7b05df6cf364d9bb4" />
|
||||
<rom name="2620_8401-4.bin" offset="0x6000" size="0x2000" crc="a41bc709" sha1="c054653c41ae1c3b0fd07cba07c5a8566ff63a7c" />
|
||||
<rom name="2620_8401-5.bin" offset="0x8000" size="0x2000" crc="739c3547" sha1="5fcaab9ede8c9366f689ceeb763c862d2110d3c9" />
|
||||
<rom name="2620_8401-6.bin" offset="0xa000" size="0x2000" crc="549b5994" sha1="6ab046dd14e12237615a90cac9cadd09cddd0f24" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="germano">
|
||||
<description>German (older)</description>
|
||||
<year>198?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="rom" interface="sprachmg">
|
||||
<dataarea name="pcb1" size="0xc000">
|
||||
<rom name="2620_de-1.bin" offset="0x0000" size="0x2000" crc="2e475ce7" sha1="efd3da128f515e479547c9e4f4bb107dde8ea52d" />
|
||||
<rom name="2620_de-2.bin" offset="0x2000" size="0x2000" crc="675ea7c8" sha1="a74cd99f8be98b85d356ae0c3c5c794d740a7445" />
|
||||
<rom name="2620_de-3.bin" offset="0x4000" size="0x2000" crc="9d474786" sha1="f05e232c04de34aceaa63fe26a2d5dfb4c5a163a" />
|
||||
<rom name="2620_de-4.bin" offset="0x6000" size="0x2000" crc="7f02ff72" sha1="e4d7db906a08d89602fd093b7a037a270e567536" />
|
||||
<rom name="2620_de-5.bin" offset="0x8000" size="0x2000" crc="f20c8633" sha1="eebd61bab47d54e7688cdac287ceb1a110d46af7" />
|
||||
<rom name="2620_de-6.bin" offset="0xa000" size="0x2000" crc="69a2d785" sha1="2c547b583dcc16208f0422e121cd482c3356528d" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spanish">
|
||||
<description>Spanish</description>
|
||||
<year>198?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="rom" interface="sprachmg">
|
||||
<dataarea name="pcb1" size="0xc000">
|
||||
<rom name="32620_es-1.bin" offset="0x0000" size="0x2000" crc="7357485a" sha1="ad001a9c147398a0908db4369283f5c82a28c4fb" />
|
||||
<rom name="32620_es-2.bin" offset="0x2000" size="0x2000" crc="8eeb0e9b" sha1="ce3df4f47e942c7bdd277d5a619780f16be6ea00" />
|
||||
<rom name="32620_es-3.bin" offset="0x4000" size="0x2000" crc="4210c86f" sha1="5714cf7fd4885dad29f7d9532434a7d547a6bebe" />
|
||||
<rom name="32620_es-4.bin" offset="0x6000" size="0x2000" crc="e456d024" sha1="5cff9e63c3af02afcb4b63acf296138b6691638f" />
|
||||
<rom name="32620_es-5.bin" offset="0x8000" size="0x2000" crc="580f8199" sha1="59296f6546fd54a0570bcf3390e35d457531a5f9" />
|
||||
<rom name="32620_es-6.bin" offset="0xa000" size="0x2000" crc="37d2094b" sha1="2e956644509005c31bcd8da26088d062b2e70354" />
|
||||
</dataarea>
|
||||
<dataarea name="pcb2" size="0xc000">
|
||||
<rom name="32620_es-7.bin" offset="0x0000" size="0x2000" crc="303bc783" sha1="7e97a241cf8af252ef5dfa7175008a78fac89739" />
|
||||
<rom name="32620_es-8.bin" offset="0x2000" size="0x2000" crc="0718aa10" sha1="d2bf479a32e7dd6d7b421d87380b684f7b495899" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
@ -195,6 +195,7 @@ DAC_GENERATOR_EPILOG(_dac_type, _dac_class, _dac_description, _dac_shortname)
|
||||
DAC_GENERATOR(AD557, ad557_device, dac_byte_device_base, dac_mapper_unsigned, 8, dac_gain_r2r, "AD557 DAC", "ad557")
|
||||
DAC_GENERATOR(AD558, ad558_device, dac_byte_device_base, dac_mapper_unsigned, 8, dac_gain_r2r, "AD558 DAC", "ad558")
|
||||
DAC_GENERATOR(AD7224, ad7224_device, dac_byte_device_base, dac_mapper_unsigned, 8, dac_gain_r2r, "AD7224 DAC", "ad7224")
|
||||
DAC_GENERATOR(AD7520, ad7520_device, dac_word_device_base, dac_mapper_unsigned, 10, dac_gain_r2r, "AD7520 DAC", "ad7520")
|
||||
DAC_GENERATOR(AD7521, ad7521_device, dac_word_device_base, dac_mapper_unsigned, 12, dac_gain_r2r, "AD7521 DAC", "ad7521")
|
||||
DAC_GENERATOR(AD7523, ad7523_device, dac_byte_device_base, dac_mapper_unsigned, 8, dac_gain_r2r, "AD7523 DAC", "ad7523")
|
||||
DAC_GENERATOR(AD7524, ad7524_device, dac_byte_device_base, dac_mapper_unsigned, 8, dac_gain_r2r, "AD7524 DAC", "ad7524")
|
||||
|
440
src/mame/ddr/sprachmg.cpp
Normal file
440
src/mame/ddr/sprachmg.cpp
Normal file
@ -0,0 +1,440 @@
|
||||
// license: BSD-3-Clause
|
||||
// copyright-holders: natarii, Dirk Best
|
||||
/***************************************************************************
|
||||
|
||||
Gerät 32620 (aka Sprach/Morsegenerator, Stimme and more)
|
||||
|
||||
Digital speech generator. Used by the Ministerium für Staatssicherheit
|
||||
to send coded messages to agents using shortwave "Number Stations".
|
||||
|
||||
More info: https://www.cryptomuseum.com/spy/owvl/32620/index.htm
|
||||
|
||||
Hardware:
|
||||
- UB880 (Z80)
|
||||
- D2764D
|
||||
- D446C x2
|
||||
- UB8560D
|
||||
- UB855D x2
|
||||
- 9.832 MHz XTAL
|
||||
- UB855D x2 (on expansion board)
|
||||
- MBM2764-20 x12 (can be less, on speech module)
|
||||
|
||||
TODO:
|
||||
- Tape input
|
||||
- DAC gain
|
||||
- Verify daisy chain
|
||||
- Remote
|
||||
|
||||
Notes:
|
||||
- Emulated is "version 2", it's possible that there are many hardware
|
||||
variations (the available documention is for a slighly different
|
||||
version for example)
|
||||
- Serial protocol is undocumented (settings: 1200 Baud, 8-O-1) and
|
||||
might not even be fully implemented in this version
|
||||
- It uses a 10-bit DAC, but only 8 bits are used
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/z80daisy.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "machine/z80sio.h"
|
||||
#include "sound/dac.h"
|
||||
#include "softlist_dev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "sprachmg.lh"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class sprachmg_state : public driver_device
|
||||
{
|
||||
public:
|
||||
sprachmg_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_pio(*this, "pio%u", 0U),
|
||||
m_sio(*this, "sio"),
|
||||
m_speech_module(*this, "speech"),
|
||||
m_dac(*this, "dac"),
|
||||
m_keys(*this, "keypad%u", 0U),
|
||||
m_special(*this, "special"),
|
||||
m_remote(*this, "remote"),
|
||||
m_chargen(*this, "chargen"),
|
||||
m_dmd(*this, "dot%u%u", 0U, 0U),
|
||||
m_led_speech(*this, "led_speech"),
|
||||
m_led_morse(*this, "led_morse"),
|
||||
m_led_standard(*this, "led_standard"),
|
||||
m_display_data(0x00),
|
||||
m_key_scan(0x1f),
|
||||
m_speech_select(0xff),
|
||||
m_speech_module_pcb1(nullptr),
|
||||
m_speech_module_pcb2(nullptr)
|
||||
{ }
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(keypad_res);
|
||||
|
||||
void sprachmg(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
required_device<z80_device> m_maincpu;
|
||||
required_device_array<z80pio_device, 4> m_pio;
|
||||
required_device<z80sio_device> m_sio;
|
||||
required_device<generic_slot_device> m_speech_module;
|
||||
required_device<dac_word_interface> m_dac;
|
||||
required_ioport_array<5> m_keys;
|
||||
required_ioport m_special;
|
||||
required_ioport m_remote;
|
||||
required_region_ptr<uint8_t> m_chargen;
|
||||
output_finder<8, 7> m_dmd;
|
||||
output_finder<> m_led_speech;
|
||||
output_finder<> m_led_morse;
|
||||
output_finder<> m_led_standard;
|
||||
|
||||
void mem_map(address_map &map);
|
||||
void io_map(address_map &map);
|
||||
|
||||
void display_data_w(uint8_t data);
|
||||
void display_column_w(uint8_t data);
|
||||
|
||||
uint8_t key_r();
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(module_load);
|
||||
uint8_t speech_r(offs_t offset);
|
||||
|
||||
void sys_w(uint8_t data);
|
||||
|
||||
uint8_t m_display_data;
|
||||
uint8_t m_key_scan;
|
||||
uint8_t m_speech_select;
|
||||
uint8_t *m_speech_module_pcb1;
|
||||
uint8_t *m_speech_module_pcb2;
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
|
||||
void sprachmg_state::mem_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).rom();
|
||||
map(0x2000, 0x2fff).ram().share("nvram");
|
||||
map(0x4000, 0xffff).r(FUNC(sprachmg_state::speech_r));
|
||||
}
|
||||
|
||||
void sprachmg_state::io_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0xff);
|
||||
map(0x7c, 0x7f).rw(m_pio[2], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // on expansion board
|
||||
map(0xbc, 0xbf).rw(m_pio[3], FUNC(z80pio_device::read), FUNC(z80pio_device::write)); // on expansion board
|
||||
map(0xc0, 0xc3).rw(m_sio, FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w));
|
||||
map(0xc8, 0xcb).rw(m_pio[0], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
|
||||
map(0xd0, 0xd3).rw(m_pio[1], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INPUT PORT DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
static INPUT_PORTS_START( sprachmg )
|
||||
PORT_START("keypad0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("EX")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("<")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME(">")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("keypad1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPC")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("/")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_COLON) PORT_NAME(":")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("CLR")
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("keypad2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("?")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3 -")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MODE")
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("keypad3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("=")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2 .")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("OUT")
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("keypad4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0 NO")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1 YES")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INP")
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("special")
|
||||
PORT_BIT(0x1f, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("STA/STP") PORT_WRITE_LINE_DEVICE_MEMBER("pio0", z80pio_device, pb5_w)
|
||||
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("remote")
|
||||
PORT_BIT(0x3f, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("STA/STP (Remote)") PORT_WRITE_LINE_DEVICE_MEMBER("pio0", z80pio_device, pb6_w)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("reset")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RES") PORT_CHANGED_MEMBER(DEVICE_SELF, sprachmg_state, keypad_res, 0)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// KEYPAD
|
||||
//**************************************************************************
|
||||
|
||||
INPUT_CHANGED_MEMBER( sprachmg_state::keypad_res )
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
|
||||
|
||||
if (newval && !oldval)
|
||||
m_sio->reset();
|
||||
}
|
||||
|
||||
uint8_t sprachmg_state::key_r()
|
||||
{
|
||||
// 7------- not used
|
||||
// -6------ start/stop on remote
|
||||
// --5----- start/stop
|
||||
// ---43210 keypad selected row
|
||||
|
||||
uint8_t data = 0xff;
|
||||
|
||||
for (unsigned i = 0; i < 5; i++)
|
||||
if (BIT(m_key_scan, i) == 0)
|
||||
data &= m_keys[i]->read();
|
||||
|
||||
data &= m_special->read();
|
||||
data &= m_remote->read();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// VIDEO EMULATION
|
||||
//**************************************************************************
|
||||
|
||||
void sprachmg_state::display_data_w(uint8_t data)
|
||||
{
|
||||
m_display_data = data;
|
||||
|
||||
m_pio[1]->strobe_b(1);
|
||||
m_pio[1]->strobe_b(0);
|
||||
}
|
||||
|
||||
void sprachmg_state::display_column_w(uint8_t data)
|
||||
{
|
||||
for (unsigned i = 0; i < 7; i++)
|
||||
m_dmd[data & 0x07][i] = m_chargen[0x100 + (i << 8) + m_display_data];
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// SPEECH MODULE
|
||||
//**************************************************************************
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER( sprachmg_state::module_load )
|
||||
{
|
||||
if (!image.loaded_through_softlist())
|
||||
{
|
||||
image.seterror(image_error::UNSUPPORTED, "Speech modules can only be loaded using a software list");
|
||||
return image_init_result::FAIL;
|
||||
}
|
||||
|
||||
uint32_t pcb1_size = image.get_software_region_length("pcb1");
|
||||
|
||||
if (pcb1_size != 0xc000)
|
||||
{
|
||||
image.seterror(image_error::INVALIDIMAGE, "Invalid pcb1 region length");
|
||||
return image_init_result::FAIL;
|
||||
}
|
||||
|
||||
m_speech_module_pcb1 = image.get_software_region("pcb1");
|
||||
|
||||
uint32_t pcb2_size = image.get_software_region_length("pcb2");
|
||||
|
||||
if (pcb2_size > 0 && pcb2_size != 0xc000)
|
||||
{
|
||||
image.seterror(image_error::INVALIDIMAGE, "Invalid pcb2 region length");
|
||||
return image_init_result::FAIL;
|
||||
}
|
||||
|
||||
m_speech_module_pcb2 = image.get_software_region("pcb2");
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
uint8_t sprachmg_state::speech_r(offs_t offset)
|
||||
{
|
||||
if (BIT(m_speech_select, 1) == 0 && m_speech_module_pcb1)
|
||||
return m_speech_module_pcb1[offset];
|
||||
|
||||
if (BIT(m_speech_select, 0) == 0 && m_speech_module_pcb2)
|
||||
return m_speech_module_pcb2[offset];
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE EMULATION
|
||||
//**************************************************************************
|
||||
|
||||
void sprachmg_state::sys_w(uint8_t data)
|
||||
{
|
||||
// 7------- speech card 1 (active low)
|
||||
// -6------ speech card 2 (active low)
|
||||
// --5----- led standard
|
||||
// ---4---- led speech
|
||||
// ----3--- led morse
|
||||
// -----210 data to remote (ende, ausgabe, morse)
|
||||
|
||||
m_led_morse = BIT(data, 3);
|
||||
m_led_speech = BIT(data, 4);
|
||||
m_led_standard = BIT(data, 5);
|
||||
|
||||
m_speech_select = BIT(data, 6, 2);
|
||||
}
|
||||
|
||||
void sprachmg_state::machine_start()
|
||||
{
|
||||
// resolve outputs
|
||||
m_dmd.resolve();
|
||||
m_led_speech.resolve();
|
||||
m_led_morse.resolve();
|
||||
m_led_standard.resolve();
|
||||
|
||||
// register for save states
|
||||
save_item(NAME(m_display_data));
|
||||
save_item(NAME(m_key_scan));
|
||||
save_item(NAME(m_speech_select));
|
||||
}
|
||||
|
||||
void sprachmg_state::machine_reset()
|
||||
{
|
||||
m_key_scan = 0x1f;
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE DEFINTIONS
|
||||
//**************************************************************************
|
||||
|
||||
static const z80_daisy_config z80_daisy_chain[] =
|
||||
{
|
||||
{ "pio0" },
|
||||
{ "pio1" },
|
||||
{ "sio" },
|
||||
{ "pio2" },
|
||||
{ "pio3" },
|
||||
{ nullptr }
|
||||
};
|
||||
|
||||
void sprachmg_state::sprachmg(machine_config &config)
|
||||
{
|
||||
Z80(config, m_maincpu, 9.8304_MHz_XTAL / 4);
|
||||
m_maincpu->set_daisy_config(z80_daisy_chain);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sprachmg_state::mem_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sprachmg_state::io_map);
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_NONE);
|
||||
|
||||
Z80PIO(config, m_pio[0], 9.8304_MHz_XTAL / 4);
|
||||
m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_pio[0]->out_pa_callback().set([this](uint8_t data) { m_key_scan = data & 0x1f; });
|
||||
m_pio[0]->in_pb_callback().set(FUNC(sprachmg_state::key_r));
|
||||
|
||||
Z80PIO(config, m_pio[1], 9.8304_MHz_XTAL / 4);
|
||||
m_pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_pio[1]->out_pa_callback().set(FUNC(sprachmg_state::display_data_w));
|
||||
m_pio[1]->out_pb_callback().set(FUNC(sprachmg_state::display_column_w));
|
||||
|
||||
Z80PIO(config, m_pio[2], 0);
|
||||
m_pio[2]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_pio[2]->out_pa_callback().set([this](uint8_t data) { m_dac->write(data); });
|
||||
m_pio[2]->out_pb_callback().set(FUNC(sprachmg_state::sys_w));
|
||||
|
||||
Z80PIO(config, m_pio[3], 0);
|
||||
m_pio[3]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
// port a: tape
|
||||
// port b: tape, dac gain
|
||||
|
||||
Z80SIO(config, m_sio, 9.8304_MHz_XTAL / 4);
|
||||
m_sio->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_sio->out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd));
|
||||
|
||||
rs232_port_device &serial(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
|
||||
serial.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w));
|
||||
|
||||
clock_device &serclk(CLOCK(config, "serclk", 9.8304_MHz_XTAL / 4 / 128)); // cd4020b
|
||||
serclk.signal_handler().set(m_sio, FUNC(z80sio_device::rxca_w));
|
||||
serclk.signal_handler().append(m_sio, FUNC(z80sio_device::txca_w));
|
||||
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
|
||||
AD7520(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 1.0);
|
||||
|
||||
GENERIC_CARTSLOT(config, m_speech_module, generic_plain_slot, "sprachmg");
|
||||
m_speech_module->set_device_load(FUNC(sprachmg_state::module_load));
|
||||
|
||||
SOFTWARE_LIST(config, "module_list").set_original("sprachmg");
|
||||
|
||||
config.set_default_layout(layout_sprachmg);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// ROM DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
ROM_START( sprachmg )
|
||||
ROM_REGION(0x2000, "maincpu", 0)
|
||||
ROM_LOAD("bu01_8-87.bin", 0x0000, 0x2000, CRC(7d9a92a6) SHA1(c9ca4a0d118b2c30e2505de051671769ad08a1c5))
|
||||
|
||||
ROM_REGION(0x800, "chargen", 0)
|
||||
ROM_LOAD("zg-625_1-12-86.bin", 0x000, 0x800, CRC(9ffd1e15) SHA1(759660404dfe479d13a1bdd4beb19e6035a34e17))
|
||||
ROM_END
|
||||
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// SYSTEM DRIVERS
|
||||
//**************************************************************************
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1985, sprachmg, 0, 0, sprachmg, sprachmg, sprachmg_state, empty_init, "Institut für Kosmosforschung", "Gerät 32620 (Sprach/Morsegenerator)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
525
src/mame/layout/sprachmg.lay
Normal file
525
src/mame/layout/sprachmg.lay
Normal file
@ -0,0 +1,525 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
license: CC0
|
||||
copyright-holders: natarii, Dirk Best
|
||||
|
||||
Gerät 32620 (Sprach-Morsegenerator)
|
||||
-->
|
||||
|
||||
<mamelayout version="2">
|
||||
|
||||
<element name="panel">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.87" green="0.92" blue="0.86" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="background">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.04" green="0.05" blue="0.03" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="led">
|
||||
<disk>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.12" green="0.13" blue="0.10" />
|
||||
</disk>
|
||||
<disk state="0">
|
||||
<bounds left="0.2" top="0.2" right="0.8" bottom="0.8" />
|
||||
<color red="0.38" green="0.26" blue="0.22" />
|
||||
</disk>
|
||||
<disk state="1">
|
||||
<bounds left="0.2" top="0.2" right="0.8" bottom="0.8" />
|
||||
<color red="0.91" green="0.28" blue="0.29" />
|
||||
</disk>
|
||||
</element>
|
||||
|
||||
<element name="txt_speech">
|
||||
<rect><color red="0.87" green="0.92" blue="0.86" /></rect>
|
||||
<text string="SPEECH" align="2"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
|
||||
<element name="txt_morse">
|
||||
<rect><color red="0.87" green="0.92" blue="0.86" /></rect>
|
||||
<text string="MORSE" align="2"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
|
||||
<element name="txt_standard">
|
||||
<rect><color red="0.87" green="0.92" blue="0.86" /></rect>
|
||||
<text string="STANDARD" align="2"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
|
||||
<element name="background_vqc10">
|
||||
<rect>
|
||||
<color red="0.20" green="0.02" blue="0.02" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="matrix_vqc10">
|
||||
<rect state="0">
|
||||
<color red="0.64" green="0.13" blue="0.15" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="1.00" green="0.51" blue="0.54" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="matrix5dot_vqc10">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="9" bottom="1" />
|
||||
<color red="0.30" green="0.03" blue="0.03" />
|
||||
</rect>
|
||||
<disk statemask="0x10" state="0">
|
||||
<bounds x="0" /><color red="0.44" green="0.03" blue="0.05" />
|
||||
</disk>
|
||||
<disk statemask="0x10">
|
||||
<bounds x="0" /><color red="1.00" green="0.41" blue="0.44" />
|
||||
</disk>
|
||||
<disk statemask="0x08" state="0">
|
||||
<bounds x="2" /><color red="0.44" green="0.03" blue="0.05" />
|
||||
</disk>
|
||||
<disk statemask="0x08">
|
||||
<bounds x="2" /><color red="1.00" green="0.41" blue="0.44" />
|
||||
</disk>
|
||||
<disk statemask="0x04" state="0">
|
||||
<bounds x="4" /><color red="0.44" green="0.03" blue="0.05" />
|
||||
</disk>
|
||||
<disk statemask="0x04">
|
||||
<bounds x="4" /><color red="1.00" green="0.41" blue="0.44" />
|
||||
</disk>
|
||||
<disk statemask="0x02" state="0">
|
||||
<bounds x="6" /><color red="0.44" green="0.03" blue="0.05" />
|
||||
</disk>
|
||||
<disk statemask="0x02">
|
||||
<bounds x="6" /><color red="1.00" green="0.41" blue="0.44" />
|
||||
</disk>
|
||||
<disk statemask="0x01" state="0">
|
||||
<bounds x="8" /><color red="0.44" green="0.03" blue="0.05" />
|
||||
</disk>
|
||||
<disk statemask="0x01">
|
||||
<bounds x="8" /><color red="1.00" green="0.41" blue="0.44" />
|
||||
</disk>
|
||||
</element>
|
||||
|
||||
<element name="button_white">
|
||||
<rect>
|
||||
<color red="0.79" green="0.77" blue="0.67" />
|
||||
</rect>
|
||||
<rect>
|
||||
<color red="0.99" green="0.97" blue="0.87" />
|
||||
<bounds left="0.05" top="0.05" right="0.95" bottom="0.95" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="button_green">
|
||||
<rect>
|
||||
<color red="0.0" green="0.55" blue="0.38" />
|
||||
</rect>
|
||||
<rect>
|
||||
<color red="0.02" green="0.75" blue="0.58" />
|
||||
<bounds left="0.05" top="0.05" right="0.95" bottom="0.95" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="button_red">
|
||||
<rect>
|
||||
<color red="0.80" green="0.17" blue="0.06" />
|
||||
</rect>
|
||||
<rect>
|
||||
<color red="1.00" green="0.37" blue="0.26" />
|
||||
<bounds left="0.05" top="0.05" right="0.95" bottom="0.95" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="line">
|
||||
<rect><color red="0.12" green="0.13" blue="0.10" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="txt_res">
|
||||
<rect><color red="1.00" green="0.37" blue="0.26" /></rect>
|
||||
<text string="RES"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_sta">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="STA"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_stp">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="STP"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_7">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="7"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_8">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="8"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_9">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="9"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_colon">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string=":"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_right">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string=">"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_left">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="<"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_4">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="4"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_5">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="5"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_6">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="6"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_slash">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="/"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_mode">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="MODE"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_inp">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="INP"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_1">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="1"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_yes">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="YES"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_2">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="2"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_dot">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="."><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_3">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="3"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_dash">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="-"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_plus">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="+"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_ex">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="EX"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_out">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="OUT"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_clr">
|
||||
<rect><color red="0.02" green="0.75" blue="0.58" /></rect>
|
||||
<text string="CLR"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_0">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="0"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_no">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="NO"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_equals">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="="><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_questionmark">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="?"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
<element name="txt_spc">
|
||||
<rect><color red="0.99" green="0.97" blue="0.87" /></rect>
|
||||
<text string="SPC"><color red="0.12" green="0.13" blue="0.10" /></text>
|
||||
</element>
|
||||
|
||||
<view name="Default Layout">
|
||||
|
||||
<element ref="panel">
|
||||
<bounds left="0" top="0" right="529" bottom="445" />
|
||||
</element>
|
||||
|
||||
<!-- LEDs -->
|
||||
|
||||
<element ref="txt_speech">
|
||||
<bounds left="25" top="39" right="97" bottom="55" />
|
||||
</element>
|
||||
<element ref="led" name="led_speech">
|
||||
<bounds left="103" top="35" right="129" bottom="61" />
|
||||
</element>
|
||||
|
||||
<element ref="txt_morse">
|
||||
<bounds left="25" top="71" right="97" bottom="87" />
|
||||
</element>
|
||||
<element ref="led" name="led_morse">
|
||||
<bounds left="103" top="66" right="129" bottom="92" />
|
||||
</element>
|
||||
|
||||
<element ref="txt_standard">
|
||||
<bounds left="25" top="103" right="97" bottom="119" />
|
||||
</element>
|
||||
<element ref="led" name="led_standard">
|
||||
<bounds left="103" top="99" right="129" bottom="125" />
|
||||
</element>
|
||||
|
||||
<!-- Dot Matrix -->
|
||||
|
||||
<element ref="background">
|
||||
<bounds left="167" top="54" right="440" bottom="104" />
|
||||
</element>
|
||||
|
||||
<element ref="background_vqc10">
|
||||
<bounds left="187" top="57" right="302" bottom="101" />
|
||||
</element>
|
||||
|
||||
<repeat count="7">
|
||||
<param name="y" start="65" increment="4" />
|
||||
<param name="row" start="0" increment="1" />
|
||||
<repeat count="4">
|
||||
<param name="x" start="192" increment="29" />
|
||||
<param name="idx" start="0" increment="1" />
|
||||
<element ref="matrix5dot_vqc10" name="dot~idx~~row~">
|
||||
<bounds x="~x~" y="~y~" width="18" height="2" />
|
||||
</element>
|
||||
</repeat>
|
||||
</repeat>
|
||||
|
||||
<element ref="background_vqc10">
|
||||
<bounds left="307" top="57" right="422" bottom="101" />
|
||||
</element>
|
||||
|
||||
<repeat count="7">
|
||||
<param name="y" start="65" increment="4" />
|
||||
<param name="row" start="0" increment="1" />
|
||||
<repeat count="4">
|
||||
<param name="x" start="312" increment="29" />
|
||||
<param name="idx" start="4" increment="1" />
|
||||
<element ref="matrix5dot_vqc10" name="dot~idx~~row~">
|
||||
<bounds x="~x~" y="~y~" width="18" height="2" />
|
||||
</element>
|
||||
</repeat>
|
||||
</repeat>
|
||||
|
||||
<!-- Keypad -->
|
||||
|
||||
<element ref="background">
|
||||
<bounds left="93" top="351" right="150" bottom="410" />
|
||||
</element>
|
||||
<element ref="background">
|
||||
<bounds left="150" top="180" right="494" bottom="410" />
|
||||
</element>
|
||||
|
||||
<element ref="button_red" inputtag="reset" inputmask="0x01">
|
||||
<bounds x="152" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_res">
|
||||
<bounds xc="180" yc="210" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_green" inputtag="special" inputmask="0x20">
|
||||
<bounds x="209" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_sta">
|
||||
<bounds xc="237" yc="198" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="line">
|
||||
<bounds xc="237" yc="210" width="28" height="2" />
|
||||
</element>
|
||||
<element ref="txt_stp">
|
||||
<bounds xc="237" yc="220" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad4" inputmask="0x08">
|
||||
<bounds x="266" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_7">
|
||||
<bounds xc="294" yc="210" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad3" inputmask="0x08">
|
||||
<bounds x="323" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_8">
|
||||
<bounds xc="351" yc="210" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad2" inputmask="0x08">
|
||||
<bounds x="380" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_9">
|
||||
<bounds xc="408" yc="210" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad1" inputmask="0x08">
|
||||
<bounds x="437" y="182" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_colon">
|
||||
<bounds xc="465" yc="210" width="28" height="20" />
|
||||
</element>
|
||||
|
||||
<element ref="button_white" inputtag="keypad0" inputmask="0x08">
|
||||
<bounds x="152" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_right">
|
||||
<bounds xc="180" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad0" inputmask="0x04">
|
||||
<bounds x="209" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_left">
|
||||
<bounds xc="237" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad4" inputmask="0x04">
|
||||
<bounds x="266" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_4">
|
||||
<bounds xc="294" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad3" inputmask="0x04">
|
||||
<bounds x="323" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_5">
|
||||
<bounds xc="351" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad2" inputmask="0x04">
|
||||
<bounds x="380" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_6">
|
||||
<bounds xc="408" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad1" inputmask="0x04">
|
||||
<bounds x="437" y="239" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_slash">
|
||||
<bounds xc="465" yc="267" width="28" height="20" />
|
||||
</element>
|
||||
|
||||
<element ref="button_green" inputtag="keypad2" inputmask="0x10">
|
||||
<bounds x="152" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_mode">
|
||||
<bounds xc="180" yc="324" width="38" height="20" />
|
||||
</element>
|
||||
<element ref="button_green" inputtag="keypad4" inputmask="0x10">
|
||||
<bounds x="209" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_inp">
|
||||
<bounds xc="237" yc="324" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad4" inputmask="0x02">
|
||||
<bounds x="266" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_1">
|
||||
<bounds xc="294" yc="312" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="line">
|
||||
<bounds xc="294" yc="324" width="28" height="2" />
|
||||
</element>
|
||||
<element ref="txt_yes">
|
||||
<bounds xc="294" yc="334" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad3" inputmask="0x02">
|
||||
<bounds x="323" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_2">
|
||||
<bounds xc="351" yc="312" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="line">
|
||||
<bounds xc="351" yc="324" width="28" height="2" />
|
||||
</element>
|
||||
<element ref="txt_dot">
|
||||
<bounds xc="351" yc="334" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad2" inputmask="0x02">
|
||||
<bounds x="380" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_3">
|
||||
<bounds xc="408" yc="312" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="line">
|
||||
<bounds xc="408" yc="324" width="28" height="2" />
|
||||
</element>
|
||||
<element ref="txt_dash">
|
||||
<bounds xc="408" yc="334" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad1" inputmask="0x02">
|
||||
<bounds x="437" y="296" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_plus">
|
||||
<bounds xc="465" yc="324" width="28" height="20" />
|
||||
</element>
|
||||
|
||||
<element ref="button_green" inputtag="keypad0" inputmask="0x02">
|
||||
<bounds x="95" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_ex">
|
||||
<bounds xc="123" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_green" inputtag="keypad3" inputmask="0x10">
|
||||
<bounds x="152" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_out">
|
||||
<bounds xc="180" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_green" inputtag="keypad1" inputmask="0x10">
|
||||
<bounds x="209" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_clr">
|
||||
<bounds xc="237" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad4" inputmask="0x01">
|
||||
<bounds x="266" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_0">
|
||||
<bounds xc="294" yc="369" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="line">
|
||||
<bounds xc="294" yc="381" width="28" height="2" />
|
||||
</element>
|
||||
<element ref="txt_no">
|
||||
<bounds xc="294" yc="391" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad3" inputmask="0x01">
|
||||
<bounds x="323" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_equals">
|
||||
<bounds xc="351" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad2" inputmask="0x01">
|
||||
<bounds x="380" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_questionmark">
|
||||
<bounds xc="408" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
<element ref="button_white" inputtag="keypad1" inputmask="0x01">
|
||||
<bounds x="437" y="353" width="55" height="55" />
|
||||
</element>
|
||||
<element ref="txt_spc">
|
||||
<bounds xc="465" yc="381" width="28" height="20" />
|
||||
</element>
|
||||
|
||||
</view>
|
||||
|
||||
</mamelayout>
|
@ -45107,3 +45107,6 @@ mtu130
|
||||
|
||||
@source:yamaha/ymvl1.cpp
|
||||
vl1
|
||||
|
||||
@source:ddr/sprachmg.cpp
|
||||
sprachmg // 1985 Institut für Kosmosforschung
|
||||
|
Loading…
Reference in New Issue
Block a user