some big endian fixes
authornotaz <notasas@gmail.com>
Sat, 10 Sep 2022 14:53:54 +0000 (17:53 +0300)
committernotaz <notasas@gmail.com>
Sat, 10 Sep 2022 18:43:41 +0000 (21:43 +0300)
"kinda sucks but it works" kind of thing

frontend/libpicofe
frontend/menu.c
libpcsxcore/cdrom.c
libpcsxcore/cdrom.h
plugins/dfxvideo/gpu.c
plugins/dfxvideo/gpu.h
plugins/dfxvideo/gpulib_if.c
plugins/dfxvideo/soft.c

index a8b4c53..7167e5f 160000 (submodule)
@@ -1 +1 @@
-Subproject commit a8b4c53d7795e4d448d88b0b8222549ede78622a
+Subproject commit 7167e5f3376f0d0692ae102ed2df1ef5d2cc199a
index 449b60f..72c51d0 100644 (file)
@@ -96,6 +96,7 @@ static int config_save_counter, region, in_type_sel1, in_type_sel2;
 static int psx_clock;
 static int memcard1_sel = -1, memcard2_sel = -1;
 extern int g_autostateld_opt;
+static int menu_iopts[8];
 int g_opts, g_scaler, g_gamma = 100;
 int scanlines, scanline_level = 20;
 int soft_scaling, analog_deadzone; // for Caanoo
@@ -1556,14 +1557,16 @@ static menu_entry e_menu_speed_hacks[] =
        mee_onoff_h   ("Assume GTE regs unneeded", 0, new_dynarec_hacks, NDHACK_GTE_UNNEEDED, h_cfg_gteunn),
        mee_onoff_h   ("Disable GTE flags",        0, new_dynarec_hacks, NDHACK_GTE_NO_FLAGS, h_cfg_gteflgs),
 #endif
-       mee_onoff_h   ("Disable CPU/GTE stalls",   0, Config.DisableStalls, 1, h_cfg_stalls),
+       mee_onoff_h   ("Disable CPU/GTE stalls",   0, menu_iopts[0], 1, h_cfg_stalls),
        mee_end,
 };
 
 static int menu_loop_speed_hacks(int id, int keys)
 {
        static int sel = 0;
+       menu_iopts[0] = Config.DisableStalls;
        me_loop(e_menu_speed_hacks, &sel);
+       Config.DisableStalls = menu_iopts[0];
        return 0;
 }
 
@@ -1588,22 +1591,24 @@ static const char h_cfg_nodrc[]  = "Disable dynamic recompiler and use interpret
 static const char h_cfg_shacks[] = "Breaks games but may give better performance";
 static const char h_cfg_icache[] = "Support F1 games (only when dynarec is off)";
 
+enum { AMO_XA, AMO_CDDA, AMO_SIO, AMO_SPUI, AMO_IC, AMO_RCNT, AMO_WA, AMO_CPU };
+
 static menu_entry e_menu_adv_options[] =
 {
        mee_onoff_h   ("Show CPU load",          0, g_opts, OPT_SHOWCPU, h_cfg_cpul),
        mee_onoff_h   ("Show SPU channels",      0, g_opts, OPT_SHOWSPU, h_cfg_spu),
        mee_onoff_h   ("Disable Frame Limiter",  0, g_opts, OPT_NO_FRAMELIM, h_cfg_fl),
-       mee_onoff_h   ("Disable XA Decoding",    0, Config.Xa, 1, h_cfg_xa),
-       mee_onoff_h   ("Disable CD Audio",       0, Config.Cdda, 1, h_cfg_cdda),
-       //mee_onoff_h   ("SIO IRQ Always Enabled", 0, Config.Sio, 1, h_cfg_sio),
-       mee_onoff_h   ("SPU IRQ Always Enabled", 0, Config.SpuIrq, 1, h_cfg_spuirq),
-       mee_onoff_h   ("ICache emulation",       0, Config.icache_emulation, 1, h_cfg_icache),
+       mee_onoff_h   ("Disable XA Decoding",    0, menu_iopts[AMO_XA],   1, h_cfg_xa),
+       mee_onoff_h   ("Disable CD Audio",       0, menu_iopts[AMO_CDDA], 1, h_cfg_cdda),
+       //mee_onoff_h   ("SIO IRQ Always Enabled", 0, menu_iopts[AMO_SIO],  1, h_cfg_sio),
+       mee_onoff_h   ("SPU IRQ Always Enabled", 0, menu_iopts[AMO_SPUI], 1, h_cfg_spuirq),
+       mee_onoff_h   ("ICache emulation",       0, menu_iopts[AMO_IC],   1, h_cfg_icache),
 #ifdef DRC_DISABLE
-       mee_onoff_h   ("Rootcounter hack",       0, Config.RCntFix, 1, h_cfg_rcnt1),
+       mee_onoff_h   ("Rootcounter hack",       0, menu_iopts[AMO_RCNT], 1, h_cfg_rcnt1),
 #endif
-       mee_onoff_h   ("Rootcounter hack 2",     0, Config.VSyncWA, 1, h_cfg_rcnt2),
+       mee_onoff_h   ("Rootcounter hack 2",     0, menu_iopts[AMO_WA],   1, h_cfg_rcnt2),
 #if !defined(DRC_DISABLE) || defined(LIGHTREC)
-       mee_onoff_h   ("Disable dynarec (slow!)",0, Config.Cpu, 1, h_cfg_nodrc),
+       mee_onoff_h   ("Disable dynarec (slow!)",0, menu_iopts[AMO_CPU],  1, h_cfg_nodrc),
 #endif
        mee_handler_h ("[Speed hacks]",             menu_loop_speed_hacks, h_cfg_shacks),
        mee_end,
@@ -1612,7 +1617,25 @@ static menu_entry e_menu_adv_options[] =
 static int menu_loop_adv_options(int id, int keys)
 {
        static int sel = 0;
+       static struct {
+               boolean *opt;
+               int *mopt;
+       } opts[] = {
+               { &Config.Xa,      &menu_iopts[AMO_XA] },
+               { &Config.Cdda,    &menu_iopts[AMO_CDDA] },
+               { &Config.Sio,     &menu_iopts[AMO_SIO] },
+               { &Config.SpuIrq,  &menu_iopts[AMO_SPUI] },
+               { &Config.icache_emulation, &menu_iopts[AMO_IC] },
+               { &Config.RCntFix, &menu_iopts[AMO_RCNT] },
+               { &Config.VSyncWA, &menu_iopts[AMO_WA] },
+               { &Config.Cpu,     &menu_iopts[AMO_CPU] },
+       };
+       int i;
+       for (i = 0; i < ARRAY_SIZE(opts); i++)
+               *opts[i].mopt = *opts[i].opt;
        me_loop(e_menu_adv_options, &sel);
+       for (i = 0; i < ARRAY_SIZE(opts); i++)
+               *opts[i].opt = *opts[i].mopt;
        return 0;
 }
 
index 0307192..2e2d017 100644 (file)
@@ -567,6 +567,8 @@ static int cdrSeekTime(unsigned char *target)
 }
 
 static void cdrReadInterrupt(void);
