pps41: add preliminary mm78la/mm77la

This commit is contained in:
hap 2021-03-19 17:52:26 +01:00
parent a860495f6c
commit 001eadf294
20 changed files with 295 additions and 86 deletions

View File

@ -2881,6 +2881,7 @@ end
--@src/devices/cpu/pps41/mm75.h,CPUS["PPS41"] = true
--@src/devices/cpu/pps41/mm76.h,CPUS["PPS41"] = true
--@src/devices/cpu/pps41/mm78.h,CPUS["PPS41"] = true
--@src/devices/cpu/pps41/mm78la.h,CPUS["PPS41"] = true
--------------------------------------------------
if CPUS["PPS41"] then
@ -2896,6 +2897,9 @@ if CPUS["PPS41"] then
MAME_DIR .. "src/devices/cpu/pps41/mm78.cpp",
MAME_DIR .. "src/devices/cpu/pps41/mm78.h",
MAME_DIR .. "src/devices/cpu/pps41/mm78op.cpp",
MAME_DIR .. "src/devices/cpu/pps41/mm78la.cpp",
MAME_DIR .. "src/devices/cpu/pps41/mm78la.h",
MAME_DIR .. "src/devices/cpu/pps41/mm78laop.cpp",
}
end

View File

@ -23,6 +23,5 @@ mm75_device::mm75_device(const machine_config &mconfig, const char *tag, device_
void mm75_device::device_start()
{
mm76_device::device_start();
m_d_pins--;
m_d_mask >>= 1;
set_d_pins(9);
}

View File

@ -82,7 +82,6 @@ std::unique_ptr<util::disasm_interface> mm76_device::create_disassembler()
void mm76_device::device_start()
{
pps41_base_device::device_start();
m_stack_levels = 1;
}
void mm76_device::device_reset()

View File

@ -69,6 +69,7 @@ protected:
void pop_pc();
void push_pc();
void op_illegal();
void op_todo();
virtual bool op_is_tr(u8 op) override { return (op & 0xf0) == 0x30; };
virtual bool op_is_eob(u8 op) { return (op & 0xfc) == 0x1c; };

View File

@ -38,6 +38,11 @@ void mm76_device::op_illegal()
logerror("unknown opcode $%02X at $%03X\n", m_op, m_prev_pc);
}
void mm76_device::op_todo()
{
logerror("unimplemented opcode $%02X at $%03X\n", m_op, m_prev_pc);
}
// opcodes

View File

@ -50,17 +50,17 @@ void mm78_device::program_2k(address_map &map)
map(0x000, 0x7ff).rom();
}
void mm77_device::program_1_3k(address_map &map)
void mm78_device::program_1_3k(address_map &map)
{
map(0x040, 0x1ff).rom();
map(0x240, 0x3ff).rom();
map(0x640, 0x7ff).rom();
}
void mm77l_device::program_1_5k(address_map &map)
void mm78_device::program_1_5k(address_map &map)
{
map(0x000, 0x3ff).rom();
map(0x600, 0x7ff).rom();
map(0x400, 0x5ff).mirror(0x200).rom();
}
void mm78_device::data_128x4(address_map &map)
@ -68,7 +68,7 @@ void mm78_device::data_128x4(address_map &map)
map(0x00, 0x7f).ram();
}
void mm77_device::data_96x4(address_map &map)
void mm78_device::data_96x4(address_map &map)
{
map(0x00, 0x3f).ram();
map(0x40, 0x47).mirror(0x18).ram(); // not to 0x50

View File

@ -60,7 +60,10 @@ protected:
// device_execute_interface overrides
virtual void execute_one() override;
void data_96x4(address_map &map);
void data_128x4(address_map &map);
void program_1_3k(address_map &map);
void program_1_5k(address_map &map);
void program_2k(address_map &map);
// opcode helpers
@ -107,18 +110,12 @@ public:
protected:
mm77_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
void data_96x4(address_map &map);
void program_1_3k(address_map &map);
};
class mm77l_device : public mm77_device
{
public:
mm77l_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
void program_1_5k(address_map &map);
};

View File

