mirror of https://github.com/mgba-emu/mgba.git
Compare commits
28 Commits
eec6d22f59
...
aa9766dc8d
Author | SHA1 | Date |
---|---|---|
luc-git | aa9766dc8d | |
Vicki Pfau | 92e10f31ea | |
Vicki Pfau | 2dd11712db | |
Vicki Pfau | 7fe4f4593e | |
Vicki Pfau | 2c0e572841 | |
Vicki Pfau | ed64b35db7 | |
Vicki Pfau | e518a5ced0 | |
Ikko Eltociear Ashimine | 4189a4d731 | |
Vicki Pfau | 4cc49a6700 | |
Vicki Pfau | 7012f9c666 | |
Vicki Pfau | 311d9f3550 | |
Vicki Pfau | b8c890e1bc | |
Vicki Pfau | deb4f547fa | |
Vicki Pfau | 8c2e2e1d46 | |
Vicki Pfau | 6be223d84a | |
Vicki Pfau | 762a54a388 | |
Vicki Pfau | 159b0dc445 | |
Vicki Pfau | 75dc290853 | |
Vicki Pfau | 511437312c | |
Vicki Pfau | 87bf982338 | |
Artur Dudka | 61d1dc742d | |
Roll8ack | d96ff26983 | |
reimu105 | e3f3baed51 | |
Momo cao | 0880b007fa | |
Daniel Nylander | 34c992eb23 | |
Felipe | 3e5e20c6f0 | |
Vicki Pfau | a2fda7f441 | |
luc-git | 572d5ee906 |
12
CHANGES
12
CHANGES
|
@ -1,11 +1,17 @@
|
|||
0.11.0: (Future)
|
||||
Features:
|
||||
- Forwarder support for 3DS and Vita
|
||||
- Custom border support
|
||||
- New option to lock the maximum frame size
|
||||
- Memory access and information logging
|
||||
- Scripting: New `input` API for getting raw keyboard/mouse/controller state
|
||||
- Scripting: New `storage` API for saving data for a script, e.g. settings
|
||||
- Scripting: New `image` and `canvas` APIs for drawing images and displaying on-screen
|
||||
- Scripting: Debugger integration to allow for breakpoints and watchpoints
|
||||
- New unlicensed GB mappers: NT (older types 1 and 2), Li Cheng, GGB-81
|
||||
- Initial support for bootleg GBA multicarts
|
||||
- Debugger: Add range watchpoints
|
||||
- "Headless" frontend for running tests, automation, etc.
|
||||
Emulation fixes:
|
||||
- ARM: Add framework for coprocessor support
|
||||
- GB Serialize: Add missing Pocket Cam state to savestates
|
||||
|
@ -26,10 +32,12 @@ Other fixes:
|
|||
- mGUI: Load parent directory if last used directory is missing (fixes mgba.io/i/3379)
|
||||
- Qt: Fix savestate preview sizes with different scales (fixes mgba.io/i/2560)
|
||||
- Qt: Fix potential crash when configuring shortcuts
|
||||
- Qt: Fix regression where loading BIOS creates a save file (fixes mgba.io/i/3359)
|
||||
Misc:
|
||||
- Core: Handle relative paths for saves, screenshots, etc consistently (fixes mgba.io/i/2826)
|
||||
- Core: Improve rumble emulation by averaging state over entire frame (fixes mgba.io/i/3232)
|
||||
- Core: Add MD5 hashing for ROMs
|
||||
- Core: Add support for specifying an arbitrary portable directory
|
||||
- GB: Prevent incompatible BIOSes from being used on differing models
|
||||
- GB Serialize: Add missing savestate support for MBC6 and NT (newer)
|
||||
- GBA: Improve detection of valid ELF ROMs
|
||||
|
@ -48,7 +56,11 @@ Misc:
|
|||
- Qt: Show maker code and game version in ROM info
|
||||
- Qt: Show a dummy shader settings tab if shaders aren't supported
|
||||
- Qt: Allow passing multiple games on command line for multiplayer (closes mgba.io/i/3061)
|
||||
- Qt: Support building against Qt 6
|
||||
- Qt: Add shortcuts to increment fast forward speed (mgba.io/i/2903)
|
||||
- Res: Port hq2x and OmniScale shaders from SameBoy
|
||||
- Res: Port NSO-gba-colors shader (closes mgba.io/i/2834)
|
||||
- Res: Update gba-colors shader (closes mgba.io/i/2976)
|
||||
- Scripting: Add `callbacks:oneshot` for single-call callbacks
|
||||
- Updater: Fix rewriting folders and files on Windows (fixes mgba.io/i/3384)
|
||||
|
||||
|
|
|
@ -241,6 +241,10 @@ endif()
|
|||
|
||||
if(APPLE)
|
||||
execute_process(COMMAND xcrun --show-sdk-version OUTPUT_VARIABLE MACOSX_SDK)
|
||||
if(NOT MACOSX_SDK)
|
||||
message(WARNING "Could not detect SDK version; defaulting to system version. Is SDKROOT set?")
|
||||
set(MACOSX_SDK ${CMAKE_SYSTEM_VERSION})
|
||||
endif()
|
||||
add_definitions(-D_DARWIN_C_SOURCE)
|
||||
list(APPEND OS_LIB "-framework Foundation")
|
||||
|
||||
|
|
|
@ -0,0 +1,268 @@
|
|||
mGBA
|
||||
====
|
||||
|
||||
mGBAは、ゲームボーイアドバンスのゲームを実行するためのエミュレーターです。mGBAの目標は、既存の多くのゲームボーイアドバンスエミュレーターよりも高速かつ正確であり、他のエミュレーターにはない機能を追加することです。また、ゲームボーイおよびゲームボーイカラーのゲームもサポートしています。
|
||||
|
||||
最新のニュースとダウンロードは、[mgba.io](https://mgba.io/)で見つけることができます。
|
||||
|
||||
[![Build status](https://buildbot.mgba.io/badges/build-win32.svg)](https://buildbot.mgba.io)
|
||||
[![Translation status](https://hosted.weblate.org/widgets/mgba/-/svg-badge.svg)](https://hosted.weblate.org/engage/mgba)
|
||||
|
||||
特徴
|
||||
--------
|
||||
|
||||
- 高精度なゲームボーイアドバンスハードウェアのサポート[<sup>[1]</sup>](#missing)。
|
||||
- ゲームボーイ/ゲームボーイカラーのハードウェアサポート。
|
||||
- 高速なエミュレーション。ネットブックなどの低スペックハードウェアでもフルスピードで動作することが知られています。
|
||||
- 重量級と軽量級のフロントエンドのためのQtおよびSDLポート。
|
||||
- ローカル(同じコンピュータ)リンクケーブルのサポート。
|
||||
- フラッシュメモリサイズを含む保存タイプの検出[<sup>[2]</sup>](#flashdetect)。
|
||||
- モーションセンサーと振動機能を備えたカートリッジのサポート(ゲームコントローラーでのみ使用可能)。
|
||||
- 設定なしでもリアルタイムクロックのサポート。
|
||||
- ボクタイゲームのためのソーラーセンサーのサポート。
|
||||
- ゲームボーイカメラとゲームボーイプリンターのサポート。
|
||||
- 内蔵BIOS実装と外部BIOSファイルの読み込み機能。
|
||||
- Luaを使用したスクリプトサポート。
|
||||
- Tabキーを押し続けることでターボ/早送りサポート。
|
||||
- バッククォートを押し続けることで巻き戻し。
|
||||
- 最大10まで設定可能なフレームスキップ。
|
||||
- スクリーンショットのサポート。
|
||||
- チートコードのサポート。
|
||||
- 9つのセーブステートスロット。セーブステートはスクリーンショットとしても表示可能。
|
||||
- ビデオ、GIF、WebP、およびAPNGの録画。
|
||||
- e-Readerのサポート。
|
||||
- キーボードとゲームパッドのリマップ可能なコントロール。
|
||||
- ZIPおよび7zファイルからの読み込み。
|
||||
- IPS、UPS、およびBPSパッチのサポート。
|
||||
- コマンドラインインターフェースとGDBリモートサポートを介したゲームデバッグ、GhidraおよびIDA Proと互換性あり。
|
||||
- 設定可能なエミュレーションの巻き戻し。
|
||||
- GameSharkおよびAction Replayスナップショットの読み込みおよびエクスポートのサポート。
|
||||
- RetroArch/LibretroおよびOpenEmu用のコア。
|
||||
- [Weblate](https://hosted.weblate.org/engage/mgba)を介した複数の言語のコミュニティ提供の翻訳。
|
||||
- その他、多くの小さな機能。
|
||||
|
||||
#### ゲームボーイマッパー
|
||||
|
||||
以下のマッパーが完全にサポートされています:
|
||||
|
||||
- MBC1
|
||||
- MBC1M
|
||||
- MBC2
|
||||
- MBC3
|
||||
- MBC3+RTC
|
||||
- MBC30
|
||||
- MBC5
|
||||
- MBC5+Rumble
|
||||
- MBC7
|
||||
- Wisdom Tree(非公式)
|
||||
- NT "old type" 1 and 2(非公式マルチカート)
|
||||
- NT "new type"(非公式MBC5類似)
|
||||
- Pokémon Jade/Diamond(非公式)
|
||||
- Sachen MMC1(非公式)
|
||||
|
||||
以下のマッパーが部分的にサポートされています:
|
||||
|
||||
- MBC6(フラッシュメモリ書き込みサポートなし)
|
||||
- MMM01
|
||||
- Pocket Cam
|
||||
- TAMA5(RTCサポート不完全)
|
||||
- HuC-1(IRサポートなし)
|
||||
- HuC-3(IRサポートなし)
|
||||
- Sachen MMC2(代替配線サポートなし)
|
||||
- BBD(ロゴ切り替えなし)
|
||||
- Hitek(ロゴ切り替えなし)
|
||||
- GGB-81(ロゴ切り替えなし)
|
||||
- Li Cheng(ロゴ切り替えなし)
|
||||
|
||||
### 計画されている機能
|
||||
|
||||
- ネットワーク対応のマルチプレイヤーリンクケーブルサポート。
|
||||
- Dolphin/JOYバスリンクケーブルサポート。
|
||||
- MP2kオーディオミキシング、ハードウェアより高品質のサウンド。
|
||||
- ツールアシストランのための再録サポート。
|
||||
- 包括的なデバッグスイート。
|
||||
- ワイヤレスアダプターのサポート。
|
||||
|
||||
サポートされているプラットフォーム
|
||||
-------------------
|
||||
|
||||
- Windows 7以降
|
||||
- OS X 10.9(Mavericks)[<sup>[3]</sup>](#osxver)以降
|
||||
- Linux
|
||||
- FreeBSD
|
||||
- Nintendo 3DS
|
||||
- Nintendo Switch
|
||||
- Wii
|
||||
- PlayStation Vita
|
||||
|
||||
他のUnix系プラットフォーム(OpenBSDなど)も動作することが知られていますが、テストされておらず、完全にはサポートされていません。
|
||||
|
||||
### システム要件
|
||||
|
||||
要件は最小限です。Windows Vista以降を実行できるコンピュータであれば、エミュレーションを処理できるはずです。OpenGL 1.1以降のサポートも必要であり、シェーダーや高度な機能にはOpenGL 3.2以降が必要です。
|
||||
|
||||
ダウンロード
|
||||
---------
|
||||
|
||||
ダウンロードは公式ウェブサイトの[ダウンロード][downloads]セクションで見つけることができます。ソースコードは[GitHub][source]で見つけることができます。
|
||||
|
||||
コントロール
|
||||
--------
|
||||
|
||||
コントロールは設定メニューで設定可能です。多くのゲームコントローラーはデフォルトで自動的にマッピングされるはずです。デフォルトのキーボードコントロールは次のとおりです:
|
||||
|
||||
- **A**:X
|
||||
- **B**:Z
|
||||
- **L**:A
|
||||
- **R**:S
|
||||
- **Start**:Enter
|
||||
- **Select**:Backspace
|
||||
|
||||
コンパイル
|
||||
---------
|
||||
|
||||
コンパイルにはCMake 3.1以降の使用が必要です。GCC、Clang、およびVisual Studio 2019はmGBAのコンパイルに使用できることが知られています。
|
||||
|
||||
#### Dockerビルド
|
||||
|
||||
ほとんどのプラットフォームでのビルドにはDockerを使用することをお勧めします。いくつかのプラットフォームでmGBAをビルドするために必要なツールチェーンと依存関係を含むいくつかのDockerイメージが提供されています。
|
||||
|
||||
注意:Windows 10以前の古いWindowsシステムを使用している場合、DockerがVirtualBox共有フォルダーを使用して現在の`mgba`チェックアウトディレクトリをDockerイメージの作業ディレクトリに正しくマッピングするように構成する必要がある場合があります。(詳細については、issue [#1985](https://mgba.io/i/1985)を参照してください。)
|
||||
|
||||
Dockerイメージを使用してmGBAをビルドするには、mGBAのチェックアウトのルートで次のコマンドを実行します:
|
||||
|
||||
docker run --rm -it -v ${PWD}:/home/mgba/src mgba/windows:w32
|
||||
|
||||
Dockerコンテナを起動した後、ビルド成果物を含む`build-win32`ディレクトリが生成されます。他のプラットフォーム用のDockerイメージに置き換えると、対応する他のディレクトリが生成されます。Docker Hubで利用可能なDockerイメージは次のとおりです:
|
||||
|
||||
- mgba/3ds
|
||||
- mgba/switch
|
||||
- mgba/ubuntu:xenial
|
||||
- mgba/ubuntu:bionic
|
||||
- mgba/ubuntu:focal
|
||||
- mgba/ubuntu:groovy
|
||||
- mgba/vita
|
||||
- mgba/wii
|
||||
- mgba/windows:w32
|
||||
- mgba/windows:w64
|
||||
|
||||
ビルドプロセスを高速化したい場合は、`-e MAKEFLAGS=-jN`フラグを追加して、`N`個のCPUコアでmGBAの並列ビルドを行うことを検討してください。
|
||||
|
||||
#### *nixビルド
|
||||
|
||||
UnixベースのシステムでCMakeを使用してビルドするには、次のコマンドを実行することをお勧めします:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
|
||||
make
|
||||
sudo make install
|
||||
|
||||
これにより、mGBAがビルドされ、`/usr/bin`および`/usr/lib`にインストールされます。インストールされている依存関係は自動的に検出され、依存関係が見つからない場合に無効になる機能は、`cmake`コマンドを実行した後に警告として表示されます。
|
||||
|
||||
macOSを使用している場合、手順は少し異なります。homebrewパッケージマネージャーを使用していると仮定すると、依存関係を取得してビルドするための推奨コマンドは次のとおりです:
|
||||
|
||||
brew install cmake ffmpeg libzip qt5 sdl2 libedit lua pkg-config
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_PREFIX_PATH=`brew --prefix qt5` ..
|
||||
make
|
||||
|
||||
macOSでは`make install`を実行しないでください。正しく動作しないためです。
|
||||
|
||||
#### Windows開発者ビルド
|
||||
|
||||
##### MSYS2
|
||||
|
||||
Windowsでの開発用ビルドにはMSYS2を使用することをお勧めします。MSYS2の[ウェブサイト](https://msys2.github.io)に記載されているインストール手順に従ってください。32ビットバージョン(「MSYS2 MinGW 32-bit」)を実行していることを確認してください(x86_64用にビルドする場合は64ビットバージョン「MSYS2 MinGW 64-bit」を実行してください)。必要な依存関係をインストールするために次の追加コマンド(中括弧を含む)を実行します(このコマンドは1100MiB以上のパッケージをダウンロードするため、長時間かかることに注意してください):
|
||||
|
||||
pacman -Sy --needed base-devel git ${MINGW_PACKAGE_PREFIX}-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,lua,pkgconf,qt5,SDL2,ntldd-git}
|
||||
|
||||
次のコマンドを実行してソースコードをチェックアウトします:
|
||||
|
||||
git clone https://github.com/mgba-emu/mgba.git
|
||||
|
||||
最後に、次のコマンドを実行してビルドします:
|
||||
|
||||
mkdir -p mgba/build
|
||||
cd mgba/build
|
||||
cmake .. -G "MSYS Makefiles"
|
||||
make -j$(nproc --ignore=1)
|
||||
|
||||
このWindows用mGBAビルドは、実行に必要なDLLが分散しているため、配布には適していないことに注意してください。ただし、開発には最適です。ただし、そのようなビルドを配布する必要がある場合(たとえば、MSYS2環境がインストールされていないマシンでのテスト用)、`cpack -G ZIP`を実行すると、必要なDLLをすべて含むzipファイルが準備されます。
|
||||
|
||||
##### Visual Studio
|
||||
|
||||
Visual Studioを使用してビルドするには、同様に複雑なセットアップが必要です。まず、[vcpkg](https://github.com/Microsoft/vcpkg)をインストールする必要があります。vcpkgをインストールした後、いくつかの追加パッケージをインストールする必要があります:
|
||||
|
||||
vcpkg install ffmpeg[vpx,x264] libepoxy libpng libzip lua sdl2 sqlite3
|
||||
|
||||
このインストールでは、Nvidiaハードウェアでのハードウェアアクセラレーションビデオエンコーディングはサポートされません。これが重要な場合は、事前にCUDAをインストールし、前のコマンドに`ffmpeg[vpx,x264,nvcodec]`を置き換えます。
|
||||
|
||||
Qtもインストールする必要があります。ただし、Qtは合理的な組織ではなく、困窮している会社によって所有および運営されているため、最新バージョンのオフラインオープンソースエディションインストーラーは存在しないため、[旧バージョンのインストーラー](https://download.qt.io/official_releases/qt/5.12/5.12.9/qt-opensource-windows-x86-5.12.9.exe)に戻る必要があります(これには無用なアカウントの作成が必要ですが、一時的に無効なプロキシを設定するか、ネットワークを無効にすることで回避できます)、オンラインインストーラーを使用する(いずれにしてもアカウントが必要です)、またはvcpkgを使用してビルドする(遅い)。これらはすべて良い選択肢ではありません。インストーラーを使用する場合は、適用可能なMSVCバージョンをインストールする必要があります。オフラインインストーラーはMSVC 2019をサポートしていないことに注意してください。vcpkgを使用する場合、次のようにインストールする必要があります。特にクアッドコア以下のコンピュータではかなりの時間がかかります:
|
||||
|
||||
vcpkg install qt5-base qt5-multimedia
|
||||
|
||||
次に、Visual Studioを開き、「リポジトリのクローンを作成」を選択し、`https://github.com/mgba-emu/mgba.git`を入力します。Visual Studioがクローンを完了したら、「ファイル」>「CMake」に移動し、チェックアウトされたリポジトリのルートにあるCMakeLists.txtファイルを開きます。そこから、他のVisual Studio CMakeプロジェクトと同様にVisual StudioでmGBAを開発できます。
|
||||
|
||||
#### ツールチェーンビルド
|
||||
|
||||
devkitARM(3DS用)、devkitPPC(Wii用)、devkitA64(Switch用)、またはvitasdk(PS Vita用)を持っている場合は、次のコマンドを使用してビルドできます:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../src/platform/3ds/CMakeToolchain.txt ..
|
||||
make
|
||||
|
||||
次のプラットフォーム用に`-DCMAKE_TOOLCHAIN_FILE`パラメータを置き換えます:
|
||||
|
||||
- 3DS:`../src/platform/3ds/CMakeToolchain.txt`
|
||||
- Switch:`../src/platform/switch/CMakeToolchain.txt`
|
||||
- Vita:`../src/platform/psp2/CMakeToolchain.vitasdk`
|
||||
- Wii:`../src/platform/wii/CMakeToolchain.txt`
|
||||
|
||||
### 依存関係
|
||||
|
||||
mGBAには厳密な依存関係はありませんが、特定の機能には次のオプションの依存関係が必要です。依存関係が見つからない場合、これらの機能は無効になります。
|
||||
|
||||
- Qt 5:GUIフロントエンド用。オーディオにはQt MultimediaまたはSDLが必要です。
|
||||
- SDL:より基本的なフロントエンドおよびQtフロントエンドでのゲームパッドサポート用。SDL 2が推奨されますが、1.2もサポートされています。
|
||||
- zlibおよびlibpng:スクリーンショットサポートおよびPNG内セーブステートサポート用。
|
||||
- libedit:コマンドラインデバッガーサポート用。
|
||||
- ffmpegまたはlibav:ビデオ、GIF、WebP、およびAPNGの録画用。
|
||||
- libzipまたはzlib:zipファイルに保存されたROMの読み込み用。
|
||||
- SQLite3:ゲームデータベース用。
|
||||
- libelf:ELF読み込み用。
|
||||
- Lua:スクリプト用。
|
||||
- json-c:スクリプトの`storage` API用。
|
||||
|
||||
SQLite3、libpng、およびzlibはエミュレーターに含まれているため、最初に外部でコンパイルする必要はありません。
|
||||
|
||||
脚注
|
||||
---------
|
||||
|
||||
<a name="missing">[1]</a> 現在欠けている機能は次のとおりです
|
||||
|
||||
- モード3、4、および5のOBJウィンドウ([バグ#5](http://mgba.io/b/5))
|
||||
|
||||
<a name="flashdetect">[2]</a> フラッシュメモリサイズの検出は一部のケースで機能しません。これらは実行時に構成できますが、そのようなケースに遭遇した場合はバグを報告することをお勧めします。
|
||||
|
||||
<a name="osxver">[3]</a> 10.9はQtポートにのみ必要です。10.7またはそれ以前のバージョンでQtポートをビルドまたは実行することは可能かもしれませんが、公式にはサポートされていません。SDLポートは10.5で動作することが知られており、古いバージョンでも動作する可能性があります。
|
||||
|
||||
[downloads]: http://mgba.io/downloads.html
|
||||
[source]: https://github.com/mgba-emu/mgba/
|
||||
|
||||
著作権
|
||||
---------
|
||||
|
||||
mGBAの著作権は© 2013 – 2023 Jeffrey Pfauに帰属します。これは[Mozilla Public License version 2.0](https://www.mozilla.org/MPL/2.0/)の下で配布されています。配布されたLICENSEファイルにライセンスのコピーが含まれています。
|
||||
|
||||
mGBAには次のサードパーティライブラリが含まれています:
|
||||
|
||||
- [inih](https://github.com/benhoyt/inih)、著作権© 2009 – 2020 Ben Hoyt、BSD 3-clauseライセンスの下で使用。
|
||||
- [LZMA SDK](http://www.7-zip.org/sdk.html)、パブリックドメイン。
|
||||
- [MurmurHash3](https://github.com/aappleby/smhasher)、Austin Applebyによる実装、パブリックドメイン。
|
||||
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/)、パブリックドメイン。
|
||||
- [SQLite3](https://www.sqlite.org)、パブリックドメイン。
|
||||
|
||||
ゲームパブリッシャーであり、商業利用のためにmGBAのライセンスを取得したい場合は、[licensing@mgba.io](mailto:licensing@mgba.io)までメールでお問い合わせください。
|
|
@ -20,6 +20,15 @@ enum mCPUComponentType {
|
|||
CPU_COMPONENT_MAX
|
||||
};
|
||||
|
||||
enum mMemoryAccessSource {
|
||||
mACCESS_UNKNOWN = 0,
|
||||
mACCESS_PROGRAM,
|
||||
mACCESS_DMA,
|
||||
mACCESS_SYSTEM,
|
||||
mACCESS_DECOMPRESS,
|
||||
mACCESS_COPY,
|
||||
};
|
||||
|
||||
struct mCPUComponent {
|
||||
uint32_t id;
|
||||
void (*init)(void* cpu, struct mCPUComponent* component);
|
||||
|
|
|
@ -111,6 +111,7 @@ struct mDebuggerEntryInfo {
|
|||
uint32_t newValue;
|
||||
enum mWatchpointType watchType;
|
||||
enum mWatchpointType accessType;
|
||||
enum mMemoryAccessSource accessSource;
|
||||
} wp;
|
||||
|
||||
struct {
|
||||
|
@ -256,6 +257,7 @@ bool mDebuggerIsShutdown(const struct mDebugger*);
|
|||
|
||||
struct mDebuggerModule* mDebuggerCreateModule(enum mDebuggerType type, struct mCore*);
|
||||
void mDebuggerModuleSetNeedsCallback(struct mDebuggerModule*);
|
||||
void mDebuggerModuleClearNeedsCallback(struct mDebuggerModule*);
|
||||
|
||||
bool mDebuggerLookupIdentifier(struct mDebugger* debugger, const char* name, int32_t* value, int* segment);
|
||||
|
||||
|
|
|
@ -132,6 +132,8 @@ struct ARMMemory {
|
|||
uint32_t activeNonseqCycles16;
|
||||
int32_t (*stall)(struct ARMCore*, int32_t wait);
|
||||
void (*setActiveRegion)(struct ARMCore*, uint32_t address);
|
||||
|
||||
enum mMemoryAccessSource accessSource;
|
||||
};
|
||||
|
||||
struct ARMCoprocessor {
|
||||
|
|
|
@ -23,6 +23,7 @@ struct mDebuggerAccessLogRegion {
|
|||
uint32_t segmentStart;
|
||||
mDebuggerAccessLogFlags* block;
|
||||
mDebuggerAccessLogFlagsEx* blockEx;
|
||||
ssize_t watchpoint;
|
||||
};
|
||||
|
||||
DECLARE_VECTOR(mDebuggerAccessLogRegionList, struct mDebuggerAccessLogRegion);
|
||||
|
@ -41,11 +42,16 @@ void mDebuggerAccessLoggerDeinit(struct mDebuggerAccessLogger*);
|
|||
bool mDebuggerAccessLoggerOpen(struct mDebuggerAccessLogger*, struct VFile*, int mode);
|
||||
bool mDebuggerAccessLoggerClose(struct mDebuggerAccessLogger*);
|
||||
|
||||
void mDebuggerAccessLoggerStart(struct mDebuggerAccessLogger*);
|
||||
void mDebuggerAccessLoggerStop(struct mDebuggerAccessLogger*);
|
||||
|
||||
int mDebuggerAccessLoggerWatchMemoryBlockId(struct mDebuggerAccessLogger*, size_t id, mDebuggerAccessLogRegionFlags);
|
||||
int mDebuggerAccessLoggerWatchMemoryBlockName(struct mDebuggerAccessLogger*, const char* internalName, mDebuggerAccessLogRegionFlags);
|
||||
|
||||
bool mDebuggerAccessLoggerCreateShadowFile(struct mDebuggerAccessLogger*, int region, struct VFile*, uint8_t fill);
|
||||
|
||||
struct mDebuggerAccessLogRegion* mDebuggerAccessLoggerGetRegion(struct mDebuggerAccessLogger*, uint32_t address, int segment, size_t* offset);
|
||||
|
||||
CXX_GUARD_END
|
||||
|
||||
#endif
|
||||
|
|
|
@ -45,9 +45,13 @@ enum FlashStateMachine {
|
|||
FLASH_STATE_CONTINUE = 2,
|
||||
};
|
||||
|
||||
enum FlashManufacturer {
|
||||
FLASH_MFG_PANASONIC = 0x1B32,
|
||||
FLASH_MFG_SANYO = 0x1362
|
||||
enum FlashId {
|
||||
FLASH_ATMEL_AT29LV512 = 0x3D1F, // 512k
|
||||
FLASH_MACRONIX_MX29L512 = 0x1CC2, // 512k, unused
|
||||
FLASH_MACRONIX_MX29L010 = 0x09C2, // 1M
|
||||
FLASH_PANASONIC_MN63F805MNP = 0x1B32, // 512k, unused
|
||||
FLASH_SANYO_LE26FV10N1TS = 0x1362, // 1M
|
||||
FLASH_SST_39LVF512 = 0xD4BF, // 512k
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
@ -61,6 +61,8 @@ struct SM83Memory {
|
|||
uint16_t activeMask;
|
||||
uint16_t activeRegionEnd;
|
||||
void (*setActiveRegion)(struct SM83Core*, uint16_t address);
|
||||
|
||||
enum mMemoryAccessSource accessSource;
|
||||
};
|
||||
|
||||
struct SM83InterruptHandler {
|
||||
|
|
|
@ -121,6 +121,7 @@ static void _checkWatchpoints(struct ARMDebugger* debugger, uint32_t address, en
|
|||
info.type.wp.newValue = newValue;
|
||||
info.type.wp.watchType = watchpoint->type;
|
||||
info.type.wp.accessType = type;
|
||||
info.type.wp.accessSource = debugger->cpu->memory.accessSource;
|
||||
info.address = address;
|
||||
info.segment = 0;
|
||||
info.width = width;
|
||||
|
|
|
@ -507,6 +507,10 @@ void mCoreThreadClearCrashed(struct mCoreThread* threadContext) {
|
|||
|
||||
void mCoreThreadEnd(struct mCoreThread* threadContext) {
|
||||
MutexLock(&threadContext->impl->stateMutex);
|
||||
if (threadContext->impl->state == mTHREAD_SHUTDOWN) {
|
||||
MutexUnlock(&threadContext->impl->stateMutex);
|
||||
return;
|
||||
}
|
||||
_waitOnInterrupt(threadContext->impl);
|
||||
threadContext->impl->state = mTHREAD_EXITING;
|
||||
ConditionWake(&threadContext->impl->stateOnThreadCond);
|
||||
|
|
|
@ -62,74 +62,102 @@ static void _mDebuggerAccessLoggerEntered(struct mDebuggerModule* debugger, enum
|
|||
break;
|
||||
}
|
||||
|
||||
size_t i;
|
||||
for (i = 0; i < mDebuggerAccessLogRegionListSize(&logger->regions); ++i) {
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLogRegionListGetPointer(&logger->regions, i);
|
||||
if (info->address < region->start || info->address >= region->end) {
|
||||
continue;
|
||||
}
|
||||
size_t offset = info->address - region->start;
|
||||
if (info->segment > 0) {
|
||||
uint32_t segmentSize = region->end - region->segmentStart;
|
||||
offset %= segmentSize;
|
||||
offset += segmentSize * info->segment;
|
||||
}
|
||||
size_t offset;
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLoggerGetRegion(logger, info->address, info->segment, &offset);
|
||||
if (!region) {
|
||||
return;
|
||||
}
|
||||
offset &= -info->width;
|
||||
|
||||
if (offset >= region->size) {
|
||||
continue;
|
||||
}
|
||||
|
||||
offset &= -info->width;
|
||||
|
||||
int j;
|
||||
switch (reason) {
|
||||
case DEBUGGER_ENTER_WATCHPOINT:
|
||||
for (j = 0; j < info->width; ++j) {
|
||||
if (info->type.wp.accessType & WATCHPOINT_WRITE) {
|
||||
region->block[offset + j] = mDebuggerAccessLogFlagsFillWrite(region->block[offset + j]);
|
||||
}
|
||||
if (info->type.wp.accessType & WATCHPOINT_READ) {
|
||||
region->block[offset + j] = mDebuggerAccessLogFlagsFillRead(region->block[offset + j]);
|
||||
}
|
||||
}
|
||||
switch (info->width) {
|
||||
case 1:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillAccess8(region->block[offset]);
|
||||
break;
|
||||
case 2:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillAccess16(region->block[offset]);
|
||||
region->block[offset + 1] = mDebuggerAccessLogFlagsFillAccess16(region->block[offset + 1]);
|
||||
break;
|
||||
case 4:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillAccess32(region->block[offset]);
|
||||
region->block[offset + 1] = mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 1]);
|
||||
region->block[offset + 2] = mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 2]);
|
||||
region->block[offset + 3] = mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 3]);
|
||||
break;
|
||||
case 8:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset]);
|
||||
region->block[offset + 1] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 1]);
|
||||
region->block[offset + 2] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 2]);
|
||||
region->block[offset + 3] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 3]);
|
||||
region->block[offset + 4] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 4]);
|
||||
region->block[offset + 5] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 5]);
|
||||
region->block[offset + 6] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 6]);
|
||||
region->block[offset + 7] = mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 7]);
|
||||
break;
|
||||
}
|
||||
mDebuggerAccessLogFlags flags = 0;
|
||||
mDebuggerAccessLogFlagsEx flagsEx = 0;
|
||||
switch (reason) {
|
||||
case DEBUGGER_ENTER_WATCHPOINT:
|
||||
switch (info->type.wp.accessSource) {
|
||||
case mACCESS_PROGRAM:
|
||||
flagsEx = mDebuggerAccessLogFlagsExFillAccessProgram(flagsEx);
|
||||
break;
|
||||
case DEBUGGER_ENTER_ILLEGAL_OP:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillExecute(region->block[offset]);
|
||||
case mACCESS_DMA:
|
||||
flagsEx = mDebuggerAccessLogFlagsExFillAccessDMA(flagsEx);
|
||||
break;
|
||||
case mACCESS_SYSTEM:
|
||||
flagsEx = mDebuggerAccessLogFlagsExFillAccessSystem(flagsEx);
|
||||
break;
|
||||
case mACCESS_DECOMPRESS:
|
||||
flagsEx = mDebuggerAccessLogFlagsExFillAccessDecompress(flagsEx);
|
||||
break;
|
||||
case mACCESS_COPY:
|
||||
flagsEx = mDebuggerAccessLogFlagsExFillAccessCopy(flagsEx);
|
||||
break;
|
||||
case mACCESS_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
if (info->type.wp.accessType & WATCHPOINT_WRITE) {
|
||||
flags = mDebuggerAccessLogFlagsFillWrite(flags);
|
||||
}
|
||||
if (info->type.wp.accessType & WATCHPOINT_READ) {
|
||||
flags = mDebuggerAccessLogFlagsFillRead(flags);
|
||||
}
|
||||
switch (info->width) {
|
||||
case 1:
|
||||
region->block[offset] = flags | mDebuggerAccessLogFlagsFillAccess8(region->block[offset]);
|
||||
if (region->blockEx) {
|
||||
uint16_t ex;
|
||||
LOAD_16LE(ex, 0, ®ion->blockEx[offset]);
|
||||
ex = mDebuggerAccessLogFlagsExFillErrorIllegalOpcode(ex);
|
||||
STORE_16LE(ex, 0, ®ion->blockEx[offset]);
|
||||
region->blockEx[offset] |= flagsEx;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case 2:
|
||||
region->block[offset] = flags | mDebuggerAccessLogFlagsFillAccess16(region->block[offset]);
|
||||
region->block[offset + 1] = flags | mDebuggerAccessLogFlagsFillAccess16(region->block[offset + 1]);
|
||||
if (region->blockEx) {
|
||||
region->blockEx[offset] |= flagsEx;
|
||||
region->blockEx[offset + 1] |= flagsEx;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
region->block[offset] = flags | mDebuggerAccessLogFlagsFillAccess32(region->block[offset]);
|
||||
region->block[offset + 1] = flags | mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 1]);
|
||||
region->block[offset + 2] = flags | mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 2]);
|
||||
region->block[offset + 3] = flags | mDebuggerAccessLogFlagsFillAccess32(region->block[offset + 3]);
|
||||
if (region->blockEx) {
|
||||
region->blockEx[offset] |= flagsEx;
|
||||
region->blockEx[offset + 1] |= flagsEx;
|
||||
region->blockEx[offset + 2] |= flagsEx;
|
||||
region->blockEx[offset + 3] |= flagsEx;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
region->block[offset] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset]);
|
||||
region->block[offset + 1] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 1]);
|
||||
region->block[offset + 2] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 2]);
|
||||
region->block[offset + 3] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 3]);
|
||||
region->block[offset + 4] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 4]);
|
||||
region->block[offset + 5] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 5]);
|
||||
region->block[offset + 6] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 6]);
|
||||
region->block[offset + 7] = flags | mDebuggerAccessLogFlagsFillAccess64(region->block[offset + 7]);
|
||||
if (region->blockEx) {
|
||||
region->blockEx[offset] |= flagsEx;
|
||||
region->blockEx[offset + 1] |= flagsEx;
|
||||
region->blockEx[offset + 2] |= flagsEx;
|
||||
region->blockEx[offset + 3] |= flagsEx;
|
||||
region->blockEx[offset + 4] |= flagsEx;
|
||||
region->blockEx[offset + 5] |= flagsEx;
|
||||
region->blockEx[offset + 6] |= flagsEx;
|
||||
region->blockEx[offset + 7] |= flagsEx;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case DEBUGGER_ENTER_ILLEGAL_OP:
|
||||
region->block[offset] = mDebuggerAccessLogFlagsFillExecute(region->block[offset]);
|
||||
if (region->blockEx) {
|
||||
uint16_t ex;
|
||||
LOAD_16LE(ex, 0, ®ion->blockEx[offset]);
|
||||
ex = mDebuggerAccessLogFlagsExFillErrorIllegalOpcode(ex);
|
||||
STORE_16LE(ex, 0, ®ion->blockEx[offset]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -139,34 +167,22 @@ static void _mDebuggerAccessLoggerCallback(struct mDebuggerModule* debugger) {
|
|||
struct mDebuggerInstructionInfo info;
|
||||
logger->d.p->platform->nextInstructionInfo(logger->d.p->platform, &info);
|
||||
|
||||
size_t offset;
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLoggerGetRegion(logger, info.address, info.segment, &offset);
|
||||
if (!region) {
|
||||
return;
|
||||
}
|
||||
|
||||
size_t i;
|
||||
for (i = 0; i < mDebuggerAccessLogRegionListSize(&logger->regions); ++i) {
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLogRegionListGetPointer(&logger->regions, i);
|
||||
if (info.address < region->start || info.address >= region->end) {
|
||||
continue;
|
||||
}
|
||||
size_t offset = info.address - region->start;
|
||||
if (info.segment > 0) {
|
||||
uint32_t segmentSize = region->end - region->segmentStart;
|
||||
offset %= segmentSize;
|
||||
offset += segmentSize * info.segment;
|
||||
}
|
||||
for (i = 0; i < info.width; ++i) {
|
||||
uint16_t ex = 0;
|
||||
region->block[offset + i] = mDebuggerAccessLogFlagsFillExecute(region->block[offset + i]);
|
||||
region->block[offset + i] |= info.flags[i];
|
||||
|
||||
if (offset >= region->size) {
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t j;
|
||||
for (j = 0; j < info.width; ++j) {
|
||||
uint16_t ex = 0;
|
||||
region->block[offset + j] = mDebuggerAccessLogFlagsFillExecute(region->block[offset + j]);
|
||||
region->block[offset + j] |= info.flags[j];
|
||||
|
||||
if (region->blockEx) {
|
||||
LOAD_16LE(ex, 0, ®ion->blockEx[offset + j]);
|
||||
ex |= info.flagsEx[j];
|
||||
STORE_16LE(ex, 0, ®ion->blockEx[offset + j]);
|
||||
}
|
||||
if (region->blockEx) {
|
||||
LOAD_16LE(ex, 0, ®ion->blockEx[offset + i]);
|
||||
ex |= info.flagsEx[i];
|
||||
STORE_16LE(ex, 0, ®ion->blockEx[offset + i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -240,13 +256,18 @@ static bool _setupRegion(struct mDebuggerAccessLogger* logger, struct mDebuggerA
|
|||
return false;
|
||||
}
|
||||
|
||||
struct mWatchpoint wp = {
|
||||
.segment = -1,
|
||||
.minAddress = region->start,
|
||||
.maxAddress = region->end,
|
||||
.type = WATCHPOINT_RW,
|
||||
};
|
||||
logger->d.p->platform->setWatchpoint(logger->d.p->platform, &logger->d, &wp);
|
||||
if (region->watchpoint < 0) {
|
||||
struct mWatchpoint wp = {
|
||||
.segment = -1,
|
||||
.minAddress = region->start,
|
||||
.maxAddress = region->end,
|
||||
.type = WATCHPOINT_RW,
|
||||
};
|
||||
region->watchpoint = logger->d.p->platform->setWatchpoint(logger->d.p->platform, &logger->d, &wp);
|
||||
}
|
||||
if (region->watchpoint < 0) {
|
||||
return false;
|
||||
}
|
||||
mDebuggerModuleSetNeedsCallback(&logger->d);
|
||||
return true;
|
||||
}
|
||||
|
@ -290,7 +311,7 @@ static bool mDebuggerAccessLoggerLoad(struct mDebuggerAccessLogger* logger) {
|
|||
LOAD_32LE(region->end, 0, &info->end);
|
||||
LOAD_32LE(region->size, 0, &info->size);
|
||||
LOAD_32LE(region->segmentStart, 0, &info->segmentStart);
|
||||
if (!_setupRegion(logger, region, info)) {
|
||||
if (!_mapRegion(logger, region, info)) {
|
||||
mDebuggerAccessLogRegionListClear(&logger->regions);
|
||||
return false;
|
||||
}
|
||||
|
@ -335,6 +356,30 @@ bool mDebuggerAccessLoggerOpen(struct mDebuggerAccessLogger* logger, struct VFil
|
|||
return loaded;
|
||||
}
|
||||
|
||||
void mDebuggerAccessLoggerStart(struct mDebuggerAccessLogger* logger) {
|
||||
size_t i;
|
||||
for (i = 0; i < logger->mapped->header.nRegions; ++i) {
|
||||
struct mDebuggerAccessLogRegionInfo* info = &logger->mapped->regionInfo[i];
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLogRegionListGetPointer(&logger->regions, i);
|
||||
if (!_setupRegion(logger, region, info)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mDebuggerAccessLoggerStop(struct mDebuggerAccessLogger* logger) {
|
||||
size_t i;
|
||||
for (i = 0; i < logger->mapped->header.nRegions; ++i) {
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLogRegionListGetPointer(&logger->regions, i);
|
||||
if (region->watchpoint < 0) {
|
||||
continue;
|
||||
}
|
||||
logger->d.p->platform->clearBreakpoint(logger->d.p->platform, region->watchpoint);
|
||||
region->watchpoint = -1;
|
||||
}
|
||||
mDebuggerModuleClearNeedsCallback(&logger->d);
|
||||
}
|
||||
|
||||
static int _mDebuggerAccessLoggerWatchMemoryBlock(struct mDebuggerAccessLogger* logger, const struct mCoreMemoryBlock* block, mDebuggerAccessLogRegionFlags flags) {
|
||||
if (mDebuggerAccessLogRegionListSize(&logger->regions) >= logger->mapped->header.regionCapacity) {
|
||||
return -1;
|
||||
|
@ -406,6 +451,7 @@ static int _mDebuggerAccessLoggerWatchMemoryBlock(struct mDebuggerAccessLogger*
|
|||
region->size = block->size;
|
||||
region->segmentStart = block->segmentStart;
|
||||
region->block = (mDebuggerAccessLogFlags*) ((uintptr_t) logger->backing + fileEnd);
|
||||
region->watchpoint = -1;
|
||||
|
||||
struct mDebuggerAccessLogRegionInfo* info = &logger->mapped->regionInfo[id];
|
||||
STORE_32LE(region->start, 0, &info->start);
|
||||
|
@ -434,6 +480,7 @@ bool mDebuggerAccessLoggerClose(struct mDebuggerAccessLogger* logger) {
|
|||
if (!logger->backing) {
|
||||
return true;
|
||||
}
|
||||
mDebuggerAccessLoggerStop(logger);
|
||||
mDebuggerAccessLogRegionListClear(&logger->regions);
|
||||
logger->backing->unmap(logger->backing, logger->mapped, logger->backing->size(logger->backing));
|
||||
logger->mapped = NULL;
|
||||
|
@ -518,3 +565,28 @@ bool mDebuggerAccessLoggerCreateShadowFile(struct mDebuggerAccessLogger* logger,
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct mDebuggerAccessLogRegion* mDebuggerAccessLoggerGetRegion(struct mDebuggerAccessLogger* logger, uint32_t address, int segment, size_t* offsetOut) {
|
||||
size_t i;
|
||||
for (i = 0; i < mDebuggerAccessLogRegionListSize(&logger->regions); ++i) {
|
||||
struct mDebuggerAccessLogRegion* region = mDebuggerAccessLogRegionListGetPointer(&logger->regions, i);
|
||||
if (address < region->start || address >= region->end) {
|
||||
continue;
|
||||
}
|
||||
size_t offset = address - region->start;
|
||||
if (segment > 0) {
|
||||
uint32_t segmentSize = region->end - region->segmentStart;
|
||||
offset %= segmentSize;
|
||||
offset += segmentSize * segment;
|
||||
}
|
||||
|
||||
if (offset >= region->size) {
|
||||
continue;
|
||||
}
|
||||
if (offsetOut) {
|
||||
*offsetOut = offset;
|
||||
}
|
||||
return region;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -320,3 +320,8 @@ void mDebuggerModuleSetNeedsCallback(struct mDebuggerModule* debugger) {
|
|||
debugger->needsCallback = true;
|
||||
mDebuggerUpdatePaused(debugger->p);
|
||||
}
|
||||
|
||||
void mDebuggerModuleClearNeedsCallback(struct mDebuggerModule* debugger) {
|
||||
debugger->needsCallback = false;
|
||||
mDebuggerUpdatePaused(debugger->p);
|
||||
}
|
||||
|
|
|
@ -148,6 +148,7 @@ void GBMemoryInit(struct GB* gb) {
|
|||
cpu->memory.store8 = GBStore8;
|
||||
cpu->memory.currentSegment = GBCurrentSegment;
|
||||
cpu->memory.setActiveRegion = GBSetActiveRegion;
|
||||
cpu->memory.accessSource = mACCESS_UNKNOWN;
|
||||
|
||||
gb->memory.wram = 0;
|
||||
gb->memory.wramBank = 0;
|
||||
|
@ -205,6 +206,7 @@ void GBMemoryReset(struct GB* gb) {
|
|||
gb->memory.hdmaDest = 0;
|
||||
gb->memory.isHdma = false;
|
||||
|
||||
gb->cpu->memory.accessSource = mACCESS_UNKNOWN;
|
||||
|
||||
gb->memory.dmaEvent.context = gb;
|
||||
gb->memory.dmaEvent.name = "GB DMA";
|
||||
|
@ -576,10 +578,13 @@ void _GBMemoryDMAService(struct mTiming* timing, void* context, uint32_t cyclesL
|
|||
struct GB* gb = context;
|
||||
int dmaRemaining = gb->memory.dmaRemaining;
|
||||
gb->memory.dmaRemaining = 0;
|
||||
enum mMemoryAccessSource oldAccess = gb->cpu->memory.accessSource;
|
||||
gb->cpu->memory.accessSource = mACCESS_DMA;
|
||||
uint8_t b = GBLoad8(gb->cpu, gb->memory.dmaSource);
|
||||
// TODO: Can DMA write OAM during modes 2-3?
|
||||
gb->video.oam.raw[gb->memory.dmaDest] = b;
|
||||
gb->video.renderer->writeOAM(gb->video.renderer, gb->memory.dmaDest);
|
||||
gb->cpu->memory.accessSource = oldAccess;
|
||||
++gb->memory.dmaSource;
|
||||
++gb->memory.dmaDest;
|
||||
gb->memory.dmaRemaining = dmaRemaining - 1;
|
||||
|
@ -591,8 +596,11 @@ void _GBMemoryDMAService(struct mTiming* timing, void* context, uint32_t cyclesL
|
|||
void _GBMemoryHDMAService(struct mTiming* timing, void* context, uint32_t cyclesLate) {
|
||||
struct GB* gb = context;
|
||||
gb->cpuBlocked = true;
|
||||
enum mMemoryAccessSource oldAccess = gb->cpu->memory.accessSource;
|
||||
gb->cpu->memory.accessSource = mACCESS_DMA;
|
||||
uint8_t b = gb->cpu->memory.load8(gb->cpu, gb->memory.hdmaSource);
|
||||
gb->cpu->memory.store8(gb->cpu, gb->memory.hdmaDest, b);
|
||||
gb->cpu->memory.accessSource = oldAccess;
|
||||
++gb->memory.hdmaSource;
|
||||
++gb->memory.hdmaDest;
|
||||
--gb->memory.hdmaRemaining;
|
||||
|
|
|
@ -174,6 +174,8 @@ static void _BgAffineSet(struct GBA* gba) {
|
|||
int destination = cpu->gprs[1];
|
||||
float a, b, c, d;
|
||||
float rx, ry;
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_SYSTEM;
|
||||
while (i--) {
|
||||
// [ sx 0 0 ] [ cos(theta) -sin(theta) 0 ] [ 1 0 cx - ox ] [ A B rx ]
|
||||
// [ 0 sy 0 ] * [ sin(theta) cos(theta) 0 ] * [ 0 1 cy - oy ] = [ C D ry ]
|
||||
|
@ -205,6 +207,7 @@ static void _BgAffineSet(struct GBA* gba) {
|
|||
cpu->memory.store32(cpu, destination + 12, ry * 256, 0);
|
||||
destination += 16;
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
}
|
||||
|
||||
static void _ObjAffineSet(struct GBA* gba) {
|
||||
|
@ -216,6 +219,8 @@ static void _ObjAffineSet(struct GBA* gba) {
|
|||
int destination = cpu->gprs[1];
|
||||
int diff = cpu->gprs[3];
|
||||
float a, b, c, d;
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_SYSTEM;
|
||||
while (i--) {
|
||||
// [ sx 0 ] [ cos(theta) -sin(theta) ] [ A B ]
|
||||
// [ 0 sy ] * [ sin(theta) cos(theta) ] = [ C D ]
|
||||
|
@ -237,6 +242,7 @@ static void _ObjAffineSet(struct GBA* gba) {
|
|||
cpu->memory.store16(cpu, destination + diff * 3, d * 256, 0);
|
||||
destination += diff * 4;
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
}
|
||||
|
||||
static void _MidiKey2Freq(struct GBA* gba) {
|
||||
|
@ -244,7 +250,10 @@ static void _MidiKey2Freq(struct GBA* gba) {
|
|||
|
||||
int oldRegion = gba->memory.activeRegion;
|
||||
gba->memory.activeRegion = GBA_REGION_BIOS;
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_SYSTEM;
|
||||
uint32_t key = cpu->memory.load32(cpu, cpu->gprs[0] + 4, 0);
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
gba->memory.activeRegion = oldRegion;
|
||||
|
||||
cpu->gprs[0] = key / exp2f((180.f - cpu->gprs[1] - cpu->gprs[2] / 256.f) / 12.f);
|
||||
|
@ -624,6 +633,8 @@ static void _unLz77(struct GBA* gba, int width) {
|
|||
uint32_t source = cpu->gprs[0];
|
||||
uint32_t dest = cpu->gprs[1];
|
||||
int cycles = 20;
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_DECOMPRESS;
|
||||
int remaining = (cpu->memory.load32(cpu, source, &cycles) & 0xFFFFFF00) >> 8;
|
||||
// We assume the signature byte (0x10) is correct
|
||||
int blockheader = 0; // Some compilers warn if this isn't set, even though it's trivially provably always set
|
||||
|
@ -698,6 +709,7 @@ static void _unLz77(struct GBA* gba, int width) {
|
|||
blocksRemaining = 8;
|
||||
}
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
cpu->gprs[0] = source;
|
||||
cpu->gprs[1] = dest;
|
||||
cpu->gprs[3] = 0;
|
||||
|
@ -713,6 +725,8 @@ static void _unHuffman(struct GBA* gba) {
|
|||
struct ARMCore* cpu = gba->cpu;
|
||||
uint32_t source = cpu->gprs[0] & 0xFFFFFFFC;
|
||||
uint32_t dest = cpu->gprs[1];
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_DECOMPRESS;
|
||||
uint32_t header = cpu->memory.load32(cpu, source, 0);
|
||||
int remaining = header >> 8;
|
||||
unsigned bits = header & 0xF;
|
||||
|
@ -722,6 +736,7 @@ static void _unHuffman(struct GBA* gba) {
|
|||
}
|
||||
if (32 % bits || bits == 1) {
|
||||
mLOG(GBA_BIOS, STUB, "Unimplemented unaligned Huffman");
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
return;
|
||||
}
|
||||
// We assume the signature byte (0x20) is correct
|
||||
|
@ -773,6 +788,7 @@ static void _unHuffman(struct GBA* gba) {
|
|||
}
|
||||
}
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
cpu->gprs[0] = source;
|
||||
cpu->gprs[1] = dest;
|
||||
}
|
||||
|
@ -780,6 +796,8 @@ static void _unHuffman(struct GBA* gba) {
|
|||
static void _unRl(struct GBA* gba, int width) {
|
||||
struct ARMCore* cpu = gba->cpu;
|
||||
uint32_t source = cpu->gprs[0];
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_DECOMPRESS;
|
||||
int remaining = (cpu->memory.load32(cpu, source & 0xFFFFFFFC, 0) & 0xFFFFFF00) >> 8;
|
||||
int padding = (4 - remaining) & 0x3;
|
||||
// We assume the signature byte (0x30) is correct
|
||||
|
@ -846,6 +864,7 @@ static void _unRl(struct GBA* gba, int width) {
|
|||
++dest;
|
||||
}
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
cpu->gprs[0] = source;
|
||||
cpu->gprs[1] = dest;
|
||||
}
|
||||
|
@ -854,6 +873,8 @@ static void _unFilter(struct GBA* gba, int inwidth, int outwidth) {
|
|||
struct ARMCore* cpu = gba->cpu;
|
||||
uint32_t source = cpu->gprs[0] & 0xFFFFFFFC;
|
||||
uint32_t dest = cpu->gprs[1];
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_DECOMPRESS;
|
||||
uint32_t header = cpu->memory.load32(cpu, source, 0);
|
||||
int remaining = header >> 8;
|
||||
// We assume the signature nybble (0x8) is correct
|
||||
|
@ -888,6 +909,7 @@ static void _unFilter(struct GBA* gba, int inwidth, int outwidth) {
|
|||
old = new;
|
||||
source += inwidth;
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
cpu->gprs[0] = source;
|
||||
cpu->gprs[1] = dest;
|
||||
}
|
||||
|
@ -897,6 +919,8 @@ static void _unBitPack(struct GBA* gba) {
|
|||
uint32_t source = cpu->gprs[0];
|
||||
uint32_t dest = cpu->gprs[1];
|
||||
uint32_t info = cpu->gprs[2];
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
cpu->memory.accessSource = mACCESS_DECOMPRESS;
|
||||
unsigned sourceLen = cpu->memory.load16(cpu, info, 0);
|
||||
unsigned sourceWidth = cpu->memory.load8(cpu, info + 2, 0);
|
||||
unsigned destWidth = cpu->memory.load8(cpu, info + 3, 0);
|
||||
|
@ -908,6 +932,7 @@ static void _unBitPack(struct GBA* gba) {
|
|||
break;
|
||||
default:
|
||||
mLOG(GBA_BIOS, GAME_ERROR, "Bad BitUnPack source width: %u", sourceWidth);
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
return;
|
||||
}
|
||||
switch (destWidth) {
|
||||
|
@ -920,6 +945,7 @@ static void _unBitPack(struct GBA* gba) {
|
|||
break;
|
||||
default:
|
||||
mLOG(GBA_BIOS, GAME_ERROR, "Bad BitUnPack destination width: %u", destWidth);
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
return;
|
||||
}
|
||||
uint32_t bias = cpu->memory.load32(cpu, info + 4, 0);
|
||||
|
@ -949,6 +975,7 @@ static void _unBitPack(struct GBA* gba) {
|
|||
dest += 4;
|
||||
}
|
||||
}
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
cpu->gprs[0] = source;
|
||||
cpu->gprs[1] = dest;
|
||||
}
|
||||
|
|
|
@ -248,10 +248,12 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) {
|
|||
uint32_t dest = info->nextDest;
|
||||
uint32_t sourceRegion = source >> BASE_OFFSET;
|
||||
uint32_t destRegion = dest >> BASE_OFFSET;
|
||||
enum mMemoryAccessSource oldAccess = cpu->memory.accessSource;
|
||||
int32_t cycles = 2;
|
||||
|
||||
gba->cpuBlocked = true;
|
||||
gba->performingDMA = 1 | (number << 1);
|
||||
cpu->memory.accessSource = mACCESS_DMA;
|
||||
|
||||
if (info->count == info->nextCount) {
|
||||
if (width == 4) {
|
||||
|
@ -315,6 +317,7 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) {
|
|||
--info->nextCount;
|
||||
|
||||
gba->performingDMA = 0;
|
||||
cpu->memory.accessSource = oldAccess;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 4; ++i) {
|
||||
|
|
|
@ -82,6 +82,7 @@ void GBAMemoryInit(struct GBA* gba) {
|
|||
cpu->memory.activeSeqCycles16 = 0;
|
||||
cpu->memory.activeNonseqCycles32 = 0;
|
||||
cpu->memory.activeNonseqCycles16 = 0;
|
||||
cpu->memory.accessSource = mACCESS_UNKNOWN;
|
||||
gba->memory.biosPrefetch = 0;
|
||||
|
||||
gba->memory.agbPrintProtect = 0;
|
||||
|
@ -132,6 +133,7 @@ void GBAMemoryReset(struct GBA* gba) {
|
|||
|
||||
gba->memory.prefetch = false;
|
||||
gba->memory.lastPrefetchedPc = 0;
|
||||
gba->cpu->memory.accessSource = mACCESS_UNKNOWN;
|
||||
|
||||
if (!gba->memory.wram || !gba->memory.iwram) {
|
||||
GBAMemoryDeinit(gba);
|
||||
|
@ -299,22 +301,27 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
|
|||
memory->activeRegion = newRegion;
|
||||
switch (newRegion) {
|
||||
case GBA_REGION_BIOS:
|
||||
cpu->memory.accessSource = mACCESS_SYSTEM;
|
||||
cpu->memory.activeRegion = memory->bios;
|
||||
cpu->memory.activeMask = GBA_SIZE_BIOS - 1;
|
||||
break;
|
||||
case GBA_REGION_EWRAM:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
cpu->memory.activeRegion = memory->wram;
|
||||
cpu->memory.activeMask = GBA_SIZE_EWRAM - 1;
|
||||
break;
|
||||
case GBA_REGION_IWRAM:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
cpu->memory.activeRegion = memory->iwram;
|
||||
cpu->memory.activeMask = GBA_SIZE_IWRAM - 1;
|
||||
break;
|
||||
case GBA_REGION_PALETTE_RAM:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
cpu->memory.activeRegion = (uint32_t*) gba->video.palette;
|
||||
cpu->memory.activeMask = GBA_SIZE_PALETTE_RAM - 1;
|
||||
break;
|
||||
case GBA_REGION_VRAM:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
if (address & 0x10000) {
|
||||
cpu->memory.activeRegion = (uint32_t*) &gba->video.vram[0x8000];
|
||||
cpu->memory.activeMask = 0x00007FFF;
|
||||
|
@ -324,6 +331,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
|
|||
}
|
||||
break;
|
||||
case GBA_REGION_OAM:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
cpu->memory.activeRegion = (uint32_t*) gba->video.oam.raw;
|
||||
cpu->memory.activeMask = GBA_SIZE_OAM - 1;
|
||||
break;
|
||||
|
@ -333,6 +341,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
|
|||
case GBA_REGION_ROM1_EX:
|
||||
case GBA_REGION_ROM2:
|
||||
case GBA_REGION_ROM2_EX:
|
||||
cpu->memory.accessSource = mACCESS_PROGRAM;
|
||||
cpu->memory.activeRegion = memory->rom;
|
||||
cpu->memory.activeMask = memory->romMask;
|
||||
if ((address & (GBA_SIZE_ROM0 - 1)) < memory->romSize) {
|
||||
|
@ -345,6 +354,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) {
|
|||
}
|
||||
// Fall through
|
||||
default:
|
||||
cpu->memory.accessSource = mACCESS_UNKNOWN;
|
||||
memory->activeRegion = -1;
|
||||
cpu->memory.activeRegion = (uint32_t*) _deadbeef;
|
||||
cpu->memory.activeMask = 0;
|
||||
|
|
|
@ -372,11 +372,11 @@ uint8_t GBASavedataReadFlash(struct GBASavedata* savedata, uint16_t address) {
|
|||
if (savedata->command == FLASH_COMMAND_ID) {
|
||||
if (savedata->type == GBA_SAVEDATA_FLASH512) {
|
||||
if (address < 2) {
|
||||
return FLASH_MFG_PANASONIC >> (address * 8);
|
||||
return FLASH_PANASONIC_MN63F805MNP >> (address * 8);
|
||||
}
|
||||
} else if (savedata->type == GBA_SAVEDATA_FLASH1M) {
|
||||
if (address < 2) {
|
||||
return FLASH_MFG_SANYO >> (address * 8);
|
||||
return FLASH_SANYO_LE26FV10N1TS >> (address * 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ class GBA(Core):
|
|||
|
||||
|
||||
class GBAMemory(Memory):
|
||||
def __init__(self, core, romSize=lib.SIZE_CART0):
|
||||
def __init__(self, core, romSize=lib.GBA_SIZE_ROM0):
|
||||
super(GBAMemory, self).__init__(core, 0x100000000)
|
||||
|
||||
self.bios = Memory(core, lib.GBA_SIZE_BIOS, lib.GBA_BASE_BIOS)
|
||||
|
@ -64,11 +64,10 @@ class GBAMemory(Memory):
|
|||
self.palette = Memory(core, lib.GBA_SIZE_PALETTE_RAM, lib.GBA_BASE_PALETTE_RAM)
|
||||
self.vram = Memory(core, lib.GBA_SIZE_VRAM, lib.GBA_BASE_VRAM)
|
||||
self.oam = Memory(core, lib.GBA_SIZE_OAM, lib.GBA_BASE_OAM)
|
||||
self.cart0 = Memory(core, romSize, lib.BASE_CART0)
|
||||
self.cart1 = Memory(core, romSize, lib.BASE_CART1)
|
||||
self.cart2 = Memory(core, romSize, lib.BASE_CART2)
|
||||
self.cart = self.cart0
|
||||
self.rom = self.cart0
|
||||
self.rom0 = Memory(core, romSize, lib.GBA_BASE_ROM0)
|
||||
self.rom1 = Memory(core, romSize, lib.GBA_BASE_ROM1)
|
||||
self.rom2 = Memory(core, romSize, lib.GBA_BASE_ROM2)
|
||||
self.rom = self.rom0
|
||||
self.sram = Memory(core, lib.GBA_SIZE_SRAM, lib.GBA_BASE_SRAM)
|
||||
|
||||
|
||||
|
|
|
@ -261,6 +261,8 @@ if(ENABLE_DEBUGGERS)
|
|||
DebuggerController.cpp
|
||||
DebuggerConsole.cpp
|
||||
DebuggerConsoleController.cpp
|
||||
MemoryAccessLogController.cpp
|
||||
MemoryAccessLogModel.cpp
|
||||
MemoryAccessLogView.cpp)
|
||||
endif()
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "ConfigController.h"
|
||||
#include "InputController.h"
|
||||
#include "LogController.h"
|
||||
#include "MemoryAccessLogController.h"
|
||||
#include "MultiplayerController.h"
|
||||
#include "Override.h"
|
||||
|
||||
|
@ -459,6 +460,15 @@ void CoreController::setLogger(LogController* logger) {
|
|||
connect(this, &CoreController::logPosted, m_log, &LogController::postLog);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
std::weak_ptr<MemoryAccessLogController> CoreController::memoryAccessLogController() {
|
||||
if (!m_malController) {
|
||||
m_malController = std::make_shared<MemoryAccessLogController>(this);
|
||||
}
|
||||
return m_malController;
|
||||
}
|
||||
#endif
|
||||
|
||||
void CoreController::start() {
|
||||
QSize size(screenDimensions());
|
||||
m_activeBuffer.resize(size.width() * size.height() * sizeof(mColor));
|
||||
|
@ -479,6 +489,10 @@ void CoreController::start() {
|
|||
void CoreController::stop() {
|
||||
setSync(false);
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
if (m_malController) {
|
||||
m_malController->stop();
|
||||
}
|
||||
|
||||
detachDebugger();
|
||||
#endif
|
||||
setPaused(false);
|
||||
|
@ -1253,6 +1267,9 @@ void CoreController::finishFrame() {
|
|||
}
|
||||
|
||||
void CoreController::updatePlayerSave() {
|
||||
if (m_saveBlocked) {
|
||||
return;
|
||||
}
|
||||
int savePlayerId = m_multiplayer->saveId(this);
|
||||
|
||||
QString saveSuffix;
|
||||
|
|
|
@ -40,6 +40,7 @@ namespace QGBA {
|
|||
class ConfigController;
|
||||
class InputController;
|
||||
class LogController;
|
||||
class MemoryAccessLogController;
|
||||
class MultiplayerController;
|
||||
class Override;
|
||||
|
||||
|
@ -113,6 +114,8 @@ public:
|
|||
void detachDebugger();
|
||||
void attachDebuggerModule(mDebuggerModule*, bool interrupt = true);
|
||||
void detachDebuggerModule(mDebuggerModule*);
|
||||
|
||||
std::weak_ptr<MemoryAccessLogController> memoryAccessLogController();
|
||||
#endif
|
||||
|
||||
void setMultiplayerController(MultiplayerController*);
|
||||
|
@ -173,6 +176,7 @@ public slots:
|
|||
void scanCards(const QStringList&);
|
||||
void replaceGame(const QString&);
|
||||
void yankPak();
|
||||
void blockSave() { m_saveBlocked = true; }
|
||||
|
||||
void addKey(int key);
|
||||
void clearKey(int key);
|
||||
|
@ -260,6 +264,7 @@ private:
|
|||
|
||||
bool m_patched = false;
|
||||
bool m_preload = false;
|
||||
bool m_saveBlocked = false;
|
||||
|
||||
uint32_t m_crc32;
|
||||
QString m_internalTitle;
|
||||
|
@ -326,6 +331,10 @@ private:
|
|||
GBASIODolphin m_dolphin;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
std::shared_ptr<MemoryAccessLogController> m_malController;
|
||||
#endif
|
||||
|
||||
mVideoLogContext* m_vl = nullptr;
|
||||
VFile* m_vlVf = nullptr;
|
||||
|
||||
|
|
|
@ -169,6 +169,7 @@ CoreController* CoreManager::loadBIOS(int platform, const QString& path) {
|
|||
mDirectorySetAttachBase(&core->dirs, VDirOpen(bytes.constData()));
|
||||
|
||||
CoreController* cc = new CoreController(core);
|
||||
cc->blockSave();
|
||||
if (m_multiplayer) {
|
||||
cc->setMultiplayerController(m_multiplayer);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,189 @@
|
|||
/* Copyright (c) 2013-2025 Jeffrey Pfau
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#include "MemoryAccessLogController.h"
|
||||
|
||||
#include "GBAApp.h"
|
||||
#include "LogController.h"
|
||||
#include "utils.h"
|
||||
#include "VFileDevice.h"
|
||||
|
||||
#include <mgba-util/math.h>
|
||||
|
||||
using namespace QGBA;
|
||||
|
||||
int MemoryAccessLogController::Flags::count() const {
|
||||
return popcount32(flags) + popcount32(flagsEx);
|
||||
}
|
||||
|
||||
MemoryAccessLogController::MemoryAccessLogController(CoreController* controller, QObject* parent)
|
||||
: QObject(parent)
|
||||
, m_controller(controller)
|
||||
{
|
||||
mCore* core = m_controller->thread()->core;
|
||||
const mCoreMemoryBlock* info;
|
||||
size_t nBlocks = core->listMemoryBlocks(core, &info);
|
||||
|
||||
for (size_t i = 0; i < nBlocks; ++i) {
|
||||
if (!(info[i].flags & mCORE_MEMORY_MAPPED)) {
|
||||
continue;
|
||||
}
|
||||
m_regions.append({
|
||||
QString::fromUtf8(info[i].longName),
|
||||
QString::fromUtf8(info[i].internalName)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
MemoryAccessLogController::~MemoryAccessLogController() {
|
||||
stop();
|
||||
}
|
||||
|
||||
bool MemoryAccessLogController::canExport() const {
|
||||
return m_regionMapping.contains("cart0");
|
||||
}
|
||||
|
||||
MemoryAccessLogController::Flags MemoryAccessLogController::flagsForAddress(uint32_t addresss, int segment) {
|
||||
uint32_t offset = cacheRegion(addresss, segment);
|
||||
if (!m_cachedRegion) {
|
||||
return { 0, 0 };
|
||||
}
|
||||
return {
|
||||
m_cachedRegion->blockEx ? m_cachedRegion->blockEx[offset] : mDebuggerAccessLogFlagsEx{},
|
||||
m_cachedRegion->block ? m_cachedRegion->block[offset] : mDebuggerAccessLogFlags{},
|
||||
};
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::updateRegion(const QString& internalName, bool checked) {
|
||||
if (checked) {
|
||||
m_watchedRegions += internalName;
|
||||
} else {
|
||||
m_watchedRegions -= internalName;
|
||||
}
|
||||
if (!m_active) {
|
||||
return;
|
||||
}
|
||||
if (checked && !m_regionMapping.contains(internalName)) {
|
||||
m_regionMapping[internalName] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, internalName.toUtf8().constData(), activeFlags());
|
||||
}
|
||||
emit regionMappingChanged(internalName, checked);
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::setFile(const QString& path) {
|
||||
m_path = path;
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::start(bool loadExisting, bool logExtra) {
|
||||
if (!m_loaded) {
|
||||
load(loadExisting);
|
||||
}
|
||||
if (!m_loaded) {
|
||||
return;
|
||||
}
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
mDebuggerAccessLoggerStart(&m_logger);
|
||||
m_logExtra = logExtra;
|
||||
|
||||
m_active = true;
|
||||
for (const auto& region : m_watchedRegions) {
|
||||
m_regionMapping[region] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, region.toUtf8().constData(), activeFlags());
|
||||
}
|
||||
emit loggingChanged(true);
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::stop() {
|
||||
if (!m_active) {
|
||||
return;
|
||||
}
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
mDebuggerAccessLoggerStop(&m_logger);
|
||||
emit loggingChanged(false);
|
||||
interrupter.resume();
|
||||
m_active = false;
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::load(bool loadExisting) {
|
||||
if (m_loaded) {
|
||||
return;
|
||||
}
|
||||
int flags = O_CREAT | O_RDWR;
|
||||
if (!loadExisting) {
|
||||
flags |= O_TRUNC;
|
||||
}
|
||||
VFile* vf = VFileDevice::open(m_path, flags);
|
||||
if (!vf) {
|
||||
LOG(QT, ERROR) << tr("Failed to open memory log file");
|
||||
return;
|
||||
}
|
||||
|
||||
mDebuggerAccessLoggerInit(&m_logger);
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
m_controller->attachDebuggerModule(&m_logger.d);
|
||||
if (!mDebuggerAccessLoggerOpen(&m_logger, vf, flags)) {
|
||||
mDebuggerAccessLoggerDeinit(&m_logger);
|
||||
LOG(QT, ERROR) << tr("Failed to open memory log file");
|
||||
return;
|
||||
}
|
||||
emit loaded(true);
|
||||
m_loaded = true;
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::unload() {
|
||||
if (m_active) {
|
||||
stop();
|
||||
}
|
||||
if (m_active) {
|
||||
return;
|
||||
}
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
m_controller->detachDebuggerModule(&m_logger.d);
|
||||
mDebuggerAccessLoggerDeinit(&m_logger);
|
||||
emit loaded(false);
|
||||
m_loaded = false;
|
||||
}
|
||||
|
||||
mDebuggerAccessLogRegionFlags MemoryAccessLogController::activeFlags() const {
|
||||
mDebuggerAccessLogRegionFlags loggerFlags = 0;
|
||||
if (m_logExtra) {
|
||||
loggerFlags = mDebuggerAccessLogRegionFlagsFillHasExBlock(loggerFlags);
|
||||
}
|
||||
return loggerFlags;
|
||||
}
|
||||
|
||||
void MemoryAccessLogController::exportFile(const QString& filename) {
|
||||
VFile* vf = VFileDevice::open(filename, O_CREAT | O_TRUNC | O_WRONLY);
|
||||
if (!vf) {
|
||||
// log error
|
||||
return;
|
||||
}
|
||||
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
mDebuggerAccessLoggerCreateShadowFile(&m_logger, m_regionMapping[QString("cart0")], vf, 0);
|
||||
vf->close(vf);
|
||||
}
|
||||
|
||||
uint32_t MemoryAccessLogController::cacheRegion(uint32_t address, int segment) {
|
||||
if (m_cachedRegion && (address < m_cachedRegion->start || address >= m_cachedRegion->end)) {
|
||||
m_cachedRegion = nullptr;
|
||||
}
|
||||
if (!m_cachedRegion) {
|
||||
m_cachedRegion = mDebuggerAccessLoggerGetRegion(&m_logger, address, segment, nullptr);
|
||||
}
|
||||
if (!m_cachedRegion) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t offset = address - m_cachedRegion->start;
|
||||
if (segment > 0) {
|
||||
uint32_t segmentSize = m_cachedRegion->end - m_cachedRegion->segmentStart;
|
||||
offset %= segmentSize;
|
||||
offset += segmentSize * segment;
|
||||
}
|
||||
if (offset >= m_cachedRegion->size) {
|
||||
m_cachedRegion = nullptr;
|
||||
return cacheRegion(address, segment);
|
||||
}
|
||||
return offset;
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* Copyright (c) 2013-2025 Jeffrey Pfau
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#pragma once
|
||||
|
||||
#include <QSet>
|
||||
#include <QVector>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "CoreController.h"
|
||||
|
||||
#include <mgba/debugger/debugger.h>
|
||||
#include <mgba/internal/debugger/access-logger.h>
|
||||
|
||||
namespace QGBA {
|
||||
|
||||
class MemoryAccessLogController : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
struct Region {
|
||||
QString longName;
|
||||
QString internalName;
|
||||
};
|
||||
|
||||
struct Flags {
|
||||
mDebuggerAccessLogFlagsEx flagsEx;
|
||||
mDebuggerAccessLogFlags flags;
|
||||
|
||||
int count() const;
|
||||
bool operator==(const Flags& other) const { return flags == other.flags && flagsEx == other.flagsEx; }
|
||||
bool operator!=(const Flags& other) const { return flags != other.flags || flagsEx != other.flagsEx; }
|
||||
operator bool() const { return flags || flagsEx; }
|
||||
};
|
||||
|
||||
MemoryAccessLogController(CoreController* controller, QObject* parent = nullptr);
|
||||
~MemoryAccessLogController();
|
||||
|
||||
QVector<Region> listRegions() const { return m_regions; }
|
||||
QSet<QString> watchedRegions() const { return m_watchedRegions; }
|
||||
|
||||
bool canExport() const;
|
||||
mPlatform platform() const { return m_controller->platform(); }
|
||||
|
||||
Flags flagsForAddress(uint32_t address, int segment = -1);
|
||||
|
||||
QString file() const { return m_path; }
|
||||
bool active() const { return m_active; }
|
||||
bool isLoaded() const { return m_loaded; }
|
||||
|
||||
public slots:
|
||||
void updateRegion(const QString& internalName, bool enable);
|
||||
void setFile(const QString& path);
|
||||
|
||||
void start(bool loadExisting, bool logExtra);
|
||||
void stop();
|
||||
|
||||
void load(bool loadExisting);
|
||||
void unload();
|
||||
|
||||
void exportFile(const QString& filename);
|
||||
|
||||
signals:
|
||||
void loaded(bool loaded);
|
||||
void loggingChanged(bool active);
|
||||
void regionMappingChanged(const QString& internalName, bool active);
|
||||
|
||||
private:
|
||||
bool m_logExtra = false;
|
||||
QString m_path;
|
||||
CoreController* m_controller;
|
||||
QSet<QString> m_watchedRegions;
|
||||
QHash<QString, int> m_regionMapping;
|
||||
QVector<Region> m_regions;
|
||||
struct mDebuggerAccessLogger m_logger{};
|
||||
bool m_loaded = false;
|
||||
bool m_active = false;
|
||||
mDebuggerAccessLogRegion* m_cachedRegion = nullptr;
|
||||
|
||||
mDebuggerAccessLogRegionFlags activeFlags() const;
|
||||
uint32_t cacheRegion(uint32_t address, int segment);
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1,301 @@
|
|||
/* Copyright (c) 2013-2025 Jeffrey Pfau
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#include "MemoryAccessLogModel.h"
|
||||
|
||||
#include <limits>
|
||||
|
||||
using namespace QGBA;
|
||||
|
||||
MemoryAccessLogModel::MemoryAccessLogModel(std::weak_ptr<MemoryAccessLogController> controller, mPlatform platform)
|
||||
: m_controller(controller)
|
||||
, m_platform(platform)
|
||||
{
|
||||
}
|
||||
|
||||
QVariant MemoryAccessLogModel::data(const QModelIndex& index, int role) const {
|
||||
if (role != Qt::DisplayRole) {
|
||||
return {};
|
||||
}
|
||||
if (index.column() != 0) {
|
||||
return {};
|
||||
}
|
||||
int blockIndex = -1;
|
||||
int flagIndex = -1;
|
||||
QModelIndex parent = index.parent();
|
||||
if (!parent.isValid()) {
|
||||
blockIndex = index.row();
|
||||
} else {
|
||||
blockIndex = parent.row();
|
||||
flagIndex = index.row();
|
||||
}
|
||||
|
||||
if (blockIndex < 0 || blockIndex >= m_cachedBlocks.count()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const Block& block = m_cachedBlocks[blockIndex];
|
||||
|
||||
if (flagIndex < 0) {
|
||||
if (m_platform == mPLATFORM_GB) {
|
||||
if (m_segment < 0) {
|
||||
return QString("$%1 – $%2")
|
||||
.arg(QString("%0").arg(block.region.first, 4, 16, QChar('0')).toUpper())
|
||||
.arg(QString("%0").arg(block.region.second, 4, 16, QChar('0')).toUpper());
|
||||
} else {
|
||||
return QString("$%1:%3 – $%2:%4")
|
||||
.arg(QString("%0").arg(m_segment, 2, 16, QChar('0')).toUpper())
|
||||
.arg(QString("%0").arg(m_segment, 2, 16, QChar('0')).toUpper())
|
||||
.arg(QString("%0").arg(block.region.first, 4, 16, QChar('0')).toUpper())
|
||||
.arg(QString("%0").arg(block.region.second, 4, 16, QChar('0')).toUpper());
|
||||
}
|
||||
} else {
|
||||
return QString("0x%1 – 0x%2")
|
||||
.arg(QString("%0").arg(block.region.first, 8, 16, QChar('0')).toUpper())
|
||||
.arg(QString("%0").arg(block.region.second, 8, 16, QChar('0')).toUpper());
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
if (!(block.flags.flags & (1 << i))) {
|
||||
continue;
|
||||
}
|
||||
if (flagIndex == 0) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
return tr("Data read");
|
||||
case 1:
|
||||
return tr("Data written");
|
||||
case 2:
|
||||
return tr("Code executed");
|
||||
case 3:
|
||||
return tr("Code aborted");
|
||||
case 4:
|
||||
return tr("8-bit access");
|
||||
case 5:
|
||||
return tr("16-bit access");
|
||||
case 6:
|
||||
return tr("32-bit access");
|
||||
case 7:
|
||||
return tr("64-bit access");
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
--flagIndex;
|
||||
}
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
if (!(block.flags.flagsEx & (1 << i))) {
|
||||
continue;
|
||||
}
|
||||
if (flagIndex == 0) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
return tr("Accessed by instruction");
|
||||
case 1:
|
||||
return tr("Accessed by DMA");
|
||||
case 2:
|
||||
return tr("Accessed by BIOS");
|
||||
case 3:
|
||||
return tr("Compressed data");
|
||||
case 4:
|
||||
return tr("Accessed by memory copy");
|
||||
case 5:
|
||||
return tr("(Unknown extra bit 5)");
|
||||
case 6:
|
||||
return tr("(Unknown extra bit 6)");
|
||||
case 7:
|
||||
return tr("(Unknown extra bit 7)");
|
||||
case 8:
|
||||
return tr("Invalid instruction");
|
||||
case 9:
|
||||
return tr("Invalid read");
|
||||
case 10:
|
||||
return tr("Invalid write");
|
||||
case 11:
|
||||
return tr("Invalid executable address");
|
||||
case 12:
|
||||
return tr("(Private bit 0)");
|
||||
case 13:
|
||||
return tr("(Private bit 1)");
|
||||
case 14:
|
||||
switch (m_platform) {
|
||||
case mPLATFORM_GBA:
|
||||
return tr("ARM code");
|
||||
case mPLATFORM_GB:
|
||||
return tr("Instruction opcode");
|
||||
default:
|
||||
return tr("(Private bit 2)");
|
||||
}
|
||||
case 15:
|
||||
switch (m_platform) {
|
||||
case mPLATFORM_GBA:
|
||||
return tr("Thumb code");
|
||||
case mPLATFORM_GB:
|
||||
return tr("Instruction operand");
|
||||
default:
|
||||
return tr("(Private bit 3)");
|
||||
}
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
--flagIndex;
|
||||
}
|
||||
return tr("(Unknown)");
|
||||
}
|
||||
|
||||
QModelIndex MemoryAccessLogModel::index(int row, int column, const QModelIndex& parent) const {
|
||||
if (column != 0) {
|
||||
return {};
|
||||
}
|
||||
if (parent.isValid()) {
|
||||
return createIndex(row, 0, parent.row());
|
||||
}
|
||||
return createIndex(row, 0, std::numeric_limits<quintptr>::max());
|
||||
}
|
||||
|
||||
QModelIndex MemoryAccessLogModel::parent(const QModelIndex& index) const {
|
||||
if (!index.isValid()) {
|
||||
return {};
|
||||
}
|
||||
quintptr row = index.internalId();
|
||||
if (row >= std::numeric_limits<uint32_t>::max()) {
|
||||
return {};
|
||||
}
|
||||
return createIndex(row, 0, std::numeric_limits<quintptr>::max());
|
||||
}
|
||||
|
||||
int MemoryAccessLogModel::rowCount(const QModelIndex& parent) const {
|
||||
int blockIndex = -1;
|
||||
if (!parent.isValid()) {
|
||||
return m_cachedBlocks.count();
|
||||
} else if (parent.column() != 0) {
|
||||
return 0;
|
||||
} else if (parent.parent().isValid()) {
|
||||
return 0;
|
||||
} else {
|
||||
blockIndex = parent.row();
|
||||
}
|
||||
|
||||
if (blockIndex < 0 || blockIndex >= m_cachedBlocks.count()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const Block& block = m_cachedBlocks[blockIndex];
|
||||
return block.flags.count();
|
||||
}
|
||||
|
||||
void MemoryAccessLogModel::updateSelection(uint32_t start, uint32_t end) {
|
||||
std::shared_ptr<MemoryAccessLogController> controller = m_controller.lock();
|
||||
if (!controller) {
|
||||
return;
|
||||
}
|
||||
QVector<Block> newBlocks;
|
||||
uint32_t lastStart = start;
|
||||
auto lastFlags = controller->flagsForAddress(m_base + start, m_segment);
|
||||
|
||||
for (uint32_t address = start; address < end; ++address) {
|
||||
auto flags = controller->flagsForAddress(m_base + address, m_segment);
|
||||
if (flags == lastFlags) {
|
||||
continue;
|
||||
}
|
||||
if (lastFlags) {
|
||||
newBlocks.append({ lastFlags, qMakePair(lastStart, address) });
|
||||
}
|
||||
lastFlags = flags;
|
||||
lastStart = address;
|
||||
}
|
||||
if (lastFlags) {
|
||||
newBlocks.append({ lastFlags, qMakePair(lastStart, end) });
|
||||
}
|
||||
|
||||
if (m_cachedBlocks.count() == 0 || newBlocks.count() == 0) {
|
||||
beginResetModel();
|
||||
m_cachedBlocks = newBlocks;
|
||||
endResetModel();
|
||||
return;
|
||||
}
|
||||
|
||||
QPair<int, int> changed{ -1, -1 };
|
||||
for (int i = 0; i < m_cachedBlocks.count() && i < newBlocks.count(); ++i) {
|
||||
const Block& oldBlock = m_cachedBlocks.at(i);
|
||||
const Block& newBlock = newBlocks.at(i);
|
||||
|
||||
if (oldBlock != newBlock) {
|
||||
changed = qMakePair(i, m_cachedBlocks.count());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_cachedBlocks.count() > newBlocks.count()) {
|
||||
beginRemoveRows({}, newBlocks.count(), m_cachedBlocks.count());
|
||||
m_cachedBlocks.resize(newBlocks.count());
|
||||
endRemoveRows();
|
||||
changed.second = newBlocks.count();
|
||||
}
|
||||
|
||||
if (m_cachedBlocks.count() < newBlocks.count()) {
|
||||
beginInsertRows({}, m_cachedBlocks.count(), newBlocks.count());
|
||||
if (changed.first < 0) {
|
||||
// Only new rows
|
||||
m_cachedBlocks = newBlocks;
|
||||
endInsertRows();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed.first < 0) {
|
||||
// No changed rows, though some might have been removed
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_cachedBlocks.count() && i < newBlocks.count(); ++i) {
|
||||
const Block& oldBlock = m_cachedBlocks.at(i);
|
||||
const Block& newBlock = newBlocks.at(i);
|
||||
if (oldBlock.flags != newBlock.flags) {
|
||||
int oldFlags = oldBlock.flags.count();
|
||||
int newFlags = newBlock.flags.count();
|
||||
if (oldFlags > newFlags) {
|
||||
beginRemoveRows(createIndex(i, 0, std::numeric_limits<quintptr>::max()), newFlags, oldFlags);
|
||||
} else if (oldFlags < newFlags) {
|
||||
beginInsertRows(createIndex(i, 0, std::numeric_limits<quintptr>::max()), oldFlags, newFlags);
|
||||
}
|
||||
m_cachedBlocks[i] = newBlock;
|
||||
emit dataChanged(createIndex(0, 0, i), createIndex(std::min(oldFlags, newFlags), 0, i));
|
||||
if (oldFlags > newFlags) {
|
||||
endRemoveRows();
|
||||
} else if (oldFlags < newFlags) {
|
||||
endInsertRows();
|
||||
}
|
||||
}
|
||||
}
|
||||
emit dataChanged(createIndex(changed.first, 0, std::numeric_limits<quintptr>::max()),
|
||||
createIndex(changed.second, 0, std::numeric_limits<quintptr>::max()));
|
||||
|
||||
if (m_cachedBlocks.count() < newBlocks.count()) {
|
||||
m_cachedBlocks = newBlocks;
|
||||
endInsertRows();
|
||||
}
|
||||
}
|
||||
|
||||
void MemoryAccessLogModel::setSegment(int segment) {
|
||||
if (m_segment == segment) {
|
||||
return;
|
||||
}
|
||||
beginResetModel();
|
||||
m_segment = segment;
|
||||
m_cachedBlocks.clear();
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void MemoryAccessLogModel::setRegion(uint32_t base, uint32_t, bool useSegments) {
|
||||
if (m_base == base) {
|
||||
return;
|
||||
}
|
||||
beginResetModel();
|
||||
m_segment = useSegments ? 0 : -1;
|
||||
m_cachedBlocks.clear();
|
||||
endResetModel();
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/* Copyright (c) 2013-2025 Jeffrey Pfau
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#pragma once
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QVector>
|
||||
|
||||
#include "MemoryAccessLogController.h"
|
||||
|
||||
struct mCheatDevice;
|
||||
struct mCheatSet;
|
||||
|
||||
namespace QGBA {
|
||||
|
||||
class MemoryAccessLogModel : public QAbstractItemModel {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MemoryAccessLogModel(std::weak_ptr<MemoryAccessLogController> controller, mPlatform platform);
|
||||
|
||||
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
||||
|
||||
virtual QModelIndex index(int row, int column, const QModelIndex& parent) const override;
|
||||
virtual QModelIndex parent(const QModelIndex& index) const override;
|
||||
|
||||
virtual int columnCount(const QModelIndex& = QModelIndex()) const override { return 1; }
|
||||
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||
|
||||
public slots:
|
||||
void updateSelection(uint32_t start, uint32_t end);
|
||||
void setSegment(int segment);
|
||||
void setRegion(uint32_t base, uint32_t segmentSize, bool useSegments);
|
||||
|
||||
private:
|
||||
struct Block {
|
||||
MemoryAccessLogController::Flags flags;
|
||||
QPair<uint32_t, uint32_t> region;
|
||||
|
||||
bool operator==(const Block& other) const { return flags == other.flags && region == other.region; }
|
||||
bool operator!=(const Block& other) const { return flags != other.flags || region != other.region; }
|
||||
};
|
||||
|
||||
int flagCount(int index) const;
|
||||
|
||||
std::weak_ptr<MemoryAccessLogController> m_controller;
|
||||
mPlatform m_platform;
|
||||
uint32_t m_base = 0;
|
||||
int m_segment = -1;
|
||||
QVector<Block> m_cachedBlocks;
|
||||
};
|
||||
|
||||
}
|
|
@ -9,107 +9,87 @@
|
|||
|
||||
#include "GBAApp.h"
|
||||
#include "LogController.h"
|
||||
#include "MemoryAccessLogController.h"
|
||||
#include "utils.h"
|
||||
#include "VFileDevice.h"
|
||||
|
||||
using namespace QGBA;
|
||||
|
||||
MemoryAccessLogView::MemoryAccessLogView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||
MemoryAccessLogView::MemoryAccessLogView(std::weak_ptr<MemoryAccessLogController> controller, QWidget* parent)
|
||||
: QWidget(parent)
|
||||
, m_controller(std::move(controller))
|
||||
, m_controller(controller)
|
||||
{
|
||||
m_ui.setupUi(this);
|
||||
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
connect(m_ui.browse, &QAbstractButton::clicked, this, &MemoryAccessLogView::selectFile);
|
||||
connect(m_ui.exportButton, &QAbstractButton::clicked, this, &MemoryAccessLogView::exportFile);
|
||||
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.start, &QWidget::setDisabled);
|
||||
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.stop, &QWidget::setEnabled);
|
||||
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.filename, &QWidget::setDisabled);
|
||||
connect(this, &MemoryAccessLogView::loggingChanged, m_ui.browse, &QWidget::setDisabled);
|
||||
connect(controllerPtr.get(), &MemoryAccessLogController::regionMappingChanged, this, &MemoryAccessLogView::updateRegion);
|
||||
connect(controllerPtr.get(), &MemoryAccessLogController::loggingChanged, this, &MemoryAccessLogView::handleStartStop);
|
||||
connect(controllerPtr.get(), &MemoryAccessLogController::loaded, this, &MemoryAccessLogView::handleLoadUnload);
|
||||
|
||||
mCore* core = m_controller->thread()->core;
|
||||
const mCoreMemoryBlock* info;
|
||||
size_t nBlocks = core->listMemoryBlocks(core, &info);
|
||||
bool active = controllerPtr->active();
|
||||
bool loaded = controllerPtr->isLoaded();
|
||||
auto watchedRegions = controllerPtr->watchedRegions();
|
||||
|
||||
QVBoxLayout* regionBox = static_cast<QVBoxLayout*>(m_ui.regionBox->layout());
|
||||
for (size_t i = 0; i < nBlocks; ++i) {
|
||||
if (!(info[i].flags & mCORE_MEMORY_MAPPED)) {
|
||||
continue;
|
||||
}
|
||||
QCheckBox* region = new QCheckBox(QString::fromUtf8(info[i].longName));
|
||||
for (const auto& info : controllerPtr->listRegions()) {
|
||||
QCheckBox* region = new QCheckBox(info.longName);
|
||||
regionBox->addWidget(region);
|
||||
|
||||
QString name(QString::fromUtf8(info[i].internalName));
|
||||
QString name(info.internalName);
|
||||
m_regionBoxes[name] = region;
|
||||
connect(region, &QAbstractButton::toggled, this, [this, name](bool checked) {
|
||||
updateRegion(name, checked);
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
controllerPtr->updateRegion(name, checked);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
MemoryAccessLogView::~MemoryAccessLogView() {
|
||||
stop();
|
||||
handleLoadUnload(loaded);
|
||||
handleStartStop(active);
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::updateRegion(const QString& internalName, bool checked) {
|
||||
if (checked) {
|
||||
m_watchedRegions += internalName;
|
||||
} else {
|
||||
m_watchedRegions -= internalName;
|
||||
m_regionBoxes[internalName]->setEnabled(false);
|
||||
}
|
||||
if (!m_active) {
|
||||
return;
|
||||
}
|
||||
m_regionBoxes[internalName]->setEnabled(false);
|
||||
m_regionMapping[internalName] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, internalName.toUtf8().constData(), activeFlags());
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::start() {
|
||||
int flags = O_CREAT | O_RDWR;
|
||||
if (!m_ui.loadExisting->isChecked()) {
|
||||
flags |= O_TRUNC;
|
||||
}
|
||||
VFile* vf = VFileDevice::open(m_ui.filename->text(), flags);
|
||||
if (!vf) {
|
||||
// log error
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
mDebuggerAccessLoggerInit(&m_logger);
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
m_controller->attachDebuggerModule(&m_logger.d);
|
||||
if (!mDebuggerAccessLoggerOpen(&m_logger, vf, flags)) {
|
||||
mDebuggerAccessLoggerDeinit(&m_logger);
|
||||
LOG(QT, ERROR) << tr("Failed to open memory log file");
|
||||
return;
|
||||
}
|
||||
|
||||
m_active = true;
|
||||
emit loggingChanged(true);
|
||||
for (const auto& region : m_watchedRegions) {
|
||||
m_regionBoxes[region]->setEnabled(false);
|
||||
m_regionMapping[region] = mDebuggerAccessLoggerWatchMemoryBlockName(&m_logger, region.toUtf8().constData(), activeFlags());
|
||||
}
|
||||
interrupter.resume();
|
||||
|
||||
if (m_watchedRegions.contains(QString("cart0"))) {
|
||||
m_ui.exportButton->setEnabled(true);
|
||||
}
|
||||
controllerPtr->setFile(m_ui.filename->text());
|
||||
controllerPtr->start(m_ui.loadExisting->isChecked(), m_ui.logExtra->isChecked());
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::stop() {
|
||||
if (!m_active) {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
m_controller->detachDebuggerModule(&m_logger.d);
|
||||
mDebuggerAccessLoggerDeinit(&m_logger);
|
||||
emit loggingChanged(false);
|
||||
interrupter.resume();
|
||||
controllerPtr->stop();
|
||||
}
|
||||
|
||||
for (const auto& region : m_watchedRegions) {
|
||||
m_regionBoxes[region]->setEnabled(true);
|
||||
void MemoryAccessLogView::load() {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
m_ui.exportButton->setEnabled(false);
|
||||
controllerPtr->setFile(m_ui.filename->text());
|
||||
controllerPtr->load(m_ui.loadExisting->isChecked());
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::unload() {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
controllerPtr->unload();
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::selectFile() {
|
||||
|
@ -119,30 +99,55 @@ void MemoryAccessLogView::selectFile() {
|
|||
}
|
||||
}
|
||||
|
||||
mDebuggerAccessLogRegionFlags MemoryAccessLogView::activeFlags() const {
|
||||
mDebuggerAccessLogRegionFlags loggerFlags = 0;
|
||||
if (m_ui.logExtra->isChecked()) {
|
||||
loggerFlags = mDebuggerAccessLogRegionFlagsFillHasExBlock(loggerFlags);
|
||||
}
|
||||
return loggerFlags;
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::exportFile() {
|
||||
if (!m_regionMapping.contains("cart0")) {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
if (!controllerPtr->canExport()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QString filename = GBAApp::app()->getSaveFileName(this, tr("Select access log file"), romFilters(false, m_controller->platform(), true));
|
||||
QString filename = GBAApp::app()->getSaveFileName(this, tr("Select access log file"), romFilters(false, controllerPtr->platform(), true));
|
||||
if (filename.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
VFile* vf = VFileDevice::open(filename, O_CREAT | O_TRUNC | O_WRONLY);
|
||||
if (!vf) {
|
||||
// log error
|
||||
controllerPtr->exportFile(filename);
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::handleStartStop(bool start) {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
m_ui.filename->setText(controllerPtr->file());
|
||||
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
mDebuggerAccessLoggerCreateShadowFile(&m_logger, m_regionMapping[QString("cart0")], vf, 0);
|
||||
vf->close(vf);
|
||||
auto watchedRegions = controllerPtr->watchedRegions();
|
||||
for (const auto& region : watchedRegions) {
|
||||
m_regionBoxes[region]->setDisabled(start);
|
||||
m_regionBoxes[region]->setChecked(true);
|
||||
}
|
||||
|
||||
m_ui.start->setDisabled(start);
|
||||
m_ui.stop->setEnabled(start);
|
||||
m_ui.unload->setDisabled(start || !controllerPtr->isLoaded());
|
||||
}
|
||||
|
||||
void MemoryAccessLogView::handleLoadUnload(bool load) {
|
||||
std::shared_ptr<MemoryAccessLogController> controllerPtr = m_controller.lock();
|
||||
if (!controllerPtr) {
|
||||
return;
|
||||
}
|
||||
m_ui.filename->setText(controllerPtr->file());
|
||||
|
||||
if (load && controllerPtr->canExport()) {
|
||||
m_ui.exportButton->setEnabled(true);
|
||||
} else if (!load) {
|
||||
m_ui.exportButton->setEnabled(false);
|
||||
}
|
||||
|
||||
m_ui.load->setDisabled(load);
|
||||
m_ui.unload->setEnabled(load);
|
||||
m_ui.filename->setDisabled(load);
|
||||
m_ui.browse->setDisabled(load);
|
||||
}
|
||||
|
|
|
@ -18,12 +18,14 @@
|
|||
|
||||
namespace QGBA {
|
||||
|
||||
class MemoryAccessLogController;
|
||||
|
||||
class MemoryAccessLogView : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MemoryAccessLogView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);
|
||||
~MemoryAccessLogView();
|
||||
MemoryAccessLogView(std::weak_ptr<MemoryAccessLogController> controller, QWidget* parent = nullptr);
|
||||
~MemoryAccessLogView() = default;
|
||||
|
||||
private slots:
|
||||
void updateRegion(const QString& internalName, bool enable);
|
||||
|
@ -32,22 +34,19 @@ private slots:
|
|||
void start();
|
||||
void stop();
|
||||
|
||||
void load();
|
||||
void unload();
|
||||
|
||||
void exportFile();
|
||||
|
||||
signals:
|
||||
void loggingChanged(bool active);
|
||||
void handleStartStop(bool start);
|
||||
void handleLoadUnload(bool load);
|
||||
|
||||
private:
|
||||
Ui::MemoryAccessLogView m_ui;
|
||||
|
||||
std::shared_ptr<CoreController> m_controller;
|
||||
QSet<QString> m_watchedRegions;
|
||||
std::weak_ptr<MemoryAccessLogController> m_controller;
|
||||
QHash<QString, QCheckBox*> m_regionBoxes;
|
||||
QHash<QString, int> m_regionMapping;
|
||||
struct mDebuggerAccessLogger m_logger{};
|
||||
bool m_active = false;
|
||||
|
||||
mDebuggerAccessLogRegionFlags activeFlags() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>385</width>
|
||||
<height>380</height>
|
||||
<width>311</width>
|
||||
<height>387</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -22,25 +22,25 @@
|
|||
<property name="title">
|
||||
<string>Log file</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_2" columnstretch="3,1,2">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="filename"/>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="browse">
|
||||
<property name="text">
|
||||
<string>Browse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QCheckBox" name="logExtra">
|
||||
<property name="text">
|
||||
<string>Log additional information (uses 3× space)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<item row="2" column="0" colspan="3">
|
||||
<widget class="QCheckBox" name="loadExisting">
|
||||
<property name="text">
|
||||
<string>Load existing file if present</string>
|
||||
|
@ -50,6 +50,23 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="load">
|
||||
<property name="text">
|
||||
<string>Load</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QPushButton" name="unload">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Unload</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -124,9 +141,43 @@
|
|||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>load</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>QGBA::MemoryAccessLogView</receiver>
|
||||
<slot>load()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>81</x>
|
||||
<y>152</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>192</x>
|
||||
<y>189</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>unload</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>QGBA::MemoryAccessLogView</receiver>
|
||||
<slot>unload()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>226</x>
|
||||
<y>152</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>192</x>
|
||||
<y>189</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<slots>
|
||||
<slot>start()</slot>
|
||||
<slot>stop()</slot>
|
||||
<slot>load()</slot>
|
||||
<slot>unload()</slot>
|
||||
</slots>
|
||||
</ui>
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "MemoryView.h"
|
||||
|
||||
#include "CoreController.h"
|
||||
#include "MemoryAccessLogView.h"
|
||||
#include "MemoryDump.h"
|
||||
|
||||
#include <mgba/core/core.h>
|
||||
|
@ -107,6 +108,9 @@ QValidator::State IntValidator::validate(QString& input, int&) const {
|
|||
MemoryView::MemoryView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||
: QWidget(parent)
|
||||
, m_controller(controller)
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
, m_malModel(controller->memoryAccessLogController(), controller->platform())
|
||||
#endif
|
||||
{
|
||||
m_ui.setupUi(this);
|
||||
|
||||
|
@ -133,20 +137,10 @@ MemoryView::MemoryView(std::shared_ptr<CoreController> controller, QWidget* pare
|
|||
}
|
||||
}
|
||||
|
||||
connect(m_ui.width8, &QAbstractButton::clicked, [this]() {
|
||||
m_ui.hexfield->setAlignment(1);
|
||||
m_sintValidator.setWidth(1);
|
||||
m_uintValidator.setWidth(1);
|
||||
});
|
||||
connect(m_ui.width16, &QAbstractButton::clicked, [this]() {
|
||||
m_ui.hexfield->setAlignment(2);
|
||||
m_sintValidator.setWidth(2);
|
||||
m_uintValidator.setWidth(2);
|
||||
});
|
||||
connect(m_ui.width32, &QAbstractButton::clicked, [this]() {
|
||||
m_ui.hexfield->setAlignment(4);
|
||||
m_sintValidator.setWidth(4);
|
||||
m_uintValidator.setWidth(4);
|
||||
connect(m_ui.width, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [this](int index) {
|
||||
m_ui.hexfield->setAlignment(1 << index);
|
||||
m_sintValidator.setWidth(1 << index);
|
||||
m_uintValidator.setWidth(1 << index);
|
||||
});
|
||||
connect(m_ui.setAddress, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
|
||||
this, static_cast<void (MemoryView::*)(uint32_t)>(&MemoryView::jumpToAddress));
|
||||
|
@ -199,6 +193,22 @@ MemoryView::MemoryView(std::shared_ptr<CoreController> controller, QWidget* pare
|
|||
}
|
||||
update();
|
||||
});
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
connect(m_ui.hexfield, &MemoryModel::selectionChanged, &m_malModel, &MemoryAccessLogModel::updateSelection);
|
||||
connect(m_ui.segments, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
|
||||
&m_malModel, &MemoryAccessLogModel::setSegment);
|
||||
connect(m_ui.accessLoggerButton, &QAbstractButton::clicked, this, [this]() {
|
||||
std::weak_ptr<MemoryAccessLogController> controller = m_controller->memoryAccessLogController();
|
||||
MemoryAccessLogView* view = new MemoryAccessLogView(controller);
|
||||
connect(m_controller.get(), &CoreController::stopping, view, &QWidget::close);
|
||||
view->setAttribute(Qt::WA_DeleteOnClose);
|
||||
view->show();
|
||||
});
|
||||
m_ui.accessLog->setModel(&m_malModel);
|
||||
#else
|
||||
m_ui.accessLog->hide();
|
||||
#endif
|
||||
}
|
||||
|
||||
void MemoryView::setIndex(int index) {
|
||||
|
@ -216,6 +226,10 @@ void MemoryView::setIndex(int index) {
|
|||
m_ui.segmentColon->setVisible(info.maxSegment > 0);
|
||||
m_ui.segments->setMaximum(info.maxSegment);
|
||||
m_ui.hexfield->setRegion(info.start, info.end - info.start, info.shortName);
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
m_malModel.setRegion(info.start, info.segmentStart - info.start, info.maxSegment > 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MemoryView::setSegment(int segment) {
|
||||
|
@ -258,7 +272,7 @@ void MemoryView::updateStatus() {
|
|||
mCore* core = m_controller->thread()->core;
|
||||
QByteArray selection(m_ui.hexfield->serialize());
|
||||
QString text(m_ui.hexfield->decodeText(selection));
|
||||
m_ui.stringVal->setText(text);
|
||||
m_ui.stringVal->setPlainText(text);
|
||||
|
||||
if (m_selection.first & (align - 1) || m_selection.second - m_selection.first != align) {
|
||||
m_ui.sintVal->clear();
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <QValidator>
|
||||
|
||||
#include "MemoryModel.h"
|
||||
#include "MemoryAccessLogModel.h"
|
||||
|
||||
#include "ui_MemoryView.h"
|
||||
|
||||
|
@ -54,6 +55,10 @@ private:
|
|||
std::shared_ptr<CoreController> m_controller;
|
||||
QPair<uint32_t, uint32_t> m_region;
|
||||
QPair<uint32_t, uint32_t> m_selection;
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
MemoryAccessLogModel m_malModel;
|
||||
#endif
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -6,167 +6,14 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>874</width>
|
||||
<height>900</height>
|
||||
<width>708</width>
|
||||
<height>549</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Memory</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="regions"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Inspect Address:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="segments">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="displayIntegerBase">
|
||||
<number>16</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="segmentColon">
|
||||
<property name="text">
|
||||
<string notr="true">:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="setAddress">
|
||||
<property name="accelerated">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="prefix">
|
||||
<string notr="true">0x</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>268435455</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>16</number>
|
||||
</property>
|
||||
<property name="displayIntegerBase">
|
||||
<number>16</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Set Alignment:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="width8">
|
||||
<property name="text">
|
||||
<string>&1 Byte</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="width16">
|
||||
<property name="text">
|
||||
<string>&2 Bytes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="width32">
|
||||
<property name="text">
|
||||
<string>&4 Bytes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7" stretch="1,0">
|
||||
<item>
|
||||
<widget class="QGBA::MemoryModel" name="hexfield" native="true">
|
||||
<property name="sizePolicy">
|
||||
|
@ -175,127 +22,296 @@
|
|||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>200</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<layout class="QVBoxLayout" name="sidebarLayout" stretch="0,0,0,1,0,1">
|
||||
<item>
|
||||
<widget class="QComboBox" name="regions"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="addressLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<widget class="QLabel" name="address">
|
||||
<property name="text">
|
||||
<string>Unsigned Integer:</string>
|
||||
<string>Address:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="uintVal">
|
||||
<property name="maxLength">
|
||||
<number>10</number>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="segments">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="displayIntegerBase">
|
||||
<number>16</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="segmentColon">
|
||||
<property name="text">
|
||||
<string notr="true">:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="setAddress">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="accelerated">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="prefix">
|
||||
<string notr="true">0x</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>268435455</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>16</number>
|
||||
</property>
|
||||
<property name="displayIntegerBase">
|
||||
<number>16</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="alignmentLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="alignmentLabel">
|
||||
<property name="text">
|
||||
<string>Signed Integer:</string>
|
||||
<string>Alignment:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="sintVal">
|
||||
<property name="maxLength">
|
||||
<number>11</number>
|
||||
<widget class="QComboBox" name="width">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>1 Byte</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>2 Bytes</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>4 Bytes</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="data">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="sintLabel">
|
||||
<property name="text">
|
||||
<string>Signed:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="sintVal">
|
||||
<property name="maxLength">
|
||||
<number>11</number>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="uintLabel">
|
||||
<property name="text">
|
||||
<string>Unsigned:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="uintVal">
|
||||
<property name="maxLength">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="stringLabel">
|
||||
<property name="text">
|
||||
<string>String:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" alignment="Qt::AlignRight">
|
||||
<widget class="QPushButton" name="loadTBL">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Load TBL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QPlainTextEdit" name="stringVal">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="plainText">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="buttons">
|
||||
<item row="0" column="0">
|
||||
<widget class="QPushButton" name="copy">
|
||||
<property name="text">
|
||||
<string>Copy Selection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="save">
|
||||
<property name="text">
|
||||
<string>Save Selection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="paste">
|
||||
<property name="text">
|
||||
<string>Paste</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="saveRange">
|
||||
<property name="text">
|
||||
<string>Save Range</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="load">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Load</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>String:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="stringVal">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="loadTBL">
|
||||
<property name="text">
|
||||
<string>Load TBL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QPushButton" name="copy">
|
||||
<property name="text">
|
||||
<string>Copy Selection</string>
|
||||
<widget class="QGroupBox" name="verticalGroupBox_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="paste">
|
||||
<property name="text">
|
||||
<string>Paste</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="save">
|
||||
<property name="text">
|
||||
<string>Save Selection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="saveRange">
|
||||
<property name="text">
|
||||
<string>Save Range</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="load">
|
||||
<property name="text">
|
||||
<string>Load</string>
|
||||
<property name="title">
|
||||
<string>Selected address accesses</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTreeView" name="accessLog">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="textElideMode">
|
||||
<enum>Qt::ElideNone</enum>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="accessLoggerButton">
|
||||
<property name="text">
|
||||
<string>Logging configuration</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -310,23 +326,6 @@
|
|||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>regions</tabstop>
|
||||
<tabstop>segments</tabstop>
|
||||
<tabstop>setAddress</tabstop>
|
||||
<tabstop>width8</tabstop>
|
||||
<tabstop>width16</tabstop>
|
||||
<tabstop>width32</tabstop>
|
||||
<tabstop>sintVal</tabstop>
|
||||
<tabstop>uintVal</tabstop>
|
||||
<tabstop>stringVal</tabstop>
|
||||
<tabstop>loadTBL</tabstop>
|
||||
<tabstop>copy</tabstop>
|
||||
<tabstop>paste</tabstop>
|
||||
<tabstop>save</tabstop>
|
||||
<tabstop>saveRange</tabstop>
|
||||
<tabstop>load</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
|
@ -120,6 +120,10 @@ Window::Window(CoreManager* manager, ConfigController* config, int playerId, QWi
|
|||
i = m_savedScale;
|
||||
}
|
||||
#ifdef USE_SQLITE3
|
||||
QPushButton* m_AddDirText = new QPushButton("Click to add a directory to the library", this);
|
||||
m_AddDirText->connect(m_AddDirText, &QPushButton::clicked, [this] { addDirToLibrary();
|
||||
});
|
||||
m_AddDirText->setFixedSize(150 ,50);
|
||||
m_libraryView = new LibraryController(nullptr, ConfigController::configDir() + "/library.sqlite3", m_config);
|
||||
ConfigOption* showLibrary = m_config->addOption("showLibrary");
|
||||
showLibrary->connect([this](const QVariant& value) {
|
||||
|
@ -972,7 +976,12 @@ void Window::gameStopped() {
|
|||
#endif
|
||||
}
|
||||
|
||||
m_controller.reset();
|
||||
std::shared_ptr<CoreController> controller;
|
||||
m_controller.swap(controller);
|
||||
QTimer::singleShot(0, this, [controller]() {
|
||||
// Destroy the controller after everything else has cleaned up
|
||||
Q_UNUSED(controller);
|
||||
});
|
||||
detachWidget();
|
||||
updateTitle();
|
||||
|
||||
|
@ -1767,7 +1776,12 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
addGameAction(tr("View &I/O registers..."), "ioViewer", openControllerTView<IOViewer>(), "stateViews");
|
||||
|
||||
#ifdef ENABLE_DEBUGGERS
|
||||
addGameAction(tr("Log memory &accesses..."), "memoryAccessView", openControllerTView<MemoryAccessLogView>(), "tools");
|
||||
addGameAction(tr("Log memory &accesses..."), "memoryAccessView", [this]() {
|
||||
std::weak_ptr<MemoryAccessLogController> controller = m_controller->memoryAccessLogController();
|
||||
MemoryAccessLogView* view = new MemoryAccessLogView(controller);
|
||||
connect(m_controller.get(), &CoreController::stopping, view, &QWidget::close);
|
||||
openView(view);
|
||||
}, "tools");
|
||||
#endif
|
||||
|
||||
#if defined(USE_FFMPEG) && defined(M_CORE_GBA)
|
||||
|
@ -2150,11 +2164,6 @@ void Window::setController(CoreController* controller, const QString& fname) {
|
|||
connect(m_controller.get(), &CoreController::started, this, &Window::gameStarted);
|
||||
connect(m_controller.get(), &CoreController::started, GBAApp::app(), &GBAApp::suspendScreensaver);
|
||||
connect(m_controller.get(), &CoreController::stopping, this, &Window::gameStopped);
|
||||
{
|
||||
connect(m_controller.get(), &CoreController::stopping, [this]() {
|
||||
m_controller.reset();
|
||||
});
|
||||
}
|
||||
connect(m_controller.get(), &CoreController::stopping, GBAApp::app(), &GBAApp::resumeScreensaver);
|
||||
connect(m_controller.get(), &CoreController::paused, this, &Window::updateFrame);
|
||||
|
||||
|
|
|
@ -155,7 +155,8 @@ void LibraryController::refresh() {
|
|||
|
||||
mLibraryListing listing;
|
||||
mLibraryListingInit(&listing, 0);
|
||||
mLibraryGetEntries(m_library.get(), &listing, 0, 0, nullptr);
|
||||
size_t entries = mLibraryGetEntries(m_library.get(), &listing, 0, 0, nullptr);
|
||||
setVisible(!entries == 0);
|
||||
for (size_t i = 0; i < mLibraryListingSize(&listing); i++) {
|
||||
LibraryEntry entry = mLibraryListingGetConstPointer(&listing, i);
|
||||
if (!m_entries.contains(entry.fullpath)) {
|
||||
|
|
|
@ -387,48 +387,48 @@ Download-Größe: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>r%1-%2 %3 zurücksetzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Zurückspulen ist derzeit nicht aktiviert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Spiel zurücksetzen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>Die meisten Spiele müssen zurückgesetzt werden, um einen neuen Spielstand zu laden. Möchtest Du das Spiel jetzt zurücksetzen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Fehler beim Öffnen der Speicherdatei: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Fehler beim Öffnen der Spieldatei: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Das GamePak kann nur auf unterstützten Plattformen herausgezogen werden!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Download-Größe: %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Download-Größe: %3</translation>
|
|||
<translation type="unfinished">Stopp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6187,7 +6191,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>ROM ersetzen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Lesegerät-Kartenbild in Rohdaten umwandeln …</translation>
|
||||
</message>
|
||||
|
@ -6498,7 +6502,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Leeren</translation>
|
||||
</message>
|
||||
|
@ -6714,77 +6718,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>&I/O-Register betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Video-Protokoll aufzeichnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Aufzeichnen des Video-Protokolls beenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Vollbildmodus beenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>GameShark-Taste (gehalten)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Autofeuer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Autofeuer A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Autofeuer B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Autofeuer L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Autofeuer R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Autofeuer Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Autofeuer Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Autofeuer nach oben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Autofeuer rechts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Autofeuer nach unten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Autofeuer links</translation>
|
||||
</message>
|
||||
|
|
|
@ -381,48 +381,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -3397,6 +3397,15 @@ Download size: %3</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3445,18 +3454,13 @@ Download size: %3</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6230,7 +6234,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6701,82 +6705,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Tamaño de descarga: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Reiniciar r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Rebobinado desactivado actualmente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>¿Reiniciar el juego?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>La mayoría de juegos requieren reiniciar para cargar la nueva partida guardada. ¿Quieres reiniciar ahora?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Error al abrir el archivo de guardado: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Error al abrir el archivo del juego: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>¡No se puede quitar el cartucho en esta plataforma!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Error al leer del archivo de captura: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Error al escribir al archivo de captura: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Tamaño de descarga: %3</translation>
|
|||
<translation>Gráficos de red portátiles (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">Error al abrir el archivo de registro de memoria</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Tamaño de descarga: %3</translation>
|
|||
<translation>Detener</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>Error al abrir el archivo de registro de memoria</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>Seleccionar archivo de registro de acceso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>Archivos de registro de memoria (*.mal)</translation>
|
||||
</message>
|
||||
|
@ -3829,12 +3833,12 @@ Tamaño de descarga: %3</translation>
|
|||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="407"/>
|
||||
<source>Clearing invalid save ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Borrando identificador de guardado inválido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="416"/>
|
||||
<source>Clearing invalid preferred ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Borrando identificador inválido preferido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="437"/>
|
||||
|
@ -4367,7 +4371,7 @@ Tamaño de descarga: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="23"/>
|
||||
<source>File information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Información de archivo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="29"/>
|
||||
|
@ -4377,12 +4381,12 @@ Tamaño de descarga: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="83"/>
|
||||
<source>MD5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>MD5</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="117"/>
|
||||
<source>ROM header</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Cabecera de ROM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="123"/>
|
||||
|
@ -4857,7 +4861,9 @@ Tamaño de descarga: %3</translation>
|
|||
<source>Shaders are not supported when the display driver is not OpenGL.
|
||||
|
||||
If it is set to OpenGL and you still see this, your graphics card or drivers may be too old.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Los shader no están disponibles cuando el controlador de pantalla no es OpenGL.
|
||||
|
||||
Si está configurado como OpenGL y estás viendo esto, tu tarjeta gráfica o controladores son demasiado antiguos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.cpp" line="416"/>
|
||||
|
@ -5666,17 +5672,17 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="92"/>
|
||||
<source>mGBA Shaders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Shaders de mGBA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>Error loading shader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Error al cargar shader</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>The shader "%1" could not be loaded successfully.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>El shader "%1" falló al cargarse.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="145"/>
|
||||
|
@ -6222,7 +6228,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Sensores del cartucho...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Limpiar</translation>
|
||||
</message>
|
||||
|
@ -6283,7 +6289,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Cargar partida guardada temporal...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Convertir imagen de tarjeta e-Reader a archivo en bruto...</translation>
|
||||
</message>
|
||||
|
@ -6714,77 +6720,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Registrar &accesoa la memoria…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Grabar registro de depuración de vídeo...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Detener registro de depuración de vídeo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Salir de pantalla completa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Botón GameShark (mantener)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Disparo automático</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Disparo automático A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Disparo automático B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Disparo automático L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Disparo automático R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Disparo automático Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Disparo automático Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Disparo automático arriba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Disparo automático derecha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Disparo automático abajo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Disparo automático izquierda</translation>
|
||||
</message>
|
||||
|
|
|
@ -388,48 +388,48 @@ Taille du téléchargement : %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Réinitialiser r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Le rembobinage n'est pas actuellement activé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Réinitialiser le jeu ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>La plupart des jeux nécessitent une réinitialisation pour charger la nouvelle sauvegarde. Voulez-vous réinitialiser maintenant ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Échec de l'ouverture du fichier de sauvegarde : %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Échec de l'ouverture du fichier de jeu : %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Échec de l'ouverture de l'instantané pour lire : %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Échec de l'ouverture de l'instantané pour écrire : %1</translation>
|
||||
</message>
|
||||
|
@ -3421,6 +3421,15 @@ Taille du téléchargement : %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3469,18 +3478,13 @@ Taille du téléchargement : %3</translation>
|
|||
<translation type="unfinished">Arrêter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6241,7 +6245,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6728,82 +6732,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Voir les registres d'&E/S...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Enregistrer le journal vidéo de débogage...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Arrêter le journal vidéo de débogage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Quitter le plein écran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Bouton GameShark (maintenir)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Tir automatique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Tir automatique A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Tir automatique B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Tir automatique L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Tir automatique R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Tir automatique Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Tir automatique Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Tir automatique Up</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Tir automatique Right</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Tir automatique Down</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Tir automatique Gauche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Vider</translation>
|
||||
</message>
|
||||
|
|
|
@ -388,48 +388,48 @@ Letöltendő adat: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Visszatekerés jelenleg nem engedélyezett</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Nem sikerült a mentésfájl megnyitása: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Nem sikerült a játékfájl megnyitása: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished">A játékkazettát nem lehet kirántani ismeretlen platformon!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation type="unfinished">A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation type="unfinished">A pillanatkép fájljának írásra való megnyitása sikertelen: %1</translation>
|
||||
</message>
|
||||
|
@ -3404,6 +3404,15 @@ Letöltendő adat: %3</translation>
|
|||
<translation type="unfinished">Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3452,18 +3461,13 @@ Letöltendő adat: %3</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6235,7 +6239,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6706,82 +6710,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation type="unfinished">Napló törlése</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Dimensione del download: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Reset r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>La funzione 'riavvolgi' non è attualmente abilitata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Riavviare il gioco?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>La maggior parte dei giochi richiede un riavvio per caricare il nuovo salvataggio. Vuoi riavviare ora?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Impossibile aprire il file di salvataggio: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Impossibile aprire il file di gioco: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Non riesco a strappare il pacchetto in una piattaforma inaspettata!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Impossibile aprire il file snapshot per la lettura: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Impossibile aprire il file snapshot per la scrittura: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Dimensione del download: %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">Impossibile aprire il file di registro della memoria</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Dimensione del download: %3</translation>
|
|||
<translation>Ferma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>Impossibile aprire il file di registro della memoria</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>Seleziona il file di registro di accesso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>Registri degli accessi alla memoria (*.mal)</translation>
|
||||
</message>
|
||||
|
@ -6187,7 +6191,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Scansiona e-Reader dotcode...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Converti immagini carte e-Reader in raw...</translation>
|
||||
</message>
|
||||
|
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Registra memoria &accessi...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Salva registro video di debug...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Ferma registro video di debug</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Esci da Schermo Intero</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Pulsante GameShark (tieni premuto)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Pulsanti Autofire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Autofire A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Autofire B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Autofire L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Autofire R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Autofire Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Autofire Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Autofire Su</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>AAutofire Destra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Autofire Giù</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Autofire Sinistra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Pulisci</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>セーブファイルを開けませんでした: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>ゲームファイルを開けませんでした: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>予期しないプラットフォームでパックをヤンクすることはできません!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>読み取り用のスナップショットファイルを開けませんでした: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>書き込み用のスナップショットファイルを開けませんでした: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Download size: %3</source>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Download size: %3</source>
|
|||
<translation type="unfinished">停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6225,7 +6229,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>カートリッジセンサー...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>消去</translation>
|
||||
</message>
|
||||
|
@ -6286,7 +6290,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6712,77 +6716,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>デバッグビデオログ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>デバッグビデオログを停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>全画面表示を終了</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>GameSharkボタン(押し)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>連打</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>連打 A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>連打 B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>連打 L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>連打 R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>連打 Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>連打 Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>連打 上</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>連打 右</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>連打 下</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>連打 左</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>r%1-%2 %3 재설정</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>현재 활성화되지 않은 되감기</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>게임을 재설정하겠습니까?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>대부분의 게임은 새로운 저장을 로드하려면 재설정이 필요합니다. 지금 재설정하겠습니까?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>저장 파일을 열지 못했습니다: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>게임 파일을 열지 못했습니다: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>예기치 않은 플랫폼에서 팩을 잡아당길 수 없습니다!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>읽기 용 스냅샷 파일을 열지 못했습니다: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>쓰기 용 스냅샷 파일을 열지 못했습니다: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Download size: %3</source>
|
|||
<translation>휴대용 네트워크 그래픽 (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">메모리 로그 파일을 열 수 없음</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Download size: %3</source>
|
|||
<translation>정지</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>메모리 로그 파일을 열 수 없음</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>접속 파일 선택</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>메모리 접속 로그 (*.mal)</translation>
|
||||
</message>
|
||||
|
@ -6215,7 +6219,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>게임 상태 보기</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>e-리더 카드 이미지를 원시 데이터로 변환...</translation>
|
||||
</message>
|
||||
|
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>메모리 및 접속 기록...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>디버그 비디오 로그 녹화...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>디버그 비디오 로그 중지</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>전체화면 종료</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>게임샤크 버튼 (누름)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>연사</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>연사 A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>연사 B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>연사 L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>연사 R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>연사 시작</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>연사 선택</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>지움</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>연사 위쪽</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>연사 오른쪽</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>연사 아래쪽</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>연사 왼쪽</translation>
|
||||
</message>
|
||||
|
|
|
@ -381,48 +381,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Gagal membuka fail tersimpan: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Gagal membuka fail permainan: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation type="unfinished">Gagal membuka fail snapshot untuk baca: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation type="unfinished">Gagal membuka fail snapshot untuk menulis: %1</translation>
|
||||
</message>
|
||||
|
@ -3397,6 +3397,15 @@ Download size: %3</source>
|
|||
<translation>Grafik Rangkaian Mudah Alih (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3445,18 +3454,13 @@ Download size: %3</source>
|
|||
<translation type="unfinished">Henti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6230,7 +6234,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6701,82 +6705,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Rakam log video nyahpepijat...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Henti log video nyahpepijat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Keluar skrinpenuh</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Butang GameShark (pegang)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Kosongkan</translation>
|
||||
</message>
|
||||
|
|
|
@ -385,48 +385,48 @@ Nedlastningsstørrelse: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Vil du starte spillet på nytt?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Klarte ikke å åpne spillfil: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -3401,6 +3401,15 @@ Nedlastningsstørrelse: %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3449,18 +3458,13 @@ Nedlastningsstørrelse: %3</translation>
|
|||
<translation type="unfinished">Stopp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6234,7 +6238,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Skann e-Reader-punktkoder...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6705,82 +6709,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Gå ut av fullskjerm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Tøm</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Rozmiar pobierania: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Reset r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Przewijanie nie jest obecnie włączone</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Zresetować grę?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>Większość gier wymaga zresetowania, aby wczytać nowy zapis. Czy chcesz teraz zresetować?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Nie udało się otworzyć pliku zapisu: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Nie udało się otworzyć pliku gry: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Nie można wyciągnąć pack na nieoczekiwanej platformie!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Nie udało się otworzyć pliku snapshot do odczytu: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Nie udało się otworzyć pliku snapshot do zapisu: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,17 +3403,26 @@ Rozmiar pobierania: %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">Błąd odczytu pliku logów pamięci</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="14"/>
|
||||
<source>Memory access logging</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Logowanie dostępu do pamięci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="23"/>
|
||||
<source>Log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Plik logów</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="32"/>
|
||||
|
@ -3423,7 +3432,7 @@ Rozmiar pobierania: %3</translation>
|
|||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="39"/>
|
||||
<source>Log additional information (uses 3× space)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Loguj dodatkowe informacje (używa 3× miejsca)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="46"/>
|
||||
|
@ -3433,12 +3442,12 @@ Rozmiar pobierania: %3</translation>
|
|||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="59"/>
|
||||
<source>Regions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Regiony</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="70"/>
|
||||
<source>Export ROM snapshot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Eksportuj zrzut ROMu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.ui" line="77"/>
|
||||
|
@ -3451,18 +3460,13 @@ Rozmiar pobierania: %3</translation>
|
|||
<translation type="unfinished">Stop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -4367,7 +4371,7 @@ Rozmiar pobierania: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="23"/>
|
||||
<source>File information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Informacje o pliku</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="29"/>
|
||||
|
@ -4377,12 +4381,12 @@ Rozmiar pobierania: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="83"/>
|
||||
<source>MD5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>MD5</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="117"/>
|
||||
<source>ROM header</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Nagłówek ROMu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="123"/>
|
||||
|
@ -4402,7 +4406,7 @@ Rozmiar pobierania: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="174"/>
|
||||
<source>Revision:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Rewizja:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="49"/>
|
||||
|
@ -5668,12 +5672,12 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="92"/>
|
||||
<source>mGBA Shaders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Shadery mGBA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>Error loading shader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Błąd wczytywania shaderu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
|
@ -6240,7 +6244,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Skanuj kody kropkowe czytnika e-Reader...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Konwertuj obraz karty czytnika e-Reader na surowy...</translation>
|
||||
</message>
|
||||
|
@ -6711,82 +6715,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Nagraj dziennik wideo debugowania...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Zatrzymaj dziennik wideo debugowania</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Wyłączyć tryb pełnoekranowy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Przycisk GameShark (przytrzymany)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Turbo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Turbo A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Turbo B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Turbo L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Turbo R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Turbo Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Turbo Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Turbo Góra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Turbo Prawo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Turbo Dół</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Turbo Lewo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Wyczyść</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Tamanho do download: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Resetar r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>O rebobinamento não está ativado atualmente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Resetar o jogo?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>A maioria dos jogos requerirão um reset pra carregar o novo save. Você quer resetar agora?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Falhou em abrir o arquivo do save: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Falhou em abrir o arquivo do jogo: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Falhou em abrir o arquivo do snapshot pra leitura: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Falhou em abrir o arquivo do snapshot pra gravação: %1</translation>
|
||||
</message>
|
||||
|
@ -3262,7 +3262,7 @@ Tamanho do download: %3</translation>
|
|||
<message>
|
||||
<location filename="../LogView.ui" line="48"/>
|
||||
<source>Info</source>
|
||||
<translation>Informações</translation>
|
||||
<translation>Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LogView.ui" line="58"/>
|
||||
|
@ -3403,6 +3403,15 @@ Tamanho do download: %3</translation>
|
|||
<translation>Gráficos Portáteis da Rede (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">Falhou em abrir o arquivo do registro da memória</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Tamanho do download: %3</translation>
|
|||
<translation>Parar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>Falhou em abrir o arquivo do registro da memória</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>Selecionar o arquivo de registro do acesso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>Registros de acesso a memória (*.mal)</translation>
|
||||
</message>
|
||||
|
@ -3829,12 +3833,12 @@ Tamanho do download: %3</translation>
|
|||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="407"/>
|
||||
<source>Clearing invalid save ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Limpando a ID inválida do save</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="416"/>
|
||||
<source>Clearing invalid preferred ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Limpando a ID inválida preferida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="437"/>
|
||||
|
@ -4367,7 +4371,7 @@ Tamanho do download: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="23"/>
|
||||
<source>File information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Informação do arquivo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="29"/>
|
||||
|
@ -4377,12 +4381,12 @@ Tamanho do download: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="83"/>
|
||||
<source>MD5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>MD5</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="117"/>
|
||||
<source>ROM header</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Cabeçalho da ROM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="123"/>
|
||||
|
@ -4857,7 +4861,9 @@ Tamanho do download: %3</translation>
|
|||
<source>Shaders are not supported when the display driver is not OpenGL.
|
||||
|
||||
If it is set to OpenGL and you still see this, your graphics card or drivers may be too old.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Os shaders não são suportados quando o driver de exibição não é OpenGL.
|
||||
|
||||
Se ele está definido como OpenGL e você ainda ver isto sua placa gráfica ou drivers podem ser muito antigos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.cpp" line="416"/>
|
||||
|
@ -5666,17 +5672,17 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="92"/>
|
||||
<source>mGBA Shaders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Shaders do mGBA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>Error loading shader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Erro ao carregar o shader</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>The shader "%1" could not be loaded successfully.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>O shader "%1" não pôde ser carregado com sucesso.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="145"/>
|
||||
|
@ -6222,7 +6228,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Sensores do Game Pak...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Limpar</translation>
|
||||
</message>
|
||||
|
@ -6283,7 +6289,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Carregar save temporário do jogo...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Converter a imagem do cartão do e-Reader pro natural...</translation>
|
||||
</message>
|
||||
|
@ -6714,77 +6720,77 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Registrar os acessos a &memória...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Gravar registro do vídeo de debug...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Parar o registro do vídeo de debug</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Sair da tela cheia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Botão do GameShark (pressionado)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Auto-disparar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Auto-disparar A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Auto-disparar B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Auto-disparar L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Auto-disparar R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Auto-disparar Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Auto-disparar Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Auto-disparar Pra Cima</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Auto-disparar Direita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Auto-disparar Pra Baixo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Auto-disparar Esquerda</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Tamanho da descarga: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Resetar r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>O rebobinamento não está ativado atualmente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Resetar o jogo?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>A maioria dos jogos requerirão um reset para carregar o novo save. Quer resetar agora?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Falha ao abrir o ficheiro dde gravação: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Falha ao abrir o ficheiro do jogo: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Não pode arrancar o pacote numa plataforma inesperada!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Falha ao abrir o ficheiro do snapshot para leitura: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Falha ao abrir o ficheiro do snapshot para gravação: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Tamanho da descarga: %3</translation>
|
|||
<translation>Gráficos Portáteis da Rede (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Tamanho da descarga: %3</translation>
|
|||
<translation type="unfinished">Parar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6238,7 +6242,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Escanear dotcodes do e-Reader...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Converter imagem do cartão do e-Reader para natural...</translation>
|
||||
</message>
|
||||
|
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Gravar registo do vídeo de debug...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Parar o registo do vídeo de debug</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Sair do ecrã inteiro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Botão do GameShark (segurado)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Auto-disparar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Auto-disparar A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Auto-disparar B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Auto-disparar L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Auto-disparar R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Auto-disparar Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Auto-disparar Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Auto-disparar Para Cima</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Auto-disparar Direita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Auto-disparar Para Baixo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Auto-disparar Esquerda</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Limpar</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Сброс r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>Обратная перемотка выключена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Перезагрузить игру?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>Большинству игр нужна перезагрузка, чтобы загрузить новое сохранение. Перезагрузить сейчас?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Не удалось открыть файл сохранения: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Не удалось открыть файл игры: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Невозможно пнуть картридж на неожиданной платформе!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Не удалось открыть файл изображения для считывания: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Не удалось открыть файл изображения для записи: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Download size: %3</source>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Download size: %3</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6240,7 +6244,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Сканировать dot-коды e-Reader...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Конвертировать карту e-Reader в raw...</translation>
|
||||
</message>
|
||||
|
@ -6711,82 +6715,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Запись отладочного видеожурнала...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Закончить запись отладочного видеожурнала</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Выйти из полноэкранного режима</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>Кнопка GameShark (удерживается)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Автострельба</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>A (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>B (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>L (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>R (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Start (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Select (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Вверх (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Вправо (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Вниз (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Влево (автострельба)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Очистить</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Hämtningsstorlek: %3</translation>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>Starta om r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Starta om spelet?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>De flesta spel kommer att kräva en omstart för att läsa in ny sparning. Vill du starta om nu?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Misslyckades med att öppna sparad fil: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Misslyckades med att öppna spelfil: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Misslyckades med att öppna ögonblicksfil för läsning: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Misslyckades med att öppna ögonblicksfil för skrivning: %1</translation>
|
||||
</message>
|
||||
|
@ -1158,7 +1158,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<location filename="../IOViewer.cpp" line="870"/>
|
||||
<location filename="../IOViewer.cpp" line="883"/>
|
||||
<source>B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="39"/>
|
||||
|
@ -2742,13 +2742,13 @@ Hämtningsstorlek: %3</translation>
|
|||
<location filename="../IOViewer.cpp" line="1094"/>
|
||||
<location filename="../IOViewer.cpp" line="1555"/>
|
||||
<source>Serial</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Serienummer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1095"/>
|
||||
<location filename="../IOViewer.cpp" line="1556"/>
|
||||
<source>Joypad</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Joypad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1202"/>
|
||||
|
@ -2902,28 +2902,28 @@ Hämtningsstorlek: %3</translation>
|
|||
<location filename="../IOViewer.cpp" line="1387"/>
|
||||
<location filename="../IOViewer.cpp" line="1394"/>
|
||||
<source>Color 0 shade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Färg 0-skugga</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1381"/>
|
||||
<location filename="../IOViewer.cpp" line="1388"/>
|
||||
<location filename="../IOViewer.cpp" line="1395"/>
|
||||
<source>Color 1 shade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Färg 1-skugga</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1382"/>
|
||||
<location filename="../IOViewer.cpp" line="1389"/>
|
||||
<location filename="../IOViewer.cpp" line="1396"/>
|
||||
<source>Color 2 shade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Färg 2-skugga</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1383"/>
|
||||
<location filename="../IOViewer.cpp" line="1390"/>
|
||||
<location filename="../IOViewer.cpp" line="1397"/>
|
||||
<source>Color 3 shade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Färg 3-skugga</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1411"/>
|
||||
|
@ -2938,7 +2938,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1418"/>
|
||||
<source>VRAM bank</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>VRAM-bank</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../IOViewer.cpp" line="1440"/>
|
||||
|
@ -3348,7 +3348,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<location filename="../MapView.cpp" line="52"/>
|
||||
<location filename="../MapView.cpp" line="64"/>
|
||||
<source>Offset</source>
|
||||
<translation type="unfinished">Förskjut</translation>
|
||||
<translation>Marginal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MapView.cpp" line="53"/>
|
||||
|
@ -3403,6 +3403,15 @@ Hämtningsstorlek: %3</translation>
|
|||
<translation>Portable Network Graphics (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">Misslyckades med att öppna minnesloggfil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Hämtningsstorlek: %3</translation>
|
|||
<translation>Stoppa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>Misslyckades med att öppna minnesloggfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>Välj åtkomstloggfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>Minnesåtkomstloggar (*.mal)</translation>
|
||||
</message>
|
||||
|
@ -3482,7 +3486,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../MemoryDump.ui" line="76"/>
|
||||
<source>Byte Count:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Antal byte:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryDump.ui" line="108"/>
|
||||
|
@ -4030,7 +4034,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../OverrideView.ui" line="20"/>
|
||||
<source>Game Overrides</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Spelförbättringar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../OverrideView.ui" line="30"/>
|
||||
|
@ -4118,7 +4122,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../OverrideView.ui" line="190"/>
|
||||
<source>Game Boy Player features</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Game Boy Player-funktioner</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../OverrideView.ui" line="197"/>
|
||||
|
@ -4138,7 +4142,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../OverrideView.ui" line="249"/>
|
||||
<source>Memory bank controller</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Minnesbankskontroller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../OverrideView.ui" line="265"/>
|
||||
|
@ -4148,12 +4152,12 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../OverrideView.ui" line="352"/>
|
||||
<source>Sprite Colors 1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Spritefärger 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../OverrideView.ui" line="359"/>
|
||||
<source>Sprite Colors 2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Spritefärger 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../OverrideView.ui" line="529"/>
|
||||
|
@ -4367,7 +4371,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="23"/>
|
||||
<source>File information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Filinformation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="29"/>
|
||||
|
@ -4377,12 +4381,12 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../ROMInfo.ui" line="83"/>
|
||||
<source>MD5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>MD5</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="117"/>
|
||||
<source>ROM header</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>ROM-header</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ROMInfo.ui" line="123"/>
|
||||
|
@ -4440,7 +4444,7 @@ Hämtningsstorlek: %3</translation>
|
|||
<message>
|
||||
<location filename="../ReportView.ui" line="67"/>
|
||||
<source><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></source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation><html><head/><body><p>För att rapportera en bugg eller fel så måste du generera en rapportfil att lägga till i felrapporten som du håller på att skicka in. Det rekommenderas att du inkluderar sparade filer eftersom dessa hjälper till att felsöka problem. Detta kommer att samla in viss information om versionen av {projectName} som du använder, din konfiguration, din dator samt spelet som du för närvarande har öppet (om något). När detta har samlats in så kan du granska all information nedan och spara det till en zip-fil. Personlig information kommer att undantas från den samlade informationen om det går, så som ditt användarnamn om det finns i någon sökväg, men du kan även redigera det i efterhand. Efter att du har genererat och sparat det, klicka på knappen nedan eller gå till <a href="https://mgba.io/i/"><span style=" text-decoration: underline; color:#2980b9;">mgba.io/i</span></a> för att skicka in felrapporten på GitHub. Försäkra dig om att lägga till rapporten som du genererat!</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ReportView.ui" line="85"/>
|
||||
|
@ -4779,13 +4783,13 @@ Hämtningsstorlek: %3</translation>
|
|||
<location filename="../SensorView.ui" line="187"/>
|
||||
<location filename="../SensorView.ui" line="276"/>
|
||||
<source>Set Y</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ställ in Y</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SensorView.ui" line="197"/>
|
||||
<location filename="../SensorView.ui" line="286"/>
|
||||
<source>Set X</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ställ in X</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SensorView.ui" line="268"/>
|
||||
|
@ -5122,7 +5126,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="475"/>
|
||||
<source>FPS target:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Bilder/s:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="500"/>
|
||||
|
@ -5350,7 +5354,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="582"/>
|
||||
<source>Periodically autosave state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Autospara tillstånd periodiskt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="855"/>
|
||||
|
@ -5360,7 +5364,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="897"/>
|
||||
<source>Show frame count in OSD</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Visa bilder/s i OSD</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="904"/>
|
||||
|
@ -5370,7 +5374,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="941"/>
|
||||
<source>Custom border:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Anpassad ram:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1059"/>
|
||||
|
@ -5381,32 +5385,32 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<location filename="../SettingsView.ui" line="1090"/>
|
||||
<location filename="../SettingsView.ui" line="1133"/>
|
||||
<source>Unbounded</source>
|
||||
<translation type="unfinished">Obunden</translation>
|
||||
<translation>Obunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1102"/>
|
||||
<source>Fast forward (held) speed:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Hastighet för snabbspolning (håll):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1145"/>
|
||||
<source>Autofire interval:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Intervall för autofire:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1169"/>
|
||||
<source>Enable rewind</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Aktivera tillbakaspolning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1176"/>
|
||||
<source>Rewind history:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Historik för tillbakaspolning:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1201"/>
|
||||
<source>Rewind speed:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Hastighet för tillbakaspolning:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1238"/>
|
||||
|
@ -5436,7 +5440,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="609"/>
|
||||
<source>Save state extra data:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Extradata för sparade tillstånd:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="626"/>
|
||||
|
@ -5447,7 +5451,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="653"/>
|
||||
<source>Load state extra data:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Extradata för inlästa tillstånd:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1805"/>
|
||||
|
@ -5647,7 +5651,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="1861"/>
|
||||
<source>Super Game Boy borders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Super Game Boy-ramar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -5666,17 +5670,17 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="92"/>
|
||||
<source>mGBA Shaders</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>mGBA-shaders</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>Error loading shader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Fel vid inläsning av shader</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="123"/>
|
||||
<source>The shader "%1" could not be loaded successfully.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Shadern "%1" kunde inte läsas in korrekt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.cpp" line="145"/>
|
||||
|
@ -5726,7 +5730,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../ShaderSelector.ui" line="88"/>
|
||||
<source>Unload Shader</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Läs ur shader</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ShaderSelector.ui" line="95"/>
|
||||
|
@ -6035,7 +6039,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="449"/>
|
||||
<source>Select e-Reader dotcode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Välj e-Reader-punktkod</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="449"/>
|
||||
|
@ -6094,17 +6098,17 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1024"/>
|
||||
<source>Unimplemented BIOS call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ej implementerat BIOS-anrop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1025"/>
|
||||
<source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Detta spel använder ett BIOS-anrop som inte är implementerat. Använd ett officiellt BIOS för bästa upplevelse.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1047"/>
|
||||
<source>Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Misslyckades med att skapa en lämplig visningsenhet, faller tillbaka på programvaruvisning. Spel kan bli långsamma, speciellt med större fönster.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1145"/>
|
||||
|
@ -6238,7 +6242,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Skanna e-Reader-punktkoder...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>Konvertera e-Reader-kortavbilder till raw...</translation>
|
||||
</message>
|
||||
|
@ -6556,7 +6560,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1644"/>
|
||||
<source>Frame&skip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Hoppa över &bildrutor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1657"/>
|
||||
|
@ -6566,7 +6570,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1664"/>
|
||||
<source>FPS target</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Bilder/s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1672"/>
|
||||
|
@ -6621,7 +6625,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1706"/>
|
||||
<source>Game &overrides...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Spel&förbättringar...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1718"/>
|
||||
|
@ -6636,7 +6640,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1725"/>
|
||||
<source>Create forwarder...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Skapa forwarder...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1728"/>
|
||||
|
@ -6661,7 +6665,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../Window.cpp" line="1743"/>
|
||||
<source>Game state views</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Visa speltillstånd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1744"/>
|
||||
|
@ -6709,82 +6713,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>Logga minneså&tkomster...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Spela in felsökningsvideologg...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Stoppa felsökningsvideologg</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Avsluta helskärm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>GameShark-knapp (håll)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Autofire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire A</source>
|
||||
<translation>Autofire A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire B</source>
|
||||
<translation>Autofire B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire L</source>
|
||||
<translation>Autofire L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire R</source>
|
||||
<translation>Autofire R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Autofire Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Autofire Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Autofire upp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Autofire höger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Autofire ner</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Autofire vänster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Töm</translation>
|
||||
</message>
|
||||
|
|
|
@ -381,48 +381,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -3397,6 +3397,15 @@ Download size: %3</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3445,18 +3454,13 @@ Download size: %3</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6228,7 +6232,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6699,82 +6703,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Yeni sürüm: %2
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>Oyun sıfırlansım mı?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>Kayıt dosyası açılamadı: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>Oyun dosyası açılamadı: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>Beklenmedik bir platformda kartı çıkaramazsın!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Anlık görüntü dosyası okuma için açılamadı: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Anlık görüntü dosyası yazma için açılamadı: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Yeni sürüm: %2
|
|||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Yeni sürüm: %2
|
|||
<translation type="unfinished">Durdur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -6220,7 +6224,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>e-Okuyucu kart resimlerini rawa dönüştür...</translation>
|
||||
</message>
|
||||
|
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>&I/O kayıtlarını görüntüle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Hata ayıklama video günlüğünü kaydet...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Hata ayıklama video günlüğünü durdur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Tam ekrandan çık</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>GameShark Butonu (basılı tutun)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Otomatik basma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Otomatik basma A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Otomatik basma B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Otomatik basma L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Otomatik basma R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Otomatik basma Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Otomatik basma Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Otomatik basma Up</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Otomatik basma Right</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Otomatik basma Down</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Otomatik basma Sol</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>Temizle</translation>
|
||||
</message>
|
||||
|
|
|
@ -387,48 +387,48 @@ Download size: %3</source>
|
|||
<context>
|
||||
<name>QGBA::CoreController</name>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="103"/>
|
||||
<location filename="../CoreController.cpp" line="104"/>
|
||||
<source>Reset r%1-%2 %3</source>
|
||||
<translation>重置 r%1-%2 %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="536"/>
|
||||
<location filename="../CoreController.cpp" line="553"/>
|
||||
<location filename="../CoreController.cpp" line="550"/>
|
||||
<location filename="../CoreController.cpp" line="567"/>
|
||||
<source>Rewinding not currently enabled</source>
|
||||
<translation>当前未开启倒带</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="592"/>
|
||||
<location filename="../CoreController.cpp" line="606"/>
|
||||
<source>Reset the game?</source>
|
||||
<translation>要重置游戏吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="593"/>
|
||||
<location filename="../CoreController.cpp" line="607"/>
|
||||
<source>Most games will require a reset to load the new save. Do you want to reset now?</source>
|
||||
<translation>大多数游戏需要重置才能加载新的存档。您要立即重启吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="808"/>
|
||||
<location filename="../CoreController.cpp" line="822"/>
|
||||
<source>Failed to open save file: %1</source>
|
||||
<translation>打开存档失败: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="866"/>
|
||||
<location filename="../CoreController.cpp" line="880"/>
|
||||
<source>Failed to open game file: %1</source>
|
||||
<translation>打开游戏文件失败: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="896"/>
|
||||
<location filename="../CoreController.cpp" line="910"/>
|
||||
<source>Can't yank pack in unexpected platform!</source>
|
||||
<translation>无法在意外平台上抽出卡带!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1011"/>
|
||||
<location filename="../CoreController.cpp" line="1025"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>读取快照文件失败: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="1028"/>
|
||||
<location filename="../CoreController.cpp" line="1042"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>写入快照文件失败: %1</translation>
|
||||
</message>
|
||||
|
@ -3403,6 +3403,15 @@ Download size: %3</source>
|
|||
<translation>便携式网络图形 (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogController</name>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="66"/>
|
||||
<location filename="../MemoryAccessLogController.cpp" line="76"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation type="unfinished">打开内存日志文件失败</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QGBA::MemoryAccessLogView</name>
|
||||
<message>
|
||||
|
@ -3451,18 +3460,13 @@ Download size: %3</source>
|
|||
<translation>停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="82"/>
|
||||
<source>Failed to open memory log file</source>
|
||||
<translation>打开内存日志文件失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="135"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="93"/>
|
||||
<source>Select access log file</source>
|
||||
<translation>选择访问日志文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="116"/>
|
||||
<location filename="../MemoryAccessLogView.cpp" line="78"/>
|
||||
<source>Memory access logs (*.mal)</source>
|
||||
<translation>内存访问日志(*.mal)</translation>
|
||||
</message>
|
||||
|
@ -3829,17 +3833,17 @@ Download size: %3</source>
|
|||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="407"/>
|
||||
<source>Clearing invalid save ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>清理非法存档ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="416"/>
|
||||
<source>Clearing invalid preferred ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>清理非法优先ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="437"/>
|
||||
<source>Trying to get player ID for a multiplayer player that's not attached</source>
|
||||
<translation>尝试获取未连接的多人玩家的 ID</translation>
|
||||
<translation>尝试获取多人联机中未连接上的玩家ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MultiplayerController.cpp" line="451"/>
|
||||
|
@ -6236,7 +6240,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>扫描 e-Reader 点码...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1775"/>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<source>Convert e-Reader card image to raw...</source>
|
||||
<translation>将 e-Reader 卡片图像转换为原始数据...</translation>
|
||||
</message>
|
||||
|
@ -6707,82 +6711,82 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<translation>记录内存访问(&a)...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1779"/>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>记录调试视频日志...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1780"/>
|
||||
<location filename="../Window.cpp" line="1785"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>停止记录调试视频日志</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1784"/>
|
||||
<location filename="../Window.cpp" line="1789"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>退出全屏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1786"/>
|
||||
<location filename="../Window.cpp" line="1791"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>GameShark 键 (长按)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1792"/>
|
||||
<location filename="../Window.cpp" line="1797"/>
|
||||
<source>Autofire</source>
|
||||
<translation>连发</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1793"/>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>连发 A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1798"/>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>连发 B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1803"/>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>连发 L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1808"/>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>连发 R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1813"/>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>连发 Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1818"/>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>连发 Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1823"/>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>连发 上</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1828"/>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>连发 右</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1833"/>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>连发 下</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1838"/>
|
||||
<location filename="../Window.cpp" line="1843"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>连发 左</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="2043"/>
|
||||
<location filename="../Window.cpp" line="2048"/>
|
||||
<source>Clear</source>
|
||||
<translation>清除</translation>
|
||||
</message>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -130,6 +130,7 @@ int main(int argc, char** argv) {
|
|||
mDebuggerAccessLoggerInit(&accessLog);
|
||||
mDebuggerAttachModule(&debugger, &accessLog.d);
|
||||
mDebuggerAccessLoggerOpen(&accessLog, vf, O_RDWR);
|
||||
mDebuggerAccessLoggerStart(&accessLog);
|
||||
hasDebugger = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ static void _checkWatchpoints(struct SM83Debugger* debugger, uint16_t address, e
|
|||
info.type.wp.newValue = newValue;
|
||||
info.type.wp.watchType = watchpoint->type;
|
||||
info.type.wp.accessType = type;
|
||||
info.type.wp.accessSource = debugger->cpu->memory.accessSource;
|
||||
info.address = address;
|
||||
info.segment = debugger->originalMemory.currentSegment(debugger->cpu, address);
|
||||
info.width = 1;
|
||||
|
|
Loading…
Reference in New Issue