2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
22 #define MZ1P17_MODE_MZ1 0
23 #define MZ1P17_MODE_MZ2 1
24 #define MZ1P17_MODE_MZ3 2
25 #define MZ1P17_MODE_X1 3
26 #define MZ1P17_MODE_MZ80P4 4
28 // for correct super/sub script mode
29 //#define PIXEL_PER_INCH 720
30 // for correct 1/120 inch scroll
31 #define PIXEL_PER_INCH 360
32 // for correct 1/180 inch dots
33 //#define PIXEL_PER_INCH 180
34 #define DOT_PER_INCH 180
35 #define DOT_SCALE (PIXEL_PER_INCH / DOT_PER_INCH)
39 class MZ1P17 : public DEVICE
42 outputs_t outputs_busy;
43 outputs_t outputs_ack;
45 int value, busy_id, ack_id, wait_frames;
46 bool strobe, res, busy, ack;
48 bitmap_t bitmap_paper;
49 bitmap_t bitmap_line[4];
51 int space_left, space_top;
54 bool gaiji[3][94][48][48]; // 0x78-0x7a,0x21-0x7e
55 bool htab[1440 * DOT_SCALE];
65 int margin_left, margin_right;
68 bool kanji_mode, kanji_half, hiragana_mode;
69 bool bold, underline, reverse, vertical;
71 bool ank_double_x, ank_double_y;
72 bool kanji_double_x, kanji_double_y;
73 int kanji_pitch, kanji_half_pitch;
75 int dest_line_x, dest_paper_y;
77 bool double_y_printed;
78 bool line_printed, paper_printed;
79 int paper_index, written_length;
80 _TCHAR base_path[_MAX_PATH];
82 void set_busy(bool value);
83 void set_ack(bool value);
88 void process_mz80p4();
89 void draw_char(uint16_t code);
90 void draw_dot(bitmap_t *bitmap, int x, int y, int width, int height, uint8_t r, uint8_t g, uint8_t b);
91 void scroll(int value);
97 MZ1P17(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
99 initialize_output_signals(&outputs_busy);
100 initialize_output_signals(&outputs_ack);
101 set_device_name(_T("MZ-1P17 KANJI THERMAL PRINTER"));
110 void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
111 uint32_t __FASTCALL read_signal(int ch);
112 void event_callback(int event_id, int err);
113 bool process_state(FILEIO* state_fio, bool loading);
116 void set_context_busy(DEVICE* device, int id, uint32_t mask)
118 register_output_signal(&outputs_busy, device, id, mask);
120 void set_context_ack(DEVICE* device, int id, uint32_t mask)
122 register_output_signal(&outputs_ack, device, id, mask);