1 // license:GPL2+
2 // copyright-holders:Felipe Sanches
3 #ifndef MAME_INCLUDES_PATINHOFEIO_H
4 #define MAME_INCLUDES_PATINHOFEIO_H
5 
6 #pragma once
7 
8 #include "machine/teleprinter.h"
9 
10 class patinho_feio_state : public driver_device {
11 public:
patinho_feio_state(const machine_config & mconfig,device_type type,const char * tag)12 	patinho_feio_state(const machine_config &mconfig, device_type type, const char *tag)
13 		: driver_device(mconfig, type, tag)
14 		, m_maincpu(*this, "maincpu")
15 		, m_decwriter(*this, "decwriter")
16 		, m_tty(*this, "teletype")
17 	{ }
18 
19 	void init_patinho_feio();
20 
21 	void decwriter_data_w(uint8_t data);
22 	void decwriter_kbd_input(u8 data);
23 	TIMER_CALLBACK_MEMBER(decwriter_callback);
24 
25 	void teletype_data_w(uint8_t data);
26 	void teletype_kbd_input(u8 data);
27 	TIMER_CALLBACK_MEMBER(teletype_callback);
28 
29 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( tape_load );
30 
31 	void update_panel(uint8_t ACC, uint8_t opcode, uint8_t mem_data, uint16_t mem_addr, uint16_t PC, uint8_t FLAGS, uint16_t RC, uint8_t mode);
32 
33 	void patinho_feio(machine_config &config);
34 protected:
35 	virtual void machine_start() override;
36 
37 	void load_tape(const char* name);
38 	void load_raw_data(const char* name, unsigned int start_address, unsigned int data_length);
39 
40 	required_device<patinho_feio_cpu_device> m_maincpu;
41 	required_device<teleprinter_device> m_decwriter;
42 	required_device<teleprinter_device> m_tty;
43 
44 private:
45 	uint8_t* paper_tape_data;
46 	uint32_t paper_tape_length;
47 	uint32_t paper_tape_address;
48 
49 	emu_timer *m_decwriter_timer;
50 	emu_timer *m_teletype_timer;
51 	output_manager *m_out;
52 	uint8_t m_prev_ACC;
53 	uint8_t m_prev_opcode;
54 	uint8_t m_prev_mem_data;
55 	uint16_t m_prev_mem_addr;
56 	uint16_t m_prev_PC;
57 	uint8_t m_prev_FLAGS;
58 	uint16_t m_prev_RC;
59 };
60 
61 #endif // MAME_INCLUDES_PATINHOFEIO_H
62