/[gxemul]/trunk/src/devices/dev_pccmos.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_pccmos.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_pccmos.c,v 1.8 2005/10/26 14:37:04 debug Exp $   *  $Id: dev_pccmos.c,v 1.15 2005/11/21 22:27:18 debug Exp $
29   *     *  
30   *  PC CMOS/RTC device.   *  PC CMOS/RTC device.
31   *   *
# Line 66  int dev_pccmos_access(struct cpu *cpu, s Line 66  int dev_pccmos_access(struct cpu *cpu, s
66          struct pccmos_data *d = (struct pccmos_data *) extra;          struct pccmos_data *d = (struct pccmos_data *) extra;
67          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
68          unsigned char b = 0;          unsigned char b = 0;
69            int r = 1;
70    
71          if (writeflag == MEM_WRITE)          if (writeflag == MEM_WRITE)
72                  b = idata = memory_readmax64(cpu, data, len);                  b = idata = memory_readmax64(cpu, data, len);
# Line 79  int dev_pccmos_access(struct cpu *cpu, s Line 80  int dev_pccmos_access(struct cpu *cpu, s
80                  if (writeflag == MEM_WRITE) {                  if (writeflag == MEM_WRITE) {
81                          d->select = idata;                          d->select = idata;
82                          if (idata <= 0x0d) {                          if (idata <= 0x0d) {
83                                  cpu->memory_rw(cpu, cpu->mem,                                  r = cpu->memory_rw(cpu, cpu->mem,
84                                      PCCMOS_MC146818_FAKE_ADDR, &b, 1,                                      PCCMOS_MC146818_FAKE_ADDR, &b, 1,
85                                      MEM_WRITE, PHYSICAL);                                      MEM_WRITE, PHYSICAL);
86                          }                          }
# Line 88  int dev_pccmos_access(struct cpu *cpu, s Line 89  int dev_pccmos_access(struct cpu *cpu, s
89          } else {          } else {
90                  if (d->select <= 0x0d) {                  if (d->select <= 0x0d) {
91                          if (writeflag == MEM_WRITE) {                          if (writeflag == MEM_WRITE) {
92                                  cpu->memory_rw(cpu, cpu->mem,                                  r = cpu->memory_rw(cpu, cpu->mem,
93                                      PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1,                                      PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1,
94                                      MEM_WRITE, PHYSICAL);                                      MEM_WRITE, PHYSICAL);
95                          } else {                          } else {
96                                  cpu->memory_rw(cpu, cpu->mem,                                  r = cpu->memory_rw(cpu, cpu->mem,
97                                      PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1,                                      PCCMOS_MC146818_FAKE_ADDR + 1, &b, 1,
98                                      MEM_READ, PHYSICAL);                                      MEM_READ, PHYSICAL);
99                                  odata = b;                                  odata = b;
# Line 105  int dev_pccmos_access(struct cpu *cpu, s Line 106  int dev_pccmos_access(struct cpu *cpu, s
106                  }                  }
107          }          }
108    
109            if (r == 0)
110                    fatal("[ pccmos: memory_rw() error! ]\n");
111    
112          if (writeflag == MEM_READ)          if (writeflag == MEM_READ)
113                  memory_writemax64(cpu, data, len, odata);                  memory_writemax64(cpu, data, len, odata);
114    
# Line 131  int devinit_pccmos(struct devinit *devin Line 135  int devinit_pccmos(struct devinit *devin
135           */           */
136          switch (devinit->machine->machine_type) {          switch (devinit->machine->machine_type) {
137          case MACHINE_CATS:          case MACHINE_CATS:
138            case MACHINE_NETWINDER:
139                  irq_nr = 32 + 8;                  irq_nr = 32 + 8;
140                  type = MC146818_CATS;                  type = MC146818_CATS;
141                  d->ram[0x48] = 20;              /*  century  */                  d->ram[0x48] = 20;              /*  century  */
142                  len = DEV_PCCMOS_LENGTH * 2;                  len = DEV_PCCMOS_LENGTH * 2;
143                  break;                  break;
144            case MACHINE_ALGOR:
145                    irq_nr = 8 + 8;
146                    type = MC146818_ALGOR;
147                    break;
148            case MACHINE_EVBMIPS:
149                    /*  Malta etc.  */
150                    irq_nr = 8 + 8;
151                    type = MC146818_ALGOR;
152                    break;
153          case MACHINE_X86:          case MACHINE_X86:
154                  irq_nr = 16;    /*  "No" irq  */                  irq_nr = 16;    /*  "No" irq  */
155                  break;                  break;
156            case MACHINE_BEBOX:
157            case MACHINE_PREP:
158                    irq_nr = 32 + 8;
159                    break;
160          default:fatal("devinit_pccmos(): unimplemented machine type"          default:fatal("devinit_pccmos(): unimplemented machine type"
161                      " %i\n", devinit->machine->machine_type);                      " %i\n", devinit->machine->machine_type);
162                  exit(1);                  exit(1);
# Line 146  int devinit_pccmos(struct devinit *devin Line 164  int devinit_pccmos(struct devinit *devin
164    
165          memory_device_register(devinit->machine->memory, devinit->name,          memory_device_register(devinit->machine->memory, devinit->name,
166              devinit->addr, len, dev_pccmos_access, (void *)d,              devinit->addr, len, dev_pccmos_access, (void *)d,
167              MEM_DEFAULT, NULL);              DM_DEFAULT, NULL);
168    
169          dev_mc146818_init(devinit->machine, devinit->machine->memory,          dev_mc146818_init(devinit->machine, devinit->machine->memory,
170              PCCMOS_MC146818_FAKE_ADDR, irq_nr, type, 1);              PCCMOS_MC146818_FAKE_ADDR, irq_nr, type, 1);

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

  ViewVC Help
Powered by ViewVC 1.1.26