From 63c4579a47b45783fb2f2a0335069e881b3bb29a Mon Sep 17 00:00:00 2001 From: Lephe Date: Sun, 31 Jan 2021 17:31:23 +0100 Subject: [PATCH] gint/spuram: Port the test to fx-9860G Works out-of-the-box on GIII models, but not on older ones. --- assets-fx/img/opt_gint_spuram.png | Bin 0 -> 2195 bytes src/gint/spuram.c | 94 +++++++++++++++++++++++++++++- src/gintctl.c | 2 +- src/regs/regs.c | 13 ++++- 4 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 assets-fx/img/opt_gint_spuram.png diff --git a/assets-fx/img/opt_gint_spuram.png b/assets-fx/img/opt_gint_spuram.png new file mode 100644 index 0000000000000000000000000000000000000000..3878f438b1fd82ca815e395569c9f157c7cc0dbf GIT binary patch literal 2195 zcmV;E2yFL>P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3yslH|Azg#YUlJ_13I1aTa`5aAp6`2MKs=^5|C zyN+{E%7Q|JP$tf^z(JT&Yx?N%KQG~C13CI z{Cea2e&(Zc*3VZfU)S~P`i}?O_nC?Q;D*%S4AAfR`PaZUz60m~$S93u>DO2P`5&=+ z#QCgllm-m#v#3vq=f^ZWI6+C@VU5H1uY9)maE?x(B_-{&(&Sj;l0{QUk^RV!kRzM( zl0}XspKP3SURmF3T`hZFnpCvhLn52HZta?N<)f&3 z;HIM^Vl&3%eKyzpxlXCTPt~RdH?9M+N~!3_N=HMZYAvd3X0Qh&jqL>R|NXi7{rLI?JrHO`CoC91HoZ zvg&HfR$sox&Rcicb+>K1Z{Op{K}ydlr=E7~^y6m)S__R5HCkBo@EG5$eX;tx<9}dH zzF5mIQ};RhW{s<6ccOO+xjs`bXE2tFz_?uo5Oltrr7or9%iQHGd8R6ACdqoa*^^NJRYD8lmmlmz;J)4v!Yj`S{m7KIq@JkOIk%U8@f`wYJm~~Ck zh4Aw<3owNIn>0CZKee6Ed5#PDuRZhxG&Jk$(_fs$R z28Pkz=9)3vd9M?m8SU(d2`J|wn>v*o-0;J=0o#!_9OMJQ$|N3hE7sp-PIwRuyuC{mJ<<*s$=XdpcFf{K9|Oo3iL~xxZI>BsF!`KU zaKtuG#AVURcI$JJ)f|0?t>nZmK7GryC;Bk*Q9H}=%;5#JPOA%mPSLZ}`vO6%a!*H4 z>jtD0;Ti*Jz25K1AKK@tDGmwI$Dlpm8{TJKIWEhW0@JBTmUss}cU#wJsZh{*69fFm zcWwZ*P(?D=Q_;ir0O3hf)-^GM$i+|DsH=By(*x|$0b#)gDw0{^c>#3PFobl{-o}#2 zE+~Wj78l%{L(Q+F_wG1dkG{Y!&xnsD?){mljI69a^fI%uQvmZ2ovH((oo%t^?Pgah zYmyp6wFHW!^3>6>KDWE~R25yR`q_P)TeSPmf!bRn?1RdsJjcxx_oBs5FlCztIj69$ zDe>G5MQMnKI#9SfRj+o8;$It=1OtezgW?`hdtAO+K2{yw$d$`^d3-4C`*|$*r+UU% z@Hhv;1K!B_>{I%lyO`7k!R%o$@s}>dmBxV}>AO9QN8~rjJMS#eKQjifL7^R-%`t4K zY8n}H+K9HZuSsjN^il6(%|<&9OP}EtGuhxto#AcKn#){%eWNv?96-LY#$mY}rD;{i z02eGG?Hb+WJVZxOe(ms;_{`>x%`|!EW#wH$$CTo>5Chp^?orOHROa2TQMqOnW21On zQS>glZtXJs`c8V)Q^{)izFt==W8{|m6zD}zSYKjsXgtzGXFwa-TczBQ5y?U3?s+p& z_`aU9QFf@WOnXkESF4UJbL&ax^;Nfc0O57KY2~{7t}Ah2uu}AwHzN@`5LzIh*D*VsB}y&ReV={5AA0uu7ncjyva*sb&`9z?;e8Pd-UU$!kKxIKYu3po~oxk+E^Ydpnesk7ao6o-i9x@8|DoUf600009a7bBm z000XU000XU0RWnu7ytkO2XskIMF->x8xI>CI>PJY00020NklQ8_B4TD*!WZbNQJ*@D(p60>u87!ps5s73#t&}O+thvM_i>Y+8W-U6 VlPF0N+~WWM002ovPDHLkV1gxfRwV!c literal 0 HcmV?d00001 diff --git a/src/gint/spuram.c b/src/gint/spuram.c index 7065d48..6a7a0d7 100644 --- a/src/gint/spuram.c +++ b/src/gint/spuram.c @@ -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 */ diff --git a/src/gintctl.c b/src/gintctl.c index 6f8ac0d..3cd5f08 100644 --- a/src/gintctl.c +++ b/src/gintctl.c @@ -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 }, diff --git a/src/regs/regs.c b/src/regs/regs.c index 2f74e91..51ff63d 100644 --- a/src/regs/regs.c +++ b/src/regs/regs.c @@ -1,5 +1,7 @@ #include #include +#include +#include #include #include #include @@ -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();