| Previous | 199869 Revisions | Next |
| r24549 Monday 29th July, 2013 at 07:34:22 UTC by Aaron Giles |
|---|
| Rewrite serial EEPROM devices, breaking them out into separate chips of the proper size and protocol. Update all drivers, removing custom implementations, and replacing them with standard ones. Moved core read, write, erase functionality into the EEPROM base class a simulated delays in write/erase cycles. Still some more testing/verification work left to do. |
| [src/emu/machine] | eeprom.c eeprom.h eepromser.c eepromser.h smpc.c |
| [src/emu/video] | pc_vga.c |
| [src/mame/drivers] | 20pacgal.c 39in1.c 8080bw.c albazg.c asterix.c astrcorp.c ataxx.c backfire.c cave.c cbasebal.c centiped.c cps1.c cps2.c dcheese.c deco156.c deco32.c deco_mlc.c dkong.c dreambal.c eolith.c eolith16.c esd16.c f-32.c fcrash.c fortecar.c fromanc2.c gaelco2.c gaelco3d.c galastrm.c galpani2.c galpani3.c gijoe.c groundfx.c gticlub.c gunbustr.c hornet.c inufuku.c invqix.c jackpool.c jaguar.c jchan.c jclub2.c kaneko16.c kickgoal.c konamigq.c konamigv.c konamigx.c leland.c lethal.c limenko.c lordgun.c metro.c midas.c mitchell.c model2.c model3.c moo.c mystwarr.c naomi.c othunder.c overdriv.c pasha2.c pirates.c playmark.c plygonet.c pntnpuzl.c policetr.c powerbal.c psikyo4.c psikyosh.c pzletime.c r2dx_v33.c rabbit.c rbmk.c rungun.c segas32.c seibuspi.c seta2.c sigmab98.c simpl156.c simpsons.c spool99.c ssv.c stlforce.c stv.c superchs.c taito_b.c taito_f3.c taito_z.c taitojc.c tasman.c tecmosys.c tmaster.c tmmjprd.c tmnt.c toaplan2.c ultrsprt.c undrfire.c unico.c vamphalf.c vendetta.c wheelfir.c xexex.c xmen.c xorworld.c zr107.c |
| [src/mame/includes] | 20pacgal.h 8080bw.h cave.h centiped.h deco32.h deco_mlc.h dkong.h esd16.h fromanc2.h gaelco2.h gaelco3d.h galastrm.h galpani2.h gunbustr.h jaguar.h kaneko16.h kickgoal.h leland.h lordgun.h metro.h mitchell.h model2.h model3.h naomi.h othunder.h pirates.h playmark.h plygonet.h policetr.h psikyo4.h psikyosh.h segas32.h seibuspi.h seta2.h simpl156.h ssv.h stlforce.h stv.h superchs.h taito_z.h tecmosys.h toaplan2.h undrfire.h unico.h xorworld.h |
| [src/mame/machine] | gaelco2.c kaneko_calc3.c kaneko_toybox.c leland.c |
| [src/mess/drivers] | ip20.c |
| [src/mess/machine] | sega8_rom.c sega8_rom.h |
| r24548 | r24549 | |
|---|---|---|
| 2104 | 2104 | vga.memory[offset] = data; |
| 2105 | 2105 | } |
| 2106 | 2106 | |
| 2107 | ||
| 2108 | static struct serial_eeprom_interface ati_eeprom_interface = | |
| 2109 | { | |
| 2110 | "*110", /* read command */ | |
| 2111 | "*101", /* write command */ | |
| 2112 | "*111", /* erase command */ | |
| 2113 | "*10000xxxx", // lock 1 00 00xxxx | |
| 2114 | "*10011xxxx" // unlock 1 00 11xxxx | |
| 2115 | }; | |
| 2116 | ||
| 2117 | 2107 | MACHINE_CONFIG_FRAGMENT( pcvideo_vga ) |
| 2118 | 2108 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2119 | 2109 | MCFG_SCREEN_RAW_PARAMS(XTAL_25_1748MHz,900,0,640,526,0,480) |
| r24548 | r24549 | |
| 2162 | 2152 | |
| 2163 | 2153 | static MACHINE_CONFIG_FRAGMENT( ati_vga ) |
| 2164 | 2154 | MCFG_MACH8_ADD_OWNER("8514a") |
| 2165 | MCFG_SERIAL_ | |
| 2155 | MCFG_EEPROM_SERIAL_93C46_ADD("ati_eeprom") | |
| 2166 | 2156 | MACHINE_CONFIG_END |
| 2167 | 2157 | |
| 2168 | 2158 | static MACHINE_CONFIG_FRAGMENT( s3_764 ) |
| r24548 | r24549 | |
| 5253 | 5243 | break; |
| 5254 | 5244 | case 0x37: |
| 5255 | 5245 | { |
| 5256 | serial_ | |
| 5246 | eeprom_serial_93cxx_device* eep = subdevice<eeprom_serial_93cxx_device>("ati_eeprom"); | |
| 5257 | 5247 | ret = 0x00; |
| 5258 | ret |= eep->read | |
| 5248 | ret |= eep->do_read() << 3; | |
| 5259 | 5249 | } |
| 5260 | 5250 | break; |
| 5261 | 5251 | default: |
| r24548 | r24549 | |
| 5313 | 5303 | |
| 5314 | 5304 | if(data & 0x04) |
| 5315 | 5305 | { |
| 5316 | serial_ | |
| 5306 | eeprom_serial_93cxx_device* eep = subdevice<eeprom_serial_93cxx_device>("ati_eeprom"); | |
| 5317 | 5307 | if(eep != NULL) |
| 5318 | 5308 | { |
| 5319 | eep->write_bit((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 5320 | eep->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 5321 | eep->set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE); | |
| 5309 | eep->di_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 5310 | eep->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 5311 | eep->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); | |
| 5322 | 5312 | } |
| 5323 | 5313 | } |
| 5324 | 5314 | else |
| r24548 | r24549 | |
|---|---|---|
| 819 | 819 | return_data = state->ioport("DSW1")->read(); |
| 820 | 820 | |
| 821 | 821 | if (offset == 0x77)//PDR2 read |
| 822 | return_data = (0xfe | state->m_eeprom->read | |
| 822 | return_data = (0xfe | state->m_eeprom->do_read()); | |
| 823 | 823 | |
| 824 | 824 | return return_data; |
| 825 | 825 | } |
| r24548 | r24549 | |
| 881 | 881 | ---- -x-- EEPROM CS line |
| 882 | 882 | ---- --xx A-Bus bank bits |
| 883 | 883 | */ |
| 884 | state->m_eeprom->set_clock_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); | |
| 885 | state->m_eeprom->write_bit(data & 0x10); | |
| 886 | state->m_eeprom->set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE); | |
| 884 | state->m_eeprom->clk_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); | |
| 885 | state->m_eeprom->di_write((data >> 4) & 1); | |
| 886 | state->m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE); | |
| 887 | 887 | state->m_stv_multi_bank = data & 3; |
| 888 | 888 | |
| 889 | 889 | stv_select_game(space.machine(), state->m_stv_multi_bank); |
| r24548 | r24549 | |
|---|---|---|
| 35 | 35 | IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 36 | 36 | POSSIBILITY OF SUCH DAMAGE. |
| 37 | 37 | |
| 38 | **************************************************************************** | |
| 39 | ||
| 40 | Serial EEPROMs generally work the same across manufacturers and models, | |
| 41 | varying largely by the size of the EEPROM and the packaging details. | |
| 42 | ||
| 43 | At a basic level, there are 5 signals involved: | |
| 44 | ||
| 45 | * CS = chip select | |
| 46 | * CLK = serial data clock | |
| 47 | * DI = serial data in | |
| 48 | * DO = serial data out | |
| 49 | * RDY/BUSY = ready (1) or busy (0) status | |
| 50 | ||
| 51 | Data is read or written via serial commands. A command is begun on a | |
| 52 | low-to-high transition of the CS line, following by clocking a start | |
| 53 | bit (1) on the DI line. After the start bit, subsequent clocks | |
| 54 | assemble one of the following commands: | |
| 55 | ||
| 56 | Start Opcode Address Data | |
| 57 | 1 01 aaaaaaaaa ddddddd WRITE data | |
| 58 | 1 10 aaaaaaaaa READ data | |
| 59 | 1 11 aaaaaaaaa ERASE data | |
| 60 | 1 00 00xxxxxxx WREN = WRite ENable | |
| 61 | 1 00 01xxxxxxx ddddddd WRAL = WRite ALl cells | |
| 62 | 1 00 10xxxxxxx ERAL = ERase ALl cells | |
| 63 | 1 00 11xxxxxxx WRDS = WRite DiSable | |
| 64 | ||
| 65 | The number of address bits (a) clocked varies based on the size of the | |
| 66 | chip, though it does not always map 1:1 with the size of the chip. | |
| 67 | For example, the 93C06 has 16 cells, which only needs 4 address bits; | |
| 68 | but commands to the 93C06 require 6 address bits (the top two must | |
| 69 | be 0). | |
| 70 | ||
| 71 | The number of data bits (d) clocked varies based on the chip and at | |
| 72 | times on the state of a pin on the chip which selects between multiple | |
| 73 | sizes (e.g., 8-bit versus 16-bit). | |
| 74 | ||
| 75 | **************************************************************************** | |
| 76 | ||
| 77 | Most EEPROMs are based on the 93Cxx design (and have similar part | |
| 78 | designations): | |
| 79 | ||
| 80 | +--v--+ | |
| 81 | CS |1 8| Vcc | |
| 82 | CLK |2 7| NC | |
| 83 | DI |3 6| NC | |
| 84 | DO |4 5| GND | |
| 85 | +-----+ | |
| 86 | ||
| 87 | Note the lack of a READY/BUSY pin. On the 93Cxx series, the DO pin | |
| 88 | serves double-duty, returning READY/BUSY during a write/erase cycle, | |
| 89 | and outputting data during a read cycle. | |
| 90 | ||
| 91 | Some manufacturers have released "enhanced" versions with additional | |
| 92 | features: | |
| 93 | ||
| 94 | * Several manufacturers (ST) map pin 6 to "ORG", specifying the | |
| 95 | logical organization of the data. Connecting ORG to ground | |
| 96 | makes the EEPROM work as an 8-bit device, while connecting it | |
| 97 | to Vcc makes it work as a 16-bit device with one less | |
| 98 | address bit. | |
| 99 | ||
| 100 | * Other manufacturers (ST) have enhanced the read operations to | |
| 101 | allow serially streaming more than one cell. Essentially, after | |
| 102 | reading the first cell, keep CS high and keep clocking, and | |
| 103 | data from following cells will be read as well. | |
| 104 | ||
| 105 | The ER5911 is only slightly different: | |
| 106 | ||
| 107 | +--v--+ | |
| 108 | CS |1 8| Vcc | |
| 109 | CLK |2 7| RDY/BUSY | |
| 110 | DI |3 6| ORG | |
| 111 | DO |4 5| GND | |
| 112 | +-----+ | |
| 113 | ||
| 114 | Here we have an explicit RDY/BUSY signal, and the ORG flag as described | |
| 115 | above. | |
| 116 | ||
| 117 | From a command perspective, the ER5911 is also slightly different: | |
| 118 | ||
| 119 | 93Cxx has ERASE command; this maps to WRITE on ER5911 | |
| 120 | 93Cxx has WRITEALL command; no equivalent on ER5911 | |
| 121 | ||
| 38 | 122 | ***************************************************************************/ |
| 39 | 123 | |
| 40 | 124 | #include "emu.h" |
| r24548 | r24549 | |
| 46 | 130 | // DEBUGGING |
| 47 | 131 | //************************************************************************** |
| 48 | 132 | |
| 49 | #define VERBOSE 0 | |
| 50 | #define LOG(x) do { if (VERBOSE) logerror x; } while (0) | |
| 133 | // logging levels: | |
| 134 | // 0 = errors and warnings only | |
| 135 | // 1 = commands | |
| 136 | // 2 = state machine | |
| 137 | // 3 = DI/DO/READY reads & writes | |
| 138 | // 4 = all reads & writes | |
| 51 | 139 | |
| 140 | #define VERBOSE_PRINTF 0 | |
| 141 | #define VERBOSE_LOGERROR 0 | |
| 142 | #define LOG_TYPE printf | |
| 52 | 143 | |
| 144 | #define LOG0(x) do { if (VERBOSE_PRINTF >= 1) printf x; logerror x; } while (0) | |
| 145 | #define LOG1(x) do { if (VERBOSE_PRINTF >= 1) printf x; if (VERBOSE_LOGERROR >= 1) logerror x; } while (0) | |
| 146 | #define LOG2(x) do { if (VERBOSE_PRINTF >= 2) printf x; if (VERBOSE_LOGERROR >= 2) logerror x; } while (0) | |
| 147 | #define LOG3(x) do { if (VERBOSE_PRINTF >= 3) printf x; if (VERBOSE_LOGERROR >= 3) logerror x; } while (0) | |
| 148 | #define LOG4(x) do { if (VERBOSE_PRINTF >= 4) printf x; if (VERBOSE_LOGERROR >= 4) logerror x; } while (0) | |
| 53 | 149 | |
| 150 | ||
| 151 | ||
| 54 | 152 | //************************************************************************** |
| 55 | // | |
| 153 | // TYPE DEFINITIONS | |
| 56 | 154 | //************************************************************************** |
| 57 | 155 | |
| 58 | // device type definition | |
| 59 | const device_type SERIAL_EEPROM = &device_creator<serial_eeprom_device>; | |
| 156 | ALLOW_SAVE_TYPE(eeprom_serial_base_device::eeprom_command); | |
| 157 | ALLOW_SAVE_TYPE(eeprom_serial_base_device::eeprom_state); | |
| 60 | 158 | |
| 61 | const serial_eeprom_interface eeprom_interface_93C46_93C66B = | |
| 62 | { | |
| 63 | "*110", // read 1 10 aaaaaa | |
| 64 | "*101", // write 1 01 aaaaaa dddddddddddddddd | |
| 65 | "*111", // erase 1 11 aaaaaa | |
| 66 | "*10000xxxx", // lock 1 00 00xxxx | |
| 67 | "*10011xxxx", // unlock 1 00 11xxxx | |
| 68 | 1, // enable_multi_read | |
| 69 | 0 // reset_delay | |
| 70 | // "*10001xxxx" // write all 1 00 01xxxx dddddddddddddddd | |
| 71 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 72 | }; | |
| 73 | 159 | |
| 74 | 160 | |
| 75 | ||
| 76 | 161 | //************************************************************************** |
| 77 | // | |
| 162 | // BASE DEVICE IMPLEMENTATION | |
| 78 | 163 | //************************************************************************** |
| 79 | 164 | |
| 80 | 165 | //------------------------------------------------- |
| 81 | // serial_e | |
| 166 | // eeprom_serial_base_device - constructor | |
| 82 | 167 | //------------------------------------------------- |
| 83 | 168 | |
| 84 | serial_eeprom_device::serial_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
| 85 | : base_eeprom_device(mconfig, SERIAL_EEPROM, "Serial EEPROM", tag, owner, "seeprom", __FILE__), | |
| 86 | m_serial_count(0), | |
| 87 | m_data_buffer(0), | |
| 88 | m_read_address(0), | |
| 89 | m_clock_count(0), | |
| 90 | m_latch(0), | |
| 91 | m_reset_line(CLEAR_LINE), | |
| 92 | m_clock_line(CLEAR_LINE), | |
| 93 | m_sending(false), | |
| 94 | m_locked(false), | |
| 95 | m_reset_counter(0) | |
| 169 | eeprom_serial_base_device::eeprom_serial_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) | |
| 170 | : eeprom_base_device(mconfig, devtype, name, tag, owner, shortname, file), | |
| 171 | m_command_address_bits(0), | |
| 172 | m_streaming_enabled(false), | |
| 173 | m_state(STATE_IN_RESET), | |
| 174 | m_cs_state(CLEAR_LINE), | |
| 175 | m_last_cs_rising_edge_time(attotime::zero), | |
| 176 | m_oe_state(CLEAR_LINE), | |
| 177 | m_clk_state(CLEAR_LINE), | |
| 178 | m_di_state(CLEAR_LINE), | |
| 179 | m_locked(true), | |
| 180 | m_bits_accum(0), | |
| 181 | m_command_address_accum(0), | |
| 182 | m_command(COMMAND_INVALID), | |
| 183 | m_address(0), | |
| 184 | m_shift_register(0) | |
| 96 | 185 | { |
| 97 | memset(downcast<serial_eeprom_interface *>(this), 0, sizeof(serial_eeprom_interface)); | |
| 98 | 186 | } |
| 99 | 187 | |
| 100 | 188 | |
| 101 | 189 | //------------------------------------------------- |
| 102 | // static_set_interface - configuration helper | |
| 103 | // to set the interface | |
| 190 | // static_set_address_bits - configuration helper | |
| 191 | // to set the number of address bits in the | |
| 192 | // serial commands | |
| 104 | 193 | //------------------------------------------------- |
| 105 | 194 | |
| 106 | void serial_e | |
| 195 | void eeprom_serial_base_device::static_set_address_bits(device_t &device, int addrbits) | |
| 107 | 196 | { |
| 108 | serial_eeprom_device &eeprom = downcast<serial_eeprom_device &>(device); | |
| 109 | static_cast<serial_eeprom_interface &>(eeprom) = interface; | |
| 197 | downcast<eeprom_serial_base_device &>(device).m_command_address_bits = addrbits; | |
| 110 | 198 | } |
| 111 | 199 | |
| 112 | 200 | |
| 113 | 201 | //------------------------------------------------- |
| 202 | // static_enable_streaming - configuration helper | |
| 203 | // to enable streaming data | |
| 204 | //------------------------------------------------- | |
| 205 | ||
| 206 | void eeprom_serial_base_device::static_enable_streaming(device_t &device) | |
| 207 | { | |
| 208 | downcast<eeprom_serial_base_device &>(device).m_streaming_enabled = true; | |
| 209 | } | |
| 210 | ||
| 211 | ||
| 212 | //------------------------------------------------- | |
| 114 | 213 | // device_start - device-specific startup |
| 115 | 214 | //------------------------------------------------- |
| 116 | 215 | |
| 117 | void serial_e | |
| 216 | void eeprom_serial_base_device::device_start() | |
| 118 | 217 | { |
| 119 | base_eeprom_device::device_start(); | |
| 218 | // if no command address bits set, just inherit from the address bits | |
| 219 | if (m_command_address_bits == 0) | |
| 220 | m_command_address_bits = m_address_bits; | |
| 120 | 221 | |
| 121 | m_locked = (m_cmd_unlock != NULL); | |
| 122 | ||
| 123 | save_item(NAME(m_serial_buffer)); | |
| 124 | save_item(NAME(m_clock_line)); | |
| 125 | save_item(NAME(m_reset_line)); | |
| 222 | // start the base class | |
| 223 | eeprom_base_device::device_start(); | |
| 224 | ||
| 225 | // save the current state | |
| 226 | save_item(NAME(m_state)); | |
| 227 | save_item(NAME(m_cs_state)); | |
| 228 | save_item(NAME(m_oe_state)); | |
| 229 | save_item(NAME(m_clk_state)); | |
| 230 | save_item(NAME(m_di_state)); | |
| 126 | 231 | save_item(NAME(m_locked)); |
| 127 | save_item(NAME(m_serial_count)); | |
| 128 | save_item(NAME(m_latch)); | |
| 129 | save_item(NAME(m_reset_counter)); | |
| 130 | save_item(NAME(m_clock_count)); | |
| 131 | save_item(NAME(m_data_buffer)); | |
| 132 | save_item(NAME(m_read_address)); | |
| 232 | save_item(NAME(m_bits_accum)); | |
| 233 | save_item(NAME(m_command_address_accum)); | |
| 234 | save_item(NAME(m_command)); | |
| 235 | save_item(NAME(m_address)); | |
| 236 | save_item(NAME(m_shift_register)); | |
| 133 | 237 | } |
| 134 | 238 | |
| 135 | 239 | |
| r24548 | r24549 | |
| 137 | 241 | // device_reset - device-specific reset |
| 138 | 242 | //------------------------------------------------- |
| 139 | 243 | |
| 140 | void serial_e | |
| 244 | void eeprom_serial_base_device::device_reset() | |
| 141 | 245 | { |
| 142 | base_eeprom_device::device_reset(); | |
| 246 | // reset the base class | |
| 247 | eeprom_base_device::device_reset(); | |
| 143 | 248 | |
| 144 | // make a note if someone reset in the middle of a read or write | |
| 145 | if (m_serial_count) | |
| 146 | logerror("EEPROM %s reset, buffer = %s\n", tag(), m_serial_buffer); | |
| 147 | ||
| 148 | 249 | // reset the state |
| 149 | m_serial_count = 0; | |
| 150 | m_sending = false; | |
| 151 | m_reset_counter = m_reset_delay; // delay a little before returning setting data to 1 (needed by wbeachvl) | |
| 250 | set_state(STATE_IN_RESET); | |
| 251 | m_locked = true; | |
| 252 | m_bits_accum = 0; | |
| 253 | m_command_address_accum = 0; | |
| 254 | m_command = COMMAND_INVALID; | |
| 255 | m_address = 0; | |
| 256 | m_shift_register = 0; | |
| 152 | 257 | } |
| 153 | 258 | |
| 154 | 259 | |
| r24548 | r24549 | |
| 158 | 263 | //************************************************************************** |
| 159 | 264 | |
| 160 | 265 | //------------------------------------------------- |
| 161 | // write_bit - latch a bit to write | |
| 266 | // base_cs_write - set the state of the chip | |
| 267 | // select (CS) line | |
| 162 | 268 | //------------------------------------------------- |
| 163 | 269 | |
| 164 | ||
| 270 | void eeprom_serial_base_device::base_cs_write(int state) | |
| 165 | 271 | { |
| 166 | LOG(("write bit %d\n",state)); | |
| 167 | m_latch = state; | |
| 272 | // ignore if the state is not changing | |
| 273 | state &= 1; | |
| 274 | if (state == m_cs_state) | |
| 275 | return; | |
| 276 | ||
| 277 | // set the new state | |
| 278 | LOG4((" cs_write(%d)\n", state)); | |
| 279 | m_cs_state = state; | |
| 280 | ||
| 281 | // remember the rising edge time so we don't process CLK signals at the same time | |
| 282 | if (state == ASSERT_LINE) | |
| 283 | m_last_cs_rising_edge_time = machine().time(); | |
| 284 | handle_event((m_cs_state == ASSERT_LINE) ? EVENT_CS_RISING_EDGE : EVENT_CS_FALLING_EDGE); | |
| 168 | 285 | } |
| 169 | 286 | |
| 170 | 287 | |
| 171 | 288 | //------------------------------------------------- |
| 172 | // read_bit - read a bit from the eeprom | |
| 289 | // base_clk_write - set the state of the clock | |
| 290 | // (CLK) line | |
| 173 | 291 | //------------------------------------------------- |
| 174 | 292 | |
| 175 | ||
| 293 | void eeprom_serial_base_device::base_clk_write(int state) | |
| 176 | 294 | { |
| 177 | int res; | |
| 295 | // ignore if the state is not changing | |
| 296 | state &= 1; | |
| 297 | if (state == m_clk_state) | |
| 298 | return; | |
| 178 | 299 | |
| 179 | // if sending, pull the next bit off | |
| 180 | if (m_sending) | |
| 181 | res = (m_data_buffer >> m_data_bits) & 1; | |
| 182 | ||
| 183 | // otherwise check for the proper number of bits needed for a reset | |
| 184 | else | |
| 185 | { | |
| 186 | // this is needed by wbeachvl | |
| 187 | if (m_reset_counter > 0) | |
| 188 | { | |
| 189 | m_reset_counter--; | |
| 190 | res = 0; | |
| 191 | } | |
| 192 | else | |
| 193 | res = 1; | |
| 194 | } | |
| 300 | // set the new state | |
| 301 | LOG4((" clk_write(%d)\n", state)); | |
| 302 | m_clk_state = state; | |
| 303 | handle_event((m_clk_state == ASSERT_LINE) ? EVENT_CLK_RISING_EDGE : EVENT_CLK_FALLING_EDGE); | |
| 304 | } | |
| 195 | 305 | |
| 196 | LOG(("read bit %d\n",res)); | |
| 197 | 306 | |
| 198 | return res; | |
| 307 | //------------------------------------------------- | |
| 308 | // base_di_write - set the state of the data input | |
| 309 | // (DI) line | |
| 310 | //------------------------------------------------- | |
| 311 | ||
| 312 | void eeprom_serial_base_device::base_di_write(int state) | |
| 313 | { | |
| 314 | if (state != 0 && state != 1) | |
| 315 | LOG0(("EEPROM: Unexpected data at input 0x%X treated as %d\n", state, state & 1)); | |
| 316 | LOG3((" di_write(%d)\n", state)); | |
| 317 | m_di_state = state & 1; | |
| 199 | 318 | } |
| 200 | 319 | |
| 201 | 320 | |
| 202 | 321 | //------------------------------------------------- |
| 203 | // set_cs_line - set the state of the chip | |
| 204 | // select (/CS) line | |
| 322 | // base_do_read - read the state of the data | |
| 323 | // output (DO) line | |
| 205 | 324 | //------------------------------------------------- |
| 206 | 325 | |
| 207 | ||
| 326 | int eeprom_serial_base_device::base_do_read() | |
| 208 | 327 | { |
| 209 | // ignore if the state is not changing | |
| 210 | if (state == m_reset_line) | |
| 211 | return; | |
| 212 | ||
| 213 | LOG(("set reset line %d\n",state)); | |
| 328 | // in most states, the output is tristated, and generally connected to a pull up | |
| 329 | // to send back a 1 value; the only exception is if reading data and the current output | |
| 330 | // bit is a 0 | |
| 331 | int result = (m_state == STATE_READING_DATA && ((m_shift_register & 0x80000000) == 0)) ? CLEAR_LINE : ASSERT_LINE; | |
| 332 | LOG3((" do_read(%d)\n", result)); | |
| 333 | return result; | |
| 334 | } | |
| 214 | 335 | |
| 215 | // if we're going active, reset things | |
| 216 | m_reset_line = state; | |
| 217 | if (m_reset_line != CLEAR_LINE) | |
| 218 | reset(); | |
| 336 | ||
| 337 | //------------------------------------------------- | |
| 338 | // base_ready_read - read the state of the | |
| 339 | // READY/BUSY line | |
| 340 | //------------------------------------------------- | |
| 341 | ||
| 342 | int eeprom_serial_base_device::base_ready_read() | |
| 343 | { | |
| 344 | // ready by default, except during long operations | |
| 345 | int result = (m_state == STATE_WAIT_FOR_START_BIT && !ready()) ? CLEAR_LINE : ASSERT_LINE; | |
| 346 | LOG3((" ready_read(%d)\n", result)); | |
| 347 | return result; | |
| 219 | 348 | } |
| 220 | 349 | |
| 221 | 350 | |
| 351 | ||
| 352 | //************************************************************************** | |
| 353 | // INTERNAL HELPERS | |
| 354 | //************************************************************************** | |
| 355 | ||
| 222 | 356 | //------------------------------------------------- |
| 223 | // set_clock_line - set the state of the clock | |
| 224 | // (CLK) line | |
| 357 | // set_state - update the state to a new one | |
| 225 | 358 | //------------------------------------------------- |
| 226 | 359 | |
| 227 | ||
| 360 | void eeprom_serial_base_device::set_state(eeprom_state newstate) | |
| 228 | 361 | { |
| 229 | LOG(("set clock line %d\n",state)); | |
| 230 | ||
| 231 | // on a pulse or a rising edge, process | |
| 232 | if (state == PULSE_LINE || (m_clock_line == CLEAR_LINE && state != CLEAR_LINE)) | |
| 362 | #if (VERBOSE_PRINTF > 0 || VERBOSE_LOGERROR > 0) | |
| 363 | // for debugging purposes | |
| 364 | static const struct { eeprom_state state; const char *string; } s_state_names[] = | |
| 233 | 365 | { |
| 234 | // only proceed if we're not held in reset | |
| 235 | if (m_reset_line == CLEAR_LINE) | |
| 236 | { | |
| 237 | // if sending, clock the next bit | |
| 238 | if (m_sending) | |
| 366 | { STATE_IN_RESET, "IN_RESET" }, | |
| 367 | { STATE_WAIT_FOR_START_BIT, "WAIT_FOR_START_BIT" }, | |
| 368 | { STATE_WAIT_FOR_COMMAND, "WAIT_FOR_COMMAND" }, | |
| 369 | { STATE_READING_DATA, "READING_DATA" }, | |
| 370 | { STATE_WAIT_FOR_DATA, "WAIT_FOR_DATA" }, | |
| 371 | { STATE_WAIT_FOR_COMPLETION, "WAIT_FOR_COMPLETION" }, | |
| 372 | }; | |
| 373 | const char *newstate_string = "UNKNOWN"; | |
| 374 | for (int index = 0; index < ARRAY_LENGTH(s_state_names); index++) | |
| 375 | if (s_state_names[index].state == newstate) | |
| 376 | newstate_string = s_state_names[index].string; | |
| 377 | LOG2(("New state: %s\n", newstate_string)); | |
| 378 | #endif | |
| 379 | ||
| 380 | // switch to the new state | |
| 381 | m_state = newstate; | |
| 382 | } | |
| 383 | ||
| 384 | ||
| 385 | //------------------------------------------------- | |
| 386 | // handle_event - handle an event via the state | |
| 387 | // machine | |
| 388 | //------------------------------------------------- | |
| 389 | ||
| 390 | void eeprom_serial_base_device::handle_event(eeprom_event event) | |
| 391 | { | |
| 392 | #if (VERBOSE_PRINTF > 0 || VERBOSE_LOGERROR > 0) | |
| 393 | // for debugging purposes | |
| 394 | if ((event & EVENT_CS_RISING_EDGE) != 0) LOG2(("Event: CS rising\n")); | |
| 395 | if ((event & EVENT_CS_FALLING_EDGE) != 0) LOG2(("Event: CS falling\n")); | |
| 396 | if ((event & EVENT_CLK_RISING_EDGE) != 0) | |
| 397 | { | |
| 398 | if (m_state == STATE_WAIT_FOR_COMMAND || m_state == STATE_WAIT_FOR_DATA) | |
| 399 | LOG2(("Event: CLK rising (%d, DI=%d)\n", m_bits_accum + 1, m_di_state)); | |
| 400 | else if (m_state == STATE_READING_DATA) | |
| 401 | LOG2(("Event: CLK rising (%d, DO=%d)\n", m_bits_accum + 1, (m_shift_register >> 30) & 1)); | |
| 402 | else if (m_state == STATE_WAIT_FOR_START_BIT) | |
| 403 | LOG2(("Event: CLK rising (%d)\n", m_di_state)); | |
| 404 | else | |
| 405 | LOG2(("Event: CLK rising\n")); | |
| 406 | } | |
| 407 | if ((event & EVENT_CLK_FALLING_EDGE) != 0) LOG4(("Event: CLK falling\n")); | |
| 408 | #endif | |
| 409 | ||
| 410 | // switch off the current state | |
| 411 | switch (m_state) | |
| 412 | { | |
| 413 | // CS is not asserted; wait for a rising CS to move us forward, ignoring all clocks | |
| 414 | case STATE_IN_RESET: | |
| 415 | if (event == EVENT_CS_RISING_EDGE) | |
| 416 | set_state(STATE_WAIT_FOR_START_BIT); | |
| 417 | break; | |
| 418 | ||
| 419 | // CS is asserted; wait for rising clock with a 1 start bit; falling CS will reset us | |
| 420 | // note that because each bit is written independently, it is possible for us to receive | |
| 421 | // a false rising CLK edge at the exact same time as a rising CS edge; it appears we | |
| 422 | // should ignore these edges (makes sense really) | |
| 423 | case STATE_WAIT_FOR_START_BIT: | |
| 424 | if (event == EVENT_CLK_RISING_EDGE && m_di_state == ASSERT_LINE && ready() && machine().time() > m_last_cs_rising_edge_time) | |
| 239 | 425 | { |
| 240 | // auto-advance to then next word if supported | |
| 241 | if (m_clock_count == m_data_bits && m_enable_multi_read) | |
| 242 | { | |
| 243 | fill_data_buffer(m_read_address + 1); | |
| 244 | logerror("EEPROM %s read %04x from address %02x\n", tag(), m_data_buffer, m_read_address); | |
| 245 | } | |
| 426 | m_command_address_accum = m_bits_accum = 0; | |
| 427 | set_state(STATE_WAIT_FOR_COMMAND); | |
| 428 | } | |
| 429 | else if (event == EVENT_CS_FALLING_EDGE) | |
| 430 | set_state(STATE_IN_RESET); | |
| 431 | break; | |
| 432 | ||
| 433 | // CS is asserted; wait for a command to come through; falling CS will reset us | |
| 434 | case STATE_WAIT_FOR_COMMAND: | |
| 435 | if (event == EVENT_CLK_RISING_EDGE) | |
| 436 | { | |
| 437 | // if we have enough bits for a command + address, check it out | |
| 438 | m_command_address_accum = (m_command_address_accum << 1) | m_di_state; | |
| 439 | if (++m_bits_accum == 2 + m_command_address_bits) | |
| 440 | execute_command(); | |
| 441 | } | |
| 442 | else if (event == EVENT_CS_FALLING_EDGE) | |
| 443 | set_state(STATE_IN_RESET); | |
| 444 | break; | |
| 445 | ||
| 446 | // CS is asserted; reading data, clock the shift register; falling CS will reset us | |
| 447 | case STATE_READING_DATA: | |
| 448 | if (event == EVENT_CLK_RISING_EDGE) | |
| 449 | { | |
| 450 | int bit_index = m_bits_accum++; | |
| 246 | 451 | |
| 247 | // shift the data buffer | |
| 248 | m_data_buffer = (m_data_buffer << 1) | 1; | |
| 249 | m_clock_count++; | |
| 452 | // wrapping the address on multi-read is required by pacslot(cave.c) | |
| 453 | if (bit_index % m_data_bits == 0 && (bit_index == 0 || m_streaming_enabled)) | |
| 454 | m_shift_register = read((m_address + m_bits_accum / m_data_bits) & ((1 << m_address_bits) - 1)) << (32 - m_data_bits); | |
| 455 | else | |
| 456 | m_shift_register = (m_shift_register << 1) | 1; | |
| 250 | 457 | } |
| 458 | else if (event == EVENT_CS_FALLING_EDGE) | |
| 459 | { | |
| 460 | set_state(STATE_IN_RESET); | |
| 461 | if (m_streaming_enabled) | |
| 462 | LOG1((" (%d cells read)\n", m_bits_accum / m_data_bits)); | |
| 463 | if (!m_streaming_enabled && m_bits_accum > m_data_bits + 1) | |
| 464 | LOG0(("EEPROM: Overclocked read by %d bits\n", m_bits_accum - m_data_bits)); | |
| 465 | else if (m_streaming_enabled && m_bits_accum > m_data_bits + 1 && m_bits_accum % m_data_bits > 2) | |
| 466 | LOG0(("EEPROM: Overclocked read by %d bits\n", m_bits_accum % m_data_bits)); | |
| 467 | else if (m_bits_accum < m_data_bits) | |
| 468 | LOG0(("EEPROM: CS deasserted in READING_DATA after %d bits\n", m_bits_accum)); | |
| 469 | } | |
| 470 | break; | |
| 471 | ||
| 472 | // CS is asserted; waiting for data; clock data through until we accumulate enough; falling CS will reset us | |
| 473 | case STATE_WAIT_FOR_DATA: | |
| 474 | if (event == EVENT_CLK_RISING_EDGE) | |
| 475 | { | |
| 476 | m_shift_register = (m_shift_register << 1) | m_di_state; | |
| 477 | if (++m_bits_accum == m_data_bits) | |
| 478 | execute_write_command(); | |
| 479 | } | |
| 480 | else if (event == EVENT_CS_FALLING_EDGE) | |
| 481 | { | |
| 482 | set_state(STATE_IN_RESET); | |
| 483 | LOG0(("EEPROM: CS deasserted in STATE_WAIT_FOR_DATA after %d bits\n", m_bits_accum)); | |
| 484 | } | |
| 485 | break; | |
| 486 | ||
| 487 | // CS is asserted; waiting for completion; watch for CS falling | |
| 488 | case STATE_WAIT_FOR_COMPLETION: | |
| 489 | if (event == EVENT_CS_FALLING_EDGE) | |
| 490 | set_state(STATE_IN_RESET); | |
| 491 | break; | |
| 492 | } | |
| 493 | } | |
| 494 | ||
| 495 | ||
| 496 | //------------------------------------------------- | |
| 497 | // execute_command - execute a command once we | |
| 498 | // have enough bits for one | |
| 499 | //------------------------------------------------- | |
| 500 | ||
| 501 | void eeprom_serial_base_device::execute_command() | |
| 502 | { | |
| 503 | // parse into a generic command and reset the accumulator count | |
| 504 | parse_command_and_address(); | |
| 505 | m_bits_accum = 0; | |
| 506 | ||
| 507 | #if (VERBOSE_PRINTF > 0 || VERBOSE_LOGERROR > 0) | |
| 508 | // for debugging purposes | |
| 509 | static const struct { eeprom_command command; const char *string; } s_command_names[] = | |
| 510 | { | |
| 511 | { COMMAND_INVALID, "Execute command: INVALID\n" }, | |
| 512 | { COMMAND_READ, "Execute command:READ 0x%X\n" }, | |
| 513 | { COMMAND_WRITE, "Execute command:WRITE 0x%X\n" }, | |
| 514 | { COMMAND_ERASE, "Execute command:ERASE 0x%X\n" }, | |
| 515 | { COMMAND_LOCK, "Execute command:LOCK\n" }, | |
| 516 | { COMMAND_UNLOCK, "Execute command:UNLOCK\n" }, | |
| 517 | { COMMAND_WRITEALL, "Execute command:WRITEALL\n" }, | |
| 518 | { COMMAND_ERASEALL, "Execute command:ERASEALL\n" }, | |
| 519 | }; | |
| 520 | const char *command_string = s_command_names[0].string; | |
| 521 | for (int index = 0; index < ARRAY_LENGTH(s_command_names); index++) | |
| 522 | if (s_command_names[index].command == m_command) | |
| 523 | command_string = s_command_names[index].string; | |
| 524 | LOG1((command_string, m_address)); | |
| 525 | #endif | |
| 526 | ||
| 527 | // each command advances differently | |
| 528 | switch (m_command) | |
| 529 | { | |
| 530 | // advance to the READING_DATA state; data is fetched after first CLK | |
| 531 | case COMMAND_READ: | |
| 532 | set_state(STATE_READING_DATA); | |
| 533 | break; | |
| 251 | 534 | |
| 252 | // if not sending, then write the data that was latched | |
| 253 | else | |
| 254 | write(m_latch); | |
| 255 | } | |
| 535 | // reset the shift register and wait for enough data to be clocked through | |
| 536 | case COMMAND_WRITE: | |
| 537 | case COMMAND_WRITEALL: | |
| 538 | m_shift_register = 0; | |
| 539 | set_state(STATE_WAIT_FOR_DATA); | |
| 540 | break; | |
| 541 | ||
| 542 | // erase the parsed address (unless locked) and wait for it to complete | |
| 543 | case COMMAND_ERASE: | |
| 544 | if (m_locked) | |
| 545 | { | |
| 546 | LOG0(("EEPROM: Attempt to erase while locked\n")); | |
| 547 | set_state(STATE_IN_RESET); | |
| 548 | break; | |
| 549 | } | |
| 550 | erase(m_address); | |
| 551 | set_state(STATE_WAIT_FOR_COMPLETION); | |
| 552 | break; | |
| 553 | ||
| 554 | // lock the chip; return to IN_RESET state | |
| 555 | case COMMAND_LOCK: | |
| 556 | m_locked = true; | |
| 557 | set_state(STATE_IN_RESET); | |
| 558 | break; | |
| 559 | ||
| 560 | // unlock the chip; return to IN_RESET state | |
| 561 | case COMMAND_UNLOCK: | |
| 562 | m_locked = false; | |
| 563 | set_state(STATE_IN_RESET); | |
| 564 | break; | |
| 565 | ||
| 566 | // erase the entire chip (unless locked) and wait for it to complete | |
| 567 | case COMMAND_ERASEALL: | |
| 568 | if (m_locked) | |
| 569 | { | |
| 570 | LOG0(("EEPROM: Attempt to erase all while locked\n")); | |
| 571 | set_state(STATE_IN_RESET); | |
| 572 | break; | |
| 573 | } | |
| 574 | erase_all(); | |
| 575 | set_state(STATE_WAIT_FOR_COMPLETION); | |
| 576 | break; | |
| 577 | ||
| 578 | default: | |
| 579 | throw emu_fatalerror("execute_command called with invalid command %d\n", m_command); | |
| 256 | 580 | } |
| 581 | } | |
| 257 | 582 | |
| 258 | // remember the news state | |
| 259 | m_clock_line = state; | |
| 583 | ||
| 584 | //------------------------------------------------- | |
| 585 | // execute_write_command - execute a write | |
| 586 | // command after receiving the data bits | |
| 587 | //------------------------------------------------- | |
| 588 | ||
| 589 | void eeprom_serial_base_device::execute_write_command() | |
| 590 | { | |
| 591 | #if (VERBOSE_PRINTF > 0 || VERBOSE_LOGERROR > 0) | |
| 592 | // for debugging purposes | |
| 593 | static const struct { eeprom_command command; const char *string; } s_command_names[] = | |
| 594 | { | |
| 595 | { COMMAND_WRITE, "Execute write command: WRITE 0x%X = 0x%X\n" }, | |
| 596 | { COMMAND_WRITEALL, "Execute write command: WRITEALL (%X) = 0x%X\n" }, | |
| 597 | }; | |
| 598 | const char *command_string = "UNKNOWN"; | |
| 599 | for (int index = 0; index < ARRAY_LENGTH(s_command_names); index++) | |
| 600 | if (s_command_names[index].command == m_command) | |
| 601 | command_string = s_command_names[index].string; | |
| 602 | LOG1((command_string, m_address, m_shift_register)); | |
| 603 | #endif | |
| 604 | ||
| 605 | // each command advances differently | |
| 606 | switch (m_command) | |
| 607 | { | |
| 608 | // reset the shift register and wait for enough data to be clocked through | |
| 609 | case COMMAND_WRITE: | |
| 610 | if (m_locked) | |
| 611 | { | |
| 612 | LOG0(("EEPROM: Attempt to write to address 0x%X while locked\n", m_address)); | |
| 613 | set_state(STATE_IN_RESET); | |
| 614 | break; | |
| 615 | } | |
| 616 | write(m_address, m_shift_register); | |
| 617 | set_state(STATE_WAIT_FOR_COMPLETION); | |
| 618 | break; | |
| 619 | ||
| 620 | // write the entire EEPROM with the same data; ERASEALL is required before so we | |
| 621 | // AND against the already-present data | |
| 622 | case COMMAND_WRITEALL: | |
| 623 | if (m_locked) | |
| 624 | { | |
| 625 | LOG0(("EEPROM: Attempt to write all while locked\n")); | |
| 626 | set_state(STATE_IN_RESET); | |
| 627 | break; | |
| 628 | } | |
| 629 | write_all(m_shift_register); | |
| 630 | set_state(STATE_WAIT_FOR_COMPLETION); | |
| 631 | break; | |
| 632 | ||
| 633 | default: | |
| 634 | throw emu_fatalerror("execute_write_command called with invalid command %d\n", m_command); | |
| 635 | } | |
| 260 | 636 | } |
| 261 | 637 | |
| 262 | 638 | |
| 263 | 639 | |
| 264 | 640 | //************************************************************************** |
| 265 | // INTER | |
| 641 | // STANDARD INTERFACE IMPLEMENTATION | |
| 266 | 642 | //************************************************************************** |
| 267 | 643 | |
| 268 | 644 | //------------------------------------------------- |
| 269 | // decode_value - convert accumulated bits to | |
| 270 | // a binary value, releative to the end of the | |
| 271 | // accumulation buffer | |
| 645 | // eeprom_serial_93cxx_device - constructor | |
| 272 | 646 | //------------------------------------------------- |
| 273 | 647 | |
| 274 | UINT32 serial_eeprom_device::decode_value(int numbits, int bitsfromend) | |
| 648 | eeprom_serial_93cxx_device::eeprom_serial_93cxx_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) | |
| 649 | : eeprom_serial_base_device(mconfig, devtype, name, tag, owner, shortname, file) | |
| 275 | 650 | { |
| 276 | UINT32 value = 0; | |
| 277 | for (int bitnum = m_serial_count - bitsfromend - numbits; bitnum < m_serial_count - bitsfromend; bitnum++) | |
| 278 | value = (value << 1) | (m_serial_buffer[bitnum] - '0'); | |
| 279 | return value; | |
| 280 | 651 | } |
| 281 | 652 | |
| 282 | 653 | |
| 283 | 654 | //------------------------------------------------- |
| 284 | // fill_data_buffer - fill the data buffer with | |
| 285 | // the appropriately-sized chunk of data | |
| 655 | // parse_command_and_address - extract the | |
| 656 | // command and address from a bitstream | |
| 286 | 657 | //------------------------------------------------- |
| 287 | 658 | |
| 288 | void serial_ | |
| 659 | void eeprom_serial_93cxx_device::parse_command_and_address() | |
| 289 | 660 | { |
| 290 | // make the address to be in range | |
| 291 | address &= (1 << m_address_bits) - 1; | |
| 661 | // set the defaults | |
| 662 | m_command = COMMAND_INVALID; | |
| 663 | m_address = m_command_address_accum & ((1 << m_command_address_bits) - 1); | |
| 292 | 664 | |
| 293 | // fetch the appropriately-sized data | |
| 294 | m_data_buffer = read_data(address); | |
| 665 | // extract the command portion and handle it | |
| 666 | switch (m_command_address_accum >> m_command_address_bits) | |
| 667 | { | |
| 668 | // opcode 0 needs two more bits to decode the operation | |
| 669 | case 0: | |
| 670 | switch (m_address >> (m_command_address_bits - 2)) | |
| 671 | { | |
| 672 | case 0: m_command = COMMAND_LOCK; break; | |
| 673 | case 1: m_command = COMMAND_WRITEALL; break; | |
| 674 | case 2: m_command = COMMAND_ERASEALL; break; | |
| 675 | case 3: m_command = COMMAND_UNLOCK; break; | |
| 676 | } | |
| 677 | m_address = 0; | |
| 678 | break; | |
| 679 | case 1: m_command = COMMAND_WRITE; break; | |
| 680 | case 2: m_command = COMMAND_READ; break; | |
| 681 | case 3: m_command = COMMAND_ERASE; break; | |
| 682 | } | |
| 295 | 683 | |
| 296 | // remember the address and reset the clock count | |
| 297 | m_read_address = address; | |
| 298 | m_clock_count = 0; | |
| 684 | // warn about out-of-range addresses | |
| 685 | if (m_address >= (1 << m_address_bits)) | |
| 686 | LOG0(("EEPROM: out-of-range address 0x%X provided (maximum should be 0x%X)\n", m_address, (1 << m_address_bits) - 1)); | |
| 299 | 687 | } |
| 300 | 688 | |
| 301 | 689 | |
| 302 | 690 | //------------------------------------------------- |
| 303 | // | |
| 691 | // do_read - read handlers | |
| 304 | 692 | //------------------------------------------------- |
| 305 | 693 | |
| 306 | void serial_eeprom_device::write(int bit) | |
| 694 | READ_LINE_MEMBER(eeprom_serial_93cxx_device::do_read) { return base_do_read() & base_ready_read(); } | |
| 695 | ||
| 696 | ||
| 697 | //------------------------------------------------- | |
| 698 | // cs_write/clk_write/di_write - write handlers | |
| 699 | //------------------------------------------------- | |
| 700 | ||
| 701 | WRITE_LINE_MEMBER(eeprom_serial_93cxx_device::cs_write) { base_cs_write(state); } | |
| 702 | WRITE_LINE_MEMBER(eeprom_serial_93cxx_device::clk_write) { base_clk_write(state); } | |
| 703 | WRITE_LINE_MEMBER(eeprom_serial_93cxx_device::di_write) { base_di_write(state); } | |
| 704 | ||
| 705 | ||
| 706 | ||
| 707 | //************************************************************************** | |
| 708 | // ER5911 DEVICE IMPLEMENTATION | |
| 709 | //************************************************************************** | |
| 710 | ||
| 711 | //------------------------------------------------- | |
| 712 | // eeprom_serial_er5911_device - constructor | |
| 713 | //------------------------------------------------- | |
| 714 | ||
| 715 | eeprom_serial_er5911_device::eeprom_serial_er5911_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) | |
| 716 | : eeprom_serial_base_device(mconfig, devtype, name, tag, owner, shortname, file) | |
| 307 | 717 | { |
| 308 | ||
| 718 | } | |
| 309 | 719 | |
| 310 | // if too much data was written without seeing a command, log it and return | |
| 311 | if (m_serial_count >= SERIAL_BUFFER_LENGTH - 1) | |
| 312 | { | |
| 313 | logerror("error: EEPROM %s serial buffer overflow\n", tag()); | |
| 314 | return; | |
| 315 | } | |
| 316 | 720 | |
| 317 | // update the buffer | |
| 318 | m_serial_buffer[m_serial_count++] = (bit ? '1' : '0'); | |
| 319 | m_serial_buffer[m_serial_count] = 0; // nul terminate so we can treat it as a string | |
| 721 | //------------------------------------------------- | |
| 722 | // parse_command_and_address - extract the | |
| 723 | // command and address from a bitstream | |
| 724 | //------------------------------------------------- | |
| 320 | 725 | |
| 321 | // look for a read command | |
| 322 | if (m_cmd_read != NULL && m_serial_count > m_address_bits && command_match(m_cmd_read, m_address_bits)) | |
| 323 | { | |
| 324 | fill_data_buffer(decode_value(m_address_bits)); | |
| 325 | m_sending = true; | |
| 326 | m_serial_count = 0; | |
| 327 | logerror("EEPROM %s read %04x from address %02x\n", tag(), m_data_buffer, m_read_address); | |
| 328 | } | |
| 726 | void eeprom_serial_er5911_device::parse_command_and_address() | |
| 727 | { | |
| 728 | // set the defaults | |
| 729 | m_command = COMMAND_INVALID; | |
| 730 | m_address = m_command_address_accum & ((1 << m_command_address_bits) - 1); | |
| 329 | 731 | |
| 330 | // look for an erase command | |
| 331 | else if (m_cmd_erase != NULL && m_serial_count > m_address_bits && command_match(m_cmd_erase, m_address_bits)) | |
| 732 | // extract the command portion and handle it | |
| 733 | switch (m_command_address_accum >> m_command_address_bits) | |
| 332 | 734 | { |
| 333 | offs_t address = decode_value(m_address_bits); | |
| 334 | logerror("EEPROM %s erase address %02x\n", tag(), address); | |
| 335 | if (m_locked == 0) | |
| 336 | write_data(address, ~0); | |
| 337 | else | |
| 338 | logerror("Error: EEPROM %s is locked\n", tag()); | |
| 339 | m_serial_count = 0; | |
| 735 | // opcode 0 needs two more bits to decode the operation | |
| 736 | case 0: | |
| 737 | switch (m_address >> (m_command_address_bits - 2)) | |
| 738 | { | |
| 739 | case 0: m_command = COMMAND_LOCK; break; | |
| 740 | case 1: m_command = COMMAND_INVALID; break; // not on ER5911 | |
| 741 | case 2: m_command = COMMAND_ERASEALL; break; | |
| 742 | case 3: m_command = COMMAND_UNLOCK; break; | |
| 743 | } | |
| 744 | m_address = 0; | |
| 745 | break; | |
| 746 | case 1: m_command = COMMAND_WRITE; break; | |
| 747 | case 2: m_command = COMMAND_READ; break; | |
| 748 | case 3: m_command = COMMAND_WRITE; break; // WRITE instead of ERASE on ER5911 | |
| 340 | 749 | } |
| 341 | ||
| 342 | // look for a write command | |
| 343 | else if (m_cmd_write != NULL && m_serial_count > m_address_bits + m_data_bits && command_match(m_cmd_write, m_address_bits + m_data_bits)) | |
| 344 | { | |
| 345 | offs_t address = decode_value(m_address_bits, m_data_bits); | |
| 346 | UINT32 data = decode_value(m_data_bits); | |
| 347 | logerror("EEPROM %s write %04x to address %02x\n", tag(), data, address); | |
| 348 | if (m_locked == 0) | |
| 349 | write_data(address, data); | |
| 350 | else | |
| 351 | logerror("Error: EEPROM %s is locked\n", tag()); | |
| 352 | m_serial_count = 0; | |
| 353 | } | |
| 354 | ||
| 355 | // look for a lock command | |
| 356 | else if (m_cmd_lock != NULL && command_match(m_cmd_lock)) | |
| 357 | { | |
| 358 | logerror("EEPROM %s lock\n", tag()); | |
| 359 | m_locked = 1; | |
| 360 | m_serial_count = 0; | |
| 361 | } | |
| 362 | 750 | |
| 363 | // look for an unlock command | |
| 364 | else if (m_cmd_unlock != NULL && command_match(m_cmd_unlock)) | |
| 365 | { | |
| 366 | logerror("EEPROM %s unlock\n", tag()); | |
| 367 | m_locked = 0; | |
| 368 | m_serial_count = 0; | |
| 369 | } | |
| 751 | // warn about out-of-range addresses | |
| 752 | if (m_address >= (1 << m_address_bits)) | |
| 753 | LOG0(("EEPROM: out-of-range address 0x%X provided (maximum should be 0x%X)\n", m_address, (1 << m_address_bits) - 1)); | |
| 370 | 754 | } |
| 371 | 755 | |
| 372 | 756 | |
| 373 | 757 | //------------------------------------------------- |
| 374 | // command_match - try to match incoming data | |
| 375 | // against a command template | |
| 758 | // do_read/ready_read - read handlers | |
| 376 | 759 | //------------------------------------------------- |
| 377 | 760 | |
| 378 | bool serial_eeprom_device::command_match(const char *cmd, int ignorebits) | |
| 379 | { | |
| 380 | // | |
| 381 | // The serial buffer only contains '0' or '1' (e.g. "1001"). | |
| 382 | // The command can contain: '0' or '1' or these wildcards: | |
| 383 | // 'x' : match both '0' and '1' | |
| 384 | // "*1": match "1", "01", "001", "0001" etc. | |
| 385 | // "*0": match "0", "10", "110", "1110" etc. | |
| 386 | // | |
| 761 | READ_LINE_MEMBER(eeprom_serial_er5911_device::do_read) { return base_do_read(); } | |
| 762 | READ_LINE_MEMBER(eeprom_serial_er5911_device::ready_read) { return base_ready_read(); } | |
| 387 | 763 | |
| 388 | int len = m_serial_count - ignorebits; | |
| 389 | const char *buf = m_serial_buffer; | |
| 390 | while (len > 0) | |
| 391 | { | |
| 392 | char bufbit = *buf; | |
| 393 | char cmdbit = *cmd; | |
| 394 | 764 | |
| 395 | // stop when we hit the end of either string | |
| 396 | if (bufbit == 0 || cmdbit == 0) | |
| 397 | return (bufbit == cmdbit); | |
| 765 | //------------------------------------------------- | |
| 766 | // cs_write/clk_write/di_write - write handlers | |
| 767 | //------------------------------------------------- | |
| 398 | 768 | |
| 399 | // parse based on the cmdbit | |
| 400 | switch (cmdbit) | |
| 401 | { | |
| 402 | case '0': | |
| 403 | case '1': | |
| 404 | // these require an exact match | |
| 405 | if (bufbit != cmdbit) | |
| 406 | return false; | |
| 407 | ||
| 408 | // fall through... | |
| 769 | WRITE_LINE_MEMBER(eeprom_serial_er5911_device::cs_write) { base_cs_write(state); } | |
| 770 | WRITE_LINE_MEMBER(eeprom_serial_er5911_device::clk_write) { base_clk_write(state); } | |
| 771 | WRITE_LINE_MEMBER(eeprom_serial_er5911_device::di_write) { base_di_write(state); } | |
| 409 | 772 | |
| 410 | case 'X': | |
| 411 | case 'x': | |
| 412 | // this is 'ignore', so just accept anything | |
| 413 | buf++; | |
| 414 | len--; | |
| 415 | cmd++; | |
| 416 | break; | |
| 417 | 773 | |
| 418 | case '*': | |
| 419 | // for a wildcard, check for the opposit bit | |
| 420 | cmdbit = cmd[1]; | |
| 421 | switch (cmdbit) | |
| 422 | { | |
| 423 | case '0': | |
| 424 | case '1': | |
| 425 | if (bufbit == cmdbit) | |
| 426 | cmd++; | |
| 427 | else | |
| 428 | buf++, len--; | |
| 429 | break; | |
| 430 | ||
| 431 | default: | |
| 432 | return false; | |
| 433 | } | |
| 434 | } | |
| 435 | } | |
| 436 | return (*cmd == 0); | |
| 437 | } | |
| 774 | ||
| 775 | //************************************************************************** | |
| 776 | // DERIVED TYPES | |
| 777 | //************************************************************************** | |
| 778 | ||
| 779 | // macro for defining a new device class | |
| 780 | #define DEFINE_SERIAL_EEPROM_DEVICE(_baseclass, _lowercase, _uppercase, _bits, _cells, _addrbits) \ | |
| 781 | eeprom_serial_##_lowercase##_##_bits##bit_device::eeprom_serial_##_lowercase##_##_bits##bit_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) \ | |
| 782 | : eeprom_serial_##_baseclass##_device(mconfig, EEPROM_SERIAL_##_uppercase##_##_bits##BIT, "Serial EEPROM " #_uppercase " (" #_cells "x" #_bits ")", tag, owner, #_lowercase "_" #_bits, __FILE__) \ | |
| 783 | { \ | |
| 784 | static_set_size(*this, _cells, _bits); \ | |
| 785 | static_set_address_bits(*this, _addrbits); \ | |
| 786 | }; \ | |
| 787 | const device_type EEPROM_SERIAL_##_uppercase##_##_bits##BIT = &device_creator<eeprom_serial_##_lowercase##_##_bits##bit_device>; \ | |
| 788 | ||
| 789 | // standard 93CX6 class of 16-bit EEPROMs | |
| 790 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c06, 93C06, 16, 16, 6) | |
| 791 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c46, 93C46, 16, 64, 6) | |
| 792 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c56, 93C56, 16, 128, 8) | |
| 793 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c57, 93C57, 16, 128, 7) | |
| 794 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c66, 93C66, 16, 256, 8) | |
| 795 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c76, 93C76, 16, 512, 10) | |
| 796 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 16, 1024, 10) | |
| 797 | ||
| 798 | // some manufacturers use pin 6 as an "ORG" pin which, when pulled low, configures memory for 8-bit accesses | |
| 799 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c46, 93C46, 8, 128, 7) | |
| 800 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c56, 93C56, 8, 256, 9) | |
| 801 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c57, 93C57, 8, 256, 8) | |
| 802 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c66, 93C66, 8, 512, 9) | |
| 803 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c76, 93C76, 8, 1024, 11) | |
| 804 | DEFINE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 8, 2048, 11) | |
| 805 | ||
| 806 | // ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box | |
| 807 | DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8, 128, 9) | |
| 808 | DEFINE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16, 64, 8) |
| r24548 | r24549 | |
|---|---|---|
| 49 | 49 | // INTERFACE CONFIGURATION MACROS |
| 50 | 50 | //************************************************************************** |
| 51 | 51 | |
| 52 | #define MCFG_SERIAL_EEPROM_ADD(_tag, _cells, _cellbits, _interface) \ | |
| 53 | MCFG_DEVICE_ADD(_tag, SERIAL_EEPROM, 0) \ | |
| 54 | MCFG_EEPROM_SIZE(_cells, _cellbits) \ | |
| 55 | serial_eeprom_device::static_set_interface(*device, _interface); | |
| 52 | // standard 93CX6 class of 16-bit EEPROMs | |
| 53 | #define MCFG_EEPROM_SERIAL_93C06_ADD(_tag) \ | |
| 54 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C06_16BIT, 0) | |
| 55 | #define MCFG_EEPROM_SERIAL_93C46_ADD(_tag) \ | |
| 56 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C46_16BIT, 0) | |
| 57 | #define MCFG_EEPROM_SERIAL_93C56_ADD(_tag) \ | |
| 58 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C56_16BIT, 0) | |
| 59 | #define MCFG_EEPROM_SERIAL_93C57_ADD(_tag) \ | |
| 60 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C57_16BIT, 0) | |
| 61 | #define MCFG_EEPROM_SERIAL_93C66_ADD(_tag) \ | |
| 62 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C66_16BIT, 0) | |
| 63 | #define MCFG_EEPROM_SERIAL_93C76_ADD(_tag) \ | |
| 64 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C76_16BIT, 0) | |
| 65 | #define MCFG_EEPROM_SERIAL_93C86_ADD(_tag) \ | |
| 66 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C86_16BIT, 0) | |
| 56 | 67 | |
| 57 | #define MCFG_SERIAL_EEPROM_DATA(_data, _size) \ | |
| 58 | serial_eeprom_device::static_set_default_data(*device, _data, _size); | |
| 59 | #define MCFG_SERIAL_EEPROM_DEFAULT_VALUE(_value) \ | |
| 60 | serial_eeprom_device::static_set_default_value(*device, _value); | |
| 68 | // some manufacturers use pin 6 as an "ORG" pin which, when pulled low, configures memory for 8-bit accesses | |
| 69 | #define MCFG_EEPROM_SERIAL_93C46_8BIT_ADD(_tag) \ | |
| 70 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C46_8BIT, 0) | |
| 71 | #define MCFG_EEPROM_SERIAL_93C56_8BIT_ADD(_tag) \ | |
| 72 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C56_8BIT, 0) | |
| 73 | #define MCFG_EEPROM_SERIAL_93C57_8BIT_ADD(_tag) \ | |
| 74 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C57_8BIT, 0) | |
| 75 | #define MCFG_EEPROM_SERIAL_93C66_8BIT_ADD(_tag) \ | |
| 76 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C66_8BIT, 0) | |
| 77 | #define MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(_tag) \ | |
| 78 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C76_8BIT, 0) | |
| 79 | #define MCFG_EEPROM_SERIAL_93C86_8BIT_ADD(_tag) \ | |
| 80 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_93C86_8BIT, 0) | |
| 61 | 81 | |
| 62 | #define MCFG_EEPROM_93C46_ADD(_tag) \ | |
| 63 | MCFG_SERIAL_EEPROM_ADD(_tag, 64, 16, eeprom_interface_93C46_93C66B) | |
| 82 | // ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box | |
| 83 | #define MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD(_tag) \ | |
| 84 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_ER5911_8BIT, 0) | |
| 85 | #define MCFG_EEPROM_SERIAL_ER5911_16BIT_ADD(_tag) \ | |
| 86 | MCFG_DEVICE_ADD(_tag, EEPROM_SERIAL_ER5911_16BIT, 0) | |
| 64 | 87 | |
| 65 | #define MCFG_EEPROM_93C46_8BIT_ADD(_tag) \ | |
| 66 | MCFG_SERIAL_EEPROM_ADD(_tag, 128, 8, eeprom_interface_93C46_93C66B) | |
| 88 | // optional enable for streaming reads | |
| 89 | #define MCFG_EEPROM_SERIAL_ENABLE_STREAMING() \ | |
| 90 | eeprom_serial_base_device::static_enable_streaming(*device); \ | |
| 67 | 91 | |
| 68 | #define MCFG_EEPROM_93C66B_ADD(_tag) \ | |
| 69 | MCFG_SERIAL_EEPROM_ADD(_tag, 256, 16, eeprom_interface_93C46_93C66B) | |
| 92 | // pass-throughs to the base class for setting default data | |
| 93 | #define MCFG_EEPROM_SERIAL_DATA MCFG_EEPROM_DATA | |
| 94 | #define MCFG_EEPROM_SERIAL_DEFAULT_VALUE MCFG_EEPROM_DEFAULT_VALUE | |
| 70 | 95 | |
| 71 | 96 | |
| 72 | 97 | |
| r24548 | r24549 | |
| 75 | 100 | //************************************************************************** |
| 76 | 101 | |
| 77 | 102 | |
| 78 | // ======================> | |
| 103 | // ======================> eeprom_serial_base_device | |
| 79 | 104 | |
| 80 | ||
| 105 | class eeprom_serial_base_device : public eeprom_base_device | |
| 81 | 106 | { |
| 82 | const char *m_cmd_read; // read command string, e.g. "0110" | |
| 83 | const char *m_cmd_write; // write command string, e.g. "0111" | |
| 84 | const char *m_cmd_erase; // erase command string, or 0 if n/a | |
| 85 | const char *m_cmd_lock; // lock command string, or 0 if n/a | |
| 86 | const char *m_cmd_unlock; // unlock command string, or 0 if n/a | |
| 87 | bool m_enable_multi_read; // set to 1 to enable multiple values to be read from one read command | |
| 88 | int m_reset_delay; // number of times eeprom_read_bit() should return 0 after a reset, | |
| 89 | // before starting to return 1. | |
| 107 | protected: | |
| 108 | // construction/destruction | |
| 109 | eeprom_serial_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file); | |
| 110 | ||
| 111 | public: | |
| 112 | // inline configuration helpers | |
| 113 | static void static_set_address_bits(device_t &device, int addrbits); | |
| 114 | static void static_enable_streaming(device_t &device); | |
| 115 | ||
| 116 | protected: | |
| 117 | // device-level overrides | |
| 118 | virtual void device_start(); | |
| 119 | virtual void device_reset(); | |
| 120 | ||
| 121 | // read interfaces differ between implementations | |
| 122 | ||
| 123 | // commands | |
| 124 | enum eeprom_command | |
| 125 | { | |
| 126 | COMMAND_INVALID, | |
| 127 | COMMAND_READ, | |
| 128 | COMMAND_WRITE, | |
| 129 | COMMAND_ERASE, | |
| 130 | COMMAND_LOCK, | |
| 131 | COMMAND_UNLOCK, | |
| 132 | COMMAND_WRITEALL, | |
| 133 | COMMAND_ERASEALL | |
| 134 | }; | |
| 135 | ||
| 136 | // states | |
| 137 | enum eeprom_state | |
| 138 | { | |
| 139 | STATE_IN_RESET, | |
| 140 | STATE_WAIT_FOR_START_BIT, | |
| 141 | STATE_WAIT_FOR_COMMAND, | |
| 142 | STATE_READING_DATA, | |
| 143 | STATE_WAIT_FOR_DATA, | |
| 144 | STATE_WAIT_FOR_COMPLETION | |
| 145 | }; | |
| 146 | ||
| 147 | // events | |
| 148 | enum eeprom_event | |
| 149 | { | |
| 150 | EVENT_CS_RISING_EDGE = 1 << 0, | |
| 151 | EVENT_CS_FALLING_EDGE = 1 << 1, | |
| 152 | EVENT_CLK_RISING_EDGE = 1 << 2, | |
| 153 | EVENT_CLK_FALLING_EDGE = 1 << 3 | |
| 154 | }; | |
| 155 | ||
| 156 | // internal helpers | |
| 157 | void set_state(eeprom_state newstate); | |
| 158 | void handle_event(eeprom_event event); | |
| 159 | void execute_command(); | |
| 160 | void execute_write_command(); | |
| 161 | ||
| 162 | // subclass helpers | |
| 163 | void base_cs_write(int state); | |
| 164 | void base_clk_write(int state); | |
| 165 | void base_di_write(int state); | |
| 166 | int base_do_read(); | |
| 167 | int base_ready_read(); | |
| 168 | ||
| 169 | // subclass overrides | |
| 170 | virtual void parse_command_and_address() = 0; | |
| 171 | ||
| 172 | // configuration state | |
| 173 | UINT8 m_command_address_bits; // number of address bits in a command | |
| 174 | bool m_streaming_enabled; // true if streaming is enabled | |
| 175 | ||
| 176 | // runtime state | |
| 177 | eeprom_state m_state; // current internal state | |
| 178 | UINT8 m_cs_state; // state of the CS line | |
| 179 | attotime m_last_cs_rising_edge_time; // time of the last CS rising edge | |
| 180 | UINT8 m_oe_state; // state of the OE line | |
| 181 | UINT8 m_clk_state; // state of the CLK line | |
| 182 | UINT8 m_di_state; // state of the DI line | |
| 183 | bool m_locked; // are we locked against writes? | |
| 184 | UINT32 m_bits_accum; // number of bits accumulated | |
| 185 | UINT32 m_command_address_accum; // accumulator of command+address bits | |
| 186 | eeprom_command m_command; // current command | |
| 187 | UINT32 m_address; // current address extracted from command | |
| 188 | UINT32 m_shift_register; // holds data coming in/going out | |
| 90 | 189 | }; |
| 91 | 190 | |
| 92 | 191 | |
| 93 | 192 | |
| 94 | // ======================> serial_ | |
| 193 | // ======================> eeprom_serial_93cxx_device | |
| 95 | 194 | |
| 96 | class serial_eeprom_device : public base_eeprom_device, | |
| 97 | public serial_eeprom_interface | |
| 195 | class eeprom_serial_93cxx_device : public eeprom_serial_base_device | |
| 98 | 196 | { |
| 99 | p | |
| 197 | protected: | |
| 100 | 198 | // construction/destruction |
| 101 | serial_ | |
| 199 | eeprom_serial_93cxx_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file); | |
| 102 | 200 | |
| 103 | // inline configuration helpers | |
| 104 | static void static_set_interface(device_t &device, const serial_eeprom_interface &interface); | |
| 201 | public: | |
| 202 | // read handlers | |
| 203 | DECLARE_READ_LINE_MEMBER(do_read); // combined DO+READY/BUSY | |
| 105 | 204 | |
| 106 | // I/O operations | |
| 107 | DECLARE_WRITE_LINE_MEMBER( write_bit ); | |
| 108 | DECLARE_READ_LINE_MEMBER( read_bit ); | |
| 109 | DECLARE_WRITE_LINE_MEMBER( set_cs_line ); | |
| 110 | DECLARE_WRITE_LINE_MEMBER( set_clock_line ); | |
| 205 | // write handlers | |
| 206 | DECLARE_WRITE_LINE_MEMBER(cs_write); // CS signal (active high) | |
| 207 | DECLARE_WRITE_LINE_MEMBER(clk_write); // CLK signal (active high) | |
| 208 | DECLARE_WRITE_LINE_MEMBER(di_write); // DI | |
| 111 | 209 | |
| 112 | 210 | protected: |
| 113 | // device-level overrides | |
| 114 | virtual void device_start(); | |
| 115 | virtual void device_reset(); | |
| 211 | // subclass overrides | |
| 212 | virtual void parse_command_and_address(); | |
| 213 | }; | |
| 116 | 214 | |
| 117 | // internal helpers | |
| 118 | UINT32 decode_value(int numbits, int bitsfromend = 0); | |
| 119 | void fill_data_buffer(offs_t address); | |
| 120 | void write(int bit); | |
| 121 | bool command_match(const char *cmd, int ignorebits = 0); | |
| 122 | 215 | |
| 123 | ||
| 216 | // ======================> eeprom_serial_er5911_device | |
| 124 | 217 | |
| 125 | // runtime state | |
| 126 | int m_serial_count; | |
| 127 | char m_serial_buffer[SERIAL_BUFFER_LENGTH]; | |
| 128 | int m_data_buffer; | |
| 129 | int m_read_address; | |
| 130 | int m_clock_count; | |
| 131 | int m_latch; | |
| 132 | int m_reset_line; | |
| 133 | int m_clock_line; | |
| 134 | bool m_sending; | |
| 135 | bool m_locked; | |
| 136 | int m_reset_counter; | |
| 137 | }; | |
| 218 | class eeprom_serial_er5911_device : public eeprom_serial_base_device | |
| 219 | { | |
| 220 | protected: | |
| 221 | // construction/destruction | |
| 222 | eeprom_serial_er5911_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file); | |
| 138 | 223 | |
| 224 | public: | |
| 225 | // read handlers | |
| 226 | DECLARE_READ_LINE_MEMBER(do_read); // DO | |
| 227 | DECLARE_READ_LINE_MEMBER(ready_read); // READY/BUSY only | |
| 139 | 228 | |
| 140 | // device type definition | |
| 141 | extern const device_type SERIAL_EEPROM; | |
| 229 | // write handlers | |
| 230 | DECLARE_WRITE_LINE_MEMBER(cs_write); // CS signal (active high) | |
| 231 | DECLARE_WRITE_LINE_MEMBER(clk_write); // CLK signal (active high) | |
| 232 | DECLARE_WRITE_LINE_MEMBER(di_write); // DI | |
| 142 | 233 | |
| 234 | protected: | |
| 235 | // subclass overrides | |
| 236 | virtual void parse_command_and_address(); | |
| 237 | }; | |
| 143 | 238 | |
| 144 | 239 | |
| 240 | ||
| 145 | 241 | //************************************************************************** |
| 146 | // | |
| 242 | // DERIVED TYPES | |
| 147 | 243 | //************************************************************************** |
| 148 | 244 | |
| 149 | extern const serial_eeprom_interface eeprom_interface_93C46_93C66B; | |
| 245 | // macro for declaring a new device class | |
| 246 | #define DECLARE_SERIAL_EEPROM_DEVICE(_baseclass, _lowercase, _uppercase, _bits) \ | |
| 247 | class eeprom_serial_##_lowercase##_##_bits##bit_device : public eeprom_serial_##_baseclass##_device \ | |
| 248 | { \ | |
| 249 | public: \ | |
| 250 | eeprom_serial_##_lowercase##_##_bits##bit_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); \ | |
| 251 | }; \ | |
| 252 | extern const device_type EEPROM_SERIAL_##_uppercase##_##_bits##BIT; \ | |
| 150 | 253 | |
| 254 | // standard 93CX6 class of 16-bit EEPROMs | |
| 255 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c06, 93C06, 16) | |
| 256 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c46, 93C46, 16) | |
| 257 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c56, 93C56, 16) | |
| 258 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c57, 93C57, 16) | |
| 259 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c66, 93C66, 16) | |
| 260 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c76, 93C76, 16) | |
| 261 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 16) | |
| 151 | 262 | |
| 263 | // some manufacturers use pin 6 as an "ORG" pin which, when pulled low, configures memory for 8-bit accesses | |
| 264 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c46, 93C46, 8) | |
| 265 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c56, 93C56, 8) | |
| 266 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c57, 93C57, 8) | |
| 267 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c66, 93C66, 8) | |
| 268 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c76, 93C76, 8) | |
| 269 | DECLARE_SERIAL_EEPROM_DEVICE(93cxx, 93c86, 93C86, 8) | |
| 270 | ||
| 271 | // ER5911 has a separate ready pin, a reduced command set, and supports 8/16 bit out of the box | |
| 272 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 8) | |
| 273 | DECLARE_SERIAL_EEPROM_DEVICE(er5911, er5911, ER5911, 16) | |
| 274 | ||
| 152 | 275 | #endif |
| r24548 | r24549 | |
|---|---|---|
| 55 | 55 | // GLOBAL VARIABLES |
| 56 | 56 | //************************************************************************** |
| 57 | 57 | |
| 58 | static ADDRESS_MAP_START( eeprom_map8, AS_PROGRAM, 8, | |
| 58 | static ADDRESS_MAP_START( eeprom_map8, AS_PROGRAM, 8, eeprom_base_device ) | |
| 59 | 59 | AM_RANGE(0x0000, 0x0fff) AM_RAM |
| 60 | 60 | ADDRESS_MAP_END |
| 61 | 61 | |
| 62 | ||
| 63 | static ADDRESS_MAP_START( eeprom_map16, AS_PROGRAM, 16, base_eeprom_device ) | |
| 62 | static ADDRESS_MAP_START( eeprom_map16, AS_PROGRAM, 16, eeprom_base_device ) | |
| 64 | 63 | AM_RANGE(0x0000, 0x07ff) AM_RAM |
| 65 | 64 | ADDRESS_MAP_END |
| 66 | 65 | |
| r24548 | r24549 | |
| 71 | 70 | //************************************************************************** |
| 72 | 71 | |
| 73 | 72 | //------------------------------------------------- |
| 74 | // | |
| 73 | // eeprom_base_device - constructor | |
| 75 | 74 | //------------------------------------------------- |
| 76 | 75 | |
| 77 | ||
| 76 | eeprom_base_device::eeprom_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) | |
| 78 | 77 | : device_t(mconfig, devtype, name, tag, owner, 0, shortname, file), |
| 79 | 78 | device_memory_interface(mconfig, *this), |
| 80 | 79 | device_nvram_interface(mconfig, *this), |
| r24548 | r24549 | |
| 84 | 83 | m_default_data(0), |
| 85 | 84 | m_default_data_size(0), |
| 86 | 85 | m_default_value(0), |
| 87 | m_default_value_set(false) | |
| 86 | m_default_value_set(false), | |
| 87 | m_completion_time(attotime::zero) | |
| 88 | 88 | { |
| 89 | m_operation_time[WRITE_TIME] = attotime::from_msec(2); | |
| 90 | m_operation_time[WRITE_ALL_TIME] = attotime::from_msec(8); | |
| 91 | m_operation_time[ERASE_TIME] = attotime::from_msec(1); | |
| 92 | m_operation_time[ERASE_ALL_TIME] = attotime::from_msec(8); | |
| 89 | 93 | } |
| 90 | 94 | |
| 91 | 95 | |
| r24548 | r24549 | |
| 94 | 98 | // to set the default data |
| 95 | 99 | //------------------------------------------------- |
| 96 | 100 | |
| 97 | void | |
| 101 | void eeprom_base_device::static_set_size(device_t &device, int cells, int cellbits) | |
| 98 | 102 | { |
| 99 | | |
| 103 | eeprom_base_device &eeprom = downcast<eeprom_base_device &>(device); | |
| 100 | 104 | eeprom.m_cells = cells; |
| 101 | 105 | eeprom.m_data_bits = cellbits; |
| 102 | 106 | |
| r24548 | r24549 | |
| 122 | 126 | // to set the default data |
| 123 | 127 | //------------------------------------------------- |
| 124 | 128 | |
| 125 | void | |
| 129 | void eeprom_base_device::static_set_default_data(device_t &device, const UINT8 *data, UINT32 size) | |
| 126 | 130 | { |
| 127 | | |
| 131 | eeprom_base_device &eeprom = downcast<eeprom_base_device &>(device); | |
| 128 | 132 | assert(eeprom.m_data_bits == 8); |
| 129 | 133 | eeprom.m_default_data.u8 = const_cast<UINT8 *>(data); |
| 130 | 134 | eeprom.m_default_data_size = size; |
| 131 | 135 | } |
| 132 | 136 | |
| 133 | void | |
| 137 | void eeprom_base_device::static_set_default_data(device_t &device, const UINT16 *data, UINT32 size) | |
| 134 | 138 | { |
| 135 | | |
| 139 | eeprom_base_device &eeprom = downcast<eeprom_base_device &>(device); | |
| 136 | 140 | assert(eeprom.m_data_bits == 16); |
| 137 | 141 | eeprom.m_default_data.u16 = const_cast<UINT16 *>(data); |
| 138 | 142 | eeprom.m_default_data_size = size / 2; |
| r24548 | r24549 | |
| 144 | 148 | // to set the default value |
| 145 | 149 | //------------------------------------------------- |
| 146 | 150 | |
| 147 | void | |
| 151 | void eeprom_base_device::static_set_default_value(device_t &device, UINT32 value) | |
| 148 | 152 | { |
| 149 | | |
| 153 | eeprom_base_device &eeprom = downcast<eeprom_base_device &>(device); | |
| 150 | 154 | eeprom.m_default_value = value; |
| 151 | 155 | eeprom.m_default_value_set = true; |
| 152 | 156 | } |
| 153 | 157 | |
| 154 | 158 | |
| 155 | 159 | //------------------------------------------------- |
| 156 | // read_data - read data at the given address | |
| 160 | // static_set_timing - configuration helper | |
| 161 | // to set timing constants for various operations | |
| 157 | 162 | //------------------------------------------------- |
| 158 | 163 | |
| 159 | ||
| 164 | void eeprom_base_device::static_set_timing(device_t &device, timing_type type, attotime duration) | |
| 160 | 165 | { |
| 161 | if (m_data_bits == 16) | |
| 162 | return m_addrspace[0]->read_word(address * 2); | |
| 163 | else | |
| 164 | return m_addrspace[0]->read_byte(address); | |
| 166 | downcast<eeprom_base_device &>(device).m_operation_time[type] = duration; | |
| 165 | 167 | } |
| 166 | 168 | |
| 167 | 169 | |
| 168 | 170 | //------------------------------------------------- |
| 169 | // | |
| 171 | // read - read data at the given address | |
| 170 | 172 | //------------------------------------------------- |
| 171 | 173 | |
| 172 | ||
| 174 | UINT32 eeprom_base_device::read(offs_t address) | |
| 173 | 175 | { |
| 174 | if (m_data_bits == 16) | |
| 175 | m_addrspace[0]->write_word(address * 2, data); | |
| 176 | else | |
| 177 | m_addrspace[0]->write_byte(address, data); | |
| 176 | if (!ready()) | |
| 177 | logerror("EEPROM: Read performed before previous operation completed!"); | |
| 178 | return internal_read(address); | |
| 178 | 179 | } |
| 179 | 180 | |
| 180 | 181 | |
| 181 | 182 | //------------------------------------------------- |
| 183 | // write - write data at the given address | |
| 184 | //------------------------------------------------- | |
| 185 | ||
| 186 | void eeprom_base_device::write(offs_t address, UINT32 data) | |
| 187 | { | |
| 188 | if (!ready()) | |
| 189 | logerror("EEPROM: Write performed before previous operation completed!"); | |
| 190 | internal_write(address, data); | |
| 191 | m_completion_time = machine().time() + m_operation_time[WRITE_TIME]; | |
| 192 | } | |
| 193 | ||
| 194 | ||
| 195 | //------------------------------------------------- | |
| 196 | // write_all - write data at all addresses | |
| 197 | // (assumes an erase has previously been | |
| 198 | // performed) | |
| 199 | //------------------------------------------------- | |
| 200 | ||
| 201 | void eeprom_base_device::write_all(UINT32 data) | |
| 202 | { | |
| 203 | if (!ready()) | |
| 204 | logerror("EEPROM: Write all performed before previous operation completed!"); | |
| 205 | for (offs_t address = 0; address < (1 << m_address_bits); address++) | |
| 206 | internal_write(address, internal_read(address) & data); | |
| 207 | m_completion_time = machine().time() + m_operation_time[WRITE_ALL_TIME]; | |
| 208 | } | |
| 209 | ||
| 210 | ||
| 211 | //------------------------------------------------- | |
| 212 | // erase - erase data at the given address | |
| 213 | //------------------------------------------------- | |
| 214 | ||
| 215 | void eeprom_base_device::erase(offs_t address) | |
| 216 | { | |
| 217 | if (!ready()) | |
| 218 | logerror("EEPROM: Erase performed before previous operation completed!"); | |
| 219 | internal_write(address, ~0); | |
| 220 | m_completion_time = machine().time() + m_operation_time[ERASE_TIME]; | |
| 221 | } | |
| 222 | ||
| 223 | ||
| 224 | //------------------------------------------------- | |
| 225 | // erase_all - erase data at all addresses | |
| 226 | //------------------------------------------------- | |
| 227 | ||
| 228 | void eeprom_base_device::erase_all() | |
| 229 | { | |
| 230 | if (!ready()) | |
| 231 | logerror("EEPROM: Erase all performed before previous operation completed!"); | |
| 232 | for (offs_t address = 0; address < (1 << m_address_bits); address++) | |
| 233 | internal_write(address, ~0); | |
| 234 | m_completion_time = machine().time() + m_operation_time[ERASE_ALL_TIME]; | |
| 235 | } | |
| 236 | ||
| 237 | ||
| 238 | //------------------------------------------------- | |
| 182 | 239 | // device_validity_check - perform validity checks |
| 183 | 240 | // on this device |
| 184 | 241 | //------------------------------------------------- |
| 185 | 242 | |
| 186 | void | |
| 243 | void eeprom_base_device::device_validity_check(validity_checker &valid) const | |
| 187 | 244 | { |
| 188 | 245 | // ensure the number of cells is an even power of 2 |
| 189 | 246 | if (m_cells != (1 << m_address_bits)) |
| r24548 | r24549 | |
| 199 | 256 | // device_start - device-specific startup |
| 200 | 257 | //------------------------------------------------- |
| 201 | 258 | |
| 202 | void | |
| 259 | void eeprom_base_device::device_start() | |
| 203 | 260 | { |
| 261 | // save states | |
| 262 | save_item(NAME(m_completion_time)); | |
| 204 | 263 | } |
| 205 | 264 | |
| 206 | 265 | |
| r24548 | r24549 | |
| 208 | 267 | // device_reset - device-specific reset |
| 209 | 268 | //------------------------------------------------- |
| 210 | 269 | |
| 211 | void | |
| 270 | void eeprom_base_device::device_reset() | |
| 212 | 271 | { |
| 272 | // reset any pending operations | |
| 273 | m_completion_time = attotime::zero; | |
| 213 | 274 | } |
| 214 | 275 | |
| 215 | 276 | |
| r24548 | r24549 | |
| 218 | 279 | // any address spaces owned by this device |
| 219 | 280 | //------------------------------------------------- |
| 220 | 281 | |
| 221 | const address_space_config * | |
| 282 | const address_space_config *eeprom_base_device::memory_space_config(address_spacenum spacenum) const | |
| 222 | 283 | { |
| 223 | 284 | return (spacenum == 0) ? &m_space_config : NULL; |
| 224 | 285 | } |
| r24548 | r24549 | |
| 229 | 290 | // its default state |
| 230 | 291 | //------------------------------------------------- |
| 231 | 292 | |
| 232 | void | |
| 293 | void eeprom_base_device::nvram_default() | |
| 233 | 294 | { |
| 234 | 295 | UINT32 eeprom_length = 1 << m_address_bits; |
| 235 | 296 | UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; |
| r24548 | r24549 | |
| 276 | 337 | // .nv file |
| 277 | 338 | //------------------------------------------------- |
| 278 | 339 | |
| 279 | void | |
| 340 | void eeprom_base_device::nvram_read(emu_file &file) | |
| 280 | 341 | { |
| 281 | 342 | UINT32 eeprom_length = 1 << m_address_bits; |
| 282 | 343 | UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; |
| r24548 | r24549 | |
| 293 | 354 | // .nv file |
| 294 | 355 | //------------------------------------------------- |
| 295 | 356 | |
| 296 | void | |
| 357 | void eeprom_base_device::nvram_write(emu_file &file) | |
| 297 | 358 | { |
| 298 | 359 | UINT32 eeprom_length = 1 << m_address_bits; |
| 299 | 360 | UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; |
| r24548 | r24549 | |
| 303 | 364 | buffer[offs] = m_addrspace[0]->read_byte(offs); |
| 304 | 365 | file.write(buffer, eeprom_bytes); |
| 305 | 366 | } |
| 367 | ||
| 368 | ||
| 369 | //------------------------------------------------- | |
| 370 | // internal_read - read data at the given address | |
| 371 | //------------------------------------------------- | |
| 372 | ||
| 373 | UINT32 eeprom_base_device::internal_read(offs_t address) | |
| 374 | { | |
| 375 | if (m_data_bits == 16) | |
| 376 | return m_addrspace[0]->read_word(address * 2); | |
| 377 | else | |
| 378 | return m_addrspace[0]->read_byte(address); | |
| 379 | } | |
| 380 | ||
| 381 | ||
| 382 | //------------------------------------------------- | |
| 383 | // internal_write - write data at the given | |
| 384 | // address | |
| 385 | //------------------------------------------------- | |
| 386 | ||
| 387 | void eeprom_base_device::internal_write(offs_t address, UINT32 data) | |
| 388 | { | |
| 389 | if (m_data_bits == 16) | |
| 390 | m_addrspace[0]->write_word(address * 2, data); | |
| 391 | else | |
| 392 | m_addrspace[0]->write_byte(address, data); | |
| 393 | } |
| r24548 | r24549 | |
|---|---|---|
| 49 | 49 | //************************************************************************** |
| 50 | 50 | |
| 51 | 51 | #define MCFG_EEPROM_SIZE(_cells, _cellbits) \ |
| 52 | | |
| 52 | eeprom_base_device::static_set_size(*device, _cells, _cellbits); | |
| 53 | 53 | #define MCFG_EEPROM_DATA(_data, _size) \ |
| 54 | | |
| 54 | eeprom_base_device::static_set_default_data(*device, _data, _size); | |
| 55 | 55 | #define MCFG_EEPROM_DEFAULT_VALUE(_value) \ |
| 56 | | |
| 56 | eeprom_base_device::static_set_default_value(*device, _value); | |
| 57 | 57 | |
| 58 | #define MCFG_EEPROM_WRITE_TIME(_value) \ | |
| 59 | eeprom_base_device::static_set_timing(*device, eeprom_base_device::WRITE_TIME, _value); | |
| 60 | #define MCFG_EEPROM_WRITE_ALL_TIME(_value) \ | |
| 61 | eeprom_base_device::static_set_timing(*device, eeprom_base_device::WRITE_ALL_TIME, _value); | |
| 62 | #define MCFG_EEPROM_ERASE_TIME(_value) \ | |
| 63 | eeprom_base_device::static_set_timing(*device, eeprom_base_device::ERASE_TIME, _value); | |
| 64 | #define MCFG_EEPROM_ERASE_ALL_TIME(_value) \ | |
| 65 | eeprom_base_device::static_set_timing(*device, eeprom_base_device::ERASE_ALL_TIME, _value); | |
| 58 | 66 | |
| 59 | 67 | |
| 68 | ||
| 60 | 69 | //************************************************************************** |
| 61 | 70 | // TYPE DEFINITIONS |
| 62 | 71 | //************************************************************************** |
| 63 | 72 | |
| 64 | // ======================> | |
| 73 | // ======================> eeprom_base_device | |
| 65 | 74 | |
| 66 | class | |
| 75 | class eeprom_base_device : public device_t, | |
| 67 | 76 | public device_memory_interface, |
| 68 | 77 | public device_nvram_interface |
| 69 | 78 | { |
| 70 | 79 | protected: |
| 71 | 80 | // construction/destruction |
| 72 | | |
| 81 | eeprom_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file); | |
| 73 | 82 | |
| 74 | 83 | public: |
| 84 | // timing constants | |
| 85 | enum timing_type | |
| 86 | { | |
| 87 | WRITE_TIME, // default = 2ms | |
| 88 | WRITE_ALL_TIME, // default = 8ms | |
| 89 | ERASE_TIME, // default = 1ms | |
| 90 | ERASE_ALL_TIME, // default = 8ms | |
| 91 | TIMING_COUNT | |
| 92 | }; | |
| 93 | ||
| 75 | 94 | // inline configuration helpers |
| 76 | 95 | static void static_set_size(device_t &device, int cells, int cellbits); |
| 77 | 96 | static void static_set_default_data(device_t &device, const UINT8 *data, UINT32 size); |
| 78 | 97 | static void static_set_default_data(device_t &device, const UINT16 *data, UINT32 size); |
| 79 | 98 | static void static_set_default_value(device_t &device, UINT32 value); |
| 99 | static void static_set_timing(device_t &device, timing_type type, attotime duration); | |
| 80 | 100 | |
| 81 | // read/write data | |
| 82 | UINT32 read_data(offs_t address); | |
| 83 | void write_data(offs_t address, UINT32 data); | |
| 84 | ||
| 101 | // read/write/erase data | |
| 102 | UINT32 read(offs_t address); | |
| 103 | void write(offs_t address, UINT32 data); | |
| 104 | void write_all(UINT32 data); | |
| 105 | void erase(offs_t address); | |
| 106 | void erase_all(); | |
| 107 | ||
| 108 | // status | |
| 109 | bool ready() const { return machine().time() >= m_completion_time; } | |
| 110 | ||
| 85 | 111 | protected: |
| 86 | 112 | // device-level overrides |
| 87 | 113 | virtual void device_validity_check(validity_checker &valid) const; |
| r24548 | r24549 | |
| 96 | 122 | virtual void nvram_read(emu_file &file); |
| 97 | 123 | virtual void nvram_write(emu_file &file); |
| 98 | 124 | |
| 125 | // internal read/write without side-effects | |
| 126 | UINT32 internal_read(offs_t address); | |
| 127 | void internal_write(offs_t address, UINT32 data); | |
| 128 | ||
| 99 | 129 | // configuration state |
| 100 | 130 | UINT32 m_cells; |
| 101 | 131 | UINT8 m_address_bits; |
| r24548 | r24549 | |
| 105 | 135 | UINT32 m_default_data_size; |
| 106 | 136 | UINT32 m_default_value; |
| 107 | 137 | bool m_default_value_set; |
| 138 | attotime m_operation_time[TIMING_COUNT]; | |
| 139 | ||
| 140 | // live state | |
| 141 | attotime m_completion_time; | |
| 108 | 142 | }; |
| 109 | 143 | |
| 110 | 144 |
| r24548 | r24549 | |
|---|---|---|
| 684 | 684 | if (offset == 0x8000 && m_93c46_enabled) |
| 685 | 685 | { |
| 686 | 686 | UINT8 value = (m_93c46_lines & 0xfc) | 0x02; |
| 687 | value |= m_eeprom->read | |
| 687 | value |= m_eeprom->do_read() ? 1 : 0; | |
| 688 | 688 | return value; |
| 689 | 689 | } |
| 690 | 690 | |
| r24548 | r24549 | |
| 699 | 699 | if (offset == 0x8000 && m_93c46_enabled) |
| 700 | 700 | { |
| 701 | 701 | m_93c46_lines = data; |
| 702 | m_eeprom->write_bit((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 703 | m_eeprom->set_cs_line(!(data & 0x04) ? ASSERT_LINE : CLEAR_LINE); | |
| 704 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 702 | m_eeprom->di_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 703 | m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE); | |
| 704 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 705 | 705 | } |
| 706 | 706 | } |
| 707 | 707 | |
| r24548 | r24549 | |
| 714 | 714 | { |
| 715 | 715 | m_eeprom->reset(); |
| 716 | 716 | logerror("eeprom CS = 1\n"); |
| 717 | m_eeprom-> | |
| 717 | m_eeprom->cs_write(CLEAR_LINE); | |
| 718 | 718 | } |
| 719 | 719 | m_93c46_enabled = BIT(data, 3); |
| 720 | 720 | logerror("eeprom %s\n", m_93c46_enabled ? "enabled" : "disabled"); |
| r24548 | r24549 | |
| 729 | 729 | } |
| 730 | 730 | |
| 731 | 731 | MACHINE_CONFIG_FRAGMENT( gg_eeprom ) |
| 732 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 732 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 733 | 733 | MACHINE_CONFIG_END |
| 734 | 734 | |
| 735 | 735 | machine_config_constructor sega8_eeprom_device::device_mconfig_additions() const |
| r24548 | r24549 | |
|---|---|---|
| 213 | 213 | protected: |
| 214 | 214 | UINT8 m_rom_bank_base[3]; |
| 215 | 215 | |
| 216 | required_device<serial_ | |
| 216 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 217 | 217 | int m_93c46_enabled; |
| 218 | 218 | UINT8 m_93c46_lines; |
| 219 | 219 | }; |
| r24548 | r24549 | |
|---|---|---|
| 73 | 73 | TIMER_CALLBACK_MEMBER(ip20_timer_rtc); |
| 74 | 74 | required_device<wd33c93_device> m_wd33c93; |
| 75 | 75 | required_device<scc8530_t> m_scc; |
| 76 | required_device<serial_ | |
| 76 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 77 | 77 | inline void ATTR_PRINTF(3,4) verboselog(int n_level, const char *s_fmt, ... ); |
| 78 | 78 | required_device<cpu_device> m_maincpu; |
| 79 | 79 | |
| r24548 | r24549 | |
| 106 | 106 | return 0; |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | static const serial_eeprom_interface eeprom_interface_93C56 = | |
| 110 | { | |
| 111 | "*110x", // read 110x aaaaaaaa | |
| 112 | "*101x", // write 101x aaaaaaaa dddddddd | |
| 113 | "*111x", // erase 111x aaaaaaaa | |
| 114 | "*10000xxxxxxx", // lock 100x 00xxxx | |
| 115 | "*10011xxxxxxx", // unlock 100x 11xxxx | |
| 116 | }; | |
| 117 | 109 | |
| 118 | 110 | |
| 119 | ||
| 120 | ||
| 121 | 111 | #define RTC_DAYOFWEEK state->m_RTC.nRAM[0x0e] |
| 122 | 112 | #define RTC_YEAR state->m_RTC.nRAM[0x0b] |
| 123 | 113 | #define RTC_MONTH state->m_RTC.nRAM[0x0a] |
| r24548 | r24549 | |
| 169 | 159 | return m_HPC.nMiscStatus; |
| 170 | 160 | case 0x01bc: |
| 171 | 161 | // verboselog(machine, 2, "HPC CPU Serial EEPROM Read\n" ); |
| 172 | return m_eeprom->read | |
| 162 | return m_eeprom->do_read() << 4; | |
| 173 | 163 | case 0x01c4: |
| 174 | 164 | verboselog(2, "HPC Local IO Register 0 Mask Read: %08x (%08x)\n", m_HPC.nLocalIOReg0Mask, mem_mask ); |
| 175 | 165 | return m_HPC.nLocalIOReg0Mask; |
| r24548 | r24549 | |
| 353 | 343 | { |
| 354 | 344 | verboselog(2, " CPU board LED on\n" ); |
| 355 | 345 | } |
| 356 | m_eeprom->write_bit((data & 0x00000008) ? 1 : 0 ); | |
| 357 | m_eeprom->set_cs_line((data & 0x00000002) ? ASSERT_LINE : CLEAR_LINE ); | |
| 358 | m_eeprom->set_clock_line((data & 0x00000004) ? CLEAR_LINE : ASSERT_LINE ); | |
| 346 | m_eeprom->di_write((data & 0x00000008) ? 1 : 0 ); | |
| 347 | m_eeprom->cs_write((data & 0x00000002) ? CLEAR_LINE : ASSERT_LINE ); | |
| 348 | m_eeprom->clk_write((data & 0x00000004) ? CLEAR_LINE : ASSERT_LINE ); | |
| 359 | 349 | break; |
| 360 | 350 | case 0x01c4: |
| 361 | 351 | verboselog(2, "HPC Local IO Register 0 Mask Write: %08x (%08x)\n", data, mem_mask ); |
| r24548 | r24549 | |
| 625 | 615 | MCFG_SOUND_MODIFY( "scsi:cdrom:cdda" ) |
| 626 | 616 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^mono", 1.0) |
| 627 | 617 | |
| 628 | MCFG_SERIAL_ | |
| 618 | MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") | |
| 629 | 619 | MACHINE_CONFIG_END |
| 630 | 620 | |
| 631 | 621 | ROM_START( ip204415 ) |
| r24548 | r24549 | |
|---|---|---|
| 1330 | 1330 | //printf("save to eeprom\n"); |
| 1331 | 1331 | |
| 1332 | 1332 | { |
| 1333 | address_space &eeprom_space = space.machine().device<serial_ | |
| 1333 | address_space &eeprom_space = space.machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); | |
| 1334 | 1334 | |
| 1335 | 1335 | for (i=0;i<0x80;i++) |
| 1336 | 1336 | { |
| r24548 | r24549 | |
| 1673 | 1673 | } |
| 1674 | 1674 | #endif |
| 1675 | 1675 | { |
| 1676 | address_space &eeprom_space = space.machine().device<serial_ | |
| 1676 | address_space &eeprom_space = space.machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); | |
| 1677 | 1677 | |
| 1678 | 1678 | for (i=0;i<0x80;i++) |
| 1679 | 1679 | { |
| r24548 | r24549 | |
|---|---|---|
| 820 | 820 | { |
| 821 | 821 | if (LOG_EEPROM) logerror("%s:EE write %d%d%d\n", machine().describe_context(), |
| 822 | 822 | (data >> 6) & 1, (data >> 5) & 1, (data >> 4) & 1); |
| 823 | m_eeprom->write_bit ((data & 0x10) >> 4); | |
| 824 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 825 | m_eeprom->set_cs_line ((~data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 823 | m_eeprom->di_write ((data & 0x10) >> 4); | |
| 824 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 825 | m_eeprom->cs_write ((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 826 | 826 | } |
| 827 | 827 | |
| 828 | 828 | |
| r24548 | r24549 | |
| 1122 | 1122 | |
| 1123 | 1123 | if (LOG_EEPROM) logerror("%04X:EE write %d%d%d\n", space.device().safe_pc(), |
| 1124 | 1124 | (data >> 6) & 1, (data >> 5) & 1, (data >> 4) & 1); |
| 1125 | m_eeprom->write_bit ((data & 0x10) >> 4); | |
| 1126 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 1127 | m_eeprom->set_cs_line ((~data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 1125 | m_eeprom->di_write ((data & 0x10) >> 4); | |
| 1126 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 1127 | m_eeprom->cs_write ((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 1128 | 1128 | break; |
| 1129 | 1129 | |
| 1130 | 1130 | case 0x0a: /* /OGIA */ |
| r24548 | r24549 | |
|---|---|---|
| 263 | 263 | WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_cs_w) |
| 264 | 264 | { |
| 265 | 265 | /* bit 0 is CS (active low) */ |
| 266 | m_eeprom-> | |
| 266 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 267 | 267 | } |
| 268 | 268 | |
| 269 | 269 | WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_sk_w) |
| 270 | 270 | { |
| 271 | 271 | /* bit 0 is SK (active high) */ |
| 272 | m_eeprom-> | |
| 272 | m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_data_w) |
| 276 | 276 | { |
| 277 | 277 | /* bit 0 is EEPROM data (DIN) */ |
| 278 | m_eeprom->write | |
| 278 | m_eeprom->di_write(data & 0x01); | |
| 279 | 279 | } |
| 280 | 280 | |
| 281 | 281 | /*************************************************************************** |
| r24548 | r24549 | |
|---|---|---|
| 199 | 199 | { |
| 200 | 200 | UINT8* nvdat = (UINT8*)&kaneko16_mcu_ram[mcu_offset]; |
| 201 | 201 | |
| 202 | address_space &eeprom_space = machine.device<serial_ | |
| 202 | address_space &eeprom_space = machine.device<eeprom_serial_93cxx_device>(":eeprom")->space(); | |
| 203 | 203 | |
| 204 | 204 | for (int i=0;i<0x80;i++) |
| 205 | 205 | { |
| r24548 | r24549 | |
| 213 | 213 | |
| 214 | 214 | case 0x42: // Write to NVRAM |
| 215 | 215 | { |
| 216 | address_space &eeprom_space = machine.device<serial_ | |
| 216 | address_space &eeprom_space = machine.device<eeprom_serial_93cxx_device>(":eeprom")->space(); | |
| 217 | 217 | UINT8* nvdat = (UINT8*)&kaneko16_mcu_ram[mcu_offset]; |
| 218 | 218 | for (int i=0;i<0x80;i++) |
| 219 | 219 | { |
| r24548 | r24549 | |
| 232 | 232 | //memcpy(m_nvram_save, bonkadv_mcu_43, sizeof(bonkadv_mcu_43)); |
| 233 | 233 | |
| 234 | 234 | |
| 235 | address_space &eeprom_space = machine.device<serial_ | |
| 235 | address_space &eeprom_space = machine.device<eeprom_serial_93cxx_device>(":eeprom")->space(); | |
| 236 | 236 | UINT8* nvdat = (UINT8*)&bonkadv_mcu_43[0]; |
| 237 | 237 | for (int i=0;i<0x80;i++) |
| 238 | 238 | { |
| r24548 | r24549 | |
|---|---|---|
| 35 | 35 | optional_device<cpu_device> m_subcpu; |
| 36 | 36 | required_device<tc0100scn_device> m_tc0100scn; |
| 37 | 37 | required_device<tc0480scp_device> m_tc0480scp; |
| 38 | required_device<serial_ | |
| 38 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 39 | 39 | optional_shared_ptr<UINT32> m_ram; |
| 40 | 40 | optional_shared_ptr<UINT32> m_shared_ram; |
| 41 | 41 | UINT16 m_coin_word; |
| r24548 | r24549 | |
|---|---|---|
| 26 | 26 | UINT32 screen_update_xorworld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 27 | 27 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 28 | 28 | required_device<cpu_device> m_maincpu; |
| 29 | required_device<serial_ | |
| 29 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 30 | 30 | }; |
| r24548 | r24549 | |
|---|---|---|
| 14 | 14 | #include "machine/kaneko_calc3.h" |
| 15 | 15 | #include "machine/kaneko_toybox.h" |
| 16 | 16 | #include "sound/okim6295.h" |
| 17 | #include "machine/eepromser.h" | |
| 18 | 17 | |
| 19 | 18 | |
| 20 | 19 | class kaneko16_state : public driver_device |
| r24548 | r24549 | |
| 27 | 26 | m_oki(*this, "oki"), |
| 28 | 27 | m_oki1(*this, "oki1"), |
| 29 | 28 | m_oki2(*this, "oki2"), |
| 30 | m_eeprom(*this, "eeprom"), | |
| 31 | 29 | m_spriteram(*this, "spriteram"), |
| 32 | 30 | m_mainram(*this, "mainram"), |
| 33 | 31 | m_view2_0(*this, "view2_0"), |
| r24548 | r24549 | |
| 41 | 39 | optional_device<okim6295_device> m_oki; |
| 42 | 40 | optional_device<okim6295_device> m_oki1; |
| 43 | 41 | optional_device<okim6295_device> m_oki2; |
| 44 | optional_device<serial_eeprom_device> m_eeprom; | |
| 45 | 42 | optional_shared_ptr<UINT16> m_spriteram; |
| 46 | 43 | optional_shared_ptr<UINT16> m_mainram; |
| 47 | 44 | optional_device<kaneko_view2_tilemap_device> m_view2_0; |
| r24548 | r24549 | |
| 67 | 64 | DECLARE_WRITE16_MEMBER(kaneko16_ay2_YM2149_w); |
| 68 | 65 | DECLARE_WRITE16_MEMBER(bakubrkr_oki_bank_sw); |
| 69 | 66 | |
| 70 | DECLARE_WRITE8_MEMBER(kaneko16_eeprom_reset_w); | |
| 71 | ||
| 72 | 67 | DECLARE_DRIVER_INIT(kaneko16); |
| 73 | 68 | DECLARE_DRIVER_INIT(samplebank); |
| 74 | 69 |
| r24548 | r24549 | |
|---|---|---|
| 33 | 33 | |
| 34 | 34 | /* devices */ |
| 35 | 35 | required_device<cpu_device> m_maincpu; |
| 36 | required_device<serial_ | |
| 36 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 37 | 37 | |
| 38 | 38 | /* memory */ |
| 39 | 39 | UINT8 m_sprite_gfx_ram[0x2000]; |
| r24548 | r24549 | |
|---|---|---|
| 56 | 56 | required_device<cpu_device> m_maincpu; |
| 57 | 57 | optional_device<cpu_device> m_audiocpu; |
| 58 | 58 | required_device<cpu_device> m_subcpu; |
| 59 | optional_device<serial_ | |
| 59 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 60 | 60 | optional_device<tc0480scp_device> m_tc0480scp; |
| 61 | 61 | optional_device<tc0150rod_device> m_tc0150rod; |
| 62 | 62 | optional_device<tc0100scn_device> m_tc0100scn; |
| r24548 | r24549 | |
|---|---|---|
| 180 | 180 | optional_device<cpu_device> m_tgp; |
| 181 | 181 | optional_device<cpu_device> m_dsp; |
| 182 | 182 | optional_device<cpu_device> m_drivecpu; |
| 183 | required_device<serial_ | |
| 183 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 184 | 184 | }; |
| 185 | 185 | |
| 186 | 186 | /*----------- defined in video/model2.c -----------*/ |
| r24548 | r24549 | |
|---|---|---|
| 29 | 29 | |
| 30 | 30 | required_device<cpu_device> m_master; |
| 31 | 31 | required_device<cpu_device> m_slave; |
| 32 | required_device<serial_ | |
| 32 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 33 | 33 | |
| 34 | 34 | UINT8 m_dac_control; |
| 35 | 35 | UINT8 *m_alleymas_kludge_mem; |
| r24548 | r24549 | |
|---|---|---|
| 254 | 254 | DECLARE_WRITE_LINE_MEMBER(ym3438_irq_handler); |
| 255 | 255 | required_device<cpu_device> m_maincpu; |
| 256 | 256 | required_device<cpu_device> m_soundcpu; |
| 257 | required_device<serial_ | |
| 257 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 258 | 258 | }; |
| 259 | 259 | |
| 260 | 260 | /*----------- defined in machine/segas32.c -----------*/ |
| r24548 | r24549 | |
|---|---|---|
| 72 | 72 | required_shared_ptr<UINT16> m_adsp_fastram_base; |
| 73 | 73 | required_device<cpu_device> m_maincpu; |
| 74 | 74 | required_device<cpu_device> m_adsp; |
| 75 | required_device<serial_ | |
| 75 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 76 | 76 | required_device<cpu_device> m_tms; |
| 77 | 77 | required_device<gaelco_serial_device> m_serial; |
| 78 | 78 | UINT16 m_sound_data; |
| r24548 | r24549 | |
|---|---|---|
| 56 | 56 | |
| 57 | 57 | /* devices */ |
| 58 | 58 | required_device<okim6295_device> m_adpcm; |
| 59 | required_device<serial_ | |
| 59 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 60 | 60 | DECLARE_READ16_MEMBER(kickgoal_eeprom_r); |
| 61 | 61 | DECLARE_WRITE16_MEMBER(kickgoal_eeprom_w); |
| 62 | 62 | DECLARE_WRITE16_MEMBER(kickgoal_fgram_w); |
| r24548 | r24549 | |
|---|---|---|
| 209 | 209 | void model3_exit(); |
| 210 | 210 | DECLARE_WRITE_LINE_MEMBER(scsp_irq); |
| 211 | 211 | required_device<cpu_device> m_audiocpu; |
| 212 | required_device<serial_ | |
| 212 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 213 | 213 | }; |
| 214 | 214 | |
| 215 | 215 |
| r24548 | r24549 | |
|---|---|---|
| 53 | 53 | |
| 54 | 54 | /* devices */ |
| 55 | 55 | required_device<okim6295_device> m_oki; |
| 56 | optional_device<serial_ | |
| 56 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 57 | 57 | DECLARE_WRITE16_MEMBER(coinctrl_w); |
| 58 | 58 | DECLARE_WRITE16_MEMBER(wbeachvl_coin_eeprom_w); |
| 59 | 59 | DECLARE_WRITE16_MEMBER(hotmind_coin_eeprom_w); |
| r24548 | r24549 | |
|---|---|---|
| 17 | 17 | required_device<buffered_spriteram16_device> m_spriteram; |
| 18 | 18 | required_shared_ptr<UINT16> m_vregs; |
| 19 | 19 | optional_shared_ptr<UINT16> m_snowboar_protection; |
| 20 | optional_device<serial_ | |
| 20 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 21 | 21 | |
| 22 | 22 | int m_clr_gun_int; |
| 23 | 23 | UINT8 m_analog_ports[2]; |
| r24548 | r24549 | |
|---|---|---|
| 154 | 154 | optional_device<nmk112_device> m_nmk112; |
| 155 | 155 | optional_device<okim6295_device> m_oki; |
| 156 | 156 | optional_device<okim6295_device> m_oki1; |
| 157 | optional_device<serial_ | |
| 157 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 158 | 158 | |
| 159 | 159 | protected: |
| 160 | 160 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| r24548 | r24549 | |
|---|---|---|
| 34 | 34 | required_shared_ptr<UINT32> m_spriteram; |
| 35 | 35 | |
| 36 | 36 | required_device<cpu_device> m_maincpu; |
| 37 | required_device<serial_ | |
| 37 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 38 | 38 | required_device<tc0100scn_device> m_tc0100scn; |
| 39 | 39 | required_device<tc0480scp_device> m_tc0480scp; |
| 40 | 40 | UINT16 m_coin_word; |
| r24548 | r24549 | |
|---|---|---|
| 3 | 3 | Atari Centipede hardware |
| 4 | 4 | |
| 5 | 5 | *************************************************************************/ |
| 6 | ||
| 6 | 7 | #include "machine/eepromser.h" |
| 7 | 8 | |
| 8 | 9 | class centiped_state : public driver_device |
| r24548 | r24549 | |
| 87 | 88 | void milliped_set_color(offs_t offset, UINT8 data); |
| 88 | 89 | inline int read_trackball(int idx, int switch_port); |
| 89 | 90 | required_device<cpu_device> m_maincpu; |
| 90 | optional_device<serial_ | |
| 91 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 91 | 92 | }; |
| r24548 | r24549 | |
|---|---|---|
| 42 | 42 | void pirates_decrypt_s(); |
| 43 | 43 | void pirates_decrypt_oki(); |
| 44 | 44 | required_device<cpu_device> m_maincpu; |
| 45 | required_device<serial_ | |
| 45 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 46 | 46 | required_device<okim6295_device> m_oki; |
| 47 | 47 | }; |
| r24548 | r24549 | |
|---|---|---|
| 322 | 322 | emu_file *jaguar_nvram_fopen( UINT32 openflags); |
| 323 | 323 | void jaguar_nvram_load(); |
| 324 | 324 | void jaguar_nvram_save(); |
| 325 | optional_device<serial_ | |
| 325 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 326 | 326 | optional_device<vt83c461_device> m_ide; |
| 327 | 327 | }; |
| r24548 | r24549 | |
|---|---|---|
| 31 | 31 | |
| 32 | 32 | optional_device<x1_010_device> m_x1; |
| 33 | 33 | optional_device<okim9810_device> m_oki; |
| 34 | optional_device<serial_ | |
| 34 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 35 | 35 | |
| 36 | 36 | int m_xoffset; |
| 37 | 37 | int m_yoffset; |
| r24548 | r24549 | |
|---|---|---|
| 26 | 26 | required_device<cpu_device> m_maincpu; |
| 27 | 27 | required_device<cpu_device> m_audiocpu; |
| 28 | 28 | required_device<cpu_device> m_dsp; |
| 29 | required_device<serial_ | |
| 29 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 30 | 30 | required_device<k053936_device> m_k053936; |
| 31 | 31 | |
| 32 | 32 | /* 68k-side shared ram */ |
| r24548 | r24549 | |
|---|---|---|
| 28 | 28 | optional_device<timer_device> m_claybust_gun_on; |
| 29 | 29 | optional_device<discrete_device> m_discrete; |
| 30 | 30 | optional_device<speaker_sound_device> m_speaker; |
| 31 | optional_device<serial_ | |
| 31 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 32 | 32 | |
| 33 | 33 | |
| 34 | 34 | /* misc game specific */ |
| r24548 | r24549 | |
|---|---|---|
| 33 | 33 | /* devices */ |
| 34 | 34 | required_device<cpu_device> m_audiocpu; |
| 35 | 35 | optional_device<cpu_device> m_subcpu; |
| 36 | optional_device<serial_ | |
| 36 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 37 | 37 | DECLARE_WRITE16_MEMBER(fromanc2_sndcmd_w); |
| 38 | 38 | DECLARE_WRITE16_MEMBER(fromanc2_portselect_w); |
| 39 | 39 | DECLARE_READ16_MEMBER(fromanc2_keymatrix_r); |
| r24548 | r24549 | |
|---|---|---|
| 50 | 50 | required_device<cpu_device> m_maincpu; |
| 51 | 51 | required_device<cpu_device> m_subcpu; |
| 52 | 52 | required_device<tc0480scp_device> m_tc0480scp; |
| 53 | required_device<serial_ | |
| 53 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 54 | 54 | }; |
| r24548 | r24549 | |
|---|---|---|
| 97 | 97 | /* devices */ |
| 98 | 98 | required_device<cpu_device> m_maincpu; |
| 99 | 99 | optional_device<cpu_device> m_soundcpu; |
| 100 | optional_device<serial_ | |
| 100 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 101 | 101 | optional_device<cpu_device> m_dev_n2a03a; |
| 102 | 102 | optional_device<cpu_device> m_dev_n2a03b; |
| 103 | 103 | optional_device<m58819_device> m_m58819; |
| r24548 | r24549 | |
|---|---|---|
| 63 | 63 | /* devices */ |
| 64 | 64 | required_device<cpu_device> m_maincpu; |
| 65 | 65 | required_device<cpu_device> m_audiocpu; |
| 66 | optional_device<serial_ | |
| 66 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 67 | 67 | required_device<tc0220ioc_device> m_tc0220ioc; |
| 68 | 68 | required_device<tc0100scn_device> m_tc0100scn; |
| 69 | 69 | required_device<tc0110pcr_device> m_tc0110pcr; |
| r24548 | r24549 | |
|---|---|---|
| 94 | 94 | DECLARE_WRITE_LINE_MEMBER(sound_irq); |
| 95 | 95 | required_device<cpu_device> m_maincpu; |
| 96 | 96 | required_device<cpu_device> m_audiocpu; |
| 97 | required_device<serial_ | |
| 97 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 98 | 98 | }; |
| r24548 | r24549 | |
|---|---|---|
| 53 | 53 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 54 | 54 | required_device<cpu_device> m_maincpu; |
| 55 | 55 | required_device<okim6295_device> m_oki; |
| 56 | required_device<serial_ | |
| 56 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 57 | 57 | }; |
| r24548 | r24549 | |
|---|---|---|
| 34 | 34 | required_device<tc0480scp_device> m_tc0480scp; |
| 35 | 35 | required_shared_ptr<UINT32> m_ram; |
| 36 | 36 | required_shared_ptr<UINT32> m_spriteram; |
| 37 | required_device<serial_ | |
| 37 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 38 | 38 | |
| 39 | 39 | bool m_coin_lockout; |
| 40 | 40 | UINT16 m_coin_word; |
| r24548 | r24549 | |
|---|---|---|
| 49 | 49 | int m_tilemap1_color; |
| 50 | 50 | |
| 51 | 51 | /* devices */ |
| 52 | optional_device<serial_ | |
| 52 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 53 | 53 | DECLARE_WRITE16_MEMBER(esd16_sound_command_w); |
| 54 | 54 | DECLARE_WRITE16_MEMBER(hedpanic_platform_w); |
| 55 | 55 | DECLARE_READ16_MEMBER(esd_eeprom_r); |
| r24548 | r24549 | |
|---|---|---|
| 49 | 49 | |
| 50 | 50 | /* devices */ |
| 51 | 51 | required_device<cpu_device> m_maincpu; |
| 52 | required_device<serial_ | |
| 52 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 53 | 53 | |
| 54 | 54 | DECLARE_WRITE32_MEMBER(psikyosh_irqctrl_w); |
| 55 | 55 | DECLARE_WRITE32_MEMBER(paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w); |
| r24548 | r24549 | |
|---|---|---|
| 83 | 83 | required_device<cpu_device> m_maincpu; |
| 84 | 84 | required_device<cpu_device> m_soundcpu; |
| 85 | 85 | required_device<okim6295_device> m_oki; |
| 86 | required_device<serial_ | |
| 86 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 87 | 87 | }; |
| 88 | 88 | |
| 89 | 89 | /*----------- defined in video/lordgun.c -----------*/ |
| r24548 | r24549 | |
|---|---|---|
| 38 | 38 | |
| 39 | 39 | required_device<cpu_device> m_maincpu; |
| 40 | 40 | required_device<device_t> m_ensoniq; |
| 41 | optional_device<serial_ | |
| 41 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 42 | 42 | optional_device<upd96050_device> m_dsp; |
| 43 | 43 | |
| 44 | 44 | required_shared_ptr<UINT16> m_mainram; |
| r24548 | r24549 | |
|---|---|---|
| 215 | 215 | void sailormn_tilebank_w(int bank); |
| 216 | 216 | DECLARE_WRITE_LINE_MEMBER(irqhandler); |
| 217 | 217 | DECLARE_WRITE_LINE_MEMBER(sound_irq_gen); |
| 218 | optional_device<serial_ | |
| 218 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 219 | 219 | |
| 220 | 220 | private: |
| 221 | 221 | inline void get_tile_info( tile_data &tileinfo, int tile_index, int GFX ); |
| r24548 | r24549 | |
|---|---|---|
| 70 | 70 | optional_shared_ptr<UINT16> m_input_sel; |
| 71 | 71 | optional_shared_ptr<UINT16> m_k053936_ram; |
| 72 | 72 | |
| 73 | optional_device<serial_ | |
| 73 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 74 | 74 | |
| 75 | 75 | |
| 76 | 76 | int m_flip_screen; |
| r24548 | r24549 | |
|---|---|---|
| 144 | 144 | required_device<cpu_device> m_maincpu; |
| 145 | 145 | required_device<cpu_device> m_slave; |
| 146 | 146 | required_device<m68000_base_device> m_audiocpu; |
| 147 | optional_device<serial_ | |
| 147 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 148 | 148 | |
| 149 | 149 | bitmap_rgb32 m_tmpbitmap; |
| 150 | 150 | DECLARE_VIDEO_START(stv_vdp2); |
| r24548 | r24549 | |
|---|---|---|
| 29 | 29 | optional_shared_ptr<UINT64> pvr2_framebuffer_ram; |
| 30 | 30 | optional_shared_ptr<UINT64> elan_ram; |
| 31 | 31 | optional_device<macronix_29l001mc_device> m_awflash; |
| 32 | optional_device<serial_ | |
| 32 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 33 | 33 | |
| 34 | 34 | DECLARE_WRITE_LINE_MEMBER(aica_irq); |
| 35 | 35 | DECLARE_MACHINE_RESET(naomi); |
| r24548 | r24549 | |
|---|---|---|
| 52 | 52 | void zeropnt2_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect); |
| 53 | 53 | required_device<cpu_device> m_maincpu; |
| 54 | 54 | optional_device<okim6295_device> m_oki; |
| 55 | optional_device<serial_ | |
| 55 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 56 | 56 | }; |
| r24548 | r24549 | |
|---|---|---|
| 32 | 32 | required_shared_ptr<UINT8> m_colorram; |
| 33 | 33 | required_shared_ptr<UINT8> m_videoram; |
| 34 | 34 | |
| 35 | optional_device<serial_ | |
| 35 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 36 | 36 | optional_device<msm5205_device> m_msm; |
| 37 | 37 | |
| 38 | 38 | /* video-related */ |
| r24548 | r24549 | |
|---|---|---|
| 64 | 64 | void draw_sprites( const rectangle &cliprect, int scanline, UINT32* dest); |
| 65 | 65 | void descramble_sound( ); |
| 66 | 66 | required_device<cpu_device> m_maincpu; |
| 67 | required_device<serial_ | |
| 67 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 68 | 68 | |
| 69 | 69 | DECLARE_READ16_MEMBER( sh96_protection_region_0_146_r ); |
| 70 | 70 | DECLARE_WRITE16_MEMBER( sh96_protection_region_0_146_w ); |
| r24548 | r24549 | |
|---|---|---|
| 26 | 26 | /* devices */ |
| 27 | 27 | required_device<cpu_device> m_maincpu; |
| 28 | 28 | required_device<deco16ic_device> m_deco_tilegen1; |
| 29 | required_device<serial_ | |
| 29 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 30 | 30 | required_device<okim6295_device> m_okimusic; |
| 31 | 31 | /* memory pointers */ |
| 32 | 32 | UINT16 * m_pf1_rowscroll; |
| r24548 | r24549 | |
|---|---|---|
| 71 | 71 | |
| 72 | 72 | DECLARE_WRITE16_MEMBER( galpani2_bg15_w ); |
| 73 | 73 | required_device<okim6295_device> m_oki2; |
| 74 | required_device<serial_ | |
| 74 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 75 | 75 | }; |
| r24548 | r24549 | |
|---|---|---|
| 52 | 52 | optional_device<decospr_device> m_sprgen1; |
| 53 | 53 | optional_device<decospr_device> m_sprgen2; |
| 54 | 54 | |
| 55 | optional_device<serial_ | |
| 55 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 56 | 56 | optional_device<okim6295_device> m_oki1; |
| 57 | 57 | optional_device<okim6295_device> m_oki2; |
| 58 | 58 |
| r24548 | r24549 | |
|---|---|---|
| 57 | 57 | INTERRUPT_GEN_MEMBER(irq4_gen); |
| 58 | 58 | void render_display_list(offs_t offset); |
| 59 | 59 | required_device<cpu_device> m_maincpu; |
| 60 | required_device<serial_ | |
| 60 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 61 | 61 | |
| 62 | 62 | protected: |
| 63 | 63 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| r24548 | r24549 | |
|---|---|---|
| 33 | 33 | required_shared_ptr<UINT32> m_mainram; |
| 34 | 34 | optional_shared_ptr<UINT32> m_scrollram; |
| 35 | 35 | optional_memory_region m_z80_rom; |
| 36 | optional_device<serial_ | |
| 36 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 37 | 37 | optional_device<intel_e28f008sa_device> m_soundflash1; |
| 38 | 38 | optional_device<intel_e28f008sa_device> m_soundflash2; |
| 39 | 39 | optional_device<fifo7200_device> m_soundfifo1; |
| r24548 | r24549 | |
|---|---|---|
| 37 | 37 | |
| 38 | 38 | /* devices */ |
| 39 | 39 | required_device<cpu_device> m_maincpu; |
| 40 | required_device<serial_ | |
| 40 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 41 | 41 | |
| 42 | 42 | DECLARE_WRITE32_MEMBER(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w); |
| 43 | 43 | DECLARE_WRITE32_MEMBER(ps4_bgpen_1_dword_w); |
| r24548 | r24549 | |
|---|---|---|
| 52 | 52 | #define MOO_DMADELAY (100) |
| 53 | 53 | |
| 54 | 54 | |
| 55 | static const serial_eeprom_interface eeprom_intf = | |
| 56 | { | |
| 57 | "011000", /* read command */ | |
| 58 | "011100", /* write command */ | |
| 59 | "0100100000000", /* erase command */ | |
| 60 | "0100000000000", /* lock command */ | |
| 61 | "0100110000000" /* unlock command */ | |
| 62 | }; | |
| 63 | ||
| 64 | 55 | READ16_MEMBER(moo_state::control2_r) |
| 65 | 56 | { |
| 66 | 57 | return m_cur_control2; |
| r24548 | r24549 | |
| 376 | 367 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 ) |
| 377 | 368 | |
| 378 | 369 | PORT_START("IN1") |
| 379 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 380 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 370 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 371 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 381 | 372 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 382 | 373 | PORT_SERVICE_NO_TOGGLE(0x08, IP_ACTIVE_LOW) |
| 383 | 374 | PORT_DIPNAME( 0x10, 0x00, "Sound Output") PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 392 | 383 | PORT_DIPSETTING( 0x80, "4") |
| 393 | 384 | |
| 394 | 385 | PORT_START( "EEPROMOUT" ) |
| 395 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 396 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 397 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 386 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 387 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 388 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 398 | 389 | |
| 399 | 390 | PORT_START("P1_P3") |
| 400 | 391 | KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 ) |
| r24548 | r24549 | |
| 506 | 497 | MCFG_MACHINE_START_OVERRIDE(moo_state,moo) |
| 507 | 498 | MCFG_MACHINE_RESET_OVERRIDE(moo_state,moo) |
| 508 | 499 | |
| 509 | MCFG_SERIAL_E | |
| 500 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 510 | 501 | |
| 511 | 502 | MCFG_K053252_ADD("k053252", 16000000/2, moo_k053252_intf) |
| 512 | 503 | |
| r24548 | r24549 | |
| 551 | 542 | MCFG_MACHINE_START_OVERRIDE(moo_state,moo) |
| 552 | 543 | MCFG_MACHINE_RESET_OVERRIDE(moo_state,moo) |
| 553 | 544 | |
| 554 | MCFG_SERIAL_E | |
| 545 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 555 | 546 | |
| 556 | 547 | /* video hardware */ |
| 557 | 548 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
|---|---|---|
| 818 | 818 | |
| 819 | 819 | MCFG_PALETTE_LENGTH(NUM_COLORS) |
| 820 | 820 | |
| 821 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 821 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 822 | 822 | |
| 823 | 823 | |
| 824 | 824 |
| r24548 | r24549 | |
|---|---|---|
| 94 | 94 | #include "sound/okim6295.h" |
| 95 | 95 | #include "machine/eepromser.h" |
| 96 | 96 | |
| 97 | static const serial_eeprom_interface qsound_eeprom_interface = | |
| 98 | { | |
| 99 | "0110", /* read command */ | |
| 100 | "0101", /* write command */ | |
| 101 | "0111" /* erase command */ | |
| 102 | }; | |
| 103 | ||
| 104 | 97 | WRITE16_MEMBER( cps_state::fcrash_soundlatch_w ) |
| 105 | 98 | { |
| 106 | 99 | if (ACCESSING_BITS_0_7) |
| r24548 | r24549 | |
| 1320 | 1313 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 ) |
| 1321 | 1314 | |
| 1322 | 1315 | PORT_START( "EEPROMIN" ) |
| 1323 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1316 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1324 | 1317 | |
| 1325 | 1318 | PORT_START( "EEPROMOUT" ) |
| 1326 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1327 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1328 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1319 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1320 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1321 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1329 | 1322 | INPUT_PORTS_END |
| 1330 | 1323 | |
| 1331 | 1324 | |
| r24548 | r24549 | |
| 1974 | 1967 | |
| 1975 | 1968 | MCFG_MACHINE_START_OVERRIDE(cps_state, dinopic) |
| 1976 | 1969 | |
| 1977 | MCFG_SERIAL_ | |
| 1970 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 1978 | 1971 | |
| 1979 | 1972 | /* video hardware */ |
| 1980 | 1973 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 2141 | 2134 | MCFG_PALETTE_LENGTH(0xc00) |
| 2142 | 2135 | MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) |
| 2143 | 2136 | |
| 2144 | MCFG_SERIAL_ | |
| 2137 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 2145 | 2138 | |
| 2146 | 2139 | /* sound hardware */ |
| 2147 | 2140 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| r24548 | r24549 | |
| 2219 | 2212 | |
| 2220 | 2213 | MCFG_MACHINE_START_OVERRIDE(cps_state, punipic) |
| 2221 | 2214 | |
| 2222 | MCFG_SERIAL_ | |
| 2215 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 2223 | 2216 | |
| 2224 | 2217 | /* video hardware */ |
| 2225 | 2218 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 2609 | 2602 | |
| 2610 | 2603 | MCFG_MACHINE_START_OVERRIDE(cps_state, slampic) |
| 2611 | 2604 | |
| 2612 | MCFG_SERIAL_ | |
| 2605 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 2613 | 2606 | |
| 2614 | 2607 | /* video hardware */ |
| 2615 | 2608 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 571 | 571 | |
| 572 | 572 | // NVRAM (5 x EEPROM) |
| 573 | 573 | |
| 574 | static const serial_eeprom_interface galgames_eeprom_interface = | |
| 575 | { | |
| 576 | "*1100", // read 110 0aaaaaaaaaa | |
| 577 | "*1010", // write 101 0aaaaaaaaaa dddddddd | |
| 578 | "*1110", // erase 111 0aaaaaaaaaa | |
| 579 | "*10000xxxxxxxxx", // lock 100 00xxxxxxxxx | |
| 580 | "*10011xxxxxxxxx", // unlock 100 11xxxxxxxxx | |
| 581 | 0, // multi_read | |
| 582 | 1 // reset_delay | |
| 583 | }; | |
| 584 | ||
| 585 | 574 | #define GALGAMES_EEPROM_BIOS "eeprom_bios" |
| 586 | 575 | #define GALGAMES_EEPROM_CART1 "eeprom_cart1" |
| 587 | 576 | #define GALGAMES_EEPROM_CART2 "eeprom_cart2" |
| r24548 | r24549 | |
| 592 | 581 | |
| 593 | 582 | READ16_MEMBER(tmaster_state::galgames_eeprom_r) |
| 594 | 583 | { |
| 595 | serial_ | |
| 584 | eeprom_serial_93cxx_device *eeprom = machine().device<eeprom_serial_93cxx_device>(galgames_eeprom_names[m_galgames_cart]); | |
| 596 | 585 | |
| 597 | return eeprom->read | |
| 586 | return eeprom->do_read() ? 0x80 : 0x00; | |
| 598 | 587 | } |
| 599 | 588 | |
| 600 | 589 | WRITE16_MEMBER(tmaster_state::galgames_eeprom_w) |
| r24548 | r24549 | |
| 604 | 593 | |
| 605 | 594 | if ( ACCESSING_BITS_0_7 ) |
| 606 | 595 | { |
| 607 | serial_ | |
| 596 | eeprom_serial_93cxx_device *eeprom = machine().device<eeprom_serial_93cxx_device>(galgames_eeprom_names[m_galgames_cart]); | |
| 608 | 597 | |
| 609 | 598 | // latch the bit |
| 610 | eeprom->write | |
| 599 | eeprom->di_write(data & 0x0001); | |
| 611 | 600 | |
| 612 | 601 | // clock line asserted: write latch or select next bit to read |
| 613 | eeprom-> | |
| 602 | eeprom->clk_write((data & 0x0002) ? ASSERT_LINE : CLEAR_LINE ); | |
| 614 | 603 | } |
| 615 | 604 | } |
| 616 | 605 | |
| r24548 | r24549 | |
| 677 | 666 | { |
| 678 | 667 | case 0x07: // 7 resets the eeprom |
| 679 | 668 | for (i = 0; i < 5; i++) |
| 680 | machine().device<serial_ | |
| 669 | machine().device<eeprom_serial_93cxx_device>(galgames_eeprom_names[i])->cs_write(CLEAR_LINE); | |
| 681 | 670 | break; |
| 682 | 671 | |
| 683 | 672 | case 0x00: |
| r24548 | r24549 | |
| 685 | 674 | case 0x02: |
| 686 | 675 | case 0x03: |
| 687 | 676 | case 0x04: |
| 688 | machine().device<serial_ | |
| 677 | machine().device<eeprom_serial_93cxx_device>(galgames_eeprom_names[data & 0xff])->cs_write(ASSERT_LINE); | |
| 689 | 678 | galgames_update_rombank(data & 0xff); |
| 690 | 679 | break; |
| 691 | 680 | |
| 692 | 681 | default: |
| 693 | machine().device<serial_ | |
| 682 | machine().device<eeprom_serial_93cxx_device>(galgames_eeprom_names[0])->cs_write(ASSERT_LINE); | |
| 694 | 683 | galgames_update_rombank(0); |
| 695 | 684 | logerror("%06x: unknown cart sel = %04x\n", space.device().safe_pc(), data); |
| 696 | 685 | break; |
| r24548 | r24549 | |
| 966 | 955 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmaster_state, tm3k_interrupt, "screen", 0, 1) |
| 967 | 956 | |
| 968 | 957 | // 5 EEPROMs on the motherboard (for BIOS + 4 Carts) |
| 969 | MCFG_SERIAL_EEPROM_ADD(GALGAMES_EEPROM_BIOS, 1024, 8, galgames_eeprom_interface) | |
| 970 | MCFG_SERIAL_EEPROM_ADD(GALGAMES_EEPROM_CART1, 1024, 8, galgames_eeprom_interface) | |
| 971 | MCFG_SERIAL_EEPROM_ADD(GALGAMES_EEPROM_CART2, 1024, 8, galgames_eeprom_interface) | |
| 972 | MCFG_SERIAL_EEPROM_ADD(GALGAMES_EEPROM_CART3, 1024, 8, galgames_eeprom_interface) | |
| 973 | MCFG_SERIAL_EEPROM_ADD(GALGAMES_EEPROM_CART4, 1024, 8, galgames_eeprom_interface) | |
| 958 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(GALGAMES_EEPROM_BIOS) | |
| 959 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(GALGAMES_EEPROM_CART1) | |
| 960 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(GALGAMES_EEPROM_CART2) | |
| 961 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(GALGAMES_EEPROM_CART3) | |
| 962 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD(GALGAMES_EEPROM_CART4) | |
| 974 | 963 | |
| 975 | 964 | MCFG_MACHINE_RESET_OVERRIDE(tmaster_state, galgames ) |
| 976 | 965 |
| r24548 | r24549 | |
|---|---|---|
| 413 | 413 | if(ACCESSING_BITS_0_7) |
| 414 | 414 | { |
| 415 | 415 | m_ctrlmode = data & 0x01; |
| 416 | m_eeprom->write_bit(data & 0x20); | |
| 417 | m_eeprom->set_clock_line((data & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 418 | m_eeprom->set_cs_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 416 | m_eeprom->di_write((data & 0x20) >> 5); | |
| 417 | m_eeprom->clk_write((data & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 418 | m_eeprom->cs_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 419 | 419 | } |
| 420 | 420 | } |
| 421 | 421 | |
| r24548 | r24549 | |
| 454 | 454 | else |
| 455 | 455 | { |
| 456 | 456 | ret &= ~0x0030; |
| 457 | return ret | 0x00d0 | (m_eeprom->read | |
| 457 | return ret | 0x00d0 | (m_eeprom->do_read() << 5); | |
| 458 | 458 | } |
| 459 | 459 | } |
| 460 | 460 | |
| r24548 | r24549 | |
| 1979 | 1979 | MCFG_MACHINE_START_OVERRIDE(model2_state,model2) |
| 1980 | 1980 | MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2o) |
| 1981 | 1981 | |
| 1982 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1982 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1983 | 1983 | MCFG_NVRAM_ADD_1FILL("backup1") |
| 1984 | 1984 | MCFG_NVRAM_ADD_1FILL("backup2") |
| 1985 | 1985 | |
| r24548 | r24549 | |
| 2038 | 2038 | MCFG_MACHINE_START_OVERRIDE(model2_state,model2) |
| 2039 | 2039 | MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2) |
| 2040 | 2040 | |
| 2041 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2041 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2042 | 2042 | MCFG_NVRAM_ADD_1FILL("backup1") |
| 2043 | 2043 | |
| 2044 | 2044 | MCFG_TIMER_DRIVER_ADD("timer0", model2_state, model2_timer_cb) |
| r24548 | r24549 | |
| 2141 | 2141 | MCFG_MACHINE_START_OVERRIDE(model2_state,model2) |
| 2142 | 2142 | MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2b) |
| 2143 | 2143 | |
| 2144 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2144 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2145 | 2145 | MCFG_NVRAM_ADD_1FILL("backup1") |
| 2146 | 2146 | |
| 2147 | 2147 | MCFG_TIMER_DRIVER_ADD("timer0", model2_state, model2_timer_cb) |
| r24548 | r24549 | |
| 2188 | 2188 | MCFG_MACHINE_START_OVERRIDE(model2_state,model2) |
| 2189 | 2189 | MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2c) |
| 2190 | 2190 | |
| 2191 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2191 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2192 | 2192 | MCFG_NVRAM_ADD_1FILL("backup1") |
| 2193 | 2193 | |
| 2194 | 2194 | MCFG_TIMER_DRIVER_ADD("timer0", model2_state, model2_timer_cb) |
| r24548 | r24549 | |
|---|---|---|
| 173 | 173 | required_device<cpu_device> m_maincpu; |
| 174 | 174 | optional_device<okim6295_device> m_oki; |
| 175 | 175 | optional_device<okim6295_device> m_oki2; |
| 176 | required_device<serial_ | |
| 176 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 177 | 177 | }; |
| 178 | 178 | |
| 179 | 179 | READ16_MEMBER(vamphalf_state::eeprom_r) |
| 180 | 180 | { |
| 181 | 181 | if(offset) |
| 182 | 182 | { |
| 183 | return m_eeprom->read | |
| 183 | return m_eeprom->do_read(); | |
| 184 | 184 | } |
| 185 | 185 | else |
| 186 | 186 | return 0; |
| r24548 | r24549 | |
| 188 | 188 | |
| 189 | 189 | READ32_MEMBER(vamphalf_state::eeprom32_r) |
| 190 | 190 | { |
| 191 | return m_eeprom->read | |
| 191 | return m_eeprom->do_read(); | |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | WRITE16_MEMBER(vamphalf_state::eeprom_w) |
| 195 | 195 | { |
| 196 | 196 | if(offset) |
| 197 | 197 | { |
| 198 | m_eeprom->write_bit(data & 0x01); | |
| 199 | m_eeprom->set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE ); | |
| 200 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 198 | m_eeprom->di_write(data & 0x01); | |
| 199 | m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 200 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 201 | 201 | |
| 202 | 202 | // data & 8? |
| 203 | 203 | } |
| r24548 | r24549 | |
| 205 | 205 | |
| 206 | 206 | WRITE32_MEMBER(vamphalf_state::eeprom32_w) |
| 207 | 207 | { |
| 208 | m_eeprom->write_bit(data & 0x01); | |
| 209 | m_eeprom->set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE ); | |
| 210 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 208 | m_eeprom->di_write(data & 0x01); | |
| 209 | m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 210 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 211 | 211 | } |
| 212 | 212 | |
| 213 | 213 | WRITE32_MEMBER(vamphalf_state::finalgdr_eeprom_w) |
| 214 | 214 | { |
| 215 | m_eeprom->write_bit(data & 0x4000); | |
| 216 | m_eeprom->set_cs_line((data & 0x1000) ? CLEAR_LINE : ASSERT_LINE ); | |
| 217 | m_eeprom->set_clock_line((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 215 | m_eeprom->di_write((data & 0x4000) >> 14); | |
| 216 | m_eeprom->cs_write((data & 0x1000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 217 | m_eeprom->clk_write((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 218 | 218 | } |
| 219 | 219 | |
| 220 | 220 | WRITE16_MEMBER(vamphalf_state::flipscreen_w) |
| r24548 | r24549 | |
| 885 | 885 | PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_START2 ) |
| 886 | 886 | PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 887 | 887 | PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 888 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 888 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // eeprom bit | |
| 889 | 889 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 890 | 890 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 891 | 891 | PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 982 | 982 | MCFG_CPU_PROGRAM_MAP(common_map) |
| 983 | 983 | MCFG_CPU_VBLANK_INT_DRIVER("screen", vamphalf_state, irq1_line_hold) |
| 984 | 984 | |
| 985 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 985 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 986 | 986 | |
| 987 | 987 | /* video hardware */ |
| 988 | 988 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1113 | 1113 | MCFG_CPU_IO_MAP(aoh_io) |
| 1114 | 1114 | MCFG_CPU_VBLANK_INT_DRIVER("screen", vamphalf_state, irq1_line_hold) |
| 1115 | 1115 | |
| 1116 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1116 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1117 | 1117 | |
| 1118 | 1118 | /* video hardware */ |
| 1119 | 1119 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 1583 | 1583 | |
| 1584 | 1584 | READ8_MEMBER(dkong_state::braze_eeprom_r) |
| 1585 | 1585 | { |
| 1586 | return m_eeprom->read | |
| 1586 | return m_eeprom->do_read(); | |
| 1587 | 1587 | } |
| 1588 | 1588 | |
| 1589 | 1589 | WRITE8_MEMBER(dkong_state::braze_a15_w) |
| r24548 | r24549 | |
| 1594 | 1594 | |
| 1595 | 1595 | WRITE8_MEMBER(dkong_state::braze_eeprom_w) |
| 1596 | 1596 | { |
| 1597 | m_eeprom->write_bit(data & 0x01); | |
| 1598 | m_eeprom->set_cs_line(data & 0x04 ? CLEAR_LINE : ASSERT_LINE); | |
| 1599 | m_eeprom->set_clock_line(data & 0x02 ? ASSERT_LINE : CLEAR_LINE); | |
| 1597 | m_eeprom->di_write(data & 0x01); | |
| 1598 | m_eeprom->cs_write(data & 0x04 ? ASSERT_LINE : CLEAR_LINE); | |
| 1599 | m_eeprom->clk_write(data & 0x02 ? ASSERT_LINE : CLEAR_LINE); | |
| 1600 | 1600 | } |
| 1601 | 1601 | |
| 1602 | 1602 | void dkong_state::braze_decrypt_rom(UINT8 *dest) |
| r24548 | r24549 | |
| 1690 | 1690 | |
| 1691 | 1691 | static MACHINE_CONFIG_DERIVED( braze, dkong2b ) |
| 1692 | 1692 | |
| 1693 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 1693 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 1694 | 1694 | MACHINE_CONFIG_END |
| 1695 | 1695 | |
| 1696 | 1696 | static MACHINE_CONFIG_START( dkong3, dkong_state ) |
| r24548 | r24549 | |
|---|---|---|
| 313 | 313 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,subcpu_int_r, NULL) // SUBCPU INT FLAG |
| 314 | 314 | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,sndcpu_nmi_r, NULL) // SNDCPU NMI FLAG |
| 315 | 315 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,subcpu_nmi_r, NULL) // SUBCPU NMI FLAG |
| 316 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 316 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 317 | 317 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( "Service Mode (1P)" ) PORT_CODE(KEYCODE_F2) // TEST (1P) |
| 318 | 318 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( "Service Mode (2P)" ) PORT_CODE(KEYCODE_F2) // TEST (2P) |
| 319 | 319 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 396 | 396 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 397 | 397 | |
| 398 | 398 | PORT_START( "EEPROMOUT" ) |
| 399 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 400 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 401 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 399 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 400 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 401 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 402 | 402 | INPUT_PORTS_END |
| 403 | 403 | |
| 404 | 404 | static INPUT_PORTS_START( fromanc4 ) |
| r24548 | r24549 | |
| 412 | 412 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_COIN4 ) |
| 413 | 413 | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,sndcpu_nmi_r, NULL) // SNDCPU NMI FLAG |
| 414 | 414 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 415 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 415 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 416 | 416 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 417 | 417 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 418 | 418 | |
| 419 | 419 | PORT_MODIFY("EEPROMOUT") |
| 420 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 421 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 422 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 420 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 421 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 422 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 423 | 423 | INPUT_PORTS_END |
| 424 | 424 | |
| 425 | 425 | |
| r24548 | r24549 | |
| 534 | 534 | |
| 535 | 535 | MCFG_MACHINE_START_OVERRIDE(fromanc2_state,fromanc2) |
| 536 | 536 | |
| 537 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 537 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 538 | 538 | |
| 539 | 539 | /* video hardware */ |
| 540 | 540 | MCFG_GFXDECODE(fromanc2) |
| r24548 | r24549 | |
| 584 | 584 | |
| 585 | 585 | MCFG_MACHINE_START_OVERRIDE(fromanc2_state,fromanc2) |
| 586 | 586 | |
| 587 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 587 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 588 | 588 | |
| 589 | 589 | /* video hardware */ |
| 590 | 590 | MCFG_GFXDECODE(fromancr) |
| r24548 | r24549 | |
| 630 | 630 | |
| 631 | 631 | MCFG_MACHINE_START_OVERRIDE(fromanc2_state,fromanc4) |
| 632 | 632 | |
| 633 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 633 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 634 | 634 | |
| 635 | 635 | /* video hardware */ |
| 636 | 636 | MCFG_GFXDECODE(fromancr) |
| r24548 | r24549 | |
|---|---|---|
| 142 | 142 | |
| 143 | 143 | if (ACCESSING_BITS_0_7) |
| 144 | 144 | { |
| 145 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 146 | m_eeprom->write_bit(data & 0x40); | |
| 147 | m_eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE); | |
| 145 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 146 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 147 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 148 | 148 | return; |
| 149 | 149 | } |
| 150 | 150 | |
| r24548 | r24549 | |
| 223 | 223 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 224 | 224 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 225 | 225 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 226 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 226 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* reserved for EEROM */ | |
| 227 | 227 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Seat Center") /* seat center (cockpit only) */ |
| 228 | 228 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 229 | 229 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 303 | 303 | MACHINE DRIVERS |
| 304 | 304 | ***********************************************************/ |
| 305 | 305 | |
| 306 | static const serial_eeprom_interface superchs_eeprom_interface = | |
| 307 | { | |
| 308 | "0110", /* read command */ | |
| 309 | "0101", /* write command */ | |
| 310 | "0111", /* erase command */ | |
| 311 | "0100000000", /* unlock command */ | |
| 312 | "0100110000", /* lock command */ | |
| 313 | }; | |
| 314 | ||
| 315 | 306 | static const tc0480scp_interface superchs_tc0480scp_intf = |
| 316 | 307 | { |
| 317 | 308 | 1, 2, /* gfxnum, txnum */ |
| r24548 | r24549 | |
| 335 | 326 | |
| 336 | 327 | MCFG_QUANTUM_TIME(attotime::from_hz(480)) /* Need to interleave CPU 1 & 3 */ |
| 337 | 328 | |
| 338 | MCFG_SERIAL_ | |
| 329 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 339 | 330 | |
| 340 | 331 | /* video hardware */ |
| 341 | 332 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 235 | 235 | PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) |
| 236 | 236 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 237 | 237 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 238 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 238 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 239 | 239 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, inufuku_state,soundflag_r, NULL) // pending sound command |
| 240 | 240 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 3on3dunk cares about something in here, possibly a vblank flag |
| 241 | 241 | |
| 242 | 242 | PORT_START( "EEPROMOUT" ) |
| 243 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 244 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 245 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 243 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 244 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 245 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 246 | 246 | |
| 247 | 247 | PORT_START("P3") |
| 248 | 248 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) |
| r24548 | r24549 | |
| 375 | 375 | /* IRQs are triggered by the YM2610 */ |
| 376 | 376 | |
| 377 | 377 | |
| 378 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 378 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 379 | 379 | |
| 380 | 380 | /* video hardware */ |
| 381 | 381 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 269 | 269 | |
| 270 | 270 | READ16_MEMBER(tecmosys_state::eeprom_r) |
| 271 | 271 | { |
| 272 | return ((m_eeprom->read | |
| 272 | return ((m_eeprom->do_read() & 0x01) << 11); | |
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | WRITE16_MEMBER(tecmosys_state::eeprom_w) |
| 276 | 276 | { |
| 277 | 277 | if ( ACCESSING_BITS_8_15 ) |
| 278 | 278 | { |
| 279 | m_eeprom->write_bit(data & 0x0800); | |
| 280 | m_eeprom->set_cs_line((data & 0x0200) ? CLEAR_LINE : ASSERT_LINE ); | |
| 281 | m_eeprom->set_clock_line((data & 0x0400) ? CLEAR_LINE: ASSERT_LINE ); | |
| 279 | m_eeprom->di_write((data & 0x0800) >> 11); | |
| 280 | m_eeprom->cs_write((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE ); | |
| 281 | m_eeprom->clk_write((data & 0x0400) ? CLEAR_LINE: ASSERT_LINE ); | |
| 282 | 282 | } |
| 283 | 283 | } |
| 284 | 284 | |
| r24548 | r24549 | |
| 456 | 456 | |
| 457 | 457 | MCFG_GFXDECODE(tecmosys) |
| 458 | 458 | |
| 459 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 459 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 460 | 460 | |
| 461 | 461 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) |
| 462 | 462 |
| r24548 | r24549 | |
|---|---|---|
| 104 | 104 | { |
| 105 | 105 | if (ACCESSING_BITS_8_15) |
| 106 | 106 | { |
| 107 | return ((m_eeprom->read | |
| 107 | return ((m_eeprom->do_read() & 0x01) << 15); | |
| 108 | 108 | } |
| 109 | 109 | |
| 110 | 110 | // logerror("(0x%06x) unk EEPROM read: %04x\n", space.device().safe_pc(), mem_mask); |
| r24548 | r24549 | |
| 455 | 455 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 456 | 456 | |
| 457 | 457 | PORT_START( "EEPROMOUT" ) |
| 458 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 459 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 460 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 458 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 459 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 460 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 461 | 461 | INPUT_PORTS_END |
| 462 | 462 | |
| 463 | 463 | |
| r24548 | r24549 | |
| 492 | 492 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 493 | 493 | |
| 494 | 494 | PORT_START( "EEPROMOUT" ) |
| 495 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 496 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 497 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 495 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 496 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 497 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 498 | 498 | INPUT_PORTS_END |
| 499 | 499 | |
| 500 | 500 | /*************************************************************************** |
| r24548 | r24549 | |
| 668 | 668 | MCFG_CPU_MODIFY("maincpu") |
| 669 | 669 | MCFG_CPU_PROGRAM_MAP(hedpanic_map) |
| 670 | 670 | |
| 671 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 671 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 672 | 672 | MACHINE_CONFIG_END |
| 673 | 673 | |
| 674 | 674 | /* The ESD 08-26-1999 PCBs take that further and modify the sprite offsets */ |
| r24548 | r24549 | |
|---|---|---|
| 280 | 280 | PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_START1 ) |
| 281 | 281 | PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_START2 ) |
| 282 | 282 | PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 283 | PORT_BIT( 0x00000008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 283 | PORT_BIT( 0x00000008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 284 | 284 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 285 | 285 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 286 | 286 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, eolith_state, eolith_speedup_getvblank, NULL) |
| r24548 | r24549 | |
| 316 | 316 | PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 317 | 317 | |
| 318 | 318 | PORT_START( "EEPROMOUT" ) |
| 319 | PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 320 | PORT_BIT( 0x00000004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 321 | PORT_BIT( 0x00000008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 319 | PORT_BIT( 0x00000002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 320 | PORT_BIT( 0x00000004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 321 | PORT_BIT( 0x00000008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 322 | 322 | INPUT_PORTS_END |
| 323 | 323 | |
| 324 | 324 | static INPUT_PORTS_START( linkypip ) |
| r24548 | r24549 | |
| 539 | 539 | |
| 540 | 540 | /************************************* |
| 541 | 541 | * |
| 542 | * EEPROM interface | |
| 543 | * | |
| 544 | *************************************/ | |
| 545 | ||
| 546 | // It's configured for 512 bytes | |
| 547 | static const serial_eeprom_interface eeprom_interface_93C66 = | |
| 548 | { | |
| 549 | "*110", // read 110 aaaaaaaaa | |
| 550 | "*101", // write 101 aaaaaaaaa dddddddd | |
| 551 | "*111", // erase 111 aaaaaaaaa | |
| 552 | "*10000xxxxxx", // lock 100 00xxxxxxx | |
| 553 | "*10011xxxxxx" // unlock 100 11xxxxxxx | |
| 554 | }; | |
| 555 | ||
| 556 | ||
| 557 | /************************************* | |
| 558 | * | |
| 559 | 542 | * QS1000 interface |
| 560 | 543 | * |
| 561 | 544 | *************************************/ |
| r24548 | r24549 | |
| 595 | 578 | |
| 596 | 579 | MCFG_MACHINE_RESET_OVERRIDE(eolith_state,eolith) |
| 597 | 580 | |
| 598 | MCFG_SERIAL_ | |
| 581 | MCFG_EEPROM_SERIAL_93C66_8BIT_ADD("eeprom") | |
| 599 | 582 | |
| 600 | 583 | // for testing sound sync |
| 601 | 584 | // MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| r24548 | r24549 | |
|---|---|---|
| 72 | 72 | #define XE_SKIPIDLE 1 |
| 73 | 73 | #define XE_DMADELAY attotime::from_usec(256) |
| 74 | 74 | |
| 75 | static const serial_eeprom_interface eeprom_intf = | |
| 76 | { | |
| 77 | "011000", /* read command */ | |
| 78 | "011100", /* write command */ | |
| 79 | "0100100000000",/* erase command */ | |
| 80 | "0100000000000",/* lock command */ | |
| 81 | "0100110000000" /* unlock command */ | |
| 82 | }; | |
| 83 | ||
| 84 | 75 | #if 0 // (for reference; do not remove) |
| 85 | 76 | |
| 86 | 77 | /* the interface with the 053247 is weird. The chip can address only 0x1000 bytes */ |
| r24548 | r24549 | |
| 377 | 368 | KONAMI16_LSB(2, IPT_UNKNOWN, IPT_START2 ) |
| 378 | 369 | |
| 379 | 370 | PORT_START("EEPROM") |
| 380 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 381 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 371 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 372 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 382 | 373 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 383 | 374 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 384 | 375 | PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 385 | 376 | |
| 386 | 377 | PORT_START( "EEPROMOUT" ) |
| 387 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 388 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 389 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 378 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 379 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 380 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 390 | 381 | INPUT_PORTS_END |
| 391 | 382 | |
| 392 | 383 | |
| r24548 | r24549 | |
| 492 | 483 | |
| 493 | 484 | MCFG_QUANTUM_TIME(attotime::from_hz(1920)) |
| 494 | 485 | |
| 486 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 495 | 487 | |
| 496 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 497 | ||
| 498 | 488 | /* video hardware */ |
| 499 | 489 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_BEFORE_VBLANK) |
| 500 | 490 |
| r24548 | r24549 | |
|---|---|---|
| 150 | 150 | GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x80 ) // 8bpp tiles |
| 151 | 151 | GFXDECODE_END |
| 152 | 152 | |
| 153 | static const serial_eeprom_interface eeprom_interface_93C56 = | |
| 154 | { | |
| 155 | "*110x", // read 110x aaaaaaaa | |
| 156 | "*101x", // write 101x aaaaaaaa dddddddd | |
| 157 | "*111x", // erase 111x aaaaaaaa | |
| 158 | "*10000xxxxxxx",// lock 100x 00xxxx | |
| 159 | "*10011xxxxxxx",// unlock 100x 11xxxx | |
| 160 | // "*10001xxxx", // write all 1 00 01xxxx dddddddddddddddd | |
| 161 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 162 | }; | |
| 163 | ||
| 164 | 153 | WRITE32_MEMBER(psikyo4_state::ps4_eeprom_w) |
| 165 | 154 | { |
| 166 | 155 | if (ACCESSING_BITS_16_31) |
| 167 | 156 | { |
| 168 | m_eeprom->write_bit((data & 0x00200000) ? 1 : 0); | |
| 169 | m_eeprom->set_cs_line((data & 0x00800000) ? CLEAR_LINE : ASSERT_LINE); | |
| 170 | m_eeprom->set_clock_line((data & 0x00400000) ? ASSERT_LINE : CLEAR_LINE); | |
| 157 | m_eeprom->di_write((data & 0x00200000) ? 1 : 0); | |
| 158 | m_eeprom->cs_write((data & 0x00800000) ? ASSERT_LINE : CLEAR_LINE); | |
| 159 | m_eeprom->clk_write((data & 0x00400000) ? ASSERT_LINE : CLEAR_LINE); | |
| 171 | 160 | |
| 172 | 161 | return; |
| 173 | 162 | } |
| r24548 | r24549 | |
| 383 | 372 | |
| 384 | 373 | PORT_START("JP4")/* jumper pads 'JP4' on the PCB */ |
| 385 | 374 | /* EEPROM is read here */ |
| 386 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 375 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 387 | 376 | |
| 388 | 377 | PORT_START("SYSTEM") /* system inputs */ |
| 389 | 378 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // Screen 1 |
| r24548 | r24549 | |
| 558 | 547 | PORT_DIPSETTING( 0x00000000, "Japan (Shows Version Number)" ) |
| 559 | 548 | PORT_DIPSETTING( 0x00010000, "World (Does Not Show Version Number)" ) |
| 560 | 549 | /* EEPROM is read here */ |
| 561 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 550 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 562 | 551 | INPUT_PORTS_END |
| 563 | 552 | |
| 564 | 553 | /* unused inputs also act as duplicate buttons */ |
| r24548 | r24549 | |
| 637 | 626 | |
| 638 | 627 | PORT_START("JP4")/* jumper pads 'JP4' on the PCB */ |
| 639 | 628 | /* EEPROM is read here */ |
| 640 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 629 | PORT_BIT( 0x00100000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 641 | 630 | INPUT_PORTS_END |
| 642 | 631 | |
| 643 | 632 | |
| r24548 | r24549 | |
| 667 | 656 | MCFG_CPU_VBLANK_INT_DRIVER("lscreen", psikyo4_state, psikyosh_interrupt) |
| 668 | 657 | |
| 669 | 658 | |
| 670 | MCFG_SERIAL_EEPROM_ADD("eeprom", 256, 8, eeprom_interface_93C56) | |
| 671 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 659 | MCFG_EEPROM_SERIAL_93C56_8BIT_ADD("eeprom") | |
| 660 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 672 | 661 | |
| 673 | 662 | /* video hardware */ |
| 674 | 663 | MCFG_GFXDECODE(ps4) |
| r24548 | r24549 | |
|---|---|---|
| 506 | 506 | m_eeprom_bit_count++; |
| 507 | 507 | if (m_eeprom_bit_count != 9) /* kill extra bit at end of address */ |
| 508 | 508 | { |
| 509 | m_eeprom->write_bit(data >> 31); | |
| 510 | m_eeprom->set_clock_line(PULSE_LINE); | |
| 509 | m_eeprom->di_write(data >> 31); | |
| 510 | m_eeprom->clk_write(PULSE_LINE); | |
| 511 | 511 | } |
| 512 | 512 | } |
| 513 | 513 | |
| 514 | 514 | READ32_MEMBER(jaguar_state::eeprom_clk) |
| 515 | 515 | { |
| 516 | m_eeprom-> | |
| 516 | m_eeprom->clk_write(PULSE_LINE); /* get next bit when reading */ | |
| 517 | 517 | return 0; |
| 518 | 518 | } |
| 519 | 519 | |
| 520 | 520 | READ32_MEMBER(jaguar_state::eeprom_cs) |
| 521 | 521 | { |
| 522 | m_eeprom->set_cs_line(ASSERT_LINE); /* must do at end of an operation */ | |
| 523 | m_eeprom->set_cs_line(CLEAR_LINE); /* enable chip for next operation */ | |
| 524 | m_eeprom->write_bit(1); /* write a start bit */ | |
| 525 | m_eeprom->set_clock_line(PULSE_LINE); | |
| 522 | m_eeprom->cs_write(CLEAR_LINE); /* must do at end of an operation */ | |
| 523 | m_eeprom->cs_write(ASSERT_LINE); /* enable chip for next operation */ | |
| 524 | m_eeprom->di_write(1); /* write a start bit */ | |
| 525 | m_eeprom->clk_write(PULSE_LINE); | |
| 526 | 526 | m_eeprom_bit_count = 0; |
| 527 | 527 | return 0; |
| 528 | 528 | } |
| r24548 | r24549 | |
| 662 | 662 | } |
| 663 | 663 | } |
| 664 | 664 | |
| 665 | joystick_result |= m_eeprom->read | |
| 665 | joystick_result |= m_eeprom->do_read(); | |
| 666 | 666 | joybuts_result |= (ioport("CONFIG")->read() & 0x10); |
| 667 | 667 | |
| 668 | 668 | return (joystick_result << 16) | joybuts_result; |
| r24548 | r24549 | |
| 1630 | 1630 | /* software lists */ |
| 1631 | 1631 | MCFG_SOFTWARE_LIST_ADD("cart_list","jaguar") |
| 1632 | 1632 | |
| 1633 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1633 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1634 | 1634 | MACHINE_CONFIG_END |
| 1635 | 1635 | |
| 1636 | 1636 |
| r24548 | r24549 | |
|---|---|---|
| 73 | 73 | INTERRUPT_GEN_MEMBER(rdx_v33_interrupt); |
| 74 | 74 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri); |
| 75 | 75 | required_device<cpu_device> m_maincpu; |
| 76 | optional_device<serial_ | |
| 76 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 77 | 77 | }; |
| 78 | 78 | |
| 79 | 79 | |
| r24548 | r24549 | |
| 272 | 272 | { |
| 273 | 273 | if (ACCESSING_BITS_0_7) |
| 274 | 274 | { |
| 275 | m_eeprom->set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 276 | m_eeprom->write_bit(data & 0x20); | |
| 277 | m_eeprom->set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE); | |
| 275 | m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 276 | m_eeprom->di_write((data & 0x20) >> 5); | |
| 277 | m_eeprom->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); | |
| 278 | 278 | |
| 279 | 279 | if (data&0xc7) logerror("eeprom_w extra bits used %04x\n",data); |
| 280 | 280 | } |
| r24548 | r24549 | |
| 568 | 568 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 ) |
| 569 | 569 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 570 | 570 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 571 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 571 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 572 | 572 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 573 | 573 | PORT_DIPNAME( 0x0040, 0x0040, "Test Mode" ) |
| 574 | 574 | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
| r24548 | r24549 | |
| 606 | 606 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 ) |
| 607 | 607 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 608 | 608 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 609 | //PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 609 | //PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 610 | 610 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 611 | 611 | PORT_DIPNAME( 0x0040, 0x0040, "Test Mode" ) |
| 612 | 612 | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
| r24548 | r24549 | |
| 696 | 696 | |
| 697 | 697 | //MCFG_MACHINE_RESET_OVERRIDE(r2dx_v33_state,rdx_v33) |
| 698 | 698 | |
| 699 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 699 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 700 | 700 | |
| 701 | 701 | /* video hardware */ |
| 702 | 702 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 612 | 612 | MCFG_DEVICE_ADD("toybox", KANEKO_TOYBOX, 0) |
| 613 | 613 | |
| 614 | 614 | |
| 615 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 615 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 616 | 616 | |
| 617 | 617 | /* sound hardware */ |
| 618 | 618 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r24548 | r24549 | |
|---|---|---|
| 119 | 119 | PORT_BIT( 0xff000000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 120 | 120 | |
| 121 | 121 | PORT_START( "EEPROMIN" ) |
| 122 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 122 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 123 | 123 | |
| 124 | 124 | PORT_START( "EEPROMOUT" ) |
| 125 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 125 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 126 | 126 | |
| 127 | 127 | PORT_START( "EEPROMCLK" ) |
| 128 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 128 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 129 | 129 | |
| 130 | 130 | PORT_START( "EEPROMCS" ) |
| 131 | PORT_BIT( 0x00000001, IP_ACTIVE_ | |
| 131 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 132 | 132 | INPUT_PORTS_END |
| 133 | 133 | |
| 134 | 134 | static MACHINE_CONFIG_START( mosaicf2, mosaicf2_state ) |
| r24548 | r24549 | |
| 139 | 139 | MCFG_CPU_IO_MAP(mosaicf2_io) |
| 140 | 140 | MCFG_CPU_VBLANK_INT_DRIVER("screen", mosaicf2_state, irq0_line_hold) |
| 141 | 141 | |
| 142 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 142 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 143 | 143 | |
| 144 | 144 | /* video hardware */ |
| 145 | 145 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 306 | 306 | GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x100 ) // 8bpp tiles |
| 307 | 307 | GFXDECODE_END |
| 308 | 308 | |
| 309 | static const serial_eeprom_interface eeprom_interface_93C56 = | |
| 310 | { | |
| 311 | "*110x", // read 110x aaaaaaaa | |
| 312 | "*101x", // write 101x aaaaaaaa dddddddd | |
| 313 | "*111x", // erase 111x aaaaaaaa | |
| 314 | "*10000xxxxxxx",// lock 100x 00xxxx | |
| 315 | "*10011xxxxxxx",// unlock 100x 11xxxx | |
| 316 | // "*10001xxxx", // write all 1 00 01xxxx dddddddddddddddd | |
| 317 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 318 | }; | |
| 319 | ||
| 320 | 309 | WRITE32_MEMBER(psikyosh_state::psh_eeprom_w) |
| 321 | 310 | { |
| 322 | 311 | if (ACCESSING_BITS_24_31) |
| 323 | 312 | { |
| 324 | m_eeprom->write_bit((data & 0x20000000) ? 1 : 0); | |
| 325 | m_eeprom->set_cs_line((data & 0x80000000) ? CLEAR_LINE : ASSERT_LINE); | |
| 326 | m_eeprom->set_clock_line((data & 0x40000000) ? ASSERT_LINE : CLEAR_LINE); | |
| 313 | m_eeprom->di_write((data & 0x20000000) ? 1 : 0); | |
| 314 | m_eeprom->cs_write((data & 0x80000000) ? ASSERT_LINE : CLEAR_LINE); | |
| 315 | m_eeprom->clk_write((data & 0x40000000) ? ASSERT_LINE : CLEAR_LINE); | |
| 327 | 316 | |
| 328 | 317 | return; |
| 329 | 318 | } |
| r24548 | r24549 | |
| 604 | 593 | PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Region ) ) |
| 605 | 594 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 606 | 595 | PORT_DIPSETTING( 0x01000000, DEF_STR( World ) ) |
| 607 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 596 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 608 | 597 | INPUT_PORTS_END |
| 609 | 598 | |
| 610 | 599 | static INPUT_PORTS_START( soldivid ) |
| r24548 | r24549 | |
| 614 | 603 | PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Region ) ) |
| 615 | 604 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 616 | 605 | PORT_DIPSETTING( 0x01000000, DEF_STR( World ) ) |
| 617 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 606 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 618 | 607 | INPUT_PORTS_END |
| 619 | 608 | |
| 620 | 609 | static INPUT_PORTS_START( daraku ) |
| r24548 | r24549 | |
| 632 | 621 | PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Region ) ) |
| 633 | 622 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 634 | 623 | PORT_DIPSETTING( 0x01000000, DEF_STR( World ) ) /* Title screen is different, English is default now */ |
| 635 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 624 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 636 | 625 | INPUT_PORTS_END |
| 637 | 626 | |
| 638 | 627 | static INPUT_PORTS_START( sbomberb ) |
| r24548 | r24549 | |
| 647 | 636 | PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Region ) ) |
| 648 | 637 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 649 | 638 | PORT_DIPSETTING( 0x01000000, DEF_STR( World ) ) |
| 650 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 639 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 651 | 640 | INPUT_PORTS_END |
| 652 | 641 | |
| 653 | 642 | static INPUT_PORTS_START( gunbird2 ) /* Different Region */ |
| r24548 | r24549 | |
| 659 | 648 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 660 | 649 | PORT_DIPSETTING( 0x01000000, "International Ver A." ) |
| 661 | 650 | PORT_DIPSETTING( 0x02000000, "International Ver B." ) |
| 662 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 651 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 663 | 652 | INPUT_PORTS_END |
| 664 | 653 | |
| 665 | 654 | static INPUT_PORTS_START( s1945iii ) /* Different Region again */ |
| r24548 | r24549 | |
| 671 | 660 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 672 | 661 | PORT_DIPSETTING( 0x02000000, "International Ver A." ) |
| 673 | 662 | PORT_DIPSETTING( 0x01000000, "International Ver B." ) |
| 674 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 663 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 675 | 664 | INPUT_PORTS_END |
| 676 | 665 | |
| 677 | 666 | static INPUT_PORTS_START( dragnblz ) /* Security requires bit high */ |
| r24548 | r24549 | |
| 687 | 676 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 688 | 677 | PORT_DIPSETTING( 0x02000000, "International Ver A." ) |
| 689 | 678 | PORT_DIPSETTING( 0x01000000, "International Ver B." ) |
| 690 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 679 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 691 | 680 | INPUT_PORTS_END |
| 692 | 681 | |
| 693 | 682 | static INPUT_PORTS_START( gnbarich ) /* Same as S1945iii except only one button */ |
| r24548 | r24549 | |
| 699 | 688 | PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 700 | 689 | PORT_DIPSETTING( 0x02000000, "International Ver A." ) |
| 701 | 690 | PORT_DIPSETTING( 0x01000000, "International Ver B." ) |
| 702 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 691 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 703 | 692 | INPUT_PORTS_END |
| 704 | 693 | |
| 705 | 694 | static INPUT_PORTS_START( tgm2 ) |
| r24548 | r24549 | |
| 720 | 709 | // PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 721 | 710 | // PORT_DIPSETTING( 0x02000000, "International Ver A." ) |
| 722 | 711 | // PORT_DIPSETTING( 0x01000000, "International Ver B." ) |
| 723 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 712 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 724 | 713 | INPUT_PORTS_END |
| 725 | 714 | |
| 726 | 715 | static INPUT_PORTS_START( mjgtaste ) |
| r24548 | r24549 | |
| 774 | 763 | // PORT_DIPSETTING( 0x00000000, DEF_STR( Japan ) ) |
| 775 | 764 | // PORT_DIPSETTING( 0x02000000, "International Ver A." ) |
| 776 | 765 | // PORT_DIPSETTING( 0x01000000, "International Ver B." ) |
| 777 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 766 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 778 | 767 | INPUT_PORTS_END |
| 779 | 768 | |
| 780 | 769 | |
| r24548 | r24549 | |
| 798 | 787 | MCFG_CPU_VBLANK_INT_DRIVER("screen", psikyosh_state, psikyosh_interrupt) |
| 799 | 788 | |
| 800 | 789 | |
| 801 | MCFG_SERIAL_EEPROM_ADD("eeprom", 256, 8, eeprom_interface_93C56) | |
| 802 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 790 | MCFG_EEPROM_SERIAL_93C56_8BIT_ADD("eeprom") | |
| 791 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 803 | 792 | |
| 804 | 793 | /* video hardware */ |
| 805 | 794 | MCFG_BUFFERED_SPRITERAM32_ADD("spriteram") /* If using alpha */ |
| r24548 | r24549 | |
|---|---|---|
| 679 | 679 | * |
| 680 | 680 | *************************************/ |
| 681 | 681 | |
| 682 | static const serial_eeprom_interface cps2_eeprom_interface = | |
| 683 | { | |
| 684 | "0110", /* read command */ | |
| 685 | "0101", /* write command */ | |
| 686 | "0111" /* erase command */ | |
| 687 | }; | |
| 688 | ||
| 689 | 682 | WRITE16_MEMBER( cps_state::cps2_eeprom_port_w ) |
| 690 | 683 | { |
| 691 | 684 | if (ACCESSING_BITS_8_15) |
| r24548 | r24549 | |
| 934 | 927 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) |
| 935 | 928 | |
| 936 | 929 | PORT_START("IN2") /* (0x20) */ |
| 937 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 930 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 938 | 931 | PORT_SERVICE_NO_TOGGLE( 0x0002, IP_ACTIVE_LOW ) |
| 939 | 932 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 940 | 933 | PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 948 | 941 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN4 ) |
| 949 | 942 | |
| 950 | 943 | PORT_START( "EEPROMOUT" ) |
| 951 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 952 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 953 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 944 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 945 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 946 | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 954 | 947 | |
| 955 | 948 | /* fake inputs for digital volume buttons */ |
| 956 | 949 | PORT_START( "DIGITALVOL" ) |
| r24548 | r24549 | |
| 1256 | 1249 | |
| 1257 | 1250 | MCFG_MACHINE_START_OVERRIDE(cps_state,cps2) |
| 1258 | 1251 | |
| 1259 | MCFG_SERIAL_ | |
| 1252 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1260 | 1253 | |
| 1261 | 1254 | /* video hardware */ |
| 1262 | 1255 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| r24548 | r24549 | |
|---|---|---|
| 38 | 38 | |
| 39 | 39 | |
| 40 | 40 | |
| 41 | // It's configured for 512 bytes | |
| 42 | static const serial_eeprom_interface eeprom_interface_93C66 = | |
| 43 | { | |
| 44 | "*110", // read 110 aaaaaaaaa | |
| 45 | "*101", // write 101 aaaaaaaaa dddddddd | |
| 46 | "*111", // erase 111 aaaaaaaaa | |
| 47 | "*10000xxxxxx", // lock 100 00xxxxxxx | |
| 48 | "*10011xxxxxx" // unlock 100 11xxxxxxx | |
| 49 | }; | |
| 50 | ||
| 51 | 41 | WRITE16_MEMBER(eolith16_state::eeprom_w) |
| 52 | 42 | { |
| 53 | 43 | m_vbuffer = (data & 0x80) >> 7; |
| r24548 | r24549 | |
| 92 | 82 | |
| 93 | 83 | static INPUT_PORTS_START( eolith16 ) |
| 94 | 84 | PORT_START("SPECIAL") |
| 95 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 85 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 96 | 86 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, eolith16_state, eolith_speedup_getvblank, NULL) |
| 97 | 87 | PORT_BIT( 0xff6f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 98 | 88 | |
| r24548 | r24549 | |
| 115 | 105 | PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 116 | 106 | |
| 117 | 107 | PORT_START( "EEPROMOUT" ) |
| 118 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 119 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 120 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 108 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 109 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 110 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 121 | 111 | INPUT_PORTS_END |
| 122 | 112 | |
| 123 | 113 | VIDEO_START_MEMBER(eolith16_state,eolith16) |
| r24548 | r24549 | |
| 179 | 169 | MCFG_CPU_PROGRAM_MAP(eolith16_map) |
| 180 | 170 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", eolith16_state, eolith_speedup, "screen", 0, 1) |
| 181 | 171 | |
| 182 | MCFG_SERIAL_ | |
| 172 | MCFG_EEPROM_SERIAL_93C66_8BIT_ADD("eeprom") | |
| 183 | 173 | |
| 184 | 174 | /* video hardware */ |
| 185 | 175 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 111 | 111 | |
| 112 | 112 | |
| 113 | 113 | /********************************************************** |
| 114 | EPROM | |
| 115 | **********************************************************/ | |
| 116 | ||
| 117 | static const serial_eeprom_interface groundfx_eeprom_interface = | |
| 118 | { | |
| 119 | "0110", /* read command */ | |
| 120 | "0101", /* write command */ | |
| 121 | "0111", /* erase command */ | |
| 122 | "0100000000", /* unlock command */ | |
| 123 | "0100110000", /* lock command */ | |
| 124 | }; | |
| 125 | ||
| 126 | ||
| 127 | /********************************************************** | |
| 128 | 114 | GAME INPUTS |
| 129 | 115 | **********************************************************/ |
| 130 | 116 | |
| r24548 | r24549 | |
| 249 | 235 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 250 | 236 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 251 | 237 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 252 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 238 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 253 | 239 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* shift hi */ |
| 254 | 240 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* brake */ |
| 255 | 241 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 261 | 247 | PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 262 | 248 | |
| 263 | 249 | PORT_START( "EEPROMOUT" ) |
| 264 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 265 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 266 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 250 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 251 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 252 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 267 | 253 | |
| 268 | 254 | PORT_START("SYSTEM") |
| 269 | 255 | PORT_SERVICE_NO_TOGGLE( 0x00000001, IP_ACTIVE_LOW ) |
| r24548 | r24549 | |
| 370 | 356 | MCFG_CPU_PROGRAM_MAP(groundfx_map) |
| 371 | 357 | MCFG_CPU_VBLANK_INT_DRIVER("screen", groundfx_state, groundfx_interrupt) |
| 372 | 358 | |
| 373 | MCFG_SERIAL_ | |
| 359 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 374 | 360 | |
| 375 | 361 | /* video hardware */ |
| 376 | 362 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 1064 | 1064 | 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff |
| 1065 | 1065 | }; |
| 1066 | 1066 | |
| 1067 | static const serial_eeprom_interface spacegun_eeprom_intf = | |
| 1068 | { | |
| 1069 | "0110", /* read command */ | |
| 1070 | "0101", /* write command */ | |
| 1071 | "0111", /* erase command */ | |
| 1072 | "0100000000", /* lock command */ | |
| 1073 | "0100111111", /* unlock command */ | |
| 1074 | 0, /* multi-read disabled */ | |
| 1075 | 1 /* reset delay */ | |
| 1076 | }; | |
| 1077 | 1067 | |
| 1078 | ||
| 1079 | 1068 | #if 0 |
| 1080 | 1069 | READ16_MEMBER(taitoz_state::eep_latch_r) |
| 1081 | 1070 | { |
| r24548 | r24549 | |
| 1252 | 1241 | switch (offset) |
| 1253 | 1242 | { |
| 1254 | 1243 | case 0x03: |
| 1255 | return m_eeprom->read | |
| 1244 | return m_eeprom->do_read() << 7; | |
| 1256 | 1245 | |
| 1257 | 1246 | default: |
| 1258 | 1247 | return m_tc0220ioc->read(space, offset); /* might be a 510NIO ! */ |
| r24548 | r24549 | |
| 2667 | 2656 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 2668 | 2657 | |
| 2669 | 2658 | PORT_START( "EEPROMOUT" ) |
| 2670 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2671 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2672 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2659 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2660 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2661 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2673 | 2662 | |
| 2674 | 2663 | PORT_START("STICKX1") |
| 2675 | 2664 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_CENTERDELTA(0) PORT_REVERSE PORT_PLAYER(1) |
| r24548 | r24549 | |
| 3502 | 3491 | MCFG_MACHINE_START_OVERRIDE(taitoz_state,bshark) |
| 3503 | 3492 | MCFG_MACHINE_RESET_OVERRIDE(taitoz_state,taitoz) |
| 3504 | 3493 | |
| 3505 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, spacegun_eeprom_intf) | |
| 3506 | MCFG_SERIAL_EEPROM_DATA(spacegun_default_eeprom, 128) | |
| 3494 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 3495 | MCFG_EEPROM_SERIAL_DATA(spacegun_default_eeprom, 128) | |
| 3507 | 3496 | |
| 3508 | 3497 | MCFG_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) |
| 3509 | 3498 |
| r24548 | r24549 | |
|---|---|---|
| 345 | 345 | virtual void video_start(); |
| 346 | 346 | virtual void palette_init(); |
| 347 | 347 | UINT32 screen_update_fortecar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 348 | required_device<serial_ | |
| 348 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 349 | 349 | }; |
| 350 | 350 | |
| 351 | 351 | |
| r24548 | r24549 | |
| 442 | 442 | DIN PPI_PC2 |
| 443 | 443 | DOUT PPI_PC4 |
| 444 | 444 | */ |
| 445 | m_eeprom->write_bit((data & 0x04) >> 2); | |
| 446 | m_eeprom->set_cs_line((data & 0x01) ? CLEAR_LINE : ASSERT_LINE); | |
| 447 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 445 | m_eeprom->di_write((data & 0x04) >> 2); | |
| 446 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 447 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 448 | 448 | } |
| 449 | 449 | |
| 450 | 450 | READ8_MEMBER(fortecar_state::ppi0_portc_r) |
| 451 | 451 | { |
| 452 | 452 | // popmessage("%s",machine().describe_context()); |
| 453 | return ((m_eeprom->read | |
| 453 | return ((m_eeprom->do_read()<<4) & 0x10); | |
| 454 | 454 | } |
| 455 | 455 | |
| 456 | 456 | static I8255A_INTERFACE( ppi8255_intf ) |
| r24548 | r24549 | |
| 548 | 548 | }; |
| 549 | 549 | |
| 550 | 550 | |
| 551 | static const serial_eeprom_interface forte_eeprom_intf = | |
| 552 | {/* | |
| 553 | Preliminary interface for NM93CS56N Serial EEPROM. | |
| 554 | Correct address & data. Using 93C46 similar protocol. | |
| 555 | */ | |
| 556 | "*110", /* read command */ | |
| 557 | "*101", /* write command */ | |
| 558 | "*111", /* erase command */ | |
| 559 | "*10000xxxxxx", /* lock command */ | |
| 560 | "*10011xxxxxx", /* unlock command */ | |
| 561 | }; | |
| 562 | ||
| 563 | ||
| 564 | 551 | static ADDRESS_MAP_START( fortecar_map, AS_PROGRAM, 8, fortecar_state ) |
| 565 | 552 | AM_RANGE(0x0000, 0xbfff) AM_ROM |
| 566 | 553 | AM_RANGE(0xc000, 0xc7ff) AM_ROM |
| r24548 | r24549 | |
| 700 | 687 | MCFG_SCREEN_UPDATE_DRIVER(fortecar_state, screen_update_fortecar) |
| 701 | 688 | |
| 702 | 689 | |
| 703 | MCFG_SERIAL_EEPROM_ADD("eeprom", 256, 16, forte_eeprom_intf) | |
| 704 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 690 | MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") | |
| 691 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 705 | 692 | |
| 706 | 693 | MCFG_I8255A_ADD( "fcppi0", ppi8255_intf ) |
| 707 | 694 | MCFG_V3021_ADD("rtc") |
| r24548 | r24549 | |
| 733 | 720 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 734 | 721 | ROM_LOAD( "fortecrd_nvram.u6", 0x0000, 0x0800, BAD_DUMP CRC(7d3e7eb5) SHA1(788fe7adc381bcc6eaefed33f5aa1081340608a0) ) |
| 735 | 722 | |
| 736 | ROM_REGION( 0x0 | |
| 723 | ROM_REGION( 0x0100, "eeprom", 0 ) /* default serial EEPROM */ | |
| 737 | 724 | ROM_LOAD16_WORD_SWAP( "forte_card_93cs56_serial_12345678.u13", 0x0000, 0x0100, BAD_DUMP CRC(2fc5961d) SHA1(f958c8b2b4e48cc6e5a607a6751acde5592bd27f) ) |
| 738 | 725 | |
| 739 | 726 | ROM_REGION( 0x200, "proms", 0 ) |
| r24548 | r24549 | |
| 752 | 739 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 753 | 740 | ROM_LOAD( "fortecrd_nvram.u6", 0x0000, 0x0800, CRC(7d3e7eb5) SHA1(788fe7adc381bcc6eaefed33f5aa1081340608a0) ) |
| 754 | 741 | |
| 755 | ROM_REGION( 0x0 | |
| 742 | ROM_REGION( 0x0100, "eeprom", 0 ) /* default serial EEPROM */ | |
| 756 | 743 | ROM_LOAD16_WORD_SWAP( "forte_card_93cs56_serial_12345678.u13", 0x0000, 0x0100, CRC(2fc5961d) SHA1(f958c8b2b4e48cc6e5a607a6751acde5592bd27f) ) |
| 757 | 744 | |
| 758 | 745 | ROM_REGION( 0x0200, "proms", 0 ) |
| r24548 | r24549 | |
|---|---|---|
| 204 | 204 | if ( ACCESSING_BITS_24_31 ) |
| 205 | 205 | { |
| 206 | 206 | // latch the bit |
| 207 | m_eeprom->write | |
| 207 | m_eeprom->di_write((data & 0x04000000) >> 26); | |
| 208 | 208 | |
| 209 | 209 | // reset line asserted: reset. |
| 210 | m_eeprom-> | |
| 210 | m_eeprom->cs_write((data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE); | |
| 211 | 211 | |
| 212 | 212 | // clock line asserted: write latch or select next bit to read |
| 213 | m_eeprom-> | |
| 213 | m_eeprom->clk_write((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 214 | 214 | } |
| 215 | 215 | } |
| 216 | 216 | |
| r24548 | r24549 | |
| 507 | 507 | PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 508 | 508 | PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 509 | 509 | PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 510 | PORT_BIT( 0x80000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 510 | PORT_BIT( 0x80000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // EEPROM | |
| 511 | 511 | |
| 512 | 512 | PORT_START("Y0") /* $800140.b */ |
| 513 | 513 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2) |
| r24548 | r24549 | |
| 567 | 567 | } |
| 568 | 568 | |
| 569 | 569 | |
| 570 | static const serial_eeprom_interface zeropnt2_eeprom_interface = | |
| 571 | { | |
| 572 | "*110", // read 1 10 aaaaaaa | |
| 573 | "*101", // write 1 01 aaaaaaa dddddddd | |
| 574 | "*111", // erase 1 11 aaaaaaa | |
| 575 | "*10000xxxx", // lock 1 00 00xxxx | |
| 576 | "*10011xxxx", // unlock 1 00 11xxxx | |
| 577 | // "*10001xxxx" // write all 1 00 01xxxx dddddddd | |
| 578 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 579 | }; | |
| 580 | ||
| 581 | ||
| 582 | 570 | /*************************************************************************** |
| 583 | 571 | Burglar X |
| 584 | 572 | ***************************************************************************/ |
| r24548 | r24549 | |
| 677 | 665 | |
| 678 | 666 | MCFG_MACHINE_RESET_OVERRIDE(unico_state,zeropt) |
| 679 | 667 | |
| 680 | MCFG_SERIAL_ | |
| 668 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 681 | 669 | |
| 682 | 670 | /* video hardware */ |
| 683 | 671 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 131 | 131 | optional_shared_ptr<UINT32> m_spriteram; |
| 132 | 132 | optional_device<st0020_device> m_gdfs_st0020; |
| 133 | 133 | required_device<cpu_device> m_maincpu; |
| 134 | required_device<serial_ | |
| 134 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 135 | 135 | DECLARE_WRITE32_MEMBER(darkhors_tmapram_w); |
| 136 | 136 | DECLARE_WRITE32_MEMBER(darkhors_tmapram2_w); |
| 137 | 137 | DECLARE_WRITE32_MEMBER(paletteram32_xBBBBBGGGGGRRRRR_dword_w); |
| r24548 | r24549 | |
| 294 | 294 | if ( ACCESSING_BITS_24_31 ) |
| 295 | 295 | { |
| 296 | 296 | // latch the bit |
| 297 | m_eeprom->write | |
| 297 | m_eeprom->di_write((data & 0x04000000) >> 26); | |
| 298 | 298 | |
| 299 | 299 | // reset line asserted: reset. |
| 300 | m_eeprom-> | |
| 300 | m_eeprom->cs_write((data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 301 | 301 | |
| 302 | 302 | // clock line asserted: write latch or select next bit to read |
| 303 | m_eeprom-> | |
| 303 | m_eeprom->clk_write((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 304 | 304 | } |
| 305 | 305 | } |
| 306 | 306 | |
| r24548 | r24549 | |
| 474 | 474 | PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1) // test |
| 475 | 475 | PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // door 1 |
| 476 | 476 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // door 2 |
| 477 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 477 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 478 | 478 | PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_START1 ) // start |
| 479 | 479 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Payout") PORT_CODE(KEYCODE_LCONTROL) // payout |
| 480 | 480 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Cancel") PORT_CODE(KEYCODE_LALT) // cancel |
| r24548 | r24549 | |
| 692 | 692 | MCFG_CPU_PROGRAM_MAP(darkhors_map) |
| 693 | 693 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkhors_state, darkhors_irq, "screen", 0, 1) |
| 694 | 694 | |
| 695 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 695 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 696 | 696 | |
| 697 | 697 | /* video hardware */ |
| 698 | 698 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 733 | 733 | MCFG_CPU_PROGRAM_MAP(jclub2_map) |
| 734 | 734 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkhors_state, darkhors_irq, "screen", 0, 1) |
| 735 | 735 | |
| 736 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 736 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 737 | 737 | |
| 738 | 738 | /* video hardware */ |
| 739 | 739 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 799 | 799 | MCFG_CPU_IO_MAP(st0016_io) |
| 800 | 800 | MCFG_CPU_VBLANK_INT_DRIVER("screen", darkhors_state, irq0_line_hold) |
| 801 | 801 | |
| 802 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 802 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 803 | 803 | |
| 804 | 804 | /* video hardware */ |
| 805 | 805 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 60 | 60 | required_device<deco16ic_device> m_deco_tilegen1; |
| 61 | 61 | required_device<deco16ic_device> m_deco_tilegen2; |
| 62 | 62 | |
| 63 | required_device<serial_ | |
| 63 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 64 | 64 | |
| 65 | 65 | /* memory */ |
| 66 | 66 | UINT16 m_pf1_rowscroll[0x0800/2]; |
| r24548 | r24549 | |
| 197 | 197 | { |
| 198 | 198 | /* some kind of screen indicator? checked by backfirea set before it will boot */ |
| 199 | 199 | int backfire_screen = machine().rand() & 1; |
| 200 | return ((m_eeprom->read | |
| 200 | return ((m_eeprom->do_read() << 24) | m_io_in0->read() | |
| 201 | 201 | | ((m_io_in2->read() & 0xbf) << 16) |
| 202 | 202 | | ((m_io_in3->read() & 0x40) << 16)) ^ (backfire_screen << 26) ; |
| 203 | 203 | } |
| r24548 | r24549 | |
| 205 | 205 | READ32_MEMBER(backfire_state::backfire_control2_r) |
| 206 | 206 | { |
| 207 | 207 | // logerror("%08x:Read eprom %08x (%08x)\n", space.device().safe_pc(), offset << 1, mem_mask); |
| 208 | return (m_eeprom->read | |
| 208 | return (m_eeprom->do_read() << 24) | m_io_in1->read() | (m_io_in1->read() << 16); | |
| 209 | 209 | } |
| 210 | 210 | |
| 211 | 211 | #ifdef UNUSED_FUNCTION |
| 212 | 212 | READ32_MEMBER(backfire_state::backfire_control3_r) |
| 213 | 213 | { |
| 214 | 214 | // logerror("%08x:Read eprom %08x (%08x)\n", space.device().safe_pc(), offset << 1, mem_mask); |
| 215 | return (m_eeprom->read | |
| 215 | return (m_eeprom->do_read() << 24) | m_io_in2->read() | (m_io_in2->read() << 16); | |
| 216 | 216 | } |
| 217 | 217 | #endif |
| 218 | 218 | |
| r24548 | r24549 | |
| 222 | 222 | logerror("%s:write eprom %08x (%08x) %08x\n",machine().describe_context(),offset<<1,mem_mask,data); |
| 223 | 223 | if (ACCESSING_BITS_0_7) |
| 224 | 224 | { |
| 225 | m_eeprom->set_clock_line(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE); | |
| 226 | m_eeprom->write_bit(BIT(data, 0)); | |
| 227 | m_eeprom->set_cs_line(BIT(data, 2) ? CLEAR_LINE : ASSERT_LINE); | |
| 225 | m_eeprom->clk_write(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE); | |
| 226 | m_eeprom->di_write(BIT(data, 0)); | |
| 227 | m_eeprom->cs_write(BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE); | |
| 228 | 228 | } |
| 229 | 229 | } |
| 230 | 230 | |
| r24548 | r24549 | |
| 499 | 499 | MCFG_CPU_PROGRAM_MAP(backfire_map) |
| 500 | 500 | MCFG_CPU_VBLANK_INT_DRIVER("lscreen", backfire_state, deco32_vbl_interrupt) /* or is it "rscreen?" */ |
| 501 | 501 | |
| 502 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 502 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 503 | 503 | |
| 504 | 504 | |
| 505 | 505 | /* video hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 185 | 185 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_START2 ) |
| 186 | 186 | |
| 187 | 187 | PORT_START("SERVICE") |
| 188 | PORT_BIT( 0x02000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 188 | PORT_BIT( 0x02000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 189 | 189 | PORT_SERVICE_NO_TOGGLE( 0x08000000, IP_ACTIVE_LOW ) |
| 190 | 190 | |
| 191 | 191 | PORT_START( "EEPROMOUT" ) |
| 192 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 193 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 194 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 192 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 193 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 194 | PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 195 | 195 | |
| 196 | 196 | PORT_START("STICKX1") |
| 197 | 197 | PORT_BIT( 0xfff, 0x800, IPT_AD_STICK_X ) PORT_MINMAX(0x000,0xfff) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(1) |
| r24548 | r24549 | |
| 240 | 240 | |
| 241 | 241 | MCFG_QUANTUM_TIME(attotime::from_hz(12000)) |
| 242 | 242 | |
| 243 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 243 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 244 | 244 | |
| 245 | 245 | /* video hardware */ |
| 246 | 246 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 249 | 249 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 250 | 250 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) |
| 251 | 251 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 ) |
| 252 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 252 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* bit 6 is EEPROM data (DOUT) */ | |
| 253 | 253 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* bit 7 is EEPROM ready */ |
| 254 | 254 | |
| 255 | 255 | PORT_START("LIGHT0_X") |
| r24548 | r24549 | |
| 271 | 271 | { 0*0x0200000, 1*0x0200000, 2*0x0200000, 3*0x0200000 } /* start of each ROM bank */ |
| 272 | 272 | }; |
| 273 | 273 | |
| 274 | static const serial_eeprom_interface gaelco2_eeprom_interface = | |
| 275 | { | |
| 276 | "*110", /* read command */ | |
| 277 | "*101", /* write command */ | |
| 278 | "*111", /* erase command */ | |
| 279 | "*10000xxxxxx", /* lock command */ | |
| 280 | "*10011xxxxxx", /* unlock command */ | |
| 281 | // "*10001xxxxxx", /* write all */ | |
| 282 | // "*10010xxxxxx", /* erase all */ | |
| 283 | }; | |
| 284 | ||
| 285 | 274 | static MACHINE_CONFIG_START( bang, gaelco2_state ) |
| 286 | 275 | /* basic machine hardware */ |
| 287 | 276 | MCFG_CPU_ADD("maincpu", M68000, 30000000/2) /* 15 MHz */ |
| 288 | 277 | MCFG_CPU_PROGRAM_MAP(bang_map) |
| 289 | 278 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", gaelco2_state, bang_irq, "screen", 0, 1) |
| 290 | 279 | |
| 291 | MCFG_SERIAL_ | |
| 280 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 292 | 281 | |
| 293 | 282 | /* video hardware */ |
| 294 | 283 | MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") |
| r24548 | r24549 | |
| 949 | 938 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 950 | 939 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
| 951 | 940 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) |
| 952 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) /* bit 6 is EEPROM data (DOUT) */ | |
| 953 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* bit 7 is EEPROM ready */ | |
| 941 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* bit 6 is EEPROM data (DOUT) */ | |
| 942 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) | |
| 954 | 943 | INPUT_PORTS_END |
| 955 | 944 | |
| 956 | 945 | static const gaelcosnd_interface snowboar_snd_interface = |
| r24548 | r24549 | |
| 965 | 954 | MCFG_CPU_PROGRAM_MAP(snowboar_map) |
| 966 | 955 | MCFG_CPU_VBLANK_INT_DRIVER("screen", gaelco2_state, irq6_line_hold) |
| 967 | 956 | |
| 968 | MCFG_SERIAL_ | |
| 957 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 969 | 958 | |
| 970 | 959 | /* video hardware */ |
| 971 | 960 | MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") |
| r24548 | r24549 | |
| 1206 | 1195 | MCFG_CPU_PROGRAM_MAP(wrally2_map) |
| 1207 | 1196 | MCFG_CPU_VBLANK_INT_DRIVER("lscreen", gaelco2_state, irq6_line_hold) |
| 1208 | 1197 | |
| 1209 | MCFG_SERIAL_ | |
| 1198 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 1210 | 1199 | |
| 1211 | 1200 | /* video hardware */ |
| 1212 | 1201 | MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") |
| r24548 | r24549 | |
|---|---|---|
| 127 | 127 | |
| 128 | 128 | READ32_MEMBER(simpl156_state::simpl156_inputs_read) |
| 129 | 129 | { |
| 130 | int eep = m_eeprom->read | |
| 130 | int eep = m_eeprom->do_read(); | |
| 131 | 131 | UINT32 returndata = ioport("IN0")->read() ^ 0xffff0000; |
| 132 | 132 | |
| 133 | 133 | returndata ^= ((eep << 8)); |
| r24548 | r24549 | |
| 172 | 172 | |
| 173 | 173 | m_okimusic->set_bank_base(0x40000 * (data & 0x7)); |
| 174 | 174 | |
| 175 | m_eeprom->set_clock_line(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE); | |
| 176 | m_eeprom->write_bit(BIT(data, 4)); | |
| 177 | m_eeprom->set_cs_line(BIT(data, 6) ? CLEAR_LINE : ASSERT_LINE); | |
| 175 | m_eeprom->clk_write(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE); | |
| 176 | m_eeprom->di_write(BIT(data, 4)); | |
| 177 | m_eeprom->cs_write(BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE); | |
| 178 | 178 | } |
| 179 | 179 | |
| 180 | 180 | |
| r24548 | r24549 | |
| 424 | 424 | MCFG_CPU_PROGRAM_MAP(chainrec_map) |
| 425 | 425 | MCFG_CPU_VBLANK_INT_DRIVER("screen", simpl156_state, simpl156_vbl_interrupt) |
| 426 | 426 | |
| 427 | MCFG_EEPROM_93C46_ADD("eeprom") // 93C45 | |
| 427 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") // 93C45 | |
| 428 | 428 | |
| 429 | 429 | /* video hardware */ |
| 430 | 430 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 35 | 35 | |
| 36 | 36 | READ16_MEMBER(galpani2_state::galpani2_eeprom_r) |
| 37 | 37 | { |
| 38 | return (m_eeprom_word & ~1) | (m_eeprom->read | |
| 38 | return (m_eeprom_word & ~1) | (m_eeprom->do_read() & 1); | |
| 39 | 39 | } |
| 40 | 40 | |
| 41 | 41 | WRITE16_MEMBER(galpani2_state::galpani2_eeprom_w) |
| r24548 | r24549 | |
| 44 | 44 | if ( ACCESSING_BITS_0_7 ) |
| 45 | 45 | { |
| 46 | 46 | // latch the bit |
| 47 | m_eeprom->write | |
| 47 | m_eeprom->di_write((data & 0x02) >> 1); | |
| 48 | 48 | |
| 49 | 49 | // reset line asserted: reset. |
| 50 | m_eeprom-> | |
| 50 | m_eeprom->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE ); | |
| 51 | 51 | |
| 52 | 52 | // clock line asserted: write latch or select next bit to read |
| 53 | m_eeprom-> | |
| 53 | m_eeprom->clk_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 54 | 54 | } |
| 55 | 55 | } |
| 56 | 56 | |
| r24548 | r24549 | |
| 581 | 581 | MCFG_CPU_PROGRAM_MAP(galpani2_mem2) |
| 582 | 582 | MCFG_TIMER_DRIVER_ADD_SCANLINE("s_scantimer", galpani2_state, galpani2_interrupt2, "screen", 0, 1) |
| 583 | 583 | |
| 584 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 584 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 585 | 585 | |
| 586 | 586 | /* video hardware */ |
| 587 | 587 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 445 | 445 | { |
| 446 | 446 | ioport_port *gun[] = { m_io_gunx1, m_io_guny1, m_io_gunx2, m_io_guny2 }; |
| 447 | 447 | |
| 448 | return (((m_gdfs_lightgun_select & 1) ? 0 : 0xff) ^ gun[m_gdfs_lightgun_select]->read()) | (m_eeprom->read | |
| 448 | return (((m_gdfs_lightgun_select & 1) ? 0 : 0xff) ^ gun[m_gdfs_lightgun_select]->read()) | (m_eeprom->do_read() << 8); | |
| 449 | 449 | } |
| 450 | 450 | |
| 451 | 451 | WRITE16_MEMBER(ssv_state::gdfs_eeprom_w) |
| r24548 | r24549 | |
| 459 | 459 | // data & 0x0001 ? |
| 460 | 460 | |
| 461 | 461 | // latch the bit |
| 462 | m_eeprom->write | |
| 462 | m_eeprom->di_write((data & 0x4000) >> 14); | |
| 463 | 463 | |
| 464 | 464 | // reset line asserted: reset. |
| 465 | m_eeprom-> | |
| 465 | m_eeprom->cs_write((data & 0x1000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 466 | 466 | |
| 467 | 467 | // clock line asserted: write latch or select next bit to read |
| 468 | m_eeprom-> | |
| 468 | m_eeprom->clk_write((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 469 | 469 | |
| 470 | 470 | if (!(m_gdfs_eeprom_old & 0x0800) && (data & 0x0800)) // rising clock |
| 471 | 471 | m_gdfs_lightgun_select = (data & 0x0300) >> 8; |
| r24548 | r24549 | |
| 2634 | 2634 | MCFG_TIMER_MODIFY("scantimer") |
| 2635 | 2635 | MCFG_TIMER_DRIVER_CALLBACK(ssv_state, gdfs_interrupt) |
| 2636 | 2636 | |
| 2637 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2637 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2638 | 2638 | |
| 2639 | 2639 | /* video hardware */ |
| 2640 | 2640 | MCFG_SCREEN_MODIFY("screen") |
| r24548 | r24549 | |
|---|---|---|
| 548 | 548 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* PARAACK */ |
| 549 | 549 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 550 | 550 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("adc0838", adc083x_device, sars_read) |
| 551 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 551 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 552 | 552 | |
| 553 | 553 | PORT_START("EEPROMOUT") |
| 554 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 555 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 556 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 554 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 555 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 556 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 557 | 557 | |
| 558 | 558 | PORT_START("OUT4") |
| 559 | 559 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0838", adc083x_device, cs_write) |
| r24548 | r24549 | |
| 768 | 768 | |
| 769 | 769 | MCFG_QUANTUM_TIME(attotime::from_hz(30000)) |
| 770 | 770 | |
| 771 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 771 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 772 | 772 | |
| 773 | 773 | MCFG_K056230_ADD("k056230", zr107_k056230_intf) |
| 774 | 774 | |
| r24548 | r24549 | |
| 826 | 826 | |
| 827 | 827 | MCFG_QUANTUM_TIME(attotime::from_hz(30000)) |
| 828 | 828 | |
| 829 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 829 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 830 | 830 | |
| 831 | 831 | MCFG_K056230_ADD("k056230", zr107_k056230_intf) |
| 832 | 832 |
| r24548 | r24549 | |
|---|---|---|
| 895 | 895 | |
| 896 | 896 | WRITE8_MEMBER(seibuspi_state::eeprom_w) |
| 897 | 897 | { |
| 898 | m_eeprom->write_bit((data & 0x80) ? 1 : 0); | |
| 899 | m_eeprom->set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 900 | m_eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE); | |
| 898 | m_eeprom->di_write((data & 0x80) ? 1 : 0); | |
| 899 | m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 900 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 901 | 901 | } |
| 902 | 902 | |
| 903 | 903 | WRITE8_MEMBER(seibuspi_state::spi_layerbanks_eeprom_w) |
| r24548 | r24549 | |
| 1247 | 1247 | PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1248 | 1248 | |
| 1249 | 1249 | PORT_MODIFY("SYSTEM") |
| 1250 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1250 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1251 | 1251 | INPUT_PORTS_END |
| 1252 | 1252 | |
| 1253 | 1253 | |
| r24548 | r24549 | |
| 1365 | 1365 | PORT_START("SYSTEM") |
| 1366 | 1366 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 1367 | 1367 | PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 1368 | PORT_BIT( 0x00004000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1368 | PORT_BIT( 0x00004000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1369 | 1369 | PORT_BIT( 0xffffbf3f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1370 | 1370 | |
| 1371 | 1371 | PORT_START("INPUTS") |
| r24548 | r24549 | |
| 1750 | 1750 | |
| 1751 | 1751 | /*****************************************************************************/ |
| 1752 | 1752 | |
| 1753 | /* this is a 93C46 but with reset delay */ | |
| 1754 | static const serial_eeprom_interface eeprom_intf = | |
| 1755 | { | |
| 1756 | "*110", /* read command */ | |
| 1757 | "*101", /* write command */ | |
| 1758 | "*111", /* erase command */ | |
| 1759 | "*10000xxxx", /* lock command */ | |
| 1760 | "*10011xxxx", /* unlock command */ | |
| 1761 | 1, /* enable_multi_read */ | |
| 1762 | 1 /* reset_delay */ | |
| 1763 | }; | |
| 1764 | ||
| 1765 | 1753 | INTERRUPT_GEN_MEMBER(seibuspi_state::spi_interrupt) |
| 1766 | 1754 | { |
| 1767 | 1755 | device.execute().set_input_line(0, HOLD_LINE); // where is ack? |
| r24548 | r24549 | |
| 1915 | 1903 | |
| 1916 | 1904 | MCFG_DEVICE_REMOVE("ds2404") |
| 1917 | 1905 | |
| 1918 | MCFG_SERIAL_ | |
| 1906 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1919 | 1907 | |
| 1920 | 1908 | // Z80 is Z84C0006PCS instead of Z84C0008PEC |
| 1921 | 1909 | // clock is unknown, possibly slower than 7.159MHz |
| r24548 | r24549 | |
| 1948 | 1936 | MCFG_CPU_PROGRAM_MAP(sys386i_map) |
| 1949 | 1937 | MCFG_CPU_VBLANK_INT_DRIVER("screen", seibuspi_state, spi_interrupt) |
| 1950 | 1938 | |
| 1951 | MCFG_SERIAL_ | |
| 1939 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1952 | 1940 | |
| 1953 | 1941 | /* video hardware */ |
| 1954 | 1942 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1998 | 1986 | MCFG_CPU_PROGRAM_MAP(sys386f_map) |
| 1999 | 1987 | MCFG_CPU_VBLANK_INT_DRIVER("screen", seibuspi_state, spi_interrupt) |
| 2000 | 1988 | |
| 2001 | MCFG_SERIAL_ | |
| 1989 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2002 | 1990 | |
| 2003 | 1991 | /* video hardware */ |
| 2004 | 1992 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 94 | 94 | #include "includes/pirates.h" |
| 95 | 95 | |
| 96 | 96 | |
| 97 | static const serial_eeprom_interface eeprom_intf = | |
| 98 | { | |
| 99 | "*110", /* read command */ | |
| 100 | "*101", /* write command */ | |
| 101 | 0, /* erase command */ | |
| 102 | "*10000xxxx", /* lock command */ | |
| 103 | "*10011xxxx" /* unlock command */ | |
| 104 | }; | |
| 105 | ||
| 106 | 97 | WRITE16_MEMBER(pirates_state::pirates_out_w) |
| 107 | 98 | { |
| 108 | 99 | if (ACCESSING_BITS_0_7) |
| 109 | 100 | { |
| 110 | 101 | /* bits 0-2 control EEPROM */ |
| 111 | m_eeprom->write_bit(data & 0x04); | |
| 112 | m_eeprom->set_cs_line((data & 0x01) ? CLEAR_LINE : ASSERT_LINE); | |
| 113 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 102 | m_eeprom->di_write((data & 0x04) >> 2); | |
| 103 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 104 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 114 | 105 | |
| 115 | 106 | /* bit 6 selects oki bank */ |
| 116 | 107 | m_oki->set_bank_base((data & 0x40) ? 0x40000 : 0x00000); |
| r24548 | r24549 | |
| 204 | 195 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 205 | 196 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 206 | 197 | PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) |
| 207 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH,IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 198 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH,IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // EEPROM data | |
| 208 | 199 | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // seems checked in "test mode" |
| 209 | 200 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // seems checked in "test mode" |
| 210 | 201 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH,IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, pirates_state,prot_r, NULL) // protection |
| r24548 | r24549 | |
| 260 | 251 | MCFG_CPU_PROGRAM_MAP(pirates_map) |
| 261 | 252 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pirates_state, irq1_line_hold) |
| 262 | 253 | |
| 263 | MCFG_SERIAL_ | |
| 254 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 264 | 255 | |
| 265 | 256 | MCFG_GFXDECODE(pirates) |
| 266 | 257 |
| r24548 | r24549 | |
|---|---|---|
| 109 | 109 | required_device<cpu_device> m_maincpu; |
| 110 | 110 | optional_shared_ptr<UINT8> m_spriteram; |
| 111 | 111 | required_shared_ptr<UINT8> m_nvram; |
| 112 | required_device<serial_ | |
| 112 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 113 | 113 | |
| 114 | 114 | UINT8 m_reg; |
| 115 | 115 | UINT8 m_rombank; |
| r24548 | r24549 | |
| 446 | 446 | WRITE8_MEMBER(sigmab98_state::eeprom_w) |
| 447 | 447 | { |
| 448 | 448 | // latch the bit |
| 449 | m_eeprom->write | |
| 449 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 450 | 450 | |
| 451 | 451 | // reset line asserted: reset. |
| 452 | 452 | // if ((m_c0 ^ data) & 0x20) |
| 453 | m_eeprom-> | |
| 453 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 454 | 454 | |
| 455 | 455 | // clock line asserted: write latch or select next bit to read |
| 456 | m_eeprom-> | |
| 456 | m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 457 | 457 | |
| 458 | 458 | m_c0 = data; |
| 459 | 459 | //show_outputs(state); |
| r24548 | r24549 | |
| 644 | 644 | |
| 645 | 645 | READ8_MEMBER(sigmab98_state::sammymdl_eeprom_r) |
| 646 | 646 | { |
| 647 | return m_eeprom->read | |
| 647 | return m_eeprom->do_read() ? 0x80 : 0; | |
| 648 | 648 | } |
| 649 | 649 | |
| 650 | 650 | WRITE8_MEMBER(sigmab98_state::sammymdl_eeprom_w) |
| 651 | 651 | { |
| 652 | 652 | // latch the bit |
| 653 | m_eeprom->write | |
| 653 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 654 | 654 | |
| 655 | 655 | // reset line asserted: reset. |
| 656 | m_eeprom-> | |
| 656 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 657 | 657 | |
| 658 | 658 | // clock line asserted: write latch or select next bit to read |
| 659 | m_eeprom-> | |
| 659 | m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 660 | 660 | |
| 661 | 661 | if (data & 0x8f) |
| 662 | 662 | logerror("%s: unknown eeeprom bits written %02x\n", machine().describe_context(), data); |
| r24548 | r24549 | |
| 1516 | 1516 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1517 | 1517 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1518 | 1518 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1519 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1519 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1520 | 1520 | |
| 1521 | 1521 | PORT_START("IN1") |
| 1522 | 1522 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // ? (coin error, pulses mask 4 of port c6) |
| r24548 | r24549 | |
| 1554 | 1554 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1555 | 1555 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1556 | 1556 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1557 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1557 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1558 | 1558 | |
| 1559 | 1559 | PORT_START("IN1") |
| 1560 | 1560 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // ? (coin error, pulses mask 4 of port c6) |
| r24548 | r24549 | |
| 1592 | 1592 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1593 | 1593 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1594 | 1594 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1595 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1595 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1596 | 1596 | |
| 1597 | 1597 | PORT_START("IN1") |
| 1598 | 1598 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(10) // ? (coin error, pulses mask 4 of port c6) |
| r24548 | r24549 | |
| 1675 | 1675 | GeGeGe no Kitarou Youkai Slot |
| 1676 | 1676 | ***************************************************************************/ |
| 1677 | 1677 | |
| 1678 | const serial_eeprom_interface eeprom_intf = | |
| 1679 | { | |
| 1680 | "*110", // read 1 10 aaaaaa | |
| 1681 | "*101", // write 1 01 aaaaaa dddddddddddddddd | |
| 1682 | "*111", // erase 1 11 aaaaaa | |
| 1683 | "*10000xxxx", // lock 1 00 00xxxx | |
| 1684 | "*10011xxxx", // unlock 1 00 11xxxx | |
| 1685 | 0, // enable_multi_read | |
| 1686 | 7 // reset_delay (otherwise gegege will hang when saving settings) | |
| 1687 | }; | |
| 1688 | ||
| 1689 | 1678 | INTERRUPT_GEN_MEMBER(sigmab98_state::gegege_vblank_interrupt) |
| 1690 | 1679 | { |
| 1691 | 1680 | device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x5a); |
| r24548 | r24549 | |
| 1698 | 1687 | MCFG_CPU_VBLANK_INT_DRIVER("screen", sigmab98_state, gegege_vblank_interrupt) |
| 1699 | 1688 | |
| 1700 | 1689 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 1701 | MCFG_SERIAL_ | |
| 1690 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1702 | 1691 | |
| 1703 | 1692 | MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW ) |
| 1704 | 1693 | |
| r24548 | r24549 | |
| 1724 | 1713 | Sammy Medal Games |
| 1725 | 1714 | ***************************************************************************/ |
| 1726 | 1715 | |
| 1727 | static const serial_eeprom_interface eeprom_interface_93C46_8bit_delay = | |
| 1728 | { | |
| 1729 | "*110", // read 1 10 aaaaaa | |
| 1730 | "*101", // write 1 01 aaaaaa dddddddd | |
| 1731 | "*111", // erase 1 11 aaaaaa | |
| 1732 | "*10000xxxx", // lock 1 00 00xxxx | |
| 1733 | "*10011xxxx", // unlock 1 00 11xxxx | |
| 1734 | 0, // enable_multi_read | |
| 1735 | 1 // reset_delay (needed by animalc) | |
| 1736 | // "*10001xxxx" // write all 1 00 01xxxx dddddddd | |
| 1737 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 1738 | }; | |
| 1739 | ||
| 1740 | 1716 | MACHINE_RESET_MEMBER(sigmab98_state,sammymdl) |
| 1741 | 1717 | { |
| 1742 | 1718 | m_maincpu->set_state_int(Z80_PC, 0x400); // code starts at 400 ??? (000 = cart header) |
| r24548 | r24549 | |
| 1750 | 1726 | MCFG_MACHINE_RESET_OVERRIDE(sigmab98_state, sammymdl ) |
| 1751 | 1727 | |
| 1752 | 1728 | MCFG_NVRAM_ADD_0FILL("nvram") // battery |
| 1753 | MCFG_SERIAL_ | |
| 1729 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 1754 | 1730 | |
| 1755 | 1731 | MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW ) |
| 1756 | 1732 |
| r24548 | r24549 | |
|---|---|---|
| 238 | 238 | |
| 239 | 239 | |
| 240 | 240 | /********************************************************** |
| 241 | EPROM | |
| 242 | **********************************************************/ | |
| 243 | ||
| 244 | static const serial_eeprom_interface undrfire_eeprom_interface = | |
| 245 | { | |
| 246 | "0110", /* read command */ | |
| 247 | "0101", /* write command */ | |
| 248 | "0111", /* erase command */ | |
| 249 | "0100000000", /* unlock command */ | |
| 250 | "0100110000", /* lock command */ | |
| 251 | }; | |
| 252 | ||
| 253 | ||
| 254 | /********************************************************** | |
| 255 | 241 | GAME INPUTS |
| 256 | 242 | **********************************************************/ |
| 257 | 243 | |
| r24548 | r24549 | |
| 291 | 277 | |
| 292 | 278 | if (ACCESSING_BITS_0_7) |
| 293 | 279 | { |
| 294 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 295 | m_eeprom->write_bit(data & 0x40); | |
| 296 | m_eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE); | |
| 280 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 281 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 282 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 297 | 283 | return; |
| 298 | 284 | } |
| 299 | 285 | |
| r24548 | r24549 | |
| 536 | 522 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 537 | 523 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 538 | 524 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 539 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 525 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* reserved for EEROM */ | |
| 540 | 526 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 541 | 527 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 542 | 528 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 604 | 590 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 605 | 591 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 606 | 592 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 607 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 593 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* reserved for EEROM */ | |
| 608 | 594 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 609 | 595 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 610 | 596 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 732 | 718 | MCFG_CPU_PROGRAM_MAP(undrfire_map) |
| 733 | 719 | MCFG_CPU_VBLANK_INT_DRIVER("screen", undrfire_state, undrfire_interrupt) |
| 734 | 720 | |
| 735 | MCFG_SERIAL_ | |
| 721 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 736 | 722 | |
| 737 | 723 | /* video hardware */ |
| 738 | 724 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 767 | 753 | |
| 768 | 754 | MCFG_QUANTUM_TIME(attotime::from_hz(480)) /* CPU slices - Need to interleave Cpu's 1 & 3 */ |
| 769 | 755 | |
| 770 | MCFG_SERIAL_ | |
| 756 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 771 | 757 | |
| 772 | 758 | /* video hardware */ |
| 773 | 759 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 135 | 135 | |
| 136 | 136 | /************************************* |
| 137 | 137 | * |
| 138 | * Non-volatile memory | |
| 139 | * | |
| 140 | *************************************/ | |
| 141 | ||
| 142 | static const serial_eeprom_interface _20pacgal_eeprom_intf = | |
| 143 | { | |
| 144 | "*110", /* read command */ | |
| 145 | "*101", /* write command */ | |
| 146 | 0, /* erase command */ | |
| 147 | "*10000xxxxx", /* lock command */ | |
| 148 | "*10011xxxxx", /* unlock command */ | |
| 149 | }; | |
| 150 | ||
| 151 | ||
| 152 | /************************************* | |
| 153 | * | |
| 154 | 138 | * Coin counter |
| 155 | 139 | * |
| 156 | 140 | *************************************/ |
| r24548 | r24549 | |
| 304 | 288 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) |
| 305 | 289 | |
| 306 | 290 | PORT_START( "EEPROMIN" ) |
| 307 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 291 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* bit 7 is EEPROM data */ | |
| 308 | 292 | |
| 309 | 293 | PORT_START( "EEPROMOUT" ) |
| 310 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) /* bit 5 is cs (active low) */ | |
| 311 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) /* bit 6 is clock (active high) */ | |
| 312 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) /* bit 7 is data */ | |
| 294 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) /* bit 5 is cs (active high) */ | |
| 295 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) /* bit 6 is clock (active high) */ | |
| 296 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) /* bit 7 is data */ | |
| 313 | 297 | INPUT_PORTS_END |
| 314 | 298 | |
| 315 | 299 | |
| r24548 | r24549 | |
| 366 | 350 | MCFG_CPU_VBLANK_INT_DRIVER("screen", _20pacgal_state, vblank_irq) |
| 367 | 351 | |
| 368 | 352 | |
| 369 | MCFG_SERIAL_ | |
| 353 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 370 | 354 | |
| 371 | 355 | /* video hardware */ |
| 372 | 356 | MCFG_FRAGMENT_ADD(20pacgal_video) |
| r24548 | r24549 | |
|---|---|---|
| 268 | 268 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Coin Out") |
| 269 | 269 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") |
| 270 | 270 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Init SW") |
| 271 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 271 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 272 | 272 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 273 | 273 | |
| 274 | 274 | PORT_START("IN0") |
| r24548 | r24549 | |
| 322 | 322 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 323 | 323 | |
| 324 | 324 | PORT_START( "EEPROMOUT" ) |
| 325 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 326 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 327 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 325 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 326 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 327 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 328 | 328 | |
| 329 | 329 | /* Unused, on the PCB there's just one bank */ |
| 330 | 330 | PORT_START("DSW1") |
| r24548 | r24549 | |
| 384 | 384 | MCFG_CPU_IO_MAP(port_map) |
| 385 | 385 | MCFG_CPU_VBLANK_INT_DRIVER("screen", albazg_state, irq0_line_hold) |
| 386 | 386 | |
| 387 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 387 | 388 | |
| 388 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 389 | ||
| 390 | 389 | MCFG_WATCHDOG_VBLANK_INIT(8) // timing is unknown |
| 391 | 390 | |
| 392 | 391 | MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf ) |
| r24548 | r24549 | |
|---|---|---|
| 184 | 184 | |
| 185 | 185 | PORT_START("TEST") |
| 186 | 186 | PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) |
| 187 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 188 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // eeprom ack | |
| 187 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 188 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 189 | 189 | PORT_BIT( 0xce, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 190 | 190 | |
| 191 | 191 | PORT_START( "EEPROMOUT" ) |
| 192 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 193 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 194 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 192 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 193 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 194 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 195 | 195 | INPUT_PORTS_END |
| 196 | 196 | |
| 197 | 197 | static INPUT_PORTS_START( simpsn2p ) |
| r24548 | r24549 | |
| 219 | 219 | |
| 220 | 220 | PORT_START("TEST") |
| 221 | 221 | PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) |
| 222 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 223 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // eeprom ack | |
| 222 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 223 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 224 | 224 | PORT_BIT( 0xce, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 225 | 225 | |
| 226 | 226 | PORT_START( "EEPROMOUT" ) |
| 227 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 228 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 229 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 227 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 228 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 229 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 230 | 230 | INPUT_PORTS_END |
| 231 | 231 | |
| 232 | 232 | |
| r24548 | r24549 | |
| 291 | 291 | simpsons_sprite_callback |
| 292 | 292 | }; |
| 293 | 293 | |
| 294 | static const serial_eeprom_interface eeprom_intf = | |
| 295 | { | |
| 296 | "011000", /* read command */ | |
| 297 | "011100", /* write command */ | |
| 298 | 0, /* erase command */ | |
| 299 | "0100000000000",/* lock command */ | |
| 300 | "0100110000000" /* unlock command */ | |
| 301 | }; | |
| 302 | ||
| 303 | 294 | static MACHINE_CONFIG_START( simpsons, simpsons_state ) |
| 304 | 295 | |
| 305 | 296 | /* basic machine hardware */ |
| r24548 | r24549 | |
| 311 | 302 | MCFG_CPU_PROGRAM_MAP(z80_map) |
| 312 | 303 | /* NMIs are generated by the 053260 */ |
| 313 | 304 | |
| 305 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 314 | 306 | |
| 315 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 316 | ||
| 317 | 307 | /* video hardware */ |
| 318 | 308 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| 319 | 309 |
| r24548 | r24549 | |
|---|---|---|
| 53 | 53 | #define RNG_DEBUG 0 |
| 54 | 54 | |
| 55 | 55 | |
| 56 | static const serial_eeprom_interface eeprom_intf = | |
| 57 | { | |
| 58 | "011000", /* read command */ | |
| 59 | "011100", /* write command */ | |
| 60 | "0100100000000",/* erase command */ | |
| 61 | "0100000000000",/* lock command */ | |
| 62 | "0100110000000" /* unlock command */ | |
| 63 | }; | |
| 64 | ||
| 65 | 56 | READ16_MEMBER(rungun_state::rng_sysregs_r) |
| 66 | 57 | { |
| 67 | 58 | UINT16 data = 0; |
| r24548 | r24549 | |
| 113 | 104 | { |
| 114 | 105 | case 0x08/2: |
| 115 | 106 | /* |
| 116 | bit0 : eeprom_write_bit | |
| 117 | bit1 : eeprom_set_cs_line | |
| 118 | bit2 : eeprom_set_clock_line | |
| 107 | bit0 : eeprom_di_write | |
| 108 | bit1 : eeprom_cs_write | |
| 109 | bit2 : eeprom_clk_write | |
| 119 | 110 | bit3 : coin counter? |
| 120 | 111 | bit7 : set before massive memory writes |
| 121 | 112 | bit10 : IRQ5 ACK |
| r24548 | r24549 | |
| 261 | 252 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 262 | 253 | |
| 263 | 254 | PORT_START("DSW") |
| 264 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 265 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 255 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 256 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 266 | 257 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 267 | 258 | PORT_DIPNAME( 0x10, 0x00, "Monitors" ) |
| 268 | 259 | PORT_DIPSETTING( 0x00, "1" ) |
| r24548 | r24549 | |
| 281 | 272 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 282 | 273 | |
| 283 | 274 | PORT_START( "EEPROMOUT" ) |
| 284 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 285 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 286 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 275 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 276 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 277 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 287 | 278 | |
| 288 | 279 | PORT_START("P1") |
| 289 | 280 | KONAMI8_B123_START(1) |
| r24548 | r24549 | |
| 387 | 378 | |
| 388 | 379 | MCFG_GFXDECODE(rungun) |
| 389 | 380 | |
| 381 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 390 | 382 | |
| 391 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 392 | ||
| 393 | 383 | /* video hardware */ |
| 394 | 384 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_BEFORE_VBLANK) |
| 395 | 385 |
| r24548 | r24549 | |
|---|---|---|
| 445 | 445 | { |
| 446 | 446 | if (ACCESSING_BITS_0_7) |
| 447 | 447 | { |
| 448 | return m_eeprom->read | |
| 448 | return m_eeprom->do_read(); | |
| 449 | 449 | } |
| 450 | 450 | return 0; |
| 451 | 451 | } |
| r24548 | r24549 | |
| 458 | 458 | switch (offset) |
| 459 | 459 | { |
| 460 | 460 | case 0: |
| 461 | m_eeprom-> | |
| 461 | m_eeprom->cs_write((data & 0x0001) ? ASSERT_LINE : CLEAR_LINE); | |
| 462 | 462 | break; |
| 463 | 463 | case 1: |
| 464 | m_eeprom-> | |
| 464 | m_eeprom->clk_write((data & 0x0001) ? ASSERT_LINE : CLEAR_LINE); | |
| 465 | 465 | break; |
| 466 | 466 | case 2: |
| 467 | m_eeprom->write | |
| 467 | m_eeprom->di_write(data & 0x0001); | |
| 468 | 468 | break; |
| 469 | 469 | } |
| 470 | 470 | } |
| r24548 | r24549 | |
| 649 | 649 | MCFG_CPU_IO_MAP(kickgoal_sound_io_map) |
| 650 | 650 | |
| 651 | 651 | |
| 652 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 653 | MCFG_SERIAL_EEPROM_DATA(kickgoal_default_eeprom_type1, 128) | |
| 652 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 653 | MCFG_EEPROM_SERIAL_DATA(kickgoal_default_eeprom_type1, 128) | |
| 654 | 654 | |
| 655 | 655 | /* video hardware */ |
| 656 | 656 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 684 | 684 | MCFG_CPU_IO_MAP(actionhw_io_map) |
| 685 | 685 | |
| 686 | 686 | |
| 687 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 688 | MCFG_SERIAL_EEPROM_DATA(kickgoal_default_eeprom_type1, 128) | |
| 687 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 688 | MCFG_EEPROM_SERIAL_DATA(kickgoal_default_eeprom_type1, 128) | |
| 689 | 689 | |
| 690 | 690 | /* video hardware */ |
| 691 | 691 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 373 | 373 | |
| 374 | 374 | ***************************************************************************/ |
| 375 | 375 | |
| 376 | static const serial_eeprom_interface taitob_eeprom_intf = | |
| 377 | { | |
| 378 | "0110", /* read command */ | |
| 379 | "0101", /* write command */ | |
| 380 | "0111", /* erase command */ | |
| 381 | "0100000000", /* lock command */ | |
| 382 | "0100110000" /* unlock command*/ | |
| 383 | }; | |
| 384 | ||
| 385 | 376 | READ16_MEMBER(taitob_state::eep_latch_r) |
| 386 | 377 | { |
| 387 | 378 | return m_eep_latch; |
| r24548 | r24549 | |
| 1164 | 1155 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) /*ok*/ |
| 1165 | 1156 | |
| 1166 | 1157 | PORT_START("COIN") |
| 1167 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1158 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1168 | 1159 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1169 | 1160 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1170 | 1161 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1224 | 1215 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) |
| 1225 | 1216 | |
| 1226 | 1217 | PORT_START( "EEPROMOUT" ) |
| 1227 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1228 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1229 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1218 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1219 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1220 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1230 | 1221 | INPUT_PORTS_END |
| 1231 | 1222 | |
| 1232 | 1223 | static INPUT_PORTS_START( spacedxo ) |
| r24548 | r24549 | |
| 1326 | 1317 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) /*ok*/ |
| 1327 | 1318 | |
| 1328 | 1319 | PORT_START("COIN") |
| 1329 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1320 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1330 | 1321 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1331 | 1322 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1332 | 1323 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1386 | 1377 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) |
| 1387 | 1378 | |
| 1388 | 1379 | PORT_START( "EEPROMOUT" ) |
| 1389 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1390 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1391 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1380 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1381 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1382 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1392 | 1383 | INPUT_PORTS_END |
| 1393 | 1384 | |
| 1394 | 1385 | static INPUT_PORTS_START( viofight ) |
| r24548 | r24549 | |
| 2354 | 2345 | |
| 2355 | 2346 | MCFG_QUANTUM_TIME(attotime::from_hz(600)) |
| 2356 | 2347 | |
| 2357 | MCFG_SERIAL_ | |
| 2348 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2358 | 2349 | |
| 2359 | 2350 | MCFG_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) |
| 2360 | 2351 | |
| r24548 | r24549 | |
| 2402 | 2393 | MCFG_QUANTUM_TIME(attotime::from_hz(600)) |
| 2403 | 2394 | |
| 2404 | 2395 | |
| 2405 | MCFG_SERIAL_ | |
| 2396 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2406 | 2397 | |
| 2407 | 2398 | MCFG_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) |
| 2408 | 2399 | |
| r24548 | r24549 | |
| 2494 | 2485 | MCFG_QUANTUM_TIME(attotime::from_hz(600)) |
| 2495 | 2486 | |
| 2496 | 2487 | |
| 2497 | MCFG_SERIAL_ | |
| 2488 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2498 | 2489 | |
| 2499 | 2490 | MCFG_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) |
| 2500 | 2491 |
| r24548 | r24549 | |
|---|---|---|
| 39 | 39 | m_deco_tilegen1(*this, "tilegen1") |
| 40 | 40 | { } |
| 41 | 41 | |
| 42 | required_device<serial_ | |
| 42 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 43 | 43 | |
| 44 | 44 | /* devices */ |
| 45 | 45 | required_device<cpu_device> m_maincpu; |
| r24548 | r24549 | |
| 63 | 63 | |
| 64 | 64 | if (mem_mask&0x00ff) |
| 65 | 65 | { |
| 66 | m_eeprom->set_clock_line(data &0x2 ? ASSERT_LINE : CLEAR_LINE); | |
| 67 | m_eeprom->write_bit(data &0x1); | |
| 68 | m_eeprom->set_cs_line(data&0x4 ? CLEAR_LINE : ASSERT_LINE); | |
| 66 | m_eeprom->clk_write(data &0x2 ? ASSERT_LINE : CLEAR_LINE); | |
| 67 | m_eeprom->di_write(data &0x1); | |
| 68 | m_eeprom->cs_write(data&0x4 ? ASSERT_LINE : CLEAR_LINE); | |
| 69 | 69 | } |
| 70 | 70 | } |
| 71 | 71 | }; |
| r24548 | r24549 | |
| 191 | 191 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 192 | 192 | |
| 193 | 193 | PORT_START("DSW") |
| 194 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 194 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 195 | 195 | PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) |
| 196 | 196 | PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) |
| 197 | 197 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| r24548 | r24549 | |
| 328 | 328 | MCFG_PALETTE_LENGTH(0x400/2) |
| 329 | 329 | MCFG_GFXDECODE(dreambal) |
| 330 | 330 | |
| 331 | MCFG_EEPROM_93C46_ADD("eeprom") // 93lc46b | |
| 331 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") // 93lc46b | |
| 332 | 332 | |
| 333 | 333 | MCFG_DECO104_ADD("ioprot104") |
| 334 | 334 |
| r24548 | r24549 | |
|---|---|---|
| 124 | 124 | |
| 125 | 125 | if (ACCESSING_BITS_0_7) |
| 126 | 126 | { |
| 127 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 128 | m_eeprom->write_bit(data & 0x40); | |
| 129 | m_eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE); | |
| 127 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 128 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 129 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 130 | 130 | return; |
| 131 | 131 | } |
| 132 | 132 | return; |
| r24548 | r24549 | |
| 200 | 200 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 201 | 201 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 202 | 202 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 203 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 203 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 204 | 204 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_START1 ) |
| 205 | 205 | PORT_BIT( 0x00000200, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, galastrm_state,frame_counter_r, NULL) |
| 206 | 206 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 275 | 275 | MACHINE DRIVERS |
| 276 | 276 | ***********************************************************/ |
| 277 | 277 | |
| 278 | static const serial_eeprom_interface galastrm_eeprom_interface = | |
| 279 | { | |
| 280 | "0110", /* read command */ | |
| 281 | "0101", /* write command */ | |
| 282 | "0111", /* erase command */ | |
| 283 | "0100000000", /* unlock command */ | |
| 284 | "0100110000", /* lock command */ | |
| 285 | }; | |
| 286 | ||
| 287 | 278 | /***************************************************************************/ |
| 288 | 279 | |
| 289 | 280 | static const tc0100scn_interface galastrm_tc0100scn_intf = |
| r24548 | r24549 | |
| 311 | 302 | MCFG_CPU_PROGRAM_MAP(galastrm_map) |
| 312 | 303 | MCFG_CPU_VBLANK_INT_DRIVER("screen", galastrm_state, galastrm_interrupt) /* VBL */ |
| 313 | 304 | |
| 314 | MCFG_SERIAL_ | |
| 305 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 315 | 306 | |
| 316 | 307 | /* video hardware */ |
| 317 | 308 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 85 | 85 | INTERRUPT_GEN_MEMBER(mcu_irq); |
| 86 | 86 | required_device<cpu_device> m_maincpu; |
| 87 | 87 | required_device<cpu_device> m_mcu; |
| 88 | required_device<serial_ | |
| 88 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 89 | 89 | }; |
| 90 | 90 | |
| 91 | 91 | |
| r24548 | r24549 | |
| 113 | 113 | //bad ? |
| 114 | 114 | if( ACCESSING_BITS_0_7 ) |
| 115 | 115 | { |
| 116 | m_eeprom->write_bit(data & 0x04); | |
| 117 | m_eeprom->set_cs_line((data & 0x01) ? CLEAR_LINE:ASSERT_LINE ); | |
| 116 | m_eeprom->di_write((data & 0x04) >> 2); | |
| 117 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE ); | |
| 118 | 118 | |
| 119 | m_eeprom-> | |
| 119 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 120 | 120 | } |
| 121 | 121 | } |
| 122 | 122 | |
| r24548 | r24549 | |
| 366 | 366 | PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) |
| 367 | 367 | PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) |
| 368 | 368 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 369 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 369 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 370 | 370 | |
| 371 | 371 | PORT_START("IN4") /* 16bit */ |
| 372 | 372 | PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) |
| r24548 | r24549 | |
| 560 | 560 | MCFG_PALETTE_LENGTH(0x800) |
| 561 | 561 | |
| 562 | 562 | |
| 563 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 563 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 564 | 564 | |
| 565 | 565 | |
| 566 | 566 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r24548 | r24549 | |
|---|---|---|
| 181 | 181 | |
| 182 | 182 | READ16_MEMBER(seta2_state::gundamex_eeprom_r) |
| 183 | 183 | { |
| 184 | return ((m_eeprom->read | |
| 184 | return ((m_eeprom->do_read() & 1)) << 3; | |
| 185 | 185 | } |
| 186 | 186 | |
| 187 | 187 | WRITE16_MEMBER(seta2_state::gundamex_eeprom_w) |
| 188 | 188 | { |
| 189 | m_eeprom->set_clock_line((data & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 190 | m_eeprom->write_bit(data & 0x1); | |
| 191 | m_eeprom->set_cs_line((data & 0x4) ? CLEAR_LINE : ASSERT_LINE); | |
| 189 | m_eeprom->clk_write((data & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 190 | m_eeprom->di_write(data & 0x1); | |
| 191 | m_eeprom->cs_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE); | |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | static ADDRESS_MAP_START( gundamex_map, AS_PROGRAM, 16, seta2_state ) |
| r24548 | r24549 | |
| 2036 | 2036 | MCFG_CPU_MODIFY("maincpu") |
| 2037 | 2037 | MCFG_CPU_PROGRAM_MAP(gundamex_map) |
| 2038 | 2038 | |
| 2039 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2039 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2040 | 2040 | |
| 2041 | 2041 | // video hardware |
| 2042 | 2042 | MCFG_SCREEN_MODIFY("screen") |
| r24548 | r24549 | |
|---|---|---|
| 72 | 72 | |
| 73 | 73 | enum { BANK_GROUP_A, BANK_GROUP_B, INVALID_BANK_GROUP }; |
| 74 | 74 | |
| 75 | static const serial_eeprom_interface eeprom_intf = | |
| 76 | { | |
| 77 | "*110", // read command | |
| 78 | "*101", // write command | |
| 79 | "*111", // erase command | |
| 80 | "*10000xxxxxxx", // lock command | |
| 81 | "*10011xxxxxxx", // unlock command | |
| 82 | 1, | |
| 83 | 0 | |
| 84 | // "*10001xxxxxxx", // write all | |
| 85 | // "*10010xxxxxxx" // erase all | |
| 86 | }; | |
| 87 | ||
| 88 | 75 | READ8_MEMBER(polygonet_state::polygonet_inputs_r) |
| 89 | 76 | { |
| 90 | 77 | return m_inputs[offset]->read(); |
| r24548 | r24549 | |
| 103 | 90 | D25 = EEPROM CS |
| 104 | 91 | D24 = EEPROM DATA |
| 105 | 92 | */ |
| 106 | m_eeprom->write_bit(data & 1); | |
| 107 | m_eeprom->set_cs_line((data & 2) ? CLEAR_LINE : ASSERT_LINE); | |
| 108 | m_eeprom->set_clock_line((data & 4) ? ASSERT_LINE : CLEAR_LINE); | |
| 93 | m_eeprom->di_write(data & 1); | |
| 94 | m_eeprom->cs_write((data & 2) ? ASSERT_LINE : CLEAR_LINE); | |
| 95 | m_eeprom->clk_write((data & 4) ? ASSERT_LINE : CLEAR_LINE); | |
| 109 | 96 | |
| 110 | 97 | m_sys0 = data; |
| 111 | 98 | break; |
| r24548 | r24549 | |
| 669 | 656 | |
| 670 | 657 | MCFG_QUANTUM_PERFECT_CPU("maincpu") /* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */ |
| 671 | 658 | |
| 672 | MCFG_SERIAL_ | |
| 659 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 673 | 660 | |
| 674 | 661 | MCFG_GFXDECODE(plygonet) |
| 675 | 662 | |
| r24548 | r24549 | |
| 724 | 711 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 725 | 712 | |
| 726 | 713 | PORT_START("IN2") |
| 727 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 714 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 728 | 715 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) |
| 729 | 716 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 730 | 717 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // Start 2, unused |
| r24548 | r24549 | |
|---|---|---|
| 30 | 30 | int m_tilebank; |
| 31 | 31 | int m_bg_yoffset; |
| 32 | 32 | |
| 33 | optional_device<serial_ | |
| 33 | optional_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 34 | 34 | |
| 35 | 35 | DECLARE_DRIVER_INIT(powerbal); |
| 36 | 36 | DECLARE_DRIVER_INIT(magicstk); |
| r24548 | r24549 | |
| 47 | 47 | }; |
| 48 | 48 | |
| 49 | 49 | |
| 50 | static const serial_eeprom_interface eeprom_intf = | |
| 51 | { | |
| 52 | "*110", /* read command */ | |
| 53 | "*101", /* write command */ | |
| 54 | 0, /* erase command */ | |
| 55 | "*10000xxxx", /* lock command */ | |
| 56 | "*10011xxxx", /* unlock command */ | |
| 57 | 0, /* enable_multi_read */ | |
| 58 | 5 /* reset_delay (otherwise wbeachvl will hang when saving settings) */ | |
| 59 | }; | |
| 60 | ||
| 61 | 50 | WRITE16_MEMBER(powerbal_state::magicstk_coin_eeprom_w) |
| 62 | 51 | { |
| 63 | 52 | if (ACCESSING_BITS_0_7) |
| 64 | 53 | { |
| 65 | 54 | coin_counter_w(machine(), 0, data & 0x20); |
| 66 | 55 | |
| 67 | m_eeprom->set_cs_line((data & 8) ? CLEAR_LINE : ASSERT_LINE); | |
| 68 | m_eeprom->write_bit(data & 2); | |
| 69 | m_eeprom->set_clock_line((data & 4) ? CLEAR_LINE : ASSERT_LINE); | |
| 56 | m_eeprom->cs_write((data & 8) ? ASSERT_LINE : CLEAR_LINE); | |
| 57 | m_eeprom->di_write((data & 2) >> 1); | |
| 58 | m_eeprom->clk_write((data & 4) ? CLEAR_LINE : ASSERT_LINE); | |
| 70 | 59 | } |
| 71 | 60 | } |
| 72 | 61 | |
| r24548 | r24549 | |
| 242 | 231 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 243 | 232 | |
| 244 | 233 | PORT_START("IN2") |
| 245 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 234 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM data */ | |
| 246 | 235 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 247 | 236 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 248 | 237 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 339 | 328 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 340 | 329 | |
| 341 | 330 | PORT_START("IN2") |
| 342 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 331 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM data */ | |
| 343 | 332 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 344 | 333 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 345 | 334 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 532 | 521 | MCFG_CPU_PROGRAM_MAP(magicstk_main_map) |
| 533 | 522 | MCFG_CPU_VBLANK_INT_DRIVER("screen", powerbal_state, irq2_line_hold) |
| 534 | 523 | |
| 535 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, eeprom_intf) | |
| 536 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 524 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 525 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 537 | 526 | |
| 538 | 527 | MCFG_MACHINE_START_OVERRIDE(powerbal_state,powerbal) |
| 539 | 528 | MCFG_MACHINE_RESET_OVERRIDE(powerbal_state,powerbal) |
| r24548 | r24549 | |
|---|---|---|
| 145 | 145 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 146 | 146 | |
| 147 | 147 | PORT_START("IN3") /* 0x91 */ |
| 148 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 148 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 149 | 149 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 150 | 150 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 151 | 151 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 191 | 191 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 192 | 192 | |
| 193 | 193 | PORT_START("IN3") /* 0xD1 */ |
| 194 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 194 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 195 | 195 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 196 | 196 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 197 | 197 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 224 | 224 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Aim") PORT_PLAYER(1) |
| 225 | 225 | |
| 226 | 226 | PORT_START("IN3") /* 0x91 */ |
| 227 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 227 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 228 | 228 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 229 | 229 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 230 | 230 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 263 | 263 | // PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* redundant inputs */ |
| 264 | 264 | |
| 265 | 265 | PORT_START("IN3") /* 0xD1 */ |
| 266 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 266 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 267 | 267 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 268 | 268 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 269 | 269 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 299 | 299 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
| 300 | 300 | |
| 301 | 301 | PORT_START("IN3") /* 0xD1 */ |
| 302 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 302 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 303 | 303 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 304 | 304 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 305 | 305 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 334 | 334 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 335 | 335 | |
| 336 | 336 | PORT_START("IN3") /* 0x91 */ |
| 337 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 337 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 338 | 338 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 339 | 339 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 340 | 340 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 369 | 369 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Run/Cutoff") PORT_PLAYER(1) |
| 370 | 370 | |
| 371 | 371 | PORT_START("IN3") /* 0x51/D1 */ |
| 372 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 372 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 373 | 373 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 374 | 374 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 375 | 375 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 406 | 406 | PORT_BIT( 0xe0, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00,0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(64) PORT_PLAYER(2) |
| 407 | 407 | |
| 408 | 408 | PORT_START("IN3") /* 0xD1 */ |
| 409 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 409 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 410 | 410 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 411 | 411 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 412 | 412 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 444 | 444 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| 445 | 445 | |
| 446 | 446 | PORT_START("IN3") /* 0x91 */ |
| 447 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 447 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 448 | 448 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 449 | 449 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 450 | 450 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 486 | 486 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| 487 | 487 | |
| 488 | 488 | PORT_START("IN3") /* 0x91 */ |
| 489 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 489 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 490 | 490 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 491 | 491 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) |
| 492 | 492 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 544 | 544 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| 545 | 545 | |
| 546 | 546 | PORT_START("IN3") /* 0x91 */ |
| 547 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 547 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 548 | 548 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 549 | 549 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 550 | 550 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 599 | 599 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 600 | 600 | |
| 601 | 601 | PORT_START("IN3") /* 0xD1 */ |
| 602 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 602 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 603 | 603 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 604 | 604 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 605 | 605 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| r24548 | r24549 | |
| 673 | 673 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) |
| 674 | 674 | |
| 675 | 675 | PORT_START("IN3") /* 0x51 */ |
| 676 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 676 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 677 | 677 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 678 | 678 | PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) |
| 679 | 679 | PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 724 | 724 | |
| 725 | 725 | /************************************* |
| 726 | 726 | * |
| 727 | * EEPROM interface | |
| 728 | * | |
| 729 | *************************************/ | |
| 730 | ||
| 731 | static const serial_eeprom_interface eeprom_intf = | |
| 732 | { | |
| 733 | "110", | |
| 734 | "101", | |
| 735 | "111" | |
| 736 | }; | |
| 737 | ||
| 738 | ||
| 739 | ||
| 740 | /************************************* | |
| 741 | * | |
| 742 | 727 | * Machine driver |
| 743 | 728 | * |
| 744 | 729 | *************************************/ |
| r24548 | r24549 | |
| 758 | 743 | MCFG_MACHINE_START_OVERRIDE(leland_state,leland) |
| 759 | 744 | MCFG_MACHINE_RESET_OVERRIDE(leland_state,leland) |
| 760 | 745 | |
| 761 | MCFG_SERIAL_ | |
| 746 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 762 | 747 | MCFG_NVRAM_ADD_0FILL("battery") |
| 763 | 748 | |
| 764 | 749 | /* video hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 237 | 237 | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) |
| 238 | 238 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 239 | 239 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 240 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 240 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 241 | 241 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 242 | 242 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 243 | 243 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| r24548 | r24549 | |
| 526 | 526 | PORT_DIPSETTING( 0x80000000, DEF_STR( On ) ) |
| 527 | 527 | |
| 528 | 528 | PORT_START( "EEPROMOUT" ) |
| 529 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 530 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 531 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 529 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 530 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 531 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 532 | 532 | INPUT_PORTS_END |
| 533 | 533 | |
| 534 | 534 | static void kongambl_sprite_callback( running_machine &machine, int *code, int *color, int *priority_mask ) |
| r24548 | r24549 | |
| 597 | 597 | MCFG_CPU_PROGRAM_MAP(kongamaud_map) |
| 598 | 598 | MCFG_CPU_PERIODIC_INT_DRIVER(kongambl_state, irq2_line_hold, 480) |
| 599 | 599 | |
| 600 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 600 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 601 | 601 | |
| 602 | 602 | MCFG_SCREEN_ADD("screen", RASTER) |
| 603 | 603 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
|---|---|---|
| 1192 | 1192 | |
| 1193 | 1193 | /*****************************************************************************/ |
| 1194 | 1194 | |
| 1195 | /* this is a 93C46 but with reset delay that is needed by Lost World */ | |
| 1196 | static const serial_eeprom_interface eeprom_intf = | |
| 1197 | { | |
| 1198 | "*110", /* read command */ | |
| 1199 | "*101", /* write command */ | |
| 1200 | "*111", /* erase command */ | |
| 1201 | "*10000xxxx", /* lock command */ | |
| 1202 | "*10011xxxx", /* unlock command */ | |
| 1203 | 1, /* enable_multi_read */ | |
| 1204 | 5 /* reset_delay (Lost World needs this, very similar to wbeachvl in playmark.c) */ | |
| 1205 | }; | |
| 1206 | ||
| 1207 | 1195 | static const struct LSI53C810interface lsi53c810_intf = |
| 1208 | 1196 | { |
| 1209 | 1197 | &scsi_irq_callback, |
| r24548 | r24549 | |
| 1393 | 1381 | if (ACCESSING_BITS_56_63) |
| 1394 | 1382 | { |
| 1395 | 1383 | int reg = (data >> 56) & 0xff; |
| 1396 | m_eeprom->write_bit((reg & 0x20) ? 1 : 0); | |
| 1397 | m_eeprom->set_clock_line((reg & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 1398 | m_eeprom->set_cs_line((reg & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 1384 | m_eeprom->di_write((reg & 0x20) ? 1 : 0); | |
| 1385 | m_eeprom->clk_write((reg & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 1386 | m_eeprom->cs_write((reg & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 1399 | 1387 | m_controls_bank = reg & 0xff; |
| 1400 | 1388 | } |
| 1401 | 1389 | return; |
| r24548 | r24549 | |
| 1872 | 1860 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1873 | 1861 | |
| 1874 | 1862 | PORT_START("IN1") |
| 1875 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1863 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1876 | 1864 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button B") PORT_CODE(KEYCODE_8) |
| 1877 | 1865 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Button B") PORT_CODE(KEYCODE_7) |
| 1878 | 1866 | PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 2107 | 2095 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) /* Select 2 */ |
| 2108 | 2096 | |
| 2109 | 2097 | PORT_START("IN1") |
| 2110 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2098 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2111 | 2099 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button B") PORT_CODE(KEYCODE_8) |
| 2112 | 2100 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Button B") PORT_CODE(KEYCODE_7) |
| 2113 | 2101 | PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 5369 | 5357 | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_10) |
| 5370 | 5358 | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_10) |
| 5371 | 5359 | |
| 5372 | MCFG_SERIAL_ | |
| 5360 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 5373 | 5361 | MCFG_NVRAM_ADD_1FILL("backup") |
| 5374 | 5362 | |
| 5375 | 5363 | |
| r24548 | r24549 | |
| 5410 | 5398 | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_15) |
| 5411 | 5399 | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_15) |
| 5412 | 5400 | |
| 5413 | MCFG_SERIAL_ | |
| 5401 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 5414 | 5402 | MCFG_NVRAM_ADD_1FILL("backup") |
| 5415 | 5403 | |
| 5416 | 5404 | |
| r24548 | r24549 | |
| 5457 | 5445 | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_20) |
| 5458 | 5446 | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_20) |
| 5459 | 5447 | |
| 5460 | MCFG_SERIAL_ | |
| 5448 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 5461 | 5449 | MCFG_NVRAM_ADD_1FILL("backup") |
| 5462 | 5450 | |
| 5463 | 5451 | |
| r24548 | r24549 | |
| 5495 | 5483 | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_21) |
| 5496 | 5484 | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_21) |
| 5497 | 5485 | |
| 5498 | MCFG_SERIAL_ | |
| 5486 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 5499 | 5487 | MCFG_NVRAM_ADD_1FILL("backup") |
| 5500 | 5488 | |
| 5501 | 5489 |
| r24548 | r24549 | |
|---|---|---|
| 297 | 297 | bits are different. |
| 298 | 298 | ******************************************************************/ |
| 299 | 299 | |
| 300 | static const serial_eeprom_interface eeprom_intf = | |
| 301 | { | |
| 302 | "0110", /* read command */ | |
| 303 | "0101", /* write command */ | |
| 304 | "0111", /* erase command */ | |
| 305 | "0100000000", /* lock command */ | |
| 306 | "0100111111" /* unlock command */ | |
| 307 | }; | |
| 308 | ||
| 309 | 300 | WRITE16_MEMBER(othunder_state::othunder_tc0220ioc_w) |
| 310 | 301 | { |
| 311 | 302 | if (ACCESSING_BITS_0_7) |
| r24548 | r24549 | |
| 330 | 321 | if (data & 4) |
| 331 | 322 | popmessage("OBPRI SET!"); |
| 332 | 323 | |
| 333 | m_eeprom->write_bit(data & 0x40); | |
| 334 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 335 | m_eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE); | |
| 324 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 325 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 326 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 336 | 327 | break; |
| 337 | 328 | |
| 338 | 329 | default: |
| r24548 | r24549 | |
| 351 | 342 | switch (offset) |
| 352 | 343 | { |
| 353 | 344 | case 0x03: |
| 354 | return (m_eeprom->read | |
| 345 | return (m_eeprom->do_read() & 1) << 7; | |
| 355 | 346 | |
| 356 | 347 | default: |
| 357 | 348 | return m_tc0220ioc->read(space, offset); |
| r24548 | r24549 | |
| 686 | 677 | MCFG_CPU_ADD("audiocpu", Z80,16000000/4 ) /* 4 MHz */ |
| 687 | 678 | MCFG_CPU_PROGRAM_MAP(z80_sound_map) |
| 688 | 679 | |
| 689 | MCFG_SERIAL_ | |
| 680 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 690 | 681 | |
| 691 | 682 | |
| 692 | 683 | MCFG_TC0220IOC_ADD("tc0220ioc", othunder_io_intf) |
| r24548 | r24549 | |
|---|---|---|
| 119 | 119 | PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 120 | 120 | |
| 121 | 121 | PORT_START("IN2") /* 0x20 */ |
| 122 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 122 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 123 | 123 | PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 124 | 124 | |
| 125 | 125 | PORT_START("AN0") /* 0x00 - analog X */ |
| r24548 | r24549 | |
| 150 | 150 | PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 151 | 151 | |
| 152 | 152 | PORT_START("IN2") /* 0x20 */ |
| 153 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 153 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 154 | 154 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 155 | 155 | PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) |
| 156 | 156 | PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 202 | 202 | PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 203 | 203 | |
| 204 | 204 | PORT_START("IN2") /* 0x20 */ |
| 205 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 205 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 206 | 206 | PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 207 | 207 | |
| 208 | 208 | PORT_START("AN0") /* Analog wheel 1 */ |
| r24548 | r24549 | |
| 248 | 248 | PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 249 | 249 | |
| 250 | 250 | PORT_START("IN2") /* 0x20 */ |
| 251 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 251 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 252 | 252 | PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 253 | 253 | |
| 254 | 254 | PORT_START("P1") /* 0x0E */ |
| r24548 | r24549 | |
| 286 | 286 | |
| 287 | 287 | /************************************* |
| 288 | 288 | * |
| 289 | * EEPROM interface | |
| 290 | * | |
| 291 | *************************************/ | |
| 292 | ||
| 293 | static const serial_eeprom_interface eeprom_intf = | |
| 294 | { | |
| 295 | "000001100", | |
| 296 | "000001010", | |
| 297 | 0, | |
| 298 | "0000010000000000", | |
| 299 | "0000010011000000", | |
| 300 | 1 | |
| 301 | }; | |
| 302 | ||
| 303 | ||
| 304 | ||
| 305 | /************************************* | |
| 306 | * | |
| 307 | 289 | * Machine driver |
| 308 | 290 | * |
| 309 | 291 | *************************************/ |
| r24548 | r24549 | |
| 326 | 308 | MCFG_MACHINE_START_OVERRIDE(leland_state,ataxx) |
| 327 | 309 | MCFG_MACHINE_RESET_OVERRIDE(leland_state,ataxx) |
| 328 | 310 | |
| 329 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 16, eeprom_intf) | |
| 311 | MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") | |
| 312 | MCFG_EEPROM_SERIAL_ENABLE_STREAMING() | |
| 313 | ||
| 330 | 314 | MCFG_NVRAM_ADD_0FILL("battery") |
| 331 | 315 | |
| 332 | 316 | /* video hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 321 | 321 | MCFG_PSX_DMA_CHANNEL_WRITE( "maincpu", 5, psx_dma_write_delegate( FUNC( konamigv_state::scsi_dma_write ), (konamigv_state *) owner ) ) |
| 322 | 322 | |
| 323 | 323 | MCFG_DEVICE_ADD("mb89371", MB89371, 0) |
| 324 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 324 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 325 | 325 | |
| 326 | 326 | MCFG_SCSIBUS_ADD("scsi") |
| 327 | 327 | MCFG_SCSIDEV_ADD("scsi:cdrom", SCSICD, SCSI_ID_4) |
| r24548 | r24549 | |
| 359 | 359 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 360 | 360 | PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 361 | 361 | PORT_SERVICE_NO_TOGGLE( 0x00001000, IP_ACTIVE_LOW ) |
| 362 | PORT_BIT( 0x00002000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER( "eeprom", serial_ | |
| 362 | PORT_BIT( 0x00002000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER( "eeprom", eeprom_serial_93cxx_device, do_read ) | |
| 363 | 363 | PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 364 | 364 | PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 365 | 365 | PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 403 | 403 | PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 404 | 404 | |
| 405 | 405 | PORT_START("EEPROMOUT") |
| 406 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 407 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 408 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 406 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 407 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 408 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 409 | 409 | INPUT_PORTS_END |
| 410 | 410 | |
| 411 | 411 | /* Simpsons Bowling */ |
| r24548 | r24549 | |
|---|---|---|
| 78 | 78 | { |
| 79 | 79 | if( ACCESSING_BITS_0_7 ) |
| 80 | 80 | { |
| 81 | m_eeprom->write_bit(data & 0x01); | |
| 82 | m_eeprom->set_cs_line((data & 0x02) ? CLEAR_LINE : ASSERT_LINE ); | |
| 83 | m_eeprom->set_clock_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 81 | m_eeprom->di_write(data & 0x01); | |
| 82 | m_eeprom->cs_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 83 | m_eeprom->clk_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 84 | 84 | } |
| 85 | 85 | } |
| 86 | 86 | |
| r24548 | r24549 | |
| 138 | 138 | PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) |
| 139 | 139 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 140 | 140 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 141 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 141 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* eeprom */ | |
| 142 | 142 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 143 | 143 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 144 | 144 | INPUT_PORTS_END |
| r24548 | r24549 | |
| 190 | 190 | MCFG_CPU_PROGRAM_MAP(stlforce_map) |
| 191 | 191 | MCFG_CPU_VBLANK_INT_DRIVER("screen", stlforce_state, irq4_line_hold) |
| 192 | 192 | |
| 193 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 193 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 194 | 194 | |
| 195 | 195 | /* video hardware */ |
| 196 | 196 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 54 | 54 | }; |
| 55 | 55 | |
| 56 | 56 | |
| 57 | static const serial_eeprom_interface eeprom_intf = | |
| 58 | { | |
| 59 | "011000", /* read command */ | |
| 60 | "010100", /* write command */ | |
| 61 | 0, /* erase command */ | |
| 62 | "010000000000", /* lock command */ | |
| 63 | "010011000000" /* unlock command */ | |
| 64 | }; | |
| 65 | ||
| 66 | 57 | WRITE16_MEMBER(overdriv_state::eeprom_w) |
| 67 | 58 | { |
| 68 | 59 | //logerror("%06x: write %04x to eeprom_w\n",space.device().safe_pc(),data); |
| r24548 | r24549 | |
| 246 | 237 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 247 | 238 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
| 248 | 239 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 249 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 250 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
| 240 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 241 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 251 | 242 | |
| 252 | 243 | PORT_START("SYSTEM") |
| 253 | 244 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) |
| r24548 | r24549 | |
| 263 | 254 | PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(50) |
| 264 | 255 | |
| 265 | 256 | PORT_START( "EEPROMOUT" ) |
| 266 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 267 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 268 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 257 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 258 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 259 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 269 | 260 | INPUT_PORTS_END |
| 270 | 261 | |
| 271 | 262 | |
| r24548 | r24549 | |
| 350 | 341 | |
| 351 | 342 | MCFG_QUANTUM_TIME(attotime::from_hz(12000)) |
| 352 | 343 | |
| 344 | MCFG_EEPROM_SERIAL_ER5911_16BIT_ADD("eeprom") | |
| 345 | MCFG_EEPROM_SERIAL_DATA(overdriv_default_eeprom, 128) | |
| 353 | 346 | |
| 354 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, eeprom_intf) | |
| 355 | MCFG_SERIAL_EEPROM_DATA(overdriv_default_eeprom, 128) | |
| 356 | ||
| 357 | 347 | /* video hardware */ |
| 358 | 348 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| 359 | 349 |
| r24548 | r24549 | |
|---|---|---|
| 42 | 42 | UINT32 screen_update_jackpool(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 43 | 43 | INTERRUPT_GEN_MEMBER(jackpool_interrupt); |
| 44 | 44 | required_device<cpu_device> m_maincpu; |
| 45 | required_device<serial_ | |
| 45 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 46 | 46 | }; |
| 47 | 47 | |
| 48 | 48 | |
| r24548 | r24549 | |
| 120 | 120 | case 0x1c: return ioport("BET")->read(); |
| 121 | 121 | case 0x1e: return 0xff; //ticket motor |
| 122 | 122 | case 0x20: return 0xff; //hopper motor |
| 123 | case 0x2c: return m_eeprom->read_bit(); | |
| 124 | case 0x2e: return m_eeprom->read_bit(); | |
| 123 | case 0x2c: return m_eeprom->do_read(); | |
| 124 | case 0x2e: return m_eeprom->do_read(); | |
| 125 | 125 | // default: printf("R %02x\n",offset*2); break; |
| 126 | 126 | } |
| 127 | 127 | |
| r24548 | r24549 | |
| 148 | 148 | case 0x4a: /* ---- ---x Ticket motor */break; |
| 149 | 149 | case 0x4c: /* ---- ---x Hopper motor */break; |
| 150 | 150 | case 0x4e: m_map_vreg = data & 1; break; |
| 151 | case 0x50: m_eeprom->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break; | |
| 152 | case 0x52: m_eeprom->set_clock_line((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break; | |
| 153 | case 0x54: m_eeprom->write_bit(data & 1); break; | |
| 154 | // case 0x5a: m_eeprom->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break; | |
| 155 | // case 0x5c: m_eeprom->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE ); break; | |
| 151 | case 0x50: m_eeprom->cs_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break; | |
| 152 | case 0x52: m_eeprom->clk_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break; | |
| 153 | case 0x54: m_eeprom->di_write(data & 1); break; | |
| 154 | // case 0x5a: m_eeprom->cs_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break; | |
| 155 | // case 0x5c: m_eeprom->cs_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); break; | |
| 156 | 156 | case 0x60: break; |
| 157 | 157 | // default: printf("[%02x] <- %02x W\n",offset*2,data); break; |
| 158 | 158 | } |
| r24548 | r24549 | |
| 161 | 161 | if(offset*2 == 0x54) |
| 162 | 162 | { |
| 163 | 163 | printf("Write bit %02x\n",data); |
| 164 | m_eeprom->write | |
| 164 | m_eeprom->di_write(data & 1); | |
| 165 | 165 | } |
| 166 | 166 | if(offset*2 == 0x52) |
| 167 | 167 | { |
| 168 | 168 | printf("Clock bit %02x\n",data); |
| 169 | m_eeprom-> | |
| 169 | m_eeprom->clk_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); | |
| 170 | 170 | } |
| 171 | 171 | if(offset*2 == 0x50) |
| 172 | 172 | { |
| 173 | 173 | printf("chip select bit %02x\n",data); |
| 174 | m_eeprom-> | |
| 174 | m_eeprom->cs_write((data & 1) ? ASSERT_LINE : CLEAR_LINE ); | |
| 175 | 175 | } |
| 176 | 176 | #endif |
| 177 | 177 | } |
| r24548 | r24549 | |
| 273 | 273 | MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) |
| 274 | 274 | MCFG_SCREEN_UPDATE_DRIVER(jackpool_state, screen_update_jackpool) |
| 275 | 275 | |
| 276 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 276 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 277 | 277 | |
| 278 | 278 | MCFG_PALETTE_LENGTH(0x200) |
| 279 | 279 |
| r24548 | r24549 | |
|---|---|---|
| 203 | 203 | PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 204 | 204 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 205 | 205 | PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 206 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 206 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 207 | 207 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) |
| 208 | 208 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) |
| 209 | 209 | PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 213 | 213 | PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 214 | 214 | |
| 215 | 215 | PORT_START( "EEPROMOUT" ) |
| 216 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 217 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 218 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 216 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 217 | PORT_BIT( 0x00000020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 218 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 219 | 219 | INPUT_PORTS_END |
| 220 | 220 | |
| 221 | 221 | static INPUT_PORTS_START( wcvol95 ) |
| r24548 | r24549 | |
| 245 | 245 | PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNUSED ) /* 'soundmask' */ |
| 246 | 246 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 247 | 247 | PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 248 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 248 | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 249 | 249 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) |
| 250 | 250 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) |
| 251 | 251 | PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 255 | 255 | PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 256 | 256 | |
| 257 | 257 | PORT_START( "EEPROMOUT" ) |
| 258 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 259 | PORT_BIT( 0x00000002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 260 | PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 258 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 259 | PORT_BIT( 0x00000002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 260 | PORT_BIT( 0x00000004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 261 | 261 | INPUT_PORTS_END |
| 262 | 262 | |
| 263 | 263 | |
| r24548 | r24549 | |
| 356 | 356 | MCFG_CPU_PROGRAM_MAP(hvysmsh_map) |
| 357 | 357 | MCFG_CPU_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt) |
| 358 | 358 | |
| 359 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 359 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 360 | 360 | |
| 361 | 361 | MCFG_SCREEN_ADD("screen", RASTER) |
| 362 | 362 | MCFG_SCREEN_REFRESH_RATE(58) |
| r24548 | r24549 | |
| 393 | 393 | MCFG_CPU_PROGRAM_MAP(wcvol95_map) |
| 394 | 394 | MCFG_CPU_VBLANK_INT_DRIVER("screen", deco156_state, deco32_vbl_interrupt) |
| 395 | 395 | |
| 396 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 396 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 397 | 397 | |
| 398 | 398 | MCFG_SCREEN_ADD("screen", RASTER) |
| 399 | 399 | MCFG_SCREEN_REFRESH_RATE(58) |
| r24548 | r24549 | |
|---|---|---|
| 432 | 432 | * |
| 433 | 433 | ********************************************************************/ |
| 434 | 434 | |
| 435 | static const serial_eeprom_interface qsound_eeprom_interface = | |
| 436 | { | |
| 437 | "0110", /* read command */ | |
| 438 | "0101", /* write command */ | |
| 439 | "0111" /* erase command */ | |
| 440 | }; | |
| 441 | ||
| 442 | static const serial_eeprom_interface pang3_eeprom_interface = | |
| 443 | { | |
| 444 | "0110", /* read command */ | |
| 445 | "0101", /* write command */ | |
| 446 | "0111" /* erase command */ | |
| 447 | }; | |
| 448 | ||
| 449 | ||
| 450 | 435 | /* |
| 451 | 436 | PAL PRG1 (16P8B @ 12H): |
| 452 | 437 | |
| r24548 | r24549 | |
| 2271 | 2256 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 2272 | 2257 | |
| 2273 | 2258 | PORT_START( "EEPROMIN" ) |
| 2274 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2259 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2275 | 2260 | |
| 2276 | 2261 | PORT_START( "EEPROMOUT" ) |
| 2277 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2278 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2279 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2262 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2263 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2264 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2280 | 2265 | INPUT_PORTS_END |
| 2281 | 2266 | |
| 2282 | 2267 | INPUT_PORTS_START( dino ) |
| r24548 | r24549 | |
| 2301 | 2286 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 2302 | 2287 | |
| 2303 | 2288 | PORT_START( "EEPROMIN" ) |
| 2304 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2289 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2305 | 2290 | |
| 2306 | 2291 | PORT_START( "EEPROMOUT" ) |
| 2307 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2308 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2309 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2292 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2293 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2294 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2310 | 2295 | INPUT_PORTS_END |
| 2311 | 2296 | |
| 2312 | 2297 | |
| r24548 | r24549 | |
| 2429 | 2414 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 2430 | 2415 | |
| 2431 | 2416 | PORT_START( "EEPROMIN" ) |
| 2432 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2417 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2433 | 2418 | |
| 2434 | 2419 | PORT_START( "EEPROMOUT" ) |
| 2435 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2436 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2437 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2420 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2421 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2422 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2438 | 2423 | INPUT_PORTS_END |
| 2439 | 2424 | |
| 2440 | 2425 | |
| r24548 | r24549 | |
| 2529 | 2514 | PORT_BIT( 0xf7, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 2530 | 2515 | |
| 2531 | 2516 | PORT_START( "EEPROMIN" ) |
| 2532 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2517 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2533 | 2518 | |
| 2534 | 2519 | PORT_START( "EEPROMOUT" ) |
| 2535 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2536 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2537 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2520 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2521 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2522 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2538 | 2523 | INPUT_PORTS_END |
| 2539 | 2524 | |
| 2540 | 2525 | /* Needs further checking */ |
| r24548 | r24549 | |
| 2771 | 2756 | PORT_DIPUNUSED( 0x80, 0x80 ) /* doubles up as an extra service switch */ |
| 2772 | 2757 | |
| 2773 | 2758 | PORT_START( "EEPROMIN" ) |
| 2774 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 2759 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2775 | 2760 | |
| 2776 | 2761 | PORT_START( "EEPROMOUT" ) |
| 2777 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2778 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2779 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2762 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2763 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2764 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2780 | 2765 | INPUT_PORTS_END |
| 2781 | 2766 | |
| 2782 | 2767 | /* Needs further checking */ |
| r24548 | r24549 | |
| 3070 | 3055 | PORT_INCLUDE( sfzch ) |
| 3071 | 3056 | |
| 3072 | 3057 | PORT_START( "EEPROMIN" ) |
| 3073 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 3058 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 3074 | 3059 | |
| 3075 | 3060 | PORT_START( "EEPROMOUT" ) |
| 3076 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 3077 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 3078 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 3061 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 3062 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 3063 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 3079 | 3064 | INPUT_PORTS_END |
| 3080 | 3065 | |
| 3081 | 3066 | /* |
| r24548 | r24549 | |
| 3213 | 3198 | static MACHINE_CONFIG_DERIVED( pang3, cps1_12MHz ) |
| 3214 | 3199 | |
| 3215 | 3200 | /* basic machine hardware */ |
| 3216 | MCFG_SERIAL_ | |
| 3201 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 3217 | 3202 | MACHINE_CONFIG_END |
| 3218 | 3203 | |
| 3219 | 3204 | static MACHINE_CONFIG_DERIVED( ganbare, cps1_10MHz ) |
| r24548 | r24549 | |
| 3238 | 3223 | |
| 3239 | 3224 | MCFG_MACHINE_START_OVERRIDE(cps_state,qsound) |
| 3240 | 3225 | |
| 3241 | MCFG_SERIAL_ | |
| 3226 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 3242 | 3227 | |
| 3243 | 3228 | /* sound hardware */ |
| 3244 | 3229 | MCFG_DEVICE_REMOVE("mono") |
| r24548 | r24549 | |
| 3255 | 3240 | static MACHINE_CONFIG_DERIVED( wofhfh, cps1_12MHz ) |
| 3256 | 3241 | |
| 3257 | 3242 | /* basic machine hardware */ |
| 3258 | MCFG_SERIAL_ | |
| 3243 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 3259 | 3244 | MACHINE_CONFIG_END |
| 3260 | 3245 | |
| 3261 | 3246 | static MACHINE_CONFIG_DERIVED( sf2m3, cps1_12MHz) |
| r24548 | r24549 | |
|---|---|---|
| 100 | 100 | |
| 101 | 101 | if (ACCESSING_BITS_0_7) |
| 102 | 102 | { |
| 103 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 104 | m_eeprom->write_bit(data & 0x40); | |
| 105 | m_eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE); | |
| 103 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 104 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 105 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 106 | 106 | } |
| 107 | 107 | break; |
| 108 | 108 | } |
| r24548 | r24549 | |
| 185 | 185 | PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 186 | 186 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 187 | 187 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 188 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 188 | PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 189 | 189 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 190 | 190 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) |
| 191 | 191 | PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| r24548 | r24549 | |
| 284 | 284 | MACHINE DRIVERS |
| 285 | 285 | ***********************************************************/ |
| 286 | 286 | |
| 287 | static const serial_eeprom_interface gunbustr_eeprom_interface = | |
| 288 | { | |
| 289 | "0110", /* read command */ | |
| 290 | "0101", /* write command */ | |
| 291 | "0111", /* erase command */ | |
| 292 | "0100000000", /* unlock command */ | |
| 293 | "0100110000", /* lock command */ | |
| 294 | }; | |
| 295 | ||
| 296 | 287 | static const tc0480scp_interface gunbustr_tc0480scp_intf = |
| 297 | 288 | { |
| 298 | 289 | 1, 2, /* gfxnum, txnum */ |
| r24548 | r24549 | |
| 310 | 301 | MCFG_CPU_PROGRAM_MAP(gunbustr_map) |
| 311 | 302 | MCFG_CPU_VBLANK_INT_DRIVER("screen", gunbustr_state, gunbustr_interrupt) /* VBL */ |
| 312 | 303 | |
| 313 | MCFG_SERIAL_ | |
| 304 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 314 | 305 | |
| 315 | 306 | /* video hardware */ |
| 316 | 307 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 65 | 65 | UINT32 screen_update_pzletime(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 66 | 66 | required_device<cpu_device> m_maincpu; |
| 67 | 67 | required_device<okim6295_device> m_oki; |
| 68 | required_device<serial_ | |
| 68 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 69 | 69 | }; |
| 70 | 70 | |
| 71 | 71 | |
| r24548 | r24549 | |
| 171 | 171 | { |
| 172 | 172 | if (ACCESSING_BITS_0_7) |
| 173 | 173 | { |
| 174 | m_eeprom->write_bit(data & 0x01); | |
| 175 | m_eeprom->set_cs_line((data & 0x02) ? CLEAR_LINE : ASSERT_LINE ); | |
| 176 | m_eeprom->set_clock_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 174 | m_eeprom->di_write(data & 0x01); | |
| 175 | m_eeprom->cs_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 176 | m_eeprom->clk_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE ); | |
| 177 | 177 | } |
| 178 | 178 | } |
| 179 | 179 | |
| r24548 | r24549 | |
| 246 | 246 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 247 | 247 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 248 | 248 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 249 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 249 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* eeprom */ | |
| 250 | 250 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, pzletime_state,ticket_status_r, NULL) /* ticket dispenser */ |
| 251 | 251 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 252 | 252 | |
| r24548 | r24549 | |
| 335 | 335 | MCFG_SCREEN_UPDATE_DRIVER(pzletime_state, screen_update_pzletime) |
| 336 | 336 | MCFG_GFXDECODE(pzletime) |
| 337 | 337 | MCFG_PALETTE_LENGTH(0x300 + 32768) |
| 338 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 338 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 339 | 339 | |
| 340 | 340 | |
| 341 | 341 | /* sound hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 154 | 154 | DECLARE_READ16_MEMBER(pntnpuzl_eeprom_r); |
| 155 | 155 | DECLARE_WRITE16_MEMBER(pntnpuzl_eeprom_w); |
| 156 | 156 | DECLARE_DRIVER_INIT(pip); |
| 157 | required_device<serial_ | |
| 157 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 158 | 158 | }; |
| 159 | 159 | |
| 160 | 160 | |
| 161 | static const serial_eeprom_interface eeprom_intf = | |
| 162 | { | |
| 163 | "*110", /* read command */ | |
| 164 | "*101", /* write command */ | |
| 165 | NULL, /* erase command */ | |
| 166 | "*10000xxxx", /* lock command */ | |
| 167 | "*10011xxxx" /* unlock command */ | |
| 168 | }; | |
| 169 | ||
| 170 | ||
| 171 | 161 | READ16_MEMBER(pntnpuzl_state::pntnpuzl_eeprom_r) |
| 172 | 162 | { |
| 173 | 163 | /* bit 11 is EEPROM data */ |
| 174 | return (m_eeprom_data & 0xf4ff) | (m_eeprom->read | |
| 164 | return (m_eeprom_data & 0xf4ff) | (m_eeprom->do_read()<<11) | (ioport("IN1")->read() & 0x0300); | |
| 175 | 165 | } |
| 176 | 166 | |
| 177 | 167 | WRITE16_MEMBER(pntnpuzl_state::pntnpuzl_eeprom_w) |
| r24548 | r24549 | |
| 182 | 172 | /* bit 13 is clock (active high) */ |
| 183 | 173 | /* bit 14 is cs (active high) */ |
| 184 | 174 | |
| 185 | m_eeprom->write_bit(data & 0x1000); | |
| 186 | m_eeprom->set_cs_line((data & 0x4000) ? CLEAR_LINE : ASSERT_LINE); | |
| 187 | m_eeprom->set_clock_line((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE); | |
| 175 | m_eeprom->di_write((data & 0x1000) >> 12); | |
| 176 | m_eeprom->cs_write((data & 0x4000) ? ASSERT_LINE : CLEAR_LINE); | |
| 177 | m_eeprom->clk_write((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE); | |
| 188 | 178 | } |
| 189 | 179 | |
| 190 | 180 | |
| r24548 | r24549 | |
| 357 | 347 | MCFG_CPU_ADD("maincpu", M68000, 12000000)//?? |
| 358 | 348 | MCFG_CPU_PROGRAM_MAP(pntnpuzl_map) |
| 359 | 349 | |
| 360 | MCFG_SERIAL_ | |
| 350 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 361 | 351 | |
| 362 | 352 | /* video hardware */ |
| 363 | 353 | MCFG_FRAGMENT_ADD( pcvideo_vga ) |
| r24548 | r24549 | |
|---|---|---|
| 33 | 33 | |
| 34 | 34 | |
| 35 | 35 | |
| 36 | static const serial_eeprom_interface eeprom_intf = | |
| 37 | { | |
| 38 | "011000", /* read command */ | |
| 39 | "011100", /* write command */ | |
| 40 | "0100100000000",/* erase command */ | |
| 41 | "0100000000000",/* lock command */ | |
| 42 | "0100110000000" /* unlock command */ | |
| 43 | }; | |
| 44 | ||
| 45 | /* Gaiapolis and Polygonet Commanders use the ER5911, | |
| 46 | but the command formats are slightly different. Why? */ | |
| 47 | static const serial_eeprom_interface gaia_eeprom_intf = | |
| 48 | { | |
| 49 | "011000", /* read command */ | |
| 50 | "010100", /* write command */ | |
| 51 | "0100100000000",/* erase command */ | |
| 52 | "0100000000000",/* lock command */ | |
| 53 | "0100110000000" /* unlock command */ | |
| 54 | }; | |
| 55 | ||
| 56 | 36 | READ16_MEMBER(mystwarr_state::eeprom_r) |
| 57 | 37 | { |
| 58 | 38 | if (ACCESSING_BITS_0_7) |
| r24548 | r24549 | |
| 600 | 580 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 601 | 581 | |
| 602 | 582 | PORT_START("IN1") |
| 603 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 604 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 583 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 584 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 605 | 585 | PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) |
| 606 | 586 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* game loops if this is set */ |
| 607 | 587 | PORT_DIPNAME( 0x10, 0x00, "Sound Output" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 624 | 604 | KONAMI16_MSB(4, IPT_BUTTON3, IPT_START4 ) |
| 625 | 605 | |
| 626 | 606 | PORT_START( "EEPROMOUT" ) |
| 627 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 628 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 629 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 607 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 608 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 609 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 630 | 610 | INPUT_PORTS_END |
| 631 | 611 | |
| 632 | 612 | static INPUT_PORTS_START( metamrph ) |
| r24548 | r24549 | |
| 641 | 621 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 642 | 622 | |
| 643 | 623 | PORT_START("IN1") |
| 644 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 645 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 624 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 625 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 646 | 626 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) |
| 647 | 627 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 648 | 628 | PORT_DIPNAME( 0x10, 0x00, "Sound Output" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 667 | 647 | KONAMI16_MSB(4, IPT_BUTTON3, IPT_START4 ) |
| 668 | 648 | |
| 669 | 649 | PORT_START( "EEPROMOUT" ) |
| 670 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 671 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 672 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 650 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 651 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 652 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 673 | 653 | INPUT_PORTS_END |
| 674 | 654 | |
| 675 | 655 | static INPUT_PORTS_START( viostorm ) |
| r24548 | r24549 | |
| 684 | 664 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 685 | 665 | |
| 686 | 666 | PORT_START("IN1") |
| 687 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 688 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 667 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 668 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 689 | 669 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) |
| 690 | 670 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 691 | 671 | PORT_DIPNAME( 0x10, 0x00, "Sound Output" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 710 | 690 | KONAMI16_MSB(4, IPT_BUTTON3, IPT_START4 ) |
| 711 | 691 | |
| 712 | 692 | PORT_START( "EEPROMOUT" ) |
| 713 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 714 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 715 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 693 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 694 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 695 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 716 | 696 | INPUT_PORTS_END |
| 717 | 697 | |
| 718 | 698 | static INPUT_PORTS_START( dadandrn ) |
| r24548 | r24549 | |
| 728 | 708 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 729 | 709 | |
| 730 | 710 | PORT_START("IN1") |
| 731 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 732 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 711 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 712 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 733 | 713 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) |
| 734 | 714 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 735 | 715 | PORT_DIPNAME( 0x10, 0x00, "Sound Output" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 751 | 731 | KONAMI8_B123_START(4) |
| 752 | 732 | |
| 753 | 733 | PORT_START( "EEPROMOUT" ) |
| 754 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 755 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 756 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 734 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 735 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 736 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 757 | 737 | INPUT_PORTS_END |
| 758 | 738 | |
| 759 | 739 | static INPUT_PORTS_START( martchmp ) |
| r24548 | r24549 | |
| 768 | 748 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 769 | 749 | |
| 770 | 750 | PORT_START("IN1") |
| 771 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 772 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM ready (always 1) */ | |
| 751 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 752 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 773 | 753 | PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) |
| 774 | 754 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* game loops if this is set */ |
| 775 | 755 | PORT_DIPNAME( 0x10, 0x00, "Sound Output" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 790 | 770 | KONAMI16_MSB(4, IPT_BUTTON3, IPT_START4 ) |
| 791 | 771 | |
| 792 | 772 | PORT_START( "EEPROMOUT" ) |
| 793 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 794 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 795 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 773 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 774 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 775 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 796 | 776 | INPUT_PORTS_END |
| 797 | 777 | |
| 798 | 778 | /**********************************************************************************/ |
| r24548 | r24549 | |
| 970 | 950 | |
| 971 | 951 | MCFG_QUANTUM_TIME(attotime::from_hz(1920)) |
| 972 | 952 | |
| 973 | MCFG_SERIAL_E | |
| 953 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 974 | 954 | MCFG_K053252_ADD("k053252", 6000000, mystwarr_k053252_intf) // 6 MHz? |
| 975 | 955 | |
| 976 | 956 | MCFG_MACHINE_START_OVERRIDE(mystwarr_state,mystwarr) |
| r24548 | r24549 | |
| 1096 | 1076 | |
| 1097 | 1077 | MCFG_GFXDECODE(gaiapols) |
| 1098 | 1078 | |
| 1099 | MCFG_DEVICE_REMOVE("eeprom") | |
| 1100 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, gaia_eeprom_intf) | |
| 1101 | ||
| 1102 | 1079 | /* video hardware */ |
| 1103 | 1080 | MCFG_VIDEO_START_OVERRIDE(mystwarr_state,gaiapols) |
| 1104 | 1081 | MCFG_SCREEN_MODIFY("screen") |
| r24548 | r24549 | |
|---|---|---|
| 1361 | 1361 | // excpuint stat, objdma stat, eeprom do |
| 1362 | 1362 | |
| 1363 | 1363 | // note: racin' force expects bit 1 of the eeprom port to toggle |
| 1364 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1364 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1365 | 1365 | PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state,gx_rdport1_3_r, NULL) |
| 1366 | 1366 | PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 1367 | 1367 | PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_COIN2 ) |
| r24548 | r24549 | |
| 1374 | 1374 | PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) /* DIP#1 & DIP#2 */ |
| 1375 | 1375 | |
| 1376 | 1376 | PORT_START( "EEPROMOUT" ) |
| 1377 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1378 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1379 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1377 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1378 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1379 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1380 | 1380 | INPUT_PORTS_END |
| 1381 | 1381 | |
| 1382 | 1382 | |
| r24548 | r24549 | |
| 1777 | 1777 | MCFG_MACHINE_START_OVERRIDE(konamigx_state,konamigx) |
| 1778 | 1778 | MCFG_MACHINE_RESET_OVERRIDE(konamigx_state,konamigx) |
| 1779 | 1779 | |
| 1780 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1780 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1781 | 1781 | |
| 1782 | 1782 | /* video hardware */ |
| 1783 | 1783 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
|---|---|---|
| 403 | 403 | |
| 404 | 404 | ***************************************************************************/ |
| 405 | 405 | |
| 406 | static const serial_eeprom_interface eeprom_intf = | |
| 407 | { | |
| 408 | "011000", /* read command */ | |
| 409 | "011100", /* write command */ | |
| 410 | 0, /* erase command */ | |
| 411 | "0100000000000",/* lock command */ | |
| 412 | "0100110000000" /* unlock command */ | |
| 413 | }; | |
| 414 | ||
| 415 | ||
| 416 | 406 | READ16_MEMBER(tmnt_state::blswhstl_coin_r) |
| 417 | 407 | { |
| 418 | 408 | int res; |
| r24548 | r24549 | |
| 464 | 454 | } |
| 465 | 455 | } |
| 466 | 456 | |
| 467 | static const serial_eeprom_interface thndrx2_eeprom_intf = | |
| 468 | { | |
| 469 | "011000", /* read command */ | |
| 470 | "010100", /* write command */ | |
| 471 | 0, /* erase command */ | |
| 472 | "0100000000000",/* lock command */ | |
| 473 | "0100110000000" /* unlock command */ | |
| 474 | }; | |
| 475 | ||
| 476 | 457 | READ16_MEMBER(tmnt_state::thndrx2_eeprom_r) |
| 477 | 458 | { |
| 478 | 459 | int res; |
| r24548 | r24549 | |
| 1620 | 1601 | KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_UNKNOWN ) |
| 1621 | 1602 | |
| 1622 | 1603 | PORT_START("EEPROM") |
| 1623 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1624 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1604 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1605 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1625 | 1606 | PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1626 | 1607 | |
| 1627 | 1608 | PORT_START( "EEPROMOUT" ) |
| 1628 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1629 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1630 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1609 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1610 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1611 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1631 | 1612 | INPUT_PORTS_END |
| 1632 | 1613 | |
| 1633 | 1614 | static INPUT_PORTS_START( glfgreat ) |
| r24548 | r24549 | |
| 1764 | 1745 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1765 | 1746 | |
| 1766 | 1747 | PORT_START("EEPROM") |
| 1767 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1768 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1748 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1749 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1769 | 1750 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */ |
| 1770 | 1751 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK */ |
| 1771 | 1752 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */ |
| r24548 | r24549 | |
| 1773 | 1754 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) |
| 1774 | 1755 | |
| 1775 | 1756 | PORT_START( "EEPROMOUT" ) |
| 1776 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1777 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1778 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1757 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1758 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1759 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1779 | 1760 | INPUT_PORTS_END |
| 1780 | 1761 | |
| 1781 | 1762 | static INPUT_PORTS_START( ssridr4p ) |
| r24548 | r24549 | |
| 1802 | 1783 | KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_UNKNOWN ) |
| 1803 | 1784 | |
| 1804 | 1785 | PORT_START("EEPROM") |
| 1805 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1806 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1786 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1787 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1807 | 1788 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */ |
| 1808 | 1789 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK */ |
| 1809 | 1790 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */ |
| r24548 | r24549 | |
| 1811 | 1792 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) |
| 1812 | 1793 | |
| 1813 | 1794 | PORT_START( "EEPROMOUT" ) |
| 1814 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1815 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1816 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1795 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1796 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1797 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1817 | 1798 | INPUT_PORTS_END |
| 1818 | 1799 | |
| 1819 | 1800 | /* Same as 'ssridr4p', but additional Start button for each player. |
| r24548 | r24549 | |
| 1842 | 1823 | KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_START4 ) |
| 1843 | 1824 | |
| 1844 | 1825 | PORT_START("EEPROM") |
| 1845 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1846 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1826 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1827 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1847 | 1828 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */ |
| 1848 | 1829 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK */ |
| 1849 | 1830 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */ |
| r24548 | r24549 | |
| 1851 | 1832 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) |
| 1852 | 1833 | |
| 1853 | 1834 | PORT_START( "EEPROMOUT" ) |
| 1854 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1855 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1856 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1835 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1836 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1837 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1857 | 1838 | INPUT_PORTS_END |
| 1858 | 1839 | |
| 1859 | 1840 | /* Version for the bootleg, which has the service switch a little different */ |
| r24548 | r24549 | |
| 1881 | 1862 | KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_START4 ) |
| 1882 | 1863 | |
| 1883 | 1864 | PORT_START("EEPROM") |
| 1884 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1885 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1865 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1866 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1886 | 1867 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1887 | 1868 | PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) |
| 1888 | 1869 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 1889 | 1870 | |
| 1890 | 1871 | PORT_START( "EEPROMOUT" ) |
| 1891 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1892 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1893 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1872 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1873 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1874 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1894 | 1875 | INPUT_PORTS_END |
| 1895 | 1876 | |
| 1896 | 1877 | static INPUT_PORTS_START( qgakumon ) |
| r24548 | r24549 | |
| 1931 | 1912 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1932 | 1913 | |
| 1933 | 1914 | PORT_START("EEPROM") |
| 1934 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1935 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1915 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1916 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1936 | 1917 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */ |
| 1937 | 1918 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK (needs to be ACTIVE_HIGH to avoid problems) */ |
| 1938 | 1919 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */ |
| r24548 | r24549 | |
| 1940 | 1921 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) |
| 1941 | 1922 | |
| 1942 | 1923 | PORT_START( "EEPROMOUT" ) |
| 1943 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1944 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1945 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1924 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1925 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1926 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1946 | 1927 | INPUT_PORTS_END |
| 1947 | 1928 | |
| 1948 | 1929 | static INPUT_PORTS_START( thndrx2 ) |
| r24548 | r24549 | |
| 1959 | 1940 | |
| 1960 | 1941 | PORT_START("P2/EEPROM") |
| 1961 | 1942 | KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 ) |
| 1962 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1963 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1943 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1944 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1964 | 1945 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1965 | 1946 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* VBLK?? */ |
| 1966 | 1947 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1969 | 1950 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1970 | 1951 | |
| 1971 | 1952 | PORT_START( "EEPROMOUT" ) |
| 1972 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1973 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1974 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1953 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1954 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1955 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 1975 | 1956 | INPUT_PORTS_END |
| 1976 | 1957 | |
| 1977 | 1958 | static INPUT_PORTS_START( prmrsocr ) |
| r24548 | r24549 | |
| 1990 | 1971 | |
| 1991 | 1972 | PORT_START("P2/EEPROM") |
| 1992 | 1973 | KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 ) |
| 1993 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 1994 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SPECIAL ) /* EEPROM status? - always 1 */ | |
| 1974 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 1975 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 1995 | 1976 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 1996 | 1977 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1997 | 1978 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 2000 | 1981 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 2001 | 1982 | |
| 2002 | 1983 | PORT_START( "EEPROMOUT" ) |
| 2003 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2004 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2005 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1984 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 1985 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 1986 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 2006 | 1987 | INPUT_PORTS_END |
| 2007 | 1988 | |
| 2008 | 1989 | |
| r24548 | r24549 | |
| 2436 | 2417 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,common) |
| 2437 | 2418 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2438 | 2419 | |
| 2439 | MCFG_SERIAL_E | |
| 2420 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2440 | 2421 | |
| 2441 | 2422 | /* video hardware */ |
| 2442 | 2423 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2565 | 2546 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,prmrsocr) |
| 2566 | 2547 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2567 | 2548 | |
| 2568 | MCFG_SERIAL_E | |
| 2549 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2569 | 2550 | |
| 2570 | 2551 | /* video hardware */ |
| 2571 | 2552 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2614 | 2595 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,common) |
| 2615 | 2596 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2616 | 2597 | |
| 2617 | MCFG_SERIAL_E | |
| 2598 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2618 | 2599 | |
| 2619 | 2600 | /* video hardware */ |
| 2620 | 2601 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2661 | 2642 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,common) |
| 2662 | 2643 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2663 | 2644 | |
| 2664 | MCFG_SERIAL_E | |
| 2645 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2665 | 2646 | |
| 2666 | 2647 | /* video hardware */ |
| 2667 | 2648 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2704 | 2685 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,common) |
| 2705 | 2686 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2706 | 2687 | |
| 2707 | MCFG_SERIAL_E | |
| 2688 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2708 | 2689 | |
| 2709 | 2690 | /* video hardware */ |
| 2710 | 2691 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2744 | 2725 | MCFG_MACHINE_START_OVERRIDE(tmnt_state,common) |
| 2745 | 2726 | MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common) |
| 2746 | 2727 | |
| 2747 | MCFG_SERIAL_E | |
| 2728 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 2748 | 2729 | |
| 2749 | 2730 | /* video hardware */ |
| 2750 | 2731 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS) |
| r24548 | r24549 | |
|---|---|---|
| 1211 | 1211 | |
| 1212 | 1212 | READ16_MEMBER(metro_state::gakusai_eeprom_r) |
| 1213 | 1213 | { |
| 1214 | return m_eeprom->read | |
| 1214 | return m_eeprom->do_read() & 1; | |
| 1215 | 1215 | } |
| 1216 | 1216 | |
| 1217 | 1217 | WRITE16_MEMBER(metro_state::gakusai_eeprom_w) |
| r24548 | r24549 | |
| 1219 | 1219 | if (ACCESSING_BITS_0_7) |
| 1220 | 1220 | { |
| 1221 | 1221 | // latch the bit |
| 1222 | m_eeprom->write | |
| 1222 | m_eeprom->di_write(BIT(data, 0)); | |
| 1223 | 1223 | |
| 1224 | 1224 | // reset line asserted: reset. |
| 1225 | m_eeprom-> | |
| 1225 | m_eeprom->cs_write(BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE ); | |
| 1226 | 1226 | |
| 1227 | 1227 | // clock line asserted: write latch or select next bit to read |
| 1228 | m_eeprom-> | |
| 1228 | m_eeprom->clk_write(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE ); | |
| 1229 | 1229 | } |
| 1230 | 1230 | } |
| 1231 | 1231 | |
| r24548 | r24549 | |
| 1309 | 1309 | READ16_MEMBER(metro_state::dokyusp_eeprom_r) |
| 1310 | 1310 | { |
| 1311 | 1311 | // clock line asserted: write latch or select next bit to read |
| 1312 | m_eeprom->set_clock_line(CLEAR_LINE); | |
| 1313 | m_eeprom->set_clock_line(ASSERT_LINE); | |
| 1312 | m_eeprom->clk_write(CLEAR_LINE); | |
| 1313 | m_eeprom->clk_write(ASSERT_LINE); | |
| 1314 | 1314 | |
| 1315 | return m_eeprom->read | |
| 1315 | return m_eeprom->do_read() & 1; | |
| 1316 | 1316 | } |
| 1317 | 1317 | |
| 1318 | 1318 | WRITE16_MEMBER(metro_state::dokyusp_eeprom_bit_w) |
| r24548 | r24549 | |
| 1320 | 1320 | if (ACCESSING_BITS_0_7) |
| 1321 | 1321 | { |
| 1322 | 1322 | // latch the bit |
| 1323 | m_eeprom->write | |
| 1323 | m_eeprom->di_write(BIT(data, 0)); | |
| 1324 | 1324 | |
| 1325 | 1325 | // clock line asserted: write latch or select next bit to read |
| 1326 | m_eeprom->set_clock_line(CLEAR_LINE); | |
| 1327 | m_eeprom->set_clock_line(ASSERT_LINE); | |
| 1326 | m_eeprom->clk_write(CLEAR_LINE); | |
| 1327 | m_eeprom->clk_write(ASSERT_LINE); | |
| 1328 | 1328 | } |
| 1329 | 1329 | } |
| 1330 | 1330 | |
| r24548 | r24549 | |
| 1333 | 1333 | if (ACCESSING_BITS_0_7) |
| 1334 | 1334 | { |
| 1335 | 1335 | // reset line asserted: reset. |
| 1336 | m_eeprom-> | |
| 1336 | m_eeprom->cs_write(BIT(data, 0) ? ASSERT_LINE : CLEAR_LINE); | |
| 1337 | 1337 | } |
| 1338 | 1338 | } |
| 1339 | 1339 | |
| r24548 | r24549 | |
| 4021 | 4021 | |
| 4022 | 4022 | MCFG_MACHINE_START_OVERRIDE(metro_state,metro) |
| 4023 | 4023 | MCFG_MACHINE_RESET_OVERRIDE(metro_state,metro) |
| 4024 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 4024 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 4025 | 4025 | |
| 4026 | 4026 | /* video hardware */ |
| 4027 | 4027 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 4057 | 4057 | |
| 4058 | 4058 | MCFG_MACHINE_START_OVERRIDE(metro_state,metro) |
| 4059 | 4059 | MCFG_MACHINE_RESET_OVERRIDE(metro_state,metro) |
| 4060 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 4060 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 4061 | 4061 | |
| 4062 | 4062 | /* video hardware */ |
| 4063 | 4063 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 4093 | 4093 | |
| 4094 | 4094 | MCFG_MACHINE_START_OVERRIDE(metro_state,metro) |
| 4095 | 4095 | MCFG_MACHINE_RESET_OVERRIDE(metro_state,metro) |
| 4096 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 4096 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 4097 | 4097 | |
| 4098 | 4098 | /* video hardware */ |
| 4099 | 4099 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 175 | 175 | #include "emu.h" |
| 176 | 176 | #include "cpu/m6800/m6800.h" |
| 177 | 177 | #include "cpu/i8085/i8085.h" |
| 178 | #include "machine/eepromser.h" | |
| 179 | 178 | #include "sound/ay8910.h" |
| 180 | 179 | #include "sound/speaker.h" |
| 181 | 180 | #include "includes/8080bw.h" |
| r24548 | r24549 | |
| 3148 | 3147 | |
| 3149 | 3148 | READ8_MEMBER(_8080bw_state::invmulti_eeprom_r) |
| 3150 | 3149 | { |
| 3151 | return m_eeprom->read | |
| 3150 | return m_eeprom->do_read(); | |
| 3152 | 3151 | } |
| 3153 | 3152 | |
| 3154 | 3153 | WRITE8_MEMBER(_8080bw_state::invmulti_eeprom_w) |
| 3155 | 3154 | { |
| 3156 | 3155 | // d0: latch bit |
| 3157 | m_eeprom->write | |
| 3156 | m_eeprom->di_write(data & 1); | |
| 3158 | 3157 | |
| 3159 | 3158 | // d6: reset |
| 3160 | m_eeprom-> | |
| 3159 | m_eeprom->cs_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 3161 | 3160 | |
| 3162 | 3161 | // d4: write latch or select next bit to read |
| 3163 | m_eeprom-> | |
| 3162 | m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); | |
| 3164 | 3163 | } |
| 3165 | 3164 | |
| 3166 | 3165 | WRITE8_MEMBER(_8080bw_state::invmulti_bank_w) |
| r24548 | r24549 | |
| 3184 | 3183 | MCFG_CPU_MODIFY("maincpu") |
| 3185 | 3184 | MCFG_CPU_PROGRAM_MAP(invmulti_map) |
| 3186 | 3185 | |
| 3187 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 3186 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 3188 | 3187 | |
| 3189 | 3188 | MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state,invmulti) |
| 3190 | 3189 | MACHINE_CONFIG_END |
| r24548 | r24549 | |
|---|---|---|
| 105 | 105 | |
| 106 | 106 | ***************************************************************************/ |
| 107 | 107 | |
| 108 | static const serial_eeprom_interface eeprom_intf = | |
| 109 | { | |
| 110 | "011000", /* read command */ | |
| 111 | "011100", /* write command */ | |
| 112 | 0, /* erase command */ | |
| 113 | "0100000000000",/* lock command */ | |
| 114 | "0100110000000" /* unlock command */ | |
| 115 | }; | |
| 116 | ||
| 117 | 108 | WRITE8_MEMBER(vendetta_state::vendetta_eeprom_w) |
| 118 | 109 | { |
| 119 | 110 | /* bit 0 - VOC0 - Video banking related */ |
| r24548 | r24549 | |
| 318 | 309 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 319 | 310 | |
| 320 | 311 | PORT_START("EEPROM") |
| 321 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 322 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* EEPROM ready */ | |
| 312 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 313 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 323 | 314 | PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) |
| 324 | 315 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* not really vblank, object related. Its timed, otherwise sprites flicker */ |
| 325 | 316 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 326 | 317 | |
| 327 | 318 | PORT_START( "EEPROMOUT" ) |
| 328 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 329 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 330 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 319 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 320 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 321 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 331 | 322 | INPUT_PORTS_END |
| 332 | 323 | |
| 333 | 324 | static INPUT_PORTS_START( vendetta ) |
| r24548 | r24549 | |
| 374 | 365 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 375 | 366 | |
| 376 | 367 | PORT_START("EEPROM") |
| 377 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 378 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* EEPROM ready */ | |
| 368 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 369 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 379 | 370 | PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) |
| 380 | 371 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* not really vblank, object related. Its timed, otherwise sprites flicker */ |
| 381 | 372 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 382 | 373 | |
| 383 | 374 | PORT_START( "EEPROMOUT" ) |
| 384 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 385 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 386 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 375 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 376 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 377 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 387 | 378 | INPUT_PORTS_END |
| 388 | 379 | |
| 389 | 380 | static INPUT_PORTS_START( esckidsj ) |
| r24548 | r24549 | |
| 496 | 487 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 497 | 488 | /* interrupts are triggered by the main CPU */ |
| 498 | 489 | |
| 490 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 499 | 491 | |
| 500 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 501 | ||
| 502 | 492 | /* video hardware */ |
| 503 | 493 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| 504 | 494 |
| r24548 | r24549 | |
|---|---|---|
| 1461 | 1461 | int res; |
| 1462 | 1462 | |
| 1463 | 1463 | /* bit 3 is EEPROM data */ |
| 1464 | res = m_eeprom->read | |
| 1464 | res = m_eeprom->do_read() << 4; | |
| 1465 | 1465 | return res; |
| 1466 | 1466 | } |
| 1467 | 1467 | |
| r24548 | r24549 | |
| 1470 | 1470 | /* bit 4 is data */ |
| 1471 | 1471 | /* bit 2 is clock */ |
| 1472 | 1472 | /* bit 5 is cs */ |
| 1473 | m_eeprom->write_bit(data & 0x8); | |
| 1474 | m_eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE); | |
| 1475 | m_eeprom->set_clock_line((data & 0x4) ? ASSERT_LINE : CLEAR_LINE); | |
| 1473 | m_eeprom->di_write((data & 0x8) >> 3); | |
| 1474 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 1475 | m_eeprom->clk_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE); | |
| 1476 | 1476 | } |
| 1477 | 1477 | |
| 1478 | 1478 | /* Dreamcast MAP |
| r24548 | r24549 | |
| 1828 | 1828 | |
| 1829 | 1829 | static INPUT_PORTS_START( naomi_mie ) |
| 1830 | 1830 | PORT_START("MIE.3") |
| 1831 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", serial_eeprom_device, write_bit) | |
| 1832 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", serial_eeprom_device, set_cs_line) | |
| 1833 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", serial_eeprom_device, set_clock_line) | |
| 1831 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1832 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1833 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1834 | 1834 | |
| 1835 | 1835 | PORT_START("MIE.5") |
| 1836 | 1836 | PORT_DIPNAME( 0x01, 0x00, "Monitor" ) PORT_DIPLOCATION("SW1:1") |
| r24548 | r24549 | |
| 1848 | 1848 | PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) |
| 1849 | 1849 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 1850 | 1850 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 1851 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("mie_eeprom", serial_ | |
| 1851 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("mie_eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1852 | 1852 | INPUT_PORTS_END |
| 1853 | 1853 | |
| 1854 | 1854 | /* 2 players with 1 joystick and 6 buttons each */ |
| r24548 | r24549 | |
| 2493 | 2493 | |
| 2494 | 2494 | MCFG_MACHINE_RESET_OVERRIDE(naomi_state,naomi) |
| 2495 | 2495 | |
| 2496 | MCFG_EEPROM_93C46_ADD("main_eeprom") | |
| 2497 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 2496 | MCFG_EEPROM_SERIAL_93C46_ADD("main_eeprom") | |
| 2497 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 2498 | 2498 | |
| 2499 | 2499 | /* video hardware */ |
| 2500 | 2500 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 2514 | 2514 | static MACHINE_CONFIG_DERIVED( naomi_base, naomi_aw_base ) |
| 2515 | 2515 | MCFG_MIE_ADD("mie", 4000000, "maple_dc", 0, 0, 0, 0, ":MIE.3", 0, ":MIE.5", 0, 0) // Actual frequency unknown |
| 2516 | 2516 | MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "mie", ":TILT", ":P1", ":P2", ":A0", ":A1", ":A2", ":A3", ":A4", ":A5", ":A6", ":A7", ":OUTPUT") |
| 2517 | MCFG_EEPROM_93C46_8BIT_ADD("mie_eeprom") | |
| 2517 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("mie_eeprom") | |
| 2518 | 2518 | |
| 2519 | 2519 | MCFG_X76F100_ADD("naomibd_eeprom") |
| 2520 | 2520 | MACHINE_CONFIG_END |
| r24548 | r24549 | |
|---|---|---|
| 666 | 666 | |
| 667 | 667 | if (which == 0) |
| 668 | 668 | { |
| 669 | m_eeprom->write_bit(data & 0x80); | |
| 670 | m_eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE); | |
| 671 | m_eeprom->set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 669 | m_eeprom->di_write((data & 0x80) >> 7); | |
| 670 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 671 | m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 672 | 672 | } |
| 673 | 673 | /* coin_lockout_w(machine(), 1 + 2*which, data & 0x08); |
| 674 | 674 | coin_lockout_w(machine(), 0 + 2*which, data & 0x04);*/ |
| r24548 | r24549 | |
| 683 | 683 | else |
| 684 | 684 | { |
| 685 | 685 | /* multi-32 EEPROM access */ |
| 686 | m_eeprom->write_bit(data & 0x80); | |
| 687 | m_eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE); | |
| 688 | m_eeprom->set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 686 | m_eeprom->di_write((data & 0x80) >> 7); | |
| 687 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 688 | m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 689 | 689 | } |
| 690 | 690 | break; |
| 691 | 691 | |
| r24548 | r24549 | |
| 1321 | 1321 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) /* sometimes mirrors SERVICE1 */ |
| 1322 | 1322 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) /* tends to also work as a test switch */ |
| 1323 | 1323 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1324 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1324 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1325 | 1325 | |
| 1326 | 1326 | PORT_START("PORTG_A") |
| 1327 | 1327 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 1356 | 1356 | |
| 1357 | 1357 | PORT_START("SERVICE34_B") |
| 1358 | 1358 | PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1359 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1359 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1360 | 1360 | |
| 1361 | 1361 | PORT_START("PORTG_B") |
| 1362 | 1362 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 2178 | 2178 | |
| 2179 | 2179 | MCFG_MACHINE_RESET_OVERRIDE(segas32_state,system32) |
| 2180 | 2180 | |
| 2181 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2181 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2182 | 2182 | |
| 2183 | 2183 | MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback) |
| 2184 | 2184 | MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback) |
| r24548 | r24549 | |
| 2237 | 2237 | |
| 2238 | 2238 | MCFG_MACHINE_RESET_OVERRIDE(segas32_state,system32) |
| 2239 | 2239 | |
| 2240 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2240 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2241 | 2241 | |
| 2242 | 2242 | MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback) |
| 2243 | 2243 | MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback) |
| r24548 | r24549 | |
|---|---|---|
| 284 | 284 | |
| 285 | 285 | /* These are not read directly, but through PORT_CUSTOMs above */ |
| 286 | 286 | PORT_START("EEPROMIN") |
| 287 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 287 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 288 | 288 | PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW ) |
| 289 | 289 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 290 | 290 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* Another service mode */ |
| r24548 | r24549 | |
| 300 | 300 | PORT_BIT( 0xfff, 0x000, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(25) PORT_CODE_DEC(KEYCODE_N) PORT_CODE_INC(KEYCODE_M) PORT_PLAYER(2) |
| 301 | 301 | |
| 302 | 302 | PORT_START( "EEPROMOUT" ) |
| 303 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 304 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 305 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 303 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 304 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 305 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 306 | 306 | INPUT_PORTS_END |
| 307 | 307 | |
| 308 | 308 | static INPUT_PORTS_START( kn ) |
| r24548 | r24549 | |
| 442 | 442 | |
| 443 | 443 | MCFG_MACHINE_START_OVERRIDE(taito_f3_state,f3) |
| 444 | 444 | |
| 445 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 445 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 446 | 446 | |
| 447 | 447 | /* video hardware */ |
| 448 | 448 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 487 | 487 | static MACHINE_CONFIG_DERIVED( f3_eeprom, f3 ) |
| 488 | 488 | |
| 489 | 489 | MCFG_DEVICE_REMOVE("eeprom") |
| 490 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 491 | MCFG_SERIAL_EEPROM_DATA(recalh_eeprom, 128) //TODO: convert this into ROM | |
| 490 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 491 | MCFG_EEPROM_SERIAL_DATA(recalh_eeprom, 128) //TODO: convert this into ROM | |
| 492 | 492 | MACHINE_CONFIG_END |
| 493 | 493 | |
| 494 | 494 | static MACHINE_CONFIG_DERIVED( f3_224b_eeprom, f3 ) |
| 495 | 495 | |
| 496 | 496 | MCFG_DEVICE_REMOVE("eeprom") |
| 497 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 498 | MCFG_SERIAL_EEPROM_DATA(recalh_eeprom, 128) //TODO: convert this into ROM | |
| 497 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 498 | MCFG_EEPROM_SERIAL_DATA(recalh_eeprom, 128) //TODO: convert this into ROM | |
| 499 | 499 | MACHINE_CONFIG_END |
| 500 | 500 | |
| 501 | 501 | static const gfx_layout bubsympb_sprite_layout = |
| r24548 | r24549 | |
| 536 | 536 | |
| 537 | 537 | MCFG_MACHINE_START_OVERRIDE(taito_f3_state,f3) |
| 538 | 538 | |
| 539 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 539 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 540 | 540 | |
| 541 | 541 | /* video hardware */ |
| 542 | 542 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 176 | 176 | #define GUNX( a ) (( ( ioport(gunnames[2 * (a - 1)])->read() * 287 ) / 0xff ) + 16) |
| 177 | 177 | #define GUNY( a ) (( ( ioport(gunnames[2 * (a - 1) + 1])->read() * 223 ) / 0xff ) + 10) |
| 178 | 178 | |
| 179 | static const serial_eeprom_interface eeprom_intf = | |
| 180 | { | |
| 181 | "011000", /* read command */ | |
| 182 | "011100", /* write command */ | |
| 183 | "0100100000000", /* erase command */ | |
| 184 | "0100000000000", /* lock command */ | |
| 185 | "0100110000000" /* unlock command */ | |
| 186 | }; | |
| 187 | ||
| 188 | 179 | WRITE8_MEMBER(lethal_state::control2_w) |
| 189 | 180 | { |
| 190 | 181 | /* bit 0 is data */ |
| r24548 | r24549 | |
| 489 | 480 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) |
| 490 | 481 | |
| 491 | 482 | PORT_START("DSW") |
| 492 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 493 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* it must be 1 ? */ | |
| 483 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 484 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 494 | 485 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 495 | 486 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 496 | 487 | PORT_DIPNAME( 0x10, 0x10, DEF_STR(Language) ) |
| r24548 | r24549 | |
| 507 | 498 | PORT_DIPSETTING( 0x0080, DEF_STR( Stereo ) ) |
| 508 | 499 | |
| 509 | 500 | PORT_START( "EEPROMOUT" ) |
| 510 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 511 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 512 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 501 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 502 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 503 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 513 | 504 | |
| 514 | 505 | PORT_START("LIGHT0_X") |
| 515 | 506 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1) |
| r24548 | r24549 | |
| 636 | 627 | MCFG_CPU_ADD("soundcpu", Z80, MAIN_CLOCK/4) /* verified on pcb */ |
| 637 | 628 | MCFG_CPU_PROGRAM_MAP(le_sound) |
| 638 | 629 | |
| 630 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 639 | 631 | |
| 640 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 641 | ||
| 642 | 632 | MCFG_GFXDECODE(lethal) |
| 643 | 633 | |
| 644 | 634 | /* video hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 147 | 147 | protected: |
| 148 | 148 | // devices |
| 149 | 149 | required_device<cpu_device> m_maincpu; |
| 150 | required_device<serial_ | |
| 150 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 151 | 151 | required_shared_ptr<UINT16> m_vram; |
| 152 | 152 | |
| 153 | 153 | // driver_device overrides |
| r24548 | r24549 | |
| 226 | 226 | |
| 227 | 227 | READ8_MEMBER(invqix_state::port3_r) |
| 228 | 228 | { |
| 229 | return (m_eeprom->read | |
| 229 | return (m_eeprom->do_read() << 5) | 0x03; | |
| 230 | 230 | } |
| 231 | 231 | |
| 232 | 232 | WRITE8_MEMBER(invqix_state::port3_w) |
| 233 | 233 | { |
| 234 | m_eeprom->set_cs_line(((data >> 2) & 1) ^ 1); | |
| 235 | m_eeprom->write_bit((data >> 4) & 1); | |
| 236 | m_eeprom->set_clock_line((data >> 3) & 1); | |
| 234 | m_eeprom->cs_write((data >> 2) & 1); | |
| 235 | m_eeprom->di_write((data >> 4) & 1); | |
| 236 | m_eeprom->clk_write((data >> 3) & 1); | |
| 237 | 237 | } |
| 238 | 238 | |
| 239 | 239 | READ8_MEMBER(invqix_state::port5_r) |
| r24548 | r24549 | |
| 344 | 344 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.80) |
| 345 | 345 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.80) |
| 346 | 346 | |
| 347 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 348 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 347 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 348 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 349 | 349 | MACHINE_CONFIG_END |
| 350 | 350 | |
| 351 | 351 | ROM_START( invqix ) |
| r24548 | r24549 | |
|---|---|---|
| 18 | 18 | #include "includes/konamipt.h" |
| 19 | 19 | #include "includes/asterix.h" |
| 20 | 20 | |
| 21 | static const serial_eeprom_interface eeprom_intf = | |
| 22 | { | |
| 23 | "111000", /* read command */ | |
| 24 | "111100", /* write command */ | |
| 25 | "1100100000000",/* erase command */ | |
| 26 | "1100000000000",/* lock command */ | |
| 27 | "1100110000000" /* unlock command */ | |
| 28 | }; | |
| 29 | ||
| 30 | 21 | #if 0 |
| 31 | 22 | READ16_MEMBER(asterix_state::control2_r) |
| 32 | 23 | { |
| r24548 | r24549 | |
| 211 | 202 | |
| 212 | 203 | PORT_START("IN1") |
| 213 | 204 | KONAMI16_LSB(2, IPT_UNKNOWN, IPT_START2) |
| 214 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 215 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // EEPROM ready (always 1) | |
| 205 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 206 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 216 | 207 | PORT_SERVICE_NO_TOGGLE(0x0400, IP_ACTIVE_LOW ) |
| 217 | 208 | PORT_BIT( 0xf800, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 218 | 209 | |
| 219 | 210 | PORT_START( "EEPROMOUT" ) |
| 220 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 221 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 222 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 211 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 212 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 213 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 223 | 214 | INPUT_PORTS_END |
| 224 | 215 | |
| 225 | 216 | |
| r24548 | r24549 | |
| 286 | 277 | MCFG_CPU_ADD("audiocpu", Z80, 8000000) |
| 287 | 278 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 288 | 279 | |
| 280 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 289 | 281 | |
| 290 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 291 | ||
| 292 | 282 | /* video hardware */ |
| 293 | 283 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| 294 | 284 |
| r24548 | r24549 | |
|---|---|---|
| 68 | 68 | |
| 69 | 69 | #include "emu.h" |
| 70 | 70 | #include "cpu/z80/z80.h" |
| 71 | #include "machine/eepromser.h" | |
| 72 | 71 | #include "machine/kabuki.h" // needed for decoding functions only |
| 73 | 72 | #include "includes/mitchell.h" |
| 74 | 73 | #include "sound/okim6295.h" |
| r24548 | r24549 | |
| 83 | 82 | * |
| 84 | 83 | *************************************/ |
| 85 | 84 | |
| 86 | static const serial_eeprom_interface eeprom_intf = | |
| 87 | { | |
| 88 | "0110", /* read command */ | |
| 89 | "0101", /* write command */ | |
| 90 | "0111" /* erase command */ | |
| 91 | }; | |
| 92 | ||
| 93 | 85 | READ8_MEMBER(mitchell_state::pang_port5_r) |
| 94 | 86 | { |
| 95 | 87 | /* bits 0 and (sometimes) 3 are checked in the interrupt handler. |
| r24548 | r24549 | |
| 104 | 96 | |
| 105 | 97 | WRITE8_MEMBER(mitchell_state::eeprom_cs_w) |
| 106 | 98 | { |
| 107 | m_eeprom-> | |
| 99 | m_eeprom->cs_write(data ? CLEAR_LINE : ASSERT_LINE); | |
| 108 | 100 | } |
| 109 | 101 | |
| 110 | 102 | WRITE8_MEMBER(mitchell_state::eeprom_clock_w) |
| 111 | 103 | { |
| 112 | m_eeprom-> | |
| 104 | m_eeprom->clk_write(data ? CLEAR_LINE : ASSERT_LINE); | |
| 113 | 105 | } |
| 114 | 106 | |
| 115 | 107 | WRITE8_MEMBER(mitchell_state::eeprom_serial_w) |
| 116 | 108 | { |
| 117 | m_eeprom->write | |
| 109 | m_eeprom->di_write(data); | |
| 118 | 110 | } |
| 119 | 111 | |
| 120 | 112 | |
| r24548 | r24549 | |
| 395 | 387 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 396 | 388 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 397 | 389 | PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 398 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 390 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 399 | 391 | |
| 400 | 392 | PORT_START("IN0") |
| 401 | 393 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 645 | 637 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 646 | 638 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 647 | 639 | PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 648 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 640 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 649 | 641 | |
| 650 | 642 | PORT_START("IN0") |
| 651 | 643 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 812 | 804 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 813 | 805 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 814 | 806 | PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 815 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 807 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 816 | 808 | |
| 817 | 809 | PORT_START("IN0") |
| 818 | 810 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) /* same as the service mode farther down */ |
| r24548 | r24549 | |
| 852 | 844 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 853 | 845 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 854 | 846 | PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 855 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 847 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 856 | 848 | |
| 857 | 849 | PORT_START("IN0") |
| 858 | 850 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 894 | 886 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 895 | 887 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 896 | 888 | PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 897 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 889 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 898 | 890 | |
| 899 | 891 | PORT_START("IN0") |
| 900 | 892 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1088 | 1080 | MCFG_MACHINE_START_OVERRIDE(mitchell_state,mitchell) |
| 1089 | 1081 | MCFG_MACHINE_RESET_OVERRIDE(mitchell_state,mitchell) |
| 1090 | 1082 | |
| 1091 | MCFG_SERIAL_ | |
| 1083 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1092 | 1084 | |
| 1093 | 1085 | /* video hardware */ |
| 1094 | 1086 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1125 | 1117 | MCFG_MACHINE_START_OVERRIDE(mitchell_state,mitchell) |
| 1126 | 1118 | MCFG_MACHINE_RESET_OVERRIDE(mitchell_state,mitchell) |
| 1127 | 1119 | |
| 1128 | MCFG_SERIAL_ | |
| 1120 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1129 | 1121 | |
| 1130 | 1122 | /* video hardware */ |
| 1131 | 1123 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1260 | 1252 | MCFG_CPU_IO_MAP(mitchell_io_map) |
| 1261 | 1253 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mitchell_state, mitchell_irq, "screen", 0, 1) |
| 1262 | 1254 | |
| 1263 | MCFG_SERIAL_ | |
| 1255 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1264 | 1256 | |
| 1265 | 1257 | /* video hardware */ |
| 1266 | 1258 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1311 | 1303 | MCFG_CPU_IO_MAP(mitchell_io_map) |
| 1312 | 1304 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mitchell_state, mitchell_irq, "screen", 0, 1) |
| 1313 | 1305 | |
| 1314 | MCFG_SERIAL_ | |
| 1306 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1315 | 1307 | |
| 1316 | 1308 | /* video hardware */ |
| 1317 | 1309 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 184 | 184 | if (ACCESSING_BITS_8_15) { |
| 185 | 185 | UINT8 ebyte=(data>>8)&0xff; |
| 186 | 186 | // if (ebyte&0x80) { |
| 187 | m_eeprom->set_clock_line((ebyte & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 188 | m_eeprom->write_bit(ebyte & 0x1); | |
| 189 | m_eeprom->set_cs_line((ebyte & 0x4) ? CLEAR_LINE : ASSERT_LINE); | |
| 187 | m_eeprom->clk_write((ebyte & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 188 | m_eeprom->di_write(ebyte & 0x1); | |
| 189 | m_eeprom->cs_write((ebyte & 0x4) ? ASSERT_LINE : CLEAR_LINE); | |
| 190 | 190 | // } |
| 191 | 191 | } |
| 192 | 192 | else if (ACCESSING_BITS_0_7) { |
| r24548 | r24549 | |
| 344 | 344 | PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 345 | 345 | PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 346 | 346 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 347 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 347 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 348 | 348 | PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) |
| 349 | 349 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 350 | 350 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 420 | 420 | MCFG_CPU_PROGRAM_MAP(decomlc_map) |
| 421 | 421 | |
| 422 | 422 | MCFG_MACHINE_RESET_OVERRIDE(deco_mlc_state,mlc) |
| 423 | MCFG_EEPROM_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 423 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 424 | 424 | |
| 425 | 425 | MCFG_TIMER_DRIVER_ADD("int_timer", deco_mlc_state, interrupt_gen) |
| 426 | 426 | |
| r24548 | r24549 | |
| 453 | 453 | MCFG_CPU_PROGRAM_MAP(decomlc_map) |
| 454 | 454 | |
| 455 | 455 | MCFG_MACHINE_RESET_OVERRIDE(deco_mlc_state,mlc) |
| 456 | MCFG_EEPROM_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 456 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 457 | 457 | |
| 458 | 458 | MCFG_TIMER_DRIVER_ADD("int_timer", deco_mlc_state, interrupt_gen) |
| 459 | 459 |
| r24548 | r24549 | |
|---|---|---|
| 244 | 244 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE ) /* says tilt */ |
| 245 | 245 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) /* says test */ |
| 246 | 246 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 247 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 247 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 248 | 248 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 249 | 249 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* bump left */ |
| 250 | 250 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) /* bump right */ |
| r24548 | r24549 | |
| 282 | 282 | PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 283 | 283 | |
| 284 | 284 | PORT_START( "EEPROMOUT" ) |
| 285 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 286 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 287 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 285 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 286 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 287 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 288 | 288 | INPUT_PORTS_END |
| 289 | 289 | |
| 290 | 290 | |
| r24548 | r24549 | |
| 296 | 296 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE ) |
| 297 | 297 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) |
| 298 | 298 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 299 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 299 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 300 | 300 | PORT_BIT( 0x1f00, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 301 | 301 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* button */ |
| 302 | 302 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* ticket */ |
| r24548 | r24549 | |
| 330 | 330 | PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 331 | 331 | |
| 332 | 332 | PORT_START( "EEPROMOUT" ) |
| 333 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 334 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 335 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 333 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 334 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 335 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 336 | 336 | INPUT_PORTS_END |
| 337 | 337 | |
| 338 | 338 | |
| r24548 | r24549 | |
| 344 | 344 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE ) |
| 345 | 345 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) |
| 346 | 346 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 347 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 347 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 348 | 348 | PORT_BIT( 0x1f00, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 349 | 349 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_5_PAD) |
| 350 | 350 | PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r24548 | r24549 | |
| 380 | 380 | PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 381 | 381 | |
| 382 | 382 | PORT_START( "EEPROMOUT" ) |
| 383 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 384 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 385 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 383 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 384 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 385 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 386 | 386 | INPUT_PORTS_END |
| 387 | 387 | |
| 388 | 388 | |
| r24548 | r24549 | |
| 405 | 405 | MCFG_CPU_PERIODIC_INT_DRIVER(dcheese_state, irq1_line_hold, 480) /* accurate for fredmem */ |
| 406 | 406 | |
| 407 | 407 | |
| 408 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 408 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 409 | 409 | MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) |
| 410 | 410 | |
| 411 | 411 | /* video hardware */ |
| r24548 | r24549 | |
|---|---|---|
| 144 | 144 | /* handle EEPROM I/O */ |
| 145 | 145 | if (ACCESSING_BITS_16_23) |
| 146 | 146 | { |
| 147 | m_eeprom->write_bit(data & 0x00800000); | |
| 148 | m_eeprom->set_cs_line((data & 0x00200000) ? CLEAR_LINE : ASSERT_LINE); | |
| 149 | m_eeprom->set_clock_line((data & 0x00400000) ? ASSERT_LINE : CLEAR_LINE); | |
| 147 | m_eeprom->di_write((data & 0x00800000) >> 23); | |
| 148 | m_eeprom->cs_write((data & 0x00200000) ? ASSERT_LINE : CLEAR_LINE); | |
| 149 | m_eeprom->clk_write((data & 0x00400000) ? ASSERT_LINE : CLEAR_LINE); | |
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | /* toggling BSMT off then on causes a reset */ |
| r24548 | r24549 | |
| 233 | 233 | |
| 234 | 234 | /************************************* |
| 235 | 235 | * |
| 236 | * EEPROM interface/saving | |
| 237 | * | |
| 238 | *************************************/ | |
| 239 | ||
| 240 | static const serial_eeprom_interface eeprom_interface_policetr = | |
| 241 | { | |
| 242 | "*110", // read 1 10 aaaaaa | |
| 243 | "*101", // write 1 01 aaaaaa dddddddddddddddd | |
| 244 | "*111", // erase 1 11 aaaaaa | |
| 245 | "*10000xxxx", // lock 1 00 00xxxx | |
| 246 | "*10011xxxx" // unlock 1 00 11xxxx | |
| 247 | }; | |
| 248 | ||
| 249 | ||
| 250 | ||
| 251 | /************************************* | |
| 252 | * | |
| 253 | 236 | * Main CPU memory handlers |
| 254 | 237 | * |
| 255 | 238 | *************************************/ |
| r24548 | r24549 | |
| 332 | 315 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 333 | 316 | PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 334 | 317 | PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 335 | PORT_BIT( 0x20000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 318 | PORT_BIT( 0x20000000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM read */ | |
| 336 | 319 | PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 337 | 320 | PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 338 | 321 | |
| r24548 | r24549 | |
| 414 | 397 | MCFG_CPU_PROGRAM_MAP(policetr_map) |
| 415 | 398 | MCFG_CPU_VBLANK_INT_DRIVER("screen", policetr_state, irq4_gen) |
| 416 | 399 | |
| 417 | MCFG_SERIAL_ | |
| 400 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 418 | 401 | |
| 419 | 402 | /* video hardware */ |
| 420 | 403 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| r24548 | r24549 | |
|---|---|---|
| 84 | 84 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 85 | 85 | DECLARE_WRITE_LINE_MEMBER(livequiz_irqhandler); |
| 86 | 86 | required_device<cpu_device> m_maincpu; |
| 87 | required_device<serial_ | |
| 87 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 88 | 88 | }; |
| 89 | 89 | |
| 90 | 90 | |
| r24548 | r24549 | |
| 217 | 217 | if (ACCESSING_BITS_0_7) |
| 218 | 218 | { |
| 219 | 219 | // latch the bit |
| 220 | m_eeprom->write | |
| 220 | m_eeprom->di_write((data & 0x04) >> 2); | |
| 221 | 221 | |
| 222 | 222 | // reset line asserted: reset. |
| 223 | m_eeprom-> | |
| 223 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE ); | |
| 224 | 224 | |
| 225 | 225 | // clock line asserted: write latch or select next bit to read |
| 226 | m_eeprom-> | |
| 226 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); | |
| 227 | 227 | } |
| 228 | 228 | } |
| 229 | 229 | |
| r24548 | r24549 | |
| 456 | 456 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 457 | 457 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 458 | 458 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 459 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 459 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // EEPROM | |
| 460 | 460 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 461 | 461 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 462 | 462 | PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW ) |
| r24548 | r24549 | |
| 589 | 589 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 590 | 590 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 591 | 591 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 592 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 592 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 593 | 593 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 594 | 594 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 595 | 595 | PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW ) |
| r24548 | r24549 | |
| 701 | 701 | MCFG_CPU_PROGRAM_MAP(livequiz_map) |
| 702 | 702 | MCFG_CPU_VBLANK_INT_DRIVER("screen", midas_state, irq1_line_hold) |
| 703 | 703 | |
| 704 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 704 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 705 | 705 | |
| 706 | 706 | /* video hardware */ |
| 707 | 707 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 730 | 730 | MCFG_CPU_PROGRAM_MAP(hammer_map) |
| 731 | 731 | MCFG_CPU_VBLANK_INT_DRIVER("screen", midas_state, irq1_line_hold) |
| 732 | 732 | |
| 733 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 733 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 734 | 734 | |
| 735 | 735 | MCFG_TICKET_DISPENSER_ADD("prize1", attotime::from_msec(1000*5), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| 736 | 736 | MCFG_TICKET_DISPENSER_ADD("prize2", attotime::from_msec(1000*5), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| r24548 | r24549 | |
|---|---|---|
| 512 | 512 | //MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 64*8-1) |
| 513 | 513 | MCFG_SCREEN_UPDATE_DRIVER(galpani3_state, screen_update_galpani3) |
| 514 | 514 | |
| 515 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 515 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 516 | 516 | |
| 517 | 517 | MCFG_DEVICE_ADD("toybox", KANEKO_TOYBOX, 0) |
| 518 | 518 |
| r24548 | r24549 | |
|---|---|---|
| 45 | 45 | #define JOE_DMADELAY (attotime::from_nsec(42700 + 341300)) |
| 46 | 46 | |
| 47 | 47 | |
| 48 | static const serial_eeprom_interface eeprom_intf = | |
| 49 | { | |
| 50 | "011000", /* read command */ | |
| 51 | "011100", /* write command */ | |
| 52 | "0100100000000",/* erase command */ | |
| 53 | "0100000000000",/* lock command */ | |
| 54 | "0100110000000" /* unlock command */ | |
| 55 | }; | |
| 56 | ||
| 57 | ||
| 58 | 48 | READ16_MEMBER(gijoe_state::control2_r) |
| 59 | 49 | { |
| 60 | 50 | return m_cur_control2; |
| r24548 | r24549 | |
| 198 | 188 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 ) |
| 199 | 189 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START3 ) |
| 200 | 190 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START4 ) |
| 201 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 202 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SPECIAL ) // EEPROM ready (always 1) | |
| 191 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 192 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 203 | 193 | PORT_SERVICE_NO_TOGGLE( 0x0800, IP_ACTIVE_LOW ) |
| 204 | 194 | |
| 205 | 195 | PORT_START( "EEPROMOUT" ) |
| 206 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 207 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 208 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 196 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 197 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 198 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 209 | 199 | |
| 210 | 200 | PORT_START("SYSTEM") |
| 211 | 201 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| r24548 | r24549 | |
| 283 | 273 | MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* Amuse & confirmed. z80e */ |
| 284 | 274 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 285 | 275 | |
| 276 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 286 | 277 | |
| 287 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 288 | ||
| 289 | 278 | /* video hardware */ |
| 290 | 279 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_UPDATE_BEFORE_VBLANK) |
| 291 | 280 |
| r24548 | r24549 | |
|---|---|---|
| 954 | 954 | MCFG_MACHINE_START_OVERRIDE(stv_state,stv) |
| 955 | 955 | MCFG_MACHINE_RESET_OVERRIDE(stv_state,stv) |
| 956 | 956 | |
| 957 | MCFG_EEPROM_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 957 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") /* Actually 93c45 */ | |
| 958 | 958 | |
| 959 | 959 | MCFG_TIMER_DRIVER_ADD("sector_timer", stv_state, stv_sector_cb) |
| 960 | 960 | MCFG_TIMER_DRIVER_ADD("sh1_cmd", stv_state, stv_sh1_sim) |
| r24548 | r24549 | |
|---|---|---|
| 122 | 122 | virtual void video_start(); |
| 123 | 123 | UINT32 screen_update_spool99(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 124 | 124 | required_device<cpu_device> m_maincpu; |
| 125 | required_device<serial_ | |
| 125 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 126 | 126 | required_device<okim6295_device> m_oki; |
| 127 | 127 | }; |
| 128 | 128 | |
| r24548 | r24549 | |
| 186 | 186 | case 0xafe4: return ioport("SERVICE2")->read();//attract mode |
| 187 | 187 | // case 0xafe5: return 1; |
| 188 | 188 | // case 0xafe6: return 1; |
| 189 | case 0xafe7: return m_eeprom->read | |
| 189 | case 0xafe7: return m_eeprom->do_read(); | |
| 190 | 190 | case 0xaff8: return m_oki->read(space,0); |
| 191 | 191 | } |
| 192 | 192 | } |
| r24548 | r24549 | |
| 199 | 199 | WRITE8_MEMBER(spool99_state::eeprom_resetline_w) |
| 200 | 200 | { |
| 201 | 201 | // reset line asserted: reset. |
| 202 | m_eeprom-> | |
| 202 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE ); | |
| 203 | 203 | } |
| 204 | 204 | |
| 205 | 205 | WRITE8_MEMBER(spool99_state::eeprom_clockline_w) |
| 206 | 206 | { |
| 207 | 207 | // clock line asserted: write latch or select next bit to read |
| 208 | m_eeprom-> | |
| 208 | m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE ); | |
| 209 | 209 | } |
| 210 | 210 | |
| 211 | 211 | WRITE8_MEMBER(spool99_state::eeprom_dataline_w) |
| 212 | 212 | { |
| 213 | 213 | // latch the bit |
| 214 | m_eeprom->write | |
| 214 | m_eeprom->di_write(data & 0x01); | |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | 217 | static ADDRESS_MAP_START( spool99_map, AS_PROGRAM, 8, spool99_state ) |
| r24548 | r24549 | |
| 251 | 251 | case 0xa7a2: return ioport("START")->read(); |
| 252 | 252 | case 0xa7a3: return ioport("BET")->read();//system 2 |
| 253 | 253 | |
| 254 | case 0xa7a7: return m_eeprom->read | |
| 254 | case 0xa7a7: return m_eeprom->do_read(); | |
| 255 | 255 | |
| 256 | 256 | } |
| 257 | 257 | } |
| r24548 | r24549 | |
| 361 | 361 | |
| 362 | 362 | MCFG_PALETTE_LENGTH(0x200) |
| 363 | 363 | |
| 364 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 364 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 365 | 365 | |
| 366 | 366 | |
| 367 | 367 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| r24548 | r24549 | |
|---|---|---|
| 47 | 47 | WRITE16_MEMBER(xorworld_state::eeprom_chip_select_w) |
| 48 | 48 | { |
| 49 | 49 | /* bit 0 is CS (active low) */ |
| 50 | m_eeprom-> | |
| 50 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 51 | 51 | } |
| 52 | 52 | |
| 53 | 53 | WRITE16_MEMBER(xorworld_state::eeprom_serial_clock_w) |
| 54 | 54 | { |
| 55 | 55 | /* bit 0 is SK (active high) */ |
| 56 | m_eeprom-> | |
| 56 | m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | WRITE16_MEMBER(xorworld_state::eeprom_data_w) |
| 60 | 60 | { |
| 61 | 61 | /* bit 0 is EEPROM data (DIN) */ |
| 62 | m_eeprom->write | |
| 62 | m_eeprom->di_write(data & 0x01); | |
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | WRITE16_MEMBER(xorworld_state::xorworld_irq2_ack_w) |
| r24548 | r24549 | |
| 104 | 104 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) |
| 105 | 105 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 106 | 106 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 107 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 107 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* used for accessing the NVRAM */ | |
| 108 | 108 | PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) |
| 109 | 109 | PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) |
| 110 | 110 | PORT_DIPSETTING( 0x60, DEF_STR( Normal ) ) |
| r24548 | r24549 | |
| 174 | 174 | |
| 175 | 175 | MCFG_QUANTUM_TIME(attotime::from_hz(60)) |
| 176 | 176 | |
| 177 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 177 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 178 | 178 | |
| 179 | 179 | // video hardware |
| 180 | 180 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 768 | 768 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 769 | 769 | |
| 770 | 770 | PORT_START( "EEPROMOUT" ) |
| 771 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 772 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 771 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 772 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 773 | 773 | INPUT_PORTS_END |
| 774 | 774 | |
| 775 | 775 | |
| r24548 | r24549 | |
| 1343 | 1343 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1344 | 1344 | |
| 1345 | 1345 | PORT_START( "EEPROMOUT" ) |
| 1346 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1347 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1346 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1347 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1348 | 1348 | INPUT_PORTS_END |
| 1349 | 1349 | |
| 1350 | 1350 | |
| r24548 | r24549 | |
| 1419 | 1419 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1420 | 1420 | |
| 1421 | 1421 | PORT_START( "EEPROMOUT" ) |
| 1422 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1423 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1422 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1423 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1424 | 1424 | INPUT_PORTS_END |
| 1425 | 1425 | |
| 1426 | 1426 | |
| r24548 | r24549 | |
| 1495 | 1495 | ******************************************************/ |
| 1496 | 1496 | |
| 1497 | 1497 | PORT_START( "EEPROMOUT" ) |
| 1498 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1499 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1498 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1499 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1500 | 1500 | INPUT_PORTS_END |
| 1501 | 1501 | |
| 1502 | 1502 | |
| r24548 | r24549 | |
| 1591 | 1591 | DEVCB_NULL, |
| 1592 | 1592 | }; |
| 1593 | 1593 | |
| 1594 | WRITE8_MEMBER(kaneko16_state::kaneko16_eeprom_reset_w) | |
| 1595 | { | |
| 1596 | // FIXME: the device line cannot be directly put in the interface due to inverse value! | |
| 1597 | // we might want to define a "reversed" set_cs_line handler | |
| 1598 | // reset line asserted: reset. | |
| 1599 | m_eeprom->set_cs_line((data & 0x01) ? CLEAR_LINE : ASSERT_LINE ); | |
| 1600 | } | |
| 1601 | ||
| 1602 | 1594 | static const ay8910_interface ay8910_intf_eeprom = |
| 1603 | 1595 | { |
| 1604 | 1596 | AY8910_LEGACY_OUTPUT, |
| 1605 | 1597 | AY8910_DEFAULT_LOADS, |
| 1606 | DEVCB_DEVICE_LINE_MEMBER("eeprom", serial_ | |
| 1598 | DEVCB_DEVICE_LINE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read), /* inputs A: 0,EEPROM bit read */ | |
| 1607 | 1599 | DEVCB_NULL, /* inputs B */ |
| 1608 | 1600 | DEVCB_NULL, /* outputs A */ |
| 1609 | DEVCB_D | |
| 1601 | DEVCB_DEVICE_LINE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) /* outputs B: 0,EEPROM reset */ | |
| 1610 | 1602 | }; |
| 1611 | 1603 | |
| 1612 | 1604 | |
| r24548 | r24549 | |
| 1682 | 1674 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", kaneko16_state, kaneko16_interrupt, "screen", 0, 1) |
| 1683 | 1675 | |
| 1684 | 1676 | MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,gtmr) |
| 1685 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1677 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1686 | 1678 | |
| 1687 | 1679 | /* video hardware */ |
| 1688 | 1680 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) // mangled sprites otherwise |
| r24548 | r24549 | |
| 1811 | 1803 | |
| 1812 | 1804 | MCFG_MACHINE_RESET_OVERRIDE(kaneko16_gtmr_state,gtmr) |
| 1813 | 1805 | |
| 1814 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1806 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1815 | 1807 | |
| 1816 | 1808 | /* video hardware */ |
| 1817 | 1809 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 1929 | 1921 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", kaneko16_state, kaneko16_interrupt, "screen", 0, 1) |
| 1930 | 1922 | |
| 1931 | 1923 | MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,mgcrystl) |
| 1932 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1924 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1933 | 1925 | |
| 1934 | 1926 | /* video hardware */ |
| 1935 | 1927 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) |
| r24548 | r24549 | |
| 2053 | 2045 | |
| 2054 | 2046 | MCFG_MACHINE_RESET_OVERRIDE(kaneko16_shogwarr_state,mgcrystl) |
| 2055 | 2047 | |
| 2056 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2057 | MCFG_SERIAL_EEPROM_DATA(shogwarr_default_eeprom, 128) | |
| 2048 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2049 | MCFG_EEPROM_SERIAL_DATA(shogwarr_default_eeprom, 128) | |
| 2058 | 2050 | |
| 2059 | 2051 | /* video hardware */ |
| 2060 | 2052 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 2123 | 2115 | kaneko_hit_device::set_type(*device, 2); |
| 2124 | 2116 | |
| 2125 | 2117 | MCFG_DEVICE_REMOVE("eeprom") |
| 2126 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2127 | MCFG_SERIAL_EEPROM_DATA(brapboys_default_eeprom, 128) | |
| 2118 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2119 | MCFG_EEPROM_SERIAL_DATA(brapboys_default_eeprom, 128) | |
| 2128 | 2120 | MACHINE_CONFIG_END |
| 2129 | 2121 | |
| 2130 | 2122 | /*************************************************************************** |
| r24548 | r24549 | |
|---|---|---|
| 152 | 152 | void rabbit_drawtilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichtilemap ); |
| 153 | 153 | void rabbit_do_blit(); |
| 154 | 154 | required_device<cpu_device> m_maincpu; |
| 155 | required_device<serial_ | |
| 155 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 156 | 156 | |
| 157 | 157 | protected: |
| 158 | 158 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| r24548 | r24549 | |
| 692 | 692 | if (mem_mask == 0xff000000) |
| 693 | 693 | { |
| 694 | 694 | // latch the bit |
| 695 | m_eeprom->write | |
| 695 | m_eeprom->di_write((data & 0x01000000) >> 24); | |
| 696 | 696 | |
| 697 | 697 | // reset line asserted: reset. |
| 698 | m_eeprom-> | |
| 698 | m_eeprom->cs_write((data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 699 | 699 | |
| 700 | 700 | // clock line asserted: write latch or select next bit to read |
| 701 | m_eeprom-> | |
| 701 | m_eeprom->clk_write((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 702 | 702 | } |
| 703 | 703 | } |
| 704 | 704 | |
| r24548 | r24549 | |
| 740 | 740 | |
| 741 | 741 | static INPUT_PORTS_START( rabbit ) |
| 742 | 742 | PORT_START("INPUTS") |
| 743 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 743 | PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // as per code at 4d932 | |
| 744 | 744 | PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unlabeled in input test |
| 745 | 745 | PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_START1 ) |
| 746 | 746 | PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_START2 ) |
| r24548 | r24549 | |
| 893 | 893 | MCFG_CPU_PROGRAM_MAP(rabbit_map) |
| 894 | 894 | MCFG_CPU_VBLANK_INT_DRIVER("screen", rabbit_state, rabbit_vblank_interrupt) |
| 895 | 895 | |
| 896 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 896 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 897 | 897 | |
| 898 | 898 | MCFG_GFXDECODE(rabbit) |
| 899 | 899 |
| r24548 | r24549 | |
|---|---|---|
| 30 | 30 | |
| 31 | 31 | ***************************************************************************/ |
| 32 | 32 | |
| 33 | static const serial_eeprom_interface eeprom_intf = | |
| 34 | { | |
| 35 | "011000", /* read command */ | |
| 36 | "011100", /* write command */ | |
| 37 | 0, /* erase command */ | |
| 38 | "0100000000000",/* lock command */ | |
| 39 | "0100110000000" /* unlock command */ | |
| 40 | }; | |
| 41 | ||
| 42 | 33 | WRITE16_MEMBER(xmen_state::eeprom_w) |
| 43 | 34 | { |
| 44 | 35 | logerror("%06x: write %04x to 108000\n",space.device().safe_pc(),data); |
| r24548 | r24549 | |
| 204 | 195 | |
| 205 | 196 | PORT_START("EEPROM") |
| 206 | 197 | PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 207 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 208 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* EEPROM status - always 1 */ | |
| 198 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 199 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 209 | 200 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) |
| 210 | 201 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) |
| 211 | 202 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 ) |
| r24548 | r24549 | |
| 215 | 206 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 216 | 207 | |
| 217 | 208 | PORT_START( "EEPROMOUT" ) |
| 218 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 219 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 220 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 209 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 210 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 211 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 221 | 212 | INPUT_PORTS_END |
| 222 | 213 | |
| 223 | 214 | static INPUT_PORTS_START( xmen2p ) |
| r24548 | r24549 | |
| 233 | 224 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 234 | 225 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE2 ) |
| 235 | 226 | PORT_BIT( 0x003c, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 236 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 237 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* EEPROM status - always 1 */ | |
| 227 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 228 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 238 | 229 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) |
| 239 | 230 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) |
| 240 | 231 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 244 | 235 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 245 | 236 | |
| 246 | 237 | PORT_START( "EEPROMOUT" ) |
| 247 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 248 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 249 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 238 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 239 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 240 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 250 | 241 | INPUT_PORTS_END |
| 251 | 242 | |
| 252 | 243 | CUSTOM_INPUT_MEMBER(xmen_state::xmen_frame_r) |
| r24548 | r24549 | |
| 269 | 260 | |
| 270 | 261 | PORT_START("EEPROM") |
| 271 | 262 | PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */ |
| 272 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 273 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* EEPROM status - always 1 */ | |
| 263 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read) | |
| 264 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read) | |
| 274 | 265 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) |
| 275 | 266 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) |
| 276 | 267 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 ) |
| r24548 | r24549 | |
| 281 | 272 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xmen_state,xmen_frame_r, NULL) /* screen indicator? */ |
| 282 | 273 | |
| 283 | 274 | PORT_START( "EEPROMOUT" ) |
| 284 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 285 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 286 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 275 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write) | |
| 276 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write) | |
| 277 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write) | |
| 287 | 278 | INPUT_PORTS_END |
| 288 | 279 | |
| 289 | 280 | |
| r24548 | r24549 | |
| 358 | 349 | MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/2) /* verified on pcb */ |
| 359 | 350 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 360 | 351 | |
| 352 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 361 | 353 | |
| 362 | MCFG_SERIAL_EEPROM_ADD("eeprom", 128, 8, eeprom_intf) | |
| 363 | ||
| 364 | 354 | /* video hardware */ |
| 365 | 355 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| 366 | 356 | |
| r24548 | r24549 | |
| 408 | 398 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 409 | 399 | |
| 410 | 400 | |
| 411 | MCFG_SERIAL_E | |
| 401 | MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom") | |
| 412 | 402 | |
| 413 | 403 | /* video hardware */ |
| 414 | 404 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| r24548 | r24549 | |
|---|---|---|
| 78 | 78 | void ttmjprd_draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom ); |
| 79 | 79 | void tmmjprd_do_blit(); |
| 80 | 80 | required_device<cpu_device> m_maincpu; |
| 81 | required_device<serial_ | |
| 81 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 82 | 82 | }; |
| 83 | 83 | |
| 84 | 84 | |
| r24548 | r24549 | |
| 509 | 509 | if (mem_mask == 0xff000000) |
| 510 | 510 | { |
| 511 | 511 | // latch the bit |
| 512 | m_eeprom->write | |
| 512 | m_eeprom->di_write((data & 0x01000000) >> 24); | |
| 513 | 513 | |
| 514 | 514 | // reset line asserted: reset. |
| 515 | m_eeprom-> | |
| 515 | m_eeprom->cs_write((data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 516 | 516 | |
| 517 | 517 | // clock line asserted: write latch or select next bit to read |
| 518 | m_eeprom-> | |
| 518 | m_eeprom->clk_write((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); | |
| 519 | 519 | } |
| 520 | 520 | } |
| 521 | 521 | |
| r24548 | r24549 | |
| 544 | 544 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Right Screen Coin B") // might actually be service 1 |
| 545 | 545 | PORT_SERVICE( 0x20, IP_ACTIVE_LOW ) |
| 546 | 546 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 547 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 547 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // CHECK! | |
| 548 | 548 | |
| 549 | 549 | PORT_START("PL1_1") |
| 550 | 550 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1) |
| r24548 | r24549 | |
| 753 | 753 | MCFG_CPU_PROGRAM_MAP(tmmjprd_map) |
| 754 | 754 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmmjprd_state, tmmjprd_scanline, "lscreen", 0, 1) |
| 755 | 755 | |
| 756 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 756 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 757 | 757 | |
| 758 | 758 | MCFG_GFXDECODE(tmmjprd) |
| 759 | 759 |
| r24548 | r24549 | |
|---|---|---|
| 380 | 380 | |
| 381 | 381 | PORT_START( "EEPROMIN" ) |
| 382 | 382 | PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 383 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 383 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 384 | 384 | |
| 385 | 385 | PORT_START( "EEPROMOUT" ) |
| 386 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 387 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 388 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 386 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 387 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 388 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 389 | 389 | INPUT_PORTS_END |
| 390 | 390 | |
| 391 | 391 | static INPUT_PORTS_START( showhanc ) |
| r24548 | r24549 | |
| 409 | 409 | |
| 410 | 410 | PORT_START( "EEPROMIN" ) |
| 411 | 411 | PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 412 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 412 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 413 | 413 | |
| 414 | 414 | PORT_START( "EEPROMOUT" ) |
| 415 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 416 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 417 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 415 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 416 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 417 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 418 | 418 | INPUT_PORTS_END |
| 419 | 419 | |
| 420 | 420 | static INPUT_PORTS_START( skilldrp ) |
| r24548 | r24549 | |
| 438 | 438 | |
| 439 | 439 | PORT_START( "EEPROMIN" ) |
| 440 | 440 | PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 441 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 441 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 442 | 442 | |
| 443 | 443 | PORT_START( "EEPROMOUT" ) |
| 444 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 445 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 446 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 444 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 445 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 446 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 447 | 447 | INPUT_PORTS_END |
| 448 | 448 | |
| 449 | 449 | /*************************************************************************** |
| r24548 | r24549 | |
| 480 | 480 | MCFG_CPU_VBLANK_INT_DRIVER("screen", astrocorp_state, irq4_line_hold) |
| 481 | 481 | |
| 482 | 482 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 483 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 484 | MCFG_SERIAL_EEPROM_DATA(showhand_default_eeprom, sizeof(showhand_default_eeprom)) | |
| 483 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 484 | MCFG_EEPROM_SERIAL_DATA(showhand_default_eeprom, sizeof(showhand_default_eeprom)) | |
| 485 | 485 | |
| 486 | 486 | /* video hardware */ |
| 487 | 487 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 529 | 529 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", astrocorp_state, skilldrp_scanline, "screen", 0, 1) |
| 530 | 530 | |
| 531 | 531 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 532 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 532 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 533 | 533 | |
| 534 | 534 | MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| 535 | 535 | MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| r24548 | r24549 | |
|---|---|---|
| 419 | 419 | MCFG_CPU_IO_MAP(pasha2_io) |
| 420 | 420 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pasha2_state, irq0_line_hold) |
| 421 | 421 | |
| 422 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 422 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 423 | 423 | |
| 424 | 424 | /* video hardware */ |
| 425 | 425 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 290 | 290 | result |= m_serial->status_r(space, 0); |
| 291 | 291 | } |
| 292 | 292 | |
| 293 | if (m_eeprom->read | |
| 293 | if (m_eeprom->do_read()) | |
| 294 | 294 | result ^= 0x0004; |
| 295 | 295 | if (LOG) |
| 296 | 296 | logerror("eeprom_data_r(%02X)\n", result); |
| r24548 | r24549 | |
| 319 | 319 | { |
| 320 | 320 | if (ACCESSING_BITS_0_7) |
| 321 | 321 | { |
| 322 | m_eeprom->write | |
| 322 | m_eeprom->di_write(data & 0x01); | |
| 323 | 323 | } |
| 324 | 324 | else if (mem_mask != 0xffff) |
| 325 | 325 | logerror("write mask: %08x data %08x\n", mem_mask, data); |
| r24548 | r24549 | |
| 330 | 330 | { |
| 331 | 331 | if (ACCESSING_BITS_0_7) |
| 332 | 332 | { |
| 333 | m_eeprom-> | |
| 333 | m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 334 | 334 | } |
| 335 | 335 | } |
| 336 | 336 | |
| r24548 | r24549 | |
| 339 | 339 | { |
| 340 | 340 | if (ACCESSING_BITS_0_7) |
| 341 | 341 | { |
| 342 | m_eeprom-> | |
| 342 | m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); | |
| 343 | 343 | } |
| 344 | 344 | } |
| 345 | 345 | |
| r24548 | r24549 | |
| 992 | 992 | MCFG_CPU_DATA_MAP(adsp_data_map) |
| 993 | 993 | |
| 994 | 994 | |
| 995 | MCFG_EEPROM_93C66 | |
| 995 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 996 | 996 | |
| 997 | 997 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 998 | 998 |
| r24548 | r24549 | |
|---|---|---|
| 50 | 50 | PXA255_LCD_Regs m_lcd_regs; |
| 51 | 51 | |
| 52 | 52 | dmadac_sound_device *m_dmadac[2]; |
| 53 | required_device<serial_ | |
| 53 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 54 | 54 | UINT32 m_pxa255_lcd_palette[0x100]; |
| 55 | 55 | UINT8 m_pxa255_lcd_framebuffer[0x100000]; |
| 56 | 56 | |
| r24548 | r24549 | |
| 806 | 806 | { |
| 807 | 807 | case PXA255_GPLR0: |
| 808 | 808 | verboselog( machine(), 3, "pxa255_gpio_r: GPIO Pin-Level Register 0: %08x & %08x\n", gpio_regs->gplr0 | (1 << 1), mem_mask ); |
| 809 | return gpio_regs->gplr0 | (1 << 1) | (m_eeprom->read | |
| 809 | return gpio_regs->gplr0 | (1 << 1) | (m_eeprom->do_read() << 5); // Must be on. Probably a DIP switch. | |
| 810 | 810 | case PXA255_GPLR1: |
| 811 | 811 | verboselog( machine(), 3, "pxa255_gpio_r: *Not Yet Implemented* GPIO Pin-Level Register 1: %08x & %08x\n", gpio_regs->gplr1, mem_mask ); |
| 812 | 812 | return 0xff9fffff; |
| r24548 | r24549 | |
| 927 | 927 | gpio_regs->gpsr0 |= data & gpio_regs->gpdr0; |
| 928 | 928 | if(data & 0x00000004) |
| 929 | 929 | { |
| 930 | m_eeprom-> | |
| 930 | m_eeprom->cs_write(ASSERT_LINE); | |
| 931 | 931 | } |
| 932 | 932 | if(data & 0x00000008) |
| 933 | 933 | { |
| 934 | m_eeprom-> | |
| 934 | m_eeprom->clk_write(ASSERT_LINE); | |
| 935 | 935 | } |
| 936 | 936 | if(data & 0x00000010) |
| 937 | 937 | { |
| 938 | m_eeprom->write | |
| 938 | m_eeprom->di_write(1); | |
| 939 | 939 | } |
| 940 | 940 | break; |
| 941 | 941 | case PXA255_GPSR1: |
| r24548 | r24549 | |
| 951 | 951 | gpio_regs->gpsr0 &= ~(data & gpio_regs->gpdr0); |
| 952 | 952 | if(data & 0x00000004) |
| 953 | 953 | { |
| 954 | m_eeprom-> | |
| 954 | m_eeprom->cs_write(ASSERT_LINE); | |
| 955 | 955 | } |
| 956 | 956 | if(data & 0x00000008) |
| 957 | 957 | { |
| 958 | m_eeprom-> | |
| 958 | m_eeprom->clk_write(CLEAR_LINE); | |
| 959 | 959 | } |
| 960 | 960 | if(data & 0x00000010) |
| 961 | 961 | { |
| 962 | m_eeprom->write | |
| 962 | m_eeprom->di_write(0); | |
| 963 | 963 | } |
| 964 | 964 | break; |
| 965 | 965 | case PXA255_GPCR1: |
| r24548 | r24549 | |
| 1591 | 1591 | |
| 1592 | 1592 | MCFG_PALETTE_LENGTH(256) |
| 1593 | 1593 | |
| 1594 | MCFG_EEPROM_93C66 | |
| 1594 | MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") | |
| 1595 | 1595 | |
| 1596 | 1596 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1597 | 1597 |
| r24548 | r24549 | |
|---|---|---|
| 262 | 262 | required_device<cpu_device> m_dsp; |
| 263 | 263 | optional_device<cpu_device> m_dsp2; |
| 264 | 264 | required_device<adc1038_device> m_adc1038; |
| 265 | required_device<serial_ | |
| 265 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 266 | 266 | UINT32 *m_sharc_dataram_0; |
| 267 | 267 | UINT32 *m_sharc_dataram_1; |
| 268 | 268 | DECLARE_WRITE32_MEMBER(paletteram32_w); |
| r24548 | r24549 | |
| 359 | 359 | |
| 360 | 360 | /******************************************************************/ |
| 361 | 361 | |
| 362 | /* 93C56 EEPROM */ | |
| 363 | static const serial_eeprom_interface eeprom_intf = | |
| 364 | { | |
| 365 | "*110", /* read command */ | |
| 366 | "*101", /* write command */ | |
| 367 | "*111", /* erase command */ | |
| 368 | "*10000xxxxxx", /* lock command */ | |
| 369 | "*10011xxxxxx", /* unlock command */ | |
| 370 | 1, /* enable_multi_read */ | |
| 371 | 0 /* reset_delay */ | |
| 372 | }; | |
| 373 | ||
| 374 | 362 | READ8_MEMBER(gticlub_state::sysreg_r) |
| 375 | 363 | { |
| 376 | 364 | static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" }; |
| r24548 | r24549 | |
| 392 | 380 | // a = ADC readout |
| 393 | 381 | // e = EEPROM data out |
| 394 | 382 | |
| 395 | UINT32 eeprom_bit = (m_eeprom->read | |
| 383 | UINT32 eeprom_bit = (m_eeprom->do_read() << 1); | |
| 396 | 384 | UINT32 adc_bit = (m_adc1038->do_read() << 2); |
| 397 | 385 | return (eeprom_bit | adc_bit); |
| 398 | 386 | } |
| r24548 | r24549 | |
| 414 | 402 | break; |
| 415 | 403 | |
| 416 | 404 | case 3: |
| 417 | m_eeprom->write_bit((data & 0x01) ? 1 : 0); | |
| 418 | m_eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 419 | m_eeprom->set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE); | |
| 405 | m_eeprom->di_write((data & 0x01) ? 1 : 0); | |
| 406 | m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); | |
| 407 | m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE); | |
| 420 | 408 | break; |
| 421 | 409 | |
| 422 | 410 | case 4: |
| r24548 | r24549 | |
| 976 | 964 | |
| 977 | 965 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 978 | 966 | |
| 979 | MCFG_SERIAL_ | |
| 967 | MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") | |
| 980 | 968 | |
| 981 | 969 | MCFG_MACHINE_START_OVERRIDE(gticlub_state,gticlub) |
| 982 | 970 | MCFG_MACHINE_RESET_OVERRIDE(gticlub_state,gticlub) |
| r24548 | r24549 | |
| 1083 | 1071 | |
| 1084 | 1072 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 1085 | 1073 | |
| 1086 | MCFG_SERIAL_ | |
| 1074 | MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") | |
| 1087 | 1075 | |
| 1088 | 1076 | MCFG_MACHINE_START_OVERRIDE(gticlub_state,gticlub) |
| 1089 | 1077 | MCFG_MACHINE_RESET_OVERRIDE(gticlub_state,hangplt) |
| r24548 | r24549 | |
|---|---|---|
| 354 | 354 | optional_device<cpu_device> m_gn680; |
| 355 | 355 | required_device<cpu_device> m_dsp; |
| 356 | 356 | optional_device<cpu_device> m_dsp2; |
| 357 | required_device<serial_ | |
| 357 | required_device<eeprom_serial_93cxx_device> m_eeprom; | |
| 358 | 358 | optional_device<k037122_device> m_k037122_1; |
| 359 | 359 | optional_device<k037122_device> m_k037122_2; |
| 360 | 360 | required_device<adc12138_device> m_adc12138; |
| r24548 | r24549 | |
| 509 | 509 | 0x02 = ADDOR (ADC DOR) |
| 510 | 510 | 0x01 = ADDO (ADC DO) |
| 511 | 511 | */ |
| 512 | r = 0xf0 | (m_eeprom->read | |
| 512 | r = 0xf0 | (m_eeprom->do_read() << 3); | |
| 513 | 513 | r |= m_adc12138->do_r(space, 0) | (m_adc12138->eoc_r(space, 0) << 2); |
| 514 | 514 | break; |
| 515 | 515 | |
| r24548 | r24549 | |
| 821 | 821 | PORT_DIPSETTING( 0x00, "15KHz" ) |
| 822 | 822 | |
| 823 | 823 | PORT_START( "EEPROMOUT" ) |
| 824 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 825 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 826 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 824 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 825 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 826 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 827 | 827 | INPUT_PORTS_END |
| 828 | 828 | |
| 829 | 829 | static INPUT_PORTS_START( sscope ) |
| r24548 | r24549 | |
| 873 | 873 | PORT_DIPSETTING( 0x00, "15KHz" ) |
| 874 | 874 | |
| 875 | 875 | PORT_START( "EEPROMOUT" ) |
| 876 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 877 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 878 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 876 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 877 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 878 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 879 | 879 | |
| 880 | 880 | PORT_START("ANALOG1") // Gun Yaw |
| 881 | 881 | PORT_BIT( 0x7ff, 0x400, IPT_AD_STICK_X ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) |
| r24548 | r24549 | |
| 1008 | 1008 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 1009 | 1009 | |
| 1010 | 1010 | |
| 1011 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1011 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1012 | 1012 | |
| 1013 | 1013 | MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, hornet_voodoo_intf) |
| 1014 | 1014 | |
| r24548 | r24549 | |
| 1136 | 1136 | static MACHINE_CONFIG_DERIVED( sscope2, hornet_2board_v2) |
| 1137 | 1137 | |
| 1138 | 1138 | MCFG_DS2401_ADD("lan_serial_id") |
| 1139 | MCFG_EEPROM_93C46_ADD("lan_eeprom") | |
| 1139 | MCFG_EEPROM_SERIAL_93C46_ADD("lan_eeprom") | |
| 1140 | 1140 | MACHINE_CONFIG_END |
| 1141 | 1141 | |
| 1142 | 1142 |
| r24548 | r24549 | |
|---|---|---|
| 594 | 594 | PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 595 | 595 | PORT_SERVICE_NO_TOGGLE( 0x00200000, IP_ACTIVE_LOW ) |
| 596 | 596 | PORT_BIT( 0x00400000, IP_ACTIVE_HIGH, IPT_SPECIAL ) //security bit |
| 597 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 597 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 598 | 598 | PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_START3 ) |
| 599 | 599 | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_START4 ) |
| 600 | 600 | PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_COIN3 ) |
| r24548 | r24549 | |
| 607 | 607 | PORT_BIT( 0x4000ffff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 608 | 608 | |
| 609 | 609 | PORT_START( "EEPROMOUT" ) |
| 610 | PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 611 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 612 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 610 | PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 611 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 612 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 613 | 613 | // PORT_BIT( 0x00080000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // 0x80000 -> video disabled? |
| 614 | 614 | INPUT_PORTS_END |
| 615 | 615 | |
| r24548 | r24549 | |
| 643 | 643 | PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 644 | 644 | PORT_SERVICE_NO_TOGGLE( 0x00200000, IP_ACTIVE_LOW ) |
| 645 | 645 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_SPECIAL ) //security bit |
| 646 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 646 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 647 | 647 | PORT_DIPNAME( 0x20000000, 0x00000000, "Sound Enable" ) |
| 648 | 648 | PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) |
| 649 | 649 | PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) |
| r24548 | r24549 | |
| 652 | 652 | PORT_BIT( 0x5f00ffff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 653 | 653 | |
| 654 | 654 | PORT_START( "EEPROMOUT" ) |
| 655 | PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 656 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 657 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 655 | PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 656 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 657 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 658 | 658 | // PORT_BIT( 0x00080000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // 0x80000 -> video disabled? |
| 659 | 659 | INPUT_PORTS_END |
| 660 | 660 | |
| r24548 | r24549 | |
| 688 | 688 | PORT_BIT( 0x00080000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, limenko_state,spriteram_bit_r, NULL) //changes spriteram location |
| 689 | 689 | PORT_SERVICE_NO_TOGGLE( 0x00200000, IP_ACTIVE_LOW ) |
| 690 | 690 | PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_SPECIAL ) //security bit |
| 691 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 691 | PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 692 | 692 | PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Demo_Sounds ) ) |
| 693 | 693 | PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) ) |
| 694 | 694 | PORT_DIPSETTING( 0x20000000, DEF_STR( On ) ) |
| r24548 | r24549 | |
| 696 | 696 | PORT_BIT( 0x5f10ffff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 697 | 697 | |
| 698 | 698 | PORT_START( "EEPROMOUT" ) |
| 699 | PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 700 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 701 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 699 | PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 700 | PORT_BIT( 0x00020000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 701 | PORT_BIT( 0x00040000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 702 | 702 | // PORT_BIT( 0x00080000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // 0x80000 -> video disabled? |
| 703 | 703 | INPUT_PORTS_END |
| 704 | 704 | |
| r24548 | r24549 | |
| 754 | 754 | MCFG_CPU_IO_MAP(limenko_io_map) |
| 755 | 755 | MCFG_CPU_VBLANK_INT_DRIVER("screen", limenko_state, irq0_line_hold) |
| 756 | 756 | |
| 757 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 757 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 758 | 758 | |
| 759 | 759 | /* video hardware */ |
| 760 | 760 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 785 | 785 | MCFG_CPU_ADD("audiocpu", AT89C4051, 4000000) /* 4 MHz */ |
| 786 | 786 | MCFG_CPU_IO_MAP(spotty_sound_io_map) |
| 787 | 787 | |
| 788 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 788 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 789 | 789 | |
| 790 | 790 | /* video hardware */ |
| 791 | 791 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
|---|---|---|
| 61 | 61 | |
| 62 | 62 | ***************************************************************************/ |
| 63 | 63 | |
| 64 | static const serial_eeprom_interface eeprom_intf = | |
| 65 | { | |
| 66 | "*110", /* read command */ | |
| 67 | "*101", /* write command */ | |
| 68 | 0, /* erase command */ | |
| 69 | "*10000xxxx", /* lock command */ | |
| 70 | "*10011xxxx", /* unlock command */ | |
| 71 | 0, /* enable_multi_read */ | |
| 72 | 5 /* reset_delay (otherwise wbeachvl will hang when saving settings) */ | |
| 73 | }; | |
| 74 | ||
| 75 | 64 | WRITE16_MEMBER(playmark_state::wbeachvl_coin_eeprom_w) |
| 76 | 65 | { |
| 77 | 66 | if (ACCESSING_BITS_0_7) |
| r24548 | r24549 | |
| 83 | 72 | coin_counter_w(machine(), 3, data & 0x08); |
| 84 | 73 | |
| 85 | 74 | /* bits 5-7 control EEPROM */ |
| 86 | m_eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE); | |
| 87 | m_eeprom->write_bit(data & 0x80); | |
| 88 | m_eeprom->set_clock_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 75 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 76 | m_eeprom->di_write((data & 0x80) >> 7); | |
| 77 | m_eeprom->clk_write((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 89 | 78 | } |
| 90 | 79 | } |
| 91 | 80 | |
| r24548 | r24549 | |
| 95 | 84 | { |
| 96 | 85 | coin_counter_w(machine(), 0,data & 0x20); |
| 97 | 86 | |
| 98 | m_eeprom->set_cs_line((data & 1) ? CLEAR_LINE : ASSERT_LINE); | |
| 99 | m_eeprom->write_bit(data & 4); | |
| 100 | m_eeprom->set_clock_line((data & 2) ? ASSERT_LINE : CLEAR_LINE ); | |
| 87 | m_eeprom->cs_write((data & 1) ? ASSERT_LINE : CLEAR_LINE); | |
| 88 | m_eeprom->di_write((data & 4) >> 2); | |
| 89 | m_eeprom->clk_write((data & 2) ? ASSERT_LINE : CLEAR_LINE ); | |
| 101 | 90 | } |
| 102 | 91 | } |
| 103 | 92 | |
| r24548 | r24549 | |
| 548 | 537 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SERVICE1 ) |
| 549 | 538 | PORT_SERVICE_NO_TOGGLE(0x20, IP_ACTIVE_LOW) |
| 550 | 539 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* ?? see code at 746a. sound status? */ |
| 551 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 540 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM data */ | |
| 552 | 541 | |
| 553 | 542 | PORT_START("P1") |
| 554 | 543 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| r24548 | r24549 | |
| 714 | 703 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 715 | 704 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 716 | 705 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") |
| 717 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 706 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* EEPROM data */ | |
| 718 | 707 | |
| 719 | 708 | PORT_START("DSW1") |
| 720 | 709 | PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) |
| r24548 | r24549 | |
| 1126 | 1115 | /* Program and Data Maps are internal to the MCU */ |
| 1127 | 1116 | // MCFG_CPU_IO_MAP(playmark_sound_io_map) |
| 1128 | 1117 | |
| 1129 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, eeprom_intf) | |
| 1130 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 1118 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1119 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 1131 | 1120 | |
| 1132 | 1121 | MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) |
| 1133 | 1122 | MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) |
| r24548 | r24549 | |
| 1197 | 1186 | /* Program and Data Maps are internal to the MCU */ |
| 1198 | 1187 | MCFG_CPU_IO_MAP(playmark_sound_io_map) |
| 1199 | 1188 | |
| 1200 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, eeprom_intf) | |
| 1201 | MCFG_SERIAL_EEPROM_DEFAULT_VALUE(0) | |
| 1189 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1190 | MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0) | |
| 1202 | 1191 | |
| 1203 | 1192 | MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) |
| 1204 | 1193 | MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) |
| r24548 | r24549 | |
|---|---|---|
| 85 | 85 | |
| 86 | 86 | /************************************* |
| 87 | 87 | * |
| 88 | * EEPROM | |
| 89 | * | |
| 90 | *************************************/ | |
| 91 | ||
| 92 | static const serial_eeprom_interface cbasebal_eeprom_intf = | |
| 93 | { | |
| 94 | "0110", /* read command */ | |
| 95 | "0101", /* write command */ | |
| 96 | "0111" /* erase command */ | |
| 97 | }; | |
| 98 | ||
| 99 | ||
| 100 | /************************************* | |
| 101 | * | |
| 102 | 88 | * Address maps |
| 103 | 89 | * |
| 104 | 90 | *************************************/ |
| r24548 | r24549 | |
| 164 | 150 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) |
| 165 | 151 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) |
| 166 | 152 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") /* ? */ |
| 167 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 153 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 168 | 154 | |
| 169 | 155 | PORT_START( "IO_01" ) |
| 170 | PORT_BIT( 0x00000010, IP_ACTIVE_ | |
| 156 | PORT_BIT( 0x00000010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 171 | 157 | |
| 172 | 158 | PORT_START( "IO_02" ) |
| 173 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 159 | PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 174 | 160 | |
| 175 | 161 | PORT_START( "IO_03" ) |
| 176 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 162 | PORT_BIT( 0x00000040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 177 | 163 | INPUT_PORTS_END |
| 178 | 164 | |
| 179 | 165 | |
| r24548 | r24549 | |
| 272 | 258 | MCFG_CPU_IO_MAP(cbasebal_portmap) |
| 273 | 259 | MCFG_CPU_VBLANK_INT_DRIVER("screen", cbasebal_state, irq0_line_hold) /* ??? */ |
| 274 | 260 | |
| 261 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 275 | 262 | |
| 276 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, cbasebal_eeprom_intf) | |
| 277 | ||
| 278 | 263 | /* video hardware */ |
| 279 | 264 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| 280 | 265 |
| r24548 | r24549 | |
|---|---|---|
| 296 | 296 | MCFG_MACHINE_RESET_OVERRIDE(konamigq_state, konamigq ) |
| 297 | 297 | |
| 298 | 298 | MCFG_DEVICE_ADD("mb89371", MB89371, 0) |
| 299 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 300 | MCFG_SERIAL_EEPROM_DATA(konamigq_def_eeprom, 128) | |
| 299 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 300 | MCFG_EEPROM_SERIAL_DATA(konamigq_def_eeprom, 128) | |
| 301 | 301 | |
| 302 | 302 | MCFG_SCSIBUS_ADD("scsi") |
| 303 | 303 | MCFG_SCSIDEV_ADD("scsi:disk", SCSIHD, SCSI_ID_0) |
| r24548 | r24549 | |
| 395 | 395 | PORT_DIPSETTING( 0x00, "Independent" ) |
| 396 | 396 | PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 397 | 397 | PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 398 | PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 398 | PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 399 | 399 | |
| 400 | 400 | PORT_START( "EEPROMOUT" ) |
| 401 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 402 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 403 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 401 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 402 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 403 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 404 | 404 | INPUT_PORTS_END |
| 405 | 405 | |
| 406 | 406 | ROM_START( cryptklr ) |
| r24548 | r24549 | |
|---|---|---|
| 368 | 368 | switch (offset) { |
| 369 | 369 | case 0: return 0xffff0000 | ioport("IN0")->read(); |
| 370 | 370 | case 1: return 0xffff0000 | ioport("IN1")->read(); //check top bits?? |
| 371 | case 2: return 0xfffffffe | m_eeprom->read | |
| 371 | case 2: return 0xfffffffe | m_eeprom->do_read(); | |
| 372 | 372 | } |
| 373 | 373 | |
| 374 | 374 | return 0xffffffff; |
| r24548 | r24549 | |
| 377 | 377 | WRITE32_MEMBER(deco32_state::fghthist_eeprom_w) |
| 378 | 378 | { |
| 379 | 379 | if (ACCESSING_BITS_0_7) { |
| 380 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 381 | m_eeprom->write_bit(data & 0x10); | |
| 382 | m_eeprom->set_cs_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 380 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 381 | m_eeprom->di_write((data & 0x10) >> 4); | |
| 382 | m_eeprom->cs_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 383 | 383 | |
| 384 | 384 | deco32_pri_w(space,0,data&0x1,0xffffffff); /* Bit 0 - layer priority toggle */ |
| 385 | 385 | } |
| r24548 | r24549 | |
| 429 | 429 | |
| 430 | 430 | READ32_MEMBER(deco32_state::dragngun_eeprom_r) |
| 431 | 431 | { |
| 432 | return 0xfffffffe | m_eeprom->read | |
| 432 | return 0xfffffffe | m_eeprom->do_read(); | |
| 433 | 433 | } |
| 434 | 434 | |
| 435 | 435 | WRITE32_MEMBER(deco32_state::dragngun_eeprom_w) |
| 436 | 436 | { |
| 437 | 437 | if (ACCESSING_BITS_0_7) { |
| 438 | m_eeprom->set_clock_line((data & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 439 | m_eeprom->write_bit(data & 0x1); | |
| 440 | m_eeprom->set_cs_line((data & 0x4) ? CLEAR_LINE : ASSERT_LINE); | |
| 438 | m_eeprom->clk_write((data & 0x2) ? ASSERT_LINE : CLEAR_LINE); | |
| 439 | m_eeprom->di_write(data & 0x1); | |
| 440 | m_eeprom->cs_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE); | |
| 441 | 441 | return; |
| 442 | 442 | } |
| 443 | 443 | logerror("%s:Write control 1 %08x %08x\n",machine().describe_context(),offset,data); |
| r24548 | r24549 | |
| 581 | 581 | |
| 582 | 582 | UINT16 deco32_state::port_b_nslasher(int unused) |
| 583 | 583 | { |
| 584 | return (m_eeprom->read | |
| 584 | return (m_eeprom->do_read()); | |
| 585 | 585 | } |
| 586 | 586 | |
| 587 | 587 | |
| r24548 | r24549 | |
| 613 | 613 | { |
| 614 | 614 | if (ACCESSING_BITS_0_7) |
| 615 | 615 | { |
| 616 | m_eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 617 | m_eeprom->write_bit(data & 0x10); | |
| 618 | m_eeprom->set_cs_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE); | |
| 616 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 617 | m_eeprom->di_write((data & 0x10) >> 4); | |
| 618 | m_eeprom->cs_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 619 | 619 | |
| 620 | 620 | deco32_pri_w(space,0,data&0x3,0xffffffff); /* Bit 0 - layer priority toggle, Bit 1 - BG2/3 Joint mode (8bpp) */ |
| 621 | 621 | } |
| r24548 | r24549 | |
| 1669 | 1669 | m_oki2->set_bank_base(((data >> 1)& 1) * 0x40000); |
| 1670 | 1670 | } |
| 1671 | 1671 | |
| 1672 | static const serial_eeprom_interface eeprom_interface_tattass = | |
| 1673 | { | |
| 1674 | }; | |
| 1675 | ||
| 1676 | 1672 | /**********************************************************************************/ |
| 1677 | 1673 | |
| 1678 | 1674 | MACHINE_RESET_MEMBER(deco32_state,deco32) |
| r24548 | r24549 | |
| 1799 | 1795 | |
| 1800 | 1796 | UINT16 deco32_state::port_b_fghthist(int unused) |
| 1801 | 1797 | { |
| 1802 | return machine().device<serial_ | |
| 1798 | return machine().device<eeprom_serial_93cxx_device>(":eeprom")->do_read(); | |
| 1803 | 1799 | } |
| 1804 | 1800 | |
| 1805 | 1801 | UINT16 deco32_state::port_c_fghthist(int unused) |
| r24548 | r24549 | |
| 1817 | 1813 | MCFG_CPU_ADD("audiocpu", H6280, 32220000/8) |
| 1818 | 1814 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 1819 | 1815 | |
| 1820 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1816 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1821 | 1817 | |
| 1822 | 1818 | |
| 1823 | 1819 | MCFG_SCREEN_ADD("screen", RASTER) |
| r24548 | r24549 | |
| 1873 | 1869 | MCFG_CPU_ADD("audiocpu", H6280, 32220000/8) |
| 1874 | 1870 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 1875 | 1871 | |
| 1876 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1872 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1877 | 1873 | |
| 1878 | 1874 | MCFG_SCREEN_ADD("screen", RASTER) |
| 1879 | 1875 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
| 1987 | 1983 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 1988 | 1984 | |
| 1989 | 1985 | MCFG_MACHINE_RESET_OVERRIDE(deco32_state,deco32) |
| 1990 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1986 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1991 | 1987 | |
| 1992 | 1988 | MCFG_TIMER_DRIVER_ADD("int_timer", deco32_state, interrupt_gen) |
| 1993 | 1989 | |
| r24548 | r24549 | |
| 2069 | 2065 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* to improve main<->audio comms */ |
| 2070 | 2066 | |
| 2071 | 2067 | MCFG_MACHINE_RESET_OVERRIDE(deco32_state,deco32) |
| 2072 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2068 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2073 | 2069 | |
| 2074 | 2070 | MCFG_TIMER_DRIVER_ADD("int_timer", deco32_state, interrupt_gen) |
| 2075 | 2071 | |
| r24548 | r24549 | |
| 2159 | 2155 | MCFG_CPU_PROGRAM_MAP(tattass_map) |
| 2160 | 2156 | MCFG_CPU_VBLANK_INT_DRIVER("screen", deco32_state, deco32_vbl_interrupt) |
| 2161 | 2157 | |
| 2162 | MCFG_SERIAL_ | |
| 2158 | MCFG_EEPROM_SERIAL_93C76_8BIT_ADD("eeprom") | |
| 2163 | 2159 | |
| 2164 | 2160 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2165 | 2161 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
| 2204 | 2200 | |
| 2205 | 2201 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* to improve main<->audio comms */ |
| 2206 | 2202 | |
| 2207 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2203 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2208 | 2204 | |
| 2209 | 2205 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2210 | 2206 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
|---|---|---|
| 946 | 946 | } |
| 947 | 947 | |
| 948 | 948 | |
| 949 | static const serial_eeprom_interface bbakraid_93C66_intf = | |
| 950 | { | |
| 951 | // Pin 6 of the 93C66 is connected to Gnd! | |
| 952 | // So it's configured for 512 bytes | |
| 953 | ||
| 954 | "*110", // read 110 aaaaaaaaa | |
| 955 | "*101", // write 101 aaaaaaaaa dddddddd | |
| 956 | "*111", // erase 111 aaaaaaaaa | |
| 957 | "*10000xxxxxxx",// lock 100x 00xxxx | |
| 958 | "*10011xxxxxxx",// unlock 100x 11xxxx | |
| 959 | // "*10001xxxx", // write all 1 00 01xxxx dddddddd | |
| 960 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 961 | }; | |
| 962 | ||
| 963 | ||
| 964 | 949 | READ16_MEMBER(toaplan2_state::bbakraid_eeprom_r) |
| 965 | 950 | { |
| 966 | 951 | // Bit 0x01 returns the status of BUSAK from the Z80. |
| r24548 | r24549 | |
| 969 | 954 | // ROM code. Failure to return the correct status incurrs a Sound Error. |
| 970 | 955 | |
| 971 | 956 | int data; |
| 972 | data = ((m_eeprom->read | |
| 957 | data = ((m_eeprom->do_read() & 0x01) << 4); | |
| 973 | 958 | data |= ((m_z80_busreq >> 4) & 0x01); // Loop BUSRQ to BUSAK |
| 974 | 959 | |
| 975 | 960 | return data; |
| r24548 | r24549 | |
| 2085 | 2070 | PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Unknown/Unused |
| 2086 | 2071 | |
| 2087 | 2072 | PORT_START("EEPROM") |
| 2088 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2089 | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2090 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2091 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, read_bit) | |
| 2073 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2074 | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2075 | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2076 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 2092 | 2077 | INPUT_PORTS_END |
| 2093 | 2078 | |
| 2094 | 2079 | |
| r24548 | r24549 | |
| 2764 | 2749 | PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) |
| 2765 | 2750 | |
| 2766 | 2751 | PORT_START( "EEPROMOUT" ) |
| 2767 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 2768 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 2769 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 2752 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 2753 | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 2754 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 2770 | 2755 | INPUT_PORTS_END |
| 2771 | 2756 | |
| 2772 | 2757 | |
| r24548 | r24549 | |
| 3331 | 3316 | |
| 3332 | 3317 | MCFG_MACHINE_START_OVERRIDE(toaplan2_state,toaplan2) |
| 3333 | 3318 | |
| 3334 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 3319 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 3335 | 3320 | |
| 3336 | 3321 | /* video hardware */ |
| 3337 | 3322 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| r24548 | r24549 | |
| 3725 | 3710 | MCFG_MACHINE_START_OVERRIDE(toaplan2_state,toaplan2) |
| 3726 | 3711 | MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) |
| 3727 | 3712 | |
| 3728 | MCFG_SERIAL_ | |
| 3713 | MCFG_EEPROM_SERIAL_93C66_8BIT_ADD("eeprom") | |
| 3729 | 3714 | |
| 3730 | 3715 | /* video hardware */ |
| 3731 | 3716 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| r24548 | r24549 | |
|---|---|---|
| 831 | 831 | |
| 832 | 832 | READ8_MEMBER(centiped_state::multiped_eeprom_r) |
| 833 | 833 | { |
| 834 | return m_eeprom->read | |
| 834 | return m_eeprom->do_read() ? 0x80 : 0; | |
| 835 | 835 | } |
| 836 | 836 | |
| 837 | 837 | WRITE8_MEMBER(centiped_state::multiped_eeprom_w) |
| r24548 | r24549 | |
| 843 | 843 | |
| 844 | 844 | // a1 low: latch bit |
| 845 | 845 | if (~offset & 2) |
| 846 | m_eeprom->write | |
| 846 | m_eeprom->di_write((data & 0x80) ? 1 : 0); | |
| 847 | 847 | |
| 848 | 848 | // a2 low: write latch or select next bit to read |
| 849 | 849 | if (~offset & 4) |
| 850 | m_eeprom-> | |
| 850 | m_eeprom->clk_write((~data & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 851 | 851 | |
| 852 | 852 | // both high: reset |
| 853 | 853 | else if (offset & 2) |
| 854 | m_eeprom-> | |
| 854 | m_eeprom->cs_write((data & 0x80) ? ASSERT_LINE : CLEAR_LINE); | |
| 855 | 855 | } |
| 856 | 856 | |
| 857 | 857 | WRITE8_MEMBER(centiped_state::multiped_prgbank_w) |
| r24548 | r24549 | |
| 1859 | 1859 | MCFG_CPU_PROGRAM_MAP(multiped_map) |
| 1860 | 1860 | |
| 1861 | 1861 | MCFG_DEVICE_REMOVE("earom") |
| 1862 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 1862 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 1863 | 1863 | MACHINE_CONFIG_END |
| 1864 | 1864 | |
| 1865 | 1865 |
| r24548 | r24549 | |
|---|---|---|
| 183 | 183 | lordgun_update_gun(i); |
| 184 | 184 | |
| 185 | 185 | // latch the bit |
| 186 | m_eeprom->write | |
| 186 | m_eeprom->di_write((data & 0x40) >> 6); | |
| 187 | 187 | |
| 188 | 188 | // reset line asserted: reset. |
| 189 | m_eeprom-> | |
| 189 | m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE ); | |
| 190 | 190 | |
| 191 | 191 | // clock line asserted: write latch or select next bit to read |
| 192 | m_eeprom-> | |
| 192 | m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE ); | |
| 193 | 193 | |
| 194 | 194 | m_whitescreen = data & 0x80; |
| 195 | 195 | |
| r24548 | r24549 | |
| 211 | 211 | coin_counter_w(machine(), 1, data & 0x10); |
| 212 | 212 | |
| 213 | 213 | // latch the bit |
| 214 | m_eeprom->write | |
| 214 | m_eeprom->di_write((data & 0x80) >> 7); | |
| 215 | 215 | |
| 216 | 216 | // reset line asserted: reset. |
| 217 | m_eeprom-> | |
| 217 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE ); | |
| 218 | 218 | |
| 219 | 219 | // clock line asserted: write latch or select next bit to read |
| 220 | m_eeprom-> | |
| 220 | m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE ); | |
| 221 | 221 | } |
| 222 | 222 | |
| 223 | 223 | |
| r24548 | r24549 | |
| 451 | 451 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 452 | 452 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 453 | 453 | PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW ) |
| 454 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 454 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 455 | 455 | |
| 456 | 456 | PORT_START("START1") |
| 457 | 457 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) |
| r24548 | r24549 | |
| 572 | 572 | PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW3:8" ) /* Listed as "Unused" */ |
| 573 | 573 | |
| 574 | 574 | PORT_START("SERVICE") |
| 575 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 575 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 576 | 576 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 577 | 577 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 578 | 578 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 677 | 677 | MCFG_I8255A_ADD( "ppi8255_0", lordgun_ppi8255_0_intf ) |
| 678 | 678 | MCFG_I8255A_ADD( "ppi8255_1", lordgun_ppi8255_1_intf ) |
| 679 | 679 | |
| 680 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 680 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 681 | 681 | |
| 682 | 682 | MCFG_SCREEN_ADD("screen", RASTER) |
| 683 | 683 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
| 713 | 713 | MCFG_I8255A_ADD( "ppi8255_0", aliencha_ppi8255_0_intf ) |
| 714 | 714 | MCFG_I8255A_ADD( "ppi8255_1", aliencha_ppi8255_1_intf ) |
| 715 | 715 | |
| 716 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 716 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 717 | 717 | |
| 718 | 718 | MCFG_SCREEN_ADD("screen", RASTER) |
| 719 | 719 | MCFG_SCREEN_REFRESH_RATE(60) |
| r24548 | r24549 | |
|---|---|---|
| 297 | 297 | coin_counter_w(machine(), 0, data & 0x1000); |
| 298 | 298 | |
| 299 | 299 | // latch the bit |
| 300 | m_eeprom->write | |
| 300 | m_eeprom->di_write((data & 0x0800) >> 11); | |
| 301 | 301 | |
| 302 | 302 | // reset line asserted: reset. |
| 303 | m_eeprom-> | |
| 303 | m_eeprom->cs_write((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); | |
| 304 | 304 | |
| 305 | 305 | // clock line asserted: write latch or select next bit to read |
| 306 | m_eeprom-> | |
| 306 | m_eeprom->clk_write((data & 0x0400) ? ASSERT_LINE : CLEAR_LINE); | |
| 307 | 307 | } |
| 308 | 308 | } |
| 309 | 309 | |
| r24548 | r24549 | |
| 318 | 318 | if (ACCESSING_BITS_8_15) // even address |
| 319 | 319 | { |
| 320 | 320 | // latch the bit |
| 321 | m_eeprom->write | |
| 321 | m_eeprom->di_write((data & 0x0800) >> 11); | |
| 322 | 322 | |
| 323 | 323 | // reset line asserted: reset. |
| 324 | m_eeprom-> | |
| 324 | m_eeprom->cs_write((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); | |
| 325 | 325 | |
| 326 | 326 | // clock line asserted: write latch or select next bit to read |
| 327 | m_eeprom-> | |
| 327 | m_eeprom->clk_write((data & 0x0400) ? ASSERT_LINE : CLEAR_LINE); | |
| 328 | 328 | } |
| 329 | 329 | } |
| 330 | 330 | |
| r24548 | r24549 | |
| 341 | 341 | coin_counter_w(machine(), 0, data & 0x0001); |
| 342 | 342 | |
| 343 | 343 | // latch the bit |
| 344 | m_eeprom->write | |
| 344 | m_eeprom->di_write((data & 0x80) >> 7); | |
| 345 | 345 | |
| 346 | 346 | // reset line asserted: reset. |
| 347 | m_eeprom-> | |
| 347 | m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); | |
| 348 | 348 | |
| 349 | 349 | // clock line asserted: write latch or select next bit to read |
| 350 | m_eeprom-> | |
| 350 | m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); | |
| 351 | 351 | } |
| 352 | 352 | } |
| 353 | 353 | |
| r24548 | r24549 | |
| 376 | 376 | if (~data & 0x0100) |
| 377 | 377 | { |
| 378 | 378 | // latch the bit |
| 379 | m_eeprom->write | |
| 379 | m_eeprom->di_write((data & 0x0800) >> 11); | |
| 380 | 380 | |
| 381 | 381 | // reset line asserted: reset. |
| 382 | m_eeprom-> | |
| 382 | m_eeprom->cs_write((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); | |
| 383 | 383 | |
| 384 | 384 | // clock line asserted: write latch or select next bit to read |
| 385 | m_eeprom-> | |
| 385 | m_eeprom->clk_write((data & 0x0400) ? ASSERT_LINE : CLEAR_LINE); | |
| 386 | 386 | } |
| 387 | 387 | } |
| 388 | 388 | } |
| 389 | 389 | |
| 390 | static const serial_eeprom_interface eeprom_interface_93C46_pacslot = | |
| 391 | { | |
| 392 | "*110", // read 1 10 aaaaaa | |
| 393 | "*101", // write 1 01 aaaaaa dddddddddddddddd | |
| 394 | "*111", // erase 1 11 aaaaaa | |
| 395 | "*10000xxxx", // lock 1 00 00xxxx | |
| 396 | "*10011xxxx", // unlock 1 00 11xxxx | |
| 397 | 1, // enable_multi_read (needed by pacslot) | |
| 398 | 1 // reset_delay (otherwise pacslot will not recognize the eeprom) | |
| 399 | // "*10001xxxx" // write all 1 00 01xxxx dddddddddddddddd | |
| 400 | // "*10010xxxx" // erase all 1 00 10xxxx | |
| 401 | }; | |
| 402 | ||
| 403 | ||
| 404 | 390 | /*************************************************************************** |
| 405 | 391 | |
| 406 | 392 | |
| r24548 | r24549 | |
| 673 | 659 | m_hopper = data & 0x0100; // ??? |
| 674 | 660 | |
| 675 | 661 | // latch the bit |
| 676 | m_eeprom->write | |
| 662 | m_eeprom->di_write((data & 0x4000) >> 14); | |
| 677 | 663 | |
| 678 | 664 | // reset line asserted: reset. |
| 679 | m_eeprom-> | |
| 665 | m_eeprom->cs_write((data & 0x1000) ? ASSERT_LINE : CLEAR_LINE); | |
| 680 | 666 | |
| 681 | 667 | // clock line asserted: write latch or select next bit to read |
| 682 | m_eeprom-> | |
| 668 | m_eeprom->clk_write((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE); | |
| 683 | 669 | } |
| 684 | 670 | } |
| 685 | 671 | |
| r24548 | r24549 | |
| 787 | 773 | |
| 788 | 774 | READ16_MEMBER(cave_state::pwrinst2_eeprom_r) |
| 789 | 775 | { |
| 790 | return ~8 + ((m_eeprom->read | |
| 776 | return ~8 + ((m_eeprom->do_read() & 1) ? 8 : 0); | |
| 791 | 777 | } |
| 792 | 778 | |
| 793 | 779 | INLINE void vctrl_w(address_space &space, offs_t offset, UINT16 data, UINT16 mem_mask, int GFX) |
| r24548 | r24549 | |
| 890 | 876 | if (ACCESSING_BITS_0_7) // odd address |
| 891 | 877 | { |
| 892 | 878 | // latch the bit |
| 893 | m_eeprom->write | |
| 879 | m_eeprom->di_write((data & 0x0020) >> 5); | |
| 894 | 880 | |
| 895 | 881 | // reset line asserted: reset. |
| 896 | m_eeprom-> | |
| 882 | m_eeprom->cs_write((data & 0x0008) ? ASSERT_LINE : CLEAR_LINE); | |
| 897 | 883 | |
| 898 | 884 | // clock line asserted: write latch or select next bit to read |
| 899 | m_eeprom-> | |
| 885 | m_eeprom->clk_write((data & 0x0010) ? ASSERT_LINE : CLEAR_LINE); | |
| 900 | 886 | } |
| 901 | 887 | } |
| 902 | 888 | |
| r24548 | r24549 | |
| 1278 | 1264 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(6) |
| 1279 | 1265 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 1280 | 1266 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1281 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1267 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1282 | 1268 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1283 | 1269 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1284 | 1270 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1431 | 1417 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1432 | 1418 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1433 | 1419 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1434 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1420 | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1435 | 1421 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1436 | 1422 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1437 | 1423 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1475 | 1461 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1476 | 1462 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1477 | 1463 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1478 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1464 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1479 | 1465 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1480 | 1466 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1481 | 1467 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r24548 | r24549 | |
| 1487 | 1473 | PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) |
| 1488 | 1474 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1489 | 1475 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1490 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1476 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1491 | 1477 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME( DEF_STR( Yes ) ) PORT_CODE(KEYCODE_Y) // suru ("do") |
| 1492 | 1478 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) |
| 1493 | 1479 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "1 Bet" ) |
| r24548 | r24549 | |
| 1512 | 1498 | PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) |
| 1513 | 1499 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) // credits |
| 1514 | 1500 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1515 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1501 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1516 | 1502 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME( "Pac-Man" ) PORT_CODE(KEYCODE_Y) |
| 1517 | 1503 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) |
| 1518 | 1504 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Bet" ) |
| r24548 | r24549 | |
| 1819 | 1805 | |
| 1820 | 1806 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 1821 | 1807 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 1822 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1808 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1823 | 1809 | |
| 1824 | 1810 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 1825 | 1811 | |
| r24548 | r24549 | |
| 1861 | 1847 | |
| 1862 | 1848 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 1863 | 1849 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 1864 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1850 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1865 | 1851 | |
| 1866 | 1852 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 1867 | 1853 | |
| r24548 | r24549 | |
| 1907 | 1893 | |
| 1908 | 1894 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 1909 | 1895 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 1910 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1896 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1911 | 1897 | |
| 1912 | 1898 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 1913 | 1899 | |
| r24548 | r24549 | |
| 1953 | 1939 | |
| 1954 | 1940 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 1955 | 1941 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 1956 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1942 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1957 | 1943 | |
| 1958 | 1944 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 1959 | 1945 | |
| r24548 | r24549 | |
| 2034 | 2020 | |
| 2035 | 2021 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2036 | 2022 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2037 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2023 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2038 | 2024 | |
| 2039 | 2025 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2040 | 2026 | |
| r24548 | r24549 | |
| 2078 | 2064 | |
| 2079 | 2065 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2080 | 2066 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2081 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2067 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2082 | 2068 | |
| 2083 | 2069 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2084 | 2070 | |
| r24548 | r24549 | |
| 2131 | 2117 | |
| 2132 | 2118 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2133 | 2119 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2134 | MCFG_EEPROM_93C46_8BIT_ADD("eeprom") | |
| 2120 | MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom") | |
| 2135 | 2121 | |
| 2136 | 2122 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2137 | 2123 | |
| r24548 | r24549 | |
| 2185 | 2171 | |
| 2186 | 2172 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2187 | 2173 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2188 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2174 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2189 | 2175 | |
| 2190 | 2176 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2191 | 2177 | |
| r24548 | r24549 | |
| 2244 | 2230 | |
| 2245 | 2231 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2246 | 2232 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) /* start with the watchdog armed */ |
| 2247 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2233 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2248 | 2234 | |
| 2249 | 2235 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2250 | 2236 | |
| r24548 | r24549 | |
| 2299 | 2285 | |
| 2300 | 2286 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2301 | 2287 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2302 | MCFG_SERIAL_EEPROM_ADD("eeprom", 64, 16, eeprom_interface_93C46_pacslot) | |
| 2288 | ||
| 2289 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2290 | MCFG_EEPROM_SERIAL_ENABLE_STREAMING() | |
| 2303 | 2291 | |
| 2304 | 2292 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2305 | 2293 | |
| r24548 | r24549 | |
| 2355 | 2343 | |
| 2356 | 2344 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2357 | 2345 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2358 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2346 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2359 | 2347 | |
| 2360 | 2348 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2361 | 2349 | |
| r24548 | r24549 | |
| 2419 | 2407 | |
| 2420 | 2408 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2421 | 2409 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2422 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2410 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2423 | 2411 | |
| 2424 | 2412 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2425 | 2413 | |
| r24548 | r24549 | |
| 2473 | 2461 | |
| 2474 | 2462 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2475 | 2463 | MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) |
| 2476 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2477 | 2464 | |
| 2465 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2466 | MCFG_EEPROM_SERIAL_ENABLE_STREAMING() | |
| 2467 | ||
| 2478 | 2468 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2479 | 2469 | |
| 2480 | 2470 | /* video hardware */ |
| r24548 | r24549 | |
| 2514 | 2504 | MCFG_CPU_VBLANK_INT_DRIVER("screen", cave_state, cave_interrupt) |
| 2515 | 2505 | |
| 2516 | 2506 | MCFG_MACHINE_START_OVERRIDE(cave_state,cave) |
| 2517 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 2507 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 2518 | 2508 | |
| 2519 | 2509 | MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) |
| 2520 | 2510 |
| r24548 | r24549 | |
|---|---|---|
| 1074 | 1074 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1075 | 1075 | |
| 1076 | 1076 | PORT_START("COINS") |
| 1077 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", serial_ | |
| 1077 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) | |
| 1078 | 1078 | PORT_DIPNAME( 0x02, 0x02, "Dev Skip RAM Test" ) // skips mainram test on page 1 of POST |
| 1079 | 1079 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1080 | 1080 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| r24548 | r24549 | |
| 1118 | 1118 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1119 | 1119 | |
| 1120 | 1120 | PORT_START("EEPROMOUT") |
| 1121 | PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, write_bit) | |
| 1122 | PORT_BIT( 0x08000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_clock_line) | |
| 1123 | PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", serial_eeprom_device, set_cs_line) | |
| 1121 | PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) | |
| 1122 | PORT_BIT( 0x08000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) | |
| 1123 | PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) | |
| 1124 | 1124 | INPUT_PORTS_END |
| 1125 | 1125 | |
| 1126 | 1126 | // Mascon must always be in a defined state, Densha de Go 2 in particular returns black screen if the Mascon input is undefined |
| r24548 | r24549 | |
| 1273 | 1273 | |
| 1274 | 1274 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 1275 | 1275 | |
| 1276 | MCFG_EEPROM_93C46_ADD("eeprom") | |
| 1276 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") | |
| 1277 | 1277 | |
| 1278 | 1278 | MCFG_TC0640FIO_ADD("tc0640fio", taitojc_io_intf) |
| 1279 | 1279 |
| Previous | 199869 Revisions | Next |