/* This MUST return 0 if there are no characters in the RX FIFO. */ int sbcall_getc() { if (_lw(EE_SIO_ISR) & 0xf00) return _lb(EE_SIO_RXFIFO); return 0; }
int sio_getc() { /* Do we have something in the RX FIFO? */ if (_lw(SIO_ISR) & 0xf00) { u8 b = _lb(SIO_RXFIFO); _sw(7, SIO_ISR); return b; } /* Return EOF. */ return -1; }
char *syscallLogMem(char *buffer, char *s, int addr, int length) { int i, j; int lineStart; int value; s = appendHex(s, addr, 8); if (addr != 0) { *s++ = ':'; *s++ = '\n'; writeLog(buffer, s - buffer); s = buffer; lineStart = 0; for (i = 0; i < length; i++) { if (i > 0) { if ((i % 16) == 0) { s = append(s, " >"); for (j = lineStart; j < i; j++) { char c = _lb(addr + j); if (c < ' ' || c > '~') { c = '.'; } *s++ = c; } s = append(s, "<\n"); writeLog(buffer, s - buffer); s = buffer; lineStart = i; } else { *s++ = ' '; } } value = _lb(addr + i); *s++ = hexDigits[value >> 4]; *s++ = hexDigits[value & 0x0F]; } }
void printLogMem(const char *s1, int addr, int length) { int i, j; int lineStart; char buffer[100]; char *s = buffer; s = append(s, s1); s = appendHex(s, addr, 8); s = append(s, ":\n"); if (addr != 0) { lineStart = 0; for (i = 0; i < length; i++) { if (i > 0) { if ((i % 16) == 0) { s = append(s, " >"); for (j = lineStart; j < i; j++) { char c = _lb(addr + j); if (c < ' ' || c > '~') { c = '.'; } *s++ = c; } s = append(s, "<\n"); writeLog(buffer, s - buffer); s = buffer; lineStart = i; } else { s = append(s, " "); } } s = appendHexNoPrefix(s, _lb(addr + i), 2); } } s = append(s, "\n"); writeLog(buffer, s - buffer); }
void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 result, u32 ra, const char *prefix) { char buffer[300]; char *s = buffer; int i, j, k; int length; int lineStart; // Don't log out own sceIoWrites. if (syscallInfo->nid == 0x42EC03AC && parameters[0] == commonInfo->logFd) { return; } if (logTimestamp) { pspTime time; if (sceRtcGetCurrentClockLocalTime(&time) == 0) { s = appendInt(s, time.hour, 2); *s++ = ':'; s = appendInt(s, time.minutes, 2); *s++ = ':'; s = appendInt(s, time.seconds, 2); *s++ = '.'; s = appendInt(s, time.microseconds, 6); *s++ = ' '; } } if (logThreadName) { SceKernelThreadInfo currentThreadInfo; currentThreadInfo.size = sizeof(currentThreadInfo); currentThreadInfo.name[0] = '\0'; sceKernelReferThreadStatus(0, ¤tThreadInfo); s = append(s, currentThreadInfo.name); *s++ = ' '; *s++ = '-'; *s++ = ' '; } if (logRa) { s = appendHex(s, ra, 0); *s++ = ' '; } s = append(s, prefix); s = append(s, syscallInfo->name); int types = syscallInfo->paramTypes; for (i = 0; i < syscallInfo->numParams; i++, types >>= 4) { if (i > 0) { *s++ = ','; } *s++ = ' '; int parameter = parameters[i]; switch (types & 0xF) { case TYPE_HEX32: s = appendHex(s, parameter, 0); break; case TYPE_INT32: s = appendInt(s, parameter, 0); break; case TYPE_STRING: s = appendHex(s, parameter, 8); if (parameter != 0) { *s++ = '('; *s++ = '\''; s = append(s, (char *) parameter); *s++ = '\''; *s++ = ')'; } break; case TYPE_POINTER32: s = appendHex(s, parameter, 8); if (parameter != 0) { *s++ = '('; s = appendHex(s, _lw(parameter), 0); *s++ = ')'; } break; case TYPE_POINTER64: s = appendHex(s, parameter, 8); if (parameter != 0) { *s++ = '('; s = appendHex(s, _lw(parameter), 8); *s++ = ' '; s = appendHex(s, _lw(parameter + 4), 8); *s++ = ')'; } break; case TYPE_VARSTRUCT: s = appendHex(s, parameter, 8); if (parameter != 0) { *s++ = ':'; *s++ = '\n'; writeLog(buffer, s - buffer); s = buffer; length = _lw(parameter); lineStart = 0; for (j = 0; j < length; j += 4) { if (j > 0) { if ((j % 16) == 0) { s = append(s, " >"); for (k = lineStart; k < j; k++) { char c = _lb(parameter + k); if (c < ' ' || c > '~') { c = '.'; } *s++ = c; } s = append(s, "<\n"); writeLog(buffer, s - buffer); s = buffer; lineStart = j; } else { *s++ = ','; *s++ = ' '; } } s = appendHex(s, _lw(parameter + j), 8); } } break; case TYPE_FIXSTRUCT: s = appendHex(s, parameter, 8); if (parameter != 0) { *s++ = ':'; *s++ = '\n'; writeLog(buffer, s - buffer); s = buffer; length = FIXSTRUCT_SIZE; lineStart = 0; for (j = 0; j < length; j += 4) { if (j > 0) { if ((j % 16) == 0) { s = append(s, " >"); for (k = lineStart; k < j; k++) { char c = _lb(parameter + k); if (c < ' ' || c > '~') { c = '.'; } *s++ = c; } s = append(s, "<\n"); writeLog(buffer, s - buffer); s = buffer; lineStart = j; } else { *s++ = ','; *s++ = ' '; } } s = appendHex(s, _lw(parameter + j), 8); } } break; } } *s++ = ' '; *s++ = '='; *s++ = ' '; s = appendHex(s, (int) result, 0); #if DEBUG_MUTEX s = mutexLog(s, syscallInfo, parameters, result); #endif *s++ = '\n'; writeLog(buffer, s - buffer); #if DEBUG_UTILITY_SAVEDATA utilitySavedataLog(buffer, syscallInfo, parameters[0]); #endif }
/* 20 */ u8 sio2_data_in() { return _lb(SIO2_REG_DATA_IN); }
// Flushes the input buffer. void sio_flush() { while (_lw(SIO_ISR) & 0xf00) _lb(SIO_RXFIFO); }