From 9f24c96ded50fe465b8c561aa29d87f059835896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Zsolt?= Date: Sat, 8 May 2021 22:48:53 +0000 Subject: [PATCH 01/50] Qt: Update translation (Hungarian) Currently translated at 15.8% (169 of 1064 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/hu/ --- src/platform/qt/ts/mgba-hu.ts | 463 +++++++++++++++++----------------- 1 file changed, 232 insertions(+), 231 deletions(-) diff --git a/src/platform/qt/ts/mgba-hu.ts b/src/platform/qt/ts/mgba-hu.ts index 1c00f6165..dcf59662c 100644 --- a/src/platform/qt/ts/mgba-hu.ts +++ b/src/platform/qt/ts/mgba-hu.ts @@ -6,33 +6,34 @@ About - + Névjegy <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> - + <a href="http://mgba.io/">Weboldal</a> • <a href="https://forums.mgba.io/">Fórumok / Támogatás</a> • <a href="https://patreon.com/mgba">Adományozás</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Forráskód</a> Branch: <tt>{gitBranch}</tt><br/>Revision: <tt>{gitCommit}</tt> - + Git-ág: <tt>{gitBranch}</tt><br/>Revízió: <tt>{gitCommit}</tt> {projectName} would like to thank the following patrons from Patreon: - + Az {projectName} szeretne köszönetet nyilvánítani a következő Patreon-támogatóknak: © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 Game Boy Advance is a registered trademark of Nintendo Co., Ltd. - + © 2013 – {year} Jeffrey Pfau, a Mozilla Public License 2.0 alatt licencelve +A Game Boy Advance a Nintendo Co., Ltd. bejegyzett védjegye {projectName} is an open-source Game Boy Advance emulator - + A {projectName} egy nyílt forráskódú Game Boy Advance emulátor @@ -40,12 +41,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Open in archive... - + Archívum megnyitása... Loading... - + Betöltés... @@ -58,27 +59,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Palette # - + Paletta # Address - + Cím Red - + Piros Green - + Zöld Blue - + Kék @@ -164,37 +165,37 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Cheats - + Csalások Remove - + Eltávolítás Save - + Mentés Load - + Betöltés Add New Set - + Új kollekció hozzáadása Add - + Hozzáadás Enter codes here... - + Írd ide a kódokat... @@ -202,17 +203,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Debugger - + Hibakereső Enter command (try `help` for more info) - + Parancsbevitel (több információ: `help`) Break - + Törés @@ -220,37 +221,37 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Connect to Dolphin - + Csatlakozás Dolphin emulátorhoz Local computer - + Helyi számítógép IP address - + IP-cím Connect - + Csatlakozás Disconnect - + Kapcsolat bontása Close - + Bezárás Reset on connect - + Emuláció újraindítása csatlakozáskor @@ -258,37 +259,37 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Inspect frame - + Képkocka vizsgáló Magnification - + Nagyítás Freeze frame - + Képkocka befagyasztása Backdrop color - + Háttérszín Disable scanline effects - + Pásztázó/Scanline-effektusok letiltása Export - + Exportálás Reset - + Visszaállítás @@ -296,47 +297,47 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Record GIF/WebP/APNG - + GIF/WebP/APNG felvétel készítése Loop - + Újrajátszás Start - + Indít Stop - + Leállít Select File - + Fájl kiválasztása APNG - + APNG GIF - + GIF WebP - + WebP Frameskip - + Képkockák kihagyása @@ -344,7 +345,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. I/O Viewer - + I/O-vizsgáló @@ -462,62 +463,62 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Logs - + Naplók Enabled Levels - + Engedélyezett szintek Debug - + Debug Stub - + Csonk (Stub) Info - + Infó Warning - + Figyelmeztetés (Warning) Error - + Hiba Fatal - + Végzetes hiba Game Error - + Játékbeli hiba Advanced settings - + Haladó beállítások Clear - + Napló törlése Max Lines - + Sorok maximális száma @@ -530,17 +531,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Magnification - + Nagyítás Export - + Exportálás Copy - + Másolás @@ -548,17 +549,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Save Memory Range - + Memóriarégió mentése Start Address: - + Kezdőcím: Byte Count: - + Bájtok száma: @@ -571,149 +572,149 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Memory Search - + Keresés memóriában Address - + Cím Current Value - + Jelenlegi érték Type - + Típus Value - + Érték Numeric - + Numerikus Text - + Szöveg Width - + Szélesség Guess - + Sejtés alapján 1 Byte (8-bit) - + 1 Bájt (8-bites) 2 Bytes (16-bit) - + 2 Bájt (16-bites) 4 Bytes (32-bit) - + 4 Bájt (32-bites) Number type - + Számérték típusa Decimal - + Decimális Hexadecimal - + Hexadecimális Search type - + Keresés típusa Equal to value - + Értékkel megegyező Greater than value - + Értéknél nagyobb Less than value - + Értéknél kisebb Unknown/changed - + Ismeretlen/megváltozott Changed by value - + Értéknyivel megváltozott Unchanged - + Változatlan Increased - + Növekedett Decreased - + Lecsökkent Search ROM - + Keresés ROM-ban New Search - + Új keresés Search Within - + Keresés a jelenlegi listában Open in Memory Viewer - + Megnyitás a memórianézegetőben Refresh - + Frissítés @@ -721,77 +722,77 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Memory - + Memória Inspect Address: - + Cím vizsgálata: Set Alignment: - + Igazítás beállítása: &1 Byte - + &1 bájt &2 Bytes - + &2 bájt &4 Bytes - + &4 bájt Unsigned Integer: - + Előjel nélküli egészként: Signed Integer: - + Előjeles egészként: String: - + Szövegként: Load TBL - + TBL betöltése Copy Selection - + Kiválasztott régió másolása Paste - + Beillesztés Save Selection - + Kiválasztott régió mentése Save Range - + Régió mentése Load - + Betöltés @@ -799,82 +800,82 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Sprites - + Sprite-ok Address - + Cím Copy - + Másolás Magnification - + Nagyítás Geometry - + Geometria Position - + Pozíció , - + , Dimensions - + Méretek × - + × Matrix - + Mátrix Export - + Exportálás Attributes - + Attribútumok Transform - + Transzformáció Off - + Ki Palette - + Paletta Double Size - + Kétszeres méret @@ -887,49 +888,49 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Flipped - + Megfordítás H Short for horizontal - + V V Short for vertical - + F Mode - + Mód Normal - + Normál Mosaic - + Mozaik Enabled - + Engedélyezve Priority - + Prioritás Tile - + Mező @@ -937,12 +938,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Game Overrides - + Játékbeli felülbírálások Game Boy Advance - + Game Boy Advance @@ -950,112 +951,112 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Autodetect - + Automatikus észlelés Realtime clock - + Valósidejű óra Gyroscope - + Giroszkóp Tilt - + Dőlésérzékelő Light sensor - + Fényérzékelő Rumble - + Rezgés Save type - + Mentés típusa None - + Nincs SRAM - + SRAM Flash 512kb - + Flash 512kb Flash 1Mb - + Flash 1Mb EEPROM - + EEPROM Idle loop - + Üresjárati ciklus Game Boy Player features - + Game Boy Player funkciók VBA bug compatibility mode - + VBA bug kompatibilitási mód Game Boy - + Game Boy Game Boy model - + Game Boy modell Memory bank controller - + Memória bank vezérlő (MBC) Background Colors - + Háttérszínek Sprite Colors 1 - + Sprite-színek 1 Sprite Colors 2 - + Sprite-színek 2 Palette preset - + Paletta preset @@ -1063,62 +1064,62 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Palette - + Paletta Background - + Háttér Objects - + Objektumok Selection - + Kiválasztás Red - + Piros Green - + Zöld Blue - + Kék 16-bit value - + 16-bites érték Hex code - + Hex kód Palette index - + Paletta index Export BG - + Háttérpaletta exportálása Export OBJ - + Objektumpaletta exportálása @@ -1126,27 +1127,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Adjust placement - + Elhelyezés igazítása All - + Mind Offset - + Eltolás X - + X Y - + Y @@ -1154,27 +1155,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Game Boy Printer - + Game Boy Printer Hurry up! - + Siess! Tear off - + Leszakítás Magnification - + Nagyítás Copy - + Másolás @@ -1182,7 +1183,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. 2021 - + 2021 @@ -1190,14 +1191,14 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. %0%1%2 - + %0%1%2 0x%0 (%1) - + 0x%0 (%1) @@ -1205,12 +1206,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. (untitled) - + (névtelen) Failed to open cheats file: %1 - + Nem sikerült a csalásfájl megnyitása: %1 @@ -1219,28 +1220,28 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Add GameShark - + GameShark kód hozzáadása Add Pro Action Replay - + Pro Action Replay kód hozzáadása Add CodeBreaker - + CodeBreaker kód hozzáadása Add GameGenie - + GameGenie kód hozzáadása Select cheats file - + Csalásfájl kiválasztása @@ -1248,27 +1249,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Failed to open save file: %1 - + Nem sikerült a mentésfájl megnyitása: %1 Failed to open game file: %1 - + Nem sikerült a játékfájl megnyitása: %1 Can't yank pack in unexpected platform! - + A játékkazettát nem lehet kirántani ismeretlen platformon! Failed to open snapshot file for reading: %1 - + A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1 Failed to open snapshot file for writing: %1 - + A pillanatkép fájljának írásra való megnyitása sikertelen: %1 @@ -1276,17 +1277,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Failed to open game file: %1 - + Nem sikerült a játékfájl megnyitása: %1 Could not load game. Are you sure it's in the correct format? - + A játék betöltése nem sikerült. Biztos vagy benne, hogy a megfelelő formátumú? Failed to open save file. Is the save directory writable? - + Nem sikerült a mentésfájl megnyitása. Írható a mentést tartalmazó könyvtár? @@ -1294,52 +1295,52 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Export frame - + Képkocka exportálása Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) None - + Nincs Background - + Háttér Window - + Ablak Objwin - + Objektumablak Sprite - + Sprite Backdrop - + Háttérréteg Frame - + Képkocka %1 %2 - + %1 %2 @@ -1347,7 +1348,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Enable Discord Rich Presence - + Discord Rich Presence engedélyezése @@ -1355,22 +1356,22 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Clear Button - + Gombhozzárendelés törlése Clear Analog - + Analóg hozzárendelések törlése Refresh - + Frissítés Set all - + Mind beállítása @@ -1378,32 +1379,32 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Server settings - + Szerverbeállítások Local port - + Helyi port Bind address - + Cím hozzárendelése Break - + Törés Stop - + Leállítás Start - + Indítás @@ -1413,7 +1414,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Could not start GDB server - + A GDB szerver elindítása nem sikerült @@ -1421,17 +1422,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Failed to open output file: %1 - + Nem sikerült a kimeneti fájl megnyitása: %1 Select output file - + Kimeneti fájl kiválasztása Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) @@ -1439,42 +1440,42 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Background mode - + Háttérrajzolási mód Mode 0: 4 tile layers - + Mód 0: 4 db mezőréteg Mode 1: 2 tile layers + 1 rotated/scaled tile layer - + Mód 1: 2 db mezőréteg + 1 db forgatott/skálázott mezőréteg Mode 2: 2 rotated/scaled tile layers - + Mód 2: 2 db forgatott/skálázott mezőréteg Mode 3: Full 15-bit bitmap - + Mód 3: Teljes 15-bites bitmap Mode 4: Full 8-bit bitmap - + Mód 4: Teljes 8-bites bitmap Mode 5: Small 15-bit bitmap - + Mód 5: Kis 15-bites bitmap CGB Mode - + CGB mód From 86ec2d4d22128c51414a17c086ff1e0fc5564e8a Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 16 May 2021 23:41:52 -0700 Subject: [PATCH 02/50] mGUI: Fix SDF font fast-forward and mute icons --- res/font-new.png | Bin 16537 -> 13440 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/res/font-new.png b/res/font-new.png index ea86ae72b723730e95c0cb7d00e4a6b1e446f203..2192ec4639027e80c95288cbf68363d3782c8dad 100644 GIT binary patch literal 13440 zcmch8XH-*BuLc=nn-Wb2~DaH6aneI z_ZnL05FjLZc;9_@-F4sp`{(Sv_MG`<&g`@HnlqX{8t0WT~GBfP~OkB2>=o@>dKGweWuZYIM?S!jpZ;~!c9tp-^SM|hO-8* zlk*5RtPBgD(nRII-K0esR%!?2vvj4rZ~wUG*vr(FP1GLM8?N{GB2lpShTaAXG=0P|yrJfWOG?uI*f4eaNCV+_i$CH=9cIFBVtQViLVAyPtlk7`;qO~!k3irQ z_72Z!$spihDA)hupd7_DIm)I_X!~aTjqF2H)5^i_u9)~@T&Vs63x9>;_nwIlkE4Q6 z-kjUw>%@9uEzgr^IFr@_jG$EoWt5@g%rJvU8_{6DC{ytx&z%|fAdW7gt&k9{%h^qa z7(deQqrn()jqR1Gxm(1tbY)3$TNzt@YhSY0PWL1wl(FJnZuOctbK7QXyFzaVy`+Kk z_%&Olu0i^wSt_7r$=>WZIR3_k{LCp6zq-8X>!-EcJG(;h-*Y?-J}!>l_j!6nV@)8-n5FURE+ zwqF?PtRxNiGzdkdvOgQ4vCmcsg7`&*jjC!~cg_1IZ>r;D5Rgr4R~}uJ7Kq}W^}AQ^x58i6ZyO=vEzNdWG`l+=P;nQVHQ75=WvQam^ZlA zNrHq^@~Pa<$=ts!?)|k&_%%D$!7jl3R0|pz$Nl-&cBROZQ^Gfl|dL12=36z6iFZsRnt?Q|)xyTl1g#khQ zS#Eio(~@+t2*kgSUBqil7TZ+djG6Nx{+j^ zUe9isvqc)I9BhkMjE|!T=N=tZqJ?Ek1$|f`BZKY@*~aqDiRRoQ?V_ueMLem$;TVRh zdqS@)2upSQM~VJ7K^oBeBDHp*x8K60X0~L3d`5!)ZGU9)DPupdaVD8Z9akC%Xkt;z zw|iQ++&Q6-in~}ruk?f->VWL&j5)RVa-0HM9&{tqqh+WiRe7$WOXbJM*lKlqoX!R#>}B$bR?ezwgT4gg9M(D;p_gH&)#6NGgO0B8DaypAwg00i#1!qx_iI zMC04$Z@GI|A1xBq<}l8ay<6yPh0r#ac?@Y(1bVW=7v;b8;8Fc}?lo>?n;?-zXKHN- z>aG&pmoV^C)S((lxQN`$7D@ov8QcwKH0#YigUpD9VA^#dsOmlra;`~=^4cWdQ-iB0 z&a|-W_}`uGwxYW2ewh;YZ0(3Dmnt}K#V)ppGFj3t>ICU%RWaoPBOJyNvZ`C}cZGc- zEzZM>7rsBI8uQ%wxgl)!#6A0lFEgZHdjpzuV&3!9&~ym4|*Uk2@dY0Qo-3@9`2w>@Hc#lAt!JplPx8!Hoo>Rsw$ zTXKG#II-hfHaeNFT_tYWuu13a@jfM!ZOCL%SHN2_C!v|gJULXLBj1?x znykcxVboy}^}y_jRM>Qhah9&T3%{ON#zflVCUkUicl^k!o#ptzU#|*Q9Ng7R`0Au4 z5QZ&2W|bJsTlvRhHH$I9P-Rbwm`+~M!mx6deA0&b znpq>6q!j5GA<2bULScD8@V}=(5!3K;MEHY!32C54=Xot@Z~OUkw6NKu66~LCH_KlG zNK=2QHAesA`hzo@b_F-0HOAWVq@Q(&DV*BjhYIFLy*+CM^! z&ug8xbI7~M1sPY;%yJEW`MZk04XM)94~lQ$7;JSa4uH-TPY*b)A5po##kVBE3`a;v zO)y!FrqM=~T(APG!|_i$a|u>ELo2^m!Wpow3@jT$M`EqOv-5_F06*fBZjkx6yy#i2 zj0R~~=BRw$_s>z4yN}X~tPwAs;kA)3x7n3XMY{Lsv05K-#aBL<(=D2eIlfwdB1!aN zZQ|s_JvTQQX?L;q9KrUts4^Q{|K*+Q?tV%5`mT7d*16S17#gz>%Rg_e%75k6ZbGrD zeCQlPB>}nn-0BYdP{4qf>YYmOXF-{ht{NLg?Vke|U8s3~V65QG6+EYs&z=UaO?V<*#DTORvd>Vi!&JI_qG@j`_E>ybk!|rPb;0G-~g>bZAJUgw}I$U+8JzS|7B`?u^r4OMd!5*12jb` z_Vy||;FK#K@IQwP_8^Ya^y(LGTD6*YRyJe4a=Um~1pg7qj4K!Vkg`l0w{Sx$eFVQ- z6KYN(5mu-~i^XjI{(E=r)ZVaGcZ%o1hv)vH;^wH2iq7St*LOeLTQ%+dgvN8gFkacv z2ggNRE93&*e(N$xNzOb4`~p=?We3E)o=@8@rSF(bFdPeH*e4;|D0`OzmUAL_ZEy%gOu8WFFw|B zoA}MkpvyLtz(O9&1;)#yQ<{flkUzN8v()#C@vKo*2cui*%e2JOcE)S!sTER%)l+j-a+v$9?yBX=s@i2-bQU5 z^6~RGMHtk>ZDS!&mZuEbzC}bvXzFT#nqJdv0vBmb!hQk4hcZ)!3U=&2aBIW5LxSAZH;a84p-lx3tp!vsMU+xi z`(=`)O|ef0*Bjhz1W}`s37K4WK07jt!GI^9cG{tj#bo-ko2m>fUit(dyM0t7wIT=RUba{H>q< zVDr51I$O3!4{J(>;0G5VrPWU`v{NI81LTL{J)*OuV!H!HoJ&nW%SCbxwUkQD{$JzJe!vBgP7V!vZ%k@6M=mN zL@*#VJQP?Z@p_wNQHrub%&k-K6)yjk2~f8Ca^mKR;sq zPgTlzqyxgL5FhIO?gJK>4dgrUS8GvNct|m&nx&SZsPgfsuI20plKSRUQx9kKV5Qi3 z$=oGgz|c>GIr(gcG5e<2eO*c^q-idldQ zXLCrp%PNH`6nH;sT0H6x#Ug zde9JfOySiSCnO7-?^@QFjto1sisFi`#+rRCw?^p)2EgAzfTYWX;su1cm1tF6Cus!b zGO4uOy7^pY2Nk^k>}KXnfz_{1S=Or;`XtftRt1x^yv=FY-4OVR#t}nrT5$}GE@NLZ z;;T1XtMkO3Q89vXYGwqDC(H5h#uSwE#Lh&V%_`t1l6ur1PB7eF)^Fqm=V7_bwr+p- z4Vo&Ku=>^AWUynAvI@vW=Y82u#ZoF}mP?>q}<>$$d7LirqF z!^Qk3nFDCmo~ZfvMf=82l)lN04%Q$CBe1Zl7_Es-|`jLD7^Z&gI9;y&syz9~}JJ1*|#y zqeVGD5tm7uO+x&wpU2OPM4>15%hna#edsg_P6p(FRLgxO1! zsTG@q6gv>nSByuL7zMoJ&_Er#9mjM=e>pnSRe*&*K6P#%(fBC?PLfr`r;y#4{&1G z6|v}xZ#IOnk?BsesUvY-GKXx&irowilxYt`VgckWrPk1+L3-^bwIqf4%IM6niK)`& z*BB*W2C-lv!wmlFfPBC3essRU%MVl)*vKmm3n z`ZDBsJ*`BX8@PmXYs(28!JjnN8<;@74{Bxc+u3&3n4G&ro46f4d z5oG`4_5x@2$$&XY2+}Hb)neZ04BoO=$C%MBPv$RQfl?2f0HP-R zTsDF6r-i5Hj0)fA!uep{J7QR9E2cK zkAJwv*eNA;ycdhNA_!^PxqhU{+Ct&n@WO%3Qz4N7viRuc~yjczLZrTwRi^c zO!d1z({rWq`${A9H01tU<%__e#uL#BoaoHx-d%#ZZzGPe^*Wdf7V@JQ7xk1ZC@4y{ zBA3h|j_6n#oM=;dg5&WYN|D}W)64Q;q-I!Ej#|po^Ym;cO{Zqf@xcBw3B^OSidZ$e zQ}l@@RXW%wqeb;J!+gv#dTR6)D6T%r>ZQ&?n9kEj^SIq~J(JBB$;IO!zt>;yw2GR) z-NHQC?7#-Z6_}r5M!o5#ZLS+-AwKIFeiHw z@t;`6RKRqN861!rWRB@vhezBm zwS8_u4=vn7ZDT+dt;j9ZVdcp=O)6mbcIYJvy+Wd+S{VjC_3TU+kk*BMxgRBijXWBn{|vE(b@kKSzWCbM=ZhMzLzI~}>v z0bz5B5#|$f9w0XkPkGX7A=DUQj12ke#hOtTWkoybz9I~Mk)XS+p?ml;N}`s*vBoq>Vi{mZV^UrP+FU-!2_rj>W(4gyT&O9 zK)wy6V{%Y`X(>xy240kgZ7G}%T1!5g7qE`j`_1K4(bAlk1{VcIoVfq|pKh0J2XNlbo2giUHp&yceZ(bZ`7Lq1dqIQYIFy!M% zsElCf^o7E&=A*3(zJ$E_B7HqrZ#D+0S%RUUNX?v|zPYT>Bflhid&qS0!D)_XMs7$w)=C zaflE6ZFAk}@xPTu{cVO=@JO`ZP>hoYMmceDQ8zE2>y=H@@f`o@)h171qr)fOT8t{` z54(z(wFAGH}8BrJE0Y7ppbI+y$IT7*vDSJV{D!6F+e?A zc|K3Zby!zuY$Xbdbtqi*EHlpR7Y${_LU(R?-iNl}oKWQGlgdkz{6qJT8MEP40g{~6 z;jbkvF&9$^|0h5Gj9_LE@P1Y<3wUELjJJJ*bAr;6^ynX?nicG5IdA0ymUyt>NOP&9 zrNv3trYkwL+@RM$k3ZfSgPn;_d3xs%a@6nPo^$tFVu+EZTp$wn$)!FcUsvUXa>KH% zLW=G29g8(e+}%5a6O5$QSCzIJ^apI{et9RwAy)m$s4i|~>;$$X+m^qW6qCDG zXUScNiY_}hubQitk1e^?0v4jdTwI*4w{ERJ87?@|Sn8NxV0w*`H4KU8V>|$zt*vZg z%Z&E7P0p_wOhsy<9?<-M4MafyNb!Zj8UUHsSXyscc3Kpgof3J3Az_OtTP>rXdUh&e@4M6Sh@d$-k`0$e?tYW){| z&;!R?Mlj;)4|W4E#0f&23!7aW4Sw~|BfUEs>~I)qB%(GMonBKqLcE!UYHGFI@Z1~b z5VlIh0;Ve+k|)$V^KlN>3{?O<%v$f6n|2 z2)r45c3G5gUpK`uT|~p)Fy!xiy`q2m?tDi2?z_7*mXD4Iee>xb7KaQHuR|m6`8fIc z_*~qq{_tHbDr3v4>9waB#G~XvKo9bTAWHZ;So@@OwQMAG^Rou+6f4FaF)}w(Ju+9e zwj|_$x1YaNmD^<;3K5LdXlbTN802|+pi2-L{3?t;T^%F+EC~B9ay&WYI@PV%sGa%k ztL{W2L5esJChJSZ1a`Q<+`qq2eS}h75<n zOIV(&c~?J|aC10ZP3ch-%ehRX6tiUd*{h(KT0YWQU1TBt{5*D?n9gC%gH zjIZ#&`!hL15os{T4e@4R8VOIRg@bgS;rxa2P%y?A**283l@ zH-!N{ld$PUixKYy~6F7YaAp?>YF0k@cAgz?t z1mOP88HWVZ&ZumBD_`zMWy*|iOr-zf(`4&Gx6zyVy@#f}#Xle?;dSDjTks^sbjVw> zR

Fbh&1T2sVZC31J=i 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 From b78f47b214c6134f9217774592682579bda190e6 Mon Sep 17 00:00:00 2001 From: Rik Smeets <30838294+rik-smeets@users.noreply.github.com> Date: Wed, 28 Apr 2021 18:06:00 +0200 Subject: [PATCH 03/50] mGUI: Add fast forward mute --- src/feature/gui/gui-config.c | 10 ++++++++++ src/feature/gui/gui-runner.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/feature/gui/gui-config.c b/src/feature/gui/gui-config.c index 6d43c0480..cba83166b 100644 --- a/src/feature/gui/gui-config.c +++ b/src/feature/gui/gui-config.c @@ -103,6 +103,16 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }, .nStates = 2 }; + *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { + .title = "Fast forward mute", + .data = "fastForwardMute", + .submenu = 0, + .state = false, + .validStates = (const char*[]) { + "Off", "On" + }, + .nStates = 2 + }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Use BIOS if found", .data = "useBios", diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index 2f296ee1b..3a7046b82 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -455,6 +455,12 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { int drawFps = false; mCoreConfigGetIntValue(&runner->config, "fpsCounter", &drawFps); + int mute = false; + mCoreConfigGetIntValue(&runner->config, "mute", &mute); + + int fastForwardMute = false; + mCoreConfigGetIntValue(&runner->config, "fastForwardMute", &fastForwardMute); + bool running = true; #ifndef DISABLE_THREADING @@ -506,21 +512,33 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { if (guiKeys & (1 << mGUI_INPUT_SCREENSHOT)) { mCoreTakeScreenshot(runner->core); } + bool muteTogglePressed = guiKeys & (1 << mGUI_INPUT_MUTE_TOGGLE); + if (muteTogglePressed) { + mute = !mute; + mCoreConfigSetUIntValue(&runner->config, "mute", mute); + runner->core->reloadConfigOption(runner->core, "mute", &runner->config); + } if (runner->setFrameLimiter) { if (guiKeys & (1 << mGUI_INPUT_FAST_FORWARD_TOGGLE)) { fastForward = !fastForward; } - if (fastForward || (heldKeys & (1 << mGUI_INPUT_FAST_FORWARD_HELD))) { + bool fastForwarding = fastForward || (heldKeys & (1 << mGUI_INPUT_FAST_FORWARD_HELD)); + if (fastForwarding) { + if (fastForwardMute && !mute && !muteTogglePressed) { + mCoreConfigSetUIntValue(&runner->core->config, "mute", fastForwardMute); + runner->core->reloadConfigOption(runner->core, "mute", NULL); + } + runner->setFrameLimiter(runner, false); } else { runner->setFrameLimiter(runner, true); + + if (fastForwardMute && !mute && !muteTogglePressed) { + mCoreConfigSetUIntValue(&runner->core->config, "mute", !fastForwardMute); + runner->core->reloadConfigOption(runner->core, "mute", NULL); + } } } - if (guiKeys & (1 << mGUI_INPUT_MUTE_TOGGLE)) { - int mute = !runner->core->opts.mute; - mCoreConfigSetUIntValue(&runner->config, "mute", mute); - runner->core->reloadConfigOption(runner->core, "mute", &runner->config); - } uint16_t keys = runner->pollGameInput(runner); if (runner->prepareForFrame) { runner->prepareForFrame(runner); @@ -651,6 +669,8 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { } mCoreConfigGetIntValue(&runner->config, "fpsCounter", &drawFps); mCoreConfigGetIntValue(&runner->config, "showOSD", &showOSD); + mCoreConfigGetIntValue(&runner->config, "mute", &mute); + mCoreConfigGetIntValue(&runner->config, "fastForwardMute", &fastForwardMute); #ifdef M_CORE_GB if (runner->core->platform(runner->core) == mPLATFORM_GB) { runner->core->reloadConfigOption(runner->core, "gb.pal", &runner->config); From 3159f2ec5657df3652618b3478dcc83adfd81c3e Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 22 May 2021 21:48:51 -0700 Subject: [PATCH 04/50] Core: Fix memory searches for relative values (fixes #2135) --- CHANGES | 1 + src/core/mem-search.c | 60 +++++++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/CHANGES b/CHANGES index 61c127fee..056692109 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,7 @@ Emulation fixes: Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) - Core: Fix memory leak in opening games from the library + - Core: Fix memory searches for relative values (fixes mgba.io/i/2135) - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Qt: Fix infrequent deadlock when using sync to video diff --git a/src/core/mem-search.c b/src/core/mem-search.c index 7f0c215a1..cb026fd53 100644 --- a/src/core/mem-search.c +++ b/src/core/mem-search.c @@ -47,7 +47,7 @@ static size_t _search32(const void* mem, size_t size, const struct mCoreMemoryBl res->segment = -1; // TODO res->guessDivisor = 1; res->guessMultiplier = 1; - res->oldValue = value32; + res->oldValue = mem32[i >> 2]; ++found; } } @@ -70,7 +70,7 @@ static size_t _search16(const void* mem, size_t size, const struct mCoreMemoryBl res->segment = -1; // TODO res->guessDivisor = 1; res->guessMultiplier = 1; - res->oldValue = value16; + res->oldValue = mem16[i >> 1]; ++found; } } @@ -92,7 +92,7 @@ static size_t _search8(const void* mem, size_t size, const struct mCoreMemoryBlo res->segment = -1; // TODO res->guessDivisor = 1; res->guessMultiplier = 1; - res->oldValue = value8; + res->oldValue = mem8[i]; ++found; } } @@ -248,42 +248,46 @@ void mCoreMemorySearch(struct mCore* core, const struct mCoreMemorySearchParams* } } -bool _testGuess(struct mCore* core, struct mCoreMemorySearchResult* res, const struct mCoreMemorySearchParams* params) { - int64_t value; +bool _testSpecificGuess(struct mCore* core, struct mCoreMemorySearchResult* res, int64_t opValue, enum mCoreMemorySearchOp op) { int32_t offset = 0; - char* end; - if (params->op >= mCORE_MEMORY_SEARCH_DELTA) { + if (op >= mCORE_MEMORY_SEARCH_DELTA) { offset = res->oldValue; } - value = strtoll(params->valueStr, &end, 10); - if (end) { - res->oldValue += value; - if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { + res->oldValue += opValue; + int64_t value = core->rawRead8(core, res->address, res->segment); + if (_op(value * res->guessDivisor / res->guessMultiplier - offset, opValue, op)) { + res->oldValue = value; + return true; + } + if (!(res->address & 1) && (res->width >= 2 || res->width == -1)) { + value = core->rawRead16(core, res->address, res->segment); + if (_op(value * res->guessDivisor / res->guessMultiplier - offset, opValue, op)) { + res->oldValue = value; return true; } - if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { + } + if (!(res->address & 3) && (res->width >= 4 || res->width == -1)) { + value = core->rawRead32(core, res->address, res->segment); + if (_op(value * res->guessDivisor / res->guessMultiplier - offset, opValue, op)) { + res->oldValue = value; return true; } - if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { - return true; - } - res->oldValue -= value; + } + res->oldValue -= opValue; + return false; +} + +bool _testGuess(struct mCore* core, struct mCoreMemorySearchResult* res, const struct mCoreMemorySearchParams* params) { + char* end; + int64_t value = strtoll(params->valueStr, &end, 10); + if (end && _testSpecificGuess(core, res, value, params->op)) { + return true; } value = strtoll(params->valueStr, &end, 16); - if (end) { - res->oldValue += value; - if (_op(core->rawRead8(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { - return true; - } - if (!(res->address & 1) && (res->width >= 2 || res->width == -1) && _op(core->rawRead16(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { - return true; - } - if (!(res->address & 3) && (res->width >= 4 || res->width == -1) && _op(core->rawRead32(core, res->address, res->segment) * res->guessDivisor / res->guessMultiplier - offset, value, params->op)) { - return true; - } - res->oldValue -= value; + if (end && _testSpecificGuess(core, res, value, params->op)) { + return true; } return false; } From e32da31dc2963d2b65dbb00883f7dbedbe340940 Mon Sep 17 00:00:00 2001 From: Felipe Date: Sat, 22 May 2021 13:37:25 -0300 Subject: [PATCH 05/50] Updated translation Updated brazilian portuguese translation. --- src/platform/qt/ts/mgba-pt_BR.ts | 878 +++++++++++++++---------------- 1 file changed, 439 insertions(+), 439 deletions(-) diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index ed1072c86..1108b7817 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -1,6 +1,6 @@ - + AboutScreen @@ -11,7 +11,7 @@ <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> - <a href="http://mgba.io/">Site</a> • <a href="https://forums.mgba.io/">Fóruns / Suporte</a> • <a href="https://patreon.com/mgba">Doar</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Fonte</a> + <a href="http://mgba.io/">Site da Web</a> • <a href="https://forums.mgba.io/">Fóruns / Suporte</a> • <a href="https://patreon.com/mgba">Doar</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Fonte</a> @@ -21,19 +21,19 @@ {projectName} would like to thank the following patrons from Patreon: - {projectName} gostaria de agradecer aos seguintes patrões do Patreon: + O {projectName} gostaria de agradecer aos seguintes patronos do Patreon: © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 Game Boy Advance is a registered trademark of Nintendo Co., Ltd. - © 2013 – {year} Jeffrey Pfau, licenciado sob a Licença Pública Mozilla, versão 2.0 -Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. + © 2013 – {year} Jeffrey Pfau, licenciado sob a Licença Pública do Mozilla, versão 2.0 +O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. {projectName} is an open-source Game Boy Advance emulator - {projectName} é um emulador de Game Boy Advance de Código Aberto + O {projectName} é um emulador de Game Boy Advance de código fonte aberto @@ -41,7 +41,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Open in archive... - Abrir no arquivo... + Abrir no arquivo compactado... @@ -54,7 +54,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile # - Bloco # + Mosaico # @@ -87,7 +87,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. BattleChip Gate - BattleChip Gate + Portal do BattleChip @@ -117,27 +117,27 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Remove - Excluir + Remover Gate type - Gate type + Tipo de portal Ba&ttleChip Gate - Ba&ttleChip Gate + Portal do Ba&ttleChip Progress &Gate - Progress &Gate + Portal do &Progresso Beast &Link Gate - Beast &Link Gate + Portal do &Link da Beast @@ -157,7 +157,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show advanced - Mostrar opções avançadas + Mostrar as avançadas @@ -165,12 +165,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cheats - Cheats + Trapaças Remove - Excluir + Remover @@ -203,12 +203,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Debugger - Depurador + Debugger Enter command (try `help` for more info) - Digite o comando (ou `help` para mais informações) + Insira o comando (tente `help` pra mais informações) @@ -259,7 +259,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Inspect frame - Inspecionar quadro + Inspecionar frame @@ -269,12 +269,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Freeze frame - Congelar quadro + Congelar frame Backdrop color - Cor de fundo + Cor do cenário @@ -302,7 +302,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Loop - Repetir + Repetição @@ -317,7 +317,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select File - Selecionar arquivo + Selecionar Arquivo @@ -368,7 +368,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Location - Localização + Local @@ -405,7 +405,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. No Save - Não salvar + Nenhum Save @@ -468,12 +468,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enabled Levels - Níveis Habilitados + Níveis Ativados Debug - Depurar + Debug @@ -549,7 +549,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Memory Range - Salvar Faixa de Memória + Salvar o Alcance de Memória @@ -559,12 +559,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Byte Count: - Número de bytes: + Contagem dos Bytes: Dump across banks - Salvar múltiplos bancos + Dumpar através dos bancos @@ -572,7 +572,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Memory Search - Pesquisa de Memória + Busca na Memória @@ -608,22 +608,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Width - Tamanho + Largura 1 Byte (8-bit) - 1 Byte (8-bit) + 1 Byte (8 bit) 2 Bytes (16-bit) - 2 Bytes (16-bit) + 2 Bytes (16 bits) 4 Bytes (32-bit) - 4 Bytes (32-bit) + 4 Bytes (32 bits) @@ -638,7 +638,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search type - Tipo de pesquisa + Tipo de busca @@ -648,27 +648,27 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Greater than value - Maior que o valor + Maior do que o valor Less than value - Menor que o valor + Menor do que o valor Unknown/changed - Desconhecido/alterado + Desconhecido/mudado Changed by value - Alterado por valor + Mudado pelo valor Unchanged - Inalterado + Sem mudanças @@ -683,12 +683,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search ROM - Pesquisar ROM + Procurar ROM New Search - Nova Pesquisa + Nova Busca @@ -699,12 +699,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Guess - Adivinhar + Palpite Search Within - Buscar nos Resultados + Procurar Internamente @@ -752,12 +752,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unsigned Integer: - Inteiro sem sinal: + Integral Não Assinado: Signed Integer: - Inteiro com sinal: + Integral Assinado: @@ -787,7 +787,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Range - Salvar Intervalo + Salvar Alcance @@ -800,7 +800,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprites - Sprites + Imagens Móveis @@ -858,7 +858,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Return, Ctrl+R - Return, Ctrl+R + Retornar, Ctrl+R @@ -895,7 +895,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enabled - Habilitado + Ativado @@ -905,7 +905,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile - Bloco + Mosaico @@ -938,7 +938,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Overrides - Substituições no jogo + Substituições do Jogo @@ -951,7 +951,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Autodetect - Autodetectar + Auto-detectar @@ -976,12 +976,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Rumble - Vibrar + Rumble Save type - Tipo de salvamento + Tipo de save @@ -996,12 +996,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Flash 512kb - Flash 512kb + Flash de 512 kbs Flash 1Mb - Flash 1Mb + Flash de 1 Mb @@ -1011,7 +1011,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Idle loop - Loop ocioso + Loop inativo @@ -1021,7 +1021,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. VBA bug compatibility mode - Modo de compatibilidade para falhas no VBA + Modo de compatibilidade dos bugs do VBA @@ -1036,27 +1036,27 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Memory bank controller - Controlador de banco de memória + Controle do banco de memória Background Colors - Cores do Plano de Fundo + Cores do 2º Plano Sprite Colors 1 - Cores de Sprite 1 + Cores da Imagem Móvel 1 Sprite Colors 2 - Cores de Sprite 2 + Cores da Imagem Móvel 2 Palette preset - + Pré-definições da paleta @@ -1069,7 +1069,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background - Plano de Fundo + 2º plano @@ -1099,7 +1099,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 16-bit value - Valor 16-bit + Valor de 16 bits @@ -1155,17 +1155,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Printer - Game Boy Printer + Impressora do Game Boy Hurry up! - Se apresse! + Apresse-se! Tear off - Desligar + Rasgar @@ -1211,7 +1211,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open cheats file: %1 - Falha ao abrir arquivo de cheats: %1 + Falhou em abrir o arquivo das trapaças: %1 @@ -1241,7 +1241,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select cheats file - Selecionar arquivo de cheats + Selecionar arquivo de trapaças @@ -1249,27 +1249,27 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open save file: %1 - Falha ao abrir o arquivo de salvamento: %1 + Falhou em abrir o arquivo do save: %1 Failed to open game file: %1 - Falha ao abrir o arquivo do jogo: %1 + Falhou em abrir o arquivo do jogo: %1 Can't yank pack in unexpected platform! - Não é possível remover o game pak numa plataforma inesperada! + Não pode arrancar o pacote numa plataforma inesperada! Failed to open snapshot file for reading: %1 - Falha ao abrir o arquivo de snapshot para leitura: %1 + Falhou em abrir o arquivo do snapshot pra leitura: %1 Failed to open snapshot file for writing: %1 - Falha ao abrir o arquivo de snapshot para escrita: %1 + Falhou em abrir o arquivo do snapshot pra gravação: %1 @@ -1277,17 +1277,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open game file: %1 - Falha ao abrir o arquivo do jogo: %1 + Falhou em abrir o arquivo do jogo: %1 Could not load game. Are you sure it's in the correct format? - Não foi possível carregar o jogo. Tem certeza que está no formato correto? + Não pôde carregar o jogo. Você tem certeza que está no formato correto? Failed to open save file. Is the save directory writable? - Falha ao abrir o arquivo de salvamento. O diretório para salvar tem permissão de escrita? + Falhou em abrir o arquivo do save. O diretório do save é gravável? @@ -1295,12 +1295,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export frame - Exportar quadro + Exportar frame Portable Network Graphics (*.png) - Portable Network Graphics (*.png) + Gráficos Portáteis da Rede (*.png) @@ -1310,7 +1310,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background - Plano de Fundo + 2º plano @@ -1325,17 +1325,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite - Sprite + Imagem móvel Backdrop - Cor de Fundo + Cenário Frame - Quadro + Frame @@ -1409,12 +1409,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Crash - Travar + Crash Could not start GDB server - Não foi possível iniciar o servidor GDB + Não pôde iniciar o servidor do GDB @@ -1422,17 +1422,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output file: %1 - Falha ao abrir arquivo de saída: %1 + Falhou em abrir arquivo de saída: %1 Select output file - Selecionar arquivo de saída + Selecionar o arquivo de saída Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) + Formato da Intermudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos Portáteis da Rede Animada (*.png *.apng) @@ -1440,37 +1440,37 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background mode - Modo do plano de fundo + Modo do 2º plano Mode 0: 4 tile layers - Modo 0: 4 fundos de blocos + Modo 0: 4 camadas dos mosaicos Mode 1: 2 tile layers + 1 rotated/scaled tile layer - Modo 1: 2 fundos de blocos + 1 fundo de blocos com rotação/escala + Modo 1: 2 camadas dos mosaicos + 1 camada dos mosaicos rotacionada/dimensionada Mode 2: 2 rotated/scaled tile layers - Modo 2: 2 fundos de blocos com rotação/escala + Modo 2: 2 camadas dos mosaicos rotacionada/dimensionada Mode 3: Full 15-bit bitmap - Modo 3: Bitmap 15-bit completo + Modo 3: Bitmap de 15 bits completo Mode 4: Full 8-bit bitmap - Modo 4: Bitmap 8-bits completo + Modo 4: Bitmap de 8 bits completo Mode 5: Small 15-bit bitmap - Modo 5: Bitmap 15-bits pequeno + Modo 5: Bitmap de 15 bits pequeno @@ -1480,42 +1480,42 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame select - Selecionar quadro + Selecionar frame Unlocked HBlank - Barramento Horizontal Desbloqueado + Destrancou HBlank Linear OBJ tile mapping - Mapeamento linear do OBJ + Mapeamento do mosaio do OBJ linear Force blank screen - Forçar limpeza da tela + Forçar tela vazia Enable background 0 - Ativar plano de fundo 0 + Ativar 2º plano 0 Enable background 1 - Ativar plano de fundo 1 + Ativar 2º plano 1 Enable background 2 - Ativar plano de fundo 2 + Ativar 2º plano 2 Enable background 3 - Ativar plano de fundo 3 + Ativar 2º plano 3 @@ -1535,12 +1535,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable OBJ Window - Ativar Janela OBJ + Ativar Janela do OBJ Swap green components - Trocar componentes verde + Trocar componentes verdes @@ -1560,17 +1560,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable VBlank IRQ generation - Ativar geração de VBlank IRQ + Ativar geração do IRQ VBlank Enable HBlank IRQ generation - Ativar geração de HBlank IRQ + Ativar geração do IRQ HBlank Enable VCounter IRQ generation - Ativar geração de VCounter IRQ + Ativar geração do IRQ VCounter @@ -1596,7 +1596,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile data base (* 16kB) - Base dos gráficos de blocos (* 16kB) + Base dos dados do mosaicos (* 16 kBs) @@ -1612,7 +1612,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable 256-color - Ativar 256-cores + Ativar 256 cores @@ -1620,7 +1620,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile map base (* 2kB) - Base do mapa de blocos (* 2 kB) + Base do mapa dos mosaicos (* 2 kBs) @@ -1628,13 +1628,13 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background dimensions - Dimensões do plano de fundo + Dimensões do 2º plano Overflow wraps - Overflow wraps + Embrulhos do excesso @@ -1682,7 +1682,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part - Parte inteira + Parte integral @@ -1690,7 +1690,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part (low) - Número inteiro (baixo) + Parte integral (baixo) @@ -1698,7 +1698,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part (high) - Número inteiro (alto) + Parte integral (alto) @@ -1812,57 +1812,57 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Outside window enable blend - Fora da janela ativar blend + Fora da janela ativar mistura OBJ window enable BG 0 - Janela OBJ ativar BG 0 + Janela do OBJ ativar BG 0 OBJ window enable BG 1 - Janela OBJ ativar BG 1 + Janela do OBJ ativar BG 1 OBJ window enable BG 2 - Janela OBJ ativar BG 2 + Janela do OBJ ativar BG 2 OBJ window enable BG 3 - Janela OBJ ativar BG 3 + Janela do OBJ ativar BG 3 OBJ window enable OBJ - Janela OBJ ativar OBJ + Janela do OBJ ativar OBJ OBJ window enable blend - Janela OBJ ativar blend + Janela do OBJ ativar mistura Background mosaic size vertical - Tamanho vertical do mosaico do plano de fundo + Tamanho vertical do mosaico do 2º plano Background mosaic size horizontal - Tamanho horizontal do mosaico do plano de fundo + Tamanho horizontal do mosaico do 2º plano Object mosaic size vertical - Tamanho vertical do mosaico de objeto + Tamanho vertical do mosaico do objeto Object mosaic size horizontal - Tamanho horizontal do mosaico de objeto + Tamanho horizontal do mosaico do objeto @@ -1887,17 +1887,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OBJ target 1 - OBJ alvo 1 + Alvo do OBJ 1 Backdrop target 1 - Backdrop alvo 1 + Alvo do cenário 1 Blend mode - Modo Blend + Modo de Mistura @@ -1942,45 +1942,45 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OBJ target 2 - OBJ alvo 2 + Alvo do OBJ 2 Backdrop target 2 - Backdrop alvo 2 + Alvo do cenário 2 Blend A (target 1) - Blend A (alvo 1) + Mistura A (alvo 1) Blend B (target 2) - Blend B (alvo 2) + Mistura B (alvo 2) Blend Y - Blend Y + Mistura Y Sweep shifts - Sweep shifts + Trocas de varredura Sweep subtract - Sweep subtract + Subtrair varredura Sweep time (in 1/128s) - Sweep time (em 1/128s) + Tempo da varredura (em 1/128s) @@ -2000,7 +2000,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Duty cycle - Ciclo de trabalho + Ciclo do dever @@ -2010,7 +2010,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Envelope step time - Envelope step time + Tempo do passo do envelope @@ -2020,7 +2020,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Envelope increase - Envelope increase + Aumentar envelope @@ -2037,7 +2037,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sound frequency - Frequência de som + Frequência do som @@ -2066,7 +2066,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Double-size wave table - Tabela de som com duplo tamanho + Tabela de som com tamanho duplo @@ -2148,70 +2148,70 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Shifter frequency - Frequência de turno + Frequência do deslocador PSG volume right - Volume PSG direito + Volume do PSG direito PSG volume left - Volume PSG esquerdo + Volume do PSG esquerdo Enable channel 1 right - Ativar canal 1 à direita + Ativar canal 1 a direita Enable channel 2 right - Ativar canal 2 à direita + Ativar canal 2 a direita Enable channel 3 right - Ativar canal 3 à direita + Ativar canal 3 a direita Enable channel 4 right - Ativar canal 4 à direita + Ativar canal 4 a direita Enable channel 1 left - Ativar canal 1 à esquerda + Ativar canal 1 a esquerda Enable channel 2 left - Ativar canal 2 à esquerda + Ativar canal 2 a esquerda Enable channel 3 left - Ativar canal 3 à esquerda + Ativar canal 3 a esquerda Enable channel 4 left - Ativar canal 4 à esquerda + Ativar canal 4 a esquerda PSG master volume - Volume principal do PSG + Volume mestre do PSG @@ -2226,12 +2226,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable channel A right - Ativar canal A à direita + Ativar canal A a direita Enable channel A left - Ativar canal A à esquerda + Ativar canal A a esquerda @@ -2260,17 +2260,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Channel A reset - Redefinir canal A + Resetar canal A Enable channel B right - Ativar canal B à direita + Ativar canal B a direita Enable channel B left - Ativar canal B à esquerda + Ativar canal B a esquerda @@ -2280,7 +2280,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Channel B reset - Redefinir canal B + Resetar canal B @@ -2439,12 +2439,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Source (high) - Fonte (alto) + Fonte (alta) Source (low) - Fonte (baixo) + Fonte (baixa) @@ -2518,7 +2518,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fixed - Corrigido + Consertado @@ -2534,7 +2534,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Source offset - Deslocamento de origem + Deslocamento da fonte @@ -2550,7 +2550,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 32-bit - 32-bit + 32 bits @@ -2625,7 +2625,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Audio FIFO - Áudio FIFO + Áudio do FIFO @@ -2731,13 +2731,13 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Up - Cima + Pra cima Down - Baixo + Pra baixo @@ -2851,7 +2851,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. SRAM wait - Aguardar SRAM + Espera do SRAM @@ -2921,33 +2921,33 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. PHI terminal - Terminal PHI + Terminal do PHI Disable - Desativado + Desativar 4.19MHz - 4.19MHz + 4.19 MHz 8.38MHz - 8.38MHz + 8.38 MHz 16.78MHz - 16.78MHz + 16.78 MHz Gamepak prefetch - Pré-carregamento de Gamepak + Pré-busca do Gamepak @@ -2967,12 +2967,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Up/Select - Cima/Select + Pra cima/Select Down/Start - Baixo/Start + Pra baixo/Start @@ -2982,17 +2982,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Active face buttons - Botões ativos + Botões de face ativos Internal clock - Clock interno + Relógio interno 32× clocking (CGB only) - 32 vezes o clock (apenas GBC) + 32x o clock (só no GBC) @@ -3051,27 +3051,27 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Output left - Saída da esquerda + Saída esquerda Background enable/priority - Plano de fundo ativo/prioridade + Ativar/prioridade do 2º plano Enable sprites - Ativar sprites + Ativar imagens móveis Double-height sprites - Sprites com dobro da altura + Imagens móveis com dobro da altura Background tile map - Mapeamento de blocos no Fundo + Mapa dos mosaicos do 2º plano @@ -3088,7 +3088,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background tile data - Mapeamento dos gráficos no Fundo + Dados do mosaicos do 2º plano @@ -3108,7 +3108,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Window tile map - Mapeamento de blocos na Janela + Mapa dos mosaicos da janela @@ -3123,22 +3123,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 0: HBlank - 0: HBlank / Barramento Horizontal + 0: HBlank 1: VBlank - 1: VBlank / Barramento Vertical + 1: VBlank 2: OAM scan - 2: Varredura OAM + 2: Scan do OAM 3: HDraw - 3: HDraw / Desenho Horizontal + 3: HDraw @@ -3173,12 +3173,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Comparison Y coordinate - Comparação de coordenada Y + Comparação da coordenada Y Start upper byte - Iniciar, byte superior + Iniciar byte superior @@ -3211,7 +3211,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Prepare to switch speed - Preparar para mudança de velocidade + Preparar pra trocar velocidade @@ -3231,12 +3231,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Timing - Afinação + Cronometragem Write bit - Bit de escrita + Bit de gravação @@ -3276,7 +3276,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite ordering - Ordenação da Sprite + Ordenação da imagem móvel @@ -3286,12 +3286,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. x coordinate sorting - Ordem por coordenada X + Organização da coordenada X WRAM bank - Banco WRAM + Banco do WRAM @@ -3305,12 +3305,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Super (L) - Super (L) + Super (E) Super (R) - Super (R) + Super (D) @@ -3323,12 +3323,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load State - Carregar Estado + Carregar o State Save State - Salvar Estado + Salvar o State @@ -3343,7 +3343,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Slot %1 - Espaço %1 + Slot %1 @@ -3362,12 +3362,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Error - Error + Erro Warning - Warning + Aviso @@ -3400,7 +3400,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. An error occurred - Ocorreu um erro + Um erro ocorreu @@ -3420,12 +3420,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. WARN - WARN + AVISAR ERROR - ERROR + ERRO @@ -3435,7 +3435,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GAME ERROR - GAME ERROR + ERRO DO JOGO @@ -3455,7 +3455,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile base - Base do bloco + Base do mosaico @@ -3481,7 +3481,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Mirror - Espelhamento + Espelho @@ -3518,7 +3518,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Portable Network Graphics (*.png) - Portable Network Graphics (*.png) + Gráficos Portáteis da Rede (*.png) @@ -3526,12 +3526,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save memory region - Salvar região de memória + Salvar a região da memória Failed to open output file: %1 - Falha ao abrir arquivo de saída: %1 + Falhou em abrir o arquivo de saída: %1 @@ -3574,7 +3574,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output file: %1 - Falha ao abrir arquivo de saída: %1 + Falhou em abrir o arquivo de saída: %1 @@ -3584,7 +3584,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open input file: %1 - Falha ao abrir arquivo de entrada: %1 + Falhou em abrir o arquivo de entrada: %1 @@ -3674,12 +3674,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export sprite - Exportar sprite + Exportar imagem móvel Portable Network Graphics (*.png) - Portable Network Graphics (*.png) + Gráficos Portáteis da Rede (*.png) @@ -3728,12 +3728,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Windows PAL (*.pal);;Adobe Color Table (*.act) - Windows PAL (*.pal);;Adobe Color Table (*.act) + Windows PAL (*.pal);;Tabela de Cores da Adobe (*.act) Failed to open output palette file: %1 - Falha ao abrir arquivo de paleta de saída: %1 + Falhou em abrir o arquivo de saída da paleta: %1 @@ -3756,7 +3756,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. (no database present) - (nenhum banco de dados) + (nenhum banco de dados presente) @@ -3764,12 +3764,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Bug report archive - Arquivo de reportagem de falhas + Arquivo compactado do relatório dos bugs ZIP archive (*.zip) - Arquivo ZIP (*.zip) + Arquivo compactado ZIP (*.zip) @@ -3777,42 +3777,42 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save games and save states (%1) - Estado de jogos salvados (%1) + Saves dos jogos e save states (%1) Select save game or save state - Selecione o estado de jogo gravado + Selecione o save do jogo ou save state Save games (%1) - Salvar jogos (%1) + Saves dos jogos (%1) Select save game - Selecione o jogo salvado + Selecione o save do jogo Conversion failed - Conversão falhada + A conversão falhou Failed to convert the save game. This is probably a bug. - Falha ao converter o jogo salvado. Provavelmente um erro de programação. + Falhou em converter o save do jogo. Isto é provavelmente um bug. No file selected - Nenhum ficheiro selecionado + Nenhum arquivo selecionado Could not open file - Não foi possivel abrir o ficheiro + Não pôde abrir o arquivo @@ -3822,7 +3822,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Please select a valid input file - Por favor selecione um ficheiro de entrada válido + Por favor selecione um arquivo de entrada válido @@ -3832,7 +3832,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cannot convert save games between platforms - Não foi possível converter o jogo salvado entre plataformas + Não pôde converter os saves do jogo entre as plataformas @@ -3841,7 +3841,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Qt Multimedia - Qt Multimídia + Multimídia do Qt @@ -3861,12 +3861,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OpenGL (force version 1.x) - OpenGL (forçar versão 1.x) + OpenGL (forçar a versão 1.x) None (Still Image) - Nenhum (Imagem parada) + Nenhum (Imagem Parada) @@ -3897,7 +3897,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select directory - Selecione diretório + Selecione o diretório @@ -3935,7 +3935,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Pass %1 - Passar %1 + Passe %1 @@ -3961,18 +3961,18 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export tiles - Exportar blocos + Exportar mosaico Portable Network Graphics (*.png) - Portable Network Graphics (*.png) + Gráficos Portáteis da Rede (*.png) Export tile - Exportar bloco + Exportar mosaico @@ -3980,7 +3980,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output video file: %1 - Falha ao abrir arquivo de vídeo de saída: %1 + Falhou em abrir o arquivo de saída do vídeo: %1 @@ -3998,12 +3998,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Advance ROMs (%1) - ROMs de Game Boy Advance (%1) + ROMs do Game Boy Advance (%1) Game Boy ROMs (%1) - ROMs de Game Boy (%1) + ROMs do Game Boy (%1) @@ -4013,12 +4013,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 Video Logs (*.mvl) - %1 Logs de Vídeo (*.mvl) + %1 Registros do Vídeo (*.mvl) Archives (%1) - Arquivos (%1) + Arquivos Compactados (%1) @@ -4036,12 +4036,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select save - Selecionar salvamento + Selecionar save Select patch - Selecione correção + Selecionar patch @@ -4051,12 +4051,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select e-Reader dotcode - Selecione dotcode do e-Reader + Selecionar dotcode do e-Reader e-Reader card (*.raw *.bin *.bmp) - e-Reader card (*.raw *.bin *.bmp) + Cartão do e-Reader (*.raw *.bin *.bmp) @@ -4072,66 +4072,66 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GameShark saves (*.sps *.xps) - GameShark saves (*.sps *.xps) + Saves do GameShark (*.sps *.xps) Select video log - Selecionar registro de vídeo + Selecionar registro do vídeo Video logs (*.mvl) - Video logs (*.mvl) + Registros do vídeo (*.mvl) Crash - Travamento + Crash The game has crashed with the following error: %1 - O jogo travou com o seguinte erro: + O jogo teve um crash com o seguinte erro: %1 Unimplemented BIOS call - Chamada de BIOS não implementada + Chamada da BIOS não implementada This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience. - Este jogo usa uma chamada de BIOS que não está implementada. Por favor, use a BIOS oficial para uma melhor experiência. + Este jogo usa uma chamada de BIOS que não está implementada. Por favor use a BIOS oficial pra uma melhor experiência. Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. - Falha ao criar um adaptador de gráficos apropriado, voltando ao gráficos por software. Os jogos poderão correr lentamente, especialmente em janelas grandes. + Falhou em criar um dispositivo de exibição apropriado, voltando a exibição por software. Os jogos podem executar lentamente, especialmente com janelas maiores. Really make portable? - Quer mesmo tornar portátil? + Realmente tornar portátil? This will make the emulator load its configuration from the same directory as the executable. Do you want to continue? - Isto fará com que o emulador carregue sua configuração a partir do mesmo diretório que o executável. Você quer continuar? + Isto fará o emulador carregar sua configuração do mesmo diretório que o executável. Você quer continuar? Restart needed - É necessário reiniciar + Reiniciar é necessário Some changes will not take effect until the emulator is restarted. - Algumas alterações não terão efeito até que o emulador seja reiniciado. + Algumas mudanças não terão efeito até que o emulador seja reiniciado. @@ -4166,12 +4166,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load ROM in archive... - Carregar ROM em arquivo... + Carregar ROM no arquivo compactado... Add folder to library... - Adicionar pasta à biblioteca... + Adicionar a pasta a biblioteca... @@ -4181,7 +4181,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Boot BIOS - Rodar BIOS + Dar Boot na BIOS @@ -4191,12 +4191,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. ROM &info... - &Informações da ROM... + Informações da &ROM... Recent - Recente + Recentes @@ -4206,7 +4206,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Load state - &Carregar Estado + &Carregar state @@ -4221,7 +4221,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Pak sensors... - Sensores de Game Pak... + Sensores do Game Pak... @@ -4231,73 +4231,73 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load state file... - Carregar arquivo de estado... + Carregar arquivo do state... Save games (%1) - Jogos salvados (%1) + Saves dos jogos (%1) Select save game - Selecione jogo salvado + Selecione save do jogo mGBA save state files (%1) - Ficheiro de estado de jogo mGBA (%1) + Arquivos do save state do mGBA (%1) Select save state - Selecione estado de jogo gravado + Selecione save state Select e-Reader card images - + Selecionar imagens do cartão do e-Reader Image file (*.png *.jpg *.jpeg) - + Arquivo da imagem (*.png *.jpg *.jpeg) Conversion finished - + Conversão concluída %1 of %2 e-Reader cards converted successfully. - + %1 de %2 cartões do e-Reader convertidos com sucesso. Load alternate save game... - Carregar jogo salvado alternativo... + Carregar save alternativo do jogo... Load temporary save game... - Carregar jogo salvado temporário... + Carregar save temporário do jogo... Convert e-Reader card image to raw... - + Converter imagem do cartão do e-Reader pro natural... &Save state - &Salvar Estado + &Salvar o state Save state file... - Salvar arquivo de estado... + Arquivo do save state... @@ -4312,28 +4312,28 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load recent - Carregar recente + Carregar recentes Save recent - Salvar recente + Salvar recentes Undo load state - Desfazer carregar estado + Desfazer o carregamento do state Undo save state - Desfazer salvar estado + Desfazer o salvamento do state State &%1 - Estado &%1 + State &%1 @@ -4343,7 +4343,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Convert save game... - Converter jogo salvado... + Converter save do jogo... @@ -4358,7 +4358,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. E&xit - &Sair + S&air @@ -4373,12 +4373,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sh&utdown - &Desligar + De&sligar Yank game pak - Remover game pak + Arrancar game pak @@ -4388,22 +4388,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Next frame - &Próximo quadro + &Próximo frame Fast forward (held) - Avançar rápido (segurado) + Avanço rápido (segurado) &Fast forward - Avanço &Rápido + &Avanço rápido Fast forward speed - Velocidade de avanço + Velocidade do avanço rápido @@ -4433,12 +4433,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sync to &video - Sincronizar para &vídeo + Sincronizar no &vídeo Sync to &audio - Sincronizar para &áudio + Sincronizar no &áudio @@ -4478,7 +4478,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame size - Tamanho do quadro + Tamanho do frame @@ -4488,12 +4488,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Fixar proporção + Trancar proporção do aspecto Force integer scaling - Forçar dimensionamento inteiro + Forçar dimensionamento da integral @@ -4503,7 +4503,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame&skip - &Salto de quadro + Frame&skip @@ -4513,7 +4513,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. FPS target - Meta de FPS + FPS alvo @@ -4523,7 +4523,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Take &screenshot - Capturar &tela + Tirar &screenshot @@ -4533,12 +4533,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Printer... - Impressora Game Boy... + Impressora do Game Boy... BattleChip Gate... - BattleChip Gate... + Portal do BattleChip... @@ -4548,7 +4548,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Interframe blending - Blending entre-telas + Mistura do interframe @@ -4558,7 +4558,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Video layers - Camadas de vídeo + Camadas do vídeo @@ -4568,7 +4568,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Adjust layer placement... - Ajustar posicionamento de plano... + Ajustar posicionamento da camada... @@ -4583,32 +4583,32 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game &overrides... - Game &overrides... + Substituições &do jogo... Couldn't Start - Não foi possível Iniciar + Não Pôde Iniciar Could not start game. - Não foi possível iniciar o jogo. + Não pôde iniciar o jogo. Scan e-Reader dotcodes... - Escanear dotcode do e-Reader... + Escanear dotcodes do e-Reader... Import GameShark Save... - Importar salvamento do GameShark... + Importar Save do GameShark... Export GameShark Save... - Exportar salvamento do GameShark... + Exportar Save do GameShark... @@ -4618,7 +4618,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Cheats... - &Cheats... + &Trapaças... @@ -4628,12 +4628,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Open debugger console... - Abrir console de depuração... + Abrir console do debugger... Start &GDB server... - Iniciar servidor &GDB... + Iniciar servidor do &GDB... @@ -4643,12 +4643,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. View &sprites... - Visualizar &sprites... + Visualizar &imagens móveis... View &tiles... - Visualizar &blocos... + Visualizar &mosaicos... @@ -4658,7 +4658,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Frame inspector... - Inspetor de &quadro... + Inspetor dos &frames... @@ -4668,7 +4668,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search memory... - Pesquisar memória... + Procurar memória... @@ -4678,12 +4678,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Record debug video log... - Gravar log de vídeo de depuração... + Gravar registro do vídeo de debug... Stop debug video log - Parar log de vídeo de depuração + Parar log do vídeo de debug @@ -4693,62 +4693,62 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GameShark Button (held) - Botão de GameShark (segurado) + Botão do GameShark (segurado) Autofire - Disparo automático + Auto-disparar Autofire A - Disparo automático A + Auto-disparar A Autofire B - Disparo automático B + Auto-disparar B Autofire L - Disparo automático L + Auto-disparar L Autofire R - Disparo automático R + Auto-disparar R Autofire Start - Disparo automático Start + Auto-disparar Start Autofire Select - Disparo automático Select + Auto-disparar Select Autofire Up - Disparo automático Cima + Auto-disparar Pra Cima Autofire Right - Disparo automático Direita + Auto-disparar Direita Autofire Down - Disparo automático Baixo + Auto-disparar Pra Baixo Autofire Left - Disparo automático Esquerda + Auto-disparar Esquerda @@ -4761,12 +4761,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 kiB - %1 kiB + %1 kiBs %1 MiB - %1 MiB + %1 MiBs @@ -4776,7 +4776,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GB - GB + GBs @@ -4837,7 +4837,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game ID: - ID do jogo: + ID do Jogo: @@ -4870,12 +4870,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Generate Bug Report - Gerar Relatório de Bug + Gerar Relatório do Bug <html><head/><body><p>To file a bug report, please first generate a report file to attach to the bug report you're about to file. It is recommended that you include the save files, as these often help with debugging issues. This will collect some information about the version of {projectName} you're running, your configuration, your computer, and the game you currently have open (if any). Once this collection is completed you can review all of the information gathered below and save it to a zip file. The collection will automatically attempt to redact any personal information, such as your username if it's in any of the paths gathered, but just in case you can edit it afterwards. After you have generated and saved it, please click the button below or go to <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> to file the bug report on GitHub. Make sure to attach the report you generated!</p></body></html> - <html><head/><body><p>Para reportar um bug, primeiro gere um ficheiro de relatório para anexar ao relatório de bug. É recomendado que inclua ficheiros de jogos salvados, já que podem ajudar a resolver problemas de depuração. Isto irá coletar informações sobre a versão do {projectName} que está a correr, suas configurações, seu computador, e o jogo que está aberto (se algum). Quando a coleção estiver completa você poderá revisar toda a informação coletada abaixo e gravar para um ficheiro zip. A coleção tentará automaticamente editar qualquer informação pessoal, como o seu username em qualquer pasta colecionada, mas em qualquer caso você poderá editar mais tarde. Depois de gerado e gravado o relatório, por favor clique no botão abaixo ou vá a <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> para reportar o bug ao GitHub. Certifique-se de anexou o relatório que você gerou!</p></body></html> + <html><head/><body><p>Pra apresentar um relatório de bug, por favor primeiro gere um arquivo de relatório pra anexar ao relatório do bug. É recomendado que você inclua os arquivos dos saves como estes frequentemente ajudam com problemas de debugging. Isto coletará um pouco de informação sobre a versão do {projectName} que você está em executando, suas configurações, seu computador e o jogo que você abriu atualmente (se algum). Uma vez que esta coleção estiver completada você pode rever toda a informação coletada abaixo e salvá-la num arquivo zip. A coleção tentará automaticamente reescrever qualquer informação pessoal, tal como seu nome de usuário se está em qualquer dos caminhos coletados, mas em qualquer caso você pode editá-lo mais tarde. Depois que você o gerou e o salvou, por favor clique no botão abaixo ou vá em <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> pra apresentar o relatório no GitHub. Tenha a certeza de anexar o relatório que você gerou!</p></body></html> @@ -4895,12 +4895,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Include save file - Incluir ficheiro de jogo salvado + Incluir arquivo do save Create and include savestate - Criar e incluir estado de jogo + Criar e incluir savestate @@ -4908,12 +4908,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Convert/Extract Save Game - Converter e extrair jogo salvado + Converter/Extrair o Save do Jogo Input file - Ficheiro de entrada + Arquivo de entrada @@ -4924,22 +4924,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Output file - Ficheiro de saída + Arquivo de saída %1 %2 save game - %1 %2 jogo salvado + %1 %2 save do jogo little endian - endian pequeno + little endian big endian - endian grande + big endian @@ -4969,22 +4969,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. packed MBC2 - packed MBC2 + empacotou o MBC2 unpacked MBC2 - unpacked MBC2 + desempacotou o MBC2 MBC6 flash - MBC6 flash + Flash do MBC6 MBC6 combined SRAM + flash - MBC6 combinado SRAM + flash + MBC6 SRAM combinado + flash @@ -5004,7 +5004,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 save state with embedded %2 save game - %1 estado de jogo embutido com %2 jogo salvado + %1 save state com %2 saves dos jogos embutidos @@ -5032,7 +5032,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Start time at - Horário iniciando em + Horário do início em @@ -5042,7 +5042,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. MM/dd/yy hh:mm:ss AP - dd/MM/yy hh:mm:ss + MM/dd/yy hh:mm:ss AP @@ -5137,7 +5137,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Audio buffer: - Buffer de áudio: + Buffer do áudio: @@ -5183,7 +5183,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sample rate: - Taxa de amostragem: + Taxa das amostras: @@ -5225,7 +5225,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fast forward volume: - Volume durante avanço rápido: + Avançar o volume rápido: @@ -5235,7 +5235,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frameskip: - Salto de quadro: + Frameskip: @@ -5246,17 +5246,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. frames - quadros + frames FPS target: - Meta de FPS: + FPS alvo: frames per second - quadros por segundo + frames por segundo @@ -5276,7 +5276,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Fixar proporção + Trancar proporção do aspecto @@ -5286,37 +5286,37 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Default color palette only - + Só a cor padrão da paleta SGB color palette if available - + Paleta das cores SGB se disponível GBC color palette if available - + Paleta das cores do GBC se disponível SGB (preferred) or GBC color palette if available - + SGB (preferido) ou paleta das cores do GBC se disponível Game Boy Camera - + Câmera do Game Boy Driver: - + Driver: Source: - + Fonte: @@ -5326,7 +5326,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Interframe blending - Interframe blending + Mistura do interframe @@ -5341,33 +5341,33 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show OSD messages - Exibir mensagens OSD + Mostrarr mensagens do OSD Save state extra data: - Dados extras do estado de jogo: + Dados extras do save state: Save game - Salvar jogo + Save do jogo Load state extra data: - Carregar dados extras do estado de jogo: + Carregar dados extras do state: Enable VBA bug compatibility in ROM hacks - + Ativar compatibilidade dos bugs do VBA nos hacks das ROMs Preset: - + Pré-definições: @@ -5377,7 +5377,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fast forward (held) speed: - Velocidade de avanço (segurado): + Velocidade do avanço rápido (segurado): @@ -5387,7 +5387,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Log to file - Registrar para arquivo + Registrar no arquivo @@ -5402,7 +5402,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Force integer scaling - Forçar dimensionamento inteiro + Forçar dimensionamento da integral @@ -5412,7 +5412,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. English - Português do Brasil + Inglês @@ -5432,7 +5432,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show when no game open - Exibir quando nenhum jogo estiver aberto + Mostrar quando nenhum jogo estiver aberto @@ -5447,7 +5447,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Suspend screensaver - Suspender protetor de tela + Suspender proteção de tela @@ -5462,32 +5462,32 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Automatically save cheats - Salvar cheats automaticamente + Salvar trapaças automaticamente Automatically load cheats - Carregar cheats automaticamente + Carregar trapaças automaticamente Automatically save state - Salvar estado automaticamente + Salvar o state automaticamente Automatically load state - Carregar estado automaticamente + Carregar o state automaticamente Enable Discord Rich Presence - Habilitar Discord Rich Presence + Ativar Discord Rich Presence Fast forward speed: - Velocidade de avanço: + Velocidade de avanço rápido: @@ -5503,12 +5503,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Rewind history: - Histórico de retrocesso: + Histórico do retrocesso: Idle loops: - Loops ociosos: + Loops inativos: @@ -5529,33 +5529,33 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Screenshot - Captura de tela + Screenshot Cheat codes - Códigos de cheat + Códigos de trapaça Preload entire ROM into memory - Pré-carregar toda a ROM na memória + Pré-carregar a ROM inteira na memória Autofire interval: - Intervalo do Disparo Automático: + Intervalo do Auto-Disparo: Enable Game Boy Player features by default - Ativar funcionalidades do Game Boy Player por padrão + Ativar funções do Game Boy Player por padrão Video renderer: - Renderizador de vídeo: + Renderizador do vídeo: @@ -5575,17 +5575,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. High-resolution scale: - Escala de alta resolução: + Escala de alta-resolução: XQ GBA audio (experimental) - XQ GBA audio (experimental) + Áudio do XQ GBA (experimental) GB BIOS file: - Arquivo GB BIOS: + Arquivo do GB BIOS: @@ -5603,32 +5603,32 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Use BIOS file if found - Usar o arquivo BIOS se encontrado + Usar o arquivo da BIOS se encontrado Skip BIOS intro - Pular introdução da BIOS + Ignorar introdução da BIOS GBA BIOS file: - Arquivo GBA BIOS: + Arquivo da BIOS do GBA: GBC BIOS file: - Arquivo GBC BIOS: + Arquivo da BIOS do GBC: SGB BIOS file: - Arquivo SGB BIOS: + Arquivo da BIOS do SGB: Save games - Arquivos de salvamento + Saves dos jogos @@ -5637,17 +5637,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Same directory as the ROM - Mesmo diretório que a ROM + O mesmo diretório que a ROM Save states - Estados salvos + Save states Screenshots - Capturas de tela + Screenshots @@ -5657,42 +5657,42 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cheats - Cheats + Trapaças Models - + Modelos GB only: - + Só GB: SGB compatible: - + Compatível com SGB: GBC only: - + Só no GBC: GBC compatible: - + Compatível com GBC: SGB and GBC compatible: - + Compatível com SGB e GBC: Game Boy palette - + Paleta do Game Boy @@ -5707,12 +5707,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Default sprite colors 1: - Cores padrão do sprite 1: + Cores padrão da imagem móvel 1: Default sprite colors 2: - Cores padrão do sprite 2: + Cores padrão da imagem móvel 2: @@ -5745,7 +5745,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unload Shader - Remover Shader + Descarregar Shader @@ -5781,7 +5781,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles - Blocos + Mosaicos @@ -5806,17 +5806,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles per row - Blocos por linha + Mosaicos por linha Fit to window - Ajustar à janela + Encaixar na janela Copy Selected - Copiar selecionado + Copiar Selecionado @@ -5844,12 +5844,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select File - Selecionar arquivo + Selecionar Arquivo Presets - Predefinições + Pre-definições @@ -5891,7 +5891,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Lossless - &Sem perdas + &Sem Perdas @@ -5977,12 +5977,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Uncompressed - Sem compressão + Descomprimido Bitrate (kbps) - Bitrate (kbps) + Taxa dos bits (kbps) @@ -6017,12 +6017,12 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Fixar proporção + Trancar proporção do aspecto Show advanced - Mostrar opções avançadas + Mostrar as avançadas From a507276e252465ed256f33ba10ae9e052863a9f3 Mon Sep 17 00:00:00 2001 From: Felipe Date: Sun, 30 May 2021 08:57:34 -0300 Subject: [PATCH 06/50] Add files via upload --- src/platform/qt/ts/mgba-pt_BR.ts | 874 +++++++++++++++---------------- 1 file changed, 437 insertions(+), 437 deletions(-) diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 1108b7817..6fb8b459b 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -11,7 +11,7 @@ <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> - <a href="http://mgba.io/">Site da Web</a> • <a href="https://forums.mgba.io/">Fóruns / Suporte</a> • <a href="https://patreon.com/mgba">Doar</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Fonte</a> + <a href="http://mgba.io/">Site da Web</a> • <a href="https://forums.mgba.io/">Fóruns / Suporte</a> • <a href="https://patreon.com/mgba">Doar</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Fonte</a> @@ -21,19 +21,19 @@ {projectName} would like to thank the following patrons from Patreon: - O {projectName} gostaria de agradecer aos seguintes patronos do Patreon: + O {projectName} gostaria de agradecer aos seguintes patronos do Patreon: © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 Game Boy Advance is a registered trademark of Nintendo Co., Ltd. - © 2013 – {year} Jeffrey Pfau, licenciado sob a Licença Pública do Mozilla, versão 2.0 + © 2013 – {year} Jeffrey Pfau, licenciado sob a Licença Pública do Mozilla, versão 2.0 O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. {projectName} is an open-source Game Boy Advance emulator - O {projectName} é um emulador de Game Boy Advance de código fonte aberto + O {projectName} é um emulador de Game Boy Advance de código fonte aberto @@ -41,7 +41,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Open in archive... - Abrir no arquivo compactado... + Abrir no arquivo compactado... @@ -54,7 +54,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile # - Mosaico # + Mosaico # @@ -87,7 +87,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. BattleChip Gate - Portal do BattleChip + Portal do BattleChip @@ -117,27 +117,27 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Remove - Remover + Remover Gate type - Tipo de portal + Tipo de portal Ba&ttleChip Gate - Portal do Ba&ttleChip + Po&rtal do BattleChip Progress &Gate - Portal do &Progresso + Portal do &Progresso Beast &Link Gate - Portal do &Link da Beast + Portal do &Link da Beast @@ -157,7 +157,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show advanced - Mostrar as avançadas + Mostrar as avançadas @@ -165,12 +165,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cheats - Trapaças + Trapaças Remove - Remover + Remover @@ -203,12 +203,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Debugger - Debugger + Debugger Enter command (try `help` for more info) - Insira o comando (tente `help` pra mais informações) + Insira o comando (tente `help` pra mais informações) @@ -259,7 +259,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Inspect frame - Inspecionar frame + Inspecionar frame @@ -269,12 +269,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Freeze frame - Congelar frame + Congelar frame Backdrop color - Cor do cenário + Cor do cenário @@ -302,7 +302,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Loop - Repetição + Repetição @@ -317,7 +317,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select File - Selecionar Arquivo + Selecionar Arquivo @@ -368,7 +368,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Location - Local + Local @@ -405,7 +405,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. No Save - Nenhum Save + Nenhum Save @@ -468,12 +468,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enabled Levels - Níveis Ativados + Níveis Ativados Debug - Debug + Debug @@ -549,7 +549,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Memory Range - Salvar o Alcance de Memória + Salvar o Alcance de Memória @@ -559,12 +559,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Byte Count: - Contagem dos Bytes: + Contagem dos Bytes: Dump across banks - Dumpar através dos bancos + Dumpar através dos bancos @@ -572,7 +572,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Memory Search - Busca na Memória + Busca na Memória @@ -608,22 +608,22 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Width - Largura + Largura 1 Byte (8-bit) - 1 Byte (8 bit) + 1 Byte (8 bit) 2 Bytes (16-bit) - 2 Bytes (16 bits) + 2 Bytes (16 bits) 4 Bytes (32-bit) - 4 Bytes (32 bits) + 4 Bytes (32 bits) @@ -638,7 +638,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search type - Tipo de busca + Tipo de busca @@ -648,27 +648,27 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Greater than value - Maior do que o valor + Maior do que o valor Less than value - Menor do que o valor + Menor do que o valor Unknown/changed - Desconhecido/mudado + Desconhecido/mudado Changed by value - Mudado pelo valor + Mudado pelo valor Unchanged - Sem mudanças + Sem mudanças @@ -683,12 +683,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search ROM - Procurar ROM + Procurar ROM New Search - Nova Busca + Nova Busca @@ -699,12 +699,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Guess - Palpite + Palpite Search Within - Procurar Internamente + Procurar Internamente @@ -752,12 +752,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unsigned Integer: - Integral Não Assinado: + Integral Não Assinado: Signed Integer: - Integral Assinado: + Integral Assinado: @@ -787,7 +787,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Range - Salvar Alcance + Salvar Alcance @@ -800,7 +800,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprites - Imagens Móveis + Imagens Móveis @@ -858,7 +858,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Return, Ctrl+R - Retornar, Ctrl+R + Retornar, Ctrl+R @@ -895,7 +895,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enabled - Ativado + Ativado @@ -905,7 +905,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile - Mosaico + Mosaico @@ -938,7 +938,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Overrides - Substituições do Jogo + Substituições do Jogo @@ -951,7 +951,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Autodetect - Auto-detectar + Auto-detectar @@ -976,12 +976,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Rumble - Rumble + Rumble Save type - Tipo de save + Tipo de save @@ -996,12 +996,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Flash 512kb - Flash de 512 kbs + Flash de 512 kbs Flash 1Mb - Flash de 1 Mb + Flash de 1 Mb @@ -1011,7 +1011,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Idle loop - Loop inativo + Loop inativo @@ -1021,7 +1021,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. VBA bug compatibility mode - Modo de compatibilidade dos bugs do VBA + Modo de compatibilidade dos bugs do VBA @@ -1036,27 +1036,27 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Memory bank controller - Controle do banco de memória + Controle do banco de memória Background Colors - Cores do 2º Plano + Cores do 2º Plano Sprite Colors 1 - Cores da Imagem Móvel 1 + Cores da Imagem Móvel 1 Sprite Colors 2 - Cores da Imagem Móvel 2 + Cores da Imagem Móvel 2 Palette preset - Pré-definições da paleta + Pré-definições da paleta @@ -1069,7 +1069,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background - 2º plano + 2º plano @@ -1099,7 +1099,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 16-bit value - Valor de 16 bits + Valor de 16 bits @@ -1155,17 +1155,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Printer - Impressora do Game Boy + Impressora do Game Boy Hurry up! - Apresse-se! + Apresse-se! Tear off - Rasgar + Rasgar @@ -1211,7 +1211,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open cheats file: %1 - Falhou em abrir o arquivo das trapaças: %1 + Falhou em abrir o arquivo das trapaças: %1 @@ -1241,7 +1241,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select cheats file - Selecionar arquivo de trapaças + Selecionar arquivo de trapaças @@ -1249,27 +1249,27 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open save file: %1 - Falhou em abrir o arquivo do save: %1 + Falhou em abrir o arquivo do save: %1 Failed to open game file: %1 - Falhou em abrir o arquivo do jogo: %1 + Falhou em abrir o arquivo do jogo: %1 Can't yank pack in unexpected platform! - Não pode arrancar o pacote numa plataforma inesperada! + Não pode arrancar o pacote numa plataforma inesperada! Failed to open snapshot file for reading: %1 - Falhou em abrir o arquivo do snapshot pra leitura: %1 + Falhou em abrir o arquivo do snapshot pra leitura: %1 Failed to open snapshot file for writing: %1 - Falhou em abrir o arquivo do snapshot pra gravação: %1 + Falhou em abrir o arquivo do snapshot pra gravação: %1 @@ -1277,17 +1277,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open game file: %1 - Falhou em abrir o arquivo do jogo: %1 + Falhou em abrir o arquivo do jogo: %1 Could not load game. Are you sure it's in the correct format? - Não pôde carregar o jogo. Você tem certeza que está no formato correto? + Não pôde carregar o jogo. Você tem certeza que está no formato correto? Failed to open save file. Is the save directory writable? - Falhou em abrir o arquivo do save. O diretório do save é gravável? + Falhou em abrir o arquivo do save. O diretório do save é gravável? @@ -1295,12 +1295,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export frame - Exportar frame + Exportar frame Portable Network Graphics (*.png) - Gráficos Portáteis da Rede (*.png) + Gráficos Portáteis da Rede (*.png) @@ -1310,7 +1310,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background - 2º plano + 2º plano @@ -1325,17 +1325,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite - Imagem móvel + Imagem móvel Backdrop - Cenário + Cenário Frame - Frame + Frame @@ -1409,12 +1409,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Crash - Crash + Crash Could not start GDB server - Não pôde iniciar o servidor do GDB + Não pôde iniciar o servidor do GDB @@ -1422,17 +1422,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output file: %1 - Falhou em abrir arquivo de saída: %1 + Falhou em abrir arquivo de saída: %1 Select output file - Selecionar o arquivo de saída + Selecionar o arquivo de saída Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - Formato da Intermudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos Portáteis da Rede Animada (*.png *.apng) + Formato da Intermudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos Portáteis da Rede Animada (*.png *.apng) @@ -1440,37 +1440,37 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background mode - Modo do 2º plano + Modo do 2º plano Mode 0: 4 tile layers - Modo 0: 4 camadas dos mosaicos + Modo 0: 4 camadas dos mosaicos Mode 1: 2 tile layers + 1 rotated/scaled tile layer - Modo 1: 2 camadas dos mosaicos + 1 camada dos mosaicos rotacionada/dimensionada + Modo 1: 2 camadas dos mosaicos + 1 camada dos mosaicos rotacionada/dimensionada Mode 2: 2 rotated/scaled tile layers - Modo 2: 2 camadas dos mosaicos rotacionada/dimensionada + Modo 2: 2 camadas dos mosaicos rotacionada/dimensionada Mode 3: Full 15-bit bitmap - Modo 3: Bitmap de 15 bits completo + Modo 3: Bitmap de 15 bits completo Mode 4: Full 8-bit bitmap - Modo 4: Bitmap de 8 bits completo + Modo 4: Bitmap de 8 bits completo Mode 5: Small 15-bit bitmap - Modo 5: Bitmap de 15 bits pequeno + Modo 5: Bitmap de 15 bits pequeno @@ -1480,42 +1480,42 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame select - Selecionar frame + Selecionar frame Unlocked HBlank - Destrancou HBlank + Destrancou HBlank Linear OBJ tile mapping - Mapeamento do mosaio do OBJ linear + Mapeamento do mosaio do OBJ linear Force blank screen - Forçar tela vazia + Forçar tela vazia Enable background 0 - Ativar 2º plano 0 + Ativar 2º plano 0 Enable background 1 - Ativar 2º plano 1 + Ativar 2º plano 1 Enable background 2 - Ativar 2º plano 2 + Ativar 2º plano 2 Enable background 3 - Ativar 2º plano 3 + Ativar 2º plano 3 @@ -1535,12 +1535,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable OBJ Window - Ativar Janela do OBJ + Ativar Janela do OBJ Swap green components - Trocar componentes verdes + Trocar componentes verdes @@ -1560,17 +1560,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable VBlank IRQ generation - Ativar geração do IRQ VBlank + Ativar geração do IRQ VBlank Enable HBlank IRQ generation - Ativar geração do IRQ HBlank + Ativar geração do IRQ HBlank Enable VCounter IRQ generation - Ativar geração do IRQ VCounter + Ativar geração do IRQ VCounter @@ -1596,7 +1596,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile data base (* 16kB) - Base dos dados do mosaicos (* 16 kBs) + Base dos dados do mosaicos (* 16 kBs) @@ -1612,7 +1612,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable 256-color - Ativar 256 cores + Ativar 256 cores @@ -1620,7 +1620,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile map base (* 2kB) - Base do mapa dos mosaicos (* 2 kBs) + Base do mapa dos mosaicos (* 2 kBs) @@ -1628,13 +1628,13 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background dimensions - Dimensões do 2º plano + Dimensões do 2º plano Overflow wraps - Embrulhos do excesso + Embrulhos do excesso @@ -1682,7 +1682,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part - Parte integral + Parte integral @@ -1690,7 +1690,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part (low) - Parte integral (baixo) + Parte integral (baixo) @@ -1698,7 +1698,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Integer part (high) - Parte integral (alto) + Parte integral (alto) @@ -1812,57 +1812,57 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Outside window enable blend - Fora da janela ativar mistura + Fora da janela ativar mistura OBJ window enable BG 0 - Janela do OBJ ativar BG 0 + Janela do OBJ ativar BG 0 OBJ window enable BG 1 - Janela do OBJ ativar BG 1 + Janela do OBJ ativar BG 1 OBJ window enable BG 2 - Janela do OBJ ativar BG 2 + Janela do OBJ ativar BG 2 OBJ window enable BG 3 - Janela do OBJ ativar BG 3 + Janela do OBJ ativar BG 3 OBJ window enable OBJ - Janela do OBJ ativar OBJ + Janela do OBJ ativar OBJ OBJ window enable blend - Janela do OBJ ativar mistura + Janela do OBJ ativar mistura Background mosaic size vertical - Tamanho vertical do mosaico do 2º plano + Tamanho vertical do mosaico do 2º plano Background mosaic size horizontal - Tamanho horizontal do mosaico do 2º plano + Tamanho horizontal do mosaico do 2º plano Object mosaic size vertical - Tamanho vertical do mosaico do objeto + Tamanho vertical do mosaico do objeto Object mosaic size horizontal - Tamanho horizontal do mosaico do objeto + Tamanho horizontal do mosaico do objeto @@ -1887,17 +1887,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OBJ target 1 - Alvo do OBJ 1 + Alvo do OBJ 1 Backdrop target 1 - Alvo do cenário 1 + Alvo do cenário 1 Blend mode - Modo de Mistura + Modo de Mistura @@ -1942,45 +1942,45 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OBJ target 2 - Alvo do OBJ 2 + Alvo do OBJ 2 Backdrop target 2 - Alvo do cenário 2 + Alvo do cenário 2 Blend A (target 1) - Mistura A (alvo 1) + Mistura A (alvo 1) Blend B (target 2) - Mistura B (alvo 2) + Mistura B (alvo 2) Blend Y - Mistura Y + Mistura Y Sweep shifts - Trocas de varredura + Trocas de varredura Sweep subtract - Subtrair varredura + Subtrair varredura Sweep time (in 1/128s) - Tempo da varredura (em 1/128s) + Tempo da varredura (em 1/128s) @@ -2000,7 +2000,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Duty cycle - Ciclo do dever + Ciclo do dever @@ -2010,7 +2010,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Envelope step time - Tempo do passo do envelope + Tempo do passo do envelope @@ -2020,7 +2020,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Envelope increase - Aumentar envelope + Aumentar envelope @@ -2037,7 +2037,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sound frequency - Frequência do som + Frequência do som @@ -2066,7 +2066,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Double-size wave table - Tabela de som com tamanho duplo + Tabela de som com tamanho duplo @@ -2148,70 +2148,70 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Shifter frequency - Frequência do deslocador + Frequência do deslocador PSG volume right - Volume do PSG direito + Volume do PSG direito PSG volume left - Volume do PSG esquerdo + Volume do PSG esquerdo Enable channel 1 right - Ativar canal 1 a direita + Ativar canal 1 a direita Enable channel 2 right - Ativar canal 2 a direita + Ativar canal 2 a direita Enable channel 3 right - Ativar canal 3 a direita + Ativar canal 3 a direita Enable channel 4 right - Ativar canal 4 a direita + Ativar canal 4 a direita Enable channel 1 left - Ativar canal 1 a esquerda + Ativar canal 1 a esquerda Enable channel 2 left - Ativar canal 2 a esquerda + Ativar canal 2 a esquerda Enable channel 3 left - Ativar canal 3 a esquerda + Ativar canal 3 a esquerda Enable channel 4 left - Ativar canal 4 a esquerda + Ativar canal 4 a esquerda PSG master volume - Volume mestre do PSG + Volume mestre do PSG @@ -2226,12 +2226,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable channel A right - Ativar canal A a direita + Ativar canal A a direita Enable channel A left - Ativar canal A a esquerda + Ativar canal A a esquerda @@ -2260,17 +2260,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Channel A reset - Resetar canal A + Resetar canal A Enable channel B right - Ativar canal B a direita + Ativar canal B a direita Enable channel B left - Ativar canal B a esquerda + Ativar canal B a esquerda @@ -2280,7 +2280,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Channel B reset - Resetar canal B + Resetar canal B @@ -2439,12 +2439,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Source (high) - Fonte (alta) + Fonte (alta) Source (low) - Fonte (baixa) + Fonte (baixa) @@ -2518,7 +2518,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fixed - Consertado + Consertado @@ -2534,7 +2534,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Source offset - Deslocamento da fonte + Deslocamento da fonte @@ -2550,7 +2550,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 32-bit - 32 bits + 32 bits @@ -2625,7 +2625,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Audio FIFO - Áudio do FIFO + Áudio do FIFO @@ -2731,13 +2731,13 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Up - Pra cima + Pra cima Down - Pra baixo + Pra baixo @@ -2851,7 +2851,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. SRAM wait - Espera do SRAM + Espera do SRAM @@ -2921,33 +2921,33 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. PHI terminal - Terminal do PHI + Terminal do PHI Disable - Desativar + Desativar 4.19MHz - 4.19 MHz + 4.19 MHz 8.38MHz - 8.38 MHz + 8.38 MHz 16.78MHz - 16.78 MHz + 16.78 MHz Gamepak prefetch - Pré-busca do Gamepak + Pré-busca do Gamepak @@ -2967,12 +2967,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Up/Select - Pra cima/Select + Pra cima/Select Down/Start - Pra baixo/Start + Pra baixo/Start @@ -2982,17 +2982,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Active face buttons - Botões de face ativos + Botões de face ativos Internal clock - Relógio interno + Relógio interno 32× clocking (CGB only) - 32x o clock (só no GBC) + 32x o clock (só no GBC) @@ -3051,27 +3051,27 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Output left - Saída esquerda + Saída esquerda Background enable/priority - Ativar/prioridade do 2º plano + Ativar/prioridade do 2º plano Enable sprites - Ativar imagens móveis + Ativar imagens móveis Double-height sprites - Imagens móveis com dobro da altura + Imagens móveis com dobro da altura Background tile map - Mapa dos mosaicos do 2º plano + Mapa dos mosaicos do 2º plano @@ -3088,7 +3088,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background tile data - Dados do mosaicos do 2º plano + Dados do mosaicos do 2º plano @@ -3108,7 +3108,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Window tile map - Mapa dos mosaicos da janela + Mapa dos mosaicos da janela @@ -3123,22 +3123,22 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 0: HBlank - 0: HBlank + 0: HBlank 1: VBlank - 1: VBlank + 1: VBlank 2: OAM scan - 2: Scan do OAM + 2: Scan do OAM 3: HDraw - 3: HDraw + 3: HDraw @@ -3173,12 +3173,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Comparison Y coordinate - Comparação da coordenada Y + Comparação da coordenada Y Start upper byte - Iniciar byte superior + Iniciar byte superior @@ -3211,7 +3211,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Prepare to switch speed - Preparar pra trocar velocidade + Preparar pra trocar velocidade @@ -3231,12 +3231,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Timing - Cronometragem + Cronometragem Write bit - Bit de gravação + Bit de gravação @@ -3276,7 +3276,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite ordering - Ordenação da imagem móvel + Ordenação da imagem móvel @@ -3286,12 +3286,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. x coordinate sorting - Organização da coordenada X + Organização da coordenada X WRAM bank - Banco do WRAM + Banco do WRAM @@ -3305,12 +3305,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Super (L) - Super (E) + Super (E) Super (R) - Super (D) + Super (D) @@ -3323,12 +3323,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load State - Carregar o State + Carregar o State Save State - Salvar o State + Salvar o State @@ -3343,7 +3343,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Slot %1 - Slot %1 + Slot %1 @@ -3362,12 +3362,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Error - Erro + Erro Warning - Aviso + Aviso @@ -3400,7 +3400,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. An error occurred - Um erro ocorreu + Um erro ocorreu @@ -3420,12 +3420,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. WARN - AVISAR + AVISAR ERROR - ERRO + ERRO @@ -3435,7 +3435,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GAME ERROR - ERRO DO JOGO + ERRO DO JOGO @@ -3455,7 +3455,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile base - Base do mosaico + Base do mosaico @@ -3481,7 +3481,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Mirror - Espelho + Espelho @@ -3518,7 +3518,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Portable Network Graphics (*.png) - Gráficos Portáteis da Rede (*.png) + Gráficos Portáteis da Rede (*.png) @@ -3526,12 +3526,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save memory region - Salvar a região da memória + Salvar a região da memória Failed to open output file: %1 - Falhou em abrir o arquivo de saída: %1 + Falhou em abrir o arquivo de saída: %1 @@ -3574,7 +3574,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output file: %1 - Falhou em abrir o arquivo de saída: %1 + Falhou em abrir o arquivo de saída: %1 @@ -3584,7 +3584,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open input file: %1 - Falhou em abrir o arquivo de entrada: %1 + Falhou em abrir o arquivo de entrada: %1 @@ -3674,12 +3674,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export sprite - Exportar imagem móvel + Exportar imagem móvel Portable Network Graphics (*.png) - Gráficos Portáteis da Rede (*.png) + Gráficos Portáteis da Rede (*.png) @@ -3728,12 +3728,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Windows PAL (*.pal);;Adobe Color Table (*.act) - Windows PAL (*.pal);;Tabela de Cores da Adobe (*.act) + Windows PAL (*.pal);;Tabela de Cores da Adobe (*.act) Failed to open output palette file: %1 - Falhou em abrir o arquivo de saída da paleta: %1 + Falhou em abrir o arquivo de saída da paleta: %1 @@ -3756,7 +3756,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. (no database present) - (nenhum banco de dados presente) + (nenhum banco de dados presente) @@ -3764,12 +3764,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Bug report archive - Arquivo compactado do relatório dos bugs + Arquivo compactado do relatório dos bugs ZIP archive (*.zip) - Arquivo compactado ZIP (*.zip) + Arquivo compactado ZIP (*.zip) @@ -3777,42 +3777,42 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save games and save states (%1) - Saves dos jogos e save states (%1) + Saves dos jogos e save states (%1) Select save game or save state - Selecione o save do jogo ou save state + Selecione o save do jogo ou save state Save games (%1) - Saves dos jogos (%1) + Saves dos jogos (%1) Select save game - Selecione o save do jogo + Selecione o save do jogo Conversion failed - A conversão falhou + A conversão falhou Failed to convert the save game. This is probably a bug. - Falhou em converter o save do jogo. Isto é provavelmente um bug. + Falhou em converter o save do jogo. Isto é provavelmente um bug. No file selected - Nenhum arquivo selecionado + Nenhum arquivo selecionado Could not open file - Não pôde abrir o arquivo + Não pôde abrir o arquivo @@ -3822,7 +3822,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Please select a valid input file - Por favor selecione um arquivo de entrada válido + Por favor selecione um arquivo de entrada válido @@ -3832,7 +3832,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cannot convert save games between platforms - Não pôde converter os saves do jogo entre as plataformas + Não pôde converter os saves do jogo entre as plataformas @@ -3841,7 +3841,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Qt Multimedia - Multimídia do Qt + Multimídia do Qt @@ -3861,12 +3861,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. OpenGL (force version 1.x) - OpenGL (forçar a versão 1.x) + OpenGL (forçar a versão 1.x) None (Still Image) - Nenhum (Imagem Parada) + Nenhum (Imagem Parada) @@ -3897,7 +3897,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select directory - Selecione o diretório + Selecione o diretório @@ -3935,7 +3935,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Pass %1 - Passe %1 + Passe %1 @@ -3961,18 +3961,18 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export tiles - Exportar mosaico + Exportar mosaico Portable Network Graphics (*.png) - Gráficos Portáteis da Rede (*.png) + Gráficos Portáteis da Rede (*.png) Export tile - Exportar mosaico + Exportar mosaico @@ -3980,7 +3980,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Failed to open output video file: %1 - Falhou em abrir o arquivo de saída do vídeo: %1 + Falhou em abrir o arquivo de saída do vídeo: %1 @@ -3998,12 +3998,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Advance ROMs (%1) - ROMs do Game Boy Advance (%1) + ROMs do Game Boy Advance (%1) Game Boy ROMs (%1) - ROMs do Game Boy (%1) + ROMs do Game Boy (%1) @@ -4013,12 +4013,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 Video Logs (*.mvl) - %1 Registros do Vídeo (*.mvl) + %1 Registros do Vídeo (*.mvl) Archives (%1) - Arquivos Compactados (%1) + Arquivos Compactados (%1) @@ -4036,12 +4036,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select save - Selecionar save + Selecionar save Select patch - Selecionar patch + Selecionar patch @@ -4051,12 +4051,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select e-Reader dotcode - Selecionar dotcode do e-Reader + Selecionar dotcode do e-Reader e-Reader card (*.raw *.bin *.bmp) - Cartão do e-Reader (*.raw *.bin *.bmp) + Cartão do e-Reader (*.raw *.bin *.bmp) @@ -4072,66 +4072,66 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GameShark saves (*.sps *.xps) - Saves do GameShark (*.sps *.xps) + Saves do GameShark (*.sps *.xps) Select video log - Selecionar registro do vídeo + Selecionar registro do vídeo Video logs (*.mvl) - Registros do vídeo (*.mvl) + Registros do vídeo (*.mvl) Crash - Crash + Crash The game has crashed with the following error: %1 - O jogo teve um crash com o seguinte erro: + O jogo teve um crash com o seguinte erro: %1 Unimplemented BIOS call - Chamada da BIOS não implementada + Chamada da BIOS não implementada This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience. - Este jogo usa uma chamada de BIOS que não está implementada. Por favor use a BIOS oficial pra uma melhor experiência. + Este jogo usa uma chamada de BIOS que não está implementada. Por favor use a BIOS oficial pra uma melhor experiência. Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. - Falhou em criar um dispositivo de exibição apropriado, voltando a exibição por software. Os jogos podem executar lentamente, especialmente com janelas maiores. + Falhou em criar um dispositivo de exibição apropriado, voltando a exibição por software. Os jogos podem executar lentamente, especialmente com janelas maiores. Really make portable? - Realmente tornar portátil? + Realmente tornar portátil? This will make the emulator load its configuration from the same directory as the executable. Do you want to continue? - Isto fará o emulador carregar sua configuração do mesmo diretório que o executável. Você quer continuar? + Isto fará o emulador carregar sua configuração do mesmo diretório que o executável. Você quer continuar? Restart needed - Reiniciar é necessário + Reiniciar é necessário Some changes will not take effect until the emulator is restarted. - Algumas mudanças não terão efeito até que o emulador seja reiniciado. + Algumas mudanças não terão efeito até que o emulador seja reiniciado. @@ -4166,12 +4166,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load ROM in archive... - Carregar ROM no arquivo compactado... + Carregar ROM no arquivo compactado... Add folder to library... - Adicionar a pasta a biblioteca... + Adicionar a pasta a biblioteca... @@ -4181,7 +4181,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Boot BIOS - Dar Boot na BIOS + Dar Boot na BIOS @@ -4191,12 +4191,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. ROM &info... - Informações da &ROM... + Informações da &ROM... Recent - Recentes + Recentes @@ -4206,7 +4206,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Load state - &Carregar state + &Carregar state @@ -4221,7 +4221,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Pak sensors... - Sensores do Game Pak... + Sensores do Game Pak... @@ -4231,73 +4231,73 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load state file... - Carregar arquivo do state... + Carregar arquivo do state... Save games (%1) - Saves dos jogos (%1) + Saves dos jogos (%1) Select save game - Selecione save do jogo + Selecione save do jogo mGBA save state files (%1) - Arquivos do save state do mGBA (%1) + Arquivos do save state do mGBA (%1) Select save state - Selecione save state + Selecione save state Select e-Reader card images - Selecionar imagens do cartão do e-Reader + Selecionar imagens do cartão do e-Reader Image file (*.png *.jpg *.jpeg) - Arquivo da imagem (*.png *.jpg *.jpeg) + Arquivo da imagem (*.png *.jpg *.jpeg) Conversion finished - Conversão concluída + Conversão concluída %1 of %2 e-Reader cards converted successfully. - %1 de %2 cartões do e-Reader convertidos com sucesso. + %1 de %2 cartões do e-Reader convertidos com sucesso. Load alternate save game... - Carregar save alternativo do jogo... + Carregar save alternativo do jogo... Load temporary save game... - Carregar save temporário do jogo... + Carregar save temporário do jogo... Convert e-Reader card image to raw... - Converter imagem do cartão do e-Reader pro natural... + Converter imagem do cartão do e-Reader pro natural... &Save state - &Salvar o state + &Salvar o state Save state file... - Arquivo do save state... + Arquivo do save state... @@ -4312,28 +4312,28 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Load recent - Carregar recentes + Carregar recentes Save recent - Salvar recentes + Salvar recentes Undo load state - Desfazer o carregamento do state + Desfazer o carregamento do state Undo save state - Desfazer o salvamento do state + Desfazer o salvamento do state State &%1 - State &%1 + State &%1 @@ -4343,7 +4343,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Convert save game... - Converter save do jogo... + Converter save do jogo... @@ -4358,7 +4358,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. E&xit - S&air + S&air @@ -4373,12 +4373,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sh&utdown - De&sligar + De&sligar Yank game pak - Arrancar game pak + Arrancar game pak @@ -4388,22 +4388,22 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Next frame - &Próximo frame + &Próximo frame Fast forward (held) - Avanço rápido (segurado) + Avanço rápido (segurado) &Fast forward - &Avanço rápido + &Avanço rápido Fast forward speed - Velocidade do avanço rápido + Velocidade do avanço rápido @@ -4433,12 +4433,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sync to &video - Sincronizar no &vídeo + Sincronizar no &vídeo Sync to &audio - Sincronizar no &áudio + Sincronizar no &áudio @@ -4478,7 +4478,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame size - Tamanho do frame + Tamanho do frame @@ -4488,12 +4488,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Trancar proporção do aspecto + Trancar proporção do aspecto Force integer scaling - Forçar dimensionamento da integral + Forçar dimensionamento da integral @@ -4503,7 +4503,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frame&skip - Frame&skip + Frame&skip @@ -4513,7 +4513,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. FPS target - FPS alvo + FPS alvo @@ -4523,7 +4523,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Take &screenshot - Tirar &screenshot + Tirar &screenshot @@ -4533,12 +4533,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game Boy Printer... - Impressora do Game Boy... + Impressora do Game Boy... BattleChip Gate... - Portal do BattleChip... + Portal do BattleChip... @@ -4548,7 +4548,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Interframe blending - Mistura do interframe + Mistura do interframe @@ -4558,7 +4558,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Video layers - Camadas do vídeo + Camadas do vídeo @@ -4568,7 +4568,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Adjust layer placement... - Ajustar posicionamento da camada... + Ajustar posicionamento da camada... @@ -4583,32 +4583,32 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game &overrides... - Substituições &do jogo... + Substituições &do jogo... Couldn't Start - Não Pôde Iniciar + Não Pôde Iniciar Could not start game. - Não pôde iniciar o jogo. + Não pôde iniciar o jogo. Scan e-Reader dotcodes... - Escanear dotcodes do e-Reader... + Escanear dotcodes do e-Reader... Import GameShark Save... - Importar Save do GameShark... + Importar Save do GameShark... Export GameShark Save... - Exportar Save do GameShark... + Exportar Save do GameShark... @@ -4618,7 +4618,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Cheats... - &Trapaças... + &Trapaças... @@ -4628,12 +4628,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Open debugger console... - Abrir console do debugger... + Abrir console do debugger... Start &GDB server... - Iniciar servidor do &GDB... + Iniciar servidor do &GDB... @@ -4643,12 +4643,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. View &sprites... - Visualizar &imagens móveis... + Visualizar &imagens móveis... View &tiles... - Visualizar &mosaicos... + Visualizar &mosaicos... @@ -4658,7 +4658,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Frame inspector... - Inspetor dos &frames... + Inspetor dos &frames... @@ -4668,7 +4668,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search memory... - Procurar memória... + Procurar memória... @@ -4678,12 +4678,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Record debug video log... - Gravar registro do vídeo de debug... + Gravar registro do vídeo de debug... Stop debug video log - Parar log do vídeo de debug + Parar log do vídeo de debug @@ -4693,62 +4693,62 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GameShark Button (held) - Botão do GameShark (segurado) + Botão do GameShark (segurado) Autofire - Auto-disparar + Auto-disparar Autofire A - Auto-disparar A + Auto-disparar A Autofire B - Auto-disparar B + Auto-disparar B Autofire L - Auto-disparar L + Auto-disparar L Autofire R - Auto-disparar R + Auto-disparar R Autofire Start - Auto-disparar Start + Auto-disparar Start Autofire Select - Auto-disparar Select + Auto-disparar Select Autofire Up - Auto-disparar Pra Cima + Auto-disparar Pra Cima Autofire Right - Auto-disparar Direita + Auto-disparar Direita Autofire Down - Auto-disparar Pra Baixo + Auto-disparar Pra Baixo Autofire Left - Auto-disparar Esquerda + Auto-disparar Esquerda @@ -4761,12 +4761,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 kiB - %1 kiBs + %1 kiBs %1 MiB - %1 MiBs + %1 MiBs @@ -4776,7 +4776,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. GB - GBs + GBs @@ -4837,7 +4837,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Game ID: - ID do Jogo: + ID do Jogo: @@ -4870,12 +4870,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Generate Bug Report - Gerar Relatório do Bug + Gerar Relatório do Bug <html><head/><body><p>To file a bug report, please first generate a report file to attach to the bug report you're about to file. It is recommended that you include the save files, as these often help with debugging issues. This will collect some information about the version of {projectName} you're running, your configuration, your computer, and the game you currently have open (if any). Once this collection is completed you can review all of the information gathered below and save it to a zip file. The collection will automatically attempt to redact any personal information, such as your username if it's in any of the paths gathered, but just in case you can edit it afterwards. After you have generated and saved it, please click the button below or go to <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> to file the bug report on GitHub. Make sure to attach the report you generated!</p></body></html> - <html><head/><body><p>Pra apresentar um relatório de bug, por favor primeiro gere um arquivo de relatório pra anexar ao relatório do bug. É recomendado que você inclua os arquivos dos saves como estes frequentemente ajudam com problemas de debugging. Isto coletará um pouco de informação sobre a versão do {projectName} que você está em executando, suas configurações, seu computador e o jogo que você abriu atualmente (se algum). Uma vez que esta coleção estiver completada você pode rever toda a informação coletada abaixo e salvá-la num arquivo zip. A coleção tentará automaticamente reescrever qualquer informação pessoal, tal como seu nome de usuário se está em qualquer dos caminhos coletados, mas em qualquer caso você pode editá-lo mais tarde. Depois que você o gerou e o salvou, por favor clique no botão abaixo ou vá em <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> pra apresentar o relatório no GitHub. Tenha a certeza de anexar o relatório que você gerou!</p></body></html> + <html><head/><body><p>Pra apresentar um relatório de bug, por favor primeiro gere um arquivo de relatório pra anexar ao relatório do bug. É recomendado que você inclua os arquivos dos saves como estes frequentemente ajudam com problemas de debugging. Isto coletará um pouco de informação sobre a versão do {projectName} que você está em executando, suas configurações, seu computador e o jogo que você abriu atualmente (se algum). Uma vez que esta coleção estiver completada você pode rever toda a informação coletada abaixo e salvá-la num arquivo zip. A coleção tentará automaticamente reescrever qualquer informação pessoal, tal como seu nome de usuário se está em qualquer dos caminhos coletados, mas em qualquer caso você pode editá-lo mais tarde. Depois que você o gerou e o salvou, por favor clique no botão abaixo ou vá em <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> pra apresentar o relatório no GitHub. Tenha a certeza de anexar o relatório que você gerou!</p></body></html> @@ -4895,12 +4895,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Include save file - Incluir arquivo do save + Incluir arquivo do save Create and include savestate - Criar e incluir savestate + Criar e incluir savestate @@ -4908,12 +4908,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Convert/Extract Save Game - Converter/Extrair o Save do Jogo + Converter/Extrair o Save do Jogo Input file - Arquivo de entrada + Arquivo de entrada @@ -4924,22 +4924,22 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Output file - Arquivo de saída + Arquivo de saída %1 %2 save game - %1 %2 save do jogo + %1 %2 save do jogo little endian - little endian + little endian big endian - big endian + big endian @@ -4969,22 +4969,22 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. packed MBC2 - empacotou o MBC2 + empacotou o MBC2 unpacked MBC2 - desempacotou o MBC2 + desempacotou o MBC2 MBC6 flash - Flash do MBC6 + Flash do MBC6 MBC6 combined SRAM + flash - MBC6 SRAM combinado + flash + MBC6 SRAM combinado + flash @@ -5004,7 +5004,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. %1 save state with embedded %2 save game - %1 save state com %2 saves dos jogos embutidos + %1 save state com %2 saves dos jogos embutidos @@ -5032,7 +5032,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Start time at - Horário do início em + Horário do início em @@ -5042,7 +5042,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. MM/dd/yy hh:mm:ss AP - MM/dd/yy hh:mm:ss AP + MM/dd/yy hh:mm:ss AP @@ -5137,7 +5137,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Audio buffer: - Buffer do áudio: + Buffer do áudio: @@ -5183,7 +5183,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sample rate: - Taxa das amostras: + Taxa das amostras: @@ -5225,7 +5225,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fast forward volume: - Avançar o volume rápido: + Avançar o volume rápido: @@ -5235,7 +5235,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Frameskip: - Frameskip: + Frameskip: @@ -5246,17 +5246,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. frames - frames + frames FPS target: - FPS alvo: + FPS alvo: frames per second - frames por segundo + frames por segundo @@ -5276,7 +5276,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Trancar proporção do aspecto + Trancar proporção do aspecto @@ -5286,37 +5286,37 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Default color palette only - Só a cor padrão da paleta + Só a cor padrão da paleta SGB color palette if available - Paleta das cores SGB se disponível + Paleta das cores SGB se disponível GBC color palette if available - Paleta das cores do GBC se disponível + Paleta das cores do GBC se disponível SGB (preferred) or GBC color palette if available - SGB (preferido) ou paleta das cores do GBC se disponível + SGB (preferido) ou paleta das cores do GBC se disponível Game Boy Camera - Câmera do Game Boy + Câmera do Game Boy Driver: - Driver: + Driver: Source: - Fonte: + Fonte: @@ -5326,7 +5326,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Interframe blending - Mistura do interframe + Mistura do interframe @@ -5341,33 +5341,33 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show OSD messages - Mostrarr mensagens do OSD + Mostrarr mensagens do OSD Save state extra data: - Dados extras do save state: + Dados extras do save state: Save game - Save do jogo + Save do jogo Load state extra data: - Carregar dados extras do state: + Carregar dados extras do state: Enable VBA bug compatibility in ROM hacks - Ativar compatibilidade dos bugs do VBA nos hacks das ROMs + Ativar compatibilidade dos bugs do VBA nos hacks das ROMs Preset: - Pré-definições: + Pré-definições: @@ -5377,7 +5377,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Fast forward (held) speed: - Velocidade do avanço rápido (segurado): + Velocidade do avanço rápido (segurado): @@ -5387,7 +5387,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Log to file - Registrar no arquivo + Registrar no arquivo @@ -5402,7 +5402,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Force integer scaling - Forçar dimensionamento da integral + Forçar dimensionamento da integral @@ -5412,7 +5412,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. English - Inglês + Inglês @@ -5432,7 +5432,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show when no game open - Mostrar quando nenhum jogo estiver aberto + Mostrar quando nenhum jogo estiver aberto @@ -5447,7 +5447,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Suspend screensaver - Suspender proteção de tela + Suspender proteção de tela @@ -5462,32 +5462,32 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Automatically save cheats - Salvar trapaças automaticamente + Salvar trapaças automaticamente Automatically load cheats - Carregar trapaças automaticamente + Carregar trapaças automaticamente Automatically save state - Salvar o state automaticamente + Salvar o state automaticamente Automatically load state - Carregar o state automaticamente + Carregar o state automaticamente Enable Discord Rich Presence - Ativar Discord Rich Presence + Ativar Discord Rich Presence Fast forward speed: - Velocidade de avanço rápido: + Velocidade de avanço rápido: @@ -5503,12 +5503,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Rewind history: - Histórico do retrocesso: + Histórico do retrocesso: Idle loops: - Loops inativos: + Loops inativos: @@ -5529,33 +5529,33 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Screenshot - Screenshot + Screenshot Cheat codes - Códigos de trapaça + Códigos de trapaça Preload entire ROM into memory - Pré-carregar a ROM inteira na memória + Pré-carregar a ROM inteira na memória Autofire interval: - Intervalo do Auto-Disparo: + Intervalo do Auto-Disparo: Enable Game Boy Player features by default - Ativar funções do Game Boy Player por padrão + Ativar funções do Game Boy Player por padrão Video renderer: - Renderizador do vídeo: + Renderizador do vídeo: @@ -5575,17 +5575,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. High-resolution scale: - Escala de alta-resolução: + Escala de alta-resolução: XQ GBA audio (experimental) - Áudio do XQ GBA (experimental) + Áudio do XQ GBA (experimental) GB BIOS file: - Arquivo do GB BIOS: + Arquivo do GB BIOS: @@ -5603,32 +5603,32 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Use BIOS file if found - Usar o arquivo da BIOS se encontrado + Usar o arquivo da BIOS se encontrado Skip BIOS intro - Ignorar introdução da BIOS + Ignorar introdução da BIOS GBA BIOS file: - Arquivo da BIOS do GBA: + Arquivo da BIOS do GBA: GBC BIOS file: - Arquivo da BIOS do GBC: + Arquivo da BIOS do GBC: SGB BIOS file: - Arquivo da BIOS do SGB: + Arquivo da BIOS do SGB: Save games - Saves dos jogos + Saves dos jogos @@ -5637,17 +5637,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Same directory as the ROM - O mesmo diretório que a ROM + O mesmo diretório que a ROM Save states - Save states + Save states Screenshots - Screenshots + Screenshots @@ -5657,42 +5657,42 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Cheats - Trapaças + Trapaças Models - Modelos + Modelos GB only: - Só GB: + Só GB: SGB compatible: - Compatível com SGB: + Compatível com SGB: GBC only: - Só no GBC: + Só no GBC: GBC compatible: - Compatível com GBC: + Compatível com GBC: SGB and GBC compatible: - Compatível com SGB e GBC: + Compatível com SGB e GBC: Game Boy palette - Paleta do Game Boy + Paleta do Game Boy @@ -5707,12 +5707,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Default sprite colors 1: - Cores padrão da imagem móvel 1: + Cores padrão da imagem móvel 1: Default sprite colors 2: - Cores padrão da imagem móvel 2: + Cores padrão da imagem móvel 2: @@ -5745,7 +5745,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unload Shader - Descarregar Shader + Descarregar Shader @@ -5781,7 +5781,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles - Mosaicos + Mosaicos @@ -5806,17 +5806,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles per row - Mosaicos por linha + Mosaicos por linha Fit to window - Encaixar na janela + Encaixar na janela Copy Selected - Copiar Selecionado + Copiar Selecionado @@ -5844,12 +5844,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select File - Selecionar Arquivo + Selecionar Arquivo Presets - Pre-definições + Pre-definições @@ -5891,7 +5891,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. &Lossless - &Sem Perdas + &Sem Perdas @@ -5977,12 +5977,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Uncompressed - Descomprimido + Descomprimido Bitrate (kbps) - Taxa dos bits (kbps) + Taxa dos bits (kbps) @@ -6017,12 +6017,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Lock aspect ratio - Trancar proporção do aspecto + Trancar proporção do aspecto Show advanced - Mostrar as avançadas + Mostrar as avançadas From 31fd8c2705fb384678e2ae7d28b8b483f79574fc Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 28 May 2021 18:42:21 -0700 Subject: [PATCH 07/50] Libretro: Add GB palette setting --- src/platform/libretro/libretro.c | 69 ++++++++++++++++--- src/platform/libretro/libretro_core_options.h | 11 +++ 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/src/platform/libretro/libretro.c b/src/platform/libretro/libretro.c index 455380272..13d26fbc3 100644 --- a/src/platform/libretro/libretro.c +++ b/src/platform/libretro/libretro.c @@ -17,6 +17,7 @@ #include #include #include +#include #endif #ifdef M_CORE_GBA #include @@ -146,6 +147,38 @@ static void _initRumble(void) { rumbleInitDone = true; } +#ifdef M_CORE_GB +static void _updateGbPal(void) { + struct retro_variable var; + var.key = "mgba_gb_colors"; + var.value = 0; + if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + const struct GBColorPreset* presets; + size_t listSize = GBColorPresetList(&presets); + size_t i; + for (i = 0; i < listSize; ++i) { + if (strcmp(presets[i].name, var.value) != 0) { + continue; + } + mCoreConfigSetUIntValue(&core->config, "gb.pal[0]", presets[i].colors[0] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[1]", presets[i].colors[1] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[2]", presets[i].colors[2] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[3]", presets[i].colors[3] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[4]", presets[i].colors[4] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[5]", presets[i].colors[5] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[6]", presets[i].colors[6] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[7]", presets[i].colors[7] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[8]", presets[i].colors[8] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[9]", presets[i].colors[9] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[10]", presets[i].colors[10] & 0xFFFFFF); + mCoreConfigSetUIntValue(&core->config, "gb.pal[11]", presets[i].colors[11] & 0xFFFFFF); + core->reloadConfigOption(core, "gb.pal", NULL); + break; + } + } +} +#endif + static void _reloadSettings(void) { struct mCoreOptions opts = { .useBios = true, @@ -177,6 +210,14 @@ static void _reloadSettings(void) { mCoreConfigSetDefaultValue(&core->config, "sgb.model", modelName); mCoreConfigSetDefaultValue(&core->config, "cgb.model", modelName); } + + var.key = "mgba_sgb_borders"; + var.value = 0; + if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + mCoreConfigSetDefaultIntValue(&core->config, "sgb.borders", strcmp(var.value, "ON") == 0); + } + + _updateGbPal(); #endif var.key = "mgba_use_bios"; @@ -191,14 +232,6 @@ static void _reloadSettings(void) { opts.skipBios = strcmp(var.value, "ON") == 0; } -#ifdef M_CORE_GB - var.key = "mgba_sgb_borders"; - var.value = 0; - if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - mCoreConfigSetDefaultIntValue(&core->config, "sgb.borders", strcmp(var.value, "ON") == 0); - } -#endif - var.key = "mgba_frameskip"; var.value = 0; if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { @@ -248,6 +281,22 @@ unsigned retro_api_version(void) { void retro_set_environment(retro_environment_t env) { environCallback = env; +#ifdef M_CORE_GB + const struct GBColorPreset* presets; + size_t listSize = GBColorPresetList(&presets); + + size_t colorOpt; + for (colorOpt = 0; option_defs_us[colorOpt].key; ++colorOpt) { + if (strcmp(option_defs_us[colorOpt].key, "mgba_gb_colors") == 0) { + break; + } + } + size_t i; + for (i = 0; i < listSize && i < RETRO_NUM_CORE_OPTION_VALUES_MAX; ++i) { + option_defs_us[colorOpt].values[i].value = presets[i].name; + } +#endif + libretro_set_core_options(environCallback); } @@ -428,6 +477,10 @@ void retro_run(void) { mCoreConfigSetIntValue(&core->config, "frameskip", strtol(var.value, NULL, 10)); core->reloadConfigOption(core, "frameskip", NULL); } + +#ifdef M_CORE_GB + _updateGbPal(); +#endif } keys = 0; diff --git a/src/platform/libretro/libretro_core_options.h b/src/platform/libretro/libretro_core_options.h index e41e6cda2..5b0a62b1e 100644 --- a/src/platform/libretro/libretro_core_options.h +++ b/src/platform/libretro/libretro_core_options.h @@ -186,6 +186,17 @@ struct retro_core_option_definition option_defs_us[] = { }, "OFF" }, + { + "mgba_gb_colors", + "Set default Game Boy palette", + "Selects which palette is used for Game Boy games that are not Game Boy Color or Super Game Boy compatible, or if the model is forced to Game Boy.", + { + // This list is populated at runtime + { "Grayscale", NULL }, + { NULL, NULL }, + }, + "Grayscale" + }, { NULL, NULL, NULL, {{0}}, NULL }, }; From 8ea97470211ab3ea0b61930e8f7fcb659015300b Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 4 Jun 2021 18:22:35 -0700 Subject: [PATCH 08/50] Qt: Minor .ui updates --- src/platform/qt/BattleChipView.ui | 6 +++--- src/platform/qt/ObjView.ui | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/platform/qt/BattleChipView.ui b/src/platform/qt/BattleChipView.ui index 0b50fe0be..ecb581fb3 100644 --- a/src/platform/qt/BattleChipView.ui +++ b/src/platform/qt/BattleChipView.ui @@ -142,7 +142,7 @@ - Ba&ttleChip Gate + Ba&ttleChip Gate true @@ -152,14 +152,14 @@ - Progress &Gate + Progress &Gate - Beast &Link Gate + Beast &Link Gate diff --git a/src/platform/qt/ObjView.ui b/src/platform/qt/ObjView.ui index adf60a165..8d380b186 100644 --- a/src/platform/qt/ObjView.ui +++ b/src/platform/qt/ObjView.ui @@ -473,9 +473,6 @@ - - Return, Ctrl+R - From f1ec80889dfc0cce3fff6343bc9e8d3297ee53c0 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 4 Jun 2021 19:45:03 -0700 Subject: [PATCH 09/50] Qt: Clean up cheats dialog --- CHANGES | 1 + src/platform/qt/CheatsView.cpp | 77 ++++++++++------------- src/platform/qt/CheatsView.h | 6 +- src/platform/qt/CheatsView.ui | 112 +++++++++++++++++---------------- 4 files changed, 98 insertions(+), 98 deletions(-) diff --git a/CHANGES b/CHANGES index 056692109..aef829f98 100644 --- a/CHANGES +++ b/CHANGES @@ -22,6 +22,7 @@ Other fixes: Misc: - Core: Suspend runloop when a core crashes - Qt: Rearrange menus some + - Qt: Clean up cheats dialog - Util: Improve speed of UPS patch loading 0.9.1: (2021-04-18) diff --git a/src/platform/qt/CheatsView.cpp b/src/platform/qt/CheatsView.cpp index 9120e358b..4dc617458 100644 --- a/src/platform/qt/CheatsView.cpp +++ b/src/platform/qt/CheatsView.cpp @@ -8,8 +8,10 @@ #include "GBAApp.h" #include "CoreController.h" +#include +#include #include -#include +#include #include #ifdef M_CORE_GBA @@ -30,58 +32,30 @@ CheatsView::CheatsView(std::shared_ptr controller, QWidget* pare m_ui.cheatList->installEventFilter(this); m_ui.cheatList->setModel(&m_model); + m_ui.codeEntry->setFont(GBAApp::app()->monospaceFont()); - connect(m_ui.load, &QPushButton::clicked, this, &CheatsView::load); - connect(m_ui.save, &QPushButton::clicked, this, &CheatsView::save); - connect(m_ui.addSet, &QPushButton::clicked, this, &CheatsView::addSet); - connect(m_ui.remove, &QPushButton::clicked, this, &CheatsView::removeSet); + connect(m_ui.load, &QAbstractButton::clicked, this, &CheatsView::load); + connect(m_ui.save, &QAbstractButton::clicked, this, &CheatsView::save); + connect(m_ui.addSet, &QAbstractButton::clicked, this, &CheatsView::addSet); + connect(m_ui.remove, &QAbstractButton::clicked, this, &CheatsView::removeSet); + connect(m_ui.add, &QAbstractButton::clicked, this, &CheatsView::enterCheat); connect(controller.get(), &CoreController::stopping, this, &CheatsView::close); connect(controller.get(), &CoreController::stateLoaded, &m_model, &CheatsModel::invalidated); - QPushButton* add; switch (controller->platform()) { #ifdef M_CORE_GBA case mPLATFORM_GBA: - connect(m_ui.add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_AUTODETECT); - }); - - add = new QPushButton(tr("Add GameShark")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_GAMESHARK); - }); - - add = new QPushButton(tr("Add Pro Action Replay")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_PRO_ACTION_REPLAY); - }); - - add = new QPushButton(tr("Add CodeBreaker")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_CODEBREAKER); - }); + registerCodeType(tr("Autodetect (recommended)"), GBA_CHEAT_AUTODETECT); + registerCodeType(tr("GameShark"), GBA_CHEAT_GAMESHARK); + registerCodeType(tr("Action Replay MAX"), GBA_CHEAT_PRO_ACTION_REPLAY); + registerCodeType(tr("CodeBreaker"), GBA_CHEAT_CODEBREAKER); break; #endif #ifdef M_CORE_GB case mPLATFORM_GB: - connect(m_ui.add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_AUTODETECT); - }); - - add = new QPushButton(tr("Add GameShark")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_GAMESHARK); - }); - - add = new QPushButton(tr("Add GameGenie")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_GAME_GENIE); - }); + registerCodeType(tr("Autodetect (recommended)"), GB_CHEAT_AUTODETECT); + registerCodeType(tr("GameShark"), GB_CHEAT_GAMESHARK); + registerCodeType(tr("Game Genie"), GB_CHEAT_GAME_GENIE); break; #endif default: @@ -127,6 +101,7 @@ void CheatsView::addSet() { mCheatSet* set = m_controller->cheatDevice()->createSet(m_controller->cheatDevice(), nullptr); m_model.addSet(set); m_ui.cheatList->selectionModel()->select(m_model.index(m_model.rowCount() - 1, 0, QModelIndex()), QItemSelectionModel::ClearAndSelect); + enterCheat(); } void CheatsView::removeSet() { @@ -140,7 +115,21 @@ void CheatsView::removeSet() { } } -void CheatsView::enterCheat(int codeType) { +void CheatsView::registerCodeType(const QString& label, int type) { + QRadioButton* add = new QRadioButton(label); + m_ui.typeLayout->addWidget(add); + connect(add, &QAbstractButton::clicked, [this, type]() { + m_codeType = type; + }); + if (!m_typeGroup) { + m_typeGroup = new QButtonGroup(this); + m_codeType = type; + add->setChecked(true); + } + m_typeGroup->addButton(add); +} + +void CheatsView::enterCheat() { mCheatSet* set = nullptr; QModelIndexList selection = m_ui.cheatList->selectionModel()->selectedIndexes(); QModelIndex index; @@ -163,7 +152,7 @@ void CheatsView::enterCheat(int codeType) { QStringList cheats = m_ui.codeEntry->toPlainText().split('\n', QString::SkipEmptyParts); for (const QString& string : cheats) { m_model.beginAppendRow(index); - mCheatAddLine(set, string.toUtf8().constData(), codeType); + mCheatAddLine(set, string.toUtf8().constData(), m_codeType); m_model.endAppendRow(); } if (set->refresh) { diff --git a/src/platform/qt/CheatsView.h b/src/platform/qt/CheatsView.h index 7e47ef07e..a6b9db848 100644 --- a/src/platform/qt/CheatsView.h +++ b/src/platform/qt/CheatsView.h @@ -33,13 +33,17 @@ private slots: void save(); void addSet(); void removeSet(); + void enterCheat(); private: - void enterCheat(int codeType); + void registerCodeType(const QString& label, int type); Ui::CheatsView m_ui; std::shared_ptr m_controller; CheatsModel m_model; + QButtonGroup* m_typeGroup = nullptr; + + int m_codeType = 0; }; } diff --git a/src/platform/qt/CheatsView.ui b/src/platform/qt/CheatsView.ui index e712f281c..fe2124022 100644 --- a/src/platform/qt/CheatsView.ui +++ b/src/platform/qt/CheatsView.ui @@ -6,60 +6,18 @@ 0 0 - 629 - 428 + 520 + 455 Cheats - - - - - Remove - - - - - - - Qt::Horizontal - - - - - - - Save - - - - - - - Load - - - - - - - Add New Set - - - - - - - Add - - - - + + - + 0 0 @@ -75,18 +33,51 @@ - + + + + Add New Code + + + + + + + Load + + + + + + + Save + + + + + + + Remove + + + + + + + Qt::Horizontal + + + + - + 1 0 - - - Courier New - + + true QPlainTextEdit::NoWrap @@ -96,6 +87,21 @@ + + + + Add Lines + + + + + + + Code type + + + + From 38d55d9b6de1ad38820ef99abb611aad96580ad0 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 4 Jun 2021 20:01:57 -0700 Subject: [PATCH 10/50] Qt: Text interaction and font cleanup --- src/platform/qt/AssetInfo.cpp | 1 + src/platform/qt/AssetTile.ui | 16 ++++++++++-- src/platform/qt/DebuggerConsole.cpp | 5 +++- src/platform/qt/DebuggerConsole.ui | 10 -------- src/platform/qt/IOViewer.ui | 3 +++ src/platform/qt/ObjView.ui | 38 ++++++++++++++++++++++++++++- src/platform/qt/PaletteView.ui | 18 ++++++++++++++ src/platform/qt/ROMInfo.ui | 10 ++++---- src/platform/qt/ReportView.cpp | 1 + src/platform/qt/ReportView.ui | 5 ---- 10 files changed, 83 insertions(+), 24 deletions(-) diff --git a/src/platform/qt/AssetInfo.cpp b/src/platform/qt/AssetInfo.cpp index 22f1a464e..b0d180ae3 100644 --- a/src/platform/qt/AssetInfo.cpp +++ b/src/platform/qt/AssetInfo.cpp @@ -22,6 +22,7 @@ void AssetInfo::addCustomProperty(const QString& id, const QString& visibleName) QLabel* value = new QLabel; value->setFont(GBAApp::app()->monospaceFont()); value->setAlignment(Qt::AlignRight); + value->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard); newLayout->addWidget(value); m_customProperties[id] = value; int index = customLocation(); diff --git a/src/platform/qt/AssetTile.ui b/src/platform/qt/AssetTile.ui index 6712166f2..266a042ec 100644 --- a/src/platform/qt/AssetTile.ui +++ b/src/platform/qt/AssetTile.ui @@ -51,7 +51,7 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -74,6 +74,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -96,7 +99,7 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -162,6 +165,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -169,6 +175,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -176,6 +185,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + diff --git a/src/platform/qt/DebuggerConsole.cpp b/src/platform/qt/DebuggerConsole.cpp index b7ac06323..2d4261afb 100644 --- a/src/platform/qt/DebuggerConsole.cpp +++ b/src/platform/qt/DebuggerConsole.cpp @@ -6,6 +6,7 @@ #include "DebuggerConsole.h" #include "DebuggerConsoleController.h" +#include "GBAApp.h" #include @@ -18,6 +19,8 @@ DebuggerConsole::DebuggerConsole(DebuggerConsoleController* controller, QWidget* m_ui.setupUi(this); m_ui.prompt->installEventFilter(this); + m_ui.log->setFont(GBAApp::app()->monospaceFont()); + m_ui.prompt->setFont(GBAApp::app()->monospaceFont()); connect(m_ui.prompt, &QLineEdit::returnPressed, this, &DebuggerConsole::postLine); connect(controller, &DebuggerConsoleController::log, this, &DebuggerConsole::log); @@ -81,4 +84,4 @@ bool DebuggerConsole::eventFilter(QObject*, QEvent* event) { m_ui.prompt->setText(m_history[m_history.size() - m_historyOffset]); } return true; -} \ No newline at end of file +} diff --git a/src/platform/qt/DebuggerConsole.ui b/src/platform/qt/DebuggerConsole.ui index 7374afd89..4199e1e83 100644 --- a/src/platform/qt/DebuggerConsole.ui +++ b/src/platform/qt/DebuggerConsole.ui @@ -16,11 +16,6 @@ - - - Source Code Pro - - Enter command (try `help` for more info) @@ -35,11 +30,6 @@ - - - Source Code Pro - - true diff --git a/src/platform/qt/IOViewer.ui b/src/platform/qt/IOViewer.ui index bcd338af9..e53541f4a 100644 --- a/src/platform/qt/IOViewer.ui +++ b/src/platform/qt/IOViewer.ui @@ -25,6 +25,9 @@ 0x0000 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + diff --git a/src/platform/qt/ObjView.ui b/src/platform/qt/ObjView.ui index 8d380b186..6ee83b3e5 100644 --- a/src/platform/qt/ObjView.ui +++ b/src/platform/qt/ObjView.ui @@ -82,7 +82,7 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -173,6 +173,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -199,6 +202,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -246,6 +252,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -272,6 +281,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -283,6 +295,9 @@ +0.00 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -290,6 +305,9 @@ +1.00 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -304,6 +322,9 @@ +1.00 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -324,6 +345,9 @@ +0.00 + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -405,6 +429,9 @@ Off + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -439,6 +466,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -561,6 +591,9 @@ Normal + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -666,6 +699,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + diff --git a/src/platform/qt/PaletteView.ui b/src/platform/qt/PaletteView.ui index 9224969bf..ea1357bc0 100644 --- a/src/platform/qt/PaletteView.ui +++ b/src/platform/qt/PaletteView.ui @@ -211,6 +211,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -218,6 +221,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -225,6 +231,9 @@ 0x00 (00) + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -274,6 +283,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -284,6 +296,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + @@ -294,6 +309,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + diff --git a/src/platform/qt/ROMInfo.ui b/src/platform/qt/ROMInfo.ui index a328bbd98..aeebdad7f 100644 --- a/src/platform/qt/ROMInfo.ui +++ b/src/platform/qt/ROMInfo.ui @@ -36,7 +36,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -53,7 +53,7 @@ {TITLE} - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -70,7 +70,7 @@ {ID} - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -87,7 +87,7 @@ {SIZE} - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -104,7 +104,7 @@ {CRC} - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/src/platform/qt/ReportView.cpp b/src/platform/qt/ReportView.cpp index d21da1422..737247eba 100644 --- a/src/platform/qt/ReportView.cpp +++ b/src/platform/qt/ReportView.cpp @@ -98,6 +98,7 @@ ReportView::ReportView(QWidget* parent) QString description = m_ui.description->text(); description.replace("{projectName}", QLatin1String(projectName)); m_ui.description->setText(description); + m_ui.fileView->setFont(GBAApp::app()->monospaceFont()); connect(m_ui.fileList, &QListWidget::currentTextChanged, this, &ReportView::setShownReport); } diff --git a/src/platform/qt/ReportView.ui b/src/platform/qt/ReportView.ui index 9c7f2158c..8b6614d18 100644 --- a/src/platform/qt/ReportView.ui +++ b/src/platform/qt/ReportView.ui @@ -50,11 +50,6 @@ 0 - - - Monospace - - Qt::TextEditorInteraction From e17357a50a7442dc233e61d15b918fa6fe58e1c5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 4 Jun 2021 21:01:07 -0700 Subject: [PATCH 11/50] ARM Debugger: Fix disassembly alignment (fixes #2204) --- CHANGES | 1 + src/arm/debugger/cli-debugger.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index aef829f98..1559694e4 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Emulation fixes: - GBA Video: Revert scanline latching changes (fixes mgba.io/i/2153, mgba.io/i/2149) Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) + - ARM Debugger: Fix disassembly alignment (fixes mgba.io/i/2204) - Core: Fix memory leak in opening games from the library - Core: Fix memory searches for relative values (fixes mgba.io/i/2135) - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) diff --git a/src/arm/debugger/cli-debugger.c b/src/arm/debugger/cli-debugger.c index df3e04c1c..4df448151 100644 --- a/src/arm/debugger/cli-debugger.c +++ b/src/arm/debugger/cli-debugger.c @@ -101,9 +101,10 @@ static inline uint32_t _printLine(struct CLIDebugger* debugger, uint32_t address struct mCore* core = debugger->d.core; char disassembly[64]; struct ARMInstructionInfo info; + address &= ~(WORD_SIZE_THUMB - 1); be->printf(be, "%08X: ", address); if (mode == MODE_ARM) { - uint32_t instruction = core->busRead32(core, address); + uint32_t instruction = core->busRead32(core, address & ~(WORD_SIZE_ARM - 1)); ARMDecodeARM(instruction, &info); ARMDisassemble(&info, core->cpu, core->symbolTable, address + WORD_SIZE_ARM * 2, disassembly, sizeof(disassembly)); be->printf(be, "%08X\t%s\n", instruction, disassembly); From 02a15a72c055200cd61486538411348b820468f8 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 7 Jun 2021 18:46:45 -0700 Subject: [PATCH 12/50] Qt: Add missing EEPROM 8kB string --- src/platform/qt/OverrideView.ui | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/platform/qt/OverrideView.ui b/src/platform/qt/OverrideView.ui index 97061d6db..99e851ff9 100644 --- a/src/platform/qt/OverrideView.ui +++ b/src/platform/qt/OverrideView.ui @@ -143,7 +143,12 @@ - EEPROM + EEPROM 8kB + + + + + EEPROM 512 bytes From 3e1793d3f892c8cba92a2eea663ce5f2af5d5584 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 7 Jun 2021 18:47:22 -0700 Subject: [PATCH 13/50] GBA Savedata: Support for 64 kiB SRAM saves --- CHANGES | 1 + include/mgba/internal/gba/memory.h | 1 + include/mgba/internal/gba/savedata.h | 4 +++- src/gba/memory.c | 5 ++++ src/gba/overrides.c | 6 +++++ src/gba/savedata.c | 34 ++++++++++++++++++++++++++++ src/platform/qt/OverrideView.ui | 5 ++++ 7 files changed, 55 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 1559694e4..5408b8755 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,7 @@ Features: - Tool for converting scanned pictures of e-Reader cards to raw dotcode data - Cheat code support in homebrew ports - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks + - Support for 64 kiB SRAM saves used in some bootlegs Emulation fixes: - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) diff --git a/include/mgba/internal/gba/memory.h b/include/mgba/internal/gba/memory.h index f7d4e1eb9..59b22b457 100644 --- a/include/mgba/internal/gba/memory.h +++ b/include/mgba/internal/gba/memory.h @@ -68,6 +68,7 @@ enum { SIZE_CART1 = 0x02000000, SIZE_CART2 = 0x02000000, SIZE_CART_SRAM = 0x00008000, + SIZE_CART_SRAM512 = 0x00010000, SIZE_CART_FLASH512 = 0x00010000, SIZE_CART_FLASH1M = 0x00020000, SIZE_CART_EEPROM = 0x00002000, diff --git a/include/mgba/internal/gba/savedata.h b/include/mgba/internal/gba/savedata.h index 05cd65963..395e06b7a 100644 --- a/include/mgba/internal/gba/savedata.h +++ b/include/mgba/internal/gba/savedata.h @@ -24,7 +24,8 @@ enum SavedataType { SAVEDATA_FLASH512 = 2, SAVEDATA_FLASH1M = 3, SAVEDATA_EEPROM = 4, - SAVEDATA_EEPROM512 = 5 + SAVEDATA_EEPROM512 = 5, + SAVEDATA_SRAM512 = 6, }; enum SavedataCommand { @@ -110,6 +111,7 @@ void GBASavedataForceType(struct GBASavedata* savedata, enum SavedataType type); void GBASavedataInitFlash(struct GBASavedata* savedata); void GBASavedataInitEEPROM(struct GBASavedata* savedata); void GBASavedataInitSRAM(struct GBASavedata* savedata); +void GBASavedataInitSRAM512(struct GBASavedata* savedata); uint8_t GBASavedataReadFlash(struct GBASavedata* savedata, uint16_t address); void GBASavedataWriteFlash(struct GBASavedata* savedata, uint16_t address, uint8_t value); diff --git a/src/gba/memory.c b/src/gba/memory.c index f650881b1..a7e3ac7c9 100644 --- a/src/gba/memory.c +++ b/src/gba/memory.c @@ -717,6 +717,8 @@ uint32_t GBALoad8(struct ARMCore* cpu, uint32_t address, int* cycleCounter) { value = GBASavedataReadFlash(&memory->savedata, address); } else if (memory->hw.devices & HW_TILT) { value = GBAHardwareTiltRead(&memory->hw, address & OFFSET_MASK); + } else if (memory->savedata.type == SAVEDATA_SRAM512) { + value = memory->savedata.data[address & (SIZE_CART_SRAM512 - 1)]; } else { mLOG(GBA_MEM, GAME_ERROR, "Reading from non-existent SRAM: 0x%08X", address); value = 0xFF; @@ -1070,6 +1072,9 @@ void GBAStore8(struct ARMCore* cpu, uint32_t address, int8_t value, int* cycleCo memory->savedata.dirty |= SAVEDATA_DIRT_NEW; } else if (memory->hw.devices & HW_TILT) { GBAHardwareTiltWrite(&memory->hw, address & OFFSET_MASK, value); + } else if (memory->savedata.type == SAVEDATA_SRAM512) { + memory->savedata.data[address & (SIZE_CART_SRAM512 - 1)] = value; + memory->savedata.dirty |= SAVEDATA_DIRT_NEW; } else { mLOG(GBA_MEM, GAME_ERROR, "Writing to non-existent SRAM: 0x%08X", address); } diff --git a/src/gba/overrides.c b/src/gba/overrides.c index 2c95ada25..2e0ce10de 100644 --- a/src/gba/overrides.c +++ b/src/gba/overrides.c @@ -241,6 +241,9 @@ bool GBAOverrideFind(const struct Configuration* config, struct GBACartridgeOver if (strcasecmp(savetype, "SRAM") == 0) { found = true; override->savetype = SAVEDATA_SRAM; + } else if (strcasecmp(savetype, "SRAM512") == 0) { + found = true; + override->savetype = SAVEDATA_SRAM512; } else if (strcasecmp(savetype, "EEPROM") == 0) { found = true; override->savetype = SAVEDATA_EEPROM; @@ -288,6 +291,9 @@ void GBAOverrideSave(struct Configuration* config, const struct GBACartridgeOver case SAVEDATA_SRAM: savetype = "SRAM"; break; + case SAVEDATA_SRAM512: + savetype = "SRAM512"; + break; case SAVEDATA_EEPROM: savetype = "EEPROM"; break; diff --git a/src/gba/savedata.c b/src/gba/savedata.c index 1ae924a9f..fbae0a554 100644 --- a/src/gba/savedata.c +++ b/src/gba/savedata.c @@ -68,6 +68,9 @@ void GBASavedataDeinit(struct GBASavedata* savedata) { case SAVEDATA_SRAM: mappedMemoryFree(savedata->data, SIZE_CART_SRAM); break; + case SAVEDATA_SRAM512: + mappedMemoryFree(savedata->data, SIZE_CART_SRAM512); + break; case SAVEDATA_FLASH512: mappedMemoryFree(savedata->data, SIZE_CART_FLASH512); break; @@ -124,6 +127,8 @@ bool GBASavedataClone(struct GBASavedata* savedata, struct VFile* out) { switch (savedata->type) { case SAVEDATA_SRAM: return out->write(out, savedata->data, SIZE_CART_SRAM) == SIZE_CART_SRAM; + case SAVEDATA_SRAM512: + return out->write(out, savedata->data, SIZE_CART_SRAM512) == SIZE_CART_SRAM512; case SAVEDATA_FLASH512: return out->write(out, savedata->data, SIZE_CART_FLASH512) == SIZE_CART_FLASH512; case SAVEDATA_FLASH1M: @@ -153,6 +158,8 @@ size_t GBASavedataSize(const struct GBASavedata* savedata) { switch (savedata->type) { case SAVEDATA_SRAM: return SIZE_CART_SRAM; + case SAVEDATA_SRAM512: + return SIZE_CART_SRAM512; case SAVEDATA_FLASH512: return SIZE_CART_FLASH512; case SAVEDATA_FLASH1M: @@ -233,6 +240,9 @@ void GBASavedataForceType(struct GBASavedata* savedata, enum SavedataType type) case SAVEDATA_SRAM: GBASavedataInitSRAM(savedata); break; + case SAVEDATA_SRAM512: + GBASavedataInitSRAM512(savedata); + break; case SAVEDATA_FORCE_NONE: savedata->type = SAVEDATA_FORCE_NONE; break; @@ -322,6 +332,30 @@ void GBASavedataInitSRAM(struct GBASavedata* savedata) { } } +void GBASavedataInitSRAM512(struct GBASavedata* savedata) { + if (savedata->type == SAVEDATA_AUTODETECT) { + savedata->type = SAVEDATA_SRAM512; + } else { + mLOG(GBA_SAVE, WARN, "Can't re-initialize savedata"); + return; + } + off_t end; + if (!savedata->vf) { + end = 0; + savedata->data = anonymousMemoryMap(SIZE_CART_SRAM512); + } else { + end = savedata->vf->size(savedata->vf); + if (end < SIZE_CART_SRAM512) { + savedata->vf->truncate(savedata->vf, SIZE_CART_SRAM512); + } + savedata->data = savedata->vf->map(savedata->vf, SIZE_CART_SRAM512, savedata->mapMode); + } + + if (end < SIZE_CART_SRAM512) { + memset(&savedata->data[end], 0xFF, SIZE_CART_SRAM512 - end); + } +} + uint8_t GBASavedataReadFlash(struct GBASavedata* savedata, uint16_t address) { if (savedata->command == FLASH_COMMAND_ID) { if (savedata->type == SAVEDATA_FLASH512) { diff --git a/src/platform/qt/OverrideView.ui b/src/platform/qt/OverrideView.ui index 99e851ff9..e1e84927c 100644 --- a/src/platform/qt/OverrideView.ui +++ b/src/platform/qt/OverrideView.ui @@ -151,6 +151,11 @@ EEPROM 512 bytes + + + SRAM 64kB (bootlegs only) + + From 588186531c7e377a09db597680129f17b06bcabc Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 10 Jun 2021 00:05:58 -0700 Subject: [PATCH 14/50] CMake: MacOS cleanup --- CMakeLists.txt | 3 +-- src/platform/sdl/CMakeLists.txt | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e88968bf..9a5c61b0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -582,8 +582,7 @@ if(USE_FFMPEG) set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "libavcodec-extra|libavcodec-ffmpeg-extra${LIBAVCODEC_VERSION_MAJOR}") endif() if(APPLE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework VideoDecodeAcceleration -framework CoreVideo") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework VideoDecodeAcceleration -framework CoreVideo") + list(APPEND DEPENDENCY_LIB "-framework VideoDecodeAcceleration" "-framework CoreVideo") endif() endif() diff --git a/src/platform/sdl/CMakeLists.txt b/src/platform/sdl/CMakeLists.txt index 9dcf74704..8f5e394ed 100644 --- a/src/platform/sdl/CMakeLists.txt +++ b/src/platform/sdl/CMakeLists.txt @@ -48,8 +48,10 @@ endif() if(WIN32) list(APPEND SDL_LIBRARY imm32 setupapi version winmm) elseif(APPLE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AppKit -framework AudioUnit -framework Carbon -framework CoreAudio -framework AudioToolbox -framework ForceFeedback -framework IOKit") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" PARENT_SCOPE) + list(APPEND SDL_LIBRARY "-framework AppKit" "-framework AudioUnit" "-framework Carbon" "-framework CoreAudio" "-framework AudioToolbox" "-framework ForceFeedback" "-framework IOKit") + if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "10.13") + list(APPEND SDL_LIBRARY "-framework Metal") + endif() endif() if(NOT SDLMAIN_LIBRARY) From d85589b837c29b8a48c7e24d43f8f989b23ef59a Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 10 Jun 2021 00:08:14 -0700 Subject: [PATCH 15/50] Core: Fix portable mode on macOS --- CHANGES | 1 + CMakeLists.txt | 1 + src/core/config.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/CHANGES b/CHANGES index 5408b8755..246bdec53 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ Other fixes: - ARM Debugger: Fix disassembly alignment (fixes mgba.io/i/2204) - Core: Fix memory leak in opening games from the library - Core: Fix memory searches for relative values (fixes mgba.io/i/2135) + - Core: Fix portable mode on macOS - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Qt: Fix infrequent deadlock when using sync to video diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a5c61b0f..115fcd552 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -228,6 +228,7 @@ endif() if(APPLE) add_definitions(-D_DARWIN_C_SOURCE) + list(APPEND OS_LIB "-framework Foundation") if(CMAKE_SYSTEM_VERSION VERSION_GREATER "10.5.8") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.6") endif() diff --git a/src/core/config.c b/src/core/config.c index 5a9599c4e..9f54aca26 100644 --- a/src/core/config.c +++ b/src/core/config.c @@ -19,6 +19,12 @@ #include #endif +#ifdef __APPLE__ +#include +#include +#include +#endif + #ifdef PSP2 #include #endif @@ -274,6 +280,16 @@ void mCoreConfigPortablePath(char* out, size_t outLength) { out[0] = '\0'; #else getcwd(out, outLength); +#ifdef __APPLE__ + CFBundleRef mainBundle = CFBundleGetMainBundle(); + if (strcmp(out, "/") == 0 && mainBundle) { + CFURLRef url = CFBundleCopyBundleURL(mainBundle); + CFURLRef suburl = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorDefault, url); + CFRelease(url); + CFURLGetFileSystemRepresentation(suburl, true, (UInt8*) out, outLength); + CFRelease(suburl); + } +#endif strncat(out, PATH_SEP "portable.ini", outLength - strlen(out)); #endif } From b97f97159d245d7d6a898218e73633bcdc1161f6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 12 Jun 2021 17:07:32 -0700 Subject: [PATCH 16/50] Qt: Fix having to press controller buttons twice for menu items (fixes #2143) --- CHANGES | 1 + src/platform/qt/ActionMapper.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 246bdec53..6e3e90581 100644 --- a/CHANGES +++ b/CHANGES @@ -21,6 +21,7 @@ Other fixes: - Qt: Fix infrequent deadlock when using sync to video - Qt: Fix applying savetype-only overrides - Qt: Fix crash in sprite view for partially out-of-bounds sprites (fixes mgba.io/i/2165) + - Qt: Fix having to press controller buttons twice for menu items (fixes mgba.io/i/2143) - Util: Fix loading UPS patches that affect the last byte of the file Misc: - Core: Suspend runloop when a core crashes diff --git a/src/platform/qt/ActionMapper.cpp b/src/platform/qt/ActionMapper.cpp index bdd2065cc..a0d80a0d1 100644 --- a/src/platform/qt/ActionMapper.cpp +++ b/src/platform/qt/ActionMapper.cpp @@ -87,7 +87,13 @@ void ActionMapper::rebuildMenu(const QString& menu, QMenu* qmenu, QWidget* conte } }); QObject::connect(action, &Action::enabled, qaction, &QAction::setEnabled); - QObject::connect(action, &Action::activated, qaction, &QAction::setChecked); + QObject::connect(action, &Action::activated, [qaction, action](bool active) { + if (qaction->isCheckable()) { + qaction->setChecked(active); + } else if (active) { + action->setActive(false); + } + }); QObject::connect(action, &Action::destroyed, qaction, &QAction::deleteLater); if (shortcut) { QObject::connect(shortcut, &Shortcut::shortcutChanged, qaction, [qaction](int shortcut) { From 9cddd4d0061cab9a8bf5ed8d63b639d629f5e67d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 12 Jun 2021 22:17:26 -0700 Subject: [PATCH 17/50] CMake: Fix macOS version detection --- CMakeLists.txt | 2 +- src/platform/sdl/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 115fcd552..c1b987826 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -229,7 +229,7 @@ endif() if(APPLE) add_definitions(-D_DARWIN_C_SOURCE) list(APPEND OS_LIB "-framework Foundation") - if(CMAKE_SYSTEM_VERSION VERSION_GREATER "10.5.8") + if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "10.0") # Darwin 10.x is Mac OS X 10.6 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.6") endif() endif() diff --git a/src/platform/sdl/CMakeLists.txt b/src/platform/sdl/CMakeLists.txt index 8f5e394ed..107761d8c 100644 --- a/src/platform/sdl/CMakeLists.txt +++ b/src/platform/sdl/CMakeLists.txt @@ -49,7 +49,7 @@ if(WIN32) list(APPEND SDL_LIBRARY imm32 setupapi version winmm) elseif(APPLE) list(APPEND SDL_LIBRARY "-framework AppKit" "-framework AudioUnit" "-framework Carbon" "-framework CoreAudio" "-framework AudioToolbox" "-framework ForceFeedback" "-framework IOKit") - if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "10.13") + if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "17.0") # Darwin 17.x is macOS 10.13 list(APPEND SDL_LIBRARY "-framework Metal") endif() endif() From 0c1dd64e5b48644273626dd701554558491b4eb7 Mon Sep 17 00:00:00 2001 From: Lothar Serra Mari Date: Sun, 13 Jun 2021 09:21:39 +0200 Subject: [PATCH 18/50] Qt: Update German GUI translation --- src/platform/qt/ts/mgba-de.ts | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/platform/qt/ts/mgba-de.ts b/src/platform/qt/ts/mgba-de.ts index a2fddfcb5..128520214 100644 --- a/src/platform/qt/ts/mgba-de.ts +++ b/src/platform/qt/ts/mgba-de.ts @@ -41,12 +41,12 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Open in archive... - In Archiv öffnen … + In Archiv öffnen … Loading... - Laden … + Laden … @@ -54,12 +54,12 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Tile # - Tile Nr. + Tile # Palette # - Palette Nr. + Palette # @@ -1056,7 +1056,7 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Palette preset - + Paletten-Voreinstellung @@ -4191,7 +4191,7 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Convert e-Reader card image to raw... - Lesegerät-Kartenbild in Rohdaten umwandeln … + Lesegerät-Kartenbild in Rohdaten umwandeln … @@ -5281,37 +5281,37 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Default color palette only - + Nur Standard-Farbpalette SGB color palette if available - + SGB-Farbpalette, sofern verfügbar GBC color palette if available - + GBC-Farbpalette, sofern verfügbar SGB (preferred) or GBC color palette if available - + SGB (bevorzugt) oder GBC-Farbpalette, sofern verfügbar Game Boy Camera - + Game Boy Camera Driver: - + Treiber: Source: - + Quelle: @@ -5372,42 +5372,42 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Models - + Modelle GB only: - + Nur GB: SGB compatible: - + SGB-kompatibel: GBC only: - + Nur GBC: GBC compatible: - + GBC-kompatibel: SGB and GBC compatible: - + SGB- und GBC-kompatibel: Game Boy palette - + Game Boy-Palette Preset: - + Voreinstellungen: @@ -5462,7 +5462,7 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd. Enable VBA bug compatibility in ROM hacks - + VBA-Bug-Kompatibilität in ROM-Hacks aktivieren From 8c3f7eb22808aa360873b07840b6c633a01b2d86 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 15 Jun 2021 20:42:48 -0700 Subject: [PATCH 19/50] GBA SIO: Fix missing interrupt on an unattached NORMAL transfer --- CHANGES | 1 + src/gba/sio/lockstep.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 6e3e90581..5b7a317f1 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ Features: Emulation fixes: - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) + - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer - GBA Video: Revert scanline latching changes (fixes mgba.io/i/2153, mgba.io/i/2149) Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) diff --git a/src/gba/sio/lockstep.c b/src/gba/sio/lockstep.c index 5cac226a1..e243e5f86 100644 --- a/src/gba/sio/lockstep.c +++ b/src/gba/sio/lockstep.c @@ -442,11 +442,22 @@ static void _GBASIOLockstepNodeProcessEvents(struct mTiming* timing, void* user, struct GBASIOLockstepNode* node = user; mLockstepLock(&node->p->d); - int32_t cycles = 0; + int32_t cycles = cycles = node->nextEvent; node->nextEvent -= cyclesLate; node->eventDiff += cyclesLate; if (node->p->d.attached < 2) { - cycles = GBASIOCyclesPerTransfer[GBASIOMultiplayerGetBaud(node->d.p->siocnt)][0]; + switch (node->mode) { + case SIO_MULTI: + cycles = GBASIOCyclesPerTransfer[GBASIOMultiplayerGetBaud(node->d.p->siocnt)][0]; + break; + case SIO_NORMAL_8: + case SIO_NORMAL_32: + if (node->nextEvent <= 0) { + cycles = _masterUpdate(node); + node->eventDiff = 0; + } + break; + } } else if (node->nextEvent <= 0) { if (!node->id) { cycles = _masterUpdate(node); @@ -455,8 +466,6 @@ static void _GBASIOLockstepNodeProcessEvents(struct mTiming* timing, void* user, cycles += node->p->d.useCycles(&node->p->d, node->id, node->eventDiff); } node->eventDiff = 0; - } else { - cycles = node->nextEvent; } if (cycles > 0) { node->nextEvent = 0; From ed23ae3ef76c05cee93fa40c5545ec97561403fd Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 15 Jun 2021 20:44:24 -0700 Subject: [PATCH 20/50] GBA SIO: Fix SI value for unattached MULTI mode --- CHANGES | 1 + src/gba/sio/lockstep.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 5b7a317f1..b04428adc 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Emulation fixes: - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer + - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Revert scanline latching changes (fixes mgba.io/i/2153, mgba.io/i/2149) Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) diff --git a/src/gba/sio/lockstep.c b/src/gba/sio/lockstep.c index e243e5f86..7cb2d858a 100644 --- a/src/gba/sio/lockstep.c +++ b/src/gba/sio/lockstep.c @@ -179,10 +179,14 @@ static uint16_t GBASIOLockstepNodeMultiWriteRegister(struct GBASIODriver* driver mLOG(GBA_SIO, DEBUG, "Lockstep %i: SIOCNT <- %04X", node->id, value); enum mLockstepPhase transferActive; + int attached; ATOMIC_LOAD(transferActive, node->p->d.transferActive); + ATOMIC_LOAD(attached, node->p->d.attached); + + driver->p->siocnt = GBASIOMultiplayerSetSlave(driver->p->siocnt, node->id || attached < 2); if (value & 0x0080 && transferActive == TRANSFER_IDLE) { - if (!node->id && GBASIOMultiplayerIsReady(node->d.p->siocnt)) { + if (!node->id && attached > 1 && GBASIOMultiplayerIsReady(node->d.p->siocnt)) { mLOG(GBA_SIO, DEBUG, "Lockstep %i: Transfer initiated", node->id); ATOMIC_STORE(node->p->d.transferActive, TRANSFER_STARTING); ATOMIC_STORE(node->p->d.transferCycles, GBASIOCyclesPerTransfer[GBASIOMultiplayerGetBaud(node->d.p->siocnt)][node->p->d.attached - 1]); From f1bc1b1fa95f168042abe4a0ca51339908fee34f Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Mon, 31 May 2021 00:37:01 +0000 Subject: [PATCH 21/50] Qt: Update translation (Portuguese (Brazil)) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/pt_BR/ --- src/platform/qt/ts/mgba-pt_BR.ts | 68 ++++++++++++++++---------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 6fb8b459b..dd6b00d5d 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -28,12 +28,12 @@ © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 Game Boy Advance is a registered trademark of Nintendo Co., Ltd. © 2013 – {year} Jeffrey Pfau, licenciado sob a Licença Pública do Mozilla, versão 2.0 -O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. +Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. {projectName} is an open-source Game Boy Advance emulator - O {projectName} é um emulador de Game Boy Advance de código fonte aberto + {projectName} é um emulador de Game Boy Advance de código fonte aberto @@ -87,7 +87,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. BattleChip Gate - Portal do BattleChip + BattleChip Gate @@ -122,7 +122,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Gate type - Tipo de portal + Tipo de Gate @@ -157,7 +157,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Show advanced - Mostrar as avançadas + Mostrar opções avançadas @@ -274,12 +274,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Backdrop color - Cor do cenário + Cor de fundo Disable scanline effects - Desativar efeitos scanline + Desativar efeitos de scanline @@ -302,7 +302,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Loop - Repetição + Repetir animação @@ -549,7 +549,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Memory Range - Salvar o Alcance de Memória + Salvar Faixa de Memória @@ -559,12 +559,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Byte Count: - Contagem dos Bytes: + Quantidade de Bytes: Dump across banks - Dumpar através dos bancos + Salvar através de vários bancos @@ -572,7 +572,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Memory Search - Busca na Memória + Pesquisa de Memória @@ -613,7 +613,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. 1 Byte (8-bit) - 1 Byte (8 bit) + 1 Byte (8 bits) @@ -638,7 +638,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search type - Tipo de busca + Tipo de pesquisa @@ -658,17 +658,17 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unknown/changed - Desconhecido/mudado + Desconhecido/alterado Changed by value - Mudado pelo valor + Alterado por quantia Unchanged - Sem mudanças + Sem mudança @@ -683,12 +683,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Search ROM - Procurar ROM + Procurar na ROM New Search - Nova Busca + Nova Pesquisa @@ -699,12 +699,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Guess - Palpite + Detectar Search Within - Procurar Internamente + Pesquisar nos Resultados @@ -752,12 +752,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Unsigned Integer: - Integral Não Assinado: + Inteiro sem sinal: Signed Integer: - Integral Assinado: + Inteiro com sinal: @@ -787,7 +787,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Save Range - Salvar Alcance + Salvar Intervalo @@ -830,7 +830,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Off - Desligado + Não @@ -905,7 +905,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile - Mosaico + Ladrilho @@ -956,7 +956,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Realtime clock - Relógio em tempo real + Relógio de tempo real @@ -1046,12 +1046,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite Colors 1 - Cores da Imagem Móvel 1 + Cores de Sprite 1 Sprite Colors 2 - Cores da Imagem Móvel 2 + Cores de Sprite 2 @@ -1325,7 +1325,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite - Imagem móvel + Sprite @@ -3276,7 +3276,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Sprite ordering - Ordenação da imagem móvel + Ordenação de sprites @@ -3674,7 +3674,7 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export sprite - Exportar imagem móvel + Exportar sprite @@ -5707,12 +5707,12 @@ O Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Default sprite colors 1: - Cores padrão da imagem móvel 1: + Cores padrão de sprite 1: Default sprite colors 2: - Cores padrão da imagem móvel 2: + Cores padrão de sprite 2: From 61cfbb3c9225e95b9247e728f98a62273e170f67 Mon Sep 17 00:00:00 2001 From: Felipe Date: Sun, 30 May 2021 21:35:25 +0000 Subject: [PATCH 22/50] Qt: Update translation (Portuguese (Brazil)) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/pt_BR/ --- src/platform/qt/ts/mgba-pt_BR.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index dd6b00d5d..7fb2d2944 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -1432,7 +1432,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - Formato da Intermudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos Portáteis da Rede Animada (*.png *.apng) + Formato da Inter-mudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos da Rede Portátil Animada (*.png *.apng) @@ -2707,7 +2707,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Select - Select + Selecionar From bd5692fdc1d24a092ff27fdbb1c617f21b613cc8 Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Mon, 31 May 2021 00:51:43 +0000 Subject: [PATCH 23/50] Qt: Update translation (Portuguese (Brazil)) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/pt_BR/ --- src/platform/qt/ts/mgba-pt_BR.ts | 44 ++++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 7fb2d2944..e1325d190 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -54,7 +54,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile # - Mosaico # + Ladrilho # @@ -1432,7 +1432,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - Formato da Inter-mudança dos Gráficos (*.gif);;WebP ( *.webp);;Gráficos da Rede Portátil Animada (*.png *.apng) + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) @@ -1445,17 +1445,17 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Mode 0: 4 tile layers - Modo 0: 4 camadas dos mosaicos + Modo 0: 4 camadas de ladrilhos Mode 1: 2 tile layers + 1 rotated/scaled tile layer - Modo 1: 2 camadas dos mosaicos + 1 camada dos mosaicos rotacionada/dimensionada + Modo 1: 2 camadas de ladrilhos + 1 camada de ladrilhos rotacionada/redimensionada Mode 2: 2 rotated/scaled tile layers - Modo 2: 2 camadas dos mosaicos rotacionada/dimensionada + Modo 2: 2 camadas de ladrilhos rotacionadas/redimensionadas @@ -1596,7 +1596,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile data base (* 16kB) - Base dos dados do mosaicos (* 16 kBs) + Base dos dados de ladrilhos (* 16 kB) @@ -1604,7 +1604,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Enable mosaic - Ativar mosaico + Ativar efeito mosaico @@ -1620,7 +1620,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile map base (* 2kB) - Base do mapa dos mosaicos (* 2 kBs) + Base do mapa de ladrilhos (* 2 kB) @@ -1847,22 +1847,22 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background mosaic size vertical - Tamanho vertical do mosaico do 2º plano + Tamanho vertical do mosaico do plano de fundo Background mosaic size horizontal - Tamanho horizontal do mosaico do 2º plano + Tamanho horizontal do mosaico do plano de fundo Object mosaic size vertical - Tamanho vertical do mosaico do objeto + Tamanho vertical do mosaico de objetos Object mosaic size horizontal - Tamanho horizontal do mosaico do objeto + Tamanho horizontal do mosaico de objetos @@ -2947,7 +2947,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Gamepak prefetch - Pré-busca do Gamepak + Pré-carga do Gamepak @@ -3071,7 +3071,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background tile map - Mapa dos mosaicos do 2º plano + Mapa de ladrilhos do plano de fundo @@ -3088,7 +3088,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Background tile data - Dados do mosaicos do 2º plano + Dados de ladrilhos do plano de fundo @@ -3108,7 +3108,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Window tile map - Mapa dos mosaicos da janela + Mapa de ladrilhos da janela @@ -3455,7 +3455,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tile base - Base do mosaico + Base dos ladrilhos @@ -3961,7 +3961,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export tiles - Exportar mosaico + Exportar ladrilhos @@ -3972,7 +3972,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Export tile - Exportar mosaico + Exportar ladrilho @@ -4648,7 +4648,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. View &tiles... - Visualizar &mosaicos... + Visualizar &ladrilhos... @@ -5781,7 +5781,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles - Mosaicos + Ladrilhos @@ -5806,7 +5806,7 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. Tiles per row - Mosaicos por linha + Ladrilhos por linha From 3e194b59d9155ef141e78bee59aa099b83f0b5bd Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 15 Jun 2021 20:47:27 -0700 Subject: [PATCH 24/50] Qt: Update translation (Malay) Currently translated at 55.4% (593 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/ms/ --- src/platform/qt/ts/mgba-ms.ts | 6027 +++++++++++++++++++++++++++++++++ 1 file changed, 6027 insertions(+) create mode 100644 src/platform/qt/ts/mgba-ms.ts diff --git a/src/platform/qt/ts/mgba-ms.ts b/src/platform/qt/ts/mgba-ms.ts new file mode 100644 index 000000000..2d1834779 --- /dev/null +++ b/src/platform/qt/ts/mgba-ms.ts @@ -0,0 +1,6027 @@ + + + + + AboutScreen + + + About + Perihal + + + + <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> + <a href="http://mgba.io/">Laman Web</a> • <a href="https://forums.mgba.io/">Forum / Bantuan</a> • <a href="https://patreon.com/mgba">Derma</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Kod Sumber</a> + + + + Branch: <tt>{gitBranch}</tt><br/>Revision: <tt>{gitCommit}</tt> + + + + + {projectName} would like to thank the following patrons from Patreon: + {projectName} ingin mengucapkan terima kasih kepada para penaung dari Patreon: + + + + © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 +Game Boy Advance is a registered trademark of Nintendo Co., Ltd. + + + + + {projectName} is an open-source Game Boy Advance emulator + {projectName} adalah sebuah pelagak Game Boy Advance sumber terbuka + + + + ArchiveInspector + + + Open in archive... + Buka dalam arkib... + + + + Loading... + Memuatkan... + + + + AssetTile + + + Tile # + Jubin # + + + + Palette # + Palet # + + + + Address + Alamat + + + + Red + Merah + + + + Green + Hijau + + + + Blue + Biru + + + + BattleChipView + + + BattleChip Gate + BattleChip Gate + + + + Chip name + Nama Chip + + + + Insert + Memasukkan + + + + Save + Simpan + + + + Load + Muat + + + + Add + Tambah + + + + Remove + Buang + + + + Gate type + Jenis Gate + + + + Ba&ttleChip Gate + Ba&ttleChip Gate + + + + Progress &Gate + Progress &Gate + + + + Beast &Link Gate + Beast &Link Gate + + + + Inserted + Dimasukkan + + + + Chip ID + + + + + Update Chip data + Kemaskini data Chip + + + + Show advanced + Lanjutan + + + + CheatsView + + + Cheats + Tipuan + + + + Remove + Buang + + + + Save + Simpan + + + + Load + Muat + + + + Add New Set + Tambah Set Baru + + + + Add + Tambah + + + + Enter codes here... + Masuk kod di sini... + + + + DebuggerConsole + + + Debugger + Penyahpepijat + + + + Enter command (try `help` for more info) + Masuk perintah (cuba `help` untuk maklumat lanjut) + + + + Break + + + + + DolphinConnector + + + Connect to Dolphin + Sambung ke Dolphin + + + + Local computer + Komputer lokal + + + + IP address + Alamat IP + + + + Connect + Sambung + + + + Disconnect + Putus + + + + Close + Tutup + + + + Reset on connect + Tetap semula pada sambungan + + + + FrameView + + + Inspect frame + Periksa bingkai + + + + Magnification + Pembesaran + + + + Freeze frame + Bingkai beku + + + + Backdrop color + + + + + Disable scanline effects + + + + + Export + Eksport + + + + Reset + Tetap semula + + + + GIFView + + + Record GIF/WebP/APNG + Rakam GIF/WebP/APNG + + + + Loop + Gelung + + + + Start + Mula + + + + Stop + Henti + + + + Select File + Pilih Fail + + + + APNG + APNG + + + + GIF + GIF + + + + WebP + WebP + + + + Frameskip + Langkauan bingkai + + + + IOViewer + + + I/O Viewer + Pelihat I/O + + + + 0x0000 + 0x0000 + + + + B + B + + + + LibraryTree + + + Name + Nama + + + + Location + Lokasi + + + + Platform + Platform + + + + Size + Saiz + + + + CRC32 + CRC32 + + + + LoadSaveState + + + + %1 State + Keadaan %1 + + + + + + + + + + + + No Save + Tiada Simpanan + + + + 5 + 5 + + + + 6 + 6 + + + + 8 + 8 + + + + 4 + 4 + + + + 1 + 1 + + + + 3 + 3 + + + + 7 + 7 + + + + 9 + 9 + + + + 2 + 2 + + + + Cancel + Batal + + + + LogView + + + Logs + Log + + + + Enabled Levels + + + + + Debug + Nyahpepijat + + + + Stub + + + + + Info + Maklumat + + + + Warning + Amaran + + + + Error + Ralat + + + + Fatal + + + + + Game Error + Ralat Permainan + + + + Advanced settings + Lanjutan + + + + Clear + Kosongkan + + + + Max Lines + + + + + MapView + + + Maps + Peta + + + + Magnification + Pembesaran + + + + Export + Eksport + + + + Copy + Salin + + + + MemoryDump + + + Save Memory Range + Simpan Julat Ingatan + + + + Start Address: + Alamat Permulaan: + + + + Byte Count: + Bilangan Bait: + + + + Dump across banks + + + + + MemorySearch + + + Memory Search + Cari Ingatan + + + + Address + Alamat + + + + Current Value + Nilai Semasa + + + + + Type + Jenis + + + + Value + Nilai + + + + Numeric + Angka + + + + Text + Teks + + + + Width + Lebar + + + + + Guess + Teka + + + + 1 Byte (8-bit) + 1 Bait (8-bit) + + + + 2 Bytes (16-bit) + 2 Bait (16-bit) + + + + 4 Bytes (32-bit) + 4 Bait (32-bit) + + + + Number type + Jenis Angka + + + + Decimal + Perpuluhan + + + + Hexadecimal + Perenambelasan + + + + Search type + Jenis carian + + + + Equal to value + Sama dgn nilai + + + + Greater than value + Lebih dari nilai + + + + Less than value + Kurang dari nilai + + + + Unknown/changed + Tdk diketahui/terubah + + + + Changed by value + + + + + Unchanged + Tidak diubah + + + + Increased + Bertambah + + + + Decreased + Berkurang + + + + Search ROM + Cari ROM + + + + New Search + Carian Baru + + + + Search Within + Cari Dalam + + + + Open in Memory Viewer + Buka dalam Pelihat Ingatan + + + + Refresh + Segar Semula + + + + MemoryView + + + Memory + Ingatan + + + + Inspect Address: + Periksa Alamat: + + + + Set Alignment: + Penjajaran: + + + + &1 Byte + &1 Bait + + + + &2 Bytes + &2 Bait + + + + &4 Bytes + &4 Bait + + + + Unsigned Integer: + Integer tanpa tanda: + + + + Signed Integer: + Integer tanda: + + + + String: + Rentetan: + + + + Load TBL + Muat TBL + + + + Copy Selection + Salin Pilihan + + + + Paste + Tampal + + + + Save Selection + Simpan Pilihan + + + + Save Range + Simpan Julat + + + + Load + Muat + + + + ObjView + + + Sprites + + + + + Address + Alamat + + + + Copy + Salin + + + + Magnification + Pembesaran + + + + Geometry + Geometri + + + + Position + Kedudukan + + + + , + , + + + + Dimensions + Matra + + + + × + × + + + + Matrix + Matriks + + + + Export + Eksport + + + + Attributes + Ciri-ciri + + + + Transform + Jelmaan + + + + Off + + + + + Palette + Palet + + + + Double Size + + + + + + + + Return, Ctrl+R + Kembali, Ctrl+R + + + + Flipped + + + + + H + Short for horizontal + + + + + V + Short for vertical + + + + + Mode + Mod + + + + Normal + Biasa + + + + Mosaic + Mozek + + + + Enabled + + + + + Priority + + + + + Tile + Jubin + + + + OverrideView + + + Game Overrides + + + + + Game Boy Advance + Game Boy Advance + + + + + + + Autodetect + Autokesan + + + + Realtime clock + + + + + Gyroscope + + + + + Tilt + + + + + Light sensor + + + + + Rumble + + + + + Save type + + + + + None + + + + + SRAM + + + + + Flash 512kb + + + + + Flash 1Mb + + + + + EEPROM + + + + + Idle loop + + + + + Game Boy Player features + + + + + VBA bug compatibility mode + + + + + Game Boy + + + + + Game Boy model + + + + + Memory bank controller + + + + + Background Colors + + + + + Sprite Colors 1 + + + + + Sprite Colors 2 + + + + + Palette preset + + + + + PaletteView + + + Palette + Palet + + + + Background + Latar belakang + + + + Objects + Objek + + + + Selection + Pilihan + + + + Red + Merah + + + + Green + Hijau + + + + Blue + Biru + + + + 16-bit value + Nilai 16-bit + + + + Hex code + Kod per-16-an + + + + Palette index + Indeks palet + + + + Export BG + Eksport LB + + + + Export OBJ + Eksport OBJ + + + + PlacementControl + + + Adjust placement + Melaras peletakan + + + + All + Semua + + + + Offset + Ofset + + + + X + X + + + + Y + Y + + + + PrinterView + + + Game Boy Printer + Pencetak Game Boy + + + + Hurry up! + Cepat! + + + + Tear off + + + + + Magnification + Pembesaran + + + + Copy + Salin + + + + QGBA::AboutScreen + + + 2021 + 2021 + + + + QGBA::AssetTile + + + %0%1%2 + %0%1%2 + + + + + + 0x%0 (%1) + 0x%0 (%1) + + + + QGBA::CheatsModel + + + (untitled) + (tidak bertajuk) + + + + Failed to open cheats file: %1 + Gagal membuka fail tipu: %1 + + + + QGBA::CheatsView + + + + Add GameShark + Tambah GameShark + + + + Add Pro Action Replay + Tambah Pro Action Replay + + + + Add CodeBreaker + Tambah CodeBreaker + + + + Add GameGenie + Tambah GameGenie + + + + + Select cheats file + Pilih fail tipu + + + + QGBA::CoreController + + + Failed to open save file: %1 + Gagal membuka fail tersimpan: %1 + + + + Failed to open game file: %1 + Gagal membuka fail permainan: %1 + + + + Can't yank pack in unexpected platform! + + + + + Failed to open snapshot file for reading: %1 + Gagal membuka fail snapshot untuk baca: %1 + + + + Failed to open snapshot file for writing: %1 + Gagal membuka fail snapshot untuk menulis: %1 + + + + QGBA::CoreManager + + + Failed to open game file: %1 + Gagal membuka fail permainan: %1 + + + + Could not load game. Are you sure it's in the correct format? + Gagal memuat permainan. Adakah ia dalam format betul? + + + + Failed to open save file. Is the save directory writable? + Gagal membuka fail tersimpan. Adakah direktori simpanan diboleh-tulis? + + + + QGBA::FrameView + + + Export frame + Eksport bingkai + + + + Portable Network Graphics (*.png) + Grafik Rangkaian Mudah Alih (*.png) + + + + None + Tiada + + + + Background + Latar belakang + + + + Window + Tetingkap + + + + Objwin + Objwin + + + + Sprite + + + + + Backdrop + + + + + Frame + Bingkai + + + + %1 %2 + %1 %2 + + + + QGBA::GBAApp + + + Enable Discord Rich Presence + Dayakan Discord Rich Presence + + + + QGBA::GBAKeyEditor + + + Clear Button + + + + + Clear Analog + + + + + Refresh + Segar Semula + + + + Set all + + + + + QGBA::GDBWindow + + + Server settings + Tetapan pelayan + + + + Local port + Port lokal + + + + Bind address + Alamat terikat + + + + Break + + + + + Stop + Henti + + + + Start + Mula + + + + Crash + Nahas + + + + Could not start GDB server + Tidak dapat memulakan pelayan GDB + + + + QGBA::GIFView + + + Failed to open output file: %1 + Gagal membuka fail output: %1 + + + + Select output file + Pilih fail output + + + + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) + Format Saling Tukar Grafik (*.gif);;WebP ( *.webp);;Grafik Rangkaian Animasi Mudah Alih (*.png *.apng) + + + + QGBA::IOViewer + + + Background mode + Mod latar belakang + + + + Mode 0: 4 tile layers + Mod 0: 4 lapisan jubin + + + + Mode 1: 2 tile layers + 1 rotated/scaled tile layer + Mod 1: 2 lapisan jubin + 1 lapisan jubin terputar/terskala + + + + Mode 2: 2 rotated/scaled tile layers + Mod 2: 2 lapisan jubin terputar/terskala + + + + Mode 3: Full 15-bit bitmap + Mod 3: Bitmap 15-bit penuh + + + + Mode 4: Full 8-bit bitmap + Mod 4: Bitmap 8-bit penuh + + + + Mode 5: Small 15-bit bitmap + Mod 5: Bitmap 15-bit kecil + + + + CGB Mode + Mod CGB + + + + Frame select + Pilihan Bingkai + + + + Unlocked HBlank + + + + + Linear OBJ tile mapping + Pemetaan jubin OBJ linear + + + + Force blank screen + Paksa skrin kosong + + + + Enable background 0 + + + + + Enable background 1 + + + + + Enable background 2 + + + + + Enable background 3 + + + + + Enable OBJ + + + + + Enable Window 0 + + + + + Enable Window 1 + + + + + Enable OBJ Window + + + + + Swap green components + + + + + Currently in VBlank + + + + + Currently in HBlank + + + + + Currently in VCounter + + + + + Enable VBlank IRQ generation + + + + + Enable HBlank IRQ generation + + + + + Enable VCounter IRQ generation + + + + + VCounter scanline + + + + + Current scanline + + + + + + + + Priority + + + + + + + + Tile data base (* 16kB) + + + + + + + + Enable mosaic + + + + + + + + Enable 256-color + + + + + + + + Tile map base (* 2kB) + + + + + + + + Background dimensions + + + + + + Overflow wraps + + + + + + + + + + Horizontal offset + + + + + + + + + + Vertical offset + + + + + + + + + + + + + + + + Fractional part + + + + + + + + + + + + Integer part + + + + + + + + Integer part (low) + + + + + + + + Integer part (high) + + + + + + End x + + + + + + Start x + + + + + + End y + + + + + + Start y + + + + + Window 0 enable BG 0 + + + + + Window 0 enable BG 1 + + + + + Window 0 enable BG 2 + + + + + Window 0 enable BG 3 + + + + + Window 0 enable OBJ + + + + + Window 0 enable blend + + + + + Window 1 enable BG 0 + + + + + Window 1 enable BG 1 + + + + + Window 1 enable BG 2 + + + + + Window 1 enable BG 3 + + + + + Window 1 enable OBJ + + + + + Window 1 enable blend + + + + + Outside window enable BG 0 + + + + + Outside window enable BG 1 + + + + + Outside window enable BG 2 + + + + + Outside window enable BG 3 + + + + + Outside window enable OBJ + + + + + Outside window enable blend + + + + + OBJ window enable BG 0 + + + + + OBJ window enable BG 1 + + + + + OBJ window enable BG 2 + + + + + OBJ window enable BG 3 + + + + + OBJ window enable OBJ + + + + + OBJ window enable blend + + + + + Background mosaic size vertical + + + + + Background mosaic size horizontal + + + + + Object mosaic size vertical + + + + + Object mosaic size horizontal + + + + + BG 0 target 1 + + + + + BG 1 target 1 + + + + + BG 2 target 1 + + + + + BG 3 target 1 + + + + + OBJ target 1 + + + + + Backdrop target 1 + + + + + Blend mode + + + + + Disabled + + + + + Additive blending + + + + + Brighten + + + + + Darken + + + + + BG 0 target 2 + + + + + BG 1 target 2 + + + + + BG 2 target 2 + + + + + BG 3 target 2 + + + + + OBJ target 2 + + + + + Backdrop target 2 + + + + + Blend A (target 1) + + + + + Blend B (target 2) + + + + + Blend Y + + + + + + Sweep shifts + + + + + + Sweep subtract + + + + + + Sweep time (in 1/128s) + + + + + + + + + + + + Sound length + + + + + + + + Duty cycle + + + + + + + + + + Envelope step time + + + + + + + + + + Envelope increase + + + + + + + + + + Initial volume + + + + + + + Sound frequency + + + + + + + + + + + + Timed + + + + + + + + + + + + Reset + + + + + Double-size wave table + + + + + Active wave table + + + + + + Enable channel 3 + + + + + + Volume + + + + + + 0% + + + + + + + 100% + + + + + + + 50% + + + + + + + 25% + + + + + + + + 75% + + + + + + Clock divider + + + + + + Register stages + + + + + + 15 + + + + + + 7 + + + + + + Shifter frequency + + + + + PSG volume right + + + + + PSG volume left + + + + + + Enable channel 1 right + + + + + + Enable channel 2 right + + + + + + Enable channel 3 right + + + + + + Enable channel 4 right + + + + + + Enable channel 1 left + + + + + + Enable channel 2 left + + + + + + Enable channel 3 left + + + + + + Enable channel 4 left + + + + + PSG master volume + + + + + Loud channel A + + + + + Loud channel B + + + + + Enable channel A right + + + + + Enable channel A left + + + + + Channel A timer + + + + + + 0 + + + + + + + + + + + + + 1 + + + + + Channel A reset + + + + + Enable channel B right + + + + + Enable channel B left + + + + + Channel B timer + + + + + Channel B reset + + + + + + Active channel 1 + + + + + + Active channel 2 + + + + + + Active channel 3 + + + + + + Active channel 4 + + + + + + Enable audio + + + + + Bias + + + + + Resolution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sample + + + + + + + + + + + + Address (low) + + + + + + + + + + + + Address (high) + + + + + + + Sound frequency (low) + + + + + + + Sound frequency (high) + + + + + Source (high) + + + + + Source (low) + + + + + Destination (high) + + + + + Destination (low) + + + + + + Green (low) + + + + + + Green (high) + + + + + + + + Word count + + + + + + + + Destination offset + + + + + + + + + + + + Increment + + + + + + + + + + + + Decrement + + + + + + + + + + + + Fixed + + + + + + + + Increment and reload + + + + + + + + Source offset + + + + + + + + Repeat + + + + + + + + 32-bit + + + + + + + + Start timing + + + + + + + + + Immediate + + + + + + + + + + + + VBlank + + + + + + + + + + + HBlank + + + + + + + + + + + + + IRQ + + + + + + + + + + + + + + + Enable + + + + + + + Audio FIFO + + + + + Video Capture + + + + + DRQ + + + + + + + + + + + + Value + + + + + + + + Scale + + + + + + + + + 1/64 + + + + + + + + + 1/256 + + + + + + + + + 1/1024 + + + + + + + Cascade + + + + + + A + + + + + + B + + + + + + Select + + + + + + Start + + + + + + Right + + + + + + Left + + + + + + Up + + + + + + Down + + + + + + R + + + + + + L + + + + + Condition + + + + + SC + + + + + SD + + + + + SI + + + + + SO + + + + + + VCounter + + + + + + Timer 0 + + + + + + Timer 1 + + + + + + Timer 2 + + + + + + Timer 3 + + + + + + SIO + + + + + + DMA 0 + + + + + + DMA 1 + + + + + + DMA 2 + + + + + + DMA 3 + + + + + + Keypad + + + + + + Gamepak + + + + + SRAM wait + + + + + + + + + 4 + + + + + + + + 3 + + + + + + + + + 2 + + + + + + + + + 8 + + + + + Cart 0 non-sequential + + + + + Cart 0 sequential + + + + + Cart 1 non-sequential + + + + + Cart 1 sequential + + + + + Cart 2 non-sequential + + + + + Cart 2 sequential + + + + + PHI terminal + + + + + + Disable + + + + + 4.19MHz + + + + + 8.38MHz + + + + + 16.78MHz + + + + + Gamepak prefetch + + + + + Enable IRQs + + + + + Right/A + + + + + Left/B + + + + + Up/Select + + + + + Down/Start + + + + + Active D-pad + + + + + Active face buttons + + + + + Internal clock + + + + + 32× clocking (CGB only) + + + + + Transfer active + + + + + Divider + + + + + 1/16 + + + + + + LCD STAT + + + + + + Timer + + + + + + Serial + + + + + + Joypad + + + + + Volume right + + + + + Output right + + + + + Volume left + + + + + Output left + + + + + Background enable/priority + + + + + Enable sprites + + + + + Double-height sprites + + + + + Background tile map + + + + + + 0x9800 – 0x9BFF + + + + + + 0x9C00 – 0x9FFF + + + + + Background tile data + + + + + 0x8800 – 0x87FF + + + + + 0x8000 – 0x8FFF + + + + + Enable window + + + + + Window tile map + + + + + Enable LCD + + + + + Mode + + + + + 0: HBlank + + + + + 1: VBlank + + + + + 2: OAM scan + + + + + 3: HDraw + + + + + In LYC + + + + + Enable HBlank (mode 0) IRQ + + + + + Enable VBlank (mode 1) IRQ + + + + + Enable OAM (mode 2) IRQ + + + + + Enable LYC IRQ + + + + + Current Y coordinate + + + + + Comparison Y coordinate + + + + + Start upper byte + + + + + + + Color 0 shade + + + + + + + Color 1 shade + + + + + + + Color 2 shade + + + + + + + Color 3 shade + + + + + Prepare to switch speed + + + + + Double speed + + + + + VRAM bank + + + + + Length + + + + + Timing + + + + + Write bit + + + + + Read bit + + + + + + Unknown + + + + + + Current index + + + + + + Auto-increment + + + + + + Red + + + + + + Blue + + + + + Sprite ordering + + + + + OAM order + + + + + x coordinate sorting + + + + + WRAM bank + + + + + QGBA::KeyEditor + + + + --- + --- + + + + Super (L) + Super (L) + + + + Super (R) + Super (R) + + + + Menu + Menu + + + + QGBA::LoadSaveState + + + Load State + Keadaan Termuat + + + + Save State + Keadaan Tersimpan + + + + Empty + Kosong + + + + Corrupted + Rosak + + + + Slot %1 + Slot %1 + + + + QGBA::LogConfigModel + + + + Default + Piawai + + + + Fatal + + + + + Error + Ralat + + + + Warning + Amaran + + + + Info + Maklumat + + + + Debug + Nyahpepijat + + + + Stub + Kontot + + + + Game Error + Ralat Permainan + + + + QGBA::LogController + + + [%1] %2: %3 + [%1] %2: %3 + + + + An error occurred + Ralat dilakukan + + + + DEBUG + NYAHPEPIJAT + + + + STUB + KONTOT + + + + INFO + MAKLUMAT + + + + WARN + AMARAN + + + + ERROR + RALAT + + + + FATAL + + + + + GAME ERROR + RALAT PERMAINAN + + + + QGBA::MapView + + + Priority + Keutamaan + + + + + Map base + Dasar peta + + + + + Tile base + Dasar Jubin + + + + Size + Saiz + + + + + Offset + Ofset + + + + Xform + Xform + + + + Map Addr. + Alamat Peta + + + + Mirror + Cermin + + + + None + Tiada + + + + Both + + + + + Horizontal + + + + + Vertical + + + + + + + N/A + + + + + Export map + Eksport peta + + + + Portable Network Graphics (*.png) + Grafik Rangkaian Mudah Alih (*.png) + + + + QGBA::MemoryDump + + + Save memory region + Simpan sekitar ingatan + + + + Failed to open output file: %1 + Gagal membuka fail output: %1 + + + + QGBA::MemoryModel + + + Copy selection + Salin pilihan + + + + Save selection + Simpan pilihan + + + + Paste + Tampal + + + + Load + Muat + + + + All + Semua + + + + Load TBL + Muat TBL + + + + Save selected memory + Simpan ingatan terpilih + + + + Failed to open output file: %1 + Gagal membuka fail output: %1 + + + + Load memory + Muat ingatan + + + + Failed to open input file: %1 + Gagal membuka fail input: %1 + + + + TBL + TBL + + + + ISO-8859-1 + ISO-8859-1 + + + + QGBA::MemorySearch + + + (%0/%1×) + (%0/%1×) + + + + (⅟%0×) + (⅟%0×) + + + + (%0×) + (%0×) + + + + %1 byte%2 + %1 bait%2 + + + + QGBA::ObjView + + + + 0x%0 + + + + + Off + + + + + + + + + + + + --- + + + + + Normal + + + + + Trans + + + + + OBJWIN + + + + + Invalid + + + + + + N/A + + + + + Export sprite + + + + + Portable Network Graphics (*.png) + + + + + QGBA::OverrideView + + + Official MBCs + + + + + Licensed MBCs + + + + + Unlicensed MBCs + + + + + QGBA::PaletteView + + + #%0 + #%0 + + + + 0x%0 + 0x%0 + + + + + + + 0x%0 (%1) + 0x%0 (%1) + + + + Export palette + Eksport palet + + + + Windows PAL (*.pal);;Adobe Color Table (*.act) + Windows PAL (*.pal);;Jadual Warna Adobe(*.act) + + + + Failed to open output palette file: %1 + Gagal membuka fail palet output: %1 + + + + QGBA::ROMInfo + + + + + + + (unknown) + (tidak diketahui) + + + + + bytes + bait + + + + (no database present) + (tiada pangkalan data hadir) + + + + QGBA::ReportView + + + Bug report archive + Arkib laporan pepijat + + + + ZIP archive (*.zip) + Arkib ZIP (*.zip) + + + + QGBA::SaveConverter + + + Save games and save states (%1) + Simpanan permainan dan keadaan tersimpan (%1) + + + + Select save game or save state + Pilih simpanan permainan atau keadaan tersimpan + + + + Save games (%1) + Simpanan permainan (%1) + + + + Select save game + Pilih simpanan permainan + + + + Conversion failed + Penukaran gagal + + + + Failed to convert the save game. This is probably a bug. + Gagal menukar simpanan permainan. Mungkin ini suatu pepijat. + + + + No file selected + Tiada pilihan + + + + Could not open file + Tidak dapat membuka fail + + + + No valid formats found + Tiada format yang sah ditemui + + + + Please select a valid input file + Sila pilih fail input yang sah + + + + No valid conversions found + Tiada penukaran yang sah ditemui + + + + Cannot convert save games between platforms + Tidak boleh menukar simpanan permainan antara platform + + + + QGBA::SettingsView + + + + Qt Multimedia + Multimedia Qt + + + + SDL + SDL + + + + Software (Qt) + Perisian (Qt) + + + + OpenGL + OpenGL + + + + OpenGL (force version 1.x) + OpenGL (paksa versi 1.x) + + + + None (Still Image) + Tiada (Gambar Tenang) + + + + Keyboard + Papan Kekunci + + + + Controllers + Pengawal + + + + Shortcuts + Pintas + + + + + Shaders + + + + + Select BIOS + Pilih BIOS + + + + Select directory + Pilih direktori + + + + (%1×%2) + (%1×%2) + + + + QGBA::ShaderSelector + + + No shader active + + + + + Load shader + + + + + No shader loaded + + + + + by %1 + + + + + Preprocessing + + + + + Pass %1 + + + + + QGBA::ShortcutModel + + + Action + + + + + Keyboard + + + + + Gamepad + + + + + QGBA::TileView + + + Export tiles + Eksport jubin + + + + + Portable Network Graphics (*.png) + Grafik Rangkaian Mudah Alih (*.png) + + + + Export tile + Eksport jubin + + + + QGBA::VideoView + + + Failed to open output video file: %1 + Gagal membuka fail video output: %1 + + + + Native (%0x%1) + Asal (%0x%1) + + + + Select output file + Pilih fail output + + + + QGBA::Window + + + Game Boy Advance ROMs (%1) + ROM Game Boy Advance (%1) + + + + Game Boy ROMs (%1) + ROM Game Boy (%1) + + + + All ROMs (%1) + Semua ROM (%1) + + + + %1 Video Logs (*.mvl) + %1 Log Video (*.mvl) + + + + Archives (%1) + Arkib (%1) + + + + + + Select ROM + Pilih ROM + + + + Select folder + Pilih folder + + + + + Select save + + + + + Select patch + + + + + Patches (*.ips *.ups *.bps) + + + + + Select e-Reader dotcode + + + + + e-Reader card (*.raw *.bin *.bmp) + + + + + Select image + Pilih gambar + + + + Image file (*.png *.gif *.jpg *.jpeg);;All files (*) + Fail gambar (*.png *.gif *.jpg *.jpeg);;Semua fail (*) + + + + + GameShark saves (*.sps *.xps) + Simpanan GameShark (*.sps *.xps) + + + + Select video log + Pilih log video + + + + Video logs (*.mvl) + Log video (*.mvl) + + + + Crash + Nahas + + + + The game has crashed with the following error: + +%1 + Permainan menjemput nahas dengan ralat berikut: + +%1 + + + + Couldn't Start + Tidak dapat memula + + + + Could not start game. + Permainan tidak dapat bermula. + + + + Unimplemented BIOS call + Panggilan BIOS yg belum dilaksanakan + + + + This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience. + Permainan ini menggunakan panggilan BIOS yang belum dilaksanakan. Sila pakai BIOS rasmi untuk pengalaman yang lebih baik. + + + + Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. + Gagal mencipta peranti paparan yang sesuai, berbalik ke paparan perisian. Permainan mungkin menjadi lembap, terutamanya dengan tetingkap besar. + + + + Really make portable? + Betulkah mahu buat jadi mudah alih? + + + + This will make the emulator load its configuration from the same directory as the executable. Do you want to continue? + Ini akan menetapkan pelagak untuk muat konfigurasi dari direktori yang sama dengan fail bolehlakunya. Teruskan? + + + + Restart needed + Mula semula diperlukan + + + + Some changes will not take effect until the emulator is restarted. + Beberapa perubahan tidak akan dilaksanakan sehingga pelagak dimula semula. + + + + - Player %1 of %2 + - Pemain %1 dari %2 + + + + %1 - %2 + %1 - %2 + + + + %1 - %2 - %3 + %1 - %2 - %3 + + + + %1 - %2 (%3 fps) - %4 + %1 - %2 (%3 fps) - %4 + + + + &File + &File + + + + Load &ROM... + Muat %ROM... + + + + Load ROM in archive... + Muat ROM daripada arkib... + + + + Add folder to library... + Tambah folder ke perpustakaan... + + + + Save games (%1) + Simpanan permainan (%1) + + + + Select save game + Pilih simpanan permainan + + + + mGBA save state files (%1) + mGBA fail keadaan tersimpan (%1) + + + + + Select save state + Pilih keadaan tersimpan + + + + Select e-Reader card images + + + + + Image file (*.png *.jpg *.jpeg) + Fail gambar (*.png *.jpg *.jpeg) + + + + Conversion finished + + + + + %1 of %2 e-Reader cards converted successfully. + + + + + Load alternate save game... + Muat simpanan permainan alternatif... + + + + Load temporary save game... + Muat simpanan permainan sementara... + + + + Load &patch... + + + + + Boot BIOS + But BIOS + + + + Replace ROM... + Ganti ROM... + + + + Scan e-Reader dotcodes... + + + + + Convert e-Reader card image to raw... + + + + + ROM &info... + &Perihal ROM... + + + + Recent + Terkini + + + + Make portable + Buat jadi mudah alih + + + + &Load state + &Muat keadaan + + + + Load state file... + Muat fail keadaan... + + + + &Save state + &Simpan keadaan + + + + Save state file... + Simpan fail keadaan... + + + + Quick load + + + + + Quick save + + + + + Load recent + Muat terkini + + + + Save recent + Simpan terkini + + + + Undo load state + Buat asal keadaan termuat + + + + Undo save state + Buat asal keadaan tersimpan + + + + + State &%1 + Keadaan &%1 + + + + Load camera image... + Muat gambar kamera... + + + + Convert save game... + Tukar simpanan permainan... + + + + Import GameShark Save... + Import Simpanan GameShark... + + + + Export GameShark Save... + Eksport Simpanan GameShark... + + + + New multiplayer window + Tetingkap multipemain baru + + + + Connect to Dolphin... + Sambung ke Dolphin... + + + + Report bug... + Laporkan pepijat... + + + + About... + Perihal... + + + + E&xit + &Keluar + + + + &Emulation + Pe&lagak + + + + &Reset + + + + + Sh&utdown + &Matikan + + + + Yank game pak + Alih keluar Game Pak + + + + &Pause + &Jeda + + + + &Next frame + Bingkai se&terusnya + + + + Fast forward (held) + Mundar laju (pegang) + + + + &Fast forward + Mundar &laju + + + + Fast forward speed + Kelajuan mundar laju + + + + Unbounded + Tidak terbatas + + + + %0x + %0x + + + + Rewind (held) + Putar balik (pegang) + + + + Re&wind + Ma&ndir + + + + Step backwards + Langkah belakang + + + + Sync to &video + Segerak ke &video + + + + Sync to &audio + Segerak ke &audio + + + + Solar sensor + Pengesan suria + + + + Increase solar level + Meningkatkan aras suria + + + + Decrease solar level + Mengurangkan aras suria + + + + Brightest solar level + Aras suria paling terang + + + + Darkest solar level + Aras suria paling gelap + + + + Brightness %1 + Kecerahan %1 + + + + Game Boy Printer... + Pencetak Game Boy... + + + + BattleChip Gate... + BattleChip Gate... + + + + Audio/&Video + Audio/&Video + + + + Frame size + Saiz bingkai + + + + %1× + %1× + + + + Toggle fullscreen + Togol skrinpenuh + + + + Lock aspect ratio + Kekalkan nisbah aspek + + + + Force integer scaling + Paksa skala integer + + + + Interframe blending + + + + + Bilinear filtering + + + + + Frame&skip + Langkauan &bingkai + + + + Mute + Senyap + + + + FPS target + Sasaran FPS + + + + Native (59.7275) + Asal (59.7275) + + + + Take &screenshot + Ambil &cekupan skrin + + + + F12 + F12 + + + + Record A/V... + Rakam A/V... + + + + Record GIF/WebP/APNG... + Rakam GIF/WebP/APNG... + + + + Video layers + Lapisan video + + + + Audio channels + Saluran audio + + + + Adjust layer placement... + Melaras peletakan lapisan... + + + + &Tools + &Alat + + + + View &logs... + Lihat &log... + + + + Game &overrides... + + + + + Game Pak sensors... + Pengesan Game Pak... + + + + &Cheats... + &Tipu... + + + + Settings... + Tetapan... + + + + Open debugger console... + Buka konsol penyahpepijat... + + + + Start &GDB server... + Mula pelayan &GDB... + + + + View &palette... + Pelihat &palet... + + + + View &sprites... + + + + + View &tiles... + Pelihat &jubin... + + + + View &map... + Pelihat pe&ta... + + + + &Frame inspector... + Periksa &bingkai... + + + + View memory... + Lihat ingatan... + + + + Search memory... + Cari ingatan... + + + + View &I/O registers... + Lihat daftar &I/O... + + + + Record debug video log... + Rakam log video nyahpepijat... + + + + Stop debug video log + Henti log video nyahpepijat + + + + Exit fullscreen + Keluar skrinpenuh + + + + GameShark Button (held) + Butang GameShark (pegang) + + + + Autofire + + + + + Autofire A + + + + + Autofire B + + + + + Autofire L + + + + + Autofire R + + + + + Autofire Start + + + + + Autofire Select + + + + + Autofire Up + + + + + Autofire Right + + + + + Autofire Down + + + + + Autofire Left + + + + + Clear + Kosongkan + + + + QObject + + + %1 byte + %1 bait + + + + %1 kiB + %1 kiB + + + + %1 MiB + %1 MiB + + + + GBA + GBA + + + + GB + GB + + + + ? + ? + + + + QShortcut + + + Shift + Shift + + + + Control + Ctrl + + + + Alt + Alt + + + + Meta + Meta + + + + ROMInfo + + + ROM Info + Perihal ROM + + + + Game name: + Nama permainan: + + + + {NAME} + {NAME} + + + + Internal name: + Nama dalaman: + + + + {TITLE} + {TITLE} + + + + Game ID: + ID Permainan: + + + + {ID} + {ID} + + + + File size: + Saiz fail: + + + + {SIZE} + {SIZE} + + + + CRC32: + CRC32: + + + + {CRC} + {CRC} + + + + ReportView + + + Generate Bug Report + Menjanakan Laporan Pepijat + + + + <html><head/><body><p>To file a bug report, please first generate a report file to attach to the bug report you're about to file. It is recommended that you include the save files, as these often help with debugging issues. This will collect some information about the version of {projectName} you're running, your configuration, your computer, and the game you currently have open (if any). Once this collection is completed you can review all of the information gathered below and save it to a zip file. The collection will automatically attempt to redact any personal information, such as your username if it's in any of the paths gathered, but just in case you can edit it afterwards. After you have generated and saved it, please click the button below or go to <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> to file the bug report on GitHub. Make sure to attach the report you generated!</p></body></html> + <html><head/><body><p>Untuk membuat laporan pepijat, janakan fail laporan dan lampirkannya pada laporan anda. Adalah disyorkan untuk sertakan fail simpanan, kerana ini kerap membantu dalam persoalan penyahpepijatan. Penjanaan ini akan mengumpul maklumat tentang versi {projectName}, konfigurasi, komputer, dan permainan yang sedang terbuka. Setelah pengumpulan sudah siap, anda boleh memeriksa semua maklumat yang dikumpul dan simpankannya dalam fail zip. Proses kumpulan ini akan mencuba secara automatik untuk menghapuskan semua maklumat peribadi, contohnya nama pengguna (kalau ada di laluan direktori), tetapi anda masih boleh menyunting selepas itu. Seterusnya, sila klik butang di bawah atau pergi ke <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> untuk membuat laporan pepijat di GitHub. Pastikan anda melampirkan laporan yang telah dijana!</p></body></html> + + + + Generate report + Menjanakan laporan + + + + Save + Simpan + + + + Open issue list in browser + Buka senarai persoalan dalam pelayar + + + + Include save file + Sertakan fail simpanan + + + + Create and include savestate + Cipta dan sertakan keadaan tersimpan + + + + SaveConverter + + + Convert/Extract Save Game + Tukar/Ekstrak Simpanan Permainan + + + + Input file + Fail input + + + + + Browse + Pilih fail + + + + Output file + Fail output + + + + %1 %2 save game + Simpanan permainan %1 %2 + + + + little endian + little-endian + + + + big endian + big-endian + + + + SRAM + SRAM + + + + %1 flash + %1 kilat + + + + %1 EEPROM + %1 EEPROM + + + + %1 SRAM + RTC + %1 SRAM + RTC + + + + %1 SRAM + %1 SRAM + + + + packed MBC2 + + + + + unpacked MBC2 + + + + + MBC6 flash + Kilat MBC6 + + + + MBC6 combined SRAM + flash + MBC6 bergabung SRAM + kilat + + + + MBC6 SRAM + SRAM MBC6 + + + + TAMA5 + TAMA5 + + + + %1 (%2) + %1 (%2) + + + + %1 save state with embedded %2 save game + Keadaan tersimpan %1 dgn simpanan permainan terbenam %2 + + + + SensorView + + + Sensors + + + + + Realtime clock + + + + + Fixed time + + + + + System time + + + + + Start time at + + + + + Now + + + + + MM/dd/yy hh:mm:ss AP + + + + + Light sensor + + + + + Brightness + + + + + Tilt sensor + + + + + + Set Y + + + + + + Set X + + + + + Gyroscope + + + + + Sensitivity + + + + + SettingsView + + + Settings + Tetapan + + + + Audio/Video + Audio/Video + + + + Interface + Antara muka + + + + Emulation + Pelagakan + + + + Enhancements + Penambahan + + + + BIOS + BIOS + + + + Paths + Laluan + + + + Logging + Log + + + + Game Boy + Game Boy + + + + Audio driver: + Pemacu audio: + + + + Audio buffer: + Penimbal audio: + + + + + 1536 + 1536 + + + + 512 + 512 + + + + 768 + 768 + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 3072 + 3072 + + + + 4096 + 4096 + + + + samples + sampel + + + + Sample rate: + Kadar sampel: + + + + + 44100 + 44100 + + + + 22050 + 22050 + + + + 32000 + 32000 + + + + 48000 + 48000 + + + + Hz + Hz + + + + Volume: + Isipadu: + + + + + Mute + Senyap + + + + Fast forward volume: + Isipadu mundar laju: + + + + Display driver: + Pemacu paparan: + + + + Frameskip: + Langkauan bingkai: + + + + Skip every + Langkau setiap + + + + + frames + bingkai + + + + FPS target: + Sasaran FPS: + + + + frames per second + bingkai per saat + + + + Sync: + Segerak: + + + + Video + Video + + + + Audio + Audio + + + + Lock aspect ratio + Kekalkan nisbah aspek + + + + Force integer scaling + Paksa skala integer + + + + Bilinear filtering + Penapisan bilinear + + + + Default color palette only + Palet warna piawai sahaja + + + + SGB color palette if available + Palet warna SGB jika ada + + + + GBC color palette if available + Palet warna GBC jika ada + + + + SGB (preferred) or GBC color palette if available + SGB (pilihan utama) atau palet warna GBC jika ada + + + + Game Boy Camera + Game Boy Camera + + + + Driver: + Pemacu: + + + + Source: + Sumber: + + + + Native (59.7275) + Asal (59.7275) + + + + Interframe blending + Persebatian antarabingkai + + + + Language + Bahasa + + + + English + Inggeris + + + + Library: + Perpustakaan: + + + + List view + Pandangan senarai + + + + Tree view + Pandangan pohon + + + + Show when no game open + Tunjuk semasa tiada permainan dibuka + + + + Clear cache + Kosongkan cache + + + + Allow opposing input directions + Izin tekan arah-arah input yang berlawan sekaligus + + + + Suspend screensaver + Gantung screensaver + + + + Pause when inactive + Jeda bila tidak aktif + + + + Pause when minimized + Jeda bila diminimumkan + + + + Dynamically update window title + Kemaskini tajuk tetingkap secara dinamik + + + + Show filename instead of ROM name in title bar + Tunjuk nama ROM dan bukan nama fail dalam bar tajuk + + + + Show OSD messages + Tunjuk mesej OSD + + + + Enable Discord Rich Presence + Dayakan Discord Rich Presence + + + + Automatically save state + Simpan keadaan secara automatik + + + + Automatically load state + Muat keadaan secara automatik + + + + Automatically save cheats + Simpan tipuan secara automatik + + + + Automatically load cheats + Muat tipuan secara automatik + + + + Show FPS in title bar + Tunjuk FPS dalam bar tajuk + + + + Fast forward speed: + Kelajuan mundar laju: + + + + + Unbounded + Tidak terbatas + + + + Fast forward (held) speed: + Kelajuan mundar laju (pegang): + + + + Autofire interval: + + + + + Enable rewind + Dayakan putar balik + + + + Rewind history: + Sejarah putar balik: + + + + Idle loops: + + + + + Run all + Jalan semua + + + + Remove known + Buang yg diketahui + + + + Detect and remove + Kesan dan buang + + + + Preload entire ROM into memory + Pra-muat selurus ROM ke dalam ingatan + + + + Save state extra data: + Data ekstra keadaan tersimpan: + + + + + Save game + Simpanan permainan + + + + Load state extra data: + Data ekstra keadaan muat: + + + + Models + Model + + + + GB only: + GB sahaja: + + + + SGB compatible: + SGB serasi: + + + + GBC only: + GBC sahaja: + + + + GBC compatible: + GBC serasi: + + + + SGB and GBC compatible: + SGB dan GBC serasi: + + + + Game Boy palette + Palet Game Boy + + + + Preset: + Praset: + + + + + Screenshot + Cekupan skrin + + + + + Cheat codes + Kod tipu + + + + Enable Game Boy Player features by default + + + + + Enable VBA bug compatibility in ROM hacks + + + + + Video renderer: + + + + + Software + Perisian + + + + OpenGL + + + + + OpenGL enhancements + + + + + High-resolution scale: + + + + + (240×160) + (240×160) + + + + XQ GBA audio (experimental) + + + + + GB BIOS file: + Fail BIOS GB: + + + + + + + + + + + + Browse + Pilih fail + + + + Use BIOS file if found + Guna fail BIOS jika ada + + + + Skip BIOS intro + Langkau pendahuluan BIOS + + + + GBA BIOS file: + Fail BIOS GBA: + + + + GBC BIOS file: + Fail BIOS GBC: + + + + SGB BIOS file: + Fail BIOS SGB: + + + + Save games + Simpanan permainan + + + + + + + + Same directory as the ROM + Direktori sama dengan ROM + + + + Save states + Keadaan tersimpan + + + + Screenshots + Cekupan skrin + + + + Patches + + + + + Cheats + Tipuan + + + + Log to file + Log dalam fail + + + + Log to console + Log dalam konsol + + + + Select Log File + Pilih fail log + + + + Default BG colors: + Warna LB piawai: + + + + Default sprite colors 1: + + + + + Default sprite colors 2: + + + + + Super Game Boy borders + + + + + ShaderSelector + + + Shaders + + + + + Active Shader: + + + + + Name + Nama + + + + Author + Pencipta + + + + Description + Huraian + + + + Unload Shader + + + + + Load New Shader + + + + + ShortcutView + + + Edit Shortcuts + Sunting pintasan + + + + Keyboard + Papan kekunci + + + + Gamepad + + + + + Clear + Kosongkan + + + + TileView + + + Tiles + Jubin + + + + Export Selected + Eksport yg dipilih + + + + Export All + Eksport Semua + + + + 256 colors + 256 warna + + + + Magnification + Pembesaran + + + + Tiles per row + Jubin per baris + + + + Fit to window + + + + + Copy Selected + Salin yg dipilih + + + + Copy All + Salin Semua + + + + VideoView + + + Record Video + Rakam Video + + + + Start + Mula + + + + Stop + Henti + + + + Select File + Pilih Fail + + + + Presets + Praset + + + + High &Quality + &Kualiti Tinggi + + + + &YouTube + &YouTube + + + + + WebM + WebM + + + + + MP4 + MP4 + + + + &Lossless + + + + + 4K + 4K + + + + &1080p + &1080p + + + + &720p + &720p + + + + &480p + &480p + + + + &Native + &Asal + + + + Format + Format + + + + MKV + MKV + + + + AVI + AVI + + + + HEVC + HEVC + + + + HEVC (NVENC) + HEVC (NVENC) + + + + VP8 + VP8 + + + + VP9 + VP9 + + + + FFV1 + FFV1 + + + + + None + Tiada + + + + FLAC + FLAC + + + + Opus + Opus + + + + Vorbis + Vorbis + + + + MP3 + MP3 + + + + AAC + AAC + + + + Uncompressed + + + + + Bitrate (kbps) + Kadar bit (kbps) + + + + ABR + ABR + + + + H.264 + H.264 + + + + H.264 (NVENC) + H.264 (NVENC) + + + + VBR + VBR + + + + CRF + CRF + + + + Dimensions + Matra + + + + Lock aspect ratio + Kekalkan nisbah aspek + + + + Show advanced + Lanjutan + + + From 599b79390cfc2e018cdf4894b7a8157d7e728faa Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 15 Jun 2021 20:47:50 -0700 Subject: [PATCH 25/50] Qt: Update translation (Polish) Currently translated at 11.3% (121 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/pl/ --- src/platform/qt/ts/mgba-pl.ts | 6025 +++++++++++++++++++++++++++++++++ 1 file changed, 6025 insertions(+) create mode 100644 src/platform/qt/ts/mgba-pl.ts diff --git a/src/platform/qt/ts/mgba-pl.ts b/src/platform/qt/ts/mgba-pl.ts new file mode 100644 index 000000000..fb64b8041 --- /dev/null +++ b/src/platform/qt/ts/mgba-pl.ts @@ -0,0 +1,6025 @@ + + + + + AboutScreen + + + About + O aplikacji + + + + <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> + <a href="http://mgba.io/">Strona WWW</a> • <a href="https://forums.mgba.io/">Forum / Pomoc</a> • <a href="https://patreon.com/mgba">Wesprzyj</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Kod źródłowy</a> + + + + Branch: <tt>{gitBranch}</tt><br/>Revision: <tt>{gitCommit}</tt> + Gałąź git: <tt>{gitBranch}</tt><br/>Rewizja: <tt>{gitCommit}</tt> + + + + {projectName} would like to thank the following patrons from Patreon: + {projectName} pragnie podziękować następującym patronom z Patreon: + + + + © 2013 – {year} Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 +Game Boy Advance is a registered trademark of Nintendo Co., Ltd. + + + + + {projectName} is an open-source Game Boy Advance emulator + + + + + ArchiveInspector + + + Open in archive... + Otwórz w archiwum… + + + + Loading... + Ładowanie… + + + + AssetTile + + + Tile # + + + + + Palette # + + + + + Address + Adres + + + + Red + Czerwony + + + + Green + Zielony + + + + Blue + Niebieski + + + + BattleChipView + + + BattleChip Gate + BattleChip Gate + + + + Chip name + + + + + Insert + + + + + Save + Zapisz + + + + Load + Wgraj + + + + Add + Dodaj + + + + Remove + Usuń + + + + Gate type + + + + + Ba&ttleChip Gate + + + + + Progress &Gate + + + + + Beast &Link Gate + + + + + Inserted + + + + + Chip ID + ID chipu + + + + Update Chip data + Zaktualizuj dane chipu + + + + Show advanced + Pokaż zaawansowane opcje + + + + CheatsView + + + Cheats + + + + + Remove + Usuń + + + + Save + Zapisz + + + + Load + Wgraj + + + + Add New Set + Dodaj nowy zestaw + + + + Add + Dodaj + + + + Enter codes here... + + + + + DebuggerConsole + + + Debugger + Debugger + + + + Enter command (try `help` for more info) + Podaj komendę (by uzyskać więcej informacji, podaj `help`) + + + + Break + Przerwij + + + + DolphinConnector + + + Connect to Dolphin + + + + + Local computer + + + + + IP address + Adres IP + + + + Connect + Połącz + + + + Disconnect + Rozłącz + + + + Close + Zamknij + + + + Reset on connect + + + + + FrameView + + + Inspect frame + + + + + Magnification + Powiększenie + + + + Freeze frame + + + + + Backdrop color + Kolor tła + + + + Disable scanline effects + + + + + Export + Eksportuj + + + + Reset + Resetuj + + + + GIFView + + + Record GIF/WebP/APNG + Zapisz GIF/WebP/APNG + + + + Loop + + + + + Start + + + + + Stop + Stop + + + + Select File + Wybierz plik + + + + APNG + APNG + + + + GIF + GIF + + + + WebP + WebP + + + + Frameskip + + + + + IOViewer + + + I/O Viewer + + + + + 0x0000 + 0x0000 + + + + B + B + + + + LibraryTree + + + Name + Nazwa + + + + Location + Lokacja + + + + Platform + Platforma + + + + Size + Rozmiar + + + + CRC32 + CRC32 + + + + LoadSaveState + + + + %1 State + + + + + + + + + + + + + No Save + + + + + 5 + 5 + + + + 6 + 6 + + + + 8 + 8 + + + + 4 + 4 + + + + 1 + 1 + + + + 3 + 3 + + + + 7 + 7 + + + + 9 + 9 + + + + 2 + 2 + + + + Cancel + Anuluj + + + + LogView + + + Logs + Logi + + + + Enabled Levels + Aktywne poziomy logowania + + + + Debug + Debug + + + + Stub + Stub + + + + Info + Info + + + + Warning + Ostrzeżenie + + + + Error + Błąd + + + + Fatal + Błąd krytyczny + + + + Game Error + Błąd gry + + + + Advanced settings + Ustawienia zaawansowane + + + + Clear + Wyczyść + + + + Max Lines + Maks. liczba linii + + + + MapView + + + Maps + Mapy + + + + Magnification + + + + + Export + Eksportuj + + + + Copy + Kopiuj + + + + MemoryDump + + + Save Memory Range + + + + + Start Address: + Adres początkowy: + + + + Byte Count: + Liczba bajtów: + + + + Dump across banks + + + + + MemorySearch + + + Memory Search + + + + + Address + Adres + + + + Current Value + Obecna wartość + + + + + Type + Typ + + + + Value + Wartość + + + + Numeric + + + + + Text + + + + + Width + + + + + + Guess + + + + + 1 Byte (8-bit) + + + + + 2 Bytes (16-bit) + + + + + 4 Bytes (32-bit) + + + + + Number type + + + + + Decimal + Decymalny + + + + Hexadecimal + Heksadecymalny + + + + Search type + Wyszukaj typ + + + + Equal to value + Wartość równa + + + + Greater than value + Wartość większa niż + + + + Less than value + Wartość mniejsza niż + + + + Unknown/changed + Nieznana/zmieniona + + + + Changed by value + + + + + Unchanged + Niezmieniona + + + + Increased + Zwiększona + + + + Decreased + Zmniejszona + + + + Search ROM + Przeszukaj ROM + + + + New Search + Nowe wyszukiwanie + + + + Search Within + Znajdź wewnątrz + + + + Open in Memory Viewer + Otwórz w Podglądzie Pamięci + + + + Refresh + Odśwież + + + + MemoryView + + + Memory + Pamięć + + + + Inspect Address: + + + + + Set Alignment: + + + + + &1 Byte + &1 bajt + + + + &2 Bytes + &2 bajty + + + + &4 Bytes + &4 bajty + + + + Unsigned Integer: + + + + + Signed Integer: + + + + + String: + + + + + Load TBL + + + + + Copy Selection + Kopiuj zaznaczenie + + + + Paste + Wklej + + + + Save Selection + Zapisz zaznaczenie + + + + Save Range + Zapisz zakres + + + + Load + Wgraj + + + + ObjView + + + Sprites + + + + + Address + Adres + + + + Copy + Kopiuj + + + + Magnification + Powiększenie + + + + Geometry + Geometria + + + + Position + Pozycja + + + + , + , + + + + Dimensions + Wymiary + + + + × + × + + + + Matrix + Macierz + + + + Export + Eksportuj + + + + Attributes + Atrybuty + + + + Transform + + + + + Off + + + + + Palette + + + + + Double Size + + + + + + + + Return, Ctrl+R + + + + + Flipped + + + + + H + Short for horizontal + + + + + V + Short for vertical + + + + + Mode + + + + + Normal + + + + + Mosaic + + + + + Enabled + + + + + Priority + + + + + Tile + + + + + OverrideView + + + Game Overrides + + + + + Game Boy Advance + + + + + + + + Autodetect + + + + + Realtime clock + + + + + Gyroscope + + + + + Tilt + + + + + Light sensor + + + + + Rumble + + + + + Save type + + + + + None + + + + + SRAM + + + + + Flash 512kb + + + + + Flash 1Mb + + + + + EEPROM + + + + + Idle loop + + + + + Game Boy Player features + + + + + VBA bug compatibility mode + + + + + Game Boy + + + + + Game Boy model + + + + + Memory bank controller + + + + + Background Colors + + + + + Sprite Colors 1 + + + + + Sprite Colors 2 + + + + + Palette preset + + + + + PaletteView + + + Palette + + + + + Background + + + + + Objects + + + + + Selection + + + + + Red + + + + + Green + + + + + Blue + + + + + 16-bit value + + + + + Hex code + + + + + Palette index + + + + + Export BG + + + + + Export OBJ + + + + + PlacementControl + + + Adjust placement + + + + + All + + + + + Offset + + + + + X + + + + + Y + + + + + PrinterView + + + Game Boy Printer + + + + + Hurry up! + + + + + Tear off + + + + + Magnification + + + + + Copy + Kopiuj + + + + QGBA::AboutScreen + + + 2021 + 2021 + + + + QGBA::AssetTile + + + %0%1%2 + %0%1%2 + + + + + + 0x%0 (%1) + 0x%0 (%1) + + + + QGBA::CheatsModel + + + (untitled) + (bez nazwy) + + + + Failed to open cheats file: %1 + + + + + QGBA::CheatsView + + + + Add GameShark + Dodaj GameShark + + + + Add Pro Action Replay + Dodaj Pro Action Replay + + + + Add CodeBreaker + Dodaj CodeBreaker + + + + Add GameGenie + + + + + + Select cheats file + + + + + QGBA::CoreController + + + Failed to open save file: %1 + + + + + Failed to open game file: %1 + + + + + Can't yank pack in unexpected platform! + + + + + Failed to open snapshot file for reading: %1 + + + + + Failed to open snapshot file for writing: %1 + + + + + QGBA::CoreManager + + + Failed to open game file: %1 + + + + + Could not load game. Are you sure it's in the correct format? + + + + + Failed to open save file. Is the save directory writable? + + + + + QGBA::FrameView + + + Export frame + + + + + Portable Network Graphics (*.png) + + + + + None + + + + + Background + + + + + Window + + + + + Objwin + + + + + Sprite + + + + + Backdrop + + + + + Frame + + + + + %1 %2 + + + + + QGBA::GBAApp + + + Enable Discord Rich Presence + + + + + QGBA::GBAKeyEditor + + + Clear Button + + + + + Clear Analog + + + + + Refresh + + + + + Set all + + + + + QGBA::GDBWindow + + + Server settings + + + + + Local port + + + + + Bind address + + + + + Break + + + + + Stop + + + + + Start + + + + + Crash + + + + + Could not start GDB server + + + + + QGBA::GIFView + + + Failed to open output file: %1 + + + + + Select output file + + + + + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) + + + + + QGBA::IOViewer + + + Background mode + + + + + Mode 0: 4 tile layers + + + + + Mode 1: 2 tile layers + 1 rotated/scaled tile layer + + + + + Mode 2: 2 rotated/scaled tile layers + + + + + Mode 3: Full 15-bit bitmap + + + + + Mode 4: Full 8-bit bitmap + + + + + Mode 5: Small 15-bit bitmap + + + + + CGB Mode + + + + + Frame select + + + + + Unlocked HBlank + + + + + Linear OBJ tile mapping + + + + + Force blank screen + + + + + Enable background 0 + + + + + Enable background 1 + + + + + Enable background 2 + + + + + Enable background 3 + + + + + Enable OBJ + + + + + Enable Window 0 + + + + + Enable Window 1 + + + + + Enable OBJ Window + + + + + Swap green components + + + + + Currently in VBlank + + + + + Currently in HBlank + + + + + Currently in VCounter + + + + + Enable VBlank IRQ generation + + + + + Enable HBlank IRQ generation + + + + + Enable VCounter IRQ generation + + + + + VCounter scanline + + + + + Current scanline + + + + + + + + Priority + + + + + + + + Tile data base (* 16kB) + + + + + + + + Enable mosaic + + + + + + + + Enable 256-color + + + + + + + + Tile map base (* 2kB) + + + + + + + + Background dimensions + + + + + + Overflow wraps + + + + + + + + + + Horizontal offset + + + + + + + + + + Vertical offset + + + + + + + + + + + + + + + + Fractional part + + + + + + + + + + + + Integer part + + + + + + + + Integer part (low) + + + + + + + + Integer part (high) + + + + + + End x + + + + + + Start x + + + + + + End y + + + + + + Start y + + + + + Window 0 enable BG 0 + + + + + Window 0 enable BG 1 + + + + + Window 0 enable BG 2 + + + + + Window 0 enable BG 3 + + + + + Window 0 enable OBJ + + + + + Window 0 enable blend + + + + + Window 1 enable BG 0 + + + + + Window 1 enable BG 1 + + + + + Window 1 enable BG 2 + + + + + Window 1 enable BG 3 + + + + + Window 1 enable OBJ + + + + + Window 1 enable blend + + + + + Outside window enable BG 0 + + + + + Outside window enable BG 1 + + + + + Outside window enable BG 2 + + + + + Outside window enable BG 3 + + + + + Outside window enable OBJ + + + + + Outside window enable blend + + + + + OBJ window enable BG 0 + + + + + OBJ window enable BG 1 + + + + + OBJ window enable BG 2 + + + + + OBJ window enable BG 3 + + + + + OBJ window enable OBJ + + + + + OBJ window enable blend + + + + + Background mosaic size vertical + + + + + Background mosaic size horizontal + + + + + Object mosaic size vertical + + + + + Object mosaic size horizontal + + + + + BG 0 target 1 + + + + + BG 1 target 1 + + + + + BG 2 target 1 + + + + + BG 3 target 1 + + + + + OBJ target 1 + + + + + Backdrop target 1 + + + + + Blend mode + + + + + Disabled + + + + + Additive blending + + + + + Brighten + + + + + Darken + + + + + BG 0 target 2 + + + + + BG 1 target 2 + + + + + BG 2 target 2 + + + + + BG 3 target 2 + + + + + OBJ target 2 + + + + + Backdrop target 2 + + + + + Blend A (target 1) + + + + + Blend B (target 2) + + + + + Blend Y + + + + + + Sweep shifts + + + + + + Sweep subtract + + + + + + Sweep time (in 1/128s) + + + + + + + + + + + + Sound length + + + + + + + + Duty cycle + + + + + + + + + + Envelope step time + + + + + + + + + + Envelope increase + + + + + + + + + + Initial volume + + + + + + + Sound frequency + + + + + + + + + + + + Timed + + + + + + + + + + + + Reset + + + + + Double-size wave table + + + + + Active wave table + + + + + + Enable channel 3 + + + + + + Volume + + + + + + 0% + + + + + + + 100% + + + + + + + 50% + + + + + + + 25% + + + + + + + + 75% + + + + + + Clock divider + + + + + + Register stages + + + + + + 15 + + + + + + 7 + + + + + + Shifter frequency + + + + + PSG volume right + + + + + PSG volume left + + + + + + Enable channel 1 right + + + + + + Enable channel 2 right + + + + + + Enable channel 3 right + + + + + + Enable channel 4 right + + + + + + Enable channel 1 left + + + + + + Enable channel 2 left + + + + + + Enable channel 3 left + + + + + + Enable channel 4 left + + + + + PSG master volume + + + + + Loud channel A + + + + + Loud channel B + + + + + Enable channel A right + + + + + Enable channel A left + + + + + Channel A timer + + + + + + 0 + + + + + + + + + + + + + 1 + + + + + Channel A reset + + + + + Enable channel B right + + + + + Enable channel B left + + + + + Channel B timer + + + + + Channel B reset + + + + + + Active channel 1 + + + + + + Active channel 2 + + + + + + Active channel 3 + + + + + + Active channel 4 + + + + + + Enable audio + + + + + Bias + + + + + Resolution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sample + + + + + + + + + + + + Address (low) + + + + + + + + + + + + Address (high) + + + + + + + Sound frequency (low) + + + + + + + Sound frequency (high) + + + + + Source (high) + + + + + Source (low) + + + + + Destination (high) + + + + + Destination (low) + + + + + + Green (low) + + + + + + Green (high) + + + + + + + + Word count + + + + + + + + Destination offset + + + + + + + + + + + + Increment + + + + + + + + + + + + Decrement + + + + + + + + + + + + Fixed + + + + + + + + Increment and reload + + + + + + + + Source offset + + + + + + + + Repeat + + + + + + + + 32-bit + + + + + + + + Start timing + + + + + + + + + Immediate + + + + + + + + + + + + VBlank + + + + + + + + + + + HBlank + + + + + + + + + + + + + IRQ + + + + + + + + + + + + + + + Enable + + + + + + + Audio FIFO + + + + + Video Capture + + + + + DRQ + + + + + + + + + + + + Value + + + + + + + + Scale + + + + + + + + + 1/64 + + + + + + + + + 1/256 + + + + + + + + + 1/1024 + + + + + + + Cascade + + + + + + A + + + + + + B + + + + + + Select + + + + + + Start + + + + + + Right + + + + + + Left + + + + + + Up + + + + + + Down + + + + + + R + + + + + + L + + + + + Condition + + + + + SC + + + + + SD + + + + + SI + + + + + SO + + + + + + VCounter + + + + + + Timer 0 + + + + + + Timer 1 + + + + + + Timer 2 + + + + + + Timer 3 + + + + + + SIO + + + + + + DMA 0 + + + + + + DMA 1 + + + + + + DMA 2 + + + + + + DMA 3 + + + + + + Keypad + + + + + + Gamepak + + + + + SRAM wait + + + + + + + + + 4 + + + + + + + + 3 + + + + + + + + + 2 + + + + + + + + + 8 + + + + + Cart 0 non-sequential + + + + + Cart 0 sequential + + + + + Cart 1 non-sequential + + + + + Cart 1 sequential + + + + + Cart 2 non-sequential + + + + + Cart 2 sequential + + + + + PHI terminal + + + + + + Disable + + + + + 4.19MHz + + + + + 8.38MHz + + + + + 16.78MHz + + + + + Gamepak prefetch + + + + + Enable IRQs + + + + + Right/A + + + + + Left/B + + + + + Up/Select + + + + + Down/Start + + + + + Active D-pad + + + + + Active face buttons + + + + + Internal clock + + + + + 32× clocking (CGB only) + + + + + Transfer active + + + + + Divider + + + + + 1/16 + + + + + + LCD STAT + + + + + + Timer + + + + + + Serial + + + + + + Joypad + + + + + Volume right + + + + + Output right + + + + + Volume left + + + + + Output left + + + + + Background enable/priority + + + + + Enable sprites + + + + + Double-height sprites + + + + + Background tile map + + + + + + 0x9800 – 0x9BFF + + + + + + 0x9C00 – 0x9FFF + + + + + Background tile data + + + + + 0x8800 – 0x87FF + + + + + 0x8000 – 0x8FFF + + + + + Enable window + + + + + Window tile map + + + + + Enable LCD + + + + + Mode + + + + + 0: HBlank + + + + + 1: VBlank + + + + + 2: OAM scan + + + + + 3: HDraw + + + + + In LYC + + + + + Enable HBlank (mode 0) IRQ + + + + + Enable VBlank (mode 1) IRQ + + + + + Enable OAM (mode 2) IRQ + + + + + Enable LYC IRQ + + + + + Current Y coordinate + + + + + Comparison Y coordinate + + + + + Start upper byte + + + + + + + Color 0 shade + + + + + + + Color 1 shade + + + + + + + Color 2 shade + + + + + + + Color 3 shade + + + + + Prepare to switch speed + + + + + Double speed + + + + + VRAM bank + + + + + Length + + + + + Timing + + + + + Write bit + + + + + Read bit + + + + + + Unknown + + + + + + Current index + + + + + + Auto-increment + + + + + + Red + + + + + + Blue + + + + + Sprite ordering + + + + + OAM order + + + + + x coordinate sorting + + + + + WRAM bank + + + + + QGBA::KeyEditor + + + + --- + + + + + Super (L) + + + + + Super (R) + + + + + Menu + + + + + QGBA::LoadSaveState + + + Load State + + + + + Save State + + + + + Empty + + + + + Corrupted + + + + + Slot %1 + + + + + QGBA::LogConfigModel + + + + Default + + + + + Fatal + + + + + Error + + + + + Warning + + + + + Info + + + + + Debug + + + + + Stub + + + + + Game Error + + + + + QGBA::LogController + + + [%1] %2: %3 + + + + + An error occurred + + + + + DEBUG + + + + + STUB + + + + + INFO + + + + + WARN + + + + + ERROR + + + + + FATAL + + + + + GAME ERROR + + + + + QGBA::MapView + + + Priority + + + + + + Map base + + + + + + Tile base + + + + + Size + + + + + + Offset + + + + + Xform + + + + + Map Addr. + + + + + Mirror + + + + + None + + + + + Both + + + + + Horizontal + + + + + Vertical + + + + + + + N/A + + + + + Export map + + + + + Portable Network Graphics (*.png) + + + + + QGBA::MemoryDump + + + Save memory region + + + + + Failed to open output file: %1 + + + + + QGBA::MemoryModel + + + Copy selection + + + + + Save selection + + + + + Paste + + + + + Load + Wgraj + + + + All + + + + + Load TBL + + + + + Save selected memory + + + + + Failed to open output file: %1 + + + + + Load memory + + + + + Failed to open input file: %1 + + + + + TBL + + + + + ISO-8859-1 + + + + + QGBA::MemorySearch + + + (%0/%1×) + + + + + (⅟%0×) + + + + + (%0×) + + + + + %1 byte%2 + + + + + QGBA::ObjView + + + + 0x%0 + + + + + Off + + + + + + + + + + + + --- + + + + + Normal + + + + + Trans + + + + + OBJWIN + + + + + Invalid + + + + + + N/A + + + + + Export sprite + + + + + Portable Network Graphics (*.png) + + + + + QGBA::OverrideView + + + Official MBCs + + + + + Licensed MBCs + + + + + Unlicensed MBCs + + + + + QGBA::PaletteView + + + #%0 + + + + + 0x%0 + + + + + + + + 0x%0 (%1) + + + + + Export palette + + + + + Windows PAL (*.pal);;Adobe Color Table (*.act) + + + + + Failed to open output palette file: %1 + + + + + QGBA::ROMInfo + + + + + + + (unknown) + + + + + + bytes + + + + + (no database present) + + + + + QGBA::ReportView + + + Bug report archive + + + + + ZIP archive (*.zip) + + + + + QGBA::SaveConverter + + + Save games and save states (%1) + + + + + Select save game or save state + + + + + Save games (%1) + + + + + Select save game + + + + + Conversion failed + + + + + Failed to convert the save game. This is probably a bug. + + + + + No file selected + + + + + Could not open file + + + + + No valid formats found + + + + + Please select a valid input file + + + + + No valid conversions found + + + + + Cannot convert save games between platforms + + + + + QGBA::SettingsView + + + + Qt Multimedia + + + + + SDL + + + + + Software (Qt) + + + + + OpenGL + + + + + OpenGL (force version 1.x) + + + + + None (Still Image) + + + + + Keyboard + + + + + Controllers + + + + + Shortcuts + + + + + + Shaders + + + + + Select BIOS + + + + + Select directory + + + + + (%1×%2) + + + + + QGBA::ShaderSelector + + + No shader active + + + + + Load shader + + + + + No shader loaded + + + + + by %1 + + + + + Preprocessing + + + + + Pass %1 + + + + + QGBA::ShortcutModel + + + Action + + + + + Keyboard + + + + + Gamepad + + + + + QGBA::TileView + + + Export tiles + + + + + + Portable Network Graphics (*.png) + + + + + Export tile + + + + + QGBA::VideoView + + + Failed to open output video file: %1 + + + + + Native (%0x%1) + + + + + Select output file + + + + + QGBA::Window + + + Game Boy Advance ROMs (%1) + + + + + Game Boy ROMs (%1) + + + + + All ROMs (%1) + + + + + %1 Video Logs (*.mvl) + + + + + Archives (%1) + + + + + + + Select ROM + + + + + Select folder + + + + + + Select save + + + + + Select patch + + + + + Patches (*.ips *.ups *.bps) + + + + + Select e-Reader dotcode + + + + + e-Reader card (*.raw *.bin *.bmp) + + + + + Select image + + + + + Image file (*.png *.gif *.jpg *.jpeg);;All files (*) + + + + + + GameShark saves (*.sps *.xps) + + + + + Select video log + + + + + Video logs (*.mvl) + + + + + Crash + + + + + The game has crashed with the following error: + +%1 + + + + + Couldn't Start + + + + + Could not start game. + + + + + Unimplemented BIOS call + + + + + This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience. + + + + + Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. + + + + + Really make portable? + + + + + This will make the emulator load its configuration from the same directory as the executable. Do you want to continue? + + + + + Restart needed + + + + + Some changes will not take effect until the emulator is restarted. + + + + + - Player %1 of %2 + + + + + %1 - %2 + + + + + %1 - %2 - %3 + + + + + %1 - %2 (%3 fps) - %4 + + + + + &File + + + + + Load &ROM... + + + + + Load ROM in archive... + + + + + Add folder to library... + + + + + Save games (%1) + + + + + Select save game + + + + + mGBA save state files (%1) + + + + + + Select save state + + + + + Select e-Reader card images + + + + + Image file (*.png *.jpg *.jpeg) + + + + + Conversion finished + + + + + %1 of %2 e-Reader cards converted successfully. + + + + + Load alternate save game... + + + + + Load temporary save game... + + + + + Load &patch... + + + + + Boot BIOS + + + + + Replace ROM... + + + + + Scan e-Reader dotcodes... + + + + + Convert e-Reader card image to raw... + + + + + ROM &info... + + + + + Recent + + + + + Make portable + + + + + &Load state + + + + + Load state file... + + + + + &Save state + + + + + Save state file... + + + + + Quick load + + + + + Quick save + + + + + Load recent + + + + + Save recent + + + + + Undo load state + + + + + Undo save state + + + + + + State &%1 + + + + + Load camera image... + + + + + Convert save game... + + + + + Import GameShark Save... + + + + + Export GameShark Save... + + + + + New multiplayer window + + + + + Connect to Dolphin... + + + + + Report bug... + + + + + About... + + + + + E&xit + + + + + &Emulation + + + + + &Reset + + + + + Sh&utdown + + + + + Yank game pak + + + + + &Pause + + + + + &Next frame + + + + + Fast forward (held) + + + + + &Fast forward + + + + + Fast forward speed + + + + + Unbounded + + + + + %0x + + + + + Rewind (held) + + + + + Re&wind + + + + + Step backwards + + + + + Sync to &video + + + + + Sync to &audio + + + + + Solar sensor + + + + + Increase solar level + + + + + Decrease solar level + + + + + Brightest solar level + + + + + Darkest solar level + + + + + Brightness %1 + + + + + Game Boy Printer... + + + + + BattleChip Gate... + + + + + Audio/&Video + + + + + Frame size + + + + + %1× + + + + + Toggle fullscreen + + + + + Lock aspect ratio + + + + + Force integer scaling + + + + + Interframe blending + + + + + Bilinear filtering + + + + + Frame&skip + + + + + Mute + + + + + FPS target + + + + + Native (59.7275) + + + + + Take &screenshot + + + + + F12 + + + + + Record A/V... + + + + + Record GIF/WebP/APNG... + + + + + Video layers + + + + + Audio channels + + + + + Adjust layer placement... + + + + + &Tools + + + + + View &logs... + + + + + Game &overrides... + + + + + Game Pak sensors... + + + + + &Cheats... + + + + + Settings... + + + + + Open debugger console... + + + + + Start &GDB server... + + + + + View &palette... + + + + + View &sprites... + + + + + View &tiles... + + + + + View &map... + + + + + &Frame inspector... + + + + + View memory... + + + + + Search memory... + + + + + View &I/O registers... + + + + + Record debug video log... + + + + + Stop debug video log + + + + + Exit fullscreen + + + + + GameShark Button (held) + + + + + Autofire + + + + + Autofire A + + + + + Autofire B + + + + + Autofire L + + + + + Autofire R + + + + + Autofire Start + + + + + Autofire Select + + + + + Autofire Up + + + + + Autofire Right + + + + + Autofire Down + + + + + Autofire Left + + + + + Clear + + + + + QObject + + + %1 byte + + + + + %1 kiB + + + + + %1 MiB + + + + + GBA + + + + + GB + + + + + ? + + + + + QShortcut + + + Shift + + + + + Control + + + + + Alt + + + + + Meta + + + + + ROMInfo + + + ROM Info + + + + + Game name: + + + + + {NAME} + + + + + Internal name: + + + + + {TITLE} + + + + + Game ID: + + + + + {ID} + + + + + File size: + + + + + {SIZE} + + + + + CRC32: + + + + + {CRC} + + + + + ReportView + + + Generate Bug Report + + + + + <html><head/><body><p>To file a bug report, please first generate a report file to attach to the bug report you're about to file. It is recommended that you include the save files, as these often help with debugging issues. This will collect some information about the version of {projectName} you're running, your configuration, your computer, and the game you currently have open (if any). Once this collection is completed you can review all of the information gathered below and save it to a zip file. The collection will automatically attempt to redact any personal information, such as your username if it's in any of the paths gathered, but just in case you can edit it afterwards. After you have generated and saved it, please click the button below or go to <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> to file the bug report on GitHub. Make sure to attach the report you generated!</p></body></html> + + + + + Generate report + + + + + Save + + + + + Open issue list in browser + + + + + Include save file + + + + + Create and include savestate + + + + + SaveConverter + + + Convert/Extract Save Game + + + + + Input file + + + + + + Browse + + + + + Output file + + + + + %1 %2 save game + + + + + little endian + + + + + big endian + + + + + SRAM + + + + + %1 flash + + + + + %1 EEPROM + + + + + %1 SRAM + RTC + + + + + %1 SRAM + + + + + packed MBC2 + + + + + unpacked MBC2 + + + + + MBC6 flash + + + + + MBC6 combined SRAM + flash + + + + + MBC6 SRAM + + + + + TAMA5 + + + + + %1 (%2) + + + + + %1 save state with embedded %2 save game + + + + + SensorView + + + Sensors + + + + + Realtime clock + + + + + Fixed time + + + + + System time + + + + + Start time at + + + + + Now + + + + + MM/dd/yy hh:mm:ss AP + + + + + Light sensor + + + + + Brightness + + + + + Tilt sensor + + + + + + Set Y + + + + + + Set X + + + + + Gyroscope + + + + + Sensitivity + + + + + SettingsView + + + Settings + + + + + Audio/Video + + + + + Interface + + + + + Emulation + + + + + Enhancements + + + + + BIOS + + + + + Paths + + + + + Logging + + + + + Game Boy + + + + + Audio driver: + + + + + Audio buffer: + + + + + + 1536 + + + + + 512 + + + + + 768 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + samples + + + + + Sample rate: + + + + + + 44100 + + + + + 22050 + + + + + 32000 + + + + + 48000 + + + + + Hz + + + + + Volume: + + + + + + Mute + + + + + Fast forward volume: + + + + + Display driver: + + + + + Frameskip: + + + + + Skip every + + + + + + frames + + + + + FPS target: + + + + + frames per second + + + + + Sync: + + + + + Video + + + + + Audio + + + + + Lock aspect ratio + + + + + Force integer scaling + + + + + Bilinear filtering + + + + + Default color palette only + + + + + SGB color palette if available + + + + + GBC color palette if available + + + + + SGB (preferred) or GBC color palette if available + + + + + Game Boy Camera + + + + + Driver: + + + + + Source: + + + + + Native (59.7275) + + + + + Interframe blending + + + + + Language + + + + + English + + + + + Library: + + + + + List view + + + + + Tree view + + + + + Show when no game open + + + + + Clear cache + + + + + Allow opposing input directions + + + + + Suspend screensaver + + + + + Pause when inactive + + + + + Pause when minimized + + + + + Dynamically update window title + + + + + Show filename instead of ROM name in title bar + + + + + Show OSD messages + + + + + Enable Discord Rich Presence + + + + + Automatically save state + + + + + Automatically load state + + + + + Automatically save cheats + + + + + Automatically load cheats + + + + + Show FPS in title bar + + + + + Fast forward speed: + + + + + + Unbounded + + + + + Fast forward (held) speed: + + + + + Autofire interval: + + + + + Enable rewind + + + + + Rewind history: + + + + + Idle loops: + + + + + Run all + + + + + Remove known + + + + + Detect and remove + + + + + Preload entire ROM into memory + + + + + Save state extra data: + + + + + + Save game + + + + + Load state extra data: + + + + + Models + + + + + GB only: + + + + + SGB compatible: + + + + + GBC only: + + + + + GBC compatible: + + + + + SGB and GBC compatible: + + + + + Game Boy palette + + + + + Preset: + + + + + + Screenshot + + + + + + Cheat codes + + + + + Enable Game Boy Player features by default + + + + + Enable VBA bug compatibility in ROM hacks + + + + + Video renderer: + + + + + Software + + + + + OpenGL + + + + + OpenGL enhancements + + + + + High-resolution scale: + + + + + (240×160) + + + + + XQ GBA audio (experimental) + + + + + GB BIOS file: + + + + + + + + + + + + + Browse + + + + + Use BIOS file if found + + + + + Skip BIOS intro + + + + + GBA BIOS file: + + + + + GBC BIOS file: + + + + + SGB BIOS file: + + + + + Save games + + + + + + + + + Same directory as the ROM + + + + + Save states + + + + + Screenshots + + + + + Patches + + + + + Cheats + + + + + Log to file + + + + + Log to console + + + + + Select Log File + + + + + Default BG colors: + + + + + Default sprite colors 1: + + + + + Default sprite colors 2: + + + + + Super Game Boy borders + + + + + ShaderSelector + + + Shaders + + + + + Active Shader: + + + + + Name + + + + + Author + + + + + Description + + + + + Unload Shader + + + + + Load New Shader + + + + + ShortcutView + + + Edit Shortcuts + + + + + Keyboard + + + + + Gamepad + + + + + Clear + + + + + TileView + + + Tiles + + + + + Export Selected + + + + + Export All + + + + + 256 colors + + + + + Magnification + + + + + Tiles per row + + + + + Fit to window + + + + + Copy Selected + + + + + Copy All + + + + + VideoView + + + Record Video + + + + + Start + + + + + Stop + + + + + Select File + + + + + Presets + + + + + High &Quality + + + + + &YouTube + + + + + + WebM + + + + + + MP4 + + + + + &Lossless + + + + + 4K + + + + + &1080p + + + + + &720p + + + + + &480p + + + + + &Native + + + + + Format + + + + + MKV + + + + + AVI + + + + + HEVC + + + + + HEVC (NVENC) + + + + + VP8 + + + + + VP9 + + + + + FFV1 + + + + + + None + + + + + FLAC + + + + + Opus + + + + + Vorbis + + + + + MP3 + + + + + AAC + + + + + Uncompressed + + + + + Bitrate (kbps) + + + + + ABR + + + + + H.264 + + + + + H.264 (NVENC) + + + + + VBR + + + + + CRF + + + + + Dimensions + + + + + Lock aspect ratio + + + + + Show advanced + + + + From 8a22a9f7e65bcc6eeb83fa9c14898e4ad8133ba9 Mon Sep 17 00:00:00 2001 From: Edson Armando Date: Sat, 12 Jun 2021 17:09:24 +0000 Subject: [PATCH 26/50] Qt: Update translation (Spanish) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/es/ --- src/platform/qt/ts/mgba-es.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/platform/qt/ts/mgba-es.ts b/src/platform/qt/ts/mgba-es.ts index 488ffbc1a..f9f6e5c99 100644 --- a/src/platform/qt/ts/mgba-es.ts +++ b/src/platform/qt/ts/mgba-es.ts @@ -5286,37 +5286,37 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. Default color palette only - + Sólo paleta de colores predeterminada SGB color palette if available - + Paleta de color SGB si está disponible GBC color palette if available - + Paleta de color GBC si está disponible SGB (preferred) or GBC color palette if available - + Paleta de colores SGB (preferida) o GBC si está disponible Game Boy Camera - + Cámara Game Boy Driver: - + Controlador: Source: - + Fuente: @@ -5362,12 +5362,12 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. Enable VBA bug compatibility in ROM hacks - + Activar modo de compatibilidad VBA en ROM hacks Preset: - + Ajustes: @@ -5662,37 +5662,37 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. Models - + Modelos GB only: - + Sólo GB: SGB compatible: - + Compatible con SGB: GBC only: - + Sólo GBC: GBC compatible: - + Compatible con GBC: SGB and GBC compatible: - + Compatible con SGB y GBC: Game Boy palette - + Paleta de Game Boy From d1ce973756de2acfc28859703fb7464e0ee64251 Mon Sep 17 00:00:00 2001 From: Enes Y Date: Tue, 15 Jun 2021 15:50:34 +0000 Subject: [PATCH 27/50] Qt: Update translation (Turkish) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/tr/ --- src/platform/qt/ts/mgba-tr.ts | 632 +++++++++++++++++----------------- 1 file changed, 316 insertions(+), 316 deletions(-) diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index 3550b9d37..82bd0f060 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -11,12 +11,12 @@ <a href="http://mgba.io/">Website</a> • <a href="https://forums.mgba.io/">Forums / Support</a> • <a href="https://patreon.com/mgba">Donate</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Source</a> - + <a href="http://mgba.io/">Web Sayfası</a> • <a href="https://forums.mgba.io/">Forumlar / Destek</a> • <a href="https://patreon.com/mgba">Bağış</a> • <a href="https://github.com/mgba-emu/mgba/tree/{gitBranch}">Kaynak</a> Branch: <tt>{gitBranch}</tt><br/>Revision: <tt>{gitCommit}</tt> - + Dal: <tt>{gitBranch}</tt><br/>Revizyon: <tt>{gitCommit}</tt> @@ -33,7 +33,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. {projectName} is an open-source Game Boy Advance emulator - + {projectName} bir açık kaynak Game Boy Advance öykünücüsüdür @@ -122,7 +122,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Gate type - + Gate türü @@ -147,12 +147,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Chip ID - + Çip ID Update Chip data - Chip verilerini güncelle + Çip verilerini güncelle @@ -195,7 +195,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Enter codes here... - + Kodları buraya gir... @@ -203,7 +203,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Debugger - + Hata Ayıklayıcı @@ -213,7 +213,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Break - + Ara ver @@ -221,37 +221,37 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Connect to Dolphin - + Doliphin'e bağlan Local computer - + Yerel bilgisayar IP address - + IP Adresi Connect - + Bağlan Disconnect - + Bağlantıyı Kes Close - + Kapat Reset on connect - + Bağlantıyı Sıfırla @@ -259,37 +259,37 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Inspect frame - + Kareyi izle Magnification - + Büyütme Freeze frame - + Kareyi Dondur Backdrop color - + Arka Plan Rengi Disable scanline effects - + Scanline Efektini devre dışı bırak Export - + Çıkar Reset - Reset + Sıfırla @@ -297,12 +297,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Record GIF/WebP/APNG - + GIF/Web/APNG Kaydet Loop - + Döngü @@ -322,17 +322,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. APNG - + APNG GIF - + GIF WebP - + WebP @@ -420,7 +420,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Cancel - + Geri @@ -508,7 +508,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Advanced settings - + Gelişmiş ayarlar @@ -541,7 +541,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Copy - + Kopyala @@ -549,22 +549,22 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save Memory Range - + Bellek Aralığını Kaydet Start Address: - + Adres Başlangıcı: Byte Count: - + Bayt Sayısı: Dump across banks - + Bellek depoları arası döküm @@ -649,57 +649,57 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Search type - + Arama türü Equal to value - + Eş değer Greater than value - + Değerden büyük Less than value - + Değerden küçük Unknown/changed - + Bilinmeyen/değiştirilmiş Changed by value - + Değere göre değiştirildi Unchanged - + Değiştirilmemiş Increased - + Arttırılmış Decreased - + Azaltılmış Search ROM - + ROM Ara New Search - + Yeni Arama @@ -787,7 +787,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save Range - + Aralığı Kaydet @@ -840,12 +840,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Copy - + Kopyala Matrix - + Matrix @@ -1021,7 +1021,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. VBA bug compatibility mode - + VBA hata uyumluluk modu @@ -1056,7 +1056,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Palette preset - + Palet ön ayar @@ -1170,12 +1170,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Copy - + Kopyala Magnification - + Büyütme @@ -1183,7 +1183,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. 2021 - + 2021 @@ -1259,7 +1259,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Can't yank pack in unexpected platform! - + Beklenmedik bir platformda kartı çıkaramazsın! @@ -1282,12 +1282,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Could not load game. Are you sure it's in the correct format? - Oyun yüklenemedi. Doğru formatta olduğundan emin misin? + Oyun yüklenemedi. Doğru formatta olduğundan emin misin? Failed to open save file. Is the save directory writable? - + Kayıt dosyası açılma başarısız. Kayıt yolu yazılabilir mi? @@ -1295,52 +1295,52 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Export frame - + Kareyi Dışarı Aktar Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) None - Hiçbiri + Hiçbiri Background - Arkaplan + Arka Plan Window - + Pencere Objwin - + Nes. Pen. Sprite - + Sprite Backdrop - + Arka fon Frame - + Kare %1 %2 - + %1 %2 @@ -1422,7 +1422,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Failed to open output file: %1 - Çıkış dosyası açılamadı:%1 + Çıkış dosyası açılamadı:%1 @@ -1432,7 +1432,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) @@ -1540,7 +1540,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Swap green components - + Yeşil bileşenleri değiştir @@ -1690,7 +1690,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Integer part (low) - + Tamsayı kısmı (düşük) @@ -1698,7 +1698,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Integer part (high) - + Tamsayı kısmı (yüksek) @@ -2408,7 +2408,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Address (low) - + Adres (düşük) @@ -2420,53 +2420,53 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Address (high) - + Adres (yüksek) Sound frequency (low) - + Ses frekansı (düşük) Sound frequency (high) - + Ses frekansı (yüksek) Source (high) - + Kaynak (yüksek) Source (low) - + Kaynak (düşük) Destination (high) - + Hedef (düşük) Destination (low) - + Hedef (yüksek) Green (low) - + Yeşil (düşük) Green (high) - + Yeşil (yüksek) @@ -2957,341 +2957,341 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Right/A - + Sağ/A Left/B - + Sol/B Up/Select - + Yukarı/Select Down/Start - + Aşağı/Start Active D-pad - + D-pad Etkinleştir Active face buttons - + Yüz tuşlarını etkinleştir Internal clock - + Dahili saat 32× clocking (CGB only) - + 32× saat ölçümü (yalnızca CGB) Transfer active - + Aktarım etkin Divider - + Bölücü 1/16 - + 1/16 LCD STAT - + LCD DURUM Timer - + Zamanlayıcı Serial - + Seri Joypad - + Joypad Volume right - + Ses sağ Output right - + Çıkış sağ Volume left - + Ses sol Output left - + Çıkış sol Background enable/priority - + Arkaplanı etkinleştir/öncelik Enable sprites - + Spriteları Etkinleştir Double-height sprites - + Çift yükseklikte spritelar Background tile map - + Arka plan tile haritası 0x9800 – 0x9BFF - + 0x9800 – 0x9BFF 0x9C00 – 0x9FFF - + 0x9C00 – 0x9FFF Background tile data - + Arka plan tile verisi 0x8800 – 0x87FF - + 0x8800 – 0x87FF 0x8000 – 0x8FFF - + 0x8000 – 0x8FFF Enable window - + Pencereyi etkinleştir Window tile map - + Pencere tile haritası Enable LCD - + LCD Etkinleştir Mode - Mod + Mod 0: HBlank - + 0: HBlank 1: VBlank - + 1: VBlank 2: OAM scan - + 2: OAM tarama 3: HDraw - + 3: HDraw In LYC - + LYC'de Enable HBlank (mode 0) IRQ - + HBlank (mod 0) IRQ Etkinleştir Enable VBlank (mode 1) IRQ - + VBlank (mod 1) Etkinleştir Enable OAM (mode 2) IRQ - + OAM (mod 2) IRQ Etkinleştir Enable LYC IRQ - + LYC IRQ Etkinleştir Current Y coordinate - + Geçerli Y koordinatı Comparison Y coordinate - + Karşılaştırılan Y koordinatı Start upper byte - + Üst bayttan başla Color 0 shade - + Renk 0 ton Color 1 shade - + Renk 1 ton Color 2 shade - + Renk 2 ton Color 3 shade - + Renk 3 ton Prepare to switch speed - + Değiştirme hızını hazırlama Double speed - + 2x Hız VRAM bank - + VRAM deposu Length - + Uzunluk Timing - + Zamanlama Write bit - + Yazma biti Read bit - + Okuma biti Unknown - + Bilinmeyen Current index - + Mevcut indeks Auto-increment - + Oto-artış Red - Kırmızı + Kırmızı Blue - Mavi + Mavi Sprite ordering - + Sprite Düzenleme OAM order - + OAM sırası x coordinate sorting - + x koordinat sıralaması WRAM bank - + WRAM deposu @@ -3305,17 +3305,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Super (L) - + Süper (L) Super (R) - + Süper (R) Menu - + Menü @@ -3323,12 +3323,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Load State - Konum yükle + Durum yükle Save State - Konumu kaydet + Durumu Kaydet @@ -3400,12 +3400,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. An error occurred - + Bir hata meydana geldi DEBUG - + HATA AYIKLAMA @@ -3415,27 +3415,27 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. INFO - + BİLGİ WARN - + UYARI ERROR - + HATA FATAL - + CİDDİ GAME ERROR - + OYUN HATASI @@ -3443,45 +3443,45 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Priority - Öncelik + Öncelik Map base - + Temel harita Tile base - + Temel tile Size - Boyut + Boyut Offset - Çıkıntı + Offset Xform - + Xform Map Addr. - + Harita Ad. Mirror - + Ayna @@ -3508,12 +3508,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. N/A - + N/A Export map - + Haritayı dışarı aktar @@ -3526,12 +3526,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save memory region - + Hafıza bölgesini kaydet Failed to open output file: %1 - Çıkış dosyası açılamadı:%1 + Çıkış dosyası açılamadı: %1 @@ -3539,7 +3539,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Copy selection - Seçileni kopyala + Seçilenleri kopyala @@ -3569,7 +3569,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save selected memory - Seçilen memory'i kaydet + Seçilen hafızayı kaydet @@ -3579,7 +3579,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Load memory - Memory yükle + Hafıza yükle @@ -3631,7 +3631,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Off - + Kapalı @@ -3643,7 +3643,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. --- - + --- @@ -3687,17 +3687,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Official MBCs - + Resmi MBCler Licensed MBCs - + Lisanslı MBC'ler Unlicensed MBCs - + Lisanssız MBCler @@ -3764,12 +3764,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Bug report archive - + Hata rapor arşivi ZIP archive (*.zip) - + ZIP arşivi (*.zip) @@ -3777,62 +3777,62 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save games and save states (%1) - + Kayıtlı oyunlar ve kayıtlı durumlar (%1) Select save game or save state - + Kayıtlı oyun veya kayıtlı durum seç Save games (%1) - + Kayıtlı oyunlar (%1) Select save game - + Kayıtlı oyun seç Conversion failed - + Dönüştürme başarısız Failed to convert the save game. This is probably a bug. - + Kayıtlı oyunu dönüştürme başarısız. Muhtemelen bir hata meydana geldi. No file selected - + Seçili dosya yok Could not open file - + Dosya açılamadı No valid formats found - + Geçerli türler bulunamadı Please select a valid input file - + Lütfen geçerli bir giriş dosyası seç No valid conversions found - + Geçerli dönüştürme bulunamadı Cannot convert save games between platforms - + Kayıtlı oyunlar platformlar arasında dönüştürülemez @@ -3897,12 +3897,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Select directory - + Yolu seç (%1×%2) - + (%1×%2) @@ -3943,17 +3943,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Action - + Eylem Keyboard - Klavye + Klavye Gamepad - + Oyun Kolu @@ -3961,18 +3961,18 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Export tiles - + Tileleri dışarı aktar Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) Export tile - + Tileyi dışarı aktar @@ -4051,32 +4051,32 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Select e-Reader dotcode - + e-Okuyucu nokta kodunu seç e-Reader card (*.raw *.bin *.bmp) - + e-Okuyucu kart (*.raw *.bin *.bmp) Select e-Reader card images - + e-Okuyucu kartından görüntüleri seç Image file (*.png *.jpg *.jpeg) - + Görüntü dosyası (*.png *.jpg *.jpeg) Conversion finished - + Dönüştürme tamamlandı %1 of %2 e-Reader cards converted successfully. - + %1 / %2 e-Okuyucu kartları dönüştürme tamamlandı. @@ -4131,7 +4131,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. - + Uygun görüntü cihazı oluşturma başarısız, yazılım ekranına dönülüyor. Oyunlar özellikle daha büyük ekranlarda yavaş çalışabilir. @@ -4211,7 +4211,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Convert e-Reader card image to raw... - + e-Okuyucu kart resimlerini rawa dönüştür... @@ -4292,7 +4292,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Convert save game... - + Kayıtlı oyun dömnüştürülüyor... @@ -4302,12 +4302,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Connect to Dolphin... - + Dolphin'e Bağlan... Report bug... - + Hata rapor et... @@ -4527,88 +4527,88 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Game &overrides... - Oyunların üzerine yazılanlar + & Oyunun üzerine yazılanlar... Couldn't Start - + Başlatılamadı Save games (%1) - + Kayıtlı oyunlar (%1) Select save game - + Kayıtlı oyun seç mGBA save state files (%1) - + mGBA kayıt durum dosyası (%1) Select save state - + Kayıt durumu seç Could not start game. - + Oyun başlatılamadı. Load alternate save game... - + Alternatif kayıtlı oyun yükle... Load temporary save game... - + Geçici kayıtlı oyunu yükle... Scan e-Reader dotcodes... - + e-Okuyucu noktakodları tara... Import GameShark Save... - + GameShark kaydını içeri aktar... Export GameShark Save... - + GameShark kaydını dışarı aktar... %1× - + %1× Interframe blending - + Kareler-arası Karıştırma Record A/V... - + A/V Kayıt... Record GIF/WebP/APNG... - + GIF/WebP/APNG Kayıt... Game Pak sensors... - + Oyun Kartuş sensörleri... @@ -4653,7 +4653,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. &Frame inspector... - + &Kare denetçisi... @@ -4673,12 +4673,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Record debug video log... - + Hata ayıklama video günlüğünü kaydet... Stop debug video log - + Hata ayıklama video günlüğünü durdur @@ -4748,7 +4748,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Clear - Temizle + Temizle @@ -4756,17 +4756,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. %1 byte - + %1 bayt %1 kiB - + %1 kiB %1 MiB - + %1 MiB @@ -4789,22 +4789,22 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Shift - + Shift Control - + Kontrol Alt - + Alt Meta - + Derece @@ -4870,37 +4870,37 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Generate Bug Report - + Hata Raporu Oluştur <html><head/><body><p>To file a bug report, please first generate a report file to attach to the bug report you're about to file. It is recommended that you include the save files, as these often help with debugging issues. This will collect some information about the version of {projectName} you're running, your configuration, your computer, and the game you currently have open (if any). Once this collection is completed you can review all of the information gathered below and save it to a zip file. The collection will automatically attempt to redact any personal information, such as your username if it's in any of the paths gathered, but just in case you can edit it afterwards. After you have generated and saved it, please click the button below or go to <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> to file the bug report on GitHub. Make sure to attach the report you generated!</p></body></html> - + <html><head/><body><p>Bir hata raporu göndermek için lütfen önce dosyalamak üzere olduğun hata raporuna eklemek üzere bir rapor dosyası oluştur. Genellikle hata ayıklama, sorunlara yardımcı olduğundan, kaydetme dosyalarını eklemeniz önerilir. Bu, çalıştırdığın {projectName} sürümü, sistemin, bilgisayarın ve şu anda açık olan (varsa) oyun hakkında bazı bilgiler toplayacaktır. Bunlar tamamlandıktan sonra aşağıda toplanan tüm bilgileri gözden geçirebilir ve bir zip dosyasına kaydedebilirsin. Veriler, toplanan yollardan herhangi birindeyse, kullanıcı adın gibi kişisel bilgileri otomatik olarak yeniden düzenlemeye çalışır, ancak daha sonra elle düzenleyebilirsin. Oluşturup kaydettikten sonra lütfen aşağıdaki düğmeye tıkla veya <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> adresinden hata dosyanı GitHub'a yükleyebilirsin. Oluşturduğun raporu dönüştürmeyi unutma!</p></body></html> Generate report - + Rapor oluştur Save - Kaydet + Kaydet Open issue list in browser - + Sorun listesini tarayıcıda aç Include save file - + Kayıt dosyasını dahil et Create and include savestate - + Kayıt durumunu oluştur ve dahil et @@ -4908,103 +4908,103 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Convert/Extract Save Game - + Kayıt Dosyasını Dönüştür/Çıkar Input file - + Giriş dosyası Browse - Gözat + Gözat Output file - + Çıkış dosyası %1 %2 save game - + %1 %2 kayıtlı oyun little endian - + little endian big endian - + big endian SRAM - + SRAM %1 flash - + %1 flash %1 EEPROM - + %1 EEPROM %1 SRAM + RTC - + %1 SRAM + RTC %1 SRAM - + %1 SRAM packed MBC2 - + paketli MBC2 unpacked MBC2 - + paketlenmemiş MBC2 MBC6 flash - + MBC6 flash MBC6 combined SRAM + flash - + MBC6 ile birleştirilmiş SRAM + flash MBC6 SRAM - + MBC6 SRAM TAMA5 - + TAMA5 %1 (%2) - + %1 (%2) %1 save state with embedded %2 save game - + Gömülü %2 kayıtlı oyunla %1 kayıt durumu @@ -5107,7 +5107,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Enhancements - + Geliştirmeler @@ -5183,7 +5183,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Sample rate: - Değer oranı + Değer oranı: @@ -5214,7 +5214,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Volume: - Ses + Ses: @@ -5261,7 +5261,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Sync: - Eşitle + Senkronize Et: @@ -5291,82 +5291,82 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Models - + Modeller GB only: - + Sadece GB: SGB compatible: - + SGB uyumlu: GBC only: - + Sadece GBC: GBC compatible: - + Uyumlu GBC: SGB and GBC compatible: - + Uyumlu SGB ve GBC: Game Boy palette - + Game Boy paleti Default color palette only - + Sadece varsayılan renk paleti SGB color palette if available - + Mevcutsa SGB renk paketi GBC color palette if available - + Mevcutsa GBC renk paketi SGB (preferred) or GBC color palette if available - + Mevcutsa SGB (tercih edilen) ya da GBC renk paketi Game Boy Camera - + Game Boy Kamera Driver: - + Sürücü: Source: - + Kaynak: Native (59.7275) - + Yerel (59.7275) Interframe blending - + Kareler-arası Karıştırma @@ -5381,7 +5381,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Library: - Kütüphane + Kütüphane: @@ -5421,12 +5421,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Pause when minimized - + Küçültüldüğünde duraklat Dynamically update window title - + Pencere boyutuna göre dinamik olarak güncelle @@ -5436,28 +5436,28 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Save state extra data: - + Durum ekstra veriyi kaydet: Save game - + Oyunu kaydet Load state extra data: - + Durum ekstra veriyi yükle: Enable VBA bug compatibility in ROM hacks - + ROM hacklerinde VBA hata uyumluluğunu etkinleştir Preset: - + Ön ayar: @@ -5487,12 +5487,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Show OSD messages - + OSD mesajlarını göster Show filename instead of ROM name in title bar - + Başlık çubuğunda ROM adı yerine dosya adını göster @@ -5508,7 +5508,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Fast forward (held) speed: - + İleri sarma (tutulan) hızı: @@ -5565,42 +5565,42 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Enable Game Boy Player features by default - + Game Boy Player özelliklerini varsayılan olarak etkinleştir Video renderer: - + Video oluşturucu: Software - + Yazılım OpenGL - + OpenGL OpenGL enhancements - + OpenGL geliştirmeleri High-resolution scale: - + Yüksek kalite ölçeği: (240×160) - + (240×160) XQ GBA audio (experimental) - + XQ GBA ses (deneysel) @@ -5667,7 +5667,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Screenshots - Ekran görüntüleri: + Ekran Görüntüleri @@ -5786,12 +5786,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Export Selected - + Seçileni Dışarı Aktar Export All - + Hepsini Dışarı Aktar @@ -5816,12 +5816,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Copy Selected - + Seçilenleri Kopyala Copy All - + Hepsini Kopyala @@ -5916,7 +5916,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. 4K - + 4K @@ -5947,7 +5947,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. None - Hiçbiri + Hiçbiri @@ -5992,22 +5992,22 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. H.264 - + H.264 H.264 (NVENC) - + H.264 (NVENC) VBR - + VBR CRF - + CRF From 3f4d2f6086c7812c9bd51ab65ec4f45824dc31cc Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 17 Jun 2021 00:20:29 -0700 Subject: [PATCH 28/50] Core: Don't attempt to restore rewind diffs past start of rewind --- CHANGES | 1 + src/core/rewind.c | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index b04428adc..6b5b6a27d 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,7 @@ Other fixes: - Core: Fix memory leak in opening games from the library - Core: Fix memory searches for relative values (fixes mgba.io/i/2135) - Core: Fix portable mode on macOS + - Core: Don't attempt to restore rewind diffs past start of rewind - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Qt: Fix infrequent deadlock when using sync to video diff --git a/src/core/rewind.c b/src/core/rewind.c index 3a554ff4e..95f47ece4 100644 --- a/src/core/rewind.c +++ b/src/core/rewind.c @@ -12,7 +12,7 @@ DEFINE_VECTOR(mCoreRewindPatches, struct PatchFast); -void _rewindDiff(struct mCoreRewindContext* context); +static void _rewindDiff(struct mCoreRewindContext* context); #ifndef DISABLE_THREADING THREAD_ENTRY _rewindThread(void* context); @@ -136,17 +136,19 @@ bool mCoreRewindRestore(struct mCoreRewindContext* context, struct mCore* core) } --context->current; - struct PatchFast* patch = mCoreRewindPatchesGetPointer(&context->patchMemory, context->current); - size_t size2 = context->previousState->size(context->previousState); - size_t size = context->currentState->size(context->currentState); - if (size2 < size) { - size = size2; + if (context->size) { + struct PatchFast* patch = mCoreRewindPatchesGetPointer(&context->patchMemory, context->current); + size_t size2 = context->previousState->size(context->previousState); + size_t size = context->currentState->size(context->currentState); + if (size2 < size) { + size = size2; + } + void* current = context->currentState->map(context->currentState, size, MAP_READ); + void* previous = context->previousState->map(context->previousState, size, MAP_WRITE); + patch->d.applyPatch(&patch->d, previous, size, current, size); + context->currentState->unmap(context->currentState, current, size); + context->previousState->unmap(context->previousState, previous, size); } - void* current = context->currentState->map(context->currentState, size, MAP_READ); - void* previous = context->previousState->map(context->previousState, size, MAP_WRITE); - patch->d.applyPatch(&patch->d, previous, size, current, size); - context->currentState->unmap(context->currentState, current, size); - context->previousState->unmap(context->previousState, previous, size); struct VFile* nextState = context->previousState; context->previousState = context->currentState; context->currentState = nextState; From 34fed8086c3227c276446f241927509bd14c9d14 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 18 Jun 2021 01:00:18 -0700 Subject: [PATCH 29/50] GBA Memory: Fix prefetch mask when swapping modes within a region --- CHANGES | 1 + src/gba/memory.c | 6 ++++++ src/gba/serialize.c | 1 + 3 files changed, 8 insertions(+) diff --git a/CHANGES b/CHANGES index 6b5b6a27d..aa0913b41 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Emulation fixes: - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer - GBA SIO: Fix SI value for unattached MULTI mode + - GBA Memory: Fix prefetch mask when swapping modes within a region - GBA Video: Revert scanline latching changes (fixes mgba.io/i/2153, mgba.io/i/2149) Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) diff --git a/src/gba/memory.c b/src/gba/memory.c index a7e3ac7c9..bbd06fd86 100644 --- a/src/gba/memory.c +++ b/src/gba/memory.c @@ -127,6 +127,7 @@ void GBAMemoryReset(struct GBA* gba) { memset(gba->memory.io, 0, sizeof(gba->memory.io)); GBAAdjustWaitstates(gba, 0); + gba->memory.activeRegion = -1; gba->memory.agbPrintProtect = 0; gba->memory.agbPrintBase = 0; memset(&gba->memory.agbPrintCtx, 0, sizeof(gba->memory.agbPrintCtx)); @@ -266,6 +267,11 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) { gba->lastJump = address; memory->lastPrefetchedPc = 0; if (newRegion == memory->activeRegion) { + if (cpu->cpsr.t) { + cpu->memory.activeMask |= WORD_SIZE_THUMB; + } else { + cpu->memory.activeMask &= -WORD_SIZE_ARM; + } if (newRegion < REGION_CART0 || (address & (SIZE_CART0 - 1)) < memory->romSize) { return; } diff --git a/src/gba/serialize.c b/src/gba/serialize.c index 022d7b92f..d3ce97d1c 100644 --- a/src/gba/serialize.c +++ b/src/gba/serialize.c @@ -158,6 +158,7 @@ bool GBADeserialize(struct GBA* gba, const struct GBASerializedState* state) { mLOG(GBA_STATE, WARN, "Savestate has unaligned PC and is probably corrupted"); gba->cpu->gprs[ARM_PC] &= ~1; } + gba->memory.activeRegion = -1; gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]); if (state->biosPrefetch) { LOAD_32(gba->memory.biosPrefetch, 0, &state->biosPrefetch); From 645034a89ef20fa8331031a780977f78aa00a5b7 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 19 Jun 2021 14:02:37 -0700 Subject: [PATCH 30/50] GB Audio: Fix audio channel 4 being slow to deserialize --- CHANGES | 1 + src/gb/io.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGES b/CHANGES index aa0913b41..5d72836bc 100644 --- a/CHANGES +++ b/CHANGES @@ -20,6 +20,7 @@ Other fixes: - Core: Fix memory searches for relative values (fixes mgba.io/i/2135) - Core: Fix portable mode on macOS - Core: Don't attempt to restore rewind diffs past start of rewind + - GB Audio: Fix audio channel 4 being slow to deserialize - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Qt: Fix infrequent deadlock when using sync to video diff --git a/src/gb/io.c b/src/gb/io.c index 9ba248882..00f75ffd7 100644 --- a/src/gb/io.c +++ b/src/gb/io.c @@ -724,6 +724,7 @@ void GBIODeserialize(struct GB* gb, const struct GBSerializedState* state) { gb->audio.enable = GBAudioEnableGetEnable(*gb->audio.nr52); if (gb->audio.enable) { + gb->audio.playingCh1 = false; GBIOWrite(gb, GB_REG_NR10, gb->memory.io[GB_REG_NR10]); GBIOWrite(gb, GB_REG_NR11, gb->memory.io[GB_REG_NR11]); GBIOWrite(gb, GB_REG_NR12, gb->memory.io[GB_REG_NR12]); @@ -731,12 +732,14 @@ void GBIODeserialize(struct GB* gb, const struct GBSerializedState* state) { gb->audio.ch1.control.frequency &= 0xFF; gb->audio.ch1.control.frequency |= GBAudioRegisterControlGetFrequency(gb->memory.io[GB_REG_NR14] << 8); gb->audio.ch1.control.stop = GBAudioRegisterControlGetStop(gb->memory.io[GB_REG_NR14] << 8); + gb->audio.playingCh2 = false; GBIOWrite(gb, GB_REG_NR21, gb->memory.io[GB_REG_NR21]); GBIOWrite(gb, GB_REG_NR22, gb->memory.io[GB_REG_NR22]); GBIOWrite(gb, GB_REG_NR23, gb->memory.io[GB_REG_NR23]); gb->audio.ch2.control.frequency &= 0xFF; gb->audio.ch2.control.frequency |= GBAudioRegisterControlGetFrequency(gb->memory.io[GB_REG_NR24] << 8); gb->audio.ch2.control.stop = GBAudioRegisterControlGetStop(gb->memory.io[GB_REG_NR24] << 8); + gb->audio.playingCh3 = false; GBIOWrite(gb, GB_REG_NR30, gb->memory.io[GB_REG_NR30]); GBIOWrite(gb, GB_REG_NR31, gb->memory.io[GB_REG_NR31]); GBIOWrite(gb, GB_REG_NR32, gb->memory.io[GB_REG_NR32]); @@ -744,6 +747,7 @@ void GBIODeserialize(struct GB* gb, const struct GBSerializedState* state) { gb->audio.ch3.rate &= 0xFF; gb->audio.ch3.rate |= GBAudioRegisterControlGetRate(gb->memory.io[GB_REG_NR34] << 8); gb->audio.ch3.stop = GBAudioRegisterControlGetStop(gb->memory.io[GB_REG_NR34] << 8); + gb->audio.playingCh4 = false; GBIOWrite(gb, GB_REG_NR41, gb->memory.io[GB_REG_NR41]); GBIOWrite(gb, GB_REG_NR42, gb->memory.io[GB_REG_NR42]); GBIOWrite(gb, GB_REG_NR43, gb->memory.io[GB_REG_NR43]); From 3a26c94eee950e84797ad3e31e68e467c016261a Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 19 Jun 2021 14:58:01 -0700 Subject: [PATCH 31/50] Qt: Decrease early-sync timeout --- src/platform/qt/DisplayGL.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/qt/DisplayGL.cpp b/src/platform/qt/DisplayGL.cpp index ea9ce4fab..12294d1f1 100644 --- a/src/platform/qt/DisplayGL.cpp +++ b/src/platform/qt/DisplayGL.cpp @@ -444,12 +444,12 @@ void PainterGL::draw() { m_delayTimer.start(); } else { if (sync->audioWait || sync->videoFrameWait) { - while (m_delayTimer.nsecsElapsed() + 2000000 < 1000000000 / sync->fpsTarget) { + while (m_delayTimer.nsecsElapsed() + 1'000'000 < 1'000'000'000 / sync->fpsTarget) { QThread::usleep(500); } forceRedraw = true; } else if (!forceRedraw) { - forceRedraw = m_delayTimer.nsecsElapsed() + 2000000 >= 1000000000 / m_surface->screen()->refreshRate(); + forceRedraw = m_delayTimer.nsecsElapsed() + 1'000'000 >= 1'000'000'000 / m_surface->screen()->refreshRate(); } } mCoreSyncWaitFrameEnd(sync); From feb22a2bdad5bf155d87c03d1b135ec467a8bc64 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 19 Jun 2021 17:41:30 -0700 Subject: [PATCH 32/50] README: Drop Windows Vista mention --- README.md | 2 +- README_DE.md | 2 +- README_ES.md | 2 +- README_ZH_CN.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c6943e434..76b9ab8e1 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ The following mappers are partially supported: Supported Platforms ------------------- -- Windows Vista or newer +- Windows 7 or newer - OS X 10.8 (Mountain Lion)[[3]](#osxver) or newer - Linux - FreeBSD diff --git a/README_DE.md b/README_DE.md index 310ee7193..f14a65498 100644 --- a/README_DE.md +++ b/README_DE.md @@ -79,7 +79,7 @@ Die folgenden Mapper werden teilweise unterstützt: Unterstützte Plattformen ------------------------ -- Windows Vista oder neuer +- Windows 7 oder neuer - OS X 10.8 (Mountain Lion)[[3]](#osxver) oder neuer - Linux - FreeBSD diff --git a/README_ES.md b/README_ES.md index 681ed5556..0a5df3e9b 100644 --- a/README_ES.md +++ b/README_ES.md @@ -79,7 +79,7 @@ Estos mappers tienen soporte parcial: Plataformas soportadas ------------------- -- Windows Vista o más reciente +- Windows 7 o más reciente - OS X 10.8 (Mountain Lion)[[3]](#osxver) o más reciente - Linux - FreeBSD diff --git a/README_ZH_CN.md b/README_ZH_CN.md index 4a5fa0adb..89cc6dc24 100644 --- a/README_ZH_CN.md +++ b/README_ZH_CN.md @@ -77,7 +77,7 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比 支持平台 ------------------- -- Windows Vista 或更新 +- Windows 7 或更新 - OS X 10.8(山狮 / Mountain Lion)[[3]](#osxver) 或更新 - Linux - FreeBSD From b1ff5782010428307ffb397b66e2987dbdb2b627 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 20 Jun 2021 00:34:45 -0700 Subject: [PATCH 33/50] Qt: Only set default controller bindings if loading fails (fixes #799) --- CHANGES | 1 + include/mgba/core/input.h | 2 +- src/core/input.c | 4 ++-- src/platform/qt/InputController.cpp | 18 ++++++++++++------ src/platform/qt/InputController.h | 4 ++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index 5d72836bc..495f06de7 100644 --- a/CHANGES +++ b/CHANGES @@ -32,6 +32,7 @@ Misc: - Core: Suspend runloop when a core crashes - Qt: Rearrange menus some - Qt: Clean up cheats dialog + - Qt: Only set default controller bindings if loading fails (fixes mgba.io/i/799) - Util: Improve speed of UPS patch loading 0.9.1: (2021-04-18) diff --git a/include/mgba/core/input.h b/include/mgba/core/input.h index e5f64d72a..f7ef212a5 100644 --- a/include/mgba/core/input.h +++ b/include/mgba/core/input.h @@ -70,7 +70,7 @@ bool mInputQueryHat(const struct mInputMap*, uint32_t type, int id, struct mInpu void mInputUnbindHat(struct mInputMap*, uint32_t type, int id); void mInputUnbindAllHats(struct mInputMap*, uint32_t type); -void mInputMapLoad(struct mInputMap*, uint32_t type, const struct Configuration*); +bool mInputMapLoad(struct mInputMap*, uint32_t type, const struct Configuration*); void mInputMapSave(const struct mInputMap*, uint32_t type, struct Configuration*); bool mInputProfileLoad(struct mInputMap*, uint32_t type, const struct Configuration*, const char* profile); diff --git a/src/core/input.c b/src/core/input.c index c143805ac..76296a373 100644 --- a/src/core/input.c +++ b/src/core/input.c @@ -578,10 +578,10 @@ void mInputUnbindAllHats(struct mInputMap* map, uint32_t type) { } } -void mInputMapLoad(struct mInputMap* map, uint32_t type, const struct Configuration* config) { +bool mInputMapLoad(struct mInputMap* map, uint32_t type, const struct Configuration* config) { char sectionName[SECTION_NAME_MAX]; _makeSectionName(map->info->platformName, sectionName, SECTION_NAME_MAX, type); - _loadAll(map, type, sectionName, config); + return _loadAll(map, type, sectionName, config); } void mInputMapSave(const struct mInputMap* map, uint32_t type, struct Configuration* config) { diff --git a/src/platform/qt/InputController.cpp b/src/platform/qt/InputController.cpp index 0c5a848c1..9a8458e1d 100644 --- a/src/platform/qt/InputController.cpp +++ b/src/platform/qt/InputController.cpp @@ -44,7 +44,6 @@ InputController::InputController(int playerId, QWidget* topLevel, QObject* paren } ++s_sdlInited; m_sdlPlayer.bindings = &m_inputMap; - mSDLInitBindingsGBA(&m_inputMap); updateJoysticks(); #endif @@ -163,23 +162,28 @@ void InputController::setConfiguration(ConfigController* config) { if (!m_playerAttached) { m_playerAttached = mSDLAttachPlayer(&s_sdlEvents, &m_sdlPlayer); } - loadConfiguration(SDL_BINDING_BUTTON); + if (!loadConfiguration(SDL_BINDING_BUTTON)) { + mSDLInitBindingsGBA(&m_inputMap); + } loadProfile(SDL_BINDING_BUTTON, profileForType(SDL_BINDING_BUTTON)); #endif } -void InputController::loadConfiguration(uint32_t type) { - mInputMapLoad(&m_inputMap, type, m_config->input()); +bool InputController::loadConfiguration(uint32_t type) { + if (!mInputMapLoad(&m_inputMap, type, m_config->input())) { + return false; + } #ifdef BUILD_SDL if (m_playerAttached) { mSDLPlayerLoadConfig(&m_sdlPlayer, m_config->input()); } #endif + return true; } -void InputController::loadProfile(uint32_t type, const QString& profile) { +bool InputController::loadProfile(uint32_t type, const QString& profile) { if (profile.isEmpty()) { - return; + return false; } bool loaded = mInputProfileLoad(&m_inputMap, type, m_config->input(), profile.toUtf8().constData()); recalibrateAxes(); @@ -187,9 +191,11 @@ void InputController::loadProfile(uint32_t type, const QString& profile) { const InputProfile* ip = InputProfile::findProfile(profile); if (ip) { ip->apply(this); + loaded = true; } } emit profileLoaded(profile); + return loaded; } void InputController::saveConfiguration() { diff --git a/src/platform/qt/InputController.h b/src/platform/qt/InputController.h index 93f77091f..a370ba80e 100644 --- a/src/platform/qt/InputController.h +++ b/src/platform/qt/InputController.h @@ -56,8 +56,8 @@ public: void setConfiguration(ConfigController* config); void saveConfiguration(); - void loadConfiguration(uint32_t type); - void loadProfile(uint32_t type, const QString& profile); + bool loadConfiguration(uint32_t type); + bool loadProfile(uint32_t type, const QString& profile); void saveConfiguration(uint32_t type); void saveProfile(uint32_t type, const QString& profile); const char* profileForType(uint32_t type); From ccafcf7bdcc38f44e60f23562b98a8ea9cfad2ff Mon Sep 17 00:00:00 2001 From: Enes Y Date: Sat, 19 Jun 2021 11:46:18 +0000 Subject: [PATCH 34/50] Qt: Update translation (Turkish) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/tr/ --- src/platform/qt/ts/mgba-tr.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index 82bd0f060..afbb9caea 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -1475,7 +1475,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. CGB Mode - + CGB Mod @@ -1485,7 +1485,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Unlocked HBlank - + Kilidi Açık HBlank @@ -1596,7 +1596,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Tile data base (* 16kB) - + Tile veri tabanı (* 16kB) @@ -1620,7 +1620,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Tile map base (* 2kB) - + Tile plan tabanı (* 2kB) @@ -1852,7 +1852,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Background mosaic size horizontal - Arka plan yatay mozaik boyutu + Arka plan yatay mozaik boyutu @@ -1867,27 +1867,27 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. BG 0 target 1 - + BG 0 hedef 1 BG 1 target 1 - + BG 1 hedef 1 BG 2 target 1 - + BG 2 hedef 1 BG 3 target 1 - + BG 3 hedef 1 OBJ target 1 - + NESNE hedef 1 From c6aa7c6673b7a8653201bedeff8e2af6aa924a2f Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 23 Jun 2021 18:53:06 -0700 Subject: [PATCH 35/50] mGUI: Cache save state screenshot validity in state menu (fixes #2005) --- CHANGES | 1 + src/feature/gui/gui-runner.c | 81 +++++++++++++++++++++--------------- src/feature/gui/gui-runner.h | 6 ++- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/CHANGES b/CHANGES index 495f06de7..ecb5ae98e 100644 --- a/CHANGES +++ b/CHANGES @@ -23,6 +23,7 @@ Other fixes: - GB Audio: Fix audio channel 4 being slow to deserialize - GB Core: Fix GBC colors setting breaking default model overrides (fixes mgba.io/i/2161) - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB + - mGUI: Cache save state screenshot validity in state menu (fixes mgba.io/i/2005) - Qt: Fix infrequent deadlock when using sync to video - Qt: Fix applying savetype-only overrides - Qt: Fix crash in sprite view for partially out-of-bounds sprites (fixes mgba.io/i/2165) diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index 3a7046b82..6d6903778 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -42,6 +42,11 @@ enum { #define RUNNER_STATE(X) ((X) << 16) +enum { + SCREENSHOT_VALID = 0x10000, + SCREENSHOT_INVALID = 0x20000, +}; + static const struct mInputPlatformInfo _mGUIKeyInfo = { .platformName = "gui", .keyId = (const char*[GUI_INPUT_MAX]) { @@ -107,39 +112,49 @@ static void _drawBackground(struct GUIBackground* background, void* context) { static void _drawState(struct GUIBackground* background, void* id) { struct mGUIBackground* gbaBackground = (struct mGUIBackground*) background; - int stateId = ((int) id) >> 16; + unsigned stateId = ((uint32_t) id) >> 16; if (gbaBackground->p->drawScreenshot) { unsigned w, h; gbaBackground->p->core->desiredVideoDimensions(gbaBackground->p->core, &w, &h); - if (gbaBackground->screenshot && gbaBackground->screenshotId == (int) id) { - gbaBackground->p->drawScreenshot(gbaBackground->p, gbaBackground->screenshot, w, h, true); + size_t size = w * h * BYTES_PER_PIXEL; + if (size != gbaBackground->imageSize) { + mappedMemoryFree(gbaBackground->image, gbaBackground->imageSize); + gbaBackground->image = NULL; + } + if (gbaBackground->image && gbaBackground->screenshotId == (stateId | SCREENSHOT_VALID)) { + gbaBackground->p->drawScreenshot(gbaBackground->p, gbaBackground->image, w, h, true); return; - } - struct VFile* vf = mCoreGetState(gbaBackground->p->core, stateId, false); - color_t* pixels = gbaBackground->screenshot; - if (!pixels) { - pixels = anonymousMemoryMap(w * h * 4); - gbaBackground->screenshot = pixels; - } - bool success = false; - if (vf && isPNG(vf) && pixels) { - png_structp png = PNGReadOpen(vf, PNG_HEADER_BYTES); - png_infop info = png_create_info_struct(png); - png_infop end = png_create_info_struct(png); - if (png && info && end) { - success = PNGReadHeader(png, info); - success = success && PNGReadPixels(png, info, pixels, w, h, w); - success = success && PNGReadFooter(png, end); + } else if (gbaBackground->screenshotId != (stateId | SCREENSHOT_INVALID)) { + struct VFile* vf = mCoreGetState(gbaBackground->p->core, stateId, false); + color_t* pixels = gbaBackground->image; + if (!pixels) { + pixels = anonymousMemoryMap(size); + gbaBackground->image = pixels; + gbaBackground->imageSize = size; + } + bool success = false; + if (vf && isPNG(vf) && pixels) { + png_structp png = PNGReadOpen(vf, PNG_HEADER_BYTES); + png_infop info = png_create_info_struct(png); + png_infop end = png_create_info_struct(png); + if (png && info && end) { + success = PNGReadHeader(png, info); + success = success && PNGReadPixels(png, info, pixels, w, h, w); + success = success && PNGReadFooter(png, end); + } + PNGReadClose(png, info, end); + } + if (vf) { + vf->close(vf); + } + if (success) { + gbaBackground->p->drawScreenshot(gbaBackground->p, pixels, w, h, true); + gbaBackground->screenshotId = stateId | SCREENSHOT_VALID; + } else { + gbaBackground->screenshotId = stateId | SCREENSHOT_INVALID; } - PNGReadClose(png, info, end); } - if (vf) { - vf->close(vf); - } - if (success) { - gbaBackground->p->drawScreenshot(gbaBackground->p, pixels, w, h, true); - gbaBackground->screenshotId = (int) id; - } else if (gbaBackground->p->drawFrame) { + if (gbaBackground->p->drawFrame && gbaBackground->screenshotId == (stateId | SCREENSHOT_INVALID)) { gbaBackground->p->drawFrame(gbaBackground->p, true); } } @@ -315,7 +330,7 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { .draw = _drawState }, .p = runner, - .screenshot = 0, + .image = 0, .screenshotId = 0 }; struct GUIMenu pauseMenu = { @@ -628,10 +643,10 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { runner->core->reset(runner->core); break; case RUNNER_SAVE_STATE: - mCoreSaveState(runner->core, ((int) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_SAVEDATA | SAVESTATE_RTC | SAVESTATE_METADATA); + mCoreSaveState(runner->core, ((uint32_t) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_SAVEDATA | SAVESTATE_RTC | SAVESTATE_METADATA); break; case RUNNER_LOAD_STATE: - mCoreLoadState(runner->core, ((int) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_RTC); + mCoreLoadState(runner->core, ((uint32_t) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_RTC); break; case RUNNER_SCREENSHOT: mCoreTakeScreenshot(runner->core); @@ -696,10 +711,8 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { mLOG(GUI_RUNNER, DEBUG, "Unloading game..."); runner->core->unloadROM(runner->core); drawState.screenshotId = 0; - if (drawState.screenshot) { - unsigned w, h; - runner->core->desiredVideoDimensions(runner->core, &w, &h); - mappedMemoryFree(drawState.screenshot, w * h * 4); + if (drawState.image) { + mappedMemoryFree(drawState.image, drawState.imageSize); } if (runner->config.port) { diff --git a/src/feature/gui/gui-runner.h b/src/feature/gui/gui-runner.h index 20762d58b..ea18cc5b8 100644 --- a/src/feature/gui/gui-runner.h +++ b/src/feature/gui/gui-runner.h @@ -31,8 +31,10 @@ struct mGUIBackground { struct GUIBackground d; struct mGUIRunner* p; - color_t* screenshot; - int screenshotId; + color_t* image; + size_t imageSize; + + unsigned screenshotId; }; struct mCore; From dc40ef7cb807cfe9f1f2aa74a20cc107d92fef9d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 23 Jun 2021 19:05:28 -0700 Subject: [PATCH 36/50] Qt: Fix library loading rejecting non-GBA games (fixes #2175) --- src/platform/qt/library/LibraryController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/qt/library/LibraryController.cpp b/src/platform/qt/library/LibraryController.cpp index 9e7045b15..403bed6e7 100644 --- a/src/platform/qt/library/LibraryController.cpp +++ b/src/platform/qt/library/LibraryController.cpp @@ -106,6 +106,7 @@ VFile* LibraryController::selectedVFile() { QByteArray filenameUtf8(entry.filename.toUtf8()); libentry.base = baseUtf8.constData(); libentry.filename = filenameUtf8.constData(); + libentry.platform = mPLATFORM_NONE; return mLibraryOpenVFile(m_library.get(), &libentry); } else { return nullptr; From 78d3a1f17e862a8d034ad40fe242cad3d5591113 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 23 Jun 2021 20:34:11 -0700 Subject: [PATCH 37/50] GB Memory: Add cursory cartridge open bus emulation (fixes #2032) --- CHANGES | 1 + include/mgba/internal/gb/memory.h | 3 ++ include/mgba/internal/gb/serialize.h | 12 ++++-- src/gb/mbc.c | 4 ++ src/gb/memory.c | 55 +++++++++++++++++++--------- 5 files changed, 54 insertions(+), 21 deletions(-) diff --git a/CHANGES b/CHANGES index ecb5ae98e..5ef27626f 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ Features: - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for 64 kiB SRAM saves used in some bootlegs Emulation fixes: + - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer diff --git a/include/mgba/internal/gb/memory.h b/include/mgba/internal/gb/memory.h index e2eecca4d..a9dc8b7e9 100644 --- a/include/mgba/internal/gb/memory.h +++ b/include/mgba/internal/gb/memory.h @@ -181,6 +181,9 @@ struct GBMemory { union GBMBCState mbcState; int currentBank; int currentBank0; + unsigned cartBusDecay; + uint16_t cartBusPc; + uint8_t cartBus; uint8_t* wram; uint8_t* wramBank; diff --git a/include/mgba/internal/gb/serialize.h b/include/mgba/internal/gb/serialize.h index 18ac83b09..5191e0966 100644 --- a/include/mgba/internal/gb/serialize.h +++ b/include/mgba/internal/gb/serialize.h @@ -157,9 +157,11 @@ mLOG_DECLARE_CATEGORY(GB_STATE); * | bit 3: IME * | bit 4: Is HDMA active? * | bits 5 - 7: Active RTC register - * | 0x00196 - 0x00197: Reserved (leave zero) + * | 0x00196: Cartridge bus value + * | 0x00197: Reserved (leave zero) * 0x00198 - 0x0019F: Global cycle counter - * 0x001A0 - 0x0025F: Reserved (leave zero) + * 0x001A0 - 0x001A1: Program counter for last cartridge read + * 0x001A2 - 0x0025F: Reserved (leave zero) * 0x00260 - 0x002FF: OAM * 0x00300 - 0x0037F: I/O memory * 0x00380 - 0x003FE: HRAM @@ -401,12 +403,14 @@ struct GBSerializedState { }; GBSerializedMemoryFlags flags; - uint16_t reserved; + uint8_t cartBus; + uint8_t reserved; } memory; uint64_t globalCycles; - uint32_t reserved[48]; + uint16_t cartBusPc; + uint16_t reserved[95]; uint8_t oam[GB_SIZE_OAM]; diff --git a/src/gb/mbc.c b/src/gb/mbc.c index 3cb9a1a5d..bd8ad46f0 100644 --- a/src/gb/mbc.c +++ b/src/gb/mbc.c @@ -322,6 +322,7 @@ void GBMBCInit(struct GB* gb) { } gb->memory.mbcRead = NULL; gb->memory.directSramAccess = true; + gb->memory.cartBusDecay = 4; switch (gb->memory.mbcType) { case GB_MBC_NONE: gb->memory.mbcWrite = _GBMBCNone; @@ -442,6 +443,9 @@ void GBMBCInit(struct GB* gb) { void GBMBCReset(struct GB* gb) { gb->memory.currentBank0 = 0; gb->memory.romBank = &gb->memory.rom[GB_SIZE_CART_BANK0]; + gb->memory.cartBus = 0xFF; + gb->memory.cartBusPc = 0; + gb->memory.cartBusDecay = 1; memset(&gb->memory.mbcState, 0, sizeof(gb->memory.mbcState)); GBMBCInit(gb); diff --git a/src/gb/memory.c b/src/gb/memory.c index fec8bf2ab..0ec280aa1 100644 --- a/src/gb/memory.c +++ b/src/gb/memory.c @@ -51,12 +51,17 @@ static const uint8_t _blockedRegion[1] = { 0xFF }; static void _pristineCow(struct GB* gba); -static uint8_t GBFastLoad8(struct SM83Core* cpu, uint16_t address) { +static uint8_t GBCartLoad8(struct SM83Core* cpu, uint16_t address) { if (UNLIKELY(address >= cpu->memory.activeRegionEnd)) { cpu->memory.setActiveRegion(cpu, address); return cpu->memory.cpuLoad8(cpu, address); } - return cpu->memory.activeRegion[address & cpu->memory.activeMask]; + struct GB* gb = (struct GB*) cpu->master; + struct GBMemory* memory = &gb->memory; + memory->cartBusPc = address; + uint8_t value = cpu->memory.activeRegion[address & cpu->memory.activeMask]; + memory->cartBus = value; + return value; } static void GBSetActiveRegion(struct SM83Core* cpu, uint16_t address) { @@ -67,7 +72,7 @@ static void GBSetActiveRegion(struct SM83Core* cpu, uint16_t address) { case GB_REGION_CART_BANK0 + 1: case GB_REGION_CART_BANK0 + 2: case GB_REGION_CART_BANK0 + 3: - cpu->memory.cpuLoad8 = GBFastLoad8; + cpu->memory.cpuLoad8 = GBCartLoad8; cpu->memory.activeRegion = memory->romBase; cpu->memory.activeRegionEnd = GB_BASE_CART_BANK1; cpu->memory.activeMask = GB_SIZE_CART_BANK0 - 1; @@ -88,7 +93,7 @@ static void GBSetActiveRegion(struct SM83Core* cpu, uint16_t address) { cpu->memory.cpuLoad8 = GBLoad8; break; } - cpu->memory.cpuLoad8 = GBFastLoad8; + cpu->memory.cpuLoad8 = GBCartLoad8; if (gb->memory.mbcType != GB_MBC6) { cpu->memory.activeRegion = memory->romBank; cpu->memory.activeRegionEnd = GB_BASE_VRAM; @@ -238,24 +243,31 @@ uint8_t GBLoad8(struct SM83Core* cpu, uint16_t address) { case GB_REGION_CART_BANK0 + 2: case GB_REGION_CART_BANK0 + 3: if (address >= memory->romSize) { - return 0xFF; + memory->cartBus = 0xFF; + } else { + memory->cartBus = memory->romBase[address & (GB_SIZE_CART_BANK0 - 1)]; } - return memory->romBase[address & (GB_SIZE_CART_BANK0 - 1)]; + memory->cartBusPc = cpu->pc; + return memory->cartBus; case GB_REGION_CART_BANK1 + 2: case GB_REGION_CART_BANK1 + 3: if (memory->mbcType == GB_MBC6) { - return memory->mbcState.mbc6.romBank1[address & (GB_SIZE_CART_HALFBANK - 1)]; + memory->cartBus = memory->mbcState.mbc6.romBank1[address & (GB_SIZE_CART_HALFBANK - 1)]; + memory->cartBusPc = cpu->pc; + return memory->cartBus; } // Fall through case GB_REGION_CART_BANK1: case GB_REGION_CART_BANK1 + 1: if (address >= memory->romSize) { - return 0xFF; + memory->cartBus = 0xFF; + } else if ((memory->mbcType & GB_UNL_BBD) == GB_UNL_BBD) { + memory->cartBus = memory->mbcRead(memory, address); + } else { + memory->cartBus = memory->romBank[address & (GB_SIZE_CART_BANK0 - 1)]; } - if ((memory->mbcType & GB_UNL_BBD) == GB_UNL_BBD) { - return memory->mbcRead(memory, address); - } - return memory->romBank[address & (GB_SIZE_CART_BANK0 - 1)]; + memory->cartBusPc = cpu->pc; + return memory->cartBus; case GB_REGION_VRAM: case GB_REGION_VRAM + 1: if (gb->video.mode != 3) { @@ -265,15 +277,18 @@ uint8_t GBLoad8(struct SM83Core* cpu, uint16_t address) { case GB_REGION_EXTERNAL_RAM: case GB_REGION_EXTERNAL_RAM + 1: if (memory->rtcAccess) { - return memory->rtcRegs[memory->activeRtcReg]; + memory->cartBus = memory->rtcRegs[memory->activeRtcReg]; } else if (memory->mbcRead) { - return memory->mbcRead(memory, address); + memory->cartBus = memory->mbcRead(memory, address); } else if (memory->sramAccess && memory->sram) { - return memory->sramBank[address & (GB_SIZE_EXTERNAL_RAM - 1)]; + memory->cartBus = memory->sramBank[address & (GB_SIZE_EXTERNAL_RAM - 1)]; } else if (memory->mbcType == GB_HuC3) { - return 0x01; // TODO: Is this supposed to be the current SRAM bank? + memory->cartBus = 0x01; // TODO: Is this supposed to be the current SRAM bank? + } else if (cpu->tMultiplier * (cpu->pc - memory->cartBusPc) >= memory->cartBusDecay) { + memory->cartBus = 0xFF; } - return 0xFF; + memory->cartBusPc = cpu->pc; + return memory->cartBus; case GB_REGION_WORKING_RAM_BANK0: case GB_REGION_WORKING_RAM_BANK0 + 2: return memory->wram[address & (GB_SIZE_WORKING_RAM_BANK0 - 1)]; @@ -705,6 +720,9 @@ void GBMemorySerialize(const struct GB* gb, struct GBSerializedState* state) { flags = GBSerializedMemoryFlagsSetActiveRtcReg(flags, memory->activeRtcReg); STORE_16LE(flags, 0, &state->memory.flags); + state->memory.cartBus = memory->cartBus; + STORE_16LE(memory->cartBusPc, 0, &state->cartBusPc); + switch (memory->mbcType) { case GB_MBC1: state->memory.mbc1.mode = memory->mbcState.mbc1.mode; @@ -784,6 +802,9 @@ void GBMemoryDeserialize(struct GB* gb, const struct GBSerializedState* state) { memory->isHdma = GBSerializedMemoryFlagsGetIsHdma(flags); memory->activeRtcReg = GBSerializedMemoryFlagsGetActiveRtcReg(flags); + memory->cartBus = state->memory.cartBus; + LOAD_16LE(memory->cartBusPc, 0, &state->cartBusPc); + switch (memory->mbcType) { case GB_MBC1: memory->mbcState.mbc1.mode = state->memory.mbc1.mode; From 1d9bc4c3f700d7ec010cdebe3ceb8ecd98de39a8 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 23 Jun 2021 21:21:29 -0700 Subject: [PATCH 38/50] CInema: Fix renamed MBC1 RAM tests --- .../baseline_0000.png | Bin .../mbc1/{ram_256Kb => ram_256kb}/test.gb | Bin 65536 -> 65536 bytes .../mbc1/{ram_256Kb => ram_256kb}/test.sym | 64 +++++++++--------- .../{ram_64Kb => ram_64kb}/baseline_0000.png | Bin .../mbc1/{ram_64Kb => ram_64kb}/test.gb | Bin 65536 -> 65536 bytes .../mbc1/{ram_64Kb => ram_64kb}/test.sym | 62 +++++++++-------- 6 files changed, 65 insertions(+), 61 deletions(-) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_256Kb => ram_256kb}/baseline_0000.png (100%) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_256Kb => ram_256kb}/test.gb (97%) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_256Kb => ram_256kb}/test.sym (66%) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_64Kb => ram_64kb}/baseline_0000.png (100%) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_64Kb => ram_64kb}/test.gb (98%) rename cinema/gb/mooneye-gb/emulator-only/mbc1/{ram_64Kb => ram_64kb}/test.sym (65%) diff --git a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256Kb/baseline_0000.png b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256kb/baseline_0000.png similarity index 100% rename from cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256Kb/baseline_0000.png rename to cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256kb/baseline_0000.png diff --git a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256Kb/test.gb b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256kb/test.gb similarity index 97% rename from cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256Kb/test.gb rename to cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256kb/test.gb index 02e0c0d2fafa8e8501cc76cffc808ed3edec5d56..33d69f88c1d2af6afd09db67751208d20f796ef5 100644 GIT binary patch delta 892 zcmZo@U}J|ALD=82K2^Ui46$$t=jQfKhU5?f!yTj3CxO5Q_=K`VV3;gIHXz7#LuRE154f3&7MvIAAUHOlKiH zs5UTX{VRq9m_~xOfL+53H09P3s0A<%*a8>_ZazpEBgg`f;}z>yBKh{HfFg(s^X*Xq zu(!ZsumHhS0y3C@5*}>8yJb76+M{`e{es`vd81>tI77v@;bnn2mAcu;fo%p)ge$!ApWW%EHPZX0a0+c z;s53?=5(G(0uhq8JY*H#1D(Kd5^QFU0LV?Xl|oQ{Xj8_<&u3DO`adry$HVo5chlo3XceoGtJ;yJ3=tso7+Y%CnO_ zs(`o}h--kj7KkO}9qgQdG%jLtqK7!+@yV4Q=8P97Z}bpRyya1`@r0C;Ft^0_a3HHn jiCf|a7xVHHN)kU0o_*|b^yFqk!Si~X9Rv@+iGx}Io4;F`V^gw)+cW zF@jkCKrAK@>pzIa3}SJ;VqkzN&SJjQEC5pv;Xt)OI8a^nVBY#y3<)re1Z@GkhWTt3 z^Q|RN3t$|u1uzcO0*Eq3kOd&eE6zgl>`?*5dJrGx+oJ+tZ=tI}Qvx!WfD&Q@?9Z!u zaL583`3xzrKpc2rfj9`iJQIM2)p}46unU5{1!IGB!Pp>8P&P0UKPy@>AO7Hec9X~1 z2Oc4*#U%><-V9<4lOvf$bdGx{g2UkA;o}~s)ge$!ApWW%ELmK<0a0*xhR5ca%;`K6 z1^6ckL`YunkX3jObPvNxumw2+FbgIZ3dq)jZE|z;^s!P1$}i1JQ7~cE(CU6BGuq!ZyD-h%qgt=z3nBZeG_9~CFX&z^nP4X~x>GY^P+v!mS#MMAt z1H`pJEFtP(=LDqDkOPCn-}Mii9ymYne&A&%_`t#L&ja_vdnY%0n2R0vsC_2?PTr<9 o|ANX%MTQ1O28H#9FHFARA;WUh. -; wla symbolic information for "/home/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_256Kb.gb". +; wla symbolic information for "/home/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_256kb.gb". [labels] -01:48bd clear_vram -01:487a disable_lcd_safe -01:4880 disable_lcd_safe@wait_ly_0 -01:4898 memcmp -01:48c7 memcpy -01:48d0 memset -01:48e0 print_inline_string -01:48a6 print_load_font -01:48b2 print_newline -01:48d9 print_string +01:48c7 clear_vram +01:4884 disable_lcd_safe +01:488a disable_lcd_safe@wait_ly_0 +01:48a2 memcmp +01:48d1 memcpy +01:48da memset +01:48ea print_inline_string +01:48b0 print_load_font +01:48bc print_newline +01:48e3 print_string 01:47f0 quit 01:4805 quit@cb_return 01:480a quit@wait_ly_1 @@ -20,24 +20,24 @@ 01:481c quit@wait_ly_4 01:4826 quit@success 01:484d quit@failure -01:4862 quit@halt -01:4863 quit@halt_execution_0 -01:4866 reset_screen -01:4889 serial_send_byte +01:486c quit@halt +01:486d quit@halt_execution_0 +01:4870 reset_screen +01:4893 serial_send_byte 01:4000 font 00:0150 main -00:0150 test_round1 -00:016e test_round2 -00:01d2 test_round3 -00:0232 test_round4 -00:02a0 test_round5 -00:02fc test_round6 -00:0330 test_finish -00:033a test_finish@quit_inline_1 -00:034b copy_bank_data -00:036a check_bank_data -00:038a all_ff -00:039a all_00 +00:015f test_round1 +00:017d test_round2 +00:01e1 test_round3 +00:0241 test_round4 +00:02af test_round5 +00:030b test_round6 +00:033f test_finish +00:0349 test_finish@quit_inline_1 +00:035a copy_bank_data +00:0379 check_bank_data +00:0399 all_ff +00:03a9 all_00 00:1000 bank_data 00:1040 clear_ram 00:1062 fail_round1 @@ -52,6 +52,7 @@ 00:10f0 fail_round5@quit_inline_6 00:1107 fail_round6 00:1111 fail_round6@quit_inline_7 +00:ff80 memcmp_hram [definitions] 0000000a _sizeof_clear_vram @@ -63,12 +64,13 @@ 0000000c _sizeof_print_load_font 0000000b _sizeof_print_newline 00000007 _sizeof_print_string -00000076 _sizeof_quit +00000080 _sizeof_quit 00000014 _sizeof_reset_screen 0000000f _sizeof_serial_send_byte 000007f0 _sizeof_font -00000000 _sizeof_test_round1 -0000001e _sizeof_main +00000020 _sizeof_memcmp_hram +0000000f _sizeof_main +0000001e _sizeof_test_round1 00000064 _sizeof_test_round2 00000060 _sizeof_test_round3 0000006e _sizeof_test_round4 @@ -78,7 +80,7 @@ 0000001f _sizeof_copy_bank_data 00000020 _sizeof_check_bank_data 00000010 _sizeof_all_ff -00000c66 _sizeof_all_00 +00000c57 _sizeof_all_00 00000040 _sizeof_bank_data 00000022 _sizeof_clear_ram 00000021 _sizeof_fail_round1 diff --git a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/baseline_0000.png b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/baseline_0000.png similarity index 100% rename from cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/baseline_0000.png rename to cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/baseline_0000.png diff --git a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.gb b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/test.gb similarity index 98% rename from cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.gb rename to cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/test.gb index 7136b5dc09dbb5bd323bb003a0a07623865138ce..8b0c95355657789f686e13b8a7909f106a2eeedb 100644 GIT binary patch delta 632 zcmZo@U}4dFM24pGYK**U=(0D+wlLEkpP&x0nR-u zAYk|B6@$asFebadQ2HN~{tu<-V9<4Cj}V<6d@kJ=mBPfe0>a9n`I8+5Wb45exjB0JSSbYMm*%A?7%_-BK~&bkReB&RFor9bk6nQYT)_eC z3QR!?{)55hy8<%i>@6N=3p~zlnB-w|~EBAg%`D8X&F(VhMQ%J0~EGiFQ}YUWN2VyP*{KX!sH7cGAuVej-K57P(WUP M^9KO|IB{DO0Qa*1KL7v# diff --git a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.sym b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/test.sym similarity index 65% rename from cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.sym rename to cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/test.sym index ea568735e..80a8f7cce 100644 --- a/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.sym +++ b/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64kb/test.sym @@ -1,17 +1,17 @@ ; this file was created with wlalink by ville helin . -; wla symbolic information for "/home/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_64Kb.gb". +; wla symbolic information for "/home/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_64kb.gb". [labels] -01:48bd clear_vram -01:487a disable_lcd_safe -01:4880 disable_lcd_safe@wait_ly_0 -01:4898 memcmp -01:48c7 memcpy -01:48d0 memset -01:48e0 print_inline_string -01:48a6 print_load_font -01:48b2 print_newline -01:48d9 print_string +01:48c7 clear_vram +01:4884 disable_lcd_safe +01:488a disable_lcd_safe@wait_ly_0 +01:48a2 memcmp +01:48d1 memcpy +01:48da memset +01:48ea print_inline_string +01:48b0 print_load_font +01:48bc print_newline +01:48e3 print_string 01:47f0 quit 01:4805 quit@cb_return 01:480a quit@wait_ly_1 @@ -20,23 +20,23 @@ 01:481c quit@wait_ly_4 01:4826 quit@success 01:484d quit@failure -01:4862 quit@halt -01:4863 quit@halt_execution_0 -01:4866 reset_screen -01:4889 serial_send_byte +01:486c quit@halt +01:486d quit@halt_execution_0 +01:4870 reset_screen +01:4893 serial_send_byte 01:4000 font 00:0150 main -00:0150 test_round1 -00:016e test_round2 -00:01c2 test_round3 -00:01cb test_round4 -00:01fb test_round5 -00:022c test_finish -00:0236 test_finish@quit_inline_1 -00:0247 copy_bank_data -00:025f check_bank_data -00:0278 all_ff -00:0288 all_00 +00:015f test_round1 +00:017d test_round2 +00:01d1 test_round3 +00:01da test_round4 +00:020a test_round5 +00:023b test_finish +00:0245 test_finish@quit_inline_1 +00:0256 copy_bank_data +00:026e check_bank_data +00:0287 all_ff +00:0297 all_00 00:1000 bank_data 00:1010 clear_ram 00:1032 fail_round1 @@ -49,6 +49,7 @@ 00:109f fail_round4@quit_inline_5 00:10b6 fail_round5 00:10c0 fail_round5@quit_inline_6 +00:ff80 memcmp_hram [definitions] 0000000a _sizeof_clear_vram @@ -60,12 +61,13 @@ 0000000c _sizeof_print_load_font 0000000b _sizeof_print_newline 00000007 _sizeof_print_string -00000076 _sizeof_quit +00000080 _sizeof_quit 00000014 _sizeof_reset_screen 0000000f _sizeof_serial_send_byte 000007f0 _sizeof_font -00000000 _sizeof_test_round1 -0000001e _sizeof_main +00000020 _sizeof_memcmp_hram +0000000f _sizeof_main +0000001e _sizeof_test_round1 00000054 _sizeof_test_round2 00000009 _sizeof_test_round3 00000030 _sizeof_test_round4 @@ -74,7 +76,7 @@ 00000018 _sizeof_copy_bank_data 00000019 _sizeof_check_bank_data 00000010 _sizeof_all_ff -00000d78 _sizeof_all_00 +00000d69 _sizeof_all_00 00000010 _sizeof_bank_data 00000022 _sizeof_clear_ram 00000021 _sizeof_fail_round1 From fee40bc74d0f8959c546c1df078b87ec1caabc92 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 24 Jun 2021 17:35:16 -0700 Subject: [PATCH 39/50] Res: Port scale2x an scale4x shaders --- CHANGES | 1 + res/shaders/scale2x.shader/manifest.ini | 11 +++++ res/shaders/scale2x.shader/scale2x.fs | 39 ++++++++++++++++++ res/shaders/scale4x.shader/manifest.ini | 11 +++++ res/shaders/scale4x.shader/scale4x.fs | 54 +++++++++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 res/shaders/scale2x.shader/manifest.ini create mode 100644 res/shaders/scale2x.shader/scale2x.fs create mode 100644 res/shaders/scale4x.shader/manifest.ini create mode 100644 res/shaders/scale4x.shader/scale4x.fs diff --git a/CHANGES b/CHANGES index 5ef27626f..d42fb656d 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,7 @@ Features: - Cheat code support in homebrew ports - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for 64 kiB SRAM saves used in some bootlegs + - Additional scaling shaders Emulation fixes: - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) diff --git a/res/shaders/scale2x.shader/manifest.ini b/res/shaders/scale2x.shader/manifest.ini new file mode 100644 index 000000000..93b9f91c3 --- /dev/null +++ b/res/shaders/scale2x.shader/manifest.ini @@ -0,0 +1,11 @@ +[shader] +name=Scale2x +author=singron +description=AdvanceMAME's Scale2x algorithm +passes=1 + +[pass.0] +fragmentShader=scale2x.fs +blend=1 +width=-2 +height=-2 diff --git a/res/shaders/scale2x.shader/scale2x.fs b/res/shaders/scale2x.shader/scale2x.fs new file mode 100644 index 000000000..457f61987 --- /dev/null +++ b/res/shaders/scale2x.shader/scale2x.fs @@ -0,0 +1,39 @@ +/* Shader implementation of Scale2x is adapted from https://gist.github.com/singron/3161079 */ +varying vec2 texCoord; +uniform sampler2D tex; +uniform vec2 texSize; + +void main() { + // o = offset, the width of a pixel + vec2 o = 1.0 / texSize; + + // texel arrangement + // A B C + // D E F + // G H I + vec4 B = texture2D(tex, texCoord + vec2( 0.0, o.y)); + vec4 D = texture2D(tex, texCoord + vec2( -o.x, 0.0)); + vec4 E = texture2D(tex, texCoord + vec2( 0.0, 0.0)); + vec4 F = texture2D(tex, texCoord + vec2( o.x, 0.0)); + vec4 H = texture2D(tex, texCoord + vec2( 0.0, -o.y)); + vec2 p = texCoord * texSize; + // p = the texCoord within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + gl_FragColor = B == F && B != D && F != H ? F : E; + } else { + // Bottom Right + gl_FragColor = H == F && D != H && B != F ? F : E; + } + } else { + if (p.y > .5) { + // Top Left + gl_FragColor = D == B && B != F && D != H ? D : E; + } else { + // Bottom Left + gl_FragColor = D == H && D != B && H != F ? D : E; + } + } +} diff --git a/res/shaders/scale4x.shader/manifest.ini b/res/shaders/scale4x.shader/manifest.ini new file mode 100644 index 000000000..b3c6c93de --- /dev/null +++ b/res/shaders/scale4x.shader/manifest.ini @@ -0,0 +1,11 @@ +[shader] +name=Scale4x +author=singron, endrift +description=AdvanceMAME's Scale4x algorithm +passes=1 + +[pass.0] +fragmentShader=scale4x.fs +blend=1 +width=-4 +height=-4 diff --git a/res/shaders/scale4x.shader/scale4x.fs b/res/shaders/scale4x.shader/scale4x.fs new file mode 100644 index 000000000..b928ac5ea --- /dev/null +++ b/res/shaders/scale4x.shader/scale4x.fs @@ -0,0 +1,54 @@ +/* Shader implementation of Scale2x is adapted from https://gist.github.com/singron/3161079 */ +varying vec2 texCoord; +uniform sampler2D tex; +uniform vec2 texSize; + +vec4 scale2x(vec4 pixels[5], vec2 p) { + // texel arrangement + // x 0 x + // 1 2 3 + // x 4 x + // p = the texCoord within a pixel [0...1] + p = fract(p); + if (p.x > .5) { + if (p.y > .5) { + // Top Right + return pixels[0] == pixels[3] && pixels[0] != pixels[1] && pixels[3] != pixels[4] ? pixels[3] : pixels[2]; + } else { + // Bottom Right + return pixels[4] == pixels[3] && pixels[1] != pixels[4] && pixels[0] != pixels[3] ? pixels[3] : pixels[2]; + } + } else { + if (p.y > .5) { + // Top Left + return pixels[1] == pixels[0] && pixels[0] != pixels[3] && pixels[1] != pixels[4] ? pixels[1] : pixels[2]; + } else { + // Bottom Left + return pixels[1] == pixels[4] && pixels[1] != pixels[0] && pixels[4] != pixels[3] ? pixels[1] : pixels[2]; + } + } +} + +vec4 scaleNeighborhood(vec2 p, vec2 x, vec2 o) { + vec4 neighborhood[5]; + neighborhood[0] = texture2D(tex, texCoord + x + vec2( 0.0, o.y)); + neighborhood[1] = texture2D(tex, texCoord + x + vec2(-o.x, 0.0)); + neighborhood[2] = texture2D(tex, texCoord + x + vec2( 0.0, 0.0)); + neighborhood[3] = texture2D(tex, texCoord + x + vec2( o.x, 0.0)); + neighborhood[4] = texture2D(tex, texCoord + x + vec2( 0.0, -o.y)); + return scale2x(neighborhood, p + x * texSize); +} + +void main() { + // o = offset, the width of a pixel + vec2 o = 1.0 / texSize; + + vec2 p = texCoord * texSize; + vec4 pixels[5]; + pixels[0] = scaleNeighborhood(p, vec2( 0.0, o.y / 2.0), o); + pixels[1] = scaleNeighborhood(p, vec2(-o.x / 2.0, 0.0), o); + pixels[2] = scaleNeighborhood(p, vec2( 0.0, 0.0), o); + pixels[3] = scaleNeighborhood(p, vec2( o.x / 2.0, 0.0), o); + pixels[4] = scaleNeighborhood(p, vec2( 0.0, -o.y / 2.0), o); + gl_FragColor = scale2x(pixels, p * 2.0); +} From 14419282f441ceab9d33cda60baa5bc60156ed33 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 24 Jun 2021 17:57:49 -0700 Subject: [PATCH 40/50] Qt: Add options to mute on minimize or focus lost --- src/platform/qt/SettingsView.cpp | 2 ++ src/platform/qt/SettingsView.ui | 60 +++++++++++++++++++++++++------- src/platform/qt/Window.cpp | 52 +++++++++++++++++++++------ 3 files changed, 91 insertions(+), 23 deletions(-) diff --git a/src/platform/qt/SettingsView.cpp b/src/platform/qt/SettingsView.cpp index 315bfb942..b49dcfee7 100644 --- a/src/platform/qt/SettingsView.cpp +++ b/src/platform/qt/SettingsView.cpp @@ -421,6 +421,8 @@ void SettingsView::updateConfig() { saveSetting("suspendScreensaver", m_ui.suspendScreensaver); saveSetting("pauseOnFocusLost", m_ui.pauseOnFocusLost); saveSetting("pauseOnMinimize", m_ui.pauseOnMinimize); + saveSetting("muteOnFocusLost", m_ui.muteOnFocusLost); + saveSetting("muteOnMinimize", m_ui.muteOnMinimize); saveSetting("savegamePath", m_ui.savegamePath); saveSetting("savestatePath", m_ui.savestatePath); saveSetting("screenshotPath", m_ui.screenshotPath); diff --git a/src/platform/qt/SettingsView.ui b/src/platform/qt/SettingsView.ui index 26cfc5d52..0af896c86 100644 --- a/src/platform/qt/SettingsView.ui +++ b/src/platform/qt/SettingsView.ui @@ -556,18 +556,22 @@ - - - Pause when inactive - - - - - - - Pause when minimized - - + + + + + Pause + + + + + + + Mute + + + + @@ -684,6 +688,38 @@ + + + + + + Pause + + + + + + + Mute + + + + + + + + + When inactive: + + + + + + + When minimized: + + + diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index 3c223bd40..33392f0f4 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -656,12 +656,21 @@ void Window::resizeEvent(QResizeEvent*) { void Window::showEvent(QShowEvent* event) { if (m_wasOpened) { - if (event->spontaneous() && m_config->getOption("pauseOnMinimize").toInt() && m_controller) { + if (event->spontaneous() && m_controller) { focusCheck(); - if (m_autoresume) { + if (m_config->getOption("pauseOnMinimize").toInt() && m_autoresume) { m_controller->setPaused(false); m_autoresume = false; } + + if (m_config->getOption("muteOnMinimize").toInt()) { + CoreController::Interrupter interrupter(m_controller); + mCore* core = m_controller->thread()->core; + int fakeBool = 0; + mCoreConfigGetIntValue(&core->config, "mute", &fakeBool); + core->opts.mute = fakeBool; + core->reloadConfigOption(core, NULL, NULL); + } } return; } @@ -692,13 +701,20 @@ void Window::hideEvent(QHideEvent* event) { if (!event->spontaneous()) { return; } - if (!m_config->getOption("pauseOnMinimize").toInt() || !m_controller) { + if (!m_controller) { return; } - if (!m_controller->isPaused()) { + + if (m_config->getOption("pauseOnMinimize").toInt() && !m_controller->isPaused()) { m_autoresume = true; m_controller->setPaused(true); } + if (m_config->getOption("muteOnMinimize").toInt()) { + CoreController::Interrupter interrupter(m_controller); + mCore* core = m_controller->thread()->core; + core->opts.mute = true; + core->reloadConfigOption(core, NULL, NULL); + } } void Window::closeEvent(QCloseEvent* event) { @@ -1832,15 +1848,29 @@ Action* Window::addGameAction(const QString& visibleName, const QString& name, A } void Window::focusCheck() { - if (!m_config->getOption("pauseOnFocusLost").toInt() || !m_controller) { + if (!m_controller) { return; } - if (QGuiApplication::focusWindow() && m_autoresume) { - m_controller->setPaused(false); - m_autoresume = false; - } else if (!QGuiApplication::focusWindow() && !m_controller->isPaused()) { - m_autoresume = true; - m_controller->setPaused(true); + if (m_config->getOption("pauseOnFocusLost").toInt()) { + if (QGuiApplication::focusWindow() && m_autoresume) { + m_controller->setPaused(false); + m_autoresume = false; + } else if (!QGuiApplication::focusWindow() && !m_controller->isPaused()) { + m_autoresume = true; + m_controller->setPaused(true); + } + } + if (m_config->getOption("muteOnFocusLost").toInt()) { + CoreController::Interrupter interrupter(m_controller); + mCore* core = m_controller->thread()->core; + if (QGuiApplication::focusWindow()) { + int fakeBool = 0; + mCoreConfigGetIntValue(&core->config, "mute", &fakeBool); + core->opts.mute = fakeBool; + } else { + core->opts.mute = true; + } + core->reloadConfigOption(core, NULL, NULL); } } From c785340ea95e608dbb2ed367ea9d66f80abb257c Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 24 Jun 2021 20:20:34 -0700 Subject: [PATCH 41/50] Qt: Add options to mute inactive or non-P1 multiplayer windows (fixes #857) --- CHANGES | 1 + src/platform/qt/CoreController.cpp | 17 ++++++- src/platform/qt/CoreController.h | 4 ++ src/platform/qt/SettingsView.cpp | 17 +++++++ src/platform/qt/SettingsView.ui | 71 +++++++++++++++++++++++------- src/platform/qt/Window.cpp | 57 +++++++++++++++++------- src/platform/qt/Window.h | 5 +++ 7 files changed, 139 insertions(+), 33 deletions(-) diff --git a/CHANGES b/CHANGES index d42fb656d..2bd9fd6d5 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ Features: - Presets for Game Boy palettes - Add Super Game Boy palettes for original Game Boy games - Tool for converting scanned pictures of e-Reader cards to raw dotcode data + - Options for muting when inactive, minimized, or for different players in multiplayer - Cheat code support in homebrew ports - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for 64 kiB SRAM saves used in some bootlegs diff --git a/src/platform/qt/CoreController.cpp b/src/platform/qt/CoreController.cpp index 007b65b63..58ba1797d 100644 --- a/src/platform/qt/CoreController.cpp +++ b/src/platform/qt/CoreController.cpp @@ -524,6 +524,21 @@ void CoreController::forceFastForward(bool enable) { emit fastForwardChanged(enable || m_fastForward); } +void CoreController::overrideMute(bool override) { + m_mute = override; + + Interrupter interrupter(this); + mCore* core = m_threadContext.core; + if (m_mute) { + core->opts.mute = true; + } else { + int fakeBool = 0; + mCoreConfigGetIntValue(&core->config, "mute", &fakeBool); + core->opts.mute = fakeBool; + } + core->reloadConfigOption(core, NULL, NULL); +} + void CoreController::loadState(int slot) { if (slot > 0 && slot != m_stateSlot) { m_stateSlot = slot; @@ -1074,7 +1089,7 @@ void CoreController::updateFastForward() { m_threadContext.core->opts.volume = m_fastForwardVolume; } if (m_fastForwardMute >= 0) { - m_threadContext.core->opts.mute = m_fastForwardMute; + m_threadContext.core->opts.mute = m_fastForwardMute || m_mute; } // If we aren't holding the fast forward button diff --git a/src/platform/qt/CoreController.h b/src/platform/qt/CoreController.h index 1442adc9a..e6c22eb44 100644 --- a/src/platform/qt/CoreController.h +++ b/src/platform/qt/CoreController.h @@ -140,6 +140,8 @@ public slots: void setFastForward(bool); void forceFastForward(bool); + void overrideMute(bool); + void loadState(int slot = 0); void loadState(const QString& path, int flags = -1); void loadState(QIODevice* iodev, int flags = -1); @@ -276,6 +278,8 @@ private: float m_fastForwardHeldRatio = -1.f; float m_fpsTarget; + bool m_mute; + InputController* m_inputController = nullptr; LogController* m_log = nullptr; MultiplayerController* m_multiplayer = nullptr; diff --git a/src/platform/qt/SettingsView.cpp b/src/platform/qt/SettingsView.cpp index b49dcfee7..5de04fa9d 100644 --- a/src/platform/qt/SettingsView.cpp +++ b/src/platform/qt/SettingsView.cpp @@ -534,6 +534,14 @@ void SettingsView::updateConfig() { emit languageChanged(); } + if (m_ui.multiplayerAudioAll->isChecked()) { + m_controller->setQtOption("multiplayerAudio", "all"); + } else if (m_ui.multiplayerAudio1->isChecked()) { + m_controller->setQtOption("multiplayerAudio", "p1"); + } else if (m_ui.multiplayerAudioActive->isChecked()) { + m_controller->setQtOption("multiplayerAudio", "active"); + } + int hwaccelVideo = m_controller->getOption("hwaccelVideo").toInt(); saveSetting("hwaccelVideo", m_ui.hwaccelVideo->currentIndex()); if (hwaccelVideo != m_ui.hwaccelVideo->currentIndex()) { @@ -762,6 +770,15 @@ void SettingsView::reloadConfig() { m_ui.videoScaleSize->setText(tr("(%1×%2)").arg(GBA_VIDEO_HORIZONTAL_PIXELS * value).arg(GBA_VIDEO_VERTICAL_PIXELS * value)); }); loadSetting("videoScale", m_ui.videoScale, 1); + + QString multiplayerAudio = m_controller->getQtOption("multiplayerAudio").toString(); + if (multiplayerAudio == QLatin1String("p1")) { + m_ui.multiplayerAudio1->setChecked(true); + } else if (multiplayerAudio == QLatin1String("active")) { + m_ui.multiplayerAudioActive->setChecked(true); + } else { + m_ui.multiplayerAudioAll->setChecked(true); + } } void SettingsView::addPage(const QString& name, QWidget* view, Page index) { diff --git a/src/platform/qt/SettingsView.ui b/src/platform/qt/SettingsView.ui index 0af896c86..7589e06f3 100644 --- a/src/platform/qt/SettingsView.ui +++ b/src/platform/qt/SettingsView.ui @@ -313,21 +313,61 @@ - + + + + Audio in multiplayer: + + + + + + + All windows + + + true + + + multiplayerAudio + + + + + + + Player 1 window only + + + multiplayerAudio + + + + + + + Currently active player window + + + multiplayerAudio + + + + Qt::Horizontal - + Display driver: - + @@ -337,14 +377,14 @@ - + Frameskip: - + @@ -365,14 +405,14 @@ - + FPS target: - + @@ -399,28 +439,28 @@ - + Native (59.7275) - + Qt::Horizontal - + Sync: - + @@ -438,28 +478,28 @@ - + Lock aspect ratio - + Force integer scaling - + Interframe blending - + Bilinear filtering @@ -2174,5 +2214,6 @@ + diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index 33392f0f4..fb85c8990 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -217,6 +217,11 @@ void Window::resizeFrame(const QSize& size) { } } +void Window::updateMultiplayerActive(bool active) { + m_multiActive = active; + updateMute(); +} + void Window::setConfig(ConfigController* config) { m_config = config; } @@ -249,6 +254,7 @@ void Window::reloadConfig() { if (m_audioProcessor) { m_audioProcessor->configure(m_config); } + updateMute(); m_display->resizeContext(); } @@ -664,12 +670,8 @@ void Window::showEvent(QShowEvent* event) { } if (m_config->getOption("muteOnMinimize").toInt()) { - CoreController::Interrupter interrupter(m_controller); - mCore* core = m_controller->thread()->core; - int fakeBool = 0; - mCoreConfigGetIntValue(&core->config, "mute", &fakeBool); - core->opts.mute = fakeBool; - core->reloadConfigOption(core, NULL, NULL); + m_inactiveMute = false; + updateMute(); } } return; @@ -710,10 +712,8 @@ void Window::hideEvent(QHideEvent* event) { m_controller->setPaused(true); } if (m_config->getOption("muteOnMinimize").toInt()) { - CoreController::Interrupter interrupter(m_controller); - mCore* core = m_controller->thread()->core; - core->opts.mute = true; - core->reloadConfigOption(core, NULL, NULL); + m_inactiveMute = true; + updateMute(); } } @@ -736,6 +736,13 @@ void Window::closeEvent(QCloseEvent* event) { } void Window::focusInEvent(QFocusEvent*) { + for (Window* window : GBAApp::app()->windows()) { + if (window != this) { + window->updateMultiplayerActive(false); + } else { + updateMultiplayerActive(true); + } + } m_display->forceDraw(); } @@ -1861,16 +1868,12 @@ void Window::focusCheck() { } } if (m_config->getOption("muteOnFocusLost").toInt()) { - CoreController::Interrupter interrupter(m_controller); - mCore* core = m_controller->thread()->core; if (QGuiApplication::focusWindow()) { - int fakeBool = 0; - mCoreConfigGetIntValue(&core->config, "mute", &fakeBool); - core->opts.mute = fakeBool; + m_inactiveMute = false; } else { - core->opts.mute = true; + m_inactiveMute = true; } - core->reloadConfigOption(core, NULL, NULL); + updateMute(); } } @@ -2009,6 +2012,26 @@ void Window::attachDisplay() { m_display->startDrawing(m_controller); } +void Window::updateMute() { + if (!m_controller) { + return; + } + + bool mute = m_inactiveMute; + + if (!mute) { + QString multiplayerAudio = m_config->getQtOption("multiplayerAudio").toString(); + if (multiplayerAudio == QLatin1String("p1")) { + MultiplayerController* multiplayer = m_controller->multiplayerController(); + mute = multiplayer && multiplayer->attached() > 1 && multiplayer->playerId(m_controller.get()); + } else if (multiplayerAudio == QLatin1String("active")) { + mute = !m_multiActive; + } + } + + m_controller->overrideMute(mute); +} + void Window::setLogo() { m_screenWidget->setPixmap(m_logo); m_screenWidget->setDimensions(m_logo.width(), m_logo.height()); diff --git a/src/platform/qt/Window.h b/src/platform/qt/Window.h index 641153f0d..6d93948a1 100644 --- a/src/platform/qt/Window.h +++ b/src/platform/qt/Window.h @@ -64,6 +64,7 @@ public: void resizeFrame(const QSize& size); void updateMultiplayerStatus(bool canOpenAnother) { m_multiWindow->setEnabled(canOpenAnother); } + void updateMultiplayerActive(bool active); signals: void startDrawing(); @@ -145,6 +146,7 @@ private slots: void focusCheck(); void updateFrame(); + void updateMute(); void setLogo(); @@ -226,6 +228,9 @@ private: bool m_hitUnimplementedBiosCall; + bool m_inactiveMute = false; + bool m_multiActive = true; + std::unique_ptr m_overrideView; std::unique_ptr m_sensorView; std::unique_ptr m_dolphinView; From d17986aa41c0655e0fa721ac20db2344ee384f10 Mon Sep 17 00:00:00 2001 From: Enes Y Date: Thu, 17 Jun 2021 02:10:49 +0000 Subject: [PATCH 42/50] Qt: Update translation (Turkish) Currently translated at 100.0% (1070 of 1070 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/tr/ --- src/platform/qt/ts/mgba-tr.ts | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index afbb9caea..23ede6e5e 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -392,7 +392,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. %1 State - + %1 Durum @@ -463,7 +463,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Logs - + Girdiler @@ -478,7 +478,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Stub - + Matris @@ -498,12 +498,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Fatal - + Ölümcül Game Error - + Oyun Hatası @@ -572,7 +572,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Memory Search - + Bellek Arama @@ -722,7 +722,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Memory - + Bellek @@ -800,7 +800,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Sprites - + Spritelar @@ -956,7 +956,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Realtime clock - + Gerçek Zaman Saati @@ -971,12 +971,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Light sensor - + Işık Sensörü Rumble - + Titreşim @@ -1011,12 +1011,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Idle loop - + Boşta İşlem Game Boy Player features - + Game Boy Player özellikleri @@ -1036,7 +1036,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Memory bank controller - + Bellek bank kontrolcüsü @@ -1109,7 +1109,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Palette index - + Palet indeks @@ -1155,17 +1155,17 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Game Boy Printer - + Game Boy Yazıcı Hurry up! - + Acele et! Tear off - + Parçalara ayır @@ -1356,12 +1356,12 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Clear Button - + Tuşu Temizle Clear Analog - + Analogu Temizle @@ -1394,7 +1394,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Break - + İptal @@ -1409,7 +1409,7 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır. Crash - + Hata From 59eaceb148caa5eba4ac22c50d2e0558ce56ffe5 Mon Sep 17 00:00:00 2001 From: tdayris-perso Date: Thu, 24 Jun 2021 09:57:37 +0000 Subject: [PATCH 43/50] Qt: Update translation (French) Currently translated at 84.0% (902 of 1073 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/fr/ --- src/platform/qt/ts/mgba-fr.ts | 88 +++++++++++++++++------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/platform/qt/ts/mgba-fr.ts b/src/platform/qt/ts/mgba-fr.ts index 49cd3575a..fbc94e550 100644 --- a/src/platform/qt/ts/mgba-fr.ts +++ b/src/platform/qt/ts/mgba-fr.ts @@ -1047,12 +1047,12 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Sprite Colors 1 - Couleurs du Sprite nº 1 + Couleurs du Sprite nº 1 Sprite Colors 2 - Couleurs du Sprite nº 2 + Couleurs du Sprite nº 2 @@ -1184,7 +1184,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. 2021 - 2021 + 2021 @@ -1446,17 +1446,17 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Mode 0: 4 tile layers - Mode 0 : 4 couches de tuile + Mode 0 : 4 couches de tuile Mode 1: 2 tile layers + 1 rotated/scaled tile layer - Mode 1 : 2 couches de tuiles + 1 couche de tuiles pivotée / mise à l'échelle + Mode 1 : 2 couches de tuiles + 1 couche de tuiles pivotée / mise à l'échelle Mode 2: 2 rotated/scaled tile layers - Mode 2 : 2 couches de tuiles pivotées / mises à l'échelle + Mode 2 : 2 couches de tuiles pivotées / mises à l'échelle @@ -1501,22 +1501,22 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Enable background 0 - Activer l'arrière-plan nº 0 + Activer l'arrière-plan nº 0 Enable background 1 - Activer l'arrière-plan nº 1 + Activer l'arrière-plan nº 1 Enable background 2 - Activer l'arrière-plan nº 2 + Activer l'arrière-plan nº 2 Enable background 3 - Activer l'arrière-plan nº 3 + Activer l'arrière-plan nº 3 @@ -1526,12 +1526,12 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Enable Window 0 - Activer la fenêtre nº 0 + Activer la fenêtre nº 0 Enable Window 1 - Actvier la fenêtre nº 1 + Actvier la fenêtre nº 1 @@ -1728,82 +1728,82 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Window 0 enable BG 0 - La fenêtre nº 0 active l'arrière plan nº 0 + La fenêtre nº 0 active l'arrière plan nº 0 Window 0 enable BG 1 - La fenêtre nº 0 active l'arrière plan nº 1 + La fenêtre nº 0 active l'arrière plan nº 1 Window 0 enable BG 2 - La fenêtre nº 0 active l'arrière plan nº 2 + La fenêtre nº 0 active l'arrière plan nº 2 Window 0 enable BG 3 - La fenêtre nº 0 active l'arrière plan nº 3 + La fenêtre nº 0 active l'arrière plan nº 3 Window 0 enable OBJ - La fenêtre nº 0 active l'OBJ + La fenêtre nº 0 active l'OBJ Window 0 enable blend - La fenêtre nº 0 active le mixage + La fenêtre nº 0 active le mixage Window 1 enable BG 0 - La fenêtre nº 1 active l'arrière plan nº 0 + La fenêtre nº 1 active l'arrière plan nº 0 Window 1 enable BG 1 - La fenêtre nº 1 active l'arrière plan nº 1 + La fenêtre nº 1 active l'arrière plan nº 1 Window 1 enable BG 2 - La fenêtre nº 1 active l'arrière plan nº 2 + La fenêtre nº 1 active l'arrière plan nº 2 Window 1 enable BG 3 - La fenêtre nº 1 active l'arrière plan nº 3 + La fenêtre nº 1 active l'arrière plan nº 3 Window 1 enable OBJ - La fenêtre nº 1 active l'OBJ + La fenêtre nº 1 active l'OBJ Window 1 enable blend - La fenêtre nº 1 active le mixage + La fenêtre nº 1 active le mixage Outside window enable BG 0 - La fenêtre extérieure active l'arrière plan nº 0 + La fenêtre extérieure active l'arrière plan nº 0 Outside window enable BG 1 - La fenêtre extérieure active l'arrière plan nº 1 + La fenêtre extérieure active l'arrière plan nº 1 Outside window enable BG 2 - La fenêtre extérieure active l'arrière plan nº 2 + La fenêtre extérieure active l'arrière plan nº 2 Outside window enable BG 3 - La fenêtre extérieure active l'arrière plan nº 3 + La fenêtre extérieure active l'arrière plan nº 3 @@ -1981,7 +1981,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Sweep time (in 1/128s) - Durée de balayage (en 1/128 s) + Durée de balayage (en 1/128 s) @@ -2090,28 +2090,28 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. 0% - 0 % + 0 % 100% - 100 % + 100 % 50% - 50 % + 50 % 25% - 25 % + 25 % @@ -2119,7 +2119,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. 75% - 75 % + 75 % @@ -2944,17 +2944,17 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. 4.19MHz - 4,19 MHz + 4,19 MHz 8.38MHz - 8,38 MHz + 8,38 MHz 16.78MHz - 16,78 MHz + 16,78 MHz @@ -3407,7 +3407,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. [%1] %2: %3 - [%1] %2 : %3 + [%1] %2 : %3 @@ -4836,7 +4836,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Game name: - Nom du jeu : + Nom du jeu : @@ -5271,7 +5271,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. FPS target: - IPS ciblée : + IPS ciblée : @@ -5727,7 +5727,7 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Default sprite colors 1: - Couleurs par défaut de la sprite nº 1 : + Couleurs par défaut de la sprite nº 1 : @@ -5737,17 +5737,17 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd. Game Boy-only model: - Modèle Game Boy uniquement : + Modèle Game Boy uniquement : Game Boy Color-only model: - Modèle Game Boy uniquement : + Modèle Game Boy uniquement : Game Boy/Game Boy Color model: - Modèle Game Boy / Game Boy Color : + Modèle Game Boy / Game Boy Color : From f14abdf749100f562cee4c79d60f429de227b1c6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 25 Jun 2021 15:06:11 -0700 Subject: [PATCH 44/50] Qt: Mark some Cheats strings as untranslatable --- src/platform/qt/CheatsView.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/platform/qt/CheatsView.cpp b/src/platform/qt/CheatsView.cpp index 4dc617458..5c5594067 100644 --- a/src/platform/qt/CheatsView.cpp +++ b/src/platform/qt/CheatsView.cpp @@ -46,16 +46,16 @@ CheatsView::CheatsView(std::shared_ptr controller, QWidget* pare #ifdef M_CORE_GBA case mPLATFORM_GBA: registerCodeType(tr("Autodetect (recommended)"), GBA_CHEAT_AUTODETECT); - registerCodeType(tr("GameShark"), GBA_CHEAT_GAMESHARK); - registerCodeType(tr("Action Replay MAX"), GBA_CHEAT_PRO_ACTION_REPLAY); - registerCodeType(tr("CodeBreaker"), GBA_CHEAT_CODEBREAKER); + registerCodeType(QLatin1String("GameShark"), GBA_CHEAT_GAMESHARK); + registerCodeType(QLatin1String("Action Replay MAX"), GBA_CHEAT_PRO_ACTION_REPLAY); + registerCodeType(QLatin1String("CodeBreaker"), GBA_CHEAT_CODEBREAKER); break; #endif #ifdef M_CORE_GB case mPLATFORM_GB: registerCodeType(tr("Autodetect (recommended)"), GB_CHEAT_AUTODETECT); - registerCodeType(tr("GameShark"), GB_CHEAT_GAMESHARK); - registerCodeType(tr("Game Genie"), GB_CHEAT_GAME_GENIE); + registerCodeType(QLatin1String("GameShark"), GB_CHEAT_GAMESHARK); + registerCodeType(QLatin1String("Game Genie"), GB_CHEAT_GAME_GENIE); break; #endif default: From 7dce4be2e2f607f70e63481493429ddad857728c Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 27 Jun 2021 22:37:01 -0700 Subject: [PATCH 45/50] GBA Serialize: Fix loading audio enable bit late (fixes #2230) --- CHANGES | 1 + src/gba/io.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 2bd9fd6d5..dba57ee04 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ Emulation fixes: - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer - GBA SIO: Fix SI value for unattached MULTI mode - GBA Memory: Fix prefetch mask when swapping modes within a region + - GBA Serialize: Fix loading audio enable bit late (fixes mgba.io/i/2230) - GBA Video: Revert scanline latching changes (fixes mgba.io/i/2153, mgba.io/i/2149) Other fixes: - 3DS: Fix disabling "wide" mode on 2DS (fixes mgba.io/i/2167) diff --git a/src/gba/io.c b/src/gba/io.c index 9dc66b94d..066be5054 100644 --- a/src/gba/io.c +++ b/src/gba/io.c @@ -973,6 +973,8 @@ void GBAIOSerialize(struct GBA* gba, struct GBASerializedState* state) { } void GBAIODeserialize(struct GBA* gba, const struct GBASerializedState* state) { + GBAAudioWriteSOUNDCNT_X(&gba->audio, state->io[REG_SOUNDCNT_X >> 1]); + int i; for (i = 0; i < REG_MAX; i += 2) { if (_isWSpecialRegister[i >> 1]) { @@ -1003,7 +1005,6 @@ void GBAIODeserialize(struct GBA* gba, const struct GBASerializedState* state) { LOAD_32(gba->memory.dma[i].nextCount, 0, &state->dma[i].nextCount); LOAD_32(gba->memory.dma[i].when, 0, &state->dma[i].when); } - GBAAudioWriteSOUNDCNT_X(&gba->audio, gba->memory.io[REG_SOUNDCNT_X >> 1]); gba->sio.siocnt = gba->memory.io[REG_SIOCNT >> 1]; GBASIOWriteRCNT(&gba->sio, gba->memory.io[REG_RCNT >> 1]); From 6c6d498817e4e6d79c938ea345baa704544a29ff Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 28 Jun 2021 13:35:04 -0700 Subject: [PATCH 46/50] GBA: Improve timing when not booting from BIOS --- CHANGES | 1 + src/gba/gba.c | 6 ++++-- src/gba/video.c | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index dba57ee04..4e5a1ef06 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Features: Emulation fixes: - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Clear VRAM on reset (fixes mgba.io/i/2152) + - GBA: Improve timing when not booting from BIOS - GBA SIO: Add missing NORMAL8 implementation bits (fixes mgba.io/i/2172) - GBA SIO: Fix missing interrupt on an unattached NORMAL transfer - GBA SIO: Fix SI value for unattached MULTI mode diff --git a/src/gba/gba.c b/src/gba/gba.c index d8a4b740a..b73fe9d86 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -265,8 +265,10 @@ void GBASkipBIOS(struct GBA* gba) { } else { cpu->gprs[ARM_PC] = BASE_WORKING_RAM + 0xC0; } - gba->video.vcount = 0x7D; - gba->memory.io[REG_VCOUNT >> 1] = 0x7D; + gba->video.vcount = 0x7E; + gba->memory.io[REG_VCOUNT >> 1] = 0x7E; + mTimingDeschedule(&gba->timing, &gba->video.event); + mTimingSchedule(&gba->timing, &gba->video.event, 117); gba->memory.io[REG_POSTFLG >> 1] = 1; ARMWritePC(cpu); } diff --git a/src/gba/video.c b/src/gba/video.c index 01e652e59..d78af2468 100644 --- a/src/gba/video.c +++ b/src/gba/video.c @@ -70,7 +70,7 @@ void GBAVideoReset(struct GBAVideo* video) { } else { // TODO: Verify exact scanline on hardware video->vcount = 0x7E; - nextEvent = 170; + nextEvent = 117; } video->p->memory.io[REG_VCOUNT >> 1] = video->vcount; From d9627e36234a3b03ac283d09412e5853e849c2ef Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 28 Jun 2021 15:22:07 -0700 Subject: [PATCH 47/50] GBA SIO: Add more missing NORMAL8 implementation bits (fixes #2044) --- src/gba/sio/lockstep.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gba/sio/lockstep.c b/src/gba/sio/lockstep.c index 7cb2d858a..ba1f3f0af 100644 --- a/src/gba/sio/lockstep.c +++ b/src/gba/sio/lockstep.c @@ -141,6 +141,7 @@ bool GBASIOLockstepNodeUnload(struct GBASIODriver* driver) { case SIO_MULTI: ATOMIC_SUB(node->p->attachedMulti, 1); break; + case SIO_NORMAL_8: case SIO_NORMAL_32: ATOMIC_SUB(node->p->attachedNormal, 1); break; From e3ad33366b534f934941142ffe9cc591d6c70f58 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 28 Jun 2021 15:41:58 -0700 Subject: [PATCH 48/50] Qt: Add time elapsed to Discord Rich Presence (closes #2225) --- CHANGES | 1 + src/platform/qt/DiscordCoordinator.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGES b/CHANGES index 4e5a1ef06..27931a979 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ Features: - Cheat code support in homebrew ports - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for 64 kiB SRAM saves used in some bootlegs + - Discord Rich Presence now supports time elapsed - Additional scaling shaders Emulation fixes: - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) diff --git a/src/platform/qt/DiscordCoordinator.cpp b/src/platform/qt/DiscordCoordinator.cpp index ab6a0445a..b090863cd 100644 --- a/src/platform/qt/DiscordCoordinator.cpp +++ b/src/platform/qt/DiscordCoordinator.cpp @@ -5,6 +5,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "DiscordCoordinator.h" +#include + #include "CoreController.h" #include "GBAApp.h" @@ -31,6 +33,11 @@ static void updatePresence() { discordPresence.details = s_title.toUtf8().constData(); discordPresence.instance = 1; discordPresence.largeImageKey = "mgba"; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) + discordPresence.startTimestamp = QDateTime::currentSecsSinceEpoch(); +#else + discordPresence.startTimestamp = QDateTime::currentMSecsSinceEpoch() / 1000; +#endif Discord_UpdatePresence(&discordPresence); } else { Discord_ClearPresence(); From 9a26c1a679f5cc32e0c4db0bfd24dfec9e7f3813 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 28 Jun 2021 21:13:05 -0700 Subject: [PATCH 49/50] mGUI: Use variants for menu data --- include/mgba-util/gui/menu.h | 19 ++++- src/feature/gui/cheats.c | 24 +++--- src/feature/gui/gui-config.c | 161 +++++++++++++++++++---------------- src/feature/gui/gui-runner.c | 58 ++++++------- src/feature/gui/remap.c | 26 +++--- src/platform/3ds/main.c | 8 +- src/platform/psp2/main.c | 4 +- src/platform/switch/main.c | 10 +-- src/platform/wii/main.c | 10 +-- src/util/gui/file-select.c | 4 +- src/util/gui/menu.c | 4 +- 11 files changed, 177 insertions(+), 151 deletions(-) diff --git a/include/mgba-util/gui/menu.h b/include/mgba-util/gui/menu.h index dca1d60b3..8ac9d6846 100644 --- a/include/mgba-util/gui/menu.h +++ b/include/mgba-util/gui/menu.h @@ -17,13 +17,27 @@ CXX_GUARD_START #define GUI_V_I(I) (struct GUIVariant) { .type = GUI_VARIANT_INT, .v.i = (I) } #define GUI_V_F(F) (struct GUIVariant) { .type = GUI_VARIANT_FLOAT, .v.f = (F) } #define GUI_V_S(S) (struct GUIVariant) { .type = GUI_VARIANT_STRING, .v.s = (S) } +#define GUI_V_P(P) (struct GUIVariant) { .type = GUI_VARIANT_POINTER, .v.p = (P) } + +#define GUIVariantIs(V, T) ((V).type == GUI_VARIANT_##T) +#define GUIVariantIsVoid(V) GUIVariantIs(V, VOID) +#define GUIVariantIsUInt(V) GUIVariantIs(V, UNSIGNED) +#define GUIVariantIsInt(V) GUIVariantIs(V, INT) +#define GUIVariantIsFloat(V) GUIVariantIs(V, FLOAT) +#define GUIVariantIsString(V) GUIVariantIs(V, STRING) +#define GUIVariantIsPointer(V) GUIVariantIs(V, POINTER) + +#define GUIVariantCompareUInt(V, X) (GUIVariantIsUInt(V) && (V).v.u == (X)) +#define GUIVariantCompareInt(V, X) (GUIVariantIsInt(V) && (V).v.i == (X)) +#define GUIVariantCompareString(V, X) (GUIVariantIsString(V) && strcmp((V).v.s, (X)) == 0) enum GUIVariantType { GUI_VARIANT_VOID = 0, GUI_VARIANT_UNSIGNED, GUI_VARIANT_INT, GUI_VARIANT_FLOAT, - GUI_VARIANT_STRING + GUI_VARIANT_STRING, + GUI_VARIANT_POINTER, }; struct GUIVariant { @@ -33,13 +47,14 @@ struct GUIVariant { int i; float f; const char* s; + void* p; } v; }; struct GUIMenu; struct GUIMenuItem { const char* title; - void* data; + struct GUIVariant data; unsigned state; const char* const* validStates; const struct GUIVariant* stateMappings; diff --git a/src/feature/gui/cheats.c b/src/feature/gui/cheats.c index d69d3ddc3..1b06afa0a 100644 --- a/src/feature/gui/cheats.c +++ b/src/feature/gui/cheats.c @@ -35,19 +35,19 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Add line", - .data = (void*) CHEAT_ADD_LINE, + .data = GUI_V_U(CHEAT_ADD_LINE), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Rename", - .data = (void*) CHEAT_RENAME, + .data = GUI_V_U(CHEAT_RENAME), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Delete", - .data = (void*) CHEAT_DELETE, + .data = GUI_V_U(CHEAT_DELETE), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Back", - .data = 0, + .data = GUI_V_V, }; while (true) { @@ -56,11 +56,11 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev struct GUIMenuItem* item; enum GUIMenuExitReason reason = GUIShowMenu(&runner->params, &menu, &item); set->enabled = GUIMenuItemListGetPointer(&menu.items, 0)->state; - if (reason != GUI_MENU_EXIT_ACCEPT || !item->data) { + if (reason != GUI_MENU_EXIT_ACCEPT || GUIVariantIsVoid(item->data)) { break; } - enum mGUICheatAction action = (enum mGUICheatAction) item->data; + enum mGUICheatAction action = (enum mGUICheatAction) item->data.v.u; switch (action) { case CHEAT_ADD_LINE: strlcpy(keyboard.title, "Add line", sizeof(keyboard.title)); @@ -108,7 +108,7 @@ void mGUIShowCheats(struct mGUIRunner* runner) { struct mCheatSet* set = *mCheatSetsGetPointer(&device->cheats, i); *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = set->name, - .data = set, + .data = GUI_V_P(set), .state = set->enabled, .validStates = offOn, .nStates = 2 @@ -116,11 +116,11 @@ void mGUIShowCheats(struct mGUIRunner* runner) { } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Add new cheat set", - .data = 0, + .data = GUI_V_V, }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Back", - .data = (void*) -1, + .data = GUI_V_I(-1), }; struct GUIMenuItem* item; @@ -131,11 +131,11 @@ void mGUIShowCheats(struct mGUIRunner* runner) { set->enabled = item->state; } - if (reason != GUI_MENU_EXIT_ACCEPT || item->data == (void*) -1) { + if (reason != GUI_MENU_EXIT_ACCEPT || GUIVariantCompareInt(item->data, -1)) { break; } struct mCheatSet* set = NULL; - if (!item->data) { + if (GUIVariantIsVoid(item->data)) { struct GUIKeyboardParams keyboard; GUIKeyboardParamsInit(&keyboard); keyboard.maxLen = 50; @@ -146,7 +146,7 @@ void mGUIShowCheats(struct mGUIRunner* runner) { mCheatAddSet(device, set); } } else { - set = item->data; + set = item->data.v.p; } if (set) { mGUIShowCheatSet(runner, device, set); diff --git a/src/feature/gui/gui-config.c b/src/feature/gui/gui-config.c index cba83166b..8ab4dd7dc 100644 --- a/src/feature/gui/gui-config.c +++ b/src/feature/gui/gui-config.c @@ -22,6 +22,11 @@ #define GUI_MAX_INPUTS 7 #endif +enum { + CONFIG_REMAP, + CONFIG_SAVE, +}; + static bool _biosNamed(const char* name) { char ext[PATH_MAX + 1] = {}; separatePath(name, NULL, NULL, ext); @@ -45,7 +50,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t GUIMenuItemListInit(&menu.items, 0); *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Frameskip", - .data = "frameskip", + .data = GUI_V_S("frameskip"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -55,7 +60,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Show framerate", - .data = "fpsCounter", + .data = GUI_V_S("fpsCounter"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -65,7 +70,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Show status OSD", - .data = "showOSD", + .data = GUI_V_S("showOSD"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -75,7 +80,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Autosave state", - .data = "autosave", + .data = GUI_V_S("autosave"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -85,7 +90,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Autoload state", - .data = "autoload", + .data = GUI_V_S("autoload"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -95,7 +100,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Mute", - .data = "mute", + .data = GUI_V_S("mute"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -105,7 +110,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Fast forward mute", - .data = "fastForwardMute", + .data = GUI_V_S("fastForwardMute"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -115,7 +120,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Use BIOS if found", - .data = "useBios", + .data = GUI_V_S("useBios"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -126,26 +131,26 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t #ifdef M_CORE_GBA *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Select GBA BIOS path", - .data = "gba.bios", + .data = GUI_V_S("gba.bios"), }; #endif #ifdef M_CORE_GB *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Select GB BIOS path", - .data = "gb.bios", + .data = GUI_V_S("gb.bios"), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Select GBC BIOS path", - .data = "gbc.bios", + .data = GUI_V_S("gbc.bios"), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Select SGB BIOS path", - .data = "sgb.bios", + .data = GUI_V_S("sgb.bios"), }; struct GUIMenuItem* palette = GUIMenuItemListAppend(&menu.items); *palette = (struct GUIMenuItem) { .title = "GB palette", - .data = "gb.pal", + .data = GUI_V_S("gb.pal"), }; const struct GBColorPreset* colorPresets; palette->nStates = GBColorPresetList(&colorPresets); @@ -157,7 +162,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t #endif *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Interframe blending", - .data = "interframeBlending", + .data = GUI_V_S("interframeBlending"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -168,7 +173,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t #if defined(M_CORE_GBA) && (defined(GEKKO) || defined(__SWITCH__) || defined(PSP2)) *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Enable GBP features", - .data = "gba.forceGbp", + .data = GUI_V_S("gba.forceGbp"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -180,7 +185,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t #ifdef M_CORE_GB *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Enable SGB features", - .data = "sgb.model", + .data = GUI_V_S("sgb.model"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -194,7 +199,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Enable SGB borders", - .data = "sgb.borders", + .data = GUI_V_S("sgb.borders"), .submenu = 0, .state = true, .validStates = (const char*[]) { @@ -204,7 +209,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Crop SGB borders", - .data = "sgb.borderCrop", + .data = GUI_V_S("sgb.borderCrop"), .submenu = 0, .state = false, .validStates = (const char*[]) { @@ -224,7 +229,7 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Remap controls", - .data = "*REMAP", + .data = GUI_V_U(CONFIG_REMAP), .state = 0, .validStates = i ? mapNames : 0, .nStates = i @@ -235,11 +240,11 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Save", - .data = "*SAVE", + .data = GUI_V_U(CONFIG_SAVE), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Cancel", - .data = 0, + .data = GUI_V_V, }; enum GUIMenuExitReason reason; char gbaBiosPath[256] = ""; @@ -252,59 +257,63 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t struct GUIMenuItem* item; for (i = 0; i < GUIMenuItemListSize(&menu.items); ++i) { item = GUIMenuItemListGetPointer(&menu.items, i); - if (!item->validStates || !item->data) { + if (!item->validStates || GUIVariantIsVoid(item->data)) { continue; } - if (item->stateMappings) { - size_t j; - for (j = 0; j < item->nStates; ++j) { - const struct GUIVariant* v = &item->stateMappings[j]; - struct GUIVariant test; - switch (v->type) { - case GUI_VARIANT_VOID: - if (!mCoreConfigGetValue(&runner->config, item->data)) { - item->state = j; + if (GUIVariantIsString(item->data)) { + if (item->stateMappings) { + size_t j; + for (j = 0; j < item->nStates; ++j) { + const struct GUIVariant* v = &item->stateMappings[j]; + struct GUIVariant test; + switch (v->type) { + case GUI_VARIANT_VOID: + if (!mCoreConfigGetValue(&runner->config, item->data.v.s)) { + item->state = j; + break; + } + break; + case GUI_VARIANT_UNSIGNED: + if (mCoreConfigGetUIntValue(&runner->config, item->data.v.s, &test.v.u) && test.v.u == v->v.u) { + item->state = j; + break; + } + break; + case GUI_VARIANT_INT: + if (mCoreConfigGetIntValue(&runner->config, item->data.v.s, &test.v.i) && test.v.i == v->v.i) { + item->state = j; + break; + } + break; + case GUI_VARIANT_FLOAT: + if (mCoreConfigGetFloatValue(&runner->config, item->data.v.s, &test.v.f) && fabsf(test.v.f - v->v.f) <= 1e-3f) { + item->state = j; + break; + } + break; + case GUI_VARIANT_STRING: + test.v.s = mCoreConfigGetValue(&runner->config, item->data.v.s); + if (test.v.s && strcmp(test.v.s, v->v.s) == 0) { + item->state = j; + break; + } + break; + case GUI_VARIANT_POINTER: break; } - break; - case GUI_VARIANT_UNSIGNED: - if (mCoreConfigGetUIntValue(&runner->config, item->data, &test.v.u) && test.v.u == v->v.u) { - item->state = j; - break; - } - break; - case GUI_VARIANT_INT: - if (mCoreConfigGetIntValue(&runner->config, item->data, &test.v.i) && test.v.i == v->v.i) { - item->state = j; - break; - } - break; - case GUI_VARIANT_FLOAT: - if (mCoreConfigGetFloatValue(&runner->config, item->data, &test.v.f) && fabsf(test.v.f - v->v.f) <= 1e-3f) { - item->state = j; - break; - } - break; - case GUI_VARIANT_STRING: - test.v.s = mCoreConfigGetValue(&runner->config, item->data); - if (test.v.s && strcmp(test.v.s, v->v.s) == 0) { - item->state = j; - break; - } - break; } + } else { + mCoreConfigGetUIntValue(&runner->config, item->data.v.s, &item->state); } - } else { - mCoreConfigGetUIntValue(&runner->config, item->data, &item->state); } } while (true) { reason = GUIShowMenu(&runner->params, &menu, &item); - if (reason != GUI_MENU_EXIT_ACCEPT || !item->data) { + if (reason != GUI_MENU_EXIT_ACCEPT || GUIVariantIsVoid(item->data)) { break; } - if (!strcmp(item->data, "*SAVE")) { + if (GUIVariantCompareUInt(item->data, CONFIG_SAVE)) { if (gbaBiosPath[0]) { mCoreConfigSetValue(&runner->config, "gba.bios", gbaBiosPath); } @@ -319,30 +328,32 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t } for (i = 0; i < GUIMenuItemListSize(&menu.items); ++i) { item = GUIMenuItemListGetPointer(&menu.items, i); - if (!item->validStates || !item->data || ((const char*) item->data)[0] == '*') { + if (!item->validStates || !GUIVariantIsString(item->data)) { continue; } if (item->stateMappings) { const struct GUIVariant* v = &item->stateMappings[item->state]; switch (v->type) { case GUI_VARIANT_VOID: - mCoreConfigSetValue(&runner->config, item->data, NULL); + mCoreConfigSetValue(&runner->config, item->data.v.s, NULL); break; case GUI_VARIANT_UNSIGNED: - mCoreConfigSetUIntValue(&runner->config, item->data, v->v.u); + mCoreConfigSetUIntValue(&runner->config, item->data.v.s, v->v.u); break; case GUI_VARIANT_INT: - mCoreConfigSetUIntValue(&runner->config, item->data, v->v.i); + mCoreConfigSetUIntValue(&runner->config, item->data.v.s, v->v.i); break; case GUI_VARIANT_FLOAT: - mCoreConfigSetFloatValue(&runner->config, item->data, v->v.f); + mCoreConfigSetFloatValue(&runner->config, item->data.v.s, v->v.f); break; case GUI_VARIANT_STRING: - mCoreConfigSetValue(&runner->config, item->data, v->v.s); + mCoreConfigSetValue(&runner->config, item->data.v.s, v->v.s); + break; + case GUI_VARIANT_POINTER: break; } #ifdef M_CORE_GB - } else if (!strcmp(item->data, "gb.pal")) { + } else if (GUIVariantCompareString(item->data, "gb.pal")) { const struct GBColorPreset* preset = &colorPresets[item->state]; mCoreConfigSetUIntValue(&runner->config, "gb.pal[0]", preset->colors[0] & 0xFFFFFF); mCoreConfigSetUIntValue(&runner->config, "gb.pal[1]", preset->colors[1] & 0xFFFFFF); @@ -356,10 +367,10 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t mCoreConfigSetUIntValue(&runner->config, "gb.pal[9]", preset->colors[9] & 0xFFFFFF); mCoreConfigSetUIntValue(&runner->config, "gb.pal[10]", preset->colors[10] & 0xFFFFFF); mCoreConfigSetUIntValue(&runner->config, "gb.pal[11]", preset->colors[11] & 0xFFFFFF); - mCoreConfigSetUIntValue(&runner->config, item->data, item->state); + mCoreConfigSetUIntValue(&runner->config, "gb.pal", item->state); #endif } else { - mCoreConfigSetUIntValue(&runner->config, item->data, item->state); + mCoreConfigSetUIntValue(&runner->config, item->data.v.s, item->state); } } if (runner->keySources) { @@ -373,11 +384,11 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t mCoreLoadForeignConfig(runner->core, &runner->config); break; } - if (!strcmp(item->data, "*REMAP")) { + if (GUIVariantCompareUInt(item->data, CONFIG_REMAP)) { mGUIRemapKeys(&runner->params, &runner->core->inputMap, &runner->keySources[item->state]); continue; } - if (!strcmp(item->data, "gba.bios")) { + if (GUIVariantCompareString(item->data, "gba.bios")) { // TODO: show box if failed if (!GUISelectFile(&runner->params, gbaBiosPath, sizeof(gbaBiosPath), _biosNamed, GBAIsBIOS, NULL)) { gbaBiosPath[0] = '\0'; @@ -385,21 +396,21 @@ void mGUIShowConfig(struct mGUIRunner* runner, struct GUIMenuItem* extra, size_t continue; } #ifdef M_CORE_GB - if (!strcmp(item->data, "gb.bios")) { + if (GUIVariantCompareString(item->data, "gb.bios")) { // TODO: show box if failed if (!GUISelectFile(&runner->params, gbBiosPath, sizeof(gbBiosPath), _biosNamed, GBIsBIOS, NULL)) { gbBiosPath[0] = '\0'; } continue; } - if (!strcmp(item->data, "gbc.bios")) { + if (GUIVariantCompareString(item->data, "gbc.bios")) { // TODO: show box if failed if (!GUISelectFile(&runner->params, gbcBiosPath, sizeof(gbcBiosPath), _biosNamed, GBIsBIOS, NULL)) { gbcBiosPath[0] = '\0'; } continue; } - if (!strcmp(item->data, "sgb.bios")) { + if (GUIVariantCompareString(item->data, "sgb.bios")) { // TODO: show box if failed if (!GUISelectFile(&runner->params, sgbBiosPath, sizeof(sgbBiosPath), _biosNamed, GBIsBIOS, NULL)) { sgbBiosPath[0] = '\0'; diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index 6d6903778..b7bb72a1b 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -351,38 +351,38 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { GUIMenuItemListInit(&pauseMenu.items, 0); GUIMenuItemListInit(&stateSaveMenu.items, 9); GUIMenuItemListInit(&stateLoadMenu.items, 10); - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Unpause", .data = (void*) RUNNER_CONTINUE }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Unpause", .data = GUI_V_U(RUNNER_CONTINUE) }; *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Save state", .submenu = &stateSaveMenu }; *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Load state", .submenu = &stateLoadMenu }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 1", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(1)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 2", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(2)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 3", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(3)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 4", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(4)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 5", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(5)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 6", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(6)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 7", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(7)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 8", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(8)) }; - *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 9", .data = (void*) (RUNNER_SAVE_STATE | RUNNER_STATE(9)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 1", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(1)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 2", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(2)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 3", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(3)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 4", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(4)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 5", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(5)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 6", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(6)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 7", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(7)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 8", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(8)) }; + *GUIMenuItemListAppend(&stateSaveMenu.items) = (struct GUIMenuItem) { .title = "State 9", .data = GUI_V_U(RUNNER_SAVE_STATE | RUNNER_STATE(9)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "Autosave", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(0)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 1", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(1)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 2", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(2)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 3", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(3)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 4", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(4)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 5", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(5)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 6", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(6)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 7", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(7)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 8", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(8)) }; - *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 9", .data = (void*) (RUNNER_LOAD_STATE | RUNNER_STATE(9)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "Autosave", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(0)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 1", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(1)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 2", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(2)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 3", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(3)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 4", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(4)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 5", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(5)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 6", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(6)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 7", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(7)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 8", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(8)) }; + *GUIMenuItemListAppend(&stateLoadMenu.items) = (struct GUIMenuItem) { .title = "State 9", .data = GUI_V_U(RUNNER_LOAD_STATE | RUNNER_STATE(9)) }; - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Take screenshot", .data = (void*) RUNNER_SCREENSHOT }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Take screenshot", .data = GUI_V_U(RUNNER_SCREENSHOT) }; if (runner->params.getText) { - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Cheats", .data = (void*) RUNNER_CHEATS }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Cheats", .data = GUI_V_U(RUNNER_CHEATS) }; } - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Configure", .data = (void*) RUNNER_CONFIG }; - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Reset game", .data = (void*) RUNNER_RESET }; - *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Exit game", .data = (void*) RUNNER_EXIT }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Configure", .data = GUI_V_U(RUNNER_CONFIG) }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Reset game", .data = GUI_V_U(RUNNER_RESET) }; + *GUIMenuItemListAppend(&pauseMenu.items) = (struct GUIMenuItem) { .title = "Exit game", .data = GUI_V_U(RUNNER_EXIT) }; runner->params.drawStart(); if (runner->params.guiPrepare) { @@ -633,8 +633,8 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { uint32_t keys = 0xFFFFFFFF; // Huge hack to avoid an extra variable! struct GUIMenuItem* item; enum GUIMenuExitReason reason = GUIShowMenu(&runner->params, &pauseMenu, &item); - if (reason == GUI_MENU_EXIT_ACCEPT) { - switch (((int) item->data) & RUNNER_COMMAND_MASK) { + if (reason == GUI_MENU_EXIT_ACCEPT && item->data.type == GUI_VARIANT_UNSIGNED) { + switch (item->data.v.u & RUNNER_COMMAND_MASK) { case RUNNER_EXIT: running = false; keys = 0; @@ -643,10 +643,10 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { runner->core->reset(runner->core); break; case RUNNER_SAVE_STATE: - mCoreSaveState(runner->core, ((uint32_t) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_SAVEDATA | SAVESTATE_RTC | SAVESTATE_METADATA); + mCoreSaveState(runner->core, item->data.v.u >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_SAVEDATA | SAVESTATE_RTC | SAVESTATE_METADATA); break; case RUNNER_LOAD_STATE: - mCoreLoadState(runner->core, ((uint32_t) item->data) >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_RTC); + mCoreLoadState(runner->core, item->data.v.u >> 16, SAVESTATE_SCREENSHOT | SAVESTATE_RTC); break; case RUNNER_SCREENSHOT: mCoreTakeScreenshot(runner->core); diff --git a/src/feature/gui/remap.c b/src/feature/gui/remap.c index d09c0ca51..5f7da0f01 100644 --- a/src/feature/gui/remap.c +++ b/src/feature/gui/remap.c @@ -21,12 +21,12 @@ void mGUIRemapKeys(struct GUIParams* params, struct mInputMap* map, const struct size_t i; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Game keys:", - .data = 0, + .data = GUI_V_V, }; for (i = 0; i < map->info->nKeys; ++i) { *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = map->info->keyId[i], - .data = (void*) (GUI_INPUT_MAX + i + 1), + .data = GUI_V_U(GUI_INPUT_MAX + i + 1), .submenu = 0, .state = mInputQueryBinding(map, keys->id, i) + 1, .validStates = keyNames, @@ -35,7 +35,7 @@ void mGUIRemapKeys(struct GUIParams* params, struct mInputMap* map, const struct } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Interface keys:", - .data = 0, + .data = GUI_V_V, }; for (i = 0; i < params->keyMap.info->nKeys; ++i) { if (!params->keyMap.info->keyId[i]) { @@ -43,7 +43,7 @@ void mGUIRemapKeys(struct GUIParams* params, struct mInputMap* map, const struct } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = params->keyMap.info->keyId[i], - .data = (void*) i + 1, + .data = GUI_V_U(i + 1), .submenu = 0, .state = mInputQueryBinding(¶ms->keyMap, keys->id, i) + 1, .validStates = keyNames, @@ -52,30 +52,30 @@ void mGUIRemapKeys(struct GUIParams* params, struct mInputMap* map, const struct } *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Save", - .data = (void*) (GUI_INPUT_MAX + map->info->nKeys + 2), + .data = GUI_V_I(-2), }; *GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) { .title = "Cancel", - .data = 0, + .data = GUI_V_I(-1), }; struct GUIMenuItem* item; while (true) { enum GUIMenuExitReason reason; reason = GUIShowMenu(params, &menu, &item); - if (reason != GUI_MENU_EXIT_ACCEPT || !item->data) { + if (reason != GUI_MENU_EXIT_ACCEPT || GUIVariantCompareInt(item->data, -1)) { break; } - if (item->data == (void*) (GUI_INPUT_MAX + map->info->nKeys + 2)) { + if (GUIVariantCompareInt(item->data, -2)) { for (i = 0; i < GUIMenuItemListSize(&menu.items); ++i) { item = GUIMenuItemListGetPointer(&menu.items, i); - if ((uintptr_t) item->data < 1) { + if (!GUIVariantIsUInt(item->data)) { continue; } - if ((uintptr_t) item->data < GUI_INPUT_MAX + 1) { - mInputBindKey(¶ms->keyMap, keys->id, item->state - 1, (uintptr_t) item->data - 1); - } else if ((uintptr_t) item->data < GUI_INPUT_MAX + map->info->nKeys + 1) { - mInputBindKey(map, keys->id, item->state - 1, (uintptr_t) item->data - GUI_INPUT_MAX - 1); + if (item->data.v.u < GUI_INPUT_MAX + 1) { + mInputBindKey(¶ms->keyMap, keys->id, item->state - 1, item->data.v.u - 1); + } else if (item->data.v.u < GUI_INPUT_MAX + map->info->nKeys + 1) { + mInputBindKey(map, keys->id, item->state - 1, item->data.v.u - GUI_INPUT_MAX - 1); } } break; diff --git a/src/platform/3ds/main.c b/src/platform/3ds/main.c index 5e826937d..fb4152867 100644 --- a/src/platform/3ds/main.c +++ b/src/platform/3ds/main.c @@ -953,7 +953,7 @@ int main() { .configExtra = (struct GUIMenuItem[]) { { .title = "Screen mode", - .data = "screenMode", + .data = GUI_V_S("screenMode"), .submenu = 0, .state = SM_PA_TOP, .validStates = (const char*[]) { @@ -968,7 +968,7 @@ int main() { }, { .title = "Filtering", - .data = "filterMode", + .data = GUI_V_S("filterMode"), .submenu = 0, .state = FM_LINEAR_2x, .validStates = (const char*[]) { @@ -980,7 +980,7 @@ int main() { }, { .title = "Screen darkening", - .data = "darkenMode", + .data = GUI_V_S("darkenMode"), .submenu = 0, .state = DM_NATIVE, .validStates = (const char*[]) { @@ -993,7 +993,7 @@ int main() { }, { .title = "Camera", - .data = "camera", + .data = GUI_V_S("camera"), .submenu = 0, .state = 1, .validStates = (const char*[]) { diff --git a/src/platform/psp2/main.c b/src/platform/psp2/main.c index 1296baa0e..2be4dafee 100644 --- a/src/platform/psp2/main.c +++ b/src/platform/psp2/main.c @@ -160,7 +160,7 @@ int main() { .configExtra = (struct GUIMenuItem[]) { { .title = "Screen mode", - .data = "screenMode", + .data = GUI_V_S("screenMode"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -173,7 +173,7 @@ int main() { }, { .title = "Camera", - .data = "camera", + .data = GUI_V_S("camera"), .submenu = 0, .state = 1, .validStates = (const char*[]) { diff --git a/src/platform/switch/main.c b/src/platform/switch/main.c index 7ba497d85..d127a93fb 100644 --- a/src/platform/switch/main.c +++ b/src/platform/switch/main.c @@ -924,7 +924,7 @@ int main(int argc, char* argv[]) { .configExtra = (struct GUIMenuItem[]) { { .title = "Screen mode", - .data = "screenMode", + .data = GUI_V_S("screenMode"), .submenu = 0, .state = SM_PA, .validStates = (const char*[]) { @@ -936,7 +936,7 @@ int main(int argc, char* argv[]) { }, { .title = "Fast forward cap", - .data = "fastForwardCap", + .data = GUI_V_S("fastForwardCap"), .submenu = 0, .state = 7, .validStates = (const char*[]) { @@ -966,7 +966,7 @@ int main(int argc, char* argv[]) { }, { .title = "GPU-accelerated renderer", - .data = "hwaccelVideo", + .data = GUI_V_S("hwaccelVideo"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -977,7 +977,7 @@ int main(int argc, char* argv[]) { }, { .title = "Hi-res scaling (requires GPU rendering)", - .data = "videoScale", + .data = GUI_V_S("videoScale"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -1000,7 +1000,7 @@ int main(int argc, char* argv[]) { }, { .title = "Use built-in brightness sensor for Boktai", - .data = "useLightSensor", + .data = GUI_V_S("useLightSensor"), .submenu = 0, .state = illuminanceAvailable, .validStates = (const char*[]) { diff --git a/src/platform/wii/main.c b/src/platform/wii/main.c index 535ed8091..8149ce285 100644 --- a/src/platform/wii/main.c +++ b/src/platform/wii/main.c @@ -490,7 +490,7 @@ int main(int argc, char* argv[]) { .configExtra = (struct GUIMenuItem[]) { { .title = "Video mode", - .data = "videoMode", + .data = GUI_V_S("videoMode"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -503,7 +503,7 @@ int main(int argc, char* argv[]) { }, { .title = "Screen mode", - .data = "screenMode", + .data = GUI_V_S("screenMode"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -514,7 +514,7 @@ int main(int argc, char* argv[]) { }, { .title = "Filtering", - .data = "filter", + .data = GUI_V_S("filter"), .submenu = 0, .state = 0, .validStates = (const char*[]) { @@ -526,7 +526,7 @@ int main(int argc, char* argv[]) { }, { .title = "Horizontal stretch", - .data = "stretchWidth", + .data = GUI_V_S("stretchWidth"), .submenu = 0, .state = 7, .validStates = (const char*[]) { @@ -546,7 +546,7 @@ int main(int argc, char* argv[]) { }, { .title = "Vertical stretch", - .data = "stretchHeight", + .data = GUI_V_S("stretchHeight"), .submenu = 0, .state = 6, .validStates = (const char*[]) { diff --git a/src/util/gui/file-select.c b/src/util/gui/file-select.c index b8802d8cc..8c6b86ca8 100644 --- a/src/util/gui/file-select.c +++ b/src/util/gui/file-select.c @@ -94,7 +94,7 @@ static bool _refreshDirectory(struct GUIParams* params, const char* currentPath, } else { name = strdup(name); } - *GUIMenuItemListAppend(currentFiles) = (struct GUIMenuItem) { .title = name, .data = (void*) de->type(de) }; + *GUIMenuItemListAppend(currentFiles) = (struct GUIMenuItem) { .title = name, .data = GUI_V_U(de->type(de)) }; ++items; } qsort(GUIMenuItemListGetPointer(currentFiles, 1), GUIMenuItemListSize(currentFiles) - 1, sizeof(struct GUIMenuItem), _strpcmp); @@ -124,7 +124,7 @@ static bool _refreshDirectory(struct GUIParams* params, const char* currentPath, params->drawEnd(); } struct GUIMenuItem* testItem = GUIMenuItemListGetPointer(currentFiles, item); - if (testItem->data != (void*) VFS_FILE) { + if (!GUIVariantCompareUInt(testItem->data, VFS_FILE)) { ++item; continue; } diff --git a/src/util/gui/menu.c b/src/util/gui/menu.c index ddcc1bf22..0a51102d0 100644 --- a/src/util/gui/menu.c +++ b/src/util/gui/menu.c @@ -137,7 +137,7 @@ enum GUIMenuExitReason GUIShowMenu(struct GUIParams* params, struct GUIMenu* men if (reason != GUI_MENU_EXIT_BACK) { return reason; } - } else if ((*item)->validStates && !(*item)->data) { + } else if ((*item)->validStates && !(*item)->data.v.p) { _itemNext(*item, true); } else { return GUI_MENU_EXIT_ACCEPT; @@ -152,7 +152,7 @@ enum GUIMenuExitReason GUIShowMenu(struct GUIParams* params, struct GUIMenu* men params->drawStart(); if (menu->background) { - menu->background->draw(menu->background, GUIMenuItemListGetPointer(&menu->items, menu->index)->data); + menu->background->draw(menu->background, GUIMenuItemListGetPointer(&menu->items, menu->index)->data.v.p); } if (params->guiPrepare) { params->guiPrepare(); From de16ea49c7244ec85bb3f4a0c0ef542b37b8f858 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 28 Jun 2021 22:38:25 -0700 Subject: [PATCH 50/50] Qt: Redo sensor binding to be less fragile --- CHANGES | 1 + src/platform/qt/SensorView.cpp | 17 +++++++++-------- src/platform/qt/SensorView.h | 4 +++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 27931a979..525d2e94b 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,7 @@ Other fixes: - Qt: Fix applying savetype-only overrides - Qt: Fix crash in sprite view for partially out-of-bounds sprites (fixes mgba.io/i/2165) - Qt: Fix having to press controller buttons twice for menu items (fixes mgba.io/i/2143) + - Qt: Redo sensor binding to be less fragile - Util: Fix loading UPS patches that affect the last byte of the file Misc: - Core: Suspend runloop when a core crashes diff --git a/src/platform/qt/SensorView.cpp b/src/platform/qt/SensorView.cpp index ba8f87da2..1742a26ee 100644 --- a/src/platform/qt/SensorView.cpp +++ b/src/platform/qt/SensorView.cpp @@ -79,14 +79,11 @@ void SensorView::setController(std::shared_ptr controller) { void SensorView::jiggerer(QAbstractButton* button, void (InputController::*setter)(int)) { connect(button, &QAbstractButton::toggled, [this, button, setter](bool checked) { if (!checked) { - m_jiggered = nullptr; + m_button = nullptr; } else { button->setFocus(); - m_jiggered = [this, button, setter](int axis) { - (m_input->*setter)(axis); - button->setChecked(false); - button->clearFocus(); - }; + m_button = button; + m_setter = setter; } }); button->installEventFilter(this); @@ -106,8 +103,12 @@ bool SensorView::eventFilter(QObject*, QEvent* event) { if (event->type() == GamepadAxisEvent::Type()) { GamepadAxisEvent* gae = static_cast(event); gae->accept(); - if (m_jiggered && gae->direction() != GamepadAxisEvent::NEUTRAL && gae->isNew()) { - m_jiggered(gae->axis()); + if (m_button && gae->direction() != GamepadAxisEvent::NEUTRAL && gae->isNew()) { + m_button->removeEventFilter(this); + m_button->clearFocus(); + m_button->setChecked(false); + (m_input->*m_setter)(gae->axis()); + m_button = nullptr; } return true; } diff --git a/src/platform/qt/SensorView.h b/src/platform/qt/SensorView.h index 4cead7d11..5ccc40ec8 100644 --- a/src/platform/qt/SensorView.h +++ b/src/platform/qt/SensorView.h @@ -42,7 +42,9 @@ private slots: private: Ui::SensorView m_ui; - std::function m_jiggered; + QAbstractButton* m_button = nullptr; + void (InputController::*m_setter)(int); + std::shared_ptr m_controller; InputController* m_input; mRotationSource* m_rotation;