|
#181
|
||||
|
||||
![]() Quote:
__________________
--------------------- CPU: Intel U7300 1.3 GHz GPU: Mobile Intel 4 Series (on board) AUDIO: Realtek HD Audio (on board) RAM: 4 GB OS: Windows 7 - 32 bit |
#182
|
||||
|
||||
![]() Quote:
Code:
typedef struct { HWND hwnd; HINSTANCE hinst; BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre // bswap on a dword (32 bits) boundry // eg. the first 8 bytes are stored like this: // 4 3 2 1 8 7 6 5 BYTE * HEADER; // This is the rom header (first 40h bytes of the rom // This will be in the same memory format as the rest of the memory. BYTE * RDRAM; BYTE * DMEM; BYTE * IMEM; DWORD * MI_INTR_REG; DWORD * AI_DRAM_ADDR_REG; DWORD * AI_LEN_REG; DWORD * AI_CONTROL_REG; DWORD * AI_STATUS_REG; DWORD * AI_DACRATE_REG; DWORD * AI_BITRATE_REG; void (*CheckInterrupts)( void ); } AUDIO_INFO;
__________________
--------------------- CPU: Intel U7300 1.3 GHz GPU: Mobile Intel 4 Series (on board) AUDIO: Realtek HD Audio (on board) RAM: 4 GB OS: Windows 7 - 32 bit Last edited by shunyuan; 10th May 2013 at 04:56 PM. |
#183
|
||||
|
||||
![]()
Honestly I don't know lmao
But, in `mfc0.h` where your HLE audio pre-compiles the microcodes for doing HLE, are already several instances of the RSP registers being read from. Somehow (I really don't know how.) your audio HLE plugin is already simulating those reads from the SP system control registers, so whatever method was already being done for that, maybe it could be done for updating the SP_SEMAPHORE_REG lock algorithm in the manner defined in that file.
__________________
http://theoatmeal.com/comics/cat_vs_internet |
#184
|
||||
|
||||
![]() Quote:
Code:
/************************************************************************** * rsp_interface by Shunyuan * * A simple interface for LLE RSP to make other module can use RSP engine * * NOTE: The LLE RSP is written by CDX4 (Iconoclast). ***************************************************************************/ #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "rsp.h" RSP_REGS RspRegs; RSP_INFO RSP; static void DummyFunc(void) {} void InitiateRSP(unsigned char *RDRAM, unsigned char *DMEM, unsigned char *IMEM) {
__________________
--------------------- CPU: Intel U7300 1.3 GHz GPU: Mobile Intel 4 Series (on board) AUDIO: Realtek HD Audio (on board) RAM: 4 GB OS: Windows 7 - 32 bit Last edited by shunyuan; 10th May 2013 at 05:10 PM. |
#185
|
||||
|
||||
![]()
Yeah I saw that; I just didn't think how audio plugin would access it.
I guess RspRegs is meant to be more than just some virtual typedef; it should be an entirely separate machine instance for replicating on the audio. So it would be: `*RspRegs.SP_SEMAPHORE_REG`. But all you would have to do is un-comment the #define by `// #define SEMAPHORE_LOCK_CORRECTIONS` in config.h, and I think it would apply the change for you in the HLE audio compiler. If it does the whole thing out in LLE first while compiling though then it might still be broken....
__________________
http://theoatmeal.com/comics/cat_vs_internet |
#186
|
||||
|
||||
![]() Quote:
__________________
--------------------- CPU: Intel U7300 1.3 GHz GPU: Mobile Intel 4 Series (on board) AUDIO: Realtek HD Audio (on board) RAM: 4 GB OS: Windows 7 - 32 bit |
#187
|
||||
|
||||
![]()
No problems? Were you able yo complete the game? Did you use z64gl? Ill probably play MM instead,as I was only going to play OoT to help test the plugin.
__________________
Intel core i5 3470 @ 3.9 8gb ddr 3 ram GTX 460 1gb |
#188
|
||||
|
||||
![]() Quote:
Haven't worried about it much to isolate why. I was able to complete the game just fine. I did run into some "Weird addr." warning messages along the way, but they turned out to be unpredictable/random because re-loading saved states to try to get the errors to pop up again failed. They were probably caused by the VR4300 host CPU recompiler core and not my RSP interpreter. So yes, completely playable. But Zelda Majora's Mask! My favorite game, didn't run it yet to find out. ![]() Zelda MM however is unplayable on ziggy's RSP plugin for z64gl. He and Ville Linde of MAME omitted the almost-never-used BLTZAL scalar operation, but angrylion eventually added it back in. I based my implementation off the official MIPS R4000 manual at the time. So ! Can't play Zelda MM in LLE without using my RSP plugin or maybe zilmar's RSP (recompiler/interpreter?).
__________________
http://theoatmeal.com/comics/cat_vs_internet |
#189
|
||||
|
||||
![]()
Studies show that assembly output is optimized better when I vectorize the split steps in a vector operation.
For example, a traditional Vector Multiply emulator, does Code:
VMUL.cond :: for (int i = 0; i < 8; i++) { multiplyElements(); storeProductToAccumulator(); WBAccToVRFile(); UpdateVCF(); // set/clear vector control flag registers, if needed } Code:
register int i; for (i = 0; i < 8; i++) multiplyElements(); for (i = 0; i < 8; i++) storeProductToAccumulator(); for (i = 0; i < 8; i++) WBAccToVRFile(); for (i = 0; i < 8; i++) UpdateVCF(); // again, only if non-SGI VU uses these in VMUL Code:
static void VADDC(int vd, int vs, int vt, int e) { unsigned int result[8]; register int i; VCO = 0x0000; for (i = 0; i < 8; i++) result[i] = (unsigned short)VR[vs][i] + (unsigned short)VR_T(i); for (i = 0; i < 8; i++) VACC[i].s[LO] = (short)result; for (i = 0; i < 8; i++) VCO |= (result[i] > 0x0000FFFF) << i; /* (result[i] >> 16) << i */ for (i = 0; i < 8; i++) VR[vd][i] = VACC[i].s[LO]; return; } If the `VR_T(i)` macro is defined to indicate a shuffled vector/scalar coefficient, the compiler could optimize the very first loop to be a single SSEz vector instruction on the Intel machine. This is the accurate way to do it because the documentation says so. Obviously it would be faster (but less accurate) to say, shift `result[i]` over by 16 bits. The result is either going to be 0 or 1, so mask that into VCO. Only because, summation of 2 non-sign-extended 16-bit-wide registers, can never exceed 0x0001FFFE.
__________________
http://theoatmeal.com/comics/cat_vs_internet |
#190
|
||||
|
||||
![]()
If you need more testing, just say the word
![]()
__________________
My rig: CPU: Intel Core i7 4470 3.4 GHz to 3.9 GHz Video card:: MSI nVidia GTX 970 4 GB GDDR5 OS: Windows 7 Professional 64-bit RAM: 16 GB DDR3 SDRAM 10600 HDD: 2 x Western Digital 1 TB HDDs Monitor: 23" Asus Full HD LED Oh, and Snes9x > Zsnes in every way |