OSDN Git Service

60267227bef06c5c492d47a7d7429f8b49174375
[csp-qt/common_source_project-fm7.git] / source / src / vm / bubcom80 / bubcom80.h
1 /*
2         Systems Formulate BUBCOM80 Emulator 'eBUBCOM80'
3
4         Author : Takeda.Toshiya
5         Date   : 2018.05.08-
6
7         [ virtual machine ]
8 */
9
10 #ifndef _BUBCOM80_H_
11 #define _BUBCOM80_H_
12
13 #define DEVICE_NAME             "Systems Formulate BUBCOM80"
14 #define CONFIG_NAME             "bubcom80"
15
16 // device informations for virtual machine
17 #define FRAMES_PER_SEC          62.422
18 #define LINES_PER_FRAME         260
19 //#define CPU_CLOCKS            3993624
20 #define CPU_CLOCKS              4000000
21 #define SCREEN_WIDTH            640
22 #define SCREEN_HEIGHT           400
23 #define WINDOW_HEIGHT_ASPECT    480
24 #define MAX_DRIVE               4
25 #define MEMORY_ADDR_MAX         0x10000
26 #define MEMORY_BANK_SIZE        0x800
27 #define IO_ADDR_MAX             0x10000
28 #define SUPPORT_VARIABLE_TIMING
29
30 // device informations for win32
31 #define USE_FLOPPY_DISK         4
32 #define USE_TAPE                1
33 #define TAPE_BINARY_ONLY
34 #define USE_BUBBLE              2
35 #define USE_SHIFT_NUMPAD_KEY
36 #define USE_ALT_F10_KEY
37 #define USE_AUTO_KEY            5
38 #define USE_AUTO_KEY_RELEASE    6
39 #define USE_AUTO_KEY_NUMPAD
40 #define USE_SCREEN_FILTER
41 #define USE_SCANLINE
42 #define USE_SOUND_VOLUME        2
43 #define USE_JOYSTICK
44 #define USE_PRINTER
45 #define USE_PRINTER_TYPE        3
46 #define USE_DEBUGGER
47 #define USE_STATE
48
49 #include "../../common.h"
50 #include "../../fileio.h"
51 #include "../vm_template.h"
52
53 #ifdef USE_SOUND_VOLUME
54 static const _TCHAR *sound_device_caption[] = {
55         _T("Beep"), _T("Noise (FDD)"),
56 };
57 #endif
58
59 //class csp_state_utils;
60 class EMU;
61 class DEVICE;
62 class EVENT;
63
64 class IO;
65 class LS393;
66 class MB8877;
67 class MC6850;
68 class MEMORY;
69 class PCM1BIT;
70 class Z80;
71 class Z80CTC;
72
73 class BUBBLECASETTE;
74 class CMT;
75 class DISPLAY;
76 class FLOPPY;
77 class KEYBOARD;
78 class MEMBUS;
79 class RTC;
80
81 class VM : public VM_TEMPLATE
82 {
83 protected:
84         //EMU* emu;
85         
86         // devices
87         //EVENT* event;
88         //csp_state_utils *state_entry;
89         
90         IO* io;
91         LS393* flipflop;
92         MB8877* fdc;
93 //      MC6850* sio_rs;
94         MC6850* sio_cmt;
95 //      MC6850* sio_key;
96         PCM1BIT* pcm;
97         Z80* cpu;
98         Z80CTC* ctc;
99         
100         BUBBLECASETTE* bubblecasette[2];
101         CMT* cmt;
102         DEVICE* printer;
103         DISPLAY* display;
104         FLOPPY* floppy;
105         KEYBOARD* keyboard;
106         MEMBUS* membus;
107         RTC* rtc;
108         
109 public:
110         // ----------------------------------------
111         // initialize
112         // ----------------------------------------
113         
114         VM(EMU* parent_emu);
115         ~VM();
116         
117         // ----------------------------------------
118         // for emulation class
119         // ----------------------------------------
120         
121         // drive virtual machine
122         void reset();
123         void run();
124         double get_frame_rate();
125         
126 #ifdef USE_DEBUGGER
127         // debugger
128         DEVICE *get_cpu(int index);
129 #endif
130         
131         // draw screen
132         void draw_screen();
133         
134         // sound generation
135         void initialize_sound(int rate, int samples);
136         uint16_t* create_sound(int* extra_frames);
137         int get_sound_buffer_ptr();
138 #ifdef USE_SOUND_VOLUME
139         void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
140 #endif
141         
142         // user interface
143         void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
144         void close_floppy_disk(int drv);
145         bool is_floppy_disk_inserted(int drv);
146         void is_floppy_disk_protected(int drv, bool value);
147         bool is_floppy_disk_protected(int drv);
148         uint32_t is_floppy_disk_accessed();
149         void play_tape(int drv, const _TCHAR* file_path);
150         void rec_tape(int drv, const _TCHAR* file_path);
151         void close_tape(int drv);
152         bool is_tape_inserted(int drv);
153         void open_bubble_casette(int drv, const _TCHAR *path, int bank);
154         void close_bubble_casette(int drv);
155         bool is_bubble_casette_inserted(int drv);
156         bool is_bubble_casette_protected(int drv);
157         void is_bubble_casette_protected(int drv, bool flag);
158         bool is_frame_skippable();
159         
160         void update_config();
161         void decl_state();
162         void save_state(FILEIO* state_fio);
163         bool load_state(FILEIO* state_fio);
164         
165         // ----------------------------------------
166         // for each device
167         // ----------------------------------------
168         
169         // devices
170         DEVICE* get_device(int id);
171         //DEVICE* dummy;
172         //DEVICE* first_device;
173         //DEVICE* last_device;
174 };
175
176 #endif