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 | { |