OSDN Git Service

[VM][Qt][UI][EMU][WIP] Use EMU_TEMPLATE:: instead of EMU:: . Some VMs are not apply...
[csp-qt/common_source_project-fm7.git] / source / src / vm / v99x8.h
1 // from "v99x8.h" of Zodiac
2
3 #ifndef _V99X8_H_
4 #define _V99X8_H_
5
6 #include "vm.h"
7 #include "../emu.h"
8 #include "device.h"
9
10 #ifndef VAR
11 #       define VAR extern
12 #endif
13
14 //#include "../misc/ut.h"
15 //#include <md.h>
16
17
18 #define V99X8_NREG 48
19 #define V99X8_NSTAT 10
20
21 enum
22 {
23         V99X8_SCREEN_IGN = -1,
24         V99X8_SCREEN_0, V99X8_SCREEN_1, V99X8_SCREEN_2, V99X8_SCREEN_3,
25         V99X8_SCREEN_4, V99X8_SCREEN_5, V99X8_SCREEN_6, V99X8_SCREEN_7,
26         V99X8_SCREEN_8, V99X8_SCREEN_X, V99X8_SCREEN_A, V99X8_SCREEN_C
27 };
28
29 typedef struct
30 {
31         bool f_tms;
32         bool f_interleave; /* sc7/8 \82É\82¨\82¯\82é\93Á\95Ê\82È\83}\83b\83s\83\93\83O\83\82\81[\83h */
33
34         int xsize;
35         int xshift;
36 } v99x8_screen_mode_t;
37
38 typedef struct
39 {
40         uint8_t ctrl[V99X8_NREG], status[V99X8_NSTAT];
41
42         int scr;
43         v99x8_screen_mode_t mode;
44
45         uint8_t col_fg, col_bg;
46
47         uint8_t *tbl_pg, *tbl_pn, *tbl_cl;
48
49         int pages;      /* VRAM memory size */
50         bool f_zoom;
51
52         uint8_t *vram;
53
54         int scanline, n_scanlines; /* \8f\88\97\9d\92\86\82Ì scanline \82Æ scanline \90\94\81B
55                                        ??? \82à\82Á\82Æ\82æ\82¢\83l\81[\83~\83\93\83O\81H */
56
57
58 /* private */
59
60
61 } v99x8_t;
62
63 VAR v99x8_t v99x8;
64
65
66 extern void v99x8_init(void);
67 extern void v99x8_ctrl(int n, uint8_t m);
68 extern int v99x8_hsync(void);
69
70 extern uint8_t v99x8_in_0(void);        /* VRAM read */
71 extern uint8_t v99x8_in_1(void);        /* status in */
72
73 extern void v99x8_out_0(uint8_t n);     /* VRAM write */
74 extern void v99x8_out_1(uint8_t n);     /* ctrl out */
75 extern void v99x8_out_2(uint8_t n);     /* palette out */
76 extern void v99x8_out_3(uint8_t n);     /* ctrl out */
77
78
79 extern void v99x8_pallete_set(uint8_t n, uint8_t r, uint8_t g, uint8_t b);
80 extern void v99x8_refresh_init(void);
81 extern void v99x8_refresh_screen(void);
82 extern void v99x8_refresh_clear(void);
83 extern void v99x8_refresh_sc0(int y, int h);
84 extern void v99x8_refresh_sc1(int y, int h);
85 extern void v99x8_refresh_sc2(int y, int h);
86 extern void v99x8_refresh_sc3(int y, int h);
87 extern void v99x8_refresh_sc4(int y, int h);
88 extern void v99x8_refresh_sc5(int y, int h);
89 extern void v99x8_refresh_sc6(int y, int h);
90 extern void v99x8_refresh_sc7(int y, int h);
91 extern void v99x8_refresh_sc8(int y, int h);
92 extern void v99x8_refresh_sca(int y, int h);
93 extern void v99x8_refresh_scc(int y, int h);
94 extern void v99x8_refresh_scx(int y, int h);
95
96 extern uint8_t vram_read(int addr);
97 extern void vram_write(int addr, uint8_t n);
98
99 /*
100 #define VRAM_ADDR(addr) (v99x8.f_interleave ? \
101                           (addr >> 1) | ((addr & 1) << 16) : \
102                           addr)
103 */
104
105
106
107
108
109 /*
110         Skelton for retropc emulator
111
112         Origin : "tms9918a.h"
113         Author : umaiboux
114         Date   : 2014.12.XX -
115
116         [ V99x8 ]
117 */
118
119
120 //#include "vm.h"
121 //#include "../emu.h"
122 #include "device.h"
123
124
125 class V99X8 : public DEVICE
126 {
127 private:
128         // output signals
129         outputs_t outputs_irq;
130         
131         uint8_t vram[1024*128];
132 //      scrntype_t screen[SCREEN_WIDTH*SCREEN_HEIGHT];
133         scrntype_t *screen;
134         bool intstat;
135         
136         int _SCREEN_WIDTH;
137         int _SCREEN_HEIGHT;
138         
139         void __FASTCALL set_intstat(bool val);
140
141         int __FASTCALL hsync(int v/*void*/);
142         void __FASTCALL z80_intreq(int a);
143         int __FASTCALL md_video_pitch(void);
144         uint8_t __FASTCALL *md_video_lockline(int x, int y, int w, int h);
145         void __FASTCALL md_video_update(int n, /*md_video_rect_t*/void *rp);
146         void __FASTCALL md_video_fill(int x, int y, int w, int h, uint32_t c);
147         void __FASTCALL v99x8_refresh_screen(void);
148         void __FASTCALL v99x8_refresh_clear(void);
149         uint8_t __FASTCALL *v99x8_refresh_start(int x, int w, int h);
150         void __FASTCALL v99x8_refresh_sc0(int y, int h);
151         void __FASTCALL v99x8_refresh_sc1(int y, int h);
152         void __FASTCALL v99x8_refresh_sc2(int y, int h);
153         void __FASTCALL v99x8_refresh_sc3(int y, int h);
154         void __FASTCALL v99x8_refresh_sc4(int y, int h);
155         void __FASTCALL v99x8_refresh_sc5(int y, int h);
156         void __FASTCALL v99x8_refresh_sc6(int y, int h);
157         void __FASTCALL v99x8_refresh_sc7(int y, int h);
158         void __FASTCALL v99x8_refresh_sc8(int y, int h);
159         void __FASTCALL v99x8_refresh_sca(int y, int h);
160         void __FASTCALL v99x8_refresh_scc(int y, int h);
161         void __FASTCALL v99x8_refresh_scx(int y, int h);
162         
163 public:
164         V99X8(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
165         {
166                 initialize_output_signals(&outputs_irq);
167                 set_device_name(_T("V99x8 VDP"));
168         }
169         ~V99X8() {}
170         
171         // common functions
172         void initialize();
173         void release();
174         void reset();
175         void __FASTCALL write_io8(uint32_t addr, uint32_t data);
176         uint32_t __FASTCALL read_io8(uint32_t addr);
177         void event_vline(int v, int clock);
178         bool process_state(FILEIO* state_fio, bool loading);
179         // unique functions
180         void set_context_irq(DEVICE* device, int id, uint32_t mask)
181         {
182                 register_output_signal(&outputs_irq, device, id, mask);
183         }
184         void draw_screen();
185 };
186
187 #endif