trunk/src/emu/machine/idehd.c
| r23739 | r23740 | |
| 1424 | 1424 | } |
| 1425 | 1425 | |
| 1426 | 1426 | //------------------------------------------------- |
| 1427 | | // read device key |
| 1428 | | //------------------------------------------------- |
| 1429 | | |
| 1430 | | void ide_hdd_device::read_key(UINT8 key[]) |
| 1431 | | { |
| 1432 | | UINT32 metalength; |
| 1433 | | m_handle->read_metadata(HARD_DISK_KEY_METADATA_TAG, 0, key, 5, metalength); |
| 1434 | | } |
| 1435 | | |
| 1436 | | //------------------------------------------------- |
| 1437 | 1427 | // machine_config_additions - device-specific |
| 1438 | 1428 | // machine configurations |
| 1439 | 1429 | //------------------------------------------------- |
trunk/src/emu/machine/idehd.h
| r23739 | r23740 | |
| 100 | 100 | |
| 101 | 101 | virtual int read_sector(UINT32 lba, void *buffer) = 0; |
| 102 | 102 | virtual int write_sector(UINT32 lba, const void *buffer) = 0; |
| 103 | | virtual void read_key(UINT8 key[]) = 0; |
| 104 | 103 | |
| 105 | 104 | bool device_selected() { return m_csel == (m_device_head & IDE_DEVICE_HEAD_DRV) >> 4; } |
| 106 | 105 | bool single_device() { return m_csel == 0 && m_dasp == 0; } |
| r23739 | r23740 | |
| 180 | 179 | // optional information overrides |
| 181 | 180 | virtual machine_config_constructor device_mconfig_additions() const; |
| 182 | 181 | |
| 183 | | virtual void read_key(UINT8 key[]); |
| 184 | | |
| 185 | 182 | chd_file *m_handle; |
| 186 | 183 | hard_disk_file *m_disk; |
| 187 | 184 | }; |
trunk/src/emu/machine/ataflash.c
| r23739 | r23740 | |
| 23 | 23 | { |
| 24 | 24 | ide_hdd_device::device_reset(); |
| 25 | 25 | |
| 26 | | m_locked = 0x1ff; |
| 27 | | m_gnetreadlock = 1; |
| 28 | | |
| 29 | 26 | UINT32 metalength; |
| 27 | memset(m_key, 0, sizeof(m_key)); |
| 30 | 28 | memset(m_cis, 0xff, 512); |
| 31 | 29 | |
| 32 | 30 | if (m_handle != NULL) |
| 31 | { |
| 33 | 32 | m_handle->read_metadata(PCMCIA_CIS_METADATA_TAG, 0, m_cis, 512, metalength); |
| 33 | |
| 34 | if (m_handle->read_metadata(HARD_DISK_KEY_METADATA_TAG, 0, m_key, 5, metalength) == CHDERR_NONE) |
| 35 | { |
| 36 | m_locked = 0x1ff; |
| 37 | m_gnetreadlock = 1; |
| 38 | } |
| 39 | } |
| 34 | 40 | } |
| 35 | 41 | |
| 36 | 42 | READ16_MEMBER( ata_flash_pccard_device::read_memory ) |
| r23739 | r23740 | |
| 89 | 95 | { |
| 90 | 96 | if(offset >= 0x280 && offset <= 0x288 && m_handle != NULL) |
| 91 | 97 | { |
| 92 | | dynamic_buffer key(m_handle->hunk_bytes()); |
| 93 | | m_handle->read_metadata(HARD_DISK_KEY_METADATA_TAG, 0, key); |
| 94 | | |
| 95 | 98 | UINT8 v = data; |
| 96 | 99 | int pos = offset - 0x280; |
| 97 | | UINT8 k = pos < key.count() ? key[pos] : 0; |
| 100 | UINT8 k = pos < sizeof(m_key) ? m_key[pos] : 0; |
| 98 | 101 | |
| 99 | 102 | if(v == k) |
| 100 | 103 | { |
| r23739 | r23740 | |
| 119 | 122 | |
| 120 | 123 | bool ata_flash_pccard_device::process_command() |
| 121 | 124 | { |
| 122 | | UINT8 key[5]; |
| 123 | | |
| 124 | 125 | switch (m_command) |
| 125 | 126 | { |
| 126 | 127 | case IDE_COMMAND_TAITO_GNET_UNLOCK_1: |
| r23739 | r23740 | |
| 145 | 146 | //LOGPRINT(("IDE GNET Unlock 3\n")); |
| 146 | 147 | |
| 147 | 148 | /* key check */ |
| 148 | | read_key(key); |
| 149 | | if (m_feature == key[0] && m_sector_count == key[1] && m_sector_number == key[2] && m_cylinder_low == key[3] && m_cylinder_high == key[4]) |
| 149 | if (m_feature == m_key[0] && m_sector_count == m_key[1] && m_sector_number == m_key[2] && m_cylinder_low == m_key[3] && m_cylinder_high == m_key[4]) |
| 150 | 150 | { |
| 151 | 151 | m_gnetreadlock = 0; |
| 152 | 152 | } |
| r23739 | r23740 | |
| 175 | 175 | { |
| 176 | 176 | if (m_command == IDE_COMMAND_TAITO_GNET_UNLOCK_2) |
| 177 | 177 | { |
| 178 | | UINT8 key[5] = { 0 }; |
| 179 | 178 | int i, bad = 0; |
| 180 | | read_key(key); |
| 181 | 179 | |
| 182 | 180 | for (i=0; !bad && i<512; i++) |
| 183 | | bad = ((i < 2 || i >= 7) && m_buffer[i]) || ((i >= 2 && i < 7) && m_buffer[i] != key[i-2]); |
| 181 | bad = ((i < 2 || i >= 7) && m_buffer[i]) || ((i >= 2 && i < 7) && m_buffer[i] != m_key[i-2]); |
| 184 | 182 | |
| 185 | 183 | if (bad) |
| 186 | 184 | { |