summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/svi318.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/svi318.h')
-rw-r--r--src/mame/includes/svi318.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/mame/includes/svi318.h b/src/mame/includes/svi318.h
new file mode 100644
index 00000000000..a699f6e9bfb
--- /dev/null
+++ b/src/mame/includes/svi318.h
@@ -0,0 +1,159 @@
+// license:???
+// copyright-holders:Sean Young,Tomas Karlsson
+/*****************************************************************************
+ *
+ * includes/svi318.h
+ *
+ * Spectravideo SVI-318 and SVI-328
+ *
+ ****************************************************************************/
+
+#ifndef SVI318_H_
+#define SVI318_H_
+
+#include "cpu/z80/z80.h"
+#include "machine/i8255.h"
+#include "machine/ins8250.h"
+#include "machine/wd_fdc.h"
+#include "machine/ram.h"
+#include "machine/buffer.h"
+#include "imagedev/cassette.h"
+#include "sound/dac.h"
+#include "sound/ay8910.h"
+#include "sound/wave.h"
+#include "video/mc6845.h"
+#include "video/tms9928a.h"
+#include "bus/centronics/ctronics.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+
+class svi318_state : public driver_device
+{
+public:
+ svi318_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_cassette(*this, "cassette"),
+ m_dac(*this, "dac"),
+ m_ppi(*this, "ppi8255"),
+ m_ram(*this, RAM_TAG),
+ m_centronics(*this, "centronics"),
+ m_cent_data_out(*this, "cent_data_out"),
+ m_ins8250_0(*this, "ins8250_0"),
+ m_ins8250_1(*this, "ins8250_1"),
+ m_cart(*this, "cartslot"),
+ m_fd1793(*this, "wd179x"),
+ m_floppy0(*this, "wd179x:0"),
+ m_floppy1(*this, "wd179x:1"),
+ m_crtc(*this, "crtc"),
+ m_line(*this, "LINE"),
+ m_joysticks(*this, "JOYSTICKS"),
+ m_buttons(*this, "BUTTONS"),
+ m_palette(*this, "palette"),
+ m_floppy(NULL),
+ m_bank1(*this, "bank1"),
+ m_bank2(*this, "bank2"),
+ m_bank3(*this, "bank3"),
+ m_bank4(*this, "bank4")
+ { }
+
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+
+ // FDC
+ int m_drq;
+ int m_irq;
+
+ DECLARE_WRITE8_MEMBER(ppi_w);
+ DECLARE_READ8_MEMBER(psg_port_a_r);
+ DECLARE_WRITE8_MEMBER(psg_port_b_w);
+ DECLARE_WRITE8_MEMBER(fdc_drive_motor_w);
+ DECLARE_WRITE8_MEMBER(fdc_density_side_w);
+ DECLARE_READ8_MEMBER(fdc_irqdrq_r);
+ DECLARE_WRITE8_MEMBER(svi806_ram_enable_w);
+ DECLARE_WRITE8_MEMBER(writemem1);
+ DECLARE_WRITE8_MEMBER(writemem2);
+ DECLARE_WRITE8_MEMBER(writemem3);
+ DECLARE_WRITE8_MEMBER(writemem4);
+ DECLARE_READ8_MEMBER(io_ext_r);
+ DECLARE_WRITE8_MEMBER(io_ext_w);
+ DECLARE_DRIVER_INIT(svi318);
+ DECLARE_DRIVER_INIT(svi328_806);
+ DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
+ DECLARE_WRITE_LINE_MEMBER(ins8250_interrupt);
+ DECLARE_READ8_MEMBER(ppi_port_a_r);
+ DECLARE_READ8_MEMBER(ppi_port_b_r);
+ DECLARE_WRITE8_MEMBER(ppi_port_c_w);
+ DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
+ DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
+ bool cart_verify(UINT8 *ROM);
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
+ DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
+
+ virtual void machine_start();
+ virtual void machine_reset();
+
+ MC6845_UPDATE_ROW(crtc_update_row);
+ memory_region *m_cart_rom;
+ memory_region *m_bios_rom;
+
+protected:
+ required_device<z80_device> m_maincpu;
+ required_device<cassette_image_device> m_cassette;
+ required_device<dac_device> m_dac;
+ required_device<i8255_device> m_ppi;
+ required_device<ram_device> m_ram;
+ required_device<centronics_device> m_centronics;
+ required_device<output_latch_device> m_cent_data_out;
+ required_device<ins8250_device> m_ins8250_0;
+ required_device<ins8250_device> m_ins8250_1;
+ required_device<generic_slot_device> m_cart;
+ required_device<fd1793_t> m_fd1793;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ optional_device<mc6845_device> m_crtc;
+ required_ioport_array<11> m_line;
+ required_ioport m_joysticks;
+ required_ioport m_buttons;
+ optional_device<palette_device> m_palette;
+
+private:
+
+ void set_banks();
+ void postload();
+
+ // memory banking
+ UINT8 m_bank_switch;
+ UINT8 m_bank_low;
+ UINT8 m_bank_high;
+
+ UINT8 m_bank_low_read_only;
+ UINT8 m_bank_high1_read_only;
+ UINT8 m_bank_high2_read_only;
+
+ UINT8 *m_empty_bank;
+ UINT8 *m_bank_low_ptr;
+ UINT8 *m_bank_high1_ptr;
+ UINT8 *m_bank_high2_ptr;
+
+ // keyboard
+ UINT8 m_keyboard_row;
+
+ floppy_image_device *m_floppy;
+
+ // centronics
+ int m_centronics_busy;
+
+ // SVI-806 80 column card
+ UINT8 m_svi806_present;
+ UINT8 m_svi806_ram_enabled;
+ dynamic_buffer m_svi806_ram;
+ UINT8 *m_svi806_gfx;
+
+ required_memory_bank m_bank1;
+ required_memory_bank m_bank2;
+ required_memory_bank m_bank3;
+ optional_memory_bank m_bank4;
+};
+
+#endif /* SVI318_H_ */