summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/apexc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/apexc.h')
-rw-r--r--src/mame/includes/apexc.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/mame/includes/apexc.h b/src/mame/includes/apexc.h
new file mode 100644
index 00000000000..743dd545458
--- /dev/null
+++ b/src/mame/includes/apexc.h
@@ -0,0 +1,87 @@
+// license:GPL-2.0+
+// copyright-holders:Raphael Nabet, Robbbert
+
+#ifndef MAME_INCLUDES_APEXC
+#define MAME_INCLUDES_APEXC
+
+#pragma once
+
+#include "emu.h"
+#include "cpu/apexc/apexc.h"
+#include "machine/apexc.h"
+#include "screen.h"
+
+class apexc_state : public driver_device
+{
+public:
+ apexc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_screen(*this, "screen")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palette(*this, "palette")
+ , m_chargen_region(*this, "chargen")
+ , m_cylinder(*this, "cylinder")
+ , m_tape_puncher(*this, "tape_puncher")
+ , m_tape_reader(*this, "tape_reader")
+ , m_panel_port(*this, "panel")
+ , m_data_port(*this, "data")
+ , m_input_timer(nullptr)
+ { }
+
+ void init_apexc();
+
+ void apexc(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void video_start() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ void check_inputs();
+
+private:
+
+ DECLARE_PALETTE_INIT(apexc);
+ uint32_t screen_update_apexc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ INTERRUPT_GEN_MEMBER(apexc_interrupt);
+ DECLARE_WRITE8_MEMBER(tape_write);
+ void draw_led(bitmap_ind16 &bitmap, int x, int y, int state);
+ void draw_char(bitmap_ind16 &bitmap, char character, int x, int y, int color);
+ void draw_string(bitmap_ind16 &bitmap, const char *buf, int x, int y, int color);
+ void teletyper_init();
+ void teletyper_linefeed();
+ void teletyper_putchar(int character);
+
+ void mem(address_map &map);
+
+ uint32_t m_panel_data_reg; /* value of a data register on the control panel which can
+ be edited - the existence of this register is a personnal
+ guess */
+
+ std::unique_ptr<bitmap_ind16> m_bitmap;
+
+ uint32_t m_old_edit_keys;
+ int m_old_control_keys;
+
+ int m_letters;
+ int m_pos;
+
+ required_device<apexc_cpu_device> m_maincpu;
+ required_device<screen_device> m_screen;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ required_memory_region m_chargen_region;
+ required_device<apexc_cylinder_image_device> m_cylinder;
+ required_device<apexc_tape_puncher_image_device> m_tape_puncher;
+ required_device<apexc_tape_reader_image_device> m_tape_reader;
+ required_ioport m_panel_port;
+ required_ioport m_data_port;
+
+ emu_timer *m_input_timer;
+
+ static const device_timer_id TIMER_POLL_INPUTS;
+ static const rgb_t palette_table[4];
+};
+
+#endif // MAME_INCLUDES_APEXC \ No newline at end of file