diff --git a/hash/ti99_cart.xml b/hash/ti99_cart.xml index d49cdd7d7ee..05e574ce5db 100644 --- a/hash/ti99_cart.xml +++ b/hash/ti99_cart.xml @@ -1,6 +1,5 @@ - @@ -11,7 +10,7 @@ - + @@ -22,13 +21,10 @@ 1986 Triton - - + + - - - @@ -39,8 +35,8 @@ - - + + @@ -51,7 +47,7 @@ Asgard - + @@ -63,7 +59,7 @@ Asgard - + @@ -76,10 +72,13 @@ - - + + + + + - + @@ -92,8 +91,8 @@ - - + + @@ -104,7 +103,7 @@ Atarisoft - + @@ -116,7 +115,7 @@ Atarisoft - + @@ -127,12 +126,10 @@ 1983 Atarisoft - - + + - - - + @@ -142,12 +139,10 @@ 1983 Atarisoft - - + + - - - + @@ -157,12 +152,10 @@ 1983 Atarisoft - - + + - - - + @@ -172,12 +165,10 @@ 1983 Atarisoft - - + + - - - + @@ -187,12 +178,10 @@ 1983 Atarisoft - - + + - - - + @@ -202,12 +191,10 @@ 1983 Atarisoft - - + + - - - + @@ -217,27 +204,23 @@ 1983 Atarisoft - - + + - - - + - + Protector II 1983 Atarisoft - - + + - - - + @@ -247,12 +230,10 @@ 1983 Atarisoft - - - - - - + + + + @@ -262,12 +243,10 @@ 1983 Atarisoft - - + + - - - + @@ -277,12 +256,10 @@ 1983 Atarisoft - - + + - - - + @@ -294,10 +271,10 @@ - + - + @@ -310,8 +287,10 @@ - - + + + + @@ -323,7 +302,7 @@ - + @@ -336,7 +315,7 @@ - + @@ -349,8 +328,9 @@ - - + + + @@ -362,8 +342,10 @@ - - + + + + @@ -375,7 +357,7 @@ - + @@ -388,8 +370,8 @@ - - + + @@ -401,8 +383,8 @@ - - + + @@ -414,10 +396,10 @@ - - + + - + @@ -429,7 +411,7 @@ Corcomp - + @@ -441,7 +423,7 @@ Corcomp - + @@ -454,7 +436,7 @@ - + @@ -466,7 +448,7 @@ DaTaBioTics - + @@ -478,7 +460,7 @@ Navarone - + @@ -489,12 +471,10 @@ 1988 John Phillips - - + + - - - + @@ -505,7 +485,7 @@ DaTaBioTics - + @@ -517,7 +497,7 @@ DaTaBioTics - + @@ -529,7 +509,7 @@ DaTaBioTics - + @@ -542,7 +522,7 @@ - + @@ -554,7 +534,7 @@ DaTaBioTics - + @@ -566,7 +546,7 @@ DaTaBioTics - + @@ -577,12 +557,10 @@ 1986 DaTaBioTics - - + + - - - + @@ -593,26 +571,28 @@ DaTaBioTics - - + + + + + + - + - - - Micro Pinball + + + Micro Pinball 2 1984 Software Specialties - - + + - - - + @@ -624,7 +604,7 @@ - + @@ -636,7 +616,7 @@ DaTaBioTics - + @@ -647,12 +627,10 @@ 1987 DaTaBioTics - - + + - - - + @@ -662,12 +640,10 @@ 1983 DaTaBioTics - - + + - - - + @@ -678,7 +654,7 @@ DaTaBioTics - + @@ -690,7 +666,7 @@ Deco - + @@ -702,7 +678,7 @@ Deco - + @@ -716,7 +692,7 @@ - + @@ -729,10 +705,11 @@ - - + + + - + @@ -744,7 +721,7 @@ Data East USA - + @@ -757,7 +734,7 @@ - + @@ -770,7 +747,7 @@ - + @@ -784,7 +761,7 @@ - + @@ -797,10 +774,10 @@ - + - + @@ -813,8 +790,9 @@ - - + + + @@ -826,8 +804,8 @@ - - + + @@ -840,8 +818,9 @@ - - + + + @@ -855,8 +834,9 @@ - - + + + @@ -869,8 +849,9 @@ - - + + + @@ -881,7 +862,7 @@ Texas Instruments - + @@ -894,8 +875,9 @@ - - + + + @@ -906,15 +888,17 @@ DLM Academics - - - + + + + + + + - + - - - + @@ -926,7 +910,7 @@ - + @@ -939,10 +923,11 @@ - - + + + - + @@ -955,8 +940,9 @@ - - + + + @@ -968,8 +954,9 @@ - - + + + @@ -981,7 +968,7 @@ - + @@ -994,7 +981,7 @@ - + @@ -1007,29 +994,27 @@ - + - + - + Berlin 19?? Iain Johnson - - + + - + - - - + @@ -1040,7 +1025,7 @@ DaTaBioTics - + @@ -1052,7 +1037,7 @@ Jlando - + @@ -1064,8 +1049,11 @@ <unknown> - - + + + + + @@ -1077,7 +1065,7 @@ - + @@ -1089,7 +1077,7 @@ unknown - + @@ -1102,8 +1090,10 @@ - - + + + + @@ -1115,10 +1105,10 @@ - + - + @@ -1130,7 +1120,7 @@ Texas Instruments - + @@ -1143,7 +1133,7 @@ - + @@ -1154,12 +1144,10 @@ 1988 DaTaBioTics - - + + - - - + @@ -1170,7 +1158,7 @@ Sunware - + @@ -1182,7 +1170,7 @@ CSI Design Group - + @@ -1196,7 +1184,7 @@ - + @@ -1208,7 +1196,7 @@ Personal Peripherals - + @@ -1219,12 +1207,10 @@ 1983 Nicesoft - - + + - - - + @@ -1236,26 +1222,24 @@ - + - - - U-Boat Jagd + + + U-Boot-Jagd 1984 Saurus - - + + - - - - - + + + @@ -1267,8 +1251,9 @@ - - + + + @@ -1280,10 +1265,10 @@ - - + + - + @@ -1296,7 +1281,7 @@ - + @@ -1309,8 +1294,8 @@ - - + + @@ -1322,7 +1307,7 @@ - + @@ -1334,10 +1319,14 @@ Texas Instruments - - + + + + + + - + @@ -1349,15 +1338,14 @@ Texas Instruments - - - + + + + - + - - - + @@ -1368,11 +1356,11 @@ Texas Instruments - - + + - + @@ -1387,10 +1375,10 @@ <unknown> - + - + @@ -1406,10 +1394,10 @@ - + - + @@ -1425,15 +1413,16 @@ - - - + + + + + + - - - - - + + + @@ -1444,10 +1433,14 @@ Texas Instruments - - + + + + + + - + @@ -1460,7 +1453,7 @@ - + @@ -1473,8 +1466,9 @@ - - + + + @@ -1485,7 +1479,7 @@ Funware - + @@ -1497,7 +1491,7 @@ Funware - + @@ -1509,7 +1503,7 @@ Funware - + @@ -1521,7 +1515,7 @@ Funware - Romox - + @@ -1533,7 +1527,7 @@ Funware - + @@ -1545,8 +1539,10 @@ Funware - - + + + + @@ -1557,7 +1553,7 @@ Funware - Romox - + @@ -1569,7 +1565,7 @@ Funware - + @@ -1581,7 +1577,7 @@ Funware - + @@ -1593,10 +1589,10 @@ Funware - - + + - + @@ -1608,7 +1604,7 @@ Funware - Romox - + @@ -1620,10 +1616,14 @@ Texas Instruments - - + + + + + + - + @@ -1635,7 +1635,7 @@ Texas Instruments - + @@ -1649,7 +1649,7 @@ - + @@ -1663,7 +1663,7 @@ - + @@ -1676,8 +1676,9 @@ - - + + + @@ -1689,10 +1690,10 @@ - - + + - + @@ -1705,8 +1706,9 @@ - - + + + @@ -1718,8 +1720,9 @@ - - + + + @@ -1731,8 +1734,8 @@ - - + + @@ -1744,8 +1747,8 @@ - - + + @@ -1759,7 +1762,7 @@ - + @@ -1772,10 +1775,12 @@ - - + + + + - + @@ -1789,7 +1794,7 @@ - + @@ -1801,16 +1806,15 @@ Imagic - - - + + + + + - + - - - @@ -1821,10 +1825,12 @@ - - + + + + - + @@ -1836,11 +1842,15 @@ Imagic - - - + + + + + + + - + @@ -1849,13 +1859,13 @@ - + Wing War (beta) 1983 Imagic - + @@ -1867,10 +1877,10 @@ Imagic - + - + @@ -1882,7 +1892,7 @@ John Phillips - + @@ -1893,8 +1903,8 @@ 1988 John Phillips - - + + @@ -1908,8 +1918,8 @@ 1983 Sofmachine - - + + @@ -1924,7 +1934,7 @@ Texas Instruments - + @@ -1937,10 +1947,10 @@ - + - + @@ -1953,23 +1963,11 @@ - + - - - Bigfoot - 1983 - Milton Bradley - - - - - - - Blasto @@ -1978,8 +1976,8 @@ - - + + @@ -1990,8 +1988,8 @@ Milton Bradley - - + + @@ -2003,8 +2001,9 @@ - - + + + @@ -2015,7 +2014,7 @@ Milton Bradley - + @@ -2028,50 +2027,18 @@ - - + + + + + + - + - - - Honey Hunt - 1983 - Milton Bradley - - - - - - - - - - Meteor Belt - 1983 - Milton Bradley - - - - - - - - - - Soundtrack Trolley - 1983 - Milton Bradley - - - - - - - Starship Pegasus @@ -2080,48 +2047,15 @@ - - + + + - + - - - Championship Baseball - 1983 - Milton Bradley - - - - - - - - - - - - - - - I'm Hiding - 1983 - Milton Bradley - - - - - - - - - - - - Zero Zap @@ -2130,8 +2064,12 @@ - - + + + + + + @@ -2142,11 +2080,11 @@ Mechatronic - - + + - + @@ -2162,8 +2100,10 @@ - - + + + + @@ -2175,8 +2115,10 @@ - - + + + + @@ -2188,8 +2130,9 @@ - - + + + @@ -2201,8 +2144,9 @@ - - + + + @@ -2214,8 +2158,11 @@ - - + + + + + @@ -2227,7 +2174,7 @@ - + @@ -2240,8 +2187,10 @@ - - + + + + @@ -2252,8 +2201,12 @@ Milliken - - + + + + + + @@ -2264,11 +2217,15 @@ Milliken - - - + + + + + + + - + @@ -2284,8 +2241,10 @@ - - + + + + @@ -2297,7 +2256,7 @@ - + @@ -2310,8 +2269,12 @@ - - + + + + + + @@ -2323,8 +2286,9 @@ - - + + + @@ -2336,10 +2300,14 @@ - - + + + + + + - + @@ -2353,8 +2321,12 @@ - - + + + + + + @@ -2365,7 +2337,7 @@ John Phillips - + @@ -2380,7 +2352,7 @@ - + @@ -2393,10 +2365,10 @@ - - + + - + @@ -2409,10 +2381,12 @@ - - + + + + - + @@ -2425,8 +2399,10 @@ - - + + + + @@ -2437,7 +2413,7 @@ Texas Instruments - + @@ -2449,7 +2425,7 @@ Navarone - + @@ -2462,7 +2438,7 @@ - + @@ -2474,7 +2450,7 @@ Navarone - + @@ -2486,7 +2462,7 @@ Navarone - + @@ -2498,7 +2474,7 @@ Navarone - + @@ -2511,7 +2487,7 @@ - + @@ -2523,7 +2499,7 @@ Navarone - + @@ -2535,7 +2511,7 @@ Navarone - + @@ -2548,7 +2524,7 @@ - + @@ -2561,7 +2537,7 @@ - + @@ -2573,7 +2549,7 @@ Navarone - + @@ -2585,7 +2561,7 @@ Navarone - + @@ -2597,7 +2573,7 @@ Navarone - + @@ -2609,7 +2585,7 @@ Navarone - + @@ -2620,8 +2596,8 @@ 1983 Atarisoft - - + + @@ -2637,7 +2613,7 @@ - + @@ -2650,8 +2626,8 @@ - - + + @@ -2663,8 +2639,12 @@ - - + + + + + + @@ -2675,7 +2655,7 @@ Texas Instruments - + @@ -2687,7 +2667,7 @@ Navarone - + @@ -2699,7 +2679,7 @@ Navarone - + @@ -2712,10 +2692,12 @@ - - + + + + - + @@ -2727,10 +2709,10 @@ Texas Instruments - - + + - + @@ -2742,10 +2724,10 @@ Parker Brothers - + - + @@ -2757,10 +2739,10 @@ Parker Brothers - + - + @@ -2772,10 +2754,10 @@ Parker Brothers - + - + @@ -2788,8 +2770,11 @@ - - + + + + + @@ -2800,7 +2785,7 @@ Texas Instruments - + @@ -2813,8 +2798,11 @@ - - + + + + + @@ -2826,8 +2814,9 @@ - - + + + @@ -2839,7 +2828,7 @@ - + @@ -2852,10 +2841,10 @@ - + - + @@ -2867,11 +2856,14 @@ Control Data - - - + + + + + + - + @@ -2884,10 +2876,14 @@ - - + + + + + + - + @@ -2899,7 +2895,7 @@ Romox - + @@ -2911,7 +2907,7 @@ Romox - + @@ -2923,7 +2919,7 @@ Romox - + @@ -2935,7 +2931,7 @@ Romox - + @@ -2947,7 +2943,7 @@ Romox - + @@ -2959,7 +2955,7 @@ Navarone - + @@ -2971,7 +2967,7 @@ Romox - + @@ -2985,7 +2981,7 @@ - + @@ -2998,10 +2994,14 @@ - - + + + + + + - + @@ -3014,10 +3014,14 @@ - - + + + + + + - + @@ -3029,11 +3033,15 @@ Scholastic - - - + + + + + + + - + @@ -3048,11 +3056,15 @@ Scholastic - - - + + + + + + + - + @@ -3068,10 +3080,11 @@ - - + + + - + @@ -3084,10 +3097,11 @@ - - + + + - + @@ -3100,8 +3114,11 @@ - - + + + + + @@ -3113,10 +3130,11 @@ - - + + + - + @@ -3128,7 +3146,7 @@ Scott, Foresman - + @@ -3140,7 +3158,7 @@ Scott, Foresman - + @@ -3153,7 +3171,7 @@ - + @@ -3166,7 +3184,7 @@ - + @@ -3178,7 +3196,7 @@ Scott, Foresman - + @@ -3190,7 +3208,7 @@ Scott, Foresman - + @@ -3202,7 +3220,7 @@ Scott, Foresman - + @@ -3214,7 +3232,7 @@ Scott, Foresman - + @@ -3226,7 +3244,7 @@ Scott, Foresman - + @@ -3239,7 +3257,7 @@ - + @@ -3251,7 +3269,7 @@ Scott, Foresman - + @@ -3263,7 +3281,7 @@ Scott, Foresman - + @@ -3275,7 +3293,7 @@ Scott, Foresman - + @@ -3287,7 +3305,7 @@ Scott, Foresman - + @@ -3300,7 +3318,7 @@ - + @@ -3312,7 +3330,7 @@ Scott, Foresman - + @@ -3325,7 +3343,7 @@ - + @@ -3338,7 +3356,7 @@ - + @@ -3350,7 +3368,7 @@ Scott, Foresman - + @@ -3362,7 +3380,7 @@ Scott, Foresman - + @@ -3374,7 +3392,7 @@ Scott, Foresman - + @@ -3386,7 +3404,7 @@ Scott, Foresman - + @@ -3398,7 +3416,7 @@ Scott, Foresman - + @@ -3411,7 +3429,7 @@ - + @@ -3424,7 +3442,7 @@ - + @@ -3437,7 +3455,7 @@ - + @@ -3449,7 +3467,7 @@ Scott, Foresman - + @@ -3461,7 +3479,7 @@ Scott, Foresman - + @@ -3474,7 +3492,7 @@ - + @@ -3487,7 +3505,7 @@ - + @@ -3499,7 +3517,7 @@ Scott, Foresman - + @@ -3511,7 +3529,7 @@ Scott, Foresman - + @@ -3523,7 +3541,7 @@ Scott, Foresman - + @@ -3535,7 +3553,7 @@ Scott, Foresman - + @@ -3547,7 +3565,7 @@ Scott, Foresman - + @@ -3559,7 +3577,7 @@ Scott, Foresman - + @@ -3571,7 +3589,7 @@ Scott, Foresman - + @@ -3584,10 +3602,10 @@ - - + + - + @@ -3598,8 +3616,8 @@ 1983 Sofmachine - - + + @@ -3615,10 +3633,10 @@ - - + + - + @@ -3631,8 +3649,9 @@ - - + + + @@ -3644,10 +3663,10 @@ - - + + - + @@ -3660,10 +3679,10 @@ - + - + @@ -3675,10 +3694,13 @@ Sierra On-Line - - + + + + + - + @@ -3691,8 +3713,8 @@ - - + + @@ -3704,10 +3726,11 @@ - - + + + - + @@ -3720,10 +3743,12 @@ - - + + + + - + @@ -3735,7 +3760,7 @@ Software Specialties - + @@ -3747,7 +3772,7 @@ Software Specialties - + @@ -3760,8 +3785,12 @@ - - + + + + + + @@ -3773,8 +3802,12 @@ - - + + + + + + @@ -3785,7 +3818,7 @@ Texas Instruments - + @@ -3797,7 +3830,7 @@ <unknown> - + @@ -3809,11 +3842,15 @@ Texas Instruments - - - + + + + + + + - + @@ -3829,7 +3866,7 @@ - + @@ -3842,10 +3879,14 @@ - - + + + + + + - + @@ -3858,8 +3899,9 @@ - - + + + @@ -3869,8 +3911,8 @@ 1983 Micropal - Thorn EMI Video - - + + @@ -3888,7 +3930,7 @@ - + @@ -3901,8 +3943,8 @@ - - + + @@ -3913,7 +3955,7 @@ <unknown> - + @@ -3925,7 +3967,7 @@ Micropal - Thorn EMI Video - + @@ -3937,7 +3979,7 @@ Thorn EMI Video - + @@ -3950,10 +3992,10 @@ - - + + - + @@ -3966,10 +4008,13 @@ - - + + + + + - + @@ -3981,10 +4026,10 @@ Texas Instruments - + - + @@ -3997,10 +4042,12 @@ - - + + + + - + @@ -4013,8 +4060,11 @@ - - + + + + + @@ -4025,7 +4075,7 @@ <unknown> - + @@ -4038,8 +4088,8 @@ - - + + @@ -4051,10 +4101,10 @@ - - + + - + @@ -4067,8 +4117,10 @@ - - + + + + @@ -4080,8 +4132,12 @@ - - + + + + + + @@ -4092,7 +4148,7 @@ Tigervision - + @@ -4104,7 +4160,7 @@ Tigervision - + @@ -4116,7 +4172,7 @@ Tigervision - + @@ -4129,7 +4185,7 @@ - + @@ -4142,10 +4198,13 @@ - - + + + + + - + @@ -4158,10 +4217,10 @@ - + - + @@ -4174,10 +4233,13 @@ - - + + + + + - + @@ -4190,8 +4252,9 @@ - - + + + @@ -4203,8 +4266,8 @@ - - + + @@ -4216,8 +4279,8 @@ - - + + @@ -4228,7 +4291,7 @@ Video Magic - + @@ -4240,7 +4303,7 @@ Video Magic - + @@ -4252,7 +4315,7 @@ Video Magic - + @@ -4264,7 +4327,7 @@ Video Magic - + @@ -4276,10 +4339,10 @@ Walt Disney - + - + @@ -4291,10 +4354,10 @@ Walt Disney - + - + @@ -4306,10 +4369,10 @@ Walt Disney - + - + @@ -4321,11 +4384,15 @@ Texas Instruments - - - + + + + + + + - + @@ -4341,10 +4408,14 @@ - - + + + + + + - + @@ -4356,10 +4427,14 @@ Texas Instruments - - + + + + + + - + @@ -4371,10 +4446,14 @@ Texas Instruments - - + + + + + + - + @@ -4387,21 +4466,25 @@ - + - + Yahtzee 1980 Milton Bradley - - + + + + + + @@ -4414,14 +4497,13 @@ - + - + - - + @@ -4433,12 +4515,210 @@ - + - + + + + + + + Super Extended Basic + 1987 + Triton + + + + + + + + + + + + + Championship Baseball + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + + + Space Bandits + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + + Sewermania + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + + Bigfoot + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + Meteor Belt + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + Superfly + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + + Terry Turtle's Adventure + 1984 + Milton Bradley + + + + + + + + + + + + + + + + + + + Honey Hunt + 1983 + Milton Bradley + + + + + + + + + + + + + + + + + + + Soundtrack Trolley + 1983 + Milton Bradley + + + + + + + + + + + + + + diff --git a/src/devices/bus/ti99x/gromport.cpp b/src/devices/bus/ti99x/gromport.cpp index a9f95d59f51..3eddb6433d9 100644 --- a/src/devices/bus/ti99x/gromport.cpp +++ b/src/devices/bus/ti99x/gromport.cpp @@ -111,7 +111,7 @@ #define TRACE_RPK 0 #define TRACE_CHANGE 0 -#define TRACE_ILLWRITE 0 +#define TRACE_ILLWRITE 1 #define TRACE_CONFIG 0 #define TRACE_READ 0 #define TRACE_WRITE 0 @@ -648,9 +648,15 @@ machine_config_constructor multi_conn_device::device_mconfig_additions() const return MACHINE_CONFIG_NAME( multi_slot ); } +INPUT_CHANGED_MEMBER( multi_conn_device::switch_changed ) +{ + if (TRACE_CHANGE) logerror("Slot changed %d - %d\n", (int)((UINT64)param & 0x07), newval); + m_active_slot = m_fixed_slot = newval - 1; +} + INPUT_PORTS_START(multi_slot) PORT_START( "CARTSLOT" ) - PORT_DIPNAME( 0x0f, 0x00, "Multi-cartridge slot" ) + PORT_DIPNAME( 0x0f, 0x00, "Multi-cartridge slot" ) PORT_CHANGED_MEMBER(DEVICE_SELF, multi_conn_device, switch_changed, 0) PORT_DIPSETTING( 0x00, "Auto" ) PORT_DIPSETTING( 0x01, "Slot 1" ) PORT_DIPSETTING( 0x02, "Slot 2" ) @@ -1123,7 +1129,8 @@ ioport_constructor gkracker_device::device_input_ports() const enum { PCB_STANDARD=1, - PCB_PAGED, + PCB_PAGED12K, + PCB_PAGED16K, PCB_MINIMEM, PCB_SUPER, PCB_MBX, @@ -1137,7 +1144,8 @@ enum static const pcb_type pcbdefs[] = { { PCB_STANDARD, "standard" }, - { PCB_PAGED, "paged" }, + { PCB_PAGED12K, "paged12k" }, + { PCB_PAGED16K, "paged" }, { PCB_MINIMEM, "minimem" }, { PCB_SUPER, "super" }, { PCB_MBX, "mbx" }, @@ -1153,7 +1161,8 @@ static const pcb_type pcbdefs[] = static const pcb_type sw_pcbdefs[] = { { PCB_STANDARD, "standard" }, - { PCB_PAGED, "paged" }, + { PCB_PAGED12K, "paged12k" }, + { PCB_PAGED16K, "paged16k" }, { PCB_MINIMEM, "minimem" }, { PCB_SUPER, "super" }, { PCB_MBX, "mbx" }, @@ -1192,13 +1201,13 @@ void ti99_cartridge_device::prepare_cartridge() for (int i=0; i < 5; i++) m_pcb->m_grom[i] = nullptr; - m_pcb->m_grom_size = m_softlist? get_software_region_length("grom_socket") : m_rpk->get_resource_length("grom_socket"); + m_pcb->m_grom_size = m_softlist? get_software_region_length("grom") : m_rpk->get_resource_length("grom_socket"); if (TRACE_CONFIG) logerror("grom_socket.size=0x%04x\n", m_pcb->m_grom_size); if (m_pcb->m_grom_size > 0) { regg = memregion(CARTGROM_TAG); - grom_ptr = m_softlist? get_software_region("grom_socket") : m_rpk->get_contents_of_socket("grom_socket"); + grom_ptr = m_softlist? get_software_region("grom") : m_rpk->get_contents_of_socket("grom_socket"); memcpy(regg->base(), grom_ptr, m_pcb->m_grom_size); m_pcb->m_grom_ptr = regg->base(); // for gromemu m_pcb->m_grom_address = 0; // for gromemu @@ -1211,25 +1220,29 @@ void ti99_cartridge_device::prepare_cartridge() if (m_pcb->m_grom_size > 0x8000) m_pcb->set_grom_pointer(4, subdevice(GROM7_TAG)); } - m_pcb->m_rom_size = m_softlist? get_software_region_length("rom_socket") : m_rpk->get_resource_length("rom_socket"); + m_pcb->m_rom_size = m_softlist? get_software_region_length("rom") : m_rpk->get_resource_length("rom_socket"); if (m_pcb->m_rom_size > 0) { - if (TRACE_CONFIG) logerror("rom_socket.size=0x%04x\n", m_pcb->m_rom_size); + if (TRACE_CONFIG) logerror("rom size=0x%04x\n", m_pcb->m_rom_size); regr = memregion(CARTROM_TAG); - rom_ptr = m_softlist? get_software_region("rom_socket") : m_rpk->get_contents_of_socket("rom_socket"); + rom_ptr = m_softlist? get_software_region("rom") : m_rpk->get_contents_of_socket("rom_socket"); memcpy(regr->base(), rom_ptr, m_pcb->m_rom_size); // Set both pointers to the same region for now m_pcb->m_rom_ptr = regr->base(); } - rom2_length = m_softlist? get_software_region_length("rom2_socket") : m_rpk->get_resource_length("rom2_socket"); - if (rom2_length > 0) + // Softlist uses only one ROM area, no second socket + if (!m_softlist) { - // sizes do not differ between rom and rom2 - // We use the large cartrom space for the second bank as well - regr = memregion(CARTROM_TAG); - rom_ptr = m_softlist? get_software_region("rom2_socket") : m_rpk->get_contents_of_socket("rom2_socket"); - memcpy(regr->base() + 0x2000, rom_ptr, rom2_length); + rom2_length = m_rpk->get_resource_length("rom2_socket"); + if (rom2_length > 0) + { + // sizes do not differ between rom and rom2 + // We use the large cartrom space for the second bank as well + regr = memregion(CARTROM_TAG); + rom_ptr = m_rpk->get_contents_of_socket("rom2_socket"); + memcpy(regr->base() + 0x2000, rom_ptr, rom2_length); + } } // (NV)RAM cartridges @@ -1326,9 +1339,13 @@ bool ti99_cartridge_device::call_load() if (TRACE_CONFIG) logerror("Standard PCB\n"); m_pcb = new ti99_standard_cartridge(); break; - case PCB_PAGED: - if (TRACE_CONFIG) logerror("Paged PCB\n"); - m_pcb = new ti99_paged_cartridge(); + case PCB_PAGED12K: + if (TRACE_CONFIG) logerror("Paged PCB 12K\n"); + m_pcb = new ti99_paged12k_cartridge(); + break; + case PCB_PAGED16K: + if (TRACE_CONFIG) logerror("Paged PCB 16K\n"); + m_pcb = new ti99_paged16k_cartridge(); break; case PCB_MINIMEM: if (TRACE_CONFIG) logerror("Minimem PCB\n"); @@ -1505,7 +1522,18 @@ const device_type TI99CART = &device_creator; Some cartridges also have RAM, and some allow for switching between ROMs. - Unlike in the previous implementation we do not model it as a full device. + Standard cartridge + + GROM space + 6000 77ff 8000 97ff a000 b7ff c000 d7ff e000 f7ff + |== GROM3 ==|...|== GROM4 ==|...|== GROM5 ==|...|== GROM6 ==|...|== GROM7 ==| + + + ROM space + 6000 7000 7fff + | | | + |========== ROM1 ============| + ***************************************************************************/ ti99_cartridge_pcb::ti99_cartridge_pcb() @@ -1623,15 +1651,83 @@ WRITE_LINE_MEMBER(ti99_cartridge_pcb::gclock_in) /***************************************************************************** - Cartridge type: Paged (Extended Basic) - This cartridge consists of GROM memory and 2 pages of standard ROM. + Cartridge type: Paged (12K, Extended Basic) + + The Extended Basic cartridge consists of several GROMs which are + treated in the usual way, and two ROMs (4K and 8K). + + GROM space + 6000 77ff 8000 97ff a000 b7ff c000 d7ff e000 f7ff + |== GROM3 ==|...|== GROM4 ==|...|== GROM5 ==|...|== GROM6 ==|...|== GROM7 ==| + + ROM space + 6000 7000 7fff + | | | + | |==== ROM2a ===| Bank 0 write to 6000, 6004, ... 7ffc + |=== ROM1 ====| | + |==== ROM2b ===| Bank 1 write to 6002, 6006, ... 7ffe + + The 4K ROM is mapped into the 6000-6FFF space. + The 8K ROM is actually composed of two banks of 4K which are mapped into + the 7000-7FFF space. Bank 0 is visible after a write access to 6000 / 6004 / + 6008 ... , while bank 1 is visible after writing to 6002 / 6006 / 600A / ... + +******************************************************************************/ + +READ8Z_MEMBER(ti99_paged12k_cartridge::readz) +{ + if (m_romspace_selected) + { + // rom_ptr: 0000-0fff = rom1 + // 2000-2fff = rom2a + // 3000-3fff = rom2b + if ((offset & 0x1000)==0) + *value = m_rom_ptr[offset & 0x0fff]; + else + *value = m_rom_ptr[(offset & 0x0fff) | 0x2000 | (m_rom_page << 12)]; + } + else + { + // Will not return anything when not selected (preceding gsq=ASSERT) + gromreadz(space, offset, value, mem_mask); + } +} + +WRITE8_MEMBER(ti99_paged12k_cartridge::write) +{ + if (m_romspace_selected) + { + m_rom_page = (offset >> 1) & 1; + } + else + { + // Will not change anything when not selected (preceding gsq=ASSERT) + gromwrite(space, offset, data, mem_mask); + } +} + +/***************************************************************************** + Cartridge type: Paged (16K) + + GROM space + 6000 77ff 8000 97ff a000 b7ff c000 d7ff e000 f7ff + |== GROM3 ==|...|== GROM4 ==|...|== GROM5 ==|...|== GROM6 ==|...|== GROM7 ==| + + ROM space + 6000 7000 7fff + | | | + |========== ROM1 ===========| Bank 0 write to 6000, 6004, ... 7ffc + | | | + |========== ROM2 ===========| Bank 1 write to 6002, 6006, ... 7ffe + + This cartridge consists of GROM memory and 2 pages of standard ROM. The page is set by writing any value to a location in the address area, where an even word offset sets the page to 0 and an odd word offset sets the page to 1 (e.g. 6000 = bank 0, and 6002 = bank 1). ******************************************************************************/ -READ8Z_MEMBER(ti99_paged_cartridge::readz) +READ8Z_MEMBER(ti99_paged16k_cartridge::readz) { if (m_romspace_selected) { @@ -1644,7 +1740,7 @@ READ8Z_MEMBER(ti99_paged_cartridge::readz) } } -WRITE8_MEMBER(ti99_paged_cartridge::write) +WRITE8_MEMBER(ti99_paged16k_cartridge::write) { if (m_romspace_selected) { @@ -1659,9 +1755,20 @@ WRITE8_MEMBER(ti99_paged_cartridge::write) /***************************************************************************** Cartridge type: Mini Memory - GROM: 6 KiB (occupies G>6000 to G>7800) - ROM: 4 KiB (romfile is actually 8 K long, second half with zeros, 0x6000-0x6fff) - persistent RAM: 4 KiB (0x7000-0x7fff) + GROM: 6 KiB (occupies G>6000 to G>77ff) + ROM: 4 KiB (6000-6fff) + RAM: 4 KiB (7000-7fff, battery-backed) + + GROM space + 6000 77ff + |== GROM3 ==| + + ROM space + 6000 7000 7fff + | | | + |=== ROM1 ====| | + |=== NVRAM ===| + ******************************************************************************/ /* Read function for the minimem cartridge. */ @@ -1717,10 +1824,26 @@ WRITE8_MEMBER(ti99_minimem_cartridge::write) assigns a number in the selection screen. Switching the RAM banks in this cartridge is achieved by setting CRU bits (the system serial interface). - GROM: Editor/Assembler GROM - ROM: none - persistent RAM: 32 KiB (0x6000-0x7fff, 4 banks) - Banking: via CRU write + GROM: Editor/Assembler GROM + ROM: none + RAM: 32 KiB (0x6000-0x7fff, 4 banks) + Banking: via CRU write + + GROM space + 6000 77ff + |==== GROM3 (Editor/Assm) ====| + + ROM space + 6000 7000 7fff + | | | + |======== NVRAM 0 ==========| Bank 0 CRU>0802 + | | | + |======== NVRAM 1 ==========| Bank 1 CRU>0806 + | | | + |======== NVRAM 2 ==========| Bank 2 CRU>080a + | | | + |======== NVRAM 3 ==========| Bank 3 CRU>080e + ******************************************************************************/ /* Read function for the super cartridge. */ @@ -1802,7 +1925,7 @@ WRITE8_MEMBER(ti99_super_cartridge::cruwrite) /***************************************************************************** Cartridge type: MBX - GROM: up to 40 KiB + GROM: up to 5 GROMs (sockets for a maximum of 3 GROMs, but may be stacked) ROM: up to 16 KiB (in up to 2 banks of 8KiB each) RAM: 1022 B (0x6c00-0x6ffd, overrides ROM in that area) ROM mapper: 6ffe @@ -1810,6 +1933,34 @@ WRITE8_MEMBER(ti99_super_cartridge::cruwrite) TODO: Some MBX cartridges assume the presence of the MBX system (special user interface box with speech input/output) and will not run without it. This MBX hardware is not emulated yet. + + GROM space + 6000 77ff 8000 97ff a000 b7ff c000 d7ff e000 f7ff + |== GROM3 ==|...|== GROM4 ==|...|== GROM5 ==|...|== GROM6 ==|...|== GROM7 ==| + + ROM space + 6000 6c00 7000 7fff + | | | | + | | |===== ROM bank 0 ====| 6ffe = 00 + | |= RAM =| | + |=== ROM bank 0 ==| |===== ROM bank 1 ====| 6ffe = 01 + | | + |===== ROM bank 3 ====| 6ffe = 02 + | | + |===== ROM bank 3 ====| 6ffe = 03 + + The 16K ROM is composed of four 4K banks, which can be selected by writing + the bank number to address 6ffe. This also affects the RAM so that the + bank number is stored in RAM and may also be read from there. + + The mapper does not decode the LSB of the address, so it changes value when + a write operation is done on 6FFF. Since the TI console always writes the + odd byte first, then the even byte, the last byte written is actually 6FFE. + + ROM bank 0 (ROM area 0000-0fff) is always visible in the space 6000-6bff. + + RAM is implemented by two 1024x4 RAM circuits and is not affected by banking. + ******************************************************************************/ /* Read function for the mbx cartridge. */ @@ -1817,18 +1968,23 @@ READ8Z_MEMBER(ti99_mbx_cartridge::readz) { if (m_romspace_selected) { - if ((offset & 0x1c00)==0x0c00) + if (m_ram_ptr != nullptr && (offset & 0x1c00)==0x0c00) { - // This is the RAM area which overrides any ROM. There is no - // known banking behavior for the RAM, so we must assume that - // there is only one bank. - if (m_ram_ptr != nullptr) - *value = m_ram_ptr[offset & 0x03ff]; + // Also reads the value of 6ffe + *value = m_ram_ptr[offset & 0x03ff]; + if (TRACE_READ) space.device().logerror("%04x (RAM) -> %02x\n", offset + 0x6000, *value); } else { if (m_rom_ptr!=nullptr) - *value = m_rom_ptr[(offset & 0x1fff) | (m_rom_page<<13)]; + { + if ((offset & 0x1000)==0) // 6000 area + *value = m_rom_ptr[offset]; + else // 7000 area + *value = m_rom_ptr[(offset & 0x0fff) | (m_rom_page << 12)]; + + if (TRACE_READ) space.device().logerror("%04x(%04x) -> %02x\n", offset + 0x6000, offset | (m_rom_page<<13), *value); + } } } else @@ -1842,16 +1998,19 @@ WRITE8_MEMBER(ti99_mbx_cartridge::write) { if (m_romspace_selected) { - if (offset == 0x6ffe) + if ((offset & 0x1c00)==0x0c00) // RAM area { - m_rom_page = data & 1; - return; - } + if ((offset & 0x0ffe) == 0x0ffe) // Mapper, backed by RAM; reacts to bots 6fff and 6ffe + { + // Valid values are 0, 1, 2, 3 + m_rom_page = data & 3; + if (TRACE_WRITE) if ((offset & 1)==0) space.device().logerror("Set ROM page = %d\n", data); + } - if ((offset & 0x1c00)==0x0c00) - { - if (m_ram_ptr == nullptr) return; - m_ram_ptr[offset & 0x03ff] = data; + if (m_ram_ptr != nullptr) + m_ram_ptr[offset & 0x03ff] = data; + else + if (TRACE_ILLWRITE) space.device().logerror("Write access to %04x but no RAM present\n", offset+0x6000); } } else @@ -1890,6 +2049,19 @@ WRITE8_MEMBER(ti99_mbx_cartridge::write) >601E 0 / 0 / 0 / 0 The paged379i cartrige does not have any GROMs. + + ROM space + 6000 7000 7fff + | | | + |========== ROM 1 ==========| Bank 0 Write to 601e + | | | + |========== ROM 2 ==========| Bank 1 Write to 601c + | | | + | ... | + | | | + |========== ROM 16 =========| Bank 15 Write to 6000 + + ******************************************************************************/ /* Read function for the paged379i cartridge. */ @@ -1928,6 +2100,17 @@ WRITE8_MEMBER(ti99_paged379i_cartridge::write) The cartridge may also be used without GROM. + ROM space + 6000 7000 7fff + | | | + |========== ROM 1 ==========| Bank 0 Write to 6000 + | | | + |========== ROM 2 ==========| Bank 1 Write to 6002 + | | | + | ... | + | | | + |========== ROM 64 =========| Bank 63 Write to 607e + ******************************************************************************/ /* Read function for the paged378 cartridge. */ @@ -1953,6 +2136,19 @@ WRITE8_MEMBER(ti99_paged378_cartridge::write) This type is intended for high-capacity cartridges of up to 2 MiB The paged379i cartrige does not have any GROMs. + + ROM space + 6000 7000 7fff + | | | + |========== ROM 1 ==========| Bank 0 Write to 6000 + | | | + |========== ROM 2 ==========| Bank 1 Write to 6002 + | | | + | ... | + | | | + |========== ROM 256 ========| Bank 255 Write to 61fe + + ******************************************************************************/ /* Read function for the paged377 cartridge. */ @@ -1991,6 +2187,18 @@ WRITE8_MEMBER(ti99_paged377_cartridge::write) 7 >8000 = 1000 0000 0000 0000 No GROMs used in this type. + + ROM space + 6000 7000 7fff + | | | + |========= ROM 1 ==========| Bank 0 CRU>0802 + | | | + |========= ROM 2 ==========| Bank 1 CRU>0806 + | | | + ... + | | | + |========= ROM 8 ==========| Bank 7 CRU>081e + ******************************************************************************/ /* Read function for the pagedcru cartridge. */ @@ -2062,13 +2270,29 @@ WRITE8_MEMBER(ti99_pagedcru_cartridge::cruwrite) Super-MiniMemory is also included here. We assume a RAM area at addresses 7000-7fff for this cartridge. + + GROM space + 6000 77ff 8000 97ff a000 b7ff c000 d7ff e000 ffff + |=========================== emulated GROM ================================| + + ROM space + 6000 7000 7fff + | | | + |========== ROM1 ===========| Bank 0 write to 6000, 6004, ... 7ffc + | | | + |========== ROM2 ===========| Bank 1 write to 6002, 6006, ... 7ffe + + ******************************************************************************/ WRITE8_MEMBER(ti99_gromemu_cartridge::set_gromlines) { - m_grom_selected = (data != CLEAR_LINE); - m_grom_read_mode = ((offset & GROM_M_LINE)!=0); - m_grom_address_mode = ((offset & GROM_MO_LINE)!=0); + if (m_grom_ptr != nullptr) + { + m_grom_selected = (data != CLEAR_LINE); + m_grom_read_mode = ((offset & GROM_M_LINE)!=0); + m_grom_address_mode = ((offset & GROM_MO_LINE)!=0); + } } READ8Z_MEMBER(ti99_gromemu_cartridge::readz) diff --git a/src/devices/bus/ti99x/gromport.h b/src/devices/bus/ti99x/gromport.h index e420a595c72..ee56c885b71 100644 --- a/src/devices/bus/ti99x/gromport.h +++ b/src/devices/bus/ti99x/gromport.h @@ -219,6 +219,7 @@ public: void insert(int index, ti99_cartridge_device* cart) override; void remove(int index) override; + DECLARE_INPUT_CHANGED_MEMBER( switch_changed ); protected: virtual void device_start() override; @@ -345,10 +346,20 @@ public: /*********** Paged cartridge (like Extended Basic) ********************/ -class ti99_paged_cartridge : public ti99_cartridge_pcb +class ti99_paged12k_cartridge : public ti99_cartridge_pcb { public: - ~ti99_paged_cartridge() { }; + ~ti99_paged12k_cartridge() { }; + DECLARE_READ8Z_MEMBER(readz) override; + DECLARE_WRITE8_MEMBER(write) override; +}; + +/*********** Paged cartridge (others) ********************/ + +class ti99_paged16k_cartridge : public ti99_cartridge_pcb +{ +public: + ~ti99_paged16k_cartridge() { }; DECLARE_READ8Z_MEMBER(readz) override; DECLARE_WRITE8_MEMBER(write) override; };