2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #define MZ1P17_MODE_MZ1 0
18 #define MZ1P17_MODE_MZ2 1
19 #define MZ1P17_MODE_MZ3 2
20 #define MZ1P17_MODE_X1 3
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)
33 class MZ1P17 : public DEVICE
36 outputs_t outputs_busy;
37 outputs_t outputs_ack;
39 int value, busy_id, ack_id, wait_frames;
40 bool strobe, res, busy, ack;
42 bitmap_t bitmap_paper;
43 bitmap_t bitmap_line[4];
45 int space_left, space_top;
48 bool gaiji[3][94][48][48]; // 0x78-0x7a,0x21-0x7e
49 bool htab[1440 * DOT_SCALE];
59 int margin_left, margin_right;
62 bool kanji_mode, kanji_half, hiragana_mode;
63 bool bold, underline, reverse, vertical;
65 bool ank_double_x, ank_double_y;
66 bool kanji_double_x, kanji_double_y;
67 int kanji_pitch, kanji_half_pitch;
69 int dest_line_x, dest_paper_y;
71 bool double_y_printed;
72 bool line_printed, paper_printed;
73 int paper_index, written_length;
74 _TCHAR base_path[_MAX_PATH];
76 void set_busy(bool value);
77 void set_ack(bool value);
82 void draw_char(uint16_t code);
83 void scroll(int value);
89 MZ1P17(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
91 initialize_output_signals(&outputs_busy);
92 initialize_output_signals(&outputs_ack);
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()
108 return _T("MZ-1P17");
112 void set_context_busy(DEVICE* device, int id, uint32_t mask)
114 register_output_signal(&outputs_busy, device, id, mask);
116 void set_context_ack(DEVICE* device, int id, uint32_t mask)
118 register_output_signal(&outputs_ack, device, id, mask);