2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 class HD46505 : public DEVICE
22 outputs_t outputs_disp;
23 outputs_t outputs_vblank;
24 outputs_t outputs_vsync;
25 outputs_t outputs_hsync;
28 bool regs_written[18];
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;
38 double frames_per_sec;
40 int hz_total, hz_disp;
43 int vt_total, vt_disp;
47 int hs_start_clock, hs_end_clock;
49 bool display, vblank, vsync, hsync;
55 bool _E_HD46505_CHAR_CLOCK;
56 bool _E_HD46505_HORIZ_FREQ;
57 double _HD46505_CHAR_CLOCK;
58 double _HD46505_HORIZ_FREQ;
60 void set_display(bool val);
61 void set_vblank(bool val);
62 void set_vsync(bool val);
63 void set_hsync(bool val);
66 HD46505(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
68 initialize_output_signals(&outputs_disp);
69 initialize_output_signals(&outputs_vblank);
70 initialize_output_signals(&outputs_vsync);
71 initialize_output_signals(&outputs_hsync);
75 _LINES_PER_FRAME = 200;
76 _HD46505_CHAR_CLOCK = 0.0;
77 _HD46505_HORIZ_FREQ = 0.0;
78 _E_HD46505_CHAR_CLOCK = false;
79 _E_HD46505_HORIZ_FREQ = false;
80 set_device_name(_T("HD46505 CRTC"));
87 void write_io8(uint32_t addr, uint32_t data);
88 uint32_t read_io8(uint32_t addr);
89 void event_pre_frame();
91 void event_vline(int v, int clock);
92 void event_callback(int event_id, int err);
93 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
95 void save_state(FILEIO* state_fio);
96 bool load_state(FILEIO* state_fio);
99 void set_context_disp(DEVICE* device, int id, uint32_t mask)
101 register_output_signal(&outputs_disp, device, id, mask);
103 void set_context_vblank(DEVICE* device, int id, uint32_t mask)
105 register_output_signal(&outputs_vblank, device, id, mask);
107 void set_context_vsync(DEVICE* device, int id, uint32_t mask)
109 register_output_signal(&outputs_vsync, device, id, mask);
111 void set_context_hsync(DEVICE* device, int id, uint32_t mask)
113 register_output_signal(&outputs_hsync, device, id, mask);
115 //#if defined(HD46505_CHAR_CLOCK)
116 void set_char_clock(double clock)
118 next_char_clock = clock;
120 //#elif defined(HD46505_HORIZ_FREQ)
121 void set_horiz_freq(double freq)
123 next_horiz_freq = freq;