aboutsummaryrefslogtreecommitdiff
path: root/libpcsxcore/psxbios.c
diff options
context:
space:
mode:
authorgameblabla2019-07-18 01:59:35 +0200
committergameblabla2019-07-18 01:59:35 +0200
commitba11675ca958088f3c5c1e60a5d437f0c1683514 (patch)
treefa6e5ff0789c4fc78435fa87870608ed6b548cd4 /libpcsxcore/psxbios.c
parent324cec89343c216ad232fbcaf50faed6e528beef (diff)
downloadpcsx_rearmed-ba11675ca958088f3c5c1e60a5d437f0c1683514.tar.gz
pcsx_rearmed-ba11675ca958088f3c5c1e60a5d437f0c1683514.tar.bz2
pcsx_rearmed-ba11675ca958088f3c5c1e60a5d437f0c1683514.zip
psxbios: Add todigit implementation
Based on CTRX's code : https://github.com/machinamentum/CTRX/blob/master/bios/source/libc.c#L152 I'm not aware of any games using it but it doesn't hurt to have it and it should work fine.
Diffstat (limited to 'libpcsxcore/psxbios.c')
-rw-r--r--libpcsxcore/psxbios.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c
index b13874e..924996a 100644
--- a/libpcsxcore/psxbios.c
+++ b/libpcsxcore/psxbios.c
@@ -369,6 +369,33 @@ void psxBios_putc(void) // 0x09, 0x3B
pc0 = ra;
}
+void psxBios_todigit(void) // 0x0a
+{
+ int c = a0;
+#ifdef PSXBIOS_LOG
+ PSXBIOS_LOG("psxBios_%s\n", biosA0n[0x0a]);
+#endif
+ c &= 0xFF;
+ if (c >= 0x30 && c < 0x3A) {
+ c -= 0x30;
+ }
+ else if (c > 0x60 && c < 0x7B) {
+ c -= 0x20;
+ }
+ else if (c > 0x40 && c < 0x5B) {
+ c = c - 0x41 + 10;
+ }
+ else if (c >= 0x80) {
+ c = -1;
+ }
+ else
+ {
+ c = 0x0098967F;
+ }
+ v0 = c;
+ pc0 = ra;
+}
+
void psxBios_abs() { // 0x0e
if ((s32)a0 < 0) v0 = -(s32)a0;
else v0 = a0;
@@ -2432,7 +2459,7 @@ void psxBiosInit() {
//biosA0[0x07] = psxBios_sys_a0_07;
biosA0[0x08] = psxBios_getc;
biosA0[0x09] = psxBios_putc;
- //biosA0[0x0a] = psxBios_todigit;
+ biosA0[0x0a] = psxBios_todigit;
//biosA0[0x0b] = psxBios_atof;
//biosA0[0x0c] = psxBios_strtoul;
//biosA0[0x0d] = psxBios_strtol;