void drawInstr(uint8_t i) { buffLen = 0; buff[0] = '\0'; uint8_t y = (i * 13) + BOX_TOP + 2; uint8_t x = BOX_LEFT + 2; if(i == GET_REG(REG_PC)) { fg = 0x0000; bg = 0xFFFF; } else { fg = 0xFFFF; bg = 0x0000; } ili9340_fillRect(x-1, y-1, CODE_WIDTH - 1, 14, bg); ili9340_setBackColor(bg); ili9340_setFrontColor(fg); if(labels[i][0] != '\0') { buffLen += strlen(strcpy(buff + buffLen, labels[i])); buff[buffLen++] = ':'; } if(GET_OPC_AT(i) == 0) { buff[buffLen++] = '\0'; ili9340_drawString(x, y, buff); //Just draw the label and continue return; } strncpy_P(buff + buffLen, Instruction[GET_OPC_AT(i)-1], OPC_LEN); buffLen += 3; //All instrctions are 3 bytes long; switch(GET_OPC_AT(i)) { case OPC_MOV: buff[buffLen++] = ' '; buffLen += otoa(GET_B_AT(i), buff + buffLen); buff[buffLen++] = ' '; buffLen += otoa(GET_A_AT(i), buff + buffLen); break; case OPC_ADD: case OPC_SUB: case OPC_JRO: buff[buffLen++] = ' '; buffLen += otoa(GET_A_AT(i), buff + buffLen); break; case OPC_JMP: case OPC_JEZ: case OPC_JNZ: case OPC_JGZ: case OPC_JLZ: { buff[buffLen++] = ' '; struct Operand dst; DECODE_OP(GET_A_AT(i), &dst); buffLen += strlen(strcpy(buff + buffLen, labels[dst.litValue])); break; } default: break; } ili9340_drawString(x, y, buff); }
int doprint(char *fmt, va_list ap) { int ret = 0; int code; int value = 0; char *p = NULL; char string[24] = { 0 }; for (; ; ) { while (((code = *fmt) != '\0') && (code != '%')) { PUTC(code); fmt++; ret++; } if (code == '\0') goto out; switch (code = *++fmt) { case 'd': value = va_arg(ap, int); p = itoa(string, value, 24); break; case 'o': value = va_arg(ap, int); p = otoa(string, value, 24); break; case 'x': value = va_arg(ap, int); p = xtoa(string, value, 24); break; case 's': p = va_arg(ap, char *); break; case 'c': value = va_arg(ap, int); string[0] = (char )value; string[1] = '\0'; p = string; break; default: p = NULL; break; } while (p && (*p != '\0')) { PUTC(*p); p++, ret++; } fmt++; } out: return ret; }
/* for %o octal representation */ static void octal(struct DATA *p, double d) { CWT_CHAR *tmp; tmp = otoa(d); p->width -= (int)cwt_str_ns()->strLen(tmp); PAD_RIGHT(p); if (p->square == FOUND) /* had prefix '0' for octal */ PUT_CHAR(_T('0'), p); while (*tmp) { /* octal */ PUT_CHAR(*tmp, p); tmp++; } PAD_LEFT(p); }