git.y1.nz

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.