@ -0,0 +1,64 @@
// license:BSD-3-Clause
// copyright-holders:hap
/*
Rockwell MM77LA/MM78LA MCU
*/
#include "emu.h"
#include "mm78la.h"
DEFINE_DEVICE_TYPE(MM78LA, mm78la_device, "mm78la", "Rockwell MM78LA") // MM78L + output PLA and tone generator
DEFINE_DEVICE_TYPE(MM77LA, mm77la_device, "mm77la", "Rockwell MM77LA") // MM77L + output PLA and tone generator
// constructor
mm78la_device::mm78la_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
mm78la_device(mconfig, MM78LA, tag, owner, clock, 11, address_map_constructor(FUNC(mm78la_device::program_2k), this), 7, address_map_constructor(FUNC(mm78la_device::data_128x4), this))
{ }
mm78la_device::mm78la_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
mm78_device(mconfig, type, tag, owner, clock, prgwidth, program, datawidth, data)
{ }
mm77la_device::mm77la_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
mm78la_device(mconfig, MM77LA, tag, owner, clock, 11, address_map_constructor(FUNC(mm77la_device::program_1_5k), this), 7, address_map_constructor(FUNC(mm77la_device::data_96x4), this))
{ }
// machine config
void mm78la_device::device_add_mconfig(machine_config &config)
{
PLA(config, "opla", 5, 14, 32).set_format(pla_device::FMT::BERKELEY);
}
void mm77la_device::device_add_mconfig(machine_config &config)
{
PLA(config, "opla", 4, 10, 16).set_format(pla_device::FMT::BERKELEY);
}
// initialize
void mm78la_device::device_start()
{
mm78_device::device_start();
set_r_pins(14);
}
void mm78la_device::device_reset()
{
mm78_device::device_reset();
}
void mm77la_device::device_start()
{
mm78la_device::device_start();
set_r_pins(10);
}
void mm77la_device::device_reset()
{
mm78la_device::device_reset();
}

View File

@ -0,0 +1,84 @@
// license:BSD-3-Clause
// copyright-holders:hap
/*
Rockwell MM77LA/MM78LA MCU
*/
#ifndef MAME_CPU_PPS41_MM78LA_H
#define MAME_CPU_PPS41_MM78LA_H
#pragma once
#include "mm78.h"
// pinout reference
/*
____ ____ ____ ____
BP 1 |* \_/ | 42 DIO9 BP 1 |* \_/ | 40 DIO9
A 2 | | 41 DIO8 A 2 | | 39 DIO8
Vdd 3 | | 40 DIO7 N/C 3 | | 38 DIO7
VC 4 | | 39 DIO6 VC 4 | | 37 DIO6
TEST 5 | | 38 DIO5 Vdd 5 | | 36 DIO5
Vss 6 | | 37 DIO4 Vss 6 | | 35 DIO4
PI4 7 | | 36 DIO3 TEST 7 | | 34 DIO3
PI8 8 | | 35 DIO2 PI4 8 | | 33 DIO2
PI3 9 | | 34 DIO1 PI8 9 | | 32 DIO1
PI7 10 | MM78LA | 33 DIO0 PI3 10 | MM77LA | 31 DIO0
PI6 11 | | 32 Vdd SPK PI7 11 | | 30 INT0
PI2 12 | | 31 SPK R2 PI6 12 | | 29 SPK R2
PI5 13 | | 30 SPK R1 PI2 13 | | 28 Vdd SPK
PI1 14 | | 29 RO01 PI5 14 | | 27 SPK R1
PO 15 | | 28 RO02 PI1 15 | | 26 RO01
RO14 16 | | 27 RO03 PO 16 | | 25 RO02
RO13 17 | | 26 RO04 RO10 17 | | 24 RO03
RO12 18 | | 25 RO05 RO09 18 | | 23 RO04
RO11 19 | | 24 RO06 RO08 19 | | 22 RO05
RO10 20 | | 23 RO07 RO07 20 |___________| 21 RO06
RO09 21 |___________| 22 RO08
MM78LA = aka MM95, MM77LA = aka B80xx (no official documentation known for latter, pinout has guesses)
*/
class mm78la_device : public mm78_device
{
public:
mm78la_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
mm78la_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// opcode handlers
virtual void op_sos() override;
virtual void op_ros() override;
virtual void op_skisl() override;
virtual void op_ix() override;
virtual void op_ox() override;
virtual void op_ioa() override;
virtual void op_ios() override;
};
class mm77la_device : public mm78la_device
{
public:
mm77la_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
};
DECLARE_DEVICE_TYPE(MM78LA, mm78la_device)
DECLARE_DEVICE_TYPE(MM77LA, mm77la_device)
#endif // MAME_CPU_PPS41_MM78LA_H

View File

