From 4350b81fc8b453e76aa026b4bf92a265eef6f036 Mon Sep 17 00:00:00 2001 From: Lephe Date: Mon, 1 Feb 2021 12:00:22 +0100 Subject: [PATCH] misc organisation improvements on fx-9860G --- CMakeLists.txt | 3 +- assets-fx/img/opt_gint_cpumem.png | Bin 0 -> 1741 bytes include/gintctl/gint.h | 4 +- src/gint/{hardware.c => cpumem.c} | 141 +++++++++++------------------- src/gintctl.c | 4 +- 5 files changed, 59 insertions(+), 93 deletions(-) create mode 100644 assets-fx/img/opt_gint_cpumem.png rename src/gint/{hardware.c => cpumem.c} (51%) diff --git a/CMakeLists.txt b/CMakeLists.txt index c3266f1..c51e027 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,12 +17,12 @@ set(SOURCES src/plot.c src/util.c src/gint/bopti.c + src/gint/cpumem.c src/gint/dma.c src/gint/dsp.c src/gint/dsp.s src/gint/dump.c src/gint/gray.c - src/gint/hardware.c src/gint/keyboard.c src/gint/ram.c src/gint/rtc.c @@ -58,6 +58,7 @@ set(ASSETS_fx assets-fx/img/libimg_swords.png assets-fx/img/opt_dump.png assets-fx/img/opt_gint_bopti.png + assets-fx/img/opt_gint_cpumem.png assets-fx/img/opt_gint_gray.png assets-fx/img/opt_gint_ram.png assets-fx/img/opt_gint_rtc.png diff --git a/assets-fx/img/opt_gint_cpumem.png b/assets-fx/img/opt_gint_cpumem.png new file mode 100644 index 0000000000000000000000000000000000000000..f33f5729c1966876b7492b03ac80d1c5e6494320 GIT binary patch literal 1741 zcmV;;1~U1HP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YwvMjj?{I6Ab2?7L&<>&zs-hr3zRGr5?9#43# z!!C7qJz4@pWs<`PW4IKEu$T{6YGM1@i5me>(R0?U?^1qL8NT=P`bLtInv(kKN5~ zNP~TB>chqJWd;)$vLx>^!*F~R*Zz*c7;Uyqy`8q(!q^nVB(12^d1z8m(!qJtMvR@4 z9cSjv@;)2l9K59oNxy@NT|$lwVcDD_(jVdPSm^Z|ufI(Lo)2Lv6O0j-{KxV9)r8*} zRl6ZaL^qlAkt@W-d~u+gM!CP320*Ajanm=!U*r3DegG>#P~S8UY;d;qVPYx$;+DJw zxaca*AN(Re7d3ua(&1YX3<)4;MxtcYoY{%G@Bly)k+XDOKmelPgCMz!7_b@O5qx8f z(>s@yKb}J>z(>WzflbH+SiLLw<9&cbQ$@Q%W9m9IbUr55P0h^hYHqrCcXf03;o)=0 z=tGAMA7jLr!6A^OhK0w7h&kbN_GjwE>WLY1E?%Mqy&|o?5Sz#IWlqiVw5+^FMa^&2K2iO*@n4`upQ!PR)Sc(wsNt#m zHT0UGTW9oQ2E@1%5ci7!2+bF>HmG;L$X(1@FjS$8AoXH%sLh8A5cVY2qHpYeA@|$3 zJ;?Q6;l{s%+;gG(KOo0X${%q16V%SFg!@J8Lxne|O`yJ9mE3K_d=US@jTA~)kE8Qc z9x{*p+^ZnS5#j$%dG4mRb3Jt>d@t4B7R3!Lf%+$h^fMR=uoA&mv01mSYp z9%t>WHSq!4Vz*k@SB;c0t3P+~08%I8B<;HKH9ES~)~F?CY=Rp}>uXVzWe%n8;91Cy zCW90U>S@b$9a&of_}AUtPaEkT!MV-PLL{!Y^l~rmXn1-%6{-U)ou^v*mQiiyJahSw z8{;x7*uxiT;&;oj5AGdlS~il9scP3+!&VA4+mM=8-V+v)-MXBI#Z=_H{2(0#qX*Um zCETzk29kz7f&3s?I+_5w!~?RToj^}NLJLV6$2>PoHCU@!-MALdmFFC>1j7Qtkqv;6 z`I^shL3R(q?m0kdTx_Aabc1WWU3a17?9-P?UqG^0W1=IisX+d0ZwnQ3JUczWH*i;> zu{dzh5{?|UFmfY?e&Z-x;l8Lu_KLyNThH6|VXB!w>-coki#Ho_bA+F{+mRdDy>E+F z!2oD5o5F8R#v4rSDp{Jv%d!A}!}d+}F6r(((NXg%ionv$=Aa2oBaOX(vIGT4?J$I} z{EHlG7c*0i- za_L!;8EYTMb*7`hMDp@%H5`DRR}EOQ-BEww0(b$n%02M~#9-Z(y0Aia6R$CHt%Cbt zd)ltP+csN!OLCyh%rC`*%g?_T7)VCtG13e`W z_+YQ^{y>I+<+5oB7>JTrMltoA>?n>^_e}tnOyZJi>~q0J{_{ebIU!MB-J!J!2*(Tb zYPA>YT3*s%kB33WH~>eudkH$WB^rF~>2c1G!%#v8PZ;p$Ngp5{kc3i@vHMzd-&FRS zyy_Orc-l|U!uoQBG$j=Ur2KLWlq7v_j6HnQ$~N9=gz|$rxwhRp6b2zd%#h3lHty@1 z`9>X|pxO>QThXCfK6tw;oxp7HOG;Mk_$?eLDZmhX;?d--o-lN4=f!q;f1k{wfIywz z3W+j;27c=b-bq1kbP&5c#hkjq9MBRZMSvSS%FY{FM03KHAh4JTd?Aqul;QM$JpVEz zm-Fc1{{$0EDS1Lp?S=pV00v@9M??Vs0RI60puMM)00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-^p9}zem);d>>0001xNklE)vW#8-GzQ~L4CkNmSl#1%+b?}1#M73_iaTk=Gj{-*c jwL;c!pa-hLlgiZw?QMDE)8_1v00000NkvXXu0mjf #include #include +#include #include #include @@ -34,8 +35,8 @@ void show_mpucpu(void) }; char const *calc_names[] = { "Unknown", - "SH-3 fx-9860G-like", - "SH-4 fx-9860G-like", + "SH3 fx-9860G*", + "SH4 fx-9860G*", "Graph 35+E II", "Prizm fx-CG 20", "fx-CG 50/Graph 90+E", @@ -45,82 +46,75 @@ void show_mpucpu(void) int mpu = gint[HWMPU]; int calc = gint[HWCALC]; + char const *str_calc = _("Model", "Calculator model"); if(calc < 0 || calc > 6) - row_print(1, 1, "Calculator model: ", calc); + row_print(1, 1, "%s: ", str_calc, calc); else - row_print(1, 1, "Calculator model: %s", calc_names[calc]); + row_print(1, 1, "%s: %s", str_calc, calc_names[calc]); if(mpu < 0 || mpu > 4) - row_print(3, 1, "MPU: ", mpu); + row_print(_(2,3), 1, "MPU: ", mpu); else - row_print(3, 1, "MPU: %s", mpu_names[mpu]); - - if(!isSH4()) return; - - row_print(4, 1, _(" PVR:"," Processor Version Register: ") "%08x", - gint[HWCPUVR]); - row_print(5, 1, _(" PRR:"," Product Register: ") "%08x",gint[HWCPUPR]); + row_print(_(2,3), 1, "MPU: %s", mpu_names[mpu]); volatile uint32_t *CPUOPM = (void *)0xff2f0000; - row_print(6, 1, _(" CPUOPM:"," CPU Operation Mode: ") "%08x", *CPUOPM); - uint32_t SR; __asm__("stc sr, %0" : "=r"(SR)); - row_print(7, 1, _(" SR:", " Status Register: ") "%08x", SR); + + #ifdef FX9860G + if(isSH3()) + { + row_print(4, 1, " SR %08x", SR); + return; + } + row_print(4, 1, " SR %08x", SR); + row_print(5, 1, " PVR %08x", gint[HWCPUVR]); + row_print(6, 1, " PRR %08x", gint[HWCPUPR]); + row_print(7, 1, " CPUOPM %08x", *CPUOPM); + #endif + + #ifdef FXCG50 + row_print(4, 1, " Status Register: %08x", SR); + row_print(5, 1, " Processor Version Register: %08x", gint[HWCPUVR]); + row_print(6, 1, " Product Register: %08x", gint[HWCPUPR]); + row_print(7, 1, " CPU Operation Mode: %08x", *CPUOPM); + #endif } /* Memory */ static void show_memory(void) { + uint32_t base_rom = 0x80000000; + uint32_t base_ram = 0x88000000; + uint32_t base_uram = (uint32_t)mmu_uram(); + int rom = gint[HWROM]; int ram = gint[HWRAM]; int uram = gint[HWURAM]; #ifdef FX9860G - row_print(1, 1, "ROM: %dM", rom >> 20); - row_print(2, 1, "RAM:%dk (%dk user)", ram >> 10, uram >> 10); + row_title("Basic memory layout"); + row_print(3, 2, "%08x %4dk ROM", base_rom, rom >> 10); + row_print(4, 2, "%08x %4dk RAM", base_ram, ram >> 10); + row_print(5, 2, "%08x %4dk URAM", base_uram, uram >> 10); #endif #ifdef FXCG50 + if(gint[HWCALC] == HWCALC_FXCG50) base_ram = 0x8c000000; row_print(1, 1, "ROM: %dM", rom >> 20); - row_print(2, 2, "%08X .. %08X", 0x80000000, 0x80000000+rom-1); - row_print(3, 1, "RAM: %dM (%dk mapped in userspace)", - ram >> 20, uram >> 10); + row_print(2, 2, "%08X ... %08X", 0x80000000, 0x80000000+rom-1); + row_print(3, 1, "RAM: %dM", ram >> 20); + row_print(4, 2, "%08X ... %08X", base_ram, base_ram+ram-1); + row_print(5, 1, "Userspace RAM: %dk mapped", uram >> 10); + row_print(6, 2, "%08X ... %08X", base_uram, base_uram+uram-1); #endif } -/* Extra Timer Unit */ -static void hw_etmu(int *row) -{ - int etmu = gint[HWETMU]; - - put("Extra Timer Unit" _(,":")); - load_barrier(etmu); - - if(etmu & HWETMU_1) - { - put(" Extra timers: 1"); - put(" Operational: %c", (etmu & HWETMU_OK0 ? 'y' : 'n')); - } - else if(etmu & HWETMU_6) - { - char operational[7] = { 0 }; - for(int i = 0; i < 6; i++) - operational[i] = etmu & (1 << (i + 2)) ? 'y' : 'n'; - - put(" Extra timers: 6"); - put(" Operational: %s", operational); - } -} - -/* Keyboard */ +#if 0 static void hw_keyboard(int *row) { int kbd = gint[HWKBD]; - put("Keyboard" _(,":"), kbd); - load_barrier(kbd); - if(kbd & HWKBD_IO) { put(_(" I/O driven","Driven by I/O port scanning")); @@ -134,17 +128,13 @@ static void hw_keyboard(int *row) " Driven by SH7305-style key scan interface")); } - put(_(" Scans at %dHz"," Scans keys at %dHz"), gint[HWKBDSF]); + // + scan frequency } -/* Display driver */ static void hw_display(int *row) { int dd = gint[HWDD]; - put("Display" _(,":")); - load_barrier(dd); - #ifdef FXCG50 if(dd & HWDD_KNOWN) put(" Known R61524-type model"); if(dd & HWDD_FULL) put(" Fullscreen mode enabled (no borders)"); @@ -157,28 +147,12 @@ static void hw_display(int *row) if(dd & HWDD_LIGHT) put(_(" Backlight supported", " Backlight configuration is enabled")); } +#endif -static int display_data(int offset) +/* gintctl_gint_cpumem(): Detected CPU and memory configuration */ +void gintctl_gint_cpumem(void) { - int row_value = -offset; - int *row = &row_value; - - hw_etmu(row); - put(""); - - hw_keyboard(row); - put(""); - - hw_display(row); - - return row_value + offset; -} - -/* gintctl_hardware(): Show the hardware screen */ -void gintctl_gint_hardware(void) -{ - int offset = 0, tab = 0; - int max, key = 0; + int tab=0, key=0; while(key != KEY_EXIT) { @@ -186,30 +160,21 @@ void gintctl_gint_hardware(void) if(tab == 0) show_mpucpu(); if(tab == 1) show_memory(); - if(tab == 2) - { - max = display_data(offset); - scrollbar(offset, max, 1, row_count() + 1); - } + + #ifdef FX9860G + extern bopti_image_t img_opt_gint_cpumem; + dimage(0, 56, &img_opt_gint_cpumem); + #endif #ifdef FXCG50 - row_title("Hardware and loaded drivers"); + row_title("Processor and memory"); fkey_menu(1, "MPU/CPU"); fkey_menu(2, "MEMORY"); - fkey_menu(3, "Other"); #endif dupdate(); - key = getkey().key; - if(key == KEY_F1) tab = 0; if(key == KEY_F2) tab = 1; - if(key == KEY_F3) tab = 2; - - if(tab == 2 && key == KEY_UP && offset > 0) - offset--; - if(tab == 2 && key == KEY_DOWN && max - offset > row_count()) - offset++; } } diff --git a/src/gintctl.c b/src/gintctl.c index 3cd5f08..11615ba 100644 --- a/src/gintctl.c +++ b/src/gintctl.c @@ -33,7 +33,7 @@ struct menu menu_gint = { _("gint tests", "gint features and driver tests"), .entries = { - { "Hardware", gintctl_gint_hardware, 0 }, + { "CPU and memory", gintctl_gint_cpumem, 0 }, { "RAM discovery", gintctl_gint_ram, MENU_SH4_ONLY }, #ifdef FXCG50 { "DSP processors", gintctl_gint_dsp, 0 }, @@ -100,7 +100,7 @@ struct menu menu_libs = { void gintctl_main(void) { #ifdef FX9860G - row_title("gint @%07x", GINT_HASH); + row_title("gint %s %07x", GINT_VERSION, GINT_HASH); row_print(3, 1, "F2:gint tests"); row_print(4, 1, "F3:Performance");