1 // license:GPL-2.0+ 2 // copyright-holders:Kevin Thacker,Sandro Ronco 3 /***************************************************************************** 4 * 5 * includes/z88.h 6 * 7 ****************************************************************************/ 8 9 #ifndef MAME_INCLUDES_Z88_H 10 #define MAME_INCLUDES_Z88_H 11 12 #pragma once 13 14 #include "cpu/z80/z80.h" 15 #include "machine/ram.h" 16 #include "machine/upd65031.h" 17 #include "sound/spkrdev.h" 18 19 #include "bus/z88/flash.h" 20 #include "bus/z88/ram.h" 21 #include "bus/z88/rom.h" 22 #include "bus/z88/z88.h" 23 24 #include "emupal.h" 25 #include "screen.h" 26 #include "speaker.h" 27 28 #define Z88_NUM_COLOURS 3 29 30 #define Z88_SCREEN_WIDTH 640 31 #define Z88_SCREEN_HEIGHT 64 32 33 #define Z88_SCR_HW_REV (1<<4) 34 #define Z88_SCR_HW_HRS (1<<5) 35 #define Z88_SCR_HW_UND (1<<1) 36 #define Z88_SCR_HW_FLS (1<<3) 37 #define Z88_SCR_HW_GRY (1<<2) 38 #define Z88_SCR_HW_CURS (Z88_SCR_HW_HRS|Z88_SCR_HW_FLS|Z88_SCR_HW_REV) 39 #define Z88_SCR_HW_NULL (Z88_SCR_HW_HRS|Z88_SCR_HW_GRY|Z88_SCR_HW_REV) 40 41 class z88_state : public driver_device 42 { 43 public: z88_state(const machine_config & mconfig,device_type type,const char * tag)44 z88_state(const machine_config &mconfig, device_type type, const char *tag) 45 : driver_device(mconfig, type, tag) 46 , m_maincpu(*this, "maincpu") 47 , m_bios_region(*this, "bios") 48 , m_ram(*this, RAM_TAG) 49 , m_screen(*this, "screen") 50 , m_palette(*this, "palette") 51 , m_blink(*this, "blink") 52 , m_lines(*this, "LINE%u", 0U) 53 , m_banks(*this, "bank%u", 1U) 54 , m_carts(*this, "slot%u", 0U) 55 { } 56 57 void z88(machine_config &config); 58 59 private: 60 enum 61 { 62 Z88_BANK_ROM = 1, 63 Z88_BANK_RAM, 64 Z88_BANK_CART, 65 Z88_BANK_UNMAP 66 }; 67 68 virtual void machine_start() override; 69 virtual void machine_reset() override; 70 uint8_t kb_r(offs_t offset); 71 UPD65031_MEMORY_UPDATE(bankswitch_update); 72 UPD65031_SCREEN_UPDATE(lcd_update); 73 74 // cartridges read/write 75 uint8_t bank0_cart_r(offs_t offset); 76 uint8_t bank1_cart_r(offs_t offset); 77 uint8_t bank2_cart_r(offs_t offset); 78 uint8_t bank3_cart_r(offs_t offset); 79 void bank0_cart_w(offs_t offset, uint8_t data); 80 void bank1_cart_w(offs_t offset, uint8_t data); 81 void bank2_cart_w(offs_t offset, uint8_t data); 82 void bank3_cart_w(offs_t offset, uint8_t data); 83 84 // defined in video/z88.c 85 inline void plot_pixel(bitmap_ind16 &bitmap, int x, int y, uint16_t color); 86 inline uint8_t* convert_address(uint32_t offset); 87 void vh_render_8x8(bitmap_ind16 &bitmap, int x, int y, uint16_t pen0, uint16_t pen1, uint8_t *gfx); 88 void vh_render_6x8(bitmap_ind16 &bitmap, int x, int y, uint16_t pen0, uint16_t pen1, uint8_t *gfx); 89 void vh_render_line(bitmap_ind16 &bitmap, int x, int y, uint16_t pen); 90 91 void z88_palette(palette_device &palette) const; 92 93 void z88_io(address_map &map); 94 void z88_mem(address_map &map); 95 96 required_device<cpu_device> m_maincpu; 97 required_memory_region m_bios_region; 98 required_device<ram_device> m_ram; 99 required_device<screen_device> m_screen; 100 required_device<palette_device> m_palette; 101 required_device<upd65031_device> m_blink; 102 required_ioport_array<8> m_lines; 103 required_memory_bank_array<5> m_banks; 104 optional_device_array<z88cart_slot_device, 4> m_carts; 105 106 struct 107 { 108 uint8_t slot; 109 uint8_t page; 110 } m_bank[4]; 111 112 int m_bank_type[4]; 113 uint8_t * m_bios; 114 uint8_t * m_ram_base; 115 }; 116 117 #endif // MAME_INCLUDES_Z88_H 118