OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mc6809.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME 0.142
5         Author : Takeda.Toshiya
6         Date   : 2011.05.06-
7
8         [ MC6809 ]
9 */
10
11 #ifndef _MC6809_H_ 
12 #define _MC6809_H_
13
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17 #include "../fileio.h"
18
19 class MC6809 : public DEVICE
20 {
21 private:
22         // context
23         DEVICE *d_mem;
24         
25         // registers
26         pair pc;        /* Program counter */
27         pair ppc;       /* Previous program counter */
28         pair acc;       /* Accumulator a and b */
29         pair dp;        /* Direct Page register (page in MSB) */
30         pair u, s;      /* Stack pointers */
31         pair x, y;      /* Index registers */
32         uint8 cc;
33         pair ea;        /* effective address */
34         
35         uint32 int_state;
36         int icount;
37         int extra_icount;
38    
39         inline uint32 RM16(uint32 Addr);
40         inline void WM16(uint32 Addr, pair *p);
41         
42         // opcodes
43         void run_one_opecode();
44         void op(uint8 ireg);
45         inline void fetch_effective_address();
46         inline void abx();
47         inline void adca_di();
48         inline void adca_ex();
49         inline void adca_im();
50         inline void adca_ix();
51         inline void adcb_di();
52         inline void adcb_ex();
53         inline void adcb_im();
54         inline void adcb_ix();
55         inline void adda_di();
56         inline void adda_ex();
57         inline void adda_im();
58         inline void adda_ix();
59         inline void addb_di();
60         inline void addb_ex();
61         inline void addb_im();
62         inline void addb_ix();
63         inline void addd_di();
64         inline void addd_ex();
65         inline void addd_im();
66         inline void addd_ix();
67         inline void anda_di();
68         inline void anda_ex();
69         inline void anda_im();
70         inline void anda_ix();
71         inline void andb_di();
72         inline void andb_ex();
73         inline void andb_im();
74         inline void andb_ix();
75         inline void andcc();
76         inline void asla();
77         inline void aslb();
78         inline void aslcc_in();
79         inline void asl_di();
80         inline void asl_ex();
81         inline void asl_ix();
82         inline void asra();
83         inline void asrb();
84         inline void asr_di();
85         inline void asr_ex();
86         inline void asr_ix();
87         inline void bcc();
88         inline void bcs();
89         inline void beq();
90         inline void bge();
91         inline void bgt();
92         inline void bhi();
93         inline void bita_di();
94         inline void bita_ex();
95         inline void bita_im();
96         inline void bita_ix();
97         inline void bitb_di();
98         inline void bitb_ex();
99         inline void bitb_im();
100         inline void bitb_ix();
101         inline void ble();
102         inline void bls();
103         inline void blt();
104         inline void bmi();
105         inline void bne();
106         inline void bpl();
107         inline void bra();
108         inline void brn();
109         inline void bsr();
110         inline void bvc();
111         inline void bvs();
112         inline void clca();
113         inline void clcb();
114         inline void clra();
115         inline void clrb();
116         inline void clr_di();
117         inline void clr_ex();
118         inline void clr_ix();
119         inline void cmpa_di();
120         inline void cmpa_ex();
121         inline void cmpa_im();
122         inline void cmpa_ix();
123         inline void cmpb_di();
124         inline void cmpb_ex();
125         inline void cmpb_im();
126         inline void cmpb_ix();
127         inline void cmpd_di();
128         inline void cmpd_ex();
129         inline void cmpd_im();
130         inline void cmpd_ix();
131         inline void cmps_di();
132         inline void cmps_ex();
133         inline void cmps_im();
134         inline void cmps_ix();
135         inline void cmpu_di();
136         inline void cmpu_ex();
137         inline void cmpu_im();
138         inline void cmpu_ix();
139         inline void cmpx_di();
140         inline void cmpx_ex();
141         inline void cmpx_im();
142         inline void cmpx_ix();
143         inline void cmpy_di();
144         inline void cmpy_ex();
145         inline void cmpy_im();
146         inline void cmpy_ix();
147         inline void coma();
148         inline void comb();
149         inline void com_di();
150         inline void com_ex();
151         inline void com_ix();
152         inline void cwai();
153         inline void daa();
154         inline void dcca();
155         inline void dccb();
156         inline void dcc_di();
157         inline void dcc_ex();
158         inline void dcc_ix();
159         inline void deca();
160         inline void decb();
161         inline void dec_di();
162         inline void dec_ex();
163         inline void dec_ix();
164         inline void eora_di();
165         inline void eora_ex();
166         inline void eora_im();
167         inline void eora_ix();
168         inline void eorb_di();
169         inline void eorb_ex();
170         inline void eorb_im();
171         inline void eorb_ix();
172         inline void exg();
173         inline void flag8_im();
174         inline void flag16_im();
175         inline void illegal();
176         inline void inca();
177         inline void incb();
178         inline void inc_di();
179         inline void inc_ex();
180         inline void inc_ix();
181         inline void jmp_di();
182         inline void jmp_ex();
183         inline void jmp_ix();
184         inline void jsr_di();
185         inline void jsr_ex();
186         inline void jsr_ix();
187         inline void lbcc();
188         inline void lbcs();
189         inline void lbeq();
190         inline void lbge();
191         inline void lbgt();
192         inline void lbhi();
193         inline void lble();
194         inline void lbls();
195         inline void lblt();
196         inline void lbmi();
197         inline void lbne();
198         inline void lbpl();
199         inline void lbra();
200         inline void lbrn();
201         inline void lbsr();
202         inline void lbvc();
203         inline void lbvs();
204         inline void lda_di();
205         inline void lda_ex();
206         inline void lda_im();
207         inline void lda_ix();
208         inline void ldb_di();
209         inline void ldb_ex();
210         inline void ldb_im();
211         inline void ldb_ix();
212         inline void ldd_di();
213         inline void ldd_ex();
214         inline void ldd_im();
215         inline void ldd_ix();
216         inline void lds_di();
217         inline void lds_ex();
218         inline void lds_im();
219         inline void lds_ix();
220         inline void ldu_di();
221         inline void ldu_ex();
222         inline void ldu_im();
223         inline void ldu_ix();
224         inline void ldx_di();
225         inline void ldx_ex();
226         inline void ldx_im();
227         inline void ldx_ix();
228         inline void ldy_di();
229         inline void ldy_ex();
230         inline void ldy_im();
231         inline void ldy_ix();
232         inline void leas();
233         inline void leau();
234         inline void leax();
235         inline void leay();
236         inline void lsra();
237         inline void lsrb();
238         inline void lsr_di();
239         inline void lsr_ex();
240         inline void lsr_ix();
241         inline void mul();
242         inline void nega();
243         inline void negb();
244         inline void neg_di();
245         inline void neg_ex();
246         inline void neg_ix();
247         inline void ngca();
248         inline void ngcb();
249         inline void ngc_di();
250         inline void ngc_ex();
251         inline void ngc_ix();
252         inline void nop();
253         inline void ora_di();
254         inline void ora_ex();
255         inline void ora_im();
256         inline void ora_ix();
257         inline void orb_di();
258         inline void orb_ex();
259         inline void orb_im();
260         inline void orb_ix();
261         inline void orcc();
262         inline void pref10();
263         inline void pref11();
264         inline void pshs();
265         inline void pshu();
266         inline void puls();
267         inline void pulu();
268         inline void rola();
269         inline void rolb();
270         inline void rol_di();
271         inline void rol_ex();
272         inline void rol_ix();
273         inline void rora();
274         inline void rorb();
275         inline void ror_di();
276         inline void ror_ex();
277         inline void ror_ix();
278         inline void rst();
279         inline void rti();      
280         inline void rts();      
281         inline void sbca_di();
282         inline void sbca_ex();
283         inline void sbca_im();
284         inline void sbca_ix();
285         inline void sbcb_di();
286         inline void sbcb_ex();
287         inline void sbcb_im();
288         inline void sbcb_ix();
289         inline void sex();
290         inline void sta_di();
291         inline void sta_ex();
292         inline void sta_im();
293         inline void sta_ix();
294         inline void stb_di();
295         inline void stb_ex();
296         inline void stb_im();
297         inline void stb_ix();
298         inline void std_di();
299         inline void std_ex();
300         inline void std_im();
301         inline void std_ix();
302         inline void sts_di();
303         inline void sts_ex();
304         inline void sts_im();
305         inline void sts_ix();
306         inline void stu_di();
307         inline void stu_ex();
308         inline void stu_im();
309         inline void stu_ix();
310         inline void stx_di();
311         inline void stx_ex();
312         inline void stx_im();
313         inline void stx_ix();
314         inline void sty_di();
315         inline void sty_ex();
316         inline void sty_im();
317         inline void sty_ix();
318         inline void suba_di();
319         inline void suba_ex();
320         inline void suba_im();
321         inline void suba_ix();
322         inline void subb_di();
323         inline void subb_ex();
324         inline void subb_im();
325         inline void subb_ix();
326         inline void subd_di();
327         inline void subd_ex();
328         inline void subd_im();
329         inline void subd_ix();
330         inline void swi2();
331         inline void swi3();
332         inline void swi();
333         inline void sync();
334         inline void tfr();
335         inline void trap();
336         inline void tsta();
337         inline void tstb();
338         inline void tst_di();
339         inline void tst_ex();
340         inline void tst_ix();
341         
342 public:
343         MC6809(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
344         ~MC6809() {}
345         
346         // common functions
347         void reset();
348         int run(int clock);
349         void write_signal(int id, uint32 data, uint32 mask);
350         void save_state(FILEIO* state_fio);
351         bool load_state(FILEIO* state_fio);
352         void set_extra_clock(int clock)
353         {
354                                 extra_icount += clock;
355         }
356         int get_extra_clock()
357         {
358                 return extra_icount;
359         }
360         uint32 get_pc()
361         {
362                 return ppc.w.l;
363         }
364         
365         // unique function
366         void set_context_mem(DEVICE* device)
367         {
368                 d_mem = device;
369         }
370 };
371
372 #endif
373