OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[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         int ch;
28         bool timing_changed;
29         
30         int cpu_clocks;
31 #ifdef HD46505_HORIZ_FREQ
32         int horiz_freq, next_horiz_freq;
33 #endif
34         double frames_per_sec;
35         
36         int hz_total, hz_disp;
37         int hs_start, hs_end;
38         
39         int vt_total, vt_disp;
40         int vs_start, vs_end;
41         
42         int disp_end_clock;
43         int hs_start_clock, hs_end_clock;
44         
45         bool display, vblank, vsync, hsync;
46         
47         void set_display(bool val);
48         void set_vblank(bool val);
49         void set_vsync(bool val);
50         void set_hsync(bool val);
51         
52 public:
53         HD46505(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
54         {
55                 init_output_signals(&outputs_disp);
56                 init_output_signals(&outputs_vblank);
57                 init_output_signals(&outputs_vsync);
58                 init_output_signals(&outputs_hsync);
59         }
60         ~HD46505() {}
61         
62         // common functions
63         void initialize();
64         void reset();
65         void write_io8(uint32 addr, uint32 data);
66         uint32 read_io8(uint32 addr);
67         void event_pre_frame();
68         void event_frame();
69         void event_vline(int v, int clock);
70         void event_callback(int event_id, int err);
71         void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
72         void save_state(FILEIO* state_fio);
73         bool load_state(FILEIO* state_fio);
74         
75         // unique function
76         void set_context_disp(DEVICE* device, int id, uint32 mask)
77         {
78                 register_output_signal(&outputs_disp, device, id, mask);
79         }
80         void set_context_vblank(DEVICE* device, int id, uint32 mask)
81         {
82                 register_output_signal(&outputs_vblank, device, id, mask);
83         }
84         void set_context_vsync(DEVICE* device, int id, uint32 mask)
85         {
86                 register_output_signal(&outputs_vsync, device, id, mask);
87         }
88         void set_context_hsync(DEVICE* device, int id, uint32 mask)
89         {
90                 register_output_signal(&outputs_hsync, device, id, mask);
91         }
92 #ifdef HD46505_HORIZ_FREQ
93         void set_horiz_freq(int freq)
94         {
95                 next_horiz_freq = freq;
96         }
97 #endif
98         uint8* get_regs()
99         {
100                 return regs;
101         }
102 };
103
104 #endif
105