示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
文件: snprintf.c 项目: semenovf/cwt
/* 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);
}