2 * Common source code project -> FM-7 -> Display
3 * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
5 * Feb 10, 2015 : Initial.
8 #ifndef _CSP_FM7_DISPLAY_H
9 #define _CSP_FM7_DISPLAY_H
11 #include "../device.h"
12 #include "../memory.h"
13 #include "../mc6809.h"
14 #include "fm7_common.h"
21 class DISPLAY: public MEMORY
39 void set_multimode(uint8 val);
40 uint8 get_multimode(void);
41 uint8 get_cpuaccessmask(void);
42 void set_dpalette(uint32 addr, uint8 val);
43 uint8 get_dpalette(uint32 addr);
44 void enter_display(void);
45 void leave_display(void);
46 void halt_subsystem(void);
47 void restart_subsystem(void);
48 void set_crtflag(void);
49 void reset_crtflag(void);
50 uint8 acknowledge_irq(void);
52 uint8 attention_irq(void);
53 void set_cyclesteal(uint8 val);
54 uint8 set_vramaccess(void);
55 void reset_vramaccess(void);
56 uint8 reset_subbusy(void);
57 void set_subbusy(void);
58 #if defined(_FM77AV_VARIANTS)
59 void alu_write_cmdreg(uint8 val);
60 void alu_write_logical_color(uint8 val);
61 void alu_write_mask_reg(uint8 val);
62 void alu_write_cmpdata_reg(int addr, uint8 val);
63 void alu_write_disable_reg(uint8 val);
64 void alu_write_tilepaint_data(int addr, uint8 val);
65 void alu_write_offsetreg_hi(uint8 val);
66 void alu_write_offsetreg_lo(uint8 val);
67 void alu_write_linepattern_hi(uint8 val);
68 void alu_write_linepattern_lo(uint8 val);
69 void alu_write_line_position(int addr, uint8 val);
70 void select_sub_bank(uint8 val);
71 void select_vram_bank_av40(uint8 val);
72 uint8 get_miscreg(void);
73 void set_miscreg(uint8 val);
74 void set_monitor_bank(uint8 var);
75 void set_apalette_index_hi(uint8 val);
76 void set_apalette_index_lo(uint8 val);
77 void calc_apalette(uint32 index);
78 void set_apalette_b(uint8 val);
79 void set_apalette_r(uint8 val);
80 void set_apalette_g(uint8 val);
81 uint8 get_key_encoder(void);
82 void put_key_encoder(uint8 data);
83 uint8 get_key_encoder_status(void);
85 #endif // _FM77AV_VARIANTS
117 #if defined(_FM77_VARIANTS)
120 #elif defined(_FM77AV_VARIANTS)
122 #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
132 bool diag_load_subrom_a;
133 bool diag_load_subrom_b;
134 bool diag_load_subrom_cg;
136 bool diag_load_subrom_c;
138 scrntype dpalette_pixel[8];
139 uint8 dpalette_data[8];
140 #if defined(_FM77AV_VARIANTS)
142 uint8 analog_palette_r[4096];
143 uint8 analog_palette_g[4096];
144 uint8 analog_palette_b[4096];
145 scrntype apalette_pixel[4096];
146 #endif // FM77AV etc...
153 uint8 multimode_accessmask;
154 uint8 multimode_dispmask;
157 uint32 tmp_offset_point;
161 #if defined(_FM77AV_VARIANTS)
163 uint8 subrom_bank_using;
164 uint32 offset_point_bank1;
165 #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
167 bool monitor_ram_using;
171 #if defined(_FM77AV_VARIANTS)
172 uint8 gvram[0x2000 * 12];
173 #elif defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)
174 uint8 gvram[0x4000 * 6];
176 uint8 gvram[0x4000 * 3];
179 uint8 console_ram[0x1000];
180 uint8 work_ram[0x380];
181 uint8 shared_ram[0x80];
183 uint8 subsys_c[0x2800];
184 #if defined(_FM77AV_VARIANTS)
185 uint8 subsys_a[0x2000];
186 uint8 subsys_b[0x2000];
187 uint8 subsys_cg[0x2000];
188 uint8 subsys_ram[0x2000];
193 bool vram_accessflag;
198 #if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)
203 #if defined(_FM77AV_VARIANTS)
211 inline int GETVRAM_8_200L(int yoff, scrntype *p, uint32 rgbmask);
212 inline int GETVRAM_4096(int yoff, scrntype *p, uint32 rgbmask);
214 DISPLAY(VM *parent_vm, EMU *parent_emu);
216 void event_callback(int event_id, int err);
217 void write_signal(int id, uint32 data, uint32 mask);
218 uint32 read_signal(int id);
219 uint32 read_data8(uint32 addr);
220 void write_data8(uint32 addr, uint32 data);
221 void initialize(void);
224 void update_config(void);
226 void draw_screen(void);
227 void event_frame(void);
228 void event_vline(int v, int clock);
231 void set_context_kanjiclass1(MEMORY *p) {
232 #if defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS) // Really?
237 void set_context_kanjiclass2(MEMORY *p) {
238 #if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)
241 if(p != NULL) kanji_level2 = true;
244 void set_context_mainio(DEVICE *p) {
247 void set_context_keyboard(DEVICE *p) {
250 void set_context_subcpu(DEVICE *p) {
253 #if defined(_FM77AV_VARIANTS)
254 void set_context_alu(DEVICE *p) {
259 #endif // _CSP_FM7_DISPLAY_H