OSDN Git Service

* debug/debug.h: Move to top-level bochs directory.
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / bochs / dma / sid-dma-wrapper.h
1 // sid-dma-wrapper.h - SID import of the bochs dma component.  -*- C++ -*-
2
3 // Copyright (C) 1999, 2000, 2001, 2002 Red Hat.
4 // This file is part of SID and is licensed under the GPL.
5 // See the file COPYING.SID for conditions for redistribution.
6
7 #ifndef SID_DMA_WRAPPER_DEF_H
8 #define SID_DMA_WRAPPER_DEF_H   1
9
10 #include <sidtypes.h>
11 #include <sidcomp.h>
12 #include <sidcomputil.h>
13 #include <sidpinutil.h>
14 #include <sidbusutil.h>
15 #include <sidattrutil.h>
16 #include <sidcpuutil.h>
17 #include <sidpinattrutil.h>
18 #include <sidmiscutil.h>
19 #include <sidwatchutil.h>
20 #include <sidso.h>
21
22 #include "bochs.h"
23
24 using sid::bus;
25 using sid::component;
26 using sid::host_int_4;
27 using sid::little_int_1;
28 using sidutil::callback_pin;
29 using sidutil::callback_word_bus;
30 using sidutil::output_pin;
31
32 class dma : public sidutil::fixed_pin_map_component,
33             public sidutil::fixed_accessor_map_component,
34             public sidutil::fixed_attribute_map_component,
35             public sidutil::no_relation_component,
36             public sidutil::fixed_bus_map_component
37 {
38 public:
39   dma();
40   ~dma() throw() {};
41
42   void init(host_int_4);
43
44   void hold_acknowledge(host_int_4);
45
46   void drive_hold_request_pin(host_int_4 value);
47   void drive_terminal_count_pin(host_int_4 value);
48
49   void drive_channel_pin(host_int_4 channel, host_int_4 value, bool read_mode);
50 protected:
51
52   output_pin hold_request_pin;
53   output_pin terminal_count_pin;
54
55   callback_pin<dma> init_pin;
56   callback_pin<dma> hold_acknowledge_pin;
57
58   // Some ports in these ranges are not valid DMA ports.
59   bus::status read_port_0x00_0x0f (host_int_4 addr, little_int_1 mask, little_int_1 & data);
60   bus::status write_port_0x00_0x0f (host_int_4 addr, little_int_1 mask, little_int_1 data);
61
62   bus::status read_port_0x81_0x8d (host_int_4 addr, little_int_1 mask, little_int_1 & data);
63   bus::status write_port_0x81_0x8d (host_int_4 addr, little_int_1 mask, little_int_1 data);
64
65   bus::status read_port_0x8f (host_int_4 addr, little_int_1 mask, little_int_1 & data);
66   bus::status write_port_0x8f (host_int_4 addr, little_int_1 mask, little_int_1 data);
67
68   bus::status read_port_0xc0_0xde (host_int_4 addr, little_int_1 mask, little_int_1 & data);
69   bus::status write_port_0xc0_0xde (host_int_4 addr, little_int_1 mask, little_int_1 data);
70
71   callback_word_bus<dma, little_int_1> ports_0x00_0x0f_bus;
72   callback_word_bus<dma, little_int_1> ports_0x81_0x8d_bus;
73   callback_word_bus<dma, little_int_1> port_0x8f_bus;
74   callback_word_bus<dma, little_int_1> ports_0xc0_0xde_bus;
75
76   bus::status channel_read_request(host_int_4 channel, little_int_1 mask, little_int_1 &val);
77   bus::status channel_write_request(host_int_4 channel, little_int_1 mask, little_int_1 val);
78
79   callback_word_bus<dma, little_int_1> channels_bus;
80
81   // read == 1, write == 0
82   output_pin read_write_pin;
83   output_pin channel_pin[8];
84
85   bx_dma_c bx_dma;
86 };
87 #endif // SID_DMA_WRAPPER_DEF_H