/[gxemul]/trunk/src/devices/dev_ns16550.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/devices/dev_ns16550.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 23 by dpavlin, Mon Oct 8 16:19:37 2007 UTC revision 24 by dpavlin, Mon Oct 8 16:19:56 2007 UTC
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_ns16550.c,v 1.51 2006/02/18 13:42:39 debug Exp $   *  $Id: dev_ns16550.c,v 1.54 2006/04/06 18:08:42 debug Exp $
29   *     *  
30   *  NS16550 serial controller.   *  NS16550 serial controller.
31   *   *
# Line 91  void dev_ns16550_tick(struct cpu *cpu, v Line 91  void dev_ns16550_tick(struct cpu *cpu, v
91           *  If interrupts are enabled, and interrupts are pending, then           *  If interrupts are enabled, and interrupts are pending, then
92           *  cause a CPU interrupt.           *  cause a CPU interrupt.
93           */           */
94    
95          if (((d->reg[com_ier] & IER_ETXRDY) && (d->reg[com_iir] & IIR_TXRDY)) ||          if (((d->reg[com_ier] & IER_ETXRDY) && (d->reg[com_iir] & IIR_TXRDY)) ||
96              ((d->reg[com_ier] & IER_ERXRDY) && (d->reg[com_iir] & IIR_RXRDY))) {              ((d->reg[com_ier] & IER_ERXRDY) && (d->reg[com_iir] & IIR_RXRDY))) {
97                  d->reg[com_iir] &= ~IIR_NOPEND;                  d->reg[com_iir] &= ~IIR_NOPEND;
# Line 214  DEVICE_ACCESS(ns16550) Line 215  DEVICE_ACCESS(ns16550)
215                          d->fcr = idata;                          d->fcr = idata;
216                  } else {                  } else {
217                          odata = d->reg[com_iir];                          odata = d->reg[com_iir];
218                            if (d->reg[com_iir] & IIR_TXRDY)
219                                    d->reg[com_iir] &= ~IIR_TXRDY;
220                          debug("[ ns16550 (%s): read from iir: 0x%02x ]\n",                          debug("[ ns16550 (%s): read from iir: 0x%02x ]\n",
221                              d->name, (int)odata);                              d->name, (int)odata);
222                          dev_ns16550_tick(cpu, d);                          dev_ns16550_tick(cpu, d);
# Line 287  DEVICE_ACCESS(ns16550) Line 290  DEVICE_ACCESS(ns16550)
290                          d->reg[com_mcr] = idata;                          d->reg[com_mcr] = idata;
291                          debug("[ ns16550 (%s): write to mcr: 0x%02x ]\n",                          debug("[ ns16550 (%s): write to mcr: 0x%02x ]\n",
292                              d->name, (int)idata);                              d->name, (int)idata);
293                            if (!(d->reg[com_iir] & IIR_TXRDY)
294                                && (idata & MCR_IENABLE))
295                                    d->reg[com_iir] |= IIR_TXRDY;
296                            dev_ns16550_tick(cpu, d);
297                  } else {                  } else {
298                          odata = d->reg[com_mcr];                          odata = d->reg[com_mcr];
299                          debug("[ ns16550 (%s): read from mcr: 0x%02x ]\n",                          debug("[ ns16550 (%s): read from mcr: 0x%02x ]\n",
# Line 358  DEVINIT(ns16550) Line 365  DEVINIT(ns16550)
365              DEV_NS16550_LENGTH * d->addrmult, dev_ns16550_access, d,              DEV_NS16550_LENGTH * d->addrmult, dev_ns16550_access, d,
366              DM_DEFAULT, NULL);              DM_DEFAULT, NULL);
367          machine_add_tickfunction(devinit->machine,          machine_add_tickfunction(devinit->machine,
368              dev_ns16550_tick, d, TICK_SHIFT);              dev_ns16550_tick, d, TICK_SHIFT, 0.0);
369    
370          /*          /*
371           *  NOTE:  Ugly cast into a pointer, because this is a convenient way           *  NOTE:  Ugly cast into a pointer, because this is a convenient way

Legend:
Removed from v.23  
changed lines
  Added in v.24

  ViewVC Help
Powered by ViewVC 1.1.26