summaryrefslogtreecommitdiff
path: root/io.h
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2021-02-10 20:12:16 -0800
committerMichael Pavone <pavone@retrodev.com>2021-02-10 20:12:16 -0800
commit753da22b82dd4b5edfa76aa53d380f630831fc57 (patch)
tree446406ad14b21924aa7d793a2f8ce74a83919816 /io.h
parent88164945ae08f9f2a2649b0b796319e9aab099bc (diff)
Implement serial IO, a generic serial device type and external interrupts
Diffstat (limited to 'io.h')
-rw-r--r--io.h16
1 files changed, 15 insertions, 1 deletions
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);