GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
Data Structures | Macros | Functions
printer.c File Reference
#include "printer.h"
#include <stdlib.h>
#include <string.h>
#include "log.h"
#include "gecode.h"
#include "signals.h"

Go to the source code of this file.

Data Structures

struct  printer_ctx
 

Macros

#define STALL_THRESHOLD   256
 
#define PRINT_CMD_IS_PUT(cmd)   ((cmd) & 0x80)
 
#define PRINT_LEN_MAX   256
 
#define KBD_CMD_LINE   0x40
 
#define KBD_CMD_CHAR   0x41
 
#define LP_CMD_WRITE   0x42
 
#define IS_OUTPUT_CMD(cmd)   (PRINT_CMD_IS_PUT(cmd) || (cmd) == LP_CMD_WRITE)
 
#define Z_CHANNEL2_BIT   0x01
 
#define ORDER_IS_CHANNEL2(ge, base)   (((ge)->mem[(uint16_t)(base)] & Z_CHANNEL2_BIT) != 0)
 
#define STDIO_STATUS_ADDR   0x0030
 
#define STDIO_COUNT_ADDR   0x0032
 
#define LP_CMD_SINGLE_SPACE   0x2E
 
#define LP_CMD_TRIPLE_SPACE   0x5A
 

Functions

static void store16 (struct ge *ge, uint16_t addr, uint16_t value)
 
static void printer_capture_char (struct ge_integrated_printer *p, char c)
 
static void printer_capture_breaks (struct ge_integrated_printer *p, int count)
 
static void printer_capture_control (struct ge_integrated_printer *p, uint8_t cmd)
 
static int kbd_ready (const struct ge_integrated_printer *p)
 
static int kbd_has_complete_line (const struct ge_integrated_printer *p)
 
static uint8_t kbd_pop (struct ge_integrated_printer *p)
 
static int service_input_line (struct ge *ge, uint16_t buf, int len)
 
static int service_input_char (struct ge *ge, uint16_t buf, int len)
 
static int input_order_ready (struct ge *ge, uint8_t cmd)
 
static int channel1_reader_owns_the_order (struct ge *ge)
 
static int in_channel2_print_wait (struct ge *ge)
 
static int printer_on_clock (struct ge *ge, void *opaque)
 
static int printer_deinit (struct ge *ge, void *opaque)
 
static void printer_sink (struct ge *ge, struct ge_channel *ch, uint8_t c)
 
int printer_register (struct ge *ge)
 
void printer_begin_output (struct ge *ge, uint16_t buffer, int length, int line_mode)
 
void printer_feed_key (struct ge *ge, uint8_t c)
 
int printer_output_len (struct ge *ge)
 
const char * printer_output (struct ge *ge)
 
void printer_output_clear (struct ge *ge)
 

Macro Definition Documentation

◆ IS_OUTPUT_CMD

#define IS_OUTPUT_CMD (   cmd)    (PRINT_CMD_IS_PUT(cmd) || (cmd) == LP_CMD_WRITE)

Definition at line 108 of file printer.c.

◆ KBD_CMD_CHAR

#define KBD_CMD_CHAR   0x41

Definition at line 98 of file printer.c.

◆ KBD_CMD_LINE

#define KBD_CMD_LINE   0x40

Definition at line 97 of file printer.c.

◆ LP_CMD_SINGLE_SPACE

#define LP_CMD_SINGLE_SPACE   0x2E

Definition at line 117 of file printer.c.

◆ LP_CMD_TRIPLE_SPACE

#define LP_CMD_TRIPLE_SPACE   0x5A

Definition at line 118 of file printer.c.

◆ LP_CMD_WRITE

#define LP_CMD_WRITE   0x42

Definition at line 107 of file printer.c.

◆ ORDER_IS_CHANNEL2

#define ORDER_IS_CHANNEL2 (   ge,
  base 
)    (((ge)->mem[(uint16_t)(base)] & Z_CHANNEL2_BIT) != 0)

