diff options
Diffstat (limited to 'src/devices/cpu/mips/o2dprintf.hxx')
-rw-r--r-- | src/devices/cpu/mips/o2dprintf.hxx | 498 |
1 files changed, 249 insertions, 249 deletions
diff --git a/src/devices/cpu/mips/o2dprintf.hxx b/src/devices/cpu/mips/o2dprintf.hxx index 6074c9d44dc..83915aed0b4 100644 --- a/src/devices/cpu/mips/o2dprintf.hxx +++ b/src/devices/cpu/mips/o2dprintf.hxx @@ -5,112 +5,112 @@ static char digit[] = "0123456789abcdef"; static void dprintdec(int64_t val, bool zeropad, int size) { - if (val == 0 && !zeropad) - { + if (val == 0 && !zeropad) + { printf("0"); return; - } + } - char dc[22]; - for (int rem = 0; rem < 22; rem++) dc[rem] = '0'; + char dc[22]; + for (int rem = 0; rem < 22; rem++) dc[rem] = '0'; - int ptr = 0; - int64_t v = val; - char c = ' '; - if (val < 0) - { - c = '-'; - val = -val; - } + int ptr = 0; + int64_t v = val; + char c = ' '; + if (val < 0) + { + c = '-'; + val = -val; + } int indx1 = 0; - while (v > 10) - { - int64_t rem = v / 10; - int indx = v - (rem * 10); - dc[ptr] = digit[indx]; - v = rem; - if (indx != 0) - indx1 = ptr; - ptr += 1; - } - - dc[ptr] = digit[v]; - - if (v != 0) - indx1 = ptr; // the leading non zero digit. - - if (zeropad && size != 0) - ptr = size; - else - ptr = indx1; // don't print leading 0s - - if (c == '-') - printf("-"); - - while (ptr >= 0) - { + while (v > 10) + { + int64_t rem = v / 10; + int indx = v - (rem * 10); + dc[ptr] = digit[indx]; + v = rem; + if (indx != 0) + indx1 = ptr; + ptr += 1; + } + + dc[ptr] = digit[v]; + + if (v != 0) + indx1 = ptr; // the leading non zero digit. + + if (zeropad && size != 0) + ptr = size; + else + ptr = indx1; // don't print leading 0s + + if (c == '-') + printf("-"); + + while (ptr >= 0) + { printf("%c", dc[ptr]); - ptr -= 1; - } + ptr -= 1; + } } static void dprintudec(uint64_t val, bool zeropad, int size) { - if (val == 0 && !zeropad) - { + if (val == 0 && !zeropad) + { printf("0"); return; - } - - char dc[22]; - for (int rem = 0; rem < 22; dc[rem++] = '0'); - - int ptr = 0; - uint64_t v = val; - int indx1 = 0; - while (v > 10) - { - uint64_t rem = v / 10; - int indx = v - (rem * 10); - dc[ptr] = digit[indx]; - v = rem; - if (indx != 0) - indx1 = ptr; - ptr += 1; - } - - dc[ptr] = digit[v]; - - if (v != 0) - indx1 = ptr; // the leading non zero digit. - - if (zeropad && size != 0) - ptr = size; - else - ptr = indx1; // don't print leading 0s - - while (ptr >= 0) - { - printf("%c", dc[ptr]); - ptr -= 1; - } + } + + char dc[22]; + for (int rem = 0; rem < 22; dc[rem++] = '0'); + + int ptr = 0; + uint64_t v = val; + int indx1 = 0; + while (v > 10) + { + uint64_t rem = v / 10; + int indx = v - (rem * 10); + dc[ptr] = digit[indx]; + v = rem; + if (indx != 0) + indx1 = ptr; + ptr += 1; + } + + dc[ptr] = digit[v]; + + if (v != 0) + indx1 = ptr; // the leading non zero digit. + + if (zeropad && size != 0) + ptr = size; + else + ptr = indx1; // don't print leading 0s + + while (ptr >= 0) + { + printf("%c", dc[ptr]); + ptr -= 1; + } } static void dprinthex(uint64_t val, bool zeropad, int pos) { - if (val == 0 && !zeropad) - { + if (val == 0 && !zeropad) + { printf("0"); return; - } + } - int pcount = pos; - int indx = 0; + int pcount = pos; + int indx = 0; char c; - while (pcount >= 0) - { + while (pcount >= 0) + { if (pcount == 0) c = digit[val & 0xf]; else @@ -130,23 +130,23 @@ static void dprinthex(uint64_t val, bool zeropad, int pos) printf("%c", c); } pcount -= 4; - } + } } void dprintoct(uint64_t val, bool zeropad, int pos) { - if (val == 0 && !zeropad) - { + if (val == 0 && !zeropad) + { printf("0"); return; - } + } - int pcount = pos; - int indx = 0; + int pcount = pos; + int indx = 0; char c; - while (pcount >= 0) - { + while (pcount >= 0) + { if (pcount == 0) c = digit[val & 0x7]; else @@ -179,7 +179,7 @@ static uint64_t dprintf_get_arg64(uint8_t *buf, uint32_t &curr) { curr = (curr + 3) & ~3; const uint64_t ret = ((uint64_t)buf[curr+0] << 56) | ((uint64_t)buf[curr+1] << 48) | ((uint64_t)buf[curr+2] << 40) | ((uint64_t)buf[curr+3] << 32) | - ((uint64_t)buf[curr+4] << 24) | ((uint64_t)buf[curr+5] << 16) | ((uint64_t)buf[curr+6] << 8) | buf[curr+7]; + ((uint64_t)buf[curr+4] << 24) | ((uint64_t)buf[curr+5] << 16) | ((uint64_t)buf[curr+6] << 8) | buf[curr+7]; curr += 8; return ret; } @@ -237,147 +237,147 @@ void mips3_device::do_o2_dprintf(uint32_t fmt_addr, uint32_t a1, uint32_t a2, ui buf[idx++] = (char)byte_val; } while(byte_val != 0); - char *p = buf; - char errQ[3]; - int state = 0; - int size = 0; - int errP = 0; - bool zeropad = false; - while (*p) - { - switch (state) - { - case 0: - if (*p != '%') - { - printf("%c", *p); + char *p = buf; + char errQ[3]; + int state = 0; + int size = 0; + int errP = 0; + bool zeropad = false; + while (*p) + { + switch (state) + { + case 0: + if (*p != '%') + { + printf("%c", *p); + } + else + { + errQ[errP++] = '%'; + state = 1; + } + p++; + break; + case 1: // check for zero padding + state = 2; + if (*p == '0') + { + errQ[errP++] = '0'; + zeropad = true; + p++; } - else - { - errQ[errP++] = '%'; - state = 1; - } - p++; - break; - case 1: // check for zero padding - state = 2; - if (*p == '0') - { - errQ[errP++] = '0'; - zeropad = true; - p++; - } - else - { - zeropad = false; + else + { + zeropad = false; } - break; - case 2: // check the size of the object to be printed - state = 3; - switch (*p) - { - case 'l': - errQ[errP++] = 'l'; - size = 64; - p++; - break; - case 'h': - errQ[errP++] = 'h'; - size = 16; - p++; - break; - case 'b': - errQ[errP++] = 'b'; - size = 8; - p++; - break; - default: - size = 32; - break; - } - break; - case 3: // do the print - switch (*p) - { - case '%': - printf("%c", '%'); - break; - case 'd': - case 'i': - switch (size) - { - case 64: - dprintdec((int64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, 0); - break; - case 16: // short - dprintdec((int64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, 4); - break; - case 8: // byte - dprintdec((int64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, 3); - break; - default: // int - dprintdec((int64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, 9); - break; - } - break; - case 'u': - switch (size) - { - case 64: - dprintudec((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, 0); - break; - case 16: - dprintudec((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, 4); - break; - case 8: - dprintudec((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, 3); - break; - default: - dprintudec((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, 9); - break; - } - break; - case 'o': - switch (size) - { - case 64: - dprintoct((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, Loct); - break; - case 16: // short - dprintoct((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, Soct); - break; - case 8: // byte - dprintoct((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, Boct); - break; - default: // int - dprintoct((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, Ioct); - break; - } - break; - case 'x': - case 'X': - switch (size) - { - case 64: - dprinthex((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, Lhex); - break; - case 16: - dprinthex((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, Shex); - break; - case 8: - dprinthex((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, Bhex); - break; - default: - dprinthex((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, Ihex); - break; - } - break; - case 'c': - printf("%c", (char)dprintf_get_arg8(argbuf, argcurr)); - break; - case 's': - { - uint64_t str_addr = dprintf_get_arg64(argbuf, argcurr); + break; + case 2: // check the size of the object to be printed + state = 3; + switch (*p) + { + case 'l': + errQ[errP++] = 'l'; + size = 64; + p++; + break; + case 'h': + errQ[errP++] = 'h'; + size = 16; + p++; + break; + case 'b': + errQ[errP++] = 'b'; + size = 8; + p++; + break; + default: + size = 32; + break; + } + break; + case 3: // do the print + switch (*p) + { + case '%': + printf("%c", '%'); + break; + case 'd': + case 'i': + switch (size) + { + case 64: + dprintdec((int64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, 0); + break; + case 16: // short + dprintdec((int64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, 4); + break; + case 8: // byte + dprintdec((int64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, 3); + break; + default: // int + dprintdec((int64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, 9); + break; + } + break; + case 'u': + switch (size) + { + case 64: + dprintudec((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, 0); + break; + case 16: + dprintudec((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, 4); + break; + case 8: + dprintudec((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, 3); + break; + default: + dprintudec((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, 9); + break; + } + break; + case 'o': + switch (size) + { + case 64: + dprintoct((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, Loct); + break; + case 16: // short + dprintoct((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, Soct); + break; + case 8: // byte + dprintoct((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, Boct); + break; + default: // int + dprintoct((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, Ioct); + break; + } + break; + case 'x': + case 'X': + switch (size) + { + case 64: + dprinthex((uint64_t)dprintf_get_arg64(argbuf, argcurr), zeropad, Lhex); + break; + case 16: + dprinthex((uint64_t)dprintf_get_arg16(argbuf, argcurr), zeropad, Shex); + break; + case 8: + dprinthex((uint64_t)dprintf_get_arg8(argbuf, argcurr), zeropad, Bhex); + break; + default: + dprinthex((uint64_t)dprintf_get_arg32(argbuf, argcurr), zeropad, Ihex); + break; + } + break; + case 'c': + printf("%c", (char)dprintf_get_arg8(argbuf, argcurr)); + break; + case 's': + { + uint64_t str_addr = dprintf_get_arg64(argbuf, argcurr); uint8_t strbyte = 0; do { @@ -385,22 +385,22 @@ void mips3_device::do_o2_dprintf(uint32_t fmt_addr, uint32_t a1, uint32_t a2, ui str_addr++; printf("%c", (char)strbyte); } while(strbyte); - break; + break; + } + case '0': // error + case 'l': // error + case 'h': // error + default: // error + for (int i = 0; i < 3; i++) + printf("%c", (char)errQ[i]); + printf("%c", *p++); + break; } - case '0': // error - case 'l': // error - case 'h': // error - default: // error - for (int i = 0; i < 3; i++) - printf("%c", (char)errQ[i]); - printf("%c", *p++); - break; - } - state = 0; // reset the state machine - size = 0; // reset the size - zeropad = false; // reset the zero padding - errP = 0; // reset errQ - p++; - } - } + state = 0; // reset the state machine + size = 0; // reset the size + zeropad = false; // reset the zero padding + errP = 0; // reset errQ + p++; + } + } } |