SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
Core/printer.h
1 #pragma once
2
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include "defs.h"
6 #define GB_PRINTER_MAX_COMMAND_LENGTH 0x280
7 #define GB_PRINTER_DATA_SIZE 0x280
8
9 typedef void (*GB_print_image_callback_t)(GB_gameboy_t *gb,
10 uint32_t *image,
11 uint8_t height,
12 uint8_t top_margin,
13 uint8_t bottom_margin,
14 uint8_t exposure);
15
16 typedef void (*GB_printer_done_callback_t)(GB_gameboy_t *gb);
17
18 typedef struct
19 {
20 /* Communication state machine */
21
22 GB_ENUM(uint8_t, {
23 GB_PRINTER_COMMAND_MAGIC1,
24 GB_PRINTER_COMMAND_MAGIC2,
25 GB_PRINTER_COMMAND_ID,
26 GB_PRINTER_COMMAND_COMPRESSION,
27 GB_PRINTER_COMMAND_LENGTH_LOW,
28 GB_PRINTER_COMMAND_LENGTH_HIGH,
29 GB_PRINTER_COMMAND_DATA,
30 GB_PRINTER_COMMAND_CHECKSUM_LOW,
31 GB_PRINTER_COMMAND_CHECKSUM_HIGH,
32 GB_PRINTER_COMMAND_ACTIVE,
33 GB_PRINTER_COMMAND_STATUS,
34 }) command_state;
35 GB_ENUM(uint8_t, {
36 GB_PRINTER_INIT_COMMAND = 1,
37 GB_PRINTER_START_COMMAND = 2,
38 GB_PRINTER_DATA_COMMAND = 4,
39 GB_PRINTER_NOP_COMMAND = 0xF,
40 }) command_id;
41 bool compression;
42 uint16_t length_left;
43 uint8_t command_data[GB_PRINTER_MAX_COMMAND_LENGTH];
44 uint16_t command_length;
45 uint16_t checksum;
46 uint8_t status;
47 uint8_t byte_to_send;
48
49 uint8_t image[160 * 200];
50 uint16_t image_offset;
51
52 uint32_t idle_time;
53 uint32_t time_remaining;
54
55 uint8_t compression_run_lenth;
56 bool compression_run_is_compressed;
57
58 uint8_t bits_received;
59 uint8_t byte_being_received;
60 bool bit_to_send;
61 } GB_printer_t;
62
63
64 void GB_connect_printer(GB_gameboy_t *gb, GB_print_image_callback_t callback, GB_printer_done_callback_t done_callback);
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.