diff i8255.h @ 2521:8cf7cadc17ee

Initial SC-3000 support
author Michael Pavone <pavone@retrodev.com>
date Fri, 11 Oct 2024 00:46:53 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i8255.h	Fri Oct 11 00:46:53 2024 -0700
@@ -0,0 +1,28 @@
+#ifndef I8255_H_
+#define I8255_H_
+
+#include <stdint.h>
+
+typedef struct i8255 i8255;
+typedef void (*i8255_out_update)(i8255 *ppi, uint32_t cycle, uint32_t port, uint8_t data);
+typedef uint8_t (*i8255_in_sample)(i8255 *ppi, uint32_t cycle, uint32_t port);
+
+struct i8255 {
+	uint8_t          latches[4];
+	uint8_t          control;
+	uint8_t          portc_write_mask;
+	uint8_t          portc_out_mask;
+	i8255_out_update out_handler;
+	i8255_in_sample  in_handler;
+	void             *system;
+};
+
+void i8255_init(i8255 *ppi, i8255_out_update out, i8255_in_sample in);
+void i8255_write(uint32_t address, i8255 *ppi, uint8_t value, uint32_t cycle);
+uint8_t i8255_read(uint32_t address, i8255 *ppi, uint32_t cycle);
+void i8255_input_strobe_a(i8255 *ppi, uint8_t value, uint32_t cycle);
+void i8255_input_strobe_b(i8255 *ppi, uint8_t value, uint32_t cycle);
+uint8_t i8255_output_ack_a(i8255 *ppi, uint32_t cycle);
+uint8_t i8255_output_ack_b(i8255 *ppi, uint32_t cycle);
+
+#endif //I8255_H_