trunk/src/emu/cpu/mcs51/mcs51.c
| r245635 | r245636 | |
| 286 | 286 | m_ds5002fp.mcon = 0; |
| 287 | 287 | m_ds5002fp.rpctl = 0; |
| 288 | 288 | m_ds5002fp.crc = 0; |
| 289 | |
| 290 | /* default to standard cmos interfacing */ |
| 291 | |
| 292 | for (int i=0; i < ARRAY_LENGTH(m_forced_inputs); i++) |
| 293 | m_forced_inputs[i] = 0; |
| 289 | 294 | } |
| 290 | 295 | |
| 291 | 296 | |
| r245635 | r245636 | |
| 2079 | 2084 | { |
| 2080 | 2085 | /* Read/Write/Modify operations read the port latch ! */ |
| 2081 | 2086 | /* Move to memory map */ |
| 2082 | | case ADDR_P0: return RWM ? P0 : P0 & IN(MCS51_PORT_P0); |
| 2083 | | case ADDR_P1: return RWM ? P1 : P1 & IN(MCS51_PORT_P1); |
| 2084 | | case ADDR_P2: return RWM ? P2 : P2 & IN(MCS51_PORT_P2); |
| 2085 | | case ADDR_P3: return RWM ? P3 : P3 & IN(MCS51_PORT_P3); |
| 2087 | case ADDR_P0: return RWM ? P0 : (P0 | m_forced_inputs[0]) & IN(MCS51_PORT_P0); |
| 2088 | case ADDR_P1: return RWM ? P1 : (P1 | m_forced_inputs[1]) & IN(MCS51_PORT_P1); |
| 2089 | case ADDR_P2: return RWM ? P2 : (P2 | m_forced_inputs[2]) & IN(MCS51_PORT_P2); |
| 2090 | case ADDR_P3: return RWM ? P3 : (P3 | m_forced_inputs[3]) & IN(MCS51_PORT_P3); |
| 2086 | 2091 | |
| 2087 | 2092 | case ADDR_PSW: |
| 2088 | 2093 | case ADDR_ACC: |
trunk/src/emu/cpu/mcs51/mcs51.h
| r245635 | r245636 | |
| 72 | 72 | MCS51_PORT_TX = 0x20004, /* P3.1 */ |
| 73 | 73 | }; |
| 74 | 74 | |
| 75 | /* At least CMOS devices may be forced to read from ports configured as output. |
| 76 | * All you need is a low impedance output connect to the port. |
| 77 | */ |
| 75 | 78 | |
| 79 | #define MCFG_MCS51_PORT1_CONFIG(_forced_inputs) \ |
| 80 | mcs51_cpu_device::set_port_forced_input(*device, 1, _forced_inputs); |
| 81 | #define MCFG_MCS51_PORT2_CONFIG(_forced_inputs) \ |
| 82 | mcs51_cpu_device::set_port_forced_input(*device, 2, _forced_inputs); |
| 83 | #define MCFG_MCS51_PORT3_CONFIG(_forced_inputs) \ |
| 84 | mcs51_cpu_device::set_port_forced_input(*device, 3, _forced_inputs); |
| 85 | |
| 76 | 86 | class mcs51_cpu_device : public cpu_device |
| 77 | 87 | { |
| 78 | 88 | public: |
| r245635 | r245636 | |
| 82 | 92 | void i8051_set_serial_tx_callback(write8_delegate tx_func); |
| 83 | 93 | void i8051_set_serial_rx_callback(read8_delegate rx_func); |
| 84 | 94 | |
| 95 | // configuration helpers |
| 96 | static void set_port_forced_input(device_t &device, UINT8 port, UINT8 forced_input) { downcast<mcs51_cpu_device &>(device).m_forced_inputs[port] = forced_input; } |
| 97 | |
| 85 | 98 | protected: |
| 86 | 99 | // device-level overrides |
| 87 | 100 | virtual void device_start(); |
| r245635 | r245636 | |
| 137 | 150 | UINT8 m_irq_active; /* mask which irq levels are serviced */ |
| 138 | 151 | UINT8 m_irq_prio[8]; /* interrupt priority */ |
| 139 | 152 | |
| 153 | UINT8 m_forced_inputs[4]; /* allow read even if configured as output */ |
| 154 | |
| 140 | 155 | int m_icount; |
| 141 | 156 | |
| 142 | 157 | struct mcs51_uart |