OSDN Git Service

[VM][FM16BETA][OOPS] Add main feature.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm16beta / main.h
1 /*\r
2         FUJITSU FM16beta Emulator 'eFM16beta'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2017.12.28-\r
6 \r
7         [ main system ]\r
8 */\r
9 \r
10 #ifndef _MAIN_H_\r
11 #define _MAIN_H_\r
12 \r
13 #include "../memory.h"\r
14 \r
15 #define SIG_MAIN_IRQ0_TX        0       // RS-232C\r
16 #define SIG_MAIN_IRQ0_RX        1       // RS-232C\r
17 #define SIG_MAIN_IRQ0_SYN       2       // RS-232C\r
18 #define SIG_MAIN_IRQ1           3       // Keyboard\r
19 #define SIG_MAIN_IRQ2           4       // Expantion\r
20 #define SIG_MAIN_IRQ3           5       // DMA Controller\r
21 #define SIG_MAIN_IRQ4           6       // 320KB Floppy Disk\r
22 #define SIG_MAIN_IRQ5           7       // 1MB Floppy Disk\r
23 #define SIG_MAIN_IRQ6           8       // Hard Disk\r
24 #define SIG_MAIN_IRQ7           9       // Printer\r
25 #define SIG_MAIN_IRQ8           10      // PTM\r
26 #define SIG_MAIN_IRQ9           11      // User\r
27 #define SIG_MAIN_FIRQ0          12      // Sub system attention\r
28 #define SIG_MAIN_FIRQ1          13      // Break\r
29 #define SIG_MAIN_FIRQ2          14      // Expantion\r
30 #define SIG_MAIN_FIRQ3          15      // User\r
31 \r
32 #define SIG_MAIN_SUB_BUSY       16\r
33 \r
34 #define SIG_MAIN_DRQ_2HD        17\r
35 #define SIG_MAIN_DRQ_2D         18\r
36 \r
37 #define SIG_MAIN_RTC_DATA       19\r
38 #define SIG_MAIN_RTC_BUSY       20\r
39 \r
40 #ifdef HAS_I286\r
41 class I286;\r
42 #endif\r
43 class I8237;\r
44 class MB8877;\r
45 \r
46 class MAIN : public MEMORY\r
47 {\r
48 private:\r
49 #ifdef HAS_I286\r
50         I286 *d_cpu;\r
51         uint8_t rst;\r
52 #endif\r
53         I8237 *d_dma;\r
54         DEVICE *d_pic;\r
55         DEVICE *d_pcm;\r
56         DEVICE *d_keyboard;\r
57 \r
58         // memory\r
59         uint8_t ram[0xfc000];\r
60         uint8_t rom[0x04000];\r
61         uint8_t direct;\r
62         \r
63         // main-sub\r
64         DEVICE *d_sub;\r
65         bool sub_busy;\r
66         \r
67         // 1mb fdd\r
68         MB8877 *d_fdc_2hd;\r
69         uint8_t sidereg_2hd, drvreg_2hd;\r
70         bool drq_2hd;\r
71         \r
72         // 320kb fdd\r
73         MB8877 *d_fdc_2d;\r
74         uint8_t sidereg_2d, drvreg_2d;\r
75         bool drq_2d;\r
76         \r
77         // rtc\r
78         DEVICE *d_rtc;\r
79         uint8_t rtc_data;\r
80         \r
81         // irq\r
82         uint8_t irq_enb, ext_irq_enb;\r
83         bool irq0_tx, irq0_rx, irq0_syn, irq1, irq2, irq3, irq4, irq5, irq6, irq7, irq8, irq9;\r
84         bool firq0, firq1, firq2, firq3;\r
85         bool int0, int1, int2, int3, int4, int5, int6, int7;\r
86         \r
87         void update_int0();\r
88         void update_int1();\r
89         void update_int2();\r
90         void update_int3();\r
91         void update_int4();\r
92         void update_int5();\r
93         void update_int6();\r
94         void update_int7();\r
95         \r
96 public:\r
97         MAIN(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MEMORY(parent_vm, parent_emu)\r
98         {\r
99                 set_device_name(_T("Main System"));\r
100         }\r
101         ~MAIN() {}\r
102         \r
103         // common functions\r
104         void initialize();\r
105         void release();\r
106         void reset();\r
107         void write_io8(uint32_t addr, uint32_t data);\r
108         uint32_t read_io8(uint32_t addr);\r
109         void write_signal(int id, uint32_t data, uint32_t mask);\r
110         bool process_state(FILEIO* state_fio, bool loading);\r
111         \r
112         // unique functions\r
113 #ifdef HAS_I286\r
114         void set_context_cpu(I286* device)\r
115         {\r
116                 d_cpu = device;\r
117         }\r
118 #endif\r
119         void set_context_dma(I8237* device)\r
120         {\r
121                 d_dma = device;\r
122         }\r
123         void set_context_fdc_2hd(MB8877* device)\r
124         {\r
125                 d_fdc_2hd = device;\r
126         }\r
127         void set_context_fdc_2d(MB8877* device)\r
128         {\r
129                 d_fdc_2d = device;\r
130         }\r
131         void set_context_pic(DEVICE* device)\r
132         {\r
133                 d_pic = device;\r
134         }\r
135         void set_context_pcm(DEVICE* device)\r
136         {\r
137                 d_pcm = device;\r
138         }\r
139         void set_context_rtc(DEVICE* device)\r
140         {\r
141                 d_rtc = device;\r
142         }\r
143         void set_context_sub(DEVICE* device)\r
144         {\r
145                 d_sub = device;\r
146         }\r
147         void set_context_keyboard(DEVICE* device)\r
148         {\r
149                 d_keyboard = device;\r
150         }\r
151 };\r
152 \r
153 #endif\r