Definition at line 113 of file printer.c.

◆ PRINT_CMD_IS_PUT

#define PRINT_CMD_IS_PUT (   cmd)    ((cmd) & 0x80)

Definition at line 95 of file printer.c.

◆ PRINT_LEN_MAX

#define PRINT_LEN_MAX   256

Definition at line 96 of file printer.c.

◆ STALL_THRESHOLD

#define STALL_THRESHOLD   256

Definition at line 82 of file printer.c.

◆ STDIO_COUNT_ADDR

#define STDIO_COUNT_ADDR   0x0032

Definition at line 116 of file printer.c.

◆ STDIO_STATUS_ADDR

#define STDIO_STATUS_ADDR   0x0030

Definition at line 115 of file printer.c.

◆ Z_CHANNEL2_BIT

#define Z_CHANNEL2_BIT   0x01

Definition at line 112 of file printer.c.

Function Documentation

◆ channel1_reader_owns_the_order()

static int channel1_reader_owns_the_order ( struct ge ge)
static

Definition at line 238 of file printer.c.

◆ in_channel2_print_wait()

static int in_channel2_print_wait ( struct ge ge)
static

Definition at line 255 of file printer.c.

◆ input_order_ready()

static int input_order_ready ( struct ge ge,
uint8_t  cmd 
)
static

Definition at line 214 of file printer.c.

◆ kbd_has_complete_line()

static int kbd_has_complete_line ( const struct ge_integrated_printer *  p)
static

Definition at line 159 of file printer.c.

◆ kbd_pop()

static uint8_t kbd_pop ( struct ge_integrated_printer *  p)
static

Definition at line 168 of file printer.c.

◆ kbd_ready()

static int kbd_ready ( const struct ge_integrated_printer *  p)
static

Definition at line 154 of file printer.c.

◆ printer_begin_output()

void printer_begin_output ( struct ge ge,
uint16_t  buffer,
int  length,
int  line_mode 
)

Definition at line 460 of file printer.c.

◆ printer_capture_breaks()

static void printer_capture_breaks ( struct ge_integrated_printer *  p,
int  count 
)
static

Definition at line 134 of file printer.c.

◆ printer_capture_char()

static void printer_capture_char ( struct ge_integrated_printer *  p,
char  c 
)
static

Definition at line 126 of file printer.c.

◆ printer_capture_control()

static void printer_capture_control ( struct ge_integrated_printer *  p,
uint8_t  cmd 
)
static

Definition at line 140 of file printer.c.

◆ printer_deinit()

static int printer_deinit ( struct ge ge,
void *  opaque 
)
static

Definition at line 416 of file printer.c.

◆ printer_feed_key()

void printer_feed_key ( struct ge ge,
uint8_t  c 
)

Definition at line 470 of file printer.c.

◆ printer_on_clock()

static int printer_on_clock ( struct ge ge,
void *  opaque 
)
static

Definition at line 270 of file printer.c.

◆ printer_output()

const char * printer_output ( struct ge ge)

Definition at line 485 of file printer.c.

◆ printer_output_clear()

void printer_output_clear ( struct ge ge)

Definition at line 490 of file printer.c.

◆ printer_output_len()

int printer_output_len ( struct ge ge)

Definition at line 480 of file printer.c.

◆ printer_register()

int printer_register ( struct ge ge)

Definition at line 436 of file printer.c.

◆ printer_sink()

static void printer_sink ( struct ge ge,
struct ge_channel ch,
uint8_t  c 
)
static

Definition at line 428 of file printer.c.

◆ service_input_char()

static int service_input_char ( struct ge ge,
uint16_t  buf,
int  len 
)
static

Definition at line 197 of file printer.c.

◆ service_input_line()

static int service_input_line ( struct ge ge,
uint16_t  buf,
int  len 
)
static

Definition at line 175 of file printer.c.

◆ store16()

static void store16 ( struct ge ge,
uint16_t  addr,
uint16_t  value 
)
static

Definition at line 120 of file printer.c.