OSDN Git Service

[VM][FMTOWNS] Some devices are enabled to compile.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / ad7820kr.h
1 /*
2         Author : Kyuma.Ohta <whatisthis.sowhat _at_ gmail.com>
3         Date   : 2019.01.29-
4
5         [ADC AD7820KR with FIFO]
6 */
7 #pragma once
8
9 /*
10   ADC: 
11     Reading data via read_signal().
12     Setting data (from external device) via write_signal().
13 */
14 #include "../device.h"
15 #include "../../common.h"
16 #include "../../fifo.h"
17
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
24
25 // ToDo: Adjust sample rate.
26 class AD7820KR : public DEVICE {
27         // ADC
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;
32         
33         uint8_t adc_data;
34         uint8_t adc_msb;
35         uint32_t prev_clock;
36         
37         bool cs_enabled;
38         bool req_convert;
39         bool wr_rd_mode;
40         
41         int this_bank;
42         int this_sample_rate;
43         int event_sample;
44         
45         void start_sample(double usec);
46 public:
47         AD7820KR(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
48         {
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.
54                 wr_rd_mode = false;
55                 req_convert = false;
56                 adc_data = 0x00;
57                 adc_msb = 0x00;
58                 cs_enabled = false;
59                 prev_clock = 0;
60                 set_device_name(_T("A/D Converter AD7820KR"));
61         
62         }
63         ~AD7820KR()
64         {
65         }
66
67         void initialize();
68         void release();
69         void reset();
70
71         void event_callback(int event_id, int err);
72         
73         uint32_t read_signal(int ch);
74         void write_signal(int ch, uint32_t data, uint32_t mask);
75
76         bool process_state(FILEIO* state_fio, bool loading);
77
78         // unique functions
79         void set_sample_rate(int val)
80         {
81                 this_sample_rate = val;
82         }
83         void set_sound_bank(int val)
84         {
85                 this_bank = val;
86         }
87         void set_context_ready(DEVICE* device, int id, uint32_t mask)
88         {
89                 register_output_signal(&outputs_ready, device, id, mask);
90         }
91         void set_context_interrupt(DEVICE* device, int id, uint32_t mask)
92         {
93                 register_output_signal(&outputs_intr, device, id, mask);
94         }
95         void set_context_overflow(DEVICE* device, int id, uint32_t mask)
96         {
97                 register_output_signal(&outputs_overflow, device, id, mask);
98         }
99 };
100