From cd3b5fb95459d14b6b5f1c5f4a82d130cc24d417 Mon Sep 17 00:00:00 2001 From: beeanyew Date: Mon, 7 Jun 2021 04:12:16 +0200 Subject: [PATCH] Some RTG fixes Fix RTG screen not being re-enabled after boot without an initial SetSwitch 0 call, should take care of issues switching resolutions and rebooting with Aminet Picasso96 Add hold left shift to not initialize RTG driver, thanks to flype --- platforms/amiga/rtg/rtg-output-raylib.c | 4 +- platforms/amiga/rtg/rtg.c | 45 +++++++++++------- .../amiga/rtg/rtg_driver_amiga/pigfx-2.c | 13 +++++ .../amiga/rtg/rtg_driver_amiga/pigfx020.card | Bin 5132 -> 5220 bytes .../amiga/rtg/rtg_driver_amiga/pigfx020i.card | Bin 4292 -> 4380 bytes .../amiga/rtg/rtg_driver_amiga/pigfx030.card | Bin 5132 -> 5220 bytes 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/platforms/amiga/rtg/rtg-output-raylib.c b/platforms/amiga/rtg/rtg-output-raylib.c index ddca531..9fc00fa 100644 --- a/platforms/amiga/rtg/rtg-output-raylib.c +++ b/platforms/amiga/rtg/rtg-output-raylib.c @@ -24,7 +24,7 @@ #endif uint8_t busy = 0, rtg_on = 0, rtg_initialized = 0, emulator_exiting = 0, rtg_output_in_vblank = 0; -extern uint8_t *rtg_mem; +extern uint8_t *rtg_mem, display_enabled; extern uint32_t framebuffer_addr; extern uint32_t framebuffer_addr_adj; @@ -338,6 +338,7 @@ void rtg_init_display() { err = pthread_create(&thread_id, NULL, &rtgThread, (void *)&rtg_share_data); if (err != 0) { rtg_on = 0; + display_enabled = 0xFF; printf("can't create RTG thread :[%s]", strerror(err)); } else { @@ -352,6 +353,7 @@ void rtg_init_display() { void rtg_shutdown_display() { printf("RTG display disabled.\n"); rtg_on = 0; + display_enabled = 0xFF; } void rtg_enable_mouse_cursor() { diff --git a/platforms/amiga/rtg/rtg.c b/platforms/amiga/rtg/rtg.c index 8ec0061..7fd1fee 100644 --- a/platforms/amiga/rtg/rtg.c +++ b/platforms/amiga/rtg/rtg.c @@ -23,7 +23,7 @@ uint32_t rtg_address[8]; uint32_t rtg_address_adj[8]; uint32_t rtg_rgb[8]; -static uint8_t display_enabled = 0xFF; +uint8_t display_enabled = 0xFF; uint16_t rtg_display_width, rtg_display_height; uint16_t rtg_display_format; @@ -41,7 +41,7 @@ static void handle_irtg_command(uint32_t cmd); uint8_t realtime_graphics_debug = 0; extern int cpu_emulation_running; extern struct emulator_config *cfg; -extern uint8_t rtg_on, rtg_output_in_vblank; +extern uint8_t rtg_on, rtg_enabled, rtg_output_in_vblank; //#define DEBUG_RTG @@ -53,12 +53,12 @@ extern uint8_t rtg_on, rtg_output_in_vblank; "MEM", };*/ -/*static const char *rtg_format_names[RTGFMT_NUM] = { +static const char *rtg_format_names[RTGFMT_NUM] = { "8BPP CLUT", "16BPP RGB (565)", "32BPP RGB (RGBA)", "15BPP RGB (555)", -};*/ +}; #define DEBUG printf #else #define DEBUG(...) @@ -79,10 +79,10 @@ int init_rtg_data(struct emulator_config *cfg_) { void shutdown_rtg() { printf("[RTG] Shutting down RTG.\n"); if (rtg_on) { + display_enabled = 0xFF; rtg_on = 0; } if (rtg_mem) { - free(rtg_mem); rtg_mem = NULL; } @@ -113,7 +113,7 @@ unsigned int rtg_read(uint32_t address, uint8_t mode) { } switch (address) { case RTG_COMMAND: - return 0xFFCF; + return rtg_enabled ? 0xFFCF : 0x0000; case RTG_WAITVSYNC: // fallthrough case RTG_INVBLANK: @@ -490,6 +490,7 @@ static void handle_rtg_command(uint32_t cmd) { //printf("Handling RTG command %d (%.8X)\n", cmd, cmd); switch (cmd) { case RTGCMD_SETGC: + gdebug("SetGC\n"); rtg_display_format = rtg_format; rtg_display_width = rtg_x[0]; rtg_display_height = rtg_y[0]; @@ -503,9 +504,13 @@ static void handle_rtg_command(uint32_t cmd) { framebuffer_addr_adj = framebuffer_addr + (rtg_offset_x << rtg_display_format) + (rtg_offset_y * rtg_pitch); rtg_total_rows = rtg_y[1]; } - //printf("Set RTG mode:\n"); - //printf("%dx%d pixels\n", rtg_display_width, rtg_display_height); - //printf("Pixel format: %s\n", rtg_format_names[rtg_display_format]); + if (realtime_graphics_debug) { + printf("Set RTG mode:\n"); + printf("%dx%d pixels\n", rtg_display_width, rtg_display_height); +#ifdef DEBUG_RTG + printf("Pixel format: %s\n", rtg_format_names[rtg_display_format]); +#endif + } break; case RTGCMD_SETPAN: //printf("Command: SetPan.\n"); @@ -523,19 +528,23 @@ static void handle_rtg_command(uint32_t cmd) { break; } case RTGCMD_SETDISPLAY: - //printf("RTG SetDisplay %s\n", (rtg_u8[1]) ? "enabled" : "disabled"); - // I remeber wrongs. - //printf("Command: SetDisplay.\n"); + gdebug("SetDisplay\n"); + if (realtime_graphics_debug) { + printf("RTG SetDisplay %s\n", (rtg_u8[1]) ? "enabled" : "disabled"); + } break; case RTGCMD_ENABLE: case RTGCMD_SETSWITCH: - //printf("RTG SetSwitch %s\n", ((rtg_x[0]) & 0x01) ? "enabled" : "disabled"); - //printf("LAL: %.4X\n", rtg_x[0]); - if (display_enabled != ((rtg_x[0]) & 0x01)) { - display_enabled = ((rtg_x[0]) & 0x01); - if (display_enabled) { + gdebug("SetSwitch\n"); + if (realtime_graphics_debug) { + printf("RTG SetSwitch %s\n", ((rtg_x[0]) & 0x01) ? "enabled" : "disabled"); + printf("LAL: %.4X\n", rtg_x[0]); + } + display_enabled = ((rtg_x[0]) & 0x01); + if (display_enabled != rtg_on) { + rtg_on = display_enabled; + if (rtg_on) rtg_init_display(); - } else rtg_shutdown_display(); } diff --git a/platforms/amiga/rtg/rtg_driver_amiga/pigfx-2.c b/platforms/amiga/rtg/rtg_driver_amiga/pigfx-2.c index eb0bb57..d3f5bf9 100644 --- a/platforms/amiga/rtg/rtg_driver_amiga/pigfx-2.c +++ b/platforms/amiga/rtg/rtg_driver_amiga/pigfx-2.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -14,6 +15,7 @@ #include #include #include +#include #include #include #include "boardinfo.h" @@ -214,6 +216,17 @@ int __attribute__((used)) FindCard(__REGA0(struct BoardInfo* b)) { return 0; } + struct IORequest io; + if (OpenDevice((STRPTR)"input.device", 0, &io, 0) == 0) + { + struct Library *InputBase = (struct Library *)io.io_Device; + UWORD qual = PeekQualifier(); + CloseDevice(&io); + + if (qual & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) + return(FALSE); + } + struct ExpansionBase *ExpansionBase = NULL; struct DOSBase *DOSBase = NULL; struct IntuitionBase *IntuitionBase = NULL; diff --git a/platforms/amiga/rtg/rtg_driver_amiga/pigfx020.card b/platforms/amiga/rtg/rtg_driver_amiga/pigfx020.card index 83cda5bfa2fc64bed0e086348361089d58e48bd3..13c99a34326aab901fe53a16d242ba86fb9c212d 100644 GIT binary patch delta 1514 zcmYL|Z%7rWSDn-)J+#SYZVdeq#q=N5Ja%try!w}d}**jL_`WHMQjQsLTO77o9i>IZ`()vutrzMJ=3an8IToy@WeoB3Z_ zeyctjY|#hvKP9m(p@)Xro<_6_o2)vTIWY+9*4eH6Wa#s13U4w!I{Pxx$`Y-iq3~9I zEIRw|YU@zqv6_9oJ6ljQZ+ABL#&sWpFg>^};|CukiLoTf9LIN)xJWgdUpd8Of}NB| zbLQFig*Ox5goduNeA3I&XW3yoTyq^qTBjpQFVj(_UG%2X937Xc#i(BC1T`p~q(-IF z)TDHd&M19EA*GAdtn>-BDqW(e(q)P%U7<@-v)U?k$w5(s`lTLNqnui>O*f<#G}5qA zo4!=~f+nN}mS|dP;Tqjh{ymzNsy(L-sU^d{fYMQ4vC!S z-}b-frva}w@HY+2UoA8UlZQp~H06l{KVtkr@l%YeOXe|NE_nxwiuA82`wwHjE1(C9z)u~fJN{e8*h5|ORKWOcvE1Q8Q~h1V+li; zAKN?)6Dv>x^BD#gd;rz4gLm=JjIe3PGqx#sJMVK-_(!w}<#%$i7`Rn0R!y{mv<09<#B~4+W zv}QNeXNsKywMn%%#?!9d&pWIEZij6*eogMx=DcrTse5--4rPQ(or6xiQ=n}177ajF zl-8L{S%P=CX-inHBj1&bj+a%{pna&lkN3rsvKD<{Z=U9|Zhgu-T~tn8Wp zvRbIRV+z4js4%buPlXQK+)Vu+dReVS%7~Rt+NLa9o8DWybI!19yD3SQ`jGDZe z^7^b6gA>@VKkCYmvg0;x9UzLYs`yFT6B0N=CjGNu^Hg`^@ zt?aGsFdfHo5^|bT9yX`Fixo#`*h^Ma9(ttAX3Mts8>wx3Qxz8rnqG z=iEEzULSXS*0HibHYSAF2M!CN{{_abcbuT+>mS~gZ_%;I%%39Jo=Gegu_7|^{MYHa zRC(yZkjTwOG#=uxQNYH=nYnb4zY%)opq9qvOc43rACU9tOInMHB0ZZPS8nKpHi%sXn=K* zvaBV_v6g9s^)ihsT{5oF88xWgq4P@Xm+5<6ut6o(N3^W8CQjE_Z_*b^LnZo3Y3(xI zVt<@Al^Qqb52fLx7Gmwy8d&q%tE{_PQyV4B+*JOMjk7p>C|;d6fkPtl&E;3I&9&@Hs( z8zJf@(M~Lkw81+G?;Ut+LNqj^J=iFGAM+W+$QL1iw;__?INn1a^5W1QkcU?f)H52w ze#>B0ye$lLfL39ihN2MNKvFki{OLHQ(9Kah7`@;Gg>&pBWm~k>#`Z!pO*^m`0t{b4 zwlK`J zr;?1vI+t$pbiZ$17;-$`AMY5R!Tl=wPGAqtSkr1IteVeX+y9>WT-{JV)gxL#VEZ2K zt^|*B)2?m#!`9r#FkqGO!*|f{%oSZr9oxtXA%BWBYvEnF9Xm{2^50murazNiO$Wxt zdHta01Zm5kLV!EH#vZzzc4rHFbuYo={YGqSN_DFG4aVgcYx9=pIo`AiC*^w6kvG+| k;1dD%J4a3z;WG|jWRam)28=py42p4?7kNIABra;LI3~& diff --git a/platforms/amiga/rtg/rtg_driver_amiga/pigfx020i.card b/platforms/amiga/rtg/rtg_driver_amiga/pigfx020i.card index c87da7cac70cabc478ee6a5cd94cfe2342710c02..9aac8dc942cc928619530a2c39a62d2560cc5b20 100644 GIT binary patch delta 1369 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 delta 1327 zcmX|=Uq~ER6vpqF8P`9%?YhR2twLjx#YnW0ZcC72g54FfF1lG z=iEEzULSXS*0HibHYSAF2M!CN{{_abcbuT+>mS~gZ_%;I%%39Jo=Gegu_7|^{MYHa zRC(yZkjTwOG#=uxQNYH=nYnb4zY%)opq9qvOc43rACU9tOInMHB0ZZPS8nKpHi%sXn=K* zvaBV_v6g9s^)ihsT{5oF88xWgq4P@Xm+5<6ut6o(N3^W8CQjE_Z_*b^LnZo3Y3(xI zVt<@Al^Qqb52fLx7Gmwy8d&q%tE{_PQyV4B+*JOMjk7p>C|;d6fkPtl&E;3I&9&@Hs( z8zJf@(M~Lkw81+G?;Ut+LNqj^J=iFGAM+W+$QL1iw;__?INn1a^5W1QkcU?f)H52w ze#>B0ye$lLfL39ihN2MNKvFki{OLHQ(9Kah7`@;Gg>&pBWm~k>#`Z!pO*^m`0t{b4 zwlK`J zr;?1vI+t$pbiZ$17;-$`AMY5R!Tl=wPGAqtSkr1IteVeX+y9>WT-{JV)gxL#VEZ2K zt^|*B)2?m#!`9r#FkqGO!*|f{%oSZr9oxtXA%BWBYvEnF9Xm{2^50murazNiO$Wxt zdHta01Zm5kLV!EH#vZzzc4rHFbuYo={YGqSN_DFG4aVgcYx9=pIo`AiC*^w6kvG+| k;1dD%J4a3z;WG|jWRam)28=py42p4?7kNIABra;LI3~& -- 2.39.2