@@ -124,12 +124,11 @@ _avr_flash_read16le(
124
124
void avr_core_watch_write (avr_t * avr , uint16_t addr , uint8_t v )
125
125
{
126
126
if (addr > avr -> ramend ) {
127
- AVR_LOG (avr , LOG_ERROR , FONT_RED
128
- "CORE: *** Invalid write address "
129
- "PC=%04x SP=%04x O=%04x Address %04x=%02x out of ram\n"
130
- FONT_DEFAULT ,
131
- avr -> pc , _avr_sp_get (avr ), _avr_flash_read16le (avr , avr -> pc ), addr , v );
132
- crash (avr );
127
+ AVR_LOG (avr , LOG_WARNING ,
128
+ "CORE: *** Wrapping write address "
129
+ "PC=%04x SP=%04x O=%04x v=%02x Address %04x %% %04x --> %04x\n" ,
130
+ avr -> pc , _avr_sp_get (avr ), _avr_flash_read16le (avr , avr -> pc ), v , addr , (avr -> ramend + 1 ), addr % (avr -> ramend + 1 ));
131
+ addr = addr % (avr -> ramend + 1 );
133
132
}
134
133
if (addr < 32 ) {
135
134
AVR_LOG (avr , LOG_ERROR , FONT_RED
@@ -161,12 +160,12 @@ void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v)
161
160
uint8_t avr_core_watch_read (avr_t * avr , uint16_t addr )
162
161
{
163
162
if (addr > avr -> ramend ) {
164
- AVR_LOG (avr , LOG_ERROR , FONT_RED
165
- "CORE: *** Invalid read address "
166
- "PC=%04x SP=%04x O=%04x Address %04x out of ram ( %04x) \n"
163
+ AVR_LOG (avr , LOG_WARNING ,
164
+ "CORE: *** Wrapping read address "
165
+ "PC=%04x SP=%04x O=%04x Address %04x %% %04x --> %04x\n"
167
166
FONT_DEFAULT ,
168
- avr -> pc , _avr_sp_get (avr ), _avr_flash_read16le (avr , avr -> pc ), addr , avr -> ramend );
169
- crash (avr );
167
+ avr -> pc , _avr_sp_get (avr ), _avr_flash_read16le (avr , avr -> pc ), addr , ( avr -> ramend + 1 ), addr % ( avr -> ramend + 1 ) );
168
+ addr = addr % (avr -> ramend + 1 );
170
169
}
171
170
172
171
if (avr -> gdb ) {
@@ -1440,5 +1439,3 @@ avr_flashaddr_t avr_run_one(avr_t * avr)
1440
1439
1441
1440
return new_pc ;
1442
1441
}
1443
-
1444
-
0 commit comments