New working clones

------------------
Compact Computer 40 Plus (prototype) [hap, Jon Guidry]
This commit is contained in:
hap 2021-04-21 19:34:48 +02:00
parent c61bd7299c
commit 83d1b46ff5
15 changed files with 293 additions and 219 deletions

View File

@ -4,21 +4,21 @@
license:CC0
-->
<softwarelist name="cc40_cart" description="CC-40 cartridges">
<!--
Not included in list:
- SS-1000 16KB RAM
- SS-2000 8KB RAM, battery backed
Not yet emulated:
- SS-1000 16KB RAM
- SS-2000 8KB RAM, battery backed
Also, not sure if these exist, probably canceled:
- Business Graphics
- Games II
- Perspective Drawing
Also, not sure if these exist, probably canceled:
- Business Graphics
- Games II
- Perspective Drawing
-->
<softwarelist name="cc40_cart" description="CC-40 cartridges">
<software name="aee">
<description>Advanced Electrical Engineering</description>
<year>1983</year>

View File

@ -27,6 +27,7 @@ The "clock" feature is used to indicate MCU clock frequency
The "pla" feature is for TMS1100 output PLA type
The "paddle" feature is used to indicate if paddle circuitry exists on the PCB
The "butmask" feature indicates cartridge button restrict mask (active-low)
-->
<softwarelist name="microvision" description="Milton Bradley Microvision cartridges">

View File

@ -2,13 +2,16 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
-->
Not dumped yet:
- Chemical Engineering
- Statistics
<!--
Not included in list:
- 8KB RAM, battery backed
Not dumped yet:
- Chemical Engineering
- Statistics
Not yet emulated:
- 8KB RAM, battery backed
-->

View File

@ -2,14 +2,17 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
-->
Library functions can be reached from [RUN], [F3]
<!--
Not dumped yet:
- Chemical Engineering Library
Library functions can be reached from [RUN], [F3]
Not included in list:
- 8KB RAM, battery backed
Not dumped yet:
- Chemical Engineering Library
Not yet emulated:
- 8KB RAM, battery backed
-->

View File

