trunk/src/mame/drivers/kaneko16.c
| r31858 | r31859 | |
| 717 | 717 | static ADDRESS_MAP_START( shogwarr, AS_PROGRAM, 16, kaneko16_shogwarr_state ) |
| 718 | 718 | AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM |
| 719 | 719 | AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("mainram") // Work RAM |
| 720 | | AM_RANGE(0x200000, 0x20ffff) AM_DEVREADWRITE("calc3_prot", kaneko_calc3_device, mcu_ram_r,mcu_ram_w) // Shared With MCU |
| 720 | AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("mcuram") |
| 721 | 721 | AM_RANGE(0x280000, 0x280001) AM_DEVWRITE("calc3_prot", kaneko_calc3_device, mcu_com0_w) |
| 722 | 722 | AM_RANGE(0x290000, 0x290001) AM_DEVWRITE("calc3_prot", kaneko_calc3_device, mcu_com1_w) |
| 723 | 723 | AM_RANGE(0x2b0000, 0x2b0001) AM_DEVWRITE("calc3_prot", kaneko_calc3_device, mcu_com2_w) |
trunk/src/mame/machine/kaneko_calc3.c
| r31858 | r31859 | |
| 29 | 29 | |
| 30 | 30 | kaneko_calc3_device::kaneko_calc3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 31 | 31 | : device_t(mconfig, KANEKO_CALC3, "Kaneko CALC3 MCU", tag, owner, clock, "kaneko_calc3", __FILE__), |
| 32 | m_mcuram(*this, ":mcuram"), |
| 32 | 33 | m_mcu_status(0), |
| 33 | 34 | m_mcu_command_offset(0), |
| 34 | 35 | m_mcu_crc(0), |
| r31858 | r31859 | |
| 45 | 46 | m_dsw_addr(0), |
| 46 | 47 | m_eeprom_addr(0), |
| 47 | 48 | m_poll_addr(0), |
| 48 | | m_checksumaddress(0), |
| 49 | | m_mcuram(NULL) |
| 49 | m_checksumaddress(0) |
| 50 | 50 | { |
| 51 | 51 | m_data_header[0] = m_data_header[1] = 0; |
| 52 | 52 | } |
| r31858 | r31859 | |
| 54 | 54 | |
| 55 | 55 | void kaneko_calc3_device::device_start() |
| 56 | 56 | { |
| 57 | | m_mcuram = (UINT16*)auto_alloc_array_clear(machine(), UINT16, 0x10000/2); |
| 58 | 57 | initial_scan_tables(); |
| 59 | 58 | m_runtimer = timer_alloc(MCU_RUN_TIMER); |
| 60 | 59 | |
| 61 | | |
| 62 | 60 | save_item(NAME(m_mcu_status)); |
| 63 | 61 | save_item(NAME(m_mcu_command_offset)); |
| 64 | 62 | save_item(NAME(m_mcu_crc)); |
| r31858 | r31859 | |
| 77 | 75 | save_item(NAME(m_eeprom_addr)); |
| 78 | 76 | save_item(NAME(m_poll_addr)); |
| 79 | 77 | save_item(NAME(m_checksumaddress)); |
| 80 | | save_pointer(NAME(m_mcuram), 0x10000/2); |
| 81 | 78 | } |
| 82 | 79 | |
| 83 | 80 | void kaneko_calc3_device::device_reset() |
| r31858 | r31859 | |
| 130 | 127 | m_mcu_command_offset = 0; |
| 131 | 128 | } |
| 132 | 129 | |
| 133 | | READ16_MEMBER(kaneko_calc3_device::mcu_ram_r) |
| 134 | | { |
| 135 | | return m_mcuram[offset]; |
| 136 | | } |
| 137 | | |
| 138 | | WRITE16_MEMBER(kaneko_calc3_device::mcu_ram_w) |
| 139 | | { |
| 140 | | COMBINE_DATA(&m_mcuram[offset]); |
| 141 | | } |
| 142 | | |
| 143 | 130 | void kaneko_calc3_device::mcu_com_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_) |
| 144 | 131 | { |
| 145 | 132 | logerror("calc3w %d %04x %04x\n", _n_, data, mem_mask); |
trunk/src/mame/machine/kaneko_calc3.h
| r31858 | r31859 | |
| 9 | 9 | public: |
| 10 | 10 | kaneko_calc3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 11 | 11 | |
| 12 | | DECLARE_READ16_MEMBER(mcu_ram_r); |
| 13 | | DECLARE_WRITE16_MEMBER(mcu_ram_w); |
| 14 | | |
| 15 | 12 | DECLARE_WRITE16_MEMBER(mcu_com0_w); |
| 16 | 13 | DECLARE_WRITE16_MEMBER(mcu_com1_w); |
| 17 | 14 | DECLARE_WRITE16_MEMBER(mcu_com2_w); |
| 18 | 15 | DECLARE_WRITE16_MEMBER(mcu_com3_w); |
| 19 | 16 | |
| 20 | 17 | void reset_run_timer(); |
| 21 | | |
| 22 | 18 | void mcu_run(); |
| 23 | 19 | |
| 24 | 20 | protected: |
| r31858 | r31859 | |
| 27 | 23 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 28 | 24 | |
| 29 | 25 | private: |
| 26 | required_shared_ptr<UINT16> m_mcuram; |
| 30 | 27 | int m_mcu_status; |
| 31 | 28 | int m_mcu_command_offset; |
| 32 | 29 | UINT16 m_mcu_crc; |
| r31858 | r31859 | |
| 45 | 42 | UINT16 m_eeprom_addr; |
| 46 | 43 | UINT16 m_poll_addr; |
| 47 | 44 | UINT16 m_checksumaddress; |
| 48 | | UINT16* m_mcuram; |
| 49 | 45 | emu_timer* m_runtimer; |
| 50 | 46 | |
| 51 | 47 | enum |