Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ins8250.cpp: Implement Break functionality #11665

Merged
merged 2 commits into from Oct 29, 2023
Merged

Conversation

mgarlanger
Copy link
Contributor

Compared behavior between a real H19 and the emulated H19, while holding down the break key. Both behaved identically, other keys pressed while the break key was pressed queued up and processed after the break key was released.

Copy link
Member

@cuavas cuavas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won’t work properly:

  • Setting the break bit in the LCR should immediately pull down TxD, whether data transmission is in progress or not.
  • Clearing the break bit in the LCR should immediately set TxD back to whatever was last shifted out of the transmit shift register.

You need to:

  • Leave m_txd containing whatever was shifted out of the transmit shift register.
  • Call m_out_tx_cb (or device_serial_interface::rx_w for loopback cases) immediately when the break bit changes on a register write.
  • Check the break bit before calls to m_out_tx_cb (and device_serial_interface::rx_w for loopback cases) so you don’t change the output when it’s being overridden by the break bit.

@cuavas cuavas merged commit 2d318f5 into mamedev:master Oct 29, 2023
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants