diff options
Diffstat (limited to 'src/mess/drivers/supercon.c')
-rw-r--r-- | src/mess/drivers/supercon.c | 811 |
1 files changed, 0 insertions, 811 deletions
diff --git a/src/mess/drivers/supercon.c b/src/mess/drivers/supercon.c deleted file mode 100644 index 7c286f6b4c2..00000000000 --- a/src/mess/drivers/supercon.c +++ /dev/null @@ -1,811 +0,0 @@ -// license:??? -// copyright-holders:Ralf Schaefer, Robbbert -/****************************************************************************** - Novag SuperConstellation Chess Computer - 2010 R. Schaefer - - - CPU 6502 - Clock 4 MHz - IRQ CLK 600 Hz - - RAM 0x0000, 0x0fff) - ROM 0x2000, 0xffff) - I/O 0x1c00 Unknown - 0x1d00 Unknown - 0x1e00 LED's and buttons - 0x1f00 LED's, buttons and buzzer - - -******************************************************************************/ - -#include "emu.h" -#include "cpu/m6502/m6502.h" -#include "sound/beep.h" - - -class supercon_state : public driver_device -{ -public: - supercon_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_beep(*this, "beeper"), - m_b_white(*this, "B_WHITE"), - m_b_black(*this, "B_BLACK"), - m_b_clr(*this, "B_CLR"), - m_status_1(*this, "STATUS_1"), - m_status_2(*this, "STATUS_2"), - m_status_3(*this, "STATUS_3"), - m_status_4(*this, "STATUS_4"), - m_status_5(*this, "STATUS_5"), - m_status_6(*this, "STATUS_6"), - m_status_7(*this, "STATUS_7"), - m_status_8(*this, "STATUS_8"), - m_board_1(*this, "BOARD_1"), - m_board_2(*this, "BOARD_2"), - m_board_3(*this, "BOARD_3"), - m_board_4(*this, "BOARD_4"), - m_board_5(*this, "BOARD_5"), - m_board_6(*this, "BOARD_6"), - m_board_7(*this, "BOARD_7"), - m_board_8(*this, "BOARD_8") { } - - required_device<cpu_device> m_maincpu; - required_device<beep_device> m_beep; - DECLARE_READ8_MEMBER(supercon_port1_r); - DECLARE_READ8_MEMBER(supercon_port2_r); - DECLARE_READ8_MEMBER(supercon_port3_r); - DECLARE_READ8_MEMBER(supercon_port4_r); - DECLARE_WRITE8_MEMBER(supercon_port1_w); - DECLARE_WRITE8_MEMBER(supercon_port2_w); - DECLARE_WRITE8_MEMBER(supercon_port3_w); - DECLARE_WRITE8_MEMBER(supercon_port4_w); - static const UINT8 m_border_pieces[12]; - emu_timer* m_timer_update_irq; - emu_timer* m_timer_mouse_click; - int m_emu_started; - int m_moving_piece; - UINT8 m_data_1E00; - UINT8 m_data_1F00; - UINT8 m_LED_18; - UINT8 m_LED_AH; - UINT8 m_LED_ST; - UINT8 *m_last_LED; - UINT8 m_last_LED_value; - int m_led_update; - int m_remove_led_flag; - int m_selecting; - int m_save_key_data; - attotime m_wait_time; - int *m_current_field; - int m_confirm_board_click; - int m_board[64]; - int m_save_board[64]; - void set_board(); - void set_pieces(); - void set_border_pieces(); - void clear_pieces(); - void update_leds(); - virtual void machine_reset(); - DECLARE_DRIVER_INIT(supercon); - virtual void machine_start(); - TIMER_CALLBACK_MEMBER(mouse_click); - TIMER_CALLBACK_MEMBER(update_irq); - TIMER_DEVICE_CALLBACK_MEMBER(update_artwork); - void board_presave(); - void board_postload(); - -protected: - required_ioport m_b_white; - required_ioport m_b_black; - required_ioport m_b_clr; - required_ioport m_status_1; - required_ioport m_status_2; - required_ioport m_status_3; - required_ioport m_status_4; - required_ioport m_status_5; - required_ioport m_status_6; - required_ioport m_status_7; - required_ioport m_status_8; - required_ioport m_board_1; - required_ioport m_board_2; - required_ioport m_board_3; - required_ioport m_board_4; - required_ioport m_board_5; - required_ioport m_board_6; - required_ioport m_board_7; - required_ioport m_board_8; - void mouse_update(); - int get_first_cleared_bit(UINT8 data); - int get_first_bit(UINT8 data); -}; - - -#define VERBOSE 0 -#define LOG(x) do { if (VERBOSE) logerror x; } while (0) - -enum -{ - EM, /*No piece*/ - BP, - BN, - BB, - BR, - BQ, - BK, - WP, - WN, - WB, - WR, - WQ, - WK -}; - - -#define LED_LINE_AH 0x10 -#define LED_LINE_ST 0x20 -#define LED_LINE_18 0x40 - - -#define MAIN_CLOCK 4000000 /* 4 MHz */ - -#define NOT_VALID 99 - -#define NO_ACTION 0 -#define TAKE 1 -#define SET 2 - -/* artwork board */ - -const UINT8 supercon_state::m_border_pieces[12] = {WK,WQ,WR,WB,WN,WP,BK,BQ,BR,BB,BN,BP}; - -void supercon_state::set_board() -{ - static const int start_board[64] = { - BR, BN, BB, BQ, BK, BB, BN, BR, - BP, BP, BP, BP, BP, BP, BP, BP, - EM, EM, EM, EM, EM, EM, EM, EM, - EM, EM, EM, EM, EM, EM, EM, EM, - EM, EM, EM, EM, EM, EM, EM, EM, - EM, EM, EM, EM, EM, EM, EM, EM, - WP, WP, WP, WP, WP, WP, WP, WP, - WR, WN, WB, WQ, WK, WB, WN, WR }; - - for (UINT8 i=0; i<64; i++) - m_board[i]=start_board[i]; -} - -void supercon_state::set_pieces() -{ - int i; - for (i=0;i<64;i++) - output_set_indexed_value("P", i, m_board[i]); -} - -void supercon_state::set_border_pieces() -{ - UINT8 i; - - for (i=0;i<12;i++) - output_set_indexed_value("Q", i, m_border_pieces[i]); -} - -void supercon_state::clear_pieces() -{ - int i; - for (i=0;i<64;i++) - { - output_set_indexed_value("P", i, EM); - m_board[i]=EM; - } -} - -int supercon_state::get_first_cleared_bit(UINT8 data) -{ - int i; - - for (i = 0; i < 8; i++) - if (!BIT(data, i)) - return i; - - return NOT_VALID; -} - -int supercon_state::get_first_bit(UINT8 data) -{ - int i; - - for (i = 0; i < 8; i++) - if (BIT(data, i)) - return i; - - return NOT_VALID; -} - - -void supercon_state::update_leds() -{ - int i; - - for (i = 0; i < 8; i++) - { - if (BIT(m_LED_18, i)) - output_set_led_value(i + 1, 1); - else - output_set_led_value(i + 1, 0); - - if (BIT(m_LED_AH, i)) - output_set_led_value(i + 9, 1); - else - output_set_led_value(i + 9, 0); - - if (BIT(m_LED_ST, i)) - output_set_led_value(i + 17, 1); - else - output_set_led_value(i + 17, 0); - } -} - -void supercon_state::mouse_update() -{ - UINT8 port_input; // m_left; - int i; - -/* border pieces and moving piece */ - - port_input = m_b_white->read(); - if (port_input) - { - i = get_first_bit(port_input); - m_moving_piece = m_border_pieces[i]; - output_set_value("MOVING", m_moving_piece); - return; - } - - - port_input = m_b_black->read(); - if (port_input) - { - i = get_first_bit(port_input); - m_moving_piece = m_border_pieces[6+i]; - output_set_value("MOVING", m_moving_piece); - return; - } - - - port_input = m_b_clr->read(); - if (port_input) - { - if (m_moving_piece) - { - m_moving_piece=0; - output_set_value("MOVING", m_moving_piece); - return; - } - } -} - -/* Driver initialization */ - -DRIVER_INIT_MEMBER(supercon_state,supercon) -{ - m_LED_18=0; - m_LED_AH=0; - m_LED_ST=0; - - m_wait_time = attotime::from_hz(4); - m_save_key_data = 0xff; - - m_moving_piece=0; -} - -/* Read 1C000 */ - -READ8_MEMBER( supercon_state::supercon_port1_r ) -{ - LOG(("Read from %04x \n",0x1C00)); - return 0xff; -} - -/* Read 1D000 */ - -READ8_MEMBER( supercon_state::supercon_port2_r ) -{ - LOG(("Read from %04x \n",0x1D00)); - return 0xff; -} - -/* Read 1E00 */ - -READ8_MEMBER( supercon_state::supercon_port3_r ) -{ - int i; - UINT8 key_data=0; - - static const char *const status_lines[8] = - { "STATUS_1", "STATUS_2", "STATUS_3", "STATUS_4", "STATUS_5", "STATUS_6", "STATUS_7", "STATUS_8" }; - - LOG(("Read from %04x \n",0x1E00)); - -/* remove last bit (only if it was not already set) */ - - if ( m_data_1F00 & LED_LINE_AH ) - { - if (m_last_LED_value != m_LED_AH) - m_LED_AH=m_LED_AH & ~m_data_1E00; - } - else if ( m_data_1F00 & LED_LINE_ST) - { - if (m_last_LED_value != m_LED_ST) - m_LED_ST=m_LED_ST & ~m_data_1E00; - } - else if ( m_data_1F00 & LED_LINE_18 ) - { - if (m_last_LED_value != m_LED_18) - m_LED_18=m_LED_18 & ~m_data_1E00; - } - - - LOG(("LED_18 from %02x \n",m_LED_18)); - LOG(("LED_AH from %02x \n",m_LED_AH)); - LOG(("LED_ST from %02x \n",m_LED_ST)); - - if (m_led_update) /*No LED Update if Port 1C00,1D00 was read */ - update_leds(); - - m_remove_led_flag=TRUE; - m_led_update=TRUE; - - m_LED_18=0; - m_LED_AH=0; - m_LED_ST=0; - - -/* Start */ - - if (!m_emu_started) - return 0xbf; - else - m_timer_update_irq->adjust( attotime::zero, 0, attotime::from_hz(598) ); //HACK adjust timer after start ??? - - -/* Buttons */ - - i=get_first_bit(m_data_1E00); - if (i==NOT_VALID) - return 0xff; - - switch ( i ) - { - case 0: key_data=m_status_1->read(); break; - case 1: key_data=m_status_2->read(); break; - case 2: key_data=m_status_3->read(); break; - case 3: key_data=m_status_4->read(); break; - case 4: key_data=m_status_5->read(); break; - case 5: key_data=m_status_6->read(); break; - case 6: key_data=m_status_7->read(); break; - case 7: key_data=m_status_8->read(); break; - } - - if (key_data != 0xc0) - { - LOG(("%s, key_data: %02x \n",status_lines[i],key_data)); - -/* Button: New Game -> initialize board */ - - if (i==0 && key_data==0x80) - { - set_board(); - set_pieces(); - - m_emu_started=FALSE; - } - -/* Button: Clear Board -> remove all pieces */ - - if (i==3 && key_data==0x80) - clear_pieces(); - - if (key_data != 0xff ) - return key_data; - } - - return 0xc0; -} - -/* Read Port $1F00 */ - -READ8_MEMBER( supercon_state::supercon_port4_r ) -{ - int i_18, i_AH; - UINT8 key_data = 0x00; - - static const char *const board_lines[8] = - { "BOARD_1", "BOARD_2", "BOARD_3", "BOARD_4", "BOARD_5", "BOARD_6", "BOARD_7", "BOARD_8" }; - - LOG(("Read from %04x \n",0x1F00)); - -/* Board buttons */ - - i_18=get_first_bit(m_data_1E00); - if (i_18==NOT_VALID) - return 0xff; - -/* if a button was pressed wait til timer -timer_mouse_click- is fired */ - - if (m_selecting) - return m_save_key_data; - else - { - set_pieces(); - output_set_value("MOVING",m_moving_piece); - } - - switch ( i_18 ) - { - case 0: key_data=m_board_1->read(); break; - case 1: key_data=m_board_2->read(); break; - case 2: key_data=m_board_3->read(); break; - case 3: key_data=m_board_4->read(); break; - case 4: key_data=m_board_5->read(); break; - case 5: key_data=m_board_6->read(); break; - case 6: key_data=m_board_7->read(); break; - case 7: key_data=m_board_8->read(); break; - } - - if (key_data != 0xff) - { - LOG(("%s key_data: %02x \n",board_lines[i_18],key_data)); - -/* Only if valid data */ - - if (key_data) - { -/* Set or remove pieces */ - - i_AH=7-get_first_cleared_bit(key_data); - LOG(("Press -> AH: %d 18: %d Piece: %d\n",i_AH,i_18,m_board[i_18*8 + i_AH]);); - - m_current_field=&m_board[i_18*8 + i_AH]; - - if (m_moving_piece) - { - *m_current_field = m_moving_piece; - m_moving_piece = EM; - } - else - { - m_moving_piece = *m_current_field; - *m_current_field = EM; - } - m_selecting=TRUE; /* Flag is removed in timer -timer_mouse_click- */ - m_save_key_data=key_data; /* return same key_data til flag selecting is removed */ - - m_timer_mouse_click->adjust(m_wait_time, 0); - - return key_data; - } - } - - return 0xff; -} - -/* Write Port $1C00 */ - -WRITE8_MEMBER( supercon_state::supercon_port1_w ) -{ - LOG(("Write from %04x data: %02x\n",0x1C00,data)); - m_led_update=FALSE; -} - -/* Write Port $1D00 */ - -WRITE8_MEMBER( supercon_state::supercon_port2_w ) -{ - LOG(("Write from %04x data: %02x\n",0x1D00,data)); - m_led_update=FALSE; -} - -/* Write Port $1E00 */ - -WRITE8_MEMBER( supercon_state::supercon_port3_w ) -{ - if (data) - LOG(("Write from %04x data: %02x\n",0x1E00,data)); - - if (data) - { - m_data_1E00=data; - -/* Set bits for LED's */ - - if ( m_data_1F00) - { - if (m_data_1F00 & LED_LINE_AH ) - { - m_last_LED = &m_LED_AH; /* save last value */ - m_last_LED_value = *m_last_LED; - - m_LED_AH=m_LED_AH | m_data_1E00; - } - else if (m_data_1F00 & LED_LINE_ST ) - { - m_last_LED = &m_LED_ST; - m_last_LED_value = *m_last_LED; - - m_LED_ST=m_LED_ST | m_data_1E00; - } - else if (m_data_1F00 & LED_LINE_18) - { - m_last_LED = &m_LED_18; - m_last_LED_value = *m_last_LED; - - m_LED_18=m_LED_18 | m_data_1E00; - } - } - } - - // The IRQ handler writes to both 0x1E00 (1x) and 0x1F00 (2x) ports. - // Not 100% sure if this is the correct place for clearing the IRQ - // line. - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); -} - -/* Write Port $1F00 */ - -WRITE8_MEMBER( supercon_state::supercon_port4_w ) -{ - if (data) - LOG(("Write from %04x data: %02x\n",0x1F00,data)); - - if (data) - m_data_1F00=data; - -/* Bit 7 is set -> Buzzer on */ - - if ( m_data_1F00 & 0x80 ) - { - m_beep->set_state(1); - m_emu_started=TRUE; - } - else - m_beep->set_state(0); -} - -TIMER_CALLBACK_MEMBER(supercon_state::mouse_click) -{ - m_selecting=FALSE; -} - -TIMER_DEVICE_CALLBACK_MEMBER(supercon_state::update_artwork) -{ - mouse_update(); -} - -TIMER_CALLBACK_MEMBER(supercon_state::update_irq) -{ - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); -} - -/* Save state call backs */ - -void supercon_state::board_presave() -{ - for (int i=0;i<64;i++) - { - m_save_board[i] = m_board[i]; - } -} - -void supercon_state::board_postload() -{ - for (int i=0;i<64;i++) - { - m_board[i] = m_save_board[i]; - } - - set_pieces(); -} - -void supercon_state::machine_start() -{ - m_timer_update_irq = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supercon_state::update_irq),this)); - m_timer_update_irq->adjust( attotime::zero, 0, attotime::from_hz(1000) ); - m_timer_mouse_click = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supercon_state::mouse_click),this),NULL); - save_item(NAME(m_save_board)); - machine().save().register_postload(save_prepost_delegate(FUNC(supercon_state::board_postload),this)); - machine().save().register_presave(save_prepost_delegate(FUNC(supercon_state::board_presave),this)); -} - -void supercon_state::machine_reset() -{ - set_board(); - set_pieces(); - set_border_pieces(); - - m_emu_started=FALSE; -} - -/* Address maps */ - -static ADDRESS_MAP_START(supercon_mem, AS_PROGRAM, 8, supercon_state) - AM_RANGE( 0x0000, 0x0fff) AM_RAM - AM_RANGE( 0x2000, 0x7fff) AM_ROM - AM_RANGE( 0x8000, 0xffff) AM_ROM - - AM_RANGE( 0x1C00, 0x1C00) AM_WRITE ( supercon_port1_w ) - AM_RANGE( 0x1D00, 0x1D00) AM_WRITE ( supercon_port2_w ) - AM_RANGE( 0x1E00, 0x1E00) AM_WRITE ( supercon_port3_w ) - AM_RANGE( 0x1F00, 0x1F00) AM_WRITE ( supercon_port4_w ) - - AM_RANGE( 0x1C00, 0x1C00) AM_READ ( supercon_port1_r ) - AM_RANGE( 0x1D00, 0x1D00) AM_READ ( supercon_port2_r ) - AM_RANGE( 0x1E00, 0x1E00) AM_READ ( supercon_port3_r ) - AM_RANGE( 0x1F00, 0x1F00) AM_READ ( supercon_port4_r ) -ADDRESS_MAP_END - -/* Input ports */ - -static INPUT_PORTS_START( supercon ) - - PORT_START("BOARD_1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_6") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("BOARD_8") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_1") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_2") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_3") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_4") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_5") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_6") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_7") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("STATUS_8") - PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) - PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) - - PORT_START("B_WHITE") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) - - PORT_START("B_BLACK") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) - PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) - - PORT_START("B_CLR") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) - -INPUT_PORTS_END - -/* Machine driver */ -static MACHINE_CONFIG_START( supercon, supercon_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu",M6502,MAIN_CLOCK) - MCFG_CPU_PROGRAM_MAP(supercon_mem) - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("beeper", BEEP, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", supercon_state, update_artwork, attotime::from_hz(20)) -MACHINE_CONFIG_END - -/* ROM definition */ - -ROM_START(supercon) - ROM_REGION(0x10000,"maincpu",0) - ROM_LOAD("supercon_low.bin", 0x0000, 0x8000, CRC(b853cf6e) SHA1(1a759072a5023b92c07f1fac01b7a21f7b5b45d0 )) - ROM_LOAD("supercon_high.bin", 0x8000, 0x8000, CRC(c8f82331) SHA1(f7fd039f9a3344db9749931490ded9e9e309cfbe )) -ROM_END - -/* Driver */ - -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ -CONS( 1983, supercon, 0, 0, supercon, supercon, supercon_state, supercon, "Novag", "SuperConstellation", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) |