2 Skelton for retropc emulator
\r
4 Origin : Neko Project 2
\r
5 Author : Takeda.Toshiya
\r
18 #define MODE_MIX ((sync[0] & 0x22) == 0x00)
\r
19 #define MODE_GFX ((sync[0] & 0x22) == 0x02)
\r
20 #define MODE_CHR ((sync[0] & 0x22) == 0x20)
\r
22 #define RT_MULBIT 15
\r
23 #define RT_TABLEBIT 12
\r
24 #define RT_TABLEMAX (1 << RT_TABLEBIT)
\r
28 class UPD7220 : public DEVICE
\r
32 outputs_t outputs_drq;
\r
33 outputs_t outputs_vsync;
\r
45 int vtotal, vs, v1, v2;
\r
58 bool hblank, vsync, start;
\r
63 bool cmd_write_done;
\r
66 #ifdef UPD7220_HORIZ_FREQ
\r
67 int horiz_freq, next_horiz_freq;
\r
69 double frames_per_sec;
\r
70 int lines_per_frame;
\r
78 int rt[RT_TABLEMAX + 1];
\r
79 int dx, dy; // from ead, dad
\r
80 int dir, dif, sl, dc, d, d2, d1, dm;
\r
110 void cmd_write_sub(uint32 addr, uint8 data);
\r
111 void write_vram(uint32 addr, uint8 data);
\r
112 uint8 read_vram(uint32 addr);
\r
113 void update_vect();
\r
121 void draw_pset(int x, int y);
\r
124 UPD7220(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
\r
126 init_output_signals(&outputs_drq);
\r
127 init_output_signals(&outputs_vsync);
\r
133 // common functions
\r
137 void write_dma_io8(uint32 addr, uint32 data);
\r
138 uint32 read_dma_io8(uint32 addr);
\r
139 void write_io8(uint32 addr, uint32 data);
\r
140 uint32 read_io8(uint32 addr);
\r
141 void event_pre_frame();
\r
142 void event_frame();
\r
143 void event_vline(int v, int clock);
\r
144 void event_callback(int event_id, int err);
\r
145 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame);
\r
146 void save_state(FILEIO* state_fio);
\r
147 bool load_state(FILEIO* state_fio);
\r
149 // unique functions
\r
150 void set_context_drq(DEVICE* device, int id, uint32 mask)
\r
152 register_output_signal(&outputs_drq, device, id, mask);
\r
154 void set_context_vsync(DEVICE* device, int id, uint32 mask)
\r
156 register_output_signal(&outputs_vsync, device, id, mask);
\r
158 void set_vram_ptr(uint8* ptr, uint32 size)
\r
160 vram = ptr; vram_size = size;
\r
162 #ifdef UPD7220_HORIZ_FREQ
\r
163 void set_horiz_freq(int freq)
\r
165 next_horiz_freq = freq;
\r
192 uint32 cursor_addr(uint32 mask);
\r
194 int cursor_bottom();
\r
197 return (blink_attr < (blink_rate * 3 / 4));
\r