@ -0,0 +1,47 @@
// license:BSD-3-Clause
// copyright-holders:hap
// MM77LA/MM78LA opcode handlers
#include "emu.h"
#include "mm78la.h"
// opcodes
// changed opcodes
void mm78la_device::op_sos()
{
op_todo();
}
void mm78la_device::op_ros()
{
op_todo();
}
void mm78la_device::op_skisl()
{
op_todo();
}
void mm78la_device::op_ix()
{
op_todo();
}
void mm78la_device::op_ox()
{
op_todo();
}
void mm78la_device::op_ioa()
{
op_todo();
}
void mm78la_device::op_ios()
{
op_todo();
}

View File

@ -164,7 +164,7 @@ void mm78_device::op_tab()
void mm78_device::op_ix()
{
// IX: input to X from channel X(aka B)
m_x = (m_read_r() & m_r_output) >> 4;
m_x = (m_read_r() & m_r_output) >> 4 & 0xf;
}
void mm78_device::op_ox()

View File

@ -8,17 +8,19 @@ This is the single-chip evolution of Rockwell's older PPS-4 CPU. It is similar,
but a lot of things were simplified, the ALU instructions are less diverse.
Part numbers:
- A75xx = MM75 - 28 pin dip
- A76xx = MM76 - 42 pin spider
- A77xx = MM77 - 42 pin spider
- A78xx = MM78 - 42 pin spider
- A79xx = MM76C - 52 pin spider - counter
- A86xx = MM76E - 42 pin spider - extended ROM
- B76xx = MM76L - 40 pin dip
- B77xx = MM77L - 40 pin dip
- B78xx = MM78L - 40 pin dip
- B86xx = MM76EL - 40 pin dip
- B90xx = MM78LA - 42 pin spider
- A75xx = MM75 - 28 pin dip
- A76xx = MM76 - 42 pin spider
- A77xx = MM77 - 42 pin spider
- A78xx = MM78 - 42 pin spider
- A79xx = MM76C - 52 pin spider - high-speed counter
- A??xx = MM76D - 52 pin spider - 12-bit ADC
- A86xx = MM76E - 42 pin spider - extended ROM
- B76xx = MM76L - 40 pin dip
- B77xx = MM77L - 40 pin dip
- B80xx = MM77LA? - 40 pin dip
- B78xx = MM78L - 40 pin dip
- B86xx = MM76EL - 40 pin dip
- B90xx = MM78LA - 42 pin spider
"spider" = 2 rows of pins on each side, just like standard PPS-4 CPUs.
"L" main difference is low-power
@ -42,7 +44,7 @@ TODO:
but again does not explain why
- allowed opcode after TAB should be limited
- add MCU mask options, there's one for inverting interrupts
- add MM78LA
- finish MM78LA emulation
*/
@ -103,6 +105,7 @@ void pps41_base_device::device_start()
m_prev2_op = 0;
m_prev3_op = 0;
memset(m_stack, 0, sizeof(m_stack));
m_stack_levels = 1;
m_a = 0;
m_b = 0;
@ -123,9 +126,9 @@ void pps41_base_device::device_start()
m_sclock_in = 0;
m_sclock_count = 0;
m_d_pins = 10;
m_d_mask = (1 << m_d_pins) - 1;
set_d_pins(10);
m_d_output = 0;
set_r_pins(8);
m_r_output = 0;
m_int_line[0] = m_int_line[1] = 1; // GND = 1
m_int_ff[0] = m_int_ff[1] = 0;
@ -198,7 +201,7 @@ void pps41_base_device::device_reset()
m_skip_count = 0;
// clear outputs
m_write_r(m_r_output = 0xff);
m_write_r(m_r_output = m_r_mask);
m_write_d(m_d_output = 0);
m_s = 0;

View File

