25 Paper(
unsigned x,
unsigned y,
double dotSizeX,
double dotSizeY);
27 [[nodiscard]] std::string
save()
const;
29 void plot(
double x,
double y);
32 byte& dot(
unsigned x,
unsigned y);
36 std::vector<int> table;
54 if (!strobe && prevStrobe) {
110 : motherBoard(motherBoard_)
113 motherBoard.getCommandController(),
"print-resolution",
114 "resolution of the output image of emulated dot matrix printer in DPI",
116 , graphicsHiLo(graphicsHiLo_)
176 for (
auto i :
xrange(9)) {
177 if (pattern & (1 << i)) {
221 int dpi = dpiSetting->getInt();
222 auto paperSizeX = unsigned((210 / 25.4) * dpi);
223 auto paperSizeY = unsigned((297 / 25.4) * dpi);
229 paper = std::make_unique<Paper>(paperSizeX, paperSizeY,
244 "Failed to print: ",
e.getMessage());
255 static constexpr
unsigned compress9(
unsigned a)
258 for (
auto i :
xrange(9)) {
260 result |= 1 << (i / 2);
272 byte attribute = charBitmap[0];
273 unsigned start = (attribute >> 4) & 0x07;
274 unsigned end = attribute & 0x0f;
275 unsigned topBits = attribute >> 7;
300 unsigned charBits = unsigned(charBitmap[i + 1]) << topBits;
306 charBits = compress9(charBits);
313 plot9Dots(destX, destY + y * dblStrikeOffset, charBits);
317 hPos += headRelative;
327 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328 0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C,
329 0x3C, 0x7E, 0xDB, 0xFF, 0xFF, 0xDB, 0x66, 0x3C,
330 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
331 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,
332 0x10, 0x38, 0x54, 0xFE, 0x54, 0x10, 0x38, 0x00,
333 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x10, 0x38, 0x00,
334 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
335 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF,
336 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
337 0xC7, 0xBB, 0x7D, 0x7D, 0x7D, 0xBB, 0xC7, 0xFF,
338 0x0F, 0x03, 0x05, 0x79, 0x88, 0x88, 0x88, 0x70,
339 0x38, 0x44, 0x44, 0x44, 0x38, 0x10, 0x7C, 0x10,
340 0x30, 0x28, 0x24, 0x24, 0x28, 0x20, 0xE0, 0xC0,
341 0x3C, 0x24, 0x3C, 0x24, 0x24, 0xE4, 0xDC, 0x18,
342 0x10, 0x54, 0x38, 0xEE, 0x38, 0x54, 0x10, 0x00,
343 0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10,
344 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,
345 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,
346 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,
347 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,
348 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,
349 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
350 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,
352 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,
353 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,
354 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,
355 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,
356 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
357 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,
358 0x00, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
360 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00,
361 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
362 0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00,
363 0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20, 0x00,
364 0xC0, 0xC8, 0x10, 0x20, 0x40, 0x98, 0x18, 0x00,
365 0x40, 0xA0, 0x40, 0xA8, 0x90, 0x98, 0x60, 0x00,
366 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
367 0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00,
368 0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00,
369 0x20, 0xA8, 0x70, 0x20, 0x70, 0xA8, 0x20, 0x00,
370 0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,
372 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
374 0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00,
375 0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00,
376 0x20, 0x60, 0xA0, 0x20, 0x20, 0x20, 0xF8, 0x00,
377 0x70, 0x88, 0x08, 0x10, 0x60, 0x80, 0xF8, 0x00,
378 0x70, 0x88, 0x08, 0x30, 0x08, 0x88, 0x70, 0x00,
379 0x10, 0x30, 0x50, 0x90, 0xF8, 0x10, 0x10, 0x00,
380 0xF8, 0x80, 0xE0, 0x10, 0x08, 0x10, 0xE0, 0x00,
381 0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00,
382 0xF8, 0x88, 0x10, 0x20, 0x20, 0x20, 0x20, 0x00,
383 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00,
384 0x70, 0x88, 0x88, 0x78, 0x08, 0x10, 0x60, 0x00,
385 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,
386 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x40,
387 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00,
388 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00,
389 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00,
390 0x70, 0x88, 0x08, 0x10, 0x20, 0x00, 0x20, 0x00,
391 0x70, 0x88, 0x08, 0x68, 0xA8, 0xA8, 0x70, 0x00,
392 0x20, 0x50, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00,
393 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0xF0, 0x00,
394 0x30, 0x48, 0x80, 0x80, 0x80, 0x48, 0x30, 0x00,
395 0xE0, 0x50, 0x48, 0x48, 0x48, 0x50, 0xE0, 0x00,
396 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00,
397 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00,
398 0x70, 0x88, 0x80, 0xB8, 0x88, 0x88, 0x70, 0x00,
399 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00,
400 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
401 0x38, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60, 0x00,
402 0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00,
403 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00,
404 0x88, 0xD8, 0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00,
405 0x88, 0xC8, 0xC8, 0xA8, 0x98, 0x98, 0x88, 0x00,
406 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
407 0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80, 0x00,
408 0x70, 0x88, 0x88, 0x88, 0xA8, 0x90, 0x68, 0x00,
409 0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88, 0x00,
410 0x70, 0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,
411 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
412 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
413 0x88, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,
414 0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88, 0x00,
415 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00,
416 0x88, 0x88, 0x88, 0x70, 0x20, 0x20, 0x20, 0x00,
417 0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00,
418 0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00,
419 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00,
420 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00,
421 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,
423 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
424 0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
425 0x80, 0x80, 0xB0, 0xC8, 0x88, 0xC8, 0xB0, 0x00,
426 0x00, 0x00, 0x70, 0x88, 0x80, 0x88, 0x70, 0x00,
427 0x08, 0x08, 0x68, 0x98, 0x88, 0x98, 0x68, 0x00,
428 0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
429 0x10, 0x28, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x00,
430 0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x70,
431 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x88, 0x00,
432 0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,
433 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x90, 0x60,
434 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00,
435 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
436 0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00,
437 0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00,
438 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,
439 0x00, 0x00, 0xB0, 0xC8, 0xC8, 0xB0, 0x80, 0x80,
440 0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x08,
441 0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80, 0x00,
442 0x00, 0x00, 0x78, 0x80, 0xF0, 0x08, 0xF0, 0x00,
443 0x40, 0x40, 0xF0, 0x40, 0x40, 0x48, 0x30, 0x00,
444 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x68, 0x00,
445 0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00,
446 0x00, 0x00, 0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x00,
447 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,
448 0x00, 0x00, 0x88, 0x88, 0x98, 0x68, 0x08, 0x70,
449 0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8, 0x00,
450 0x18, 0x20, 0x20, 0x40, 0x20, 0x20, 0x18, 0x00,
451 0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x00,
452 0xC0, 0x20, 0x20, 0x10, 0x20, 0x20, 0xC0, 0x00,
453 0x40, 0xA8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
454 0x00, 0x00, 0x20, 0x50, 0xF8, 0x00, 0x00, 0x00,
455 0x70, 0x88, 0x80, 0x80, 0x88, 0x70, 0x20, 0x60,
456 0x90, 0x00, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,
457 0x10, 0x20, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
458 0x20, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
459 0x48, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
460 0x20, 0x10, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
461 0x20, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
462 0x00, 0x70, 0x80, 0x80, 0x80, 0x70, 0x10, 0x60,
463 0x20, 0x50, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
464 0x50, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
465 0x20, 0x10, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
466 0x50, 0x00, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
467 0x20, 0x50, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
468 0x40, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
469 0x50, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
470 0x20, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
471 0x10, 0x20, 0xF8, 0x80, 0xF0, 0x80, 0xF8, 0x00,
472 0x00, 0x00, 0x6C, 0x12, 0x7E, 0x90, 0x6E, 0x00,
473 0x3E, 0x50, 0x90, 0x9C, 0xF0, 0x90, 0x9E, 0x00,
474 0x60, 0x90, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
475 0x90, 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
476 0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
477 0x40, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
478 0x40, 0x20, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
479 0x90, 0x00, 0x90, 0x90, 0xB0, 0x50, 0x10, 0xE0,
480 0x50, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,
481 0x50, 0x00, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
482 0x20, 0x20, 0x78, 0x80, 0x80, 0x78, 0x20, 0x20,
483 0x18, 0x24, 0x20, 0xF8, 0x20, 0xE2, 0x5C, 0x00,
484 0x88, 0x50, 0x20, 0xF8, 0x20, 0xF8, 0x20, 0x00,
485 0xC0, 0xA0, 0xA0, 0xC8, 0x9C, 0x88, 0x88, 0x8C,
486 0x18, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x40,
487 0x10, 0x20, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
488 0x10, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
489 0x20, 0x40, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
490 0x20, 0x40, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,
491 0x50, 0xA0, 0x00, 0xA0, 0xD0, 0x90, 0x90, 0x00,
492 0x28, 0x50, 0x00, 0xC8, 0xA8, 0x98, 0x88, 0x00,
493 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, 0xF8,
494 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0xF0,
495 0x20, 0x00, 0x20, 0x40, 0x80, 0x88, 0x70, 0x00,
496 0x00, 0x00, 0x00, 0xF8, 0x80, 0x80, 0x00, 0x00,
497 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x00, 0x00,
498 0x84, 0x88, 0x90, 0xA8, 0x54, 0x84, 0x08, 0x1C,
499 0x84, 0x88, 0x90, 0xA8, 0x58, 0xA8, 0x3C, 0x08,
500 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00,
501 0x00, 0x00, 0x24, 0x48, 0x90, 0x48, 0x24, 0x00,
502 0x00, 0x00, 0x90, 0x48, 0x24, 0x48, 0x90, 0x00,
503 0x28, 0x50, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
504 0x28, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
505 0x28, 0x50, 0x00, 0x70, 0x20, 0x20, 0x70, 0x00,
506 0x28, 0x50, 0x00, 0x20, 0x20, 0x20, 0x70, 0x00,
507 0x28, 0x50, 0x00, 0x70, 0x88, 0x88, 0x70, 0x00,
508 0x50, 0xA0, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
509 0x28, 0x50, 0x00, 0x88, 0x88, 0x88, 0x70, 0x00,
510 0x50, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
511 0xFC, 0x48, 0x48, 0x48, 0xE8, 0x08, 0x50, 0x20,
512 0x00, 0x50, 0x00, 0x50, 0x50, 0x50, 0x10, 0x20,
513 0xC0, 0x44, 0xC8, 0x54, 0xEC, 0x54, 0x9E, 0x04,
514 0x10, 0xA8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
515 0x00, 0x20, 0x50, 0x88, 0x50, 0x20, 0x00, 0x00,
516 0x88, 0x10, 0x20, 0x40, 0x80, 0x28, 0x00, 0x00,
517 0x7C, 0xA8, 0xA8, 0x68, 0x28, 0x28, 0x28, 0x00,
518 0x38, 0x40, 0x30, 0x48, 0x48, 0x30, 0x08, 0x70,
519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
520 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
521 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
522 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x00, 0x00, 0x00,
524 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
525 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
526 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
527 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
528 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
529 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
530 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88,
531 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11,
532 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
533 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE,
534 0x80, 0xC0, 0xE0, 0xF0, 0xE0, 0xC0, 0x80, 0x00,
535 0x01, 0x03, 0x07, 0x0F, 0x07, 0x03, 0x01, 0x00,
536 0xFF, 0x7E, 0x3C, 0x18, 0x18, 0x3C, 0x7E, 0xFF,
537 0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81,
538 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
539 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
540 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
541 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
542 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC,
543 0x00, 0x20, 0x20, 0x50, 0x50, 0x88, 0xF8, 0x00,
544 0x20, 0x20, 0x70, 0x20, 0x70, 0x20, 0x20, 0x00,
545 0x00, 0x00, 0x00, 0x50, 0x88, 0xA8, 0x50, 0x00,
546 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
547 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
548 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
549 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
550 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
551 0x00, 0x00, 0x68, 0x90, 0x90, 0x90, 0x68, 0x00,
552 0x30, 0x48, 0x48, 0x70, 0x48, 0x48, 0x70, 0xC0,
553 0xF8, 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
554 0xF8, 0x50, 0x50, 0x50, 0x50, 0x50, 0x98, 0x00,
555 0xF8, 0x88, 0x40, 0x20, 0x40, 0x88, 0xF8, 0x00,
556 0x00, 0x00, 0x78, 0x90, 0x90, 0x90, 0x60, 0x00,
557 0x00, 0x50, 0x50, 0x50, 0x50, 0x68, 0x80, 0x80,
558 0x00, 0x50, 0xA0, 0x20, 0x20, 0x20, 0x20, 0x00,
559 0xF8, 0x20, 0x70, 0xA8, 0xA8, 0x70, 0x20, 0xF8,
560 0x20, 0x50, 0x88, 0xF8, 0x88, 0x50, 0x20, 0x00,
561 0x70, 0x88, 0x88, 0x88, 0x50, 0x50, 0xD8, 0x00,
562 0x30, 0x40, 0x40, 0x20, 0x50, 0x50, 0x50, 0x20,
563 0x00, 0x00, 0x00, 0x50, 0xA8, 0xA8, 0x50, 0x00,
564 0x08, 0x70, 0xA8, 0xA8, 0xA8, 0x70, 0x80, 0x00,
565 0x38, 0x40, 0x80, 0xF8, 0x80, 0x40, 0x38, 0x00,
566 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00,
567 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00,
568 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0xF8, 0x00,
569 0xC0, 0x30, 0x08, 0x30, 0xC0, 0x00, 0xF8, 0x00,
570 0x18, 0x60, 0x80, 0x60, 0x18, 0x00, 0xF8, 0x00,
571 0x10, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
572 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0x40,
573 0x00, 0x20, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x00,
574 0x00, 0x50, 0xA0, 0x00, 0x50, 0xA0, 0x00, 0x00,
575 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
576 0x00, 0x30, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00,
577 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
578 0x3E, 0x20, 0x20, 0x20, 0xA0, 0x60, 0x20, 0x00,
579 0xA0, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00,
580 0x40, 0xA0, 0x20, 0x40, 0xE0, 0x00, 0x00, 0x00,
581 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
582 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
585 static byte MSXFont[256 * 9];
596 return "msx-printer";
602 return "Emulate MSX printer, prints to image.";
605 void ImagePrinterMSX::msxPrnSetFont(
const byte* msxBits)
608 for (
auto i :
xrange(256)) {
614 for (
auto j :
xrange(8)) {
616 for (
auto k :
xrange(8)) {
617 charBits |= ((msxBits[8 * i + 7 - k] >> (7 - j)) & 1) << k;
621 if (oneBits != 0 && start < 0) start = j;
622 if (charBits != 0)
end = j;
623 MSXFont[9 * i + j + 1] = charBits;
627 if (start < 0 || start >= 7) start = 0;
630 MSXFont[9 * i] = (start << 4) |
end;
634 std::pair<unsigned, unsigned> ImagePrinterMSX::getNumberOfDots()
639 void ImagePrinterMSX::resetSettings()
659 unsigned ImagePrinterMSX::calcEscSequenceLength(
byte character)
666 case 'O':
case '\\':
case 'L':
case '/':
677 unsigned ImagePrinterMSX::parseNumber(
unsigned sizeStart,
unsigned sizeChars)
680 while (sizeChars--) {
683 if (data >=
'0' && data <=
'9') {
684 Value += unsigned(data -
'0');
690 void ImagePrinterMSX::processEscSequence()
828 void ImagePrinterMSX::processCharacter(
byte data)
891 template<
typename Archive>
903 0x8b, 0x04, 0x0a, 0x20, 0x8a, 0x60, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
904 0x8b, 0x1c, 0x22, 0x08, 0xa2, 0x48, 0x22, 0x08, 0x22, 0x18, 0x00, 0x00,
905 0x9b, 0x00, 0x3c, 0x00, 0x82, 0x40, 0x02, 0x00, 0x3c, 0x02, 0x00, 0x00,
906 0x9a, 0x00, 0x1c, 0x22, 0x80, 0x62, 0x00, 0x22, 0x1c, 0x00, 0x00, 0x00,
907 0x96, 0x00, 0x12, 0x80, 0x5e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
908 0xa7, 0x00, 0x00, 0x40, 0xa0, 0x00, 0xa0, 0x40, 0x00, 0x00, 0x00, 0x00,
909 0x8b, 0x12, 0x00, 0x7e, 0x80, 0x12, 0x80, 0x02, 0x80, 0x42, 0x00, 0x00,
910 0xc8, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
911 0x8b, 0x06, 0x00, 0x09, 0x00, 0x51, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00,
912 0x8b, 0x5e, 0x80, 0x10, 0x80, 0x08, 0x40, 0x04, 0x40, 0x9e, 0x00, 0x00,
913 0x8a, 0x40, 0x9e, 0x00, 0x90, 0x40, 0x10, 0x4e, 0x80, 0x00, 0x00, 0x00,
914 0x8b, 0x92, 0x28, 0x44, 0x00, 0x44, 0x00, 0x44, 0x28, 0x92, 0x00, 0x00,
915 0x8b, 0xfe, 0x00, 0xa0, 0x00, 0x48, 0x00, 0x1e, 0x00, 0x0a, 0x00, 0x00,
916 0x8b, 0x06, 0x08, 0x54, 0xa0, 0x04, 0xa0, 0x54, 0x08, 0x06, 0x00, 0x00,
917 0x8b, 0x04, 0x0a, 0x20, 0x0a, 0xa0, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
918 0x0a, 0x38, 0x44, 0x01, 0x44, 0x01, 0x46, 0x00, 0x44, 0x00, 0x00, 0x00,
919 0x9a, 0x00, 0x50, 0xaa, 0x00, 0xaa, 0x00, 0xaa, 0x14, 0x00, 0x00, 0x00,
920 0x8a, 0x7e, 0x80, 0x00, 0x80, 0x12, 0x80, 0x12, 0x6c, 0x00, 0x00, 0x00,
921 0x8b, 0x3e, 0x40, 0x90, 0x00, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x00,
922 0x8b, 0x2c, 0x02, 0x28, 0x02, 0x1c, 0x20, 0x0a, 0x20, 0x1a, 0x00, 0x00,
923 0x8b, 0x3a, 0x44, 0x00, 0x8a, 0x10, 0xa2, 0x00, 0x44, 0xb8, 0x00, 0x00,
924 0x8b, 0x02, 0x08, 0x14, 0x22, 0x08, 0x22, 0x14, 0x08, 0x20, 0x00, 0x00,
925 0xa9, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
926 0x8b, 0x06, 0x88, 0x14, 0x20, 0x44, 0x20, 0x14, 0x88, 0x06, 0x00, 0x00,
927 0x8b, 0x1c, 0xa2, 0x00, 0x22, 0x00, 0x22, 0x00, 0xa2, 0x1c, 0x00, 0x00,
928 0x8b, 0x3c, 0x82, 0x00, 0x02, 0x00, 0x02, 0x00, 0x82, 0x3c, 0x00, 0x00,
929 0x8b, 0x04, 0x0a, 0xa0, 0x0a, 0x20, 0x0a, 0xa0, 0x1c, 0x02, 0x00, 0x00,
930 0x9a, 0x00, 0x1c, 0xa2, 0x00, 0x22, 0x00, 0xa2, 0x1c, 0x00, 0x00, 0x00,
931 0x8a, 0x3c, 0x80, 0x02, 0x00, 0x02, 0x80, 0x3c, 0x02, 0x00, 0x00, 0x00,
932 0x8b, 0x3e, 0x00, 0x2a, 0x00, 0x6a, 0x80, 0x2a, 0x00, 0x22, 0x00, 0x00,
933 0x8b, 0x1c, 0x22, 0x08, 0x22, 0x48, 0xa2, 0x08, 0x22, 0x18, 0x00, 0x00,
934 0x8b, 0xa8, 0x00, 0x68, 0x00, 0x3e, 0x00, 0x68, 0x00, 0xa8, 0x00, 0x00,
935 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936 0xc8, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937 0xa9, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
938 0x8b, 0x28, 0x00, 0xfe, 0x00, 0x28, 0x00, 0xfe, 0x00, 0x28, 0x00, 0x00,
939 0x8b, 0x24, 0x00, 0x54, 0x00, 0xfe, 0x00, 0x54, 0x00, 0x48, 0x00, 0x00,
940 0x8b, 0xc0, 0x02, 0xc4, 0x08, 0x10, 0x20, 0x46, 0x80, 0x06, 0x00, 0x00,
941 0x8b, 0x4c, 0xa0, 0x12, 0xa0, 0x4a, 0x00, 0x04, 0x08, 0x12, 0x00, 0x00,
942 0xc8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
943 0xc9, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00,
944 0xa7, 0x00, 0x00, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
945 0x8b, 0x10, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x10, 0x00, 0x00,
946 0x8b, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
947 0x39, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
948 0x8b, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
949 0xa8, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
950 0x9a, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
951 0x8b, 0x38, 0x44, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x38, 0x00, 0x00,
952 0xa9, 0x00, 0x00, 0x42, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
953 0x8b, 0x42, 0x80, 0x06, 0x80, 0x0a, 0x80, 0x12, 0x80, 0x62, 0x00, 0x00,
954 0x8b, 0x84, 0x00, 0x82, 0x00, 0xa2, 0x00, 0xd2, 0x00, 0x8c, 0x00, 0x00,
955 0x8b, 0x08, 0x10, 0x28, 0x40, 0x88, 0x00, 0xfe, 0x00, 0x08, 0x00, 0x00,
956 0x8b, 0xe4, 0x02, 0xa0, 0x02, 0xa0, 0x02, 0xa0, 0x02, 0x9c, 0x00, 0x00,
957 0x8b, 0x0c, 0x12, 0x20, 0x52, 0x80, 0x12, 0x00, 0x12, 0x0c, 0x00, 0x00,
958 0x8b, 0x80, 0x00, 0x82, 0x04, 0x88, 0x10, 0xa0, 0x40, 0x80, 0x00, 0x00,
959 0x8b, 0x6c, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x6c, 0x00, 0x00,
960 0x8b, 0x60, 0x90, 0x00, 0x90, 0x02, 0x94, 0x08, 0x90, 0x60, 0x00, 0x00,
961 0xa7, 0x00, 0x00, 0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
962 0x27, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
963 0x89, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
964 0x8b, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x00,
965 0xab, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00,
966 0x8b, 0x40, 0x80, 0x00, 0x80, 0x0a, 0x80, 0x10, 0x80, 0x60, 0x00, 0x00,
967 0x8b, 0x38, 0x44, 0x82, 0x10, 0xaa, 0x00, 0xaa, 0x00, 0x7a, 0x00, 0x00,
968 0x8b, 0x1e, 0x20, 0x48, 0x80, 0x08, 0x80, 0x48, 0x20, 0x1e, 0x00, 0x00,
969 0x8b, 0x82, 0x7c, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x6c, 0x00, 0x00,
970 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x44, 0x00, 0x00,
971 0x8b, 0x82, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x44, 0x38, 0x00, 0x00,
972 0x8b, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, 0x00,
973 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00,
974 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x10, 0x82, 0x10, 0x82, 0x5c, 0x00, 0x00,
975 0x8b, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x00,
976 0xa9, 0x00, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
977 0x8a, 0x0c, 0x02, 0x00, 0x82, 0x00, 0x82, 0x7c, 0x80, 0x00, 0x00, 0x00,
978 0x8b, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00,
979 0x8b, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00,
980 0x8b, 0xfe, 0x00, 0x40, 0x20, 0x10, 0x20, 0x40, 0x00, 0xfe, 0x00, 0x00,
981 0x8b, 0xfe, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0xfe, 0x00, 0x00,
982 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x7c, 0x00, 0x00,
983 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00,
984 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x08, 0x82, 0x04, 0x80, 0x7a, 0x00, 0x00,
985 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x98, 0x04, 0x62, 0x00, 0x00,
986 0x8b, 0x64, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x4c, 0x00, 0x00,
987 0x8b, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
988 0x8b, 0xfc, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xfc, 0x00, 0x00,
989 0x8b, 0xe0, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0xe0, 0x00, 0x00,
990 0x8b, 0xfc, 0x02, 0x04, 0x08, 0x30, 0x08, 0x04, 0x02, 0xfc, 0x00, 0x00,
991 0x9a, 0x00, 0x82, 0x44, 0x28, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00,
992 0x8b, 0x80, 0x40, 0x20, 0x10, 0x0e, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
993 0x9a, 0x00, 0x82, 0x04, 0x8a, 0x10, 0xa2, 0x40, 0x82, 0x00, 0x00, 0x00,
994 0xa9, 0x00, 0x00, 0xfe, 0x00, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
995 0x9a, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00,
996 0xa9, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
997 0x8b, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00,
998 0x0b, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
999 0xb7, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1000 0x8b, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
1001 0x8a, 0xfe, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x1c, 0x00, 0x00, 0x00,
1002 0x8a, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x00, 0x00,
1003 0x8a, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0xfe, 0x00, 0x00, 0x00,
1004 0x8b, 0x1c, 0x22, 0x08, 0x22, 0x08, 0x22, 0x08, 0x22, 0x18, 0x00, 0x00,
1005 0x89, 0x10, 0x00, 0x10, 0x7e, 0x90, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00,
1006 0x0a, 0x38, 0x44, 0x01, 0x44, 0x01, 0x44, 0x01, 0x7e, 0x00, 0x00, 0x00,
1007 0x8a, 0xfe, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00, 0x00,
1008 0x98, 0x00, 0x22, 0x00, 0xbe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1009 0x99, 0x00, 0x01, 0x00, 0x01, 0x20, 0x01, 0xbe, 0x00, 0x00, 0x00, 0x00,
1010 0x9a, 0x00, 0xfe, 0x00, 0x08, 0x00, 0x14, 0x00, 0x22, 0x00, 0x00, 0x00,
1011 0x98, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1012 0x8b, 0x1e, 0x20, 0x00, 0x20, 0x1e, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00,
1013 0x8a, 0x3e, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00, 0x00,
1014 0x8b, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x1c, 0x00, 0x00,
1015 0x0a, 0x7f, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x38, 0x00, 0x00, 0x00,
1016 0x1b, 0x00, 0x38, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x7e, 0x00, 0x00,
1017 0x8a, 0x3e, 0x00, 0x10, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00,
1018 0x8b, 0x10, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x04, 0x00, 0x00,
1019 0x8a, 0x20, 0x00, 0x7c, 0x02, 0x20, 0x02, 0x20, 0x02, 0x00, 0x00, 0x00,
1020 0x8b, 0x3c, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3c, 0x02, 0x00, 0x00,
1021 0x8b, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
1022 0x8b, 0x3c, 0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02, 0x3c, 0x00, 0x00,
1023 0x89, 0x22, 0x14, 0x00, 0x08, 0x00, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00,
1024 0x0b, 0x40, 0x20, 0x11, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
1025 0x89, 0x22, 0x04, 0x22, 0x08, 0x22, 0x10, 0x22, 0x00, 0x00, 0x00, 0x00,
1026 0xaa, 0x00, 0x00, 0x10, 0x00, 0x6c, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00,
1027 0xc7, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1028 0xaa, 0x00, 0x82, 0x00, 0x82, 0x6c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
1029 0x8b, 0x40, 0x80, 0x00, 0x80, 0x40, 0x20, 0x00, 0x20, 0x40, 0x00, 0x00,
1030 0x8b, 0x7c, 0x82, 0x04, 0x8a, 0x10, 0xa2, 0x40, 0x82, 0x7c, 0x00, 0x00,
1031 0x8a, 0x04, 0x0a, 0x80, 0x2a, 0x60, 0x0a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1032 0x8a, 0x0c, 0x12, 0x28, 0x82, 0x68, 0x02, 0x28, 0x10, 0x00, 0x00, 0x00,
1033 0x8a, 0x0c, 0x32, 0x00, 0x82, 0x40, 0x02, 0x0c, 0x32, 0x00, 0x00, 0x00,
1034 0x8a, 0x0c, 0x12, 0x00, 0xa0, 0x42, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1035 0x98, 0x00, 0x02, 0x00, 0x16, 0x88, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
1036 0xa9, 0x00, 0x00, 0x40, 0xa0, 0x00, 0xa0, 0x40, 0x00, 0x00, 0x00, 0x00,
1037 0x8b, 0x12, 0x00, 0x1e, 0x60, 0x12, 0x80, 0x12, 0x80, 0x40, 0x00, 0x00,
1038 0x9a, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00,
1039 0x8a, 0x06, 0x01, 0x08, 0x01, 0x10, 0x21, 0x80, 0x02, 0x00, 0x00, 0x00,
1040 0x8b, 0x06, 0x58, 0x80, 0x08, 0x84, 0x40, 0x06, 0x58, 0x80, 0x00, 0x00,
1041 0x8b, 0x12, 0x4c, 0x80, 0x10, 0x80, 0x50, 0x02, 0x4c, 0x80, 0x00, 0x00,
1042 0x8b, 0x02, 0x18, 0x24, 0x80, 0x44, 0x02, 0x48, 0x30, 0x80, 0x00, 0x00,
1043 0x8b, 0x06, 0x38, 0xc0, 0x20, 0x88, 0x26, 0xd8, 0x02, 0x08, 0x00, 0x00,
1044 0x8b, 0x02, 0x04, 0x08, 0x14, 0x40, 0xa4, 0x00, 0xbe, 0x40, 0x00, 0x00,
1045 0x8a, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x8a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1046 0x1b, 0x00, 0x18, 0x21, 0x04, 0x41, 0x06, 0x40, 0x04, 0x40, 0x00, 0x00,
1047 0x8b, 0x02, 0x10, 0x6a, 0x00, 0xaa, 0x00, 0xac, 0x10, 0x80, 0x00, 0x00,
1048 0x8a, 0x06, 0x18, 0x60, 0x00, 0x82, 0x10, 0x82, 0x6c, 0x00, 0x00, 0x00,
1049 0x8b, 0x0e, 0x30, 0x40, 0x90, 0x0e, 0x70, 0x82, 0x10, 0x82, 0x00, 0x00,
1050 0x8b, 0x04, 0x22, 0x08, 0x22, 0x1c, 0x22, 0x08, 0x22, 0x10, 0x00, 0x00,
1051 0x8b, 0x1a, 0x24, 0x42, 0x08, 0x92, 0x20, 0x84, 0x48, 0xb0, 0x00, 0x00,
1052 0x8a, 0x0c, 0x11, 0x02, 0x2c, 0x12, 0x20, 0x44, 0x18, 0x00, 0x00, 0x00,
1053 0xa9, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
1054 0x8b, 0x02, 0x04, 0x08, 0x14, 0x80, 0x24, 0x00, 0x3e, 0x80, 0x00, 0x00,
1055 0x8b, 0x0c, 0x12, 0x00, 0xa2, 0x00, 0x22, 0x00, 0xa4, 0x18, 0x00, 0x00,
1056 0x8b, 0x0c, 0x32, 0x00, 0x82, 0x00, 0x02, 0x00, 0x8c, 0x30, 0x00, 0x00,
1057 0x8a, 0x04, 0x0a, 0x20, 0x8a, 0x20, 0x0a, 0x24, 0x9a, 0x00, 0x00, 0x00,
1058 0x8a, 0x0c, 0x12, 0x00, 0xa0, 0x02, 0x00, 0x24, 0x98, 0x00, 0x00, 0x00,
1059 0x8b, 0x0c, 0x32, 0x80, 0x02, 0x00, 0x02, 0x0c, 0xb2, 0x00, 0x00, 0x00,
1060 0x8b, 0x06, 0x18, 0x22, 0x08, 0x22, 0x48, 0x22, 0x80, 0x20, 0x00, 0x00,
1061 0x8a, 0x0c, 0x12, 0x28, 0x02, 0x68, 0x02, 0xa8, 0x10, 0x00, 0x00, 0x00,
1062 0x8b, 0x08, 0x20, 0x88, 0x66, 0x18, 0x20, 0x48, 0x20, 0x80, 0x00, 0x00,
1063 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1064 0x9a, 0x00, 0x02, 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1065 0x9a, 0x00, 0x20, 0x40, 0x80, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1066 0x8b, 0x28, 0x06, 0x38, 0xc0, 0x28, 0x06, 0x38, 0xc0, 0x28, 0x00, 0x00,
1067 0x8a, 0x00, 0x24, 0x10, 0x46, 0x38, 0xc4, 0x10, 0x48, 0x00, 0x00, 0x00,
1068 0x8b, 0x40, 0x82, 0x44, 0x88, 0x10, 0x22, 0x44, 0x82, 0x04, 0x00, 0x00,
1069 0x8b, 0x0c, 0x10, 0x42, 0xa0, 0x12, 0xa8, 0x44, 0x0a, 0x10, 0x00, 0x00,
1070 0xc8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
1071 0xba, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00,
1072 0x98, 0x00, 0x02, 0x00, 0x04, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
1073 0x8b, 0x10, 0x04, 0x50, 0x28, 0x10, 0x28, 0x14, 0x40, 0x10, 0x00, 0x00,
1074 0x8b, 0x10, 0x00, 0x14, 0x08, 0x10, 0x20, 0x50, 0x00, 0x10, 0x00, 0x00,
1075 0x29, 0x00, 0x00, 0x01, 0x04, 0x0a, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
1076 0x8b, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
1077 0xa8, 0x00, 0x00, 0x02, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
1078 0x9a, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1079 0x8b, 0x1c, 0x20, 0x42, 0x00, 0x82, 0x00, 0x84, 0x08, 0x70, 0x00, 0x00,
1080 0x99, 0x00, 0x02, 0x00, 0x46, 0x18, 0x62, 0x80, 0x00, 0x00, 0x00, 0x00,
1081 0x8b, 0x02, 0x40, 0x06, 0x80, 0x0a, 0x80, 0x12, 0x80, 0x60, 0x00, 0x00,
1082 0x8b, 0x04, 0x00, 0x82, 0x00, 0x92, 0x00, 0xb2, 0x4c, 0x80, 0x00, 0x00,
1083 0x8b, 0x08, 0x10, 0x08, 0x20, 0x08, 0x46, 0x38, 0xc0, 0x08, 0x00, 0x00,
1084 0x8b, 0x04, 0x60, 0x82, 0x20, 0x82, 0x20, 0x84, 0x18, 0x80, 0x00, 0x00,
1085 0x8a, 0x0c, 0x10, 0x22, 0x10, 0x42, 0x10, 0x82, 0x0c, 0x00, 0x00, 0x00,
1086 0x8b, 0x80, 0x02, 0x84, 0x08, 0x90, 0x20, 0x80, 0x40, 0x80, 0x00, 0x00,
1087 0x8b, 0x0c, 0x62, 0x10, 0x82, 0x10, 0x82, 0x10, 0x8c, 0x60, 0x00, 0x00,
1088 0x8a, 0x60, 0x02, 0x90, 0x04, 0x90, 0x08, 0x90, 0x60, 0x00, 0x00, 0x00,
1089 0xa9, 0x00, 0x00, 0x02, 0x14, 0x22, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00,
1090 0x2a, 0x00, 0x00, 0x01, 0x04, 0x2a, 0x44, 0x28, 0x40, 0x00, 0x00, 0x00,
1091 0x9a, 0x00, 0x10, 0x08, 0x24, 0x02, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00,
1092 0x8a, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, 0x00, 0x00,
1093 0x9a, 0x00, 0x02, 0x00, 0x04, 0x80, 0x48, 0x20, 0x10, 0x00, 0x00, 0x00,
1094 0x8a, 0x48, 0x02, 0x80, 0x08, 0x80, 0x10, 0x80, 0x60, 0x00, 0x00, 0x00,
1095 0x8b, 0x1c, 0x20, 0x42, 0x80, 0x12, 0x88, 0x22, 0x88, 0x70, 0x00, 0x00,
1096 0x8b, 0x02, 0x04, 0x08, 0x10, 0x28, 0x40, 0x88, 0x00, 0xfe, 0x00, 0x00,
1097 0x8b, 0x06, 0x98, 0x62, 0x80, 0x12, 0x80, 0x12, 0x8c, 0x60, 0x00, 0x00,
1098 0x8b, 0x1c, 0x22, 0x40, 0x82, 0x00, 0x82, 0x00, 0x84, 0x40, 0x00, 0x00,
1099 0x8b, 0x06, 0x98, 0x62, 0x80, 0x02, 0x80, 0x04, 0x88, 0x70, 0x00, 0x00,
1100 0x8b, 0x06, 0x38, 0xc2, 0x10, 0x82, 0x10, 0x82, 0x00, 0x80, 0x00, 0x00,
1101 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x80, 0x10, 0x80, 0x00, 0x80, 0x00, 0x00,
1102 0x8b, 0x1c, 0x22, 0x40, 0x82, 0x00, 0x92, 0x04, 0x98, 0x40, 0x00, 0x00,
1103 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x00, 0x10, 0x06, 0x38, 0xc0, 0x00, 0x00,
1104 0x92, 0x00, 0x02, 0x00, 0x86, 0x18, 0xe2, 0x00, 0x80, 0x00, 0x00, 0x00,
1105 0x8b, 0x0c, 0x02, 0x00, 0x02, 0x80, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00,
1106 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x20, 0x08, 0x44, 0x02, 0x80, 0x00, 0x00,
1107 0x9a, 0x00, 0x06, 0x18, 0x62, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
1108 0x8b, 0x06, 0x38, 0xc0, 0x00, 0x30, 0x00, 0x46, 0x38, 0xc0, 0x00, 0x00,
1109 0x8b, 0x06, 0x38, 0xc0, 0x20, 0x10, 0x08, 0x06, 0x38, 0xc0, 0x00, 0x00,
1110 0x8b, 0x0c, 0x32, 0x40, 0x82, 0x00, 0x82, 0x04, 0x98, 0x60, 0x00, 0x00,
1111 0x8b, 0x06, 0x18, 0x60, 0x90, 0x00, 0x90, 0x00, 0x90, 0x60, 0x00, 0x00,
1112 0x8b, 0x1c, 0x20, 0x42, 0x00, 0x8a, 0x00, 0x84, 0x0a, 0x70, 0x00, 0x00,
1113 0x8b, 0x06, 0x18, 0x60, 0x80, 0x10, 0x88, 0x14, 0x82, 0x60, 0x00, 0x00,
1114 0x8b, 0x04, 0x62, 0x00, 0x92, 0x00, 0x92, 0x00, 0x8c, 0x40, 0x00, 0x00,
1115 0x8b, 0x80, 0x00, 0x86, 0x18, 0xe0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1116 0x8b, 0x0c, 0x32, 0xc0, 0x02, 0x00, 0x02, 0x0c, 0x30, 0xc0, 0x00, 0x00,
1117 0x9b, 0x00, 0xfe, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
1118 0x8b, 0x06, 0x38, 0xc4, 0x08, 0x10, 0x08, 0x06, 0x38, 0xc0, 0x00, 0x00,
1119 0x8b, 0x02, 0x84, 0x48, 0x20, 0x18, 0x24, 0x02, 0x40, 0x80, 0x00, 0x00,
1120 0x8b, 0x80, 0x40, 0x26, 0x18, 0x00, 0x20, 0x00, 0x40, 0x80, 0x00, 0x00,
1121 0x8b, 0x02, 0x04, 0x8a, 0x00, 0x92, 0x00, 0xa2, 0x40, 0x80, 0x00, 0x00,
1122 0x9b, 0x00, 0x06, 0x18, 0x62, 0x80, 0x02, 0x80, 0x00, 0x80, 0x00, 0x00,
1123 0xa8, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1124 0x8a, 0x02, 0x00, 0x02, 0x80, 0x06, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00,
1125 0x9a, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00,
1126 0x0b, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
1127 0xb7, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1128 0x8a, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1129 0x8a, 0x06, 0x18, 0xe2, 0x00, 0x22, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1130 0x8a, 0x0c, 0x10, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00,
1131 0x8b, 0x0c, 0x10, 0x02, 0x20, 0x02, 0x20, 0x06, 0x38, 0xc0, 0x00, 0x00,
1132 0x8a, 0x0c, 0x12, 0x28, 0x02, 0x28, 0x02, 0x28, 0x10, 0x00, 0x00, 0x00,
1133 0x8b, 0x20, 0x00, 0x26, 0x18, 0x60, 0x00, 0xa0, 0x00, 0x80, 0x00, 0x00,
1134 0x1b, 0x00, 0x18, 0x25, 0x00, 0x45, 0x00, 0x46, 0x18, 0x60, 0x00, 0x00,
1135 0x8a, 0x06, 0x18, 0xe0, 0x00, 0x20, 0x00, 0x26, 0x18, 0x00, 0x00, 0x00,
1136 0x99, 0x00, 0x02, 0x00, 0x26, 0x18, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00,
1137 0x89, 0x01, 0x00, 0x01, 0x00, 0x26, 0x18, 0xa0, 0x00, 0x00, 0x00, 0x00,
1138 0x8a, 0x06, 0x18, 0x60, 0x88, 0x04, 0x12, 0x00, 0x20, 0x00, 0x00, 0x00,
1139 0x99, 0x00, 0x02, 0x00, 0x06, 0x98, 0x62, 0x80, 0x00, 0x00, 0x00, 0x00,
1140 0x8a, 0x26, 0x18, 0x20, 0x06, 0x38, 0x00, 0x26, 0x18, 0x00, 0x00, 0x00,
1141 0x89, 0x26, 0x18, 0x20, 0x00, 0x20, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00,
1142 0x8a, 0x0c, 0x12, 0x00, 0x20, 0x02, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1143 0x0a, 0x03, 0x1c, 0x60, 0x04, 0x40, 0x04, 0x48, 0x30, 0x00, 0x00, 0x00,
1144 0x1b, 0x00, 0x18, 0x24, 0x00, 0x44, 0x00, 0x47, 0x18, 0x60, 0x00, 0x00,
1145 0x89, 0x06, 0x38, 0x00, 0x10, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
1146 0x8a, 0x02, 0x10, 0x02, 0x28, 0x02, 0x28, 0x04, 0x20, 0x00, 0x00, 0x00,
1147 0x9a, 0x00, 0x20, 0x0c, 0x32, 0xc0, 0x22, 0x00, 0x20, 0x00, 0x00, 0x00,
1148 0x8a, 0x0c, 0x32, 0x00, 0x02, 0x00, 0x02, 0x0c, 0x32, 0x00, 0x00, 0x00,
1149 0x9a, 0x00, 0x3e, 0x00, 0x04, 0x00, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
1150 0x8b, 0x0e, 0x30, 0x04, 0x00, 0x18, 0x04, 0x00, 0x06, 0x38, 0x00, 0x00,
1151 0x8b, 0x02, 0x00, 0x24, 0x10, 0x08, 0x04, 0x12, 0x00, 0x20, 0x00, 0x00,
1152 0x1b, 0x00, 0x40, 0x21, 0x12, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
1153 0x8b, 0x02, 0x00, 0x26, 0x00, 0x2a, 0x00, 0x32, 0x00, 0x20, 0x00, 0x00,
1154 0x9a, 0x00, 0x10, 0x04, 0x1a, 0x60, 0x82, 0x00, 0x80, 0x00, 0x00, 0x00,
1155 0x99, 0x00, 0x02, 0x04, 0x08, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
1156 0x9a, 0x00, 0x02, 0x00, 0x82, 0x0c, 0xb0, 0x40, 0x10, 0x00, 0x00, 0x00,
1157 0x8b, 0x40, 0x80, 0x00, 0x80, 0x40, 0x20, 0x00, 0x20, 0x40, 0x00, 0x00,
1158 0x8b, 0x1a, 0x24, 0x42, 0x08, 0x92, 0x20, 0x84, 0x48, 0xb0, 0x00, 0x00
1169 return "epson-printer";
1174 return "Emulate Epson FX80 printer, prints to image.";
1177 std::pair<unsigned, unsigned> ImagePrinterEpson::getNumberOfDots()
1182 void ImagePrinterEpson::resetSettings()
1200 unsigned ImagePrinterEpson::calcEscSequenceLength(
byte character)
1202 switch (character & 127) {
1203 case '!':
case '-':
case '/':
case '3':
case 'A':
case 'J':
1204 case 'N':
case 'Q':
case 'R':
case 'S':
case 'U':
case 'W':
1205 case 'b':
case 'i':
case 'j':
case 'l':
case 'p':
case 's':
1207 case '%':
case '?':
case 'K':
case 'L':
case 'Z':
case '^':
1209 case '*':
case ':':
case '&':
1222 unsigned ImagePrinterEpson::parseNumber(
unsigned sizeStart,
unsigned sizeChars)
1225 sizeStart += sizeChars;
1226 while (sizeChars--) {
1227 Value = Value * 256 +
abEscSeq[--sizeStart];
1232 void ImagePrinterEpson::processEscSequence()
1234 byte character =
abEscSeq[0] & 127;
1236 switch (character) {
1238 unsigned masterSelect = parseNumber(1, 1);
1239 elite = (masterSelect & 1) != 0;
1241 bold = (masterSelect & 8) != 0;
1268 switch (parseNumber(1, 1)) {
1306 lineFeed = (parseNumber(1, 1) & 127) / 3.0;
1365 lineFeed = parseNumber(1, 1) & 127;
1389 vpos += (parseNumber(1, 1) & 127) / 3.0;
1417 int width = parseNumber(1, 2);
1418 if (width > 78) width = 78;
1429 int script = parseNumber(1, 1) & 1;
1462 vpos -= (parseNumber(1, 1) & 127) / 3.0;
1481 static constexpr
byte intlChar35 [9] = { 35, 35, 35, 6, 35, 35, 35, 12, 35 };
1482 static constexpr
byte intlChar36 [9] = { 36, 36, 36, 36, 36, 11, 36, 36, 36 };
1483 static constexpr
byte intlChar64 [9] = { 64, 0, 16, 64, 64, 29, 64, 64, 64 };
1484 static constexpr
byte intlChar91 [9] = { 91, 5, 23, 91, 18, 23, 5, 7, 91 };
1485 static constexpr
byte intlChar92 [9] = { 92, 15, 24, 92, 20, 24, 92, 9, 31 };
1486 static constexpr
byte intlChar93 [9] = { 93, 16, 25, 93, 13, 13, 30, 8, 93 };
1487 static constexpr
byte intlChar94 [9] = { 94, 94, 94, 94, 94, 25, 94, 94, 94 };
1488 static constexpr
byte intlChar96 [9] = { 96, 96, 96, 96, 96, 30, 2, 96, 96 };
1489 static constexpr
byte intlChar123[9] = { 123, 30, 26, 123, 19, 26, 0, 22, 123 };
1490 static constexpr
byte intlChar124[9] = { 124, 2, 27, 124, 21, 27, 3, 10, 124 };
1491 static constexpr
byte intlChar125[9] = { 125, 1, 28, 125, 14, 14, 1, 125, 125 };
1492 static constexpr
byte intlChar126[9] = { 126, 22, 17, 126, 126, 28, 4, 126, 126 };
1494 void ImagePrinterEpson::processCharacter(
byte data)
1509 switch (data & 0x7f) {
1510 case 35: data = (data & 0x80) | intlChar35 [
countryCode];
break;
1511 case 36: data = (data & 0x80) | intlChar36 [
countryCode];
break;
1512 case 64: data = (data & 0x80) | intlChar64 [
countryCode];
break;
1513 case 91: data = (data & 0x80) | intlChar91 [
countryCode];
break;
1514 case 92: data = (data & 0x80) | intlChar92 [
countryCode];
break;
1515 case 93: data = (data & 0x80) | intlChar93 [
countryCode];
break;
1516 case 94: data = (data & 0x80) | intlChar94 [
countryCode];
break;
1517 case 96: data = (data & 0x80) | intlChar96 [
countryCode];
break;
1518 case 123: data = (data & 0x80) | intlChar123[
countryCode];
break;
1519 case 124: data = (data & 0x80) | intlChar124[
countryCode];
break;
1520 case 125: data = (data & 0x80) | intlChar125[
countryCode];
break;
1521 case 126: data = (data & 0x80) | intlChar126[
countryCode];
break;
1598 template<
typename Archive>
1611 , sizeX(
x), sizeY(y)
1613 memset(buf.
data(), 255,
x * y);
1620 "prints",
"page",
".png");
1621 VLA(
const void*, rowPointers, sizeY);
1622 for (
auto y :
xrange(sizeY)) {
1623 rowPointers[y] = &buf[sizeX * y];
1631 radiusX = dotSizeX / 2.0;
1632 radiusY = dotSizeY / 2.0;
1634 int rx = int(16 * radiusX);
1635 int ry = int(16 * radiusY);
1639 table.resize(2 * (radius16 + 16), -(1 << 30));
1641 int offset = ry + 16;
1642 int rx2 = 2 * rx * rx;
1643 int ry2 = 2 * ry * ry;
1648 int de_y = (1 - 2 * ry) * rx * rx;
1653 table[offset - y - 1] =
x;
1654 table[offset + y ] =
x;
1659 if ((2 *
e + de_y) > 0) {
1669 de_x = (1 - 2 * rx) * ry * ry;
1675 table[offset - y - 1] =
x;
1676 table[offset + y ] =
x;
1681 if ((2 *
e + de_x) > 0) {
1692 unsigned xx1 = std::max<int>(
int(floor(xPos - radiusX)), 0);
1693 unsigned xx2 = std::min<int>(
int(ceil (xPos + radiusX)), sizeX);
1694 unsigned yy1 = std::max<int>(
int(floor(yPos - radiusY)), 0);
1695 unsigned yy2 = std::min<int>(
int(ceil (yPos + radiusY)), sizeY);
1697 int y = 16 * yy1 - int(16 * yPos) + 16 + radius16;
1698 for (
auto yy :
xrange(yy1, yy2)) {
1699 int x = 16 * xx1 - int(16 * xPos);
1700 for (
auto xx :
xrange(xx1, xx2)) {
1702 for (
auto i :
xrange(16)) {
1703 int a = table[y + i];
1723 byte& Paper::dot(
unsigned x,
unsigned y)
1727 return buf[y * sizeX +
x];
Dot Matrix Printer Emulation code mostly copied from blueMSX but changed to: OO-style save to png ima...
void printInfo(std::string_view message)
void printWarning(std::string_view message)
Represents something you can plug devices into.
std::string_view getName() const override
Name used to identify this pluggable.
void serialize(Archive &ar, unsigned version)
ImagePrinterEpson(MSXMotherBoard &motherBoard)
std::string_view getDescription() const override
Description for this pluggable.
std::string_view getDescription() const override
Description for this pluggable.
void serialize(Archive &ar, unsigned version)
std::string_view getName() const override
Name used to identify this pluggable.
ImagePrinterMSX(MSXMotherBoard &motherBoard)
void seekPrinterHeadRelative(double offset)
void resetEmulatedPrinter()
unsigned remainingCommandBytes
void plot9Dots(double x, double y, unsigned pattern)
void write(byte data) override
unsigned sizeRemainingDataBytes
virtual void processCharacter(byte data)=0
ImagePrinter(MSXMotherBoard &motherBoard, bool graphicsHiLo)
virtual void resetSettings()=0
void forceFormFeed() override
void printVisibleCharacter(byte data)
struct openmsx::ImagePrinter::FontInfo fontInfo
byte abEscSeq[MAX_ESC_CMDSIZE]
virtual void processEscSequence()=0
void printGraphicByte(byte data)
void flushEmulatedPrinter()
virtual std::pair< unsigned, unsigned > getNumberOfDots()=0
virtual unsigned calcEscSequenceLength(byte character)=0
A Setting with an integer value.
CliComm & getMSXCliComm()
const T * data() const
Returns pointer to the start of the memory buffer.
Paper(unsigned x, unsigned y, double dotSizeX, double dotSizeY)
void plot(double x, double y)
void setDotSize(double sizeX, double sizeY)
virtual void write(byte data)=0
void setStrobe(bool strobe, EmuTime::param time) override
Sets the strobe signal: false = low, true = high.
virtual void forceFormFeed()=0
void plugHelper(Connector &connector, EmuTime::param time) override
void writeData(byte data, EmuTime::param time) override
Sets the data signals.
void unplugHelper(EmuTime::param time) override
bool getStatus(EmuTime::param time) override
Returns the STATUS signal: false = low = ready, true = high = not ready.
constexpr uint8_t reverseByte(uint8_t a)
Reverse the bits in a byte.
constexpr vecN< N, T > min(const vecN< N, T > &x, const vecN< N, T > &y)
constexpr vecN< N, T > max(const vecN< N, T > &x, const vecN< N, T > &y)
string getNextNumberedFileName(string_view directory, string_view prefix, string_view extension)
Gets the next numbered file name with the specified prefix in the specified directory,...
void saveGrayscale(unsigned width, unsigned height, const void **rowPointers, const std::string &filename)
This file implemented 3 utility functions:
constexpr byte MSXFontRaw[256 *8]
REGISTER_POLYMORPHIC_INITIALIZER(Pluggable, CassettePlayer, "CassettePlayer")
constexpr const char *const filename
constexpr KeyMatrixPosition x
Keyboard bindings.
constexpr byte EpsonFontRom[]
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)
auto sum(InputRange &&range, Proj proj={})
byte ram[256 *MAX_FONT_WIDTH]
byte rom[256 *MAX_FONT_WIDTH]
#define VLA(TYPE, NAME, LENGTH)
constexpr auto xrange(T e)
constexpr auto end(const zstring_view &x)