TapamN wrote:CrashMidnick wrote:I had time to test this gem ! Thank you so much TapamN !!
Thans Ian for sharing you compilation, you made my day.
I hope we will be able to remove those black tiles on some scrollings (mainly on the left side).
Is it possible to hide the "debug meter" or whatever it is called in the lower left corner ?
There should be an option to turn it off if you open up the in game menu (press up on analog stick in game) then go to the video settings menu and change the "Timing is shown" option. If it says "Raster lines shown", you can change that option to disable the lines on the left edge showing where rasters occur.
Rendering overhead has been reduced to around 2.0-2.2 ms. Originally, when creating the Genesis VRAM texture, it would write to main RAM, then DMA it into the DC's video memory. It would have to wait for DMA to complete, since it interfered with writing to the TA. Now it writes directly to VRAM using SQs. When I first wrote it, trying to SQ to VRAM was much slower than writing to main RAM then DMAing to VRAM, but I've learned that it's possible to SQ to video RAM at DMA speeds. You can't use the address KOS returns when allocating VRAM, you have to convert it to the address used for DMA (basically, replace the top byte of the pointer with 0x11), set some of the DMA registers, then SQ there.
Do you have an example of this very simple i can learn off..
I have to have this dumbed down for me (basically, replace the top byte of the pointer with 0x11), set some of the DMA registers, then SQ there.
Or maybe where it is in this emulator.. I cant seem to find that part..
Example i do this how would i use what your saying
Code: Select all
__inline__ void StreamTexturePVR( StreamBuffer * sbuf )
{
int i, n;
register unsigned int *s = (unsigned int *)StreamBuffer_Pop(sbuf);
register unsigned int *d = (unsigned int *)(void *) (0xe0000000 | (((unsigned long)sbuf->vramData) & 0x03ffffe0));
register unsigned int *dreal=(unsigned int *)sbuf;
// register unsigned int *s = (unsigned int *)src;
uint32 count = sbuf->imgWidth * 2;
/* Set store queue memory area as desired */
// QACR0 = ((((unsigned int)sbuf->vramData)>>26)<<2)&0x1c;
// QACR1 = ((((unsigned int)sbuf->vramData)>>26)<<2)&0x1c;
register unsigned qa=((((unsigned int)sbuf->vramData)>>26)<<2)&0x1c;
QACR0 = qa;
QACR1 = qa;
for( i = 0; i < sbuf->imgHeight; i++ )
{
d = (unsigned int *)(void *)
(0xe0000000 | (((unsigned long)sbuf->vramData+(i*(sbuf->texWidth * 2))) & 0x03ffffe0));
n = count>>5;
while(n--) {
asm("pref @%0" : : "r" (s + 8)); // prefetch 32 bytes for next loop
d[0] = *(s++);
d[1] = *(s++);
d[2] = *(s++);
d[3] = *(s++);
d[4] = *(s++);
d[5] = *(s++);
d[6] = *(s++);
d[7] = *(s++);
asm("pref @%0" : : "r" (d));
asm("ocbi @%0" : : "r" (dreal));
d += 8;
dreal += 8;
}
}
/* Wait for both store queues to complete */
d = (unsigned int *)0xe0000000;
d[0] = d[8] = 0;
}