trunk/src/mess/drivers/hh_ucom4.c
| r245706 | r245707 | |
| 9 | 9 | |
| 10 | 10 | serial device etc. |
| 11 | 11 | ---------------------------------------------------------------- |
| 12 | @017 uPD552C 1979, Bambino UFO Master-Blaster Station (ET-02) |
| 12 | 13 | @031 uPD553C 1979, Bambino Superstar Football (ET-03) |
| 13 | 14 | *042 uPD552C 1979, Tomy Space Attack |
| 14 | 15 | @048 uPD552C 1980, Tomy Tennis (TN-04) |
| r245706 | r245707 | |
| 20 | 21 | *128 uPD650C 1982, Roland TR-606 |
| 21 | 22 | 133 uPD650C 1982, Roland TB-303 -> tb303.c |
| 22 | 23 | @160 uPD553C 1982, Tomy Pac Man (TN-08) |
| 24 | @170 uPD553C 1982, Bandai Crazy Climber |
| 23 | 25 | @192 uPD553C 1982, Tomy Scramble (TN-10) |
| 24 | 26 | @202 uPD553C 1982, Epoch Astro Command |
| 25 | 27 | @206 uPD553C 1982, Epoch Dracula |
| r245706 | r245707 | |
| 33 | 35 | |
| 34 | 36 | |
| 35 | 37 | |
| 38 | |
| 39 | |
| 40 | |
| 41 | |
| 36 | 42 | /*************************************************************************** |
| 37 | 43 | |
| 38 | 44 | Mego Mini-Vid Break Free (manufactured in Japan) |
| r245706 | r245707 | |
| 45 | 51 | ***************************************************************************/ |
| 46 | 52 | |
| 47 | 53 | |
| 48 | | /*************************************************************************** |
| 49 | 54 | |
| 50 | | Tomy(tronic) Caveman (manufactured in Japan) |
| 51 | | * PCBs are labeled TN-12 2E114E03 |
| 52 | | * NEC uCOM-43 MCU, labeled D553C 209 |
| 53 | | * cyan/red/green VFD display NEC FIP8AM20T no. 2-42 |
| 54 | 55 | |
| 55 | | NOTE!: MESS external artwork is recommended |
| 56 | | |
| 57 | | ***************************************************************************/ |
| 58 | | |
| 59 | | |
| 60 | | /*************************************************************************** |
| 61 | | |
| 62 | | Tomy(tronic) Scramble (manufactured in Japan) |
| 63 | | * PCBs are labeled TN-10 2E114E01 |
| 64 | | * NEC uCOM-43 MCU, labeled D553C 192 |
| 65 | | * cyan/red/green VFD display NEC FIP10CM20T no. 2-41 |
| 66 | | |
| 67 | | NOTE!: MESS external artwork is recommended |
| 68 | | |
| 69 | | ***************************************************************************/ |
| 70 | | |
| 71 | | |
| 72 | 56 | #include "emu.h" |
| 73 | 57 | #include "cpu/ucom4/ucom4.h" |
| 74 | 58 | #include "sound/speaker.h" |
| r245706 | r245707 | |
| 275 | 259 | |
| 276 | 260 | /*************************************************************************** |
| 277 | 261 | |
| 262 | Bambino UFO Master-Blaster Station (manufactured in Japan) |
| 263 | * PCB label Emix Corp. ET-02 |
| 264 | * NEC uCOM-44 MCU, labeled EMIX D552C 017 |
| 265 | * cyan VFD display Emix-101, with blue overlay |
| 266 | |
| 267 | This is Bambino's first game, it is not known if ET-01 exists. Emix Corp. |
| 268 | wasn't initially a toy company, the first release was through Tomy. Emix |
| 269 | created the Bambino brand afterwards. The manual claims it to be the first |
| 270 | computerized VFD game (true, unless TI's Speak & Spell is considered a game?) |
| 271 | |
| 272 | known releases: |
| 273 | - Japan: "Missile Guerilla Warfare Maneuvers", published by Tomy |
| 274 | - World: UFO Master-Blaster Station |
| 275 | |
| 276 | NOTE!: MESS external artwork is recommended |
| 277 | |
| 278 | ***************************************************************************/ |
| 279 | |
| 280 | class ufombs_state : public hh_ucom4_state |
| 281 | { |
| 282 | public: |
| 283 | ufombs_state(const machine_config &mconfig, device_type type, const char *tag) |
| 284 | : hh_ucom4_state(mconfig, type, tag) |
| 285 | { } |
| 286 | |
| 287 | void prepare_display(); |
| 288 | DECLARE_WRITE8_MEMBER(grid_w); |
| 289 | DECLARE_WRITE8_MEMBER(plate_w); |
| 290 | DECLARE_WRITE8_MEMBER(speaker_w); |
| 291 | }; |
| 292 | |
| 293 | // handlers |
| 294 | |
| 295 | void ufombs_state::prepare_display() |
| 296 | { |
| 297 | UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,9,3,2,1,0,4,5,6,7,8); |
| 298 | UINT16 plate = BITSWAP16(m_plate,15,14,13,12,11,7,10,6,9,5,8,4,0,1,2,3); |
| 299 | display_matrix(10, 9, plate, grid); |
| 300 | } |
| 301 | |
| 302 | WRITE8_MEMBER(ufombs_state::grid_w) |
| 303 | { |
| 304 | // F,G,H0: vfd matrix grid |
| 305 | int shift = (offset - NEC_UCOM4_PORTF) * 4; |
| 306 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 307 | prepare_display(); |
| 308 | } |
| 309 | |
| 310 | WRITE8_MEMBER(ufombs_state::plate_w) |
| 311 | { |
| 312 | // C,D012,I: vfd matrix plate |
| 313 | int shift = (offset == NEC_UCOM4_PORTI) ? 8 : (offset - NEC_UCOM4_PORTC) * 4; |
| 314 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 315 | prepare_display(); |
| 316 | } |
| 317 | |
| 318 | WRITE8_MEMBER(ufombs_state::speaker_w) |
| 319 | { |
| 320 | // E01: speaker out |
| 321 | m_speaker->level_w(data & 3); |
| 322 | } |
| 323 | |
| 324 | |
| 325 | // config |
| 326 | |
| 327 | static INPUT_PORTS_START( ufombs ) |
| 328 | PORT_START("IN.0") // port A |
| 329 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 330 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY |
| 331 | PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("IN.0", 0x0a, EQUALS, 0x00) // pad in the middle, pressed when joystick is centered |
| 332 | PORT_BIT( 0x04, 0x00, IPT_SPECIAL ) PORT_CONDITION("IN.0", 0x0a, NOTEQUALS, 0x00) |
| 333 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY |
| 334 | |
| 335 | PORT_START("IN.1") // port B |
| 336 | PORT_CONFNAME( 0x07, 0x01, "Skill Level" ) |
| 337 | PORT_CONFSETTING( 0x01, "1" ) |
| 338 | PORT_CONFSETTING( 0x02, "2" ) |
| 339 | PORT_CONFSETTING( 0x04, "3" ) |
| 340 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 341 | INPUT_PORTS_END |
| 342 | |
| 343 | |
| 344 | static const INT16 ufombs_speaker_levels[] = { 0, 32767, -32768, 0 }; |
| 345 | |
| 346 | static MACHINE_CONFIG_START( ufombs, ufombs_state ) |
| 347 | |
| 348 | /* basic machine hardware */ |
| 349 | MCFG_CPU_ADD("maincpu", NEC_D552, 400000) // approximation |
| 350 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) |
| 351 | MCFG_UCOM4_READ_B_CB(IOPORT("IN.1")) |
| 352 | MCFG_UCOM4_WRITE_C_CB(WRITE8(ufombs_state, plate_w)) |
| 353 | MCFG_UCOM4_WRITE_D_CB(WRITE8(ufombs_state, plate_w)) |
| 354 | MCFG_UCOM4_WRITE_E_CB(WRITE8(ufombs_state, speaker_w)) |
| 355 | MCFG_UCOM4_WRITE_F_CB(WRITE8(ufombs_state, grid_w)) |
| 356 | MCFG_UCOM4_WRITE_G_CB(WRITE8(ufombs_state, grid_w)) |
| 357 | MCFG_UCOM4_WRITE_H_CB(WRITE8(ufombs_state, grid_w)) |
| 358 | MCFG_UCOM4_WRITE_I_CB(WRITE8(ufombs_state, plate_w)) |
| 359 | |
| 360 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 361 | MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test) |
| 362 | |
| 363 | /* no video! */ |
| 364 | |
| 365 | /* sound hardware */ |
| 366 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 367 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 368 | MCFG_SPEAKER_LEVELS(4, ufombs_speaker_levels) |
| 369 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 370 | MACHINE_CONFIG_END |
| 371 | |
| 372 | |
| 373 | |
| 374 | |
| 375 | |
| 376 | /*************************************************************************** |
| 377 | |
| 278 | 378 | Bambino Superstar Football (manufactured in Japan) |
| 279 | 379 | * PCB label Emix Corp. ET-03 |
| 280 | 380 | * NEC uCOM-43 MCU, labeled D553C 031 |
| 281 | | * green VFD display Emix-102 |
| 381 | * cyan VFD display Emix-102 |
| 282 | 382 | |
| 283 | 383 | Press the Kick button to start the game, an automatic sequence follows. |
| 284 | 384 | Then choose a formation(A,B,C) and either pass the ball, and/or start |
| r245706 | r245707 | |
| 375 | 475 | static MACHINE_CONFIG_START( ssfball, ssfball_state ) |
| 376 | 476 | |
| 377 | 477 | /* basic machine hardware */ |
| 378 | | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 478 | MCFG_CPU_ADD("maincpu", NEC_D553, 400000) // approximation |
| 379 | 479 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.3")) |
| 380 | 480 | MCFG_UCOM4_READ_B_CB(READ8(ssfball_state, input_b_r)) |
| 381 | 481 | MCFG_UCOM4_WRITE_C_CB(WRITE8(ssfball_state, grid_w)) |
| r245706 | r245707 | |
| 524 | 624 | static MACHINE_CONFIG_START( splasfgt, splasfgt_state ) |
| 525 | 625 | |
| 526 | 626 | /* basic machine hardware */ |
| 527 | | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 627 | MCFG_CPU_ADD("maincpu", NEC_D553, 400000) // approximation |
| 528 | 628 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.4")) |
| 529 | 629 | MCFG_UCOM4_READ_B_CB(READ8(splasfgt_state, input_b_r)) |
| 530 | 630 | MCFG_UCOM4_WRITE_C_CB(WRITE8(splasfgt_state, plate_w)) |
| r245706 | r245707 | |
| 553 | 653 | |
| 554 | 654 | /*************************************************************************** |
| 555 | 655 | |
| 656 | Bandai Crazy Climber (manufactured in Japan) |
| 657 | * PCB labels SM-020/SM-021 |
| 658 | * NEC uCOM-43 MCU, labeled D553C 170 |
| 659 | * cyan/red/green VFD display NEC FIP6AM2-T no. 1-8 2, with partial color overlay and bezel |
| 660 | |
| 661 | known releases: |
| 662 | - Japan: FL Crazy Climbing |
| 663 | - USA: Crazy Climber |
| 664 | |
| 665 | NOTE!: MESS external artwork is recommended |
| 666 | |
| 667 | ***************************************************************************/ |
| 668 | |
| 669 | class bcclimbr_state : public hh_ucom4_state |
| 670 | { |
| 671 | public: |
| 672 | bcclimbr_state(const machine_config &mconfig, device_type type, const char *tag) |
| 673 | : hh_ucom4_state(mconfig, type, tag) |
| 674 | { } |
| 675 | |
| 676 | void prepare_display(); |
| 677 | DECLARE_WRITE8_MEMBER(grid_w); |
| 678 | DECLARE_WRITE8_MEMBER(plate_w); |
| 679 | }; |
| 680 | |
| 681 | // handlers |
| 682 | |
| 683 | void bcclimbr_state::prepare_display() |
| 684 | { |
| 685 | UINT8 grid = BITSWAP8(m_grid,7,6,0,1,2,3,4,5); |
| 686 | UINT32 plate = BITSWAP24(m_plate,23,22,21,20,16,17,18,19,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); |
| 687 | display_matrix(20, 6, plate, grid); |
| 688 | } |
| 689 | |
| 690 | WRITE8_MEMBER(bcclimbr_state::grid_w) |
| 691 | { |
| 692 | // I2: speaker out |
| 693 | if (offset == NEC_UCOM4_PORTI) |
| 694 | m_speaker->level_w(data >> 2 & 1); |
| 695 | |
| 696 | // H,I01: vfd matrix grid |
| 697 | int shift = (offset - NEC_UCOM4_PORTH) * 4; |
| 698 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 699 | prepare_display(); |
| 700 | } |
| 701 | |
| 702 | WRITE8_MEMBER(bcclimbr_state::plate_w) |
| 703 | { |
| 704 | // C,D,E,F: vfd matrix plate |
| 705 | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 706 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 707 | prepare_display(); |
| 708 | } |
| 709 | |
| 710 | |
| 711 | // config |
| 712 | |
| 713 | static INPUT_PORTS_START( bcclimbr ) |
| 714 | PORT_START("IN.0") // port A |
| 715 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) |
| 716 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) |
| 717 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) |
| 718 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) |
| 719 | |
| 720 | PORT_START("IN.1") // port B |
| 721 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 722 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) |
| 723 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) |
| 724 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) |
| 725 | INPUT_PORTS_END |
| 726 | |
| 727 | static MACHINE_CONFIG_START( bcclimbr, bcclimbr_state ) |
| 728 | |
| 729 | /* basic machine hardware */ |
| 730 | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 731 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) |
| 732 | MCFG_UCOM4_READ_B_CB(IOPORT("IN.1")) |
| 733 | MCFG_UCOM4_WRITE_C_CB(WRITE8(bcclimbr_state, plate_w)) |
| 734 | MCFG_UCOM4_WRITE_D_CB(WRITE8(bcclimbr_state, plate_w)) |
| 735 | MCFG_UCOM4_WRITE_E_CB(WRITE8(bcclimbr_state, plate_w)) |
| 736 | MCFG_UCOM4_WRITE_F_CB(WRITE8(bcclimbr_state, plate_w)) |
| 737 | MCFG_UCOM4_WRITE_G_CB(WRITE8(bcclimbr_state, plate_w)) |
| 738 | MCFG_UCOM4_WRITE_H_CB(WRITE8(bcclimbr_state, grid_w)) |
| 739 | MCFG_UCOM4_WRITE_I_CB(WRITE8(bcclimbr_state, grid_w)) |
| 740 | |
| 741 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 742 | MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test) |
| 743 | |
| 744 | /* no video! */ |
| 745 | |
| 746 | /* sound hardware */ |
| 747 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 748 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 749 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 750 | MACHINE_CONFIG_END |
| 751 | |
| 752 | |
| 753 | |
| 754 | |
| 755 | |
| 756 | /*************************************************************************** |
| 757 | |
| 556 | 758 | Epoch Astro Command (manufactured in Japan) |
| 557 | 759 | * PCB label 96111 |
| 558 | 760 | * NEC uCOM-43 MCU, labeled D553C 202 |
| r245706 | r245707 | |
| 760 | 962 | Tomy(tronic) Tennis (manufactured in Japan) |
| 761 | 963 | * PCB labeled TOMY TN-04 TENNIS |
| 762 | 964 | * NEC uCOM-44 MCU, labeled D552C 048 |
| 763 | | * VFD display NEC FIP11AM15T tube no. 0F |
| 965 | * VFD display NEC FIP11AM15T tube no. 0F, with overlay |
| 764 | 966 | |
| 765 | 967 | The initial release of this game was in 1979, known as Pro-Tennis, |
| 766 | 968 | it has a D553 instead of D552, with just a little over 50% ROM used. |
| 767 | 969 | |
| 768 | | This is an early VFD simple electronic tennis game. Each player has six possible |
| 769 | | positions where to hit the ball. A backdrop behind the VFD shows a tennis court. |
| 770 | | |
| 970 | Press the Serve button to start, then hit the ball by pressing one of the |
| 971 | positional buttons when the ball flies over it. |
| 972 | |
| 771 | 973 | NOTE!: MESS external artwork is recommended |
| 772 | 974 | |
| 773 | 975 | ***************************************************************************/ |
| r245706 | r245707 | |
| 804 | 1006 | WRITE8_MEMBER(tmtennis_state::plate_w) |
| 805 | 1007 | { |
| 806 | 1008 | // C,D,F: vfd matrix plate |
| 807 | | if (offset == NEC_UCOM4_PORTF) offset--; |
| 808 | | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 1009 | int shift = (offset == NEC_UCOM4_PORTF) ? 8 : (offset - NEC_UCOM4_PORTC) * 4; |
| 809 | 1010 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 810 | 1011 | display_matrix(12, 12, m_plate, m_grid); |
| 811 | 1012 | } |
| r245706 | r245707 | |
| 951 | 1152 | |
| 952 | 1153 | void tmpacman_state::prepare_display() |
| 953 | 1154 | { |
| 954 | | UINT16 grid = BITSWAP8(m_grid,0,1,2,3,4,5,6,7); |
| 1155 | UINT8 grid = BITSWAP8(m_grid,0,1,2,3,4,5,6,7); |
| 955 | 1156 | UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,16,17,18,11,10,9,8,0,2,3,1,4,5,6,7,12,13,14,15); |
| 956 | 1157 | display_matrix(19, 8, plate, grid); |
| 957 | 1158 | } |
| r245706 | r245707 | |
| 1024 | 1225 | |
| 1025 | 1226 | /*************************************************************************** |
| 1026 | 1227 | |
| 1228 | Tomy(tronic) Scramble (manufactured in Japan) |
| 1229 | * PCBs are labeled TN-10 2E114E01 |
| 1230 | * NEC uCOM-43 MCU, labeled D553C 192 |
| 1231 | * cyan/red/green VFD display NEC FIP10CM20T no. 2-41 |
| 1232 | |
| 1233 | known releases: |
| 1234 | - World: Scramble |
| 1235 | - USA: Scramble, published by Tandy |
| 1236 | - UK: Astro Blaster, published by Hales (Epoch Astro Command was named Scramble) |
| 1237 | - Germany: Rambler |
| 1238 | |
| 1239 | NOTE!: MESS external artwork is recommended |
| 1240 | |
| 1241 | ***************************************************************************/ |
| 1242 | |
| 1243 | class tmscramb_state : public hh_ucom4_state |
| 1244 | { |
| 1245 | public: |
| 1246 | tmscramb_state(const machine_config &mconfig, device_type type, const char *tag) |
| 1247 | : hh_ucom4_state(mconfig, type, tag) |
| 1248 | { } |
| 1249 | |
| 1250 | void prepare_display(); |
| 1251 | DECLARE_WRITE8_MEMBER(grid_w); |
| 1252 | DECLARE_WRITE8_MEMBER(plate_w); |
| 1253 | }; |
| 1254 | |
| 1255 | // handlers |
| 1256 | |
| 1257 | void tmscramb_state::prepare_display() |
| 1258 | { |
| 1259 | UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,18,17,3,15,2,14,1,13,16,0,12,8,4,9,5,10,6,11,7); |
| 1260 | display_matrix(17, 10, plate, m_grid); |
| 1261 | } |
| 1262 | |
| 1263 | WRITE8_MEMBER(tmscramb_state::grid_w) |
| 1264 | { |
| 1265 | // I2: speaker out |
| 1266 | if (offset == NEC_UCOM4_PORTI) |
| 1267 | m_speaker->level_w(data >> 2 & 1); |
| 1268 | |
| 1269 | // C,D,I01: vfd matrix grid |
| 1270 | int shift = (offset == NEC_UCOM4_PORTI) ? 8 : (offset - NEC_UCOM4_PORTC) * 4; |
| 1271 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 1272 | prepare_display(); |
| 1273 | } |
| 1274 | |
| 1275 | WRITE8_MEMBER(tmscramb_state::plate_w) |
| 1276 | { |
| 1277 | // E,F,G,H: vfd matrix plate |
| 1278 | int shift = (offset - NEC_UCOM4_PORTE) * 4; |
| 1279 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 1280 | prepare_display(); |
| 1281 | } |
| 1282 | |
| 1283 | |
| 1284 | // config |
| 1285 | |
| 1286 | static INPUT_PORTS_START( tmscramb ) |
| 1287 | PORT_START("IN.0") // port A |
| 1288 | PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) |
| 1289 | PORT_CONFSETTING( 0x00, "Amateur" ) |
| 1290 | PORT_CONFSETTING( 0x01, "Professional" ) |
| 1291 | PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 1292 | |
| 1293 | PORT_START("IN.1") // port B |
| 1294 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) |
| 1295 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) |
| 1296 | PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 1297 | INPUT_PORTS_END |
| 1298 | |
| 1299 | static MACHINE_CONFIG_START( tmscramb, tmscramb_state ) |
| 1300 | |
| 1301 | /* basic machine hardware */ |
| 1302 | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 1303 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) |
| 1304 | MCFG_UCOM4_READ_B_CB(IOPORT("IN.1")) |
| 1305 | MCFG_UCOM4_WRITE_C_CB(WRITE8(tmscramb_state, grid_w)) |
| 1306 | MCFG_UCOM4_WRITE_D_CB(WRITE8(tmscramb_state, grid_w)) |
| 1307 | MCFG_UCOM4_WRITE_E_CB(WRITE8(tmscramb_state, plate_w)) |
| 1308 | MCFG_UCOM4_WRITE_F_CB(WRITE8(tmscramb_state, plate_w)) |
| 1309 | MCFG_UCOM4_WRITE_G_CB(WRITE8(tmscramb_state, plate_w)) |
| 1310 | MCFG_UCOM4_WRITE_H_CB(WRITE8(tmscramb_state, plate_w)) |
| 1311 | MCFG_UCOM4_WRITE_I_CB(WRITE8(tmscramb_state, grid_w)) |
| 1312 | |
| 1313 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 1314 | MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test) |
| 1315 | |
| 1316 | /* no video! */ |
| 1317 | |
| 1318 | /* sound hardware */ |
| 1319 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 1320 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 1321 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 1322 | MACHINE_CONFIG_END |
| 1323 | |
| 1324 | |
| 1325 | |
| 1326 | |
| 1327 | |
| 1328 | /*************************************************************************** |
| 1329 | |
| 1330 | Tomy(tronic) Caveman (manufactured in Japan) |
| 1331 | * PCBs are labeled TN-12 2E114E03 |
| 1332 | * NEC uCOM-43 MCU, labeled D553C 209 |
| 1333 | * cyan/red/green VFD display NEC FIP8AM20T no. 2-42 |
| 1334 | |
| 1335 | known releases: |
| 1336 | - World: Caveman |
| 1337 | - USA: Caveman, published by Tandy |
| 1338 | - UK: Cave Man - Jr. Caveman vs Dinosaur, published by Grandstand |
| 1339 | |
| 1340 | NOTE!: MESS external artwork is recommended |
| 1341 | |
| 1342 | ***************************************************************************/ |
| 1343 | |
| 1344 | class tcaveman_state : public hh_ucom4_state |
| 1345 | { |
| 1346 | public: |
| 1347 | tcaveman_state(const machine_config &mconfig, device_type type, const char *tag) |
| 1348 | : hh_ucom4_state(mconfig, type, tag) |
| 1349 | { } |
| 1350 | |
| 1351 | void prepare_display(); |
| 1352 | DECLARE_WRITE8_MEMBER(grid_w); |
| 1353 | DECLARE_WRITE8_MEMBER(plate_w); |
| 1354 | }; |
| 1355 | |
| 1356 | // handlers |
| 1357 | |
| 1358 | void tcaveman_state::prepare_display() |
| 1359 | { |
| 1360 | UINT8 grid = BITSWAP8(m_grid,0,1,2,3,4,5,6,7); |
| 1361 | UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,10,11,5,6,7,8,0,9,2,18,17,16,3,15,14,13,12,4,1); |
| 1362 | display_matrix(19, 8, plate, grid); |
| 1363 | } |
| 1364 | |
| 1365 | WRITE8_MEMBER(tcaveman_state::grid_w) |
| 1366 | { |
| 1367 | // C,D: vfd matrix grid |
| 1368 | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 1369 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 1370 | prepare_display(); |
| 1371 | } |
| 1372 | |
| 1373 | WRITE8_MEMBER(tcaveman_state::plate_w) |
| 1374 | { |
| 1375 | // E3: speaker out |
| 1376 | if (offset == NEC_UCOM4_PORTE) |
| 1377 | m_speaker->level_w(data >> 3 & 1); |
| 1378 | |
| 1379 | // E012,F,G,H,I: vfd matrix plate |
| 1380 | int shift = (offset - NEC_UCOM4_PORTE) * 4; |
| 1381 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 1382 | prepare_display(); |
| 1383 | } |
| 1384 | |
| 1385 | |
| 1386 | // config |
| 1387 | |
| 1388 | static INPUT_PORTS_START( tcaveman ) |
| 1389 | PORT_START("IN.0") // port A |
| 1390 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) |
| 1391 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) |
| 1392 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 1393 | PORT_CONFNAME( 0x08, 0x00, DEF_STR( Difficulty ) ) |
| 1394 | PORT_CONFSETTING( 0x00, "Amateur" ) |
| 1395 | PORT_CONFSETTING( 0x08, "Professional" ) |
| 1396 | INPUT_PORTS_END |
| 1397 | |
| 1398 | static MACHINE_CONFIG_START( tcaveman, tcaveman_state ) |
| 1399 | |
| 1400 | /* basic machine hardware */ |
| 1401 | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 1402 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) |
| 1403 | MCFG_UCOM4_WRITE_C_CB(WRITE8(tcaveman_state, grid_w)) |
| 1404 | MCFG_UCOM4_WRITE_D_CB(WRITE8(tcaveman_state, grid_w)) |
| 1405 | MCFG_UCOM4_WRITE_E_CB(WRITE8(tcaveman_state, plate_w)) |
| 1406 | MCFG_UCOM4_WRITE_F_CB(WRITE8(tcaveman_state, plate_w)) |
| 1407 | MCFG_UCOM4_WRITE_G_CB(WRITE8(tcaveman_state, plate_w)) |
| 1408 | MCFG_UCOM4_WRITE_H_CB(WRITE8(tcaveman_state, plate_w)) |
| 1409 | MCFG_UCOM4_WRITE_I_CB(WRITE8(tcaveman_state, plate_w)) |
| 1410 | |
| 1411 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 1412 | MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test) |
| 1413 | |
| 1414 | /* no video! */ |
| 1415 | |
| 1416 | /* sound hardware */ |
| 1417 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 1418 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 1419 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 1420 | MACHINE_CONFIG_END |
| 1421 | |
| 1422 | |
| 1423 | |
| 1424 | |
| 1425 | |
| 1426 | /*************************************************************************** |
| 1427 | |
| 1027 | 1428 | Tomy Alien Chase (manufactured in Japan) |
| 1028 | 1429 | * PCBs are labeled TN-16 2E121B01 |
| 1029 | 1430 | * NEC uCOM-43 MCU, labeled D553C 258 |
| r245706 | r245707 | |
| 1033 | 1434 | opposite player views it from the back side (through the conductive traces), |
| 1034 | 1435 | basically a mirror-image. |
| 1035 | 1436 | |
| 1036 | | This is a space-themed tabletop VFD electronic game. To start, simply |
| 1037 | | press [UP]. Hold a joystick direction to move around. |
| 1437 | To start the game, simply press [UP]. Hold a joystick direction to move around. |
| 1038 | 1438 | |
| 1039 | 1439 | NOTE!: MESS external artwork is recommended |
| 1040 | 1440 | |
| r245706 | r245707 | |
| 1161 | 1561 | |
| 1162 | 1562 | ***************************************************************************/ |
| 1163 | 1563 | |
| 1564 | ROM_START( ufombs ) |
| 1565 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 1566 | ROM_LOAD( "d552c-017", 0x0000, 0x0400, CRC(0e208cb3) SHA1(57db6566916c94325e2b67ccb94b4ea3b233487d) ) |
| 1567 | ROM_END |
| 1568 | |
| 1569 | |
| 1164 | 1570 | ROM_START( ssfball ) |
| 1165 | 1571 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1166 | 1572 | ROM_LOAD( "d553c-031", 0x0000, 0x0800, CRC(ff5d91d0) SHA1(9b2c0ae45f1e3535108ee5fef8a9010e00c8d5c3) ) |
| r245706 | r245707 | |
| 1173 | 1579 | ROM_END |
| 1174 | 1580 | |
| 1175 | 1581 | |
| 1582 | ROM_START( bcclimbr ) |
| 1583 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1584 | ROM_LOAD( "d553c-170", 0x0000, 0x0800, CRC(fc2eabdb) SHA1(0f5cc854be7fdf105d9bd2114659d40c65f9d782) ) |
| 1585 | ROM_END |
| 1586 | |
| 1587 | |
| 1176 | 1588 | ROM_START( astrocmd ) |
| 1177 | 1589 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1178 | 1590 | ROM_LOAD( "d553c-202.s01", 0x0000, 0x0800, CRC(b4b34883) SHA1(6246d561c2df1f2124575d2ca671ef85b1819edd) ) |
| r245706 | r245707 | |
| 1197 | 1609 | ROM_END |
| 1198 | 1610 | |
| 1199 | 1611 | |
| 1612 | ROM_START( tmscramb ) |
| 1613 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1614 | ROM_LOAD( "d553c-192", 0x0000, 0x0800, CRC(00fcc501) SHA1(a7771e934bf8268c83f38c7ec0acc668836e0939) ) |
| 1615 | ROM_END |
| 1616 | |
| 1617 | |
| 1618 | ROM_START( tcaveman ) |
| 1619 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1620 | ROM_LOAD( "d553c-209", 0x0000, 0x0800, CRC(d230d4b7) SHA1(2fb12b60410f5567c5e3afab7b8f5aa855d283be) ) |
| 1621 | ROM_END |
| 1622 | |
| 1623 | |
| 1200 | 1624 | ROM_START( alnchase ) |
| 1201 | 1625 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 1202 | 1626 | ROM_LOAD( "d553c-258", 0x0000, 0x0800, CRC(c5284ff5) SHA1(6a20aaacc9748f0e0335958f3cea482e36153704) ) |
| r245706 | r245707 | |
| 1204 | 1628 | |
| 1205 | 1629 | |
| 1206 | 1630 | |
| 1207 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ |
| 1208 | | CONS( 1979, ssfball, 0, 0, ssfball, ssfball, driver_device, 0, "Bambino", "Superstar Football", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1209 | | CONS( 1980, splasfgt, 0, 0, splasfgt, splasfgt, driver_device, 0, "Bambino", "Space Laser Fight", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1631 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ |
| 1632 | CONS( 1979, ufombs, 0, 0, ufombs, ufombs, driver_device, 0, "Bambino", "UFO Master-Blaster Station", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1633 | CONS( 1979, ssfball, 0, 0, ssfball, ssfball, driver_device, 0, "Bambino", "Superstar Football", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1634 | CONS( 1980, splasfgt, 0, 0, splasfgt, splasfgt, driver_device, 0, "Bambino", "Space Laser Fight", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1210 | 1635 | |
| 1211 | | CONS( 1982, astrocmd, 0, 0, astrocmd, astrocmd, driver_device, 0, "Epoch", "Astro Command", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1212 | | CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1636 | CONS( 1982, bcclimbr, 0, 0, bcclimbr, bcclimbr, driver_device, 0, "Bandai", "Crazy Climber (Bandai)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1213 | 1637 | |
| 1214 | | CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1215 | | CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1216 | | CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1638 | CONS( 1982, astrocmd, 0, 0, astrocmd, astrocmd, driver_device, 0, "Epoch", "Astro Command", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1639 | CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1640 | |
| 1641 | CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1642 | CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1643 | CONS( 1982, tmscramb, 0, 0, tmscramb, tmscramb, driver_device, 0, "Tomy", "Scramble (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1644 | CONS( 1982, tcaveman, 0, 0, tcaveman, tcaveman, driver_device, 0, "Tomy", "Caveman (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 1645 | CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |