trunk/src/mess/drivers/palm.c
| r21075 | r21076 | |
| 21 | 21 | { |
| 22 | 22 | public: |
| 23 | 23 | palm_state(const machine_config &mconfig, device_type type, const char *tag) |
| 24 | | : driver_device(mconfig, type, tag), |
| 25 | | m_maincpu(*this, "maincpu"), |
| 26 | | m_lsi(*this, MC68328_TAG), |
| 27 | | m_dac(*this, "dac"), |
| 28 | | m_ram(*this, RAM_TAG) |
| 24 | : driver_device(mconfig, type, tag) |
| 25 | , m_maincpu(*this, "maincpu") |
| 26 | , m_lsi(*this, MC68328_TAG) |
| 27 | , m_dac(*this, "dac") |
| 28 | , m_ram(*this, RAM_TAG) |
| 29 | , m_io_penx(*this, "PENX") |
| 30 | , m_io_peny(*this, "PENY") |
| 31 | , m_io_penb(*this, "PENB") |
| 32 | , m_io_portd(*this, "PORTD") |
| 29 | 33 | { } |
| 30 | 34 | |
| 31 | 35 | required_device<cpu_device> m_maincpu; |
| r21075 | r21076 | |
| 51 | 55 | DECLARE_WRITE16_MEMBER(palm_spim_out); |
| 52 | 56 | DECLARE_READ16_MEMBER(palm_spim_in); |
| 53 | 57 | DECLARE_WRITE8_MEMBER(palm_dac_transition); |
| 58 | |
| 59 | required_ioport m_io_penx; |
| 60 | required_ioport m_io_peny; |
| 61 | required_ioport m_io_penb; |
| 62 | required_ioport m_io_portd; |
| 54 | 63 | }; |
| 55 | 64 | |
| 56 | 65 | static offs_t palm_dasm_override(device_t &device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, int options); |
| r21075 | r21076 | |
| 62 | 71 | |
| 63 | 72 | INPUT_CHANGED_MEMBER(palm_state::pen_check) |
| 64 | 73 | { |
| 65 | | UINT8 button = machine().root_device().ioport("PENB")->read(); |
| 74 | UINT8 button = m_io_penb->read(); |
| 66 | 75 | |
| 67 | 76 | if(button) |
| 68 | 77 | mc68328_set_penirq_line(m_lsi, 1); |
| r21075 | r21076 | |
| 72 | 81 | |
| 73 | 82 | INPUT_CHANGED_MEMBER(palm_state::button_check) |
| 74 | 83 | { |
| 75 | | UINT8 button_state = machine().root_device().ioport("PORTD")->read(); |
| 84 | UINT8 button_state = m_io_portd->read(); |
| 76 | 85 | |
| 77 | 86 | mc68328_set_port_d_lines(m_lsi, button_state, (int)(FPTR)param); |
| 78 | 87 | } |
| r21075 | r21076 | |
| 105 | 114 | static void palm_spim_exchange( device_t *device ) |
| 106 | 115 | { |
| 107 | 116 | palm_state *state = device->machine().driver_data<palm_state>(); |
| 108 | | UINT8 x = device->machine().root_device().ioport("PENX")->read(); |
| 109 | | UINT8 y = state->ioport("PENY")->read(); |
| 117 | UINT8 x = state->m_io_penx->read(); |
| 118 | UINT8 y = state->m_io_peny->read(); |
| 110 | 119 | |
| 111 | 120 | switch( state->m_port_f_latch & 0x0f ) |
| 112 | 121 | { |
| r21075 | r21076 | |
| 122 | 131 | |
| 123 | 132 | void palm_state::machine_start() |
| 124 | 133 | { |
| 125 | | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); |
| 126 | | space.install_read_bank (0x000000, machine().device<ram_device>(RAM_TAG)->size() - 1, machine().device<ram_device>(RAM_TAG)->size() - 1, 0, "bank1"); |
| 127 | | space.install_write_bank(0x000000, machine().device<ram_device>(RAM_TAG)->size() - 1, machine().device<ram_device>(RAM_TAG)->size() - 1, 0, "bank1"); |
| 128 | | membank("bank1")->set_base(machine().device<ram_device>(RAM_TAG)->pointer()); |
| 134 | address_space &space = m_maincpu->space(AS_PROGRAM); |
| 135 | space.install_read_bank (0x000000, m_ram->size() - 1, m_ram->size() - 1, 0, "bank1"); |
| 136 | space.install_write_bank(0x000000, m_ram->size() - 1, m_ram->size() - 1, 0, "bank1"); |
| 137 | membank("bank1")->set_base(m_ram->pointer()); |
| 129 | 138 | |
| 130 | 139 | save_item(NAME(m_port_f_latch)); |
| 131 | 140 | save_item(NAME(m_spim_data)); |
| r21075 | r21076 | |
| 138 | 147 | { |
| 139 | 148 | // Copy boot ROM |
| 140 | 149 | UINT8* bios = machine().root_device().memregion("bios")->base(); |
| 141 | | memset(machine().device<ram_device>(RAM_TAG)->pointer(), 0, machine().device<ram_device>(RAM_TAG)->size()); |
| 142 | | memcpy(machine().device<ram_device>(RAM_TAG)->pointer(), bios, 0x20000); |
| 150 | memset(m_ram->pointer(), 0, m_ram->size()); |
| 151 | memcpy(m_ram->pointer(), bios, 0x20000); |
| 143 | 152 | |
| 144 | 153 | m_maincpu->reset(); |
| 145 | 154 | } |