trunk/src/mess/drivers/lx800.c
| r30755 | r30756 | |
| 9 | 9 | |
| 10 | 10 | - CPU type uPD7810HG |
| 11 | 11 | - CPU PORTD and PORTF are connected to the Gate Array |
| 12 | | - CPU Analog Port (AN0-AN7) is not emulated (connects to DIPSW2 and |
| 13 | | some other things). |
| 14 | 12 | - processing gets stuck in a loop, and never gets to scan the |
| 15 | 13 | input buttons and switches. |
| 16 | 14 | - CPU disassembly doesn't seem to indicate conditional JR or RET. |
| r30755 | r30756 | |
| 32 | 30 | { |
| 33 | 31 | public: |
| 34 | 32 | lx800_state(const machine_config &mconfig, device_type type, const char *tag) |
| 35 | | : driver_device(mconfig, type, tag), |
| 36 | | m_maincpu(*this, "maincpu"), |
| 37 | | m_beep(*this, "beeper") |
| 33 | : driver_device(mconfig, type, tag) |
| 34 | , m_maincpu(*this, "maincpu") |
| 35 | , m_beep(*this, "beeper") |
| 38 | 36 | { } |
| 39 | 37 | |
| 40 | | required_device<cpu_device> m_maincpu; |
| 41 | | required_device<beep_device> m_beep; |
| 42 | 38 | DECLARE_READ8_MEMBER(lx800_porta_r); |
| 43 | 39 | DECLARE_WRITE8_MEMBER(lx800_porta_w); |
| 44 | 40 | DECLARE_READ8_MEMBER(lx800_portc_r); |
| r30755 | r30756 | |
| 47 | 43 | DECLARE_WRITE_LINE_MEMBER(lx800_centronics_pe_w); |
| 48 | 44 | DECLARE_WRITE_LINE_MEMBER(lx800_paperempty_led_w); |
| 49 | 45 | DECLARE_WRITE_LINE_MEMBER(lx800_reset_w); |
| 46 | DECLARE_READ_LINE_MEMBER(an0_r); |
| 47 | DECLARE_READ_LINE_MEMBER(an1_r); |
| 48 | DECLARE_READ_LINE_MEMBER(an2_r); |
| 49 | DECLARE_READ_LINE_MEMBER(an3_r); |
| 50 | DECLARE_READ_LINE_MEMBER(an4_r); |
| 51 | DECLARE_READ_LINE_MEMBER(an5_r); |
| 52 | private: |
| 53 | required_device<cpu_device> m_maincpu; |
| 54 | required_device<beep_device> m_beep; |
| 50 | 55 | virtual void machine_start(); |
| 51 | 56 | }; |
| 52 | 57 | |
| r30755 | r30756 | |
| 114 | 119 | m_beep->set_state(!BIT(data, 7)); |
| 115 | 120 | } |
| 116 | 121 | |
| 122 | READ_LINE_MEMBER( lx800_state::an0_r ) |
| 123 | { |
| 124 | return BIT(ioport("DIPSW2")->read(), 0); |
| 125 | } |
| 117 | 126 | |
| 127 | READ_LINE_MEMBER( lx800_state::an1_r ) |
| 128 | { |
| 129 | return BIT(ioport("DIPSW2")->read(), 1); |
| 130 | } |
| 131 | |
| 132 | READ_LINE_MEMBER( lx800_state::an2_r ) |
| 133 | { |
| 134 | return BIT(ioport("DIPSW2")->read(), 2); |
| 135 | } |
| 136 | |
| 137 | READ_LINE_MEMBER( lx800_state::an3_r ) |
| 138 | { |
| 139 | return BIT(ioport("DIPSW2")->read(), 3); // can also read an external line AUTO_FEED_XT |
| 140 | } |
| 141 | |
| 142 | READ_LINE_MEMBER( lx800_state::an4_r ) |
| 143 | { |
| 144 | return 0; // Printer select line (0=always selected) |
| 145 | } |
| 146 | |
| 147 | READ_LINE_MEMBER( lx800_state::an5_r ) |
| 148 | { |
| 149 | return 1; // Monitors 24v line, should return 4.08 volts |
| 150 | } |
| 151 | |
| 152 | |
| 118 | 153 | /*************************************************************************** |
| 119 | 154 | GATE ARRAY |
| 120 | 155 | ***************************************************************************/ |
| r30755 | r30756 | |
| 249 | 284 | MCFG_CPU_ADD("maincpu", UPD7810, XTAL_14_7456MHz) |
| 250 | 285 | MCFG_CPU_PROGRAM_MAP(lx800_mem) |
| 251 | 286 | MCFG_CPU_IO_MAP(lx800_io) |
| 287 | MCFG_UPD7810_AN0(READLINE(lx800_state, an0_r)) |
| 288 | MCFG_UPD7810_AN1(READLINE(lx800_state, an1_r)) |
| 289 | MCFG_UPD7810_AN2(READLINE(lx800_state, an2_r)) |
| 290 | MCFG_UPD7810_AN3(READLINE(lx800_state, an3_r)) |
| 291 | MCFG_UPD7810_AN4(READLINE(lx800_state, an4_r)) |
| 292 | MCFG_UPD7810_AN5(READLINE(lx800_state, an5_r)) |
| 252 | 293 | |
| 253 | 294 | MCFG_DEFAULT_LAYOUT(layout_lx800) |
| 254 | 295 | |
| 255 | 296 | /* audio hardware */ |
| 256 | 297 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 257 | 298 | MCFG_SOUND_ADD("beeper", BEEP, 0) |
| 258 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 299 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05) |
| 259 | 300 | |
| 260 | 301 | /* gate array */ |
| 261 | 302 | MCFG_DEVICE_ADD("ic3b", E05A03, 0) |