Merge pull request #4247 from Cacodemon345/modem_emu
Modem emulation (includinng SLIP connectivity)
This commit is contained in:
@@ -432,6 +432,25 @@ serial_set_dcd(serial_t *dev, uint8_t enabled)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
serial_set_ri(serial_t *dev, uint8_t enabled)
|
||||
{
|
||||
uint8_t prev_state = !!(dev->msr & 0x40);
|
||||
if (dev->mctrl & 0x10)
|
||||
return;
|
||||
|
||||
dev->msr &= ~0x40;
|
||||
dev->msr |= (!!enabled) << 6;
|
||||
dev->msr_set &= ~0x40;
|
||||
dev->msr_set |= (!!enabled) << 6;
|
||||
|
||||
if (prev_state == 0 && (!!enabled) == 1) {
|
||||
dev->msr |= 0x4;
|
||||
dev->int_status |= SERIAL_INT_MSR;
|
||||
serial_update_ints(dev);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
serial_set_clock_src(serial_t *dev, double clock_src)
|
||||
{
|
||||
@@ -570,6 +589,8 @@ serial_write(uint16_t addr, uint8_t val, void *priv)
|
||||
serial_do_irq(dev, 0);
|
||||
if ((val ^ dev->mctrl) & 0x10)
|
||||
serial_reset_fifo(dev);
|
||||
if (dev->sd && dev->sd->dtr_callback && (val ^ dev->mctrl) & 1)
|
||||
dev->sd->dtr_callback(dev, val & 1, dev->sd->priv);
|
||||
dev->mctrl = val;
|
||||
if (val & 0x10) {
|
||||
new_msr = (val & 0x0c) << 4;
|
||||
@@ -797,6 +818,25 @@ serial_attach_ex(int port,
|
||||
return sd->serial;
|
||||
}
|
||||
|
||||
serial_t *
|
||||
serial_attach_ex_2(int port,
|
||||
void (*rcr_callback)(struct serial_s *serial, void *priv),
|
||||
void (*dev_write)(struct serial_s *serial, void *priv, uint8_t data),
|
||||
void (*dtr_callback)(struct serial_s *serial, int status, void *priv),
|
||||
void *priv)
|
||||
{
|
||||
serial_device_t *sd = &serial_devices[port];
|
||||
|
||||
sd->rcr_callback = rcr_callback;
|
||||
sd->dtr_callback = dtr_callback;
|
||||
sd->dev_write = dev_write;
|
||||
sd->transmit_period_callback = NULL;
|
||||
sd->lcr_callback = NULL;
|
||||
sd->priv = priv;
|
||||
|
||||
return sd->serial;
|
||||
}
|
||||
|
||||
static void
|
||||
serial_speed_changed(void *priv)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user