summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--src/emu/cpu/tms7000/tms7000.h4
-rw-r--r--src/mess/drivers/cc40.c43
-rw-r--r--src/mess/drivers/ti74.c348
-rw-r--r--src/mess/layout/cc40.lay52
-rw-r--r--src/mess/layout/ti74.lay56
-rw-r--r--src/mess/layout/ti95.lay325
-rw-r--r--src/mess/mess.lst3
-rw-r--r--src/mess/mess.mak5
9 files changed, 669 insertions, 168 deletions
diff --git a/.gitattributes b/.gitattributes
index ac22fb5b8d8..d1e907c54c3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -8772,6 +8772,7 @@ src/mess/layout/tavernie.lay svneol=native#text/xml
src/mess/layout/tec1.lay svneol=native#text/xml
src/mess/layout/tecnbras.lay svneol=native#text/plain
src/mess/layout/ti74.lay svneol=native#text/xml
+src/mess/layout/ti95.lay svneol=native#text/xml
src/mess/layout/tk80.lay svneol=native#text/xml
src/mess/layout/tm990189.lay svneol=native#text/xml
src/mess/layout/tm990189v.lay svneol=native#text/xml
diff --git a/src/emu/cpu/tms7000/tms7000.h b/src/emu/cpu/tms7000/tms7000.h
index 28d38c880fe..370d155ca23 100644
--- a/src/emu/cpu/tms7000/tms7000.h
+++ b/src/emu/cpu/tms7000/tms7000.h
@@ -102,7 +102,7 @@ protected:
address_space_config m_program_config;
address_space_config m_io_config;
- address_space_config m_data_config;
+ address_space_config m_data_config; // TMS70C46 only, the "E" bus
UINT32 m_info_flags;
@@ -319,7 +319,7 @@ public:
// extra 64KB external memory bus, or extra i/o port
DECLARE_WRITE8_MEMBER(e_bus_address_lo_w) { m_e_bus_address = (m_e_bus_address & 0xff00) | data; }
DECLARE_WRITE8_MEMBER(e_bus_address_hi_w) { m_e_bus_address = (m_e_bus_address & 0x00ff) | data << 8; }
- DECLARE_READ8_MEMBER(e_bus_data_r) { return (m_control & 0x20) ? m_data->read_byte(m_e_bus_address) : m_io->read_byte(TMS7000_PORTE); }
+ DECLARE_READ8_MEMBER(e_bus_data_r) { return (space.debugger_access()) ? 0 : ((m_control & 0x20) ? m_data->read_byte(m_e_bus_address) : m_io->read_byte(TMS7000_PORTE)); }
DECLARE_WRITE8_MEMBER(e_bus_data_w) { if (m_control & 0x20) m_data->write_byte(m_e_bus_address, data); else m_io->write_byte(TMS7000_PORTE, data); }
protected:
diff --git a/src/mess/drivers/cc40.c b/src/mess/drivers/cc40.c
index 829792a15a6..0643a00bb84 100644
--- a/src/mess/drivers/cc40.c
+++ b/src/mess/drivers/cc40.c
@@ -8,7 +8,7 @@
---------------------------------------------
| --------------------------------------- |
| | | |
- | | LCD 1 line, 31 chars + 18 indicators| |
+ | | LCD screen | |
| | | ---------------
| --------------------------------------- |
| |
@@ -166,8 +166,9 @@ DEVICE_IMAGE_LOAD_MEMBER(cc40_state, cc40_cartridge)
PALETTE_INIT_MEMBER(cc40_state, cc40)
{
- palette.set_pen_color(0, rgb_t(138, 146, 148));
- palette.set_pen_color(1, rgb_t(92, 83, 88));
+ 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(2, rgb_t(131, 136, 139)); // lcd pixel off
}
void cc40_state::update_lcd_indicator(UINT8 y, UINT8 x, int state)
@@ -183,17 +184,21 @@ void cc40_state::update_lcd_indicator(UINT8 y, UINT8 x, int state)
static HD44780_PIXEL_UPDATE(cc40_pixel_update)
{
+ // char size is 5x7 + cursor
+ if (x > 4 || y > 7)
+ return;
+
if (line == 1 && pos == 15)
{
- // the last char is used to control lcd indicators
+ // the last char is used to control the 18 lcd indicators
cc40_state *driver_state = device.machine().driver_data<cc40_state>();
driver_state->update_lcd_indicator(y, x, state);
}
else if (line < 2 && pos < 16)
{
- // internal: 2*16, external: 1*31 + indicators
- if (y == 7) y++; // the cursor is slightly below the 5x7 character
- bitmap.pix16(1 + y, 1 + line*16*6 + pos*6 + x) = state;
+ // internal: 2*16, external: 1*31
+ if (y == 7) y++; // the cursor is slightly below the character
+ bitmap.pix16(1 + y, 1 + line*16*6 + pos*6 + x) = state ? 1 : 2;
}
}
@@ -339,9 +344,9 @@ ADDRESS_MAP_END
***************************************************************************/
static INPUT_PORTS_START( cc40 )
- // 8x8 keyboard matrix, RESET and ON buttons are not on it
- // The numpad number keys are shared with the ones on the main keyboard.
- // Unused entries are not connected, but some might have a purpose for factory testing(?)
+ // 8x8 keyboard matrix, RESET and ON buttons are not on it. Unused entries are not connected, but some might have a purpose for factory testing(?)
+ // The numpad number keys are shared with the ones on the main keyboard, also on the real machine.
+ // PORT_NAME lists functions under [SHIFT] as secondaries.
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
@@ -394,7 +399,7 @@ static INPUT_PORTS_START( cc40 )
PORT_START("IN5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') PORT_CHAR('\'')
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_NAME("CLR UCL")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("CLR UCL")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("LEFT DEL")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_NAME("RIGHT INS")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_NAME("UP PB")
@@ -415,11 +420,11 @@ static INPUT_PORTS_START( cc40 )
PORT_START("IN7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("CTL")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("SHIFT")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("BREAK")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_NAME("RUN")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) PORT_NAME("BREAK")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_NAME("RUN")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_NAME("FN")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("OFF")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("FN")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_NAME("OFF")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@@ -482,11 +487,11 @@ static MACHINE_CONFIG_START( cc40, cc40_state )
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD("palette", 2)
+ MCFG_PALETTE_ADD("palette", 3)
MCFG_PALETTE_INIT_OWNER(cc40_state, cc40)
MCFG_HD44780_ADD("hd44780")
- MCFG_HD44780_LCD_SIZE(2, 16) // internal: 2*16, external: 1*31 + indicators
+ MCFG_HD44780_LCD_SIZE(2, 16) // 2*16 internal
MCFG_HD44780_PIXEL_UPDATE_CB(cc40_pixel_update)
/* sound hardware */
@@ -497,7 +502,7 @@ static MACHINE_CONFIG_START( cc40, cc40_state )
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
+ MCFG_CARTSLOT_EXTENSION_LIST("bin,rom,256")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_LOAD(cc40_state, cc40_cartridge)
MCFG_CARTSLOT_INTERFACE("cc40_cart")
@@ -517,7 +522,7 @@ ROM_START( cc40 )
ROM_LOAD( "tms70c20.bin", 0xf800, 0x0800, CRC(a21bf6ab) SHA1(3da8435ecbee143e7fa149ee8e1c92949bade1d8) ) // internal cpu rom
ROM_REGION( 0x8000, "system", 0 )
- ROM_LOAD( "cc40.bin", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
+ ROM_LOAD( "hn61256pc09.bin", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
ROM_REGION( 0x20000, "user1", ROMREGION_ERASEFF ) // cartridge area, max 4*32KB
ROM_END
diff --git a/src/mess/drivers/ti74.c b/src/mess/drivers/ti74.c
index 06dea46ce3d..1ea0be813bc 100644
--- a/src/mess/drivers/ti74.c
+++ b/src/mess/drivers/ti74.c
@@ -5,7 +5,11 @@
Texas Instruments TI-74 BASICALC
Texas Instruments TI-95 PROCALC
hardware family: CC-40 -> TI-74 BASICALC -> TI-95 PROCALC
-
+
+ TI-74 PCB layout:
+ note: TI-95 PCB is nearly the same, just with a different size LCD screen,
+ its CPU is labeled C70011, and the system ROM is labeled HN61256PC95.
+
DOCK-BUS
--||||||||---
C == |
@@ -36,8 +40,8 @@
-------------------------------------
IC1 HN61256PC93 - Hitachi DIP-28 32KB CMOS Mask PROM
- IC2 C70009 - Texas Instruments TMS70C40 with some TI custom I/O mods, 54 pins (C70011 in case of TI-95)
- running at max 4MHz. 128 bytes internal RAM, 4KB internal ROM
+ IC2 C70009 - Texas Instruments TMS70C46, 54 pins. Basically a TMS70C40 with some TI custom I/O mods.
+ 128 bytes internal RAM, 4KB internal ROM, running at max 4MHz.
IC3 HM6264LP-15 - Hitachi 8KB SRAM (battery backed)
RC4193N - Micropower Switching Regulator
HD44100H - 60-pin QFP Hitachi HD44100 LCD Driver
@@ -47,7 +51,9 @@
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 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.
The machine is powered by 4 AAA batteries. These will also save internal RAM,
provided that the machine is turned off properly.
@@ -56,7 +62,9 @@
TODO:
- it runs too fast due to missing clock divider emulation in TMS70C46
- external ram cartridge
- - DOCK-BUS interface and peripherals
+ - TI-95 I/O indicator is always on (dockbus)
+ - is battery low/ok status also on dockbus? setting INT1 on reset seems to clear it
+ - DOCK-BUS interface and peripherals, compatible with both TI-74 and TI-95
* CI-7 cassette interface
* PC-324 thermal printer
(+ old Hexbus devices can be connected via a converter cable)
@@ -70,6 +78,7 @@
#include "imagedev/cartslot.h"
#include "ti74.lh"
+#include "ti95.lh"
class ti74_state : public driver_device
@@ -83,7 +92,6 @@ public:
required_device<tms70c46_device> m_maincpu;
ioport_port *m_key_matrix[8];
- emu_timer *m_poweron_timer;
UINT8 m_key_select;
UINT8 m_power;
@@ -98,7 +106,6 @@ public:
virtual void machine_start();
DECLARE_PALETTE_INIT(ti74);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ti74_cartridge);
- TIMER_CALLBACK_MEMBER(poweron_timer_cb);
};
@@ -150,34 +157,73 @@ DEVICE_IMAGE_LOAD_MEMBER(ti74_state, ti74_cartridge)
PALETTE_INIT_MEMBER(ti74_state, ti74)
{
- palette.set_pen_color(0, rgb_t(138, 146, 148));
- palette.set_pen_color(1, rgb_t(92, 83, 88));
+ 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(2, rgb_t(131, 136, 139)); // lcd pixel off
}
void ti74_state::update_lcd_indicator(UINT8 y, UINT8 x, int state)
{
- // reference _________________...
+ // TI-74 ref._________________...
// output# |10 11 12 13 14 2 3 4
// above | < SHIFT CTL FN I/O UCL _LOW >
// ---- raw lcd screen here ----
// under | BASIC CALC DEG RAD GRAD STAT
// output# | 63 64 1 62 53 54
+ //
+ // TI-95 ref._________________...
+ // output# | 40 43 41 44 42 12 11 10/13/14 0 1 2
+ // above | _LOW _ERROR 2nd INV ALPHA LC INS DEGRAD HEX OCT I/O
+ // screen- | _P{70} <{71} RUN{3}
+ // area . SYS{4}
output_set_lamp_value(y * 10 + x, state);
}
static HD44780_PIXEL_UPDATE(ti74_pixel_update)
{
+ // char size is 5x7 + cursor
+ if (x > 4 || y > 7)
+ return;
+
if (line == 1 && pos == 15)
{
- // the last char is used to control lcd indicators
+ // the last char is used to control the 14 lcd indicators
ti74_state *driver_state = device.machine().driver_data<ti74_state>();
driver_state->update_lcd_indicator(y, x, state);
}
else if (line < 2 && pos < 16)
{
- // internal: 2*16, external: 1*31 + indicators
- if (y == 7) y++; // the cursor is slightly below the 5x7 character
- bitmap.pix16(1 + y, 1 + line*16*6 + pos*6 + x) = state;
+ // internal: 2*16, external: 1*31
+ if (y == 7) y++; // the cursor is slightly below the character
+ bitmap.pix16(1 + y, 1 + line*16*6 + pos*6 + x) = state ? 1 : 2;
+ }
+}
+
+static HD44780_PIXEL_UPDATE(ti95_pixel_update)
+{
+ // char size is 5x7 + cursor
+ if (x > 4 || y > 7)
+ return;
+
+ if (line == 1 && pos == 15)
+ {
+ // the last char is used to control the 17 lcd indicators
+ ti74_state *driver_state = device.machine().driver_data<ti74_state>();
+ driver_state->update_lcd_indicator(y, x, state);
+ }
+ else if (line == 0 && pos < 16)
+ {
+ // 1st line is simply 16 chars
+ if (y == 7) y++; // the cursor is slightly below the char
+ bitmap.pix16(10 + y, 1 + pos*6 + x) = state ? 1 : 2;
+ }
+ else if (line == 1 && pos < 15 && y < 7)
+ {
+ // 2nd line is segmented into 5 groups of 3 chars, there is no cursor
+ // note: the chars are smaller than on the 1st line (this is handled in .lay file)
+ const int gap = 9;
+ int group = pos / 3;
+ bitmap.pix16(1 + y, 1 + group*gap + pos*6 + x) = state ? 1 : 2;
}
}
@@ -239,6 +285,9 @@ static ADDRESS_MAP_START( main_io_map, AS_IO, 8, ti74_state )
AM_RANGE(TMS7000_PORTE, TMS7000_PORTE) AM_WRITE(keyboard_w) AM_READNOP
ADDRESS_MAP_END
+static ADDRESS_MAP_START( e_map, AS_DATA, 8, ti74_state )
+ADDRESS_MAP_END
+
/***************************************************************************
@@ -248,87 +297,173 @@ ADDRESS_MAP_END
***************************************************************************/
static INPUT_PORTS_START( ti74 )
- // 8x8 keyboard matrix, RESET and ON buttons are not on it
- // Unused entries are not connected, but some might have a purpose for factory testing
+ // 8x8 keyboard matrix, RESET and ON buttons are not on it. Unused entries are not connected, but some have a purpose for factory testing.
+ // For convenience, number keys are mapped to number row too.
+ // PORT_NAME lists functions under [SHIFT] and [MODE] or [STAT] as secondaries.
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_NAME("m M Frac")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_NAME("k K Frq")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_NAME("i I SQR(x)")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("LEFT")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_NAME("u U x^2")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_NAME("j J nCr")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_NAME("n N Intg")
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('%')
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("RIGHT")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_NAME("l L (x,y)")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_NAME("o O 1/x")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("RIGHT EE")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_NAME("y Y log")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_NAME("h H nPr")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_NAME("b B EXC")
PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHAR('\'') PORT_NAME("SPACE '")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHAR('\'') PORT_NAME("SPACE ' DELTA%")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_NAME("; : SIGMA+")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_NAME("p P y^x")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR('(') PORT_NAME("UP (")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_NAME("t T ln(x)")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_NAME("g G n!")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_NAME("v V SUM")
PORT_START("IN3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) PORT_CHAR('=') PORT_NAME("ENTER =")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_NAME("CLR UCL")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("CLR UCL CE/C")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(')') PORT_NAME("DOWN )")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_NAME("RUN")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_NAME("RUN x<->y")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_NAME("r R pi")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_NAME("f F P->R")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_NAME("c C RCL")
PORT_START("IN4")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('~') PORT_CHAR('?') PORT_NAME("+/- ?")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("7 DEL")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("BREAK")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('~') PORT_CHAR('?') PORT_NAME("+/- ? CSR")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_NAME("1 ! r")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') PORT_NAME("4 $ SIGMA(x)")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("7 DEL SIGMA(x^2)")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) PORT_NAME("BREAK")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_NAME("e E tan")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_NAME("d D DRG->")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_NAME("x X STO")
PORT_START("IN5")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('<')
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('&')
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_NAME("8 INS")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("MODE")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('<') PORT_NAME("0 < x'")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') PORT_NAME("2 \" a")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('&') PORT_NAME("5 & SIGMA(y)")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_NAME("8 INS SIGMA(y^2)")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_NAME("MODE")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_NAME("w W cos")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_NAME("s S DRG")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_NAME("z Z PRINT")
PORT_START("IN6")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_NAME("9 PB")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("OFF")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('.') PORT_CHAR('>') PORT_NAME(". > y'") // 2 on the keyboard, same scancode
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') PORT_NAME("3 # b")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') PORT_NAME("6 ^ n")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_NAME("9 PB SIGMA(xy)")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_NAME("OFF")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_NAME("q Q sin")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_NAME("a A DMS->DD")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN7")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("+")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("*")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("/")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("+ sy")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_NAME("- sx")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("* _y")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("/ _x")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_NAME("FN")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("CTL")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("SHIFT")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("FN hyp")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("CTL STAT")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("SHIFT INV")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ti95 )
+ // 8x8 keyboard matrix, RESET and ON buttons are not on it.
+ // For convenience, number keys are mapped to number row too.
+ // PORT_NAME lists functions under [ALPHA] and [2nd] as secondaries.
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("BREAK Q")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("SIN A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("I/O Z")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("HELP ASM")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_NAME(") ] DRG")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("/ \\ DFN")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR('=') PORT_NAME("= ~ TRACE")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("EE { ENG")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("HALT W")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("COS S")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("FILES X")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) PORT_NAME("ALPHA PART")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_NAME("3 ; SBL")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("+ & RTN")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_NAME("2 : GTL")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_NAME("F1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("SIGMA+ E")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("TAN D")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("STAT C")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("LEARN PC")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_NAME("6 @ CP")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_NAME("- _ 13d")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_NAME("5 % CMS")
+
+ PORT_START("IN3")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_NAME("F2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME("x~t R AH")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("LN F")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("CONV V")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("OLD NOP")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_NAME("9 > x!")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("* ^ PI")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_NAME("8 < nCr")
+
+ PORT_START("IN4")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_NAME("F3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("HYP T BH")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("LOG G")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("NUM B")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("RUN SPACE")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_NAME("0 $ PAUSE")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('.') PORT_NAME(". ? ADV")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("+/- ! PRINT")
+
+ PORT_START("IN5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_NAME("F4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INCR Y CH")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("x^2 H")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("FLAGS N")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT DEL")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("RCL O FH")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("INV P")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_NAME("7 } nPr")
+
+ PORT_START("IN6")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_NAME("F5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_NAME("EXC U DH")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("SQR(x) J")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("TESTS M")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT INS")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("y^x L")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("2nd")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_4) PORT_CHAR('4' )PORT_NAME("4 IND")
+
+ PORT_START("IN7")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_NAME("( [ FIX")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("STO I EH")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("1/x K")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("FUNC , \"")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("CE F:CLR")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("LIST . '")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("CLEAR")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_NAME("1 # LBL")
INPUT_PORTS_END
@@ -339,23 +474,9 @@ INPUT_PORTS_END
***************************************************************************/
-TIMER_CALLBACK_MEMBER(ti74_state::poweron_timer_cb)
-{
- m_power = 1;
-
- // battery ok/low status is on int1 line!
- m_maincpu->set_input_line(TMS7000_INT1_LINE, ASSERT_LINE);
-}
-
void ti74_state::machine_reset()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- bankswitch_w(space, 0, 0);
-
- // give the system some time to boot before switching poweron latch
- m_power = 0;
- m_maincpu->set_input_line(TMS7000_INT1_LINE, CLEAR_LINE);
- m_poweron_timer->adjust(attotime::from_msec(10));
+ m_power = 1;
}
void ti74_state::machine_start()
@@ -365,9 +486,7 @@ void ti74_state::machine_start()
m_key_matrix[i] = ioport(tags[i]);
membank("sysbank")->configure_entries(0, 4, memregion("system")->base(), 0x2000);
-
- m_poweron_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti74_state::poweron_timer_cb), this));
- m_poweron_timer->adjust(attotime::never);
+ membank("sysbank")->set_entry(0);
// zerofill
m_key_select = 0;
@@ -384,6 +503,7 @@ static MACHINE_CONFIG_START( ti74, ti74_state )
MCFG_CPU_ADD("maincpu", TMS70C46, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(main_io_map)
+ MCFG_CPU_DATA_MAP(e_map)
MCFG_NVRAM_ADD_0FILL("6264.ic3")
@@ -397,22 +517,58 @@ static MACHINE_CONFIG_START( ti74, ti74_state )
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD("palette", 2)
+ MCFG_PALETTE_ADD("palette", 3)
MCFG_PALETTE_INIT_OWNER(ti74_state, ti74)
MCFG_HD44780_ADD("hd44780") // 270kHz
- MCFG_HD44780_LCD_SIZE(2, 16) // internal: 2*16, external: 1*31 + indicators
+ MCFG_HD44780_LCD_SIZE(2, 16) // 2*16 internal
MCFG_HD44780_PIXEL_UPDATE_CB(ti74_pixel_update)
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
+ MCFG_CARTSLOT_EXTENSION_LIST("bin,rom,256")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_LOAD(ti74_state, ti74_cartridge)
MCFG_CARTSLOT_INTERFACE("ti74_cart")
MCFG_SOFTWARE_LIST_ADD("cart_list", "ti74_cart")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_START( ti95, ti74_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS70C46, XTAL_4MHz)
+ MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_CPU_IO_MAP(main_io_map)
+ MCFG_CPU_DATA_MAP(e_map)
+
+ MCFG_NVRAM_ADD_0FILL("6264.ic3")
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_REFRESH_RATE(60) // arbitrary
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
+ MCFG_SCREEN_SIZE(200, 20)
+ MCFG_SCREEN_VISIBLE_AREA(0, 200-1, 0, 20-1)
+ MCFG_DEFAULT_LAYOUT(layout_ti95)
+ MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_PALETTE_ADD("palette", 3)
+ MCFG_PALETTE_INIT_OWNER(ti74_state, ti74)
+
+ MCFG_HD44780_ADD("hd44780")
+ MCFG_HD44780_LCD_SIZE(2, 16)
+ MCFG_HD44780_PIXEL_UPDATE_CB(ti95_pixel_update)
+
+ /* cartridge */
+ MCFG_CARTSLOT_ADD("cart")
+ MCFG_CARTSLOT_EXTENSION_LIST("bin,rom,256")
+ MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_CARTSLOT_LOAD(ti74_state, ti74_cartridge)
+ MCFG_CARTSLOT_INTERFACE("ti95_cart")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "ti95_cart")
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -432,4 +588,16 @@ ROM_START( ti74 )
ROM_END
+ROM_START( ti95 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "c70011.ic2", 0xf000, 0x1000, CRC(b4d0a5c1) SHA1(3ff41946d014f72220a88803023b6a06d5086ce4) ) // internal cpu rom
+
+ ROM_REGION( 0x8000, "system", 0 )
+ ROM_LOAD( "hn61256pc95.ic1", 0x0000, 0x8000, CRC(c46d29ae) SHA1(c653f08590dbc28241a9f5a6c2541641bdb0208b) ) // system rom, banked
+
+ ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF ) // cartridge area
+ROM_END
+
+
COMP( 1985, ti74, 0, 0, ti74, ti74, driver_device, 0, "Texas Instruments", "TI-74 BASICALC", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+COMP( 1986, ti95, 0, 0, ti95, ti95, driver_device, 0, "Texas Instruments", "TI-95 PROCALC", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
diff --git a/src/mess/layout/cc40.lay b/src/mess/layout/cc40.lay
index e864220b300..ea366ddc0c1 100644
--- a/src/mess/layout/cc40.lay
+++ b/src/mess/layout/cc40.lay
@@ -10,126 +10,126 @@
<element name="ind_left" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="&lt;" align="1" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&lt;" align="1" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_right" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="&gt;" align="2" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&gt;" align="2" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_shift" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="SHIFT" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="SHIFT" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_ctl" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="CTL" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CTL" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_fn" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="FN" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="FN" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_deg" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="DEG" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="DEG" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_rad" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="RAD" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RAD" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_grad" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="GRAD" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="GRAD" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_io" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="I/O" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="I/O" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_ucl" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="UCL" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="UCL" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_error" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="ERROR" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="ERROR" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_user" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="v" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="v" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_low" defstate="0">
- <rect state="0"><color red="0.494" green="0.501" blue="0.522" /></rect>
- <rect state="1"><color red="0.361" green="0.325" blue="0.345" /></rect>
+ <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>
<text string="LOW">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
diff --git a/src/mess/layout/ti74.lay b/src/mess/layout/ti74.lay
index 85d150c5667..16d6c1f55a0 100644
--- a/src/mess/layout/ti74.lay
+++ b/src/mess/layout/ti74.lay
@@ -10,136 +10,136 @@
<element name="ind_left" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="&lt;" align="1" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&lt;" align="1" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_right" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="&gt;" align="2" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="&gt;" align="2" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_shift" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="SHIFT" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="SHIFT" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_ctl" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="CTL" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CTL" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_fn" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="FN" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="FN" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_io" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="I/O" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="I/O" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_ucl" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="UCL" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="UCL" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_basic" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="BASIC" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="BASIC" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_calc" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="CALC" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="CALC" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_deg" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="DEG" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="DEG" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_rad" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="RAD" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="RAD" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_grad" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="GRAD" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="GRAD" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_stat" defstate="0">
<rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
<text string="STAT" state="0">
- <color red="0.494" green="0.501" blue="0.522" />
+ <color red="0.515" green="0.537" blue="0.548" />
</text>
<text string="STAT" state="1">
- <color red="0.361" green="0.325" blue="0.345" />
+ <color red="0.361" green="0.326" blue="0.346" />
</text>
</element>
<element name="ind_low" defstate="0">
- <rect state="0"><color red="0.494" green="0.501" blue="0.522" /></rect>
- <rect state="1"><color red="0.361" green="0.325" blue="0.345" /></rect>
+ <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>
<text string="LOW">
<color red="0.5412" green="0.57255" blue="0.5804" />
</text>
diff --git a/src/mess/layout/ti95.lay b/src/mess/layout/ti95.lay
new file mode 100644
index 00000000000..6ee4cd6db55
--- /dev/null
+++ b/src/mess/layout/ti95.lay
@@ -0,0 +1,325 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+ <element name="static_black">
+ <rect><color red="0" green="0" blue="0" /></rect>
+ </element>
+ <element name="static_bg">
+ <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>
+ </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>
+ <text string="LOW">
+ <color red="0.5412" green="0.57255" blue="0.5804" />
+ </text>
+ </element>
+
+ <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>
+ <text string="ERROR">
+ <color red="0.5412" green="0.57255" blue="0.5804" />
+ </text>
+ </element>
+
+ <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>
+ <text string="P">
+ <color red="0.5412" green="0.57255" blue="0.5804" />
+ </text>
+ </element>
+
+ <element name="ind_left" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="&lt;" align="1" state="0">
+ <color red="0.515" green="0.537" blue="0.548" />
+ </text>
+ <text string="&lt;" align="1" state="1">
+ <color red="0.361" green="0.326" blue="0.346" />
+ </text>
+ </element>
+
+ <element name="ind_2nd" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="2nd" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_inv" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="INV" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_alpha" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="ALPHA" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_lc" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="LC" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_ins" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="INS" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_de" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="DE" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_g" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="G" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_rad" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="RAD" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_hex" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="HEX" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_oct" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="OCT" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_io" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="I/O" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_run" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="RUN" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+ <element name="ind_sys" defstate="0">
+ <rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect>
+ <text string="SYS" align="1" state="0">
+ <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" />
+ </text>
+ </element>
+
+
+
+ <view name="Internal Layout">
+ <bounds left="0" top="0" right="125" bottom="30" />
+
+ <screen index="0">
+ <bounds x="15" y="-2" width="200" height="20" />
+ </screen>
+
+<!-- 2nd line chars are about 0.83333 smaller -->
+
+ <screen index="0">
+ <bounds x="10" y="22" width="166.66" height="16.666" />
+ </screen>
+
+
+
+<!-- draw background around lcd screen matrix part -->
+
+ <bezel element="static_bg">
+ <bounds left="0" top="0" right="150" bottom="7" />
+ </bezel>
+ <bezel element="static_bg">
+ <bounds left="0" top="0" right="15.25" bottom="20" />
+ </bezel>
+ <bezel element="static_bg">
+ <bounds left="0" top="17.75" right="150" bottom="22.2" />
+ </bezel>
+ <bezel element="static_bg">
+ <bounds left="0" top="20" right="10.2" bottom="45" />
+ </bezel>
+ <bezel element="static_bg">
+ <bounds left="0" top="29.5" right="150" bottom="45" />
+ </bezel>
+
+<!-- draw bezel around 2nd line -->
+
+ <bezel element="static_bg2">
+ <bounds x="0" y="18.7" width="150" height="2.5" />
+ </bezel>
+
+ <bezel element="static_bg2">
+ <bounds x="0" y="20" width="7.9" height="15" />
+ </bezel>
+ <bezel element="static_bg2">
+ <bounds x="27.9" y="20" width="2.5" height="15" />
+ </bezel>
+ <bezel element="static_bg2">
+ <bounds x="50.4" y="20" width="2.5" height="15" />
+ </bezel>
+ <bezel element="static_bg2">
+ <bounds x="72.9" y="20" width="2.5" height="15" />
+ </bezel>
+ <bezel element="static_bg2">
+ <bounds x="95.4" y="20" width="2.5" height="15" />
+ </bezel>
+ <bezel element="static_bg2">
+ <bounds x="117.9" y="20" width="10" height="15" />
+ </bezel>
+
+<!-- crop -->
+
+ <bezel element="static_black">
+ <bounds left="0" top="-10" right="250" bottom="0" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds left="125" top="-10" right="250" bottom="50" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds left="0" top="30" right="250" bottom="50" />
+ </bezel>
+
+
+
+<!-- draw lcd indicators -->
+
+<!-- left: _p, left -->
+
+ <bezel name="lamp70" element="ind_p">
+ <bounds x="1" y="9" width="5" height="5" />
+ </bezel>
+ <bezel name="lamp71" element="ind_left">
+ <bounds x="8" y="9" width="5" height="5" />
+ </bezel>
+
+<!-- right: run, sys -->
+
+ <bezel name="lamp3" element="ind_run">
+ <bounds x="115.5" y="6.5" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp4" element="ind_sys">
+ <bounds x="115.5" y="12" width="20" height="5" />
+ </bezel>
+
+<!-- top: _low, _error, 2nd, inv, alpha, lc, ins -->
+
+ <bezel name="lamp40" element="ind_low">
+ <bounds x="1" y="1" width="12" height="5" />
+ </bezel>
+ <bezel name="lamp43" element="ind_error">
+ <bounds x="16" y="1" width="15" height="5" />
+ </bezel>
+
+ <bezel name="lamp41" element="ind_2nd">
+ <bounds x="32" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp44" element="ind_inv">
+ <bounds x="41" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp42" element="ind_alpha">
+ <bounds x="50" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp12" element="ind_lc">
+ <bounds x="64.3" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp11" element="ind_ins">
+ <bounds x="71.3" y="1" width="20" height="5" />
+ </bezel>
+
+<!-- top: deg/rad/grad -->
+
+ <bezel name="lamp10" element="ind_de">
+ <bounds x="80" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp13" element="ind_g">
+ <bounds x="85" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp14" element="ind_rad">
+ <bounds x="87.8" y="1" width="20" height="5" />
+ </bezel>
+
+<!-- top: hex, oct, i/o -->
+
+ <bezel name="lamp0" element="ind_hex">
+ <bounds x="97.7" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp1" element="ind_oct">
+ <bounds x="107" y="1" width="20" height="5" />
+ </bezel>
+ <bezel name="lamp2" element="ind_io">
+ <bounds x="117.5" y="1" width="20" height="5" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 79451969d9a..fc197d0e73b 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -1049,7 +1049,8 @@ avigo_it // 1997 Avigo (Italian)
// Texas Instruments Calculators
ti73 // 1990 TI-73
-ti74 // 1986 TI-74
+ti74 // 1985 TI-74
+ti95 // 1986 TI-95
ti81 // 1990 TI-81 (Z80 2 MHz)
ti81v2 // 1990 TI-81 (Z80 2 MHz)
ti85 // 1992 TI-85 (Z80 6 MHz)
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index 39efa9e65e9..537e0470ed7 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -2298,7 +2298,7 @@ $(MESS_MACHINE)/megacd.o: $(MESS_LAYOUT)/megacd.lh
$(MESS_DRIVERS)/mekd2.o: $(MESS_LAYOUT)/mekd2.lh
$(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh
$(MESS_DRIVERS)/merlin.o: $(MESS_LAYOUT)/merlin.lh
-$(MESS_DRIVERS)/minicom.o: $(MESS_LAYOUT)/minicom.lh
+$(MESS_DRIVERS)/minicom.o: $(MESS_LAYOUT)/minicom.lh
$(MESS_DRIVERS)/mirage.o: $(MESS_LAYOUT)/mirage.lh
$(MESS_DRIVERS)/mk1.o: $(MESS_LAYOUT)/mk1.lh
$(MESS_DRIVERS)/mk14.o: $(MESS_LAYOUT)/mk14.lh
@@ -2341,7 +2341,8 @@ $(MESS_DRIVERS)/sym1.o: $(MESS_LAYOUT)/sym1.lh
$(MESS_DRIVERS)/tavernie.o: $(MESS_LAYOUT)/tavernie.lh
$(MESS_DRIVERS)/tec1.o: $(MESS_LAYOUT)/tec1.lh
$(MESS_DRIVERS)/tecnbras.o: $(MESS_LAYOUT)/tecnbras.lh
-$(MESS_DRIVERS)/ti74.o: $(MESS_LAYOUT)/ti74.lh
+$(MESS_DRIVERS)/ti74.o: $(MESS_LAYOUT)/ti74.lh \
+ $(MESS_LAYOUT)/ti95.lh
$(MESS_DRIVERS)/tk80.o: $(MESS_LAYOUT)/tk80.lh
$(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \
$(MESS_LAYOUT)/tm990189v.lh