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

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

revision 4 by dpavlin, Mon Oct 8 16:18:00 2007 UTC revision 22 by dpavlin, Mon Oct 8 16:19:37 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2003-2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2003-2006  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_fdc.c,v 1.9 2005/02/24 15:38:34 debug Exp $   *  $Id: dev_fdc.c,v 1.18 2006/02/09 20:02:59 debug Exp $
29   *     *  
30   *  Floppy controller.   *  PC-style floppy controller.
31   *   *
32   *  TODO!  (This is just a dummy skeleton right now.)   *  TODO!  (This is just a dummy skeleton right now.)
33     *
34     *  TODO 2: Make it work nicely with both ARC and PC emulation.
35     *
36     *  See http://members.tripod.com/~oldboard/assembly/765.html for a
37     *  quick overview.
38   */   */
39    
40  #include <stdio.h>  #include <stdio.h>
41  #include <stdlib.h>  #include <stdlib.h>
42  #include <string.h>  #include <string.h>
43    
 #include "console.h"  
44  #include "device.h"  #include "device.h"
45  #include "machine.h"  #include "machine.h"
46  #include "memory.h"  #include "memory.h"
47  #include "misc.h"  #include "misc.h"
48    
49    
50  #define DEV_FDC_LENGTH          0x100  #define DEV_FDC_LENGTH          6       /*  TODO 8, but collision with wdc  */
51    
52    
53  struct fdc_data {  struct fdc_data {
# Line 55  struct fdc_data { Line 59  struct fdc_data {
59  /*  /*
60   *  dev_fdc_access():   *  dev_fdc_access():
61   */   */
62  int dev_fdc_access(struct cpu *cpu, struct memory *mem,  DEVICE_ACCESS(fdc)
         uint64_t relative_addr, unsigned char *data, size_t len,  
         int writeflag, void *extra)  
63  {  {
64          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
65          int i;          size_t i;
66          struct fdc_data *d = extra;          struct fdc_data *d = extra;
67    
68          idata = memory_readmax64(cpu, data, len);          if (writeflag == MEM_WRITE)
69                    idata = memory_readmax64(cpu, data, len);
         /*  TODO:  this is 100% dummy  */  
70    
71          switch (relative_addr) {          switch (relative_addr) {
72          case 0x04:          case 0x04:
                 /*  no debug warning  */  
                 if (writeflag==MEM_READ) {  
                         odata = d->reg[relative_addr];  
                 } else  
                         d->reg[relative_addr] = idata;  
73                  break;                  break;
74          default:          default:if (writeflag==MEM_READ) {
75                  if (writeflag==MEM_READ) {                          fatal("[ fdc: read from reg %i ]\n",
                         debug("[ fdc: read from reg %i ]\n",  
76                              (int)relative_addr);                              (int)relative_addr);
77                          odata = d->reg[relative_addr];                          odata = d->reg[relative_addr];
78                  } else {                  } else {
79                          debug("[ fdc: write to reg %i:", (int)relative_addr);                          fatal("[ fdc: write to reg %i:", (int)relative_addr);
80                          for (i=0; i<len; i++)                          for (i=0; i<len; i++)
81                                  debug(" %02x", data[i]);                                  fatal(" %02x", data[i]);
82                          debug(" ]\n");                          fatal(" ]\n");
83                          d->reg[relative_addr] = idata;                          d->reg[relative_addr] = idata;
84                  }                  }
85          }          }
# Line 96  int dev_fdc_access(struct cpu *cpu, stru Line 91  int dev_fdc_access(struct cpu *cpu, stru
91  }  }
92    
93    
94  /*  DEVINIT(fdc)
  *  devinit_fdc():  
  */  
 int devinit_fdc(struct devinit *devinit)  
95  {  {
96          struct fdc_data *d;          struct fdc_data *d;
97    
# Line 113  int devinit_fdc(struct devinit *devinit) Line 105  int devinit_fdc(struct devinit *devinit)
105    
106          memory_device_register(devinit->machine->memory, devinit->name,          memory_device_register(devinit->machine->memory, devinit->name,
107              devinit->addr, DEV_FDC_LENGTH, dev_fdc_access, d,              devinit->addr, DEV_FDC_LENGTH, dev_fdc_access, d,
108              MEM_DEFAULT, NULL);              DM_DEFAULT, NULL);
109    
110          return 1;          return 1;
111  }  }

Legend:
Removed from v.4  
changed lines
  Added in v.22

  ViewVC Help
Powered by ViewVC 1.1.26