@ -169,7 +169,7 @@ void o2_homecomp_device::device_add_mconfig(machine_config &config)
// cassette
CASSETTE(config, m_cass);
m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_DISABLED);
m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_MUTED | CASSETTE_MOTOR_DISABLED);
SPEAKER(config, "cass_output").front_center(); // on data recorder
m_cass->add_route(ALL_OUTPUTS, "cass_output", 0.05);
}

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Jon Guidry
/***************************************************************************
Texas Instruments Compact Computer 40 (aka CC-40)
@ -38,7 +39,7 @@
---------
HM6116LP-4 - Hitachi 2KB SRAM (newer 18KB version has two HM6264 8KB chips)
HN61256PC09 - Hitachi DIP-28 32KB CMOS Mask PROM
HN61256PC09 - Hitachi DIP-28 32KB CMOS Mask PROM (also seen with HN61256PB02, earlier version?)
TMX70C20N2L - Texas Instruments TMS70C20 CPU (128 bytes RAM, 2KB ROM) @ 2.5MHz, 40 pins - "X" implies prototype
AMI 1041036-1 - 68-pin QFP AMI Gate Array
HD44100H - 60-pin QFP Hitachi HD44100 LCD Driver
@ -59,6 +60,15 @@
can be loaded. Load a program by pressing the [RUN] key while viewing the list,
or manually with the command RUN "<shortname of program in list>"
As for the CC-40+, the product was finalized, but in the end it wasn't released.
The hardware is very similar to CC-40. The main differences are the CPU:
a TMS70C40 (twice larger internal ROM), and a cassette port separate from Hexbus.
The controller chip is a TI TP0373 this time, it appears that the basic functionality
is the same as the one by AMI. Like the CC-40, it had either 6KB or 18KB RAM.
The CC-40+ cassette device number is 1, eg. SAVE"1.FILENAME" to save, and
OLD"1.FILENAME" to load.
TODO:
- external RAM cartridge (bus_control_w cartridge memory addressing)
@ -73,9 +83,11 @@
***************************************************************************/
#include "emu.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "cpu/tms7000/tms7000.h"
#include "imagedev/cassette.h"
#include "machine/nvram.h"
#include "sound/dac.h"
#include "video/hd44780.h"
@ -88,17 +100,21 @@
#include "cc40.lh"
namespace {
class cc40_state : public driver_device
{
public:
cc40_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_cart(*this, "cartslot"),
m_key_matrix(*this, "IN.%u", 0),
m_battery_inp(*this, "BATTERY"),
m_nvram(*this, "sysram.%u", 1U),
m_lamps(*this, "lamp%u", 0U)
m_sysbank(*this, "sysbank"),
m_cartbank(*this, "cartbank"),
m_cart(*this, "cartslot"),
m_cass(*this, "cassette"),
m_key_matrix(*this, "IN.%u", 0),
m_segs(*this, "seg%u", 0U)
{
m_sysram[0] = nullptr;
m_sysram[1] = nullptr;
@ -107,13 +123,14 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(sysram_size_changed);
void cc40(machine_config &config);
void cc40p(machine_config &config);
protected:
virtual void machine_reset() override;
virtual void machine_start() override;
virtual void device_post_load() override;
private:
void postload();
void init_sysram(int chip, u16 size);
void update_lcd_indicator(u8 y, u8 x, int state);
void update_clock_divider();
@ -122,41 +139,46 @@ private:
void sysram_w(offs_t offset, u8 data);
u8 bus_control_r();
void bus_control_w(u8 data);
u8 power_r();
void power_w(u8 data);
u8 battery_r();
u8 bankswitch_r();
void bankswitch_w(u8 data);
u8 clock_control_r();
void clock_control_w(u8 data);
u8 keyboard_r();
void keyboard_w(u8 data);
u8 cass_r();
void cass_w(u8 data);
void cc40_palette(palette_device &palette) const;
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
HD44780_PIXEL_UPDATE(cc40_pixel_update);
void main_map(address_map &map);
void cc40_map(address_map &map);
void cc40p_map(address_map &map);
required_device<tms70c20_device> m_maincpu;
required_device<generic_slot_device> m_cart;
required_ioport_array<8> m_key_matrix;
required_ioport m_battery_inp;
required_device<tms7000_device> m_maincpu;
required_device_array<nvram_device, 2> m_nvram;
required_memory_bank m_sysbank;
required_memory_bank m_cartbank;
required_device<generic_slot_device> m_cart;
optional_device<cassette_image_device> m_cass;
required_ioport_array<8> m_key_matrix;
output_finder<80> m_segs;
memory_region *m_cart_rom;
u8 m_bus_control;
u8 m_power;
u8 m_banks;
u8 m_clock_control;
u8 m_clock_divider;
u8 m_key_select;
u8 m_bus_control = 0;
u8 m_power = 0;
u8 m_banks = 0;
u8 m_clock_control = 0;
u8 m_clock_divider = 0;
u8 m_key_select = 0;
std::unique_ptr<u8[]> m_sysram[2];
u16 m_sysram_size[2];
u16 m_sysram_end[2];
u16 m_sysram_mask[2];
output_finder<80> m_lamps;
};
@ -195,7 +217,7 @@ DEVICE_IMAGE_LOAD_MEMBER(cc40_state::cart_load)
void cc40_state::cc40_palette(palette_device &palette) const
{
palette.set_pen_color(0, rgb_t(138, 146, 148)); // background
palette.set_pen_color(1, rgb_t(92, 83, 88)); // lcd pixel on
palette.set_pen_color(1, rgb_t(50, 45, 60)); // lcd pixel on
palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off
}
@ -207,7 +229,7 @@ void cc40_state::update_lcd_indicator(u8 y, u8 x, int state)
// ---- raw lcd screen here ----
// under | ERROR v v v v v v _LOW
// output# | 60 61 62 63 50 51 52 53
m_lamps[y * 10 + x] = state ? 1 : 0;
m_segs[y * 10 + x] = state ? 1 : 0;
}
HD44780_PIXEL_UPDATE(cc40_state::cc40_pixel_update)
@ -290,6 +312,11 @@ void cc40_state::bus_control_w(u8 data)
m_bus_control = data;
}
u8 cc40_state::power_r()
{
return m_power;
}
void cc40_state::power_w(u8 data)
{
// d0: power-on hold latch
@ -300,12 +327,6 @@ void cc40_state::power_w(u8 data)
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
u8 cc40_state::battery_r()
{
// d0: low battery sense line (0 = low power)
return m_battery_inp->read();
}
u8 cc40_state::bankswitch_r()
{
return m_banks;
@ -316,11 +337,11 @@ void cc40_state::bankswitch_w(u8 data)
data &= 0x0f;
// d0-d1: system rom bankswitch
membank("sysbank")->set_entry(data & 3);
m_sysbank->set_entry(data & 3);
// d2-d3: cartridge 32KB page bankswitch
if (m_cart_rom)
membank("cartbank")->set_entry(data >> 2 & 3);
m_cartbank->set_entry(data >> 2 & 3);
m_banks = data;
}
@ -353,35 +374,50 @@ void cc40_state::clock_control_w(u8 data)
u8 cc40_state::keyboard_r()
{
u8 ret = 0;
u8 data = 0;
// read selected keyboard rows
for (int i = 0; i < 8; i++)
{
if (m_key_select >> i & 1)
ret |= m_key_matrix[i]->read();
data |= m_key_matrix[i]->read();
}
return ret;
return data;
}
void cc40_state::keyboard_w(u8 data)
{
// d(0-7): select keyboard column
// d0-d7: select keyboard column
m_key_select = data;
}
void cc40_state::main_map(address_map &map)
u8 cc40_state::cass_r()
{
// d3: cass data in
return (m_cass->input() > 0.04) ? 8 : 0;
}
void cc40_state::cass_w(u8 data)
{
// d4: cass motor
m_cass->set_motor((data & 0x10) ? 1 : 0);
// d3: cass data out
m_cass->output((data & 8) ? +1.0 : -1.0);
}
void cc40_state::cc40_map(address_map &map)
{
map.unmap_value_high();
map(0x0110, 0x0110).rw(FUNC(cc40_state::bus_control_r), FUNC(cc40_state::bus_control_w));
map(0x0111, 0x0111).w(FUNC(cc40_state::power_w));
map(0x0111, 0x0111).rw(FUNC(cc40_state::power_r), FUNC(cc40_state::power_w));
map(0x0112, 0x0112).noprw(); // d0-d3: Hexbus data
map(0x0113, 0x0113).noprw(); // d0: Hexbus available
map(0x0114, 0x0114).noprw(); // d0,d1: Hexbus handshake
map(0x0115, 0x0115).w("dac", FUNC(dac_bit_interface::data_w)); // d0: piezo control
map(0x0116, 0x0116).r(FUNC(cc40_state::battery_r));
map(0x0115, 0x0115).w("dac", FUNC(dac_bit_interface::data_w));
map(0x0116, 0x0116).portr("BATTERY");
map(0x0119, 0x0119).rw(FUNC(cc40_state::bankswitch_r), FUNC(cc40_state::bankswitch_w));
map(0x011a, 0x011a).rw(FUNC(cc40_state::clock_control_r), FUNC(cc40_state::clock_control_w));
map(0x011e, 0x011f).rw("hd44780", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
@ -392,6 +428,12 @@ void cc40_state::main_map(address_map &map)
map(0xd000, 0xefff).bankr("sysbank");
}
void cc40_state::cc40p_map(address_map &map)
{
cc40_map(map);
map(0x0121, 0x0121).rw(FUNC(cc40_state::cass_r), FUNC(cc40_state::cass_w));
}
/***************************************************************************
@ -518,7 +560,6 @@ void cc40_state::machine_reset()
m_power = 1;
update_clock_divider();
bankswitch_w(0);
}
@ -539,7 +580,7 @@ void cc40_state::init_sysram(int chip, u16 size)
m_sysram_size[chip] = size;
}
void cc40_state::postload()
void cc40_state::device_post_load()
{
init_sysram(0, m_sysram_size[0]);
init_sysram(1, m_sysram_size[1]);
@ -550,15 +591,15 @@ void cc40_state::postload()
void cc40_state::machine_start()
{
// init
m_lamps.resolve();
m_segs.resolve();
std::string region_tag;
m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
membank("sysbank")->configure_entries(0, 4, memregion("system")->base(), 0x2000);
m_sysbank->configure_entries(0, 4, memregion("system")->base(), 0x2000);
if (m_cart_rom)
membank("cartbank")->configure_entries(0, 4, m_cart_rom->base(), 0x8000);
m_cartbank->configure_entries(0, 4, m_cart_rom->base(), 0x8000);
else
membank("cartbank")->set_base(memregion("maincpu")->base() + 0x5000);
m_cartbank->set_base(memregion("maincpu")->base() + 0x5000);
init_sysram(0, 0x800); // default to 6KB
init_sysram(1, 0x800); // "
@ -566,11 +607,6 @@ void cc40_state::machine_start()
bus_control_w(0);
bankswitch_w(0);
// zerofill other
m_power = 0;
m_clock_control = 0;
m_key_select = 0;
// register for savestates
save_item(NAME(m_bus_control));
save_item(NAME(m_power));
@ -578,15 +614,13 @@ void cc40_state::machine_start()
save_item(NAME(m_clock_control));
save_item(NAME(m_clock_divider));
save_item(NAME(m_key_select));
machine().save().register_postload(save_prepost_delegate(FUNC(cc40_state::postload), this));
}
void cc40_state::cc40(machine_config &config)
{
/* basic machine hardware */
TMS70C20(config, m_maincpu, XTAL(5'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &cc40_state::main_map);
// basic machine hardware
TMS70C20(config, m_maincpu, 5_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &cc40_state::cc40_map);
m_maincpu->in_porta().set(FUNC(cc40_state::keyboard_r));
m_maincpu->out_portb().set(FUNC(cc40_state::keyboard_w));
@ -594,7 +628,7 @@ void cc40_state::cc40(machine_config &config)
NVRAM(config, "sysram.1", nvram_device::DEFAULT_ALL_0);
NVRAM(config, "sysram.2", nvram_device::DEFAULT_ALL_0);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60); // arbitrary
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
@ -610,15 +644,32 @@ void cc40_state::cc40(machine_config &config)
hd44780.set_lcd_size(2, 16); // 2*16 internal
hd44780.set_pixel_update_cb(FUNC(cc40_state::cc40_pixel_update));
/* sound hardware */
// sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, "dac").add_route(ALL_OUTPUTS, "speaker", 0.25);
/* cartridge */
// cartridge
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "cc40_cart", "bin,rom,256").set_device_load(FUNC(cc40_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("cc40_cart");
}
void cc40_state::cc40p(machine_config &config)
{
cc40(config);
// basic machine hardware
TMS70C40(config.replace(), m_maincpu, 5_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &cc40_state::cc40p_map);
m_maincpu->in_porta().set(FUNC(cc40_state::keyboard_r));
m_maincpu->out_portb().set(FUNC(cc40_state::keyboard_w));
// cassette
CASSETTE(config, m_cass);
m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_MUTED | CASSETTE_MOTOR_DISABLED);
SPEAKER(config, "cass_output").front_center(); // on data recorder
m_cass->add_route(ALL_OUTPUTS, "cass_output", 0.05);
}
/***************************************************************************
@ -628,13 +679,24 @@ void cc40_state::cc40(machine_config &config)
***************************************************************************/
ROM_START( cc40 )
ROM_REGION( 0x800, "maincpu", 0 )
ROM_LOAD( "tms70c20.bin", 0x000, 0x800, CRC(a21bf6ab) SHA1(3da8435ecbee143e7fa149ee8e1c92949bade1d8) ) // internal cpu rom
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "c11002", 0x0000, 0x0800, CRC(a21bf6ab) SHA1(3da8435ecbee143e7fa149ee8e1c92949bade1d8) ) // internal cpu rom
ROM_REGION( 0x8000, "system", 0 )
ROM_LOAD( "hn61256pc09.bin", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
ROM_LOAD( "hn61256pc09", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
ROM_END
ROM_START( cc40p )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "75305.u200", 0x0000, 0x1000, CRC(42bb6af2) SHA1(642dede16cb4ef2c5b9eaae79e28054f1111eef8) ) // internal cpu rom
ROM_REGION( 0x8000, "system", 0 )
ROM_LOAD( "hn61256pc09.u205", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
ROM_END
} // anonymous namespace
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, cc40, 0, 0, cc40, cc40, cc40_state, empty_init, "Texas Instruments", "Compact Computer 40", MACHINE_SUPPORTS_SAVE )
COMP( 1983, cc40, 0, 0, cc40, cc40, cc40_state, empty_init, "Texas Instruments", "Compact Computer 40", MACHINE_SUPPORTS_SAVE )
COMP( 1984, cc40p, cc40, 0, cc40p, cc40, cc40_state, empty_init, "Texas Instruments", "Compact Computer 40 Plus (prototype)", MACHINE_SUPPORTS_SAVE )

View File

@ -382,8 +382,8 @@ void dai3wksi_state::main_map(address_map &map)
{
map(0x0000, 0x1bff).rom();
map(0x2000, 0x23ff).ram();
map(0x2400, 0x24ff).mirror(0x100).portr("IN0");
map(0x2800, 0x28ff).mirror(0x100).portr("IN1");
map(0x2400, 0x2400).mirror(0x1ff).portr("IN0");
map(0x2800, 0x2800).mirror(0x1ff).portr("IN1");
map(0x3000, 0x3000).w(FUNC(dai3wksi_state::audio_1_w));
map(0x3400, 0x3400).w(FUNC(dai3wksi_state::audio_2_w));
map(0x3800, 0x3800).w(FUNC(dai3wksi_state::audio_3_w));

View File

@ -76,7 +76,7 @@ Mephisto 4 Turbo Kit 18mhz - (mm4tk)
The MM V prototype was the program that Ed Schroeder participated with as "Rebel" at the
1989 WMCCC in Portorose. It was used with the TK20 TurboKit.
http://chesseval.com/ChessEvalJournal/PrototypeMMV.htm
For more information, see: http://chesseval.com/ChessEvalJournal/PrototypeMMV.htm
MM VI (Saitek, 1994) is on different hardware, H8 CPU.
@ -514,4 +514,4 @@ CONS( 1987, mm4tk, mm4, 0, mm4tk, mm2, mm2_state, empty_init, "ha
CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, mm5p, mm5, 0, mm5p, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (Portorose TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
CONS( 1989, mm5p, mm5, 0, mm5p, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (Portorose TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) // aka Rebel

View File

@ -8,12 +8,16 @@ Commonly known as Tasc R30, it's basically a dedicated ChessMachine.
The King chess engines are also compatible with Tasc's The ChessMachine software
on PC, however the prototype Gideon 2.1(internally: Rebel 2.01) is not.
The King 2.23 version was not released to the public. It has an opening book
meant for chesscomputer competitions.
For more information, see: http://chesseval.com/ChessEvalJournal/R30v223.htm
R30 hardware notes:
- ARM6 CPU(P60ARM/CG) @ 30MHz
- 256KB system ROM (2*27C010)
- 512KB program RAM (4*MT5C1008), 128KB permanent RAM (KM681000ALP-7L)
- Toshiba LCD drivers (3*T7778A, T7900, T6963C), TC5565AFL-15
- SB20 or SB30 "Smartboard" chessboard with piece recognition
- SB20 or SB30 "SmartBoard" chessboard with piece recognition
R40 hardware notes:
- ARM6 CPU(VY86C061PSTC) @ 40MHz
@ -305,5 +309,5 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
CONS( 1995, tascr30, 0, 0, tasc, tasc, tasc_state, empty_init, "Tasc", "ChessSystem R30 (The King 2.50)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND )
CONS( 1993, tascr30a, tascr30, 0, tasc, tasc, tasc_state, empty_init, "Tasc", "ChessSystem R30 (The King 2.20)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND )
CONS( 1993, tascr30b, tascr30, 0, tasc, tasc, tasc_state, empty_init, "Tasc", "ChessSystem R30 (The King 2.23, unreleased)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND )
CONS( 1993, tascr30b, tascr30, 0, tasc, tasc, tasc_state, empty_init, "Tasc", "ChessSystem R30 (The King 2.23, TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND ) // competed in several chesscomputer tournaments
CONS( 1993, tascr30g, tascr30, 0, tasc, tasc, tasc_state, empty_init, "Tasc", "ChessSystem R30 (Gideon 2.1, prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND ) // made in 1993, later released in 2012

View File

@ -51,9 +51,8 @@
Overall, the hardware is very similar to TI CC-40. A lot has been shuffled around
to cut down on complexity (and probably for protection too). To reduce power usage
even more, the OS often idles while waiting for any keypress that triggers an interrupt
and wakes the processor up.
to cut down on complexity. To reduce power usage even more, the OS often idles while
waiting for any keypress that triggers an interrupt and wakes the processor up.
The machine is powered by 4 AAA batteries. These will also save internal RAM,
provided that the machine is turned off properly.
@ -70,11 +69,13 @@
***************************************************************************/
#include "emu.h"
#include "bus/generic/carts.h"
#include "bus/generic/slot.h"
#include "cpu/tms7000/tms7000.h"
#include "machine/nvram.h"
#include "video/hd44780.h"
#include "emupal.h"
#include "screen.h"
#include "softlist.h"
@ -83,16 +84,19 @@
#include "ti95.lh"
namespace {
class ti74_state : public driver_device
{
public:
ti74_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_sysbank(*this, "sysbank"),
m_cart(*this, "cartslot"),
m_key_matrix(*this, "IN.%u", 0),
m_battery_inp(*this, "BATTERY"),
m_lamps(*this, "lamp%u", 0U)
m_segs(*this, "seg%u", 0U)
{ }
void ti74(machine_config &config);
@ -119,14 +123,14 @@ private:
void main_map(address_map &map);
required_device<tms70c46_device> m_maincpu;
required_memory_bank m_sysbank;
required_device<generic_slot_device> m_cart;
required_ioport_array<8> m_key_matrix;
required_ioport m_battery_inp;
output_finder<80> m_segs;
u8 m_key_select;
u8 m_power;
output_finder<80> m_lamps;
u8 m_key_select = 0;
u8 m_power = 0;
};
@ -165,7 +169,7 @@ DEVICE_IMAGE_LOAD_MEMBER(ti74_state::cart_load)
void ti74_state::ti74_palette(palette_device &palette) const
{
palette.set_pen_color(0, rgb_t(138, 146, 148)); // background
palette.set_pen_color(1, rgb_t(92, 83, 88)); // LCD pixel on
palette.set_pen_color(1, rgb_t(50, 45, 60)); // LCD pixel on
palette.set_pen_color(2, rgb_t(131, 136, 139)); // LCD pixel off
}
@ -183,7 +187,7 @@ void ti74_state::update_lcd_indicator(u8 y, u8 x, int state)
// above | _LOW _ERROR 2nd INV ALPHA LC INS DEGRAD HEX OCT I/O
// screen- | _P{70} <{71} RUN{3}
// area . SYS{4}
m_lamps[y * 10 + x] = state ? 1 : 0;
m_segs[y * 10 + x] = state ? 1 : 0;
}
HD44780_PIXEL_UPDATE(ti74_state::ti74_pixel_update)
@ -242,28 +246,28 @@ HD44780_PIXEL_UPDATE(ti74_state::ti95_pixel_update)
u8 ti74_state::keyboard_r()
{
u8 ret = 0;
u8 data = 0;
// read selected keyboard rows
for (int i = 0; i < 8; i++)
{
if (m_key_select >> i & 1)
ret |= m_key_matrix[i]->read();
data |= m_key_matrix[i]->read();
}
return ret;
return data;
}
void ti74_state::keyboard_w(u8 data)
{
// d(0-7): select keyboard column
// d0-d7: select keyboard column
m_key_select = data;
}
void ti74_state::bankswitch_w(u8 data)
{
// d0-d1: system rom bankswitch
membank("sysbank")->set_entry(data & 3);
m_sysbank->set_entry(data & 3);
// d2: power-on latch
if (~data & 4 && m_power)
@ -496,22 +500,18 @@ void ti74_state::machine_reset()
{
m_power = 1;
m_sysbank->set_entry(0);
update_battery_status(m_battery_inp->read());
}
void ti74_state::machine_start()
{
m_lamps.resolve();
m_segs.resolve();
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8sm_delegate(*m_cart, FUNC(generic_slot_device::read_rom)));
membank("sysbank")->configure_entries(0, 4, memregion("system")->base(), 0x2000);
membank("sysbank")->set_entry(0);
// zerofill
m_key_select = 0;
m_power = 0;
m_sysbank->configure_entries(0, 4, memregion("system")->base(), 0x2000);
// register for savestates
save_item(NAME(m_key_select));
@ -520,8 +520,8 @@ void ti74_state::machine_start()
void ti74_state::ti74(machine_config &config)
{
/* basic machine hardware */
TMS70C46(config, m_maincpu, XTAL(4'000'000));
// basic machine hardware
TMS70C46(config, m_maincpu, 4_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &ti74_state::main_map);
m_maincpu->in_porta().set(FUNC(ti74_state::keyboard_r));
m_maincpu->out_portb().set(FUNC(ti74_state::bankswitch_w));
@ -529,7 +529,7 @@ void ti74_state::ti74(machine_config &config)
NVRAM(config, "sysram.ic3", nvram_device::DEFAULT_ALL_0);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60); // arbitrary
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
@ -546,16 +546,15 @@ void ti74_state::ti74(machine_config &config)
hd44780.set_lcd_size(2, 16); // 2*16 internal
hd44780.set_pixel_update_cb(FUNC(ti74_state::ti74_pixel_update));
/* cartridge */
// cartridge
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "ti74_cart", "bin,rom,256").set_device_load(FUNC(ti74_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("ti74_cart");
}
void ti74_state::ti95(machine_config &config)
{
/* basic machine hardware */
TMS70C46(config, m_maincpu, XTAL(4'000'000));
// basic machine hardware
TMS70C46(config, m_maincpu, 4_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &ti74_state::main_map);
m_maincpu->in_porta().set(FUNC(ti74_state::keyboard_r));
m_maincpu->out_portb().set(FUNC(ti74_state::bankswitch_w));
@ -563,7 +562,7 @@ void ti74_state::ti95(machine_config &config)
NVRAM(config, "sysram.ic3", nvram_device::DEFAULT_ALL_0);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60); // arbitrary
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
@ -580,9 +579,8 @@ void ti74_state::ti95(machine_config &config)
hd44780.set_lcd_size(2, 16);
hd44780.set_pixel_update_cb(FUNC(ti74_state::ti95_pixel_update));
/* cartridge */
// cartridge
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "ti95_cart", "bin,rom,256").set_device_load(FUNC(ti74_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("ti95_cart");
}
@ -611,7 +609,9 @@ ROM_START( ti95 )
ROM_LOAD( "hn61256pc95.ic1", 0x0000, 0x8000, CRC(c46d29ae) SHA1(c653f08590dbc28241a9f5a6c2541641bdb0208b) ) // system rom, banked
ROM_END
} // anonymous namespace
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1985, ti74, 0, 0, ti74, ti74, ti74_state, empty_init, "Texas Instruments", "TI-74 BASICALC", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1986, ti95, 0, 0, ti95, ti95, ti74_state, empty_init, "Texas Instruments", "TI-95 PROCALC", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1985, ti74, 0, 0, ti74, ti74, ti74_state, empty_init, "Texas Instruments", "TI-74 Basicalc", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1986, ti95, 0, 0, ti95, ti95, ti74_state, empty_init, "Texas Instruments", "TI-95 Procalc", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )

View File

@ -16,7 +16,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -26,7 +26,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25ba;" align="2" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -36,7 +36,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="SHIFT" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -46,7 +46,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CTL" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -56,7 +56,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="FN" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -66,7 +66,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="DEG" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -76,7 +76,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RAD" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -86,7 +86,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="GRAD" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -96,7 +96,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="I/O" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -106,7 +106,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="UCL" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -116,7 +116,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="ERROR" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -126,13 +126,13 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25bc;" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
<element name="ind_low" defstate="0">
<rect state="0"><color red="0.515" green="0.537" blue="0.548" /></rect>
<rect state="1"><color red="0.361" green="0.326" blue="0.346" /></rect>
<rect state="1"><color red="0.196" green="0.176" blue="0.235" /></rect>
<text string="LOW">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
@ -164,65 +164,65 @@ license:CC0
<!-- draw top row of lcd indicators -->
<element name="lamp10" ref="ind_left">
<element name="seg10" ref="ind_left">
<bounds x="1.5" y="2.5" width="20" height="5.5" />
</element>
<element name="lamp4" ref="ind_right">
<element name="seg4" ref="ind_right">
<bounds x="167.5" y="2.5" width="20" height="5.5" />
</element>
<element name="lamp11" ref="ind_shift">
<element name="seg11" ref="ind_shift">
<bounds x="7" y="3" width="20" height="5" />
</element>
<element name="lamp12" ref="ind_ctl">
<element name="seg12" ref="ind_ctl">
<bounds x="29" y="3" width="20" height="5" />
</element>
<element name="lamp13" ref="ind_fn">
<element name="seg13" ref="ind_fn">
<bounds x="51" y="3" width="20" height="5" />
</element>
<element name="lamp14" ref="ind_deg">
<element name="seg14" ref="ind_deg">
<bounds x="73" y="3" width="20" height="5" />
</element>
<element name="lamp0" ref="ind_rad">
<element name="seg0" ref="ind_rad">
<bounds x="95" y="3" width="20" height="5" />
</element>
<element name="lamp1" ref="ind_grad">
<element name="seg1" ref="ind_grad">
<bounds x="117" y="3" width="20" height="5" />
</element>
<element name="lamp2" ref="ind_io">
<element name="seg2" ref="ind_io">
<bounds x="139" y="3" width="20" height="5" />
</element>
<element name="lamp3" ref="ind_ucl">
<element name="seg3" ref="ind_ucl">
<bounds x="161" y="3" width="20" height="5" />
</element>
<!-- draw bottom row of lcd indicators -->
<element name="lamp60" ref="ind_error">
<element name="seg60" ref="ind_error">
<bounds x="7" y="25" width="20" height="5" />
</element>
<element name="lamp61" ref="ind_user">
<element name="seg61" ref="ind_user">
<bounds x="29" y="27" width="20" height="5.5" />
</element>
<element name="lamp62" ref="ind_user">
<element name="seg62" ref="ind_user">
<bounds x="51" y="27" width="20" height="5.5" />
</element>
<element name="lamp63" ref="ind_user">
<element name="seg63" ref="ind_user">
<bounds x="73" y="27" width="20" height="5.5" />
</element>
<element name="lamp50" ref="ind_user">
<element name="seg50" ref="ind_user">
<bounds x="95" y="27" width="20" height="5.5" />
</element>
<element name="lamp51" ref="ind_user">
<element name="seg51" ref="ind_user">
<bounds x="117" y="27" width="20" height="5.5" />
</element>
<element name="lamp52" ref="ind_user">
<element name="seg52" ref="ind_user">
<bounds x="139" y="27" width="20" height="5.5" />
</element>
<element name="lamp53" ref="ind_low">
<element name="seg53" ref="ind_low">
<bounds x="165" y="26.5" width="12" height="5" />
</element>

View File

@ -8,7 +8,7 @@ license:CC0
<element name="digit" defstate="0">
<led7seg>
<color red="0.2" green="0.16" blue="0.16" />
<color red="0.200" green="0.164" blue="0.169" />
</led7seg>
</element>
<element name="led" defstate="0">
@ -66,22 +66,22 @@ license:CC0
<element name="sym_colon">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text state="0" string=":"> <color red="0.49412" green="0.51765" blue="0.51765" /></text>
<text state="1" string=":"> <color red="0.2" green="0.16" blue="0.16" /></text>
<text state="1" string=":"> <color red="0.200" green="0.164" blue="0.169" /></text>
</element>
<element name="sym_left">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text state="0" string="&#x2190;"> <color red="0.49412" green="0.51765" blue="0.51765" /></text>
<text state="1" string="&#x2190;"> <color red="0.2" green="0.16" blue="0.16" /></text>
<text state="1" string="&#x2190;"> <color red="0.200" green="0.164" blue="0.169" /></text>
</element>
<element name="sym_right">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text state="0" string="&#x2192;"> <color red="0.49412" green="0.51765" blue="0.51765" /></text>
<text state="1" string="&#x2192;"> <color red="0.2" green="0.16" blue="0.16" /></text>
<text state="1" string="&#x2192;"> <color red="0.200" green="0.164" blue="0.169" /></text>
</element>
<element name="sym_white">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text state="0" string="&#x25cb;"> <color red="0.49412" green="0.51765" blue="0.51765" /></text>
<text state="1" string="&#x25cb;"> <color red="0.2" green="0.16" blue="0.16" /></text>
<text state="1" string="&#x25cb;"> <color red="0.200" green="0.164" blue="0.169" /></text>
</element>
<element name="sym_black">
<rect><color red="1.0" green="1.0" blue="1.0" /></rect>

View File

@ -16,7 +16,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -26,7 +26,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25ba;" align="2" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -36,7 +36,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="SHIFT" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -46,7 +46,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CTL" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -56,7 +56,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="FN" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -66,7 +66,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="I/O" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -76,7 +76,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="UCL" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -86,7 +86,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="BASIC" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -96,7 +96,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CALC" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -106,7 +106,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="DEG" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -116,7 +116,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RAD" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -126,7 +126,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="GRAD" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -136,13 +136,13 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="STAT" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
<element name="ind_low" defstate="0">
<rect state="0"><color red="0.515" green="0.537" blue="0.548" /></rect>
<rect state="1"><color red="0.361" green="0.326" blue="0.346" /></rect>
<rect state="1"><color red="0.196" green="0.176" blue="0.235" /></rect>
<text string="LOW">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
@ -174,51 +174,51 @@ license:CC0
<!-- draw top row of lcd indicators -->
<element name="lamp10" ref="ind_left">
<element name="seg10" ref="ind_left">
<bounds x="1.5" y="0.5" width="20" height="5.5" />
</element>
<element name="lamp4" ref="ind_right">
<element name="seg4" ref="ind_right">
<bounds x="167.5" y="0.5" width="20" height="5.5" />
</element>
<element name="lamp11" ref="ind_shift">
<element name="seg11" ref="ind_shift">
<bounds x="16" y="1" width="20" height="5" />
</element>
<element name="lamp12" ref="ind_ctl">
<element name="seg12" ref="ind_ctl">
<bounds x="43" y="1" width="20" height="5" />
</element>
<element name="lamp13" ref="ind_fn">
<element name="seg13" ref="ind_fn">
<bounds x="70" y="1" width="20" height="5" />
</element>
<element name="lamp14" ref="ind_io">
<element name="seg14" ref="ind_io">
<bounds x="97" y="1" width="20" height="5" />
</element>
<element name="lamp2" ref="ind_ucl">
<element name="seg2" ref="ind_ucl">
<bounds x="124" y="1" width="20" height="5" />
</element>
<element name="lamp3" ref="ind_low">
<element name="seg3" ref="ind_low">
<bounds x="154" y="1" width="12" height="5" />
</element>
<!-- draw bottom row of lcd indicators -->
<element name="lamp63" ref="ind_basic">
<element name="seg63" ref="ind_basic">
<bounds x="16" y="23" width="20" height="5" />
</element>
<element name="lamp64" ref="ind_calc">
<element name="seg64" ref="ind_calc">
<bounds x="43" y="23" width="20" height="5" />
</element>
<element name="lamp1" ref="ind_deg">
<element name="seg1" ref="ind_deg">
<bounds x="70" y="23" width="20" height="5" />
</element>
<element name="lamp62" ref="ind_rad">
<element name="seg62" ref="ind_rad">
<bounds x="97" y="23" width="20" height="5" />
</element>
<element name="lamp53" ref="ind_grad">
<element name="seg53" ref="ind_grad">
<bounds x="124" y="23" width="20" height="5" />
</element>
<element name="lamp54" ref="ind_stat">
<element name="seg54" ref="ind_stat">
<bounds x="151" y="23" width="20" height="5" />
</element>

View File

@ -11,14 +11,14 @@ license:CC0
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
</element>
<element name="static_bg2">
<rect><color red="0.41" green="0.37" blue="0.39" /></rect>
<rect><color red="0.36" green="0.37" blue="0.39" /></rect>
</element>
<!-- define lcd indicators -->
<element name="ind_low" defstate="0">
<rect state="0"><color red="0.515" green="0.537" blue="0.548" /></rect>
<rect state="1"><color red="0.361" green="0.326" blue="0.346" /></rect>
<rect state="1"><color red="0.196" green="0.176" blue="0.235" /></rect>
<text string="LOW">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
@ -26,7 +26,7 @@ license:CC0
<element name="ind_error" defstate="0">
<rect state="0"><color red="0.515" green="0.537" blue="0.548" /></rect>
<rect state="1"><color red="0.361" green="0.326" blue="0.346" /></rect>
<rect state="1"><color red="0.196" green="0.176" blue="0.235" /></rect>
<text string="ERROR">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
@ -34,7 +34,7 @@ license:CC0
<element name="ind_p" defstate="0">
<rect state="0"><color red="0.515" green="0.537" blue="0.548" /></rect>
<rect state="1"><color red="0.361" green="0.326" blue="0.346" /></rect>
<rect state="1"><color red="0.196" green="0.176" blue="0.235" /></rect>
<text string="P">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
@ -46,7 +46,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&#x25c4;" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -56,7 +56,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="2nd" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -66,7 +66,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="INV" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -76,7 +76,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="ALPHA" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -86,7 +86,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="LC" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -96,7 +96,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="INS" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -106,7 +106,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="DE" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -116,7 +116,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="G" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -126,7 +126,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RAD" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -136,7 +136,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="HEX" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -146,7 +146,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="OCT" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -156,7 +156,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="I/O" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -166,7 +166,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RUN" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -176,7 +176,7 @@ license:CC0
<color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="SYS" align="1" state="1">
<color red="0.361" green="0.326" blue="0.346" />
<color red="0.196" green="0.176" blue="0.235" />
</text>
</element>
@ -258,68 +258,68 @@ license:CC0
<!-- left: _p, left -->
<element name="lamp70" ref="ind_p">
<element name="seg70" ref="ind_p">
<bounds x="1" y="9" width="5" height="5" />
</element>
<element name="lamp71" ref="ind_left">
<element name="seg71" ref="ind_left">
<bounds x="7.5" y="8" width="4" height="6" />
</element>
<!-- right: run, sys -->
<element name="lamp3" ref="ind_run">
<element name="seg3" ref="ind_run">
<bounds x="115.5" y="6.5" width="20" height="5" />
</element>
<element name="lamp4" ref="ind_sys">
<element name="seg4" ref="ind_sys">
<bounds x="115.5" y="12" width="20" height="5" />
</element>
<!-- top: _low, _error, 2nd, inv, alpha, lc, ins -->
<element name="lamp40" ref="ind_low">
<element name="seg40" ref="ind_low">
<bounds x="1" y="1" width="12" height="5" />
</element>
<element name="lamp43" ref="ind_error">
<element name="seg43" ref="ind_error">
<bounds x="16" y="1" width="15" height="5" />
</element>
<element name="lamp41" ref="ind_2nd">
<element name="seg41" ref="ind_2nd">
<bounds x="32" y="1" width="20" height="5" />
</element>
<element name="lamp44" ref="ind_inv">
<element name="seg44" ref="ind_inv">
<bounds x="41" y="1" width="20" height="5" />
</element>
<element name="lamp42" ref="ind_alpha">
<element name="seg42" ref="ind_alpha">
<bounds x="50" y="1" width="20" height="5" />
</element>
<element name="lamp12" ref="ind_lc">
<element name="seg12" ref="ind_lc">
<bounds x="64.3" y="1" width="20" height="5" />
</element>
<element name="lamp11" ref="ind_ins">
<element name="seg11" ref="ind_ins">
<bounds x="71.3" y="1" width="20" height="5" />
</element>
<!-- top: deg/rad/grad -->
<element name="lamp10" ref="ind_de">
<element name="seg10" ref="ind_de">
<bounds x="80" y="1" width="20" height="5" />
</element>
<element name="lamp13" ref="ind_g">
<element name="seg13" ref="ind_g">
<bounds x="85" y="1" width="20" height="5" />
</element>
<element name="lamp14" ref="ind_rad">
<element name="seg14" ref="ind_rad">
<bounds x="87.8" y="1" width="20" height="5" />
</element>
<!-- top: hex, oct, i/o -->
<element name="lamp0" ref="ind_hex">
<element name="seg0" ref="ind_hex">
<bounds x="97.7" y="1" width="20" height="5" />
</element>
<element name="lamp1" ref="ind_oct">
<element name="seg1" ref="ind_oct">
<bounds x="107" y="1" width="20" height="5" />
</element>
<element name="lamp2" ref="ind_io">
<element name="seg2" ref="ind_io">
<bounds x="117.5" y="1" width="20" height="5" />
</element>

View File

@ -10058,6 +10058,7 @@ twocrudea // MAB (c) 1990 Data East USA (US)
@source:cc40.cpp
cc40 // 1983 TI CC-40
cc40p // 1983 TI CC-40+
@source:ccastles.cpp
ccastles // 136022 (c) 1983