Mercurial > repos > blastem
comparison romdb.c @ 1408:71b6e2298e4a
Better handling of S&K lock on support. Pre-combined ROMs and large (>2MB) S&K hacks should now work. Implemented correct behavior from locking on a 4MB cart
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 19 Jun 2017 19:18:50 -0700 |
parents | efa7225e0f07 |
children | b0e0bb20fc41 |
comparison
equal
deleted
inserted
replaced
1407:4c58695c1e1f | 1408:71b6e2298e4a |
---|---|
1026 if (!strcmp(dtype, "ROM")) { | 1026 if (!strcmp(dtype, "ROM")) { |
1027 map->buffer = state->rom + offset; | 1027 map->buffer = state->rom + offset; |
1028 map->flags = MMAP_READ; | 1028 map->flags = MMAP_READ; |
1029 map->mask = calc_mask(state->rom_size - offset, start, end); | 1029 map->mask = calc_mask(state->rom_size - offset, start, end); |
1030 } else if (!strcmp(dtype, "LOCK-ON")) { | 1030 } else if (!strcmp(dtype, "LOCK-ON")) { |
1031 if (!state->lock_on) { | 1031 if (state->lock_on) { |
1032 if (state->lock_on_size > offset) { | |
1033 map->mask = calc_mask(state->lock_on_size - offset, start, end); | |
1034 } else { | |
1035 map->mask = calc_mask(state->lock_on_size, start, end); | |
1036 } | |
1037 map->buffer = state->lock_on + (offset & (nearest_pow2(state->lock_on_size) - 1)); | |
1038 } else if (state->rom_size > start) { | |
1039 //This is a bit of a hack to deal with pre-combined S3&K/S2&K ROMs and S&K ROM hacks | |
1040 map->buffer = state->rom + start; | |
1041 map->mask = calc_mask(state->rom_size - start, start, end); | |
1042 } else { | |
1032 //skip this entry if there is no lock on cartridge attached | 1043 //skip this entry if there is no lock on cartridge attached |
1033 return; | 1044 return; |
1034 } | 1045 } |
1035 map->buffer = state->lock_on + offset; | |
1036 map->flags = MMAP_READ; | 1046 map->flags = MMAP_READ; |
1037 map->mask = calc_mask(state->lock_on_size - offset, start, end); | |
1038 } else if (!strcmp(dtype, "EEPROM")) { | 1047 } else if (!strcmp(dtype, "EEPROM")) { |
1039 process_eeprom_def(key, state); | 1048 process_eeprom_def(key, state); |
1040 add_eeprom_map(node, start, end, state); | 1049 add_eeprom_map(node, start, end, state); |
1041 | 1050 |
1042 map->write_16 = write_eeprom_i2c_w; | 1051 map->write_16 = write_eeprom_i2c_w; |