OSDN Git Service

[DOC] For release 2017-01-24.
[csp-qt/common_source_project-fm7.git] / source / src / vm / hd46505.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2007.02.08 -
6
7         [ HD46505 ]
8 */
9
10 #ifndef _HD46505_H_
11 #define _HD46505_H_
12
13 #include "vm.h"
14 #include "../emu.h"
15 #include "device.h"
16
17 class HD46505 : public DEVICE
18 {
19
20 private:
21         // output signals
22         outputs_t outputs_disp;
23         outputs_t outputs_vblank;
24         outputs_t outputs_vsync;
25         outputs_t outputs_hsync;
26         
27         uint8_t regs[18];
28         bool regs_written[18];
29         int ch;
30         bool timing_changed;
31         
32         int cpu_clocks;
33 #if defined(HD46505_CHAR_CLOCK)
34         double char_clock, next_char_clock;
35 #elif defined(HD46505_HORIZ_FREQ)
36         double horiz_freq, next_horiz_freq;
37 #endif
38         double frames_per_sec;
39         
40         int hz_total, hz_disp;
41         int hs_start, hs_end;
42         
43         int vt_total, vt_disp;
44         int vs_start, vs_end;
45         
46         int disp_end_clock;
47         int hs_start_clock, hs_end_clock;
48         
49         bool display, vblank, vsync, hsync;
50         
51         void set_display(bool val);
52         void set_vblank(bool val);
53         void set_vsync(bool val);
54         void set_hsync(bool val);
55         
56 public:
57         HD46505(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
58         {
59                 initialize_output_signals(&outputs_disp);
60                 initialize_output_signals(&outputs_vblank);
61                 initialize_output_signals(&outputs_vsync);
62                 initialize_output_signals(&outputs_hsync);
63                 set_device_name(_T("HD46505 CRTC"));
64         }
65         ~HD46505() {}
66         
67         // common functions
68         void initialize();
69         void reset();
70         void write_io8(uint32_t addr, uint32_t data);
71         uint32_t read_io8(uint32_t addr);
72         void event_pre_frame();
73         void event_frame();
74         void event_vline(int v, int clock);
75         void event_callback(int event_id, int err);
76         void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
77         void save_state(FILEIO* state_fio);
78         bool load_state(FILEIO* state_fio);
79         
80         // unique function
81         void set_context_disp(DEVICE* device, int id, uint32_t mask)
82         {
83                 register_output_signal(&outputs_disp, device, id, mask);
84         }
85         void set_context_vblank(DEVICE* device, int id, uint32_t mask)
86         {
87                 register_output_signal(&outputs_vblank, device, id, mask);
88         }
89         void set_context_vsync(DEVICE* device, int id, uint32_t mask)
90         {
91                 register_output_signal(&outputs_vsync, device, id, mask);
92         }
93         void set_context_hsync(DEVICE* device, int id, uint32_t mask)
94         {
95                 register_output_signal(&outputs_hsync, device, id, mask);
96         }
97 #if defined(HD46505_CHAR_CLOCK)
98         void set_char_clock(double clock)
99         {
100                 next_char_clock = clock;
101         }
102 #elif defined(HD46505_HORIZ_FREQ)
103         void set_horiz_freq(double freq)
104         {
105                 next_horiz_freq = freq;
106         }
107 #endif
108         uint8_t* get_regs()
109         {
110                 return regs;
111         }
112 };
113
114 #endif
115