+int psp_set_cpu_clock(int clock)
+{
+ int ret = scePowerSetClockFrequency(clock, clock, clock/2);
+ if (ret != 0) lprintf("failed to set clock: %i\n", ret);
+
+ return ret;
+}
+
+char *psp_get_status_line(void)
+{
+ static char buff[64];
+ int ret, bat_percent, bat_time;
+ pspTime time;
+
+ ret = sceRtcGetCurrentClockLocalTime(&time);
+ bat_percent = scePowerGetBatteryLifePercent();
+ bat_time = scePowerGetBatteryLifeTime();
+ if (ret < 0 || bat_percent < 0 || bat_time < 0) return NULL;
+
+ snprintf(buff, sizeof(buff), "%02i:%02i bat: %3i%%", time.hour, time.minutes, bat_percent);
+ if (!scePowerIsPowerOnline())
+ snprintf(buff+strlen(buff), sizeof(buff)-strlen(buff), " (%i:%02i)", bat_time/60, bat_time%60);
+ return buff;
+}
+
+/* alt logging */
+#define LOG_FILE "log.log"
+
+static SceUID logfd = -1;
+
+void lprintf_f(const char *fmt, ...)
+{
+ va_list vl;
+ char buff[256];
+
+ if (logfd == -2) return; // disabled
+
+ if (logfd < 0)
+ {
+ logfd = sceIoOpen(LOG_FILE, PSP_O_WRONLY|PSP_O_APPEND, 0777);
+ if (logfd < 0) {
+ logfd = -2;
+ return;
+ }
+ }
+
+ va_start(vl, fmt);
+ vsnprintf(buff, sizeof(buff), fmt, vl);
+ va_end(vl);
+
+ sceIoWrite(logfd, buff, strlen(buff));
+
+ // make sure it gets flushed
+ sceIoClose(logfd);
+ logfd = -1;
+}
+
+