OSDN Git Service

[General][CMake] Merge upstream 2016-02-26.
[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 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         }
63         ~HD46505() {}
64         
65         // common functions
66         void initialize();
67         void reset();
68         void write_io8(uint32 addr, uint32 data);
69         uint32 read_io8(uint32 addr);
70         void event_pre_frame();
71         void event_frame();
72         void event_vline(int v, int clock);
73         void event_callback(int event_id, int err);
74         void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
75         void save_state(FILEIO* state_fio);
76         bool load_state(FILEIO* state_fio);
77         
78         // unique function
79         void set_context_disp(DEVICE* device, int id, uint32 mask)
80         {
81                 register_output_signal(&outputs_disp, device, id, mask);
82         }
83         void set_context_vblank(DEVICE* device, int id, uint32 mask)
84         {
85                 register_output_signal(&outputs_vblank, device, id, mask);
86         }
87         void set_context_vsync(DEVICE* device, int id, uint32 mask)
88         {
89                 register_output_signal(&outputs_vsync, device, id, mask);
90         }
91         void set_context_hsync(DEVICE* device, int id, uint32 mask)
92         {
93                 register_output_signal(&outputs_hsync, device, id, mask);
94         }
95 #if defined(HD46505_CHAR_CLOCK)
96         void set_char_clock(double clock)
97         {
98                 next_char_clock = clock;
99         }
100 #elif defined(HD46505_HORIZ_FREQ)
101         void set_horiz_freq(double freq)
102         {
103                 next_horiz_freq = freq;
104         }
105 #endif
106         uint8* get_regs()
107         {
108                 return regs;
109         }
110 };
111
112 #endif
113