Skip to content

Commit fbe7f10

Browse files
edgar-bonetgatk555
authored andcommitted
Replace FONT_* macros with pointers to strings
This will enable turning colors on and off at run time.
1 parent 6cdf50c commit fbe7f10

File tree

3 files changed

+45
-32
lines changed

3 files changed

+45
-32
lines changed

simavr/sim/avr_uart.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,12 @@
2323
along with simavr. If not, see <http://www.gnu.org/licenses/>.
2424
*/
2525

26-
#ifdef NO_COLOR
27-
#define FONT_GREEN
28-
#define FONT_DEFAULT
29-
#else
30-
#define FONT_GREEN "\e[32m"
31-
#define FONT_DEFAULT "\e[0m"
32-
#endif
33-
3426
#include <stdio.h>
3527
#include <unistd.h>
3628
#include <stdint.h>
3729
#include <stdlib.h>
3830
#include "avr_uart.h"
31+
#include "sim_core.h"
3932
#include "sim_hex.h"
4033
#include "sim_time.h"
4134
#include "sim_gdb.h"
@@ -277,7 +270,7 @@ avr_uart_udr_write(
277270
if (v == '\n' || p->stdio_len == maxsize) {
278271
p->stdio_len = 0;
279272
AVR_LOG(avr, LOG_OUTPUT,
280-
FONT_GREEN "%s" FONT_DEFAULT "\n", p->stdio_out);
273+
"%s%s%s\n", simavr_font.green, p->stdio_out, simavr_font.normal);
281274
}
282275
}
283276
TRACE(printf("UDR%c(%02x) = %02x\n", p->name, addr, v);)

simavr/sim/sim_core.c

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@
2929
#include "avr_flash.h"
3030
#include "avr_watchdog.h"
3131

32+
/* ANSI escape codes for colored output. */
33+
struct text_colors simavr_font = {
34+
#ifdef NO_COLOR
35+
.green = "",
36+
.red = "",
37+
.normal = ""
38+
#else
39+
.green = "\e[32m",
40+
.red = "\e[31m",
41+
.normal = "\e[0m"
42+
#endif
43+
};
44+
3245
// SREG bit names
3346
const char * _sreg_bit_name = "cznvshti";
3447

@@ -136,13 +149,15 @@ void crash(avr_t* avr)
136149

137150
for (int i = OLD_PC_SIZE-1; i > 0; i--) {
138151
int pci = (avr->trace_data->old_pci + i) & 0xf;
139-
printf(FONT_RED "*** %04x: %-25s RESET -%d; sp %04x" FONT_DEFAULT "\n",
152+
printf("%s*** %04x: %-25s RESET -%d; sp %04x%s\n",
153+
simavr_font.red,
140154
avr->trace_data->old[pci].pc,
141155
avr->trace_data->codeline ?
142156
avr->trace_data->codeline[avr->trace_data->old[pci].pc>>1] :
143157
"unknown",
144158
OLD_PC_SIZE-i,
145-
avr->trace_data->old[pci].sp);
159+
avr->trace_data->old[pci].sp,
160+
simavr_font.normal);
146161
}
147162

