OSDN Git Service

[VM][WIP] Set default name to devices, these are WIP.
[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 private:
20         // output signals
21         outputs_t outputs_disp;
22         outputs_t outputs_vblank;
23         outputs_t outputs_vsync;
24         outputs_t outputs_hsync;
25         
26         uint8_t regs[18];
27         bool regs_written[18];
28         int ch;
29         bool timing_changed;
30         
31         int cpu_clocks;
32 #if defined(HD46505_CHAR_CLOCK)
33         double char_clock, next_char_clock;
34 #elif defined(HD46505_HORIZ_FREQ)
35         double horiz_freq, next_horiz_freq;
36 #endif
37         double frames_per_sec;
38         
39         int hz_total, hz_disp;
40         int hs_start, hs_end;
41         
42         int vt_total, vt_disp;
43         int vs_start, vs_end;
44         
45         int disp_end_clock;
46         int hs_start_clock, hs_end_clock;
47         
48         bool display, vblank, vsync, hsync;
49         
50         void set_display(bool val);
51         void set_vblank(bool val);
52         void set_vsync(bool val);
53         void set_hsync(bool val);
54         
55 public:
56         HD46505(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
57         {
58                 initialize_output_signals(&outputs_disp);
59                 initialize_output_signals(&outputs_vblank);
60                 initialize_output_signals(&outputs_vsync);
61                 initialize_output_signals(&outputs_hsync);
62                 set_device_name(_T("HD46505 CRTC"));
63         }
64         ~HD46505() {}
65         
66         // common functions
67         void initialize();
68         void reset();
69         void write_io8(uint32_t addr, uint32_t data);
70         uint32_t read_io8(uint32_t addr);
71         void event_pre_frame();
72         void event_frame();
73         void event_vline(int v, int clock);
74         void event_callback(int event_id, int err);
75         void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
76         void save_state(FILEIO* state_fio);
77         bool load_state(FILEIO* state_fio);
78         
79         // unique function
80         void set_context_disp(DEVICE* device, int id, uint32_t mask)
81         {
82                 register_output_signal(&outputs_disp, device, id, mask);
83         }
84         void set_context_vblank(DEVICE* device, int id, uint32_t mask)
85         {
86                 register_output_signal(&outputs_vblank, device, id, mask);
87         }
88         void set_context_vsync(DEVICE* device, int id, uint32_t mask)
89         {
90                 register_output_signal(&outputs_vsync, device, id, mask);
91         }
92         void set_context_hsync(DEVICE* device, int id, uint32_t mask)
93         {
94                 register_output_signal(&outputs_hsync, device, id, mask);
95         }
96 #if defined(HD46505_CHAR_CLOCK)
97         void set_char_clock(double clock)
98         {
99                 next_char_clock = clock;
100         }
101 #elif defined(HD46505_HORIZ_FREQ)
102         void set_horiz_freq(double freq)
103         {
104                 next_horiz_freq = freq;
105         }
106 #endif
107         uint8_t* get_regs()
108         {
109                 return regs;
110         }
111 };
112
113 #endif
114