From e3b06ea5f3c88641e1ece21b22e517c78b86f1ad Mon Sep 17 00:00:00 2001 From: fulivi Date: Sun, 5 Jul 2015 10:22:19 +0200 Subject: [PATCH 1/7] hp64k: oops, a spurious "x" slipped in --- src/mess/drivers/hp64k.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index 3c33333804e..37ad5231b45 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -1160,7 +1160,7 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) MCFG_SCREEN_REFRESH_RATE(60) MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette") - MCFG_FD1791_ADD("fdc" , XTAL_4MHz / 4) + MCFG_FD1791_ADD("fdc" , XTAL_4MHz / 4) MCFG_WD_FDC_FORCE_READY MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(hp64k_state , hp64k_flp_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(hp64k_state , hp64k_flp_drq_w)) From a7abd5aaac35af248b46a6ceccef7b704dfba120 Mon Sep 17 00:00:00 2001 From: fulivi Date: Sat, 8 Aug 2015 17:48:17 +0200 Subject: [PATCH 2/7] hp64k: first step of rs232 emulation --- src/mess/drivers/hp64k.c | 141 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 3 deletions(-) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index 37ad5231b45..fc992e77600 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -158,6 +158,8 @@ #include "machine/74123.h" #include "machine/rescap.h" #include "sound/beep.h" +#include "machine/clock.h" +#include "machine/i8251.h" #define BIT_MASK(n) (1U << (n)) @@ -165,6 +167,8 @@ #define BIT_CLR(w , n) ((w) &= ~BIT_MASK(n)) #define BIT_SET(w , n) ((w) |= BIT_MASK(n)) +#define BAUD_RATE_GEN_CLOCK 5068800 + class hp64k_state : public driver_device { public: @@ -212,9 +216,14 @@ public: void hp64k_floppy_wpt_cb(floppy_image_device *floppy , int state); DECLARE_READ16_MEMBER(hp64k_usart_r); + DECLARE_WRITE16_MEMBER(hp64k_usart_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_rxrdy_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_txrdy_w); DECLARE_WRITE16_MEMBER(hp64k_beep_w); TIMER_DEVICE_CALLBACK_MEMBER(hp64k_beeper_off); + + DECLARE_WRITE_LINE_MEMBER(hp64k_baud_clk_w); private: required_device m_cpu; required_device m_crtc; @@ -232,6 +241,9 @@ private: required_ioport m_rs232_sw; required_device m_beeper; required_device m_beep_timer; + required_device m_baud_rate; + required_ioport m_s5_sw; + required_device m_uart; // Character generator const UINT8 *m_chargen; @@ -281,6 +293,11 @@ private: floppy_state_t m_floppy_if_state; floppy_image_device *m_current_floppy; + + // RS232 I/F + bool m_16x_clk; + bool m_baud_clk; + UINT8 m_16x_div; }; static ADDRESS_MAP_START(cpu_mem_map , AS_PROGRAM , 16 , hp64k_state) @@ -300,6 +317,9 @@ static ADDRESS_MAP_START(cpu_io_map , AS_IO , 16 , hp64k_state) // PA = 4, IC = [0..3] // Floppy I/F AM_RANGE(HP_MAKE_IOADDR(4 , 0) , HP_MAKE_IOADDR(4 , 3)) AM_READWRITE(hp64k_flp_r , hp64k_flp_w) + // PA = 5, IC = [0..3] + // Write to USART + AM_RANGE(HP_MAKE_IOADDR(5 , 0) , HP_MAKE_IOADDR(5 , 3)) AM_WRITE(hp64k_usart_w) // PA = 6, IC = [0..3] // Read from USART AM_RANGE(HP_MAKE_IOADDR(6 , 0) , HP_MAKE_IOADDR(6 , 3)) AM_READ(hp64k_usart_r) @@ -334,7 +354,10 @@ hp64k_state::hp64k_state(const machine_config &mconfig, device_type type, const m_rear_panel_sw(*this , "rear_sw"), m_rs232_sw(*this , "rs232_sw"), m_beeper(*this , "beeper"), - m_beep_timer(*this , "beep_timer") + m_beep_timer(*this , "beep_timer"), + m_baud_rate(*this , "baud_rate"), + m_s5_sw(*this , "s5_sw"), + m_uart(*this , "uart") { } @@ -349,6 +372,26 @@ void hp64k_state::video_start() m_chargen = memregion("chargen")->base(); } +// Divisors of K1135 baud rate generator +static unsigned baud_rate_divisors[] = { + 6336, + 4224, + 2880, + 2355, + 2112, + 1056, + 528, + 264, + 176, + 158, + 132, + 88, + 66, + 44, + 33, + 16 +}; + void hp64k_state::machine_reset() { m_crtc_drq = false; @@ -372,6 +415,8 @@ void hp64k_state::machine_reset() m_floppy0_wpt = false; m_floppy1_wpt = false; m_beeper->set_state(0); + m_baud_rate->set_unscaled_clock(BAUD_RATE_GEN_CLOCK / baud_rate_divisors[ (m_s5_sw->read() >> 1) & 0xf ]); + m_16x_clk = (m_rs232_sw->read() & 0x02) != 0; } UINT8 hp64k_state::hp64k_crtc_filter(UINT8 data) @@ -895,9 +940,54 @@ void hp64k_state::hp64k_floppy_wpt_cb(floppy_image_device *floppy , int state) READ16_MEMBER(hp64k_state::hp64k_usart_r) { - // todo + UINT16 tmp; + + if ((offset & 1) == 0) { + tmp = m_uart->status_r(space , 0); + } else { + tmp = m_uart->data_r(space , 0); + } + // bit 8 == bit 7 rear panel switches (modem/terminal) ??? - return m_rs232_sw->read() << 8; + + tmp |= (m_rs232_sw->read() << 8); + + if (BIT(m_rear_panel_sw->read() , 7)) { + BIT_SET(tmp , 8); + } + + return tmp; +} + +WRITE16_MEMBER(hp64k_state::hp64k_usart_w) +{ + if ((offset & 1) == 0) { + m_uart->control_w(space , 0 , (UINT8)(data & 0xff)); + } else { + m_uart->data_w(space , 0 , (UINT8)(data & 0xff)); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_rxrdy_w) +{ + if (state) { + BIT_SET(m_irl_pending , 6); + } else { + BIT_CLR(m_irl_pending , 6); + } + + hp64k_update_irl(); +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_txrdy_w) +{ + if (state) { + BIT_SET(m_irl_pending , 5); + } else { + BIT_CLR(m_irl_pending , 5); + } + + hp64k_update_irl(); } WRITE16_MEMBER(hp64k_state::hp64k_beep_w) @@ -914,6 +1004,19 @@ TIMER_DEVICE_CALLBACK_MEMBER(hp64k_state::hp64k_beeper_off) m_beeper->set_state(0); } +WRITE_LINE_MEMBER(hp64k_state::hp64k_baud_clk_w) +{ + if (!m_16x_clk) { + if (state && !m_baud_clk) { + m_16x_div++; + } + m_baud_clk = !!state; + state = BIT(m_16x_div , 3); + } + m_uart->write_txc(state); + m_uart->write_rxc(state); +} + static INPUT_PORTS_START(hp64k) // Keyboard is arranged in a 8 x 16 matrix. Of the 128 possible positions, only 77 are used. // For key arrangement on the matrix, see [1] pg 334 @@ -1129,6 +1232,30 @@ static INPUT_PORTS_START(hp64k) PORT_DIPSETTING(0x00 , "1x") PORT_DIPSETTING(0x02 , "16x") + PORT_START("s5_sw") + PORT_DIPNAME(0x01 , 0x00 , "Duplex") + PORT_DIPLOCATION("S5 IO:!1") + PORT_DIPSETTING(0x00 , "Half duplex") + PORT_DIPSETTING(0x01 , "Full duplex") + PORT_DIPNAME(0x1e , 0x00 , "Baud rate") + PORT_DIPLOCATION("S5 IO:!5,!4,!3,!2") + PORT_DIPSETTING(0x00 , "50") + PORT_DIPSETTING(0x02 , "75") + PORT_DIPSETTING(0x04 , "110") + PORT_DIPSETTING(0x06 , "134.5") + PORT_DIPSETTING(0x08 , "150") + PORT_DIPSETTING(0x0a , "300") + PORT_DIPSETTING(0x0c , "600") + PORT_DIPSETTING(0x0e , "1200") + PORT_DIPSETTING(0x10 , "1800") + PORT_DIPSETTING(0x12 , "2000") + PORT_DIPSETTING(0x14 , "2400") + PORT_DIPSETTING(0x16 , "3600") + PORT_DIPSETTING(0x18 , "4800") + PORT_DIPSETTING(0x1a , "7200") + PORT_DIPSETTING(0x1c , "9600") + PORT_DIPSETTING(0x1e , "19200") + INPUT_PORTS_END static SLOT_INTERFACE_START(hp64k_floppies) @@ -1191,6 +1318,14 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) MCFG_SOUND_ROUTE(ALL_OUTPUTS , "mono" , 1.00) MCFG_TIMER_DRIVER_ADD("beep_timer" , hp64k_state , hp64k_beeper_off); + + MCFG_DEVICE_ADD("baud_rate" , CLOCK , 0) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(hp64k_state , hp64k_baud_clk_w)); + + MCFG_DEVICE_ADD("uart" , I8251 , 0) + MCFG_I8251_RXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_rxrdy_w)); + MCFG_I8251_TXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_txrdy_w)); + MACHINE_CONFIG_END ROM_START(hp64k) From 8678562f7ec1335b0d2eeb58c38cd2e3785ff24c Mon Sep 17 00:00:00 2001 From: fulivi Date: Tue, 11 Aug 2015 14:59:29 +0200 Subject: [PATCH 3/7] i8251: rx and tx data buffers separated --- src/emu/machine/i8251.c | 18 ++++++++++-------- src/emu/machine/i8251.h | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/emu/machine/i8251.c b/src/emu/machine/i8251.c index 362b3372574..e37da9fcb6b 100644 --- a/src/emu/machine/i8251.c +++ b/src/emu/machine/i8251.c @@ -107,7 +107,8 @@ void i8251_device::device_start() save_item(NAME(m_rxc_count)); save_item(NAME(m_txc_count)); save_item(NAME(m_br_factor)); - save_item(NAME(m_data)); + save_item(NAME(m_rx_data)); + save_item(NAME(m_tx_data)); save_item(NAME(m_tx_busy)); save_item(NAME(m_disable_tx_pending)); device_serial_interface::register_save_state(machine().save(), this); @@ -190,7 +191,7 @@ void i8251_device::transmit_clock() if (is_transmit_register_empty()) { /* set it up */ - transmit_register_setup(m_data); + transmit_register_setup(m_tx_data); /* i8251 transmit reg now empty */ m_status |=I8251_STATUS_TX_EMPTY; /* ready for next transmit */ @@ -339,7 +340,8 @@ void i8251_device::device_reset() m_status = I8251_STATUS_TX_EMPTY | I8251_STATUS_TX_READY; m_mode_byte = 0; m_command = 0; - m_data = 0; + m_rx_data = 0; + m_tx_data = 0; m_rxc_count = m_txc_count = 0; m_br_factor = 1; m_tx_busy = m_disable_tx_pending = false; @@ -688,8 +690,9 @@ READ8_MEMBER(i8251_device::status_r) WRITE8_MEMBER(i8251_device::data_w) { - m_data = data; + m_tx_data = data; + LOG(("data_w %02x\n" , data)); // printf("i8251 transmit char: %02x\n",data); /* writing clears */ @@ -711,9 +714,8 @@ WRITE8_MEMBER(i8251_device::data_w) void i8251_device::receive_character(UINT8 ch) { -// printf("i8251 receive char: %02x\n",ch); - m_data = ch; + m_rx_data = ch; /* char has not been read and another has arrived! */ if (m_status & I8251_STATUS_RX_READY) @@ -733,12 +735,12 @@ void i8251_device::receive_character(UINT8 ch) READ8_MEMBER(i8251_device::data_r) { - //logerror("read data: %02x, STATUS=%02x\n",m_data,m_status); + LOG(("read data: %02x, STATUS=%02x\n",m_rx_data,m_status)); /* reading clears */ m_status &= ~I8251_STATUS_RX_READY; update_rx_ready(); - return m_data; + return m_rx_data; } diff --git a/src/emu/machine/i8251.h b/src/emu/machine/i8251.h index 7f51f0dfff2..e2d271a31c3 100644 --- a/src/emu/machine/i8251.h +++ b/src/emu/machine/i8251.h @@ -132,7 +132,8 @@ private: int m_br_factor; /* data being received */ - UINT8 m_data; + UINT8 m_rx_data; + UINT8 m_tx_data; bool m_tx_busy; bool m_disable_tx_pending; }; From 79e87536d53e846447a030a25749f18d18e08daa Mon Sep 17 00:00:00 2001 From: fulivi Date: Tue, 11 Aug 2015 15:34:55 +0200 Subject: [PATCH 4/7] hp64k: UART & loopback relay added --- src/mess/drivers/hp64k.c | 65 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index fc992e77600..80f48ae7ea4 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -219,6 +219,11 @@ public: DECLARE_WRITE16_MEMBER(hp64k_usart_w); DECLARE_WRITE_LINE_MEMBER(hp64k_rxrdy_w); DECLARE_WRITE_LINE_MEMBER(hp64k_txrdy_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_txd_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_dtr_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_rts_w); + DECLARE_WRITE16_MEMBER(hp64k_loopback_w); + void hp64k_update_loopback(void); DECLARE_WRITE16_MEMBER(hp64k_beep_w); TIMER_DEVICE_CALLBACK_MEMBER(hp64k_beeper_off); @@ -298,6 +303,10 @@ private: bool m_16x_clk; bool m_baud_clk; UINT8 m_16x_div; + bool m_loopback; + bool m_txd_state; + bool m_dtr_state; + bool m_rts_state; }; static ADDRESS_MAP_START(cpu_mem_map , AS_PROGRAM , 16 , hp64k_state) @@ -324,8 +333,8 @@ static ADDRESS_MAP_START(cpu_io_map , AS_IO , 16 , hp64k_state) // Read from USART AM_RANGE(HP_MAKE_IOADDR(6 , 0) , HP_MAKE_IOADDR(6 , 3)) AM_READ(hp64k_usart_r) // PA = 7, IC = 2 - // Rear-panel switches - AM_RANGE(HP_MAKE_IOADDR(7 , 2) , HP_MAKE_IOADDR(7 , 2)) AM_READ(hp64k_rear_sw_r) + // Rear-panel switches and loopback relay control + AM_RANGE(HP_MAKE_IOADDR(7 , 2) , HP_MAKE_IOADDR(7 , 2)) AM_READWRITE(hp64k_rear_sw_r , hp64k_loopback_w) // PA = 9, IC = [0..3] // Beeper control & interrupt status read AM_RANGE(HP_MAKE_IOADDR(9 , 0) , HP_MAKE_IOADDR(9 , 3)) AM_WRITE(hp64k_beep_w) @@ -417,6 +426,11 @@ void hp64k_state::machine_reset() m_beeper->set_state(0); m_baud_rate->set_unscaled_clock(BAUD_RATE_GEN_CLOCK / baud_rate_divisors[ (m_s5_sw->read() >> 1) & 0xf ]); m_16x_clk = (m_rs232_sw->read() & 0x02) != 0; + m_loopback = false; + m_txd_state = true; + m_dtr_state = true; + m_rts_state = true; + } UINT8 hp64k_state::hp64k_crtc_filter(UINT8 data) @@ -990,6 +1004,49 @@ WRITE_LINE_MEMBER(hp64k_state::hp64k_txrdy_w) hp64k_update_irl(); } +WRITE_LINE_MEMBER(hp64k_state::hp64k_txd_w) +{ + m_txd_state = state; + if (m_loopback) { + m_uart->write_rxd(state); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_dtr_w) +{ + m_dtr_state = state; + if (m_loopback) { + m_uart->write_dsr(state); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_rts_w) +{ + m_rts_state = state; + if (m_loopback) { + m_uart->write_cts(state); + } +} + +WRITE16_MEMBER(hp64k_state::hp64k_loopback_w) +{ + m_loopback = BIT(data , 11); + hp64k_update_loopback(); +} + +void hp64k_state::hp64k_update_loopback(void) +{ + if (m_loopback) { + m_uart->write_rxd(m_txd_state); + m_uart->write_dsr(m_dtr_state); + m_uart->write_cts(m_rts_state); + } else { + m_uart->write_rxd(1); + m_uart->write_dsr(1); + m_uart->write_cts(1); + } +} + WRITE16_MEMBER(hp64k_state::hp64k_beep_w) { if (!BIT(offset , 0)) { @@ -1325,7 +1382,9 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) MCFG_DEVICE_ADD("uart" , I8251 , 0) MCFG_I8251_RXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_rxrdy_w)); MCFG_I8251_TXRDY_HANDLER(WRITELINE(hp64k_state , hp64k_txrdy_w)); - + MCFG_I8251_TXD_HANDLER(WRITELINE(hp64k_state , hp64k_txd_w)); + MCFG_I8251_DTR_HANDLER(WRITELINE(hp64k_state , hp64k_dtr_w)); + MCFG_I8251_RTS_HANDLER(WRITELINE(hp64k_state , hp64k_rts_w)); MACHINE_CONFIG_END ROM_START(hp64k) From c3d3c118f7b4becf69e6d53ec22171e6f79f2737 Mon Sep 17 00:00:00 2001 From: fulivi Date: Thu, 13 Aug 2015 16:11:32 +0200 Subject: [PATCH 5/7] hp64k: rs232 port added --- src/mess/drivers/hp64k.c | 50 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index 80f48ae7ea4..7f7236c1baa 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -160,6 +160,7 @@ #include "sound/beep.h" #include "machine/clock.h" #include "machine/i8251.h" +#include "bus/rs232/rs232.h" #define BIT_MASK(n) (1U << (n)) @@ -224,7 +225,10 @@ public: DECLARE_WRITE_LINE_MEMBER(hp64k_rts_w); DECLARE_WRITE16_MEMBER(hp64k_loopback_w); void hp64k_update_loopback(void); - + DECLARE_WRITE_LINE_MEMBER(hp64k_rs232_rxd_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_rs232_dcd_w); + DECLARE_WRITE_LINE_MEMBER(hp64k_rs232_cts_w); + DECLARE_WRITE16_MEMBER(hp64k_beep_w); TIMER_DEVICE_CALLBACK_MEMBER(hp64k_beeper_off); @@ -249,6 +253,7 @@ private: required_device m_baud_rate; required_ioport m_s5_sw; required_device m_uart; + required_device m_rs232; // Character generator const UINT8 *m_chargen; @@ -366,7 +371,8 @@ hp64k_state::hp64k_state(const machine_config &mconfig, device_type type, const m_beep_timer(*this , "beep_timer"), m_baud_rate(*this , "baud_rate"), m_s5_sw(*this , "s5_sw"), - m_uart(*this , "uart") + m_uart(*this , "uart"), + m_rs232(*this , "rs232") { } @@ -1010,6 +1016,7 @@ WRITE_LINE_MEMBER(hp64k_state::hp64k_txd_w) if (m_loopback) { m_uart->write_rxd(state); } + m_rs232->write_txd(state); } WRITE_LINE_MEMBER(hp64k_state::hp64k_dtr_w) @@ -1018,14 +1025,20 @@ WRITE_LINE_MEMBER(hp64k_state::hp64k_dtr_w) if (m_loopback) { m_uart->write_dsr(state); } + m_rs232->write_dtr(state); } WRITE_LINE_MEMBER(hp64k_state::hp64k_rts_w) { + if (BIT(m_s5_sw->read() , 0)) { + // Full duplex, RTS/ = 0 + state = 0; + } m_rts_state = state; if (m_loopback) { m_uart->write_cts(state); } + m_rs232->write_rts(state); } WRITE16_MEMBER(hp64k_state::hp64k_loopback_w) @@ -1041,9 +1054,30 @@ void hp64k_state::hp64k_update_loopback(void) m_uart->write_dsr(m_dtr_state); m_uart->write_cts(m_rts_state); } else { - m_uart->write_rxd(1); - m_uart->write_dsr(1); - m_uart->write_cts(1); + m_uart->write_rxd(m_rs232->rxd_r()); + m_uart->write_dsr(m_rs232->dcd_r()); + m_uart->write_cts(m_rs232->cts_r()); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_rs232_rxd_w) +{ + if (!m_loopback) { + m_uart->write_rxd(state); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_rs232_dcd_w) +{ + if (!m_loopback) { + m_uart->write_dsr(state); + } +} + +WRITE_LINE_MEMBER(hp64k_state::hp64k_rs232_cts_w) +{ + if (!m_loopback) { + m_uart->write_cts(state); } } @@ -1385,6 +1419,12 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) MCFG_I8251_TXD_HANDLER(WRITELINE(hp64k_state , hp64k_txd_w)); MCFG_I8251_DTR_HANDLER(WRITELINE(hp64k_state , hp64k_dtr_w)); MCFG_I8251_RTS_HANDLER(WRITELINE(hp64k_state , hp64k_rts_w)); + + MCFG_RS232_PORT_ADD("rs232" , default_rs232_devices , NULL) + MCFG_RS232_RXD_HANDLER(WRITELINE(hp64k_state , hp64k_rs232_rxd_w)) + MCFG_RS232_DCD_HANDLER(WRITELINE(hp64k_state , hp64k_rs232_dcd_w)) + MCFG_RS232_CTS_HANDLER(WRITELINE(hp64k_state , hp64k_rs232_cts_w)) + MACHINE_CONFIG_END ROM_START(hp64k) From 84d3ffa9e2c46cd03903f439471ad06499433ed8 Mon Sep 17 00:00:00 2001 From: fulivi Date: Fri, 14 Aug 2015 16:03:35 +0200 Subject: [PATCH 6/7] hp64k: fix to allow multiple screens (for RS232 terminal) --- src/mess/drivers/hp64k.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index 7f7236c1baa..c35cf001836 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -1368,6 +1368,7 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) // Clock = 25 MHz / 9 * (112/114) MCFG_DEVICE_ADD("crtc" , I8275 , 2729045) + MCFG_VIDEO_SET_SCREEN("screen") MCFG_I8275_CHARACTER_WIDTH(9) MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(hp64k_state , crtc_display_pixels) MCFG_I8275_DRQ_CALLBACK(WRITELINE(hp64k_state , hp64k_crtc_drq_w)) @@ -1376,6 +1377,7 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state) MCFG_SCREEN_ADD("screen" , RASTER) MCFG_SCREEN_UPDATE_DEVICE("crtc" , i8275_device , screen_update) MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(720 , 390) MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette") MCFG_FD1791_ADD("fdc" , XTAL_4MHz / 4) From 2c65dc2e75dc3bd4093712e28eb61056d95c684f Mon Sep 17 00:00:00 2001 From: fulivi Date: Mon, 17 Aug 2015 14:43:31 +0200 Subject: [PATCH 7/7] hp64k: small doc update --- src/mess/drivers/hp64k.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mess/drivers/hp64k.c b/src/mess/drivers/hp64k.c index c35cf001836..1467aac1c91 100644 --- a/src/mess/drivers/hp64k.c +++ b/src/mess/drivers/hp64k.c @@ -60,7 +60,7 @@ // simple rectangular envelope. // //*U20 HP "PHI" Custom HP-IB interface microcontroller -//*U28 i8251 RS232 UART +// U28 i8251 RS232 UART // // ********** // Display card (64100-66530) @@ -148,8 +148,6 @@ // // ICs that are not emulated yet are marked with "*" // -// TODO: -// - RS232 I/F #include "emu.h" #include "cpu/hphybrid/hphybrid.h"