From 753da22b82dd4b5edfa76aa53d380f630831fc57 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Wed, 10 Feb 2021 20:12:16 -0800 Subject: Implement serial IO, a generic serial device type and external interrupts --- io.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'io.h') diff --git a/io.h b/io.h index 23affc7..00f1528 100644 --- a/io.h +++ b/io.h @@ -24,7 +24,8 @@ enum { IO_EA_MULTI_A, IO_EA_MULTI_B, IO_SEGA_PARALLEL, - IO_GENERIC + IO_GENERIC, + IO_GENERIC_SERIAL }; typedef struct { @@ -62,8 +63,15 @@ typedef struct { uint8_t control; uint8_t input[3]; uint32_t slow_rise_start[8]; + uint32_t serial_cycle; + uint32_t serial_divider; + uint32_t last_poll_cycle; + uint32_t transmit_end; + uint32_t receive_end; uint8_t serial_out; + uint8_t serial_transmitting; uint8_t serial_in; + uint8_t serial_receiving; uint8_t serial_ctrl; uint8_t device_type; } io_port; @@ -106,9 +114,15 @@ enum { void setup_io_devices(tern_node * config, rom_info *rom, sega_io *io); void io_adjust_cycles(io_port * pad, uint32_t current_cycle, uint32_t deduction); +void io_run(io_port *port, uint32_t current_cycle); void io_control_write(io_port *port, uint8_t value, uint32_t current_cycle); void io_data_write(io_port * pad, uint8_t value, uint32_t current_cycle); +void io_tx_write(io_port *port, uint8_t value, uint32_t current_cycle); +void io_sctrl_write(io_port *port, uint8_t value, uint32_t current_cycle); uint8_t io_data_read(io_port * pad, uint32_t current_cycle); +uint8_t io_rx_read(io_port * port, uint32_t current_cycle); +uint8_t io_sctrl_read(io_port *port, uint32_t current_cycle); +uint32_t io_next_interrupt(io_port *port, uint32_t current_cycle); void io_serialize(io_port *port, serialize_buffer *buf); void io_deserialize(deserialize_buffer *buf, void *vport); -- cgit v1.2.3