OSDN Git Service

[VM][General] Merge upstream 2016-03-01. (Pahse 1).
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz1p17.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2015.12.24-
6
7         [ MZ-1P17 ]
8 */
9
10 #ifndef _MZ1P17_H_
11 #define _MZ1P17_H_
12
13 #include "vm.h"
14 #include "../emu.h"
15 #include "device.h"
16
17 #define MZ1P17_MODE_MZ1 0
18 #define MZ1P17_MODE_MZ2 1
19 #define MZ1P17_MODE_MZ3 2
20 #define MZ1P17_MODE_X1  3
21
22 // for correct super/sub script mode
23 //#define PIXEL_PER_INCH        720
24 // for correct 1/120 inch scroll
25 #define PIXEL_PER_INCH  360
26 // for correct 1/180 inch dots
27 //#define PIXEL_PER_INCH        180
28 #define DOT_PER_INCH    180
29 #define DOT_SCALE       (PIXEL_PER_INCH / DOT_PER_INCH)
30
31 class FIFO;
32
33 class MZ1P17 : public DEVICE
34 {
35 private:
36         outputs_t outputs_busy;
37         outputs_t outputs_ack;
38         
39         int value, busy_id, ack_id, wait_frames;
40         bool strobe, res, busy, ack;
41         
42         bitmap_t bitmap_paper;
43         bitmap_t bitmap_line[4];
44         font_t font;
45         int space_left, space_top;
46         
47         bool ank[256][16][8];
48         bool gaiji[3][94][48][48];              // 0x78-0x7a,0x21-0x7e
49         bool htab[1440 * DOT_SCALE];
50         struct {
51                 int y;
52                 bool active;
53         } vtab[14];
54         
55         FIFO *fifo;
56         
57         int lf_pitch;
58         bool prev_esc_6;
59         int margin_left, margin_right;
60         int pitch_mode;
61         int script_mode;
62         bool kanji_mode, kanji_half, hiragana_mode;
63         bool bold, underline, reverse, vertical;
64         
65         bool ank_double_x, ank_double_y;
66         bool kanji_double_x, kanji_double_y;
67         int kanji_pitch, kanji_half_pitch;
68         
69         int dest_line_x, dest_paper_y;
70         int color_mode;
71         bool double_y_printed;
72         bool line_printed, paper_printed;
73         int paper_index, written_length;
74         _TCHAR base_path[_MAX_PATH];
75         
76         void set_busy(bool value);
77         void set_ack(bool value);
78         void process_mz1();
79         void process_mz2();
80         void process_mz3();
81         void process_x1();
82         void draw_char(uint16_t code);
83         void scroll(int value);
84         void finish();
85         void finish_line();
86         void finish_paper();
87         
88 public:
89         MZ1P17(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
90         {
91                 initialize_output_signals(&outputs_busy);
92                 initialize_output_signals(&outputs_ack);
93         }
94         ~MZ1P17() {}
95         
96         // common functions
97         void initialize();
98         void release();
99         void reset();
100         void event_frame();
101         void write_signal(int id, uint32_t data, uint32_t mask);
102         uint32_t read_signal(int ch);
103         void event_callback(int event_id, int err);
104         void save_state(FILEIO* state_fio);
105         bool load_state(FILEIO* state_fio);
106         const _TCHAR *get_device_name()
107         {
108                 return _T("MZ-1P17");
109         }
110         
111         // unique functions
112         void set_context_busy(DEVICE* device, int id, uint32_t mask)
113         {
114                 register_output_signal(&outputs_busy, device, id, mask);
115         }
116         void set_context_ack(DEVICE* device, int id, uint32_t mask)
117         {
118                 register_output_signal(&outputs_ack, device, id, mask);
119         }
120         int mode;
121 };
122
123 #endif
124