@ -29,11 +29,11 @@ public:
// 8-bit P(parallel) input
auto read_p() { return m_read_p.bind(); }
// 10-bit D(discrete) I/O
// 10/12-bit D(discrete) I/O
auto read_d() { return m_read_d.bind(); }
auto write_d() { return m_write_d.bind(); }
// 8-bit R I/O
// 8/10/14-bit R I/O
auto read_r() { return m_read_r.bind(); }
auto write_r() { return m_write_r.bind(); }
@ -44,7 +44,7 @@ public:
// I/O access
u16 d_output_r() { return m_d_output; }
u8 r_output_r() { return m_r_output; }
u16 r_output_r() { return m_r_output; }
int sdo_r() { return BIT(m_s, 3); }
void ssc_w(int state);
@ -89,8 +89,8 @@ protected:
devcb_read8 m_read_p;
devcb_read16 m_read_d;
devcb_write16 m_write_d;
devcb_read8 m_read_r;
devcb_write8 m_write_r;
devcb_read16 m_read_r;
devcb_write16 m_write_r;
devcb_read_line m_read_sdi;
devcb_write_line m_write_sdo;
devcb_write_line m_write_ssc;
@ -127,12 +127,17 @@ protected:
int m_d_pins;
u16 m_d_mask;
u16 m_d_output;
u8 m_r_output;
int m_r_pins;
u16 m_r_mask;
u16 m_r_output;
int m_int_line[2];
int m_int_ff[2];
// misc handlers
void set_d_pins(u8 p) { m_d_pins = p; m_d_mask = (1 << p) - 1; }
void set_r_pins(u8 p) { m_r_pins = p; m_r_mask = (1 << p) - 1; }
virtual bool op_is_tr(u8 op) = 0;
void serial_shift(int state);
void serial_clock();
void cycle();

View File

@ -559,7 +559,7 @@ void excel68k_state::fex68k(machine_config &config)
const attotime irq_period = attotime::from_hz(600); // 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), ideal is 600Hz (measured 580Hz, 604Hz, 632Hz)
TIMER(config, m_irq_on).configure_periodic(FUNC(excel68k_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1525)); // active for 1.525us
TIMER(config, "irq_off").configure_periodic(FUNC(excel68k_state::irq_off<M68K_IRQ_2>), irq_period);
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);

View File

