2 Author : Kyuma.Ohta <whatisthis.sowhat _at_ gmail.com>
5 [ADC AD7820KR with FIFO]
11 Reading data via read_signal().
12 Setting data (from external device) via write_signal().
14 #include "../device.h"
15 #include "../../common.h"
16 #include "../../fifo.h"
18 #define SIG_AD7820_DATA_REG 1 // READ/SET A DATA
19 #define SIG_AD7820_RESET 2 // REEST DEVICE (not implemented at real machine)
20 #define SIG_AD7820_SET_SAMPLE_MODE 3 // NOT 0 = WR_RD_MODE, 0 = RD_MODE.
21 #define SIG_AD7820_CS 4 // CS (Positive logic: differ from real hardware).
22 #define SIG_AD7820_WR_CONVERSION_MODE 5 // Automatic conversion mode: MUST SET SAMPLE_MODE = WR_RD_MODE (not 0).
23 #define SIG_AD7820_SAMPLE_RATE 6 // READ/SET SAMPLE RATE
25 // ToDo: Adjust sample rate.
26 class AD7820KR : public DEVICE {
28 // Note: AD7820KR controls/outputs *INT and *OFL as NEGATIVE logic, but this outputs POSITIVE logic 20190307 K.O
29 outputs_t outputs_intr;
30 outputs_t outputs_overflow;
31 outputs_t outputs_ready;
45 void start_sample(double usec);
47 AD7820KR(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
49 initialize_output_signals(&outputs_intr);
50 initialize_output_signals(&outputs_overflow);
51 initialize_output_signals(&outputs_ready);
52 this_sample_rate = 19200; // ToDo.
53 this_bank = 0; // ToDo.
60 set_device_name(_T("A/D Converter AD7820KR"));
71 void event_callback(int event_id, int err);
73 uint32_t read_signal(int ch);
74 void write_signal(int ch, uint32_t data, uint32_t mask);
76 bool process_state(FILEIO* state_fio, bool loading);
79 void set_sample_rate(int val)
81 this_sample_rate = val;
83 void set_sound_bank(int val)
87 void set_context_ready(DEVICE* device, int id, uint32_t mask)
89 register_output_signal(&outputs_ready, device, id, mask);
91 void set_context_interrupt(DEVICE* device, int id, uint32_t mask)
93 register_output_signal(&outputs_intr, device, id, mask);
95 void set_context_overflow(DEVICE* device, int id, uint32_t mask)
97 register_output_signal(&outputs_overflow, device, id, mask);