summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/ti85.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/ti85.c')
-rw-r--r--src/mess/drivers/ti85.c787
1 files changed, 787 insertions, 0 deletions
diff --git a/src/mess/drivers/ti85.c b/src/mess/drivers/ti85.c
new file mode 100644
index 00000000000..25d53fe9521
--- /dev/null
+++ b/src/mess/drivers/ti85.c
@@ -0,0 +1,787 @@
+/***************************************************************************
+TI-85 and TI-86 drivers by Krzysztof Strzecha
+
+Notes:
+1. After start TI-85 waits for ON key interrupt, so press ON key to start
+ calculator. ************* PRESS THE "Q" KEY TO TURN IT ON. ********************
+2. Only difference between all TI-85 drivers is ROM version.
+3. TI-86 is TI-85 with more RAM and ROM.
+4. Only difference between all TI-86 drivers is ROM version.
+5. Video engine (with grayscale support) based on the idea found in VTI source
+ emulator written by Rusty Wagner.
+6. NVRAM is saved properly only when calculator is turned off before exiting MESS.
+7. To receive data from TI press "R" immediately after TI starts to send data.
+8. To request screen dump from calculator press "S".
+9. TI-81 does not have a serial link.
+
+Needed:
+1. Info about ports 3 (bit 2 seems to be allways 0) and 4.
+2. Any info on TI-81 hardware.
+3. ROM dumps of unemulated models.
+4. Artworks.
+
+New:
+05/10/2002 TI-85 serial link works again.
+17/09/2002 TI-85 snapshots loading fixed. Few code cleanups.
+ TI-86 SNAPSHOT LOADING DOESNT WORK.
+ TI-85, TI-86 SERIAL LINK DOESNT WORK.
+08/09/2001 TI-81, TI-85, TI-86 modified to new core.
+ TI-81, TI-85, TI-86 reset corrected.
+21/08/2001 TI-81, TI-85, TI-86 NVRAM corrected.
+20/08/2001 TI-81 ON/OFF fixed.
+ TI-81 ROM bank switching added (port 5).
+ TI-81 NVRAM support added.
+15/08/2001 TI-81 kayboard is now mapped as it should be.
+14/08/2001 TI-81 preliminary driver added.
+05/07/2001 Serial communication corrected (transmission works now after reset).
+02/07/2001 Many source cleanups.
+ PCR added.
+01/07/2001 Possibility to request screen dump from TI (received dumps are saved
+ as t85i file).
+29/06/2001 Received variables can be saved now.
+19/06/2001 Possibility to receive variables from calculator (they are nor saved
+ yet).
+17/06/2001 TI-86 reset fixed.
+15/06/2001 Possibility to receive memory backups from calculator.
+07/06/2001 TI-85 reset fixed.
+ Work on receiving data from calculator started.
+04/06/2001 TI-85 is able to receive variables and memory backups.
+14/05/2001 Many source cleanups.
+11/05/2001 Release years corrected. Work on serial link started.
+26/04/2001 NVRAM support added.
+25/04/2001 Video engine totally rewritten so grayscale works now.
+17/04/2001 TI-86 snapshots loading added.
+ ti86grom driver added.
+16/04/2001 Sound added.
+ Five TI-86 drivers added (all features of TI-85 drivers without
+ snapshot loading).
+13/04/2001 Snapshot loading (VTI 2.0 save state files).
+18/02/2001 Palette (not perfect).
+ Contrast control (port 2) implemented.
+ LCD ON/OFF implemented (port 3).
+ Interrupts corrected (port 3) - ON/OFF and APD works now.
+ Artwork added.
+09/02/2001 Keypad added.
+ 200Hz timer interrupts implemented.
+ ON key and its interrupts implemented.
+ Calculator is now fully usable.
+02/02/2001 Preliminary driver
+
+To do:
+- port 7 (TI-86)
+- port 4 (all models)
+- artwork (all models)
+- port 0 link (TI-82 and TI-83)
+- add TI-73, TI-83+ and T84+ drivers
+
+
+TI-81 memory map
+
+ CPU: Z80 2MHz
+ 0000-7fff ROM
+ 8000-ffff RAM (?)
+
+TI-82 memory map
+
+ CPU: Z80 6MHz
+ 0000-3fff ROM 0
+ 4000-7fff ROM 1-7 (switched)
+ 8000-ffff RAM
+
+TI-83 memory map
+
+ CPU: Z80 6MHz
+ 0000-3fff ROM 0
+ 4000-7fff ROM 1-15 (switched)
+ 8000-ffff RAM
+
+TI-83Plus memory map
+
+ CPU: Z80 8MHz (running at 6 MHz)
+ 0000-3fff ROM 0
+ 4000-7fff ROM 0-31 or RAM 0-1 (switched)
+ 7000-bfff ROM 0-31 or RAM 0-1 (switched)
+ c000-ffff RAM 0-31 or RAM 0-1 (switched)
+
+TI-85 memory map
+
+ CPU: Z80 6MHz
+ 0000-3fff ROM 0
+ 4000-7fff ROM 1-7 (switched)
+ 8000-ffff RAM
+
+TI-86 memory map
+
+ CPU: Z80 6MHz
+ 0000-3fff ROM 0
+ 4000-7fff ROM 0-15 or RAM 0-7 (switched)
+ 7000-bfff ROM 0-15 or RAM 0-7 (switched)
+ c000-ffff RAM 0
+
+Interrupts:
+
+ IRQ: 200Hz timer
+ ON key
+
+TI-81 ports:
+ 0: Video buffer offset (write only)
+ 1: Keypad
+ 2: Contrast (write only)
+ 3: ON status, LCD power
+ 4: Video buffer width, interrupt control (write only)
+ 5: ?
+ 6:
+ 7: ?
+
+TI-82 ports:
+ 0: Link
+ 1: Keypad
+ 2: Memory page
+ 3: ON status, LCD power
+ 4: Video buffer width, interrupt control (write only)
+ 10: Controll port for the display controller
+ 11: Data port for the display controller
+
+TI-83 ports:
+ 0: Link + Memory page
+ 1: Keypad
+ 2: Memory page
+ 3: ON status, LCD power
+ 4: Video buffer width, interrupt control (write only)
+ 10: Controll port for the display controller
+ 11: Data port for the display controller
+ 14: Battery Status
+
+TI-83Plus ports:
+ 0: Link
+ 1: Keypad
+ 2: ?
+ 3: ON status, LCD power
+ 4: Interrupt status
+ 6: Memory page 1
+ 7: Memory page 2
+ 10: Controll port for the display controller
+ 11: Data port for the display controller
+
+TI-85 ports:
+ 0: Video buffer offset (write only)
+ 1: Keypad
+ 2: Contrast (write only)
+ 3: ON status, LCD power
+ 4: Video buffer width, interrupt control (write only)
+ 5: Memory page
+ 6: Power mode
+ 7: Link
+
+TI-86 ports:
+ 0: Video buffer offset (write only)
+ 1: Keypad
+ 2: Contrast (write only)
+ 3: ON status, LCD power
+ 4: Power mode
+ 5: Memory page
+ 6: Memory page
+ 7: Link
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "imagedev/snapquik.h"
+#include "machine/nvram.h"
+#include "includes/ti85.h"
+
+/* port i/o functions */
+
+static ADDRESS_MAP_START( ti81_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
+ AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti85_port_0005_r, ti85_port_0005_w )
+ AM_RANGE(0x0007, 0x0007) AM_WRITE(ti81_port_0007_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti85_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
+ AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti85_port_0005_r, ti85_port_0005_w )
+ AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti85_port_0006_r, ti85_port_0006_w )
+ AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti82_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti82_port_0002_r, ti82_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
+ AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
+ AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti81v2_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti82_port_0002_r, ti82_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
+ AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
+ AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti83_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti83_port_0000_r, ti83_port_0000_w ) //TODO
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti83_port_0002_r, ti83_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti83_port_0003_r, ti83_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
+ AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
+ AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
+ AM_RANGE(0x0014, 0x0014) AM_READ_PORT( "BATTERY" )
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti83p_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti8x_plus_serial_r, ti8x_plus_serial_w)
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti83p_port_0002_r, ti83p_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti83_port_0003_r, ti83p_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti83_port_0003_r, ti83p_port_0004_w )
+ AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti86_port_0005_r, ti83p_port_0006_w )
+ AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti86_port_0006_r, ti83p_port_0007_w )
+ AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
+ AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti86_io, AS_IO, 8, ti85_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
+ AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
+ AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0006_r, ti85_port_0006_w )
+ AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti86_port_0005_r, ti86_port_0005_w )
+ AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti86_port_0006_r, ti86_port_0006_w )
+ AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
+ADDRESS_MAP_END
+
+/* memory w/r functions */
+
+static ADDRESS_MAP_START( ti81_mem , AS_PROGRAM, 8, ti85_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank1")
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")
+ AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("nvram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ti86_mem , AS_PROGRAM, 8, ti85_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank1")
+ AM_RANGE(0x4000, 0x7fff) AM_RAMBANK("bank2")
+ AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank3")
+ AM_RANGE(0xc000, 0xffff) AM_RAMBANK("bank4")
+ADDRESS_MAP_END
+
+/* keyboard input */
+
+static INPUT_PORTS_START (ti81)
+ PORT_START("BIT0") /* bit 0 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(-)") PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_F5)
+ PORT_START("BIT1") /* bit 1 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+") PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STORE") PORT_CODE(KEYCODE_TAB)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRACE") PORT_CODE(KEYCODE_F4)
+ PORT_START("BIT2") /* bit 2 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LN") PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ZOOM") PORT_CODE(KEYCODE_F3)
+ PORT_START("BIT3") /* bit 3 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOG") PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RANGE") PORT_CODE(KEYCODE_F2)
+ PORT_START("BIT4") /* bit 4 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(")") PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(") PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EE") PORT_CODE(KEYCODE_END)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^2") PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Y=") PORT_CODE(KEYCODE_F1)
+ PORT_START("BIT5") /* bit 5 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAN") PORT_CODE(KEYCODE_PGUP)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("COS") PORT_CODE(KEYCODE_HOME)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SIN") PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^-1") PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2nd") PORT_CODE(KEYCODE_LALT)
+ PORT_START("BIT6") /* bit 6 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CLEAR") PORT_CODE(KEYCODE_PGDN)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VARS") PORT_CODE(KEYCODE_F9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRGM") PORT_CODE(KEYCODE_F8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MATRX") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MATH") PORT_CODE(KEYCODE_F6)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("INS") PORT_CODE(KEYCODE_TILDE)
+ PORT_START("BIT7") /* bit 7 */
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MODE") PORT_CODE(KEYCODE_ESC)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X|T") PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALPHA") PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL)
+ PORT_START("ON") /* ON */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ON/OFF") PORT_CODE(KEYCODE_Q)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START (ti85)
+ PORT_START("BIT0") /* bit 0 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER (ENTRY)") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(-) (ANS |_|)") PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". (: Z)") PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 (CHAR Y)") PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F5 (M5)") PORT_CODE(KEYCODE_F5)
+ PORT_START("BIT1") /* bit 1 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+ (MEM X)") PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3 (VARS W)") PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 (TEST V)") PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1 (BASE U)") PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STORE (RCL =)") PORT_CODE(KEYCODE_TAB)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F4 (M4)") PORT_CODE(KEYCODE_F4)
+ PORT_START("BIT2") /* bit 2 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- (LIST T)") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 (STRNG S)") PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 (CONV R)") PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 (CONS Q)") PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(", (ANGLE P)") PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F3 (M3)") PORT_CODE(KEYCODE_F3)
+ PORT_START("BIT3") /* bit 3 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("* (MATH O)") PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 (CPLX N)") PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 (VECTR M)") PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 (MATRX L)") PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^2 (SQRT K)") PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F2 (M2)") PORT_CODE(KEYCODE_F2)
+ PORT_START("BIT4") /* bit 4 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ (CALC J)") PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(") (] I)") PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("( ([ H)") PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EE (X^-1 G)") PORT_CODE(KEYCODE_END)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LN (e^x F)") PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F1 (M1)") PORT_CODE(KEYCODE_F1)
+ PORT_START("BIT5") /* bit 5 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^ (PI E)") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAN (TAN^-1 D)") PORT_CODE(KEYCODE_PGUP)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("COS (COS^-1 C)") PORT_CODE(KEYCODE_HOME)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SIN (SIN^-1 B)") PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOG (10^x A)") PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2nd") PORT_CODE(KEYCODE_LALT)
+ PORT_START("BIT6") /* bit 6 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CLEAR (TOLER)") PORT_CODE(KEYCODE_PGDN)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CUSTOM (CATALOG)") PORT_CODE(KEYCODE_F9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRGM (POLY)") PORT_CODE(KEYCODE_F8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STAT (SIMULT)") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GRAPH (SOLVER)") PORT_CODE(KEYCODE_F6)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXIT (QUIT)") PORT_CODE(KEYCODE_ESC)
+ PORT_START("BIT7") /* bit 7 */
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL (INS)") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x-VAR (LINK x)") PORT_CODE(KEYCODE_LCONTROL)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALPHA (alpha)") PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MORE (MODE)") PORT_CODE(KEYCODE_TILDE)
+ PORT_START("ON") /* ON */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ON/OFF") PORT_CODE(KEYCODE_Q)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START (ti82)
+ PORT_START("BIT0") /* bit 0 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(-)") PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_F5)
+ PORT_START("BIT1") /* bit 1 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+") PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STORE") PORT_CODE(KEYCODE_TAB)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRACE") PORT_CODE(KEYCODE_F4)
+ PORT_START("BIT2") /* bit 2 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LN") PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ZOOM") PORT_CODE(KEYCODE_F3)
+ PORT_START("BIT3") /* bit 3 */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOG") PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("WINDOW") PORT_CODE(KEYCODE_F2)
+ PORT_START("BIT4") /* bit 4 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(")") PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(") PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_END)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^2") PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Y=") PORT_CODE(KEYCODE_F1)
+ PORT_START("BIT5") /* bit 5 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAN") PORT_CODE(KEYCODE_PGUP)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("COS") PORT_CODE(KEYCODE_HOME)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SIN") PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^-1") PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2nd") PORT_CODE(KEYCODE_LALT)
+ PORT_START("BIT6") /* bit 6 */
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CLEAR") PORT_CODE(KEYCODE_PGDN)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VARS") PORT_CODE(KEYCODE_F9)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRGM") PORT_CODE(KEYCODE_F8)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MATRX") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MATH") PORT_CODE(KEYCODE_F6)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MODE") PORT_CODE(KEYCODE_ESC)
+ PORT_START("BIT7") /* bit 7 */
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STAT") PORT_CODE(KEYCODE_TILDE)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x-VAR") PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALPHA") PORT_CODE(KEYCODE_CAPSLOCK)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL)
+ PORT_START("ON") /* ON */
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ON/OFF") PORT_CODE(KEYCODE_Q)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START (ti83)
+ PORT_INCLUDE( ti82 )
+
+ PORT_START("BATTERY")
+ PORT_DIPNAME( 0x01, 0x01, "Battery Status" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x00, "Low Battery" )
+INPUT_PORTS_END
+
+/* machine definition */
+static MACHINE_CONFIG_START( ti81, ti85_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", Z80, 2000000) /* 2 MHz */
+ MCFG_CPU_PROGRAM_MAP(ti81_mem)
+ MCFG_CPU_IO_MAP(ti81_io)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+
+ MCFG_MACHINE_START( ti81 )
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_REFRESH_RATE(50)
+ MCFG_SCREEN_VBLANK_TIME(0)
+ MCFG_SCREEN_SIZE(96, 64)
+ MCFG_SCREEN_VISIBLE_AREA(0, 96-1, 0, 64-1)
+ MCFG_SCREEN_UPDATE_STATIC( ti85 )
+
+ MCFG_PALETTE_LENGTH(224)
+ MCFG_PALETTE_INIT( ti85 )
+
+ MCFG_VIDEO_START( ti85 )
+
+ MCFG_NVRAM_ADD_0FILL("nvram")
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( ti85, ti81 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK( 6000000) /* 6 MHz */
+ MCFG_CPU_IO_MAP(ti85_io)
+
+ MCFG_MACHINE_RESET( ti85 )
+
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_SIZE(128, 64)
+ MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 64-1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( ti85d, ti85 )
+ MCFG_SNAPSHOT_ADD("snapshot", ti8x, "sav", 0)
+ //MCFG_TI85SERIAL_ADD( "tiserial" )
+MACHINE_CONFIG_END
+
+
+static const t6a04_interface ti82_display =
+{
+ 64, // number of lines
+ 96, // pixels for line
+};
+
+static MACHINE_CONFIG_DERIVED( ti82, ti81 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK( 6000000) /* 6 MHz */
+ MCFG_CPU_IO_MAP(ti82_io)
+
+ MCFG_MACHINE_RESET( ti85 )
+
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_UPDATE_DEVICE("t6a04", t6a04_device, screen_update)
+ MCFG_PALETTE_LENGTH(2)
+ MCFG_PALETTE_INIT( ti82 )
+
+ MCFG_T6A04_ADD("t6a04", ti82_display)
+
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ //MCFG_TI82SERIAL_ADD( "tiserial" )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ti81v2, ti82 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(ti81v2_io)
+
+ //MCFG_DEVICE_REMOVE( "tiserial" )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ti83, ti81 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK( 6000000) /* 6 MHz */
+ MCFG_CPU_IO_MAP(ti83_io)
+
+ MCFG_MACHINE_RESET( ti85 )
+
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_UPDATE_DEVICE("t6a04", t6a04_device, screen_update)
+ MCFG_PALETTE_LENGTH(2)
+ MCFG_PALETTE_INIT( ti82 )
+
+ MCFG_T6A04_ADD("t6a04", ti82_display)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ti86, ti85 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(ti86_mem)
+ MCFG_CPU_IO_MAP(ti86_io)
+
+ MCFG_MACHINE_START( ti86 )
+ MCFG_MACHINE_RESET( ti85 )
+
+ MCFG_DEVICE_REMOVE("nvram")
+ MCFG_NVRAM_HANDLER( ti86 )
+
+ MCFG_SNAPSHOT_ADD("snapshot", ti8x, "sav", 0)
+ //MCFG_TI86SERIAL_ADD( "tiserial" )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ti83p, ti81 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK( 6000000) /* 8 MHz running at 6 MHz */
+ MCFG_CPU_PROGRAM_MAP(ti86_mem)
+ MCFG_CPU_IO_MAP(ti83p_io)
+
+ MCFG_MACHINE_START( ti83p )
+ MCFG_MACHINE_RESET( ti85 )
+
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_UPDATE_DEVICE("t6a04", t6a04_device, screen_update)
+ MCFG_PALETTE_LENGTH(2)
+ MCFG_PALETTE_INIT( ti82 )
+
+ MCFG_T6A04_ADD("t6a04", ti82_display)
+
+ MCFG_DEVICE_REMOVE("nvram")
+ MCFG_NVRAM_HANDLER(ti83p)
+
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ //MCFG_TI83PSERIAL_ADD( "tiserial" )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ti73, ti83p )
+ //MCFG_DEVICE_REMOVE( "tiserial" )
+ //MCFG_TI73SERIAL_ADD( "tiserial" )
+MACHINE_CONFIG_END
+
+ROM_START (ti73)
+ ROM_REGION (0x80000, "bios",0)
+ ROM_DEFAULT_BIOS("v16")
+ ROM_SYSTEM_BIOS( 0, "v16", "V 1.6" )
+ ROMX_LOAD( "ti73v160.rom", 0x00000, 0x80000, CRC(bb0e3a16) SHA1(d62c2c7532698962818a747a7f32e35e41dfe338), ROM_BIOS(1) )
+ROM_END
+
+ROM_START (ti81)
+ ROM_REGION (0x08000, "bios",0)
+ ROM_DEFAULT_BIOS("v18")
+ ROM_SYSTEM_BIOS( 0, "v11", "V 1.1K" )
+ ROMX_LOAD( "ti81v11k.bin", 0x00000, 0x8000, CRC(0b860a63) SHA1(84a71cfc8818ca4b7d0caa76ffbf6d0463eaf7c6), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v16", "V 1.6K" )
+ ROMX_LOAD( "ti81v16k.bin", 0x00000, 0x8000, CRC(452ca838) SHA1(92649f0f3bce7d8829d950cecd6532d7f7db1297), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v18", "V 1.8K" )
+ ROMX_LOAD( "ti81v18k.bin", 0x00000, 0x8000, CRC(94ac58e2) SHA1(ba915cfe2fe50a452ef8287db8f2244e29056d54), ROM_BIOS(3) )
+ //No dumps 1.0, and 2.0 from ticalc.org, less sure about 1.6K
+ROM_END
+
+ROM_START (ti81v2)
+ ROM_REGION (0x08000, "bios",0)
+ ROM_DEFAULT_BIOS("v20")
+ ROM_SYSTEM_BIOS( 0, "v20", "V 2.0V" )
+ ROMX_LOAD( "ti81v20v.bin", 0x00000, 0x8000, CRC(cfbd12da) SHA1(d2a923526d98f1046fcb583e46951939ba66bdb9), ROM_BIOS(1) )
+ROM_END
+
+ROM_START (ti82)
+ ROM_REGION (0x20000, "bios",0)
+ ROM_DEFAULT_BIOS("v19")
+ ROM_SYSTEM_BIOS( 0, "v16", "V 16.0" )
+ ROMX_LOAD( "ti82v16.bin", 0x00000, 0x20000, CRC(e2f5721c) SHA1(df300ae52e105faf2785a8ae9f42e84e4308d460), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v17", "V 17.0" )
+ ROMX_LOAD( "ti82v17.bin", 0x00000, 0x20000, CRC(0fc956d4) SHA1(77eef7d2db5ad1fb5de9129086a18428ddf66195), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v18", "V 18.0" )
+ ROMX_LOAD( "ti82v18.bin", 0x00000, 0x20000, CRC(6a320f03) SHA1(9ee15ebf0a1f8bde5bef982b5db4ce120c605d29), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 3, "v19", "V 19.0" )
+ ROMX_LOAD( "ti82v19.bin", 0x00000, 0x20000, CRC(ed4cf9ff) SHA1(10dc2d01c62b4e971a6ed7ebc75ca0f2e3dc4f95), ROM_BIOS(4) )
+ //Rom versions according to ticalc.org 3*, 4*, 7*, 8.0, 10.0, 12.0, 15.0, 16.0, 17.0, 18.0, 19.0, 19.006
+ROM_END
+
+ROM_START (ti83)
+ ROM_REGION (0x40000, "bios",0)
+ ROM_DEFAULT_BIOS("v110")
+ ROM_SYSTEM_BIOS( 0, "v102", "V 1.02" )
+ ROMX_LOAD( "ti83v102.bin", 0x00000, 0x40000, CRC(7ee5d27b) SHA1(ce08f6a808701fc6672230a790167ee485157561), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v103", "V 1.03" )
+ ROMX_LOAD( "ti83v103.bin", 0x00000, 0x40000, CRC(926f72a4) SHA1(8399e384804d8d29866caa4c8763d7a61946a467), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v104", "V 1.04" )
+ ROMX_LOAD( "ti83v104.bin", 0x00000, 0x40000, CRC(dccb73d3) SHA1(33877ff637dc5f4c5388799fd7e2159b48e72893), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 3, "v106", "V 1.06" )
+ ROMX_LOAD( "ti83v106.bin", 0x00000, 0x40000, CRC(2eae1cf0) SHA1(3d65c2a1b771ce8e5e5a0476ec1aa9c9cdc0e833), ROM_BIOS(4) )
+ ROM_SYSTEM_BIOS( 4, "v107", "V 1.07" )
+ ROMX_LOAD( "ti83v107.bin", 0x00000, 0x40000, CRC(4bf05697) SHA1(ef66dad3e7b2b6a86f326765e7dfd7d1a308ad8f), ROM_BIOS(5) )
+ ROM_SYSTEM_BIOS( 5, "v108", "V 1.08" )
+ ROMX_LOAD( "ti83v108.bin", 0x00000, 0x40000, CRC(0c6aafcc) SHA1(9c74f0b61655e9e160e92164db472ad7ee02b0f8), ROM_BIOS(6) )
+ ROM_SYSTEM_BIOS( 6, "v110", "V 1.10" )
+ ROMX_LOAD( "ti83v110.bin", 0x00000, 0x40000, CRC(7faee2d2) SHA1(25b373b58523647bb7b904001d391615e0b79bee), ROM_BIOS(7) )
+ ROM_SYSTEM_BIOS( 7, "v110-2", "V 1.10 (2)" )
+ ROMX_LOAD( "ti83v110-2.bin", 0x00000, 0x40000, CRC(56182912) SHA1(4c77fb77f023502b685a49a8013568b494384b25), ROM_BIOS(8) )
+ //Rom versions according to ticalc.org 1.02, 1.03, 1.04, 1.06, 1.07, 1.08, 1.10
+ROM_END
+
+ROM_START (ti83p)
+ ROM_REGION (0x80000, "bios",0)
+ ROM_DEFAULT_BIOS("v116")
+ ROM_SYSTEM_BIOS( 0, "v103", "V 1.03" )
+ ROMX_LOAD( "ti83pv103.bin", 0x00000, 0x80000, CRC(da466be0) SHA1(37eaeeb9fb5c18fb494e322b75070e80cc4d858e), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v103m", "V 1.03 [m]" )
+ ROMX_LOAD( "ti83pv103m.bin", 0x00000, 0x80000, CRC(281c9375) SHA1(80d698fed42976015a3e53fd59ebe7f49699b27e), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS( 2, "v103m2", "V 1.03 [m2]" )
+ ROMX_LOAD( "ti83pv103m2.bin", 0x00000, 0x80000, CRC(690d9d30) SHA1(d215d3880e06c2ae31ec24b21d542d5bb2f3935b), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS( 3, "v110", "V 1.10" )
+ ROMX_LOAD( "ti83pv110.bin", 0x00000, 0x80000, CRC(62683990) SHA1(F86CDEFE4ED5EF9965CD9EB667CB859E2CB10E19), ROM_BIOS(4) )
+ ROM_SYSTEM_BIOS( 4, "v112", "V 1.12" )
+ ROMX_LOAD( "ti83pv112.bin", 0x00000, 0x80000, CRC(ddca5026) SHA1(6615df5554076b6b81bd128bf847d2ff046e556b), ROM_BIOS(5) )
+ ROM_SYSTEM_BIOS( 5, "v110-2", "V 1.10-2" )
+ ROMX_LOAD( "ti83pv110-2.bin", 0x00000, 0x80000, CRC(504b9879) SHA1(8841d501870e8fc7173642d8a438205a040640fc), ROM_BIOS(6) )
+ ROM_SYSTEM_BIOS( 6, "v112-2", "V 1.12-2" )
+ ROMX_LOAD( "ti83pv112-2.bin", 0x00000, 0x80000, CRC(2126de12) SHA1(cbedc3a8cf8335eebf2b279d58720d8e7f86c569), ROM_BIOS(7) )
+ ROM_SYSTEM_BIOS( 7, "v113", "V 1.13" )
+ ROMX_LOAD( "ti83pv113.bin", 0x00000, 0x80000, CRC(30a243aa) SHA1(9b79e994ea1ce7af05b68f8ecee8b1b1fc3f0810), ROM_BIOS(8) )
+ ROM_SYSTEM_BIOS( 8, "v114", "V 1.14" )
+ ROMX_LOAD( "ti83pv114.bin", 0x00000, 0x80000, CRC(b32059c7) SHA1(46c66ba0421c03fc42f5afb06c7d3af812786140), ROM_BIOS(9) )
+ ROM_SYSTEM_BIOS( 9, "v115", "V 1.15" )
+ ROMX_LOAD( "ti83pv115.bin", 0x00000, 0x80000, CRC(9288029b) SHA1(8bd05fd47cab4028f275d1cc5383fd4f0e193474), ROM_BIOS(10) )
+ ROM_SYSTEM_BIOS( 10, "v116", "V 1.16" )
+ ROMX_LOAD( "ti83pv116.bin", 0x00000, 0x80000, CRC(0b7cd006) SHA1(290bc81159ea061d8ccb56a6f63e042f150afb32), ROM_BIOS(11) )
+ROM_END
+
+ROM_START (ti85)
+ ROM_REGION (0x20000, "bios",0)
+ ROM_DEFAULT_BIOS("v100")
+ ROM_SYSTEM_BIOS( 0, "v30a", "V 3.0A" )
+ ROMX_LOAD( "ti85v30a.bin", 0x00000, 0x20000, CRC(de4c0b1a) SHA1(f4cf4b8309372dbe26187bb279545f5d4bd48fc1), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v40", "V 4.0" )
+ ROMX_LOAD( "ti85v40.bin", 0x00000, 0x20000, CRC(a1723a17) SHA1(ff5866636bb3f206a6bf39cc9c9dc8308332aaf0), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v50", "V 5.0" )
+ ROMX_LOAD( "ti85v50.bin", 0x00000, 0x20000, CRC(781fa403) SHA1(bf20d520d8efd7e5ae269789ca4b3c71848ac32a), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 3, "v60", "V 6.0" )
+ ROMX_LOAD( "ti85v60.bin", 0x00000, 0x20000, CRC(b694a117) SHA1(36d58e2723e5ae4ffe0f8da691fa9a83bfe9e06b), ROM_BIOS(4) )
+ ROM_SYSTEM_BIOS( 4, "v80", "V 8.0" )
+ ROMX_LOAD( "ti85v80.bin", 0x00000, 0x20000, CRC(7f296338) SHA1(765d5c612b6ffc0d1ded8f79bcbe880b1b562a98), ROM_BIOS(5) )
+ ROM_SYSTEM_BIOS( 5, "v90", "V 9.0" )
+ ROMX_LOAD( "ti85v90.bin", 0x00000, 0x20000, CRC(6a0a94d0) SHA1(7742bf8a6929a21d06f306b494fc03b1fbdfe3e4), ROM_BIOS(6) )
+ ROM_SYSTEM_BIOS( 6, "v100", "V 10.0" )
+ ROMX_LOAD( "ti85v100.bin", 0x00000, 0x20000, CRC(053325b0) SHA1(36da1080c34e7b53cbe8463be5804e30e4a50dc8), ROM_BIOS(7) )
+ //No_dumps 1.0, 2.0 and 7.0 according to ticalc.org
+ROM_END
+
+ROM_START (ti86)
+ ROM_REGION (0x40000, "bios",0)
+ ROM_DEFAULT_BIOS("v16")
+ ROM_SYSTEM_BIOS( 0, "v12", "V 1.2" )
+ ROMX_LOAD( "ti86v12.bin", 0x00000, 0x40000, CRC(bdf16105) SHA1(e40b22421c31bf0af104518b748ae79cd21d9c57), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v13", "V 1.3" )
+ ROMX_LOAD( "ti86v13.bin", 0x00000, 0x40000, CRC(073ef70f) SHA1(5702d4bb835bdcbfa8075ffd620fca0eaf3a1592), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v14", "V 1.4" )
+ ROMX_LOAD( "ti86v14.bin", 0x00000, 0x40000, CRC(fe6e2986) SHA1(23e0fb9a1763d5b9a7b0e593f09c2ff30c760866), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 3, "v15", "V 1.5" )
+ ROMX_LOAD( "ti86v15.bin", 0x00000, 0x40000, BAD_DUMP CRC(e6e10546) SHA1(5ca63fdfc965ae3fb8e0695263cf9da41f6ecb90), ROM_BIOS(4) )
+ ROM_SYSTEM_BIOS( 4, "v16", "V 1.6" )
+ ROMX_LOAD( "ti86v16.bin", 0x00000, 0x40000, CRC(37e02acc) SHA1(b5ad204885e5dde23a22f18f8d5eaffca69d638d), ROM_BIOS(5) )
+ //Rom versions according to ticalc.org 1.2, 1.3, 1.4, 1.5, 1.6
+ROM_END
+
+
+ROM_START (ti83pse)
+ ROM_REGION (0x200000, "bios",0)
+ ROM_DEFAULT_BIOS("v116")
+ ROM_SYSTEM_BIOS( 0, "v116", "V 1.16" )
+ ROMX_LOAD( "ti83psev116.bin", 0x00000, 0x200000, CRC(d2570863) SHA1(d4214b3c0ebb26e10fe95294ac72a90d2ba99537), ROM_BIOS(1) )
+ROM_END
+
+ROM_START (ti84pse)
+ ROM_REGION (0x200000, "bios",0)
+ ROM_DEFAULT_BIOS("v241")
+ ROM_SYSTEM_BIOS( 0, "v241", "V 2.41" )
+ ROMX_LOAD( "ti84sev241.bin", 0x00000, 0x200000, CRC(5758db36) SHA1(7daa4f22e9b5dc8a1cc8fd31bceece9fa8b43515), ROM_BIOS(1) )
+ROM_END
+
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
+COMP( 1990, ti81, 0, 0, ti81, ti81, driver_device, 0, "Texas Instruments", "TI-81", GAME_NO_SOUND )
+COMP( 1992, ti85, 0, 0, ti85d, ti85, driver_device, 0, "Texas Instruments", "TI-85", GAME_NO_SOUND )
+COMP( 1993, ti82, 0, 0, ti82, ti82, driver_device, 0, "Texas Instruments", "TI-82", GAME_NO_SOUND )
+COMP( 1994, ti81v2, ti81, 0, ti81v2, ti81, driver_device, 0, "Texas Instruments", "TI-81 v2.0", GAME_NO_SOUND )
+COMP( 1996, ti83, 0, 0, ti83, ti83, driver_device, 0, "Texas Instruments", "TI-83", GAME_NO_SOUND )
+COMP( 1997, ti86, 0, 0, ti86, ti85, driver_device, 0, "Texas Instruments", "TI-86", GAME_NO_SOUND )
+COMP( 1998, ti73, 0, 0, ti73, ti82, driver_device, 0, "Texas Instruments", "TI-73", GAME_NO_SOUND )
+COMP( 1999, ti83p, 0, 0, ti83p, ti82, driver_device, 0, "Texas Instruments", "TI-83 Plus", GAME_NO_SOUND )
+COMP( 2001, ti83pse, 0, 0, ti85, ti85, driver_device, 0, "Texas Instruments", "TI-83 Plus Silver Edition", GAME_NOT_WORKING | GAME_NO_SOUND)
+//COMP( 2004, ti84p, 0, 0, ti85, ti85, driver_device, 0, "Texas Instruments", "TI-84 Plus", GAME_NOT_WORKING | GAME_NO_SOUND)
+COMP( 2004, ti84pse, 0, 0, ti85, ti85, driver_device, 0, "Texas Instruments", "TI-84 Plus Silver Edition", GAME_NOT_WORKING | GAME_NO_SOUND)