1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 /********************************************************************** 4 5 DALLAS DS2404 6 7 RTC + BACKUP RAM 8 9 **********************************************************************/ 10 11 #ifndef MAME_MACHINE_DS2404_H 12 #define MAME_MACHINE_DS2404_H 13 14 #pragma once 15 16 class ds2404_device : public device_t, public device_nvram_interface 17 { 18 public: 19 // construction/destruction 20 ds2404_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 21 22 // inline configuration helpers ref_year(uint32_t year)23 void ref_year(uint32_t year) { m_ref_year = year; } ref_month(uint8_t month)24 void ref_month(uint8_t month) { m_ref_month = month; } ref_day(uint8_t day)25 void ref_day(uint8_t day) { m_ref_day = day; } 26 27 /* 1-wire interface reset */ 28 void _1w_reset_w(uint8_t data); 29 30 /* 3-wire interface reset */ 31 void _3w_reset_w(uint8_t data); 32 33 uint8_t data_r(); 34 void data_w(uint8_t data); 35 void clk_w(uint8_t data); 36 37 protected: 38 // device-level overrides 39 virtual void device_start() override; device_reset()40 virtual void device_reset() override { } device_post_load()41 virtual void device_post_load() override { } device_clock_changed()42 virtual void device_clock_changed() override { } 43 44 // device_nvram_interface overrides 45 virtual void nvram_default() override; 46 virtual void nvram_read(emu_file &file) override; 47 virtual void nvram_write(emu_file &file) override; 48 49 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 50 51 private: 52 void rom_cmd(uint8_t cmd); 53 void cmd(uint8_t cmd); 54 55 uint8_t readmem(); 56 void writemem(uint8_t value); 57 58 enum STATE 59 { 60 STATE_IDLE = 1, /* waiting for ROM command, in 1-wire mode */ 61 STATE_COMMAND, /* waiting for memory command */ 62 STATE_ADDRESS1, /* waiting for address bits 0-7 */ 63 STATE_ADDRESS2, /* waiting for address bits 8-15 */ 64 STATE_OFFSET, /* waiting for ending offset */ 65 STATE_INIT_COMMAND, 66 STATE_READ_MEMORY, /* Read Memory command active */ 67 STATE_WRITE_SCRATCHPAD, /* Write Scratchpad command active */ 68 STATE_READ_SCRATCHPAD, /* Read Scratchpad command active */ 69 STATE_COPY_SCRATCHPAD /* Copy Scratchpad command active */ 70 }; 71 72 emu_timer *m_tick_timer; 73 74 // configuration state 75 uint32_t m_ref_year; 76 uint8_t m_ref_month; 77 uint8_t m_ref_day; 78 79 uint16_t m_address; 80 uint16_t m_offset; 81 uint16_t m_end_offset; 82 uint8_t m_a1; 83 uint8_t m_a2; 84 uint8_t m_sram[512]; /* 4096 bits */ 85 uint8_t m_ram[32]; /* scratchpad ram, 256 bits */ 86 uint8_t m_rtc[5]; /* 40-bit RTC counter */ 87 STATE m_state[8]; 88 int m_state_ptr; 89 }; 90 91 DECLARE_DEVICE_TYPE(DS2404, ds2404_device) 92 93 #endif // MAME_MACHINE_DS2404_H 94