trunk/src/mame/drivers/s11a.c
| r19679 | r19680 | |
| 7 | 7 | |
| 8 | 8 | |
| 9 | 9 | ToDo: |
| 10 | | - Determine what drives the background sound (atm it's a guess) |
| 11 | 10 | - Can coin up but not start |
| 11 | - Doesn't react to the Advance button very well |
| 12 | - Some LEDs flicker |
| 13 | - Diagnostic LED flips between 7 and 0 regularly |
| 12 | 14 | |
| 13 | 15 | *****************************************************************************************/ |
| 14 | 16 | |
| r19679 | r19680 | |
| 66 | 68 | DECLARE_READ_LINE_MEMBER(pia21_ca1_r); |
| 67 | 69 | DECLARE_READ_LINE_MEMBER(pia28_ca1_r); |
| 68 | 70 | DECLARE_READ_LINE_MEMBER(pia28_cb1_r); |
| 71 | DECLARE_READ8_MEMBER(pia28_w7_r); |
| 69 | 72 | DECLARE_WRITE_LINE_MEMBER(pias_ca2_w); |
| 70 | 73 | DECLARE_WRITE_LINE_MEMBER(pias_cb2_w); |
| 71 | 74 | DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w); |
| r19679 | r19680 | |
| 98 | 101 | required_device<pia6821_device> m_pia34; |
| 99 | 102 | required_device<pia6821_device> m_pia40; |
| 100 | 103 | private: |
| 101 | | UINT8 m_t_c; |
| 102 | 104 | UINT8 m_sound_data; |
| 103 | 105 | UINT8 m_strobe; |
| 104 | 106 | UINT8 m_kbdrow; |
| 107 | UINT8 m_diag; |
| 105 | 108 | UINT32 m_segment1; |
| 106 | 109 | UINT32 m_segment2; |
| 107 | 110 | bool m_ca1; |
| 108 | 111 | }; |
| 109 | 112 | |
| 110 | 113 | static ADDRESS_MAP_START( s11a_main_map, AS_PROGRAM, 8, s11a_state ) |
| 111 | | AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram") |
| 112 | | AM_RANGE(0x2100, 0x2103) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids |
| 113 | | AM_RANGE(0x2200, 0x2200) AM_WRITE(sol3_w) // solenoids |
| 114 | | AM_RANGE(0x2400, 0x2403) AM_DEVREADWRITE("pia24", pia6821_device, read, write) // lamps |
| 115 | | AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia28", pia6821_device, read, write) // display |
| 116 | | AM_RANGE(0x2c00, 0x2c03) AM_DEVREADWRITE("pia2c", pia6821_device, read, write) // alphanumeric display |
| 117 | | AM_RANGE(0x3000, 0x3003) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs |
| 118 | | AM_RANGE(0x3400, 0x3403) AM_DEVREADWRITE("pia34", pia6821_device, read, write) // widget |
| 114 | AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram") |
| 115 | AM_RANGE(0x2100, 0x2103) AM_MIRROR(0x00fc) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids |
| 116 | AM_RANGE(0x2200, 0x2200) AM_MIRROR(0x01ff) AM_WRITE(sol3_w) // solenoids |
| 117 | AM_RANGE(0x2400, 0x2403) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia24", pia6821_device, read, write) // lamps |
| 118 | AM_RANGE(0x2800, 0x2803) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia28", pia6821_device, read, write) // display |
| 119 | AM_RANGE(0x2c00, 0x2c03) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia2c", pia6821_device, read, write) // alphanumeric display |
| 120 | AM_RANGE(0x3000, 0x3003) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs |
| 121 | AM_RANGE(0x3400, 0x3403) AM_MIRROR(0x0bfc) AM_DEVREADWRITE("pia34", pia6821_device, read, write) // widget |
| 119 | 122 | AM_RANGE(0x4000, 0xffff) AM_ROM |
| 120 | 123 | ADDRESS_MAP_END |
| 121 | 124 | |
| r19679 | r19680 | |
| 209 | 212 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, s11a_state, main_nmi, 1) |
| 210 | 213 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_0) |
| 211 | 214 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_9) |
| 215 | PORT_CONFNAME( 0x10, 0x10, "Language" ) |
| 216 | PORT_CONFSETTING( 0x00, "German" ) |
| 217 | PORT_CONFSETTING( 0x10, "English" ) |
| 212 | 218 | INPUT_PORTS_END |
| 213 | 219 | |
| 214 | 220 | MACHINE_RESET_MEMBER( s11a_state, s11a ) |
| 215 | 221 | { |
| 216 | | m_t_c = 0; |
| 217 | 222 | membank("bank0")->set_entry(0); |
| 218 | 223 | membank("bank1")->set_entry(0); |
| 219 | 224 | } |
| r19679 | r19680 | |
| 289 | 294 | |
| 290 | 295 | READ_LINE_MEMBER( s11a_state::pia28_ca1_r ) |
| 291 | 296 | { |
| 292 | | return BIT(ioport("DIAGS")->read(), 2); // advance button |
| 297 | return BIT(ioport("DIAGS")->read(), 2) ? 1 : 0; // advance button |
| 293 | 298 | } |
| 294 | 299 | |
| 295 | 300 | READ_LINE_MEMBER( s11a_state::pia28_cb1_r ) |
| 296 | 301 | { |
| 297 | | return BIT(ioport("DIAGS")->read(), 3); // up/down switch |
| 302 | return BIT(ioport("DIAGS")->read(), 3) ? 1 : 0; // up/down switch |
| 298 | 303 | } |
| 299 | 304 | |
| 300 | 305 | WRITE8_MEMBER( s11a_state::dig0_w ) |
| r19679 | r19680 | |
| 302 | 307 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 |
| 303 | 308 | data &= 0x7f; |
| 304 | 309 | m_strobe = data & 15; |
| 305 | | output_set_digit_value(60, patterns[data>>4]); // diag digit |
| 310 | m_diag = (data & 0x70) >> 4; |
| 311 | output_set_digit_value(60, patterns[m_diag]); // diag digit |
| 306 | 312 | m_segment1 = 0; |
| 307 | 313 | m_segment2 = 0; |
| 308 | 314 | } |
| r19679 | r19680 | |
| 318 | 324 | } |
| 319 | 325 | } |
| 320 | 326 | |
| 327 | READ8_MEMBER( s11a_state::pia28_w7_r) |
| 328 | { |
| 329 | UINT8 ret = 0x80; |
| 330 | |
| 331 | ret |= m_strobe; |
| 332 | ret |= m_diag << 4; |
| 333 | |
| 334 | if(BIT(ioport("DIAGS")->read(), 4)) // W7 Jumper |
| 335 | ret &= ~0x80; |
| 336 | |
| 337 | return ret; |
| 338 | } |
| 339 | |
| 321 | 340 | static const pia6821_interface pia28_intf = |
| 322 | 341 | { |
| 323 | | DEVCB_NULL, /* port A in */ |
| 342 | DEVCB_DRIVER_MEMBER(s11a_state, pia28_w7_r), /* port A in */ |
| 324 | 343 | DEVCB_NULL, /* port B in */ |
| 325 | 344 | DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia28_ca1_r), /* line CA1 in */ |
| 326 | 345 | DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia28_cb1_r), /* line CB1 in */ |
| r19679 | r19680 | |
| 517 | 536 | |
| 518 | 537 | TIMER_DEVICE_CALLBACK_MEMBER( s11a_state::irq) |
| 519 | 538 | { |
| 520 | | if (m_t_c > 0x70) |
| 521 | | { |
| 522 | | m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE); |
| 523 | | m_pias->cb1_w(0); |
| 524 | | } |
| 525 | | else |
| 526 | | m_t_c++; |
| 539 | m_maincpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE); |
| 540 | m_pias->cb1_w(0); |
| 527 | 541 | } |
| 528 | 542 | |
| 529 | 543 | static MACHINE_CONFIG_START( s11a, s11a_state ) |
| 530 | 544 | /* basic machine hardware */ |
| 531 | | MCFG_CPU_ADD("maincpu", M6800, 4000000) |
| 545 | MCFG_CPU_ADD("maincpu", M6802, 4000000) |
| 532 | 546 | MCFG_CPU_PROGRAM_MAP(s11a_main_map) |
| 533 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11a_state, irq, attotime::from_hz(250)) |
| 547 | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11a_state, irq, attotime::from_hz(1000)) |
| 534 | 548 | MCFG_MACHINE_RESET_OVERRIDE(s11a_state, s11a) |
| 535 | 549 | |
| 536 | 550 | /* Video */ |
| r19679 | r19680 | |
| 591 | 605 | ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9)) |
| 592 | 606 | |
| 593 | 607 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 594 | | ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 608 | ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 595 | 609 | ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377)) |
| 596 | 610 | ROM_END |
| 597 | 611 | |
| r19679 | r19680 | |
| 605 | 619 | ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9)) |
| 606 | 620 | |
| 607 | 621 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 608 | | ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 622 | ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 609 | 623 | ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377)) |
| 610 | 624 | ROM_END |
| 611 | 625 | |
| r19679 | r19680 | |
| 619 | 633 | ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9)) |
| 620 | 634 | |
| 621 | 635 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 622 | | ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 636 | ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d)) |
| 623 | 637 | ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377)) |
| 624 | 638 | ROM_END |
| 625 | 639 | |
| r19679 | r19680 | |
| 656 | 670 | ROM_LOAD("mill_u22.l1", 0x10000, 0x8000, CRC(73735cfc) SHA1(f74c873a20990263e0d6b35609fc51c08c9f8e31)) |
| 657 | 671 | |
| 658 | 672 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 659 | | ROM_LOAD("mill_u4.l1", 0x00000, 0x8000, CRC(cf766506) SHA1(a6e4df19a513102abbce2653d4f72245f54407b1)) |
| 673 | ROM_LOAD("mill_u4.l1", 0x08000, 0x8000, CRC(cf766506) SHA1(a6e4df19a513102abbce2653d4f72245f54407b1)) |
| 660 | 674 | ROM_LOAD("mill_u19.l1", 0x10000, 0x8000, CRC(e073245a) SHA1(cbaddde6bb19292ace574a8329e18c97c2ee9763)) |
| 661 | 675 | ROM_END |
| 662 | 676 | |
| r19679 | r19680 | |
| 673 | 687 | ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4)) |
| 674 | 688 | |
| 675 | 689 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 676 | | ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 690 | ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 677 | 691 | ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998)) |
| 678 | 692 | ROM_END |
| 679 | 693 | |
| r19679 | r19680 | |
| 687 | 701 | ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4)) |
| 688 | 702 | |
| 689 | 703 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 690 | | ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 704 | ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 691 | 705 | ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998)) |
| 692 | 706 | ROM_END |
| 693 | 707 | |
| r19679 | r19680 | |
| 701 | 715 | ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4)) |
| 702 | 716 | |
| 703 | 717 | ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF) |
| 704 | | ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 718 | ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228)) |
| 705 | 719 | ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998)) |
| 706 | 720 | ROM_END |
| 707 | 721 | |
trunk/src/mame/drivers/s11.c
| r19679 | r19680 | |
| 101 | 101 | required_device<pia6821_device> m_pia34; |
| 102 | 102 | required_device<pia6821_device> m_pia40; |
| 103 | 103 | private: |
| 104 | | UINT8 m_t_c; |
| 105 | 104 | UINT8 m_sound_data; |
| 106 | 105 | UINT8 m_strobe; |
| 107 | 106 | UINT8 m_kbdrow; |
| 107 | UINT8 m_diag; |
| 108 | 108 | UINT32 m_segment1; |
| 109 | 109 | UINT32 m_segment2; |
| 110 | 110 | bool m_ca1; |
| r19679 | r19680 | |
| 212 | 212 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, s11_state, main_nmi, 1) |
| 213 | 213 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_0) |
| 214 | 214 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_9) PORT_TOGGLE |
| 215 | | PORT_CONFNAME( 0x10, 0x00, "Language" ) |
| 215 | PORT_CONFNAME( 0x10, 0x10, "Language" ) |
| 216 | 216 | PORT_CONFSETTING( 0x00, "German" ) |
| 217 | 217 | PORT_CONFSETTING( 0x10, "English" ) |
| 218 | 218 | INPUT_PORTS_END |
| 219 | 219 | |
| 220 | 220 | MACHINE_RESET_MEMBER( s11_state, s11 ) |
| 221 | 221 | { |
| 222 | | m_t_c = 0; |
| 223 | 222 | membank("bank0")->set_entry(0); |
| 224 | 223 | membank("bank1")->set_entry(0); |
| 225 | 224 | } |
| r19679 | r19680 | |
| 308 | 307 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 |
| 309 | 308 | data &= 0x7f; |
| 310 | 309 | m_strobe = data & 15; |
| 310 | m_diag = (data & 0x70) >> 4; |
| 311 | 311 | output_set_digit_value(60, patterns[data>>4]); // diag digit |
| 312 | 312 | m_segment1 = 0; |
| 313 | 313 | m_segment2 = 0; |
| r19679 | r19680 | |
| 326 | 326 | |
| 327 | 327 | READ8_MEMBER( s11_state::pia28_w7_r) |
| 328 | 328 | { |
| 329 | UINT8 ret = 0x80; |
| 330 | |
| 331 | ret |= m_strobe; |
| 332 | ret |= m_diag << 4; |
| 333 | |
| 329 | 334 | if(BIT(ioport("DIAGS")->read(), 4)) // W7 Jumper |
| 330 | | return 0x00; |
| 331 | | return 0x80; |
| 335 | ret &= ~0x80; |
| 336 | |
| 337 | return ret; |
| 332 | 338 | } |
| 333 | 339 | |
| 334 | 340 | static const pia6821_interface pia28_intf = |
| r19679 | r19680 | |
| 538 | 544 | |
| 539 | 545 | TIMER_DEVICE_CALLBACK_MEMBER( s11_state::irq) |
| 540 | 546 | { |
| 541 | | if (m_t_c > 0x70) |
| 542 | | { |
| 543 | | m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE); |
| 544 | | m_pias->cb1_w(0); |
| 545 | | } |
| 546 | | else |
| 547 | | m_t_c++; |
| 547 | m_maincpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE); |
| 548 | m_pias->cb1_w(0); |
| 548 | 549 | } |
| 549 | 550 | |
| 550 | 551 | static MACHINE_CONFIG_START( s11, s11_state ) |
| 551 | 552 | /* basic machine hardware */ |
| 552 | | MCFG_CPU_ADD("maincpu", M6800, 4000000) |
| 553 | MCFG_CPU_ADD("maincpu", M6802, 4000000) |
| 553 | 554 | MCFG_CPU_PROGRAM_MAP(s11_main_map) |
| 554 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11_state, irq, attotime::from_hz(500)) |
| 555 | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11_state, irq, attotime::from_hz(1000)) |
| 555 | 556 | MCFG_MACHINE_RESET_OVERRIDE(s11_state, s11) |
| 556 | 557 | |
| 557 | 558 | /* Video */ |