INPUT_PORTS_END static void pce_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions) { if ( ( length <= PCE_HEADER_SIZE ) || ( length & PCE_HEADER_SIZE ) ) { dest.compute(&data[PCE_HEADER_SIZE], length - PCE_HEADER_SIZE, functions); } else { dest.compute(data, length, functions); } }
void device_image_interface::run_hash(void (*partialhash)(hash_collection &, const unsigned char *, unsigned long, const char *), hash_collection &hashes, const char *types) { UINT32 size; UINT8 *buf = NULL; hashes.reset(); size = (UINT32) length(); buf = (UINT8*)malloc(size); memset(buf,0,size); /* read the file */ fseek(0, SEEK_SET); fread(buf, size); if (partialhash) partialhash(hashes, buf, size, types); else hashes.compute(buf, size, types); /* cleanup */ free(buf); fseek(0, SEEK_SET); }
/* Header format 0 Header version - 1 byte 1..16 "ATARI7800 " - 16 bytes 17..48 Cart title - 32 bytes 49..52 data length - 4 bytes 53..54 cart type - 2 bytes bit 0 0x01 - pokey cart bit 1 0x02 - supercart bank switched bit 2 0x04 - supercart RAM at $4000 bit 3 0x08 - additional state->m_ROM at $4000 bit 8-15 - Special 0 = Normal cart 1 = Absolute (F18 Hornet) 2 = Activision 55 controller 1 type - 1 byte 56 controller 2 type - 1 byte 0 = None 1 = Joystick 2 = Light Gun 57 0 = NTSC/1 = PAL 100..127 "ACTUAL CART DATA STARTS HERE" - 28 bytes Versions: Version 0: Initial release Version 1: Added PAL/NTSC bit. Added Special cart byte. Changed 53 bit 2, added bit 3 */ void a7800_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions) { if (length <= 128) return; dest.compute(&data[128], length - 128, functions); }
void device_image_interface::device_compute_hash(hash_collection &hashes, const void *data, size_t length, const char *types) const { /* retrieve the partial hash func */ device_image_partialhash_func partialhash = get_partial_hash(); /* compute the hash */ if (partialhash) partialhash(hashes, (const unsigned char*)data, length, types); else hashes.compute(reinterpret_cast<const UINT8 *>(data), length, types); }
void device_image_interface::run_hash(void (*partialhash)(hash_collection &, const unsigned char *, unsigned long, const char *), hash_collection &hashes, const char *types) { UINT32 size; dynamic_buffer buf; hashes.reset(); size = (UINT32) length(); buf.resize_and_clear(size); /* read the file */ fseek(0, SEEK_SET); fread(buf, size); if (partialhash) partialhash(hashes, buf, size, types); else hashes.compute(buf, size, types); /* cleanup */ fseek(0, SEEK_SET); }