148163
printf("Stack Ptr %04x/%04x = %d \n", _avr_sp_get(avr), avr->ramend, avr->ramend - _avr_sp_get(avr));
@@ -219,9 +234,9 @@ void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v)
219234
addr = addr % (avr->ramend + 1);
220235
}
221236
if (addr < 32) {
222-
AVR_LOG(avr, LOG_ERROR, FONT_RED
223-
"CORE: *** Invalid write address PC=%04x SP=%04x O=%04x Address %04x=%02x low registers" FONT_DEFAULT "\n",
224-
avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), addr, v);
237+
AVR_LOG(avr, LOG_ERROR,
238+
"%sCORE: *** Invalid write address PC=%04x SP=%04x O=%04x Address %04x=%02x low registers%s\n",
239+
simavr_font.red, avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), addr, v, simavr_font.normal);
225240
crash(avr);
226241
}
227242
#if AVR_STACK_WATCH
@@ -231,9 +246,9 @@ void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v)
231246
* frame and is munching on it's own return address.
232247
*/
233248
if (avr->trace_data->stack_frame_index > 1 && addr > avr->trace_data->stack_frame[avr->trace_data->stack_frame_index-2].sp) {
234-
printf( FONT_RED "%04x : munching stack "
235-
"SP %04x, A=%04x <= %02x" FONT_DEFAULT "\n",
236-
avr->pc, _avr_sp_get(avr), addr, v);
249+
printf("%s%04x : munching stack "
250+
"SP %04x, A=%04x <= %02x%s\n",
251+
simavr_font.red, avr->pc, _avr_sp_get(avr), addr, v, simavr_font.normal);
237252
}
238253
#endif
239254

@@ -462,14 +477,16 @@ static void _avr_invalid_opcode(avr_t * avr)
462477
}
463478
avr->pc += 2; // Step over.
464479
#if CONFIG_SIMAVR_TRACE
465-
printf( FONT_RED "*** %04x: %-25s Invalid Opcode SP=%04x O=%04x" FONT_DEFAULT "\n",
480+
printf("%s*** %04x: %-25s Invalid Opcode SP=%04x O=%04x%s\n",
481+
simavr_font.red,
466482
avr->pc,
467483
avr->trace_data->codeline[avr->pc>>1],
468484
_avr_sp_get(avr),
469-
_avr_flash_read16le(avr, avr->pc));
485+
_avr_flash_read16le(avr, avr->pc),
486+
simavr_font.normal);
470487
#else
471-
AVR_LOG(avr, LOG_ERROR, FONT_RED "CORE: *** %04x: Invalid Opcode SP=%04x O=%04x" FONT_DEFAULT "\n",
472-
avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc));
488+
AVR_LOG(avr, LOG_ERROR, "%sCORE: *** %04x: Invalid Opcode SP=%04x O=%04x%s\n",
489+
simavr_font.red, avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), simavr_font.normal);
473490
#endif
474491
}
475492

simavr/sim/sim_core.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,16 @@
2626
extern "C" {
2727
#endif
2828

29-
#ifdef NO_COLOR
30-
#define FONT_GREEN
31-
#define FONT_RED
32-
#define FONT_DEFAULT
33-
#else
34-
#define FONT_GREEN "\e[32m"
35-
#define FONT_RED "\e[31m"
36-
#define FONT_DEFAULT "\e[0m"
37-
#endif
29+
/*
30+
* ANSI escape codes for colored output
31+
*/
32+
struct text_colors {
33+
const char *green;
34+
const char *red;
35+
const char *normal;
36+
};
37+
38+
extern struct text_colors simavr_font;
3839

3940
/*
4041
* Instruction decoder, run ONE instruction
@@ -80,10 +81,12 @@ void avr_dump_state(avr_t * avr);
8081
#define DUMP_STACK() \
8182
for (int i = avr->trace_data->stack_frame_index; i; i--) {\
8283
int pci = i-1;\
83-
printf(FONT_RED "*** %04x: %-25s sp %04x" FONT_DEFAULT "\n",\
84+
printf("%s*** %04x: %-25s sp %04x%s\n",\
85+
simavr_font.red, \
8486
avr->trace_data->stack_frame[pci].pc, \
8587
avr->trace_data->codeline ? avr->trace_data->codeline[avr->trace_data->stack_frame[pci].pc>>1]->symbol : "unknown", \
86-
avr->trace_data->stack_frame[pci].sp);\
88+
avr->trace_data->stack_frame[pci].sp, \
89+
simavr_font.normal);\
8790
}
8891
#else
8992
#define DUMP_STACK()

0 commit comments

Comments
 (0)