1 // sid-dma-wrapper.h - SID import of the bochs dma component. -*- C++ -*-
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.
7 #ifndef SID_DMA_WRAPPER_DEF_H
8 #define SID_DMA_WRAPPER_DEF_H 1
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>
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;
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
42 void init(host_int_4);
44 void hold_acknowledge(host_int_4);
46 void drive_hold_request_pin(host_int_4 value);
47 void drive_terminal_count_pin(host_int_4 value);
49 void drive_channel_pin(host_int_4 channel, host_int_4 value, bool read_mode);
52 output_pin hold_request_pin;
53 output_pin terminal_count_pin;
55 callback_pin<dma> init_pin;
56 callback_pin<dma> hold_acknowledge_pin;
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);
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);
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);
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);
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;
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);
79 callback_word_bus<dma, little_int_1> channels_bus;
81 // read == 1, write == 0
82 output_pin read_write_pin;
83 output_pin channel_pin[8];
87 #endif // SID_DMA_WRAPPER_DEF_H