From 8d1adbc6eeb6cb0a6c4ec5474d44febd5e7e078c Mon Sep 17 00:00:00 2001 From: Francisco Javier Trujillo Mata Date: Fri, 15 Mar 2019 01:14:53 +0100 Subject: [PATCH] Cleaning no needed functions and library --- .gitignore | 1 + Makefile.ps2 | 2 +- frontend/drivers/platform_ps2.c | 2 +- libretro-common/vfs/vfs_implementation.c | 8 +- ps2/compat_files/{cd.c => fileXio_cdvd.c} | 121 ++---- ps2/compat_files/murmur3.c | 317 ---------------- ps2/compat_files/ps2_descriptor.c | 169 ++++----- ps2/compat_files/ps2_hashtable.c | 159 -------- ps2/include/cd.h | 40 -- ps2/include/fileXio_cdvd.h | 37 ++ ps2/include/murmur3.h | 29 -- ps2/include/ps2_descriptor.h | 15 +- ps2/include/ps2_hashtable.h | 45 --- ps2/libcdvd/docs/libcdvd_ref.pdf | Bin 113259 -> 0 bytes ps2/libcdvd/example/Makefile | 17 - ps2/libcdvd/example/example.cpp | 425 ---------------------- ps2/libcdvd/example/font.fnt | Bin 262432 -> 0 bytes ps2/libcdvd/iop/cdvd_iop.c | 2 +- 18 files changed, 151 insertions(+), 1238 deletions(-) rename ps2/compat_files/{cd.c => fileXio_cdvd.c} (77%) delete mode 100755 ps2/compat_files/murmur3.c delete mode 100644 ps2/compat_files/ps2_hashtable.c delete mode 100644 ps2/include/cd.h create mode 100644 ps2/include/fileXio_cdvd.h delete mode 100755 ps2/include/murmur3.h delete mode 100644 ps2/include/ps2_hashtable.h delete mode 100644 ps2/libcdvd/docs/libcdvd_ref.pdf delete mode 100644 ps2/libcdvd/example/Makefile delete mode 100644 ps2/libcdvd/example/example.cpp delete mode 100644 ps2/libcdvd/example/font.fnt diff --git a/.gitignore b/.gitignore index 6d6bad97d8..caa622d541 100644 --- a/.gitignore +++ b/.gitignore @@ -167,6 +167,7 @@ retroarch_switch.nso # PS2 ps2/irx/*.c +ps2/libcdvd/lib/ # Wayland gfx/common/wayland/idle-inhibit-unstable-v1.c diff --git a/Makefile.ps2 b/Makefile.ps2 index 881f950860..9638fd087c 100644 --- a/Makefile.ps2 +++ b/Makefile.ps2 @@ -72,7 +72,7 @@ EE_OBJS += $(IRX_DIR)/cdvd_irx.o # Missing objecst on the PS2SDK EE_OBJS += ps2/compat_files/compat_ctype.o ps2/compat_files/time.o ps2/compat_files/ps2_devices.o -EE_OBJS += ps2/compat_files/cd.o ps2/compat_files/ps2_hashtable.o ps2/compat_files/murmur3.o ps2/compat_files/ps2_descriptor.o +EE_OBJS += ps2/compat_files/fileXio_cdvd.o ps2/compat_files/ps2_descriptor.o #EE_OBJS = griffin/griffin.o bootstrap/ps2/kernel_functions.o EE_OBJS += griffin/griffin.o diff --git a/frontend/drivers/platform_ps2.c b/frontend/drivers/platform_ps2.c index 8cc839c79a..d28986d4d8 100644 --- a/frontend/drivers/platform_ps2.c +++ b/frontend/drivers/platform_ps2.c @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/libretro-common/vfs/vfs_implementation.c b/libretro-common/vfs/vfs_implementation.c index 09bdca60d5..6dfb9b83b5 100644 --- a/libretro-common/vfs/vfs_implementation.c +++ b/libretro-common/vfs/vfs_implementation.c @@ -52,7 +52,7 @@ # endif # if defined(PS2) # include -# include +# include # endif # include # include @@ -1046,7 +1046,7 @@ libretro_vfs_implementation_dir *retro_vfs_opendir_impl(const char *name, bool i #elif defined(VITA) || defined(PSP) rdir->directory = sceIoDopen(name); #elif defined(PS2) - rdir->directory = newfileXioDopen(name); + rdir->directory = ps2fileXioDopen(name); #elif defined(_3DS) rdir->directory = !string_is_empty(name) ? opendir(name) : NULL; rdir->entry = NULL; @@ -1089,7 +1089,7 @@ bool retro_vfs_readdir_impl(libretro_vfs_implementation_dir *rdir) return (sceIoDread(rdir->directory, &rdir->entry) > 0); #elif defined(PS2) iox_dirent_t record; - int ret = newfileXioDread(rdir->directory, &record); + int ret = ps2fileXioDread(rdir->directory, &record); rdir->entry = record; return ( ret > 0); #elif defined(__CELLOS_LV2__) @@ -1187,7 +1187,7 @@ int retro_vfs_closedir_impl(libretro_vfs_implementation_dir *rdir) #elif defined(VITA) || defined(PSP) sceIoDclose(rdir->directory); #elif defined(PS2) - newfileXioDclose(rdir->directory); + ps2fileXioDclose(rdir->directory); #elif defined(__CELLOS_LV2__) rdir->error = cellFsClosedir(rdir->directory); #elif defined(ORBIS) diff --git a/ps2/compat_files/cd.c b/ps2/compat_files/fileXio_cdvd.c similarity index 77% rename from ps2/compat_files/cd.c rename to ps2/compat_files/fileXio_cdvd.c index 4369139720..09074c7094 100644 --- a/ps2/compat_files/cd.c +++ b/ps2/compat_files/fileXio_cdvd.c @@ -5,9 +5,7 @@ #include #include #include -//#include -#include "cd.h" - +#include #include "ps2_devices.h" #include "ps2_descriptor.h" @@ -17,32 +15,34 @@ static SifRpcClientData_t clientInit __attribute__ ((aligned(64))); static u32 initMode __attribute__ ((aligned(64))); -static s32 cdThreadId = 0; -static s32 bindSearchFile = -1; -static s32 bindDiskReady = -1; -static s32 bindInit = -1; -static s32 bindNCmd = -1; -static s32 bindSCmd = -1; -static s32 nCmdSemaId = -1; // n-cmd semaphore id -static s32 sCmdSemaId = -1; // s-cmd semaphore id -static s32 callbackSemaId = -1; // callback semaphore id -static s32 cdDebug = 0; -static s32 sCmdNum = 0; +static int cdThreadId = 0; +static int bindSearchFile = -1; +static int bindDiskReady = -1; +static int bindInit = -1; +static int bindNCmd = -1; +static int bindSCmd = -1; +static int nCmdSemaId = -1; // n-cmd semaphore id +static int sCmdSemaId = -1; // s-cmd semaphore id +static int callbackSemaId = -1; // callback semaphore id +static int cdDebug = 0; +static int sCmdNum = 0; static SifRpcClientData_t clientSCmd __attribute__ ((aligned(64))); static u8 sCmdRecvBuff[48] __attribute__ ((aligned(64))); -static volatile s32 cbSema = 0; +static volatile int cbSema = 0; static ee_thread_status_t cdThreadParam; -static s32 callbackThreadId = 0; -volatile s32 cdCallbackNum __attribute__ ((aligned(64))); +static int callbackThreadId = 0; +volatile int cdCallbackNum __attribute__ ((aligned(64))); static void cdSemaInit(void); -static s32 cdCheckSCmd(s32 cur_cmd); -static s32 cdSyncS(s32 mode); +static int cdCheckSCmd(int cur_cmd); +static int cdSyncS(int mode); static void cdSemaExit(void); -s32 cdInit(s32 mode) +static int first_file_index; + +int cdInit(int mode) { - s32 i; + int i; if (cdSyncS(1)) return 0; @@ -108,9 +108,9 @@ static void cdSemaInit(void) cbSema = 0; } -static s32 cdCheckSCmd(s32 cur_cmd) +static int cdCheckSCmd(int cur_cmd) { - s32 i; + int i; cdSemaInit(); if (PollSema(sCmdSemaId) != sCmdSemaId) { if (cdDebug > 0) @@ -144,7 +144,7 @@ static s32 cdCheckSCmd(s32 cur_cmd) return 1; } -static s32 cdSyncS(s32 mode) +static int cdSyncS(int mode) { if (mode == 0) { if (cdDebug > 0) @@ -156,33 +156,6 @@ static s32 cdSyncS(s32 mode) return SifCheckStatRpc(&clientSCmd); } -CdvdDiscType_t cdGetDiscType(void) -{ - if (cdCheckSCmd(CD_SCMD_GETDISCTYPE) == 0) - return 0; - - if (SifCallRpc(&clientSCmd, CD_SCMD_GETDISCTYPE, 0, 0, 0, sCmdRecvBuff, 4, 0, 0) < 0) { - SignalSema(sCmdSemaId); - return 0; - } - - SignalSema(sCmdSemaId); - return *(s32 *) UNCACHED_SEG(sCmdRecvBuff); -} - - - - - - - - - - - - -static int first_file_index; - static int comp_entries_by_filename(const void *elem1, const void *elem2) { return strcmp(((entries*)elem1)->filename, ((entries*)elem2)->filename); @@ -193,15 +166,12 @@ static inline char* strzncpy(char *d, const char *s, size_t l) d[0] = 0; return strncat(d, s, l); } - - - - -int listcdvd(const char *path, entries *FileEntry) +static int listcdvd(const char *path, entries *FileEntry) { static struct TocEntry TocEntryList[FILEENTRY_SIZE]; char dir[1025]; - int i, n, t; + int i, n; + int t = 0; strcpy(dir, &path[5]); // Directories first... @@ -254,19 +224,12 @@ int listcdvd(const char *path, entries *FileEntry) return t; } - - - - - - -int fileXioCDDread(int fd, iox_dirent_t *dirent) +static int fileXioCDDread(int fd, iox_dirent_t *dirent) { DescriptorTranslation *descriptor = __ps2_fd_grab(fd); if (descriptor->current_folder_position == -1) { descriptor->current_folder_position = 0; descriptor->items = listcdvd(descriptor->path, descriptor->FileEntry); - printf("Items in cdfs %i\n", descriptor->items); } if (descriptor->current_folder_position < descriptor->items) { @@ -274,7 +237,6 @@ int fileXioCDDread(int fd, iox_dirent_t *dirent) if (descriptor->FileEntry[descriptor->current_folder_position].dircheck) { dirent->stat.mode = FIO_S_IFDIR; } - printf("Reading files from CDVD %s\n", dirent->name); descriptor->current_folder_position++; } else { descriptor->current_folder_position = 0; @@ -284,10 +246,9 @@ int fileXioCDDread(int fd, iox_dirent_t *dirent) return 1; } - -int newfileXioDopen(const char *name) +int ps2fileXioDopen(const char *name) { - enum BootDeviceIDs deviceID = getBootDeviceID(name); + enum BootDeviceIDs deviceID = getBootDeviceID((char *)name); int fd; if (deviceID == BOOT_DEVICE_CDFS) { fd = __ps2_acquire_descriptor(); @@ -300,18 +261,7 @@ int newfileXioDopen(const char *name) return fd; } -int newfileXioDclose(int fd) -{ - // if (is_fd_valid(fd)) { - // int res = __ps2_release_descriptor(fd); - // printf("Releassssinggggg %i\n", res); - // return res; - // } else { - return fileXioDclose(fd); - // } -} - -int newfileXioDread(int fd, iox_dirent_t *dirent) +int ps2fileXioDread(int fd, iox_dirent_t *dirent) { if (is_fd_valid(fd)) { return fileXioCDDread(fd, dirent); @@ -320,4 +270,11 @@ int newfileXioDread(int fd, iox_dirent_t *dirent) } } - +int ps2fileXioDclose(int fd) +{ + if (is_fd_valid(fd)) { + return __ps2_release_descriptor(fd); + } else { + return fileXioDclose(fd); + } +} diff --git a/ps2/compat_files/murmur3.c b/ps2/compat_files/murmur3.c deleted file mode 100755 index 8abd92bca7..0000000000 --- a/ps2/compat_files/murmur3.c +++ /dev/null @@ -1,317 +0,0 @@ -//----------------------------------------------------------------------------- -// MurmurHash3 was written by Austin Appleby, and is placed in the public -// domain. The author hereby disclaims copyright to this source code. - -// Note - The x86 and x64 versions do _not_ produce the same results, as the -// algorithms are optimized for their respective platforms. You can still -// compile and run any of them on any platform, but your performance with the -// non-native version will be less than optimal. - -#include "murmur3.h" - -/*----------------------------------------------------------------------------- - Platform-specific functions and macros -*/ - -#ifdef __GNUC__ -#define FORCE_INLINE __attribute__((always_inline)) inline -#else -#define FORCE_INLINE inline -#endif - -static FORCE_INLINE uint32_t rotl32 ( uint32_t x, int8_t r ) -{ - return (x << r) | (x >> (32 - r)); -} - -static FORCE_INLINE uint64_t rotl64 ( uint64_t x, int8_t r ) -{ - return (x << r) | (x >> (64 - r)); -} - -#define ROTL32(x,y) rotl32(x,y) -#define ROTL64(x,y) rotl64(x,y) - -#define BIG_CONSTANT(x) (x##LLU) - -/*----------------------------------------------------------------------------- - Block read - if your platform needs to do endian-swapping or can only - handle aligned reads, do the conversion here -*/ - -#define getblock(p, i) (p[i]) - -/*-----------------------------------------------------------------------------*/ -/* Finalization mix - force all bits of a hash block to avalanche */ - -static FORCE_INLINE uint32_t fmix32 ( uint32_t h ) -{ - h ^= h >> 16; - h *= 0x85ebca6b; - h ^= h >> 13; - h *= 0xc2b2ae35; - h ^= h >> 16; - - return h; -} - -/*----------*/ - -static FORCE_INLINE uint64_t fmix64 ( uint64_t k ) -{ - k ^= k >> 33; - k *= BIG_CONSTANT(0xff51afd7ed558ccd); - k ^= k >> 33; - k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53); - k ^= k >> 33; - - return k; -} - -/*-----------------------------------------------------------------------------*/ - -void MurmurHash3_x86_32( const void * key, int len, - uint32_t seed, void * out ) -{ - const uint8_t * data = (const uint8_t*)key; - const int nblocks = len / 4; - int i; - - uint32_t h1 = seed; - - uint32_t c1 = 0xcc9e2d51; - uint32_t c2 = 0x1b873593; - - /*----------*/ - /* body */ - - const uint32_t * blocks = (const uint32_t *)(data + nblocks*4); - - for(i = -nblocks; i; i++) - { - uint32_t k1 = getblock(blocks,i); - - k1 *= c1; - k1 = ROTL32(k1,15); - k1 *= c2; - - h1 ^= k1; - h1 = ROTL32(h1,13); - h1 = h1*5+0xe6546b64; - } - - /*----------*/ - /* tail */ - - const uint8_t * tail = (const uint8_t*)(data + nblocks*4); - - uint32_t k1 = 0; - - switch(len & 3) - { - case 3: k1 ^= tail[2] << 16; - case 2: k1 ^= tail[1] << 8; - case 1: k1 ^= tail[0]; - k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1; - }; - - /*----------*/ - /* finalization */ - - h1 ^= len; - - h1 = fmix32(h1); - - *(uint32_t*)out = h1; -} - -/*-----------------------------------------------------------------------------*/ - -void MurmurHash3_x86_128 ( const void * key, const int len, - uint32_t seed, void * out ) -{ - const uint8_t * data = (const uint8_t*)key; - const int nblocks = len / 16; - int i; - - uint32_t h1 = seed; - uint32_t h2 = seed; - uint32_t h3 = seed; - uint32_t h4 = seed; - - uint32_t c1 = 0x239b961b; - uint32_t c2 = 0xab0e9789; - uint32_t c3 = 0x38b34ae5; - uint32_t c4 = 0xa1e38b93; - - /*----------*/ - /* body */ - - const uint32_t * blocks = (const uint32_t *)(data + nblocks*16); - - for(i = -nblocks; i; i++) - { - uint32_t k1 = getblock(blocks,i*4+0); - uint32_t k2 = getblock(blocks,i*4+1); - uint32_t k3 = getblock(blocks,i*4+2); - uint32_t k4 = getblock(blocks,i*4+3); - - k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1; - - h1 = ROTL32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b; - - k2 *= c2; k2 = ROTL32(k2,16); k2 *= c3; h2 ^= k2; - - h2 = ROTL32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747; - - k3 *= c3; k3 = ROTL32(k3,17); k3 *= c4; h3 ^= k3; - - h3 = ROTL32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35; - - k4 *= c4; k4 = ROTL32(k4,18); k4 *= c1; h4 ^= k4; - - h4 = ROTL32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17; - } - - /*----------*/ - /* tail */ - - const uint8_t * tail = (const uint8_t*)(data + nblocks*16); - - uint32_t k1 = 0; - uint32_t k2 = 0; - uint32_t k3 = 0; - uint32_t k4 = 0; - - switch(len & 15) - { - case 15: k4 ^= tail[14] << 16; - case 14: k4 ^= tail[13] << 8; - case 13: k4 ^= tail[12] << 0; - k4 *= c4; k4 = ROTL32(k4,18); k4 *= c1; h4 ^= k4; - - case 12: k3 ^= tail[11] << 24; - case 11: k3 ^= tail[10] << 16; - case 10: k3 ^= tail[ 9] << 8; - case 9: k3 ^= tail[ 8] << 0; - k3 *= c3; k3 = ROTL32(k3,17); k3 *= c4; h3 ^= k3; - - case 8: k2 ^= tail[ 7] << 24; - case 7: k2 ^= tail[ 6] << 16; - case 6: k2 ^= tail[ 5] << 8; - case 5: k2 ^= tail[ 4] << 0; - k2 *= c2; k2 = ROTL32(k2,16); k2 *= c3; h2 ^= k2; - - case 4: k1 ^= tail[ 3] << 24; - case 3: k1 ^= tail[ 2] << 16; - case 2: k1 ^= tail[ 1] << 8; - case 1: k1 ^= tail[ 0] << 0; - k1 *= c1; k1 = ROTL32(k1,15); k1 *= c2; h1 ^= k1; - }; - - /*----------*/ - /* finalization */ - - h1 ^= len; h2 ^= len; h3 ^= len; h4 ^= len; - - h1 += h2; h1 += h3; h1 += h4; - h2 += h1; h3 += h1; h4 += h1; - - h1 = fmix32(h1); - h2 = fmix32(h2); - h3 = fmix32(h3); - h4 = fmix32(h4); - - h1 += h2; h1 += h3; h1 += h4; - h2 += h1; h3 += h1; h4 += h1; - - ((uint32_t*)out)[0] = h1; - ((uint32_t*)out)[1] = h2; - ((uint32_t*)out)[2] = h3; - ((uint32_t*)out)[3] = h4; -} - -/*-----------------------------------------------------------------------------*/ - -void MurmurHash3_x64_128( const void * key, const int len, - const uint32_t seed, void * out ) -{ - const uint8_t * data = (const uint8_t*)key; - const int nblocks = len / 16; - int i; - - uint64_t h1 = seed; - uint64_t h2 = seed; - - uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5); - uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f); - - /*----------*/ - /* body */ - - const uint64_t * blocks = (const uint64_t *)(data); - - for(i = 0; i < nblocks; i++) - { - uint64_t k1 = getblock(blocks,i*2+0); - uint64_t k2 = getblock(blocks,i*2+1); - - k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1; - - h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729; - - k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2; - - h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5; - } - - /*----------*/ - /* tail */ - - const uint8_t * tail = (const uint8_t*)(data + nblocks*16); - - uint64_t k1 = 0; - uint64_t k2 = 0; - - switch(len & 15) - { - case 15: k2 ^= (uint64_t)(tail[14]) << 48; - case 14: k2 ^= (uint64_t)(tail[13]) << 40; - case 13: k2 ^= (uint64_t)(tail[12]) << 32; - case 12: k2 ^= (uint64_t)(tail[11]) << 24; - case 11: k2 ^= (uint64_t)(tail[10]) << 16; - case 10: k2 ^= (uint64_t)(tail[ 9]) << 8; - case 9: k2 ^= (uint64_t)(tail[ 8]) << 0; - k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2; - - case 8: k1 ^= (uint64_t)(tail[ 7]) << 56; - case 7: k1 ^= (uint64_t)(tail[ 6]) << 48; - case 6: k1 ^= (uint64_t)(tail[ 5]) << 40; - case 5: k1 ^= (uint64_t)(tail[ 4]) << 32; - case 4: k1 ^= (uint64_t)(tail[ 3]) << 24; - case 3: k1 ^= (uint64_t)(tail[ 2]) << 16; - case 2: k1 ^= (uint64_t)(tail[ 1]) << 8; - case 1: k1 ^= (uint64_t)(tail[ 0]) << 0; - k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1; - }; - - /*----------*/ - /* finalization */ - - h1 ^= len; h2 ^= len; - - h1 += h2; - h2 += h1; - - h1 = fmix64(h1); - h2 = fmix64(h2); - - h1 += h2; - h2 += h1; - - ((uint64_t*)out)[0] = h1; - ((uint64_t*)out)[1] = h2; -} - -/*-----------------------------------------------------------------------------*/ - diff --git a/ps2/compat_files/ps2_descriptor.c b/ps2/compat_files/ps2_descriptor.c index 3c95c16905..6af1106aac 100644 --- a/ps2/compat_files/ps2_descriptor.c +++ b/ps2/compat_files/ps2_descriptor.c @@ -19,40 +19,65 @@ #include #include -#define SCE_ERRNO_MASK 0xFF - -DescriptorTranslation *__ps2_fdmap[MAX_OPEN_FILES]; -DescriptorTranslation __ps2_fdmap_pool[MAX_OPEN_FILES]; - +static DescriptorTranslation *__ps2_fdmap[MAX_OPEN_FILES]; +static DescriptorTranslation __ps2_fdmap_pool[MAX_OPEN_FILES]; static int _lock_sema_id = -1; + static inline int _lock(void) { - return(WaitSema(_lock_sema_id)); + return(WaitSema(_lock_sema_id)); } static inline int _unlock(void) { - return(SignalSema(_lock_sema_id)); + return(SignalSema(_lock_sema_id)); +} + +static int __ps2_fd_drop(DescriptorTranslation *map) +{ + _lock(); + + if (map->ref_count == 1) + { + map->ref_count--; + free(map->FileEntry); + memset(map, 0, sizeof(DescriptorTranslation)); + } + else + { + map->ref_count--; + } + + _unlock(); + return 0; +} + +int is_fd_valid(int fd) +{ + /* Correct fd value */ + fd = MAX_OPEN_FILES - fd; + + return (fd > 0) && (fd < MAX_OPEN_FILES) && (__ps2_fdmap[fd] != NULL); } void _init_ps2_io(void) { - int ret; + int ret; ee_sema_t sp; - memset(__ps2_fdmap, 0, sizeof(__ps2_fdmap)); - memset(__ps2_fdmap_pool, 0, sizeof(__ps2_fdmap_pool)); + memset(__ps2_fdmap, 0, sizeof(__ps2_fdmap)); + memset(__ps2_fdmap_pool, 0, sizeof(__ps2_fdmap_pool)); sp.init_count = 1; - sp.max_count = 1; - sp.option = 0; - _lock_sema_id = CreateSema(&sp); + sp.max_count = 1; + sp.option = 0; + _lock_sema_id = CreateSema(&sp); } void _free_ps2_io(void) { - _lock(); - _unlock(); - if(_lock_sema_id >= 0) DeleteSema(_lock_sema_id); + _lock(); + _unlock(); + if(_lock_sema_id >= 0) DeleteSema(_lock_sema_id); } int __ps2_acquire_descriptor(void) @@ -61,13 +86,12 @@ int __ps2_acquire_descriptor(void) int i = 0; _lock(); - // get free descriptor - // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 - for (fd = 1; fd < MAX_OPEN_FILES; ++fd) + /* get free descriptor */ + for (fd = 0; fd < MAX_OPEN_FILES; ++fd) { if (__ps2_fdmap[fd] == NULL) { - // get free pool + /* get free pool */ for (i = 0; i < MAX_OPEN_FILES; ++i) { if (__ps2_fdmap_pool[i].ref_count == 0) @@ -83,107 +107,44 @@ int __ps2_acquire_descriptor(void) } } - // // no mores descriptors available... + /* no mores descriptors available... */ _unlock(); return -1; } int __ps2_release_descriptor(int fd) { - DescriptorTranslation *map = NULL; - int res = -1; + int res = -1; - _lock(); - - if (is_fd_valid(fd) && __ps2_fd_drop(__ps2_fdmap[MAX_OPEN_FILES - fd]) >= 0) - { + if (is_fd_valid(fd) && __ps2_fd_drop(__ps2_fdmap[MAX_OPEN_FILES - fd]) >= 0) + { + _lock(); /* Correct fd value */ fd = MAX_OPEN_FILES - fd; - free(__ps2_fdmap[fd]->FileEntry); - __ps2_fdmap[fd] = NULL; - res = 0; - } + __ps2_fdmap[fd] = NULL; + res = 0; + _unlock(); + } - _unlock(); - return res; -} - -int __ps2_duplicate_descriptor(int fd) -{ - int fd2 = -1; - - _lock(); - - if (is_fd_valid(fd)) - { - /* Correct fd value */ - fd = MAX_OPEN_FILES - fd; - // get free descriptor - // only allocate descriptors after stdin/stdout/stderr -> aka 0/1/2 - for (fd2 = 0; fd2 < MAX_OPEN_FILES; ++fd2) - { - if (__ps2_fdmap[fd2] == NULL) - { - __ps2_fdmap[fd2] = __ps2_fdmap[fd]; - __ps2_fdmap[fd2]->ref_count++; - _unlock(); - return fd2; - } - } - } - - _unlock(); - return -1; -} - -int __ps2_descriptor_ref_count(int fd) -{ - int res = 0; - /* Correct fd value */ - fd = MAX_OPEN_FILES - fd; - - _lock(); - res = __ps2_fdmap[fd]->ref_count; - _unlock(); - return res; + return res; } DescriptorTranslation *__ps2_fd_grab(int fd) { - DescriptorTranslation *map = NULL; - - _lock(); + DescriptorTranslation *map = NULL; - if (is_fd_valid(fd)) - { + _lock(); + + if (is_fd_valid(fd)) + { /* Correct fd value */ fd = MAX_OPEN_FILES - fd; - map = __ps2_fdmap[fd]; + map = __ps2_fdmap[fd]; - if (map) - map->ref_count++; - } + if (map) + map->ref_count++; + } - _unlock(); - return map; -} - -int __ps2_fd_drop(DescriptorTranslation *map) -{ - _lock(); - - if (map->ref_count == 1) - { - int ret = 0; - - map->ref_count--; - memset(map, 0, sizeof(DescriptorTranslation)); - } - else - { - map->ref_count--; - } - - _unlock(); - return 0; + _unlock(); + return map; } diff --git a/ps2/compat_files/ps2_hashtable.c b/ps2/compat_files/ps2_hashtable.c deleted file mode 100644 index abeaa86d3c..0000000000 --- a/ps2/compat_files/ps2_hashtable.c +++ /dev/null @@ -1,159 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2018 - Francisco Javier Trujillo Mata - fjtrujy - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include - -#include -#include -#include - -HashTable *crb_hashtable_create(uint32_t _size) { - HashTable *tbl = malloc(sizeof(HashTable)); - tbl->size = 0; - tbl->capacity = 0; - tbl->table = NULL; - return tbl; -} - -void crb_hashtable_destroy(HashTable **_tbl) { - if (_tbl == NULL || *_tbl == NULL) return; - - if ((*_tbl)->table != NULL) { - free((*_tbl)->table); - (*_tbl)->table = NULL; - } - - free(*_tbl); - - *_tbl = NULL; -} - -void crb_hashtable_grow(HashTable *_tbl) { - unsigned int oldCapacity; - struct table_entry **oldTable; - unsigned int i; - - if (_tbl == NULL) return; - - oldCapacity = _tbl->capacity; - if (_tbl->capacity > 0) { - _tbl->capacity *= 2; - } else { - _tbl->capacity = 32; - } - oldTable = _tbl->table; - _tbl->table = calloc(_tbl->capacity, sizeof(struct table_entry*)); - for (i = 0; i < oldCapacity; i++) { - if (oldTable[i] != NULL) { - crb_hashtable_insert(_tbl, oldTable[i]->key, oldTable[i]->value); - free(oldTable[i]); - } - } - free(oldTable); -} - -void crb_hashtable_hash(const char *_key, uint32_t *hash) { - MurmurHash3_x86_32(_key, strlen(_key), 0, hash); -} - -bool crb_hashtable_insert(HashTable *_tbl, const char *_key, void *_data) { - struct table_entry *entry, *next_entry; - uint32_t index; - - if (_tbl == NULL || _key == NULL || _data == NULL) return false; - - if (_tbl->size == _tbl->capacity) { - crb_hashtable_grow(_tbl); - } - - entry = malloc(sizeof(struct table_entry)); - if (entry == NULL) return false; - crb_hashtable_hash(_key, &entry->hash); - index = entry->hash % _tbl->capacity; - entry->key = strdup(_key); - entry->value = _data; - entry->next = NULL; - - if (_tbl->table[index] == NULL) { - _tbl->table[index] = entry; - } else { - next_entry = _tbl->table[index]; - while (next_entry != NULL) { - if (next_entry->next == NULL) { - next_entry->next = entry; - break; - } - next_entry = next_entry->next; - } - } - _tbl->size++; - return true; -} - -void *crb_hashtable_find(HashTable *_tbl, const char *_key) { - uint32_t hash; - struct table_entry *entry; - - if (_tbl == NULL || _key == NULL) return NULL; - - crb_hashtable_hash(_key, &hash); - - for (entry = _tbl->table[hash % _tbl->capacity]; entry != NULL; entry = entry->next) { - if (strcmp(_key, entry->key) == 0) return entry->value; - } - - return NULL; -} - -void *crb_hashtable_remove(HashTable *_tbl, const char *_key) { - uint32_t hash; - struct table_entry *entry, *sibling; - bool top = true; - void *data; - - if (_tbl == NULL || _key == NULL) return NULL; - - crb_hashtable_hash(_key, &hash); - - for (entry = _tbl->table[hash % _tbl->capacity]; entry != NULL; sibling = entry, entry = entry->next) { - if (strcmp(_key, entry->key) == 0) { - break; - } else { - top = false; - } - } - if (entry != NULL) { - data = entry->value; - if (top) { - if (entry->next != NULL) { - _tbl->table[hash % _tbl->capacity] = entry->next; - } else { - _tbl->table[hash % _tbl->capacity] = NULL; - } - } else { - if (entry->next != NULL) { - sibling->next = entry->next; - } else { - sibling->next = NULL; - } - } - free(entry->key); - free(entry); - entry = NULL; - _tbl->size--; - return data; - } - - return NULL; -} diff --git a/ps2/include/cd.h b/ps2/include/cd.h deleted file mode 100644 index 31a050063d..0000000000 --- a/ps2/include/cd.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef CD_H -#define CD_H - -#include -#include -#include - -#define CDVD_INIT_INIT 0x00 -#define CDVD_INIT_NOCHECK 0x01 -#define CDVD_INIT_EXIT 0x05 - -typedef enum { - CDVD_TYPE_NODISK = 0x00, // No Disc inserted - CDVD_TYPE_DETECT, // Detecting disc type - CDVD_TYPE_DETECT_CD, - CDVD_TYPE_DETECT_DVDSINGLE, - CDVD_TYPE_DETECT_DVDDUAL, - CDVD_TYPE_UNKNOWN, // Unknown disc type - - CDVD_TYPE_PS1CD = 0x10, // PS1 CD with no CDDA tracks - CDVD_TYPE_PS1CDDA, // PS1 CD with CDDA tracks - CDVD_TYPE_PS2CD, // PS2 CD with no CDDA tracks - CDVD_TYPE_PS2CDDA, // PS2 CD with CDDA tracks - CDVD_TYPE_PS2DVD, // PS2 DVD - - CDVD_TYPE_CDDA = 0xFD, // CDDA - CDVD_TYPE_DVDVIDEO, // DVD Video - CDVD_TYPE_ILLEGAL, // Illegal disk type -} CdvdDiscType_t; - -s32 cdInit(s32); -CdvdDiscType_t cdGetDiscType(void); - - - - -int newfileXioDopen(const char *name); -int newfileXioDread(int fd, iox_dirent_t *dirent); - -#endif diff --git a/ps2/include/fileXio_cdvd.h b/ps2/include/fileXio_cdvd.h new file mode 100644 index 0000000000..ada31a1006 --- /dev/null +++ b/ps2/include/fileXio_cdvd.h @@ -0,0 +1,37 @@ +#ifndef PS2_CD_H +#define PS2_CD_H + +#include +#include +#include + +#define CDVD_INIT_INIT 0x00 +#define CDVD_INIT_NOCHECK 0x01 +#define CDVD_INIT_EXIT 0x05 + +typedef enum { + CDVD_TYPE_NODISK = 0x00, /* No Disc inserted */ + CDVD_TYPE_DETECT, /* Detecting disc type */ + CDVD_TYPE_DETECT_CD, + CDVD_TYPE_DETECT_DVDSINGLE, + CDVD_TYPE_DETECT_DVDDUAL, + CDVD_TYPE_UNKNOWN, /* Unknown disc type */ + + CDVD_TYPE_PS1CD = 0x10, /* PS1 CD with no CDDA tracks */ + CDVD_TYPE_PS1CDDA, /* PS1 CD with CDDA tracks */ + CDVD_TYPE_PS2CD, /* PS2 CD with no CDDA tracks */ + CDVD_TYPE_PS2CDDA, /* PS2 CD with CDDA tracks */ + CDVD_TYPE_PS2DVD, /* PS2 DVD */ + + CDVD_TYPE_CDDA = 0xFD, /* CDDA */ + CDVD_TYPE_DVDVIDEO, /* DVD Video */ + CDVD_TYPE_ILLEGAL, /* Illegal disk type */ +} CdvdDiscType_t; + +int cdInit(int); + +int ps2fileXioDopen(const char *name); +int ps2fileXioDread(int fd, iox_dirent_t *dirent); +int ps2fileXioDclose(int fd); + +#endif /* PS2_CD_H */ diff --git a/ps2/include/murmur3.h b/ps2/include/murmur3.h deleted file mode 100755 index 555659f620..0000000000 --- a/ps2/include/murmur3.h +++ /dev/null @@ -1,29 +0,0 @@ -//----------------------------------------------------------------------------- -// MurmurHash3 was written by Austin Appleby, and is placed in the -// public domain. The author hereby disclaims copyright to this source -// code. - -#ifndef _MURMURHASH3_H_ -#define _MURMURHASH3_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/*-----------------------------------------------------------------------------*/ - -void MurmurHash3_x86_32(const void *key, int len, uint32_t seed, void *out); - -void MurmurHash3_x86_128(const void *key, int len, uint32_t seed, void *out); - -void MurmurHash3_x64_128(const void *key, int len, uint32_t seed, void *out); - -/*-----------------------------------------------------------------------------*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _MURMURHASH3_H_ */ diff --git a/ps2/include/ps2_descriptor.h b/ps2/include/ps2_descriptor.h index 5a4f0fcbd3..1d9e84c3a8 100644 --- a/ps2/include/ps2_descriptor.h +++ b/ps2/include/ps2_descriptor.h @@ -16,7 +16,7 @@ #define PS2_DESCRIPTOR_H #include -#include +#include #define MAX_OPEN_FILES 256 #define FILEENTRY_SIZE 2048 @@ -40,20 +40,9 @@ extern DescriptorTranslation *__ps2_fdmap[]; void _init_ps2_io(void); void _free_ps2_io(void); - +int is_fd_valid(int fd); int __ps2_acquire_descriptor(void); int __ps2_release_descriptor(int fd); -int __ps2_duplicate_descriptor(int fd); -int __ps2_descriptor_ref_count(int fd); DescriptorTranslation *__ps2_fd_grab(int fd); -int __ps2_fd_drop(DescriptorTranslation *fdmap); - -static inline int is_fd_valid(int fd) -{ - /* Correct fd value */ - fd = MAX_OPEN_FILES - fd; - - return (fd > 0) && (fd < MAX_OPEN_FILES) && (__ps2_fdmap[fd] != NULL); -} #endif /* PS2_DESCRIPTOR_H */ diff --git a/ps2/include/ps2_hashtable.h b/ps2/include/ps2_hashtable.h deleted file mode 100644 index 2b3d86a50f..0000000000 --- a/ps2/include/ps2_hashtable.h +++ /dev/null @@ -1,45 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2018 - Francisco Javier Trujillo Mata - fjtrujy - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#ifndef PS2_HASHTABLE_H -#define PS2_HASHTABLE_H - -#include -#include - -struct table_entry { - char *key; - void *value; - uint32_t hash; - struct table_entry *next; -}; - -struct hash_table { - uint32_t capacity; - uint32_t size; - struct table_entry **table; -}; - -typedef struct hash_table HashTable; - -HashTable *crb_hashtable_create(uint32_t _size); -void crb_hashtable_destroy(HashTable **_tbl); - -void crb_hashtable_grow(HashTable *_tbl); -void crb_hashtable_hash(const char *_key, uint32_t *hash); -bool crb_hashtable_insert(HashTable *_tbl, const char *_key, void *_data); -void *crb_hashtable_find(HashTable *_tbl, const char *_key); -void *crb_hashtable_remove(HashTable *_tbl, const char *_key); - -#endif diff --git a/ps2/libcdvd/docs/libcdvd_ref.pdf b/ps2/libcdvd/docs/libcdvd_ref.pdf deleted file mode 100644 index b8a99aa09d455bd9315dcb3edd3be17b7fce46ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113259 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 aq1*v$h{1lpo8jsO6on$?;JBeIMfyMHL#5yV diff --git a/ps2/libcdvd/example/Makefile b/ps2/libcdvd/example/Makefile deleted file mode 100644 index bc02ebc7ac..0000000000 --- a/ps2/libcdvd/example/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -#update this to point to the location of gslib -GSLIB = /ps2dev/gslib - -EE_BIN = example.elf -EE_OBJS = example.o - -EE_LDFLAGS += -L../lib -L$(GSLIB)/lib -EE_LIBS += -lkernel -lcdvdfs -lgs -lgcc -lsupc++ -lpad -EE_INCS += -I $(GSLIB)/source -I ../ee - -all: $(EE_BIN) - -clean: - rm -f *.elf *.o *.a - -include $(PS2LIB)/Makefile.pref -include $(PS2LIB)/Makefile.eeglobal diff --git a/ps2/libcdvd/example/example.cpp b/ps2/libcdvd/example/example.cpp deleted file mode 100644 index 8f42e44db6..0000000000 --- a/ps2/libcdvd/example/example.cpp +++ /dev/null @@ -1,425 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "cdvd_rpc.h" - -#define scr_w 640 -#define scr_h 480 - - -#define TEXT_COL_BRIGHT GS_SET_RGBA(0xFF, 0xFF, 0xFF, 0x80) -#define TEXT_COL_DIM GS_SET_RGBA(0x40, 0x40, 0xFF, 0x80) - -#define TRUE 1 -#define FALSE 0 - -gsDriver *pDisplay; - -extern int screen; -int filelisty = 60; - -static float selected = 1; // The currently selected file/dir - - -int button_released = TRUE; - -//A pointer to an array of TocEntries to be alloc'd later -static struct TocEntry *TocEntryList; - - - -gsFontTex *fontTex; - - - -// pathname on CD -char pathname[1024 + 1] __attribute__((aligned(64))); - -gsFont myFont; - -int WaitPadReady(int port, int slot); -void SetPadMode(int port, int slot); - - -void ClearScreen(void) -{ - pDisplay->drawPipe.setAlphaEnable(GS_DISABLE); - pDisplay->drawPipe.RectFlat(0, 0, scr_w, scr_h, 0, GS_SET_RGBA(0, 0, 0, 0x80)); - pDisplay->drawPipe.setAlphaEnable(GS_ENABLE); - pDisplay->drawPipe.Flush(); -} - - -int main(void) -{ - SifInitRpc(0); - - SifLoadModule("rom0:SIO2MAN", 0, NULL); /* load sio2 manager irx */ - SifLoadModule("rom0:PADMAN", 0, NULL); /* load pad manager irx */ - - SifLoadModule("host:cdvd.irx", 0, NULL); - - CDVD_Init(); - - padInit(0); - - char *padBuf = (char *)memalign(64, 256); - - padPortOpen(0, 0, padBuf); - - SetPadMode(0, 0); - - // allocate the memory for a large file list - TocEntryList = (TocEntry *)memalign(64, 4000 * sizeof(struct TocEntry)); - - - // open the font file, find the size of the file, allocate memory for it, and load it - int fontfile = fioOpen("host:font.fnt", O_RDONLY); - int fontsize = fioLseek(fontfile, 0, SEEK_END); - fioLseek(fontfile, 0, SEEK_SET); - fontTex = (gsFontTex *)memalign(64, fontsize); - fioRead(fontfile, fontTex, fontsize); - fioClose(fontfile); - - // Upload the background to the texture buffer - pDisplay = new gsDriver; - - pDisplay->setDisplayMode(scr_w, scr_h, - 170, 80, - GS_PSMCT32, 2, - GS_TV_AUTO, GS_TV_INTERLACE, - GS_DISABLE, GS_DISABLE); - - // Enable Alpha Blending - pDisplay->drawPipe.setAlphaEnable(GS_ENABLE); - - myFont.assignPipe(&(pDisplay->drawPipe)); - - // Upload the font into the texture memory past the screen buffers - myFont.uploadFont(fontTex, pDisplay->getTextureBufferBase(), - fontTex->TexWidth, // Use the fontTex width as texbuffer width (can use diff width) - 0, 0); - - -#define list_max 21 - int list_size = 21; // Number of files to display in list - int first_file = 1; // The first file to display in the on-screen list - int num_files = 0; // The total number of files in the list - int offset; // Offset of the selected file into the displayed list - - struct padButtonStatus padButtons; - int ps2_buttons; - - button_released = TRUE; - - while (1) { - - while (1) // until we've selected a file - { - // Get entries from specified path, don't filter by file extension, - // get files and directories, get a maximum of 4000 entries, and update path if dir changed - num_files = CDVD_GetDir(pathname, NULL, CDVD_GET_FILES_AND_DIRS, TocEntryList, 4000, pathname); - - if (num_files < list_max) - list_size = num_files; - else - list_size = list_max; - - // Don't leave the drive spinning, it's annoying ! - CDVD_Stop(); - - while (1) // Until we've selected something (dir or file) - { - - // Get button presses - // If X then select the previously highlighted file - // If up/down then increase/decrease the selected file - int padState; - - // only listen to pad input if it's plugged in, and stable - padState = padGetState(0, 0); - if (padState == PAD_STATE_STABLE) { - padRead(0, 0, &padButtons); - ps2_buttons = (padButtons.btns[0] << 8) | padButtons.btns[1]; - ps2_buttons = ~ps2_buttons; - - if (num_files > 0) { - // file Selected - if (ps2_buttons & PAD_CROSS) { - if (button_released == TRUE) { - button_released = FALSE; - break; - } - } else - button_released = TRUE; - - // DPAD + Shoulder file Selection - if (ps2_buttons & PAD_UP) - selected -= 0.15; - else if (ps2_buttons & PAD_DOWN) - selected += 0.15; - else if (ps2_buttons & PAD_R1) - selected -= 1; - else if (ps2_buttons & PAD_R2) - selected += 1; - else if (ps2_buttons & PAD_L1) - selected = 1; - else if (ps2_buttons & PAD_L2) - selected = num_files; - } - - if (ps2_buttons & PAD_SELECT) { - strcpy(pathname, "/"); - - ClearScreen(); - - myFont.Print(0, 640, 220, 4, - TEXT_COL_BRIGHT, - GSFONT_ALIGN_CENTRE, "Please Change CD\nThen Press 'X'"); - - pDisplay->drawPipe.Flush(); - - // Wait for VSync and then swap buffers - pDisplay->WaitForVSync(); - - pDisplay->swapBuffers(); - - - CDVD_FlushCache(); - strcpy(pathname, "/"); - - while (1) { - int padState; - - // only listen to pad input if it's plugged in, and stable - padState = padGetState(0, 0); - if (padState == PAD_STATE_STABLE) { - padRead(0, 0, &padButtons); - ps2_buttons = (padButtons.btns[0] << 8) | padButtons.btns[1]; - ps2_buttons = ~ps2_buttons; - - // ROM Selected - if (ps2_buttons & PAD_CROSS) { - break; - } - } - - pDisplay->WaitForVSync(); - } - - num_files = CDVD_GetDir(pathname, NULL, CDVD_GET_FILES_AND_DIRS, TocEntryList, 4000, pathname); - - if (num_files < list_max) - list_size = num_files; - else - list_size = list_max; - - selected = 1; - - CDVD_Stop(); - } - - if ((padButtons.mode >> 4) == 0x07) { - // Analogue file selection - float pad_v; - - pad_v = (float)(padButtons.ljoy_v - 128); // Range = +127 to -128 - - - if (pad_v > 32) { - // scrolling down, so incrementing selected tom - pad_v -= 32; - selected += (pad_v / 96); - } - - if (pad_v < -32) { - // scrolling down, so incrementing selected tom - pad_v += 32; - selected += (pad_v / 96); - } - } - - - - if (selected < 1) - selected = 1; - - if ((int)selected > num_files) - selected = (float)num_files; - } - - // calculate which file to display first in the list - if ((int)selected <= list_size / 2) - first_file = 1; - else { - if ((int)selected >= (num_files - (list_size / 2) + 1)) - first_file = num_files - list_size + 1; - else - first_file = (int)selected - ((list_size / 2)); - } - - // calculate the offset of the selected file into the displayed list - offset = (int)selected - first_file; - - - ClearScreen(); - - if (num_files > 0) { - // pDisplay->drawPipe.setScissorRect(list_xpos,list_ypos,list_xpos+list_width,list_ypos+list_height); - - for (int file = 0; file < list_size; file++) { - // if the entry is a dir, then display the directory symbol before the name - if (TocEntryList[first_file + file - 1].fileProperties & 0x02) { - // display a dir symbol (character 001 in the bitmap font) - myFont.Print(128, 640, filelisty + (file * 18), 4, GS_SET_RGBA(0x80, 0x80, 0x80, 0x80), GSFONT_ALIGN_LEFT, "\001"); - - if (file == ((int)selected - first_file)) { - myFont.Print(148, 640, filelisty + (file * 18), 4, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - TocEntryList[first_file + file - 1].filename); - } else { - myFont.Print(148, 640, filelisty + (file * 18), 4, TEXT_COL_DIM, GSFONT_ALIGN_LEFT, - TocEntryList[first_file + file - 1].filename); - } - } else { - if (file == ((int)selected - first_file)) { - myFont.Print(128, 640, filelisty + (file * 18), 4, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - TocEntryList[first_file + file - 1].filename); - } else { - myFont.Print(128, 640, filelisty + (file * 18), 4, TEXT_COL_DIM, GSFONT_ALIGN_LEFT, - TocEntryList[first_file + file - 1].filename); - } - } - } - - myFont.Print(420, 640, 440, 0, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - "Press X to Select"); - - myFont.Print(420, 640, 458, 0, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - "Press SELECT to Change CD"); - } - - - pDisplay->drawPipe.Flush(); - - // Wait for VSync and then swap buffers - pDisplay->WaitForVSync(); - - pDisplay->swapBuffers(); - } - - // We've selected something, but is it a file or a dir ? - if (TocEntryList[((int)selected) - 1].fileProperties & 0x02) { - // Append name onto current path - //gui_getfile_dispname((int)selected, tempname); - strcat(pathname, "/"); - strcat(pathname, TocEntryList[((int)selected) - 1].filename); - - // file list will be got next time round the while loop - - // Start from top of list - selected = 1; - } else { - // It's not a dir, so it must be a file - break; - } - } - - char size_string[64]; - - if (TocEntryList[((int)selected) - 1].fileSize < (2 * 1024)) - sprintf(size_string, "%d bytes", TocEntryList[((int)selected) - 1].fileSize); - else { - if (TocEntryList[((int)selected) - 1].fileSize < (2 * 1024 * 1024)) - sprintf(size_string, "%d Kb", TocEntryList[((int)selected) - 1].fileSize / 1024); - else - sprintf(size_string, "%d Mb", TocEntryList[((int)selected) - 1].fileSize / (1024 * 1024)); - } - - - for (int frame = 0; frame < 200; frame++) { - - // Selected a file, so display file properties for a couple of seconds - ClearScreen(); - - myFont.Print(100, 200, 220, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - "File name:"); - - myFont.Print(200, 640, 220, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - TocEntryList[((int)selected) - 1].filename); - - myFont.Print(100, 200, 240, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - "File path:"); - - myFont.Print(200, 640, 240, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - pathname); - - - myFont.Print(100, 200, 260, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - "File size:"); - - myFont.Print(200, 640, 260, 1, TEXT_COL_BRIGHT, GSFONT_ALIGN_LEFT, - size_string); - - pDisplay->drawPipe.Flush(); - - // Wait for VSync and then swap buffers - pDisplay->WaitForVSync(); - - pDisplay->swapBuffers(); - } - } - - free(fontTex); - - free(TocEntryList); - - delete pDisplay; - - return 0; -} - - -int WaitPadReady(int port, int slot) -{ - int state = 0; - - while ((state != PAD_STATE_STABLE) && - (state != PAD_STATE_FINDCTP1)) { - state = padGetState(port, slot); - - if (state == PAD_STATE_DISCONN) - break; // If no pad connected then dont wait for it to be plugged in - - //pEmuDisplay->WaitForVSync(); - } - - return state; -} - - -void SetPadMode(int port, int slot) -{ - // If the controller is already plugged in then - // put the controller into Analogue mode (and lock it) - // so that analogue stick can be used - - if (WaitPadReady(port, slot) == PAD_STATE_STABLE) // if pad is connected then initialise it - { - padSetMainMode(port, slot, PAD_MMODE_DUALSHOCK, PAD_MMODE_LOCK); - - WaitPadReady(port, slot); - } -} diff --git a/ps2/libcdvd/example/font.fnt b/ps2/libcdvd/example/font.fnt deleted file mode 100644 index 8d747f8826b8bbd53abce54e6b20440158b5ad19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262432 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 aoK@`JN9?qAdG_Jm$IQG+#|n1J{{I0UHI(K6 diff --git a/ps2/libcdvd/iop/cdvd_iop.c b/ps2/libcdvd/iop/cdvd_iop.c index 3e82b57267..6fd3b8dd6c 100644 --- a/ps2/libcdvd/iop/cdvd_iop.c +++ b/ps2/libcdvd/iop/cdvd_iop.c @@ -1574,7 +1574,7 @@ void *CDVDRpc_TrayReq(unsigned int *sbuff) { int ret; - sceCdTrayReq(sbuff[0], (s32 *)&ret); + sceCdTrayReq(sbuff[0], (int *)&ret); sbuff[0] = ret; return sbuff;