+static void cdrPrepCdda(s16 *buf, int samples);
+static void cdrAttenuate(s16 *buf, int samples, int stereo);
 
 void cdrPlaySeekReadInterrupt(void)
 {
@@ -613,6 +615,7 @@ void cdrPlaySeekReadInterrupt(void)
                cdrPlayInterrupt_Autopause();
 
        if (!cdr.Muted && !Config.Cdda) {
+               cdrPrepCdda(read_buf, CD_FRAMESIZE_RAW / 4);
                cdrAttenuate(read_buf, CD_FRAMESIZE_RAW / 4, 1);
                SPU_playCDDAchannel(read_buf, CD_FRAMESIZE_RAW, psxRegs.cycle, cdr.FirstSector);
                cdr.FirstSector = 0;
@@ -1117,7 +1120,18 @@ void cdrInterrupt(void) {
  } while (0)
 #endif
 
-void cdrAttenuate(s16 *buf, int samples, int stereo)
+static void cdrPrepCdda(s16 *buf, int samples)
+{
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+       int i;
+       for (i = 0; i < samples; i++) {
+               buf[i * 2 + 0] = SWAP16(buf[i * 2 + 0]);
+               buf[i * 2 + 1] = SWAP16(buf[i * 2 + 1]);
+       }
+#endif
+}
+
+static void cdrAttenuate(s16 *buf, int samples, int stereo)
 {
        int i, l, r;
        int ll = cdr.AttenuatorLeftToLeft;
index 0cd6c5f..52bd21c 100644 (file)
@@ -46,7 +46,6 @@ extern "C" {
 #define SUB_FRAMESIZE                  96
 
 void cdrReset();
-void cdrAttenuate(s16 *buf, int samples, int stereo);
 
 void cdrInterrupt(void);
 void cdrPlaySeekReadInterrupt(void);
index 60dcaa4..a67d8c1 100644 (file)
 ////////////////////////////////////////////////////////////////////////
 
 unsigned char  *psxVub;
-signed   char  *psxVsb;
 unsigned short *psxVuw;
 unsigned short *psxVuw_eom;
-signed   short *psxVsw;
-uint32_t *psxVul;
-int32_t  *psxVsl;
 
 ////////////////////////////////////////////////////////////////////////
 // GPU globals
@@ -96,12 +92,7 @@ long CALLBACK GPUinit(void)                                // GPU INIT
  //!!! ATTENTION !!!
  psxVub=vram + 512 * 1024;                           // security offset into double sized psx vram!
 
- psxVsb=(signed char *)psxVub;                         // different ways of accessing PSX VRAM
- psxVsw=(signed short *)psxVub;
- psxVsl=(int32_t *)psxVub;
  psxVuw=(unsigned short *)psxVub;
- psxVul=(uint32_t *)psxVub;
-
  psxVuw_eom=psxVuw+1024*512;                    // pre-calc of end of vram
 
  memset(vram,0x00,(512*2)*1024 + (1024*1024));
index 7455692..224bc65 100644 (file)
@@ -277,11 +277,7 @@ extern BOOL           bSkipNextFrame;
 extern long           lGPUstatusRet;
 extern unsigned char  * psxVSecure;
 extern unsigned char  * psxVub;
-extern signed char    * psxVsb;
 extern unsigned short * psxVuw;
-extern signed short   * psxVsw;
-extern uint32_t  * psxVul;
-extern int32_t    * psxVsl;
 extern unsigned short * psxVuw_eom;
 extern BOOL           bChangeWinMode;
 extern long           lSelectedSlot;
index 25884b7..6215f58 100644 (file)
@@ -249,12 +249,8 @@ extern int32_t           drawH;
 
 PSXDisplay_t      PSXDisplay;
 unsigned char  *psxVub;
-signed   char  *psxVsb;
 unsigned short *psxVuw;
 unsigned short *psxVuw_eom;
-signed   short *psxVsw;
-uint32_t *psxVul;
-int32_t  *psxVsl;
 
 long              lGPUstatusRet;
 uint32_t          lGPUInfoVals[16];
@@ -278,13 +274,7 @@ long           lLowerpart;
 static void set_vram(void *vram)
 {
  psxVub=vram;
-
- psxVsb=(signed char *)psxVub;                         // different ways of accessing PSX VRAM
- psxVsw=(signed short *)psxVub;
- psxVsl=(int32_t *)psxVub;
  psxVuw=(unsigned short *)psxVub;
- psxVul=(uint32_t *)psxVub;
-
  psxVuw_eom=psxVuw+1024*512;                           // pre-calc of end of vram
 }
 
@@ -414,8 +404,16 @@ breakloop:
   return list - list_start;
 }
 
-void renderer_sync_ecmds(uint32_t *ecmds)
+void renderer_sync_ecmds(uint32_t *ecmds_)
 {
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+  // the funcs below expect LE
+  uint32_t i, ecmds[8];
+  for (i = 1; i <= 6; i++)
+    ecmds[i] = HTOLE32(ecmds_[i]);
+#else
+  uint32_t *ecmds = ecmds_;
+#endif
   cmdTexturePage((unsigned char *)&ecmds[1]);
   cmdTextureWindow((unsigned char *)&ecmds[2]);
   cmdDrawAreaStart((unsigned char *)&ecmds[3]);
index 285500e..5c71fd3 100644 (file)
@@ -971,13 +971,14 @@ static void FillSoftwareAreaTrans(short x0,short y0,short x1, // FILL AREA TRANS
   {
    uint32_t *DSTPtr;
    unsigned short LineOffset;
-   uint32_t lcol = HOST2LE32(lSetMask | (((uint32_t)(col)) << 16) | col);
+   uint32_t lcol = lSetMask | ((uint32_t)col << 16) | col;
    dx>>=1;
    DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);
    LineOffset = 512 - dx;
 
    if(!bCheckMask && !DrawSemiTrans)
     {
+     lcol = HOST2LE32(lcol);
      for(i=0;i<dy;i++)
       {
        for(j=0;j<dx;j++) { *DSTPtr++ = lcol; }
@@ -2401,7 +2402,7 @@ static inline void drawPoly3Fi(short x1,short y1,short x2,short y2,short x3,shor
 
  if(!bCheckMask && !DrawSemiTrans)
   {
-   color |=sSetMask;
+   lcolor = HOST2LE32(lcolor);
    for (i=ymin;i<=ymax;i++)
     {
      xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;
@@ -2409,9 +2410,9 @@ static inline void drawPoly3Fi(short x1,short y1,short x2,short y2,short x3,shor
 
      for(j=xmin;j<xmax;j+=2) 
       {
-       PUTLE32(((uint32_t *)&psxVuw[(i<<10)+j]), lcolor);
+       *(uint32_t *)&psxVuw[(i<<10)+j] = lcolor;
       }
-     if(j==xmax) PUTLE16(&psxVuw[(i<<10)+j], color);
+     if(j==xmax) psxVuw[(i<<10)+j] = lcolor;
 
      if(NextRow_F()) return;
     }
@@ -2481,7 +2482,7 @@ static void drawPoly4F(int32_t rgb)
 
  if(!bCheckMask && !DrawSemiTrans)
   {
-   color |=sSetMask;
+   lcolor = HOST2LE32(lcolor);
    for (i=ymin;i<=ymax;i++)
     {
      xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;
@@ -2489,9 +2490,9 @@ static void drawPoly4F(int32_t rgb)
 
      for(j=xmin;j<xmax;j+=2) 
       {
-       PUTLE32(((uint32_t *)&psxVuw[(i<<10)+j]), lcolor);
+       *(uint32_t *)&psxVuw[(i<<10)+j] = lcolor;
       }
-     if(j==xmax) PUTLE16(&psxVuw[(i<<10)+j], color);
+     if(j==xmax) psxVuw[(i<<10)+j] = lcolor;
 
      if(NextRow_F4()) return;
     }