2 Skelton for retropc emulator
4 Origin : Neko Project 2
5 Author : Takeda.Toshiya
18 #define MODE_MIX ((sync[0] & 0x22) == 0x00)
19 #define MODE_GFX ((sync[0] & 0x22) == 0x02)
20 #define MODE_CHR ((sync[0] & 0x22) == 0x20)
23 #define RT_TABLEBIT 12
24 #define RT_TABLEMAX (1 << RT_TABLEBIT)
28 class UPD7220 : public DEVICE
32 outputs_t outputs_drq;
33 outputs_t outputs_vsync;
38 uint16 vram_data_mask;
46 int vtotal, vs, v1, v2;
59 bool hblank, vsync, start;
67 #ifdef UPD7220_HORIZ_FREQ
68 int horiz_freq, next_horiz_freq;
70 double frames_per_sec;
79 int rt[RT_TABLEMAX + 1];
80 int dx, dy; // from ead, dad
81 int dir, dif, sl, dc, d, d2, d1, dm;
111 void cmd_write_sub(uint32 addr, uint8 data);
112 void write_vram(uint32 addr, uint8 data);
113 uint8 read_vram(uint32 addr);
122 void draw_pset(int x, int y);
125 UPD7220(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
127 init_output_signals(&outputs_drq);
128 init_output_signals(&outputs_vsync);
131 vram_data_mask = 0xffff;
139 void write_dma_io8(uint32 addr, uint32 data);
140 uint32 read_dma_io8(uint32 addr);
141 void write_io8(uint32 addr, uint32 data);
142 uint32 read_io8(uint32 addr);
143 void event_pre_frame();
145 void event_vline(int v, int clock);
146 void event_callback(int event_id, int err);
147 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
148 void save_state(FILEIO* state_fio);
149 bool load_state(FILEIO* state_fio);
152 void set_context_drq(DEVICE* device, int id, uint32 mask)
154 register_output_signal(&outputs_drq, device, id, mask);
156 void set_context_vsync(DEVICE* device, int id, uint32 mask)
158 register_output_signal(&outputs_vsync, device, id, mask);
160 void set_vram_ptr(uint8* ptr, uint32 size)
165 void set_vram_ptr(uint8* ptr, uint32 size, uint16 mask)
169 vram_data_mask = mask;
171 #ifdef UPD7220_HORIZ_FREQ
172 void set_horiz_freq(int freq)
174 next_horiz_freq = freq;
201 uint32 cursor_addr(uint32 mask);
206 return (blink_attr < (blink_rate * 3 / 4));