New System Drivers Supported:
-----------------------------
TI-95 PROCALC [hap]
This commit is contained in:
Michaël Banaan Ananas 2014-07-25 16:06:48 +00:00
parent bbcde3a472
commit 92381d28f6
9 changed files with 669 additions and 168 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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 )

View File

@ -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>

View File

@ -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>

325
src/mess/layout/ti95.lay Normal file
View File

@ -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>

View File

@ -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)

View File

@ -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