/[gxemul]/trunk/src/devices/dev_8253.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_8253.c

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

revision 19 by dpavlin, Mon Oct 8 16:19:11 2007 UTC revision 20 by dpavlin, Mon Oct 8 16:19:23 2007 UTC
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_8253.c,v 1.5 2005/10/26 14:37:03 debug Exp $   *  $Id: dev_8253.c,v 1.7 2005/11/13 00:14:08 debug Exp $
29   *     *  
30   *  8253/8254 Programmable Interval Timer.   *  8253/8254 Programmable Interval Timer.
31   *   *
# Line 51  Line 51 
51    
52  struct pit8253_data {  struct pit8253_data {
53          int             irq_nr;          int             irq_nr;
54            int             in_use;
55          int             counter_select;          int             counter_select;
56  };  };
57    
# Line 61  struct pit8253_data { Line 62  struct pit8253_data {
62  void dev_8253_tick(struct cpu *cpu, void *extra)  void dev_8253_tick(struct cpu *cpu, void *extra)
63  {  {
64          struct pit8253_data *d = (struct pit8253_data *) extra;          struct pit8253_data *d = (struct pit8253_data *) extra;
65    
66            if (!d->in_use)
67                    return;
68    
69          cpu_interrupt(cpu, d->irq_nr);          cpu_interrupt(cpu, d->irq_nr);
70  }  }
71    
# Line 78  int dev_8253_access(struct cpu *cpu, str Line 83  int dev_8253_access(struct cpu *cpu, str
83          if (writeflag == MEM_WRITE)          if (writeflag == MEM_WRITE)
84                  idata = memory_readmax64(cpu, data, len);                  idata = memory_readmax64(cpu, data, len);
85    
86            d->in_use = 1;
87    
88          /*  TODO: ack somewhere else  */          /*  TODO: ack somewhere else  */
89          cpu_interrupt_ack(cpu, d->irq_nr);          cpu_interrupt_ack(cpu, d->irq_nr);
90    
# Line 87  int dev_8253_access(struct cpu *cpu, str Line 94  int dev_8253_access(struct cpu *cpu, str
94                          /*  TODO  */                          /*  TODO  */
95                  } else {                  } else {
96                          /*  TODO  */                          /*  TODO  */
97                          odata = 1;                          /*  odata = 1;  */
98  odata = random();                          odata = random();
99                  }                  }
100                  break;                  break;
101          case 0x03:          case 0x03:
# Line 129  int devinit_8253(struct devinit *devinit Line 136  int devinit_8253(struct devinit *devinit
136          }          }
137          memset(d, 0, sizeof(struct pit8253_data));          memset(d, 0, sizeof(struct pit8253_data));
138          d->irq_nr = devinit->irq_nr;          d->irq_nr = devinit->irq_nr;
139            d->in_use = devinit->in_use;
140    
141          memory_device_register(devinit->machine->memory, devinit->name,          memory_device_register(devinit->machine->memory, devinit->name,
142              devinit->addr, DEV_8253_LENGTH, dev_8253_access, (void *)d,              devinit->addr, DEV_8253_LENGTH, dev_8253_access, (void *)d,
143              MEM_DEFAULT, NULL);              DM_DEFAULT, NULL);
144    
145          machine_add_tickfunction(devinit->machine, dev_8253_tick,          machine_add_tickfunction(devinit->machine, dev_8253_tick,
146              d, TICK_SHIFT);              d, TICK_SHIFT);

Legend:
Removed from v.19  
changed lines
  Added in v.20

  ViewVC Help
Powered by ViewVC 1.1.26