1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_CGC7900_H 4 #define MAME_INCLUDES_CGC7900_H 5 6 #pragma once 7 8 9 #include "bus/rs232/rs232.h" 10 #include "cpu/m68000/m68000.h" 11 #include "cpu/mcs48/mcs48.h" 12 #include "machine/ram.h" 13 #include "machine/i8251.h" 14 #include "machine/com8116.h" 15 #include "machine/mm58167.h" 16 #include "machine/keyboard.h" 17 #include "machine/timer.h" 18 #include "sound/ay8910.h" 19 20 #include "emupal.h" 21 #include "screen.h" 22 23 #define M68000_TAG "uh8" 24 #define INS8251_0_TAG "uc10" 25 #define INS8251_1_TAG "uc8" 26 #define MM58167_TAG "uc6" 27 #define AY8910_TAG "uc4" 28 #define K1135A_TAG "uc11" 29 #define I8035_TAG "i8035" 30 #define AM2910_TAG "11d" 31 #define SCREEN_TAG "screen" 32 33 class cgc7900_state : public driver_device 34 { 35 public: cgc7900_state(const machine_config & mconfig,device_type type,const char * tag)36 cgc7900_state(const machine_config &mconfig, device_type type, const char *tag) 37 : driver_device(mconfig, type, tag) 38 , m_maincpu(*this, M68000_TAG) 39 , m_palette(*this, "palette") 40 , m_screen(*this, "screen") 41 , m_char_rom(*this, "gfx1") 42 , m_chrom_ram(*this, "chrom_ram") 43 , m_plane_ram(*this, "plane_ram") 44 , m_clut_ram(*this, "clut_ram") 45 , m_overlay_ram(*this, "overlay_ram") 46 , m_roll_bitmap(*this, "roll_bitmap") 47 , m_pan_x(*this, "pan_x") 48 , m_pan_y(*this, "pan_y") 49 , m_zoom(*this, "zoom") 50 , m_blink_select(*this, "blink_select") 51 , m_plane_select(*this, "plane_select") 52 , m_plane_switch(*this, "plane_switch") 53 , m_color_status_fg(*this, "color_status_fg") 54 , m_color_status_bg(*this, "color_status_bg") 55 , m_roll_overlay(*this, "roll_overlay") 56 , m_i8251_0(*this, INS8251_0_TAG) 57 , m_i8251_1(*this, INS8251_1_TAG) 58 { } 59 60 required_device<cpu_device> m_maincpu; 61 required_device<palette_device> m_palette; 62 required_device<screen_device> m_screen; 63 required_memory_region m_char_rom; 64 required_shared_ptr<u16> m_chrom_ram; 65 required_shared_ptr<u16> m_plane_ram; 66 required_shared_ptr<u16> m_clut_ram; 67 required_shared_ptr<u16> m_overlay_ram; 68 required_shared_ptr<u16> m_roll_bitmap; 69 required_shared_ptr<u16> m_pan_x; 70 required_shared_ptr<u16> m_pan_y; 71 required_shared_ptr<u16> m_zoom; 72 required_shared_ptr<u16> m_blink_select; 73 required_shared_ptr<u16> m_plane_select; 74 required_shared_ptr<u16> m_plane_switch; 75 required_shared_ptr<u16> m_color_status_fg; 76 required_shared_ptr<u16> m_color_status_bg; 77 required_shared_ptr<u16> m_roll_overlay; 78 required_device<i8251_device> m_i8251_0; 79 required_device<i8251_device> m_i8251_1; 80 81 virtual void machine_start() override; 82 virtual void machine_reset() override; 83 84 void cgc7900_palette(palette_device &palette) const; 85 u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 86 87 u16 keyboard_r(); 88 void keyboard_w(u16 data); 89 void interrupt_mask_w(u16 data); 90 u16 disk_data_r(); 91 void disk_data_w(u16 data); 92 u16 disk_status_r(); 93 void disk_command_w(u16 data); 94 u16 z_mode_r(); 95 void z_mode_w(u16 data); 96 void color_status_w(u16 data); 97 u16 sync_r(); 98 u16 unmapped_r(); 99 DECLARE_WRITE_LINE_MEMBER(irq)100 template <unsigned N> DECLARE_WRITE_LINE_MEMBER(irq) { irq_encoder(N, state); } 101 102 void update_clut(); 103 void draw_bitmap(screen_device *screen, bitmap_rgb32 &bitmap); 104 void draw_overlay(screen_device *screen, bitmap_rgb32 &bitmap); 105 106 /* interrupt state */ 107 u16 m_int_mask, m_int_active; 108 109 /* video state */ 110 rgb_t m_clut[256]; 111 int m_blink; 112 113 TIMER_DEVICE_CALLBACK_MEMBER(blink_tick); 114 115 void kbd_put(u8 data); 116 117 void cgc7900(machine_config &config); 118 void cgc7900_video(machine_config &config); 119 void cgc7900_mem(address_map &map); 120 void keyboard_mem(address_map &map); 121 void cpu_space_map(address_map &map); 122 private: 123 u16 kbd_mods; 124 u8 kbd_data; 125 bool kbd_ready; 126 127 void irq_encoder(int pin, int state); 128 }; 129 130 #endif 131