gint/spuram: Port the test to fx-9860G

Works out-of-the-box on GIII models, but not on older ones.
This commit is contained in:
Lephe 2021-01-31 17:31:23 +01:00
parent d6345db414
commit 63c4579a47
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
4 changed files with 103 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -40,6 +40,54 @@ static void restore(volatile uint32_t *area, uint32_t *save, int pages)
}
}
#ifdef FX9860G
static void render_header(int y, int bank_count)
{
y = 9 + 6*y;
dtext( 1, 9, C_BLACK, "Area");
dtext(24, 9, C_BLACK, "Address");
dtext(60, 9, C_BLACK, "Visible pages");
}
static void render_area(int y, char const *name, uint32_t *area)
{
y = 9 + 6*y;
dprint( 1, y, C_BLACK, "%s", name);
dprint(24, y, C_BLACK, "%08X", (uint32_t)area);
int b = 0, bank = 0;
while(1)
{
bank = bank_number(area);
if(b == 7) break;
dprint(60+8*b, y, C_BLACK, bank >= 0 ? "%d" : "-", bank);
area += 0x2000;
b++;
}
}
static void render_bank(int y, char const *name, volatile uint32_t *bank,
int banks, int dsp, int focus)
{
y = 9 + 6*y;
dprint( 1, y, C_BLACK, "%s", name);
dprint(29, y, C_BLACK, "=%02X", *bank);
for(int b = 0; b < banks; b++)
{
int active = *bank & (1 << b);
int x = 50 + 8*b - 1;
int ry = y + (dsp==0) - 1;
int fill = active ? C_BLACK : C_WHITE;
int border = (focus == b) ? C_BLACK : C_WHITE;
drect_border(x, ry, x+7, ry+5, fill, 1, border);
}
}
#endif
#ifdef FXCG50
static void render_header(int y, int bank_count)
{
@ -118,10 +166,47 @@ void gintctl_gint_spuram(void)
int cur_bank = 0;
int cur_page = 0;
#ifdef FX9860G
int tab = 0;
#endif
while(key != KEY_EXIT)
{
dclear(C_WHITE);
#ifdef FX9860G
row_title("SPU memory banking");
extern font_t font_hexa;
font_t *old_font = dfont(&font_hexa);
if(tab == 0)
{
render_header(0, 7);
render_area(1, "PRAM0", PRAM0);
render_area(2, "XRAM0", XRAM0);
render_area(3, "YRAM0", YRAM0);
render_area(4, "PRAM1", PRAM1);
render_area(5, "XRAM1", XRAM1);
render_area(6, "YRAM1", YRAM1);
}
else if(tab == 1)
{
render_bank(1, "PBANKC0", &SPU.PBANKC0, 5, 0,
(cur_bank == 0) ? cur_page : -1);
render_bank(2, "PBANKC1", &SPU.PBANKC1, 5, 1,
(cur_bank == 0) ? cur_page : -1);
render_bank(4, "XBANKC0", &SPU.XBANKC0, 7, 0,
(cur_bank == 1) ? cur_page : -1);
render_bank(5, "XBANKC1", &SPU.XBANKC1, 7, 1,
(cur_bank == 1) ? cur_page : -1);
}
dfont(old_font);
extern bopti_image_t img_opt_gint_spuram;
dimage(0, 56, &img_opt_gint_spuram);
#endif
#ifdef FXCG50
row_title("SPU memory: PRAM0, XRAM0, YRAM0, YRAM");
row_print(1, 1, "Pages layout in memory (offsets in kiB):");
@ -159,16 +244,21 @@ void gintctl_gint_spuram(void)
if(key == KEY_DOWN && cur_bank == 0)
cur_bank++;
if(key == KEY_F1 && cur_bank == 0)
if(key == KEY_F1 && cur_bank == 0 && _(tab == 1, 1))
{
SPU.PBANKC0 ^= (1 << cur_page);
SPU.PBANKC1 ^= (1 << cur_page);
}
if(key == KEY_F1 && cur_bank == 1)
if(key == KEY_F1 && cur_bank == 1 && _(tab == 1, 1))
{
SPU.XBANKC0 ^= (1 << cur_page);
SPU.XBANKC1 ^= (1 << cur_page);
}
#ifdef FX9860G
if(key == KEY_F2) tab = 0;
if(key == KEY_F3) tab = 1;
#endif
}
/* Restore the values we saved before altering page data */

View File

@ -37,8 +37,8 @@ struct menu menu_gint = {
{ "RAM discovery", gintctl_gint_ram, MENU_SH4_ONLY },
#ifdef FXCG50
{ "DSP processors", gintctl_gint_dsp, 0 },
{ "SPU memory", gintctl_gint_spuram, MENU_SH4_ONLY },
#endif
{ "SPU memory", gintctl_gint_spuram, MENU_SH4_ONLY },
{ "Memory dump", gintctl_gint_dump, 0 },
{ "Switching to OS", gintctl_gint_switch, 0 },
{ "TLB management", gintctl_gint_tlb, 0 },

View File

@ -1,5 +1,7 @@
#include <gint/mpu/intc.h>
#include <gint/mpu/rtc.h>
#include <gint/mpu/power.h>
#include <gint/mpu/cpg.h>
#include <gint/hardware.h>
#include <gint/display.h>
#include <gint/keyboard.h>
@ -58,9 +60,14 @@ void gintctl_regs(void)
dclear(C_WHITE);
row_title("Register browser");
row_print(2, 1, "RAMCR: %08x", *(uint32_t *)0xff000074);
row_print(3, 1, "SAR0: %08x", *(uint32_t *)0xfe008020);
row_print(4, 1, "CHCR0: %08x", *(uint32_t *)0xfe00802c);
row_print(2, 1, "%08X %08X",
SH7305_POWER.MSTPCR0.lword,
SH7305_POWER.MSTPCR2.lword);
row_print(3, 1, "%08X %08x",
SH7305_CPG.FSICLKCR.lword,
SH7305_CPG.SPUCLKCR.lword);
row_print(4, 1, "%08X",
*(volatile uint32_t *)0xff000074);
dupdate();
getkey();