@ -15,6 +15,7 @@ ROM source notes when dumped from another publisher, but confident it's the same
#include "cpu/pps41/mm75.h"
#include "cpu/pps41/mm76.h"
#include "cpu/pps41/mm78.h"
#include "cpu/pps41/mm78la.h"
#include "video/pwm.h"
#include "sound/beep.h"
#include "sound/spkrdev.h"
@ -58,7 +59,7 @@ public:
// MCU output pin state
u16 m_d = 0;
u8 m_r = ~0;
u16 m_r = 0;
u8 read_inputs(int columns);
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
@ -148,7 +149,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
void ftri1(machine_config &config);
};
@ -169,7 +170,7 @@ void ftri1_state::write_d(u16 data)
m_speaker->level_w(BIT(data, 9));
}
void ftri1_state::write_r(u8 data)
void ftri1_state::write_r(u16 data)
{
// RIO1-RIO8: digit/led data
m_r = data;
@ -253,7 +254,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
u8 read_p();
void mastmind(machine_config &config);
@ -279,7 +280,7 @@ void mastmind_state::write_d(u16 data)
m_beeper->set_state(BIT(data, 8));
}
void mastmind_state::write_r(u8 data)
void mastmind_state::write_r(u16 data)
{
// RIO1-RIO7: digit segment data
m_r = data;
@ -401,7 +402,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
void dunksunk(machine_config &config);
};
@ -430,7 +431,7 @@ void dunksunk_state::write_d(u16 data)
update_display();
}
void dunksunk_state::write_r(u8 data)
void dunksunk_state::write_r(u16 data)
{
// RIO1-RIO7: led data
m_r = data;
@ -526,7 +527,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
u8 read_p();
void memoquiz(machine_config &config);
};
@ -556,7 +557,7 @@ void memoquiz_state::write_d(u16 data)
// DIO8: N/C, looks like they planned to add sound, but didn't
}
void memoquiz_state::write_r(u8 data)
void memoquiz_state::write_r(u16 data)
{
// RIO1-RIO7: digit segment data
m_r = data;
@ -660,11 +661,11 @@ public:
void main_write_d(u16 data);
u16 main_read_d();
void main_write_r(u8 data);
void main_write_r(u16 data);
u8 main_read_p();
void sub_write_d(u16 data);
void sub_write_r(u8 data);
void sub_write_r(u16 data);
void mwcfootb(machine_config &config);
};
@ -695,7 +696,7 @@ u16 mwcfootb_state::main_read_d()
return m_subcpu->d_output_r() & 0x200;
}
void mwcfootb_state::main_write_r(u8 data)
void mwcfootb_state::main_write_r(u16 data)
{
// RIO1-RIO7: vfd plate 0-6
m_plate = (m_plate & 0xfff00) | (~data & 0x7f);
@ -723,7 +724,7 @@ void mwcfootb_state::sub_write_d(u16 data)
m_maincpu->set_input_line(0, (data & 0x200) ? ASSERT_LINE : CLEAR_LINE);
}
void mwcfootb_state::sub_write_r(u8 data)
void mwcfootb_state::sub_write_r(u16 data)
{
// RIO1-RIO8: vfd plate 7-14
m_plate = (m_plate & 0xf00ff) | (~data << 8 & 0xff00);
@ -855,7 +856,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
u8 read_p();
void scrabsen(machine_config &config);
};
@ -884,7 +885,7 @@ void scrabsen_state::write_d(u16 data)
m_speaker->level_w(BIT(data, 8));
}
void scrabsen_state::write_r(u8 data)
void scrabsen_state::write_r(u16 data)
{
// RIO1-RIO8: led data
m_r = data;
@ -1006,7 +1007,7 @@ public:
void update_display();
void write_d(u16 data);
void write_r(u8 data);
void write_r(u16 data);
u8 read_p();
void rdqa(machine_config &config);
};
@ -1035,7 +1036,7 @@ void rdqa_state::write_d(u16 data)
m_speaker->level_w(data >> 8 & 3);
}
void rdqa_state::write_r(u8 data)
void rdqa_state::write_r(u16 data)
{
// RIO1-RIO7: digit segment data
m_r = data;

View File

@ -15,10 +15,10 @@ license:CC0
<element name="text_l2"><text string="VISITOR" align="2"><color red="0.85" green="0.85" blue="0.85" /></text></element>
<element name="led" defstate="0">
<text string=" ">
<rect>
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<color alpha="0" />
</rect>
<disk state="0">
<bounds x="0.25" y="0.25" width="0.5" height="0.5" />
<color red="0.14" green="0.02" blue="0.03" />

View File

@ -17,10 +17,10 @@ license:CC0
<element name="text_l4"><text string="Visitor/Destroyer Score"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="led" defstate="0">
<text string=" ">
<rect>
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<color alpha="0" />
</rect>
<disk state="0">
<bounds x="0.25" y="0.25" width="0.5" height="0.5" />
<color red="0.14" green="0.02" blue="0.03" />

View File

@ -30,7 +30,7 @@ license:CC0
<element name="black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="blackd"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element>
<element name="green"><rect><color red="0.0" green="0.38" blue="0.149" /></rect></element>
<element name="green"><rect><color red="0.0" green="0.3804" blue="0.1491" /></rect></element>
<element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="led" defstate="0">
@ -53,59 +53,59 @@ license:CC0
</element>
<element name="text_p">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="P"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_1st">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="1st"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_2nd">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="2nd"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_3rd">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="3rd"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_foul">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="FOUL"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_curve">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="CURVE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_ball">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="BALL"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_strike">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="STRIKE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_flyout">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="FLY OUT"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_homerun">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="HOME RUN"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_grout">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="GR. OUT"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_single">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="SINGLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_double">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="DOUBLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_triple">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="TRIPLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>

View File

@ -30,7 +30,7 @@ license:CC0
<element name="black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="blackd"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element>
<element name="green"><rect><color red="0.0" green="0.38" blue="0.149" /></rect></element>
<element name="green"><rect><color red="0.0" green="0.3804" blue="0.1491" /></rect></element>
<element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="whited"><disk><color red="0.8" green="0.8" blue="0.8" /></disk></element>
@ -54,38 +54,38 @@ license:CC0
</element>
<element name="text_foul">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="FOUL"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_ball">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="BALL"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_strike">
<text string="STRIKE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_flyout">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="FLY OUT"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_homerun">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="HOME RUN"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_grdout">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="GRD. OUT"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_single">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="SINGLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_double">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="DOUBLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>
<element name="text_triple">
<rect><color red="0.0" green="0.38" blue="0.15" /></rect>
<rect><color red="0.0" green="0.3804" blue="0.1491" /></rect>
<text string="TRIPLE"><color red="0.8" green="0.8" blue="0.8" /></text>
</element>

View File

@ -16,10 +16,10 @@ license:CC0
<element name="text_l3"><text string="HOME" align="2"><color red="0.85" green="0.85" blue="0.85" /></text></element>
<element name="led" defstate="0">
<text string=" ">
<rect>
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<color alpha="0" />
</rect>
<disk state="0">
<bounds x="0.25" y="0.25" width="0.5" height="0.5" />
<color red="0.14" green="0.02" blue="0.03" />