trunk/src/mess/drivers/ngp.c
| r21720 | r21721 | |
| 118 | 118 | }; |
| 119 | 119 | |
| 120 | 120 | |
| 121 | | class ngp_state : public driver_device |
| 121 | class ngp_state : public driver_device, public device_nvram_interface |
| 122 | 122 | { |
| 123 | 123 | public: |
| 124 | 124 | ngp_state(const machine_config &mconfig, device_type type, const char *tag) |
| 125 | 125 | : driver_device(mconfig, type, tag) |
| 126 | , device_nvram_interface(mconfig, *this) |
| 126 | 127 | , m_tlcs900( *this, "maincpu" ) |
| 127 | 128 | , m_z80( *this, "soundcpu" ) |
| 128 | 129 | , m_t6w28( *this, "t6w28" ) |
| 129 | 130 | , m_dac_l( *this, "dac_l" ) |
| 130 | 131 | , m_dac_r( *this, "dac_r" ) |
| 132 | , m_mainram( *this, "mainram" ) |
| 131 | 133 | { |
| 132 | 134 | m_flash_chip[0].present = 0; |
| 133 | 135 | m_flash_chip[0].state = F_READ; |
| r21720 | r21721 | |
| 136 | 138 | m_flash_chip[1].present = 0; |
| 137 | 139 | m_flash_chip[1].state = F_READ; |
| 138 | 140 | m_flash_chip[1].data = NULL; |
| 141 | |
| 142 | m_nvram_loaded = false; |
| 139 | 143 | } |
| 140 | 144 | |
| 141 | 145 | virtual void machine_start(); |
| r21720 | r21721 | |
| 160 | 164 | required_device<t6w28_device> m_t6w28; |
| 161 | 165 | required_device<dac_device> m_dac_l; |
| 162 | 166 | required_device<dac_device> m_dac_r; |
| 167 | required_shared_ptr<UINT8> m_mainram; |
| 163 | 168 | device_t *m_k1ge; |
| 164 | 169 | |
| 165 | 170 | DECLARE_READ8_MEMBER( ngp_io_r ); |
| r21720 | r21721 | |
| 184 | 189 | |
| 185 | 190 | DECLARE_DEVICE_IMAGE_LOAD_MEMBER( ngp_cart); |
| 186 | 191 | DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( ngp_cart ); |
| 192 | |
| 193 | protected: |
| 194 | bool m_nvram_loaded; |
| 195 | |
| 196 | virtual void nvram_default(); |
| 197 | virtual void nvram_read(emu_file &file); |
| 198 | virtual void nvram_write(emu_file &file); |
| 187 | 199 | }; |
| 188 | 200 | |
| 189 | 201 | |
| r21720 | r21721 | |
| 521 | 533 | |
| 522 | 534 | static ADDRESS_MAP_START( ngp_mem, AS_PROGRAM, 8, ngp_state ) |
| 523 | 535 | AM_RANGE( 0x000080, 0x0000bf ) AM_READWRITE(ngp_io_r, ngp_io_w) /* ngp/c specific i/o */ |
| 524 | | AM_RANGE( 0x004000, 0x006fff ) AM_RAM /* work ram */ |
| 536 | AM_RANGE( 0x004000, 0x006fff ) AM_RAM AM_SHARE("mainram") /* work ram */ |
| 525 | 537 | AM_RANGE( 0x007000, 0x007fff ) AM_RAM AM_SHARE("share1") /* shared with sound cpu */ |
| 526 | | AM_RANGE( 0x008000, 0x0087ff ) AM_DEVREADWRITE_LEGACY("k1ge", k1ge_r, k1ge_w) /* video registers */ |
| 538 | AM_RANGE( 0x008000, 0x0087ff ) AM_DEVREADWRITE_LEGACY("k1ge", k1ge_r, k1ge_w) /* video registers */ |
| 527 | 539 | AM_RANGE( 0x008800, 0x00bfff ) AM_RAM AM_REGION("vram", 0x800 ) /* Video RAM area */ |
| 528 | 540 | AM_RANGE( 0x200000, 0x3fffff ) AM_ROM AM_WRITE(flash0_w) AM_REGION("cart", 0) /* cart area #1 */ |
| 529 | 541 | AM_RANGE( 0x800000, 0x9fffff ) AM_ROM AM_WRITE(flash1_w) AM_REGION("cart", 0x200000) /* cart area #2 */ |
| r21720 | r21721 | |
| 669 | 681 | |
| 670 | 682 | m_z80->suspend(SUSPEND_REASON_HALT, 1 ); |
| 671 | 683 | m_z80->set_input_line(0, CLEAR_LINE ); |
| 684 | |
| 685 | if ( m_nvram_loaded ) |
| 686 | { |
| 687 | m_tlcs900->set_state_int(TLCS900_PC, 0xFF1800); |
| 688 | } |
| 672 | 689 | } |
| 673 | 690 | |
| 674 | 691 | |
| r21720 | r21721 | |
| 747 | 764 | } |
| 748 | 765 | |
| 749 | 766 | |
| 767 | void ngp_state::nvram_default() |
| 768 | { |
| 769 | } |
| 770 | |
| 771 | |
| 772 | void ngp_state::nvram_read(emu_file &file) |
| 773 | { |
| 774 | file.read(m_mainram, 0x3000); |
| 775 | m_nvram_loaded = true; |
| 776 | } |
| 777 | |
| 778 | |
| 779 | void ngp_state::nvram_write(emu_file &file) |
| 780 | { |
| 781 | file.write(m_mainram, 0x3000); |
| 782 | } |
| 783 | |
| 784 | |
| 750 | 785 | static const k1ge_interface ngp_k1ge_interface = |
| 751 | 786 | { |
| 752 | 787 | "screen", |