@@ -124,12 +124,11 @@ _avr_flash_read16le(
124124void avr_core_watch_write (avr_t * avr , uint16_t addr , uint8_t v )
125125{
126126 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 );
133132 }
134133 if (addr < 32 ) {
135134 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)
161160uint8_t avr_core_watch_read (avr_t * avr , uint16_t addr )
162161{
163162 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"
167166 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 );
170169 }
171170
172171 if (avr -> gdb ) {
@@ -1440,5 +1439,3 @@ avr_flashaddr_t avr_run_one(avr_t * avr)
14401439
14411440 return new_pc ;
14421441}
1443-
1444-
0 commit comments