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.12 2005/05/29 16:04:28 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 8 |
51 |
|
|
52 |
|
|
53 |
struct fdc_data { |
struct fdc_data { |
69 |
|
|
70 |
idata = memory_readmax64(cpu, data, len); |
idata = memory_readmax64(cpu, data, len); |
71 |
|
|
|
/* TODO: this is 100% dummy */ |
|
|
|
|
72 |
switch (relative_addr) { |
switch (relative_addr) { |
73 |
case 0x04: |
case 0x04: |
|
/* no debug warning */ |
|
|
if (writeflag==MEM_READ) { |
|
|
odata = d->reg[relative_addr]; |
|
|
} else |
|
|
d->reg[relative_addr] = idata; |
|
74 |
break; |
break; |
75 |
default: |
default:if (writeflag==MEM_READ) { |
76 |
if (writeflag==MEM_READ) { |
fatal("[ fdc: read from reg %i ]\n", |
|
debug("[ fdc: read from reg %i ]\n", |
|
77 |
(int)relative_addr); |
(int)relative_addr); |
78 |
odata = d->reg[relative_addr]; |
odata = d->reg[relative_addr]; |
79 |
} else { |
} else { |
80 |
debug("[ fdc: write to reg %i:", (int)relative_addr); |
fatal("[ fdc: write to reg %i:", (int)relative_addr); |
81 |
for (i=0; i<len; i++) |
for (i=0; i<len; i++) |
82 |
debug(" %02x", data[i]); |
fatal(" %02x", data[i]); |
83 |
debug(" ]\n"); |
fatal(" ]\n"); |
84 |
d->reg[relative_addr] = idata; |
d->reg[relative_addr] = idata; |
85 |
} |
} |
86 |
} |
} |