summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/includes/x1.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/includes/x1.h')
-rw-r--r--src/mess/includes/x1.h221
1 files changed, 221 insertions, 0 deletions
diff --git a/src/mess/includes/x1.h b/src/mess/includes/x1.h
new file mode 100644
index 00000000000..9de743429b4
--- /dev/null
+++ b/src/mess/includes/x1.h
@@ -0,0 +1,221 @@
+/*****************************************************************************
+ *
+ * includes/x1.h
+ *
+ ****************************************************************************/
+
+#ifndef X1_H_
+#define X1_H_
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "cpu/z80/z80daisy.h"
+#include "machine/z80ctc.h"
+//#include "machine/z80sio.h"
+#include "machine/z80dart.h"
+#include "machine/i8255.h"
+#include "machine/wd17xx.h"
+#include "machine/z80dma.h"
+#include "video/mc6845.h"
+#include "sound/2151intf.h"
+#include "sound/ay8910.h"
+#include "sound/wave.h"
+#include "imagedev/cassette.h"
+#include "imagedev/flopdrv.h"
+#include "imagedev/cartslot.h"
+#include "formats/basicdsk.h"
+#include "formats/x1_tap.h"
+
+
+// ======================> x1_keyboard_device
+
+class x1_keyboard_device : public device_t,
+ public device_z80daisy_interface
+{
+public:
+ // construction/destruction
+ x1_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+private:
+ virtual void device_start();
+ // z80daisy_interface overrides
+ virtual int z80daisy_irq_state();
+ virtual int z80daisy_irq_ack();
+ virtual void z80daisy_irq_reti();
+};
+
+typedef struct
+{
+ UINT8 gfx_bank;
+ UINT8 disp_bank;
+ UINT8 pcg_mode;
+ UINT8 v400_mode;
+ UINT8 ank_sel;
+
+ UINT8 pri;
+ UINT8 blackclip; // x1 turbo specific
+} scrn_reg_t;
+
+typedef struct
+{
+ UINT8 pal;
+ UINT8 gfx_pal;
+ UINT8 txt_pal[8];
+ UINT8 txt_disp;
+} turbo_reg_t;
+
+typedef struct
+{
+ UINT8 sec, min, hour, day, wday, month, year;
+} x1_rtc_t;
+
+
+class x1_state : public driver_device
+{
+public:
+ x1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_x1_cpu(*this,"x1_cpu"),
+ m_cass(*this, CASSETTE_TAG),
+ m_fdc(*this, "fdc"),
+ m_crtc(*this, "crtc"),
+ m_ctc(*this, "ctc")
+ { }
+
+ DECLARE_READ8_MEMBER(x1_mem_r);
+ DECLARE_WRITE8_MEMBER(x1_mem_w);
+ DECLARE_READ8_MEMBER(x1_io_r);
+ DECLARE_WRITE8_MEMBER(x1_io_w);
+ DECLARE_READ8_MEMBER(x1_sub_io_r);
+ DECLARE_WRITE8_MEMBER(x1_sub_io_w);
+ DECLARE_READ8_MEMBER(x1_rom_r);
+ DECLARE_WRITE8_MEMBER(x1_rom_w);
+ DECLARE_WRITE8_MEMBER(x1_rom_bank_0_w);
+ DECLARE_WRITE8_MEMBER(x1_rom_bank_1_w);
+ DECLARE_READ8_MEMBER(x1_fdc_r);
+ DECLARE_WRITE8_MEMBER(x1_fdc_w);
+ DECLARE_READ8_MEMBER(x1_pcg_r);
+ DECLARE_WRITE8_MEMBER(x1_pcg_w);
+ DECLARE_WRITE8_MEMBER(x1_pal_r_w);
+ DECLARE_WRITE8_MEMBER(x1_pal_g_w);
+ DECLARE_WRITE8_MEMBER(x1_pal_b_w);
+ DECLARE_WRITE8_MEMBER(x1_ex_gfxram_w);
+ DECLARE_WRITE8_MEMBER(x1_scrn_w);
+ DECLARE_WRITE8_MEMBER(x1_pri_w);
+ DECLARE_WRITE8_MEMBER(x1_6845_w);
+ DECLARE_READ8_MEMBER(x1_kanji_r);
+ DECLARE_WRITE8_MEMBER(x1_kanji_w);
+ DECLARE_READ8_MEMBER(x1_emm_r);
+ DECLARE_WRITE8_MEMBER(x1_emm_w);
+ DECLARE_READ8_MEMBER(x1turbo_pal_r);
+ DECLARE_READ8_MEMBER(x1turbo_txpal_r);
+ DECLARE_READ8_MEMBER(x1turbo_txdisp_r);
+ DECLARE_READ8_MEMBER(x1turbo_gfxpal_r);
+ DECLARE_WRITE8_MEMBER(x1turbo_pal_w);
+ DECLARE_WRITE8_MEMBER(x1turbo_txpal_w);
+ DECLARE_WRITE8_MEMBER(x1turbo_txdisp_w);
+ DECLARE_WRITE8_MEMBER(x1turbo_gfxpal_w);
+ DECLARE_WRITE8_MEMBER(x1turbo_blackclip_w);
+ DECLARE_READ8_MEMBER(x1turbo_mem_r);
+ DECLARE_WRITE8_MEMBER(x1turbo_mem_w);
+ DECLARE_READ8_MEMBER(x1turbo_io_r);
+ DECLARE_WRITE8_MEMBER(x1turbo_io_w);
+ DECLARE_WRITE8_MEMBER(x1turboz_4096_palette_w);
+ DECLARE_READ8_MEMBER(x1turboz_blackclip_r);
+ DECLARE_READ8_MEMBER(x1turbo_bank_r);
+ DECLARE_WRITE8_MEMBER(x1turbo_bank_w);
+ DECLARE_READ8_MEMBER(x1_porta_r);
+ DECLARE_READ8_MEMBER(x1_portb_r);
+ DECLARE_READ8_MEMBER(x1_portc_r);
+ DECLARE_WRITE8_MEMBER(x1_porta_w);
+ DECLARE_WRITE8_MEMBER(x1_portb_w);
+ DECLARE_WRITE8_MEMBER(x1_portc_w);
+
+ UINT8 *m_tvram;
+ UINT8 *m_avram;
+ UINT8 *m_kvram;
+ UINT8 m_hres_320;
+ UINT8 m_io_switch;
+ UINT8 m_io_sys;
+ UINT8 m_vsync;
+ UINT8 m_vdisp;
+ UINT8 m_io_bank_mode;
+ UINT8 *m_gfx_bitmap_ram;
+ UINT8 m_pcg_reset;
+ UINT8 m_sub_obf;
+ UINT8 m_ctc_irq_flag;
+ scrn_reg_t m_scrn_reg;
+ turbo_reg_t m_turbo_reg;
+ x1_rtc_t m_rtc;
+ emu_timer *m_rtc_timer;
+ UINT8 m_pcg_write_addr;
+ UINT8 m_sub_cmd;
+ UINT8 m_sub_cmd_length;
+ UINT8 m_sub_val[8];
+ int m_sub_val_ptr;
+ int m_key_i;
+ UINT8 m_irq_vector;
+ UINT8 m_cmt_current_cmd;
+ UINT8 m_cmt_test;
+ UINT8 m_rom_index[3];
+ UINT32 m_kanji_offset;
+ UINT8 m_bios_offset;
+ UINT8 m_x_b;
+ UINT8 m_x_g;
+ UINT8 m_x_r;
+ UINT16 m_kanji_addr_latch;
+ UINT32 m_kanji_addr;
+ UINT8 m_kanji_eksel;
+ UINT8 m_pcg_reset_occurred;
+ UINT32 m_old_key1;
+ UINT32 m_old_key2;
+ UINT32 m_old_key3;
+ UINT32 m_old_key4;
+ UINT32 m_old_fkey;
+ UINT8 m_key_irq_flag;
+ UINT8 m_key_irq_vector;
+ UINT32 m_emm_addr;
+ UINT8 *m_pal_4096;
+ UINT8 m_crtc_vreg[0x100],m_crtc_index;
+ UINT8 m_is_turbo;
+ UINT8 m_ex_bank;
+ UINT8 m_ram_bank;
+ void set_current_palette();
+ UINT16 get_pcg_addr(UINT16 width, UINT8 y_char_size);
+ UINT16 check_chr_addr();
+ UINT16 check_pcg_addr();
+ UINT8 get_game_key(UINT8 port);
+ UINT8 check_keyboard_shift();
+ UINT16 check_keyboard_press();
+
+ required_device<cpu_device> m_x1_cpu;
+ required_device<cassette_image_device> m_cass;
+ required_device<device_t> m_fdc;
+ required_device<mc6845_device> m_crtc;
+ required_device<z80ctc_device> m_ctc;
+ DECLARE_DRIVER_INIT(x1_kanji);
+};
+
+
+
+/*----------- shared with x1twin.c -----------*/
+
+VIDEO_START( x1 );
+SCREEN_UPDATE_RGB32( x1 );
+
+TIMER_DEVICE_CALLBACK(x1_keyboard_callback);
+TIMER_CALLBACK(x1_rtc_increment);
+TIMER_DEVICE_CALLBACK( x1_cmt_wind_timer );
+
+MACHINE_RESET( x1 );
+MACHINE_RESET( x1turbo );
+MACHINE_START( x1 );
+PALETTE_INIT(x1);
+
+
+
+/*----------- defined in machine/x1.c -----------*/
+
+extern const device_type X1_KEYBOARD;
+
+#endif /* X1_H_ */