fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

rc759: Only mark the NVM as modified if it was actually modified

+20 -13
+20 -13
src/arch/rc759/nvm.c
··· 5 5 /***************************************************************************** 6 6 * File name: src/arch/rc759/nvm.c * 7 7 * Created: 2012-07-02 by Hampa Hug <hampa@hampa.ch> * 8 - * Copyright: (C) 2012-2021 Hampa Hug <hampa@hampa.ch> * 8 + * Copyright: (C) 2012-2025 Hampa Hug <hampa@hampa.ch> * 9 9 *****************************************************************************/ 10 10 11 11 /***************************************************************************** ··· 15 15 * * 16 16 * This program is distributed in the hope that it will be useful, but * 17 17 * WITHOUT ANY WARRANTY, without even the implied warranty of * 18 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * 18 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * 19 19 * Public License for more details. * 20 20 *****************************************************************************/ 21 21 ··· 150 150 v += nvm->data[i]; 151 151 } 152 152 153 - nvm->data[0] = (0xaa - v) & 0xff; 153 + rc759_nvm_set_uint8 (nvm, 0, (0xaa - v) & 0xff); 154 154 } 155 155 156 156 void rc759_nvm_sanitize (rc759_nvm_t *nvm) ··· 158 158 if (nvm->data[0x1a] < 2) { 159 159 /* data buffers */ 160 160 nvm->data[0x1a] = 2; 161 + nvm->modified = 1; 161 162 } 162 163 } 163 164 ··· 181 182 182 183 void rc759_nvm_set_uint4 (rc759_nvm_t *nvm, unsigned idx, unsigned char val) 183 184 { 184 - unsigned char *p; 185 + unsigned char *ptr; 186 + unsigned char msk; 185 187 186 - if (idx < (2 * RC759_NVM_SIZE)) { 187 - p = &nvm->data[idx >> 1]; 188 - } 189 - else { 188 + if (idx >= (2 * RC759_NVM_SIZE)) { 190 189 return; 191 190 } 192 191 192 + ptr = &nvm->data[idx >> 1]; 193 + 193 194 if (idx & 1) { 194 - *p = (*p & 0xf0) | (val & 0x0f); 195 + msk = 0x0f; 195 196 } 196 197 else { 197 - *p = (*p & 0x0f) | ((val << 4) & 0xf0); 198 + msk = 0xf0; 199 + val = val << 4; 198 200 } 199 201 200 - nvm->modified = 1; 202 + if ((*ptr & msk) != (val & msk)) { 203 + *ptr = (*ptr & ~msk) | (val & msk); 204 + nvm->modified = 1; 205 + } 201 206 } 202 207 203 208 unsigned char rc759_nvm_get_uint8 (const rc759_nvm_t *nvm, unsigned idx) ··· 212 217 void rc759_nvm_set_uint8 (rc759_nvm_t *nvm, unsigned idx, unsigned char val) 213 218 { 214 219 if (idx < RC759_NVM_SIZE) { 215 - nvm->data[idx] = val; 216 - nvm->modified = 1; 220 + if (nvm->data[idx] != val) { 221 + nvm->data[idx] = val; 222 + nvm->modified = 1; 223 + } 217 224 } 218 225 }