1 // license:BSD-3-Clause
2 // copyright-holders:Sandro Ronco
3 /*****************************************************************************
4  *
5  * includes/ti89.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_TI89_H
9 #define MAME_INCLUDES_TI89_H
10 
11 #pragma once
12 
13 #include "machine/intelfsh.h"
14 #include "machine/timer.h"
15 #include "emupal.h"
16 
17 class ti68k_state : public driver_device
18 {
19 public:
ti68k_state(const machine_config & mconfig,device_type type,const char * tag)20 	ti68k_state(const machine_config &mconfig, device_type type, const char *tag)
21 		: driver_device(mconfig, type, tag)
22 		, m_maincpu(*this, "maincpu")
23 		, m_flash(*this, "flash")
24 		, m_rom_base(*this, "flash")
25 		, m_ram_base(*this, "nvram")
26 		, m_io_bit0(*this, "BIT0")
27 		, m_io_bit1(*this, "BIT1")
28 		, m_io_bit2(*this, "BIT2")
29 		, m_io_bit3(*this, "BIT3")
30 		, m_io_bit4(*this, "BIT4")
31 		, m_io_bit5(*this, "BIT5")
32 		, m_io_bit6(*this, "BIT6")
33 		, m_io_bit7(*this, "BIT7")
34 	{ }
35 
36 	void v200(machine_config &config);
37 	void ti92(machine_config &config);
38 	void ti89(machine_config &config);
39 	void ti92p(machine_config &config);
40 	void ti89t(machine_config &config);
41 
42 	DECLARE_INPUT_CHANGED_MEMBER(ti68k_on_key);
43 
44 protected:
45 	virtual void machine_start() override;
46 	virtual void machine_reset() override;
47 
48 private:
49 	// hardware versions
50 	enum { HW1=1, HW2, HW3, HW4 };
51 
52 	required_device<cpu_device> m_maincpu;
53 	optional_device<intelfsh16_device> m_flash;
54 	required_region_ptr<uint16_t> m_rom_base;
55 	required_shared_ptr<uint16_t> m_ram_base;
56 	required_ioport m_io_bit0;
57 	required_ioport m_io_bit1;
58 	required_ioport m_io_bit2;
59 	required_ioport m_io_bit3;
60 	required_ioport m_io_bit4;
61 	required_ioport m_io_bit5;
62 	required_ioport m_io_bit6;
63 	required_ioport m_io_bit7;
64 
65 	// HW specifications
66 	uint8_t m_hw_version;
67 	bool m_ram_enabled;
68 
69 	// keyboard
70 	uint16_t m_kb_mask;
71 	uint8_t m_on_key;
72 
73 	// LCD
74 	uint8_t m_lcd_on;
75 	uint32_t m_lcd_base;
76 	uint16_t m_lcd_width;
77 	uint16_t m_lcd_height;
78 	uint16_t m_lcd_contrast;
79 
80 	// I/O
81 	uint16_t m_io_hw1[0x10];
82 	uint16_t m_io_hw2[0x80];
83 
84 	// Timer
85 	uint8_t m_timer_on;
86 	uint8_t m_timer_val;
87 	uint16_t m_timer_mask;
88 	uint64_t m_timer;
89 
90 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
91 
92 	uint8_t keypad_r();
93 	void ti68k_io_w(offs_t offset, uint16_t data);
94 	uint16_t ti68k_io_r(offs_t offset);
95 	void ti68k_io2_w(offs_t offset, uint16_t data);
96 	uint16_t ti68k_io2_r(offs_t offset);
97 	uint16_t rom_r(offs_t offset);
98 	uint16_t reset_overlay_r(offs_t offset);
99 	void ti68k_palette(palette_device &palette) const;
100 
101 	TIMER_DEVICE_CALLBACK_MEMBER(ti68k_timer_callback);
102 
103 	void ti89_mem(address_map &map);
104 	void ti89t_mem(address_map &map);
105 	void ti92_mem(address_map &map);
106 	void ti92p_mem(address_map &map);
107 	void v200_mem(address_map &map);
108 };
109 
110 #endif // MAME_INCLUDES_TI89_H
111