trunk/src/emu/cpu/tms0980/tms0980d.c
| r242801 | r242802 | |
| 1 | 1 | /******************************************************************* |
| 2 | 2 | |
| 3 | | tms0980d.c |
| 4 | | TMS0980 disassembly |
| 3 | TMS0980 disassembly |
| 5 | 4 | |
| 6 | 5 | *******************************************************************/ |
| 7 | 6 | |
| r242801 | r242802 | |
| 17 | 16 | enum e_mnemonics { |
| 18 | 17 | zA10AAC=0, zA6AAC, zA8AAC, zAC1AC, zACACC, zACNAA, zALEC, zALEM, zAMAAC, zBRANCH, zCALL, zCCLA, |
| 19 | 18 | zCLA, zCLO, zCOMC, zCOMX, zCOMX8, zCPAIZ, zCTMDYN, zDAN, zDMAN, zDMEA, zDNAA, |
| 20 | | zDYN, zIA, zIMAC, zIYC, zKNE, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ, |
| 19 | zDYN, zIA, zIMAC, zIYC, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ, |
| 21 | 20 | zNDMEA, zOFF, zRBIT, zREAC, zRETN, zRSTR, zSAL, zSAMAN, zSBIT, |
| 22 | 21 | zSBL, zSEAC, zSETR, zTAM, zTAMACS, zTAMDYN, zTAMIY, zTAMIYC, zTAMZA, |
| 23 | 22 | zTAY, zTBIT, zTCMIY, zTCY, zTDO, zTKA, zTKM, zTMA, |
| r242801 | r242802 | |
| 27 | 26 | |
| 28 | 27 | |
| 29 | 28 | enum e_addressing { |
| 30 | | zB0=0, zB2, zI2, zI3, zI4, zB7 |
| 29 | zB0=0, zI2, zI3, zI4, zB7 |
| 31 | 30 | }; |
| 32 | 31 | |
| 33 | 32 | |
| 34 | 33 | static const char *const s_mnemonic[] = { |
| 35 | 34 | "a10aac", "a6aac", "a8aac", "ac1ac", "acacc", "acnaa", "alec", "alem", "amaac", "branch", "call", "ccla", |
| 36 | 35 | "cla", "clo", "comc", "comx", "comx8", "cpaiz", "ctmdyn", "dan", "dman", "dmea", "dnaa", |
| 37 | | "dyn", "ia", "imac", "iyc", "kne", "knez", "ldp", "ldx", "ldx", "ldx", "mnea", "mnez", |
| 36 | "dyn", "ia", "imac", "iyc", "knez", "ldp", "ldx", "ldx", "ldx", "mnea", "mnez", |
| 38 | 37 | "ndmea", "off", "rbit", "reac", "retn", "rstr", "sal", "saman", "sbit", |
| 39 | 38 | "sbl", "seac", "setr", "tam", "tamacs", "tamdyn", "tamiy", "tamiyc", "tamza", |
| 40 | 39 | "tay", "tbit", "tcmiy", "tcy", "tdo", "tka", "tkm", "tma", |
| r242801 | r242802 | |
| 46 | 45 | static const UINT32 s_flags[] = { |
| 47 | 46 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _OVER, 0, |
| 48 | 47 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 49 | | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 48 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 50 | 49 | 0, 0, 0, 0, _OUT, 0, 0, 0, 0, |
| 51 | 50 | 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 52 | 51 | 0, 0, 0, 0, 0, 0, 0, 0, |
| r242801 | r242802 | |
| 58 | 57 | static const UINT8 s_addressing[] = { |
| 59 | 58 | zB0, zB0, zB0, zI4, zI4, zI4, zI4, zB0, zB0, zB7, zB7, zB0, |
| 60 | 59 | zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, |
| 61 | | zB0, zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0, |
| 62 | | zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, |
| 63 | | zB0, zB0, zB0, zB0, zI4, zB0, zB0, zB0, zB2, |
| 64 | | zB0, zB2, zI4, zI4, zB0, zB0, zB0, zB0, |
| 60 | zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0, |
| 61 | zB0, zB0, zI2, zB0, zB0, zB0, zB0, zB0, zI2, |
| 62 | zB0, zB0, zB0, zB0, zI4, zB0, zB0, zB0, zB0, |
| 63 | zB0, zI2, zI4, zI4, zB0, zB0, zB0, zB0, |
| 65 | 64 | zB0, zB0, zB0, zB0, zI4, zB0, zI4, |
| 66 | 65 | zB0 |
| 67 | 66 | }; |
| r242801 | r242802 | |
| 70 | 69 | static const UINT8 tms0980_mnemonic[512] = { |
| 71 | 70 | /* 0x000 */ |
| 72 | 71 | zCOMX, zALEM, zYNEA, zXMA, zDYN, zIYC, zCLA, zDMAN, |
| 73 | | zTKA, zMNEA, zTKM, zILL, zILL, zSETR, zKNE, zILL, |
| 72 | zTKA, zMNEA, zTKM, zILL, zILL, zSETR, zKNEZ, zILL, |
| 74 | 73 | /* 0x010 */ |
| 75 | 74 | zDMEA, zDNAA, zCCLA, zNDMEA, zILL, zAMAAC, zILL, zILL, |
| 76 | 75 | zCTMDYN, zXDA, zILL, zILL, zILL, zILL, zILL, zILL, |
| r242801 | r242802 | |
| 234 | 233 | zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, |
| 235 | 234 | }; |
| 236 | 235 | |
| 236 | |
| 237 | 237 | static const UINT8 tms0980_i2_value[4] = |
| 238 | 238 | { |
| 239 | 239 | 0x00, 0x02, 0x01, 0x03 |
| r242801 | r242802 | |
| 246 | 246 | { |
| 247 | 247 | 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F |
| 248 | 248 | }; |
| 249 | | static const UINT8 tms0980_bit_value[4] = { 1, 4, 2, 8 }; |
| 250 | 249 | |
| 251 | 250 | |
| 252 | 251 | CPU_DISASSEMBLE( tms0980 ) { |
| r242801 | r242802 | |
| 262 | 261 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 263 | 262 | |
| 264 | 263 | switch( s_addressing[instr] ) { |
| 264 | default: |
| 265 | 265 | case zB0: |
| 266 | 266 | break; |
| 267 | | case zB2: |
| 268 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 269 | | break; |
| 270 | 267 | case zI2: |
| 271 | 268 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 272 | 269 | break; |
| r242801 | r242802 | |
| 295 | 292 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 296 | 293 | |
| 297 | 294 | switch( s_addressing[instr] ) { |
| 295 | default: |
| 298 | 296 | case zB0: |
| 299 | 297 | break; |
| 300 | | case zB2: |
| 301 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 302 | | break; |
| 303 | 298 | case zI2: |
| 304 | 299 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 305 | 300 | break; |
| r242801 | r242802 | |
| 328 | 323 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 329 | 324 | |
| 330 | 325 | switch( s_addressing[instr] ) { |
| 326 | default: |
| 331 | 327 | case zB0: |
| 332 | 328 | break; |
| 333 | | case zB2: |
| 334 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 335 | | break; |
| 336 | 329 | case zI2: |
| 337 | 330 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 338 | 331 | break; |
trunk/src/mame/drivers/naomi.c
| r242801 | r242802 | |
| 4189 | 4189 | ROM_LOAD( "rom6.ic6s", 0x3000000, 0x800000, CRC(6832dd9f) SHA1(753c1fc998ef4522fae3e93b64f8c442d94e3e97) ) |
| 4190 | 4190 | // note: this fails the ROM test on hardware with the same CRC, so it's not a "bad dump" in the traditional sense. |
| 4191 | 4191 | // we need someone with a second cartridge to verify if this is a Sega screwup or simply a damaged chip on this cart. |
| 4192 | // ROM test passes good with last two zero bytes replaced by 0x09 0x51 |
| 4192 | 4193 | ROM_LOAD( "rom7.ic7s", 0x3800000, 0x800000, BAD_DUMP CRC(9b59e856) SHA1(7da728695cac132bb0ac59116ca400fff913f966) ) |
| 4193 | 4194 | ROM_LOAD( "rom8.ic8s", 0x4000000, 0x800000, CRC(9bea71f4) SHA1(fa3734b072404612e29ed96b3bcb8d416fbe86e3) ) |
| 4194 | 4195 | ROM_LOAD( "rom9.ic9s", 0x4800000, 0x800000, CRC(6029839d) SHA1(04c078e9422bf34a02f0b618a54981cd615da47d) ) |
| r242801 | r242802 | |
| 7371 | 7372 | ROM_LOAD("317-0298-com.pic", 0x00, 0x4000, CRC(15971bf6) SHA1(815152ab05edb1789a26898cfd66b5a7c4a1f765) ) |
| 7372 | 7373 | ROM_END |
| 7373 | 7374 | |
| 7375 | ROM_START( shaktam ) |
| 7376 | NAOMIGD_BIOS |
| 7377 | NAOMI_DEFAULT_EEPROM |
| 7378 | |
| 7379 | DISK_REGION( "gdrom" ) |
| 7380 | DISK_IMAGE_READONLY( "gds-0002b", 0, SHA1(c656497b44d5ca4743aa1a8d836af2bfa3484dd5) ) |
| 7381 | |
| 7382 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 7383 | // key PIC is missing |
| 7384 | ROM_LOAD("317-xxxx-com.pic", 0x00, 0x4000, BAD_DUMP CRC(034b7299) SHA1(45118d5f65b21ae599e3ca8e35df847135708d44) ) |
| 7385 | ROM_END |
| 7386 | |
| 7374 | 7387 | ROM_START( sprtjam ) |
| 7375 | 7388 | NAOMIGD_BIOS |
| 7376 | 7389 | NAOMI_DEFAULT_EEPROM |
| r242801 | r242802 | |
| 7378 | 7391 | DISK_REGION( "gdrom" ) |
| 7379 | 7392 | DISK_IMAGE_READONLY( "gds-0003", 0, SHA1(79a0d8e1aa3e6f660ef4f302d9d54c1a6d2057e3) ) |
| 7380 | 7393 | |
| 7394 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 7381 | 7395 | //PIC16C622A (317-0300-COM) |
| 7382 | 7396 | //(sticker 253-5508-0300) |
| 7383 | | //ROM_LOAD("317-0300-com.data", 0x00, 0x50, CRC(9a08413f) SHA1(d57649dcc3af578d55a93dd7a3f41da62d580f54) ) |
| 7384 | | |
| 7385 | | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 7386 | 7397 | ROM_LOAD("317-0300-com.pic", 0x00, 0x4000, CRC(19a97214) SHA1(bcee1af2c16daabc7a0f723e1f9281a7c95600c6) ) |
| 7387 | 7398 | ROM_END |
| 7388 | 7399 | |
| r242801 | r242802 | |
| 9087 | 9098 | /* 0001 */ GAME( 2000, confmiss, naomigd, naomigd, hotd2, naomi_state, naomigd, ROT0, "Sega", "Confidential Mission (GDS-0001)", GAME_FLAGS ) |
| 9088 | 9099 | // 0002 Shakatto Tambourine (GDS-0002) |
| 9089 | 9100 | // 0002A Shakatto Tambourine (Rev A) (GDS-0002A) |
| 9090 | | // 0002B Shakatto Tambourine (Rev B) (GDS-0002B) |
| 9101 | /* 0002B */ GAME( 2000, shaktam, naomigd, naomigd, shaktamb, naomi_state, naomigd, ROT0, "Sega", "Shakatto Tambourine (Rev B) (GDS-0002B)", GAME_FLAGS ) |
| 9091 | 9102 | /* 0003 */ GAME( 2000, sprtjam, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "Sports Jam (GDS-0003)", GAME_FLAGS ) |
| 9092 | 9103 | /* 0004 */ GAME( 2000, slashout, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "Slashout (GDS-0004)", GAME_FLAGS ) |
| 9093 | 9104 | /* 0005 */ GAME( 2001, spkrbtl, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "Spikers Battle (GDS-0005)", GAME_FLAGS ) |
| 9094 | 9105 | /* 0006 */ GAME( 2001, vstrik3, naomi2, naomi2gd, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 Ver. 2002 (GDS-0006)", GAME_FLAGS ) |
| 9095 | | // 0007 Shakatto Tambourine Motto Norinori Shinkyoku Tsuika |
| 9106 | // 0007 |
| 9096 | 9107 | /* 0008 */ GAME( 2001, monkeyba, naomigd, naomigd, monkeyba,naomi_state, naomigd, ROT0, "Sega", "Monkey Ball (GDS-0008)", GAME_FLAGS ) |
| 9097 | 9108 | // 0009 Dynamic Golf / Virtua Golf |
| 9098 | 9109 | /* 0009A */ GAME( 2001, dygolf, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "Dynamic Golf / Virtua Golf (Rev A) (GDS-0009A)", GAME_FLAGS ) |
| r242801 | r242802 | |
| 9102 | 9113 | // 0012A Virtua Fighter 4 (Rev A) |
| 9103 | 9114 | /* 0012B */ GAME( 2001, vf4b, vf4, naomi2gd, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev B) (GDS-0012B)", GAME_FLAGS ) |
| 9104 | 9115 | /* 0012C */ GAME( 2001, vf4c, vf4, naomi2gd, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev C) (GDS-0012C)", GAME_FLAGS ) |
| 9105 | | /* 0013 */ GAME( 2001, shaktmsp, naomigd, naomigd, shaktamb, naomi_state, naomigd, ROT0, "Sega", "Shakatto Tambourine 2K1 SPR (GDS-0013)", GAME_FLAGS ) |
| 9116 | /* 0013 */ GAME( 2001, shaktmsp, naomigd, naomigd, shaktamb, naomi_state, naomigd, ROT0, "Sega", "Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR) (GDS-0013)", GAME_FLAGS ) |
| 9106 | 9117 | /* 0014 */ GAME( 2001, beachspi, naomi2, naomi2gd, naomi, naomi_state, naomi2, ROT0, "Sega", "Beach Spikers (GDS-0014)", GAME_FLAGS ) |
| 9107 | 9118 | // 0015 Virtua Tennis 2 / Power Smash 2 |
| 9108 | 9119 | /* 0015A */ GAME( 2001, vtennis2, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A)", GAME_FLAGS ) |
| 9109 | | /* 0016 */ GAME( 2001, shaktamb, naomigd, naomigd, shaktamb, naomi_state, naomigd, ROT0, "Sega", "Shakatto Tambourine Cho Powerup Chu 2K1 AUT (GDS-0016)", GAME_FLAGS ) |
| 9120 | /* 0016 */ GAME( 2001, shaktamb, naomigd, naomigd, shaktamb, naomi_state, naomigd, ROT0, "Sega", "Shakatto Tambourine Cho Powerup Chu (2K1 AUT) (GDS-0016)", GAME_FLAGS ) |
| 9110 | 9121 | /* 0017 */ GAME( 2001, keyboard, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0, "Sega", "La Keyboard (GDS-0017)", GAME_FLAGS ) |
| 9111 | 9122 | /* 0018 */ GAME( 2001, lupinsho, naomigd, naomigd, hotd2, naomi_state, naomigd, ROT0, "Sega / Eighting", "Lupin The Third - The Shooting (GDS-0018)", GAME_FLAGS ) |
| 9112 | 9123 | // 0018A Lupin The Third - The Shooting (Rev A) |
trunk/src/mess/drivers/tispeak.c
| r242801 | r242802 | |
| 7 | 7 | (still need to write notes here..) |
| 8 | 8 | |
| 9 | 9 | Other stuff on similar hardware: |
| 10 | | - Language Tutor/Translator |
| 11 | 10 | - Touch & Tell, but it runs on a TMS1100! |
| 12 | 11 | - Speak & Spell Compact, Speak & Write (UK version), TMS1100? TMS0980? |
| 13 | 12 | - Speak & Read |
| r242801 | r242802 | |
| 21 | 20 | #include "bus/generic/slot.h" |
| 22 | 21 | #include "bus/generic/carts.h" |
| 23 | 22 | |
| 23 | #include "lantutor.lh" |
| 24 | 24 | #include "tispeak.lh" |
| 25 | 25 | |
| 26 | 26 | // The master clock is a single stage RC oscillator into TMS5100 RCOSC: |
| r242801 | r242802 | |
| 57 | 57 | int m_filament_on; |
| 58 | 58 | int m_power_on; |
| 59 | 59 | |
| 60 | | UINT16 m_digit_state[9]; |
| 60 | UINT16 m_digit_state[0x10]; |
| 61 | 61 | void display_update(); |
| 62 | 62 | TIMER_DEVICE_CALLBACK_MEMBER(delayed_filament_off); |
| 63 | 63 | |
| 64 | UINT32 m_cart_max_size; |
| 65 | UINT8* m_cart_base; |
| 66 | DECLARE_DEVICE_IMAGE_LOAD_MEMBER(tispeak_cartridge); |
| 67 | DECLARE_DRIVER_INIT(snspell); |
| 68 | DECLARE_DRIVER_INIT(lantutor); |
| 69 | |
| 64 | 70 | DECLARE_READ8_MEMBER(snspell_read_k); |
| 65 | 71 | DECLARE_WRITE16_MEMBER(snmath_write_o); |
| 66 | 72 | DECLARE_WRITE16_MEMBER(snspell_write_o); |
| 67 | 73 | DECLARE_WRITE16_MEMBER(snspell_write_r); |
| 74 | DECLARE_WRITE16_MEMBER(lantutor_write_r); |
| 68 | 75 | |
| 69 | 76 | DECLARE_INPUT_CHANGED_MEMBER(power_button); |
| 70 | | DECLARE_WRITE_LINE_MEMBER(auto_power_off); |
| 71 | 77 | void power_off(); |
| 72 | 78 | |
| 73 | | DECLARE_DEVICE_IMAGE_LOAD_MEMBER(tispeak_cartridge); |
| 74 | 79 | virtual void machine_reset(); |
| 75 | 80 | virtual void machine_start(); |
| 76 | 81 | }; |
| r242801 | r242802 | |
| 87 | 92 | { |
| 88 | 93 | UINT32 size = m_cart->common_get_size("rom"); |
| 89 | 94 | |
| 90 | | // max size is 16KB |
| 91 | | if (size > 0x4000) |
| 95 | if (size > m_cart_max_size) |
| 92 | 96 | { |
| 93 | 97 | image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid file size"); |
| 94 | 98 | return IMAGE_INIT_FAIL; |
| r242801 | r242802 | |
| 101 | 105 | } |
| 102 | 106 | |
| 103 | 107 | |
| 108 | DRIVER_INIT_MEMBER(tispeak_state, snspell) |
| 109 | { |
| 110 | m_cart_max_size = 0x4000; |
| 111 | m_cart_base = memregion("tms6100")->base() + 0x8000; |
| 112 | } |
| 104 | 113 | |
| 114 | DRIVER_INIT_MEMBER(tispeak_state, lantutor) |
| 115 | { |
| 116 | m_cart_max_size = 0x10000; |
| 117 | m_cart_base = memregion("tms6100")->base(); |
| 118 | } |
| 119 | |
| 120 | |
| 121 | |
| 105 | 122 | /*************************************************************************** |
| 106 | 123 | |
| 107 | 124 | VFD Display |
| r242801 | r242802 | |
| 136 | 153 | } |
| 137 | 154 | |
| 138 | 155 | // update digit state |
| 139 | | for (int i = 0; i < 9; i++) |
| 156 | for (int i = 0; i < 0x10; i++) |
| 140 | 157 | if (m_r >> i & 1) |
| 141 | 158 | m_digit_state[i] = m_o; |
| 142 | 159 | |
| 143 | 160 | // send to output |
| 144 | | for (int i = 0; i < 9; i++) |
| 161 | for (int i = 0; i < 0x10; i++) |
| 145 | 162 | { |
| 146 | 163 | // standard led14seg |
| 147 | 164 | output_set_digit_value(i, m_filament_on ? m_digit_state[i] & 0x3fff : 0); |
| r242801 | r242802 | |
| 178 | 195 | WRITE16_MEMBER(tispeak_state::snspell_write_r) |
| 179 | 196 | { |
| 180 | 197 | // R0-R7: input mux and select digit (+R8 if the device has 9 digits) |
| 181 | | // R15: filament on |
| 198 | // R15: filament on (handled in display_update) |
| 199 | // R13: power-off request, on falling edge |
| 200 | if ((m_r >> 13 & 1) && !(data >> 13 & 1)) |
| 201 | power_off(); |
| 202 | |
| 182 | 203 | // other bits: MCU internal use |
| 183 | 204 | m_r = data; |
| 184 | 205 | display_update(); |
| r242801 | r242802 | |
| 203 | 224 | m_power_on = 0; |
| 204 | 225 | } |
| 205 | 226 | |
| 206 | | WRITE_LINE_MEMBER(tispeak_state::auto_power_off) |
| 207 | | { |
| 208 | | // power-off request from the MCU, when [OFF] is pressed, also typically after a couple of minutes of idling |
| 209 | | if (state) |
| 210 | | power_off(); |
| 211 | | } |
| 212 | 227 | |
| 213 | | |
| 214 | 228 | // snmath specific |
| 215 | 229 | |
| 216 | 230 | WRITE16_MEMBER(tispeak_state::snmath_write_o) |
| r242801 | r242802 | |
| 223 | 237 | } |
| 224 | 238 | |
| 225 | 239 | |
| 240 | // lantutor specific |
| 226 | 241 | |
| 242 | WRITE16_MEMBER(tispeak_state::lantutor_write_r) |
| 243 | { |
| 244 | // same as default, except R13 is used for an extra digit |
| 245 | m_r = data; |
| 246 | display_update(); |
| 247 | } |
| 248 | |
| 249 | |
| 250 | |
| 227 | 251 | /*************************************************************************** |
| 228 | 252 | |
| 229 | 253 | Inputs |
| r242801 | r242802 | |
| 363 | 387 | INPUT_PORTS_END |
| 364 | 388 | |
| 365 | 389 | |
| 390 | static INPUT_PORTS_START( lantutor ) |
| 391 | PORT_INCLUDE( snspell ) |
| 366 | 392 | |
| 393 | PORT_MODIFY("IN.5") // R5 |
| 394 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Diacritical") |
| 395 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Space") |
| 396 | |
| 397 | PORT_MODIFY("IN.6") // R6 |
| 398 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_NAME("1") |
| 399 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("2") |
| 400 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("3") |
| 401 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_NAME("4") |
| 402 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_NAME("5") |
| 403 | |
| 404 | PORT_MODIFY("IN.7") // R7 |
| 405 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_NAME("6") |
| 406 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_NAME("7") |
| 407 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_NAME("8") |
| 408 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_NAME("9") |
| 409 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_NAME("0") |
| 410 | |
| 411 | PORT_MODIFY("IN.8") // Vss! |
| 412 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("Translate") |
| 413 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("Learn") |
| 414 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("Phrase") |
| 415 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("Link") |
| 416 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("Repeat") |
| 417 | INPUT_PORTS_END |
| 418 | |
| 419 | |
| 420 | |
| 367 | 421 | /*************************************************************************** |
| 368 | 422 | |
| 369 | 423 | Machine Config |
| r242801 | r242802 | |
| 398 | 452 | astring region_tag; |
| 399 | 453 | memory_region *src = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG)); |
| 400 | 454 | if (src) |
| 401 | | { |
| 402 | | UINT8 *dest_ptr = memregion("tms6100")->base() + 0x8000; |
| 403 | | memcpy(dest_ptr, src->base(), src->bytes()); |
| 404 | | } |
| 455 | memcpy(m_cart_base, src->base(), src->bytes()); |
| 405 | 456 | } |
| 406 | 457 | } |
| 407 | 458 | |
| r242801 | r242802 | |
| 413 | 464 | MCFG_TMS1XXX_READ_K_CB(READ8(tispeak_state, snspell_read_k)) |
| 414 | 465 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snmath_write_o)) |
| 415 | 466 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, snspell_write_r)) |
| 416 | | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(tispeak_state, auto_power_off)) |
| 417 | 467 | |
| 418 | 468 | MCFG_TMS0270_READ_CTL_CB(DEVREAD8("tms5100", tms5100_device, ctl_r)) |
| 419 | 469 | MCFG_TMS0270_WRITE_CTL_CB(DEVWRITE8("tms5100", tms5100_device, ctl_w)) |
| r242801 | r242802 | |
| 451 | 501 | MCFG_SOFTWARE_LIST_ADD("cart_list", "snspell") |
| 452 | 502 | MACHINE_CONFIG_END |
| 453 | 503 | |
| 504 | static MACHINE_CONFIG_DERIVED( lantutor, snmath ) |
| 454 | 505 | |
| 506 | /* basic machine hardware */ |
| 507 | MCFG_CPU_MODIFY("maincpu") |
| 508 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o)) |
| 509 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, lantutor_write_r)) |
| 455 | 510 | |
| 511 | MCFG_DEFAULT_LAYOUT(layout_lantutor) |
| 512 | |
| 513 | /* cartridge */ |
| 514 | MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "lantutor") |
| 515 | MCFG_GENERIC_MANDATORY |
| 516 | MCFG_GENERIC_EXTENSIONS("vsm,bin") |
| 517 | MCFG_GENERIC_LOAD(tispeak_state, tispeak_cartridge) |
| 518 | |
| 519 | MCFG_SOFTWARE_LIST_ADD("cart_list", "lantutor") |
| 520 | MACHINE_CONFIG_END |
| 521 | |
| 522 | |
| 523 | |
| 456 | 524 | /*************************************************************************** |
| 457 | 525 | |
| 458 | 526 | Game driver(s) |
| r242801 | r242802 | |
| 553 | 621 | ROM_END |
| 554 | 622 | |
| 555 | 623 | |
| 556 | | |
| 557 | 624 | ROM_START( snmath ) |
| 558 | 625 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 559 | | // typed in from patent 4946391, verified with source code (mark BAD_DUMP just to be unsure) |
| 626 | // typed in from patent 4946391, verified with source code |
| 560 | 627 | // BTANB note: Mix It does not work at all, this is an original bug in the prototype. There are probably other minor bugs too. |
| 561 | | ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, BAD_DUMP CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) ) |
| 628 | ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) ) |
| 562 | 629 | |
| 563 | 630 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 564 | 631 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| r242801 | r242802 | |
| 592 | 659 | ROM_END |
| 593 | 660 | |
| 594 | 661 | |
| 662 | ROM_START( lantutor ) |
| 663 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 664 | ROM_LOAD( "us4631748_tmc0275", 0x0000, 0x1000, CRC(22818845) SHA1(1a84f15fb18ca66b1f2bf7491d76fbc56068984d) ) // extracted visually from patent 4631748, verified with source code |
| 595 | 665 | |
| 596 | | COMP( 1978, snspell, 0, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 597 | | COMP( 1980, snspella, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 598 | | COMP( 1978, snspelluk, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 599 | | COMP( 1981, snspelluka, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // different voice actor |
| 600 | | COMP( 1979, snspelljp, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 601 | | COMP( 1980, ladictee, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "La Dictee Magique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German version has CD2702 too |
| 666 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 667 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 668 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 669 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // taken from cd2708, need to verify if it's same as tmc0275 |
| 670 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 671 | ROM_LOAD( "tms0270_tmc0271_opla.pla", 0, 1246, BAD_DUMP CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) // taken from snspell, mostly looks correct |
| 602 | 672 | |
| 603 | | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 604 | | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 673 | ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // cartridge area |
| 674 | ROM_END |
| 675 | |
| 676 | |
| 677 | |
| 678 | COMP( 1978, snspell, 0, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 679 | COMP( 1980, snspella, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 680 | COMP( 1978, snspelluk, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 681 | COMP( 1981, snspelluka, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // different voice actor |
| 682 | COMP( 1979, snspelljp, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 683 | COMP( 1980, ladictee, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German version has CD2702 too |
| 684 | |
| 685 | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 686 | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 687 | |
| 688 | COMP( 1979, lantutor, 0, 0, lantutor, lantutor, tispeak_state, lantutor, "Texas Instruments", "Language Tutor (prototype)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |