mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
(MESS) ti85: add basic support for the TI-84 Plus
Adds known dump of TI-84 Plus which has been sent to a mess dev and supports enough asic functionality that it boots and runs. Fixed up model enum to match style from the apple2 and used it to add support for where the ti84p differs from the ti84pse. Consolidated code for the 15Mhz calculators so there is less duplicated code between the ti83pse, ti84pse and ti84 support code.
This commit is contained in:
parent
9867043d73
commit
947d396010
38
src/mess/drivers/ti85.c
Normal file → Executable file
38
src/mess/drivers/ti85.c
Normal file → Executable file
@ -1,5 +1,6 @@
|
||||
/***************************************************************************
|
||||
TI-85 and TI-86 drivers by Krzysztof Strzecha
|
||||
TI-83 Plus, TI-84 Plus, and Siliver Edition support by Jon Sturm
|
||||
|
||||
Notes:
|
||||
1. After start TI-85 waits for ON key interrupt, so press ON key to start
|
||||
@ -342,6 +343,12 @@ static ADDRESS_MAP_START( ti83pse_banked_mem , AS_PROGRAM, 8, ti85_state )
|
||||
AM_RANGE(0x200000, 0x21BFFF) AM_RAM AM_SHARE("nvram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( ti84p_banked_mem , AS_PROGRAM, 8, ti85_state )
|
||||
AM_RANGE(0x0000, 0xfffff) AM_DEVREADWRITE("flash", intelfsh8_device, read, write)
|
||||
AM_RANGE(0x200000, 0x21BFFF) AM_RAM AM_SHARE("nvram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ti83p_banked_mem , AS_PROGRAM, 8, ti85_state )
|
||||
AM_RANGE(0x00000, 0x7ffff) AM_DEVREADWRITE("flash", intelfsh8_device, read, write)
|
||||
AM_RANGE(0x100000, 0x107fff) AM_RAM AM_SHARE("nvram")
|
||||
@ -730,17 +737,31 @@ static MACHINE_CONFIG_DERIVED( ti83pse, ti83p )
|
||||
MCFG_DEVICE_PROGRAM_MAP(ti83pse_banked_mem)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti85_state, ti83pse )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti85_state, ti83pse )
|
||||
MCFG_DEVICE_REPLACE("flash", FUJITSU_29F160T, 0)
|
||||
|
||||
//MCFG_TI83PSERIAL_ADD( "tiserial" )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ti84p, ti83pse )
|
||||
MCFG_DEVICE_REPLACE("flash", AMD_29F800T , 0)
|
||||
//MCFG_TI83PSERIAL_ADD( "tiserial" )
|
||||
MCFG_DEVICE_MODIFY("membank1")
|
||||
MCFG_DEVICE_PROGRAM_MAP(ti84p_banked_mem)
|
||||
|
||||
MCFG_DEVICE_MODIFY("membank2")
|
||||
MCFG_DEVICE_PROGRAM_MAP(ti84p_banked_mem)
|
||||
|
||||
MCFG_DEVICE_MODIFY("membank3")
|
||||
MCFG_DEVICE_PROGRAM_MAP(ti84p_banked_mem)
|
||||
|
||||
MCFG_DEVICE_MODIFY("membank4")
|
||||
MCFG_DEVICE_PROGRAM_MAP(ti84p_banked_mem)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti85_state, ti84p )
|
||||
MCFG_DEVICE_REPLACE("flash", AMD_29F800T , 0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ti84pse, ti83pse )
|
||||
MCFG_MACHINE_START_OVERRIDE(ti85_state, ti84pse )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ti73, ti83p )
|
||||
//MCFG_DEVICE_REMOVE( "tiserial" )
|
||||
@ -888,13 +909,12 @@ ROM_START (ti84pse)
|
||||
ROM_END
|
||||
|
||||
ROM_START (ti84p)
|
||||
ROM_REGION (0x100000, "flash",0)
|
||||
ROM_DEFAULT_BIOS("v241")
|
||||
ROM_SYSTEM_BIOS( 0, "v241", "V 2.41" )
|
||||
ROMX_LOAD( "ti84v241.bin", 0x00000, 0x100000, CRC(5758db36) SHA1(7daa4f22e9b5dc8a1cc8fd31bceece9fa8b43515), ROM_BIOS(1) )
|
||||
ROM_REGION (0x100000, "flash",0)
|
||||
ROM_DEFAULT_BIOS("b100v255mp")
|
||||
ROM_SYSTEM_BIOS( 0, "b100v255mp", "Boot 1.00 OS V 2.55MP" )
|
||||
ROMX_LOAD( "ti84pb100v255mp.bin", 0x00000, 0x100000, CRC(4AF31251) SHA1(8F67269346644B87E7CD0F353F5F4030E787CF57), 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 )
|
||||
@ -906,4 +926,4 @@ COMP( 1998, ti73, 0, 0, ti73, ti82, driver_device, 0, "T
|
||||
COMP( 1999, ti83p, 0, 0, ti83p, ti82, driver_device, 0, "Texas Instruments", "TI-83 Plus", GAME_NO_SOUND )
|
||||
COMP( 2001, ti83pse, 0, 0, ti83pse, ti82, driver_device, 0, "Texas Instruments", "TI-83 Plus Silver Edition", GAME_NO_SOUND )
|
||||
COMP( 2004, ti84p, 0, 0, ti84p, ti82, driver_device, 0, "Texas Instruments", "TI-84 Plus", GAME_NO_SOUND )
|
||||
COMP( 2004, ti84pse, 0, 0, ti83pse, ti82, driver_device, 0, "Texas Instruments", "TI-84 Plus Silver Edition", GAME_NO_SOUND )
|
||||
COMP( 2004, ti84pse, 0, 0, ti84pse, ti82, driver_device, 0, "Texas Instruments", "TI-84 Plus Silver Edition", GAME_NO_SOUND )
|
||||
|
11
src/mess/includes/ti85.h
Normal file → Executable file
11
src/mess/includes/ti85.h
Normal file → Executable file
@ -16,7 +16,7 @@
|
||||
|
||||
|
||||
/* model */
|
||||
typedef enum {
|
||||
enum ti85_model {
|
||||
TI81,
|
||||
TI81v2,
|
||||
TI82,
|
||||
@ -27,7 +27,7 @@ typedef enum {
|
||||
TI83PSE,
|
||||
TI84P,
|
||||
TI84PSE
|
||||
} ti85_models;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -74,6 +74,8 @@ public:
|
||||
optional_device<address_map_bank_device> m_membank3;
|
||||
optional_device<address_map_bank_device> m_membank4;
|
||||
|
||||
ti85_model m_model;
|
||||
|
||||
UINT8 m_LCD_memory_base;
|
||||
UINT8 m_LCD_contrast;
|
||||
UINT8 m_LCD_status;
|
||||
@ -167,11 +169,14 @@ public:
|
||||
DECLARE_PALETTE_INIT(ti85);
|
||||
DECLARE_MACHINE_RESET(ti85);
|
||||
DECLARE_MACHINE_RESET(ti83p);
|
||||
DECLARE_MACHINE_RESET(ti83pse);
|
||||
DECLARE_PALETTE_INIT(ti82);
|
||||
DECLARE_MACHINE_START(ti86);
|
||||
DECLARE_MACHINE_START(ti83p);
|
||||
DECLARE_MACHINE_START(ti83pse);
|
||||
DECLARE_MACHINE_START(ti84pse);
|
||||
DECLARE_MACHINE_START(ti84p);
|
||||
void ti8xpse_init_common();
|
||||
|
||||
UINT32 screen_update_ti85(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(ti85_timer_callback);
|
||||
TIMER_CALLBACK_MEMBER(ti83_timer1_callback);
|
||||
|
105
src/mess/machine/ti85.c
Normal file → Executable file
105
src/mess/machine/ti85.c
Normal file → Executable file
@ -1,5 +1,6 @@
|
||||
/***************************************************************************
|
||||
TI-85 driver by Krzysztof Strzecha
|
||||
TI-83 Plus, TI-84 Plus, and Siliver Edition support by Jon Sturm
|
||||
|
||||
Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
|
||||
I/O ports)
|
||||
@ -236,6 +237,8 @@ void ti85_state::update_ti86_memory ()
|
||||
|
||||
void ti85_state::machine_start()
|
||||
{
|
||||
m_model = TI85;
|
||||
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
m_bios = memregion("bios")->base();
|
||||
|
||||
@ -277,33 +280,38 @@ MACHINE_RESET_MEMBER(ti85_state,ti83p)
|
||||
m_PCR = 0xc0;
|
||||
|
||||
m_ti8x_memory_page_0 = 0;//0x1f;
|
||||
m_ti8x_memory_page_1 = 0x1f;
|
||||
|
||||
if (m_model == TI83P)
|
||||
{
|
||||
m_ti8x_memory_page_1 = 0x1f;
|
||||
}
|
||||
else if (m_model == TI84P)
|
||||
{
|
||||
m_ti8x_memory_page_1 = 0x3f;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ti8x_memory_page_1 = 0x7f;
|
||||
}
|
||||
|
||||
m_ti8x_memory_page_2 = 0;
|
||||
m_ti8x_memory_page_3 = 0;
|
||||
m_ti83p_port4 = 1;
|
||||
update_ti83p_memory();
|
||||
|
||||
m_maincpu->set_pc(0x8000);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(ti85_state,ti83pse)
|
||||
{
|
||||
m_red_out = 0x00;
|
||||
m_white_out = 0x00;
|
||||
m_PCR = 0xc0;
|
||||
|
||||
m_ti8x_memory_page_0 = 0;//0x1f;
|
||||
m_ti8x_memory_page_1 = 0x7f;
|
||||
m_ti8x_memory_page_2 = 0;
|
||||
m_ti8x_memory_page_3 = 0;
|
||||
m_ti83p_port4 = 1;
|
||||
update_ti83pse_memory();
|
||||
if (m_model == TI83P)
|
||||
{
|
||||
update_ti83p_memory();
|
||||
}
|
||||
else
|
||||
{
|
||||
update_ti83pse_memory();
|
||||
}
|
||||
|
||||
m_maincpu->set_pc(0x8000);
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti83p)
|
||||
{
|
||||
m_model = TI83P;
|
||||
//address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
//m_bios = memregion("flash")->base();
|
||||
|
||||
@ -326,13 +334,17 @@ MACHINE_START_MEMBER(ti85_state,ti83p)
|
||||
m_ti83p_port4 = 1;
|
||||
m_flash_unlocked = 0;
|
||||
|
||||
ti85_state::update_ti83p_memory ();
|
||||
ti85_state::update_ti83p_memory();
|
||||
m_maincpu->set_pc(0x8000); //this is a hack due to incomplete memory mapping emulation
|
||||
|
||||
|
||||
machine().scheduler().timer_pulse(attotime::from_hz(256), timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback),this));
|
||||
machine().scheduler().timer_pulse(attotime::from_hz(512), timer_expired_delegate(FUNC(ti85_state::ti83_timer2_callback),this));
|
||||
|
||||
/* save states and debugging */
|
||||
save_item(NAME(m_timer_interrupt_mask));
|
||||
|
||||
/* save states and debugging */
|
||||
save_item(NAME(m_timer_interrupt_status));
|
||||
save_item(NAME(m_timer_interrupt_mask));
|
||||
save_item(NAME(m_ti8x_memory_page_0));
|
||||
save_item(NAME(m_ti8x_memory_page_1));
|
||||
save_item(NAME(m_ti8x_memory_page_2));
|
||||
@ -340,7 +352,7 @@ MACHINE_START_MEMBER(ti85_state,ti83p)
|
||||
save_item(NAME(m_ti83p_port4));
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
void ti85_state::ti8xpse_init_common()
|
||||
{
|
||||
//address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
//address_space &asic = ADDRESS_MAP_NAME(ti83p_asic_mem);
|
||||
@ -352,7 +364,7 @@ MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
m_ON_interrupt_status = 0;
|
||||
m_ON_pressed = 0;
|
||||
m_ti8x_memory_page_0 = 00;//0x7f;
|
||||
m_ti8x_memory_page_1 = 0x7f;
|
||||
m_ti8x_memory_page_1 = (m_model != TI84P ) ? 0x7f : 0x3f ;
|
||||
m_ti8x_memory_page_2 = 0;
|
||||
m_ti8x_memory_page_3 = 0;
|
||||
m_LCD_memory_base = 0;
|
||||
@ -365,8 +377,8 @@ MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
m_ti83p_port4 = 1;
|
||||
m_flash_unlocked = 0;
|
||||
|
||||
ti85_state::update_ti83p_memory();
|
||||
m_maincpu->set_pc(0x8000);
|
||||
ti85_state::update_ti83pse_memory();
|
||||
m_maincpu->set_pc(0x8000);//same as above, hack to work around incomplete memory mapping emulation
|
||||
|
||||
|
||||
machine().scheduler().timer_pulse(attotime::from_hz(256), timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback),this));
|
||||
@ -376,7 +388,7 @@ MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
m_crystal_timer2 = timer_alloc(CRYSTAL_TIMER2);
|
||||
m_crystal_timer3 = timer_alloc(CRYSTAL_TIMER3);
|
||||
|
||||
/* save states and debugging */
|
||||
/* save states and debugging */
|
||||
save_item(NAME(m_ctimer_interrupt_status));
|
||||
save_item(NAME(m_timer_interrupt_status));
|
||||
save_item(NAME(m_ti8x_memory_page_0));
|
||||
@ -386,6 +398,28 @@ MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
save_item(NAME(m_ti83p_port4));
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti83pse)
|
||||
{
|
||||
m_model = TI84PSE;
|
||||
|
||||
ti8xpse_init_common();
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti84pse)
|
||||
{
|
||||
m_model = TI83PSE;
|
||||
|
||||
ti8xpse_init_common();
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti84p)
|
||||
{
|
||||
m_model = TI84P;
|
||||
|
||||
ti8xpse_init_common();
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ti85_state,ti86)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
@ -763,13 +797,28 @@ WRITE8_MEMBER(ti85_state::ti83pse_port_0005_w)
|
||||
|
||||
WRITE8_MEMBER(ti85_state::ti83pse_port_0006_w)
|
||||
{
|
||||
m_ti8x_memory_page_1 = data; //& ((data&0x80) ? 0x41 : 0x7f);
|
||||
|
||||
if ((m_model == TI84P) && (data < 0x80))
|
||||
{
|
||||
m_ti8x_memory_page_1 = data & 0x3f;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ti8x_memory_page_1 = data;
|
||||
}
|
||||
update_ti83pse_memory();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ti85_state::ti83pse_port_0007_w)
|
||||
{
|
||||
m_ti8x_memory_page_2 = data; //& ((data&0x80) ? 0x41 : 0x7f);
|
||||
if ((m_model == TI84P) && (data < 0x80))
|
||||
{
|
||||
m_ti8x_memory_page_2 = data & 0x3f;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ti8x_memory_page_2 = data;
|
||||
}
|
||||
update_ti83pse_memory();
|
||||
}
|
||||
|
||||
|
@ -1067,8 +1067,9 @@ ti83 // 1996 TI-83 (Z80 6 MHz)
|
||||
ti86 // 1997 TI-86 (Z80 6 MHz)
|
||||
ti83p // 1999 TI-83 Plus (Z80 6 MHz)
|
||||
ti83pse // 2001 TI-83 Plus Silver Edition
|
||||
//ti84p // 2004 TI-84 Plus
|
||||
ti84p // 2004 TI-84 Plus
|
||||
ti84pse // 2004 TI-84 Plus Silver Edition
|
||||
//ti84cse // 2013 TI-84 Plus C Silver Edition (color screen)
|
||||
ti89 // 1998 TI-89
|
||||
ti92 // 1995 TI-92
|
||||
ti92p // 1999 TI-92 Plus
|
||||
|
Loading…
Reference in New Issue
Block a user