2 * DMAC HD6844/MC6844 [hd6844.h]
4 * Author: K.Ohta <whatisthis.sowhat _at_ gmail.com>
7 * Jun 18, 2015 : Initial
15 #include "../device.h"
20 HD6844_EVENT_START_TRANSFER = 0,
21 HD6844_EVENT_DO_TRANSFER = 4,
22 HD6844_EVENT_END_TRANSFER = 8,
26 HD6844_BUSREQ_CLIENT = 0,
27 HD6844_BUSREQ_HOST = 1
31 HD6844_TRANSFER_START = 1,
33 HD6844_ADDR_REG_0 = 4,
41 HD6844_SRC_FIXED_ADDR_CH0 = 16,
42 HD6844_SRC_FIXED_ADDR_CH1,
43 HD6844_SRC_FIXED_ADDR_CH2,
44 HD6844_SRC_FIXED_ADDR_CH3,
45 HD6844_SET_CONST_OFFSET,
46 HD6844_IS_TRANSFER_0 = 24,
50 HD6844_ACK_BUSREQ_CLIENT,
51 HD6844_ACK_BUSREQ_HOST,
56 class HD6844: public DEVICE {
60 bool __USE_MULTIPLE_CHAINING;
67 outputs_t interrupt_line; // 20180117 K.O
68 outputs_t busreq_line[2];
73 uint16_t words_reg[4];
74 uint8_t channel_control[4];
77 uint8_t interrupt_reg;
78 uint8_t datachain_reg;
83 bool first_transfer[4];
87 uint32_t fixed_addr[4];
91 void do_transfer(int ch);
92 void do_transfer_end(int ch);
95 HD6844(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
98 for(i = 0; i < 4; i++) {
99 src[i] = dest[i] = NULL;
101 initialize_output_signals(&interrupt_line);
102 for(i = 0; i < 2; i++) initialize_output_signals(&(busreq_line[i]));
103 set_device_name(_T("HD6844 DMAC"));
106 void event_callback(int event_id, int err);
107 void write_data8(uint32_t id, uint32_t data);
108 uint32_t read_data8(uint32_t addr);
110 uint32_t read_signal(int id);
111 void write_signal(int id, uint32_t data, uint32_t mask);
112 void initialize(void);
114 //void update_config(void);
115 void save_state(FILEIO *state_fio);
116 bool load_state(FILEIO *state_fio);
117 void decl_state(void);
119 void set_context_int_line(DEVICE *p, int id, uint32_t mask) {
120 register_output_signal(&interrupt_line, p, id, mask);
122 void set_context_busreq_line(DEVICE *p, int ch, int id, uint32_t mask) {
123 register_output_signal(&(busreq_line[ch & 1]), p, id, mask);
125 void set_context_src(DEVICE *p, uint32_t ch) {
128 void set_context_dst(DEVICE *p, uint32_t ch) {
134 #endif // _VM_FM77AV_16beta_ALU_H_